aboutsummaryrefslogtreecommitdiff
path: root/src/SpecificGen
diff options
context:
space:
mode:
authorGravatar Jason Gross <jgross@mit.edu>2017-04-01 22:29:31 -0400
committerGravatar Jason Gross <jasongross9@gmail.com>2017-04-02 10:28:13 -0400
commit7565295b8bd446004aa8cc19b86184a331022597 (patch)
treedebdb87dc7d56ca89aed89977e9f61b27ffd81b4 /src/SpecificGen
parent39423861f916252b9d42eb40c3198a65d31ee410 (diff)
Remove all the .v files in SpecificGen
This gets most of the way to 10 in #14.
Diffstat (limited to 'src/SpecificGen')
-rw-r--r--src/SpecificGen/GF2213_32.v782
-rw-r--r--src/SpecificGen/GF2213_32Bounded.v521
-rw-r--r--src/SpecificGen/GF2213_32BoundedAddCoordinates.v78
-rw-r--r--src/SpecificGen/GF2213_32BoundedCommon.v819
-rw-r--r--src/SpecificGen/GF2213_32BoundedExtendedAddCoordinates.v68
-rw-r--r--src/SpecificGen/GF2213_32ExtendedAddCoordinates.v81
-rw-r--r--src/SpecificGen/GF2213_32Reflective.v118
-rw-r--r--src/SpecificGen/GF2213_32Reflective/Common.v668
-rw-r--r--src/SpecificGen/GF2213_32Reflective/Common9_4Op.v102
-rw-r--r--src/SpecificGen/GF2213_32Reflective/CommonBinOp.v50
-rw-r--r--src/SpecificGen/GF2213_32Reflective/CommonUnOp.v43
-rw-r--r--src/SpecificGen/GF2213_32Reflective/CommonUnOpFEToWire.v43
-rw-r--r--src/SpecificGen/GF2213_32Reflective/CommonUnOpFEToZ.v43
-rw-r--r--src/SpecificGen/GF2213_32Reflective/CommonUnOpWireToFE.v43
-rw-r--r--src/SpecificGen/GF2213_32Reflective/Reified.v13
-rw-r--r--src/SpecificGen/GF2213_32Reflective/Reified/Add.v12
-rw-r--r--src/SpecificGen/GF2213_32Reflective/Reified/AddCoordinates.v183
-rw-r--r--src/SpecificGen/GF2213_32Reflective/Reified/AddDisplay.log36
-rw-r--r--src/SpecificGen/GF2213_32Reflective/Reified/AddDisplay.v4
-rw-r--r--src/SpecificGen/GF2213_32Reflective/Reified/AddJavaDisplay.log36
-rw-r--r--src/SpecificGen/GF2213_32Reflective/Reified/AddJavaDisplay.v4
-rw-r--r--src/SpecificGen/GF2213_32Reflective/Reified/CarryAdd.v17
-rw-r--r--src/SpecificGen/GF2213_32Reflective/Reified/CarryOpp.v17
-rw-r--r--src/SpecificGen/GF2213_32Reflective/Reified/CarrySub.v17
-rw-r--r--src/SpecificGen/GF2213_32Reflective/Reified/GeModulus.v17
-rw-r--r--src/SpecificGen/GF2213_32Reflective/Reified/LadderStep.v189
-rw-r--r--src/SpecificGen/GF2213_32Reflective/Reified/LadderStepDisplay.log2634
-rw-r--r--src/SpecificGen/GF2213_32Reflective/Reified/LadderStepDisplay.v4
-rw-r--r--src/SpecificGen/GF2213_32Reflective/Reified/LadderStepJavaDisplay.log2634
-rw-r--r--src/SpecificGen/GF2213_32Reflective/Reified/LadderStepJavaDisplay.v4
-rw-r--r--src/SpecificGen/GF2213_32Reflective/Reified/Mul.v17
-rw-r--r--src/SpecificGen/GF2213_32Reflective/Reified/MulDisplay.log214
-rw-r--r--src/SpecificGen/GF2213_32Reflective/Reified/MulDisplay.v4
-rw-r--r--src/SpecificGen/GF2213_32Reflective/Reified/MulJavaDisplay.log214
-rw-r--r--src/SpecificGen/GF2213_32Reflective/Reified/MulJavaDisplay.v4
-rw-r--r--src/SpecificGen/GF2213_32Reflective/Reified/Opp.v12
-rw-r--r--src/SpecificGen/GF2213_32Reflective/Reified/Pack.v17
-rw-r--r--src/SpecificGen/GF2213_32Reflective/Reified/PreFreeze.v17
-rw-r--r--src/SpecificGen/GF2213_32Reflective/Reified/Sub.v12
-rw-r--r--src/SpecificGen/GF2213_32Reflective/Reified/Unpack.v17
-rw-r--r--src/SpecificGen/GF2213_32ReflectiveAddCoordinates.v77
-rw-r--r--src/SpecificGen/GF2519_32.v773
-rw-r--r--src/SpecificGen/GF2519_32Bounded.v521
-rw-r--r--src/SpecificGen/GF2519_32BoundedAddCoordinates.v78
-rw-r--r--src/SpecificGen/GF2519_32BoundedCommon.v819
-rw-r--r--src/SpecificGen/GF2519_32BoundedExtendedAddCoordinates.v68
-rw-r--r--src/SpecificGen/GF2519_32ExtendedAddCoordinates.v81
-rw-r--r--src/SpecificGen/GF2519_32Reflective.v118
-rw-r--r--src/SpecificGen/GF2519_32Reflective/Common.v668
-rw-r--r--src/SpecificGen/GF2519_32Reflective/Common9_4Op.v102
-rw-r--r--src/SpecificGen/GF2519_32Reflective/CommonBinOp.v50
-rw-r--r--src/SpecificGen/GF2519_32Reflective/CommonUnOp.v43
-rw-r--r--src/SpecificGen/GF2519_32Reflective/CommonUnOpFEToWire.v43
-rw-r--r--src/SpecificGen/GF2519_32Reflective/CommonUnOpFEToZ.v43
-rw-r--r--src/SpecificGen/GF2519_32Reflective/CommonUnOpWireToFE.v43
-rw-r--r--src/SpecificGen/GF2519_32Reflective/Reified.v13
-rw-r--r--src/SpecificGen/GF2519_32Reflective/Reified/Add.v12
-rw-r--r--src/SpecificGen/GF2519_32Reflective/Reified/AddCoordinates.v183
-rw-r--r--src/SpecificGen/GF2519_32Reflective/Reified/AddDisplay.log45
-rw-r--r--src/SpecificGen/GF2519_32Reflective/Reified/AddDisplay.v4
-rw-r--r--src/SpecificGen/GF2519_32Reflective/Reified/AddJavaDisplay.log45
-rw-r--r--src/SpecificGen/GF2519_32Reflective/Reified/AddJavaDisplay.v4
-rw-r--r--src/SpecificGen/GF2519_32Reflective/Reified/CarryAdd.v17
-rw-r--r--src/SpecificGen/GF2519_32Reflective/Reified/CarryOpp.v17
-rw-r--r--src/SpecificGen/GF2519_32Reflective/Reified/CarrySub.v17
-rw-r--r--src/SpecificGen/GF2519_32Reflective/Reified/GeModulus.v17
-rw-r--r--src/SpecificGen/GF2519_32Reflective/Reified/LadderStep.v189
-rw-r--r--src/SpecificGen/GF2519_32Reflective/Reified/LadderStepDisplay.log3859
-rw-r--r--src/SpecificGen/GF2519_32Reflective/Reified/LadderStepDisplay.v4
-rw-r--r--src/SpecificGen/GF2519_32Reflective/Reified/LadderStepJavaDisplay.log3859
-rw-r--r--src/SpecificGen/GF2519_32Reflective/Reified/LadderStepJavaDisplay.v4
-rw-r--r--src/SpecificGen/GF2519_32Reflective/Reified/Mul.v17
-rw-r--r--src/SpecificGen/GF2519_32Reflective/Reified/MulDisplay.log317
-rw-r--r--src/SpecificGen/GF2519_32Reflective/Reified/MulDisplay.v4
-rw-r--r--src/SpecificGen/GF2519_32Reflective/Reified/MulJavaDisplay.log317
-rw-r--r--src/SpecificGen/GF2519_32Reflective/Reified/MulJavaDisplay.v4
-rw-r--r--src/SpecificGen/GF2519_32Reflective/Reified/Opp.v12
-rw-r--r--src/SpecificGen/GF2519_32Reflective/Reified/Pack.v17
-rw-r--r--src/SpecificGen/GF2519_32Reflective/Reified/PreFreeze.v17
-rw-r--r--src/SpecificGen/GF2519_32Reflective/Reified/Sub.v12
-rw-r--r--src/SpecificGen/GF2519_32Reflective/Reified/Unpack.v17
-rw-r--r--src/SpecificGen/GF2519_32ReflectiveAddCoordinates.v77
-rw-r--r--src/SpecificGen/GF25519_32.v782
-rw-r--r--src/SpecificGen/GF25519_32Bounded.v521
-rw-r--r--src/SpecificGen/GF25519_32BoundedAddCoordinates.v78
-rw-r--r--src/SpecificGen/GF25519_32BoundedCommon.v819
-rw-r--r--src/SpecificGen/GF25519_32BoundedExtendedAddCoordinates.v68
-rw-r--r--src/SpecificGen/GF25519_32ExtendedAddCoordinates.v81
-rw-r--r--src/SpecificGen/GF25519_32Reflective.v118
-rw-r--r--src/SpecificGen/GF25519_32Reflective/Common.v668
-rw-r--r--src/SpecificGen/GF25519_32Reflective/Common9_4Op.v102
-rw-r--r--src/SpecificGen/GF25519_32Reflective/CommonBinOp.v50
-rw-r--r--src/SpecificGen/GF25519_32Reflective/CommonUnOp.v43
-rw-r--r--src/SpecificGen/GF25519_32Reflective/CommonUnOpFEToWire.v43
-rw-r--r--src/SpecificGen/GF25519_32Reflective/CommonUnOpFEToZ.v43
-rw-r--r--src/SpecificGen/GF25519_32Reflective/CommonUnOpWireToFE.v43
-rw-r--r--src/SpecificGen/GF25519_32Reflective/Reified.v13
-rw-r--r--src/SpecificGen/GF25519_32Reflective/Reified/Add.v12
-rw-r--r--src/SpecificGen/GF25519_32Reflective/Reified/AddCoordinates.v183
-rw-r--r--src/SpecificGen/GF25519_32Reflective/Reified/AddDisplay.log45
-rw-r--r--src/SpecificGen/GF25519_32Reflective/Reified/AddDisplay.v4
-rw-r--r--src/SpecificGen/GF25519_32Reflective/Reified/AddJavaDisplay.log45
-rw-r--r--src/SpecificGen/GF25519_32Reflective/Reified/AddJavaDisplay.v4
-rw-r--r--src/SpecificGen/GF25519_32Reflective/Reified/CarryAdd.v17
-rw-r--r--src/SpecificGen/GF25519_32Reflective/Reified/CarryOpp.v17
-rw-r--r--src/SpecificGen/GF25519_32Reflective/Reified/CarrySub.v17
-rw-r--r--src/SpecificGen/GF25519_32Reflective/Reified/GeModulus.v17
-rw-r--r--src/SpecificGen/GF25519_32Reflective/Reified/LadderStep.v189
-rw-r--r--src/SpecificGen/GF25519_32Reflective/Reified/LadderStepDisplay.log3459
-rw-r--r--src/SpecificGen/GF25519_32Reflective/Reified/LadderStepDisplay.v4
-rw-r--r--src/SpecificGen/GF25519_32Reflective/Reified/LadderStepJavaDisplay.log3459
-rw-r--r--src/SpecificGen/GF25519_32Reflective/Reified/LadderStepJavaDisplay.v4
-rw-r--r--src/SpecificGen/GF25519_32Reflective/Reified/Mul.v17
-rw-r--r--src/SpecificGen/GF25519_32Reflective/Reified/MulDisplay.log297
-rw-r--r--src/SpecificGen/GF25519_32Reflective/Reified/MulDisplay.v4
-rw-r--r--src/SpecificGen/GF25519_32Reflective/Reified/MulJavaDisplay.log297
-rw-r--r--src/SpecificGen/GF25519_32Reflective/Reified/MulJavaDisplay.v4
-rw-r--r--src/SpecificGen/GF25519_32Reflective/Reified/Opp.v12
-rw-r--r--src/SpecificGen/GF25519_32Reflective/Reified/Pack.v17
-rw-r--r--src/SpecificGen/GF25519_32Reflective/Reified/PreFreeze.v17
-rw-r--r--src/SpecificGen/GF25519_32Reflective/Reified/Sub.v12
-rw-r--r--src/SpecificGen/GF25519_32Reflective/Reified/Unpack.v17
-rw-r--r--src/SpecificGen/GF25519_32ReflectiveAddCoordinates.v77
-rw-r--r--src/SpecificGen/GF25519_64.v782
-rw-r--r--src/SpecificGen/GF25519_64Bounded.v521
-rw-r--r--src/SpecificGen/GF25519_64BoundedAddCoordinates.v78
-rw-r--r--src/SpecificGen/GF25519_64BoundedCommon.v819
-rw-r--r--src/SpecificGen/GF25519_64BoundedExtendedAddCoordinates.v68
-rw-r--r--src/SpecificGen/GF25519_64ExtendedAddCoordinates.v81
-rw-r--r--src/SpecificGen/GF25519_64Reflective.v118
-rw-r--r--src/SpecificGen/GF25519_64Reflective/Common.v668
-rw-r--r--src/SpecificGen/GF25519_64Reflective/Common9_4Op.v102
-rw-r--r--src/SpecificGen/GF25519_64Reflective/CommonBinOp.v50
-rw-r--r--src/SpecificGen/GF25519_64Reflective/CommonUnOp.v43
-rw-r--r--src/SpecificGen/GF25519_64Reflective/CommonUnOpFEToWire.v43
-rw-r--r--src/SpecificGen/GF25519_64Reflective/CommonUnOpFEToZ.v43
-rw-r--r--src/SpecificGen/GF25519_64Reflective/CommonUnOpWireToFE.v43
-rw-r--r--src/SpecificGen/GF25519_64Reflective/Reified.v13
-rw-r--r--src/SpecificGen/GF25519_64Reflective/Reified/Add.v12
-rw-r--r--src/SpecificGen/GF25519_64Reflective/Reified/AddCoordinates.v183
-rw-r--r--src/SpecificGen/GF25519_64Reflective/Reified/AddDisplay.log25
-rw-r--r--src/SpecificGen/GF25519_64Reflective/Reified/AddDisplay.v4
-rw-r--r--src/SpecificGen/GF25519_64Reflective/Reified/AddJavaDisplay.log25
-rw-r--r--src/SpecificGen/GF25519_64Reflective/Reified/AddJavaDisplay.v4
-rw-r--r--src/SpecificGen/GF25519_64Reflective/Reified/CarryAdd.v17
-rw-r--r--src/SpecificGen/GF25519_64Reflective/Reified/CarryOpp.v17
-rw-r--r--src/SpecificGen/GF25519_64Reflective/Reified/CarrySub.v17
-rw-r--r--src/SpecificGen/GF25519_64Reflective/Reified/GeModulus.v17
-rw-r--r--src/SpecificGen/GF25519_64Reflective/Reified/LadderStep.v189
-rw-r--r--src/SpecificGen/GF25519_64Reflective/Reified/LadderStepDisplay.log1050
-rw-r--r--src/SpecificGen/GF25519_64Reflective/Reified/LadderStepDisplay.v4
-rw-r--r--src/SpecificGen/GF25519_64Reflective/Reified/LadderStepJavaDisplay.log1050
-rw-r--r--src/SpecificGen/GF25519_64Reflective/Reified/LadderStepJavaDisplay.v4
-rw-r--r--src/SpecificGen/GF25519_64Reflective/Reified/Mul.v17
-rw-r--r--src/SpecificGen/GF25519_64Reflective/Reified/MulDisplay.log91
-rw-r--r--src/SpecificGen/GF25519_64Reflective/Reified/MulDisplay.v4
-rw-r--r--src/SpecificGen/GF25519_64Reflective/Reified/MulJavaDisplay.log91
-rw-r--r--src/SpecificGen/GF25519_64Reflective/Reified/MulJavaDisplay.v4
-rw-r--r--src/SpecificGen/GF25519_64Reflective/Reified/Opp.v12
-rw-r--r--src/SpecificGen/GF25519_64Reflective/Reified/Pack.v17
-rw-r--r--src/SpecificGen/GF25519_64Reflective/Reified/PreFreeze.v17
-rw-r--r--src/SpecificGen/GF25519_64Reflective/Reified/Sub.v12
-rw-r--r--src/SpecificGen/GF25519_64Reflective/Reified/Unpack.v17
-rw-r--r--src/SpecificGen/GF25519_64ReflectiveAddCoordinates.v77
-rw-r--r--src/SpecificGen/GF41417_32.v773
-rw-r--r--src/SpecificGen/GF41417_32Bounded.v521
-rw-r--r--src/SpecificGen/GF41417_32BoundedAddCoordinates.v78
-rw-r--r--src/SpecificGen/GF41417_32BoundedCommon.v819
-rw-r--r--src/SpecificGen/GF41417_32BoundedExtendedAddCoordinates.v68
-rw-r--r--src/SpecificGen/GF41417_32ExtendedAddCoordinates.v81
-rw-r--r--src/SpecificGen/GF41417_32Reflective.v118
-rw-r--r--src/SpecificGen/GF41417_32Reflective/Common.v668
-rw-r--r--src/SpecificGen/GF41417_32Reflective/Common9_4Op.v102
-rw-r--r--src/SpecificGen/GF41417_32Reflective/CommonBinOp.v50
-rw-r--r--src/SpecificGen/GF41417_32Reflective/CommonUnOp.v43
-rw-r--r--src/SpecificGen/GF41417_32Reflective/CommonUnOpFEToWire.v43
-rw-r--r--src/SpecificGen/GF41417_32Reflective/CommonUnOpFEToZ.v43
-rw-r--r--src/SpecificGen/GF41417_32Reflective/CommonUnOpWireToFE.v43
-rw-r--r--src/SpecificGen/GF41417_32Reflective/Reified.v13
-rw-r--r--src/SpecificGen/GF41417_32Reflective/Reified/Add.v12
-rw-r--r--src/SpecificGen/GF41417_32Reflective/Reified/AddCoordinates.v183
-rw-r--r--src/SpecificGen/GF41417_32Reflective/Reified/AddDisplay.log71
-rw-r--r--src/SpecificGen/GF41417_32Reflective/Reified/AddDisplay.v4
-rw-r--r--src/SpecificGen/GF41417_32Reflective/Reified/AddJavaDisplay.log71
-rw-r--r--src/SpecificGen/GF41417_32Reflective/Reified/AddJavaDisplay.v4
-rw-r--r--src/SpecificGen/GF41417_32Reflective/Reified/CarryAdd.v17
-rw-r--r--src/SpecificGen/GF41417_32Reflective/Reified/CarryOpp.v17
-rw-r--r--src/SpecificGen/GF41417_32Reflective/Reified/CarrySub.v17
-rw-r--r--src/SpecificGen/GF41417_32Reflective/Reified/GeModulus.v17
-rw-r--r--src/SpecificGen/GF41417_32Reflective/Reified/LadderStep.v189
-rw-r--r--src/SpecificGen/GF41417_32Reflective/Reified/LadderStepDisplay.log8091
-rw-r--r--src/SpecificGen/GF41417_32Reflective/Reified/LadderStepDisplay.v4
-rw-r--r--src/SpecificGen/GF41417_32Reflective/Reified/LadderStepJavaDisplay.log8091
-rw-r--r--src/SpecificGen/GF41417_32Reflective/Reified/LadderStepJavaDisplay.v4
-rw-r--r--src/SpecificGen/GF41417_32Reflective/Reified/Mul.v17
-rw-r--r--src/SpecificGen/GF41417_32Reflective/Reified/MulDisplay.log762
-rw-r--r--src/SpecificGen/GF41417_32Reflective/Reified/MulDisplay.v4
-rw-r--r--src/SpecificGen/GF41417_32Reflective/Reified/MulJavaDisplay.log762
-rw-r--r--src/SpecificGen/GF41417_32Reflective/Reified/MulJavaDisplay.v4
-rw-r--r--src/SpecificGen/GF41417_32Reflective/Reified/Opp.v12
-rw-r--r--src/SpecificGen/GF41417_32Reflective/Reified/Pack.v17
-rw-r--r--src/SpecificGen/GF41417_32Reflective/Reified/PreFreeze.v17
-rw-r--r--src/SpecificGen/GF41417_32Reflective/Reified/Sub.v12
-rw-r--r--src/SpecificGen/GF41417_32Reflective/Reified/Unpack.v17
-rw-r--r--src/SpecificGen/GF41417_32ReflectiveAddCoordinates.v77
-rw-r--r--src/SpecificGen/GF5211_32.v773
-rw-r--r--src/SpecificGen/GF5211_32Bounded.v521
-rw-r--r--src/SpecificGen/GF5211_32BoundedAddCoordinates.v78
-rw-r--r--src/SpecificGen/GF5211_32BoundedCommon.v819
-rw-r--r--src/SpecificGen/GF5211_32BoundedExtendedAddCoordinates.v68
-rw-r--r--src/SpecificGen/GF5211_32ExtendedAddCoordinates.v81
-rw-r--r--src/SpecificGen/GF5211_32Reflective.v118
-rw-r--r--src/SpecificGen/GF5211_32Reflective/Common.v668
-rw-r--r--src/SpecificGen/GF5211_32Reflective/Common9_4Op.v102
-rw-r--r--src/SpecificGen/GF5211_32Reflective/CommonBinOp.v50
-rw-r--r--src/SpecificGen/GF5211_32Reflective/CommonUnOp.v43
-rw-r--r--src/SpecificGen/GF5211_32Reflective/CommonUnOpFEToWire.v43
-rw-r--r--src/SpecificGen/GF5211_32Reflective/CommonUnOpFEToZ.v43
-rw-r--r--src/SpecificGen/GF5211_32Reflective/CommonUnOpWireToFE.v43
-rw-r--r--src/SpecificGen/GF5211_32Reflective/Reified.v13
-rw-r--r--src/SpecificGen/GF5211_32Reflective/Reified/Add.v12
-rw-r--r--src/SpecificGen/GF5211_32Reflective/Reified/AddCoordinates.v183
-rw-r--r--src/SpecificGen/GF5211_32Reflective/Reified/AddDisplay.log75
-rw-r--r--src/SpecificGen/GF5211_32Reflective/Reified/AddDisplay.v4
-rw-r--r--src/SpecificGen/GF5211_32Reflective/Reified/AddJavaDisplay.log75
-rw-r--r--src/SpecificGen/GF5211_32Reflective/Reified/AddJavaDisplay.v4
-rw-r--r--src/SpecificGen/GF5211_32Reflective/Reified/CarryAdd.v17
-rw-r--r--src/SpecificGen/GF5211_32Reflective/Reified/CarryOpp.v17
-rw-r--r--src/SpecificGen/GF5211_32Reflective/Reified/CarrySub.v17
-rw-r--r--src/SpecificGen/GF5211_32Reflective/Reified/GeModulus.v17
-rw-r--r--src/SpecificGen/GF5211_32Reflective/Reified/LadderStep.v189
-rw-r--r--src/SpecificGen/GF5211_32Reflective/Reified/LadderStepDisplay.v4
-rw-r--r--src/SpecificGen/GF5211_32Reflective/Reified/LadderStepJavaDisplay.v4
-rw-r--r--src/SpecificGen/GF5211_32Reflective/Reified/Mul.v17
-rw-r--r--src/SpecificGen/GF5211_32Reflective/Reified/MulDisplay.log1093
-rw-r--r--src/SpecificGen/GF5211_32Reflective/Reified/MulDisplay.v4
-rw-r--r--src/SpecificGen/GF5211_32Reflective/Reified/MulJavaDisplay.log1093
-rw-r--r--src/SpecificGen/GF5211_32Reflective/Reified/MulJavaDisplay.v4
-rw-r--r--src/SpecificGen/GF5211_32Reflective/Reified/Opp.v12
-rw-r--r--src/SpecificGen/GF5211_32Reflective/Reified/Pack.v17
-rw-r--r--src/SpecificGen/GF5211_32Reflective/Reified/PreFreeze.v17
-rw-r--r--src/SpecificGen/GF5211_32Reflective/Reified/Sub.v12
-rw-r--r--src/SpecificGen/GF5211_32Reflective/Reified/Unpack.v17
-rw-r--r--src/SpecificGen/GF5211_32ReflectiveAddCoordinates.v77
244 files changed, 0 insertions, 69003 deletions
diff --git a/src/SpecificGen/GF2213_32.v b/src/SpecificGen/GF2213_32.v
deleted file mode 100644
index 9b8f0d74e..000000000
--- a/src/SpecificGen/GF2213_32.v
+++ /dev/null
@@ -1,782 +0,0 @@
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParams.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParamProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemOpt.
-Require Import Coq.Lists.List Crypto.Util.ListUtil.
-Require Import Crypto.Tactics.VerdiTactics.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Tower.
-Require Import Crypto.Util.Notations.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Algebra.
-Import ListNotations.
-Require Import Coq.ZArith.ZArith Coq.ZArith.Zpower Coq.ZArith.ZArith Coq.ZArith.Znumtheory.
-Local Open Scope Z.
-
-(* BEGIN precomputation. *)
-
-Definition modulus : Z := Eval compute in 2^221 - 3.
-Lemma prime_modulus : prime modulus. Admitted.
-Definition int_width := Eval compute in (2 * 32)%Z.
-Definition freeze_input_bound := 32%Z.
-
-Instance params2213_32 : PseudoMersenneBaseParams modulus.
- construct_params prime_modulus 8%nat 221.
-Defined.
-
-Definition length_fe2213_32 := Eval compute in length limb_widths.
-Definition fe2213_32 := Eval compute in (tuple Z length_fe2213_32).
-
-Definition mul2modulus : fe2213_32 :=
- Eval compute in (from_list_default 0%Z (length limb_widths) (construct_mul2modulus params2213_32)).
-
-Instance subCoeff : SubtractionCoefficient.
- apply Build_SubtractionCoefficient with (coeff := mul2modulus).
- vm_decide.
-Defined.
-
-Instance carryChain : CarryChain limb_widths.
- apply Build_CarryChain with (carry_chain := (rev [0;1;2;3;4;5;6;7;0;1])%nat).
- intros.
- repeat (destruct H as [|H]; [subst; vm_compute; repeat constructor | ]).
- contradiction H.
-Defined.
-
-Definition freezePreconditions : FreezePreconditions freeze_input_bound int_width.
-Proof.
- constructor; compute_preconditions.
-Defined.
-
-(* Wire format for [pack] and [unpack] *)
-Definition wire_widths := Eval compute in (repeat 32 6 ++ 29 :: nil).
-
-Definition wire_digits := Eval compute in (tuple Z (length wire_widths)).
-
-Lemma wire_widths_nonneg : forall w, In w wire_widths -> 0 <= w.
-Proof.
- intros.
- repeat (destruct H as [|H]; [subst; vm_compute; congruence | ]).
- contradiction H.
-Qed.
-
-Lemma bits_eq : sum_firstn limb_widths (length limb_widths) = sum_firstn wire_widths (length wire_widths).
-Proof.
- reflexivity.
-Qed.
-
-Lemma modulus_gt_2 : 2 < modulus. Proof. cbv; congruence. Qed.
-
-(* Temporarily, we'll use addition chains equivalent to double-and-add. This is pending
- finding the real, more optimal chains from previous work. *)
-Fixpoint pow2Chain'' p (pow2_index acc_index : nat) chain_acc : list (nat * nat) :=
- match p with
- | xI p' => pow2Chain'' p' 1 0
- (chain_acc ++ (pow2_index, pow2_index) :: (0%nat, S acc_index) :: nil)
- | xO p' => pow2Chain'' p' 0 (S acc_index)
- (chain_acc ++ (pow2_index, pow2_index)::nil)
- | xH => (chain_acc ++ (pow2_index, pow2_index) :: (0%nat, S acc_index) :: nil)
- end.
-
-Fixpoint pow2Chain' p index :=
- match p with
- | xI p' => pow2Chain'' p' 0 0 (repeat (0,0)%nat index)
- | xO p' => pow2Chain' p' (S index)
- | xH => repeat (0,0)%nat index
- end.
-
-Definition pow2_chain p :=
- match p with
- | xH => nil
- | _ => pow2Chain' p 0
- end.
-
-Definition invChain := Eval compute in pow2_chain (Z.to_pos (modulus - 2)).
-
-Instance inv_ec : ExponentiationChain (modulus - 2).
- apply Build_ExponentiationChain with (chain := invChain).
- reflexivity.
-Defined.
-
-(* Note : use caution copying square root code to other primes. The (modulus / 8 + 1) chains are
- for primes that are 5 mod 8; if the prime is 3 mod 4 then use (modulus / 4 + 1). *)
-Definition sqrtChain := Eval compute in pow2_chain (Z.to_pos (modulus / 8 + 1)).
-
-Instance sqrt_ec : ExponentiationChain (modulus / 8 + 1).
- apply Build_ExponentiationChain with (chain := sqrtChain).
- reflexivity.
-Defined.
-
-Arguments chain {_ _ _} _.
-
-(* END precomputation *)
-
-(* Precompute constants *)
-Definition k_ := Eval compute in k.
-Definition k_subst : k = k_ := eq_refl k_.
-
-Definition c_ := Eval compute in c.
-Definition c_subst : c = c_ := eq_refl c_.
-
-Definition one_ := Eval compute in one.
-Definition one_subst : one = one_ := eq_refl one_.
-
-Definition zero_ := Eval compute in zero.
-Definition zero_subst : zero = zero_ := eq_refl zero_.
-
-Definition modulus_digits_ := Eval compute in ModularBaseSystemList.modulus_digits.
-Definition modulus_digits_subst : ModularBaseSystemList.modulus_digits = modulus_digits_ := eq_refl modulus_digits_.
-
-Local Opaque Z.shiftr Z.shiftl Z.land Z.mul Z.add Z.sub Z.lor Let_In Z.eqb Z.ltb Z.leb ModularBaseSystemListZOperations.neg ModularBaseSystemListZOperations.cmovl ModularBaseSystemListZOperations.cmovne.
-
-Definition app_n2 {T} (f : wire_digits) (P : wire_digits -> T) : T.
-Proof.
- cbv [wire_digits] in *.
- set (f0 := f).
- repeat (let g := fresh "g" in destruct f as [f g]).
- apply P.
- apply f0.
-Defined.
-
-Definition app_n2_correct {T} f (P : wire_digits -> T) : app_n2 f P = P f.
-Proof.
- intros.
- cbv [wire_digits] in *.
- repeat match goal with [p : (_*Z)%type |- _ ] => destruct p end.
- reflexivity.
-Qed.
-
-Definition app_n {T} (f : fe2213_32) (P : fe2213_32 -> T) : T.
-Proof.
- cbv [fe2213_32] in *.
- set (f0 := f).
- repeat (let g := fresh "g" in destruct f as [f g]).
- apply P.
- apply f0.
-Defined.
-
-Definition app_n_correct {T} f (P : fe2213_32 -> T) : app_n f P = P f.
-Proof.
- intros.
- cbv [fe2213_32] in *.
- repeat match goal with [p : (_*Z)%type |- _ ] => destruct p end.
- reflexivity.
-Qed.
-
-Definition appify2 {T} (op : fe2213_32 -> fe2213_32 -> T) (f g : fe2213_32) :=
- app_n f (fun f0 => (app_n g (fun g0 => op f0 g0))).
-
-Lemma appify2_correct : forall {T} op f g, @appify2 T op f g = op f g.
-Proof.
- intros. cbv [appify2].
- etransitivity; apply app_n_correct.
-Qed.
-
-Definition appify9 {T} (op : fe2213_32 -> fe2213_32 -> fe2213_32 -> fe2213_32 -> fe2213_32 -> fe2213_32 -> fe2213_32 -> fe2213_32 -> fe2213_32 -> T) (x0 x1 x2 x3 x4 x5 x6 x7 x8 : fe2213_32) :=
- app_n x0 (fun x0' =>
- app_n x1 (fun x1' =>
- app_n x2 (fun x2' =>
- app_n x3 (fun x3' =>
- app_n x4 (fun x4' =>
- app_n x5 (fun x5' =>
- app_n x6 (fun x6' =>
- app_n x7 (fun x7' =>
- app_n x8 (fun x8' =>
- op x0' x1' x2' x3' x4' x5' x6' x7' x8'))))))))).
-
-Lemma appify9_correct : forall {T} op x0 x1 x2 x3 x4 x5 x6 x7 x8,
- @appify9 T op x0 x1 x2 x3 x4 x5 x6 x7 x8 = op x0 x1 x2 x3 x4 x5 x6 x7 x8.
-Proof.
- intros. cbv [appify9].
- repeat (etransitivity; [ apply app_n_correct | ]); reflexivity.
-Qed.
-
-Definition uncurry_unop_fe2213_32 {T} (op : fe2213_32 -> T)
- := Eval compute in Tuple.uncurry (n:=length_fe2213_32) op.
-Definition curry_unop_fe2213_32 {T} op : fe2213_32 -> T
- := Eval compute in fun f => app_n f (Tuple.curry (n:=length_fe2213_32) op).
-
-Fixpoint uncurry_n_op_fe2213_32 {T} n
- : forall (op : Tower.tower_nd fe2213_32 T n),
- Tower.tower_nd Z T (n * length_fe2213_32)
- := match n
- return (forall (op : Tower.tower_nd fe2213_32 T n),
- Tower.tower_nd Z T (n * length_fe2213_32))
- with
- | O => fun x => x
- | S n' => fun f => uncurry_unop_fe2213_32 (fun x => @uncurry_n_op_fe2213_32 _ n' (f x))
- end.
-
-Definition uncurry_binop_fe2213_32 {T} (op : fe2213_32 -> fe2213_32 -> T)
- := Eval compute in uncurry_n_op_fe2213_32 2 op.
-Definition curry_binop_fe2213_32 {T} op : fe2213_32 -> fe2213_32 -> T
- := Eval compute in appify2 (fun f => curry_unop_fe2213_32 (curry_unop_fe2213_32 op f)).
-
-Definition uncurry_unop_wire_digits {T} (op : wire_digits -> T)
- := Eval compute in Tuple.uncurry (n:=length wire_widths) op.
-Definition curry_unop_wire_digits {T} op : wire_digits -> T
- := Eval compute in fun f => app_n2 f (Tuple.curry (n:=length wire_widths) op).
-
-Definition uncurry_9op_fe2213_32 {T} (op : fe2213_32 -> fe2213_32 -> fe2213_32 -> fe2213_32 -> fe2213_32 -> fe2213_32 -> fe2213_32 -> fe2213_32 -> fe2213_32 -> T)
- := Eval compute in uncurry_n_op_fe2213_32 9 op.
-Definition curry_9op_fe2213_32 {T} op : fe2213_32 -> fe2213_32 -> fe2213_32 -> fe2213_32 -> fe2213_32 -> fe2213_32 -> fe2213_32 -> fe2213_32 -> fe2213_32 -> T
- := Eval compute in
- appify9 (fun x0 x1 x2 x3 x4 x5 x6 x7 x8
- => curry_unop_fe2213_32 (curry_unop_fe2213_32 (curry_unop_fe2213_32 (curry_unop_fe2213_32 (curry_unop_fe2213_32 (curry_unop_fe2213_32 (curry_unop_fe2213_32 (curry_unop_fe2213_32 (curry_unop_fe2213_32 op x0) x1) x2) x3) x4) x5) x6) x7) x8).
-
-Definition add_sig (f g : fe2213_32) :
- { fg : fe2213_32 | fg = add_opt f g}.
-Proof.
- eexists.
- rewrite <-(@appify2_correct fe2213_32).
- cbv.
- reflexivity.
-Defined.
-
-Definition add (f g : fe2213_32) : fe2213_32 :=
- Eval cbv beta iota delta [proj1_sig add_sig] in
- proj1_sig (add_sig f g).
-
-Definition add_correct (f g : fe2213_32)
- : add f g = add_opt f g :=
- Eval cbv beta iota delta [proj1_sig add_sig] in
- proj2_sig (add_sig f g).
-
-Definition carry_add_sig (f g : fe2213_32) :
- { fg : fe2213_32 | fg = carry_add_opt f g}.
-Proof.
- eexists.
- rewrite <-(@appify2_correct fe2213_32).
- cbv.
- autorewrite with zsimplify_fast zsimplify_Z_to_pos; cbv.
- autorewrite with zsimplify_Z_to_pos; cbv.
- reflexivity.
-Defined.
-
-Definition carry_add (f g : fe2213_32) : fe2213_32 :=
- Eval cbv beta iota delta [proj1_sig carry_add_sig] in
- proj1_sig (carry_add_sig f g).
-
-Definition carry_add_correct (f g : fe2213_32)
- : carry_add f g = carry_add_opt f g :=
- Eval cbv beta iota delta [proj1_sig carry_add_sig] in
- proj2_sig (carry_add_sig f g).
-
-Definition sub_sig (f g : fe2213_32) :
- { fg : fe2213_32 | fg = sub_opt f g}.
-Proof.
- eexists.
- rewrite <-(@appify2_correct fe2213_32).
- cbv.
- reflexivity.
-Defined.
-
-Definition sub (f g : fe2213_32) : fe2213_32 :=
- Eval cbv beta iota delta [proj1_sig sub_sig] in
- proj1_sig (sub_sig f g).
-
-Definition sub_correct (f g : fe2213_32)
- : sub f g = sub_opt f g :=
- Eval cbv beta iota delta [proj1_sig sub_sig] in
- proj2_sig (sub_sig f g).
-
-Definition carry_sub_sig (f g : fe2213_32) :
- { fg : fe2213_32 | fg = carry_sub_opt f g}.
-Proof.
- eexists.
- rewrite <-(@appify2_correct fe2213_32).
- cbv.
- autorewrite with zsimplify_fast zsimplify_Z_to_pos; cbv.
- autorewrite with zsimplify_Z_to_pos; cbv.
- reflexivity.
-Defined.
-
-Definition carry_sub (f g : fe2213_32) : fe2213_32 :=
- Eval cbv beta iota delta [proj1_sig carry_sub_sig] in
- proj1_sig (carry_sub_sig f g).
-
-Definition carry_sub_correct (f g : fe2213_32)
- : carry_sub f g = carry_sub_opt f g :=
- Eval cbv beta iota delta [proj1_sig carry_sub_sig] in
- proj2_sig (carry_sub_sig f g).
-
-(* For multiplication, we add another layer of definition so that we can
- rewrite under the [let] binders. *)
-Definition mul_simpl_sig (f g : fe2213_32) :
- { fg : fe2213_32 | fg = carry_mul_opt k_ c_ f g}.
-Proof.
- cbv [fe2213_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv. (* N.B. The slow part of this is computing with [Z_div_opt].
- It would be much faster if we could take advantage of
- the form of [base_from_limb_widths] when doing
- division, so we could do subtraction instead. *)
- autorewrite with zsimplify_fast.
- reflexivity.
-Defined.
-
-Definition mul_simpl (f g : fe2213_32) : fe2213_32 :=
- Eval cbv beta iota delta [proj1_sig mul_simpl_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7) := f in
- let '(g0, g1, g2, g3, g4, g5, g6, g7) := g in
- proj1_sig (mul_simpl_sig (f0, f1, f2, f3, f4, f5, f6, f7)
- (g0, g1, g2, g3, g4, g5, g6, g7)).
-
-Definition mul_simpl_correct (f g : fe2213_32)
- : mul_simpl f g = carry_mul_opt k_ c_ f g.
-Proof.
- pose proof (proj2_sig (mul_simpl_sig f g)).
- cbv [fe2213_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Qed.
-
-Definition mul_sig (f g : fe2213_32) :
- { fg : fe2213_32 | fg = carry_mul_opt k_ c_ f g}.
-Proof.
- eexists.
- rewrite <-mul_simpl_correct.
- rewrite <-(@appify2_correct fe2213_32).
- cbv.
- autorewrite with zsimplify_fast zsimplify_Z_to_pos; cbv.
- autorewrite with zsimplify_Z_to_pos; cbv.
- reflexivity.
-Defined.
-
-Definition mul (f g : fe2213_32) : fe2213_32 :=
- Eval cbv beta iota delta [proj1_sig mul_sig] in
- proj1_sig (mul_sig f g).
-
-Definition mul_correct (f g : fe2213_32)
- : mul f g = carry_mul_opt k_ c_ f g :=
- Eval cbv beta iota delta [proj1_sig add_sig] in
- proj2_sig (mul_sig f g).
-
-Definition opp_sig (f : fe2213_32) :
- { g : fe2213_32 | g = opp_opt f }.
-Proof.
- eexists.
- cbv [opp_opt].
- rewrite <-sub_correct.
- rewrite zero_subst.
- cbv [sub].
- reflexivity.
-Defined.
-
-Definition opp (f : fe2213_32) : fe2213_32
- := Eval cbv beta iota delta [proj1_sig opp_sig] in proj1_sig (opp_sig f).
-
-Definition opp_correct (f : fe2213_32)
- : opp f = opp_opt f
- := Eval cbv beta iota delta [proj2_sig add_sig] in proj2_sig (opp_sig f).
-
-Definition carry_opp_sig (f : fe2213_32) :
- { g : fe2213_32 | g = carry_opp_opt f }.
-Proof.
- eexists.
- cbv [carry_opp_opt].
- rewrite <-carry_sub_correct.
- rewrite zero_subst.
- cbv [carry_sub].
- reflexivity.
-Defined.
-
-Definition carry_opp (f : fe2213_32) : fe2213_32
- := Eval cbv beta iota delta [proj1_sig carry_opp_sig] in proj1_sig (carry_opp_sig f).
-
-Definition carry_opp_correct (f : fe2213_32)
- : carry_opp f = carry_opp_opt f
- := Eval cbv beta iota delta [proj2_sig add_sig] in proj2_sig (carry_opp_sig f).
-
-Definition pow (f : fe2213_32) chain := fold_chain_opt one_ mul chain [f].
-
-Lemma pow_correct (f : fe2213_32) : forall chain, pow f chain = pow_opt k_ c_ one_ f chain.
-Proof.
- cbv [pow pow_opt]; intros.
- rewrite !fold_chain_opt_correct.
- apply Proper_fold_chain; try reflexivity.
- intros; subst; apply mul_correct.
-Qed.
-
-(* Now that we have [pow], we can compute sqrt of -1 for use
- in sqrt function (this is not needed unless the prime is
- 5 mod 8) *)
-Local Transparent Z.shiftr Z.shiftl Z.land Z.mul Z.add Z.sub Z.lor Let_In Z.eqb Z.ltb andb.
-
-Definition sqrt_m1 := Eval vm_compute in (pow (encode (F.of_Z _ 2)) (pow2_chain (Z.to_pos ((modulus - 1) / 4)))).
-
-Lemma sqrt_m1_correct : rep (mul sqrt_m1 sqrt_m1) (F.opp 1%F).
-Proof.
- cbv [rep].
- apply F.eq_to_Z_iff.
- vm_compute.
- reflexivity.
-Qed.
-
-Local Opaque Z.shiftr Z.shiftl Z.land Z.mul Z.add Z.sub Z.lor Let_In Z.eqb Z.ltb andb.
-
-Definition inv_sig (f : fe2213_32) :
- { g : fe2213_32 | g = inv_opt k_ c_ one_ f }.
-Proof.
- eexists; cbv [inv_opt].
- rewrite <-pow_correct.
- cbv - [mul].
- reflexivity.
-Defined.
-
-Definition inv (f : fe2213_32) : fe2213_32
- := Eval cbv beta iota delta [proj1_sig inv_sig] in proj1_sig (inv_sig f).
-
-Definition inv_correct (f : fe2213_32)
- : inv f = inv_opt k_ c_ one_ f
- := Eval cbv beta iota delta [proj2_sig inv_sig] in proj2_sig (inv_sig f).
-
-Definition mbs_field := modular_base_system_field modulus_gt_2.
-
-Import Morphisms.
-
-Local Existing Instance prime_modulus.
-
-Lemma field_and_homomorphisms
- : @field fe2213_32 eq zero_ one_ opp add sub mul inv div
- /\ @Ring.is_homomorphism
- (F modulus) Logic.eq F.one F.add F.mul
- fe2213_32 eq one_ add mul encode
- /\ @Ring.is_homomorphism
- fe2213_32 eq one_ add mul
- (F modulus) Logic.eq F.one F.add F.mul
- decode.
-Proof.
- eapply @Field.field_and_homomorphism_from_redundant_representation.
- { exact (F.field_modulo _). }
- { apply encode_rep. }
- { reflexivity. }
- { reflexivity. }
- { reflexivity. }
- { intros; rewrite opp_correct, opp_opt_correct; apply opp_rep; reflexivity. }
- { intros; rewrite add_correct, add_opt_correct; apply add_rep; reflexivity. }
- { intros; rewrite sub_correct, sub_opt_correct; apply sub_rep; reflexivity. }
- { intros; rewrite mul_correct, carry_mul_opt_correct by reflexivity; apply carry_mul_rep; reflexivity. }
- { intros; rewrite inv_correct, inv_opt_correct by reflexivity; apply inv_rep; reflexivity. }
- { intros; apply encode_rep. }
-Qed.
-
-Definition field2213_32 : @field fe2213_32 eq zero_ one_ opp add sub mul inv div := proj1 field_and_homomorphisms.
-
-Lemma carry_field_and_homomorphisms
- : @field fe2213_32 eq zero_ one_ carry_opp carry_add carry_sub mul inv div
- /\ @Ring.is_homomorphism
- (F modulus) Logic.eq F.one F.add F.mul
- fe2213_32 eq one_ carry_add mul encode
- /\ @Ring.is_homomorphism
- fe2213_32 eq one_ carry_add mul
- (F modulus) Logic.eq F.one F.add F.mul
- decode.
-Proof.
- eapply @Field.field_and_homomorphism_from_redundant_representation.
- { exact (F.field_modulo _). }
- { apply encode_rep. }
- { reflexivity. }
- { reflexivity. }
- { reflexivity. }
- { intros; rewrite carry_opp_correct, carry_opp_opt_correct, carry_opp_rep; apply opp_rep; reflexivity. }
- { intros; rewrite carry_add_correct, carry_add_opt_correct, carry_add_rep; apply add_rep; reflexivity. }
- { intros; rewrite carry_sub_correct, carry_sub_opt_correct, carry_sub_rep; apply sub_rep; reflexivity. }
- { intros; rewrite mul_correct, carry_mul_opt_correct by reflexivity; apply carry_mul_rep; reflexivity. }
- { intros; rewrite inv_correct, inv_opt_correct by reflexivity; apply inv_rep; reflexivity. }
- { intros; apply encode_rep. }
-Qed.
-
-Definition carry_field2213_32 : @field fe2213_32 eq zero_ one_ carry_opp carry_add carry_sub mul inv div := proj1 carry_field_and_homomorphisms.
-
-Lemma homomorphism_F2213_32_encode
- : @Ring.is_homomorphism (F modulus) Logic.eq F.one F.add F.mul fe2213_32 eq one add mul encode.
-Proof. apply field_and_homomorphisms. Qed.
-
-Lemma homomorphism_F2213_32_decode
- : @Ring.is_homomorphism fe2213_32 eq one add mul (F modulus) Logic.eq F.one F.add F.mul decode.
-Proof. apply field_and_homomorphisms. Qed.
-
-
-Lemma homomorphism_carry_F2213_32_encode
- : @Ring.is_homomorphism (F modulus) Logic.eq F.one F.add F.mul fe2213_32 eq one carry_add mul encode.
-Proof. apply carry_field_and_homomorphisms. Qed.
-
-Lemma homomorphism_carry_F2213_32_decode
- : @Ring.is_homomorphism fe2213_32 eq one carry_add mul (F modulus) Logic.eq F.one F.add F.mul decode.
-Proof. apply carry_field_and_homomorphisms. Qed.
-
-Definition ge_modulus_sig (f : fe2213_32) :
- { b : Z | b = ge_modulus_opt (to_list 8 f) }.
-Proof.
- cbv [fe2213_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists; cbv [ge_modulus_opt].
- rewrite !modulus_digits_subst.
- cbv.
- reflexivity.
-Defined.
-
-Definition ge_modulus (f : fe2213_32) : Z :=
- Eval cbv beta iota delta [proj1_sig ge_modulus_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7) := f in
- proj1_sig (ge_modulus_sig (f0, f1, f2, f3, f4, f5, f6, f7)).
-
-Definition ge_modulus_correct (f : fe2213_32) :
- ge_modulus f = ge_modulus_opt (to_list 8 f).
-Proof.
- pose proof (proj2_sig (ge_modulus_sig f)).
- cbv [fe2213_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Defined.
-
-Definition prefreeze_sig (f : fe2213_32) :
- { f' : fe2213_32 | f' = from_list_default 0 8 (carry_full_3_opt c_ (to_list 8 f)) }.
-Proof.
- cbv [fe2213_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv - [from_list_default].
- (* TODO(jgross,jadep): use Reflective linearization here? *)
- repeat (
- set_evars; rewrite app_Let_In_nd; subst_evars;
- eapply Proper_Let_In_nd_changebody; [reflexivity|intro]).
- cbv [from_list_default from_list_default'].
- reflexivity.
-Defined.
-
-Definition prefreeze (f : fe2213_32) : fe2213_32 :=
- Eval cbv beta iota delta [proj1_sig prefreeze_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7) := f in
- proj1_sig (prefreeze_sig (f0, f1, f2, f3, f4, f5, f6, f7)).
-
-Definition prefreeze_correct (f : fe2213_32)
- : prefreeze f = from_list_default 0 8 (carry_full_3_opt c_ (to_list 8 f)).
-Proof.
- pose proof (proj2_sig (prefreeze_sig f)).
- cbv [fe2213_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Defined.
-
-Definition postfreeze_sig (f : fe2213_32) :
- { f' : fe2213_32 | f' = from_list_default 0 8 (conditional_subtract_modulus_opt (int_width := int_width) (to_list 8 f)) }.
-Proof.
- cbv [fe2213_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists; cbv [freeze_opt int_width].
- cbv [to_list to_list'].
- cbv [conditional_subtract_modulus_opt].
- rewrite !modulus_digits_subst.
- cbv - [from_list_default].
- (* TODO(jgross,jadep): use Reflective linearization here? *)
- repeat (
- set_evars; rewrite app_Let_In_nd; subst_evars;
- eapply Proper_Let_In_nd_changebody; [reflexivity|intro]).
- cbv [from_list_default from_list_default'].
- reflexivity.
-Defined.
-
-Definition postfreeze (f : fe2213_32) : fe2213_32 :=
- Eval cbv beta iota delta [proj1_sig postfreeze_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7) := f in
- proj1_sig (postfreeze_sig (f0, f1, f2, f3, f4, f5, f6, f7)).
-
-Definition postfreeze_correct (f : fe2213_32)
- : postfreeze f = from_list_default 0 8 (conditional_subtract_modulus_opt (int_width := int_width) (to_list 8 f)).
-Proof.
- pose proof (proj2_sig (postfreeze_sig f)).
- cbv [fe2213_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Defined.
-
-Definition freeze (f : fe2213_32) : fe2213_32 :=
- dlet x := prefreeze f in
- postfreeze x.
-
-Local Transparent Let_In.
-Definition freeze_correct (f : fe2213_32)
- : freeze f = from_list_default 0 8 (freeze_opt (int_width := int_width) c_ (to_list 8 f)).
-Proof.
- cbv [freeze_opt freeze Let_In].
- rewrite prefreeze_correct.
- rewrite postfreeze_correct.
- match goal with
- |- appcontext [to_list _ (from_list_default _ ?n ?xs)] =>
- assert (length xs = n) as pf; [ | rewrite from_list_default_eq with (pf0 := pf) ] end.
- { rewrite carry_full_3_opt_correct; repeat rewrite ModularBaseSystemListProofs.length_carry_full; auto using length_to_list. }
- rewrite to_list_from_list.
- reflexivity.
-Qed.
-Local Opaque Let_In.
-
-Definition fieldwiseb_sig (f g : fe2213_32) :
- { b | b = @fieldwiseb Z Z 8 Z.eqb f g }.
-Proof.
- cbv [fe2213_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv.
- reflexivity.
-Defined.
-
-Definition fieldwiseb (f g : fe2213_32) : bool
- := Eval cbv beta iota delta [proj1_sig fieldwiseb_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7) := f in
- let '(g0, g1, g2, g3, g4, g5, g6, g7) := g in
- proj1_sig (fieldwiseb_sig (f0, f1, f2, f3, f4, f5, f6, f7)
- (g0, g1, g2, g3, g4, g5, g6, g7)).
-
-Lemma fieldwiseb_correct (f g : fe2213_32)
- : fieldwiseb f g = @Tuple.fieldwiseb Z Z 8 Z.eqb f g.
-Proof.
- set (f' := f); set (g' := g).
- hnf in f, g; destruct_head' prod.
- exact (proj2_sig (fieldwiseb_sig f' g')).
-Qed.
-
-Definition eqb_sig (f g : fe2213_32) :
- { b | b = eqb int_width f g }.
-Proof.
- cbv [eqb].
- cbv [fe2213_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv [ModularBaseSystem.freeze int_width].
- rewrite <-!from_list_default_eq with (d := 0).
- rewrite <-!(freeze_opt_correct c_) by auto using length_to_list.
- rewrite <-!freeze_correct.
- rewrite <-fieldwiseb_correct.
- reflexivity.
-Defined.
-
-Definition eqb (f g : fe2213_32) : bool
- := Eval cbv beta iota delta [proj1_sig eqb_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7) := f in
- let '(g0, g1, g2, g3, g4, g5, g6, g7) := g in
- proj1_sig (eqb_sig (f0, f1, f2, f3, f4, f5, f6, f7)
- (g0, g1, g2, g3, g4, g5, g6, g7)).
-
-Lemma eqb_correct (f g : fe2213_32)
- : eqb f g = ModularBaseSystem.eqb int_width f g.
-Proof.
- set (f' := f); set (g' := g).
- hnf in f, g; destruct_head' prod.
- exact (proj2_sig (eqb_sig f' g')).
-Qed.
-
-Definition sqrt_sig (powx powx_squared f : fe2213_32) :
- { f' : fe2213_32 | f' = sqrt_5mod8_opt (int_width := int_width) k_ c_ sqrt_m1 powx powx_squared f}.
-Proof.
- eexists.
- cbv [sqrt_5mod8_opt int_width].
- apply Proper_Let_In_nd_changebody; [reflexivity|intro].
- set_evars. rewrite <-!mul_correct, <-eqb_correct. subst_evars.
- reflexivity.
-Defined.
-
-Definition sqrt (powx powx_squared f : fe2213_32) : fe2213_32
- := Eval cbv beta iota delta [proj1_sig sqrt_sig] in proj1_sig (sqrt_sig powx powx_squared f).
-
-Definition sqrt_correct (powx powx_squared f : fe2213_32)
- : sqrt powx powx_squared f = sqrt_5mod8_opt k_ c_ sqrt_m1 powx powx_squared f
- := Eval cbv beta iota delta [proj2_sig sqrt_sig] in proj2_sig (sqrt_sig powx powx_squared f).
-
-Definition pack_simpl_sig (f : fe2213_32) :
- { f' | f' = pack_opt params2213_32 wire_widths_nonneg bits_eq f }.
-Proof.
- cbv [fe2213_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv [pack_opt].
- repeat (rewrite <-convert'_opt_correct;
- cbv - [from_list_default_opt Conversion.convert']).
- repeat progress rewrite ?Z.shiftl_0_r, ?Z.shiftr_0_r, ?Z.land_0_l, ?Z.lor_0_l, ?Z.land_same_r.
- cbv [from_list_default_opt].
- reflexivity.
-Defined.
-
-Definition pack_simpl (f : fe2213_32) :=
- Eval cbv beta iota delta [proj1_sig pack_simpl_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7) := f in
- proj1_sig (pack_simpl_sig (f0, f1, f2, f3, f4, f5, f6, f7)).
-
-Definition pack_simpl_correct (f : fe2213_32)
- : pack_simpl f = pack_opt params2213_32 wire_widths_nonneg bits_eq f.
-Proof.
- pose proof (proj2_sig (pack_simpl_sig f)).
- cbv [fe2213_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Qed.
-
-Definition pack_sig (f : fe2213_32) :
- { f' | f' = pack_opt params2213_32 wire_widths_nonneg bits_eq f }.
-Proof.
- eexists.
- rewrite <-pack_simpl_correct.
- rewrite <-(@app_n_correct wire_digits).
- cbv.
- reflexivity.
-Defined.
-
-Definition pack (f : fe2213_32) : wire_digits :=
- Eval cbv beta iota delta [proj1_sig pack_sig] in proj1_sig (pack_sig f).
-
-Definition pack_correct (f : fe2213_32)
- : pack f = pack_opt params2213_32 wire_widths_nonneg bits_eq f
- := Eval cbv beta iota delta [proj2_sig pack_sig] in proj2_sig (pack_sig f).
-
-Definition unpack_simpl_sig (f : wire_digits) :
- { f' | f' = unpack_opt params2213_32 wire_widths_nonneg bits_eq f }.
-Proof.
- cbv [wire_digits] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv [unpack_opt].
- repeat (
- rewrite <-convert'_opt_correct;
- cbv - [from_list_default_opt Conversion.convert']).
- repeat progress rewrite ?Z.shiftl_0_r, ?Z.shiftr_0_r, ?Z.land_0_l, ?Z.lor_0_l, ?Z.land_same_r.
- cbv [from_list_default_opt].
- reflexivity.
-Defined.
-
-Definition unpack_simpl (f : wire_digits) : fe2213_32 :=
- Eval cbv beta iota delta [proj1_sig unpack_simpl_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6) := f in
- proj1_sig (unpack_simpl_sig (f0, f1, f2, f3, f4, f5, f6)).
-
-Definition unpack_simpl_correct (f : wire_digits)
- : unpack_simpl f = unpack_opt params2213_32 wire_widths_nonneg bits_eq f.
-Proof.
- pose proof (proj2_sig (unpack_simpl_sig f)).
- cbv [wire_digits] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Qed.
-
-Definition unpack_sig (f : wire_digits) :
- { f' | f' = unpack_opt params2213_32 wire_widths_nonneg bits_eq f }.
-Proof.
- eexists.
- rewrite <-unpack_simpl_correct.
- rewrite <-(@app_n2_correct fe2213_32).
- cbv.
- reflexivity.
-Defined.
-
-Definition unpack (f : wire_digits) : fe2213_32 :=
- Eval cbv beta iota delta [proj1_sig unpack_sig] in proj1_sig (unpack_sig f).
-
-Definition unpack_correct (f : wire_digits)
- : unpack f = unpack_opt params2213_32 wire_widths_nonneg bits_eq f
- := Eval cbv beta iota delta [proj2_sig pack_sig] in proj2_sig (unpack_sig f).
diff --git a/src/SpecificGen/GF2213_32Bounded.v b/src/SpecificGen/GF2213_32Bounded.v
deleted file mode 100644
index c207dc557..000000000
--- a/src/SpecificGen/GF2213_32Bounded.v
+++ /dev/null
@@ -1,521 +0,0 @@
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParams.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParamProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemOpt.
-Require Import Crypto.SpecificGen.GF2213_32.
-Require Import Crypto.SpecificGen.GF2213_32BoundedCommon.
-Require Import Crypto.SpecificGen.GF2213_32Reflective.
-Require Import Bedrock.Word Crypto.Util.WordUtil.
-Require Import Coq.Lists.List Crypto.Util.ListUtil.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemWord.
-Require Import Crypto.Tactics.VerdiTactics.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Notations.
-Require Import Crypto.Util.Bool.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Algebra.
-Import ListNotations.
-Require Import Coq.ZArith.ZArith Coq.ZArith.Zpower Coq.ZArith.ZArith Coq.ZArith.Znumtheory.
-Local Open Scope Z.
-
-
-Local Ltac cbv_tuple_map :=
- cbv [Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list' HList.hlistP HList.hlistP'].
-
-Local Ltac post_bounded_t :=
- (* much pain and hackery to work around [Defined] taking forever *)
- cbv_tuple_map;
- let blem' := fresh "blem'" in
- let is_bounded_lem := fresh "is_bounded_lem" in
- intros is_bounded_lem blem';
- apply blem'; repeat apply conj; apply is_bounded_lem.
-Local Ltac bounded_t opW blem :=
- generalize blem; generalize is_bounded_proj1_fe2213_32; post_bounded_t.
-Local Ltac bounded_wire_digits_t opW blem :=
- generalize blem; generalize is_bounded_proj1_wire_digits; post_bounded_t.
-
-Local Ltac define_binop f g opW blem :=
- refine (exist_fe2213_32W (opW (proj1_fe2213_32W f, proj1_fe2213_32W g)) _);
- abstract bounded_t opW blem.
-Local Ltac define_unop f opW blem :=
- refine (exist_fe2213_32W (opW (proj1_fe2213_32W f)) _);
- abstract bounded_t opW blem.
-Local Ltac define_unop_FEToZ f opW :=
- refine (opW (proj1_fe2213_32W f)).
-Local Ltac define_unop_FEToWire f opW blem :=
- refine (exist_wire_digitsW (opW (proj1_fe2213_32W f)) _);
- abstract bounded_t opW blem.
-Local Ltac define_unop_WireToFE f opW blem :=
- refine (exist_fe2213_32W (opW (proj1_wire_digitsW f)) _);
- abstract bounded_wire_digits_t opW blem.
-
-Local Opaque Let_In.
-Local Opaque Z.add Z.sub Z.mul Z.shiftl Z.shiftr Z.land Z.lor Z.eqb NToWord64.
-Local Arguments interp_radd / _.
-Local Arguments interp_rsub / _.
-Local Arguments interp_rmul / _.
-Local Arguments interp_ropp / _.
-Local Arguments interp_rprefreeze / _.
-Local Arguments interp_rge_modulus / _.
-Local Arguments interp_rpack / _.
-Local Arguments interp_runpack / _.
-Definition addW (f : fe2213_32W * fe2213_32W) : fe2213_32W := Eval simpl in interp_radd f.
-Definition subW (f : fe2213_32W * fe2213_32W) : fe2213_32W := Eval simpl in interp_rsub f.
-Definition mulW (f : fe2213_32W * fe2213_32W) : fe2213_32W := Eval simpl in interp_rmul f.
-Definition oppW (f : fe2213_32W) : fe2213_32W := Eval simpl in interp_ropp f.
-Definition prefreezeW (f : fe2213_32W) : fe2213_32W := Eval simpl in interp_rprefreeze f.
-Definition ge_modulusW (f : fe2213_32W) : word64 := Eval simpl in interp_rge_modulus f.
-Definition packW (f : fe2213_32W) : wire_digitsW := Eval simpl in interp_rpack f.
-Definition unpackW (f : wire_digitsW) : fe2213_32W := Eval simpl in interp_runpack f.
-
-Definition modulusW :=
- Eval cbv - [ZToWord64] in (Tuple.map ZToWord64 (Tuple.from_list_default 0%Z length_fe2213_32 GF2213_32.modulus_digits_)).
-
-Definition postfreeze : GF2213_32.fe2213_32 -> GF2213_32.fe2213_32 :=
- GF2213_32.postfreeze.
-
-Lemma freeze_prepost_freeze : forall x, postfreeze (prefreeze x) = GF2213_32.freeze x.
-Proof. reflexivity. Qed.
-
-Definition postfreezeW : fe2213_32W -> fe2213_32W :=
- (conditional_subtract_modulusW
- (num_limbs := length_fe2213_32)
- modulusW
- ge_modulusW
- (Interpretations64.WordW.neg GF2213_32.int_width)
- ).
-
-Definition freezeW (f : fe2213_32W) : fe2213_32W := Eval cbv beta delta [prefreezeW postfreezeW] in postfreezeW (prefreezeW f).
-
-Local Transparent Let_In.
-(* Wrapper to allow extracted code to not unfold [mulW] *)
-Definition mulW_noinline := mulW.
-Definition powW (f : fe2213_32W) chain := fold_chain_opt (proj1_fe2213_32W one) (fun f g => mulW_noinline (f, g)) chain [f].
-Definition invW (f : fe2213_32W) : fe2213_32W
- := Eval cbv -[Let_In fe2213_32W mulW_noinline] in powW f (chain inv_ec).
-
-Local Ltac port_correct_and_bounded pre_rewrite opW interp_rop rop_cb :=
- change opW with (interp_rop);
- rewrite pre_rewrite;
- intros; apply rop_cb; assumption.
-
-Lemma addW_correct_and_bounded : ibinop_correct_and_bounded addW (Curry.curry2 carry_add).
-Proof. port_correct_and_bounded interp_radd_correct addW interp_radd radd_correct_and_bounded. Qed.
-Lemma subW_correct_and_bounded : ibinop_correct_and_bounded subW (Curry.curry2 carry_sub).
-Proof. port_correct_and_bounded interp_rsub_correct subW interp_rsub rsub_correct_and_bounded. Qed.
-Lemma mulW_correct_and_bounded : ibinop_correct_and_bounded mulW (Curry.curry2 mul).
-Proof. port_correct_and_bounded interp_rmul_correct mulW interp_rmul rmul_correct_and_bounded. Qed.
-Lemma oppW_correct_and_bounded : iunop_correct_and_bounded oppW carry_opp.
-Proof. port_correct_and_bounded interp_ropp_correct oppW interp_ropp ropp_correct_and_bounded. Qed.
-Lemma prefreezeW_correct_and_bounded : iunop_correct_and_bounded prefreezeW prefreeze.
-Proof. port_correct_and_bounded interp_rprefreeze_correct prefreezeW interp_rprefreeze rprefreeze_correct_and_bounded. Qed.
-Lemma ge_modulusW_correct : iunop_FEToZ_correct ge_modulusW ge_modulus.
-Proof. port_correct_and_bounded interp_rge_modulus_correct ge_modulusW interp_rge_modulus rge_modulus_correct_and_bounded. Qed.
-Lemma packW_correct_and_bounded : iunop_FEToWire_correct_and_bounded packW pack.
-Proof. port_correct_and_bounded interp_rpack_correct packW interp_rpack rpack_correct_and_bounded. Qed.
-Lemma unpackW_correct_and_bounded : iunop_WireToFE_correct_and_bounded unpackW unpack.
-Proof. port_correct_and_bounded interp_runpack_correct unpackW interp_runpack runpack_correct_and_bounded. Qed.
-
-Ltac lower_bound_minus_ge_modulus :=
- apply Z.le_0_sub;
- cbv [ge_modulus Let_In ModularBaseSystemListZOperations.cmovl ModularBaseSystemListZOperations.cmovne ModularBaseSystemListZOperations.neg];
- repeat break_if; Z.ltb_to_lt; subst; try omega;
- rewrite ?Z.land_0_l; auto;
- change Interpretations64.WordW.wordWToZ with word64ToZ;
- etransitivity; try apply Z.land_upper_bound_r; instantiate; try omega;
- apply Z.ones_nonneg; instantiate; vm_compute; discriminate.
-
-Ltac upper_bound_minus_ge_modulus :=
- (apply Z.log2_lt_pow2_alt; [ vm_compute; reflexivity | ]);
- eapply Z.le_lt_trans; [ apply Z.le_sub_nonneg; apply Z.land_nonneg; right; omega | ];
- eapply Z.le_lt_trans; [ eassumption | ];
- instantiate; vm_compute; reflexivity.
-
-Lemma postfreezeW_correct_and_bounded : iunop_correct_and_bounded postfreezeW postfreeze.
-Proof.
- intros x H.
- pose proof (ge_modulusW_correct x H) as Hgm.
- destruct_head_hnf' prod.
- unfold_is_bounded_in H.
- destruct_head' and.
- Z.ltb_to_lt.
- cbv [postfreezeW].
- cbv [conditional_subtract_modulusW Interpretations64.WordW.neg].
- change word64ToZ with Interpretations64.WordW.wordWToZ in *.
- rewrite Hgm.
-
- cbv [modulusW Tuple.map].
- cbv [on_tuple List.map to_list to_list' from_list from_list'
- HList.hlistP HList.hlistP'
- Tuple.map2 on_tuple2 ListUtil.map2 fe2213_32WToZ length_fe2213_32].
- cbv [postfreeze GF2213_32.postfreeze].
- cbv [Let_In].
-
- split.
- { match goal with
- |- (_,word64ToZ (_ ^- (Interpretations64.WordW.ZToWordW ?x) ^& _)) = (_,_ - (?y &' _)) => assert (x = y) as Hxy by reflexivity; repeat rewrite <-Hxy; clear Hxy end.
-
- change ZToWord64 with Interpretations64.WordW.ZToWordW in *.
- preunfold_is_bounded.
- rewrite !Interpretations64.WordW.wordWToZ_sub;
- rewrite !Interpretations64.WordW.wordWToZ_land;
- rewrite !Interpretations64.WordW.wordWToZ_ZToWordW;
- try match goal with
- | |- 0 <= ModularBaseSystemListZOperations.neg _ _ < 2 ^ _ => apply ModularBaseSystemListZOperationsProofs.neg_range; omega
- | |- 0 <= _ < 2 ^ Z.of_nat _ => vm_compute; split; [refine (fun x => match x with eq_refl => I end) | reflexivity]
- | |- 0 <= _ &' _ => apply Z.land_nonneg; right; omega
- | |- (_,_) = (_,_) => reflexivity
- end;
- try solve [
- (apply Z.log2_lt_pow2_alt; [ vm_compute; reflexivity | ]);
- eapply Z.le_lt_trans; try apply Z.land_upper_bound_r; try apply ModularBaseSystemListZOperationsProofs.neg_range; instantiate; try match goal with |- ?G => not has_evar G; vm_compute; discriminate end; reflexivity];
- match goal with
- | |- 0 <= _ - _ => lower_bound_minus_ge_modulus
- | |- Z.log2 (_ - _) < _ => upper_bound_minus_ge_modulus
- end. }
-
-
- change ZToWord64 with Interpretations64.WordW.ZToWordW in *;
- preunfold_is_bounded.
- rewrite !Interpretations64.WordW.wordWToZ_sub;
- rewrite !Interpretations64.WordW.wordWToZ_land;
- rewrite !Interpretations64.WordW.wordWToZ_ZToWordW;
- repeat match goal with |- _ /\ _ => split; Z.ltb_to_lt end;
- Z.ltb_to_lt; unfold_is_bounded; Z.ltb_to_lt;
- try match goal with
- | |- 0 <= ModularBaseSystemListZOperations.neg _ _ < 2 ^ _ => apply ModularBaseSystemListZOperationsProofs.neg_range; omega
- | |- 0 <= _ < 2 ^ Z.of_nat _ => vm_compute; split; [refine (fun x => match x with eq_refl => I end) | reflexivity]
- | |- 0 <= _ &' _ => apply Z.land_nonneg; right; omega
- end;
- try solve [
- (apply Z.log2_lt_pow2_alt; [ vm_compute; reflexivity | ]);
- eapply Z.le_lt_trans; try apply Z.land_upper_bound_r; try apply ModularBaseSystemListZOperationsProofs.neg_range; instantiate; try match goal with |- ?G => not has_evar G; vm_compute; discriminate end; reflexivity];
- try match goal with
- | |- 0 <= _ - _ => lower_bound_minus_ge_modulus
- | |- Z.log2 (_ - _) < _ => upper_bound_minus_ge_modulus
- | |- _ - _ <= _ => etransitivity; [ apply Z.le_sub_nonneg; apply Z.land_nonneg; right; omega | instantiate; assumption ]
- | |- 0 <= ModularBaseSystemListZOperations.neg _ _ =>
- apply ModularBaseSystemListZOperationsProofs.neg_range; vm_compute; discriminate
- | |- ModularBaseSystemListZOperations.neg _ _ < _ =>
- apply ModularBaseSystemListZOperationsProofs.neg_range; vm_compute; discriminate
- | |- _ => vm_compute; (discriminate || reflexivity)
- end.
-Qed.
-
-Lemma freezeW_correct_and_bounded : iunop_correct_and_bounded freezeW freeze.
-Proof.
- intros f H; rewrite <- freeze_prepost_freeze.
- change (freezeW f) with (postfreezeW (prefreezeW f)).
- destruct (prefreezeW_correct_and_bounded f H) as [H0 H1].
- destruct (postfreezeW_correct_and_bounded _ H1) as [H0' H1'].
- split; [ | assumption ].
- rewrite H0', H0; reflexivity.
-Qed.
-
-Lemma powW_correct_and_bounded chain : iunop_correct_and_bounded (fun x => powW x chain) (fun x => pow x chain).
-Proof.
- cbv [powW pow].
- intro x; intros; apply (fold_chain_opt_gen fe2213_32WToZ is_bounded [x]).
- { reflexivity. }
- { reflexivity. }
- { intros; pose proof (fun k0 k1 X Y => proj1 (mulW_correct_and_bounded (k0, k1) (conj X Y))) as H'.
- cbv [Curry.curry2 Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list'] in H'.
- rewrite <- H' by assumption.
- apply mulW_correct_and_bounded; split; assumption. }
- { intros; rewrite (fun X Y => proj1 (mulW_correct_and_bounded (_, _) (conj X Y))) by assumption; reflexivity. }
- { intros [|?]; autorewrite with simpl_nth_default;
- (assumption || reflexivity). }
-Qed.
-
-Lemma invW_correct_and_bounded : iunop_correct_and_bounded invW inv.
-Proof.
- intro f.
- assert (H : forall f, invW f = powW f (chain inv_ec))
- by abstract (cbv -[Let_In fe2213_32W mulW_noinline]; reflexivity).
- rewrite H.
- rewrite inv_correct.
- cbv [inv_opt].
- rewrite <- pow_correct.
- apply powW_correct_and_bounded.
-Qed.
-
-Definition fieldwisebW_sig (f g : fe2213_32W)
- : { b | b = GF2213_32.fieldwiseb (fe2213_32WToZ f) (fe2213_32WToZ g) }.
-Proof.
- hnf in f, g; destruct_head' prod.
- eexists.
- cbv [GF2213_32.fieldwiseb fe2213_32WToZ].
- rewrite ?word64eqb_Zeqb.
- reflexivity.
-Defined.
-
-Definition fieldwisebW (f g : fe2213_32W) : bool :=
- Eval cbv [proj1_sig fieldwisebW_sig appify2 app_fe2213_32W] in
- appify2 (fun f g => proj1_sig (fieldwisebW_sig f g)) f g.
-
-Lemma fieldwisebW_correct f g
- : fieldwisebW f g = GF2213_32.fieldwiseb (fe2213_32WToZ f) (fe2213_32WToZ g).
-Proof.
- set (f' := f); set (g' := g).
- hnf in f, g; destruct_head' prod.
- exact (proj2_sig (fieldwisebW_sig f' g')).
-Qed.
-
-Local Arguments freezeW : simpl never.
-Local Arguments fe2213_32WToZ !_ / .
-Local Opaque freezeW.
-
-Definition eqbW_sig (f g : fe2213_32W)
- : { b | is_bounded (fe2213_32WToZ f) = true
- -> is_bounded (fe2213_32WToZ g) = true
- -> b = GF2213_32.eqb (fe2213_32WToZ f) (fe2213_32WToZ g) }.
-Proof.
- pose proof (fun pf => proj1 (freezeW_correct_and_bounded f pf)) as frf.
- pose proof (fun pf => proj1 (freezeW_correct_and_bounded g pf)) as frg.
- hnf in f, g; destruct_head' prod.
- eexists.
- unfold GF2213_32.eqb.
- simpl @fe2213_32WToZ in *; cbv beta iota.
- intros.
- cbv [Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list' fe2213_32WToZ] in *.
- rewrite <- frf, <- frg by assumption.
- etransitivity; [ eapply fieldwisebW_correct | ].
- cbv [fe2213_32WToZ].
- reflexivity.
-Defined.
-
-Definition eqbW (f g : fe2213_32W) : bool :=
- Eval cbv [proj1_sig eqbW_sig appify2 app_fe2213_32W] in
- appify2 (fun f g => proj1_sig (eqbW_sig f g)) f g.
-
-Lemma eqbW_correct f g
- : is_bounded (fe2213_32WToZ f) = true
- -> is_bounded (fe2213_32WToZ g) = true
- -> eqbW f g = GF2213_32.eqb (fe2213_32WToZ f) (fe2213_32WToZ g).
-Proof.
- set (f' := f); set (g' := g).
- hnf in f, g; destruct_head' prod.
- exact (proj2_sig (eqbW_sig f' g')).
-Qed.
-
-Definition sqrt_m1W' : fe2213_32W :=
- Eval vm_compute in fe2213_32ZToW sqrt_m1.
-Definition sqrt_m1W := Eval cbv [sqrt_m1W' fe2213_32W_word64ize word64ize andb opt.word64ToZ opt.word64ize opt.Zleb Z.compare CompOpp Pos.compare Pos.compare_cont] in fe2213_32W_word64ize sqrt_m1W'.
-
-Definition GF2213_32sqrt (x : GF2213_32.fe2213_32) : GF2213_32.fe2213_32.
-Proof.
- lazymatch (eval cbv delta [GF2213_32.sqrt] in GF2213_32.sqrt) with
- | (fun powf powf_squared f => dlet a := powf in _)
- => exact (dlet powx := powW (fe2213_32ZToW x) (chain GF2213_32.sqrt_ec) in
- GF2213_32.sqrt (fe2213_32WToZ powx) (fe2213_32WToZ (mulW_noinline (powx, powx))) x)
- | (fun f => pow f _)
- => exact (GF2213_32.sqrt x)
- end.
-Defined.
-
-Definition sqrtW_sig
- : { sqrtW | iunop_correct_and_bounded sqrtW GF2213_32sqrt }.
-Proof.
- eexists.
- unfold GF2213_32sqrt, GF2213_32.sqrt.
- intros.
- rewrite ?fe2213_32ZToW_WToZ.
- split.
- { etransitivity.
- Focus 2. {
- lazymatch goal with
- | [ |- _ = pow _ _ ]
- => apply powW_correct_and_bounded; assumption
- | [ |- _ = (dlet powx := _ in _) ]
- => apply Proper_Let_In_nd_changebody_eq; intros;
- set_evars;
- match goal with (* unfold the first dlet ... in, but only if it's binding a var *)
- | [ |- ?x = dlet y := fe2213_32WToZ ?z in ?f ]
- => is_var z; change (x = match fe2213_32WToZ z with y => f end)
- end;
- change sqrt_m1 with (fe2213_32WToZ sqrt_m1W);
- pose proof (fun X Y => proj1 (mulW_correct_and_bounded (sqrt_m1W, a) (conj X Y))) as correctness;
- let cbv_in_all _ := (cbv [fe2213_32WToZ Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list' fe2213_32WToZ Curry.curry2 HList.hlistP HList.hlistP'] in *; idtac) in
- cbv_in_all ();
- let solver _ := (repeat match goal with
- | _ => progress subst
- | _ => progress unfold fst, snd
- | _ => progress cbv_in_all ()
- | [ |- ?x /\ ?x ] => cut x; [ intro; split; assumption | ]
- | [ |- is_bounded ?op = true ]
- => let H := fresh in
- lazymatch op with
- | context[mulW (_, _)] => pose proof mulW_correct_and_bounded as H
- | context[mulW_noinline (_, _)] => pose proof mulW_correct_and_bounded as H
- | context[powW _ _] => pose proof powW_correct_and_bounded as H
- | context[sqrt_m1W] => vm_compute; reflexivity
- | _ => assumption
- end;
- cbv_in_all ();
- apply H
- end) in
- rewrite <- correctness by solver (); clear correctness;
- let lem := fresh in
- pose proof eqbW_correct as lem; cbv_in_all (); rewrite <- lem by solver (); clear lem;
- pose proof (pull_bool_if fe2213_32WToZ) as lem; cbv_in_all (); rewrite lem by solver (); clear lem;
- subst_evars; reflexivity
- end.
- } Unfocus.
- assert (Hfold : forall x, fe2213_32WToZ x = fe2213_32WToZ x) by reflexivity.
- unfold fe2213_32WToZ at 2 in Hfold.
- etransitivity.
- Focus 2. {
- apply Proper_Let_In_nd_changebody; [ reflexivity | intro ].
- apply Hfold.
- } Unfocus.
- clear Hfold.
- lazymatch goal with
- | [ |- context G[dlet x := ?v in fe2213_32WToZ (@?f x)] ]
- => let G' := context G[fe2213_32WToZ (dlet x := v in f x)] in
- cut G'; cbv beta;
- [ cbv [Let_In]; exact (fun x => x) | apply f_equal ]
- | _ => idtac
- end;
- reflexivity.
- }
-
- { cbv [Let_In HList.hlistP HList.hlistP'];
- try break_if;
- repeat lazymatch goal with
- | [ |- is_bounded (?WToZ (powW _ _)) = true ]
- => apply powW_correct_and_bounded; assumption
- | [ |- is_bounded (snd (?WToZ (_, powW _ _))) = true ]
- => generalize powW_correct_and_bounded;
- cbv [snd Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list' HList.hlistP HList.hlistP'];
- let H := fresh in intro H; apply H; assumption
- | [ |- is_bounded (?WToZ (mulW (_, _))) = true ]
- => apply mulW_correct_and_bounded; split; [ vm_compute; reflexivity | ]
- end.
- }
-Defined.
-
-Definition sqrtW (f : fe2213_32W) : fe2213_32W :=
- Eval cbv [proj1_sig sqrtW_sig app_fe2213_32W] in
- app_fe2213_32W f (proj1_sig sqrtW_sig).
-
-Lemma sqrtW_correct_and_bounded : iunop_correct_and_bounded sqrtW GF2213_32sqrt.
-Proof.
- intro f.
- set (f' := f).
- hnf in f; destruct_head' prod.
- assert (H : sqrtW f' = proj1_sig sqrtW_sig f')
- by (subst f'; cbv beta iota delta [proj1_sig sqrtW_sig sqrtW]; reflexivity).
- rewrite H.
- exact (proj2_sig sqrtW_sig f').
-Qed.
-
-
-
-Definition add (f g : fe2213_32) : fe2213_32.
-Proof. define_binop f g addW addW_correct_and_bounded. Defined.
-Definition sub (f g : fe2213_32) : fe2213_32.
-Proof. define_binop f g subW subW_correct_and_bounded. Defined.
-Definition mul (f g : fe2213_32) : fe2213_32.
-Proof. define_binop f g mulW mulW_correct_and_bounded. Defined.
-Definition opp (f : fe2213_32) : fe2213_32.
-Proof. define_unop f oppW oppW_correct_and_bounded. Defined.
-Definition freeze (f : fe2213_32) : fe2213_32.
-Proof. define_unop f freezeW freezeW_correct_and_bounded. Defined.
-Definition ge_modulus (f : fe2213_32) : word64.
-Proof. define_unop_FEToZ f ge_modulusW. Defined.
-Definition pack (f : fe2213_32) : wire_digits.
-Proof. define_unop_FEToWire f packW packW_correct_and_bounded. Defined.
-Definition unpack (f : wire_digits) : fe2213_32.
-Proof. define_unop_WireToFE f unpackW unpackW_correct_and_bounded. Defined.
-
-Definition pow (f : fe2213_32) (chain : list (nat * nat)) : fe2213_32.
-Proof. define_unop f (fun x => powW x chain) powW_correct_and_bounded. Defined.
-Definition inv (f : fe2213_32) : fe2213_32.
-Proof. define_unop f invW (fun x p => proj2 (invW_correct_and_bounded x p)). Defined.
-Definition sqrt (f : fe2213_32) : fe2213_32.
-Proof. define_unop f sqrtW sqrtW_correct_and_bounded. Defined.
-
-Local Ltac op_correct_t op opW_correct_and_bounded :=
- cbv [op];
- lazymatch goal with
- | [ |- context[proj1_fe2213_32 (exist_fe2213_32W _ _)] ]
- => rewrite proj1_fe2213_32_exist_fe2213_32W
- | [ |- context[proj1_wire_digits (exist_wire_digitsW _ _)] ]
- => rewrite proj1_wire_digits_exist_wire_digitsW
- | _ => idtac
- end;
- generalize opW_correct_and_bounded;
- cbv_tuple_map;
- cbv [fst snd];
- let H := fresh in
- intro H; apply H;
- repeat match goal with |- and _ _ => apply conj end;
- lazymatch goal with
- | [ |- is_bounded _ = true ]
- => apply is_bounded_proj1_fe2213_32
- | [ |- wire_digits_is_bounded _ = true ]
- => apply is_bounded_proj1_wire_digits
- end.
-
-Lemma add_correct (f g : fe2213_32) : proj1_fe2213_32 (add f g) = carry_add (proj1_fe2213_32 f) (proj1_fe2213_32 g).
-Proof. op_correct_t add addW_correct_and_bounded. Qed.
-Lemma sub_correct (f g : fe2213_32) : proj1_fe2213_32 (sub f g) = carry_sub (proj1_fe2213_32 f) (proj1_fe2213_32 g).
-Proof. op_correct_t sub subW_correct_and_bounded. Qed.
-Lemma mul_correct (f g : fe2213_32) : proj1_fe2213_32 (mul f g) = GF2213_32.mul (proj1_fe2213_32 f) (proj1_fe2213_32 g).
-Proof. op_correct_t mul mulW_correct_and_bounded. Qed.
-Lemma opp_correct (f : fe2213_32) : proj1_fe2213_32 (opp f) = carry_opp (proj1_fe2213_32 f).
-Proof. op_correct_t opp oppW_correct_and_bounded. Qed.
-Lemma freeze_correct (f : fe2213_32) : proj1_fe2213_32 (freeze f) = GF2213_32.freeze (proj1_fe2213_32 f).
-Proof. op_correct_t freeze freezeW_correct_and_bounded. Qed.
-Lemma ge_modulus_correct (f : fe2213_32) : word64ToZ (ge_modulus f) = GF2213_32.ge_modulus (proj1_fe2213_32 f).
-Proof. op_correct_t ge_modulus ge_modulusW_correct. Qed.
-Lemma pack_correct (f : fe2213_32) : proj1_wire_digits (pack f) = GF2213_32.pack (proj1_fe2213_32 f).
-Proof. op_correct_t pack packW_correct_and_bounded. Qed.
-Lemma unpack_correct (f : wire_digits) : proj1_fe2213_32 (unpack f) = GF2213_32.unpack (proj1_wire_digits f).
-Proof. op_correct_t unpack unpackW_correct_and_bounded. Qed.
-Lemma pow_correct (f : fe2213_32) chain : proj1_fe2213_32 (pow f chain) = GF2213_32.pow (proj1_fe2213_32 f) chain.
-Proof. op_correct_t pow (powW_correct_and_bounded chain). Qed.
-Lemma inv_correct (f : fe2213_32) : proj1_fe2213_32 (inv f) = GF2213_32.inv (proj1_fe2213_32 f).
-Proof. op_correct_t inv (fun x p => proj1 (invW_correct_and_bounded x p)). Qed.
-Lemma sqrt_correct (f : fe2213_32) : proj1_fe2213_32 (sqrt f) = GF2213_32sqrt (proj1_fe2213_32 f).
-Proof. op_correct_t sqrt sqrtW_correct_and_bounded. Qed.
-
-Import Morphisms.
-
-Local Existing Instance prime_modulus.
-
-Lemma field2213_32_and_homomorphisms
- : @field fe2213_32 eq zero one opp add sub mul inv div
- /\ @Ring.is_homomorphism (F _) (@Logic.eq _) 1%F F.add F.mul fe2213_32 eq one add mul encode
- /\ @Ring.is_homomorphism fe2213_32 eq one add mul (F _) (@Logic.eq _) 1%F F.add F.mul decode.
-Proof.
- eapply @Field.field_and_homomorphism_from_redundant_representation.
- { exact (F.field_modulo _). }
- { cbv [decode encode]; intros; rewrite !proj1_fe2213_32_exist_fe2213_32; apply encode_rep. }
- { reflexivity. }
- { reflexivity. }
- { reflexivity. }
- { cbv [decode encode]; intros; rewrite opp_correct, carry_opp_correct, carry_opp_opt_correct, carry_opp_rep; apply opp_rep; reflexivity. }
- { cbv [decode encode]; intros; rewrite add_correct, carry_add_correct, carry_add_opt_correct, carry_add_rep; apply add_rep; reflexivity. }
- { cbv [decode encode]; intros; rewrite sub_correct, carry_sub_correct, carry_sub_opt_correct, carry_sub_rep; apply sub_rep; reflexivity. }
- { cbv [decode encode]; intros; rewrite mul_correct, GF2213_32.mul_correct, carry_mul_opt_correct by reflexivity; apply carry_mul_rep; reflexivity. }
- { cbv [decode encode]; intros; rewrite inv_correct, GF2213_32.inv_correct, inv_opt_correct by reflexivity; apply inv_rep; reflexivity. }
- { cbv [decode encode div]; intros; rewrite !proj1_fe2213_32_exist_fe2213_32; apply encode_rep. }
-Qed.
-
-Global Instance field2213_32 : @field fe2213_32 eq zero one opp add sub mul inv div := proj1 field2213_32_and_homomorphisms.
-
-Local Opaque proj1_fe2213_32 exist_fe2213_32 proj1_fe2213_32W exist_fe2213_32W.
-Global Instance homomorphism_F2213_32_encode
- : @Ring.is_homomorphism (F modulus) Logic.eq F.one F.add F.mul fe2213_32 eq one add mul encode.
-Proof. apply field2213_32_and_homomorphisms. Qed.
-
-Global Instance homomorphism_F2213_32_decode
- : @Ring.is_homomorphism fe2213_32 eq one add mul (F modulus) Logic.eq F.one F.add F.mul decode.
-Proof. apply field2213_32_and_homomorphisms. Qed.
diff --git a/src/SpecificGen/GF2213_32BoundedAddCoordinates.v b/src/SpecificGen/GF2213_32BoundedAddCoordinates.v
deleted file mode 100644
index 86d5b1db7..000000000
--- a/src/SpecificGen/GF2213_32BoundedAddCoordinates.v
+++ /dev/null
@@ -1,78 +0,0 @@
-Require Import Coq.ZArith.ZArith.
-Require Import Crypto.SpecificGen.GF2213_32.
-Require Import Crypto.SpecificGen.GF2213_32BoundedCommon.
-Require Import Crypto.SpecificGen.GF2213_32ReflectiveAddCoordinates.
-Require Import Crypto.Util.LetIn.
-Local Open Scope Z.
-
-Local Ltac bounded_t opW blem :=
- apply blem; apply is_bounded_proj1_fe2213_32.
-
-Local Ltac define_binop f g opW blem :=
- refine (exist_fe2213_32W (opW (proj1_fe2213_32W f) (proj1_fe2213_32W g)) _);
- abstract bounded_t opW blem.
-
-Local Opaque Let_In.
-Local Opaque Z.add Z.sub Z.mul Z.shiftl Z.shiftr Z.land Z.lor Z.eqb NToWord64.
-(*Local Arguments interp_radd_coordinates / _ _ _ _ _ _ _ _ _.
-Definition add_coordinatesW (x0 x1 x2 x3 x4 x5 x6 x7 x8 : fe2213_32W) : Tuple.tuple fe2213_32W 4
- := Eval simpl in interp_radd_coordinates x0 x1 x2 x3 x4 x5 x6 x7 x8.
-
-Local Ltac port_correct_and_bounded pre_rewrite opW interp_rop rop_cb :=
- change opW with (interp_rop);
- rewrite pre_rewrite;
- intros; apply rop_cb; assumption.
-
-Lemma add_coordinatesW_correct_and_bounded : i9top_correct_and_bounded 4 add_coordinatesW Reified.AddCoordinates.add_coordinates.
-Proof. port_correct_and_bounded interp_radd_coordinates_correct add_coordinatesW interp_radd_coordinates radd_coordinates_correct_and_bounded. Qed.
-
-Local Ltac define_9_4op x0 x1 x2 x3 x4 x5 x6 x7 x8 opW blem :=
- refine (let ts := opW (proj1_fe2213_32W x0)
- (proj1_fe2213_32W x1)
- (proj1_fe2213_32W x2)
- (proj1_fe2213_32W x3)
- (proj1_fe2213_32W x4)
- (proj1_fe2213_32W x5)
- (proj1_fe2213_32W x6)
- (proj1_fe2213_32W x7)
- (proj1_fe2213_32W x8) in
- HList.mapt exist_fe2213_32W (ts:=ts) _);
- abstract (
- rewrite <- (HList.hlist_map (F:=fun x => is_bounded x = true) (f:=fe2213_32WToZ));
- apply add_coordinatesW_correct_and_bounded; apply is_bounded_proj1_fe2213_32
- ).
-Definition add_coordinates (x0 x1 x2 x3 x4 x5 x6 x7 x8 : fe2213_32) : Tuple.tuple fe2213_32 4.
-Proof. define_9_4op x0 x1 x2 x3 x4 x5 x6 x7 x8 add_coordinatesW add_coordinatesW_correct_and_bounded. Defined.
-
-Local Ltac op_correct_t op opW_correct_and_bounded :=
- cbv [op];
- rewrite ?HList.map_mapt;
- lazymatch goal with
- | [ |- context[proj1_fe2213_32 (exist_fe2213_32W _ _)] ]
- => rewrite proj1_fe2213_32_exist_fe2213_32W || setoid_rewrite proj1_fe2213_32_exist_fe2213_32W
- | [ |- context[proj1_wire_digits (exist_wire_digitsW _ _)] ]
- => rewrite proj1_wire_digits_exist_wire_digitsW
- | _ => idtac
- end;
- rewrite <- ?HList.map_is_mapt;
- apply opW_correct_and_bounded;
- lazymatch goal with
- | [ |- is_bounded _ = true ]
- => apply is_bounded_proj1_fe2213_32
- | [ |- wire_digits_is_bounded _ = true ]
- => apply is_bounded_proj1_wire_digits
- end.
-
-Lemma add_coordinates_correct (x0 x1 x2 x3 x4 x5 x6 x7 x8 : fe2213_32)
- : Tuple.map (n:=4) proj1_fe2213_32 (add_coordinates x0 x1 x2 x3 x4 x5 x6 x7 x8)
- = Reified.AddCoordinates.add_coordinates (proj1_fe2213_32 x0)
- (proj1_fe2213_32 x1)
- (proj1_fe2213_32 x2)
- (proj1_fe2213_32 x3)
- (proj1_fe2213_32 x4)
- (proj1_fe2213_32 x5)
- (proj1_fe2213_32 x6)
- (proj1_fe2213_32 x7)
- (proj1_fe2213_32 x8).
-Proof. op_correct_t add_coordinates add_coordinatesW_correct_and_bounded. Qed.
-*)
diff --git a/src/SpecificGen/GF2213_32BoundedCommon.v b/src/SpecificGen/GF2213_32BoundedCommon.v
deleted file mode 100644
index c1b109cc2..000000000
--- a/src/SpecificGen/GF2213_32BoundedCommon.v
+++ /dev/null
@@ -1,819 +0,0 @@
-Require Import Coq.Classes.Morphisms.
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParams.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParamProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemOpt.
-Require Import Crypto.SpecificGen.GF2213_32.
-Require Import Bedrock.Word Crypto.Util.WordUtil.
-Require Import Coq.Lists.List Crypto.Util.ListUtil.
-Require Import Crypto.Tactics.VerdiTactics.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Notations.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Util.HList.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Algebra.
-Import ListNotations.
-Require Import Coq.ZArith.ZArith Coq.ZArith.Zpower Coq.ZArith.ZArith Coq.ZArith.Znumtheory.
-Local Open Scope Z.
-
-(* BEGIN common curve-specific definitions *)
-Definition bit_width : nat := Eval compute in Z.to_nat (GF2213_32.int_width).
-Local Notation b_of exp := (0, 2^exp + 2^(exp-3))%Z (only parsing). (* max is [(0, 2^(exp+2) + 2^exp + 2^(exp-1) + 2^(exp-3) + 2^(exp-4) + 2^(exp-5) + 2^(exp-6) + 2^(exp-10) + 2^(exp-12) + 2^(exp-13) + 2^(exp-14) + 2^(exp-15) + 2^(exp-17) + 2^(exp-23) + 2^(exp-24))%Z] *)
-Definition bounds_exp : tuple Z length_fe2213_32
- := Eval compute in
- Tuple.from_list length_fe2213_32 limb_widths eq_refl.
-Definition bounds : tuple (Z * Z) length_fe2213_32
- := Eval compute in
- Tuple.map (fun e => b_of e) bounds_exp.
-Definition wire_digit_bounds_exp : tuple Z (length wire_widths)
- := Eval compute in Tuple.from_list _ wire_widths eq_refl.
-Definition wire_digit_bounds : tuple (Z * Z) (length wire_widths)
- := Eval compute in Tuple.map (fun e => (0,2^e-1)%Z) wire_digit_bounds_exp.
-(* END common curve-specific definitions *)
-
-(* BEGIN aliases for word extraction *)
-Definition word64 := Word.word bit_width.
-Coercion word64ToZ (x : word64) : Z := Z.of_N (wordToN x).
-Coercion ZToWord64 (x : Z) : word64 := NToWord _ (Z.to_N x).
-Definition NToWord64 : N -> word64 := NToWord _.
-Definition word64ize (x : word64) : word64
- := Eval cbv [wordToN N.succ_double N.double] in NToWord64 (wordToN x).
-Definition w64eqb (x y : word64) := weqb x y.
-
-Global Arguments NToWord64 : simpl never.
-Arguments word64 : simpl never.
-Arguments bit_width : simpl never.
-Global Opaque word64.
-Global Opaque bit_width.
-
-(* END aliases for word extraction *)
-
-(* BEGIN basic types *)
-Module Type WordIsBounded.
- Parameter is_boundedT : forall (lower upper : Z), word64 -> bool.
- Parameter Build_is_boundedT : forall {lower upper} {proj_word : word64},
- andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z = true -> is_boundedT lower upper proj_word = true.
- Parameter project_is_boundedT : forall {lower upper} {proj_word : word64},
- is_boundedT lower upper proj_word = true -> andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z = true.
-End WordIsBounded.
-
-Module Import WordIsBoundedDefault : WordIsBounded.
- Definition is_boundedT : forall (lower upper : Z), word64 -> bool
- := fun lower upper proj_word => andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z.
- Definition Build_is_boundedT {lower upper} {proj_word : word64}
- : andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z = true -> is_boundedT lower upper proj_word = true
- := fun x => x.
- Definition project_is_boundedT {lower upper} {proj_word : word64}
- : is_boundedT lower upper proj_word = true -> andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z = true
- := fun x => x.
-End WordIsBoundedDefault.
-
-Definition bounded_word (lower upper : Z)
- := { proj_word : word64 | is_boundedT lower upper proj_word = true }.
-Local Notation word_of exp := (bounded_word (fst (b_of exp)) (snd (b_of exp))).
-Local Notation unbounded_word sz := (bounded_word 0 (2^sz-1)%Z).
-
-Local Opaque word64.
-Definition fe2213_32W := Eval cbv (*-[word64]*) in (tuple word64 length_fe2213_32).
-Definition wire_digitsW := Eval cbv (*-[word64]*) in (tuple word64 (length wire_widths)).
-Definition fe2213_32 :=
- Eval cbv -[bounded_word Z.pow Z.sub Z.add] in
- hlist (fun e => word_of e) bounds_exp.
-Definition wire_digits :=
- Eval cbv -[bounded_word Z.pow Z.sub Z.add] in
- hlist (fun e => unbounded_word e) wire_digit_bounds_exp.
-
-Definition is_bounded_gen {n} (x : tuple Z n) (bounds : tuple (Z * Z) n) : bool
- := let res := Tuple.map2
- (fun bounds v =>
- let '(lower, upper) := bounds in
- (lower <=? v) && (v <=? upper))%bool%Z
- bounds x in
- List.fold_right andb true (Tuple.to_list _ res).
-
-Definition is_bounded (x : SpecificGen.GF2213_32.fe2213_32) : bool
- := is_bounded_gen (n:=length_fe2213_32) x bounds.
-
-Definition wire_digits_is_bounded (x : SpecificGen.GF2213_32.wire_digits) : bool
- := is_bounded_gen (n:=length wire_widths) x wire_digit_bounds.
-
-(* END basic types *)
-
-Section generic_destructuring.
- Fixpoint app_on' A n : forall T (f : tuple' A n) (P : forall x : tuple' A n, T x), T f
- := match n return forall T (f : tuple' A n) (P : forall x : tuple' A n, T x), T f with
- | O => fun T v P => P v
- | S n' => fun T v P => let '(v, x) := v in app_on' A n' _ v (fun v => P (v, x))
- end.
- Definition app_on {A n} : forall {T} (f : tuple A n) (P : forall x : tuple A n, T x), T f
- := match n return forall T (f : tuple A n) (P : forall x : tuple A n, T x), T f with
- | O => fun T v P => P v
- | S n' => @app_on' A n'
- end.
- Lemma app_on'_correct {A n T} f (P : forall x : tuple' A n, T x) : app_on' A n T f P = P f.
- Proof.
- induction n; simpl in *; destruct_head' prod; [ reflexivity | exact (IHn _ _ (fun t => P (t, _))) ].
- Qed.
- Lemma app_on_correct {A n T} f (P : forall x : tuple A n, T x) : app_on f P = P f.
- Proof. destruct n; [ reflexivity | apply app_on'_correct ]. Qed.
-
- Fixpoint app_on_h' A F n : forall ts T (f : @hlist' A n F ts) (P : forall x : @hlist' A n F ts, T x), T f
- := match n return forall ts T (f : @hlist' A n F ts) (P : forall x : @hlist' A n F ts, T x), T f with
- | O => fun ts T v P => P v
- | S n' => fun ts T v P => let '(v, x) := v in app_on_h' A F n' _ _ v (fun v => P (v, x))
- end.
- Definition app_on_h {A F n} : forall ts T (f : @hlist A n F ts) (P : forall x : @hlist A n F ts, T x), T f
- := match n return forall ts T (f : @hlist A n F ts) (P : forall x : @hlist A n F ts, T x), T f with
- | O => fun ts T v P => P v
- | S n' => @app_on_h' A F n'
- end.
- Lemma app_on_h'_correct {A F n ts T} f P : @app_on_h' A F n ts T f P = P f.
- Proof.
- induction n; simpl in *; destruct_head' prod; [ reflexivity | exact (IHn _ _ _ (fun h => P (h, f))) ].
- Qed.
- Lemma app_on_h_correct {A} F {n} ts {T} f P : @app_on_h A F n ts T f P = P f.
- Proof. destruct n; [ reflexivity | apply app_on_h'_correct ]. Qed.
-
- Definition app_wire_digitsW_dep {A T} (P : forall x : tuple A (length wire_widths), T x)
- : forall (f : tuple A (length wire_widths)), T f
- := Eval compute in fun f => @app_on A (length wire_widths) T f P.
- Definition app_wire_digitsW {A T} (f : tuple A (length wire_widths)) (P : tuple A (length wire_widths) -> T)
- := Eval compute in @app_wire_digitsW_dep A (fun _ => T) P f.
- Definition app_fe2213_32W_dep {A T} (P : forall x : tuple A length_fe2213_32, T x)
- : forall (f : tuple A length_fe2213_32), T f
- := Eval compute in fun f => @app_on A length_fe2213_32 T f P.
- Definition app_fe2213_32W {A T} (f : tuple A length_fe2213_32) (P : tuple A length_fe2213_32 -> T)
- := Eval compute in @app_fe2213_32W_dep A (fun _ => T) P f.
- Definition app_fe2213_32_dep {T} (P : forall x : fe2213_32, T x)
- : forall f : fe2213_32, T f
- := Eval compute in fun f => @app_on_h _ (fun e => word_of e) length_fe2213_32 bounds_exp T f P.
- Definition app_fe2213_32 {T} (f : fe2213_32) (P : hlist (fun e => word_of e) bounds_exp -> T)
- := Eval compute in @app_fe2213_32_dep (fun _ => T) P f.
- Definition app_wire_digits_dep {T} (P : forall x : wire_digits, T x)
- : forall f : wire_digits, T f
- := Eval compute in fun f => @app_on_h _ (fun e => unbounded_word e) (length wire_widths) wire_digit_bounds_exp T f P.
- Definition app_wire_digits {T} (f : wire_digits) (P : hlist (fun e => unbounded_word e) wire_digit_bounds_exp -> T)
- := Eval compute in @app_wire_digits_dep (fun _ => T) P f.
-
- Definition app_wire_digitsW_dep_correct {A T} f P : @app_wire_digitsW_dep A T P f = P f
- := app_on_correct f P.
- Definition app_wire_digitsW_correct {A T} f P : @app_wire_digitsW A T f P = P f
- := @app_wire_digitsW_dep_correct A (fun _ => T) f P.
- Definition app_fe2213_32W_dep_correct {A T} f P : @app_fe2213_32W_dep A T P f = P f
- := app_on_correct f P.
- Definition app_fe2213_32W_correct {A T} f P : @app_fe2213_32W A T f P = P f
- := @app_fe2213_32W_dep_correct A (fun _ => T) f P.
- Definition app_fe2213_32_dep_correct {T} f P : @app_fe2213_32_dep T P f = P f
- := app_on_h_correct (fun e => word_of e) bounds_exp f P.
- Definition app_fe2213_32_correct {T} f P : @app_fe2213_32 T f P = P f
- := @app_fe2213_32_dep_correct (fun _ => T) f P.
- Definition app_wire_digits_dep_correct {T} f P : @app_wire_digits_dep T P f = P f
- := app_on_h_correct (fun e => unbounded_word e) wire_digit_bounds_exp f P.
- Definition app_wire_digits_correct {T} f P : @app_wire_digits T f P = P f
- := @app_wire_digits_dep_correct (fun _ => T) f P.
-
- Definition appify2 {T} (op : fe2213_32W -> fe2213_32W -> T) (f g : fe2213_32W) :=
- app_fe2213_32W f (fun f0 => (app_fe2213_32W g (fun g0 => op f0 g0))).
-
- Lemma appify2_correct : forall {T} op f g, @appify2 T op f g = op f g.
- Proof.
- intros. cbv [appify2].
- etransitivity; apply app_fe2213_32W_correct.
- Qed.
-
- Definition appify9 {T} (op : fe2213_32W -> fe2213_32W -> fe2213_32W -> fe2213_32W -> fe2213_32W -> fe2213_32W -> fe2213_32W -> fe2213_32W -> fe2213_32W -> T) (x0 x1 x2 x3 x4 x5 x6 x7 x8 : fe2213_32W) :=
- app_fe2213_32W x0 (fun x0' =>
- app_fe2213_32W x1 (fun x1' =>
- app_fe2213_32W x2 (fun x2' =>
- app_fe2213_32W x3 (fun x3' =>
- app_fe2213_32W x4 (fun x4' =>
- app_fe2213_32W x5 (fun x5' =>
- app_fe2213_32W x6 (fun x6' =>
- app_fe2213_32W x7 (fun x7' =>
- app_fe2213_32W x8 (fun x8' =>
- op x0' x1' x2' x3' x4' x5' x6' x7' x8'))))))))).
-
- Lemma appify9_correct : forall {T} op x0 x1 x2 x3 x4 x5 x6 x7 x8,
- @appify9 T op x0 x1 x2 x3 x4 x5 x6 x7 x8 = op x0 x1 x2 x3 x4 x5 x6 x7 x8.
- Proof.
- intros. cbv [appify9].
- repeat (etransitivity; [ apply app_fe2213_32W_correct | ]); reflexivity.
- Qed.
-End generic_destructuring.
-
-Definition eta_fe2213_32W_sig (x : fe2213_32W) : { v : fe2213_32W | v = x }.
-Proof.
- eexists; symmetry.
- repeat (etransitivity; [ apply surjective_pairing | apply f_equal2 ]); reflexivity.
-Defined.
-Definition eta_fe2213_32W (x : fe2213_32W) : fe2213_32W
- := Eval cbv [proj1_sig eta_fe2213_32W_sig] in proj1_sig (eta_fe2213_32W_sig x).
-Definition eta_wire_digitsW_sig (x : wire_digitsW) : { v : wire_digitsW | v = x }.
-Proof.
- eexists; symmetry.
- repeat (etransitivity; [ apply surjective_pairing | apply f_equal2 ]); reflexivity.
-Defined.
-Definition eta_wire_digitsW (x : wire_digitsW) : wire_digitsW
- := Eval cbv [proj1_sig eta_wire_digitsW_sig] in proj1_sig (eta_wire_digitsW_sig x).
-
-Local Transparent word64.
-Lemma word64ize_id x : word64ize x = x.
-Proof. apply NToWord_wordToN. Qed.
-Local Opaque word64.
-
-Lemma word64eqb_Zeqb x y : (word64ToZ x =? word64ToZ y)%Z = w64eqb x y.
-Proof. apply wordeqb_Zeqb. Qed.
-
-Local Arguments Z.pow_pos !_ !_ / .
-Lemma word64ToZ_ZToWord64 x : 0 <= x < 2^Z.of_nat bit_width -> word64ToZ (ZToWord64 x) = x.
-Proof.
- intros; unfold word64ToZ, ZToWord64.
- rewrite wordToN_NToWord_idempotent, Z2N.id
- by (omega || apply N2Z.inj_lt; rewrite <- ?(N_nat_Z (Npow2 _)), ?Npow2_nat, ?Zpow_pow2, ?N2Z.id, ?Z2N.id, ?Z2Nat.id by omega; omega).
- reflexivity.
-Qed.
-Lemma ZToWord64_word64ToZ x : ZToWord64 (word64ToZ x) = x.
-Proof.
- intros; unfold word64ToZ, ZToWord64.
- rewrite N2Z.id, NToWord_wordToN; reflexivity.
-Qed.
-
-(* BEGIN precomputation. *)
-
-Definition proj_word {lower upper} (v : bounded_word lower upper) := Eval cbv [proj1_sig] in proj1_sig v.
-Definition word_bounded {lower upper} (v : bounded_word lower upper)
- : andb (lower <=? proj_word v)%Z (proj_word v <=? upper)%Z = true
- := project_is_boundedT (proj2_sig v).
-Definition Build_bounded_word' {lower upper} proj_word word_bounded : bounded_word lower upper
- := exist _ proj_word (Build_is_boundedT word_bounded).
-Arguments proj_word {_ _} _.
-Arguments word_bounded {_ _} _.
-Arguments Build_bounded_word' {_ _} _ _.
-Definition Build_bounded_word {lower upper} (proj_word : word64) (word_bounded : andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z = true)
- : bounded_word lower upper
- := Build_bounded_word'
- proj_word
- (match andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z as b return b = true -> b = true with
- | true => fun _ => eq_refl
- | false => fun x => x
- end word_bounded).
-Lemma word_to_unbounded_helper {x e : nat} : (x < pow2 e)%nat -> (Z.of_nat e <= Z.of_nat bit_width)%Z -> ((0 <=? word64ToZ (ZToWord64 (Z.of_nat x))) && (word64ToZ (ZToWord64 (Z.of_nat x)) <=? 2 ^ (Z.of_nat e) - 1))%bool = true.
-Proof.
- rewrite pow2_id; intro H; apply Nat2Z.inj_lt in H; revert H.
- rewrite Z.pow_Zpow; simpl Z.of_nat.
- intros H H'.
- assert (2^Z.of_nat e <= 2^Z.of_nat bit_width) by auto with zarith.
- rewrite ?word64ToZ_ZToWord64 by omega.
- match goal with
- | [ |- context[andb ?x ?y] ]
- => destruct x eqn:?, y eqn:?; try reflexivity; Z.ltb_to_lt
- end;
- intros; omega.
-Qed.
-Definition word_to_unbounded_word {sz} (x : word sz) : (Z.of_nat sz <=? Z.of_nat bit_width)%Z = true -> unbounded_word (Z.of_nat sz).
-Proof.
- refine (fun pf => Build_bounded_word (Z.of_N (wordToN x)) _).
- abstract (rewrite wordToN_nat, nat_N_Z; Z.ltb_to_lt; apply (word_to_unbounded_helper (wordToNat_bound x)); simpl; omega).
-Defined.
-Definition word32_to_unbounded_word (x : word 32) : unbounded_word 32.
-Proof. apply (word_to_unbounded_word x); reflexivity. Defined.
-Definition word31_to_unbounded_word (x : word 31) : unbounded_word 31.
-Proof. apply (word_to_unbounded_word x); reflexivity. Defined.
-
-Local Opaque word64.
-Declare Reduction app_tuple_map := cbv [app_wire_digitsW app_fe2213_32W app_fe2213_32 HList.mapt HList.mapt' Tuple.map on_tuple List.map List.app length_fe2213_32 List.length wire_widths Tuple.from_list Tuple.from_list' Tuple.to_list Tuple.to_list' fst snd].
-Definition fe2213_32WToZ (x : fe2213_32W) : SpecificGen.GF2213_32.fe2213_32
- := Eval app_tuple_map in
- app_fe2213_32W x (Tuple.map (fun v : word64 => v : Z)).
-Definition fe2213_32ZToW (x : SpecificGen.GF2213_32.fe2213_32) : fe2213_32W
- := Eval app_tuple_map in
- app_fe2213_32W x (Tuple.map (fun v : Z => v : word64)).
-Definition wire_digitsWToZ (x : wire_digitsW) : SpecificGen.GF2213_32.wire_digits
- := Eval app_tuple_map in
- app_wire_digitsW x (Tuple.map (fun v : word64 => v : Z)).
-Definition wire_digitsZToW (x : SpecificGen.GF2213_32.wire_digits) : wire_digitsW
- := Eval app_tuple_map in
- app_wire_digitsW x (Tuple.map (fun v : Z => v : word64)).
-Definition fe2213_32W_word64ize (x : fe2213_32W) : fe2213_32W
- := Eval app_tuple_map in
- app_fe2213_32W x (Tuple.map word64ize).
-Definition wire_digitsW_word64ize (x : wire_digitsW) : wire_digitsW
- := Eval app_tuple_map in
- app_wire_digitsW x (Tuple.map word64ize).
-
-(** TODO: Turn this into a lemma to speed up proofs *)
-Ltac unfold_is_bounded_in' H :=
- lazymatch type of H with
- | andb _ _ = true
- => apply andb_prop in H;
- let H1 := fresh in
- let H2 := fresh in
- destruct H as [H1 H2];
- unfold_is_bounded_in' H1;
- unfold_is_bounded_in' H2
- | _ => idtac
- end.
-Ltac preunfold_is_bounded_in H :=
- unfold is_bounded, wire_digits_is_bounded, is_bounded_gen, fe2213_32WToZ, wire_digitsWToZ in H;
- cbv [to_list length bounds wire_digit_bounds from_list from_list' map2 on_tuple2 to_list' ListUtil.map2 Tuple.map List.map fold_right List.rev List.app length_fe2213_32 List.length wire_widths HList.hlistP HList.hlistP' Tuple.on_tuple] in H.
-Ltac unfold_is_bounded_in H :=
- preunfold_is_bounded_in H;
- unfold_is_bounded_in' H.
-
-Ltac preunfold_is_bounded :=
- unfold is_bounded, wire_digits_is_bounded, is_bounded_gen, fe2213_32WToZ, wire_digitsWToZ;
- cbv [to_list length bounds wire_digit_bounds from_list from_list' map2 on_tuple2 to_list' ListUtil.map2 Tuple.map List.map fold_right List.rev List.app length_fe2213_32 List.length wire_widths HList.hlistP HList.hlistP' Tuple.on_tuple].
-
-Ltac unfold_is_bounded :=
- preunfold_is_bounded;
- repeat match goal with
- | [ |- andb _ _ = true ] => apply andb_true_intro
- | [ |- and _ _ ] => split
- end.
-
-Local Transparent bit_width.
-Definition Pow2_64 := Eval compute in 2^Z.of_nat bit_width.
-Definition unfold_Pow2_64 : 2^Z.of_nat bit_width = Pow2_64 := eq_refl.
-Local Opaque bit_width.
-
-Local Ltac prove_lt_bit_width :=
- rewrite unfold_Pow2_64; cbv [Pow2_64]; omega.
-
-Lemma fe2213_32ZToW_WToZ (x : fe2213_32W) : fe2213_32ZToW (fe2213_32WToZ x) = x.
-Proof.
- hnf in x; destruct_head' prod; cbv [fe2213_32WToZ fe2213_32ZToW].
- rewrite !ZToWord64_word64ToZ; reflexivity.
-Qed.
-
-Lemma fe2213_32WToZ_ZToW x : is_bounded x = true -> fe2213_32WToZ (fe2213_32ZToW x) = x.
-Proof.
- hnf in x; destruct_head' prod; cbv [fe2213_32WToZ fe2213_32ZToW].
- intro H.
- unfold_is_bounded_in H; destruct_head' and.
- Z.ltb_to_lt.
- rewrite !word64ToZ_ZToWord64 by prove_lt_bit_width.
- reflexivity.
-Qed.
-
-Lemma fe2213_32W_word64ize_id x : fe2213_32W_word64ize x = x.
-Proof.
- hnf in x; destruct_head' prod.
- cbv [fe2213_32W_word64ize];
- repeat apply f_equal2; apply word64ize_id.
-Qed.
-Lemma wire_digitsW_word64ize_id x : wire_digitsW_word64ize x = x.
-Proof.
- hnf in x; destruct_head' prod.
- cbv [wire_digitsW_word64ize];
- repeat apply f_equal2; apply word64ize_id.
-Qed.
-
-Definition uncurry_unop_fe2213_32W {T} (op : fe2213_32W -> T)
- := Eval cbv (*-[word64]*) in Tuple.uncurry (n:=length_fe2213_32) op.
-Definition curry_unop_fe2213_32W {T} op : fe2213_32W -> T
- := Eval cbv (*-[word64]*) in fun f => app_fe2213_32W f (Tuple.curry (n:=length_fe2213_32) op).
-Definition uncurry_binop_fe2213_32W {T} (op : fe2213_32W -> fe2213_32W -> T)
- := Eval cbv (*-[word64]*) in uncurry_unop_fe2213_32W (fun f => uncurry_unop_fe2213_32W (op f)).
-Definition curry_binop_fe2213_32W {T} op : fe2213_32W -> fe2213_32W -> T
- := Eval cbv (*-[word64]*) in appify2 (fun f => curry_unop_fe2213_32W (curry_unop_fe2213_32W op f)).
-
-Definition uncurry_unop_wire_digitsW {T} (op : wire_digitsW -> T)
- := Eval cbv (*-[word64]*) in Tuple.uncurry (n:=length wire_widths) op.
-Definition curry_unop_wire_digitsW {T} op : wire_digitsW -> T
- := Eval cbv (*-[word64]*) in fun f => app_wire_digitsW f (Tuple.curry (n:=length wire_widths) op).
-
-Definition uncurry_9op_fe2213_32W {T} (op : fe2213_32W -> fe2213_32W -> fe2213_32W -> fe2213_32W -> fe2213_32W -> fe2213_32W -> fe2213_32W -> fe2213_32W -> fe2213_32W -> T)
- := Eval cbv (*-[word64]*) in
- uncurry_unop_fe2213_32W (fun x0 =>
- uncurry_unop_fe2213_32W (fun x1 =>
- uncurry_unop_fe2213_32W (fun x2 =>
- uncurry_unop_fe2213_32W (fun x3 =>
- uncurry_unop_fe2213_32W (fun x4 =>
- uncurry_unop_fe2213_32W (fun x5 =>
- uncurry_unop_fe2213_32W (fun x6 =>
- uncurry_unop_fe2213_32W (fun x7 =>
- uncurry_unop_fe2213_32W (fun x8 =>
- op x0 x1 x2 x3 x4 x5 x6 x7 x8))))))))).
-Definition curry_9op_fe2213_32W {T} op : fe2213_32W -> fe2213_32W -> fe2213_32W -> fe2213_32W -> fe2213_32W -> fe2213_32W -> fe2213_32W -> fe2213_32W -> fe2213_32W -> T
- := Eval cbv (*-[word64]*) in
- appify9 (fun x0 x1 x2 x3 x4 x5 x6 x7 x8
- => curry_unop_fe2213_32W (curry_unop_fe2213_32W (curry_unop_fe2213_32W (curry_unop_fe2213_32W (curry_unop_fe2213_32W (curry_unop_fe2213_32W (curry_unop_fe2213_32W (curry_unop_fe2213_32W (curry_unop_fe2213_32W op x0) x1) x2) x3) x4) x5) x6) x7) x8).
-
-Definition proj1_fe2213_32W (x : fe2213_32) : fe2213_32W
- := Eval app_tuple_map in
- app_fe2213_32 x (HList.mapt (fun _ => (@proj_word _ _))).
-Coercion proj1_fe2213_32 (x : fe2213_32) : SpecificGen.GF2213_32.fe2213_32
- := fe2213_32WToZ (proj1_fe2213_32W x).
-
-Lemma is_bounded_proj1_fe2213_32 (x : fe2213_32) : is_bounded (proj1_fe2213_32 x) = true.
-Proof.
- revert x; refine (app_fe2213_32_dep _); intro x.
- hnf in x; destruct_head' prod; destruct_head' bounded_word.
- cbv [is_bounded proj1_fe2213_32 proj1_fe2213_32W fe2213_32WToZ to_list length bounds from_list from_list' map2 on_tuple2 to_list' ListUtil.map2 List.map List.rev List.app proj_word length_fe2213_32 is_bounded_gen].
- apply fold_right_andb_true_iff_fold_right_and_True.
- cbv [fold_right List.map].
- cbv beta in *.
- repeat split; auto using project_is_boundedT.
-Qed.
-
-Definition proj1_wire_digitsW (x : wire_digits) : wire_digitsW
- := app_wire_digits x (HList.mapt (fun _ => proj_word)).
-Coercion proj1_wire_digits (x : wire_digits) : SpecificGen.GF2213_32.wire_digits
- := wire_digitsWToZ (proj1_wire_digitsW x).
-
-Lemma is_bounded_proj1_wire_digits (x : wire_digits) : wire_digits_is_bounded (proj1_wire_digits x) = true.
-Proof.
- revert x; refine (app_wire_digits_dep _); intro x.
- hnf in x; destruct_head' prod; destruct_head' bounded_word.
- cbv [wire_digits_is_bounded proj1_wire_digits proj1_wire_digitsW wire_digitsWToZ to_list length wire_digit_bounds from_list from_list' map2 on_tuple2 to_list' ListUtil.map2 List.map List.rev List.app proj_word is_bounded_gen wire_widths HList.mapt HList.mapt' app_wire_digits fst snd].
- apply fold_right_andb_true_iff_fold_right_and_True.
- cbv [fold_right List.map].
- cbv beta in *.
- repeat split; auto using project_is_boundedT.
-Qed.
-
-Local Ltac make_exist_W' x app_W_dep :=
- let H := fresh in
- revert x; refine (@app_W_dep _ _ _); intros x H;
- let x' := fresh in
- set (x' := x);
- cbv [tuple tuple' length_fe2213_32 List.length wire_widths] in x;
- destruct_head' prod;
- let rec do_refine v H :=
- first [ let v' := (eval cbv [snd fst] in (snd v)) in
- refine (_, Build_bounded_word v' _);
- [ do_refine (fst v) (proj2 H) | subst x'; abstract exact (proj1 H) ]
- | let v' := (eval cbv [snd fst] in v) in
- refine (Build_bounded_word v' _); subst x'; abstract exact (proj1 H) ] in
- let H' := constr:(proj1 (@fold_right_andb_true_iff_fold_right_and_True _) H) in
- let T := type of H' in
- let T := (eval cbv [id
- List.fold_right List.map List.length List.app ListUtil.map2 List.rev
- Tuple.to_list Tuple.to_list' Tuple.from_list Tuple.from_list' Tuple.map2 Tuple.on_tuple2
- fe2213_32 bounds fe2213_32WToZ length_fe2213_32
- wire_digits wire_digit_bounds wire_digitsWToZ wire_widths] in T) in
- let H' := constr:(H' : T) in
- let v := (eval unfold x' in x') in
- do_refine v H'.
-Local Ltac make_exist'' x exist_W ZToW :=
- let H := fresh in
- intro H; apply (exist_W (ZToW x));
- abstract (
- hnf in x; destruct_head' prod;
- let H' := fresh in
- pose proof H as H';
- unfold_is_bounded_in H;
- destruct_head' and; simpl in *;
- Z.ltb_to_lt;
- rewrite ?word64ToZ_ZToWord64 by prove_lt_bit_width;
- assumption
- ).
-Local Ltac make_exist' x app_W_dep exist'' exist_W ZToW :=
- let H := fresh in
- revert x; refine (@app_W_dep _ _ _); intros x H;
- let x' := fresh in
- set (x' := x) in *;
- cbv [tuple tuple' length_fe2213_32 List.length wire_widths] in x;
- destruct_head' prod;
- let rec do_refine v :=
- first [ let v' := (eval cbv [exist_W ZToW exist'' proj_word Build_bounded_word Build_bounded_word' snd fst] in (proj_word v)) in
- refine (Build_bounded_word v' _); subst x'; abstract exact (word_bounded v)
- | let v' := (eval cbv [exist_W ZToW exist'' proj_word Build_bounded_word Build_bounded_word' snd fst] in (proj_word (snd v))) in
- refine (_, Build_bounded_word v' _);
- [ do_refine (fst v) | subst x'; abstract exact (word_bounded (snd v)) ] ] in
- let v := (eval unfold x' in (exist'' x' H)) in
- do_refine v.
-
-Definition exist_fe2213_32W' (x : fe2213_32W) : is_bounded (fe2213_32WToZ x) = true -> fe2213_32.
-Proof. make_exist_W' x (@app_fe2213_32W_dep). Defined.
-Definition exist_fe2213_32W (x : fe2213_32W) : is_bounded (fe2213_32WToZ x) = true -> fe2213_32
- := Eval cbv [app_fe2213_32W_dep exist_fe2213_32W' fe2213_32ZToW] in exist_fe2213_32W' x.
-Definition exist_fe2213_32'' (x : SpecificGen.GF2213_32.fe2213_32) : is_bounded x = true -> fe2213_32.
-Proof. make_exist'' x exist_fe2213_32W fe2213_32ZToW. Defined.
-Definition exist_fe2213_32' (x : SpecificGen.GF2213_32.fe2213_32) : is_bounded x = true -> fe2213_32.
-Proof. make_exist' x (@app_fe2213_32W_dep) exist_fe2213_32'' exist_fe2213_32W fe2213_32ZToW. Defined.
-Definition exist_fe2213_32 (x : SpecificGen.GF2213_32.fe2213_32) : is_bounded x = true -> fe2213_32
- := Eval cbv [exist_fe2213_32' exist_fe2213_32W exist_fe2213_32' app_fe2213_32 app_fe2213_32W_dep] in
- exist_fe2213_32' x.
-
-Lemma proj1_fe2213_32_exist_fe2213_32W x pf : proj1_fe2213_32 (exist_fe2213_32W x pf) = fe2213_32WToZ x.
-Proof. now hnf in x; destruct_head' prod. Qed.
-Lemma proj1_fe2213_32W_exist_fe2213_32 x pf : proj1_fe2213_32W (exist_fe2213_32 x pf) = fe2213_32ZToW x.
-Proof. now hnf in x; destruct_head' prod. Qed.
-Lemma proj1_fe2213_32_exist_fe2213_32 x pf : proj1_fe2213_32 (exist_fe2213_32 x pf) = x.
-Proof.
- hnf in x; destruct_head' prod.
- cbv [proj1_fe2213_32 exist_fe2213_32 proj1_fe2213_32W fe2213_32WToZ proj_word Build_bounded_word Build_bounded_word'].
- unfold_is_bounded_in pf.
- destruct_head' and.
- Z.ltb_to_lt.
- rewrite ?word64ToZ_ZToWord64 by prove_lt_bit_width.
- reflexivity.
-Qed.
-
-Definition exist_wire_digitsW' (x : wire_digitsW)
- : wire_digits_is_bounded (wire_digitsWToZ x) = true -> wire_digits.
-Proof. make_exist_W' x (@app_wire_digitsW_dep). Defined.
-Definition exist_wire_digitsW (x : wire_digitsW)
- : wire_digits_is_bounded (wire_digitsWToZ x) = true -> wire_digits
- := Eval cbv [app_wire_digitsW_dep exist_wire_digitsW' wire_digitsZToW] in exist_wire_digitsW' x.
-Definition exist_wire_digits'' (x : SpecificGen.GF2213_32.wire_digits)
- : wire_digits_is_bounded x = true -> wire_digits.
-Proof. make_exist'' x exist_wire_digitsW wire_digitsZToW. Defined.
-Definition exist_wire_digits' (x : SpecificGen.GF2213_32.wire_digits)
- : wire_digits_is_bounded x = true -> wire_digits.
-Proof. make_exist' x (@app_wire_digitsW_dep) exist_wire_digits'' exist_wire_digitsW wire_digitsZToW. Defined.
-Definition exist_wire_digits (x : SpecificGen.GF2213_32.wire_digits)
- : wire_digits_is_bounded x = true -> wire_digits
- := Eval cbv [exist_wire_digits' exist_wire_digitsW exist_wire_digits' app_wire_digits app_wire_digitsW_dep] in
- exist_wire_digits' x.
-
-Lemma proj1_wire_digits_exist_wire_digitsW x pf : proj1_wire_digits (exist_wire_digitsW x pf) = wire_digitsWToZ x.
-Proof. now hnf in x; destruct_head' prod. Qed.
-Lemma proj1_wire_digitsW_exist_wire_digits x pf : proj1_wire_digitsW (exist_wire_digits x pf) = wire_digitsZToW x.
-Proof. now hnf in x; destruct_head' prod. Qed.
-Lemma proj1_wire_digits_exist_wire_digits x pf : proj1_wire_digits (exist_wire_digits x pf) = x.
-Proof.
- hnf in x; destruct_head' prod.
- cbv [proj1_wire_digits exist_wire_digits proj1_wire_digitsW wire_digitsWToZ proj_word Build_bounded_word Build_bounded_word' app_wire_digits HList.mapt HList.mapt' length wire_widths fst snd].
- unfold_is_bounded_in pf.
- destruct_head' and.
- Z.ltb_to_lt.
- rewrite ?word64ToZ_ZToWord64 by prove_lt_bit_width.
- reflexivity.
-Qed.
-
-Module opt.
- Definition word64ToZ := Eval vm_compute in word64ToZ.
- Definition word64ToN := Eval vm_compute in @wordToN bit_width.
- Definition NToWord64 := Eval vm_compute in NToWord64.
- Definition bit_width := Eval vm_compute in bit_width.
- Definition Zleb := Eval cbv [Z.leb] in Z.leb.
- Definition andb := Eval vm_compute in andb.
- Definition word64ize := Eval vm_compute in word64ize.
-End opt.
-
-Local Transparent bit_width.
-Local Ltac do_change lem :=
- match lem with
- | context L[andb (?x <=? ?y)%Z (?y <=? ?z)]
- => let x' := (eval vm_compute in x) in
- let z' := (eval vm_compute in z) in
- lazymatch y with
- | word64ToZ (word64ize ?v)
- => let y' := constr:(opt.word64ToZ (opt.word64ize v)) in
- let L' := context L[andb (opt.Zleb x' y') (opt.Zleb y' z')] in
- do_change L'
- end
- | _ => lem
- end.
-Definition fe2213_32_word64ize (x : fe2213_32) : fe2213_32.
-Proof.
- set (x' := x).
- hnf in x; destruct_head' prod.
- let lem := constr:(exist_fe2213_32W (fe2213_32W_word64ize (proj1_fe2213_32W x'))) in
- let lem := (eval cbv [proj1_fe2213_32W x' fe2213_32W_word64ize proj_word exist_fe2213_32W Build_bounded_word' Build_bounded_word] in lem) in
- let lem := do_change lem in
- refine (lem _);
- change (is_bounded (fe2213_32WToZ (fe2213_32W_word64ize (proj1_fe2213_32W x'))) = true);
- abstract (rewrite fe2213_32W_word64ize_id; apply is_bounded_proj1_fe2213_32).
-Defined.
-Definition wire_digits_word64ize (x : wire_digits) : wire_digits.
-Proof.
- set (x' := x).
- hnf in x; destruct_head' prod.
- let lem := constr:(exist_wire_digitsW (wire_digitsW_word64ize (proj1_wire_digitsW x'))) in
- let lem := (eval cbv [proj1_wire_digitsW x' wire_digitsW_word64ize proj_word exist_wire_digitsW Build_bounded_word Build_bounded_word'] in lem) in
- let lem := do_change lem in
- let lem := (eval cbv [word64ize opt.word64ize andb Z.leb Z.compare CompOpp Pos.compare] in lem) in
- refine (lem _);
- change (wire_digits_is_bounded (wire_digitsWToZ (wire_digitsW_word64ize (proj1_wire_digitsW x'))) = true);
- abstract (rewrite wire_digitsW_word64ize_id; apply is_bounded_proj1_wire_digits).
-Defined.
-
-Lemma is_bounded_to_nth_default x (H : is_bounded x = true)
- : forall n : nat,
- (n < length limb_widths)%nat
- -> (0 <= nth_default 0 (Tuple.to_list length_fe2213_32 x) n <=
- snd (b_of (nth_default (-1) limb_widths n)))%Z.
-Proof.
- hnf in x; destruct_head' prod.
- unfold_is_bounded_in H; destruct_head' and.
- Z.ltb_to_lt.
- unfold nth_default; simpl.
- intros.
- repeat match goal with
- | [ |- context[nth_error _ ?x] ]
- => is_var x; destruct x; simpl
- end;
- omega.
-Qed.
-
-(* END precomputation *)
-
-(* Precompute constants *)
-
-Definition one' := Eval vm_compute in exist_fe2213_32 SpecificGen.GF2213_32.one_ eq_refl.
-Definition one := Eval cbv [one' fe2213_32_word64ize word64ize andb opt.word64ToZ opt.word64ize opt.Zleb Z.compare CompOpp Pos.compare Pos.compare_cont] in fe2213_32_word64ize one'.
-
-Definition zero' := Eval vm_compute in exist_fe2213_32 SpecificGen.GF2213_32.zero_ eq_refl.
-Definition zero := Eval cbv [zero' fe2213_32_word64ize word64ize andb opt.word64ToZ opt.word64ize opt.Zleb Z.compare CompOpp Pos.compare Pos.compare_cont] in fe2213_32_word64ize zero'.
-
-Lemma fold_chain_opt_gen {A B} (F : A -> B) is_bounded ls id' op' id op chain
- (Hid_bounded : is_bounded (F id') = true)
- (Hid : id = F id')
- (Hop_bounded : forall x y, is_bounded (F x) = true
- -> is_bounded (F y) = true
- -> is_bounded (op (F x) (F y)) = true)
- (Hop : forall x y, is_bounded (F x) = true
- -> is_bounded (F y) = true
- -> op (F x) (F y) = F (op' x y))
- (Hls_bounded : forall n, is_bounded (F (nth_default id' ls n)) = true)
- : F (fold_chain_opt id' op' chain ls)
- = fold_chain_opt id op chain (List.map F ls)
- /\ is_bounded (F (fold_chain_opt id' op' chain ls)) = true.
-Proof.
- rewrite !fold_chain_opt_correct.
- revert dependent ls; induction chain as [|x xs IHxs]; intros.
- { pose proof (Hls_bounded 0%nat).
- destruct ls; simpl; split; trivial; congruence. }
- { destruct x; simpl; unfold Let_In; simpl.
- rewrite (fun ls pf => proj1 (IHxs ls pf)) at 1; simpl.
- { do 2 f_equal.
- rewrite <- Hop, Hid by auto.
- rewrite !map_nth_default_always.
- split; try reflexivity.
- apply (IHxs (_::_)).
- intros [|?]; autorewrite with simpl_nth_default; auto.
- rewrite <- Hop; auto. }
- { intros [|?]; simpl;
- autorewrite with simpl_nth_default; auto.
- rewrite <- Hop; auto. } }
-Qed.
-
-Lemma encode_bounded x : is_bounded (encode x) = true.
-Proof.
- pose proof (bounded_encode x).
- generalize dependent (encode x).
- intro t; compute in t; intros.
- destruct_head' prod.
- unfold Pow2Base.bounded in H.
- cbv [nth_default Tuple.to_list Tuple.to_list' List.length limb_widths params2213_32] in H.
- repeat match type of H with
- | context[nth_error (cons _ _) _]
- => let H' := fresh in
- pose proof (H O) as H'; specialize (fun i => H (S i)); simpl @nth_error in H, H';
- cbv beta iota in H'
- end.
- clear H.
- simpl in *.
- cbv [Z.pow_pos Z.mul Pos.mul Pos.iter nth_default nth_error value] in *.
- unfold is_bounded.
- apply fold_right_andb_true_iff_fold_right_and_True.
- cbv [is_bounded proj1_fe2213_32 to_list length bounds from_list from_list' map2 on_tuple2 to_list' ListUtil.map2 List.map List.rev List.app proj_word fold_right length_fe2213_32].
- repeat split; rewrite !Bool.andb_true_iff, !Z.leb_le; omega.
-Qed.
-
-Definition encode (x : F modulus) : fe2213_32
- := exist_fe2213_32 (encode x) (encode_bounded x).
-
-Definition decode (x : fe2213_32) : F modulus
- := ModularBaseSystem.decode (proj1_fe2213_32 x).
-
-Lemma proj1_fe2213_32_encode x
- : proj1_fe2213_32 (encode x) = ModularBaseSystem.encode x.
-Proof.
- cbv [encode].
- generalize (encode_bounded x); generalize (ModularBaseSystem.encode x).
- intros y pf; intros; hnf in y; destruct_head_hnf' prod.
- cbv [proj1_fe2213_32 exist_fe2213_32 proj1_fe2213_32W Build_bounded_word Build_bounded_word' fe2213_32WToZ proj_word].
- unfold_is_bounded_in pf.
- destruct_head' and.
- Z.ltb_to_lt.
- rewrite ?word64ToZ_ZToWord64 by prove_lt_bit_width.
- reflexivity.
-Qed.
-
-Lemma decode_exist_fe2213_32 x pf
- : decode (exist_fe2213_32 x pf) = ModularBaseSystem.decode x.
-Proof.
- hnf in x; destruct_head' prod.
- cbv [decode proj1_fe2213_32 exist_fe2213_32 proj1_fe2213_32W Build_bounded_word Build_bounded_word' fe2213_32WToZ proj_word].
- unfold_is_bounded_in pf.
- destruct_head' and.
- Z.ltb_to_lt.
- rewrite ?word64ToZ_ZToWord64 by prove_lt_bit_width.
- reflexivity.
-Qed.
-
-Definition div (f g : fe2213_32) : fe2213_32
- := exist_fe2213_32 (div (proj1_fe2213_32 f) (proj1_fe2213_32 g)) (encode_bounded _).
-
-Definition eq (f g : fe2213_32) : Prop := eq (proj1_fe2213_32 f) (proj1_fe2213_32 g).
-
-
-Notation in_op_correct_and_bounded k irop op
- := (((Tuple.map (n:=k) fe2213_32WToZ irop = op)
- /\ HList.hlistP (fun v => is_bounded v = true) (Tuple.map (n:=k) fe2213_32WToZ irop))%type)
- (only parsing).
-
-(*Fixpoint inm_op_correct_and_bounded' (count_in count_out : nat)
- : forall (irop : Tower.tower_nd fe2213_32W (Tuple.tuple fe2213_32W count_out) count_in)
- (op : Tower.tower_nd GF2213_32.fe2213_32 (Tuple.tuple GF2213_32.fe2213_32 count_out) count_in)
- (cont : Prop -> Prop),
- Prop
- := match count_in return
- forall (irop : Tower.tower_nd fe2213_32W (Tuple.tuple fe2213_32W count_out) count_in)
- (op : Tower.tower_nd GF2213_32.fe2213_32 (Tuple.tuple GF2213_32.fe2213_32 count_out) count_in)
- (cont : Prop -> Prop),
- Prop
- with
- | O => fun irop op cont => cont (in_op_correct_and_bounded count_out irop op)
- | S n => fun irop op cont
- => forall x : fe2213_32W,
- @inm_op_correct_and_bounded'
- n count_out (irop x) (op (fe2213_32WToZ x))
- (fun P => cont (is_bounded (fe2213_32WToZ x) = true -> P))
- end.
-Definition inm_op_correct_and_bounded count_in count_out irop op
- := Eval cbv [inm_op_correct_and_bounded' Tower.tower_nd Tuple.tuple Tuple.tuple' HList.hlistP HList.hlistP'] in
- inm_op_correct_and_bounded' count_in count_out irop op (fun P => P).
-Fixpoint inm_op_correct_and_bounded_prefix' (count_in count_out : nat)
- : forall (irop : Tower.tower_nd fe2213_32W (Tuple.tuple fe2213_32W count_out) count_in)
- (op : Tower.tower_nd GF2213_32.fe2213_32 (Tuple.tuple GF2213_32.fe2213_32 count_out) count_in),
- Prop
- := match count_in return
- forall (irop : Tower.tower_nd fe2213_32W (Tuple.tuple fe2213_32W count_out) count_in)
- (op : Tower.tower_nd GF2213_32.fe2213_32 (Tuple.tuple GF2213_32.fe2213_32 count_out) count_in),
- Prop
- with
- | O => fun irop op => in_op_correct_and_bounded count_out irop op
- | S n => fun irop op
- => forall x : fe2213_32W,
- is_bounded (fe2213_32WToZ x) = true
- -> @inm_op_correct_and_bounded_prefix'
- n count_out (irop x) (op (fe2213_32WToZ x))
- end.
-Definition inm_op_correct_and_bounded_prefix count_in count_out irop op
- := inm_op_correct_and_bounded_prefix' count_in count_out irop op.
-
-Lemma inm_op_correct_and_bounded_iff_prefix' count_in count_out irop op
- (cont : Prop -> Prop)
- (cont_forall : forall T (P : T -> Prop), cont (forall x : T, P x) <-> forall x : T, cont (P x))
- : inm_op_correct_and_bounded' count_in count_out irop op cont <-> cont (inm_op_correct_and_bounded_prefix' count_in count_out irop op).
-Proof.
- revert dependent cont; induction count_in as [|count_in IHcount_in]; intros.
- { reflexivity. }
- { simpl.
- rewrite cont_forall.
- split; intros H' x; specialize (H' x);
- specialize (IHcount_in (irop x) (op (fe2213_32WToZ x)) (fun P => cont (is_bounded (fe2213_32WToZ x) = true -> P)));
- cbv beta in *;
- [ erewrite <- IHcount_in; [ assumption | .. ]
- | erewrite -> IHcount_in; [ assumption | .. ] ];
- clear IHcount_in.
- { intros; repeat setoid_rewrite cont_forall; split; eauto. }
- { intros; repeat setoid_rewrite cont_forall; split; eauto. } }
-Qed.
-
-Lemma inm_op_correct_and_bounded_iff_prefix count_in count_out irop op
- : inm_op_correct_and_bounded count_in count_out irop op <-> inm_op_correct_and_bounded_prefix count_in count_out irop op.
-Proof.
- apply (inm_op_correct_and_bounded_iff_prefix' count_in count_out irop op (fun P => P)).
- reflexivity.
-Qed.
-
-Definition inm_op_correct_and_bounded1 count_in irop op
- := Eval cbv [inm_op_correct_and_bounded Tuple.map Tuple.to_list Tuple.to_list' Tuple.from_list Tuple.from_list' Tuple.on_tuple List.map] in
- inm_op_correct_and_bounded count_in 1 irop op.*)
-Notation inm_op_correct_and_bounded n m irop op
- := ((forall x,
- HList.hlistP (fun v => is_bounded v = true) (Tuple.map (n:=n%nat%type) fe2213_32WToZ x)
- -> in_op_correct_and_bounded m (irop x) (op (Tuple.map (n:=n) fe2213_32WToZ x))))
- (only parsing).
-Notation ibinop_correct_and_bounded irop op := (inm_op_correct_and_bounded 2 1 irop op) (only parsing).
-Notation iunop_correct_and_bounded irop op := (inm_op_correct_and_bounded 1 1 irop op) (only parsing).
-Notation iunop_FEToZ_correct irop op
- := (forall x,
- is_bounded (fe2213_32WToZ x) = true
- -> word64ToZ (irop x) = op (fe2213_32WToZ x)) (only parsing).
-Notation iunop_FEToWire_correct_and_bounded irop op
- := (forall x,
- is_bounded (fe2213_32WToZ x) = true
- -> wire_digitsWToZ (irop x) = op (fe2213_32WToZ x)
- /\ wire_digits_is_bounded (wire_digitsWToZ (irop x)) = true) (only parsing).
-Notation iunop_WireToFE_correct_and_bounded irop op
- := (forall x,
- wire_digits_is_bounded (wire_digitsWToZ x) = true
- -> fe2213_32WToZ (irop x) = op (wire_digitsWToZ x)
- /\ is_bounded (fe2213_32WToZ (irop x)) = true) (only parsing).
-Notation i9top_correct_and_bounded k irop op := (inm_op_correct_and_bounded 9 k irop op) (only parsing).
-
-Notation prefreeze := GF2213_32.prefreeze.
diff --git a/src/SpecificGen/GF2213_32BoundedExtendedAddCoordinates.v b/src/SpecificGen/GF2213_32BoundedExtendedAddCoordinates.v
deleted file mode 100644
index 9ef98db72..000000000
--- a/src/SpecificGen/GF2213_32BoundedExtendedAddCoordinates.v
+++ /dev/null
@@ -1,68 +0,0 @@
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.SpecificGen.GF2213_32Bounded.
-Require Import Crypto.SpecificGen.GF2213_32ExtendedAddCoordinates.
-Require Import Crypto.SpecificGen.GF2213_32BoundedAddCoordinates.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-(*
-Lemma fieldwise_eq_extended_add_coordinates_full' twice_d P10 P11 P12 P13 P20 P21 P22 P23
- : Tuple.fieldwise
- (n:=4) GF2213_32BoundedCommon.eq
- (@GF2213_32BoundedAddCoordinates.add_coordinates
- twice_d P10 P11 P12 P13 P20 P21 P22 P23)
- (@ExtendedCoordinates.Extended.add_coordinates
- GF2213_32BoundedCommon.fe2213_32
- GF2213_32Bounded.add GF2213_32Bounded.sub GF2213_32Bounded.mul twice_d
- (P10, P11, P12, P13) (P20, P21, P22, P23)).
-Proof.
- unfold GF2213_32BoundedCommon.eq.
- apply -> (fieldwise_map_iff (n:=4) eq GF2213_32BoundedCommon.proj1_fe2213_32 GF2213_32BoundedCommon.proj1_fe2213_32).
- rewrite add_coordinates_correct.
- cbv [AddCoordinates.add_coordinates].
- setoid_rewrite <- fieldwise_eq_edwards_extended_add_coordinates_carry_nocarry.
- unfold edwards_extended_carry_add_coordinates.
- match goal with |- ?R ?x ?y => rewrite <- (Tuple.map_id (n:=4) x) end.
- apply <- (fieldwise_map_iff (n:=4) eq (fun x => x) GF2213_32BoundedCommon.proj1_fe2213_32).
- apply ExtendedCoordinates.Extended.add_coordinates_respectful_hetero;
- intros;
- repeat match goal with
- | [ |- context[add _ _] ]
- => rewrite add_correct
- | [ |- context[sub _ _] ]
- => rewrite sub_correct
- | [ |- context[mul _ _] ]
- => rewrite mul_correct
- | _ => progress unfold Tuple.fieldwise, Tuple.fieldwise', fst, snd, eq in *
- | [ |- and _ _ ] => split
- | [ |- ?x = ?x ] => reflexivity
- | _ => progress rewrite_strat topdown hints edwards_extended_add_coordinates_correct
- | _ => congruence
- end.
-Qed.
-
-Definition add_coordinates' twice_d P1 P2
- := let '(P10, P11, P12, P13) := P1 in
- let '(P20, P21, P22, P23) := P2 in
- @GF2213_32BoundedAddCoordinates.add_coordinates
- twice_d P10 P11 P12 P13 P20 P21 P22 P23.
-
-Definition add_coordinates twice_d P1 P2
- := Eval cbv beta iota delta [GF2213_32BoundedAddCoordinates.add_coordinates HList.mapt HList.mapt'] in
- let '(P10, P11, P12, P13) := P1 in
- let '(P20, P21, P22, P23) := P2 in
- @GF2213_32BoundedAddCoordinates.add_coordinates
- twice_d P10 P11 P12 P13 P20 P21 P22 P23.
-
-Lemma add_coordinates_correct_full twice_d P1 P2
- : Tuple.fieldwise
- GF2213_32BoundedCommon.eq
- (add_coordinates twice_d P1 P2)
- (@ExtendedCoordinates.Extended.add_coordinates
- GF2213_32BoundedCommon.fe2213_32
- GF2213_32Bounded.add GF2213_32Bounded.sub GF2213_32Bounded.mul twice_d P1 P2).
-Proof.
- destruct_head' prod.
- rewrite <- fieldwise_eq_extended_add_coordinates_full'; reflexivity.
-Qed.
-*)
diff --git a/src/SpecificGen/GF2213_32ExtendedAddCoordinates.v b/src/SpecificGen/GF2213_32ExtendedAddCoordinates.v
deleted file mode 100644
index 5b3073f83..000000000
--- a/src/SpecificGen/GF2213_32ExtendedAddCoordinates.v
+++ /dev/null
@@ -1,81 +0,0 @@
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.Algebra.
-Require Import Crypto.Util.Relations.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Tactics.
-
-Require Import Crypto.SpecificGen.GF2213_32.
-Require Import Crypto.CompleteEdwardsCurve.ExtendedCoordinates.
-
-Definition edwards_extended_add_coordinates td P Q :=
- (@ExtendedCoordinates.Extended.add_coordinates _ add sub mul td P Q).
-Definition edwards_extended_carry_add_coordinates td P Q :=
- (@ExtendedCoordinates.Extended.add_coordinates _ carry_add carry_sub mul td P Q).
-
-Create HintDb edwards_extended_add_coordinates_correct discriminated.
-Local Existing Instance field2213_32.
-Hint Rewrite
- (Ring.homomorphism_mul(is_homomorphism:=homomorphism_F2213_32_decode))
- (Ring.homomorphism_add(H1 :=homomorphism_F2213_32_decode))
- (Ring.homomorphism_sub(H1 :=homomorphism_F2213_32_decode))
- : edwards_extended_add_coordinates_correct.
-Lemma edwards_extended_add_coordinates_correct td P Q :
- Tuple.map (n:=4) decode (edwards_extended_add_coordinates td P Q)
- = (@ExtendedCoordinates.Extended.add_coordinates _ F.add F.sub F.mul (decode td) (Tuple.map (n:=4) decode P) (Tuple.map (n:=4) decode Q)).
-Proof.
- change (edwards_extended_add_coordinates td P Q)
- with (@ExtendedCoordinates.Extended.add_coordinates _ add sub mul td P Q).
- destruct_head' prod.
- simpl.
- (*rewrite_strat topdown hints edwards_extended_add_coordinates_correct.*) (* loops on Coq 8.4 *)
- repeat (rewrite ?(Ring.homomorphism_mul(is_homomorphism:=homomorphism_F2213_32_decode)),
- ?(Ring.homomorphism_add(H1 :=homomorphism_F2213_32_decode)),
- ?(Ring.homomorphism_sub(H1 :=homomorphism_F2213_32_decode))).
- reflexivity.
-Qed.
-Local Existing Instance carry_field2213_32.
-Hint Rewrite
- (Ring.homomorphism_mul(is_homomorphism:=homomorphism_carry_F2213_32_decode))
- (Ring.homomorphism_add(H1 :=homomorphism_carry_F2213_32_decode))
- (Ring.homomorphism_sub(H1 :=homomorphism_carry_F2213_32_decode))
- : edwards_extended_add_coordinates_correct.
-Lemma edwards_extended_carry_add_coordinates_correct td P Q :
- Tuple.map (n:=4) decode (edwards_extended_carry_add_coordinates td P Q)
- = (@ExtendedCoordinates.Extended.add_coordinates _ F.add F.sub F.mul (decode td) (Tuple.map (n:=4) decode P) (Tuple.map (n:=4) decode Q)).
-Proof.
- change (edwards_extended_carry_add_coordinates td P Q)
- with (@ExtendedCoordinates.Extended.add_coordinates _ carry_add carry_sub mul td P Q).
- destruct_head' prod.
- simpl.
- (*rewrite_strat topdown hints edwards_extended_add_coordinates_correct.*) (* loops on Coq 8.4 *)
- (* This is an annoying replacement for rewrite_strat loopiness *)
- generalize (Ring.homomorphism_mul(is_homomorphism:=homomorphism_carry_F2213_32_decode)).
- generalize (Ring.homomorphism_add(H1 :=homomorphism_carry_F2213_32_decode)).
- generalize (Ring.homomorphism_sub(H1 :=homomorphism_carry_F2213_32_decode)).
- generalize mul; generalize carry_sub; generalize carry_add.
- intros carry_add' carry_sub' mul'.
- intros H0 H1 H2.
- repeat rewrite ?H2, ?H1, ?H0.
- reflexivity.
-Qed.
-
-Lemma fieldwise_eq_edwards_extended_add_coordinates_carry_nocarry td P Q :
- Tuple.fieldwise
- (n:=4) eq
- (edwards_extended_carry_add_coordinates td P Q)
- (edwards_extended_add_coordinates td P Q).
-Proof.
- pose proof (edwards_extended_carry_add_coordinates_correct td P Q) as H0.
- pose proof (edwards_extended_add_coordinates_correct td P Q) as H1.
- rewrite <- H0 in H1; clear H0.
- assert (Tuple.fieldwise
- (fun x y => x = y)
- (Tuple.map (n:=4) decode (edwards_extended_carry_add_coordinates td P Q))
- (Tuple.map (n:=4) decode (edwards_extended_add_coordinates td P Q)))
- by (rewrite H1; reflexivity).
- clear H1.
- destruct (edwards_extended_carry_add_coordinates td P Q), (edwards_extended_add_coordinates td P Q).
- destruct_head' prod; simpl; unfold eq; trivial.
-Qed.
diff --git a/src/SpecificGen/GF2213_32Reflective.v b/src/SpecificGen/GF2213_32Reflective.v
deleted file mode 100644
index e871b3a91..000000000
--- a/src/SpecificGen/GF2213_32Reflective.v
+++ /dev/null
@@ -1,118 +0,0 @@
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParams.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParamProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemOpt.
-Require Export Crypto.SpecificGen.GF2213_32.
-Require Import Crypto.SpecificGen.GF2213_32BoundedCommon.
-Require Import Crypto.Reflection.Reify.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.Map.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Crypto.Reflection.Z.Interpretations64.Relations.
-Require Import Crypto.Reflection.Z.Interpretations64.RelationsCombinations.
-Require Import Crypto.Reflection.Z.Reify.
-Require Import Crypto.Reflection.Z.Syntax.
-Require Import Crypto.SpecificGen.GF2213_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF2213_32Reflective.Reified.
-Require Import Bedrock.Word Crypto.Util.WordUtil.
-Require Import Coq.Lists.List Crypto.Util.ListUtil.
-Require Import Crypto.Tactics.VerdiTactics.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Notations.
-Require Import Crypto.Util.Bool.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Algebra.
-Import ListNotations.
-Require Import Coq.ZArith.ZArith Coq.ZArith.Zpower Coq.ZArith.ZArith Coq.ZArith.Znumtheory.
-Local Open Scope Z.
-
-Definition radd : ExprBinOp := Eval vm_compute in rcarry_addW.
-Definition rsub : ExprBinOp := Eval vm_compute in rcarry_subW.
-Definition rmul : ExprBinOp := Eval vm_compute in rmulW.
-Definition ropp : ExprUnOp := Eval vm_compute in rcarry_oppW.
-Definition rprefreeze : ExprUnOp := Eval vm_compute in rprefreezeW.
-Definition rge_modulus : ExprUnOpFEToZ := Eval vm_compute in rge_modulusW.
-Definition rpack : ExprUnOpFEToWire := Eval vm_compute in rpackW.
-Definition runpack : ExprUnOpWireToFE := Eval vm_compute in runpackW.
-
-Declare Reduction asm_interp
- := cbv beta iota delta
- [id
- interp_bexpr interp_uexpr interp_uexpr_FEToWire interp_uexpr_FEToZ interp_uexpr_WireToFE interp_9_4expr
- Eta.interp_flat_type_eta Eta.interp_flat_type_eta_gen
- radd rsub rmul ropp rprefreeze rge_modulus rpack runpack
- curry_binop_fe2213_32W curry_unop_fe2213_32W curry_unop_wire_digitsW curry_9op_fe2213_32W
- WordW.interp_op WordW.interp_base_type
- Z.interp_op Z.interp_base_type
- Z.Syntax.interp_op Z.Syntax.interp_base_type
- mapf_interp_flat_type WordW.interp_base_type word64ize
- Interp interp interp_flat_type interpf interpf_step interp_flat_type fst snd].
-Ltac asm_interp
- := cbv beta iota delta
- [id
- interp_bexpr interp_uexpr interp_uexpr_FEToWire interp_uexpr_FEToZ interp_uexpr_WireToFE interp_9_4expr
- Eta.interp_flat_type_eta Eta.interp_flat_type_eta_gen
- radd rsub rmul ropp rprefreeze rge_modulus rpack runpack
- curry_binop_fe2213_32W curry_unop_fe2213_32W curry_unop_wire_digitsW curry_9op_fe2213_32W
- WordW.interp_op WordW.interp_base_type
- Z.interp_op Z.interp_base_type
- Z.Syntax.interp_op Z.Syntax.interp_base_type
- mapf_interp_flat_type WordW.interp_base_type word64ize
- Interp interp interp_flat_type interpf interp_flat_type fst snd].
-
-
-Definition interp_radd : SpecificGen.GF2213_32BoundedCommon.fe2213_32W * SpecificGen.GF2213_32BoundedCommon.fe2213_32W -> SpecificGen.GF2213_32BoundedCommon.fe2213_32W
- := Eval asm_interp in interp_bexpr radd.
-(*Print interp_radd.*)
-Definition interp_radd_correct : interp_radd = interp_bexpr radd := eq_refl.
-Definition interp_rsub : SpecificGen.GF2213_32BoundedCommon.fe2213_32W * SpecificGen.GF2213_32BoundedCommon.fe2213_32W -> SpecificGen.GF2213_32BoundedCommon.fe2213_32W
- := Eval asm_interp in interp_bexpr rsub.
-(*Print interp_rsub.*)
-Definition interp_rsub_correct : interp_rsub = interp_bexpr rsub := eq_refl.
-Definition interp_rmul : SpecificGen.GF2213_32BoundedCommon.fe2213_32W * SpecificGen.GF2213_32BoundedCommon.fe2213_32W -> SpecificGen.GF2213_32BoundedCommon.fe2213_32W
- := Eval asm_interp in interp_bexpr rmul.
-(*Print interp_rmul.*)
-Definition interp_rmul_correct : interp_rmul = interp_bexpr rmul := eq_refl.
-Definition interp_ropp : SpecificGen.GF2213_32BoundedCommon.fe2213_32W -> SpecificGen.GF2213_32BoundedCommon.fe2213_32W
- := Eval asm_interp in interp_uexpr ropp.
-(*Print interp_ropp.*)
-Definition interp_ropp_correct : interp_ropp = interp_uexpr ropp := eq_refl.
-Definition interp_rprefreeze : SpecificGen.GF2213_32BoundedCommon.fe2213_32W -> SpecificGen.GF2213_32BoundedCommon.fe2213_32W
- := Eval asm_interp in interp_uexpr rprefreeze.
-(*Print interp_rprefreeze.*)
-Definition interp_rprefreeze_correct : interp_rprefreeze = interp_uexpr rprefreeze := eq_refl.
-
-Definition interp_rge_modulus : SpecificGen.GF2213_32BoundedCommon.fe2213_32W -> SpecificGen.GF2213_32BoundedCommon.word64
- := Eval asm_interp in interp_uexpr_FEToZ rge_modulus.
-Definition interp_rge_modulus_correct : interp_rge_modulus = interp_uexpr_FEToZ rge_modulus := eq_refl.
-
-Definition interp_rpack : SpecificGen.GF2213_32BoundedCommon.fe2213_32W -> SpecificGen.GF2213_32BoundedCommon.wire_digitsW
- := Eval asm_interp in interp_uexpr_FEToWire rpack.
-Definition interp_rpack_correct : interp_rpack = interp_uexpr_FEToWire rpack := eq_refl.
-
-Definition interp_runpack : SpecificGen.GF2213_32BoundedCommon.wire_digitsW -> SpecificGen.GF2213_32BoundedCommon.fe2213_32W
- := Eval asm_interp in interp_uexpr_WireToFE runpack.
-Definition interp_runpack_correct : interp_runpack = interp_uexpr_WireToFE runpack := eq_refl.
-
-Lemma radd_correct_and_bounded : binop_correct_and_bounded radd carry_add.
-Proof. exact rcarry_addW_correct_and_bounded. Qed.
-Lemma rsub_correct_and_bounded : binop_correct_and_bounded rsub carry_sub.
-Proof. exact rcarry_subW_correct_and_bounded. Qed.
-Lemma rmul_correct_and_bounded : binop_correct_and_bounded rmul mul.
-Proof. exact rmulW_correct_and_bounded. Qed.
-Lemma ropp_correct_and_bounded : unop_correct_and_bounded ropp carry_opp.
-Proof. exact rcarry_oppW_correct_and_bounded. Qed.
-Lemma rprefreeze_correct_and_bounded : unop_correct_and_bounded rprefreeze prefreeze.
-Proof. exact rprefreezeW_correct_and_bounded. Qed.
-Lemma rge_modulus_correct_and_bounded : unop_FEToZ_correct rge_modulus ge_modulus.
-Proof. exact rge_modulusW_correct_and_bounded. Qed.
-Lemma rpack_correct_and_bounded : unop_FEToWire_correct_and_bounded rpack pack.
-Proof. exact rpackW_correct_and_bounded. Qed.
-Lemma runpack_correct_and_bounded : unop_WireToFE_correct_and_bounded runpack unpack.
-Proof. exact runpackW_correct_and_bounded. Qed.
diff --git a/src/SpecificGen/GF2213_32Reflective/Common.v b/src/SpecificGen/GF2213_32Reflective/Common.v
deleted file mode 100644
index f1f4921b4..000000000
--- a/src/SpecificGen/GF2213_32Reflective/Common.v
+++ /dev/null
@@ -1,668 +0,0 @@
-Require Export Coq.ZArith.ZArith.
-Require Export Coq.Strings.String.
-Require Export Crypto.SpecificGen.GF2213_32.
-Require Export Crypto.SpecificGen.GF2213_32BoundedCommon.
-Require Import Crypto.Reflection.Reify.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Reflection.Wf.
-Require Import Crypto.Reflection.ExprInversion.
-Require Import Crypto.Reflection.Tuple.
-Require Import Crypto.Reflection.Relations.
-Require Import Crypto.Reflection.Eta.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Crypto.Reflection.Z.Interpretations64.Relations.
-Require Import Crypto.Reflection.Z.Interpretations64.RelationsCombinations.
-Require Import Crypto.Reflection.Z.Reify.
-Require Export Crypto.Reflection.Z.Syntax.
-Require Import Crypto.Reflection.Z.Syntax.Equality.
-Require Import Crypto.Reflection.InterpWfRel.
-Require Import Crypto.Reflection.WfReflective.
-Require Import Crypto.Util.Curry.
-Require Import Crypto.Util.Tower.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.ListUtil.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.Prod.
-Require Import Crypto.Util.Notations.
-
-Notation Expr := (Expr base_type op).
-
-Local Ltac make_type_from' T :=
- let T := (eval compute in T) in
- let rT := reify_type T in
- exact rT.
-Local Ltac make_type_from uncurried_op :=
- let T := (type of uncurried_op) in
- make_type_from' T.
-
-Definition fe2213_32T : flat_type base_type.
-Proof.
- let T := (eval compute in GF2213_32.fe2213_32) in
- let T := reify_flat_type T in
- exact T.
-Defined.
-Definition Expr_n_OpT (count_out : nat) : flat_type base_type
- := Eval cbv [Syntax.tuple Syntax.tuple' fe2213_32T] in
- Syntax.tuple fe2213_32T count_out.
-Definition Expr_nm_OpT (count_in count_out : nat) : type base_type
- := Eval cbv [Syntax.tuple Syntax.tuple' fe2213_32T Expr_n_OpT] in
- Arrow (Syntax.tuple fe2213_32T count_in) (Expr_n_OpT count_out).
-Definition ExprBinOpT : type base_type := Eval compute in Expr_nm_OpT 2 1.
-Definition ExprUnOpT : type base_type := Eval compute in Expr_nm_OpT 1 1.
-Definition ExprUnOpFEToZT : type base_type.
-Proof. make_type_from ge_modulus. Defined.
-Definition ExprUnOpWireToFET : type base_type.
-Proof. make_type_from unpack. Defined.
-Definition ExprUnOpFEToWireT : type base_type.
-Proof. make_type_from pack. Defined.
-Definition Expr4OpT : type base_type := Eval compute in Expr_nm_OpT 4 1.
-Definition Expr9_4OpT : type base_type := Eval compute in Expr_nm_OpT 9 4.
-Definition ExprArgT : flat_type base_type
- := Eval compute in domain ExprUnOpT.
-Definition ExprArgWireT : flat_type base_type
- := Eval compute in domain ExprUnOpWireToFET.
-Definition ExprZ : Type := Expr (Arrow Unit (Tbase TZ)).
-Definition ExprUnOpFEToZ : Type := Expr ExprUnOpFEToZT.
-Definition ExprUnOpWireToFE : Type := Expr ExprUnOpWireToFET.
-Definition ExprUnOpFEToWire : Type := Expr ExprUnOpFEToWireT.
-Definition Expr_nm_Op count_in count_out : Type := Expr (Expr_nm_OpT count_in count_out).
-Definition ExprBinOp : Type := Expr ExprBinOpT.
-Definition ExprUnOp : Type := Expr ExprUnOpT.
-Definition Expr4Op : Type := Expr Expr4OpT.
-Definition Expr9_4Op : Type := Expr Expr9_4OpT.
-Definition ExprArg : Type := Expr (Arrow Unit ExprArgT).
-Definition ExprArgWire : Type := Expr (Arrow Unit ExprArgWireT).
-Definition expr_nm_Op count_in count_out var : Type
- := expr base_type op (var:=var) (Expr_nm_OpT count_in count_out).
-Definition exprBinOp var : Type := expr base_type op (var:=var) ExprBinOpT.
-Definition exprUnOp var : Type := expr base_type op (var:=var) ExprUnOpT.
-Definition expr4Op var : Type := expr base_type op (var:=var) Expr4OpT.
-Definition expr9_4Op var : Type := expr base_type op (var:=var) Expr9_4OpT.
-Definition exprZ var : Type := expr base_type op (var:=var) (Arrow Unit (Tbase TZ)).
-Definition exprUnOpFEToZ var : Type := expr base_type op (var:=var) ExprUnOpFEToZT.
-Definition exprUnOpWireToFE var : Type := expr base_type op (var:=var) ExprUnOpWireToFET.
-Definition exprUnOpFEToWire var : Type := expr base_type op (var:=var) ExprUnOpFEToWireT.
-Definition exprArg var : Type := expr base_type op (var:=var) (Arrow Unit ExprArgT).
-Definition exprArgWire var : Type := expr base_type op (var:=var) (Arrow Unit ExprArgWireT).
-
-Definition make_bound (x : Z * Z) : ZBounds.t
- := Some {| Bounds.lower := fst x ; Bounds.upper := snd x |}.
-
-Fixpoint Expr_nm_Op_bounds count_in count_out {struct count_in} : interp_flat_type ZBounds.interp_base_type (domain (Expr_nm_OpT count_in count_out))
- := match count_in return interp_flat_type _ (domain (Expr_nm_OpT count_in count_out)) with
- | 0 => tt
- | S n
- => let b := (Tuple.map make_bound bounds) in
- let bs := Expr_nm_Op_bounds n count_out in
- match n return interp_flat_type _ (domain (Expr_nm_OpT n _)) -> interp_flat_type _ (domain (Expr_nm_OpT (S n) _)) with
- | 0 => fun _ => b
- | S n' => fun bs => (bs, b)
- end bs
- end.
-Definition ExprBinOp_bounds : interp_flat_type ZBounds.interp_base_type (domain ExprBinOpT)
- := Eval compute in Expr_nm_Op_bounds 2 1.
-Definition ExprUnOp_bounds : interp_flat_type ZBounds.interp_base_type (domain ExprUnOpT)
- := Eval compute in Expr_nm_Op_bounds 1 1.
-Definition ExprUnOpFEToZ_bounds : interp_flat_type ZBounds.interp_base_type (domain ExprUnOpFEToZT)
- := Eval compute in Expr_nm_Op_bounds 1 1.
-Definition ExprUnOpFEToWire_bounds : interp_flat_type ZBounds.interp_base_type (domain ExprUnOpFEToWireT)
- := Eval compute in Expr_nm_Op_bounds 1 1.
-Definition Expr4Op_bounds : interp_flat_type ZBounds.interp_base_type (domain Expr4OpT)
- := Eval compute in Expr_nm_Op_bounds 4 1.
-Definition Expr9Op_bounds : interp_flat_type ZBounds.interp_base_type (domain Expr9_4OpT)
- := Eval compute in Expr_nm_Op_bounds 9 4.
-Definition ExprUnOpWireToFE_bounds : interp_flat_type ZBounds.interp_base_type (domain ExprUnOpWireToFET)
- := Tuple.map make_bound wire_digit_bounds.
-
-Definition interp_bexpr : ExprBinOp -> SpecificGen.GF2213_32BoundedCommon.fe2213_32W * SpecificGen.GF2213_32BoundedCommon.fe2213_32W -> SpecificGen.GF2213_32BoundedCommon.fe2213_32W
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-Definition interp_uexpr : ExprUnOp -> SpecificGen.GF2213_32BoundedCommon.fe2213_32W -> SpecificGen.GF2213_32BoundedCommon.fe2213_32W
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-Definition interp_uexpr_FEToZ : ExprUnOpFEToZ -> SpecificGen.GF2213_32BoundedCommon.fe2213_32W -> SpecificGen.GF2213_32BoundedCommon.word64
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-Definition interp_uexpr_FEToWire : ExprUnOpFEToWire -> SpecificGen.GF2213_32BoundedCommon.fe2213_32W -> SpecificGen.GF2213_32BoundedCommon.wire_digitsW
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-Definition interp_uexpr_WireToFE : ExprUnOpWireToFE -> SpecificGen.GF2213_32BoundedCommon.wire_digitsW -> SpecificGen.GF2213_32BoundedCommon.fe2213_32W
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-Definition interp_9_4expr : Expr9_4Op
- -> Tuple.tuple SpecificGen.GF2213_32BoundedCommon.fe2213_32W 9
- -> Tuple.tuple SpecificGen.GF2213_32BoundedCommon.fe2213_32W 4
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-
-Notation binop_correct_and_bounded rop op
- := (ibinop_correct_and_bounded (interp_bexpr rop) (curry2 op)) (only parsing).
-Notation unop_correct_and_bounded rop op
- := (iunop_correct_and_bounded (interp_uexpr rop) op) (only parsing).
-Notation unop_FEToZ_correct rop op
- := (iunop_FEToZ_correct (interp_uexpr_FEToZ rop) op) (only parsing).
-Notation unop_FEToWire_correct_and_bounded rop op
- := (iunop_FEToWire_correct_and_bounded (interp_uexpr_FEToWire rop) op) (only parsing).
-Notation unop_WireToFE_correct_and_bounded rop op
- := (iunop_WireToFE_correct_and_bounded (interp_uexpr_WireToFE rop) op) (only parsing).
-Notation op9_4_correct_and_bounded rop op
- := (i9top_correct_and_bounded 4 (interp_9_4expr rop) op) (only parsing).
-
-Ltac rexpr_cbv :=
- lazymatch goal with
- | [ |- { rexpr | forall x, Interp _ (t:=?T) rexpr x = ?uncurry ?oper x } ]
- => let operf := head oper in
- let uncurryf := head uncurry in
- try cbv delta [T]; try cbv delta [oper];
- try cbv beta iota delta [uncurryf]
- | [ |- { rexpr | forall x, Interp _ (t:=?T) rexpr x = ?oper x } ]
- => let operf := head oper in
- try cbv delta [T]; try cbv delta [oper]
- end;
- cbv beta iota delta [interp_flat_type interp_base_type zero_ GF2213_32.fe2213_32 GF2213_32.wire_digits].
-
-Ltac reify_sig :=
- rexpr_cbv; eexists; Reify_rhs; reflexivity.
-
-Local Notation rexpr_sig T uncurried_op :=
- { rexprZ
- | forall x, Interp interp_op (t:=T) rexprZ x = uncurried_op x }
- (only parsing).
-
-Notation rexpr_binop_sig op := (rexpr_sig ExprBinOpT (curry2 op)) (only parsing).
-Notation rexpr_unop_sig op := (rexpr_sig ExprUnOpT op) (only parsing).
-Notation rexpr_unop_FEToZ_sig op := (rexpr_sig ExprUnOpFEToZT op) (only parsing).
-Notation rexpr_unop_FEToWire_sig op := (rexpr_sig ExprUnOpFEToWireT op) (only parsing).
-Notation rexpr_unop_WireToFE_sig op := (rexpr_sig ExprUnOpWireToFET op) (only parsing).
-Notation rexpr_9_4op_sig op := (rexpr_sig Expr9_4OpT op) (only parsing).
-
-Notation correct_and_bounded_genT ropW'v ropZ_sigv
- := (let ropW' := ropW'v in
- let ropZ_sig := ropZ_sigv in
- ropW' = proj1_sig ropZ_sig
- /\ interp_type_rel_pointwise Relations.related_Z (Interp (@BoundedWordW.interp_op) ropW') (Interp (@Z.interp_op) ropW')
- /\ interp_type_rel_pointwise Relations.related_bounds (Interp (@BoundedWordW.interp_op) ropW') (Interp (@ZBounds.interp_op) ropW')
- /\ interp_type_rel_pointwise Relations.related_wordW (Interp (@BoundedWordW.interp_op) ropW') (Interp (@WordW.interp_op) ropW'))
- (only parsing).
-
-Ltac app_tuples x y :=
- let tx := type of x in
- lazymatch (eval hnf in tx) with
- | prod _ _ => let xs := app_tuples (snd x) y in
- constr:((fst x, xs))
- | _ => constr:((x, y))
- end.
-
-Local Arguments Tuple.map2 : simpl never.
-Local Arguments Tuple.map : simpl never.
-(*
-Fixpoint args_to_bounded_helperT {n}
- (v : Tuple.tuple' WordW.wordW n)
- (bounds : Tuple.tuple' (Z * Z) n)
- (pf : List.fold_right
- andb true
- (Tuple.to_list
- _
- (Tuple.map2
- (n:=S n)
- (fun bounds v =>
- let '(lower, upper) := bounds in ((lower <=? v)%Z && (v <=? upper)%Z)%bool)
- bounds
- (Tuple.map (n:=S n) WordW.wordWToZ v))) = true)
- (res : Type)
- {struct n}
- : Type.
-Proof.
- refine (match n return (forall (v : Tuple.tuple' _ n) (bounds : Tuple.tuple' _ n),
- List.fold_right
- _ _ (Tuple.to_list
- _
- (Tuple.map2 (n:=S n) _ bounds (Tuple.map (n:=S n) _ v))) = true
- -> Type)
- with
- | 0 => fun v' bounds' pf0 => forall pf1 : (0 <= fst bounds' /\ Z.log2 (snd bounds') < Z.of_nat WordW.bit_width)%Z, res
- | S n' => fun v' bounds' pf0 => let t := _ in
- forall pf1 : (0 <= fst (snd bounds') /\ Z.log2 (snd (snd bounds')) < Z.of_nat WordW.bit_width)%Z, @args_to_bounded_helperT n' (fst v') (fst bounds') t res
- end v bounds pf).
- { clear -pf0.
- abstract (
- destruct v', bounds'; simpl @fst;
- rewrite Tuple.map_S in pf0;
- simpl in pf0;
- rewrite Tuple.map2_S in pf0;
- simpl @List.fold_right in *;
- rewrite Bool.andb_true_iff in pf0; tauto
- ). }
-Defined.
-
-Fixpoint args_to_bounded_helper {n} res
- {struct n}
- : forall v bounds pf, (Tuple.tuple' BoundedWordW.BoundedWord n -> res) -> @args_to_bounded_helperT n v bounds pf res.
-Proof.
- refine match n return (forall v bounds pf, (Tuple.tuple' BoundedWordW.BoundedWord n -> res) -> @args_to_bounded_helperT n v bounds pf res) with
- | 0 => fun v bounds pf f pf' => f {| BoundedWord.lower := fst bounds ; BoundedWord.value := v ; BoundedWord.upper := snd bounds |}
- | S n'
- => fun v bounds pf f pf'
- => @args_to_bounded_helper
- n' res (fst v) (fst bounds) _
- (fun ts => f (ts, {| BoundedWord.lower := fst (snd bounds) ; BoundedWord.value := snd v ; BoundedWord.upper := snd (snd bounds) |}))
- end.
- { clear -pf pf'.
- unfold Tuple.map2, Tuple.map in pf; simpl in *.
- abstract (
- destruct bounds;
- simpl in *;
- rewrite !Bool.andb_true_iff in pf;
- destruct_head' and;
- Z.ltb_to_lt; auto
- ). }
- { simpl in *.
- clear -pf pf'.
- abstract (
- destruct bounds as [? [? ?] ], v; simpl in *;
- rewrite Tuple.map_S in pf; simpl in pf; rewrite Tuple.map2_S in pf;
- simpl in pf;
- rewrite !Bool.andb_true_iff in pf;
- destruct_head' and;
- Z.ltb_to_lt; auto
- ). }
-Defined.
-*)
-
-Definition assoc_right''
- := Eval cbv [Tuple.assoc_right' Tuple.rsnoc' fst snd] in @Tuple.assoc_right'.
-(*
-Definition args_to_bounded {n} v bounds pf
- := Eval cbv [args_to_bounded_helper assoc_right''] in
- @args_to_bounded_helper n _ v bounds pf (@assoc_right'' _ _).
-*)
-Local Ltac get_len T :=
- match (eval hnf in T) with
- | prod ?A ?B
- => let a := get_len A in
- let b := get_len B in
- (eval compute in (a + b)%nat)
- | _ => constr:(1%nat)
- end.
-
-Ltac assoc_right_tuple x so_far :=
- let t := type of x in
- lazymatch (eval hnf in t) with
- | prod _ _ => let so_far := assoc_right_tuple (snd x) so_far in
- assoc_right_tuple (fst x) so_far
- | _ => lazymatch so_far with
- | @None => x
- | _ => constr:((x, so_far))
- end
- end.
-
-(*
-Local Ltac make_args x :=
- let x' := fresh "x'" in
- compute in x |- *;
- let t := match type of x with @expr _ _ _ (Tflat ?t) => t end in
- let t' := match goal with |- @expr _ _ _ (Tflat ?t) => t end in
- refine (LetIn (invert_Return x) _);
- let x'' := fresh "x''" in
- intro x'';
- let xv := assoc_right_tuple x'' (@None) in
- refine (SmartVarf (xv : interp_flat_type _ t')).
-
-Local Ltac args_to_bounded x H :=
- let x' := fresh in
- set (x' := x);
- compute in x;
- let len := (let T := type of x in get_len T) in
- destruct_head' prod;
- let c := constr:(args_to_bounded (n:=pred len) x' _ H) in
- let bounds := lazymatch c with args_to_bounded _ ?bounds _ => bounds end in
- let c := (eval cbv [domain ExprUnOpT interp_flat_type args_to_bounded bounds pred fst snd] in c) in
- apply c; compute; clear;
- try abstract (
- repeat split;
- solve [ reflexivity
- | refine (fun v => match v with eq_refl => I end) ]
- ).
- *)
-
-Section gen.
- Definition bounds_are_good_gen
- {n : nat} (bounds : Tuple.tuple (Z * Z) n)
- := let res :=
- Tuple.map (fun bs => let '(lower, upper) := bs in ((0 <=? lower)%Z && (Z.log2 upper <? Z.of_nat WordW.bit_width)%Z)%bool) bounds
- in
- List.fold_right andb true (Tuple.to_list n res).
- Definition unop_args_to_bounded'
- (bs : Z * Z)
- (Hbs : bounds_are_good_gen (n:=1) bs = true)
- (x : word64)
- (H : is_bounded_gen (Tuple.map (fun v : word64 => (v : Z)) (n:=1) x) bs = true)
- : BoundedWordW.BoundedWord.
- Proof.
- refine {| BoundedWord.lower := fst bs ; BoundedWord.value := x ; BoundedWord.upper := snd bs |}.
- unfold bounds_are_good_gen, is_bounded_gen, Tuple.map, Tuple.map2 in *; simpl in *.
- abstract (
- destruct bs; Bool.split_andb; Z.ltb_to_lt; simpl;
- repeat apply conj; assumption
- ).
- Defined.
- Fixpoint n_op_args_to_bounded'
- n
- : forall (bs : Tuple.tuple' (Z * Z) n)
- (Hbs : bounds_are_good_gen (n:=S n) bs = true)
- (x : Tuple.tuple' word64 n)
- (H : is_bounded_gen (Tuple.eta_tuple (Tuple.map (n:=S n) (fun v : word64 => v : Z)) x) bs = true),
- interp_flat_type (fun _ => BoundedWordW.BoundedWord) (Syntax.tuple' (Tbase TZ) n).
- Proof.
- destruct n as [|n']; simpl in *.
- { exact unop_args_to_bounded'. }
- { refine (fun bs Hbs x H
- => (@n_op_args_to_bounded' n' (fst bs) _ (fst x) _,
- @unop_args_to_bounded' (snd bs) _ (snd x) _));
- clear n_op_args_to_bounded';
- simpl in *;
- [ clear x H | clear Hbs | clear x H | clear Hbs ];
- unfold bounds_are_good_gen, is_bounded_gen in *;
- abstract (
- repeat first [ progress simpl in *
- | assumption
- | reflexivity
- | progress Bool.split_andb
- | progress destruct_head prod
- | match goal with
- | [ H : _ |- _ ] => progress rewrite ?Tuple.map_S, ?Tuple.map2_S, ?Tuple.strip_eta_tuple'_dep in H
- end
- | progress rewrite ?Tuple.map_S, ?Tuple.map2_S, ?Tuple.strip_eta_tuple'_dep
- | progress break_match_hyps
- | rewrite Bool.andb_true_iff; apply conj
- | unfold Tuple.map, Tuple.map2; simpl; rewrite Bool.andb_true_iff; apply conj ]
- ). }
- Defined.
-
- Definition n_op_args_to_bounded
- n
- : forall (bs : Tuple.tuple (Z * Z) n)
- (Hbs : bounds_are_good_gen bs = true)
- (x : Tuple.tuple word64 n)
- (H : is_bounded_gen (Tuple.eta_tuple (Tuple.map (fun v : word64 => v : Z)) x) bs = true),
- interp_flat_type (fun _ => BoundedWordW.BoundedWord) (Syntax.tuple (Tbase TZ) n)
- := match n with
- | 0 => fun _ _ _ _ => tt
- | S n' => @n_op_args_to_bounded' n'
- end.
-
- Fixpoint nm_op_args_to_bounded' n m
- (bs : Tuple.tuple (Z * Z) m)
- (Hbs : bounds_are_good_gen bs = true)
- : forall (x : interp_flat_type (fun _ => Tuple.tuple word64 m) (Syntax.tuple' (Tbase TZ) n))
- (H : SmartVarfPropMap (fun _ x => is_bounded_gen (Tuple.eta_tuple (Tuple.map (fun v : word64 => v : Z)) x) bs = true)
- x),
- interp_flat_type (fun _ => BoundedWordW.BoundedWord) (Syntax.tuple' (Syntax.tuple (Tbase TZ) m) n)
- := match n with
- | 0 => @n_op_args_to_bounded m bs Hbs
- | S n' => fun x H
- => (@nm_op_args_to_bounded' n' m bs Hbs (fst x) (proj1 H),
- @n_op_args_to_bounded m bs Hbs (snd x) (proj2 H))
- end.
- Definition nm_op_args_to_bounded n m
- (bs : Tuple.tuple (Z * Z) m)
- (Hbs : bounds_are_good_gen bs = true)
- : forall (x : interp_flat_type (fun _ => Tuple.tuple word64 m) (Syntax.tuple (Tbase TZ) n))
- (H : SmartVarfPropMap (fun _ x => is_bounded_gen (Tuple.eta_tuple (Tuple.map (fun v : word64 => v : Z)) x) bs = true)
- x),
- interp_flat_type (fun _ => BoundedWordW.BoundedWord) (Syntax.tuple (Syntax.tuple (Tbase TZ) m) n)
- := match n with
- | 0 => fun _ _ => tt
- | S n' => @nm_op_args_to_bounded' n' m bs Hbs
- end.
-End gen.
-
-Local Ltac get_inner_len T :=
- lazymatch T with
- | (?T * _)%type => get_inner_len T
- | ?T => get_len T
- end.
-Local Ltac get_outer_len T :=
- lazymatch T with
- | (?A * ?B)%type => let a := get_outer_len A in
- let b := get_outer_len B in
- (eval compute in (a + b)%nat)
- | ?T => constr:(1%nat)
- end.
-Local Ltac args_to_bounded x H :=
- let t := type of x in
- let m := get_inner_len t in
- let n := get_outer_len t in
- let H := constr:(fun Hbs => @nm_op_args_to_bounded n m _ Hbs x H) in
- let H := (eval cbv beta in (H eq_refl)) in
- exact H.
-
-Definition binop_args_to_bounded (x : fe2213_32W * fe2213_32W)
- (H : is_bounded (fe2213_32WToZ (fst x)) = true)
- (H' : is_bounded (fe2213_32WToZ (snd x)) = true)
- : interp_flat_type (fun _ => BoundedWordW.BoundedWord) (domain ExprBinOpT).
-Proof. args_to_bounded x (conj H H'). Defined.
-Definition unop_args_to_bounded (x : fe2213_32W) (H : is_bounded (fe2213_32WToZ x) = true)
- : interp_flat_type (fun _ => BoundedWordW.BoundedWord) (domain ExprUnOpT).
-Proof. args_to_bounded x H. Defined.
-Definition unopWireToFE_args_to_bounded (x : wire_digitsW) (H : wire_digits_is_bounded (wire_digitsWToZ x) = true)
- : interp_flat_type (fun _ => BoundedWordW.BoundedWord) (domain ExprUnOpWireToFET).
-Proof. args_to_bounded x H. Defined.
-Definition op9_args_to_bounded (x : fe2213_32W * fe2213_32W * fe2213_32W * fe2213_32W * fe2213_32W * fe2213_32W * fe2213_32W * fe2213_32W * fe2213_32W)
- (H0 : is_bounded (fe2213_32WToZ (fst (fst (fst (fst (fst (fst (fst (fst x))))))))) = true)
- (H1 : is_bounded (fe2213_32WToZ (snd (fst (fst (fst (fst (fst (fst (fst x))))))))) = true)
- (H2 : is_bounded (fe2213_32WToZ (snd (fst (fst (fst (fst (fst (fst x)))))))) = true)
- (H3 : is_bounded (fe2213_32WToZ (snd (fst (fst (fst (fst (fst x))))))) = true)
- (H4 : is_bounded (fe2213_32WToZ (snd (fst (fst (fst (fst x)))))) = true)
- (H5 : is_bounded (fe2213_32WToZ (snd (fst (fst (fst x))))) = true)
- (H6 : is_bounded (fe2213_32WToZ (snd (fst (fst x)))) = true)
- (H7 : is_bounded (fe2213_32WToZ (snd (fst x))) = true)
- (H8 : is_bounded (fe2213_32WToZ (snd x)) = true)
- : interp_flat_type (fun _ => BoundedWordW.BoundedWord) (domain Expr9_4OpT).
-Proof. args_to_bounded x (conj (conj (conj (conj (conj (conj (conj (conj H0 H1) H2) H3) H4) H5) H6) H7) H8). Defined.
-Local Ltac make_bounds_prop' bounds bounds' :=
- first [ refine (andb _ _);
- [ destruct bounds' as [bounds' _], bounds as [bounds _]
- | destruct bounds' as [_ bounds'], bounds as [_ bounds] ];
- try make_bounds_prop' bounds bounds'
- | exact (match bounds' with
- | Some bounds' => let (l, u) := bounds in
- let (l', u') := bounds' in
- ((l' <=? l) && (u <=? u'))%Z%bool
- | None => false
- end) ].
-Local Ltac make_bounds_prop bounds orig_bounds :=
- let bounds' := fresh "bounds'" in
- pose orig_bounds as bounds';
- make_bounds_prop' bounds bounds'.
-Definition unop_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain ExprUnOpT)) : bool.
-Proof. make_bounds_prop bounds ExprUnOp_bounds. Defined.
-Definition binop_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain ExprBinOpT)) : bool.
-Proof. make_bounds_prop bounds ExprUnOp_bounds. Defined.
-Definition unopFEToWire_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain ExprUnOpFEToWireT)) : bool.
-Proof. make_bounds_prop bounds ExprUnOpWireToFE_bounds. Defined.
-Definition unopWireToFE_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain ExprUnOpWireToFET)) : bool.
-Proof. make_bounds_prop bounds ExprUnOp_bounds. Defined.
-(* TODO FIXME(jgross?, andreser?): Is every function returning a single Z a boolean function? *)
-Definition unopFEToZ_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain ExprUnOpFEToZT)) : bool.
-Proof.
- refine (let (l, u) := bounds in ((0 <=? l) && (u <=? 1))%Z%bool).
-Defined.
-Definition op9_4_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain Expr9_4OpT)) : bool.
-Proof. make_bounds_prop bounds Expr4Op_bounds. Defined.
-(*Definition ApplyUnOp {var} (f : exprUnOp var) : exprArg var -> exprArg var
- := fun x
- => LetIn (invert_Return (unop_make_args x))
- (fun k => invert_Return (Apply length_fe2213_32 f k)).
-Definition ApplyBinOp {var} (f : exprBinOp var) : exprArg var -> exprArg var -> exprArg var
- := fun x y
- => LetIn (invert_Return (unop_make_args x))
- (fun x'
- => LetIn (invert_Return (unop_make_args y))
- (fun y'
- => invert_Return (Apply length_fe2213_32
- (Apply length_fe2213_32
- f x') y'))).
-Definition ApplyUnOpFEToWire {var} (f : exprUnOpFEToWire var) : exprArg var -> exprArgWire var
- := fun x
- => LetIn (invert_Return (unop_make_args x))
- (fun k => invert_Return (Apply length_fe2213_32 f k)).
-Definition ApplyUnOpWireToFE {var} (f : exprUnOpWireToFE var) : exprArgWire var -> exprArg var
- := fun x
- => LetIn (invert_Return (unop_wire_make_args x))
- (fun k => invert_Return (Apply (List.length wire_widths) f k)).
-Definition ApplyUnOpFEToZ {var} (f : exprUnOpFEToZ var) : exprArg var -> exprZ var
- := fun x
- => LetIn (invert_Return (unop_make_args x))
- (fun k => invert_Return (Apply length_fe2213_32 f k)).
-*)
-
-(* FIXME TODO(jgross): This is a horrible tactic. We should unify the
- various kinds of correct and boundedness, and abstract in Gallina
- rather than Ltac *)
-Ltac t_correct_and_bounded ropZ_sig Hbounds H0 H1 args :=
- let Heq := fresh "Heq" in
- let Hbounds0 := fresh "Hbounds0" in
- let Hbounds1 := fresh "Hbounds1" in
- let Hbounds2 := fresh "Hbounds2" in
- pose proof (proj2_sig ropZ_sig) as Heq;
- cbv [interp_bexpr interp_uexpr interp_uexpr_FEToWire interp_uexpr_FEToZ interp_uexpr_WireToFE interp_9_4expr
- interp_flat_type_eta interp_flat_type_eta_gen
- curry_binop_fe2213_32W curry_unop_fe2213_32W curry_unop_wire_digitsW curry_9op_fe2213_32W
- curry_binop_fe2213_32 curry_unop_fe2213_32 curry_unop_wire_digits curry_9op_fe2213_32
- uncurry_binop_fe2213_32W uncurry_unop_fe2213_32W uncurry_unop_wire_digitsW uncurry_9op_fe2213_32W
- uncurry_binop_fe2213_32 uncurry_unop_fe2213_32 uncurry_unop_wire_digits uncurry_9op_fe2213_32
- ExprBinOpT ExprUnOpFEToWireT ExprUnOpT ExprUnOpFEToZT ExprUnOpWireToFET Expr9_4OpT Expr4OpT] in *;
- cbv zeta in *;
- simpl @fe2213_32WToZ; simpl @wire_digitsWToZ;
- rewrite <- Heq; clear Heq;
- destruct Hbounds as [Heq Hbounds];
- change interp_op with (@Z.interp_op) in *;
- change interp_base_type with (@Z.interp_base_type) in *;
- change word64 with WordW.wordW in *;
- rewrite <- Heq; clear Heq;
- destruct Hbounds as [ Hbounds0 [Hbounds1 Hbounds2] ];
- pose proof (fun pf => Relations.uncurry_interp_type_rel_pointwise_proj_from_option2 WordW.to_Z pf Hbounds2 Hbounds0) as Hbounds_left;
- pose proof (fun pf => Relations.uncurry_interp_type_rel_pointwise_proj1_from_option2 Relations.related_wordW_boundsi' pf Hbounds1 Hbounds2) as Hbounds_right;
- specialize_by repeat first [ progress intros
- | progress unfold RelationClasses.Reflexive
- | reflexivity
- | assumption
- | progress destruct_head' base_type
- | progress destruct_head' BoundedWordW.BoundedWord
- | progress destruct_head' and
- | progress repeat apply conj ];
- specialize (Hbounds_left args H0);
- specialize (Hbounds_right args H0);
- cbv beta in *;
- lazymatch type of Hbounds_right with
- | match ?e with _ => _ end
- => lazymatch type of H1 with
- | match ?e' with _ => _ end
- => change e' with e in H1; destruct e eqn:?; [ | exfalso; assumption ]
- end
- end;
- repeat match goal with x := _ |- _ => subst x end;
- cbv [id
- binop_args_to_bounded unop_args_to_bounded unopWireToFE_args_to_bounded op9_args_to_bounded
- Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list
- Relations.proj_eq_rel SmartVarfMap interp_flat_type smart_interp_flat_map domain fst snd BoundedWordW.to_wordW' BoundedWordW.boundedWordToWordW BoundedWord.value Relations.related_wordW_boundsi' Relations.related'_wordW_bounds Bounds.upper Bounds.lower codomain WordW.to_Z nm_op_args_to_bounded nm_op_args_to_bounded' n_op_args_to_bounded n_op_args_to_bounded' unop_args_to_bounded' Relations.interp_flat_type_rel_pointwise Relations.interp_flat_type_rel_pointwise_gen_Prop] in Hbounds_left, Hbounds_right;
- simpl @interp_flat_type in *;
- (let v := (eval unfold WordW.interp_base_type in (WordW.interp_base_type TZ)) in
- change (WordW.interp_base_type TZ) with v in *);
- cbv beta iota zeta in *;
- lazymatch goal with
- | [ |- fe2213_32WToZ ?x = _ /\ _ ]
- => generalize dependent x; intros
- | [ |- wire_digitsWToZ ?x = _ /\ _ ]
- => generalize dependent x; intros
- | [ |- (Tuple.map fe2213_32WToZ ?x = _) /\ _ ]
- => generalize dependent x; intros
- | [ |- ((Tuple.map fe2213_32WToZ ?x = _) * _)%type ]
- => generalize dependent x; intros
- | [ |- _ = _ ]
- => exact Hbounds_left
- end;
- cbv [interp_type interp_type_gen interp_type_gen_hetero interp_flat_type WordW.interp_base_type codomain] in *;
- destruct_head' prod;
- change word64ToZ with WordW.wordWToZ in *;
- (split; [ exact Hbounds_left | ]);
- cbv [interp_flat_type] in *;
- cbv [fst snd
- Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list Tuple.from_list'
- make_bound
- Datatypes.length wire_widths wire_digit_bounds PseudoMersenneBaseParams.limb_widths bounds
- binop_bounds_good unop_bounds_good unopFEToWire_bounds_good unopWireToFE_bounds_good unopFEToZ_bounds_good op9_4_bounds_good
- ExprUnOp_bounds ExprBinOp_bounds ExprUnOpFEToWire_bounds ExprUnOpFEToZ_bounds ExprUnOpWireToFE_bounds Expr9Op_bounds Expr4Op_bounds] in H1;
- destruct_head' ZBounds.bounds;
- unfold_is_bounded_in H1;
- simpl @fe2213_32WToZ; simpl @wire_digitsWToZ;
- destruct_head' and;
- Z.ltb_to_lt;
- change WordW.wordWToZ with word64ToZ in *;
- cbv [Tuple.map HList.hlist Tuple.on_tuple Tuple.from_list Tuple.from_list' Tuple.to_list Tuple.to_list' List.map HList.hlist' fst snd fe2213_32WToZ HList.hlistP HList.hlistP'];
- cbv [WordW.bit_width BitSize64.bit_width Z.of_nat Pos.of_succ_nat Pos.succ] in *;
- repeat split; unfold_is_bounded;
- Z.ltb_to_lt;
- try omega; try reflexivity.
-
-Ltac rexpr_correct :=
- let ropW' := fresh in
- let ropZ_sig := fresh in
- intros ropW' ropZ_sig;
- let wf_ropW := fresh "wf_ropW" in
- assert (wf_ropW : Wf ropW') by (subst ropW' ropZ_sig; reflect_Wf base_type_eq_semidec_is_dec op_beq_bl);
- cbv zeta; repeat apply conj;
- [ vm_compute; reflexivity
- | apply @InterpWf;
- [ | apply wf_ropW ].. ];
- auto with interp_related.
-
-Notation rword_of_Z rexprZ_sig := (proj1_sig rexprZ_sig) (only parsing).
-
-Notation compute_bounds opW bounds
- := (Interp (@ZBounds.interp_op) opW bounds)
- (only parsing).
-
-Notation rexpr_wfT e := (Wf.Wf e) (only parsing).
-
-Ltac prove_rexpr_wfT
- := reflect_Wf Equality.base_type_eq_semidec_is_dec Equality.op_beq_bl.
-
-Module Export PrettyPrinting.
- (* We add [enlargen] to force [bounds_on] to be in [Type] in 8.4 and
- 8.5/8.6. Because [Set] is special and things break if
- [bounds_on] ends up in [Set] for reasons jgross hasn't bothered
- to debug. *)
- Inductive bounds_on := overflow | in_range (lower upper : Z) | enlargen (_ : Set).
-
- Inductive result := yes | no | borked.
-
- Definition ZBounds_to_bounds_on
- := fun (t : base_type) (x : ZBounds.interp_base_type t)
- => match x with
- | Some {| Bounds.lower := l ; Bounds.upper := u |}
- => in_range l u
- | None
- => overflow
- end.
-
- Fixpoint does_it_overflow {t} : interp_flat_type (fun t : base_type => bounds_on) t -> result
- := match t return interp_flat_type _ t -> result with
- | Tbase _ => fun v => match v with
- | overflow => yes
- | in_range _ _ => no
- | enlargen _ => borked
- end
- | Unit => fun _ => no
- | Prod x y => fun v => match @does_it_overflow _ (fst v), @does_it_overflow _ (snd v) with
- | no, no => no
- | yes, no | no, yes | yes, yes => yes
- | borked, _ | _, borked => borked
- end
- end.
-
- (** This gives a slightly easier to read version of the bounds *)
- Notation compute_bounds_for_display opW bounds
- := (SmartVarfMap ZBounds_to_bounds_on (compute_bounds opW bounds)) (only parsing).
- Notation sanity_compute opW bounds
- := (does_it_overflow (SmartVarfMap ZBounds_to_bounds_on (compute_bounds opW bounds))) (only parsing).
- Notation sanity_check opW bounds
- := (eq_refl (sanity_compute opW bounds) <: no = no) (only parsing).
-End PrettyPrinting.
diff --git a/src/SpecificGen/GF2213_32Reflective/Common9_4Op.v b/src/SpecificGen/GF2213_32Reflective/Common9_4Op.v
deleted file mode 100644
index 587eff7a7..000000000
--- a/src/SpecificGen/GF2213_32Reflective/Common9_4Op.v
+++ /dev/null
@@ -1,102 +0,0 @@
-Require Export Crypto.SpecificGen.GF2213_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF2213_32BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Local Notation eta_and x := (let (a, b) := x in a, let (a, b) := x in b) (only parsing).
-Lemma Expr9_4Op_correct_and_bounded
- ropW op (ropZ_sig : rexpr_9_4op_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall x012345678
- (x012345678
- := (eta_fe2213_32W (fst (fst (fst (fst (fst (fst (fst (fst x012345678)))))))),
- eta_fe2213_32W (snd (fst (fst (fst (fst (fst (fst (fst x012345678)))))))),
- eta_fe2213_32W (snd (fst (fst (fst (fst (fst (fst x012345678))))))),
- eta_fe2213_32W (snd (fst (fst (fst (fst (fst x012345678)))))),
- eta_fe2213_32W (snd (fst (fst (fst (fst x012345678))))),
- eta_fe2213_32W (snd (fst (fst (fst x012345678)))),
- eta_fe2213_32W (snd (fst (fst x012345678))),
- eta_fe2213_32W (snd (fst x012345678)),
- eta_fe2213_32W (snd x012345678)))
- (Hx012345678
- : is_bounded (fe2213_32WToZ (fst (fst (fst (fst (fst (fst (fst (fst x012345678))))))))) = true
- /\ is_bounded (fe2213_32WToZ (snd (fst (fst (fst (fst (fst (fst (fst x012345678))))))))) = true
- /\ is_bounded (fe2213_32WToZ (snd (fst (fst (fst (fst (fst (fst x012345678)))))))) = true
- /\ is_bounded (fe2213_32WToZ (snd (fst (fst (fst (fst (fst x012345678))))))) = true
- /\ is_bounded (fe2213_32WToZ (snd (fst (fst (fst (fst x012345678)))))) = true
- /\ is_bounded (fe2213_32WToZ (snd (fst (fst (fst x012345678))))) = true
- /\ is_bounded (fe2213_32WToZ (snd (fst (fst x012345678)))) = true
- /\ is_bounded (fe2213_32WToZ (snd (fst x012345678))) = true
- /\ is_bounded (fe2213_32WToZ (snd x012345678)) = true),
- let (Hx0, Hx12345678) := (eta_and Hx012345678) in
- let (Hx1, Hx2345678) := (eta_and Hx12345678) in
- let (Hx2, Hx345678) := (eta_and Hx2345678) in
- let (Hx3, Hx45678) := (eta_and Hx345678) in
- let (Hx4, Hx5678) := (eta_and Hx45678) in
- let (Hx5, Hx678) := (eta_and Hx5678) in
- let (Hx6, Hx78) := (eta_and Hx678) in
- let (Hx7, Hx8) := (eta_and Hx78) in
- let args := op9_args_to_bounded x012345678 Hx0 Hx1 Hx2 Hx3 Hx4 Hx5 Hx6 Hx7 Hx8 in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall x012345678
- (x012345678
- := (eta_fe2213_32W (fst (fst (fst (fst (fst (fst (fst (fst x012345678)))))))),
- eta_fe2213_32W (snd (fst (fst (fst (fst (fst (fst (fst x012345678)))))))),
- eta_fe2213_32W (snd (fst (fst (fst (fst (fst (fst x012345678))))))),
- eta_fe2213_32W (snd (fst (fst (fst (fst (fst x012345678)))))),
- eta_fe2213_32W (snd (fst (fst (fst (fst x012345678))))),
- eta_fe2213_32W (snd (fst (fst (fst x012345678)))),
- eta_fe2213_32W (snd (fst (fst x012345678))),
- eta_fe2213_32W (snd (fst x012345678)),
- eta_fe2213_32W (snd x012345678)))
- (Hx012345678
- : is_bounded (fe2213_32WToZ (fst (fst (fst (fst (fst (fst (fst (fst x012345678))))))))) = true
- /\ is_bounded (fe2213_32WToZ (snd (fst (fst (fst (fst (fst (fst (fst x012345678))))))))) = true
- /\ is_bounded (fe2213_32WToZ (snd (fst (fst (fst (fst (fst (fst x012345678)))))))) = true
- /\ is_bounded (fe2213_32WToZ (snd (fst (fst (fst (fst (fst x012345678))))))) = true
- /\ is_bounded (fe2213_32WToZ (snd (fst (fst (fst (fst x012345678)))))) = true
- /\ is_bounded (fe2213_32WToZ (snd (fst (fst (fst x012345678))))) = true
- /\ is_bounded (fe2213_32WToZ (snd (fst (fst x012345678)))) = true
- /\ is_bounded (fe2213_32WToZ (snd (fst x012345678))) = true
- /\ is_bounded (fe2213_32WToZ (snd x012345678)) = true),
- let (Hx0, Hx12345678) := (eta_and Hx012345678) in
- let (Hx1, Hx2345678) := (eta_and Hx12345678) in
- let (Hx2, Hx345678) := (eta_and Hx2345678) in
- let (Hx3, Hx45678) := (eta_and Hx345678) in
- let (Hx4, Hx5678) := (eta_and Hx45678) in
- let (Hx5, Hx678) := (eta_and Hx5678) in
- let (Hx6, Hx78) := (eta_and Hx678) in
- let (Hx7, Hx8) := (eta_and Hx78) in
- let args := op9_args_to_bounded x012345678 Hx0 Hx1 Hx2 Hx3 Hx4 Hx5 Hx6 Hx7 Hx8 in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => op9_4_bounds_good bounds = true
- | None => False
- end)
- : op9_4_correct_and_bounded ropW op.
-Proof.
- intros xs Hxs.
- pose xs as xs'.
- compute in xs.
- destruct_head' prod.
- cbv [Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' fst snd List.map Tuple.from_list Tuple.from_list' HList.hlistP HList.hlistP'] in Hxs.
- pose Hxs as Hxs'.
- destruct Hxs as [ [ [ [ [ [ [ [ Hx0 Hx1 ] Hx2 ] Hx3 ] Hx4 ] Hx5 ] Hx6 ] Hx7 ] Hx8 ].
- specialize (H0 xs'
- (conj Hx0 (conj Hx1 (conj Hx2 (conj Hx3 (conj Hx4 (conj Hx5 (conj Hx6 (conj Hx7 Hx8))))))))).
- specialize (H1 xs'
- (conj Hx0 (conj Hx1 (conj Hx2 (conj Hx3 (conj Hx4 (conj Hx5 (conj Hx6 (conj Hx7 Hx8))))))))).
- Time let args := constr:(op9_args_to_bounded xs' Hx0 Hx1 Hx2 Hx3 Hx4 Hx5 Hx6 Hx7 Hx8) in
- admit; t_correct_and_bounded ropZ_sig Hbounds H0 H1 args. (* On 8.6beta1, with ~2 GB RAM, Finished transaction in 46.56 secs (46.372u,0.14s) (successful) *)
-Admitted. (*Time Qed. (* On 8.6beta1, with ~4.3 GB RAM, Finished transaction in 67.652 secs (66.932u,0.64s) (successful) *)*)
diff --git a/src/SpecificGen/GF2213_32Reflective/CommonBinOp.v b/src/SpecificGen/GF2213_32Reflective/CommonBinOp.v
deleted file mode 100644
index 3d38818f4..000000000
--- a/src/SpecificGen/GF2213_32Reflective/CommonBinOp.v
+++ /dev/null
@@ -1,50 +0,0 @@
-Require Export Crypto.SpecificGen.GF2213_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF2213_32BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Lemma ExprBinOp_correct_and_bounded
- ropW op (ropZ_sig : rexpr_binop_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall xy
- (xy := (eta_fe2213_32W (fst xy), eta_fe2213_32W (snd xy)))
- (Hxy : is_bounded (fe2213_32WToZ (fst xy)) = true
- /\ is_bounded (fe2213_32WToZ (snd xy)) = true),
- let Hx := let (Hx, Hy) := Hxy in Hx in
- let Hy := let (Hx, Hy) := Hxy in Hy in
- let args := binop_args_to_bounded xy Hx Hy in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall xy
- (xy := (eta_fe2213_32W (fst xy), eta_fe2213_32W (snd xy)))
- (Hxy : is_bounded (fe2213_32WToZ (fst xy)) = true
- /\ is_bounded (fe2213_32WToZ (snd xy)) = true),
- let Hx := let (Hx, Hy) := Hxy in Hx in
- let Hy := let (Hx, Hy) := Hxy in Hy in
- let args := binop_args_to_bounded (fst xy, snd xy) Hx Hy in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => binop_bounds_good bounds = true
- | None => False
- end)
- : binop_correct_and_bounded ropW op.
-Proof.
- intros xy HxHy.
- pose xy as xy'.
- compute in xy; destruct_head' prod.
- specialize (H0 xy' HxHy).
- specialize (H1 xy' HxHy).
- destruct HxHy as [Hx Hy].
- let args := constr:(binop_args_to_bounded xy' Hx Hy) in
- t_correct_and_bounded ropZ_sig Hbounds H0 H1 args.
-Qed.
diff --git a/src/SpecificGen/GF2213_32Reflective/CommonUnOp.v b/src/SpecificGen/GF2213_32Reflective/CommonUnOp.v
deleted file mode 100644
index 8f8035405..000000000
--- a/src/SpecificGen/GF2213_32Reflective/CommonUnOp.v
+++ /dev/null
@@ -1,43 +0,0 @@
-Require Export Crypto.SpecificGen.GF2213_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF2213_32BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Lemma ExprUnOp_correct_and_bounded
- ropW op (ropZ_sig : rexpr_unop_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall x
- (x := eta_fe2213_32W x)
- (Hx : is_bounded (fe2213_32WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall x
- (x := eta_fe2213_32W x)
- (Hx : is_bounded (fe2213_32WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => unop_bounds_good bounds = true
- | None => False
- end)
- : unop_correct_and_bounded ropW op.
-Proof.
- intros x Hx.
- pose x as x'.
- hnf in x; destruct_head' prod.
- specialize (H0 x' Hx).
- specialize (H1 x' Hx).
- let args := constr:(unop_args_to_bounded x' Hx) in
- t_correct_and_bounded ropZ_sig Hbounds H0 H1 args.
-Qed.
diff --git a/src/SpecificGen/GF2213_32Reflective/CommonUnOpFEToWire.v b/src/SpecificGen/GF2213_32Reflective/CommonUnOpFEToWire.v
deleted file mode 100644
index 76f1635df..000000000
--- a/src/SpecificGen/GF2213_32Reflective/CommonUnOpFEToWire.v
+++ /dev/null
@@ -1,43 +0,0 @@
-Require Export Crypto.SpecificGen.GF2213_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF2213_32BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Lemma ExprUnOpFEToWire_correct_and_bounded
- ropW op (ropZ_sig : rexpr_unop_FEToWire_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall x
- (x := eta_fe2213_32W x)
- (Hx : is_bounded (fe2213_32WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall x
- (x := eta_fe2213_32W x)
- (Hx : is_bounded (fe2213_32WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => unopFEToWire_bounds_good bounds = true
- | None => False
- end)
- : unop_FEToWire_correct_and_bounded ropW op.
-Proof.
- intros x Hx.
- pose x as x'.
- hnf in x; destruct_head' prod.
- specialize (H0 x' Hx).
- specialize (H1 x' Hx).
- let args := constr:(unop_args_to_bounded x' Hx) in
- t_correct_and_bounded ropZ_sig Hbounds H0 H1 args.
-Qed.
diff --git a/src/SpecificGen/GF2213_32Reflective/CommonUnOpFEToZ.v b/src/SpecificGen/GF2213_32Reflective/CommonUnOpFEToZ.v
deleted file mode 100644
index 95dbd10cd..000000000
--- a/src/SpecificGen/GF2213_32Reflective/CommonUnOpFEToZ.v
+++ /dev/null
@@ -1,43 +0,0 @@
-Require Export Crypto.SpecificGen.GF2213_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF2213_32BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Lemma ExprUnOpFEToZ_correct_and_bounded
- ropW op (ropZ_sig : rexpr_unop_FEToZ_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall x
- (x := eta_fe2213_32W x)
- (Hx : is_bounded (fe2213_32WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall x
- (x := eta_fe2213_32W x)
- (Hx : is_bounded (fe2213_32WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => unopFEToZ_bounds_good bounds = true
- | None => False
- end)
- : unop_FEToZ_correct ropW op.
-Proof.
- intros x Hx.
- pose x as x'.
- hnf in x; destruct_head' prod.
- specialize (H0 x' Hx).
- specialize (H1 x' Hx).
- let args := constr:(unop_args_to_bounded x' Hx) in
- t_correct_and_bounded ropZ_sig Hbounds H0 H1 args.
-Qed.
diff --git a/src/SpecificGen/GF2213_32Reflective/CommonUnOpWireToFE.v b/src/SpecificGen/GF2213_32Reflective/CommonUnOpWireToFE.v
deleted file mode 100644
index 45094aa32..000000000
--- a/src/SpecificGen/GF2213_32Reflective/CommonUnOpWireToFE.v
+++ /dev/null
@@ -1,43 +0,0 @@
-Require Export Crypto.SpecificGen.GF2213_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF2213_32BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Lemma ExprUnOpWireToFE_correct_and_bounded
- ropW op (ropZ_sig : rexpr_unop_WireToFE_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall x
- (x := eta_wire_digitsW x)
- (Hx : wire_digits_is_bounded (wire_digitsWToZ x) = true),
- let args := unopWireToFE_args_to_bounded x Hx in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall x
- (x := eta_wire_digitsW x)
- (Hx : wire_digits_is_bounded (wire_digitsWToZ x) = true),
- let args := unopWireToFE_args_to_bounded x Hx in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => unopWireToFE_bounds_good bounds = true
- | None => False
- end)
- : unop_WireToFE_correct_and_bounded ropW op.
-Proof.
- intros x Hx.
- pose x as x'.
- hnf in x; destruct_head' prod.
- specialize (H0 x' Hx).
- specialize (H1 x' Hx).
- let args := constr:(unopWireToFE_args_to_bounded x' Hx) in
- t_correct_and_bounded ropZ_sig Hbounds H0 H1 args.
-Qed.
diff --git a/src/SpecificGen/GF2213_32Reflective/Reified.v b/src/SpecificGen/GF2213_32Reflective/Reified.v
deleted file mode 100644
index 445c5d28d..000000000
--- a/src/SpecificGen/GF2213_32Reflective/Reified.v
+++ /dev/null
@@ -1,13 +0,0 @@
-(** We split the reification up into separate files, one operation per
- file, so that it can run in parallel. *)
-Require Export Crypto.SpecificGen.GF2213_32Reflective.Reified.Add.
-Require Export Crypto.SpecificGen.GF2213_32Reflective.Reified.CarryAdd.
-Require Export Crypto.SpecificGen.GF2213_32Reflective.Reified.Sub.
-Require Export Crypto.SpecificGen.GF2213_32Reflective.Reified.CarrySub.
-Require Export Crypto.SpecificGen.GF2213_32Reflective.Reified.Mul.
-Require Export Crypto.SpecificGen.GF2213_32Reflective.Reified.Opp.
-Require Export Crypto.SpecificGen.GF2213_32Reflective.Reified.CarryOpp.
-Require Export Crypto.SpecificGen.GF2213_32Reflective.Reified.PreFreeze.
-Require Export Crypto.SpecificGen.GF2213_32Reflective.Reified.GeModulus.
-Require Export Crypto.SpecificGen.GF2213_32Reflective.Reified.Pack.
-Require Export Crypto.SpecificGen.GF2213_32Reflective.Reified.Unpack.
diff --git a/src/SpecificGen/GF2213_32Reflective/Reified/Add.v b/src/SpecificGen/GF2213_32Reflective/Reified/Add.v
deleted file mode 100644
index d278a8f26..000000000
--- a/src/SpecificGen/GF2213_32Reflective/Reified/Add.v
+++ /dev/null
@@ -1,12 +0,0 @@
-Require Import Crypto.SpecificGen.GF2213_32Reflective.CommonBinOp.
-
-Definition raddZ_sig : rexpr_binop_sig add. Proof. reify_sig. Defined.
-Definition raddW := Eval vm_compute in rword_of_Z raddZ_sig.
-Lemma raddW_correct_and_bounded_gen : correct_and_bounded_genT raddW raddZ_sig.
-Proof. rexpr_correct. Qed.
-Definition radd_output_bounds := Eval vm_compute in compute_bounds raddW ExprBinOp_bounds.
-
-Local Open Scope string_scope.
-Compute ("Add", compute_bounds_for_display raddW ExprBinOp_bounds).
-Compute ("Add overflows? ", sanity_compute raddW ExprBinOp_bounds).
-Compute ("Add overflows (error if it does)? ", sanity_check raddW ExprBinOp_bounds).
diff --git a/src/SpecificGen/GF2213_32Reflective/Reified/AddCoordinates.v b/src/SpecificGen/GF2213_32Reflective/Reified/AddCoordinates.v
deleted file mode 100644
index 0230b3427..000000000
--- a/src/SpecificGen/GF2213_32Reflective/Reified/AddCoordinates.v
+++ /dev/null
@@ -1,183 +0,0 @@
-Require Export Coq.ZArith.ZArith.
-Require Export Coq.Strings.String.
-Require Export Crypto.SpecificGen.GF2213_32.
-Require Export Crypto.SpecificGen.GF2213_32BoundedCommon.
-Require Import Crypto.Reflection.Reify.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Reflection.ExprInversion.
-Require Import Crypto.Reflection.Relations.
-Require Import Crypto.Reflection.Linearize.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Crypto.Reflection.Z.Interpretations64.Relations.
-Require Import Crypto.Reflection.Z.Interpretations64.RelationsCombinations.
-Require Import Crypto.Reflection.Z.Reify.
-Require Export Crypto.Reflection.Z.Syntax.
-Require Import Crypto.Reflection.InterpWfRel.
-Require Import Crypto.Reflection.LinearizeInterp.
-Require Import Crypto.Reflection.WfReflective.
-Require Import Crypto.Reflection.Eta.
-Require Import Crypto.Reflection.EtaInterp.
-Require Import Crypto.CompleteEdwardsCurve.ExtendedCoordinates.
-Require Import Crypto.SpecificGen.GF2213_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF2213_32Reflective.Reified.Add.
-Require Import Crypto.SpecificGen.GF2213_32Reflective.Reified.Sub.
-Require Import Crypto.SpecificGen.GF2213_32Reflective.Reified.Mul.
-Require Import Crypto.SpecificGen.GF2213_32Reflective.Common9_4Op.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.HList.
-Require Import Crypto.Util.Tower.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.Notations.
-Require Import Bedrock.Word.
-
-Definition radd_coordinatesZ' var twice_d P1 P2
- := @Extended.add_coordinates_gen
- _
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig raddZ_sig var)))
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig rsubZ_sig var)))
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig rmulZ_sig var)))
- twice_d _
- (fun x y z w => (x, y, z, w)%expr)
- (fun v f => LetIn v
- (fun k => f (SmartVarf k)))
- P1 P2.
-
-Local Notation eta x := (fst x, snd x).
-
-Definition radd_coordinatesZ'' : Syntax.Expr _ _ _
- := Linearize
- (ExprEta
- (fun var
- => Abs (fun twice_d_P1_P2 : interp_flat_type _ (_ * ((_ * _ * _ * _) * (_ * _ * _ * _)))
- => let '(twice_d, ((P10, P11, P12, P13), (P20, P21, P22, P23)))
- := twice_d_P1_P2 in
- radd_coordinatesZ'
- var (SmartVarf twice_d)
- (SmartVarf P10, SmartVarf P11, SmartVarf P12, SmartVarf P13)
- (SmartVarf P20, SmartVarf P21, SmartVarf P22, SmartVarf P23)))).
-
-Definition add_coordinates
- := fun twice_d P10 P11 P12 P13 P20 P21 P22 P23
- => @Extended.add_coordinates
- _ add sub mul
- twice_d (P10, P11, P12, P13) (P20, P21, P22, P23).
-
-Definition uncurried_add_coordinates
- := fun twice_d_P1_P2
- => let twice_d := fst twice_d_P1_P2 in
- let (P1, P2) := eta (snd twice_d_P1_P2) in
- @Extended.add_coordinates
- _ add sub mul
- twice_d P1 P2.
-
-Local Notation rexpr_sigPf T uncurried_op rexprZ x :=
- (Interp interp_op (t:=T) rexprZ x = uncurried_op x)
- (only parsing).
-Local Notation rexpr_sigP T uncurried_op rexprZ :=
- (forall x, rexpr_sigPf T uncurried_op rexprZ x)
- (only parsing).
-Local Notation rexpr_sig T uncurried_op :=
- { rexprZ | rexpr_sigP T uncurried_op rexprZ }
- (only parsing).
-
-Local Ltac fold_interpf' :=
- let k := (eval unfold interpf, interpf_step in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- change k with k'; clearbody k'; subst k'.
-
-Local Ltac fold_interpf :=
- let k := (eval unfold interpf in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- change k with k'; clearbody k'; subst k';
- fold_interpf'.
-
-Local Ltac repeat_step_interpf :=
- let k := (eval unfold interpf in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- repeat (unfold k'; change k with k'; unfold interpf_step);
- clearbody k'; subst k'.
-
-Lemma radd_coordinatesZ_sigP' : rexpr_sigP _ uncurried_add_coordinates radd_coordinatesZ''.
-Proof.
- cbv [radd_coordinatesZ''].
- intro x; rewrite InterpLinearize, InterpExprEta.
- cbv [domain interp_flat_type] in x.
- destruct x as [twice_d [ [ [ [P10_ P11_] P12_] P13_] [ [ [P20_ P21_] P22_] P23_] ] ].
- repeat match goal with
- | [ H : prod _ _ |- _ ] => let H0 := fresh H in let H1 := fresh H in destruct H as [H0 H1]
- end.
- cbv [invert_Abs domain codomain Interp interp SmartVarf smart_interp_flat_map fst snd].
- cbv [radd_coordinatesZ' add_coordinates Extended.add_coordinates_gen uncurried_add_coordinates SmartVarf smart_interp_flat_map]; simpl @fst; simpl @snd.
- repeat match goal with
- | [ |- appcontext[@proj1_sig ?A ?B ?v] ]
- => let k := fresh "f" in
- let k' := fresh "f" in
- let H := fresh in
- set (k := v);
- set (k' := @proj1_sig A B k);
- pose proof (proj2_sig k) as H;
- change (proj1_sig k) with k' in H;
- clearbody k'; clear k;
- cbv beta in *
- end.
- cbv [Interp Curry.curry2] in *.
- unfold interpf, interpf_step; fold_interpf.
- cbv beta iota delta [Extended.add_coordinates interp_flat_type interp_base_type GF2213_32.fe2213_32].
- Time
- abstract (
- repeat match goal with
- | [ |- (dlet x := ?y in @?z x) = (let x' := ?y' in @?z' x') ]
- => refine ((fun pf0 pf1 => @Proper_Let_In_nd_changebody _ _ Logic.eq _ y y' pf0 z z' pf1)
- (_ : y = y')
- (_ : forall x, z x = z' x));
- cbv beta; intros;
- [ cbv [Let_In] | ]
- end;
- repeat match goal with
- | _ => rewrite !interpf_invert_Abs
- | _ => rewrite_hyp !*
- | [ |- ?x = ?x ] => reflexivity
- | _ => rewrite <- !surjective_pairing
- end
- ).
-Time Defined.
-Lemma radd_coordinatesZ_sigP : rexpr_sigP _ uncurried_add_coordinates radd_coordinatesZ''.
-Proof.
- exact radd_coordinatesZ_sigP'.
-Qed.
-Definition radd_coordinatesZ_sig
- := exist (fun v => rexpr_sigP _ _ v) radd_coordinatesZ'' radd_coordinatesZ_sigP.
-
-Definition radd_coordinates_input_bounds
- := (ExprUnOp_bounds, ((ExprUnOp_bounds, ExprUnOp_bounds, ExprUnOp_bounds, ExprUnOp_bounds),
- (ExprUnOp_bounds, ExprUnOp_bounds, ExprUnOp_bounds, ExprUnOp_bounds))).
-
-Time Definition radd_coordinatesW := Eval vm_compute in rword_of_Z radd_coordinatesZ_sig.
-Lemma radd_coordinatesW_correct_and_bounded_gen : correct_and_bounded_genT radd_coordinatesW radd_coordinatesZ_sig.
-Proof. Time rexpr_correct. Time Qed.
-Definition radd_coordinates_output_bounds := Eval vm_compute in compute_bounds radd_coordinatesW radd_coordinates_input_bounds.
-
-Local Obligation Tactic := intros; vm_compute; constructor.
-
-(*
-Program Definition radd_coordinatesW_correct_and_bounded
- := Expr9_4Op_correct_and_bounded
- radd_coordinatesW uncurried_add_coordinates radd_coordinatesZ_sig radd_coordinatesW_correct_and_bounded_gen
- _ _.
- *)
-
-Local Open Scope string_scope.
-Compute ("Add_Coordinates", compute_bounds_for_display radd_coordinatesW radd_coordinates_input_bounds).
-Compute ("Add_Coordinates overflows? ", sanity_compute radd_coordinatesW radd_coordinates_input_bounds).
-Compute ("Add_Coordinates overflows (error if it does)? ", sanity_check radd_coordinatesW radd_coordinates_input_bounds).
diff --git a/src/SpecificGen/GF2213_32Reflective/Reified/AddDisplay.log b/src/SpecificGen/GF2213_32Reflective/Reified/AddDisplay.log
deleted file mode 100644
index 4e361cd8d..000000000
--- a/src/SpecificGen/GF2213_32Reflective/Reified/AddDisplay.log
+++ /dev/null
@@ -1,36 +0,0 @@
-raddW =
-fun var : Syntax.base_type -> Type =>
-λ x x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 : var Syntax.TZ,
-Tbase Syntax.TZ x15 = x + x7;
-Tbase Syntax.TZ x16 = x0 + x8;
-Tbase Syntax.TZ x17 = x1 + x9;
-Tbase Syntax.TZ x18 = x2 + x10;
-Tbase Syntax.TZ x19 = x3 + x11;
-Tbase Syntax.TZ x20 = x4 + x12;
-Tbase Syntax.TZ x21 = x5 + x13;
-Tbase Syntax.TZ x22 = x6 + x14;
-(Return x15, Return x16, Return x17, Return x18, Return x19,
-Return x20, Return x21, Return x22)
- : forall var : Syntax.base_type -> Type,
- expr Syntax.base_type Syntax.op
- (Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF2213_32Reflective/Reified/AddDisplay.v b/src/SpecificGen/GF2213_32Reflective/Reified/AddDisplay.v
deleted file mode 100644
index c660ee7ec..000000000
--- a/src/SpecificGen/GF2213_32Reflective/Reified/AddDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF2213_32Reflective.Reified.Add.
-Require Export Crypto.Reflection.Z.CNotations.
-
-Print raddW.
diff --git a/src/SpecificGen/GF2213_32Reflective/Reified/AddJavaDisplay.log b/src/SpecificGen/GF2213_32Reflective/Reified/AddJavaDisplay.log
deleted file mode 100644
index 4e361cd8d..000000000
--- a/src/SpecificGen/GF2213_32Reflective/Reified/AddJavaDisplay.log
+++ /dev/null
@@ -1,36 +0,0 @@
-raddW =
-fun var : Syntax.base_type -> Type =>
-λ x x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 : var Syntax.TZ,
-Tbase Syntax.TZ x15 = x + x7;
-Tbase Syntax.TZ x16 = x0 + x8;
-Tbase Syntax.TZ x17 = x1 + x9;
-Tbase Syntax.TZ x18 = x2 + x10;
-Tbase Syntax.TZ x19 = x3 + x11;
-Tbase Syntax.TZ x20 = x4 + x12;
-Tbase Syntax.TZ x21 = x5 + x13;
-Tbase Syntax.TZ x22 = x6 + x14;
-(Return x15, Return x16, Return x17, Return x18, Return x19,
-Return x20, Return x21, Return x22)
- : forall var : Syntax.base_type -> Type,
- expr Syntax.base_type Syntax.op
- (Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF2213_32Reflective/Reified/AddJavaDisplay.v b/src/SpecificGen/GF2213_32Reflective/Reified/AddJavaDisplay.v
deleted file mode 100644
index 7d88c2a6d..000000000
--- a/src/SpecificGen/GF2213_32Reflective/Reified/AddJavaDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF2213_32Reflective.Reified.Add.
-Require Export Crypto.Reflection.Z.JavaNotations.
-
-Print raddW.
diff --git a/src/SpecificGen/GF2213_32Reflective/Reified/CarryAdd.v b/src/SpecificGen/GF2213_32Reflective/Reified/CarryAdd.v
deleted file mode 100644
index 516a36bf5..000000000
--- a/src/SpecificGen/GF2213_32Reflective/Reified/CarryAdd.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF2213_32Reflective.CommonBinOp.
-
-Definition rcarry_addZ_sig : rexpr_binop_sig carry_add. Proof. reify_sig. Defined.
-Definition rcarry_addW := Eval vm_compute in rword_of_Z rcarry_addZ_sig.
-Lemma rcarry_addW_correct_and_bounded_gen : correct_and_bounded_genT rcarry_addW rcarry_addZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rcarry_add_output_bounds := Eval vm_compute in compute_bounds rcarry_addW ExprBinOp_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rcarry_addW_correct_and_bounded
- := ExprBinOp_correct_and_bounded
- rcarry_addW carry_add rcarry_addZ_sig rcarry_addW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Carry_Add", compute_bounds_for_display rcarry_addW ExprBinOp_bounds).
-Compute ("Carry_Add overflows? ", sanity_compute rcarry_addW ExprBinOp_bounds).
-Compute ("Carry_Add overflows (error if it does)? ", sanity_check rcarry_addW ExprBinOp_bounds).
diff --git a/src/SpecificGen/GF2213_32Reflective/Reified/CarryOpp.v b/src/SpecificGen/GF2213_32Reflective/Reified/CarryOpp.v
deleted file mode 100644
index a2ab83ce2..000000000
--- a/src/SpecificGen/GF2213_32Reflective/Reified/CarryOpp.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF2213_32Reflective.CommonUnOp.
-
-Definition rcarry_oppZ_sig : rexpr_unop_sig carry_opp. Proof. reify_sig. Defined.
-Definition rcarry_oppW := Eval vm_compute in rword_of_Z rcarry_oppZ_sig.
-Lemma rcarry_oppW_correct_and_bounded_gen : correct_and_bounded_genT rcarry_oppW rcarry_oppZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rcarry_opp_output_bounds := Eval vm_compute in compute_bounds rcarry_oppW ExprUnOp_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rcarry_oppW_correct_and_bounded
- := ExprUnOp_correct_and_bounded
- rcarry_oppW carry_opp rcarry_oppZ_sig rcarry_oppW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Carry_Opp", compute_bounds_for_display rcarry_oppW ExprUnOp_bounds).
-Compute ("Carry_Opp overflows? ", sanity_compute rcarry_oppW ExprUnOp_bounds).
-Compute ("Carry_Opp overflows (error if it does)? ", sanity_check rcarry_oppW ExprUnOp_bounds).
diff --git a/src/SpecificGen/GF2213_32Reflective/Reified/CarrySub.v b/src/SpecificGen/GF2213_32Reflective/Reified/CarrySub.v
deleted file mode 100644
index 04a097dd7..000000000
--- a/src/SpecificGen/GF2213_32Reflective/Reified/CarrySub.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF2213_32Reflective.CommonBinOp.
-
-Definition rcarry_subZ_sig : rexpr_binop_sig carry_sub. Proof. reify_sig. Defined.
-Definition rcarry_subW := Eval vm_compute in rword_of_Z rcarry_subZ_sig.
-Lemma rcarry_subW_correct_and_bounded_gen : correct_and_bounded_genT rcarry_subW rcarry_subZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rcarry_sub_output_bounds := Eval vm_compute in compute_bounds rcarry_subW ExprBinOp_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rcarry_subW_correct_and_bounded
- := ExprBinOp_correct_and_bounded
- rcarry_subW carry_sub rcarry_subZ_sig rcarry_subW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Carry_Sub", compute_bounds_for_display rcarry_subW ExprBinOp_bounds).
-Compute ("Carry_Sub overflows? ", sanity_compute rcarry_subW ExprBinOp_bounds).
-Compute ("Carry_Sub overflows (error if it does)? ", sanity_check rcarry_subW ExprBinOp_bounds).
diff --git a/src/SpecificGen/GF2213_32Reflective/Reified/GeModulus.v b/src/SpecificGen/GF2213_32Reflective/Reified/GeModulus.v
deleted file mode 100644
index 659e712d9..000000000
--- a/src/SpecificGen/GF2213_32Reflective/Reified/GeModulus.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF2213_32Reflective.CommonUnOpFEToZ.
-
-Definition rge_modulusZ_sig : rexpr_unop_FEToZ_sig ge_modulus. Proof. reify_sig. Defined.
-Definition rge_modulusW := Eval vm_compute in rword_of_Z rge_modulusZ_sig.
-Lemma rge_modulusW_correct_and_bounded_gen : correct_and_bounded_genT rge_modulusW rge_modulusZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rge_modulus_output_bounds := Eval vm_compute in compute_bounds rge_modulusW ExprUnOpFEToZ_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rge_modulusW_correct_and_bounded
- := ExprUnOpFEToZ_correct_and_bounded
- rge_modulusW ge_modulus rge_modulusZ_sig rge_modulusW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Ge_Modulus", compute_bounds_for_display rge_modulusW ExprUnOpFEToZ_bounds).
-Compute ("Ge_Modulus overflows? ", sanity_compute rge_modulusW ExprUnOpFEToZ_bounds).
-Compute ("Ge_Modulus overflows (error if it does)? ", sanity_check rge_modulusW ExprUnOpFEToZ_bounds).
diff --git a/src/SpecificGen/GF2213_32Reflective/Reified/LadderStep.v b/src/SpecificGen/GF2213_32Reflective/Reified/LadderStep.v
deleted file mode 100644
index 7136ce80a..000000000
--- a/src/SpecificGen/GF2213_32Reflective/Reified/LadderStep.v
+++ /dev/null
@@ -1,189 +0,0 @@
-Require Export Coq.ZArith.ZArith.
-Require Export Coq.Strings.String.
-Require Export Crypto.SpecificGen.GF2213_32.
-Require Export Crypto.SpecificGen.GF2213_32BoundedCommon.
-Require Import Crypto.Reflection.Reify.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Reflection.Relations.
-Require Import Crypto.Reflection.ExprInversion.
-Require Import Crypto.Reflection.Linearize.
-Require Import Crypto.Reflection.Eta.
-Require Import Crypto.Reflection.EtaInterp.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Crypto.Reflection.Z.Interpretations64.Relations.
-Require Import Crypto.Reflection.Z.Interpretations64.RelationsCombinations.
-Require Import Crypto.Reflection.Z.Reify.
-Require Export Crypto.Reflection.Z.Syntax.
-Require Import Crypto.Reflection.InterpWfRel.
-Require Import Crypto.Reflection.LinearizeInterp.
-Require Import Crypto.Reflection.WfReflective.
-Require Import Crypto.Spec.MxDH.
-Require Import Crypto.SpecificGen.GF2213_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF2213_32Reflective.Reified.Add.
-Require Import Crypto.SpecificGen.GF2213_32Reflective.Reified.Sub.
-Require Import Crypto.SpecificGen.GF2213_32Reflective.Reified.Mul.
-Require Import Crypto.SpecificGen.GF2213_32Reflective.Common9_4Op.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.HList.
-Require Import Crypto.Util.Tower.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.Notations.
-Require Import Bedrock.Word.
-
-Definition rladderstepZ' var (T:=_) (a24 x0 : T) P1 P2
- := @MxDH.ladderstep_gen
- _
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig raddZ_sig var)))
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig rsubZ_sig var)))
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig rmulZ_sig var)))
- a24
- _
- (fun x y z w => (x, y, z, w)%expr)
- (fun v f => LetIn v
- (fun k => f (SmartVarf k)))
- x0
- P1 P2.
-
-Definition rladderstepZ'' : Syntax.Expr _ _ _
- := Linearize
- (ExprEta
- (fun var
- => Abs (fun a24_x0_P1_P2 : interp_flat_type _ (_ * _ * ((_ * _) * (_ * _)))
- => let '(a24, x0, ((P10, P11), (P20, P21)))
- := a24_x0_P1_P2 in
- rladderstepZ'
- var (SmartVarf a24) (SmartVarf x0)
- (SmartVarf P10, SmartVarf P11)
- (SmartVarf P20, SmartVarf P21)))).
-
-Local Notation eta x := (fst x, snd x).
-
-Definition ladderstep_other_assoc {F Fadd Fsub Fmul} a24 (X1:F) (P1 P2:F*F) : F*F*F*F :=
- Eval cbv beta delta [MxDH.ladderstep_gen] in
- @MxDH.ladderstep_gen
- F Fadd Fsub Fmul a24
- (F*F*F*F)
- (fun X3 Y3 Z3 T3 => (X3, Y3, Z3, T3))
- (fun x f => dlet y := x in f y)
- X1 P1 P2.
-
-Definition uncurried_ladderstep
- := fun (a24_x0_P1_P2 : _ * _ * ((_ * _) * (_ * _)))
- => let a24 := fst (fst a24_x0_P1_P2) in
- let x0 := snd (fst a24_x0_P1_P2) in
- let '(P1, P2) := eta (snd a24_x0_P1_P2) in
- let '((P10, P11), (P20, P21)) := (eta P1, eta P2) in
- @ladderstep_other_assoc
- _ add sub mul
- a24 x0 (P10, P11) (P20, P21).
-
-Local Notation rexpr_sigPf T uncurried_op rexprZ x :=
- (Interp interp_op (t:=T) rexprZ x = uncurried_op x)
- (only parsing).
-Local Notation rexpr_sigP T uncurried_op rexprZ :=
- (forall x, rexpr_sigPf T uncurried_op rexprZ x)
- (only parsing).
-Local Notation rexpr_sig T uncurried_op :=
- { rexprZ | rexpr_sigP T uncurried_op rexprZ }
- (only parsing).
-
-Local Ltac fold_interpf' :=
- let k := (eval unfold interpf, interpf_step in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- change k with k'; clearbody k'; subst k'.
-
-Local Ltac fold_interpf :=
- let k := (eval unfold interpf in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- change k with k'; clearbody k'; subst k';
- fold_interpf'.
-
-Local Ltac repeat_step_interpf :=
- let k := (eval unfold interpf in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- repeat (unfold interpf_step at 1; change k with k' at 1);
- clearbody k'; subst k'.
-
-Lemma rladderstepZ_sigP' : rexpr_sigP _ uncurried_ladderstep rladderstepZ''.
-Proof.
- cbv [rladderstepZ''].
- intro x; rewrite InterpLinearize, InterpExprEta.
- cbv [domain interp_flat_type interp_base_type] in x.
- destruct_head' prod.
- cbv [invert_Abs domain codomain Interp interp SmartVarf smart_interp_flat_map fst snd].
- cbv [rladderstepZ' MxDH.ladderstep_gen uncurried_ladderstep SmartVarf smart_interp_flat_map]; simpl @fst; simpl @snd.
- repeat match goal with
- | [ |- appcontext[@proj1_sig ?A ?B ?v] ]
- => let k := fresh "f" in
- let k' := fresh "f" in
- let H := fresh in
- set (k := v);
- set (k' := @proj1_sig A B k);
- pose proof (proj2_sig k) as H;
- change (proj1_sig k) with k' in H;
- clearbody k'; clear k;
- cbv beta in *
- end.
- cbv [Interp Curry.curry2] in *.
- unfold interpf, interpf_step; fold_interpf.
- cbv [ladderstep_other_assoc interp_flat_type GF2213_32.fe2213_32].
- Time
- abstract (
- repeat match goal with
- | [ |- (dlet x := ?y in @?z x) = (dlet x' := ?y' in @?z' x') ]
- => refine ((fun pf0 pf1 => @Proper_Let_In_nd_changebody _ _ Logic.eq _ y y' pf0 z z' pf1)
- (_ : y = y')
- (_ : forall x, z x = z' x));
- cbv beta; intros;
- [ cbv [Let_In Common.ExprBinOpT] | ]
- end;
- repeat match goal with
- | _ => rewrite !interpf_invert_Abs
- | _ => rewrite_hyp !*
- | _ => progress cbv [interp_base_type]
- | [ |- ?x = ?x ] => reflexivity
- | _ => rewrite <- !surjective_pairing
- end
- ).
-Time Defined.
-Lemma rladderstepZ_sigP : rexpr_sigP _ uncurried_ladderstep rladderstepZ''.
-Proof.
- exact rladderstepZ_sigP'.
-Qed.
-Definition rladderstepZ_sig
- := exist (fun v => rexpr_sigP _ _ v) rladderstepZ'' rladderstepZ_sigP.
-
-Definition rladderstep_input_bounds
- := (ExprUnOp_bounds, ExprUnOp_bounds,
- ((ExprUnOp_bounds, ExprUnOp_bounds),
- (ExprUnOp_bounds, ExprUnOp_bounds))).
-
-Time Definition rladderstepW := Eval vm_compute in rword_of_Z rladderstepZ_sig.
-Lemma rladderstepW_correct_and_bounded_gen : correct_and_bounded_genT rladderstepW rladderstepZ_sig.
-Proof. Time rexpr_correct. Time Qed.
-Definition rladderstep_output_bounds := Eval vm_compute in compute_bounds rladderstepW rladderstep_input_bounds.
-
-Local Obligation Tactic := intros; vm_compute; constructor.
-
-(*
-Program Definition rladderstepW_correct_and_bounded
- := Expr9_4Op_correct_and_bounded
- rladderstepW uncurried_ladderstep rladderstepZ_sig rladderstepW_correct_and_bounded_gen
- _ _.
- *)
-
-Local Open Scope string_scope.
-Compute ("Ladderstep", compute_bounds_for_display rladderstepW rladderstep_input_bounds).
-Compute ("Ladderstep overflows? ", sanity_compute rladderstepW rladderstep_input_bounds).
-Compute ("Ladderstep overflows (error if it does)? ", sanity_check rladderstepW rladderstep_input_bounds).
diff --git a/src/SpecificGen/GF2213_32Reflective/Reified/LadderStepDisplay.log b/src/SpecificGen/GF2213_32Reflective/Reified/LadderStepDisplay.log
deleted file mode 100644
index eb4a5443a..000000000
--- a/src/SpecificGen/GF2213_32Reflective/Reified/LadderStepDisplay.log
+++ /dev/null
@@ -1,2634 +0,0 @@
-rladderstepW =
-fun var : base_type -> Type =>
-λ
-_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ x23 x24 x25 x26 x27 x28 x29
- x30 x31 x32 x33 x34 x35 x36 x37 x38 x39 x40 x41 x42 x43 x44 x45 x46 x47 x48
- x49 x50 x51 x52 x53 x54 x55 x56 x57 x58 x59 x60 x61 x62 x63 x64 x65 x66 x67
- x68 x69 x70 : var TZ,
-Tbase TZ x71 = x39 + x47;
-Tbase TZ x72 = x40 + x48;
-Tbase TZ x73 = x41 + x49;
-Tbase TZ x74 = x42 + x50;
-Tbase TZ x75 = x43 + x51;
-Tbase TZ x76 = x44 + x52;
-Tbase TZ x77 = x45 + x53;
-Tbase TZ x78 = x46 + x54;
-Tbase TZ x79 = x78 * x78;
-Tbase TZ x80 = 0x2;
-Tbase TZ x81 = x77 * x80;
-Tbase TZ x82 = x71 * x81;
-Tbase TZ x83 = 0x2;
-Tbase TZ x84 = x76 * x83;
-Tbase TZ x85 = x72 * x84;
-Tbase TZ x86 = 0x2;
-Tbase TZ x87 = x75 * x86;
-Tbase TZ x88 = x73 * x87;
-Tbase TZ x89 = 0x2;
-Tbase TZ x90 = x74 * x89;
-Tbase TZ x91 = x74 * x90;
-Tbase TZ x92 = 0x2;
-Tbase TZ x93 = x73 * x92;
-Tbase TZ x94 = x75 * x93;
-Tbase TZ x95 = 0x2;
-Tbase TZ x96 = x72 * x95;
-Tbase TZ x97 = x76 * x96;
-Tbase TZ x98 = 0x2;
-Tbase TZ x99 = x71 * x98;
-Tbase TZ x100 = x77 * x99;
-Tbase TZ x101 = x97 + x100;
-Tbase TZ x102 = x94 + x101;
-Tbase TZ x103 = x91 + x102;
-Tbase TZ x104 = x88 + x103;
-Tbase TZ x105 = x85 + x104;
-Tbase TZ x106 = x82 + x105;
-Tbase TZ x107 = 0x3;
-Tbase TZ x108 = x107 * x106;
-Tbase TZ x109 = x79 + x108;
-Tbase TZ x110 = 0x1c;
-Tbase TZ x111 = x109 >> x110;
-Tbase TZ x112 = x77 * x78;
-Tbase TZ x113 = x78 * x77;
-Tbase TZ x114 = x112 + x113;
-Tbase TZ x115 = 0x2;
-Tbase TZ x116 = x76 * x115;
-Tbase TZ x117 = x71 * x116;
-Tbase TZ x118 = x72 * x75;
-Tbase TZ x119 = 0x2;
-Tbase TZ x120 = x74 * x119;
-Tbase TZ x121 = x73 * x120;
-Tbase TZ x122 = 0x2;
-Tbase TZ x123 = x73 * x122;
-Tbase TZ x124 = x74 * x123;
-Tbase TZ x125 = x75 * x72;
-Tbase TZ x126 = 0x2;
-Tbase TZ x127 = x71 * x126;
-Tbase TZ x128 = x76 * x127;
-Tbase TZ x129 = x125 + x128;
-Tbase TZ x130 = x124 + x129;
-Tbase TZ x131 = x121 + x130;
-Tbase TZ x132 = x118 + x131;
-Tbase TZ x133 = x117 + x132;
-Tbase TZ x134 = 0x3;
-Tbase TZ x135 = x134 * x133;
-Tbase TZ x136 = x114 + x135;
-Tbase TZ x137 = x111 + x136;
-Tbase TZ x138 = 0x1c;
-Tbase TZ x139 = x137 >> x138;
-Tbase TZ x140 = x76 * x78;
-Tbase TZ x141 = x77 * x77;
-Tbase TZ x142 = x78 * x76;
-Tbase TZ x143 = x141 + x142;
-Tbase TZ x144 = x140 + x143;
-Tbase TZ x145 = x71 * x75;
-Tbase TZ x146 = x72 * x74;
-Tbase TZ x147 = 0x2;
-Tbase TZ x148 = x73 * x147;
-Tbase TZ x149 = x73 * x148;
-Tbase TZ x150 = x74 * x72;
-Tbase TZ x151 = x75 * x71;
-Tbase TZ x152 = x150 + x151;
-Tbase TZ x153 = x149 + x152;
-Tbase TZ x154 = x146 + x153;
-Tbase TZ x155 = x145 + x154;
-Tbase TZ x156 = 0x3;
-Tbase TZ x157 = x156 * x155;
-Tbase TZ x158 = x144 + x157;
-Tbase TZ x159 = x139 + x158;
-Tbase TZ x160 = 0x1b;
-Tbase TZ x161 = x159 >> x160;
-Tbase TZ x162 = x75 * x78;
-Tbase TZ x163 = 0x2;
-Tbase TZ x164 = x77 * x163;
-Tbase TZ x165 = x76 * x164;
-Tbase TZ x166 = 0x2;
-Tbase TZ x167 = x76 * x166;
-Tbase TZ x168 = x77 * x167;
-Tbase TZ x169 = x78 * x75;
-Tbase TZ x170 = x168 + x169;
-Tbase TZ x171 = x165 + x170;
-Tbase TZ x172 = x162 + x171;
-Tbase TZ x173 = 0x2;
-Tbase TZ x174 = x74 * x173;
-Tbase TZ x175 = x71 * x174;
-Tbase TZ x176 = 0x2;
-Tbase TZ x177 = x73 * x176;
-Tbase TZ x178 = x72 * x177;
-Tbase TZ x179 = 0x2;
-Tbase TZ x180 = x72 * x179;
-Tbase TZ x181 = x73 * x180;
-Tbase TZ x182 = 0x2;
-Tbase TZ x183 = x71 * x182;
-Tbase TZ x184 = x74 * x183;
-Tbase TZ x185 = x181 + x184;
-Tbase TZ x186 = x178 + x185;
-Tbase TZ x187 = x175 + x186;
-Tbase TZ x188 = 0x3;
-Tbase TZ x189 = x188 * x187;
-Tbase TZ x190 = x172 + x189;
-Tbase TZ x191 = x161 + x190;
-Tbase TZ x192 = 0x1c;
-Tbase TZ x193 = x191 >> x192;
-Tbase TZ x194 = x74 * x78;
-Tbase TZ x195 = x75 * x77;
-Tbase TZ x196 = 0x2;
-Tbase TZ x197 = x76 * x196;
-Tbase TZ x198 = x76 * x197;
-Tbase TZ x199 = x77 * x75;
-Tbase TZ x200 = x78 * x74;
-Tbase TZ x201 = x199 + x200;
-Tbase TZ x202 = x198 + x201;
-Tbase TZ x203 = x195 + x202;
-Tbase TZ x204 = x194 + x203;
-Tbase TZ x205 = 0x2;
-Tbase TZ x206 = x73 * x205;
-Tbase TZ x207 = x71 * x206;
-Tbase TZ x208 = x72 * x72;
-Tbase TZ x209 = 0x2;
-Tbase TZ x210 = x71 * x209;
-Tbase TZ x211 = x73 * x210;
-Tbase TZ x212 = x208 + x211;
-Tbase TZ x213 = x207 + x212;
-Tbase TZ x214 = 0x3;
-Tbase TZ x215 = x214 * x213;
-Tbase TZ x216 = x204 + x215;
-Tbase TZ x217 = x193 + x216;
-Tbase TZ x218 = 0x1c;
-Tbase TZ x219 = x217 >> x218;
-Tbase TZ x220 = x73 * x78;
-Tbase TZ x221 = x74 * x77;
-Tbase TZ x222 = x75 * x76;
-Tbase TZ x223 = x76 * x75;
-Tbase TZ x224 = x77 * x74;
-Tbase TZ x225 = x78 * x73;
-Tbase TZ x226 = x224 + x225;
-Tbase TZ x227 = x223 + x226;
-Tbase TZ x228 = x222 + x227;
-Tbase TZ x229 = x221 + x228;
-Tbase TZ x230 = x220 + x229;
-Tbase TZ x231 = x71 * x72;
-Tbase TZ x232 = x72 * x71;
-Tbase TZ x233 = x231 + x232;
-Tbase TZ x234 = 0x3;
-Tbase TZ x235 = x234 * x233;
-Tbase TZ x236 = x230 + x235;
-Tbase TZ x237 = x219 + x236;
-Tbase TZ x238 = 0x1b;
-Tbase TZ x239 = x237 >> x238;
-Tbase TZ x240 = x72 * x78;
-Tbase TZ x241 = 0x2;
-Tbase TZ x242 = x77 * x241;
-Tbase TZ x243 = x73 * x242;
-Tbase TZ x244 = 0x2;
-Tbase TZ x245 = x76 * x244;
-Tbase TZ x246 = x74 * x245;
-Tbase TZ x247 = x75 * x75;
-Tbase TZ x248 = 0x2;
-Tbase TZ x249 = x74 * x248;
-Tbase TZ x250 = x76 * x249;
-Tbase TZ x251 = 0x2;
-Tbase TZ x252 = x73 * x251;
-Tbase TZ x253 = x77 * x252;
-Tbase TZ x254 = x78 * x72;
-Tbase TZ x255 = x253 + x254;
-Tbase TZ x256 = x250 + x255;
-Tbase TZ x257 = x247 + x256;
-Tbase TZ x258 = x246 + x257;
-Tbase TZ x259 = x243 + x258;
-Tbase TZ x260 = x240 + x259;
-Tbase TZ x261 = 0x2;
-Tbase TZ x262 = x71 * x261;
-Tbase TZ x263 = x71 * x262;
-Tbase TZ x264 = 0x3;
-Tbase TZ x265 = x264 * x263;
-Tbase TZ x266 = x260 + x265;
-Tbase TZ x267 = x239 + x266;
-Tbase TZ x268 = 0x1c;
-Tbase TZ x269 = x267 >> x268;
-Tbase TZ x270 = x71 * x78;
-Tbase TZ x271 = x72 * x77;
-Tbase TZ x272 = 0x2;
-Tbase TZ x273 = x76 * x272;
-Tbase TZ x274 = x73 * x273;
-Tbase TZ x275 = x74 * x75;
-Tbase TZ x276 = x75 * x74;
-Tbase TZ x277 = 0x2;
-Tbase TZ x278 = x73 * x277;
-Tbase TZ x279 = x76 * x278;
-Tbase TZ x280 = x77 * x72;
-Tbase TZ x281 = x78 * x71;
-Tbase TZ x282 = x280 + x281;
-Tbase TZ x283 = x279 + x282;
-Tbase TZ x284 = x276 + x283;
-Tbase TZ x285 = x275 + x284;
-Tbase TZ x286 = x274 + x285;
-Tbase TZ x287 = x271 + x286;
-Tbase TZ x288 = x270 + x287;
-Tbase TZ x289 = x269 + x288;
-Tbase TZ x290 = 0x1b;
-Tbase TZ x291 = x289 >> x290;
-Tbase TZ x292 = 0x3;
-Tbase TZ x293 = x292 * x291;
-Tbase TZ x294 = 0xfffffff;
-Tbase TZ x295 = x109 & x294;
-Tbase TZ x296 = x293 + x295;
-Tbase TZ x297 = 0x1c;
-Tbase TZ x298 = x296 >> x297;
-Tbase TZ x299 = 0xfffffff;
-Tbase TZ x300 = x137 & x299;
-Tbase TZ x301 = x298 + x300;
-Tbase TZ x302 = 0x7ffffff;
-Tbase TZ x303 = x289 & x302;
-Tbase TZ x304 = 0xfffffff;
-Tbase TZ x305 = x267 & x304;
-Tbase TZ x306 = 0x7ffffff;
-Tbase TZ x307 = x237 & x306;
-Tbase TZ x308 = 0xfffffff;
-Tbase TZ x309 = x217 & x308;
-Tbase TZ x310 = 0xfffffff;
-Tbase TZ x311 = x191 & x310;
-Tbase TZ x312 = 0x1c;
-Tbase TZ x313 = x301 >> x312;
-Tbase TZ x314 = 0x7ffffff;
-Tbase TZ x315 = x159 & x314;
-Tbase TZ x316 = x313 + x315;
-Tbase TZ x317 = 0xfffffff;
-Tbase TZ x318 = x301 & x317;
-Tbase TZ x319 = 0xfffffff;
-Tbase TZ x320 = x296 & x319;
-Tbase TZ x321 = 0xffffffe;
-Tbase TZ x322 = x321 + x39;
-Tbase TZ x323 = x322 - x47;
-Tbase TZ x324 = 0x1ffffffe;
-Tbase TZ x325 = x324 + x40;
-Tbase TZ x326 = x325 - x48;
-Tbase TZ x327 = 0xffffffe;
-Tbase TZ x328 = x327 + x41;
-Tbase TZ x329 = x328 - x49;
-Tbase TZ x330 = 0x1ffffffe;
-Tbase TZ x331 = x330 + x42;
-Tbase TZ x332 = x331 - x50;
-Tbase TZ x333 = 0x1ffffffe;
-Tbase TZ x334 = x333 + x43;
-Tbase TZ x335 = x334 - x51;
-Tbase TZ x336 = 0xffffffe;
-Tbase TZ x337 = x336 + x44;
-Tbase TZ x338 = x337 - x52;
-Tbase TZ x339 = 0x1ffffffe;
-Tbase TZ x340 = x339 + x45;
-Tbase TZ x341 = x340 - x53;
-Tbase TZ x342 = 0x1ffffffa;
-Tbase TZ x343 = x342 + x46;
-Tbase TZ x344 = x343 - x54;
-Tbase TZ x345 = x344 * x344;
-Tbase TZ x346 = 0x2;
-Tbase TZ x347 = x341 * x346;
-Tbase TZ x348 = x323 * x347;
-Tbase TZ x349 = 0x2;
-Tbase TZ x350 = x338 * x349;
-Tbase TZ x351 = x326 * x350;
-Tbase TZ x352 = 0x2;
-Tbase TZ x353 = x335 * x352;
-Tbase TZ x354 = x329 * x353;
-Tbase TZ x355 = 0x2;
-Tbase TZ x356 = x332 * x355;
-Tbase TZ x357 = x332 * x356;
-Tbase TZ x358 = 0x2;
-Tbase TZ x359 = x329 * x358;
-Tbase TZ x360 = x335 * x359;
-Tbase TZ x361 = 0x2;
-Tbase TZ x362 = x326 * x361;
-Tbase TZ x363 = x338 * x362;
-Tbase TZ x364 = 0x2;
-Tbase TZ x365 = x323 * x364;
-Tbase TZ x366 = x341 * x365;
-Tbase TZ x367 = x363 + x366;
-Tbase TZ x368 = x360 + x367;
-Tbase TZ x369 = x357 + x368;
-Tbase TZ x370 = x354 + x369;
-Tbase TZ x371 = x351 + x370;
-Tbase TZ x372 = x348 + x371;
-Tbase TZ x373 = 0x3;
-Tbase TZ x374 = x373 * x372;
-Tbase TZ x375 = x345 + x374;
-Tbase TZ x376 = 0x1c;
-Tbase TZ x377 = x375 >> x376;
-Tbase TZ x378 = x341 * x344;
-Tbase TZ x379 = x344 * x341;
-Tbase TZ x380 = x378 + x379;
-Tbase TZ x381 = 0x2;
-Tbase TZ x382 = x338 * x381;
-Tbase TZ x383 = x323 * x382;
-Tbase TZ x384 = x326 * x335;
-Tbase TZ x385 = 0x2;
-Tbase TZ x386 = x332 * x385;
-Tbase TZ x387 = x329 * x386;
-Tbase TZ x388 = 0x2;
-Tbase TZ x389 = x329 * x388;
-Tbase TZ x390 = x332 * x389;
-Tbase TZ x391 = x335 * x326;
-Tbase TZ x392 = 0x2;
-Tbase TZ x393 = x323 * x392;
-Tbase TZ x394 = x338 * x393;
-Tbase TZ x395 = x391 + x394;
-Tbase TZ x396 = x390 + x395;
-Tbase TZ x397 = x387 + x396;
-Tbase TZ x398 = x384 + x397;
-Tbase TZ x399 = x383 + x398;
-Tbase TZ x400 = 0x3;
-Tbase TZ x401 = x400 * x399;
-Tbase TZ x402 = x380 + x401;
-Tbase TZ x403 = x377 + x402;
-Tbase TZ x404 = 0x1c;
-Tbase TZ x405 = x403 >> x404;
-Tbase TZ x406 = x338 * x344;
-Tbase TZ x407 = x341 * x341;
-Tbase TZ x408 = x344 * x338;
-Tbase TZ x409 = x407 + x408;
-Tbase TZ x410 = x406 + x409;
-Tbase TZ x411 = x323 * x335;
-Tbase TZ x412 = x326 * x332;
-Tbase TZ x413 = 0x2;
-Tbase TZ x414 = x329 * x413;
-Tbase TZ x415 = x329 * x414;
-Tbase TZ x416 = x332 * x326;
-Tbase TZ x417 = x335 * x323;
-Tbase TZ x418 = x416 + x417;
-Tbase TZ x419 = x415 + x418;
-Tbase TZ x420 = x412 + x419;
-Tbase TZ x421 = x411 + x420;
-Tbase TZ x422 = 0x3;
-Tbase TZ x423 = x422 * x421;
-Tbase TZ x424 = x410 + x423;
-Tbase TZ x425 = x405 + x424;
-Tbase TZ x426 = 0x1b;
-Tbase TZ x427 = x425 >> x426;
-Tbase TZ x428 = x335 * x344;
-Tbase TZ x429 = 0x2;
-Tbase TZ x430 = x341 * x429;
-Tbase TZ x431 = x338 * x430;
-Tbase TZ x432 = 0x2;
-Tbase TZ x433 = x338 * x432;
-Tbase TZ x434 = x341 * x433;
-Tbase TZ x435 = x344 * x335;
-Tbase TZ x436 = x434 + x435;
-Tbase TZ x437 = x431 + x436;
-Tbase TZ x438 = x428 + x437;
-Tbase TZ x439 = 0x2;
-Tbase TZ x440 = x332 * x439;
-Tbase TZ x441 = x323 * x440;
-Tbase TZ x442 = 0x2;
-Tbase TZ x443 = x329 * x442;
-Tbase TZ x444 = x326 * x443;
-Tbase TZ x445 = 0x2;
-Tbase TZ x446 = x326 * x445;
-Tbase TZ x447 = x329 * x446;
-Tbase TZ x448 = 0x2;
-Tbase TZ x449 = x323 * x448;
-Tbase TZ x450 = x332 * x449;
-Tbase TZ x451 = x447 + x450;
-Tbase TZ x452 = x444 + x451;
-Tbase TZ x453 = x441 + x452;
-Tbase TZ x454 = 0x3;
-Tbase TZ x455 = x454 * x453;
-Tbase TZ x456 = x438 + x455;
-Tbase TZ x457 = x427 + x456;
-Tbase TZ x458 = 0x1c;
-Tbase TZ x459 = x457 >> x458;
-Tbase TZ x460 = x332 * x344;
-Tbase TZ x461 = x335 * x341;
-Tbase TZ x462 = 0x2;
-Tbase TZ x463 = x338 * x462;
-Tbase TZ x464 = x338 * x463;
-Tbase TZ x465 = x341 * x335;
-Tbase TZ x466 = x344 * x332;
-Tbase TZ x467 = x465 + x466;
-Tbase TZ x468 = x464 + x467;
-Tbase TZ x469 = x461 + x468;
-Tbase TZ x470 = x460 + x469;
-Tbase TZ x471 = 0x2;
-Tbase TZ x472 = x329 * x471;
-Tbase TZ x473 = x323 * x472;
-Tbase TZ x474 = x326 * x326;
-Tbase TZ x475 = 0x2;
-Tbase TZ x476 = x323 * x475;
-Tbase TZ x477 = x329 * x476;
-Tbase TZ x478 = x474 + x477;
-Tbase TZ x479 = x473 + x478;
-Tbase TZ x480 = 0x3;
-Tbase TZ x481 = x480 * x479;
-Tbase TZ x482 = x470 + x481;
-Tbase TZ x483 = x459 + x482;
-Tbase TZ x484 = 0x1c;
-Tbase TZ x485 = x483 >> x484;
-Tbase TZ x486 = x329 * x344;
-Tbase TZ x487 = x332 * x341;
-Tbase TZ x488 = x335 * x338;
-Tbase TZ x489 = x338 * x335;
-Tbase TZ x490 = x341 * x332;
-Tbase TZ x491 = x344 * x329;
-Tbase TZ x492 = x490 + x491;
-Tbase TZ x493 = x489 + x492;
-Tbase TZ x494 = x488 + x493;
-Tbase TZ x495 = x487 + x494;
-Tbase TZ x496 = x486 + x495;
-Tbase TZ x497 = x323 * x326;
-Tbase TZ x498 = x326 * x323;
-Tbase TZ x499 = x497 + x498;
-Tbase TZ x500 = 0x3;
-Tbase TZ x501 = x500 * x499;
-Tbase TZ x502 = x496 + x501;
-Tbase TZ x503 = x485 + x502;
-Tbase TZ x504 = 0x1b;
-Tbase TZ x505 = x503 >> x504;
-Tbase TZ x506 = x326 * x344;
-Tbase TZ x507 = 0x2;
-Tbase TZ x508 = x341 * x507;
-Tbase TZ x509 = x329 * x508;
-Tbase TZ x510 = 0x2;
-Tbase TZ x511 = x338 * x510;
-Tbase TZ x512 = x332 * x511;
-Tbase TZ x513 = x335 * x335;
-Tbase TZ x514 = 0x2;
-Tbase TZ x515 = x332 * x514;
-Tbase TZ x516 = x338 * x515;
-Tbase TZ x517 = 0x2;
-Tbase TZ x518 = x329 * x517;
-Tbase TZ x519 = x341 * x518;
-Tbase TZ x520 = x344 * x326;
-Tbase TZ x521 = x519 + x520;
-Tbase TZ x522 = x516 + x521;
-Tbase TZ x523 = x513 + x522;
-Tbase TZ x524 = x512 + x523;
-Tbase TZ x525 = x509 + x524;
-Tbase TZ x526 = x506 + x525;
-Tbase TZ x527 = 0x2;
-Tbase TZ x528 = x323 * x527;
-Tbase TZ x529 = x323 * x528;
-Tbase TZ x530 = 0x3;
-Tbase TZ x531 = x530 * x529;
-Tbase TZ x532 = x526 + x531;
-Tbase TZ x533 = x505 + x532;
-Tbase TZ x534 = 0x1c;
-Tbase TZ x535 = x533 >> x534;
-Tbase TZ x536 = x323 * x344;
-Tbase TZ x537 = x326 * x341;
-Tbase TZ x538 = 0x2;
-Tbase TZ x539 = x338 * x538;
-Tbase TZ x540 = x329 * x539;
-Tbase TZ x541 = x332 * x335;
-Tbase TZ x542 = x335 * x332;
-Tbase TZ x543 = 0x2;
-Tbase TZ x544 = x329 * x543;
-Tbase TZ x545 = x338 * x544;
-Tbase TZ x546 = x341 * x326;
-Tbase TZ x547 = x344 * x323;
-Tbase TZ x548 = x546 + x547;
-Tbase TZ x549 = x545 + x548;
-Tbase TZ x550 = x542 + x549;
-Tbase TZ x551 = x541 + x550;
-Tbase TZ x552 = x540 + x551;
-Tbase TZ x553 = x537 + x552;
-Tbase TZ x554 = x536 + x553;
-Tbase TZ x555 = x535 + x554;
-Tbase TZ x556 = 0x1b;
-Tbase TZ x557 = x555 >> x556;
-Tbase TZ x558 = 0x3;
-Tbase TZ x559 = x558 * x557;
-Tbase TZ x560 = 0xfffffff;
-Tbase TZ x561 = x375 & x560;
-Tbase TZ x562 = x559 + x561;
-Tbase TZ x563 = 0x1c;
-Tbase TZ x564 = x562 >> x563;
-Tbase TZ x565 = 0xfffffff;
-Tbase TZ x566 = x403 & x565;
-Tbase TZ x567 = x564 + x566;
-Tbase TZ x568 = 0x7ffffff;
-Tbase TZ x569 = x555 & x568;
-Tbase TZ x570 = 0xfffffff;
-Tbase TZ x571 = x533 & x570;
-Tbase TZ x572 = 0x7ffffff;
-Tbase TZ x573 = x503 & x572;
-Tbase TZ x574 = 0xfffffff;
-Tbase TZ x575 = x483 & x574;
-Tbase TZ x576 = 0xfffffff;
-Tbase TZ x577 = x457 & x576;
-Tbase TZ x578 = 0x1c;
-Tbase TZ x579 = x567 >> x578;
-Tbase TZ x580 = 0x7ffffff;
-Tbase TZ x581 = x425 & x580;
-Tbase TZ x582 = x579 + x581;
-Tbase TZ x583 = 0xfffffff;
-Tbase TZ x584 = x567 & x583;
-Tbase TZ x585 = 0xfffffff;
-Tbase TZ x586 = x562 & x585;
-Tbase TZ x587 = 0xffffffe;
-Tbase TZ x588 = x587 + x303;
-Tbase TZ x589 = x588 - x569;
-Tbase TZ x590 = 0x1ffffffe;
-Tbase TZ x591 = x590 + x305;
-Tbase TZ x592 = x591 - x571;
-Tbase TZ x593 = 0xffffffe;
-Tbase TZ x594 = x593 + x307;
-Tbase TZ x595 = x594 - x573;
-Tbase TZ x596 = 0x1ffffffe;
-Tbase TZ x597 = x596 + x309;
-Tbase TZ x598 = x597 - x575;
-Tbase TZ x599 = 0x1ffffffe;
-Tbase TZ x600 = x599 + x311;
-Tbase TZ x601 = x600 - x577;
-Tbase TZ x602 = 0xffffffe;
-Tbase TZ x603 = x602 + x316;
-Tbase TZ x604 = x603 - x582;
-Tbase TZ x605 = 0x1ffffffe;
-Tbase TZ x606 = x605 + x318;
-Tbase TZ x607 = x606 - x584;
-Tbase TZ x608 = 0x1ffffffa;
-Tbase TZ x609 = x608 + x320;
-Tbase TZ x610 = x609 - x586;
-Tbase TZ x611 = x55 + x63;
-Tbase TZ x612 = x56 + x64;
-Tbase TZ x613 = x57 + x65;
-Tbase TZ x614 = x58 + x66;
-Tbase TZ x615 = x59 + x67;
-Tbase TZ x616 = x60 + x68;
-Tbase TZ x617 = x61 + x69;
-Tbase TZ x618 = x62 + x70;
-Tbase TZ x619 = 0xffffffe;
-Tbase TZ x620 = x619 + x55;
-Tbase TZ x621 = x620 - x63;
-Tbase TZ x622 = 0x1ffffffe;
-Tbase TZ x623 = x622 + x56;
-Tbase TZ x624 = x623 - x64;
-Tbase TZ x625 = 0xffffffe;
-Tbase TZ x626 = x625 + x57;
-Tbase TZ x627 = x626 - x65;
-Tbase TZ x628 = 0x1ffffffe;
-Tbase TZ x629 = x628 + x58;
-Tbase TZ x630 = x629 - x66;
-Tbase TZ x631 = 0x1ffffffe;
-Tbase TZ x632 = x631 + x59;
-Tbase TZ x633 = x632 - x67;
-Tbase TZ x634 = 0xffffffe;
-Tbase TZ x635 = x634 + x60;
-Tbase TZ x636 = x635 - x68;
-Tbase TZ x637 = 0x1ffffffe;
-Tbase TZ x638 = x637 + x61;
-Tbase TZ x639 = x638 - x69;
-Tbase TZ x640 = 0x1ffffffa;
-Tbase TZ x641 = x640 + x62;
-Tbase TZ x642 = x641 - x70;
-Tbase TZ x643 = x642 * x78;
-Tbase TZ x644 = 0x2;
-Tbase TZ x645 = x77 * x644;
-Tbase TZ x646 = x621 * x645;
-Tbase TZ x647 = 0x2;
-Tbase TZ x648 = x76 * x647;
-Tbase TZ x649 = x624 * x648;
-Tbase TZ x650 = 0x2;
-Tbase TZ x651 = x75 * x650;
-Tbase TZ x652 = x627 * x651;
-Tbase TZ x653 = 0x2;
-Tbase TZ x654 = x74 * x653;
-Tbase TZ x655 = x630 * x654;
-Tbase TZ x656 = 0x2;
-Tbase TZ x657 = x73 * x656;
-Tbase TZ x658 = x633 * x657;
-Tbase TZ x659 = 0x2;
-Tbase TZ x660 = x72 * x659;
-Tbase TZ x661 = x636 * x660;
-Tbase TZ x662 = 0x2;
-Tbase TZ x663 = x71 * x662;
-Tbase TZ x664 = x639 * x663;
-Tbase TZ x665 = x661 + x664;
-Tbase TZ x666 = x658 + x665;
-Tbase TZ x667 = x655 + x666;
-Tbase TZ x668 = x652 + x667;
-Tbase TZ x669 = x649 + x668;
-Tbase TZ x670 = x646 + x669;
-Tbase TZ x671 = 0x3;
-Tbase TZ x672 = x671 * x670;
-Tbase TZ x673 = x643 + x672;
-Tbase TZ x674 = 0x1c;
-Tbase TZ x675 = x673 >> x674;
-Tbase TZ x676 = x639 * x78;
-Tbase TZ x677 = x642 * x77;
-Tbase TZ x678 = x676 + x677;
-Tbase TZ x679 = 0x2;
-Tbase TZ x680 = x76 * x679;
-Tbase TZ x681 = x621 * x680;
-Tbase TZ x682 = x624 * x75;
-Tbase TZ x683 = 0x2;
-Tbase TZ x684 = x74 * x683;
-Tbase TZ x685 = x627 * x684;
-Tbase TZ x686 = 0x2;
-Tbase TZ x687 = x73 * x686;
-Tbase TZ x688 = x630 * x687;
-Tbase TZ x689 = x633 * x72;
-Tbase TZ x690 = 0x2;
-Tbase TZ x691 = x71 * x690;
-Tbase TZ x692 = x636 * x691;
-Tbase TZ x693 = x689 + x692;
-Tbase TZ x694 = x688 + x693;
-Tbase TZ x695 = x685 + x694;
-Tbase TZ x696 = x682 + x695;
-Tbase TZ x697 = x681 + x696;
-Tbase TZ x698 = 0x3;
-Tbase TZ x699 = x698 * x697;
-Tbase TZ x700 = x678 + x699;
-Tbase TZ x701 = x675 + x700;
-Tbase TZ x702 = 0x1c;
-Tbase TZ x703 = x701 >> x702;
-Tbase TZ x704 = x636 * x78;
-Tbase TZ x705 = x639 * x77;
-Tbase TZ x706 = x642 * x76;
-Tbase TZ x707 = x705 + x706;
-Tbase TZ x708 = x704 + x707;
-Tbase TZ x709 = x621 * x75;
-Tbase TZ x710 = x624 * x74;
-Tbase TZ x711 = 0x2;
-Tbase TZ x712 = x73 * x711;
-Tbase TZ x713 = x627 * x712;
-Tbase TZ x714 = x630 * x72;
-Tbase TZ x715 = x633 * x71;
-Tbase TZ x716 = x714 + x715;
-Tbase TZ x717 = x713 + x716;
-Tbase TZ x718 = x710 + x717;
-Tbase TZ x719 = x709 + x718;
-Tbase TZ x720 = 0x3;
-Tbase TZ x721 = x720 * x719;
-Tbase TZ x722 = x708 + x721;
-Tbase TZ x723 = x703 + x722;
-Tbase TZ x724 = 0x1b;
-Tbase TZ x725 = x723 >> x724;
-Tbase TZ x726 = x633 * x78;
-Tbase TZ x727 = 0x2;
-Tbase TZ x728 = x77 * x727;
-Tbase TZ x729 = x636 * x728;
-Tbase TZ x730 = 0x2;
-Tbase TZ x731 = x76 * x730;
-Tbase TZ x732 = x639 * x731;
-Tbase TZ x733 = x642 * x75;
-Tbase TZ x734 = x732 + x733;
-Tbase TZ x735 = x729 + x734;
-Tbase TZ x736 = x726 + x735;
-Tbase TZ x737 = 0x2;
-Tbase TZ x738 = x74 * x737;
-Tbase TZ x739 = x621 * x738;
-Tbase TZ x740 = 0x2;
-Tbase TZ x741 = x73 * x740;
-Tbase TZ x742 = x624 * x741;
-Tbase TZ x743 = 0x2;
-Tbase TZ x744 = x72 * x743;
-Tbase TZ x745 = x627 * x744;
-Tbase TZ x746 = 0x2;
-Tbase TZ x747 = x71 * x746;
-Tbase TZ x748 = x630 * x747;
-Tbase TZ x749 = x745 + x748;
-Tbase TZ x750 = x742 + x749;
-Tbase TZ x751 = x739 + x750;
-Tbase TZ x752 = 0x3;
-Tbase TZ x753 = x752 * x751;
-Tbase TZ x754 = x736 + x753;
-Tbase TZ x755 = x725 + x754;
-Tbase TZ x756 = 0x1c;
-Tbase TZ x757 = x755 >> x756;
-Tbase TZ x758 = x630 * x78;
-Tbase TZ x759 = x633 * x77;
-Tbase TZ x760 = 0x2;
-Tbase TZ x761 = x76 * x760;
-Tbase TZ x762 = x636 * x761;
-Tbase TZ x763 = x639 * x75;
-Tbase TZ x764 = x642 * x74;
-Tbase TZ x765 = x763 + x764;
-Tbase TZ x766 = x762 + x765;
-Tbase TZ x767 = x759 + x766;
-Tbase TZ x768 = x758 + x767;
-Tbase TZ x769 = 0x2;
-Tbase TZ x770 = x73 * x769;
-Tbase TZ x771 = x621 * x770;
-Tbase TZ x772 = x624 * x72;
-Tbase TZ x773 = 0x2;
-Tbase TZ x774 = x71 * x773;
-Tbase TZ x775 = x627 * x774;
-Tbase TZ x776 = x772 + x775;
-Tbase TZ x777 = x771 + x776;
-Tbase TZ x778 = 0x3;
-Tbase TZ x779 = x778 * x777;
-Tbase TZ x780 = x768 + x779;
-Tbase TZ x781 = x757 + x780;
-Tbase TZ x782 = 0x1c;
-Tbase TZ x783 = x781 >> x782;
-Tbase TZ x784 = x627 * x78;
-Tbase TZ x785 = x630 * x77;
-Tbase TZ x786 = x633 * x76;
-Tbase TZ x787 = x636 * x75;
-Tbase TZ x788 = x639 * x74;
-Tbase TZ x789 = x642 * x73;
-Tbase TZ x790 = x788 + x789;
-Tbase TZ x791 = x787 + x790;
-Tbase TZ x792 = x786 + x791;
-Tbase TZ x793 = x785 + x792;
-Tbase TZ x794 = x784 + x793;
-Tbase TZ x795 = x621 * x72;
-Tbase TZ x796 = x624 * x71;
-Tbase TZ x797 = x795 + x796;
-Tbase TZ x798 = 0x3;
-Tbase TZ x799 = x798 * x797;
-Tbase TZ x800 = x794 + x799;
-Tbase TZ x801 = x783 + x800;
-Tbase TZ x802 = 0x1b;
-Tbase TZ x803 = x801 >> x802;
-Tbase TZ x804 = x624 * x78;
-Tbase TZ x805 = 0x2;
-Tbase TZ x806 = x77 * x805;
-Tbase TZ x807 = x627 * x806;
-Tbase TZ x808 = 0x2;
-Tbase TZ x809 = x76 * x808;
-Tbase TZ x810 = x630 * x809;
-Tbase TZ x811 = x633 * x75;
-Tbase TZ x812 = 0x2;
-Tbase TZ x813 = x74 * x812;
-Tbase TZ x814 = x636 * x813;
-Tbase TZ x815 = 0x2;
-Tbase TZ x816 = x73 * x815;
-Tbase TZ x817 = x639 * x816;
-Tbase TZ x818 = x642 * x72;
-Tbase TZ x819 = x817 + x818;
-Tbase TZ x820 = x814 + x819;
-Tbase TZ x821 = x811 + x820;
-Tbase TZ x822 = x810 + x821;
-Tbase TZ x823 = x807 + x822;
-Tbase TZ x824 = x804 + x823;
-Tbase TZ x825 = 0x2;
-Tbase TZ x826 = x71 * x825;
-Tbase TZ x827 = x621 * x826;
-Tbase TZ x828 = 0x3;
-Tbase TZ x829 = x828 * x827;
-Tbase TZ x830 = x824 + x829;
-Tbase TZ x831 = x803 + x830;
-Tbase TZ x832 = 0x1c;
-Tbase TZ x833 = x831 >> x832;
-Tbase TZ x834 = x621 * x78;
-Tbase TZ x835 = x624 * x77;
-Tbase TZ x836 = 0x2;
-Tbase TZ x837 = x76 * x836;
-Tbase TZ x838 = x627 * x837;
-Tbase TZ x839 = x630 * x75;
-Tbase TZ x840 = x633 * x74;
-Tbase TZ x841 = 0x2;
-Tbase TZ x842 = x73 * x841;
-Tbase TZ x843 = x636 * x842;
-Tbase TZ x844 = x639 * x72;
-Tbase TZ x845 = x642 * x71;
-Tbase TZ x846 = x844 + x845;
-Tbase TZ x847 = x843 + x846;
-Tbase TZ x848 = x840 + x847;
-Tbase TZ x849 = x839 + x848;
-Tbase TZ x850 = x838 + x849;
-Tbase TZ x851 = x835 + x850;
-Tbase TZ x852 = x834 + x851;
-Tbase TZ x853 = x833 + x852;
-Tbase TZ x854 = 0x1b;
-Tbase TZ x855 = x853 >> x854;
-Tbase TZ x856 = 0x3;
-Tbase TZ x857 = x856 * x855;
-Tbase TZ x858 = 0xfffffff;
-Tbase TZ x859 = x673 & x858;
-Tbase TZ x860 = x857 + x859;
-Tbase TZ x861 = 0x1c;
-Tbase TZ x862 = x860 >> x861;
-Tbase TZ x863 = 0xfffffff;
-Tbase TZ x864 = x701 & x863;
-Tbase TZ x865 = x862 + x864;
-Tbase TZ x866 = 0x7ffffff;
-Tbase TZ x867 = x853 & x866;
-Tbase TZ x868 = 0xfffffff;
-Tbase TZ x869 = x831 & x868;
-Tbase TZ x870 = 0x7ffffff;
-Tbase TZ x871 = x801 & x870;
-Tbase TZ x872 = 0xfffffff;
-Tbase TZ x873 = x781 & x872;
-Tbase TZ x874 = 0xfffffff;
-Tbase TZ x875 = x755 & x874;
-Tbase TZ x876 = 0x1c;
-Tbase TZ x877 = x865 >> x876;
-Tbase TZ x878 = 0x7ffffff;
-Tbase TZ x879 = x723 & x878;
-Tbase TZ x880 = x877 + x879;
-Tbase TZ x881 = 0xfffffff;
-Tbase TZ x882 = x865 & x881;
-Tbase TZ x883 = 0xfffffff;
-Tbase TZ x884 = x860 & x883;
-Tbase TZ x885 = x618 * x344;
-Tbase TZ x886 = 0x2;
-Tbase TZ x887 = x341 * x886;
-Tbase TZ x888 = x611 * x887;
-Tbase TZ x889 = 0x2;
-Tbase TZ x890 = x338 * x889;
-Tbase TZ x891 = x612 * x890;
-Tbase TZ x892 = 0x2;
-Tbase TZ x893 = x335 * x892;
-Tbase TZ x894 = x613 * x893;
-Tbase TZ x895 = 0x2;
-Tbase TZ x896 = x332 * x895;
-Tbase TZ x897 = x614 * x896;
-Tbase TZ x898 = 0x2;
-Tbase TZ x899 = x329 * x898;
-Tbase TZ x900 = x615 * x899;
-Tbase TZ x901 = 0x2;
-Tbase TZ x902 = x326 * x901;
-Tbase TZ x903 = x616 * x902;
-Tbase TZ x904 = 0x2;
-Tbase TZ x905 = x323 * x904;
-Tbase TZ x906 = x617 * x905;
-Tbase TZ x907 = x903 + x906;
-Tbase TZ x908 = x900 + x907;
-Tbase TZ x909 = x897 + x908;
-Tbase TZ x910 = x894 + x909;
-Tbase TZ x911 = x891 + x910;
-Tbase TZ x912 = x888 + x911;
-Tbase TZ x913 = 0x3;
-Tbase TZ x914 = x913 * x912;
-Tbase TZ x915 = x885 + x914;
-Tbase TZ x916 = 0x1c;
-Tbase TZ x917 = x915 >> x916;
-Tbase TZ x918 = x617 * x344;
-Tbase TZ x919 = x618 * x341;
-Tbase TZ x920 = x918 + x919;
-Tbase TZ x921 = 0x2;
-Tbase TZ x922 = x338 * x921;
-Tbase TZ x923 = x611 * x922;
-Tbase TZ x924 = x612 * x335;
-Tbase TZ x925 = 0x2;
-Tbase TZ x926 = x332 * x925;
-Tbase TZ x927 = x613 * x926;
-Tbase TZ x928 = 0x2;
-Tbase TZ x929 = x329 * x928;
-Tbase TZ x930 = x614 * x929;
-Tbase TZ x931 = x615 * x326;
-Tbase TZ x932 = 0x2;
-Tbase TZ x933 = x323 * x932;
-Tbase TZ x934 = x616 * x933;
-Tbase TZ x935 = x931 + x934;
-Tbase TZ x936 = x930 + x935;
-Tbase TZ x937 = x927 + x936;
-Tbase TZ x938 = x924 + x937;
-Tbase TZ x939 = x923 + x938;
-Tbase TZ x940 = 0x3;
-Tbase TZ x941 = x940 * x939;
-Tbase TZ x942 = x920 + x941;
-Tbase TZ x943 = x917 + x942;
-Tbase TZ x944 = 0x1c;
-Tbase TZ x945 = x943 >> x944;
-Tbase TZ x946 = x616 * x344;
-Tbase TZ x947 = x617 * x341;
-Tbase TZ x948 = x618 * x338;
-Tbase TZ x949 = x947 + x948;
-Tbase TZ x950 = x946 + x949;
-Tbase TZ x951 = x611 * x335;
-Tbase TZ x952 = x612 * x332;
-Tbase TZ x953 = 0x2;
-Tbase TZ x954 = x329 * x953;
-Tbase TZ x955 = x613 * x954;
-Tbase TZ x956 = x614 * x326;
-Tbase TZ x957 = x615 * x323;
-Tbase TZ x958 = x956 + x957;
-Tbase TZ x959 = x955 + x958;
-Tbase TZ x960 = x952 + x959;
-Tbase TZ x961 = x951 + x960;
-Tbase TZ x962 = 0x3;
-Tbase TZ x963 = x962 * x961;
-Tbase TZ x964 = x950 + x963;
-Tbase TZ x965 = x945 + x964;
-Tbase TZ x966 = 0x1b;
-Tbase TZ x967 = x965 >> x966;
-Tbase TZ x968 = x615 * x344;
-Tbase TZ x969 = 0x2;
-Tbase TZ x970 = x341 * x969;
-Tbase TZ x971 = x616 * x970;
-Tbase TZ x972 = 0x2;
-Tbase TZ x973 = x338 * x972;
-Tbase TZ x974 = x617 * x973;
-Tbase TZ x975 = x618 * x335;
-Tbase TZ x976 = x974 + x975;
-Tbase TZ x977 = x971 + x976;
-Tbase TZ x978 = x968 + x977;
-Tbase TZ x979 = 0x2;
-Tbase TZ x980 = x332 * x979;
-Tbase TZ x981 = x611 * x980;
-Tbase TZ x982 = 0x2;
-Tbase TZ x983 = x329 * x982;
-Tbase TZ x984 = x612 * x983;
-Tbase TZ x985 = 0x2;
-Tbase TZ x986 = x326 * x985;
-Tbase TZ x987 = x613 * x986;
-Tbase TZ x988 = 0x2;
-Tbase TZ x989 = x323 * x988;
-Tbase TZ x990 = x614 * x989;
-Tbase TZ x991 = x987 + x990;
-Tbase TZ x992 = x984 + x991;
-Tbase TZ x993 = x981 + x992;
-Tbase TZ x994 = 0x3;
-Tbase TZ x995 = x994 * x993;
-Tbase TZ x996 = x978 + x995;
-Tbase TZ x997 = x967 + x996;
-Tbase TZ x998 = 0x1c;
-Tbase TZ x999 = x997 >> x998;
-Tbase TZ x1000 = x614 * x344;
-Tbase TZ x1001 = x615 * x341;
-Tbase TZ x1002 = 0x2;
-Tbase TZ x1003 = x338 * x1002;
-Tbase TZ x1004 = x616 * x1003;
-Tbase TZ x1005 = x617 * x335;
-Tbase TZ x1006 = x618 * x332;
-Tbase TZ x1007 = x1005 + x1006;
-Tbase TZ x1008 = x1004 + x1007;
-Tbase TZ x1009 = x1001 + x1008;
-Tbase TZ x1010 = x1000 + x1009;
-Tbase TZ x1011 = 0x2;
-Tbase TZ x1012 = x329 * x1011;
-Tbase TZ x1013 = x611 * x1012;
-Tbase TZ x1014 = x612 * x326;
-Tbase TZ x1015 = 0x2;
-Tbase TZ x1016 = x323 * x1015;
-Tbase TZ x1017 = x613 * x1016;
-Tbase TZ x1018 = x1014 + x1017;
-Tbase TZ x1019 = x1013 + x1018;
-Tbase TZ x1020 = 0x3;
-Tbase TZ x1021 = x1020 * x1019;
-Tbase TZ x1022 = x1010 + x1021;
-Tbase TZ x1023 = x999 + x1022;
-Tbase TZ x1024 = 0x1c;
-Tbase TZ x1025 = x1023 >> x1024;
-Tbase TZ x1026 = x613 * x344;
-Tbase TZ x1027 = x614 * x341;
-Tbase TZ x1028 = x615 * x338;
-Tbase TZ x1029 = x616 * x335;
-Tbase TZ x1030 = x617 * x332;
-Tbase TZ x1031 = x618 * x329;
-Tbase TZ x1032 = x1030 + x1031;
-Tbase TZ x1033 = x1029 + x1032;
-Tbase TZ x1034 = x1028 + x1033;
-Tbase TZ x1035 = x1027 + x1034;
-Tbase TZ x1036 = x1026 + x1035;
-Tbase TZ x1037 = x611 * x326;
-Tbase TZ x1038 = x612 * x323;
-Tbase TZ x1039 = x1037 + x1038;
-Tbase TZ x1040 = 0x3;
-Tbase TZ x1041 = x1040 * x1039;
-Tbase TZ x1042 = x1036 + x1041;
-Tbase TZ x1043 = x1025 + x1042;
-Tbase TZ x1044 = 0x1b;
-Tbase TZ x1045 = x1043 >> x1044;
-Tbase TZ x1046 = x612 * x344;
-Tbase TZ x1047 = 0x2;
-Tbase TZ x1048 = x341 * x1047;
-Tbase TZ x1049 = x613 * x1048;
-Tbase TZ x1050 = 0x2;
-Tbase TZ x1051 = x338 * x1050;
-Tbase TZ x1052 = x614 * x1051;
-Tbase TZ x1053 = x615 * x335;
-Tbase TZ x1054 = 0x2;
-Tbase TZ x1055 = x332 * x1054;
-Tbase TZ x1056 = x616 * x1055;
-Tbase TZ x1057 = 0x2;
-Tbase TZ x1058 = x329 * x1057;
-Tbase TZ x1059 = x617 * x1058;
-Tbase TZ x1060 = x618 * x326;
-Tbase TZ x1061 = x1059 + x1060;
-Tbase TZ x1062 = x1056 + x1061;
-Tbase TZ x1063 = x1053 + x1062;
-Tbase TZ x1064 = x1052 + x1063;
-Tbase TZ x1065 = x1049 + x1064;
-Tbase TZ x1066 = x1046 + x1065;
-Tbase TZ x1067 = 0x2;
-Tbase TZ x1068 = x323 * x1067;
-Tbase TZ x1069 = x611 * x1068;
-Tbase TZ x1070 = 0x3;
-Tbase TZ x1071 = x1070 * x1069;
-Tbase TZ x1072 = x1066 + x1071;
-Tbase TZ x1073 = x1045 + x1072;
-Tbase TZ x1074 = 0x1c;
-Tbase TZ x1075 = x1073 >> x1074;
-Tbase TZ x1076 = x611 * x344;
-Tbase TZ x1077 = x612 * x341;
-Tbase TZ x1078 = 0x2;
-Tbase TZ x1079 = x338 * x1078;
-Tbase TZ x1080 = x613 * x1079;
-Tbase TZ x1081 = x614 * x335;
-Tbase TZ x1082 = x615 * x332;
-Tbase TZ x1083 = 0x2;
-Tbase TZ x1084 = x329 * x1083;
-Tbase TZ x1085 = x616 * x1084;
-Tbase TZ x1086 = x617 * x326;
-Tbase TZ x1087 = x618 * x323;
-Tbase TZ x1088 = x1086 + x1087;
-Tbase TZ x1089 = x1085 + x1088;
-Tbase TZ x1090 = x1082 + x1089;
-Tbase TZ x1091 = x1081 + x1090;
-Tbase TZ x1092 = x1080 + x1091;
-Tbase TZ x1093 = x1077 + x1092;
-Tbase TZ x1094 = x1076 + x1093;
-Tbase TZ x1095 = x1075 + x1094;
-Tbase TZ x1096 = 0x1b;
-Tbase TZ x1097 = x1095 >> x1096;
-Tbase TZ x1098 = 0x3;
-Tbase TZ x1099 = x1098 * x1097;
-Tbase TZ x1100 = 0xfffffff;
-Tbase TZ x1101 = x915 & x1100;
-Tbase TZ x1102 = x1099 + x1101;
-Tbase TZ x1103 = 0x1c;
-Tbase TZ x1104 = x1102 >> x1103;
-Tbase TZ x1105 = 0xfffffff;
-Tbase TZ x1106 = x943 & x1105;
-Tbase TZ x1107 = x1104 + x1106;
-Tbase TZ x1108 = 0x7ffffff;
-Tbase TZ x1109 = x1095 & x1108;
-Tbase TZ x1110 = 0xfffffff;
-Tbase TZ x1111 = x1073 & x1110;
-Tbase TZ x1112 = 0x7ffffff;
-Tbase TZ x1113 = x1043 & x1112;
-Tbase TZ x1114 = 0xfffffff;
-Tbase TZ x1115 = x1023 & x1114;
-Tbase TZ x1116 = 0xfffffff;
-Tbase TZ x1117 = x997 & x1116;
-Tbase TZ x1118 = 0x1c;
-Tbase TZ x1119 = x1107 >> x1118;
-Tbase TZ x1120 = 0x7ffffff;
-Tbase TZ x1121 = x965 & x1120;
-Tbase TZ x1122 = x1119 + x1121;
-Tbase TZ x1123 = 0xfffffff;
-Tbase TZ x1124 = x1107 & x1123;
-Tbase TZ x1125 = 0xfffffff;
-Tbase TZ x1126 = x1102 & x1125;
-Tbase TZ x1127 = x867 + x1109;
-Tbase TZ x1128 = x869 + x1111;
-Tbase TZ x1129 = x871 + x1113;
-Tbase TZ x1130 = x873 + x1115;
-Tbase TZ x1131 = x875 + x1117;
-Tbase TZ x1132 = x880 + x1122;
-Tbase TZ x1133 = x882 + x1124;
-Tbase TZ x1134 = x884 + x1126;
-Tbase TZ x1135 = x867 + x1109;
-Tbase TZ x1136 = x869 + x1111;
-Tbase TZ x1137 = x871 + x1113;
-Tbase TZ x1138 = x873 + x1115;
-Tbase TZ x1139 = x875 + x1117;
-Tbase TZ x1140 = x880 + x1122;
-Tbase TZ x1141 = x882 + x1124;
-Tbase TZ x1142 = x884 + x1126;
-Tbase TZ x1143 = x1134 * x1142;
-Tbase TZ x1144 = 0x2;
-Tbase TZ x1145 = x1141 * x1144;
-Tbase TZ x1146 = x1127 * x1145;
-Tbase TZ x1147 = 0x2;
-Tbase TZ x1148 = x1140 * x1147;
-Tbase TZ x1149 = x1128 * x1148;
-Tbase TZ x1150 = 0x2;
-Tbase TZ x1151 = x1139 * x1150;
-Tbase TZ x1152 = x1129 * x1151;
-Tbase TZ x1153 = 0x2;
-Tbase TZ x1154 = x1138 * x1153;
-Tbase TZ x1155 = x1130 * x1154;
-Tbase TZ x1156 = 0x2;
-Tbase TZ x1157 = x1137 * x1156;
-Tbase TZ x1158 = x1131 * x1157;
-Tbase TZ x1159 = 0x2;
-Tbase TZ x1160 = x1136 * x1159;
-Tbase TZ x1161 = x1132 * x1160;
-Tbase TZ x1162 = 0x2;
-Tbase TZ x1163 = x1135 * x1162;
-Tbase TZ x1164 = x1133 * x1163;
-Tbase TZ x1165 = x1161 + x1164;
-Tbase TZ x1166 = x1158 + x1165;
-Tbase TZ x1167 = x1155 + x1166;
-Tbase TZ x1168 = x1152 + x1167;
-Tbase TZ x1169 = x1149 + x1168;
-Tbase TZ x1170 = x1146 + x1169;
-Tbase TZ x1171 = 0x3;
-Tbase TZ x1172 = x1171 * x1170;
-Tbase TZ x1173 = x1143 + x1172;
-Tbase TZ x1174 = 0x1c;
-Tbase TZ x1175 = x1173 >> x1174;
-Tbase TZ x1176 = x1133 * x1142;
-Tbase TZ x1177 = x1134 * x1141;
-Tbase TZ x1178 = x1176 + x1177;
-Tbase TZ x1179 = 0x2;
-Tbase TZ x1180 = x1140 * x1179;
-Tbase TZ x1181 = x1127 * x1180;
-Tbase TZ x1182 = x1128 * x1139;
-Tbase TZ x1183 = 0x2;
-Tbase TZ x1184 = x1138 * x1183;
-Tbase TZ x1185 = x1129 * x1184;
-Tbase TZ x1186 = 0x2;
-Tbase TZ x1187 = x1137 * x1186;
-Tbase TZ x1188 = x1130 * x1187;
-Tbase TZ x1189 = x1131 * x1136;
-Tbase TZ x1190 = 0x2;
-Tbase TZ x1191 = x1135 * x1190;
-Tbase TZ x1192 = x1132 * x1191;
-Tbase TZ x1193 = x1189 + x1192;
-Tbase TZ x1194 = x1188 + x1193;
-Tbase TZ x1195 = x1185 + x1194;
-Tbase TZ x1196 = x1182 + x1195;
-Tbase TZ x1197 = x1181 + x1196;
-Tbase TZ x1198 = 0x3;
-Tbase TZ x1199 = x1198 * x1197;
-Tbase TZ x1200 = x1178 + x1199;
-Tbase TZ x1201 = x1175 + x1200;
-Tbase TZ x1202 = 0x1c;
-Tbase TZ x1203 = x1201 >> x1202;
-Tbase TZ x1204 = x1132 * x1142;
-Tbase TZ x1205 = x1133 * x1141;
-Tbase TZ x1206 = x1134 * x1140;
-Tbase TZ x1207 = x1205 + x1206;
-Tbase TZ x1208 = x1204 + x1207;
-Tbase TZ x1209 = x1127 * x1139;
-Tbase TZ x1210 = x1128 * x1138;
-Tbase TZ x1211 = 0x2;
-Tbase TZ x1212 = x1137 * x1211;
-Tbase TZ x1213 = x1129 * x1212;
-Tbase TZ x1214 = x1130 * x1136;
-Tbase TZ x1215 = x1131 * x1135;
-Tbase TZ x1216 = x1214 + x1215;
-Tbase TZ x1217 = x1213 + x1216;
-Tbase TZ x1218 = x1210 + x1217;
-Tbase TZ x1219 = x1209 + x1218;
-Tbase TZ x1220 = 0x3;
-Tbase TZ x1221 = x1220 * x1219;
-Tbase TZ x1222 = x1208 + x1221;
-Tbase TZ x1223 = x1203 + x1222;
-Tbase TZ x1224 = 0x1b;
-Tbase TZ x1225 = x1223 >> x1224;
-Tbase TZ x1226 = x1131 * x1142;
-Tbase TZ x1227 = 0x2;
-Tbase TZ x1228 = x1141 * x1227;
-Tbase TZ x1229 = x1132 * x1228;
-Tbase TZ x1230 = 0x2;
-Tbase TZ x1231 = x1140 * x1230;
-Tbase TZ x1232 = x1133 * x1231;
-Tbase TZ x1233 = x1134 * x1139;
-Tbase TZ x1234 = x1232 + x1233;
-Tbase TZ x1235 = x1229 + x1234;
-Tbase TZ x1236 = x1226 + x1235;
-Tbase TZ x1237 = 0x2;
-Tbase TZ x1238 = x1138 * x1237;
-Tbase TZ x1239 = x1127 * x1238;
-Tbase TZ x1240 = 0x2;
-Tbase TZ x1241 = x1137 * x1240;
-Tbase TZ x1242 = x1128 * x1241;
-Tbase TZ x1243 = 0x2;
-Tbase TZ x1244 = x1136 * x1243;
-Tbase TZ x1245 = x1129 * x1244;
-Tbase TZ x1246 = 0x2;
-Tbase TZ x1247 = x1135 * x1246;
-Tbase TZ x1248 = x1130 * x1247;
-Tbase TZ x1249 = x1245 + x1248;
-Tbase TZ x1250 = x1242 + x1249;
-Tbase TZ x1251 = x1239 + x1250;
-Tbase TZ x1252 = 0x3;
-Tbase TZ x1253 = x1252 * x1251;
-Tbase TZ x1254 = x1236 + x1253;
-Tbase TZ x1255 = x1225 + x1254;
-Tbase TZ x1256 = 0x1c;
-Tbase TZ x1257 = x1255 >> x1256;
-Tbase TZ x1258 = x1130 * x1142;
-Tbase TZ x1259 = x1131 * x1141;
-Tbase TZ x1260 = 0x2;
-Tbase TZ x1261 = x1140 * x1260;
-Tbase TZ x1262 = x1132 * x1261;
-Tbase TZ x1263 = x1133 * x1139;
-Tbase TZ x1264 = x1134 * x1138;
-Tbase TZ x1265 = x1263 + x1264;
-Tbase TZ x1266 = x1262 + x1265;
-Tbase TZ x1267 = x1259 + x1266;
-Tbase TZ x1268 = x1258 + x1267;
-Tbase TZ x1269 = 0x2;
-Tbase TZ x1270 = x1137 * x1269;
-Tbase TZ x1271 = x1127 * x1270;
-Tbase TZ x1272 = x1128 * x1136;
-Tbase TZ x1273 = 0x2;
-Tbase TZ x1274 = x1135 * x1273;
-Tbase TZ x1275 = x1129 * x1274;
-Tbase TZ x1276 = x1272 + x1275;
-Tbase TZ x1277 = x1271 + x1276;
-Tbase TZ x1278 = 0x3;
-Tbase TZ x1279 = x1278 * x1277;
-Tbase TZ x1280 = x1268 + x1279;
-Tbase TZ x1281 = x1257 + x1280;
-Tbase TZ x1282 = 0x1c;
-Tbase TZ x1283 = x1281 >> x1282;
-Tbase TZ x1284 = x1129 * x1142;
-Tbase TZ x1285 = x1130 * x1141;
-Tbase TZ x1286 = x1131 * x1140;
-Tbase TZ x1287 = x1132 * x1139;
-Tbase TZ x1288 = x1133 * x1138;
-Tbase TZ x1289 = x1134 * x1137;
-Tbase TZ x1290 = x1288 + x1289;
-Tbase TZ x1291 = x1287 + x1290;
-Tbase TZ x1292 = x1286 + x1291;
-Tbase TZ x1293 = x1285 + x1292;
-Tbase TZ x1294 = x1284 + x1293;
-Tbase TZ x1295 = x1127 * x1136;
-Tbase TZ x1296 = x1128 * x1135;
-Tbase TZ x1297 = x1295 + x1296;
-Tbase TZ x1298 = 0x3;
-Tbase TZ x1299 = x1298 * x1297;
-Tbase TZ x1300 = x1294 + x1299;
-Tbase TZ x1301 = x1283 + x1300;
-Tbase TZ x1302 = 0x1b;
-Tbase TZ x1303 = x1301 >> x1302;
-Tbase TZ x1304 = x1128 * x1142;
-Tbase TZ x1305 = 0x2;
-Tbase TZ x1306 = x1141 * x1305;
-Tbase TZ x1307 = x1129 * x1306;
-Tbase TZ x1308 = 0x2;
-Tbase TZ x1309 = x1140 * x1308;
-Tbase TZ x1310 = x1130 * x1309;
-Tbase TZ x1311 = x1131 * x1139;
-Tbase TZ x1312 = 0x2;
-Tbase TZ x1313 = x1138 * x1312;
-Tbase TZ x1314 = x1132 * x1313;
-Tbase TZ x1315 = 0x2;
-Tbase TZ x1316 = x1137 * x1315;
-Tbase TZ x1317 = x1133 * x1316;
-Tbase TZ x1318 = x1134 * x1136;
-Tbase TZ x1319 = x1317 + x1318;
-Tbase TZ x1320 = x1314 + x1319;
-Tbase TZ x1321 = x1311 + x1320;
-Tbase TZ x1322 = x1310 + x1321;
-Tbase TZ x1323 = x1307 + x1322;
-Tbase TZ x1324 = x1304 + x1323;
-Tbase TZ x1325 = 0x2;
-Tbase TZ x1326 = x1135 * x1325;
-Tbase TZ x1327 = x1127 * x1326;
-Tbase TZ x1328 = 0x3;
-Tbase TZ x1329 = x1328 * x1327;
-Tbase TZ x1330 = x1324 + x1329;
-Tbase TZ x1331 = x1303 + x1330;
-Tbase TZ x1332 = 0x1c;
-Tbase TZ x1333 = x1331 >> x1332;
-Tbase TZ x1334 = x1127 * x1142;
-Tbase TZ x1335 = x1128 * x1141;
-Tbase TZ x1336 = 0x2;
-Tbase TZ x1337 = x1140 * x1336;
-Tbase TZ x1338 = x1129 * x1337;
-Tbase TZ x1339 = x1130 * x1139;
-Tbase TZ x1340 = x1131 * x1138;
-Tbase TZ x1341 = 0x2;
-Tbase TZ x1342 = x1137 * x1341;
-Tbase TZ x1343 = x1132 * x1342;
-Tbase TZ x1344 = x1133 * x1136;
-Tbase TZ x1345 = x1134 * x1135;
-Tbase TZ x1346 = x1344 + x1345;
-Tbase TZ x1347 = x1343 + x1346;
-Tbase TZ x1348 = x1340 + x1347;
-Tbase TZ x1349 = x1339 + x1348;
-Tbase TZ x1350 = x1338 + x1349;
-Tbase TZ x1351 = x1335 + x1350;
-Tbase TZ x1352 = x1334 + x1351;
-Tbase TZ x1353 = x1333 + x1352;
-Tbase TZ x1354 = 0x1b;
-Tbase TZ x1355 = x1353 >> x1354;
-Tbase TZ x1356 = 0x3;
-Tbase TZ x1357 = x1356 * x1355;
-Tbase TZ x1358 = 0xfffffff;
-Tbase TZ x1359 = x1173 & x1358;
-Tbase TZ x1360 = x1357 + x1359;
-Tbase TZ x1361 = 0x1c;
-Tbase TZ x1362 = x1360 >> x1361;
-Tbase TZ x1363 = 0xfffffff;
-Tbase TZ x1364 = x1201 & x1363;
-Tbase TZ x1365 = x1362 + x1364;
-Tbase TZ x1366 = 0x7ffffff;
-Tbase TZ x1367 = x1353 & x1366;
-Tbase TZ x1368 = 0xfffffff;
-Tbase TZ x1369 = x1331 & x1368;
-Tbase TZ x1370 = 0x7ffffff;
-Tbase TZ x1371 = x1301 & x1370;
-Tbase TZ x1372 = 0xfffffff;
-Tbase TZ x1373 = x1281 & x1372;
-Tbase TZ x1374 = 0xfffffff;
-Tbase TZ x1375 = x1255 & x1374;
-Tbase TZ x1376 = 0x1c;
-Tbase TZ x1377 = x1365 >> x1376;
-Tbase TZ x1378 = 0x7ffffff;
-Tbase TZ x1379 = x1223 & x1378;
-Tbase TZ x1380 = x1377 + x1379;
-Tbase TZ x1381 = 0xfffffff;
-Tbase TZ x1382 = x1365 & x1381;
-Tbase TZ x1383 = 0xfffffff;
-Tbase TZ x1384 = x1360 & x1383;
-Tbase TZ x1385 = 0xffffffe;
-Tbase TZ x1386 = x1385 + x867;
-Tbase TZ x1387 = x1386 - x1109;
-Tbase TZ x1388 = 0x1ffffffe;
-Tbase TZ x1389 = x1388 + x869;
-Tbase TZ x1390 = x1389 - x1111;
-Tbase TZ x1391 = 0xffffffe;
-Tbase TZ x1392 = x1391 + x871;
-Tbase TZ x1393 = x1392 - x1113;
-Tbase TZ x1394 = 0x1ffffffe;
-Tbase TZ x1395 = x1394 + x873;
-Tbase TZ x1396 = x1395 - x1115;
-Tbase TZ x1397 = 0x1ffffffe;
-Tbase TZ x1398 = x1397 + x875;
-Tbase TZ x1399 = x1398 - x1117;
-Tbase TZ x1400 = 0xffffffe;
-Tbase TZ x1401 = x1400 + x880;
-Tbase TZ x1402 = x1401 - x1122;
-Tbase TZ x1403 = 0x1ffffffe;
-Tbase TZ x1404 = x1403 + x882;
-Tbase TZ x1405 = x1404 - x1124;
-Tbase TZ x1406 = 0x1ffffffa;
-Tbase TZ x1407 = x1406 + x884;
-Tbase TZ x1408 = x1407 - x1126;
-Tbase TZ x1409 = 0xffffffe;
-Tbase TZ x1410 = x1409 + x867;
-Tbase TZ x1411 = x1410 - x1109;
-Tbase TZ x1412 = 0x1ffffffe;
-Tbase TZ x1413 = x1412 + x869;
-Tbase TZ x1414 = x1413 - x1111;
-Tbase TZ x1415 = 0xffffffe;
-Tbase TZ x1416 = x1415 + x871;
-Tbase TZ x1417 = x1416 - x1113;
-Tbase TZ x1418 = 0x1ffffffe;
-Tbase TZ x1419 = x1418 + x873;
-Tbase TZ x1420 = x1419 - x1115;
-Tbase TZ x1421 = 0x1ffffffe;
-Tbase TZ x1422 = x1421 + x875;
-Tbase TZ x1423 = x1422 - x1117;
-Tbase TZ x1424 = 0xffffffe;
-Tbase TZ x1425 = x1424 + x880;
-Tbase TZ x1426 = x1425 - x1122;
-Tbase TZ x1427 = 0x1ffffffe;
-Tbase TZ x1428 = x1427 + x882;
-Tbase TZ x1429 = x1428 - x1124;
-Tbase TZ x1430 = 0x1ffffffa;
-Tbase TZ x1431 = x1430 + x884;
-Tbase TZ x1432 = x1431 - x1126;
-Tbase TZ x1433 = x1408 * x1432;
-Tbase TZ x1434 = 0x2;
-Tbase TZ x1435 = x1429 * x1434;
-Tbase TZ x1436 = x1387 * x1435;
-Tbase TZ x1437 = 0x2;
-Tbase TZ x1438 = x1426 * x1437;
-Tbase TZ x1439 = x1390 * x1438;
-Tbase TZ x1440 = 0x2;
-Tbase TZ x1441 = x1423 * x1440;
-Tbase TZ x1442 = x1393 * x1441;
-Tbase TZ x1443 = 0x2;
-Tbase TZ x1444 = x1420 * x1443;
-Tbase TZ x1445 = x1396 * x1444;
-Tbase TZ x1446 = 0x2;
-Tbase TZ x1447 = x1417 * x1446;
-Tbase TZ x1448 = x1399 * x1447;
-Tbase TZ x1449 = 0x2;
-Tbase TZ x1450 = x1414 * x1449;
-Tbase TZ x1451 = x1402 * x1450;
-Tbase TZ x1452 = 0x2;
-Tbase TZ x1453 = x1411 * x1452;
-Tbase TZ x1454 = x1405 * x1453;
-Tbase TZ x1455 = x1451 + x1454;
-Tbase TZ x1456 = x1448 + x1455;
-Tbase TZ x1457 = x1445 + x1456;
-Tbase TZ x1458 = x1442 + x1457;
-Tbase TZ x1459 = x1439 + x1458;
-Tbase TZ x1460 = x1436 + x1459;
-Tbase TZ x1461 = 0x3;
-Tbase TZ x1462 = x1461 * x1460;
-Tbase TZ x1463 = x1433 + x1462;
-Tbase TZ x1464 = 0x1c;
-Tbase TZ x1465 = x1463 >> x1464;
-Tbase TZ x1466 = x1405 * x1432;
-Tbase TZ x1467 = x1408 * x1429;
-Tbase TZ x1468 = x1466 + x1467;
-Tbase TZ x1469 = 0x2;
-Tbase TZ x1470 = x1426 * x1469;
-Tbase TZ x1471 = x1387 * x1470;
-Tbase TZ x1472 = x1390 * x1423;
-Tbase TZ x1473 = 0x2;
-Tbase TZ x1474 = x1420 * x1473;
-Tbase TZ x1475 = x1393 * x1474;
-Tbase TZ x1476 = 0x2;
-Tbase TZ x1477 = x1417 * x1476;
-Tbase TZ x1478 = x1396 * x1477;
-Tbase TZ x1479 = x1399 * x1414;
-Tbase TZ x1480 = 0x2;
-Tbase TZ x1481 = x1411 * x1480;
-Tbase TZ x1482 = x1402 * x1481;
-Tbase TZ x1483 = x1479 + x1482;
-Tbase TZ x1484 = x1478 + x1483;
-Tbase TZ x1485 = x1475 + x1484;
-Tbase TZ x1486 = x1472 + x1485;
-Tbase TZ x1487 = x1471 + x1486;
-Tbase TZ x1488 = 0x3;
-Tbase TZ x1489 = x1488 * x1487;
-Tbase TZ x1490 = x1468 + x1489;
-Tbase TZ x1491 = x1465 + x1490;
-Tbase TZ x1492 = 0x1c;
-Tbase TZ x1493 = x1491 >> x1492;
-Tbase TZ x1494 = x1402 * x1432;
-Tbase TZ x1495 = x1405 * x1429;
-Tbase TZ x1496 = x1408 * x1426;
-Tbase TZ x1497 = x1495 + x1496;
-Tbase TZ x1498 = x1494 + x1497;
-Tbase TZ x1499 = x1387 * x1423;
-Tbase TZ x1500 = x1390 * x1420;
-Tbase TZ x1501 = 0x2;
-Tbase TZ x1502 = x1417 * x1501;
-Tbase TZ x1503 = x1393 * x1502;
-Tbase TZ x1504 = x1396 * x1414;
-Tbase TZ x1505 = x1399 * x1411;
-Tbase TZ x1506 = x1504 + x1505;
-Tbase TZ x1507 = x1503 + x1506;
-Tbase TZ x1508 = x1500 + x1507;
-Tbase TZ x1509 = x1499 + x1508;
-Tbase TZ x1510 = 0x3;
-Tbase TZ x1511 = x1510 * x1509;
-Tbase TZ x1512 = x1498 + x1511;
-Tbase TZ x1513 = x1493 + x1512;
-Tbase TZ x1514 = 0x1b;
-Tbase TZ x1515 = x1513 >> x1514;
-Tbase TZ x1516 = x1399 * x1432;
-Tbase TZ x1517 = 0x2;
-Tbase TZ x1518 = x1429 * x1517;
-Tbase TZ x1519 = x1402 * x1518;
-Tbase TZ x1520 = 0x2;
-Tbase TZ x1521 = x1426 * x1520;
-Tbase TZ x1522 = x1405 * x1521;
-Tbase TZ x1523 = x1408 * x1423;
-Tbase TZ x1524 = x1522 + x1523;
-Tbase TZ x1525 = x1519 + x1524;
-Tbase TZ x1526 = x1516 + x1525;
-Tbase TZ x1527 = 0x2;
-Tbase TZ x1528 = x1420 * x1527;
-Tbase TZ x1529 = x1387 * x1528;
-Tbase TZ x1530 = 0x2;
-Tbase TZ x1531 = x1417 * x1530;
-Tbase TZ x1532 = x1390 * x1531;
-Tbase TZ x1533 = 0x2;
-Tbase TZ x1534 = x1414 * x1533;
-Tbase TZ x1535 = x1393 * x1534;
-Tbase TZ x1536 = 0x2;
-Tbase TZ x1537 = x1411 * x1536;
-Tbase TZ x1538 = x1396 * x1537;
-Tbase TZ x1539 = x1535 + x1538;
-Tbase TZ x1540 = x1532 + x1539;
-Tbase TZ x1541 = x1529 + x1540;
-Tbase TZ x1542 = 0x3;
-Tbase TZ x1543 = x1542 * x1541;
-Tbase TZ x1544 = x1526 + x1543;
-Tbase TZ x1545 = x1515 + x1544;
-Tbase TZ x1546 = 0x1c;
-Tbase TZ x1547 = x1545 >> x1546;
-Tbase TZ x1548 = x1396 * x1432;
-Tbase TZ x1549 = x1399 * x1429;
-Tbase TZ x1550 = 0x2;
-Tbase TZ x1551 = x1426 * x1550;
-Tbase TZ x1552 = x1402 * x1551;
-Tbase TZ x1553 = x1405 * x1423;
-Tbase TZ x1554 = x1408 * x1420;
-Tbase TZ x1555 = x1553 + x1554;
-Tbase TZ x1556 = x1552 + x1555;
-Tbase TZ x1557 = x1549 + x1556;
-Tbase TZ x1558 = x1548 + x1557;
-Tbase TZ x1559 = 0x2;
-Tbase TZ x1560 = x1417 * x1559;
-Tbase TZ x1561 = x1387 * x1560;
-Tbase TZ x1562 = x1390 * x1414;
-Tbase TZ x1563 = 0x2;
-Tbase TZ x1564 = x1411 * x1563;
-Tbase TZ x1565 = x1393 * x1564;
-Tbase TZ x1566 = x1562 + x1565;
-Tbase TZ x1567 = x1561 + x1566;
-Tbase TZ x1568 = 0x3;
-Tbase TZ x1569 = x1568 * x1567;
-Tbase TZ x1570 = x1558 + x1569;
-Tbase TZ x1571 = x1547 + x1570;
-Tbase TZ x1572 = 0x1c;
-Tbase TZ x1573 = x1571 >> x1572;
-Tbase TZ x1574 = x1393 * x1432;
-Tbase TZ x1575 = x1396 * x1429;
-Tbase TZ x1576 = x1399 * x1426;
-Tbase TZ x1577 = x1402 * x1423;
-Tbase TZ x1578 = x1405 * x1420;
-Tbase TZ x1579 = x1408 * x1417;
-Tbase TZ x1580 = x1578 + x1579;
-Tbase TZ x1581 = x1577 + x1580;
-Tbase TZ x1582 = x1576 + x1581;
-Tbase TZ x1583 = x1575 + x1582;
-Tbase TZ x1584 = x1574 + x1583;
-Tbase TZ x1585 = x1387 * x1414;
-Tbase TZ x1586 = x1390 * x1411;
-Tbase TZ x1587 = x1585 + x1586;
-Tbase TZ x1588 = 0x3;
-Tbase TZ x1589 = x1588 * x1587;
-Tbase TZ x1590 = x1584 + x1589;
-Tbase TZ x1591 = x1573 + x1590;
-Tbase TZ x1592 = 0x1b;
-Tbase TZ x1593 = x1591 >> x1592;
-Tbase TZ x1594 = x1390 * x1432;
-Tbase TZ x1595 = 0x2;
-Tbase TZ x1596 = x1429 * x1595;
-Tbase TZ x1597 = x1393 * x1596;
-Tbase TZ x1598 = 0x2;
-Tbase TZ x1599 = x1426 * x1598;
-Tbase TZ x1600 = x1396 * x1599;
-Tbase TZ x1601 = x1399 * x1423;
-Tbase TZ x1602 = 0x2;
-Tbase TZ x1603 = x1420 * x1602;
-Tbase TZ x1604 = x1402 * x1603;
-Tbase TZ x1605 = 0x2;
-Tbase TZ x1606 = x1417 * x1605;
-Tbase TZ x1607 = x1405 * x1606;
-Tbase TZ x1608 = x1408 * x1414;
-Tbase TZ x1609 = x1607 + x1608;
-Tbase TZ x1610 = x1604 + x1609;
-Tbase TZ x1611 = x1601 + x1610;
-Tbase TZ x1612 = x1600 + x1611;
-Tbase TZ x1613 = x1597 + x1612;
-Tbase TZ x1614 = x1594 + x1613;
-Tbase TZ x1615 = 0x2;
-Tbase TZ x1616 = x1411 * x1615;
-Tbase TZ x1617 = x1387 * x1616;
-Tbase TZ x1618 = 0x3;
-Tbase TZ x1619 = x1618 * x1617;
-Tbase TZ x1620 = x1614 + x1619;
-Tbase TZ x1621 = x1593 + x1620;
-Tbase TZ x1622 = 0x1c;
-Tbase TZ x1623 = x1621 >> x1622;
-Tbase TZ x1624 = x1387 * x1432;
-Tbase TZ x1625 = x1390 * x1429;
-Tbase TZ x1626 = 0x2;
-Tbase TZ x1627 = x1426 * x1626;
-Tbase TZ x1628 = x1393 * x1627;
-Tbase TZ x1629 = x1396 * x1423;
-Tbase TZ x1630 = x1399 * x1420;
-Tbase TZ x1631 = 0x2;
-Tbase TZ x1632 = x1417 * x1631;
-Tbase TZ x1633 = x1402 * x1632;
-Tbase TZ x1634 = x1405 * x1414;
-Tbase TZ x1635 = x1408 * x1411;
-Tbase TZ x1636 = x1634 + x1635;
-Tbase TZ x1637 = x1633 + x1636;
-Tbase TZ x1638 = x1630 + x1637;
-Tbase TZ x1639 = x1629 + x1638;
-Tbase TZ x1640 = x1628 + x1639;
-Tbase TZ x1641 = x1625 + x1640;
-Tbase TZ x1642 = x1624 + x1641;
-Tbase TZ x1643 = x1623 + x1642;
-Tbase TZ x1644 = 0x1b;
-Tbase TZ x1645 = x1643 >> x1644;
-Tbase TZ x1646 = 0x3;
-Tbase TZ x1647 = x1646 * x1645;
-Tbase TZ x1648 = 0xfffffff;
-Tbase TZ x1649 = x1463 & x1648;
-Tbase TZ x1650 = x1647 + x1649;
-Tbase TZ x1651 = 0x1c;
-Tbase TZ x1652 = x1650 >> x1651;
-Tbase TZ x1653 = 0xfffffff;
-Tbase TZ x1654 = x1491 & x1653;
-Tbase TZ x1655 = x1652 + x1654;
-Tbase TZ x1656 = 0x7ffffff;
-Tbase TZ x1657 = x1643 & x1656;
-Tbase TZ x1658 = 0xfffffff;
-Tbase TZ x1659 = x1621 & x1658;
-Tbase TZ x1660 = 0x7ffffff;
-Tbase TZ x1661 = x1591 & x1660;
-Tbase TZ x1662 = 0xfffffff;
-Tbase TZ x1663 = x1571 & x1662;
-Tbase TZ x1664 = 0xfffffff;
-Tbase TZ x1665 = x1545 & x1664;
-Tbase TZ x1666 = 0x1c;
-Tbase TZ x1667 = x1655 >> x1666;
-Tbase TZ x1668 = 0x7ffffff;
-Tbase TZ x1669 = x1513 & x1668;
-Tbase TZ x1670 = x1667 + x1669;
-Tbase TZ x1671 = 0xfffffff;
-Tbase TZ x1672 = x1655 & x1671;
-Tbase TZ x1673 = 0xfffffff;
-Tbase TZ x1674 = x1650 & x1673;
-Tbase TZ x1675 = x38 * x1674;
-Tbase TZ x1676 = 0x2;
-Tbase TZ x1677 = x1672 * x1676;
-Tbase TZ x1678 = x31 * x1677;
-Tbase TZ x1679 = 0x2;
-Tbase TZ x1680 = x1670 * x1679;
-Tbase TZ x1681 = x32 * x1680;
-Tbase TZ x1682 = 0x2;
-Tbase TZ x1683 = x1665 * x1682;
-Tbase TZ x1684 = x33 * x1683;
-Tbase TZ x1685 = 0x2;
-Tbase TZ x1686 = x1663 * x1685;
-Tbase TZ x1687 = x34 * x1686;
-Tbase TZ x1688 = 0x2;
-Tbase TZ x1689 = x1661 * x1688;
-Tbase TZ x1690 = x35 * x1689;
-Tbase TZ x1691 = 0x2;
-Tbase TZ x1692 = x1659 * x1691;
-Tbase TZ x1693 = x36 * x1692;
-Tbase TZ x1694 = 0x2;
-Tbase TZ x1695 = x1657 * x1694;
-Tbase TZ x1696 = x37 * x1695;
-Tbase TZ x1697 = x1693 + x1696;
-Tbase TZ x1698 = x1690 + x1697;
-Tbase TZ x1699 = x1687 + x1698;
-Tbase TZ x1700 = x1684 + x1699;
-Tbase TZ x1701 = x1681 + x1700;
-Tbase TZ x1702 = x1678 + x1701;
-Tbase TZ x1703 = 0x3;
-Tbase TZ x1704 = x1703 * x1702;
-Tbase TZ x1705 = x1675 + x1704;
-Tbase TZ x1706 = 0x1c;
-Tbase TZ x1707 = x1705 >> x1706;
-Tbase TZ x1708 = x37 * x1674;
-Tbase TZ x1709 = x38 * x1672;
-Tbase TZ x1710 = x1708 + x1709;
-Tbase TZ x1711 = 0x2;
-Tbase TZ x1712 = x1670 * x1711;
-Tbase TZ x1713 = x31 * x1712;
-Tbase TZ x1714 = x32 * x1665;
-Tbase TZ x1715 = 0x2;
-Tbase TZ x1716 = x1663 * x1715;
-Tbase TZ x1717 = x33 * x1716;
-Tbase TZ x1718 = 0x2;
-Tbase TZ x1719 = x1661 * x1718;
-Tbase TZ x1720 = x34 * x1719;
-Tbase TZ x1721 = x35 * x1659;
-Tbase TZ x1722 = 0x2;
-Tbase TZ x1723 = x1657 * x1722;
-Tbase TZ x1724 = x36 * x1723;
-Tbase TZ x1725 = x1721 + x1724;
-Tbase TZ x1726 = x1720 + x1725;
-Tbase TZ x1727 = x1717 + x1726;
-Tbase TZ x1728 = x1714 + x1727;
-Tbase TZ x1729 = x1713 + x1728;
-Tbase TZ x1730 = 0x3;
-Tbase TZ x1731 = x1730 * x1729;
-Tbase TZ x1732 = x1710 + x1731;
-Tbase TZ x1733 = x1707 + x1732;
-Tbase TZ x1734 = 0x1c;
-Tbase TZ x1735 = x1733 >> x1734;
-Tbase TZ x1736 = x36 * x1674;
-Tbase TZ x1737 = x37 * x1672;
-Tbase TZ x1738 = x38 * x1670;
-Tbase TZ x1739 = x1737 + x1738;
-Tbase TZ x1740 = x1736 + x1739;
-Tbase TZ x1741 = x31 * x1665;
-Tbase TZ x1742 = x32 * x1663;
-Tbase TZ x1743 = 0x2;
-Tbase TZ x1744 = x1661 * x1743;
-Tbase TZ x1745 = x33 * x1744;
-Tbase TZ x1746 = x34 * x1659;
-Tbase TZ x1747 = x35 * x1657;
-Tbase TZ x1748 = x1746 + x1747;
-Tbase TZ x1749 = x1745 + x1748;
-Tbase TZ x1750 = x1742 + x1749;
-Tbase TZ x1751 = x1741 + x1750;
-Tbase TZ x1752 = 0x3;
-Tbase TZ x1753 = x1752 * x1751;
-Tbase TZ x1754 = x1740 + x1753;
-Tbase TZ x1755 = x1735 + x1754;
-Tbase TZ x1756 = 0x1b;
-Tbase TZ x1757 = x1755 >> x1756;
-Tbase TZ x1758 = x35 * x1674;
-Tbase TZ x1759 = 0x2;
-Tbase TZ x1760 = x1672 * x1759;
-Tbase TZ x1761 = x36 * x1760;
-Tbase TZ x1762 = 0x2;
-Tbase TZ x1763 = x1670 * x1762;
-Tbase TZ x1764 = x37 * x1763;
-Tbase TZ x1765 = x38 * x1665;
-Tbase TZ x1766 = x1764 + x1765;
-Tbase TZ x1767 = x1761 + x1766;
-Tbase TZ x1768 = x1758 + x1767;
-Tbase TZ x1769 = 0x2;
-Tbase TZ x1770 = x1663 * x1769;
-Tbase TZ x1771 = x31 * x1770;
-Tbase TZ x1772 = 0x2;
-Tbase TZ x1773 = x1661 * x1772;
-Tbase TZ x1774 = x32 * x1773;
-Tbase TZ x1775 = 0x2;
-Tbase TZ x1776 = x1659 * x1775;
-Tbase TZ x1777 = x33 * x1776;
-Tbase TZ x1778 = 0x2;
-Tbase TZ x1779 = x1657 * x1778;
-Tbase TZ x1780 = x34 * x1779;
-Tbase TZ x1781 = x1777 + x1780;
-Tbase TZ x1782 = x1774 + x1781;
-Tbase TZ x1783 = x1771 + x1782;
-Tbase TZ x1784 = 0x3;
-Tbase TZ x1785 = x1784 * x1783;
-Tbase TZ x1786 = x1768 + x1785;
-Tbase TZ x1787 = x1757 + x1786;
-Tbase TZ x1788 = 0x1c;
-Tbase TZ x1789 = x1787 >> x1788;
-Tbase TZ x1790 = x34 * x1674;
-Tbase TZ x1791 = x35 * x1672;
-Tbase TZ x1792 = 0x2;
-Tbase TZ x1793 = x1670 * x1792;
-Tbase TZ x1794 = x36 * x1793;
-Tbase TZ x1795 = x37 * x1665;
-Tbase TZ x1796 = x38 * x1663;
-Tbase TZ x1797 = x1795 + x1796;
-Tbase TZ x1798 = x1794 + x1797;
-Tbase TZ x1799 = x1791 + x1798;
-Tbase TZ x1800 = x1790 + x1799;
-Tbase TZ x1801 = 0x2;
-Tbase TZ x1802 = x1661 * x1801;
-Tbase TZ x1803 = x31 * x1802;
-Tbase TZ x1804 = x32 * x1659;
-Tbase TZ x1805 = 0x2;
-Tbase TZ x1806 = x1657 * x1805;
-Tbase TZ x1807 = x33 * x1806;
-Tbase TZ x1808 = x1804 + x1807;
-Tbase TZ x1809 = x1803 + x1808;
-Tbase TZ x1810 = 0x3;
-Tbase TZ x1811 = x1810 * x1809;
-Tbase TZ x1812 = x1800 + x1811;
-Tbase TZ x1813 = x1789 + x1812;
-Tbase TZ x1814 = 0x1c;
-Tbase TZ x1815 = x1813 >> x1814;
-Tbase TZ x1816 = x33 * x1674;
-Tbase TZ x1817 = x34 * x1672;
-Tbase TZ x1818 = x35 * x1670;
-Tbase TZ x1819 = x36 * x1665;
-Tbase TZ x1820 = x37 * x1663;
-Tbase TZ x1821 = x38 * x1661;
-Tbase TZ x1822 = x1820 + x1821;
-Tbase TZ x1823 = x1819 + x1822;
-Tbase TZ x1824 = x1818 + x1823;
-Tbase TZ x1825 = x1817 + x1824;
-Tbase TZ x1826 = x1816 + x1825;
-Tbase TZ x1827 = x31 * x1659;
-Tbase TZ x1828 = x32 * x1657;
-Tbase TZ x1829 = x1827 + x1828;
-Tbase TZ x1830 = 0x3;
-Tbase TZ x1831 = x1830 * x1829;
-Tbase TZ x1832 = x1826 + x1831;
-Tbase TZ x1833 = x1815 + x1832;
-Tbase TZ x1834 = 0x1b;
-Tbase TZ x1835 = x1833 >> x1834;
-Tbase TZ x1836 = x32 * x1674;
-Tbase TZ x1837 = 0x2;
-Tbase TZ x1838 = x1672 * x1837;
-Tbase TZ x1839 = x33 * x1838;
-Tbase TZ x1840 = 0x2;
-Tbase TZ x1841 = x1670 * x1840;
-Tbase TZ x1842 = x34 * x1841;
-Tbase TZ x1843 = x35 * x1665;
-Tbase TZ x1844 = 0x2;
-Tbase TZ x1845 = x1663 * x1844;
-Tbase TZ x1846 = x36 * x1845;
-Tbase TZ x1847 = 0x2;
-Tbase TZ x1848 = x1661 * x1847;
-Tbase TZ x1849 = x37 * x1848;
-Tbase TZ x1850 = x38 * x1659;
-Tbase TZ x1851 = x1849 + x1850;
-Tbase TZ x1852 = x1846 + x1851;
-Tbase TZ x1853 = x1843 + x1852;
-Tbase TZ x1854 = x1842 + x1853;
-Tbase TZ x1855 = x1839 + x1854;
-Tbase TZ x1856 = x1836 + x1855;
-Tbase TZ x1857 = 0x2;
-Tbase TZ x1858 = x1657 * x1857;
-Tbase TZ x1859 = x31 * x1858;
-Tbase TZ x1860 = 0x3;
-Tbase TZ x1861 = x1860 * x1859;
-Tbase TZ x1862 = x1856 + x1861;
-Tbase TZ x1863 = x1835 + x1862;
-Tbase TZ x1864 = 0x1c;
-Tbase TZ x1865 = x1863 >> x1864;
-Tbase TZ x1866 = x31 * x1674;
-Tbase TZ x1867 = x32 * x1672;
-Tbase TZ x1868 = 0x2;
-Tbase TZ x1869 = x1670 * x1868;
-Tbase TZ x1870 = x33 * x1869;
-Tbase TZ x1871 = x34 * x1665;
-Tbase TZ x1872 = x35 * x1663;
-Tbase TZ x1873 = 0x2;
-Tbase TZ x1874 = x1661 * x1873;
-Tbase TZ x1875 = x36 * x1874;
-Tbase TZ x1876 = x37 * x1659;
-Tbase TZ x1877 = x38 * x1657;
-Tbase TZ x1878 = x1876 + x1877;
-Tbase TZ x1879 = x1875 + x1878;
-Tbase TZ x1880 = x1872 + x1879;
-Tbase TZ x1881 = x1871 + x1880;
-Tbase TZ x1882 = x1870 + x1881;
-Tbase TZ x1883 = x1867 + x1882;
-Tbase TZ x1884 = x1866 + x1883;
-Tbase TZ x1885 = x1865 + x1884;
-Tbase TZ x1886 = 0x1b;
-Tbase TZ x1887 = x1885 >> x1886;
-Tbase TZ x1888 = 0x3;
-Tbase TZ x1889 = x1888 * x1887;
-Tbase TZ x1890 = 0xfffffff;
-Tbase TZ x1891 = x1705 & x1890;
-Tbase TZ x1892 = x1889 + x1891;
-Tbase TZ x1893 = 0x1c;
-Tbase TZ x1894 = x1892 >> x1893;
-Tbase TZ x1895 = 0xfffffff;
-Tbase TZ x1896 = x1733 & x1895;
-Tbase TZ x1897 = x1894 + x1896;
-Tbase TZ x1898 = 0x7ffffff;
-Tbase TZ x1899 = x1885 & x1898;
-Tbase TZ x1900 = 0xfffffff;
-Tbase TZ x1901 = x1863 & x1900;
-Tbase TZ x1902 = 0x7ffffff;
-Tbase TZ x1903 = x1833 & x1902;
-Tbase TZ x1904 = 0xfffffff;
-Tbase TZ x1905 = x1813 & x1904;
-Tbase TZ x1906 = 0xfffffff;
-Tbase TZ x1907 = x1787 & x1906;
-Tbase TZ x1908 = 0x1c;
-Tbase TZ x1909 = x1897 >> x1908;
-Tbase TZ x1910 = 0x7ffffff;
-Tbase TZ x1911 = x1755 & x1910;
-Tbase TZ x1912 = x1909 + x1911;
-Tbase TZ x1913 = 0xfffffff;
-Tbase TZ x1914 = x1897 & x1913;
-Tbase TZ x1915 = 0xfffffff;
-Tbase TZ x1916 = x1892 & x1915;
-Tbase TZ x1917 = x320 * x586;
-Tbase TZ x1918 = 0x2;
-Tbase TZ x1919 = x584 * x1918;
-Tbase TZ x1920 = x303 * x1919;
-Tbase TZ x1921 = 0x2;
-Tbase TZ x1922 = x582 * x1921;
-Tbase TZ x1923 = x305 * x1922;
-Tbase TZ x1924 = 0x2;
-Tbase TZ x1925 = x577 * x1924;
-Tbase TZ x1926 = x307 * x1925;
-Tbase TZ x1927 = 0x2;
-Tbase TZ x1928 = x575 * x1927;
-Tbase TZ x1929 = x309 * x1928;
-Tbase TZ x1930 = 0x2;
-Tbase TZ x1931 = x573 * x1930;
-Tbase TZ x1932 = x311 * x1931;
-Tbase TZ x1933 = 0x2;
-Tbase TZ x1934 = x571 * x1933;
-Tbase TZ x1935 = x316 * x1934;
-Tbase TZ x1936 = 0x2;
-Tbase TZ x1937 = x569 * x1936;
-Tbase TZ x1938 = x318 * x1937;
-Tbase TZ x1939 = x1935 + x1938;
-Tbase TZ x1940 = x1932 + x1939;
-Tbase TZ x1941 = x1929 + x1940;
-Tbase TZ x1942 = x1926 + x1941;
-Tbase TZ x1943 = x1923 + x1942;
-Tbase TZ x1944 = x1920 + x1943;
-Tbase TZ x1945 = 0x3;
-Tbase TZ x1946 = x1945 * x1944;
-Tbase TZ x1947 = x1917 + x1946;
-Tbase TZ x1948 = 0x1c;
-Tbase TZ x1949 = x1947 >> x1948;
-Tbase TZ x1950 = x318 * x586;
-Tbase TZ x1951 = x320 * x584;
-Tbase TZ x1952 = x1950 + x1951;
-Tbase TZ x1953 = 0x2;
-Tbase TZ x1954 = x582 * x1953;
-Tbase TZ x1955 = x303 * x1954;
-Tbase TZ x1956 = x305 * x577;
-Tbase TZ x1957 = 0x2;
-Tbase TZ x1958 = x575 * x1957;
-Tbase TZ x1959 = x307 * x1958;
-Tbase TZ x1960 = 0x2;
-Tbase TZ x1961 = x573 * x1960;
-Tbase TZ x1962 = x309 * x1961;
-Tbase TZ x1963 = x311 * x571;
-Tbase TZ x1964 = 0x2;
-Tbase TZ x1965 = x569 * x1964;
-Tbase TZ x1966 = x316 * x1965;
-Tbase TZ x1967 = x1963 + x1966;
-Tbase TZ x1968 = x1962 + x1967;
-Tbase TZ x1969 = x1959 + x1968;
-Tbase TZ x1970 = x1956 + x1969;
-Tbase TZ x1971 = x1955 + x1970;
-Tbase TZ x1972 = 0x3;
-Tbase TZ x1973 = x1972 * x1971;
-Tbase TZ x1974 = x1952 + x1973;
-Tbase TZ x1975 = x1949 + x1974;
-Tbase TZ x1976 = 0x1c;
-Tbase TZ x1977 = x1975 >> x1976;
-Tbase TZ x1978 = x316 * x586;
-Tbase TZ x1979 = x318 * x584;
-Tbase TZ x1980 = x320 * x582;
-Tbase TZ x1981 = x1979 + x1980;
-Tbase TZ x1982 = x1978 + x1981;
-Tbase TZ x1983 = x303 * x577;
-Tbase TZ x1984 = x305 * x575;
-Tbase TZ x1985 = 0x2;
-Tbase TZ x1986 = x573 * x1985;
-Tbase TZ x1987 = x307 * x1986;
-Tbase TZ x1988 = x309 * x571;
-Tbase TZ x1989 = x311 * x569;
-Tbase TZ x1990 = x1988 + x1989;
-Tbase TZ x1991 = x1987 + x1990;
-Tbase TZ x1992 = x1984 + x1991;
-Tbase TZ x1993 = x1983 + x1992;
-Tbase TZ x1994 = 0x3;
-Tbase TZ x1995 = x1994 * x1993;
-Tbase TZ x1996 = x1982 + x1995;
-Tbase TZ x1997 = x1977 + x1996;
-Tbase TZ x1998 = 0x1b;
-Tbase TZ x1999 = x1997 >> x1998;
-Tbase TZ x2000 = x311 * x586;
-Tbase TZ x2001 = 0x2;
-Tbase TZ x2002 = x584 * x2001;
-Tbase TZ x2003 = x316 * x2002;
-Tbase TZ x2004 = 0x2;
-Tbase TZ x2005 = x582 * x2004;
-Tbase TZ x2006 = x318 * x2005;
-Tbase TZ x2007 = x320 * x577;
-Tbase TZ x2008 = x2006 + x2007;
-Tbase TZ x2009 = x2003 + x2008;
-Tbase TZ x2010 = x2000 + x2009;
-Tbase TZ x2011 = 0x2;
-Tbase TZ x2012 = x575 * x2011;
-Tbase TZ x2013 = x303 * x2012;
-Tbase TZ x2014 = 0x2;
-Tbase TZ x2015 = x573 * x2014;
-Tbase TZ x2016 = x305 * x2015;
-Tbase TZ x2017 = 0x2;
-Tbase TZ x2018 = x571 * x2017;
-Tbase TZ x2019 = x307 * x2018;
-Tbase TZ x2020 = 0x2;
-Tbase TZ x2021 = x569 * x2020;
-Tbase TZ x2022 = x309 * x2021;
-Tbase TZ x2023 = x2019 + x2022;
-Tbase TZ x2024 = x2016 + x2023;
-Tbase TZ x2025 = x2013 + x2024;
-Tbase TZ x2026 = 0x3;
-Tbase TZ x2027 = x2026 * x2025;
-Tbase TZ x2028 = x2010 + x2027;
-Tbase TZ x2029 = x1999 + x2028;
-Tbase TZ x2030 = 0x1c;
-Tbase TZ x2031 = x2029 >> x2030;
-Tbase TZ x2032 = x309 * x586;
-Tbase TZ x2033 = x311 * x584;
-Tbase TZ x2034 = 0x2;
-Tbase TZ x2035 = x582 * x2034;
-Tbase TZ x2036 = x316 * x2035;
-Tbase TZ x2037 = x318 * x577;
-Tbase TZ x2038 = x320 * x575;
-Tbase TZ x2039 = x2037 + x2038;
-Tbase TZ x2040 = x2036 + x2039;
-Tbase TZ x2041 = x2033 + x2040;
-Tbase TZ x2042 = x2032 + x2041;
-Tbase TZ x2043 = 0x2;
-Tbase TZ x2044 = x573 * x2043;
-Tbase TZ x2045 = x303 * x2044;
-Tbase TZ x2046 = x305 * x571;
-Tbase TZ x2047 = 0x2;
-Tbase TZ x2048 = x569 * x2047;
-Tbase TZ x2049 = x307 * x2048;
-Tbase TZ x2050 = x2046 + x2049;
-Tbase TZ x2051 = x2045 + x2050;
-Tbase TZ x2052 = 0x3;
-Tbase TZ x2053 = x2052 * x2051;
-Tbase TZ x2054 = x2042 + x2053;
-Tbase TZ x2055 = x2031 + x2054;
-Tbase TZ x2056 = 0x1c;
-Tbase TZ x2057 = x2055 >> x2056;
-Tbase TZ x2058 = x307 * x586;
-Tbase TZ x2059 = x309 * x584;
-Tbase TZ x2060 = x311 * x582;
-Tbase TZ x2061 = x316 * x577;
-Tbase TZ x2062 = x318 * x575;
-Tbase TZ x2063 = x320 * x573;
-Tbase TZ x2064 = x2062 + x2063;
-Tbase TZ x2065 = x2061 + x2064;
-Tbase TZ x2066 = x2060 + x2065;
-Tbase TZ x2067 = x2059 + x2066;
-Tbase TZ x2068 = x2058 + x2067;
-Tbase TZ x2069 = x303 * x571;
-Tbase TZ x2070 = x305 * x569;
-Tbase TZ x2071 = x2069 + x2070;
-Tbase TZ x2072 = 0x3;
-Tbase TZ x2073 = x2072 * x2071;
-Tbase TZ x2074 = x2068 + x2073;
-Tbase TZ x2075 = x2057 + x2074;
-Tbase TZ x2076 = 0x1b;
-Tbase TZ x2077 = x2075 >> x2076;
-Tbase TZ x2078 = x305 * x586;
-Tbase TZ x2079 = 0x2;
-Tbase TZ x2080 = x584 * x2079;
-Tbase TZ x2081 = x307 * x2080;
-Tbase TZ x2082 = 0x2;
-Tbase TZ x2083 = x582 * x2082;
-Tbase TZ x2084 = x309 * x2083;
-Tbase TZ x2085 = x311 * x577;
-Tbase TZ x2086 = 0x2;
-Tbase TZ x2087 = x575 * x2086;
-Tbase TZ x2088 = x316 * x2087;
-Tbase TZ x2089 = 0x2;
-Tbase TZ x2090 = x573 * x2089;
-Tbase TZ x2091 = x318 * x2090;
-Tbase TZ x2092 = x320 * x571;
-Tbase TZ x2093 = x2091 + x2092;
-Tbase TZ x2094 = x2088 + x2093;
-Tbase TZ x2095 = x2085 + x2094;
-Tbase TZ x2096 = x2084 + x2095;
-Tbase TZ x2097 = x2081 + x2096;
-Tbase TZ x2098 = x2078 + x2097;
-Tbase TZ x2099 = 0x2;
-Tbase TZ x2100 = x569 * x2099;
-Tbase TZ x2101 = x303 * x2100;
-Tbase TZ x2102 = 0x3;
-Tbase TZ x2103 = x2102 * x2101;
-Tbase TZ x2104 = x2098 + x2103;
-Tbase TZ x2105 = x2077 + x2104;
-Tbase TZ x2106 = 0x1c;
-Tbase TZ x2107 = x2105 >> x2106;
-Tbase TZ x2108 = x303 * x586;
-Tbase TZ x2109 = x305 * x584;
-Tbase TZ x2110 = 0x2;
-Tbase TZ x2111 = x582 * x2110;
-Tbase TZ x2112 = x307 * x2111;
-Tbase TZ x2113 = x309 * x577;
-Tbase TZ x2114 = x311 * x575;
-Tbase TZ x2115 = 0x2;
-Tbase TZ x2116 = x573 * x2115;
-Tbase TZ x2117 = x316 * x2116;
-Tbase TZ x2118 = x318 * x571;
-Tbase TZ x2119 = x320 * x569;
-Tbase TZ x2120 = x2118 + x2119;
-Tbase TZ x2121 = x2117 + x2120;
-Tbase TZ x2122 = x2114 + x2121;
-Tbase TZ x2123 = x2113 + x2122;
-Tbase TZ x2124 = x2112 + x2123;
-Tbase TZ x2125 = x2109 + x2124;
-Tbase TZ x2126 = x2108 + x2125;
-Tbase TZ x2127 = x2107 + x2126;
-Tbase TZ x2128 = 0x1b;
-Tbase TZ x2129 = x2127 >> x2128;
-Tbase TZ x2130 = 0x3;
-Tbase TZ x2131 = x2130 * x2129;
-Tbase TZ x2132 = 0xfffffff;
-Tbase TZ x2133 = x1947 & x2132;
-Tbase TZ x2134 = x2131 + x2133;
-Tbase TZ x2135 = 0x1c;
-Tbase TZ x2136 = x2134 >> x2135;
-Tbase TZ x2137 = 0xfffffff;
-Tbase TZ x2138 = x1975 & x2137;
-Tbase TZ x2139 = x2136 + x2138;
-Tbase TZ x2140 = 0x7ffffff;
-Tbase TZ x2141 = x2127 & x2140;
-Tbase TZ x2142 = 0xfffffff;
-Tbase TZ x2143 = x2105 & x2142;
-Tbase TZ x2144 = 0x7ffffff;
-Tbase TZ x2145 = x2075 & x2144;
-Tbase TZ x2146 = 0xfffffff;
-Tbase TZ x2147 = x2055 & x2146;
-Tbase TZ x2148 = 0xfffffff;
-Tbase TZ x2149 = x2029 & x2148;
-Tbase TZ x2150 = 0x1c;
-Tbase TZ x2151 = x2139 >> x2150;
-Tbase TZ x2152 = 0x7ffffff;
-Tbase TZ x2153 = x1997 & x2152;
-Tbase TZ x2154 = x2151 + x2153;
-Tbase TZ x2155 = 0xfffffff;
-Tbase TZ x2156 = x2139 & x2155;
-Tbase TZ x2157 = 0xfffffff;
-Tbase TZ x2158 = x2134 & x2157;
-Tbase TZ x2159 = x30 * x610;
-Tbase TZ x2160 = 0x2;
-Tbase TZ x2161 = x607 * x2160;
-Tbase TZ x2162 = x23 * x2161;
-Tbase TZ x2163 = 0x2;
-Tbase TZ x2164 = x604 * x2163;
-Tbase TZ x2165 = x24 * x2164;
-Tbase TZ x2166 = 0x2;
-Tbase TZ x2167 = x601 * x2166;
-Tbase TZ x2168 = x25 * x2167;
-Tbase TZ x2169 = 0x2;
-Tbase TZ x2170 = x598 * x2169;
-Tbase TZ x2171 = x26 * x2170;
-Tbase TZ x2172 = 0x2;
-Tbase TZ x2173 = x595 * x2172;
-Tbase TZ x2174 = x27 * x2173;
-Tbase TZ x2175 = 0x2;
-Tbase TZ x2176 = x592 * x2175;
-Tbase TZ x2177 = x28 * x2176;
-Tbase TZ x2178 = 0x2;
-Tbase TZ x2179 = x589 * x2178;
-Tbase TZ x2180 = x29 * x2179;
-Tbase TZ x2181 = x2177 + x2180;
-Tbase TZ x2182 = x2174 + x2181;
-Tbase TZ x2183 = x2171 + x2182;
-Tbase TZ x2184 = x2168 + x2183;
-Tbase TZ x2185 = x2165 + x2184;
-Tbase TZ x2186 = x2162 + x2185;
-Tbase TZ x2187 = 0x3;
-Tbase TZ x2188 = x2187 * x2186;
-Tbase TZ x2189 = x2159 + x2188;
-Tbase TZ x2190 = 0x1c;
-Tbase TZ x2191 = x2189 >> x2190;
-Tbase TZ x2192 = x29 * x610;
-Tbase TZ x2193 = x30 * x607;
-Tbase TZ x2194 = x2192 + x2193;
-Tbase TZ x2195 = 0x2;
-Tbase TZ x2196 = x604 * x2195;
-Tbase TZ x2197 = x23 * x2196;
-Tbase TZ x2198 = x24 * x601;
-Tbase TZ x2199 = 0x2;
-Tbase TZ x2200 = x598 * x2199;
-Tbase TZ x2201 = x25 * x2200;
-Tbase TZ x2202 = 0x2;
-Tbase TZ x2203 = x595 * x2202;
-Tbase TZ x2204 = x26 * x2203;
-Tbase TZ x2205 = x27 * x592;
-Tbase TZ x2206 = 0x2;
-Tbase TZ x2207 = x589 * x2206;
-Tbase TZ x2208 = x28 * x2207;
-Tbase TZ x2209 = x2205 + x2208;
-Tbase TZ x2210 = x2204 + x2209;
-Tbase TZ x2211 = x2201 + x2210;
-Tbase TZ x2212 = x2198 + x2211;
-Tbase TZ x2213 = x2197 + x2212;
-Tbase TZ x2214 = 0x3;
-Tbase TZ x2215 = x2214 * x2213;
-Tbase TZ x2216 = x2194 + x2215;
-Tbase TZ x2217 = x2191 + x2216;
-Tbase TZ x2218 = 0x1c;
-Tbase TZ x2219 = x2217 >> x2218;
-Tbase TZ x2220 = x28 * x610;
-Tbase TZ x2221 = x29 * x607;
-Tbase TZ x2222 = x30 * x604;
-Tbase TZ x2223 = x2221 + x2222;
-Tbase TZ x2224 = x2220 + x2223;
-Tbase TZ x2225 = x23 * x601;
-Tbase TZ x2226 = x24 * x598;
-Tbase TZ x2227 = 0x2;
-Tbase TZ x2228 = x595 * x2227;
-Tbase TZ x2229 = x25 * x2228;
-Tbase TZ x2230 = x26 * x592;
-Tbase TZ x2231 = x27 * x589;
-Tbase TZ x2232 = x2230 + x2231;
-Tbase TZ x2233 = x2229 + x2232;
-Tbase TZ x2234 = x2226 + x2233;
-Tbase TZ x2235 = x2225 + x2234;
-Tbase TZ x2236 = 0x3;
-Tbase TZ x2237 = x2236 * x2235;
-Tbase TZ x2238 = x2224 + x2237;
-Tbase TZ x2239 = x2219 + x2238;
-Tbase TZ x2240 = 0x1b;
-Tbase TZ x2241 = x2239 >> x2240;
-Tbase TZ x2242 = x27 * x610;
-Tbase TZ x2243 = 0x2;
-Tbase TZ x2244 = x607 * x2243;
-Tbase TZ x2245 = x28 * x2244;
-Tbase TZ x2246 = 0x2;
-Tbase TZ x2247 = x604 * x2246;
-Tbase TZ x2248 = x29 * x2247;
-Tbase TZ x2249 = x30 * x601;
-Tbase TZ x2250 = x2248 + x2249;
-Tbase TZ x2251 = x2245 + x2250;
-Tbase TZ x2252 = x2242 + x2251;
-Tbase TZ x2253 = 0x2;
-Tbase TZ x2254 = x598 * x2253;
-Tbase TZ x2255 = x23 * x2254;
-Tbase TZ x2256 = 0x2;
-Tbase TZ x2257 = x595 * x2256;
-Tbase TZ x2258 = x24 * x2257;
-Tbase TZ x2259 = 0x2;
-Tbase TZ x2260 = x592 * x2259;
-Tbase TZ x2261 = x25 * x2260;
-Tbase TZ x2262 = 0x2;
-Tbase TZ x2263 = x589 * x2262;
-Tbase TZ x2264 = x26 * x2263;
-Tbase TZ x2265 = x2261 + x2264;
-Tbase TZ x2266 = x2258 + x2265;
-Tbase TZ x2267 = x2255 + x2266;
-Tbase TZ x2268 = 0x3;
-Tbase TZ x2269 = x2268 * x2267;
-Tbase TZ x2270 = x2252 + x2269;
-Tbase TZ x2271 = x2241 + x2270;
-Tbase TZ x2272 = 0x1c;
-Tbase TZ x2273 = x2271 >> x2272;
-Tbase TZ x2274 = x26 * x610;
-Tbase TZ x2275 = x27 * x607;
-Tbase TZ x2276 = 0x2;
-Tbase TZ x2277 = x604 * x2276;
-Tbase TZ x2278 = x28 * x2277;
-Tbase TZ x2279 = x29 * x601;
-Tbase TZ x2280 = x30 * x598;
-Tbase TZ x2281 = x2279 + x2280;
-Tbase TZ x2282 = x2278 + x2281;
-Tbase TZ x2283 = x2275 + x2282;
-Tbase TZ x2284 = x2274 + x2283;
-Tbase TZ x2285 = 0x2;
-Tbase TZ x2286 = x595 * x2285;
-Tbase TZ x2287 = x23 * x2286;
-Tbase TZ x2288 = x24 * x592;
-Tbase TZ x2289 = 0x2;
-Tbase TZ x2290 = x589 * x2289;
-Tbase TZ x2291 = x25 * x2290;
-Tbase TZ x2292 = x2288 + x2291;
-Tbase TZ x2293 = x2287 + x2292;
-Tbase TZ x2294 = 0x3;
-Tbase TZ x2295 = x2294 * x2293;
-Tbase TZ x2296 = x2284 + x2295;
-Tbase TZ x2297 = x2273 + x2296;
-Tbase TZ x2298 = 0x1c;
-Tbase TZ x2299 = x2297 >> x2298;
-Tbase TZ x2300 = x25 * x610;
-Tbase TZ x2301 = x26 * x607;
-Tbase TZ x2302 = x27 * x604;
-Tbase TZ x2303 = x28 * x601;
-Tbase TZ x2304 = x29 * x598;
-Tbase TZ x2305 = x30 * x595;
-Tbase TZ x2306 = x2304 + x2305;
-Tbase TZ x2307 = x2303 + x2306;
-Tbase TZ x2308 = x2302 + x2307;
-Tbase TZ x2309 = x2301 + x2308;
-Tbase TZ x2310 = x2300 + x2309;
-Tbase TZ x2311 = x23 * x592;
-Tbase TZ x2312 = x24 * x589;
-Tbase TZ x2313 = x2311 + x2312;
-Tbase TZ x2314 = 0x3;
-Tbase TZ x2315 = x2314 * x2313;
-Tbase TZ x2316 = x2310 + x2315;
-Tbase TZ x2317 = x2299 + x2316;
-Tbase TZ x2318 = 0x1b;
-Tbase TZ x2319 = x2317 >> x2318;
-Tbase TZ x2320 = x24 * x610;
-Tbase TZ x2321 = 0x2;
-Tbase TZ x2322 = x607 * x2321;
-Tbase TZ x2323 = x25 * x2322;
-Tbase TZ x2324 = 0x2;
-Tbase TZ x2325 = x604 * x2324;
-Tbase TZ x2326 = x26 * x2325;
-Tbase TZ x2327 = x27 * x601;
-Tbase TZ x2328 = 0x2;
-Tbase TZ x2329 = x598 * x2328;
-Tbase TZ x2330 = x28 * x2329;
-Tbase TZ x2331 = 0x2;
-Tbase TZ x2332 = x595 * x2331;
-Tbase TZ x2333 = x29 * x2332;
-Tbase TZ x2334 = x30 * x592;
-Tbase TZ x2335 = x2333 + x2334;
-Tbase TZ x2336 = x2330 + x2335;
-Tbase TZ x2337 = x2327 + x2336;
-Tbase TZ x2338 = x2326 + x2337;
-Tbase TZ x2339 = x2323 + x2338;
-Tbase TZ x2340 = x2320 + x2339;
-Tbase TZ x2341 = 0x2;
-Tbase TZ x2342 = x589 * x2341;
-Tbase TZ x2343 = x23 * x2342;
-Tbase TZ x2344 = 0x3;
-Tbase TZ x2345 = x2344 * x2343;
-Tbase TZ x2346 = x2340 + x2345;
-Tbase TZ x2347 = x2319 + x2346;
-Tbase TZ x2348 = 0x1c;
-Tbase TZ x2349 = x2347 >> x2348;
-Tbase TZ x2350 = x23 * x610;
-Tbase TZ x2351 = x24 * x607;
-Tbase TZ x2352 = 0x2;
-Tbase TZ x2353 = x604 * x2352;
-Tbase TZ x2354 = x25 * x2353;
-Tbase TZ x2355 = x26 * x601;
-Tbase TZ x2356 = x27 * x598;
-Tbase TZ x2357 = 0x2;
-Tbase TZ x2358 = x595 * x2357;
-Tbase TZ x2359 = x28 * x2358;
-Tbase TZ x2360 = x29 * x592;
-Tbase TZ x2361 = x30 * x589;
-Tbase TZ x2362 = x2360 + x2361;
-Tbase TZ x2363 = x2359 + x2362;
-Tbase TZ x2364 = x2356 + x2363;
-Tbase TZ x2365 = x2355 + x2364;
-Tbase TZ x2366 = x2354 + x2365;
-Tbase TZ x2367 = x2351 + x2366;
-Tbase TZ x2368 = x2350 + x2367;
-Tbase TZ x2369 = x2349 + x2368;
-Tbase TZ x2370 = 0x1b;
-Tbase TZ x2371 = x2369 >> x2370;
-Tbase TZ x2372 = 0x3;
-Tbase TZ x2373 = x2372 * x2371;
-Tbase TZ x2374 = 0xfffffff;
-Tbase TZ x2375 = x2189 & x2374;
-Tbase TZ x2376 = x2373 + x2375;
-Tbase TZ x2377 = 0x1c;
-Tbase TZ x2378 = x2376 >> x2377;
-Tbase TZ x2379 = 0xfffffff;
-Tbase TZ x2380 = x2217 & x2379;
-Tbase TZ x2381 = x2378 + x2380;
-Tbase TZ x2382 = 0x7ffffff;
-Tbase TZ x2383 = x2369 & x2382;
-Tbase TZ x2384 = 0xfffffff;
-Tbase TZ x2385 = x2347 & x2384;
-Tbase TZ x2386 = 0x7ffffff;
-Tbase TZ x2387 = x2317 & x2386;
-Tbase TZ x2388 = 0xfffffff;
-Tbase TZ x2389 = x2297 & x2388;
-Tbase TZ x2390 = 0xfffffff;
-Tbase TZ x2391 = x2271 & x2390;
-Tbase TZ x2392 = 0x1c;
-Tbase TZ x2393 = x2381 >> x2392;
-Tbase TZ x2394 = 0x7ffffff;
-Tbase TZ x2395 = x2239 & x2394;
-Tbase TZ x2396 = x2393 + x2395;
-Tbase TZ x2397 = 0xfffffff;
-Tbase TZ x2398 = x2381 & x2397;
-Tbase TZ x2399 = 0xfffffff;
-Tbase TZ x2400 = x2376 & x2399;
-Tbase TZ x2401 = x303 + x2383;
-Tbase TZ x2402 = x305 + x2385;
-Tbase TZ x2403 = x307 + x2387;
-Tbase TZ x2404 = x309 + x2389;
-Tbase TZ x2405 = x311 + x2391;
-Tbase TZ x2406 = x316 + x2396;
-Tbase TZ x2407 = x318 + x2398;
-Tbase TZ x2408 = x320 + x2400;
-Tbase TZ x2409 = x610 * x2408;
-Tbase TZ x2410 = 0x2;
-Tbase TZ x2411 = x2407 * x2410;
-Tbase TZ x2412 = x589 * x2411;
-Tbase TZ x2413 = 0x2;
-Tbase TZ x2414 = x2406 * x2413;
-Tbase TZ x2415 = x592 * x2414;
-Tbase TZ x2416 = 0x2;
-Tbase TZ x2417 = x2405 * x2416;
-Tbase TZ x2418 = x595 * x2417;
-Tbase TZ x2419 = 0x2;
-Tbase TZ x2420 = x2404 * x2419;
-Tbase TZ x2421 = x598 * x2420;
-Tbase TZ x2422 = 0x2;
-Tbase TZ x2423 = x2403 * x2422;
-Tbase TZ x2424 = x601 * x2423;
-Tbase TZ x2425 = 0x2;
-Tbase TZ x2426 = x2402 * x2425;
-Tbase TZ x2427 = x604 * x2426;
-Tbase TZ x2428 = 0x2;
-Tbase TZ x2429 = x2401 * x2428;
-Tbase TZ x2430 = x607 * x2429;
-Tbase TZ x2431 = x2427 + x2430;
-Tbase TZ x2432 = x2424 + x2431;
-Tbase TZ x2433 = x2421 + x2432;
-Tbase TZ x2434 = x2418 + x2433;
-Tbase TZ x2435 = x2415 + x2434;
-Tbase TZ x2436 = x2412 + x2435;
-Tbase TZ x2437 = 0x3;
-Tbase TZ x2438 = x2437 * x2436;
-Tbase TZ x2439 = x2409 + x2438;
-Tbase TZ x2440 = 0x1c;
-Tbase TZ x2441 = x2439 >> x2440;
-Tbase TZ x2442 = x607 * x2408;
-Tbase TZ x2443 = x610 * x2407;
-Tbase TZ x2444 = x2442 + x2443;
-Tbase TZ x2445 = 0x2;
-Tbase TZ x2446 = x2406 * x2445;
-Tbase TZ x2447 = x589 * x2446;
-Tbase TZ x2448 = x592 * x2405;
-Tbase TZ x2449 = 0x2;
-Tbase TZ x2450 = x2404 * x2449;
-Tbase TZ x2451 = x595 * x2450;
-Tbase TZ x2452 = 0x2;
-Tbase TZ x2453 = x2403 * x2452;
-Tbase TZ x2454 = x598 * x2453;
-Tbase TZ x2455 = x601 * x2402;
-Tbase TZ x2456 = 0x2;
-Tbase TZ x2457 = x2401 * x2456;
-Tbase TZ x2458 = x604 * x2457;
-Tbase TZ x2459 = x2455 + x2458;
-Tbase TZ x2460 = x2454 + x2459;
-Tbase TZ x2461 = x2451 + x2460;
-Tbase TZ x2462 = x2448 + x2461;
-Tbase TZ x2463 = x2447 + x2462;
-Tbase TZ x2464 = 0x3;
-Tbase TZ x2465 = x2464 * x2463;
-Tbase TZ x2466 = x2444 + x2465;
-Tbase TZ x2467 = x2441 + x2466;
-Tbase TZ x2468 = 0x1c;
-Tbase TZ x2469 = x2467 >> x2468;
-Tbase TZ x2470 = x604 * x2408;
-Tbase TZ x2471 = x607 * x2407;
-Tbase TZ x2472 = x610 * x2406;
-Tbase TZ x2473 = x2471 + x2472;
-Tbase TZ x2474 = x2470 + x2473;
-Tbase TZ x2475 = x589 * x2405;
-Tbase TZ x2476 = x592 * x2404;
-Tbase TZ x2477 = 0x2;
-Tbase TZ x2478 = x2403 * x2477;
-Tbase TZ x2479 = x595 * x2478;
-Tbase TZ x2480 = x598 * x2402;
-Tbase TZ x2481 = x601 * x2401;
-Tbase TZ x2482 = x2480 + x2481;
-Tbase TZ x2483 = x2479 + x2482;
-Tbase TZ x2484 = x2476 + x2483;
-Tbase TZ x2485 = x2475 + x2484;
-Tbase TZ x2486 = 0x3;
-Tbase TZ x2487 = x2486 * x2485;
-Tbase TZ x2488 = x2474 + x2487;
-Tbase TZ x2489 = x2469 + x2488;
-Tbase TZ x2490 = 0x1b;
-Tbase TZ x2491 = x2489 >> x2490;
-Tbase TZ x2492 = x601 * x2408;
-Tbase TZ x2493 = 0x2;
-Tbase TZ x2494 = x2407 * x2493;
-Tbase TZ x2495 = x604 * x2494;
-Tbase TZ x2496 = 0x2;
-Tbase TZ x2497 = x2406 * x2496;
-Tbase TZ x2498 = x607 * x2497;
-Tbase TZ x2499 = x610 * x2405;
-Tbase TZ x2500 = x2498 + x2499;
-Tbase TZ x2501 = x2495 + x2500;
-Tbase TZ x2502 = x2492 + x2501;
-Tbase TZ x2503 = 0x2;
-Tbase TZ x2504 = x2404 * x2503;
-Tbase TZ x2505 = x589 * x2504;
-Tbase TZ x2506 = 0x2;
-Tbase TZ x2507 = x2403 * x2506;
-Tbase TZ x2508 = x592 * x2507;
-Tbase TZ x2509 = 0x2;
-Tbase TZ x2510 = x2402 * x2509;
-Tbase TZ x2511 = x595 * x2510;
-Tbase TZ x2512 = 0x2;
-Tbase TZ x2513 = x2401 * x2512;
-Tbase TZ x2514 = x598 * x2513;
-Tbase TZ x2515 = x2511 + x2514;
-Tbase TZ x2516 = x2508 + x2515;
-Tbase TZ x2517 = x2505 + x2516;
-Tbase TZ x2518 = 0x3;
-Tbase TZ x2519 = x2518 * x2517;
-Tbase TZ x2520 = x2502 + x2519;
-Tbase TZ x2521 = x2491 + x2520;
-Tbase TZ x2522 = 0x1c;
-Tbase TZ x2523 = x2521 >> x2522;
-Tbase TZ x2524 = x598 * x2408;
-Tbase TZ x2525 = x601 * x2407;
-Tbase TZ x2526 = 0x2;
-Tbase TZ x2527 = x2406 * x2526;
-Tbase TZ x2528 = x604 * x2527;
-Tbase TZ x2529 = x607 * x2405;
-Tbase TZ x2530 = x610 * x2404;
-Tbase TZ x2531 = x2529 + x2530;
-Tbase TZ x2532 = x2528 + x2531;
-Tbase TZ x2533 = x2525 + x2532;
-Tbase TZ x2534 = x2524 + x2533;
-Tbase TZ x2535 = 0x2;
-Tbase TZ x2536 = x2403 * x2535;
-Tbase TZ x2537 = x589 * x2536;
-Tbase TZ x2538 = x592 * x2402;
-Tbase TZ x2539 = 0x2;
-Tbase TZ x2540 = x2401 * x2539;
-Tbase TZ x2541 = x595 * x2540;
-Tbase TZ x2542 = x2538 + x2541;
-Tbase TZ x2543 = x2537 + x2542;
-Tbase TZ x2544 = 0x3;
-Tbase TZ x2545 = x2544 * x2543;
-Tbase TZ x2546 = x2534 + x2545;
-Tbase TZ x2547 = x2523 + x2546;
-Tbase TZ x2548 = 0x1c;
-Tbase TZ x2549 = x2547 >> x2548;
-Tbase TZ x2550 = x595 * x2408;
-Tbase TZ x2551 = x598 * x2407;
-Tbase TZ x2552 = x601 * x2406;
-Tbase TZ x2553 = x604 * x2405;
-Tbase TZ x2554 = x607 * x2404;
-Tbase TZ x2555 = x610 * x2403;
-Tbase TZ x2556 = x2554 + x2555;
-Tbase TZ x2557 = x2553 + x2556;
-Tbase TZ x2558 = x2552 + x2557;
-Tbase TZ x2559 = x2551 + x2558;
-Tbase TZ x2560 = x2550 + x2559;
-Tbase TZ x2561 = x589 * x2402;
-Tbase TZ x2562 = x592 * x2401;
-Tbase TZ x2563 = x2561 + x2562;
-Tbase TZ x2564 = 0x3;
-Tbase TZ x2565 = x2564 * x2563;
-Tbase TZ x2566 = x2560 + x2565;
-Tbase TZ x2567 = x2549 + x2566;
-Tbase TZ x2568 = 0x1b;
-Tbase TZ x2569 = x2567 >> x2568;
-Tbase TZ x2570 = x592 * x2408;
-Tbase TZ x2571 = 0x2;
-Tbase TZ x2572 = x2407 * x2571;
-Tbase TZ x2573 = x595 * x2572;
-Tbase TZ x2574 = 0x2;
-Tbase TZ x2575 = x2406 * x2574;
-Tbase TZ x2576 = x598 * x2575;
-Tbase TZ x2577 = x601 * x2405;
-Tbase TZ x2578 = 0x2;
-Tbase TZ x2579 = x2404 * x2578;
-Tbase TZ x2580 = x604 * x2579;
-Tbase TZ x2581 = 0x2;
-Tbase TZ x2582 = x2403 * x2581;
-Tbase TZ x2583 = x607 * x2582;
-Tbase TZ x2584 = x610 * x2402;
-Tbase TZ x2585 = x2583 + x2584;
-Tbase TZ x2586 = x2580 + x2585;
-Tbase TZ x2587 = x2577 + x2586;
-Tbase TZ x2588 = x2576 + x2587;
-Tbase TZ x2589 = x2573 + x2588;
-Tbase TZ x2590 = x2570 + x2589;
-Tbase TZ x2591 = 0x2;
-Tbase TZ x2592 = x2401 * x2591;
-Tbase TZ x2593 = x589 * x2592;
-Tbase TZ x2594 = 0x3;
-Tbase TZ x2595 = x2594 * x2593;
-Tbase TZ x2596 = x2590 + x2595;
-Tbase TZ x2597 = x2569 + x2596;
-Tbase TZ x2598 = 0x1c;
-Tbase TZ x2599 = x2597 >> x2598;
-Tbase TZ x2600 = x589 * x2408;
-Tbase TZ x2601 = x592 * x2407;
-Tbase TZ x2602 = 0x2;
-Tbase TZ x2603 = x2406 * x2602;
-Tbase TZ x2604 = x595 * x2603;
-Tbase TZ x2605 = x598 * x2405;
-Tbase TZ x2606 = x601 * x2404;
-Tbase TZ x2607 = 0x2;
-Tbase TZ x2608 = x2403 * x2607;
-Tbase TZ x2609 = x604 * x2608;
-Tbase TZ x2610 = x607 * x2402;
-Tbase TZ x2611 = x610 * x2401;
-Tbase TZ x2612 = x2610 + x2611;
-Tbase TZ x2613 = x2609 + x2612;
-Tbase TZ x2614 = x2606 + x2613;
-Tbase TZ x2615 = x2605 + x2614;
-Tbase TZ x2616 = x2604 + x2615;
-Tbase TZ x2617 = x2601 + x2616;
-Tbase TZ x2618 = x2600 + x2617;
-Tbase TZ x2619 = x2599 + x2618;
-Tbase TZ x2620 = 0x1b;
-Tbase TZ x2621 = x2619 >> x2620;
-Tbase TZ x2622 = 0x3;
-Tbase TZ x2623 = x2622 * x2621;
-Tbase TZ x2624 = 0xfffffff;
-Tbase TZ x2625 = x2439 & x2624;
-Tbase TZ x2626 = x2623 + x2625;
-Tbase TZ x2627 = 0x1c;
-Tbase TZ x2628 = x2626 >> x2627;
-Tbase TZ x2629 = 0xfffffff;
-Tbase TZ x2630 = x2467 & x2629;
-Tbase TZ x2631 = x2628 + x2630;
-Tbase TZ x2632 = 0x7ffffff;
-Tbase TZ x2633 = x2619 & x2632;
-Tbase TZ x2634 = 0xfffffff;
-Tbase TZ x2635 = x2597 & x2634;
-Tbase TZ x2636 = 0x7ffffff;
-Tbase TZ x2637 = x2567 & x2636;
-Tbase TZ x2638 = 0xfffffff;
-Tbase TZ x2639 = x2547 & x2638;
-Tbase TZ x2640 = 0xfffffff;
-Tbase TZ x2641 = x2521 & x2640;
-Tbase TZ x2642 = 0x1c;
-Tbase TZ x2643 = x2631 >> x2642;
-Tbase TZ x2644 = 0x7ffffff;
-Tbase TZ x2645 = x2489 & x2644;
-Tbase TZ x2646 = x2643 + x2645;
-Tbase TZ x2647 = 0xfffffff;
-Tbase TZ x2648 = x2631 & x2647;
-Tbase TZ x2649 = 0xfffffff;
-Tbase TZ x2650 = x2626 & x2649;
-(Return x2141, Return x2143, Return x2145, Return x2147,
-Return x2149, Return x2154, Return x2156, Return x2158,
-(Return x2633, Return x2635, Return x2637, Return x2639,
-Return x2641, Return x2646, Return x2648, Return x2650),
-(Return x1367, Return x1369, Return x1371, Return x1373,
-Return x1375, Return x1380, Return x1382, Return x1384),
-(Return x1899, Return x1901, Return x1903, Return x1905,
-Return x1907, Return x1912, Return x1914, Return x1916))
- : forall var : base_type -> Type,
- expr base_type op
- (TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> ...)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF2213_32Reflective/Reified/LadderStepDisplay.v b/src/SpecificGen/GF2213_32Reflective/Reified/LadderStepDisplay.v
deleted file mode 100644
index 068ab659e..000000000
--- a/src/SpecificGen/GF2213_32Reflective/Reified/LadderStepDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF2213_32Reflective.Reified.LadderStep.
-Require Export Crypto.Reflection.Z.CNotations.
-
-Print rladderstepW.
diff --git a/src/SpecificGen/GF2213_32Reflective/Reified/LadderStepJavaDisplay.log b/src/SpecificGen/GF2213_32Reflective/Reified/LadderStepJavaDisplay.log
deleted file mode 100644
index 8d34398d9..000000000
--- a/src/SpecificGen/GF2213_32Reflective/Reified/LadderStepJavaDisplay.log
+++ /dev/null
@@ -1,2634 +0,0 @@
-rladderstepW =
-fun var : base_type -> Type =>
-λ
-_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ x23 x24 x25 x26 x27 x28 x29
- x30 x31 x32 x33 x34 x35 x36 x37 x38 x39 x40 x41 x42 x43 x44 x45 x46 x47 x48
- x49 x50 x51 x52 x53 x54 x55 x56 x57 x58 x59 x60 x61 x62 x63 x64 x65 x66 x67
- x68 x69 x70 : var TZ,
-Tbase TZ x71 = x39 + x47;
-Tbase TZ x72 = x40 + x48;
-Tbase TZ x73 = x41 + x49;
-Tbase TZ x74 = x42 + x50;
-Tbase TZ x75 = x43 + x51;
-Tbase TZ x76 = x44 + x52;
-Tbase TZ x77 = x45 + x53;
-Tbase TZ x78 = x46 + x54;
-Tbase TZ x79 = x78 * x78;
-Tbase TZ x80 = 0x2;
-Tbase TZ x81 = x77 * x80;
-Tbase TZ x82 = x71 * x81;
-Tbase TZ x83 = 0x2;
-Tbase TZ x84 = x76 * x83;
-Tbase TZ x85 = x72 * x84;
-Tbase TZ x86 = 0x2;
-Tbase TZ x87 = x75 * x86;
-Tbase TZ x88 = x73 * x87;
-Tbase TZ x89 = 0x2;
-Tbase TZ x90 = x74 * x89;
-Tbase TZ x91 = x74 * x90;
-Tbase TZ x92 = 0x2;
-Tbase TZ x93 = x73 * x92;
-Tbase TZ x94 = x75 * x93;
-Tbase TZ x95 = 0x2;
-Tbase TZ x96 = x72 * x95;
-Tbase TZ x97 = x76 * x96;
-Tbase TZ x98 = 0x2;
-Tbase TZ x99 = x71 * x98;
-Tbase TZ x100 = x77 * x99;
-Tbase TZ x101 = x97 + x100;
-Tbase TZ x102 = x94 + x101;
-Tbase TZ x103 = x91 + x102;
-Tbase TZ x104 = x88 + x103;
-Tbase TZ x105 = x85 + x104;
-Tbase TZ x106 = x82 + x105;
-Tbase TZ x107 = 0x3;
-Tbase TZ x108 = x107 * x106;
-Tbase TZ x109 = x79 + x108;
-Tbase TZ x110 = 0x1c;
-Tbase TZ x111 = x109 >>> x110;
-Tbase TZ x112 = x77 * x78;
-Tbase TZ x113 = x78 * x77;
-Tbase TZ x114 = x112 + x113;
-Tbase TZ x115 = 0x2;
-Tbase TZ x116 = x76 * x115;
-Tbase TZ x117 = x71 * x116;
-Tbase TZ x118 = x72 * x75;
-Tbase TZ x119 = 0x2;
-Tbase TZ x120 = x74 * x119;
-Tbase TZ x121 = x73 * x120;
-Tbase TZ x122 = 0x2;
-Tbase TZ x123 = x73 * x122;
-Tbase TZ x124 = x74 * x123;
-Tbase TZ x125 = x75 * x72;
-Tbase TZ x126 = 0x2;
-Tbase TZ x127 = x71 * x126;
-Tbase TZ x128 = x76 * x127;
-Tbase TZ x129 = x125 + x128;
-Tbase TZ x130 = x124 + x129;
-Tbase TZ x131 = x121 + x130;
-Tbase TZ x132 = x118 + x131;
-Tbase TZ x133 = x117 + x132;
-Tbase TZ x134 = 0x3;
-Tbase TZ x135 = x134 * x133;
-Tbase TZ x136 = x114 + x135;
-Tbase TZ x137 = x111 + x136;
-Tbase TZ x138 = 0x1c;
-Tbase TZ x139 = x137 >>> x138;
-Tbase TZ x140 = x76 * x78;
-Tbase TZ x141 = x77 * x77;
-Tbase TZ x142 = x78 * x76;
-Tbase TZ x143 = x141 + x142;
-Tbase TZ x144 = x140 + x143;
-Tbase TZ x145 = x71 * x75;
-Tbase TZ x146 = x72 * x74;
-Tbase TZ x147 = 0x2;
-Tbase TZ x148 = x73 * x147;
-Tbase TZ x149 = x73 * x148;
-Tbase TZ x150 = x74 * x72;
-Tbase TZ x151 = x75 * x71;
-Tbase TZ x152 = x150 + x151;
-Tbase TZ x153 = x149 + x152;
-Tbase TZ x154 = x146 + x153;
-Tbase TZ x155 = x145 + x154;
-Tbase TZ x156 = 0x3;
-Tbase TZ x157 = x156 * x155;
-Tbase TZ x158 = x144 + x157;
-Tbase TZ x159 = x139 + x158;
-Tbase TZ x160 = 0x1b;
-Tbase TZ x161 = x159 >>> x160;
-Tbase TZ x162 = x75 * x78;
-Tbase TZ x163 = 0x2;
-Tbase TZ x164 = x77 * x163;
-Tbase TZ x165 = x76 * x164;
-Tbase TZ x166 = 0x2;
-Tbase TZ x167 = x76 * x166;
-Tbase TZ x168 = x77 * x167;
-Tbase TZ x169 = x78 * x75;
-Tbase TZ x170 = x168 + x169;
-Tbase TZ x171 = x165 + x170;
-Tbase TZ x172 = x162 + x171;
-Tbase TZ x173 = 0x2;
-Tbase TZ x174 = x74 * x173;
-Tbase TZ x175 = x71 * x174;
-Tbase TZ x176 = 0x2;
-Tbase TZ x177 = x73 * x176;
-Tbase TZ x178 = x72 * x177;
-Tbase TZ x179 = 0x2;
-Tbase TZ x180 = x72 * x179;
-Tbase TZ x181 = x73 * x180;
-Tbase TZ x182 = 0x2;
-Tbase TZ x183 = x71 * x182;
-Tbase TZ x184 = x74 * x183;
-Tbase TZ x185 = x181 + x184;
-Tbase TZ x186 = x178 + x185;
-Tbase TZ x187 = x175 + x186;
-Tbase TZ x188 = 0x3;
-Tbase TZ x189 = x188 * x187;
-Tbase TZ x190 = x172 + x189;
-Tbase TZ x191 = x161 + x190;
-Tbase TZ x192 = 0x1c;
-Tbase TZ x193 = x191 >>> x192;
-Tbase TZ x194 = x74 * x78;
-Tbase TZ x195 = x75 * x77;
-Tbase TZ x196 = 0x2;
-Tbase TZ x197 = x76 * x196;
-Tbase TZ x198 = x76 * x197;
-Tbase TZ x199 = x77 * x75;
-Tbase TZ x200 = x78 * x74;
-Tbase TZ x201 = x199 + x200;
-Tbase TZ x202 = x198 + x201;
-Tbase TZ x203 = x195 + x202;
-Tbase TZ x204 = x194 + x203;
-Tbase TZ x205 = 0x2;
-Tbase TZ x206 = x73 * x205;
-Tbase TZ x207 = x71 * x206;
-Tbase TZ x208 = x72 * x72;
-Tbase TZ x209 = 0x2;
-Tbase TZ x210 = x71 * x209;
-Tbase TZ x211 = x73 * x210;
-Tbase TZ x212 = x208 + x211;
-Tbase TZ x213 = x207 + x212;
-Tbase TZ x214 = 0x3;
-Tbase TZ x215 = x214 * x213;
-Tbase TZ x216 = x204 + x215;
-Tbase TZ x217 = x193 + x216;
-Tbase TZ x218 = 0x1c;
-Tbase TZ x219 = x217 >>> x218;
-Tbase TZ x220 = x73 * x78;
-Tbase TZ x221 = x74 * x77;
-Tbase TZ x222 = x75 * x76;
-Tbase TZ x223 = x76 * x75;
-Tbase TZ x224 = x77 * x74;
-Tbase TZ x225 = x78 * x73;
-Tbase TZ x226 = x224 + x225;
-Tbase TZ x227 = x223 + x226;
-Tbase TZ x228 = x222 + x227;
-Tbase TZ x229 = x221 + x228;
-Tbase TZ x230 = x220 + x229;
-Tbase TZ x231 = x71 * x72;
-Tbase TZ x232 = x72 * x71;
-Tbase TZ x233 = x231 + x232;
-Tbase TZ x234 = 0x3;
-Tbase TZ x235 = x234 * x233;
-Tbase TZ x236 = x230 + x235;
-Tbase TZ x237 = x219 + x236;
-Tbase TZ x238 = 0x1b;
-Tbase TZ x239 = x237 >>> x238;
-Tbase TZ x240 = x72 * x78;
-Tbase TZ x241 = 0x2;
-Tbase TZ x242 = x77 * x241;
-Tbase TZ x243 = x73 * x242;
-Tbase TZ x244 = 0x2;
-Tbase TZ x245 = x76 * x244;
-Tbase TZ x246 = x74 * x245;
-Tbase TZ x247 = x75 * x75;
-Tbase TZ x248 = 0x2;
-Tbase TZ x249 = x74 * x248;
-Tbase TZ x250 = x76 * x249;
-Tbase TZ x251 = 0x2;
-Tbase TZ x252 = x73 * x251;
-Tbase TZ x253 = x77 * x252;
-Tbase TZ x254 = x78 * x72;
-Tbase TZ x255 = x253 + x254;
-Tbase TZ x256 = x250 + x255;
-Tbase TZ x257 = x247 + x256;
-Tbase TZ x258 = x246 + x257;
-Tbase TZ x259 = x243 + x258;
-Tbase TZ x260 = x240 + x259;
-Tbase TZ x261 = 0x2;
-Tbase TZ x262 = x71 * x261;
-Tbase TZ x263 = x71 * x262;
-Tbase TZ x264 = 0x3;
-Tbase TZ x265 = x264 * x263;
-Tbase TZ x266 = x260 + x265;
-Tbase TZ x267 = x239 + x266;
-Tbase TZ x268 = 0x1c;
-Tbase TZ x269 = x267 >>> x268;
-Tbase TZ x270 = x71 * x78;
-Tbase TZ x271 = x72 * x77;
-Tbase TZ x272 = 0x2;
-Tbase TZ x273 = x76 * x272;
-Tbase TZ x274 = x73 * x273;
-Tbase TZ x275 = x74 * x75;
-Tbase TZ x276 = x75 * x74;
-Tbase TZ x277 = 0x2;
-Tbase TZ x278 = x73 * x277;
-Tbase TZ x279 = x76 * x278;
-Tbase TZ x280 = x77 * x72;
-Tbase TZ x281 = x78 * x71;
-Tbase TZ x282 = x280 + x281;
-Tbase TZ x283 = x279 + x282;
-Tbase TZ x284 = x276 + x283;
-Tbase TZ x285 = x275 + x284;
-Tbase TZ x286 = x274 + x285;
-Tbase TZ x287 = x271 + x286;
-Tbase TZ x288 = x270 + x287;
-Tbase TZ x289 = x269 + x288;
-Tbase TZ x290 = 0x1b;
-Tbase TZ x291 = x289 >>> x290;
-Tbase TZ x292 = 0x3;
-Tbase TZ x293 = x292 * x291;
-Tbase TZ x294 = 0xfffffff;
-Tbase TZ x295 = x109 & x294;
-Tbase TZ x296 = x293 + x295;
-Tbase TZ x297 = 0x1c;
-Tbase TZ x298 = x296 >>> x297;
-Tbase TZ x299 = 0xfffffff;
-Tbase TZ x300 = x137 & x299;
-Tbase TZ x301 = x298 + x300;
-Tbase TZ x302 = 0x7ffffff;
-Tbase TZ x303 = x289 & x302;
-Tbase TZ x304 = 0xfffffff;
-Tbase TZ x305 = x267 & x304;
-Tbase TZ x306 = 0x7ffffff;
-Tbase TZ x307 = x237 & x306;
-Tbase TZ x308 = 0xfffffff;
-Tbase TZ x309 = x217 & x308;
-Tbase TZ x310 = 0xfffffff;
-Tbase TZ x311 = x191 & x310;
-Tbase TZ x312 = 0x1c;
-Tbase TZ x313 = x301 >>> x312;
-Tbase TZ x314 = 0x7ffffff;
-Tbase TZ x315 = x159 & x314;
-Tbase TZ x316 = x313 + x315;
-Tbase TZ x317 = 0xfffffff;
-Tbase TZ x318 = x301 & x317;
-Tbase TZ x319 = 0xfffffff;
-Tbase TZ x320 = x296 & x319;
-Tbase TZ x321 = 0xffffffe;
-Tbase TZ x322 = x321 + x39;
-Tbase TZ x323 = x322 - x47;
-Tbase TZ x324 = 0x1ffffffe;
-Tbase TZ x325 = x324 + x40;
-Tbase TZ x326 = x325 - x48;
-Tbase TZ x327 = 0xffffffe;
-Tbase TZ x328 = x327 + x41;
-Tbase TZ x329 = x328 - x49;
-Tbase TZ x330 = 0x1ffffffe;
-Tbase TZ x331 = x330 + x42;
-Tbase TZ x332 = x331 - x50;
-Tbase TZ x333 = 0x1ffffffe;
-Tbase TZ x334 = x333 + x43;
-Tbase TZ x335 = x334 - x51;
-Tbase TZ x336 = 0xffffffe;
-Tbase TZ x337 = x336 + x44;
-Tbase TZ x338 = x337 - x52;
-Tbase TZ x339 = 0x1ffffffe;
-Tbase TZ x340 = x339 + x45;
-Tbase TZ x341 = x340 - x53;
-Tbase TZ x342 = 0x1ffffffa;
-Tbase TZ x343 = x342 + x46;
-Tbase TZ x344 = x343 - x54;
-Tbase TZ x345 = x344 * x344;
-Tbase TZ x346 = 0x2;
-Tbase TZ x347 = x341 * x346;
-Tbase TZ x348 = x323 * x347;
-Tbase TZ x349 = 0x2;
-Tbase TZ x350 = x338 * x349;
-Tbase TZ x351 = x326 * x350;
-Tbase TZ x352 = 0x2;
-Tbase TZ x353 = x335 * x352;
-Tbase TZ x354 = x329 * x353;
-Tbase TZ x355 = 0x2;
-Tbase TZ x356 = x332 * x355;
-Tbase TZ x357 = x332 * x356;
-Tbase TZ x358 = 0x2;
-Tbase TZ x359 = x329 * x358;
-Tbase TZ x360 = x335 * x359;
-Tbase TZ x361 = 0x2;
-Tbase TZ x362 = x326 * x361;
-Tbase TZ x363 = x338 * x362;
-Tbase TZ x364 = 0x2;
-Tbase TZ x365 = x323 * x364;
-Tbase TZ x366 = x341 * x365;
-Tbase TZ x367 = x363 + x366;
-Tbase TZ x368 = x360 + x367;
-Tbase TZ x369 = x357 + x368;
-Tbase TZ x370 = x354 + x369;
-Tbase TZ x371 = x351 + x370;
-Tbase TZ x372 = x348 + x371;
-Tbase TZ x373 = 0x3;
-Tbase TZ x374 = x373 * x372;
-Tbase TZ x375 = x345 + x374;
-Tbase TZ x376 = 0x1c;
-Tbase TZ x377 = x375 >>> x376;
-Tbase TZ x378 = x341 * x344;
-Tbase TZ x379 = x344 * x341;
-Tbase TZ x380 = x378 + x379;
-Tbase TZ x381 = 0x2;
-Tbase TZ x382 = x338 * x381;
-Tbase TZ x383 = x323 * x382;
-Tbase TZ x384 = x326 * x335;
-Tbase TZ x385 = 0x2;
-Tbase TZ x386 = x332 * x385;
-Tbase TZ x387 = x329 * x386;
-Tbase TZ x388 = 0x2;
-Tbase TZ x389 = x329 * x388;
-Tbase TZ x390 = x332 * x389;
-Tbase TZ x391 = x335 * x326;
-Tbase TZ x392 = 0x2;
-Tbase TZ x393 = x323 * x392;
-Tbase TZ x394 = x338 * x393;
-Tbase TZ x395 = x391 + x394;
-Tbase TZ x396 = x390 + x395;
-Tbase TZ x397 = x387 + x396;
-Tbase TZ x398 = x384 + x397;
-Tbase TZ x399 = x383 + x398;
-Tbase TZ x400 = 0x3;
-Tbase TZ x401 = x400 * x399;
-Tbase TZ x402 = x380 + x401;
-Tbase TZ x403 = x377 + x402;
-Tbase TZ x404 = 0x1c;
-Tbase TZ x405 = x403 >>> x404;
-Tbase TZ x406 = x338 * x344;
-Tbase TZ x407 = x341 * x341;
-Tbase TZ x408 = x344 * x338;
-Tbase TZ x409 = x407 + x408;
-Tbase TZ x410 = x406 + x409;
-Tbase TZ x411 = x323 * x335;
-Tbase TZ x412 = x326 * x332;
-Tbase TZ x413 = 0x2;
-Tbase TZ x414 = x329 * x413;
-Tbase TZ x415 = x329 * x414;
-Tbase TZ x416 = x332 * x326;
-Tbase TZ x417 = x335 * x323;
-Tbase TZ x418 = x416 + x417;
-Tbase TZ x419 = x415 + x418;
-Tbase TZ x420 = x412 + x419;
-Tbase TZ x421 = x411 + x420;
-Tbase TZ x422 = 0x3;
-Tbase TZ x423 = x422 * x421;
-Tbase TZ x424 = x410 + x423;
-Tbase TZ x425 = x405 + x424;
-Tbase TZ x426 = 0x1b;
-Tbase TZ x427 = x425 >>> x426;
-Tbase TZ x428 = x335 * x344;
-Tbase TZ x429 = 0x2;
-Tbase TZ x430 = x341 * x429;
-Tbase TZ x431 = x338 * x430;
-Tbase TZ x432 = 0x2;
-Tbase TZ x433 = x338 * x432;
-Tbase TZ x434 = x341 * x433;
-Tbase TZ x435 = x344 * x335;
-Tbase TZ x436 = x434 + x435;
-Tbase TZ x437 = x431 + x436;
-Tbase TZ x438 = x428 + x437;
-Tbase TZ x439 = 0x2;
-Tbase TZ x440 = x332 * x439;
-Tbase TZ x441 = x323 * x440;
-Tbase TZ x442 = 0x2;
-Tbase TZ x443 = x329 * x442;
-Tbase TZ x444 = x326 * x443;
-Tbase TZ x445 = 0x2;
-Tbase TZ x446 = x326 * x445;
-Tbase TZ x447 = x329 * x446;
-Tbase TZ x448 = 0x2;
-Tbase TZ x449 = x323 * x448;
-Tbase TZ x450 = x332 * x449;
-Tbase TZ x451 = x447 + x450;
-Tbase TZ x452 = x444 + x451;
-Tbase TZ x453 = x441 + x452;
-Tbase TZ x454 = 0x3;
-Tbase TZ x455 = x454 * x453;
-Tbase TZ x456 = x438 + x455;
-Tbase TZ x457 = x427 + x456;
-Tbase TZ x458 = 0x1c;
-Tbase TZ x459 = x457 >>> x458;
-Tbase TZ x460 = x332 * x344;
-Tbase TZ x461 = x335 * x341;
-Tbase TZ x462 = 0x2;
-Tbase TZ x463 = x338 * x462;
-Tbase TZ x464 = x338 * x463;
-Tbase TZ x465 = x341 * x335;
-Tbase TZ x466 = x344 * x332;
-Tbase TZ x467 = x465 + x466;
-Tbase TZ x468 = x464 + x467;
-Tbase TZ x469 = x461 + x468;
-Tbase TZ x470 = x460 + x469;
-Tbase TZ x471 = 0x2;
-Tbase TZ x472 = x329 * x471;
-Tbase TZ x473 = x323 * x472;
-Tbase TZ x474 = x326 * x326;
-Tbase TZ x475 = 0x2;
-Tbase TZ x476 = x323 * x475;
-Tbase TZ x477 = x329 * x476;
-Tbase TZ x478 = x474 + x477;
-Tbase TZ x479 = x473 + x478;
-Tbase TZ x480 = 0x3;
-Tbase TZ x481 = x480 * x479;
-Tbase TZ x482 = x470 + x481;
-Tbase TZ x483 = x459 + x482;
-Tbase TZ x484 = 0x1c;
-Tbase TZ x485 = x483 >>> x484;
-Tbase TZ x486 = x329 * x344;
-Tbase TZ x487 = x332 * x341;
-Tbase TZ x488 = x335 * x338;
-Tbase TZ x489 = x338 * x335;
-Tbase TZ x490 = x341 * x332;
-Tbase TZ x491 = x344 * x329;
-Tbase TZ x492 = x490 + x491;
-Tbase TZ x493 = x489 + x492;
-Tbase TZ x494 = x488 + x493;
-Tbase TZ x495 = x487 + x494;
-Tbase TZ x496 = x486 + x495;
-Tbase TZ x497 = x323 * x326;
-Tbase TZ x498 = x326 * x323;
-Tbase TZ x499 = x497 + x498;
-Tbase TZ x500 = 0x3;
-Tbase TZ x501 = x500 * x499;
-Tbase TZ x502 = x496 + x501;
-Tbase TZ x503 = x485 + x502;
-Tbase TZ x504 = 0x1b;
-Tbase TZ x505 = x503 >>> x504;
-Tbase TZ x506 = x326 * x344;
-Tbase TZ x507 = 0x2;
-Tbase TZ x508 = x341 * x507;
-Tbase TZ x509 = x329 * x508;
-Tbase TZ x510 = 0x2;
-Tbase TZ x511 = x338 * x510;
-Tbase TZ x512 = x332 * x511;
-Tbase TZ x513 = x335 * x335;
-Tbase TZ x514 = 0x2;
-Tbase TZ x515 = x332 * x514;
-Tbase TZ x516 = x338 * x515;
-Tbase TZ x517 = 0x2;
-Tbase TZ x518 = x329 * x517;
-Tbase TZ x519 = x341 * x518;
-Tbase TZ x520 = x344 * x326;
-Tbase TZ x521 = x519 + x520;
-Tbase TZ x522 = x516 + x521;
-Tbase TZ x523 = x513 + x522;
-Tbase TZ x524 = x512 + x523;
-Tbase TZ x525 = x509 + x524;
-Tbase TZ x526 = x506 + x525;
-Tbase TZ x527 = 0x2;
-Tbase TZ x528 = x323 * x527;
-Tbase TZ x529 = x323 * x528;
-Tbase TZ x530 = 0x3;
-Tbase TZ x531 = x530 * x529;
-Tbase TZ x532 = x526 + x531;
-Tbase TZ x533 = x505 + x532;
-Tbase TZ x534 = 0x1c;
-Tbase TZ x535 = x533 >>> x534;
-Tbase TZ x536 = x323 * x344;
-Tbase TZ x537 = x326 * x341;
-Tbase TZ x538 = 0x2;
-Tbase TZ x539 = x338 * x538;
-Tbase TZ x540 = x329 * x539;
-Tbase TZ x541 = x332 * x335;
-Tbase TZ x542 = x335 * x332;
-Tbase TZ x543 = 0x2;
-Tbase TZ x544 = x329 * x543;
-Tbase TZ x545 = x338 * x544;
-Tbase TZ x546 = x341 * x326;
-Tbase TZ x547 = x344 * x323;
-Tbase TZ x548 = x546 + x547;
-Tbase TZ x549 = x545 + x548;
-Tbase TZ x550 = x542 + x549;
-Tbase TZ x551 = x541 + x550;
-Tbase TZ x552 = x540 + x551;
-Tbase TZ x553 = x537 + x552;
-Tbase TZ x554 = x536 + x553;
-Tbase TZ x555 = x535 + x554;
-Tbase TZ x556 = 0x1b;
-Tbase TZ x557 = x555 >>> x556;
-Tbase TZ x558 = 0x3;
-Tbase TZ x559 = x558 * x557;
-Tbase TZ x560 = 0xfffffff;
-Tbase TZ x561 = x375 & x560;
-Tbase TZ x562 = x559 + x561;
-Tbase TZ x563 = 0x1c;
-Tbase TZ x564 = x562 >>> x563;
-Tbase TZ x565 = 0xfffffff;
-Tbase TZ x566 = x403 & x565;
-Tbase TZ x567 = x564 + x566;
-Tbase TZ x568 = 0x7ffffff;
-Tbase TZ x569 = x555 & x568;
-Tbase TZ x570 = 0xfffffff;
-Tbase TZ x571 = x533 & x570;
-Tbase TZ x572 = 0x7ffffff;
-Tbase TZ x573 = x503 & x572;
-Tbase TZ x574 = 0xfffffff;
-Tbase TZ x575 = x483 & x574;
-Tbase TZ x576 = 0xfffffff;
-Tbase TZ x577 = x457 & x576;
-Tbase TZ x578 = 0x1c;
-Tbase TZ x579 = x567 >>> x578;
-Tbase TZ x580 = 0x7ffffff;
-Tbase TZ x581 = x425 & x580;
-Tbase TZ x582 = x579 + x581;
-Tbase TZ x583 = 0xfffffff;
-Tbase TZ x584 = x567 & x583;
-Tbase TZ x585 = 0xfffffff;
-Tbase TZ x586 = x562 & x585;
-Tbase TZ x587 = 0xffffffe;
-Tbase TZ x588 = x587 + x303;
-Tbase TZ x589 = x588 - x569;
-Tbase TZ x590 = 0x1ffffffe;
-Tbase TZ x591 = x590 + x305;
-Tbase TZ x592 = x591 - x571;
-Tbase TZ x593 = 0xffffffe;
-Tbase TZ x594 = x593 + x307;
-Tbase TZ x595 = x594 - x573;
-Tbase TZ x596 = 0x1ffffffe;
-Tbase TZ x597 = x596 + x309;
-Tbase TZ x598 = x597 - x575;
-Tbase TZ x599 = 0x1ffffffe;
-Tbase TZ x600 = x599 + x311;
-Tbase TZ x601 = x600 - x577;
-Tbase TZ x602 = 0xffffffe;
-Tbase TZ x603 = x602 + x316;
-Tbase TZ x604 = x603 - x582;
-Tbase TZ x605 = 0x1ffffffe;
-Tbase TZ x606 = x605 + x318;
-Tbase TZ x607 = x606 - x584;
-Tbase TZ x608 = 0x1ffffffa;
-Tbase TZ x609 = x608 + x320;
-Tbase TZ x610 = x609 - x586;
-Tbase TZ x611 = x55 + x63;
-Tbase TZ x612 = x56 + x64;
-Tbase TZ x613 = x57 + x65;
-Tbase TZ x614 = x58 + x66;
-Tbase TZ x615 = x59 + x67;
-Tbase TZ x616 = x60 + x68;
-Tbase TZ x617 = x61 + x69;
-Tbase TZ x618 = x62 + x70;
-Tbase TZ x619 = 0xffffffe;
-Tbase TZ x620 = x619 + x55;
-Tbase TZ x621 = x620 - x63;
-Tbase TZ x622 = 0x1ffffffe;
-Tbase TZ x623 = x622 + x56;
-Tbase TZ x624 = x623 - x64;
-Tbase TZ x625 = 0xffffffe;
-Tbase TZ x626 = x625 + x57;
-Tbase TZ x627 = x626 - x65;
-Tbase TZ x628 = 0x1ffffffe;
-Tbase TZ x629 = x628 + x58;
-Tbase TZ x630 = x629 - x66;
-Tbase TZ x631 = 0x1ffffffe;
-Tbase TZ x632 = x631 + x59;
-Tbase TZ x633 = x632 - x67;
-Tbase TZ x634 = 0xffffffe;
-Tbase TZ x635 = x634 + x60;
-Tbase TZ x636 = x635 - x68;
-Tbase TZ x637 = 0x1ffffffe;
-Tbase TZ x638 = x637 + x61;
-Tbase TZ x639 = x638 - x69;
-Tbase TZ x640 = 0x1ffffffa;
-Tbase TZ x641 = x640 + x62;
-Tbase TZ x642 = x641 - x70;
-Tbase TZ x643 = x642 * x78;
-Tbase TZ x644 = 0x2;
-Tbase TZ x645 = x77 * x644;
-Tbase TZ x646 = x621 * x645;
-Tbase TZ x647 = 0x2;
-Tbase TZ x648 = x76 * x647;
-Tbase TZ x649 = x624 * x648;
-Tbase TZ x650 = 0x2;
-Tbase TZ x651 = x75 * x650;
-Tbase TZ x652 = x627 * x651;
-Tbase TZ x653 = 0x2;
-Tbase TZ x654 = x74 * x653;
-Tbase TZ x655 = x630 * x654;
-Tbase TZ x656 = 0x2;
-Tbase TZ x657 = x73 * x656;
-Tbase TZ x658 = x633 * x657;
-Tbase TZ x659 = 0x2;
-Tbase TZ x660 = x72 * x659;
-Tbase TZ x661 = x636 * x660;
-Tbase TZ x662 = 0x2;
-Tbase TZ x663 = x71 * x662;
-Tbase TZ x664 = x639 * x663;
-Tbase TZ x665 = x661 + x664;
-Tbase TZ x666 = x658 + x665;
-Tbase TZ x667 = x655 + x666;
-Tbase TZ x668 = x652 + x667;
-Tbase TZ x669 = x649 + x668;
-Tbase TZ x670 = x646 + x669;
-Tbase TZ x671 = 0x3;
-Tbase TZ x672 = x671 * x670;
-Tbase TZ x673 = x643 + x672;
-Tbase TZ x674 = 0x1c;
-Tbase TZ x675 = x673 >>> x674;
-Tbase TZ x676 = x639 * x78;
-Tbase TZ x677 = x642 * x77;
-Tbase TZ x678 = x676 + x677;
-Tbase TZ x679 = 0x2;
-Tbase TZ x680 = x76 * x679;
-Tbase TZ x681 = x621 * x680;
-Tbase TZ x682 = x624 * x75;
-Tbase TZ x683 = 0x2;
-Tbase TZ x684 = x74 * x683;
-Tbase TZ x685 = x627 * x684;
-Tbase TZ x686 = 0x2;
-Tbase TZ x687 = x73 * x686;
-Tbase TZ x688 = x630 * x687;
-Tbase TZ x689 = x633 * x72;
-Tbase TZ x690 = 0x2;
-Tbase TZ x691 = x71 * x690;
-Tbase TZ x692 = x636 * x691;
-Tbase TZ x693 = x689 + x692;
-Tbase TZ x694 = x688 + x693;
-Tbase TZ x695 = x685 + x694;
-Tbase TZ x696 = x682 + x695;
-Tbase TZ x697 = x681 + x696;
-Tbase TZ x698 = 0x3;
-Tbase TZ x699 = x698 * x697;
-Tbase TZ x700 = x678 + x699;
-Tbase TZ x701 = x675 + x700;
-Tbase TZ x702 = 0x1c;
-Tbase TZ x703 = x701 >>> x702;
-Tbase TZ x704 = x636 * x78;
-Tbase TZ x705 = x639 * x77;
-Tbase TZ x706 = x642 * x76;
-Tbase TZ x707 = x705 + x706;
-Tbase TZ x708 = x704 + x707;
-Tbase TZ x709 = x621 * x75;
-Tbase TZ x710 = x624 * x74;
-Tbase TZ x711 = 0x2;
-Tbase TZ x712 = x73 * x711;
-Tbase TZ x713 = x627 * x712;
-Tbase TZ x714 = x630 * x72;
-Tbase TZ x715 = x633 * x71;
-Tbase TZ x716 = x714 + x715;
-Tbase TZ x717 = x713 + x716;
-Tbase TZ x718 = x710 + x717;
-Tbase TZ x719 = x709 + x718;
-Tbase TZ x720 = 0x3;
-Tbase TZ x721 = x720 * x719;
-Tbase TZ x722 = x708 + x721;
-Tbase TZ x723 = x703 + x722;
-Tbase TZ x724 = 0x1b;
-Tbase TZ x725 = x723 >>> x724;
-Tbase TZ x726 = x633 * x78;
-Tbase TZ x727 = 0x2;
-Tbase TZ x728 = x77 * x727;
-Tbase TZ x729 = x636 * x728;
-Tbase TZ x730 = 0x2;
-Tbase TZ x731 = x76 * x730;
-Tbase TZ x732 = x639 * x731;
-Tbase TZ x733 = x642 * x75;
-Tbase TZ x734 = x732 + x733;
-Tbase TZ x735 = x729 + x734;
-Tbase TZ x736 = x726 + x735;
-Tbase TZ x737 = 0x2;
-Tbase TZ x738 = x74 * x737;
-Tbase TZ x739 = x621 * x738;
-Tbase TZ x740 = 0x2;
-Tbase TZ x741 = x73 * x740;
-Tbase TZ x742 = x624 * x741;
-Tbase TZ x743 = 0x2;
-Tbase TZ x744 = x72 * x743;
-Tbase TZ x745 = x627 * x744;
-Tbase TZ x746 = 0x2;
-Tbase TZ x747 = x71 * x746;
-Tbase TZ x748 = x630 * x747;
-Tbase TZ x749 = x745 + x748;
-Tbase TZ x750 = x742 + x749;
-Tbase TZ x751 = x739 + x750;
-Tbase TZ x752 = 0x3;
-Tbase TZ x753 = x752 * x751;
-Tbase TZ x754 = x736 + x753;
-Tbase TZ x755 = x725 + x754;
-Tbase TZ x756 = 0x1c;
-Tbase TZ x757 = x755 >>> x756;
-Tbase TZ x758 = x630 * x78;
-Tbase TZ x759 = x633 * x77;
-Tbase TZ x760 = 0x2;
-Tbase TZ x761 = x76 * x760;
-Tbase TZ x762 = x636 * x761;
-Tbase TZ x763 = x639 * x75;
-Tbase TZ x764 = x642 * x74;
-Tbase TZ x765 = x763 + x764;
-Tbase TZ x766 = x762 + x765;
-Tbase TZ x767 = x759 + x766;
-Tbase TZ x768 = x758 + x767;
-Tbase TZ x769 = 0x2;
-Tbase TZ x770 = x73 * x769;
-Tbase TZ x771 = x621 * x770;
-Tbase TZ x772 = x624 * x72;
-Tbase TZ x773 = 0x2;
-Tbase TZ x774 = x71 * x773;
-Tbase TZ x775 = x627 * x774;
-Tbase TZ x776 = x772 + x775;
-Tbase TZ x777 = x771 + x776;
-Tbase TZ x778 = 0x3;
-Tbase TZ x779 = x778 * x777;
-Tbase TZ x780 = x768 + x779;
-Tbase TZ x781 = x757 + x780;
-Tbase TZ x782 = 0x1c;
-Tbase TZ x783 = x781 >>> x782;
-Tbase TZ x784 = x627 * x78;
-Tbase TZ x785 = x630 * x77;
-Tbase TZ x786 = x633 * x76;
-Tbase TZ x787 = x636 * x75;
-Tbase TZ x788 = x639 * x74;
-Tbase TZ x789 = x642 * x73;
-Tbase TZ x790 = x788 + x789;
-Tbase TZ x791 = x787 + x790;
-Tbase TZ x792 = x786 + x791;
-Tbase TZ x793 = x785 + x792;
-Tbase TZ x794 = x784 + x793;
-Tbase TZ x795 = x621 * x72;
-Tbase TZ x796 = x624 * x71;
-Tbase TZ x797 = x795 + x796;
-Tbase TZ x798 = 0x3;
-Tbase TZ x799 = x798 * x797;
-Tbase TZ x800 = x794 + x799;
-Tbase TZ x801 = x783 + x800;
-Tbase TZ x802 = 0x1b;
-Tbase TZ x803 = x801 >>> x802;
-Tbase TZ x804 = x624 * x78;
-Tbase TZ x805 = 0x2;
-Tbase TZ x806 = x77 * x805;
-Tbase TZ x807 = x627 * x806;
-Tbase TZ x808 = 0x2;
-Tbase TZ x809 = x76 * x808;
-Tbase TZ x810 = x630 * x809;
-Tbase TZ x811 = x633 * x75;
-Tbase TZ x812 = 0x2;
-Tbase TZ x813 = x74 * x812;
-Tbase TZ x814 = x636 * x813;
-Tbase TZ x815 = 0x2;
-Tbase TZ x816 = x73 * x815;
-Tbase TZ x817 = x639 * x816;
-Tbase TZ x818 = x642 * x72;
-Tbase TZ x819 = x817 + x818;
-Tbase TZ x820 = x814 + x819;
-Tbase TZ x821 = x811 + x820;
-Tbase TZ x822 = x810 + x821;
-Tbase TZ x823 = x807 + x822;
-Tbase TZ x824 = x804 + x823;
-Tbase TZ x825 = 0x2;
-Tbase TZ x826 = x71 * x825;
-Tbase TZ x827 = x621 * x826;
-Tbase TZ x828 = 0x3;
-Tbase TZ x829 = x828 * x827;
-Tbase TZ x830 = x824 + x829;
-Tbase TZ x831 = x803 + x830;
-Tbase TZ x832 = 0x1c;
-Tbase TZ x833 = x831 >>> x832;
-Tbase TZ x834 = x621 * x78;
-Tbase TZ x835 = x624 * x77;
-Tbase TZ x836 = 0x2;
-Tbase TZ x837 = x76 * x836;
-Tbase TZ x838 = x627 * x837;
-Tbase TZ x839 = x630 * x75;
-Tbase TZ x840 = x633 * x74;
-Tbase TZ x841 = 0x2;
-Tbase TZ x842 = x73 * x841;
-Tbase TZ x843 = x636 * x842;
-Tbase TZ x844 = x639 * x72;
-Tbase TZ x845 = x642 * x71;
-Tbase TZ x846 = x844 + x845;
-Tbase TZ x847 = x843 + x846;
-Tbase TZ x848 = x840 + x847;
-Tbase TZ x849 = x839 + x848;
-Tbase TZ x850 = x838 + x849;
-Tbase TZ x851 = x835 + x850;
-Tbase TZ x852 = x834 + x851;
-Tbase TZ x853 = x833 + x852;
-Tbase TZ x854 = 0x1b;
-Tbase TZ x855 = x853 >>> x854;
-Tbase TZ x856 = 0x3;
-Tbase TZ x857 = x856 * x855;
-Tbase TZ x858 = 0xfffffff;
-Tbase TZ x859 = x673 & x858;
-Tbase TZ x860 = x857 + x859;
-Tbase TZ x861 = 0x1c;
-Tbase TZ x862 = x860 >>> x861;
-Tbase TZ x863 = 0xfffffff;
-Tbase TZ x864 = x701 & x863;
-Tbase TZ x865 = x862 + x864;
-Tbase TZ x866 = 0x7ffffff;
-Tbase TZ x867 = x853 & x866;
-Tbase TZ x868 = 0xfffffff;
-Tbase TZ x869 = x831 & x868;
-Tbase TZ x870 = 0x7ffffff;
-Tbase TZ x871 = x801 & x870;
-Tbase TZ x872 = 0xfffffff;
-Tbase TZ x873 = x781 & x872;
-Tbase TZ x874 = 0xfffffff;
-Tbase TZ x875 = x755 & x874;
-Tbase TZ x876 = 0x1c;
-Tbase TZ x877 = x865 >>> x876;
-Tbase TZ x878 = 0x7ffffff;
-Tbase TZ x879 = x723 & x878;
-Tbase TZ x880 = x877 + x879;
-Tbase TZ x881 = 0xfffffff;
-Tbase TZ x882 = x865 & x881;
-Tbase TZ x883 = 0xfffffff;
-Tbase TZ x884 = x860 & x883;
-Tbase TZ x885 = x618 * x344;
-Tbase TZ x886 = 0x2;
-Tbase TZ x887 = x341 * x886;
-Tbase TZ x888 = x611 * x887;
-Tbase TZ x889 = 0x2;
-Tbase TZ x890 = x338 * x889;
-Tbase TZ x891 = x612 * x890;
-Tbase TZ x892 = 0x2;
-Tbase TZ x893 = x335 * x892;
-Tbase TZ x894 = x613 * x893;
-Tbase TZ x895 = 0x2;
-Tbase TZ x896 = x332 * x895;
-Tbase TZ x897 = x614 * x896;
-Tbase TZ x898 = 0x2;
-Tbase TZ x899 = x329 * x898;
-Tbase TZ x900 = x615 * x899;
-Tbase TZ x901 = 0x2;
-Tbase TZ x902 = x326 * x901;
-Tbase TZ x903 = x616 * x902;
-Tbase TZ x904 = 0x2;
-Tbase TZ x905 = x323 * x904;
-Tbase TZ x906 = x617 * x905;
-Tbase TZ x907 = x903 + x906;
-Tbase TZ x908 = x900 + x907;
-Tbase TZ x909 = x897 + x908;
-Tbase TZ x910 = x894 + x909;
-Tbase TZ x911 = x891 + x910;
-Tbase TZ x912 = x888 + x911;
-Tbase TZ x913 = 0x3;
-Tbase TZ x914 = x913 * x912;
-Tbase TZ x915 = x885 + x914;
-Tbase TZ x916 = 0x1c;
-Tbase TZ x917 = x915 >>> x916;
-Tbase TZ x918 = x617 * x344;
-Tbase TZ x919 = x618 * x341;
-Tbase TZ x920 = x918 + x919;
-Tbase TZ x921 = 0x2;
-Tbase TZ x922 = x338 * x921;
-Tbase TZ x923 = x611 * x922;
-Tbase TZ x924 = x612 * x335;
-Tbase TZ x925 = 0x2;
-Tbase TZ x926 = x332 * x925;
-Tbase TZ x927 = x613 * x926;
-Tbase TZ x928 = 0x2;
-Tbase TZ x929 = x329 * x928;
-Tbase TZ x930 = x614 * x929;
-Tbase TZ x931 = x615 * x326;
-Tbase TZ x932 = 0x2;
-Tbase TZ x933 = x323 * x932;
-Tbase TZ x934 = x616 * x933;
-Tbase TZ x935 = x931 + x934;
-Tbase TZ x936 = x930 + x935;
-Tbase TZ x937 = x927 + x936;
-Tbase TZ x938 = x924 + x937;
-Tbase TZ x939 = x923 + x938;
-Tbase TZ x940 = 0x3;
-Tbase TZ x941 = x940 * x939;
-Tbase TZ x942 = x920 + x941;
-Tbase TZ x943 = x917 + x942;
-Tbase TZ x944 = 0x1c;
-Tbase TZ x945 = x943 >>> x944;
-Tbase TZ x946 = x616 * x344;
-Tbase TZ x947 = x617 * x341;
-Tbase TZ x948 = x618 * x338;
-Tbase TZ x949 = x947 + x948;
-Tbase TZ x950 = x946 + x949;
-Tbase TZ x951 = x611 * x335;
-Tbase TZ x952 = x612 * x332;
-Tbase TZ x953 = 0x2;
-Tbase TZ x954 = x329 * x953;
-Tbase TZ x955 = x613 * x954;
-Tbase TZ x956 = x614 * x326;
-Tbase TZ x957 = x615 * x323;
-Tbase TZ x958 = x956 + x957;
-Tbase TZ x959 = x955 + x958;
-Tbase TZ x960 = x952 + x959;
-Tbase TZ x961 = x951 + x960;
-Tbase TZ x962 = 0x3;
-Tbase TZ x963 = x962 * x961;
-Tbase TZ x964 = x950 + x963;
-Tbase TZ x965 = x945 + x964;
-Tbase TZ x966 = 0x1b;
-Tbase TZ x967 = x965 >>> x966;
-Tbase TZ x968 = x615 * x344;
-Tbase TZ x969 = 0x2;
-Tbase TZ x970 = x341 * x969;
-Tbase TZ x971 = x616 * x970;
-Tbase TZ x972 = 0x2;
-Tbase TZ x973 = x338 * x972;
-Tbase TZ x974 = x617 * x973;
-Tbase TZ x975 = x618 * x335;
-Tbase TZ x976 = x974 + x975;
-Tbase TZ x977 = x971 + x976;
-Tbase TZ x978 = x968 + x977;
-Tbase TZ x979 = 0x2;
-Tbase TZ x980 = x332 * x979;
-Tbase TZ x981 = x611 * x980;
-Tbase TZ x982 = 0x2;
-Tbase TZ x983 = x329 * x982;
-Tbase TZ x984 = x612 * x983;
-Tbase TZ x985 = 0x2;
-Tbase TZ x986 = x326 * x985;
-Tbase TZ x987 = x613 * x986;
-Tbase TZ x988 = 0x2;
-Tbase TZ x989 = x323 * x988;
-Tbase TZ x990 = x614 * x989;
-Tbase TZ x991 = x987 + x990;
-Tbase TZ x992 = x984 + x991;
-Tbase TZ x993 = x981 + x992;
-Tbase TZ x994 = 0x3;
-Tbase TZ x995 = x994 * x993;
-Tbase TZ x996 = x978 + x995;
-Tbase TZ x997 = x967 + x996;
-Tbase TZ x998 = 0x1c;
-Tbase TZ x999 = x997 >>> x998;
-Tbase TZ x1000 = x614 * x344;
-Tbase TZ x1001 = x615 * x341;
-Tbase TZ x1002 = 0x2;
-Tbase TZ x1003 = x338 * x1002;
-Tbase TZ x1004 = x616 * x1003;
-Tbase TZ x1005 = x617 * x335;
-Tbase TZ x1006 = x618 * x332;
-Tbase TZ x1007 = x1005 + x1006;
-Tbase TZ x1008 = x1004 + x1007;
-Tbase TZ x1009 = x1001 + x1008;
-Tbase TZ x1010 = x1000 + x1009;
-Tbase TZ x1011 = 0x2;
-Tbase TZ x1012 = x329 * x1011;
-Tbase TZ x1013 = x611 * x1012;
-Tbase TZ x1014 = x612 * x326;
-Tbase TZ x1015 = 0x2;
-Tbase TZ x1016 = x323 * x1015;
-Tbase TZ x1017 = x613 * x1016;
-Tbase TZ x1018 = x1014 + x1017;
-Tbase TZ x1019 = x1013 + x1018;
-Tbase TZ x1020 = 0x3;
-Tbase TZ x1021 = x1020 * x1019;
-Tbase TZ x1022 = x1010 + x1021;
-Tbase TZ x1023 = x999 + x1022;
-Tbase TZ x1024 = 0x1c;
-Tbase TZ x1025 = x1023 >>> x1024;
-Tbase TZ x1026 = x613 * x344;
-Tbase TZ x1027 = x614 * x341;
-Tbase TZ x1028 = x615 * x338;
-Tbase TZ x1029 = x616 * x335;
-Tbase TZ x1030 = x617 * x332;
-Tbase TZ x1031 = x618 * x329;
-Tbase TZ x1032 = x1030 + x1031;
-Tbase TZ x1033 = x1029 + x1032;
-Tbase TZ x1034 = x1028 + x1033;
-Tbase TZ x1035 = x1027 + x1034;
-Tbase TZ x1036 = x1026 + x1035;
-Tbase TZ x1037 = x611 * x326;
-Tbase TZ x1038 = x612 * x323;
-Tbase TZ x1039 = x1037 + x1038;
-Tbase TZ x1040 = 0x3;
-Tbase TZ x1041 = x1040 * x1039;
-Tbase TZ x1042 = x1036 + x1041;
-Tbase TZ x1043 = x1025 + x1042;
-Tbase TZ x1044 = 0x1b;
-Tbase TZ x1045 = x1043 >>> x1044;
-Tbase TZ x1046 = x612 * x344;
-Tbase TZ x1047 = 0x2;
-Tbase TZ x1048 = x341 * x1047;
-Tbase TZ x1049 = x613 * x1048;
-Tbase TZ x1050 = 0x2;
-Tbase TZ x1051 = x338 * x1050;
-Tbase TZ x1052 = x614 * x1051;
-Tbase TZ x1053 = x615 * x335;
-Tbase TZ x1054 = 0x2;
-Tbase TZ x1055 = x332 * x1054;
-Tbase TZ x1056 = x616 * x1055;
-Tbase TZ x1057 = 0x2;
-Tbase TZ x1058 = x329 * x1057;
-Tbase TZ x1059 = x617 * x1058;
-Tbase TZ x1060 = x618 * x326;
-Tbase TZ x1061 = x1059 + x1060;
-Tbase TZ x1062 = x1056 + x1061;
-Tbase TZ x1063 = x1053 + x1062;
-Tbase TZ x1064 = x1052 + x1063;
-Tbase TZ x1065 = x1049 + x1064;
-Tbase TZ x1066 = x1046 + x1065;
-Tbase TZ x1067 = 0x2;
-Tbase TZ x1068 = x323 * x1067;
-Tbase TZ x1069 = x611 * x1068;
-Tbase TZ x1070 = 0x3;
-Tbase TZ x1071 = x1070 * x1069;
-Tbase TZ x1072 = x1066 + x1071;
-Tbase TZ x1073 = x1045 + x1072;
-Tbase TZ x1074 = 0x1c;
-Tbase TZ x1075 = x1073 >>> x1074;
-Tbase TZ x1076 = x611 * x344;
-Tbase TZ x1077 = x612 * x341;
-Tbase TZ x1078 = 0x2;
-Tbase TZ x1079 = x338 * x1078;
-Tbase TZ x1080 = x613 * x1079;
-Tbase TZ x1081 = x614 * x335;
-Tbase TZ x1082 = x615 * x332;
-Tbase TZ x1083 = 0x2;
-Tbase TZ x1084 = x329 * x1083;
-Tbase TZ x1085 = x616 * x1084;
-Tbase TZ x1086 = x617 * x326;
-Tbase TZ x1087 = x618 * x323;
-Tbase TZ x1088 = x1086 + x1087;
-Tbase TZ x1089 = x1085 + x1088;
-Tbase TZ x1090 = x1082 + x1089;
-Tbase TZ x1091 = x1081 + x1090;
-Tbase TZ x1092 = x1080 + x1091;
-Tbase TZ x1093 = x1077 + x1092;
-Tbase TZ x1094 = x1076 + x1093;
-Tbase TZ x1095 = x1075 + x1094;
-Tbase TZ x1096 = 0x1b;
-Tbase TZ x1097 = x1095 >>> x1096;
-Tbase TZ x1098 = 0x3;
-Tbase TZ x1099 = x1098 * x1097;
-Tbase TZ x1100 = 0xfffffff;
-Tbase TZ x1101 = x915 & x1100;
-Tbase TZ x1102 = x1099 + x1101;
-Tbase TZ x1103 = 0x1c;
-Tbase TZ x1104 = x1102 >>> x1103;
-Tbase TZ x1105 = 0xfffffff;
-Tbase TZ x1106 = x943 & x1105;
-Tbase TZ x1107 = x1104 + x1106;
-Tbase TZ x1108 = 0x7ffffff;
-Tbase TZ x1109 = x1095 & x1108;
-Tbase TZ x1110 = 0xfffffff;
-Tbase TZ x1111 = x1073 & x1110;
-Tbase TZ x1112 = 0x7ffffff;
-Tbase TZ x1113 = x1043 & x1112;
-Tbase TZ x1114 = 0xfffffff;
-Tbase TZ x1115 = x1023 & x1114;
-Tbase TZ x1116 = 0xfffffff;
-Tbase TZ x1117 = x997 & x1116;
-Tbase TZ x1118 = 0x1c;
-Tbase TZ x1119 = x1107 >>> x1118;
-Tbase TZ x1120 = 0x7ffffff;
-Tbase TZ x1121 = x965 & x1120;
-Tbase TZ x1122 = x1119 + x1121;
-Tbase TZ x1123 = 0xfffffff;
-Tbase TZ x1124 = x1107 & x1123;
-Tbase TZ x1125 = 0xfffffff;
-Tbase TZ x1126 = x1102 & x1125;
-Tbase TZ x1127 = x867 + x1109;
-Tbase TZ x1128 = x869 + x1111;
-Tbase TZ x1129 = x871 + x1113;
-Tbase TZ x1130 = x873 + x1115;
-Tbase TZ x1131 = x875 + x1117;
-Tbase TZ x1132 = x880 + x1122;
-Tbase TZ x1133 = x882 + x1124;
-Tbase TZ x1134 = x884 + x1126;
-Tbase TZ x1135 = x867 + x1109;
-Tbase TZ x1136 = x869 + x1111;
-Tbase TZ x1137 = x871 + x1113;
-Tbase TZ x1138 = x873 + x1115;
-Tbase TZ x1139 = x875 + x1117;
-Tbase TZ x1140 = x880 + x1122;
-Tbase TZ x1141 = x882 + x1124;
-Tbase TZ x1142 = x884 + x1126;
-Tbase TZ x1143 = x1134 * x1142;
-Tbase TZ x1144 = 0x2;
-Tbase TZ x1145 = x1141 * x1144;
-Tbase TZ x1146 = x1127 * x1145;
-Tbase TZ x1147 = 0x2;
-Tbase TZ x1148 = x1140 * x1147;
-Tbase TZ x1149 = x1128 * x1148;
-Tbase TZ x1150 = 0x2;
-Tbase TZ x1151 = x1139 * x1150;
-Tbase TZ x1152 = x1129 * x1151;
-Tbase TZ x1153 = 0x2;
-Tbase TZ x1154 = x1138 * x1153;
-Tbase TZ x1155 = x1130 * x1154;
-Tbase TZ x1156 = 0x2;
-Tbase TZ x1157 = x1137 * x1156;
-Tbase TZ x1158 = x1131 * x1157;
-Tbase TZ x1159 = 0x2;
-Tbase TZ x1160 = x1136 * x1159;
-Tbase TZ x1161 = x1132 * x1160;
-Tbase TZ x1162 = 0x2;
-Tbase TZ x1163 = x1135 * x1162;
-Tbase TZ x1164 = x1133 * x1163;
-Tbase TZ x1165 = x1161 + x1164;
-Tbase TZ x1166 = x1158 + x1165;
-Tbase TZ x1167 = x1155 + x1166;
-Tbase TZ x1168 = x1152 + x1167;
-Tbase TZ x1169 = x1149 + x1168;
-Tbase TZ x1170 = x1146 + x1169;
-Tbase TZ x1171 = 0x3;
-Tbase TZ x1172 = x1171 * x1170;
-Tbase TZ x1173 = x1143 + x1172;
-Tbase TZ x1174 = 0x1c;
-Tbase TZ x1175 = x1173 >>> x1174;
-Tbase TZ x1176 = x1133 * x1142;
-Tbase TZ x1177 = x1134 * x1141;
-Tbase TZ x1178 = x1176 + x1177;
-Tbase TZ x1179 = 0x2;
-Tbase TZ x1180 = x1140 * x1179;
-Tbase TZ x1181 = x1127 * x1180;
-Tbase TZ x1182 = x1128 * x1139;
-Tbase TZ x1183 = 0x2;
-Tbase TZ x1184 = x1138 * x1183;
-Tbase TZ x1185 = x1129 * x1184;
-Tbase TZ x1186 = 0x2;
-Tbase TZ x1187 = x1137 * x1186;
-Tbase TZ x1188 = x1130 * x1187;
-Tbase TZ x1189 = x1131 * x1136;
-Tbase TZ x1190 = 0x2;
-Tbase TZ x1191 = x1135 * x1190;
-Tbase TZ x1192 = x1132 * x1191;
-Tbase TZ x1193 = x1189 + x1192;
-Tbase TZ x1194 = x1188 + x1193;
-Tbase TZ x1195 = x1185 + x1194;
-Tbase TZ x1196 = x1182 + x1195;
-Tbase TZ x1197 = x1181 + x1196;
-Tbase TZ x1198 = 0x3;
-Tbase TZ x1199 = x1198 * x1197;
-Tbase TZ x1200 = x1178 + x1199;
-Tbase TZ x1201 = x1175 + x1200;
-Tbase TZ x1202 = 0x1c;
-Tbase TZ x1203 = x1201 >>> x1202;
-Tbase TZ x1204 = x1132 * x1142;
-Tbase TZ x1205 = x1133 * x1141;
-Tbase TZ x1206 = x1134 * x1140;
-Tbase TZ x1207 = x1205 + x1206;
-Tbase TZ x1208 = x1204 + x1207;
-Tbase TZ x1209 = x1127 * x1139;
-Tbase TZ x1210 = x1128 * x1138;
-Tbase TZ x1211 = 0x2;
-Tbase TZ x1212 = x1137 * x1211;
-Tbase TZ x1213 = x1129 * x1212;
-Tbase TZ x1214 = x1130 * x1136;
-Tbase TZ x1215 = x1131 * x1135;
-Tbase TZ x1216 = x1214 + x1215;
-Tbase TZ x1217 = x1213 + x1216;
-Tbase TZ x1218 = x1210 + x1217;
-Tbase TZ x1219 = x1209 + x1218;
-Tbase TZ x1220 = 0x3;
-Tbase TZ x1221 = x1220 * x1219;
-Tbase TZ x1222 = x1208 + x1221;
-Tbase TZ x1223 = x1203 + x1222;
-Tbase TZ x1224 = 0x1b;
-Tbase TZ x1225 = x1223 >>> x1224;
-Tbase TZ x1226 = x1131 * x1142;
-Tbase TZ x1227 = 0x2;
-Tbase TZ x1228 = x1141 * x1227;
-Tbase TZ x1229 = x1132 * x1228;
-Tbase TZ x1230 = 0x2;
-Tbase TZ x1231 = x1140 * x1230;
-Tbase TZ x1232 = x1133 * x1231;
-Tbase TZ x1233 = x1134 * x1139;
-Tbase TZ x1234 = x1232 + x1233;
-Tbase TZ x1235 = x1229 + x1234;
-Tbase TZ x1236 = x1226 + x1235;
-Tbase TZ x1237 = 0x2;
-Tbase TZ x1238 = x1138 * x1237;
-Tbase TZ x1239 = x1127 * x1238;
-Tbase TZ x1240 = 0x2;
-Tbase TZ x1241 = x1137 * x1240;
-Tbase TZ x1242 = x1128 * x1241;
-Tbase TZ x1243 = 0x2;
-Tbase TZ x1244 = x1136 * x1243;
-Tbase TZ x1245 = x1129 * x1244;
-Tbase TZ x1246 = 0x2;
-Tbase TZ x1247 = x1135 * x1246;
-Tbase TZ x1248 = x1130 * x1247;
-Tbase TZ x1249 = x1245 + x1248;
-Tbase TZ x1250 = x1242 + x1249;
-Tbase TZ x1251 = x1239 + x1250;
-Tbase TZ x1252 = 0x3;
-Tbase TZ x1253 = x1252 * x1251;
-Tbase TZ x1254 = x1236 + x1253;
-Tbase TZ x1255 = x1225 + x1254;
-Tbase TZ x1256 = 0x1c;
-Tbase TZ x1257 = x1255 >>> x1256;
-Tbase TZ x1258 = x1130 * x1142;
-Tbase TZ x1259 = x1131 * x1141;
-Tbase TZ x1260 = 0x2;
-Tbase TZ x1261 = x1140 * x1260;
-Tbase TZ x1262 = x1132 * x1261;
-Tbase TZ x1263 = x1133 * x1139;
-Tbase TZ x1264 = x1134 * x1138;
-Tbase TZ x1265 = x1263 + x1264;
-Tbase TZ x1266 = x1262 + x1265;
-Tbase TZ x1267 = x1259 + x1266;
-Tbase TZ x1268 = x1258 + x1267;
-Tbase TZ x1269 = 0x2;
-Tbase TZ x1270 = x1137 * x1269;
-Tbase TZ x1271 = x1127 * x1270;
-Tbase TZ x1272 = x1128 * x1136;
-Tbase TZ x1273 = 0x2;
-Tbase TZ x1274 = x1135 * x1273;
-Tbase TZ x1275 = x1129 * x1274;
-Tbase TZ x1276 = x1272 + x1275;
-Tbase TZ x1277 = x1271 + x1276;
-Tbase TZ x1278 = 0x3;
-Tbase TZ x1279 = x1278 * x1277;
-Tbase TZ x1280 = x1268 + x1279;
-Tbase TZ x1281 = x1257 + x1280;
-Tbase TZ x1282 = 0x1c;
-Tbase TZ x1283 = x1281 >>> x1282;
-Tbase TZ x1284 = x1129 * x1142;
-Tbase TZ x1285 = x1130 * x1141;
-Tbase TZ x1286 = x1131 * x1140;
-Tbase TZ x1287 = x1132 * x1139;
-Tbase TZ x1288 = x1133 * x1138;
-Tbase TZ x1289 = x1134 * x1137;
-Tbase TZ x1290 = x1288 + x1289;
-Tbase TZ x1291 = x1287 + x1290;
-Tbase TZ x1292 = x1286 + x1291;
-Tbase TZ x1293 = x1285 + x1292;
-Tbase TZ x1294 = x1284 + x1293;
-Tbase TZ x1295 = x1127 * x1136;
-Tbase TZ x1296 = x1128 * x1135;
-Tbase TZ x1297 = x1295 + x1296;
-Tbase TZ x1298 = 0x3;
-Tbase TZ x1299 = x1298 * x1297;
-Tbase TZ x1300 = x1294 + x1299;
-Tbase TZ x1301 = x1283 + x1300;
-Tbase TZ x1302 = 0x1b;
-Tbase TZ x1303 = x1301 >>> x1302;
-Tbase TZ x1304 = x1128 * x1142;
-Tbase TZ x1305 = 0x2;
-Tbase TZ x1306 = x1141 * x1305;
-Tbase TZ x1307 = x1129 * x1306;
-Tbase TZ x1308 = 0x2;
-Tbase TZ x1309 = x1140 * x1308;
-Tbase TZ x1310 = x1130 * x1309;
-Tbase TZ x1311 = x1131 * x1139;
-Tbase TZ x1312 = 0x2;
-Tbase TZ x1313 = x1138 * x1312;
-Tbase TZ x1314 = x1132 * x1313;
-Tbase TZ x1315 = 0x2;
-Tbase TZ x1316 = x1137 * x1315;
-Tbase TZ x1317 = x1133 * x1316;
-Tbase TZ x1318 = x1134 * x1136;
-Tbase TZ x1319 = x1317 + x1318;
-Tbase TZ x1320 = x1314 + x1319;
-Tbase TZ x1321 = x1311 + x1320;
-Tbase TZ x1322 = x1310 + x1321;
-Tbase TZ x1323 = x1307 + x1322;
-Tbase TZ x1324 = x1304 + x1323;
-Tbase TZ x1325 = 0x2;
-Tbase TZ x1326 = x1135 * x1325;
-Tbase TZ x1327 = x1127 * x1326;
-Tbase TZ x1328 = 0x3;
-Tbase TZ x1329 = x1328 * x1327;
-Tbase TZ x1330 = x1324 + x1329;
-Tbase TZ x1331 = x1303 + x1330;
-Tbase TZ x1332 = 0x1c;
-Tbase TZ x1333 = x1331 >>> x1332;
-Tbase TZ x1334 = x1127 * x1142;
-Tbase TZ x1335 = x1128 * x1141;
-Tbase TZ x1336 = 0x2;
-Tbase TZ x1337 = x1140 * x1336;
-Tbase TZ x1338 = x1129 * x1337;
-Tbase TZ x1339 = x1130 * x1139;
-Tbase TZ x1340 = x1131 * x1138;
-Tbase TZ x1341 = 0x2;
-Tbase TZ x1342 = x1137 * x1341;
-Tbase TZ x1343 = x1132 * x1342;
-Tbase TZ x1344 = x1133 * x1136;
-Tbase TZ x1345 = x1134 * x1135;
-Tbase TZ x1346 = x1344 + x1345;
-Tbase TZ x1347 = x1343 + x1346;
-Tbase TZ x1348 = x1340 + x1347;
-Tbase TZ x1349 = x1339 + x1348;
-Tbase TZ x1350 = x1338 + x1349;
-Tbase TZ x1351 = x1335 + x1350;
-Tbase TZ x1352 = x1334 + x1351;
-Tbase TZ x1353 = x1333 + x1352;
-Tbase TZ x1354 = 0x1b;
-Tbase TZ x1355 = x1353 >>> x1354;
-Tbase TZ x1356 = 0x3;
-Tbase TZ x1357 = x1356 * x1355;
-Tbase TZ x1358 = 0xfffffff;
-Tbase TZ x1359 = x1173 & x1358;
-Tbase TZ x1360 = x1357 + x1359;
-Tbase TZ x1361 = 0x1c;
-Tbase TZ x1362 = x1360 >>> x1361;
-Tbase TZ x1363 = 0xfffffff;
-Tbase TZ x1364 = x1201 & x1363;
-Tbase TZ x1365 = x1362 + x1364;
-Tbase TZ x1366 = 0x7ffffff;
-Tbase TZ x1367 = x1353 & x1366;
-Tbase TZ x1368 = 0xfffffff;
-Tbase TZ x1369 = x1331 & x1368;
-Tbase TZ x1370 = 0x7ffffff;
-Tbase TZ x1371 = x1301 & x1370;
-Tbase TZ x1372 = 0xfffffff;
-Tbase TZ x1373 = x1281 & x1372;
-Tbase TZ x1374 = 0xfffffff;
-Tbase TZ x1375 = x1255 & x1374;
-Tbase TZ x1376 = 0x1c;
-Tbase TZ x1377 = x1365 >>> x1376;
-Tbase TZ x1378 = 0x7ffffff;
-Tbase TZ x1379 = x1223 & x1378;
-Tbase TZ x1380 = x1377 + x1379;
-Tbase TZ x1381 = 0xfffffff;
-Tbase TZ x1382 = x1365 & x1381;
-Tbase TZ x1383 = 0xfffffff;
-Tbase TZ x1384 = x1360 & x1383;
-Tbase TZ x1385 = 0xffffffe;
-Tbase TZ x1386 = x1385 + x867;
-Tbase TZ x1387 = x1386 - x1109;
-Tbase TZ x1388 = 0x1ffffffe;
-Tbase TZ x1389 = x1388 + x869;
-Tbase TZ x1390 = x1389 - x1111;
-Tbase TZ x1391 = 0xffffffe;
-Tbase TZ x1392 = x1391 + x871;
-Tbase TZ x1393 = x1392 - x1113;
-Tbase TZ x1394 = 0x1ffffffe;
-Tbase TZ x1395 = x1394 + x873;
-Tbase TZ x1396 = x1395 - x1115;
-Tbase TZ x1397 = 0x1ffffffe;
-Tbase TZ x1398 = x1397 + x875;
-Tbase TZ x1399 = x1398 - x1117;
-Tbase TZ x1400 = 0xffffffe;
-Tbase TZ x1401 = x1400 + x880;
-Tbase TZ x1402 = x1401 - x1122;
-Tbase TZ x1403 = 0x1ffffffe;
-Tbase TZ x1404 = x1403 + x882;
-Tbase TZ x1405 = x1404 - x1124;
-Tbase TZ x1406 = 0x1ffffffa;
-Tbase TZ x1407 = x1406 + x884;
-Tbase TZ x1408 = x1407 - x1126;
-Tbase TZ x1409 = 0xffffffe;
-Tbase TZ x1410 = x1409 + x867;
-Tbase TZ x1411 = x1410 - x1109;
-Tbase TZ x1412 = 0x1ffffffe;
-Tbase TZ x1413 = x1412 + x869;
-Tbase TZ x1414 = x1413 - x1111;
-Tbase TZ x1415 = 0xffffffe;
-Tbase TZ x1416 = x1415 + x871;
-Tbase TZ x1417 = x1416 - x1113;
-Tbase TZ x1418 = 0x1ffffffe;
-Tbase TZ x1419 = x1418 + x873;
-Tbase TZ x1420 = x1419 - x1115;
-Tbase TZ x1421 = 0x1ffffffe;
-Tbase TZ x1422 = x1421 + x875;
-Tbase TZ x1423 = x1422 - x1117;
-Tbase TZ x1424 = 0xffffffe;
-Tbase TZ x1425 = x1424 + x880;
-Tbase TZ x1426 = x1425 - x1122;
-Tbase TZ x1427 = 0x1ffffffe;
-Tbase TZ x1428 = x1427 + x882;
-Tbase TZ x1429 = x1428 - x1124;
-Tbase TZ x1430 = 0x1ffffffa;
-Tbase TZ x1431 = x1430 + x884;
-Tbase TZ x1432 = x1431 - x1126;
-Tbase TZ x1433 = x1408 * x1432;
-Tbase TZ x1434 = 0x2;
-Tbase TZ x1435 = x1429 * x1434;
-Tbase TZ x1436 = x1387 * x1435;
-Tbase TZ x1437 = 0x2;
-Tbase TZ x1438 = x1426 * x1437;
-Tbase TZ x1439 = x1390 * x1438;
-Tbase TZ x1440 = 0x2;
-Tbase TZ x1441 = x1423 * x1440;
-Tbase TZ x1442 = x1393 * x1441;
-Tbase TZ x1443 = 0x2;
-Tbase TZ x1444 = x1420 * x1443;
-Tbase TZ x1445 = x1396 * x1444;
-Tbase TZ x1446 = 0x2;
-Tbase TZ x1447 = x1417 * x1446;
-Tbase TZ x1448 = x1399 * x1447;
-Tbase TZ x1449 = 0x2;
-Tbase TZ x1450 = x1414 * x1449;
-Tbase TZ x1451 = x1402 * x1450;
-Tbase TZ x1452 = 0x2;
-Tbase TZ x1453 = x1411 * x1452;
-Tbase TZ x1454 = x1405 * x1453;
-Tbase TZ x1455 = x1451 + x1454;
-Tbase TZ x1456 = x1448 + x1455;
-Tbase TZ x1457 = x1445 + x1456;
-Tbase TZ x1458 = x1442 + x1457;
-Tbase TZ x1459 = x1439 + x1458;
-Tbase TZ x1460 = x1436 + x1459;
-Tbase TZ x1461 = 0x3;
-Tbase TZ x1462 = x1461 * x1460;
-Tbase TZ x1463 = x1433 + x1462;
-Tbase TZ x1464 = 0x1c;
-Tbase TZ x1465 = x1463 >>> x1464;
-Tbase TZ x1466 = x1405 * x1432;
-Tbase TZ x1467 = x1408 * x1429;
-Tbase TZ x1468 = x1466 + x1467;
-Tbase TZ x1469 = 0x2;
-Tbase TZ x1470 = x1426 * x1469;
-Tbase TZ x1471 = x1387 * x1470;
-Tbase TZ x1472 = x1390 * x1423;
-Tbase TZ x1473 = 0x2;
-Tbase TZ x1474 = x1420 * x1473;
-Tbase TZ x1475 = x1393 * x1474;
-Tbase TZ x1476 = 0x2;
-Tbase TZ x1477 = x1417 * x1476;
-Tbase TZ x1478 = x1396 * x1477;
-Tbase TZ x1479 = x1399 * x1414;
-Tbase TZ x1480 = 0x2;
-Tbase TZ x1481 = x1411 * x1480;
-Tbase TZ x1482 = x1402 * x1481;
-Tbase TZ x1483 = x1479 + x1482;
-Tbase TZ x1484 = x1478 + x1483;
-Tbase TZ x1485 = x1475 + x1484;
-Tbase TZ x1486 = x1472 + x1485;
-Tbase TZ x1487 = x1471 + x1486;
-Tbase TZ x1488 = 0x3;
-Tbase TZ x1489 = x1488 * x1487;
-Tbase TZ x1490 = x1468 + x1489;
-Tbase TZ x1491 = x1465 + x1490;
-Tbase TZ x1492 = 0x1c;
-Tbase TZ x1493 = x1491 >>> x1492;
-Tbase TZ x1494 = x1402 * x1432;
-Tbase TZ x1495 = x1405 * x1429;
-Tbase TZ x1496 = x1408 * x1426;
-Tbase TZ x1497 = x1495 + x1496;
-Tbase TZ x1498 = x1494 + x1497;
-Tbase TZ x1499 = x1387 * x1423;
-Tbase TZ x1500 = x1390 * x1420;
-Tbase TZ x1501 = 0x2;
-Tbase TZ x1502 = x1417 * x1501;
-Tbase TZ x1503 = x1393 * x1502;
-Tbase TZ x1504 = x1396 * x1414;
-Tbase TZ x1505 = x1399 * x1411;
-Tbase TZ x1506 = x1504 + x1505;
-Tbase TZ x1507 = x1503 + x1506;
-Tbase TZ x1508 = x1500 + x1507;
-Tbase TZ x1509 = x1499 + x1508;
-Tbase TZ x1510 = 0x3;
-Tbase TZ x1511 = x1510 * x1509;
-Tbase TZ x1512 = x1498 + x1511;
-Tbase TZ x1513 = x1493 + x1512;
-Tbase TZ x1514 = 0x1b;
-Tbase TZ x1515 = x1513 >>> x1514;
-Tbase TZ x1516 = x1399 * x1432;
-Tbase TZ x1517 = 0x2;
-Tbase TZ x1518 = x1429 * x1517;
-Tbase TZ x1519 = x1402 * x1518;
-Tbase TZ x1520 = 0x2;
-Tbase TZ x1521 = x1426 * x1520;
-Tbase TZ x1522 = x1405 * x1521;
-Tbase TZ x1523 = x1408 * x1423;
-Tbase TZ x1524 = x1522 + x1523;
-Tbase TZ x1525 = x1519 + x1524;
-Tbase TZ x1526 = x1516 + x1525;
-Tbase TZ x1527 = 0x2;
-Tbase TZ x1528 = x1420 * x1527;
-Tbase TZ x1529 = x1387 * x1528;
-Tbase TZ x1530 = 0x2;
-Tbase TZ x1531 = x1417 * x1530;
-Tbase TZ x1532 = x1390 * x1531;
-Tbase TZ x1533 = 0x2;
-Tbase TZ x1534 = x1414 * x1533;
-Tbase TZ x1535 = x1393 * x1534;
-Tbase TZ x1536 = 0x2;
-Tbase TZ x1537 = x1411 * x1536;
-Tbase TZ x1538 = x1396 * x1537;
-Tbase TZ x1539 = x1535 + x1538;
-Tbase TZ x1540 = x1532 + x1539;
-Tbase TZ x1541 = x1529 + x1540;
-Tbase TZ x1542 = 0x3;
-Tbase TZ x1543 = x1542 * x1541;
-Tbase TZ x1544 = x1526 + x1543;
-Tbase TZ x1545 = x1515 + x1544;
-Tbase TZ x1546 = 0x1c;
-Tbase TZ x1547 = x1545 >>> x1546;
-Tbase TZ x1548 = x1396 * x1432;
-Tbase TZ x1549 = x1399 * x1429;
-Tbase TZ x1550 = 0x2;
-Tbase TZ x1551 = x1426 * x1550;
-Tbase TZ x1552 = x1402 * x1551;
-Tbase TZ x1553 = x1405 * x1423;
-Tbase TZ x1554 = x1408 * x1420;
-Tbase TZ x1555 = x1553 + x1554;
-Tbase TZ x1556 = x1552 + x1555;
-Tbase TZ x1557 = x1549 + x1556;
-Tbase TZ x1558 = x1548 + x1557;
-Tbase TZ x1559 = 0x2;
-Tbase TZ x1560 = x1417 * x1559;
-Tbase TZ x1561 = x1387 * x1560;
-Tbase TZ x1562 = x1390 * x1414;
-Tbase TZ x1563 = 0x2;
-Tbase TZ x1564 = x1411 * x1563;
-Tbase TZ x1565 = x1393 * x1564;
-Tbase TZ x1566 = x1562 + x1565;
-Tbase TZ x1567 = x1561 + x1566;
-Tbase TZ x1568 = 0x3;
-Tbase TZ x1569 = x1568 * x1567;
-Tbase TZ x1570 = x1558 + x1569;
-Tbase TZ x1571 = x1547 + x1570;
-Tbase TZ x1572 = 0x1c;
-Tbase TZ x1573 = x1571 >>> x1572;
-Tbase TZ x1574 = x1393 * x1432;
-Tbase TZ x1575 = x1396 * x1429;
-Tbase TZ x1576 = x1399 * x1426;
-Tbase TZ x1577 = x1402 * x1423;
-Tbase TZ x1578 = x1405 * x1420;
-Tbase TZ x1579 = x1408 * x1417;
-Tbase TZ x1580 = x1578 + x1579;
-Tbase TZ x1581 = x1577 + x1580;
-Tbase TZ x1582 = x1576 + x1581;
-Tbase TZ x1583 = x1575 + x1582;
-Tbase TZ x1584 = x1574 + x1583;
-Tbase TZ x1585 = x1387 * x1414;
-Tbase TZ x1586 = x1390 * x1411;
-Tbase TZ x1587 = x1585 + x1586;
-Tbase TZ x1588 = 0x3;
-Tbase TZ x1589 = x1588 * x1587;
-Tbase TZ x1590 = x1584 + x1589;
-Tbase TZ x1591 = x1573 + x1590;
-Tbase TZ x1592 = 0x1b;
-Tbase TZ x1593 = x1591 >>> x1592;
-Tbase TZ x1594 = x1390 * x1432;
-Tbase TZ x1595 = 0x2;
-Tbase TZ x1596 = x1429 * x1595;
-Tbase TZ x1597 = x1393 * x1596;
-Tbase TZ x1598 = 0x2;
-Tbase TZ x1599 = x1426 * x1598;
-Tbase TZ x1600 = x1396 * x1599;
-Tbase TZ x1601 = x1399 * x1423;
-Tbase TZ x1602 = 0x2;
-Tbase TZ x1603 = x1420 * x1602;
-Tbase TZ x1604 = x1402 * x1603;
-Tbase TZ x1605 = 0x2;
-Tbase TZ x1606 = x1417 * x1605;
-Tbase TZ x1607 = x1405 * x1606;
-Tbase TZ x1608 = x1408 * x1414;
-Tbase TZ x1609 = x1607 + x1608;
-Tbase TZ x1610 = x1604 + x1609;
-Tbase TZ x1611 = x1601 + x1610;
-Tbase TZ x1612 = x1600 + x1611;
-Tbase TZ x1613 = x1597 + x1612;
-Tbase TZ x1614 = x1594 + x1613;
-Tbase TZ x1615 = 0x2;
-Tbase TZ x1616 = x1411 * x1615;
-Tbase TZ x1617 = x1387 * x1616;
-Tbase TZ x1618 = 0x3;
-Tbase TZ x1619 = x1618 * x1617;
-Tbase TZ x1620 = x1614 + x1619;
-Tbase TZ x1621 = x1593 + x1620;
-Tbase TZ x1622 = 0x1c;
-Tbase TZ x1623 = x1621 >>> x1622;
-Tbase TZ x1624 = x1387 * x1432;
-Tbase TZ x1625 = x1390 * x1429;
-Tbase TZ x1626 = 0x2;
-Tbase TZ x1627 = x1426 * x1626;
-Tbase TZ x1628 = x1393 * x1627;
-Tbase TZ x1629 = x1396 * x1423;
-Tbase TZ x1630 = x1399 * x1420;
-Tbase TZ x1631 = 0x2;
-Tbase TZ x1632 = x1417 * x1631;
-Tbase TZ x1633 = x1402 * x1632;
-Tbase TZ x1634 = x1405 * x1414;
-Tbase TZ x1635 = x1408 * x1411;
-Tbase TZ x1636 = x1634 + x1635;
-Tbase TZ x1637 = x1633 + x1636;
-Tbase TZ x1638 = x1630 + x1637;
-Tbase TZ x1639 = x1629 + x1638;
-Tbase TZ x1640 = x1628 + x1639;
-Tbase TZ x1641 = x1625 + x1640;
-Tbase TZ x1642 = x1624 + x1641;
-Tbase TZ x1643 = x1623 + x1642;
-Tbase TZ x1644 = 0x1b;
-Tbase TZ x1645 = x1643 >>> x1644;
-Tbase TZ x1646 = 0x3;
-Tbase TZ x1647 = x1646 * x1645;
-Tbase TZ x1648 = 0xfffffff;
-Tbase TZ x1649 = x1463 & x1648;
-Tbase TZ x1650 = x1647 + x1649;
-Tbase TZ x1651 = 0x1c;
-Tbase TZ x1652 = x1650 >>> x1651;
-Tbase TZ x1653 = 0xfffffff;
-Tbase TZ x1654 = x1491 & x1653;
-Tbase TZ x1655 = x1652 + x1654;
-Tbase TZ x1656 = 0x7ffffff;
-Tbase TZ x1657 = x1643 & x1656;
-Tbase TZ x1658 = 0xfffffff;
-Tbase TZ x1659 = x1621 & x1658;
-Tbase TZ x1660 = 0x7ffffff;
-Tbase TZ x1661 = x1591 & x1660;
-Tbase TZ x1662 = 0xfffffff;
-Tbase TZ x1663 = x1571 & x1662;
-Tbase TZ x1664 = 0xfffffff;
-Tbase TZ x1665 = x1545 & x1664;
-Tbase TZ x1666 = 0x1c;
-Tbase TZ x1667 = x1655 >>> x1666;
-Tbase TZ x1668 = 0x7ffffff;
-Tbase TZ x1669 = x1513 & x1668;
-Tbase TZ x1670 = x1667 + x1669;
-Tbase TZ x1671 = 0xfffffff;
-Tbase TZ x1672 = x1655 & x1671;
-Tbase TZ x1673 = 0xfffffff;
-Tbase TZ x1674 = x1650 & x1673;
-Tbase TZ x1675 = x38 * x1674;
-Tbase TZ x1676 = 0x2;
-Tbase TZ x1677 = x1672 * x1676;
-Tbase TZ x1678 = x31 * x1677;
-Tbase TZ x1679 = 0x2;
-Tbase TZ x1680 = x1670 * x1679;
-Tbase TZ x1681 = x32 * x1680;
-Tbase TZ x1682 = 0x2;
-Tbase TZ x1683 = x1665 * x1682;
-Tbase TZ x1684 = x33 * x1683;
-Tbase TZ x1685 = 0x2;
-Tbase TZ x1686 = x1663 * x1685;
-Tbase TZ x1687 = x34 * x1686;
-Tbase TZ x1688 = 0x2;
-Tbase TZ x1689 = x1661 * x1688;
-Tbase TZ x1690 = x35 * x1689;
-Tbase TZ x1691 = 0x2;
-Tbase TZ x1692 = x1659 * x1691;
-Tbase TZ x1693 = x36 * x1692;
-Tbase TZ x1694 = 0x2;
-Tbase TZ x1695 = x1657 * x1694;
-Tbase TZ x1696 = x37 * x1695;
-Tbase TZ x1697 = x1693 + x1696;
-Tbase TZ x1698 = x1690 + x1697;
-Tbase TZ x1699 = x1687 + x1698;
-Tbase TZ x1700 = x1684 + x1699;
-Tbase TZ x1701 = x1681 + x1700;
-Tbase TZ x1702 = x1678 + x1701;
-Tbase TZ x1703 = 0x3;
-Tbase TZ x1704 = x1703 * x1702;
-Tbase TZ x1705 = x1675 + x1704;
-Tbase TZ x1706 = 0x1c;
-Tbase TZ x1707 = x1705 >>> x1706;
-Tbase TZ x1708 = x37 * x1674;
-Tbase TZ x1709 = x38 * x1672;
-Tbase TZ x1710 = x1708 + x1709;
-Tbase TZ x1711 = 0x2;
-Tbase TZ x1712 = x1670 * x1711;
-Tbase TZ x1713 = x31 * x1712;
-Tbase TZ x1714 = x32 * x1665;
-Tbase TZ x1715 = 0x2;
-Tbase TZ x1716 = x1663 * x1715;
-Tbase TZ x1717 = x33 * x1716;
-Tbase TZ x1718 = 0x2;
-Tbase TZ x1719 = x1661 * x1718;
-Tbase TZ x1720 = x34 * x1719;
-Tbase TZ x1721 = x35 * x1659;
-Tbase TZ x1722 = 0x2;
-Tbase TZ x1723 = x1657 * x1722;
-Tbase TZ x1724 = x36 * x1723;
-Tbase TZ x1725 = x1721 + x1724;
-Tbase TZ x1726 = x1720 + x1725;
-Tbase TZ x1727 = x1717 + x1726;
-Tbase TZ x1728 = x1714 + x1727;
-Tbase TZ x1729 = x1713 + x1728;
-Tbase TZ x1730 = 0x3;
-Tbase TZ x1731 = x1730 * x1729;
-Tbase TZ x1732 = x1710 + x1731;
-Tbase TZ x1733 = x1707 + x1732;
-Tbase TZ x1734 = 0x1c;
-Tbase TZ x1735 = x1733 >>> x1734;
-Tbase TZ x1736 = x36 * x1674;
-Tbase TZ x1737 = x37 * x1672;
-Tbase TZ x1738 = x38 * x1670;
-Tbase TZ x1739 = x1737 + x1738;
-Tbase TZ x1740 = x1736 + x1739;
-Tbase TZ x1741 = x31 * x1665;
-Tbase TZ x1742 = x32 * x1663;
-Tbase TZ x1743 = 0x2;
-Tbase TZ x1744 = x1661 * x1743;
-Tbase TZ x1745 = x33 * x1744;
-Tbase TZ x1746 = x34 * x1659;
-Tbase TZ x1747 = x35 * x1657;
-Tbase TZ x1748 = x1746 + x1747;
-Tbase TZ x1749 = x1745 + x1748;
-Tbase TZ x1750 = x1742 + x1749;
-Tbase TZ x1751 = x1741 + x1750;
-Tbase TZ x1752 = 0x3;
-Tbase TZ x1753 = x1752 * x1751;
-Tbase TZ x1754 = x1740 + x1753;
-Tbase TZ x1755 = x1735 + x1754;
-Tbase TZ x1756 = 0x1b;
-Tbase TZ x1757 = x1755 >>> x1756;
-Tbase TZ x1758 = x35 * x1674;
-Tbase TZ x1759 = 0x2;
-Tbase TZ x1760 = x1672 * x1759;
-Tbase TZ x1761 = x36 * x1760;
-Tbase TZ x1762 = 0x2;
-Tbase TZ x1763 = x1670 * x1762;
-Tbase TZ x1764 = x37 * x1763;
-Tbase TZ x1765 = x38 * x1665;
-Tbase TZ x1766 = x1764 + x1765;
-Tbase TZ x1767 = x1761 + x1766;
-Tbase TZ x1768 = x1758 + x1767;
-Tbase TZ x1769 = 0x2;
-Tbase TZ x1770 = x1663 * x1769;
-Tbase TZ x1771 = x31 * x1770;
-Tbase TZ x1772 = 0x2;
-Tbase TZ x1773 = x1661 * x1772;
-Tbase TZ x1774 = x32 * x1773;
-Tbase TZ x1775 = 0x2;
-Tbase TZ x1776 = x1659 * x1775;
-Tbase TZ x1777 = x33 * x1776;
-Tbase TZ x1778 = 0x2;
-Tbase TZ x1779 = x1657 * x1778;
-Tbase TZ x1780 = x34 * x1779;
-Tbase TZ x1781 = x1777 + x1780;
-Tbase TZ x1782 = x1774 + x1781;
-Tbase TZ x1783 = x1771 + x1782;
-Tbase TZ x1784 = 0x3;
-Tbase TZ x1785 = x1784 * x1783;
-Tbase TZ x1786 = x1768 + x1785;
-Tbase TZ x1787 = x1757 + x1786;
-Tbase TZ x1788 = 0x1c;
-Tbase TZ x1789 = x1787 >>> x1788;
-Tbase TZ x1790 = x34 * x1674;
-Tbase TZ x1791 = x35 * x1672;
-Tbase TZ x1792 = 0x2;
-Tbase TZ x1793 = x1670 * x1792;
-Tbase TZ x1794 = x36 * x1793;
-Tbase TZ x1795 = x37 * x1665;
-Tbase TZ x1796 = x38 * x1663;
-Tbase TZ x1797 = x1795 + x1796;
-Tbase TZ x1798 = x1794 + x1797;
-Tbase TZ x1799 = x1791 + x1798;
-Tbase TZ x1800 = x1790 + x1799;
-Tbase TZ x1801 = 0x2;
-Tbase TZ x1802 = x1661 * x1801;
-Tbase TZ x1803 = x31 * x1802;
-Tbase TZ x1804 = x32 * x1659;
-Tbase TZ x1805 = 0x2;
-Tbase TZ x1806 = x1657 * x1805;
-Tbase TZ x1807 = x33 * x1806;
-Tbase TZ x1808 = x1804 + x1807;
-Tbase TZ x1809 = x1803 + x1808;
-Tbase TZ x1810 = 0x3;
-Tbase TZ x1811 = x1810 * x1809;
-Tbase TZ x1812 = x1800 + x1811;
-Tbase TZ x1813 = x1789 + x1812;
-Tbase TZ x1814 = 0x1c;
-Tbase TZ x1815 = x1813 >>> x1814;
-Tbase TZ x1816 = x33 * x1674;
-Tbase TZ x1817 = x34 * x1672;
-Tbase TZ x1818 = x35 * x1670;
-Tbase TZ x1819 = x36 * x1665;
-Tbase TZ x1820 = x37 * x1663;
-Tbase TZ x1821 = x38 * x1661;
-Tbase TZ x1822 = x1820 + x1821;
-Tbase TZ x1823 = x1819 + x1822;
-Tbase TZ x1824 = x1818 + x1823;
-Tbase TZ x1825 = x1817 + x1824;
-Tbase TZ x1826 = x1816 + x1825;
-Tbase TZ x1827 = x31 * x1659;
-Tbase TZ x1828 = x32 * x1657;
-Tbase TZ x1829 = x1827 + x1828;
-Tbase TZ x1830 = 0x3;
-Tbase TZ x1831 = x1830 * x1829;
-Tbase TZ x1832 = x1826 + x1831;
-Tbase TZ x1833 = x1815 + x1832;
-Tbase TZ x1834 = 0x1b;
-Tbase TZ x1835 = x1833 >>> x1834;
-Tbase TZ x1836 = x32 * x1674;
-Tbase TZ x1837 = 0x2;
-Tbase TZ x1838 = x1672 * x1837;
-Tbase TZ x1839 = x33 * x1838;
-Tbase TZ x1840 = 0x2;
-Tbase TZ x1841 = x1670 * x1840;
-Tbase TZ x1842 = x34 * x1841;
-Tbase TZ x1843 = x35 * x1665;
-Tbase TZ x1844 = 0x2;
-Tbase TZ x1845 = x1663 * x1844;
-Tbase TZ x1846 = x36 * x1845;
-Tbase TZ x1847 = 0x2;
-Tbase TZ x1848 = x1661 * x1847;
-Tbase TZ x1849 = x37 * x1848;
-Tbase TZ x1850 = x38 * x1659;
-Tbase TZ x1851 = x1849 + x1850;
-Tbase TZ x1852 = x1846 + x1851;
-Tbase TZ x1853 = x1843 + x1852;
-Tbase TZ x1854 = x1842 + x1853;
-Tbase TZ x1855 = x1839 + x1854;
-Tbase TZ x1856 = x1836 + x1855;
-Tbase TZ x1857 = 0x2;
-Tbase TZ x1858 = x1657 * x1857;
-Tbase TZ x1859 = x31 * x1858;
-Tbase TZ x1860 = 0x3;
-Tbase TZ x1861 = x1860 * x1859;
-Tbase TZ x1862 = x1856 + x1861;
-Tbase TZ x1863 = x1835 + x1862;
-Tbase TZ x1864 = 0x1c;
-Tbase TZ x1865 = x1863 >>> x1864;
-Tbase TZ x1866 = x31 * x1674;
-Tbase TZ x1867 = x32 * x1672;
-Tbase TZ x1868 = 0x2;
-Tbase TZ x1869 = x1670 * x1868;
-Tbase TZ x1870 = x33 * x1869;
-Tbase TZ x1871 = x34 * x1665;
-Tbase TZ x1872 = x35 * x1663;
-Tbase TZ x1873 = 0x2;
-Tbase TZ x1874 = x1661 * x1873;
-Tbase TZ x1875 = x36 * x1874;
-Tbase TZ x1876 = x37 * x1659;
-Tbase TZ x1877 = x38 * x1657;
-Tbase TZ x1878 = x1876 + x1877;
-Tbase TZ x1879 = x1875 + x1878;
-Tbase TZ x1880 = x1872 + x1879;
-Tbase TZ x1881 = x1871 + x1880;
-Tbase TZ x1882 = x1870 + x1881;
-Tbase TZ x1883 = x1867 + x1882;
-Tbase TZ x1884 = x1866 + x1883;
-Tbase TZ x1885 = x1865 + x1884;
-Tbase TZ x1886 = 0x1b;
-Tbase TZ x1887 = x1885 >>> x1886;
-Tbase TZ x1888 = 0x3;
-Tbase TZ x1889 = x1888 * x1887;
-Tbase TZ x1890 = 0xfffffff;
-Tbase TZ x1891 = x1705 & x1890;
-Tbase TZ x1892 = x1889 + x1891;
-Tbase TZ x1893 = 0x1c;
-Tbase TZ x1894 = x1892 >>> x1893;
-Tbase TZ x1895 = 0xfffffff;
-Tbase TZ x1896 = x1733 & x1895;
-Tbase TZ x1897 = x1894 + x1896;
-Tbase TZ x1898 = 0x7ffffff;
-Tbase TZ x1899 = x1885 & x1898;
-Tbase TZ x1900 = 0xfffffff;
-Tbase TZ x1901 = x1863 & x1900;
-Tbase TZ x1902 = 0x7ffffff;
-Tbase TZ x1903 = x1833 & x1902;
-Tbase TZ x1904 = 0xfffffff;
-Tbase TZ x1905 = x1813 & x1904;
-Tbase TZ x1906 = 0xfffffff;
-Tbase TZ x1907 = x1787 & x1906;
-Tbase TZ x1908 = 0x1c;
-Tbase TZ x1909 = x1897 >>> x1908;
-Tbase TZ x1910 = 0x7ffffff;
-Tbase TZ x1911 = x1755 & x1910;
-Tbase TZ x1912 = x1909 + x1911;
-Tbase TZ x1913 = 0xfffffff;
-Tbase TZ x1914 = x1897 & x1913;
-Tbase TZ x1915 = 0xfffffff;
-Tbase TZ x1916 = x1892 & x1915;
-Tbase TZ x1917 = x320 * x586;
-Tbase TZ x1918 = 0x2;
-Tbase TZ x1919 = x584 * x1918;
-Tbase TZ x1920 = x303 * x1919;
-Tbase TZ x1921 = 0x2;
-Tbase TZ x1922 = x582 * x1921;
-Tbase TZ x1923 = x305 * x1922;
-Tbase TZ x1924 = 0x2;
-Tbase TZ x1925 = x577 * x1924;
-Tbase TZ x1926 = x307 * x1925;
-Tbase TZ x1927 = 0x2;
-Tbase TZ x1928 = x575 * x1927;
-Tbase TZ x1929 = x309 * x1928;
-Tbase TZ x1930 = 0x2;
-Tbase TZ x1931 = x573 * x1930;
-Tbase TZ x1932 = x311 * x1931;
-Tbase TZ x1933 = 0x2;
-Tbase TZ x1934 = x571 * x1933;
-Tbase TZ x1935 = x316 * x1934;
-Tbase TZ x1936 = 0x2;
-Tbase TZ x1937 = x569 * x1936;
-Tbase TZ x1938 = x318 * x1937;
-Tbase TZ x1939 = x1935 + x1938;
-Tbase TZ x1940 = x1932 + x1939;
-Tbase TZ x1941 = x1929 + x1940;
-Tbase TZ x1942 = x1926 + x1941;
-Tbase TZ x1943 = x1923 + x1942;
-Tbase TZ x1944 = x1920 + x1943;
-Tbase TZ x1945 = 0x3;
-Tbase TZ x1946 = x1945 * x1944;
-Tbase TZ x1947 = x1917 + x1946;
-Tbase TZ x1948 = 0x1c;
-Tbase TZ x1949 = x1947 >>> x1948;
-Tbase TZ x1950 = x318 * x586;
-Tbase TZ x1951 = x320 * x584;
-Tbase TZ x1952 = x1950 + x1951;
-Tbase TZ x1953 = 0x2;
-Tbase TZ x1954 = x582 * x1953;
-Tbase TZ x1955 = x303 * x1954;
-Tbase TZ x1956 = x305 * x577;
-Tbase TZ x1957 = 0x2;
-Tbase TZ x1958 = x575 * x1957;
-Tbase TZ x1959 = x307 * x1958;
-Tbase TZ x1960 = 0x2;
-Tbase TZ x1961 = x573 * x1960;
-Tbase TZ x1962 = x309 * x1961;
-Tbase TZ x1963 = x311 * x571;
-Tbase TZ x1964 = 0x2;
-Tbase TZ x1965 = x569 * x1964;
-Tbase TZ x1966 = x316 * x1965;
-Tbase TZ x1967 = x1963 + x1966;
-Tbase TZ x1968 = x1962 + x1967;
-Tbase TZ x1969 = x1959 + x1968;
-Tbase TZ x1970 = x1956 + x1969;
-Tbase TZ x1971 = x1955 + x1970;
-Tbase TZ x1972 = 0x3;
-Tbase TZ x1973 = x1972 * x1971;
-Tbase TZ x1974 = x1952 + x1973;
-Tbase TZ x1975 = x1949 + x1974;
-Tbase TZ x1976 = 0x1c;
-Tbase TZ x1977 = x1975 >>> x1976;
-Tbase TZ x1978 = x316 * x586;
-Tbase TZ x1979 = x318 * x584;
-Tbase TZ x1980 = x320 * x582;
-Tbase TZ x1981 = x1979 + x1980;
-Tbase TZ x1982 = x1978 + x1981;
-Tbase TZ x1983 = x303 * x577;
-Tbase TZ x1984 = x305 * x575;
-Tbase TZ x1985 = 0x2;
-Tbase TZ x1986 = x573 * x1985;
-Tbase TZ x1987 = x307 * x1986;
-Tbase TZ x1988 = x309 * x571;
-Tbase TZ x1989 = x311 * x569;
-Tbase TZ x1990 = x1988 + x1989;
-Tbase TZ x1991 = x1987 + x1990;
-Tbase TZ x1992 = x1984 + x1991;
-Tbase TZ x1993 = x1983 + x1992;
-Tbase TZ x1994 = 0x3;
-Tbase TZ x1995 = x1994 * x1993;
-Tbase TZ x1996 = x1982 + x1995;
-Tbase TZ x1997 = x1977 + x1996;
-Tbase TZ x1998 = 0x1b;
-Tbase TZ x1999 = x1997 >>> x1998;
-Tbase TZ x2000 = x311 * x586;
-Tbase TZ x2001 = 0x2;
-Tbase TZ x2002 = x584 * x2001;
-Tbase TZ x2003 = x316 * x2002;
-Tbase TZ x2004 = 0x2;
-Tbase TZ x2005 = x582 * x2004;
-Tbase TZ x2006 = x318 * x2005;
-Tbase TZ x2007 = x320 * x577;
-Tbase TZ x2008 = x2006 + x2007;
-Tbase TZ x2009 = x2003 + x2008;
-Tbase TZ x2010 = x2000 + x2009;
-Tbase TZ x2011 = 0x2;
-Tbase TZ x2012 = x575 * x2011;
-Tbase TZ x2013 = x303 * x2012;
-Tbase TZ x2014 = 0x2;
-Tbase TZ x2015 = x573 * x2014;
-Tbase TZ x2016 = x305 * x2015;
-Tbase TZ x2017 = 0x2;
-Tbase TZ x2018 = x571 * x2017;
-Tbase TZ x2019 = x307 * x2018;
-Tbase TZ x2020 = 0x2;
-Tbase TZ x2021 = x569 * x2020;
-Tbase TZ x2022 = x309 * x2021;
-Tbase TZ x2023 = x2019 + x2022;
-Tbase TZ x2024 = x2016 + x2023;
-Tbase TZ x2025 = x2013 + x2024;
-Tbase TZ x2026 = 0x3;
-Tbase TZ x2027 = x2026 * x2025;
-Tbase TZ x2028 = x2010 + x2027;
-Tbase TZ x2029 = x1999 + x2028;
-Tbase TZ x2030 = 0x1c;
-Tbase TZ x2031 = x2029 >>> x2030;
-Tbase TZ x2032 = x309 * x586;
-Tbase TZ x2033 = x311 * x584;
-Tbase TZ x2034 = 0x2;
-Tbase TZ x2035 = x582 * x2034;
-Tbase TZ x2036 = x316 * x2035;
-Tbase TZ x2037 = x318 * x577;
-Tbase TZ x2038 = x320 * x575;
-Tbase TZ x2039 = x2037 + x2038;
-Tbase TZ x2040 = x2036 + x2039;
-Tbase TZ x2041 = x2033 + x2040;
-Tbase TZ x2042 = x2032 + x2041;
-Tbase TZ x2043 = 0x2;
-Tbase TZ x2044 = x573 * x2043;
-Tbase TZ x2045 = x303 * x2044;
-Tbase TZ x2046 = x305 * x571;
-Tbase TZ x2047 = 0x2;
-Tbase TZ x2048 = x569 * x2047;
-Tbase TZ x2049 = x307 * x2048;
-Tbase TZ x2050 = x2046 + x2049;
-Tbase TZ x2051 = x2045 + x2050;
-Tbase TZ x2052 = 0x3;
-Tbase TZ x2053 = x2052 * x2051;
-Tbase TZ x2054 = x2042 + x2053;
-Tbase TZ x2055 = x2031 + x2054;
-Tbase TZ x2056 = 0x1c;
-Tbase TZ x2057 = x2055 >>> x2056;
-Tbase TZ x2058 = x307 * x586;
-Tbase TZ x2059 = x309 * x584;
-Tbase TZ x2060 = x311 * x582;
-Tbase TZ x2061 = x316 * x577;
-Tbase TZ x2062 = x318 * x575;
-Tbase TZ x2063 = x320 * x573;
-Tbase TZ x2064 = x2062 + x2063;
-Tbase TZ x2065 = x2061 + x2064;
-Tbase TZ x2066 = x2060 + x2065;
-Tbase TZ x2067 = x2059 + x2066;
-Tbase TZ x2068 = x2058 + x2067;
-Tbase TZ x2069 = x303 * x571;
-Tbase TZ x2070 = x305 * x569;
-Tbase TZ x2071 = x2069 + x2070;
-Tbase TZ x2072 = 0x3;
-Tbase TZ x2073 = x2072 * x2071;
-Tbase TZ x2074 = x2068 + x2073;
-Tbase TZ x2075 = x2057 + x2074;
-Tbase TZ x2076 = 0x1b;
-Tbase TZ x2077 = x2075 >>> x2076;
-Tbase TZ x2078 = x305 * x586;
-Tbase TZ x2079 = 0x2;
-Tbase TZ x2080 = x584 * x2079;
-Tbase TZ x2081 = x307 * x2080;
-Tbase TZ x2082 = 0x2;
-Tbase TZ x2083 = x582 * x2082;
-Tbase TZ x2084 = x309 * x2083;
-Tbase TZ x2085 = x311 * x577;
-Tbase TZ x2086 = 0x2;
-Tbase TZ x2087 = x575 * x2086;
-Tbase TZ x2088 = x316 * x2087;
-Tbase TZ x2089 = 0x2;
-Tbase TZ x2090 = x573 * x2089;
-Tbase TZ x2091 = x318 * x2090;
-Tbase TZ x2092 = x320 * x571;
-Tbase TZ x2093 = x2091 + x2092;
-Tbase TZ x2094 = x2088 + x2093;
-Tbase TZ x2095 = x2085 + x2094;
-Tbase TZ x2096 = x2084 + x2095;
-Tbase TZ x2097 = x2081 + x2096;
-Tbase TZ x2098 = x2078 + x2097;
-Tbase TZ x2099 = 0x2;
-Tbase TZ x2100 = x569 * x2099;
-Tbase TZ x2101 = x303 * x2100;
-Tbase TZ x2102 = 0x3;
-Tbase TZ x2103 = x2102 * x2101;
-Tbase TZ x2104 = x2098 + x2103;
-Tbase TZ x2105 = x2077 + x2104;
-Tbase TZ x2106 = 0x1c;
-Tbase TZ x2107 = x2105 >>> x2106;
-Tbase TZ x2108 = x303 * x586;
-Tbase TZ x2109 = x305 * x584;
-Tbase TZ x2110 = 0x2;
-Tbase TZ x2111 = x582 * x2110;
-Tbase TZ x2112 = x307 * x2111;
-Tbase TZ x2113 = x309 * x577;
-Tbase TZ x2114 = x311 * x575;
-Tbase TZ x2115 = 0x2;
-Tbase TZ x2116 = x573 * x2115;
-Tbase TZ x2117 = x316 * x2116;
-Tbase TZ x2118 = x318 * x571;
-Tbase TZ x2119 = x320 * x569;
-Tbase TZ x2120 = x2118 + x2119;
-Tbase TZ x2121 = x2117 + x2120;
-Tbase TZ x2122 = x2114 + x2121;
-Tbase TZ x2123 = x2113 + x2122;
-Tbase TZ x2124 = x2112 + x2123;
-Tbase TZ x2125 = x2109 + x2124;
-Tbase TZ x2126 = x2108 + x2125;
-Tbase TZ x2127 = x2107 + x2126;
-Tbase TZ x2128 = 0x1b;
-Tbase TZ x2129 = x2127 >>> x2128;
-Tbase TZ x2130 = 0x3;
-Tbase TZ x2131 = x2130 * x2129;
-Tbase TZ x2132 = 0xfffffff;
-Tbase TZ x2133 = x1947 & x2132;
-Tbase TZ x2134 = x2131 + x2133;
-Tbase TZ x2135 = 0x1c;
-Tbase TZ x2136 = x2134 >>> x2135;
-Tbase TZ x2137 = 0xfffffff;
-Tbase TZ x2138 = x1975 & x2137;
-Tbase TZ x2139 = x2136 + x2138;
-Tbase TZ x2140 = 0x7ffffff;
-Tbase TZ x2141 = x2127 & x2140;
-Tbase TZ x2142 = 0xfffffff;
-Tbase TZ x2143 = x2105 & x2142;
-Tbase TZ x2144 = 0x7ffffff;
-Tbase TZ x2145 = x2075 & x2144;
-Tbase TZ x2146 = 0xfffffff;
-Tbase TZ x2147 = x2055 & x2146;
-Tbase TZ x2148 = 0xfffffff;
-Tbase TZ x2149 = x2029 & x2148;
-Tbase TZ x2150 = 0x1c;
-Tbase TZ x2151 = x2139 >>> x2150;
-Tbase TZ x2152 = 0x7ffffff;
-Tbase TZ x2153 = x1997 & x2152;
-Tbase TZ x2154 = x2151 + x2153;
-Tbase TZ x2155 = 0xfffffff;
-Tbase TZ x2156 = x2139 & x2155;
-Tbase TZ x2157 = 0xfffffff;
-Tbase TZ x2158 = x2134 & x2157;
-Tbase TZ x2159 = x30 * x610;
-Tbase TZ x2160 = 0x2;
-Tbase TZ x2161 = x607 * x2160;
-Tbase TZ x2162 = x23 * x2161;
-Tbase TZ x2163 = 0x2;
-Tbase TZ x2164 = x604 * x2163;
-Tbase TZ x2165 = x24 * x2164;
-Tbase TZ x2166 = 0x2;
-Tbase TZ x2167 = x601 * x2166;
-Tbase TZ x2168 = x25 * x2167;
-Tbase TZ x2169 = 0x2;
-Tbase TZ x2170 = x598 * x2169;
-Tbase TZ x2171 = x26 * x2170;
-Tbase TZ x2172 = 0x2;
-Tbase TZ x2173 = x595 * x2172;
-Tbase TZ x2174 = x27 * x2173;
-Tbase TZ x2175 = 0x2;
-Tbase TZ x2176 = x592 * x2175;
-Tbase TZ x2177 = x28 * x2176;
-Tbase TZ x2178 = 0x2;
-Tbase TZ x2179 = x589 * x2178;
-Tbase TZ x2180 = x29 * x2179;
-Tbase TZ x2181 = x2177 + x2180;
-Tbase TZ x2182 = x2174 + x2181;
-Tbase TZ x2183 = x2171 + x2182;
-Tbase TZ x2184 = x2168 + x2183;
-Tbase TZ x2185 = x2165 + x2184;
-Tbase TZ x2186 = x2162 + x2185;
-Tbase TZ x2187 = 0x3;
-Tbase TZ x2188 = x2187 * x2186;
-Tbase TZ x2189 = x2159 + x2188;
-Tbase TZ x2190 = 0x1c;
-Tbase TZ x2191 = x2189 >>> x2190;
-Tbase TZ x2192 = x29 * x610;
-Tbase TZ x2193 = x30 * x607;
-Tbase TZ x2194 = x2192 + x2193;
-Tbase TZ x2195 = 0x2;
-Tbase TZ x2196 = x604 * x2195;
-Tbase TZ x2197 = x23 * x2196;
-Tbase TZ x2198 = x24 * x601;
-Tbase TZ x2199 = 0x2;
-Tbase TZ x2200 = x598 * x2199;
-Tbase TZ x2201 = x25 * x2200;
-Tbase TZ x2202 = 0x2;
-Tbase TZ x2203 = x595 * x2202;
-Tbase TZ x2204 = x26 * x2203;
-Tbase TZ x2205 = x27 * x592;
-Tbase TZ x2206 = 0x2;
-Tbase TZ x2207 = x589 * x2206;
-Tbase TZ x2208 = x28 * x2207;
-Tbase TZ x2209 = x2205 + x2208;
-Tbase TZ x2210 = x2204 + x2209;
-Tbase TZ x2211 = x2201 + x2210;
-Tbase TZ x2212 = x2198 + x2211;
-Tbase TZ x2213 = x2197 + x2212;
-Tbase TZ x2214 = 0x3;
-Tbase TZ x2215 = x2214 * x2213;
-Tbase TZ x2216 = x2194 + x2215;
-Tbase TZ x2217 = x2191 + x2216;
-Tbase TZ x2218 = 0x1c;
-Tbase TZ x2219 = x2217 >>> x2218;
-Tbase TZ x2220 = x28 * x610;
-Tbase TZ x2221 = x29 * x607;
-Tbase TZ x2222 = x30 * x604;
-Tbase TZ x2223 = x2221 + x2222;
-Tbase TZ x2224 = x2220 + x2223;
-Tbase TZ x2225 = x23 * x601;
-Tbase TZ x2226 = x24 * x598;
-Tbase TZ x2227 = 0x2;
-Tbase TZ x2228 = x595 * x2227;
-Tbase TZ x2229 = x25 * x2228;
-Tbase TZ x2230 = x26 * x592;
-Tbase TZ x2231 = x27 * x589;
-Tbase TZ x2232 = x2230 + x2231;
-Tbase TZ x2233 = x2229 + x2232;
-Tbase TZ x2234 = x2226 + x2233;
-Tbase TZ x2235 = x2225 + x2234;
-Tbase TZ x2236 = 0x3;
-Tbase TZ x2237 = x2236 * x2235;
-Tbase TZ x2238 = x2224 + x2237;
-Tbase TZ x2239 = x2219 + x2238;
-Tbase TZ x2240 = 0x1b;
-Tbase TZ x2241 = x2239 >>> x2240;
-Tbase TZ x2242 = x27 * x610;
-Tbase TZ x2243 = 0x2;
-Tbase TZ x2244 = x607 * x2243;
-Tbase TZ x2245 = x28 * x2244;
-Tbase TZ x2246 = 0x2;
-Tbase TZ x2247 = x604 * x2246;
-Tbase TZ x2248 = x29 * x2247;
-Tbase TZ x2249 = x30 * x601;
-Tbase TZ x2250 = x2248 + x2249;
-Tbase TZ x2251 = x2245 + x2250;
-Tbase TZ x2252 = x2242 + x2251;
-Tbase TZ x2253 = 0x2;
-Tbase TZ x2254 = x598 * x2253;
-Tbase TZ x2255 = x23 * x2254;
-Tbase TZ x2256 = 0x2;
-Tbase TZ x2257 = x595 * x2256;
-Tbase TZ x2258 = x24 * x2257;
-Tbase TZ x2259 = 0x2;
-Tbase TZ x2260 = x592 * x2259;
-Tbase TZ x2261 = x25 * x2260;
-Tbase TZ x2262 = 0x2;
-Tbase TZ x2263 = x589 * x2262;
-Tbase TZ x2264 = x26 * x2263;
-Tbase TZ x2265 = x2261 + x2264;
-Tbase TZ x2266 = x2258 + x2265;
-Tbase TZ x2267 = x2255 + x2266;
-Tbase TZ x2268 = 0x3;
-Tbase TZ x2269 = x2268 * x2267;
-Tbase TZ x2270 = x2252 + x2269;
-Tbase TZ x2271 = x2241 + x2270;
-Tbase TZ x2272 = 0x1c;
-Tbase TZ x2273 = x2271 >>> x2272;
-Tbase TZ x2274 = x26 * x610;
-Tbase TZ x2275 = x27 * x607;
-Tbase TZ x2276 = 0x2;
-Tbase TZ x2277 = x604 * x2276;
-Tbase TZ x2278 = x28 * x2277;
-Tbase TZ x2279 = x29 * x601;
-Tbase TZ x2280 = x30 * x598;
-Tbase TZ x2281 = x2279 + x2280;
-Tbase TZ x2282 = x2278 + x2281;
-Tbase TZ x2283 = x2275 + x2282;
-Tbase TZ x2284 = x2274 + x2283;
-Tbase TZ x2285 = 0x2;
-Tbase TZ x2286 = x595 * x2285;
-Tbase TZ x2287 = x23 * x2286;
-Tbase TZ x2288 = x24 * x592;
-Tbase TZ x2289 = 0x2;
-Tbase TZ x2290 = x589 * x2289;
-Tbase TZ x2291 = x25 * x2290;
-Tbase TZ x2292 = x2288 + x2291;
-Tbase TZ x2293 = x2287 + x2292;
-Tbase TZ x2294 = 0x3;
-Tbase TZ x2295 = x2294 * x2293;
-Tbase TZ x2296 = x2284 + x2295;
-Tbase TZ x2297 = x2273 + x2296;
-Tbase TZ x2298 = 0x1c;
-Tbase TZ x2299 = x2297 >>> x2298;
-Tbase TZ x2300 = x25 * x610;
-Tbase TZ x2301 = x26 * x607;
-Tbase TZ x2302 = x27 * x604;
-Tbase TZ x2303 = x28 * x601;
-Tbase TZ x2304 = x29 * x598;
-Tbase TZ x2305 = x30 * x595;
-Tbase TZ x2306 = x2304 + x2305;
-Tbase TZ x2307 = x2303 + x2306;
-Tbase TZ x2308 = x2302 + x2307;
-Tbase TZ x2309 = x2301 + x2308;
-Tbase TZ x2310 = x2300 + x2309;
-Tbase TZ x2311 = x23 * x592;
-Tbase TZ x2312 = x24 * x589;
-Tbase TZ x2313 = x2311 + x2312;
-Tbase TZ x2314 = 0x3;
-Tbase TZ x2315 = x2314 * x2313;
-Tbase TZ x2316 = x2310 + x2315;
-Tbase TZ x2317 = x2299 + x2316;
-Tbase TZ x2318 = 0x1b;
-Tbase TZ x2319 = x2317 >>> x2318;
-Tbase TZ x2320 = x24 * x610;
-Tbase TZ x2321 = 0x2;
-Tbase TZ x2322 = x607 * x2321;
-Tbase TZ x2323 = x25 * x2322;
-Tbase TZ x2324 = 0x2;
-Tbase TZ x2325 = x604 * x2324;
-Tbase TZ x2326 = x26 * x2325;
-Tbase TZ x2327 = x27 * x601;
-Tbase TZ x2328 = 0x2;
-Tbase TZ x2329 = x598 * x2328;
-Tbase TZ x2330 = x28 * x2329;
-Tbase TZ x2331 = 0x2;
-Tbase TZ x2332 = x595 * x2331;
-Tbase TZ x2333 = x29 * x2332;
-Tbase TZ x2334 = x30 * x592;
-Tbase TZ x2335 = x2333 + x2334;
-Tbase TZ x2336 = x2330 + x2335;
-Tbase TZ x2337 = x2327 + x2336;
-Tbase TZ x2338 = x2326 + x2337;
-Tbase TZ x2339 = x2323 + x2338;
-Tbase TZ x2340 = x2320 + x2339;
-Tbase TZ x2341 = 0x2;
-Tbase TZ x2342 = x589 * x2341;
-Tbase TZ x2343 = x23 * x2342;
-Tbase TZ x2344 = 0x3;
-Tbase TZ x2345 = x2344 * x2343;
-Tbase TZ x2346 = x2340 + x2345;
-Tbase TZ x2347 = x2319 + x2346;
-Tbase TZ x2348 = 0x1c;
-Tbase TZ x2349 = x2347 >>> x2348;
-Tbase TZ x2350 = x23 * x610;
-Tbase TZ x2351 = x24 * x607;
-Tbase TZ x2352 = 0x2;
-Tbase TZ x2353 = x604 * x2352;
-Tbase TZ x2354 = x25 * x2353;
-Tbase TZ x2355 = x26 * x601;
-Tbase TZ x2356 = x27 * x598;
-Tbase TZ x2357 = 0x2;
-Tbase TZ x2358 = x595 * x2357;
-Tbase TZ x2359 = x28 * x2358;
-Tbase TZ x2360 = x29 * x592;
-Tbase TZ x2361 = x30 * x589;
-Tbase TZ x2362 = x2360 + x2361;
-Tbase TZ x2363 = x2359 + x2362;
-Tbase TZ x2364 = x2356 + x2363;
-Tbase TZ x2365 = x2355 + x2364;
-Tbase TZ x2366 = x2354 + x2365;
-Tbase TZ x2367 = x2351 + x2366;
-Tbase TZ x2368 = x2350 + x2367;
-Tbase TZ x2369 = x2349 + x2368;
-Tbase TZ x2370 = 0x1b;
-Tbase TZ x2371 = x2369 >>> x2370;
-Tbase TZ x2372 = 0x3;
-Tbase TZ x2373 = x2372 * x2371;
-Tbase TZ x2374 = 0xfffffff;
-Tbase TZ x2375 = x2189 & x2374;
-Tbase TZ x2376 = x2373 + x2375;
-Tbase TZ x2377 = 0x1c;
-Tbase TZ x2378 = x2376 >>> x2377;
-Tbase TZ x2379 = 0xfffffff;
-Tbase TZ x2380 = x2217 & x2379;
-Tbase TZ x2381 = x2378 + x2380;
-Tbase TZ x2382 = 0x7ffffff;
-Tbase TZ x2383 = x2369 & x2382;
-Tbase TZ x2384 = 0xfffffff;
-Tbase TZ x2385 = x2347 & x2384;
-Tbase TZ x2386 = 0x7ffffff;
-Tbase TZ x2387 = x2317 & x2386;
-Tbase TZ x2388 = 0xfffffff;
-Tbase TZ x2389 = x2297 & x2388;
-Tbase TZ x2390 = 0xfffffff;
-Tbase TZ x2391 = x2271 & x2390;
-Tbase TZ x2392 = 0x1c;
-Tbase TZ x2393 = x2381 >>> x2392;
-Tbase TZ x2394 = 0x7ffffff;
-Tbase TZ x2395 = x2239 & x2394;
-Tbase TZ x2396 = x2393 + x2395;
-Tbase TZ x2397 = 0xfffffff;
-Tbase TZ x2398 = x2381 & x2397;
-Tbase TZ x2399 = 0xfffffff;
-Tbase TZ x2400 = x2376 & x2399;
-Tbase TZ x2401 = x303 + x2383;
-Tbase TZ x2402 = x305 + x2385;
-Tbase TZ x2403 = x307 + x2387;
-Tbase TZ x2404 = x309 + x2389;
-Tbase TZ x2405 = x311 + x2391;
-Tbase TZ x2406 = x316 + x2396;
-Tbase TZ x2407 = x318 + x2398;
-Tbase TZ x2408 = x320 + x2400;
-Tbase TZ x2409 = x610 * x2408;
-Tbase TZ x2410 = 0x2;
-Tbase TZ x2411 = x2407 * x2410;
-Tbase TZ x2412 = x589 * x2411;
-Tbase TZ x2413 = 0x2;
-Tbase TZ x2414 = x2406 * x2413;
-Tbase TZ x2415 = x592 * x2414;
-Tbase TZ x2416 = 0x2;
-Tbase TZ x2417 = x2405 * x2416;
-Tbase TZ x2418 = x595 * x2417;
-Tbase TZ x2419 = 0x2;
-Tbase TZ x2420 = x2404 * x2419;
-Tbase TZ x2421 = x598 * x2420;
-Tbase TZ x2422 = 0x2;
-Tbase TZ x2423 = x2403 * x2422;
-Tbase TZ x2424 = x601 * x2423;
-Tbase TZ x2425 = 0x2;
-Tbase TZ x2426 = x2402 * x2425;
-Tbase TZ x2427 = x604 * x2426;
-Tbase TZ x2428 = 0x2;
-Tbase TZ x2429 = x2401 * x2428;
-Tbase TZ x2430 = x607 * x2429;
-Tbase TZ x2431 = x2427 + x2430;
-Tbase TZ x2432 = x2424 + x2431;
-Tbase TZ x2433 = x2421 + x2432;
-Tbase TZ x2434 = x2418 + x2433;
-Tbase TZ x2435 = x2415 + x2434;
-Tbase TZ x2436 = x2412 + x2435;
-Tbase TZ x2437 = 0x3;
-Tbase TZ x2438 = x2437 * x2436;
-Tbase TZ x2439 = x2409 + x2438;
-Tbase TZ x2440 = 0x1c;
-Tbase TZ x2441 = x2439 >>> x2440;
-Tbase TZ x2442 = x607 * x2408;
-Tbase TZ x2443 = x610 * x2407;
-Tbase TZ x2444 = x2442 + x2443;
-Tbase TZ x2445 = 0x2;
-Tbase TZ x2446 = x2406 * x2445;
-Tbase TZ x2447 = x589 * x2446;
-Tbase TZ x2448 = x592 * x2405;
-Tbase TZ x2449 = 0x2;
-Tbase TZ x2450 = x2404 * x2449;
-Tbase TZ x2451 = x595 * x2450;
-Tbase TZ x2452 = 0x2;
-Tbase TZ x2453 = x2403 * x2452;
-Tbase TZ x2454 = x598 * x2453;
-Tbase TZ x2455 = x601 * x2402;
-Tbase TZ x2456 = 0x2;
-Tbase TZ x2457 = x2401 * x2456;
-Tbase TZ x2458 = x604 * x2457;
-Tbase TZ x2459 = x2455 + x2458;
-Tbase TZ x2460 = x2454 + x2459;
-Tbase TZ x2461 = x2451 + x2460;
-Tbase TZ x2462 = x2448 + x2461;
-Tbase TZ x2463 = x2447 + x2462;
-Tbase TZ x2464 = 0x3;
-Tbase TZ x2465 = x2464 * x2463;
-Tbase TZ x2466 = x2444 + x2465;
-Tbase TZ x2467 = x2441 + x2466;
-Tbase TZ x2468 = 0x1c;
-Tbase TZ x2469 = x2467 >>> x2468;
-Tbase TZ x2470 = x604 * x2408;
-Tbase TZ x2471 = x607 * x2407;
-Tbase TZ x2472 = x610 * x2406;
-Tbase TZ x2473 = x2471 + x2472;
-Tbase TZ x2474 = x2470 + x2473;
-Tbase TZ x2475 = x589 * x2405;
-Tbase TZ x2476 = x592 * x2404;
-Tbase TZ x2477 = 0x2;
-Tbase TZ x2478 = x2403 * x2477;
-Tbase TZ x2479 = x595 * x2478;
-Tbase TZ x2480 = x598 * x2402;
-Tbase TZ x2481 = x601 * x2401;
-Tbase TZ x2482 = x2480 + x2481;
-Tbase TZ x2483 = x2479 + x2482;
-Tbase TZ x2484 = x2476 + x2483;
-Tbase TZ x2485 = x2475 + x2484;
-Tbase TZ x2486 = 0x3;
-Tbase TZ x2487 = x2486 * x2485;
-Tbase TZ x2488 = x2474 + x2487;
-Tbase TZ x2489 = x2469 + x2488;
-Tbase TZ x2490 = 0x1b;
-Tbase TZ x2491 = x2489 >>> x2490;
-Tbase TZ x2492 = x601 * x2408;
-Tbase TZ x2493 = 0x2;
-Tbase TZ x2494 = x2407 * x2493;
-Tbase TZ x2495 = x604 * x2494;
-Tbase TZ x2496 = 0x2;
-Tbase TZ x2497 = x2406 * x2496;
-Tbase TZ x2498 = x607 * x2497;
-Tbase TZ x2499 = x610 * x2405;
-Tbase TZ x2500 = x2498 + x2499;
-Tbase TZ x2501 = x2495 + x2500;
-Tbase TZ x2502 = x2492 + x2501;
-Tbase TZ x2503 = 0x2;
-Tbase TZ x2504 = x2404 * x2503;
-Tbase TZ x2505 = x589 * x2504;
-Tbase TZ x2506 = 0x2;
-Tbase TZ x2507 = x2403 * x2506;
-Tbase TZ x2508 = x592 * x2507;
-Tbase TZ x2509 = 0x2;
-Tbase TZ x2510 = x2402 * x2509;
-Tbase TZ x2511 = x595 * x2510;
-Tbase TZ x2512 = 0x2;
-Tbase TZ x2513 = x2401 * x2512;
-Tbase TZ x2514 = x598 * x2513;
-Tbase TZ x2515 = x2511 + x2514;
-Tbase TZ x2516 = x2508 + x2515;
-Tbase TZ x2517 = x2505 + x2516;
-Tbase TZ x2518 = 0x3;
-Tbase TZ x2519 = x2518 * x2517;
-Tbase TZ x2520 = x2502 + x2519;
-Tbase TZ x2521 = x2491 + x2520;
-Tbase TZ x2522 = 0x1c;
-Tbase TZ x2523 = x2521 >>> x2522;
-Tbase TZ x2524 = x598 * x2408;
-Tbase TZ x2525 = x601 * x2407;
-Tbase TZ x2526 = 0x2;
-Tbase TZ x2527 = x2406 * x2526;
-Tbase TZ x2528 = x604 * x2527;
-Tbase TZ x2529 = x607 * x2405;
-Tbase TZ x2530 = x610 * x2404;
-Tbase TZ x2531 = x2529 + x2530;
-Tbase TZ x2532 = x2528 + x2531;
-Tbase TZ x2533 = x2525 + x2532;
-Tbase TZ x2534 = x2524 + x2533;
-Tbase TZ x2535 = 0x2;
-Tbase TZ x2536 = x2403 * x2535;
-Tbase TZ x2537 = x589 * x2536;
-Tbase TZ x2538 = x592 * x2402;
-Tbase TZ x2539 = 0x2;
-Tbase TZ x2540 = x2401 * x2539;
-Tbase TZ x2541 = x595 * x2540;
-Tbase TZ x2542 = x2538 + x2541;
-Tbase TZ x2543 = x2537 + x2542;
-Tbase TZ x2544 = 0x3;
-Tbase TZ x2545 = x2544 * x2543;
-Tbase TZ x2546 = x2534 + x2545;
-Tbase TZ x2547 = x2523 + x2546;
-Tbase TZ x2548 = 0x1c;
-Tbase TZ x2549 = x2547 >>> x2548;
-Tbase TZ x2550 = x595 * x2408;
-Tbase TZ x2551 = x598 * x2407;
-Tbase TZ x2552 = x601 * x2406;
-Tbase TZ x2553 = x604 * x2405;
-Tbase TZ x2554 = x607 * x2404;
-Tbase TZ x2555 = x610 * x2403;
-Tbase TZ x2556 = x2554 + x2555;
-Tbase TZ x2557 = x2553 + x2556;
-Tbase TZ x2558 = x2552 + x2557;
-Tbase TZ x2559 = x2551 + x2558;
-Tbase TZ x2560 = x2550 + x2559;
-Tbase TZ x2561 = x589 * x2402;
-Tbase TZ x2562 = x592 * x2401;
-Tbase TZ x2563 = x2561 + x2562;
-Tbase TZ x2564 = 0x3;
-Tbase TZ x2565 = x2564 * x2563;
-Tbase TZ x2566 = x2560 + x2565;
-Tbase TZ x2567 = x2549 + x2566;
-Tbase TZ x2568 = 0x1b;
-Tbase TZ x2569 = x2567 >>> x2568;
-Tbase TZ x2570 = x592 * x2408;
-Tbase TZ x2571 = 0x2;
-Tbase TZ x2572 = x2407 * x2571;
-Tbase TZ x2573 = x595 * x2572;
-Tbase TZ x2574 = 0x2;
-Tbase TZ x2575 = x2406 * x2574;
-Tbase TZ x2576 = x598 * x2575;
-Tbase TZ x2577 = x601 * x2405;
-Tbase TZ x2578 = 0x2;
-Tbase TZ x2579 = x2404 * x2578;
-Tbase TZ x2580 = x604 * x2579;
-Tbase TZ x2581 = 0x2;
-Tbase TZ x2582 = x2403 * x2581;
-Tbase TZ x2583 = x607 * x2582;
-Tbase TZ x2584 = x610 * x2402;
-Tbase TZ x2585 = x2583 + x2584;
-Tbase TZ x2586 = x2580 + x2585;
-Tbase TZ x2587 = x2577 + x2586;
-Tbase TZ x2588 = x2576 + x2587;
-Tbase TZ x2589 = x2573 + x2588;
-Tbase TZ x2590 = x2570 + x2589;
-Tbase TZ x2591 = 0x2;
-Tbase TZ x2592 = x2401 * x2591;
-Tbase TZ x2593 = x589 * x2592;
-Tbase TZ x2594 = 0x3;
-Tbase TZ x2595 = x2594 * x2593;
-Tbase TZ x2596 = x2590 + x2595;
-Tbase TZ x2597 = x2569 + x2596;
-Tbase TZ x2598 = 0x1c;
-Tbase TZ x2599 = x2597 >>> x2598;
-Tbase TZ x2600 = x589 * x2408;
-Tbase TZ x2601 = x592 * x2407;
-Tbase TZ x2602 = 0x2;
-Tbase TZ x2603 = x2406 * x2602;
-Tbase TZ x2604 = x595 * x2603;
-Tbase TZ x2605 = x598 * x2405;
-Tbase TZ x2606 = x601 * x2404;
-Tbase TZ x2607 = 0x2;
-Tbase TZ x2608 = x2403 * x2607;
-Tbase TZ x2609 = x604 * x2608;
-Tbase TZ x2610 = x607 * x2402;
-Tbase TZ x2611 = x610 * x2401;
-Tbase TZ x2612 = x2610 + x2611;
-Tbase TZ x2613 = x2609 + x2612;
-Tbase TZ x2614 = x2606 + x2613;
-Tbase TZ x2615 = x2605 + x2614;
-Tbase TZ x2616 = x2604 + x2615;
-Tbase TZ x2617 = x2601 + x2616;
-Tbase TZ x2618 = x2600 + x2617;
-Tbase TZ x2619 = x2599 + x2618;
-Tbase TZ x2620 = 0x1b;
-Tbase TZ x2621 = x2619 >>> x2620;
-Tbase TZ x2622 = 0x3;
-Tbase TZ x2623 = x2622 * x2621;
-Tbase TZ x2624 = 0xfffffff;
-Tbase TZ x2625 = x2439 & x2624;
-Tbase TZ x2626 = x2623 + x2625;
-Tbase TZ x2627 = 0x1c;
-Tbase TZ x2628 = x2626 >>> x2627;
-Tbase TZ x2629 = 0xfffffff;
-Tbase TZ x2630 = x2467 & x2629;
-Tbase TZ x2631 = x2628 + x2630;
-Tbase TZ x2632 = 0x7ffffff;
-Tbase TZ x2633 = x2619 & x2632;
-Tbase TZ x2634 = 0xfffffff;
-Tbase TZ x2635 = x2597 & x2634;
-Tbase TZ x2636 = 0x7ffffff;
-Tbase TZ x2637 = x2567 & x2636;
-Tbase TZ x2638 = 0xfffffff;
-Tbase TZ x2639 = x2547 & x2638;
-Tbase TZ x2640 = 0xfffffff;
-Tbase TZ x2641 = x2521 & x2640;
-Tbase TZ x2642 = 0x1c;
-Tbase TZ x2643 = x2631 >>> x2642;
-Tbase TZ x2644 = 0x7ffffff;
-Tbase TZ x2645 = x2489 & x2644;
-Tbase TZ x2646 = x2643 + x2645;
-Tbase TZ x2647 = 0xfffffff;
-Tbase TZ x2648 = x2631 & x2647;
-Tbase TZ x2649 = 0xfffffff;
-Tbase TZ x2650 = x2626 & x2649;
-(Return x2141, Return x2143, Return x2145, Return x2147,
-Return x2149, Return x2154, Return x2156, Return x2158,
-(Return x2633, Return x2635, Return x2637, Return x2639,
-Return x2641, Return x2646, Return x2648, Return x2650),
-(Return x1367, Return x1369, Return x1371, Return x1373,
-Return x1375, Return x1380, Return x1382, Return x1384),
-(Return x1899, Return x1901, Return x1903, Return x1905,
-Return x1907, Return x1912, Return x1914, Return x1916))
- : forall var : base_type -> Type,
- expr base_type op
- (TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> ...)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF2213_32Reflective/Reified/LadderStepJavaDisplay.v b/src/SpecificGen/GF2213_32Reflective/Reified/LadderStepJavaDisplay.v
deleted file mode 100644
index e01da5b9a..000000000
--- a/src/SpecificGen/GF2213_32Reflective/Reified/LadderStepJavaDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF2213_32Reflective.Reified.LadderStep.
-Require Export Crypto.Reflection.Z.JavaNotations.
-
-Print rladderstepW.
diff --git a/src/SpecificGen/GF2213_32Reflective/Reified/Mul.v b/src/SpecificGen/GF2213_32Reflective/Reified/Mul.v
deleted file mode 100644
index 08c235a9c..000000000
--- a/src/SpecificGen/GF2213_32Reflective/Reified/Mul.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF2213_32Reflective.CommonBinOp.
-
-Definition rmulZ_sig : rexpr_binop_sig mul. Proof. reify_sig. Defined.
-Definition rmulW := Eval vm_compute in rword_of_Z rmulZ_sig.
-Lemma rmulW_correct_and_bounded_gen : correct_and_bounded_genT rmulW rmulZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rmul_output_bounds := Eval vm_compute in compute_bounds rmulW ExprBinOp_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rmulW_correct_and_bounded
- := ExprBinOp_correct_and_bounded
- rmulW mul rmulZ_sig rmulW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Mul", compute_bounds_for_display rmulW ExprBinOp_bounds).
-Compute ("Mul overflows? ", sanity_compute rmulW ExprBinOp_bounds).
-Compute ("Mul overflows (error if it does)? ", sanity_check rmulW ExprBinOp_bounds).
diff --git a/src/SpecificGen/GF2213_32Reflective/Reified/MulDisplay.log b/src/SpecificGen/GF2213_32Reflective/Reified/MulDisplay.log
deleted file mode 100644
index e4af15465..000000000
--- a/src/SpecificGen/GF2213_32Reflective/Reified/MulDisplay.log
+++ /dev/null
@@ -1,214 +0,0 @@
-rmulW =
-fun var : Syntax.base_type -> Type =>
-λ x x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 : var Syntax.TZ,
-Tbase Syntax.TZ x15 = x6 * x14;
-Tbase Syntax.TZ x16 = x13 * 0x2;
-Tbase Syntax.TZ x17 = x * x16;
-Tbase Syntax.TZ x18 = x12 * 0x2;
-Tbase Syntax.TZ x19 = x0 * x18;
-Tbase Syntax.TZ x20 = x11 * 0x2;
-Tbase Syntax.TZ x21 = x1 * x20;
-Tbase Syntax.TZ x22 = x10 * 0x2;
-Tbase Syntax.TZ x23 = x2 * x22;
-Tbase Syntax.TZ x24 = x9 * 0x2;
-Tbase Syntax.TZ x25 = x3 * x24;
-Tbase Syntax.TZ x26 = x8 * 0x2;
-Tbase Syntax.TZ x27 = x4 * x26;
-Tbase Syntax.TZ x28 = x7 * 0x2;
-Tbase Syntax.TZ x29 = x5 * x28;
-Tbase Syntax.TZ x30 = x27 + x29;
-Tbase Syntax.TZ x31 = x25 + x30;
-Tbase Syntax.TZ x32 = x23 + x31;
-Tbase Syntax.TZ x33 = x21 + x32;
-Tbase Syntax.TZ x34 = x19 + x33;
-Tbase Syntax.TZ x35 = x17 + x34;
-Tbase Syntax.TZ x36 = 0x3 * x35;
-Tbase Syntax.TZ x37 = x15 + x36;
-Tbase Syntax.TZ x38 = x37 >> 0x1c;
-Tbase Syntax.TZ x39 = x5 * x14;
-Tbase Syntax.TZ x40 = x6 * x13;
-Tbase Syntax.TZ x41 = x39 + x40;
-Tbase Syntax.TZ x42 = x12 * 0x2;
-Tbase Syntax.TZ x43 = x * x42;
-Tbase Syntax.TZ x44 = x0 * x11;
-Tbase Syntax.TZ x45 = x10 * 0x2;
-Tbase Syntax.TZ x46 = x1 * x45;
-Tbase Syntax.TZ x47 = x9 * 0x2;
-Tbase Syntax.TZ x48 = x2 * x47;
-Tbase Syntax.TZ x49 = x3 * x8;
-Tbase Syntax.TZ x50 = x7 * 0x2;
-Tbase Syntax.TZ x51 = x4 * x50;
-Tbase Syntax.TZ x52 = x49 + x51;
-Tbase Syntax.TZ x53 = x48 + x52;
-Tbase Syntax.TZ x54 = x46 + x53;
-Tbase Syntax.TZ x55 = x44 + x54;
-Tbase Syntax.TZ x56 = x43 + x55;
-Tbase Syntax.TZ x57 = 0x3 * x56;
-Tbase Syntax.TZ x58 = x41 + x57;
-Tbase Syntax.TZ x59 = x38 + x58;
-Tbase Syntax.TZ x60 = x59 >> 0x1c;
-Tbase Syntax.TZ x61 = x4 * x14;
-Tbase Syntax.TZ x62 = x5 * x13;
-Tbase Syntax.TZ x63 = x6 * x12;
-Tbase Syntax.TZ x64 = x62 + x63;
-Tbase Syntax.TZ x65 = x61 + x64;
-Tbase Syntax.TZ x66 = x * x11;
-Tbase Syntax.TZ x67 = x0 * x10;
-Tbase Syntax.TZ x68 = x9 * 0x2;
-Tbase Syntax.TZ x69 = x1 * x68;
-Tbase Syntax.TZ x70 = x2 * x8;
-Tbase Syntax.TZ x71 = x3 * x7;
-Tbase Syntax.TZ x72 = x70 + x71;
-Tbase Syntax.TZ x73 = x69 + x72;
-Tbase Syntax.TZ x74 = x67 + x73;
-Tbase Syntax.TZ x75 = x66 + x74;
-Tbase Syntax.TZ x76 = 0x3 * x75;
-Tbase Syntax.TZ x77 = x65 + x76;
-Tbase Syntax.TZ x78 = x60 + x77;
-Tbase Syntax.TZ x79 = x78 >> 0x1b;
-Tbase Syntax.TZ x80 = x3 * x14;
-Tbase Syntax.TZ x81 = x13 * 0x2;
-Tbase Syntax.TZ x82 = x4 * x81;
-Tbase Syntax.TZ x83 = x12 * 0x2;
-Tbase Syntax.TZ x84 = x5 * x83;
-Tbase Syntax.TZ x85 = x6 * x11;
-Tbase Syntax.TZ x86 = x84 + x85;
-Tbase Syntax.TZ x87 = x82 + x86;
-Tbase Syntax.TZ x88 = x80 + x87;
-Tbase Syntax.TZ x89 = x10 * 0x2;
-Tbase Syntax.TZ x90 = x * x89;
-Tbase Syntax.TZ x91 = x9 * 0x2;
-Tbase Syntax.TZ x92 = x0 * x91;
-Tbase Syntax.TZ x93 = x8 * 0x2;
-Tbase Syntax.TZ x94 = x1 * x93;
-Tbase Syntax.TZ x95 = x7 * 0x2;
-Tbase Syntax.TZ x96 = x2 * x95;
-Tbase Syntax.TZ x97 = x94 + x96;
-Tbase Syntax.TZ x98 = x92 + x97;
-Tbase Syntax.TZ x99 = x90 + x98;
-Tbase Syntax.TZ x100 = 0x3 * x99;
-Tbase Syntax.TZ x101 = x88 + x100;
-Tbase Syntax.TZ x102 = x79 + x101;
-Tbase Syntax.TZ x103 = x102 >> 0x1c;
-Tbase Syntax.TZ x104 = x2 * x14;
-Tbase Syntax.TZ x105 = x3 * x13;
-Tbase Syntax.TZ x106 = x12 * 0x2;
-Tbase Syntax.TZ x107 = x4 * x106;
-Tbase Syntax.TZ x108 = x5 * x11;
-Tbase Syntax.TZ x109 = x6 * x10;
-Tbase Syntax.TZ x110 = x108 + x109;
-Tbase Syntax.TZ x111 = x107 + x110;
-Tbase Syntax.TZ x112 = x105 + x111;
-Tbase Syntax.TZ x113 = x104 + x112;
-Tbase Syntax.TZ x114 = x9 * 0x2;
-Tbase Syntax.TZ x115 = x * x114;
-Tbase Syntax.TZ x116 = x0 * x8;
-Tbase Syntax.TZ x117 = x7 * 0x2;
-Tbase Syntax.TZ x118 = x1 * x117;
-Tbase Syntax.TZ x119 = x116 + x118;
-Tbase Syntax.TZ x120 = x115 + x119;
-Tbase Syntax.TZ x121 = 0x3 * x120;
-Tbase Syntax.TZ x122 = x113 + x121;
-Tbase Syntax.TZ x123 = x103 + x122;
-Tbase Syntax.TZ x124 = x123 >> 0x1c;
-Tbase Syntax.TZ x125 = x1 * x14;
-Tbase Syntax.TZ x126 = x2 * x13;
-Tbase Syntax.TZ x127 = x3 * x12;
-Tbase Syntax.TZ x128 = x4 * x11;
-Tbase Syntax.TZ x129 = x5 * x10;
-Tbase Syntax.TZ x130 = x6 * x9;
-Tbase Syntax.TZ x131 = x129 + x130;
-Tbase Syntax.TZ x132 = x128 + x131;
-Tbase Syntax.TZ x133 = x127 + x132;
-Tbase Syntax.TZ x134 = x126 + x133;
-Tbase Syntax.TZ x135 = x125 + x134;
-Tbase Syntax.TZ x136 = x * x8;
-Tbase Syntax.TZ x137 = x0 * x7;
-Tbase Syntax.TZ x138 = x136 + x137;
-Tbase Syntax.TZ x139 = 0x3 * x138;
-Tbase Syntax.TZ x140 = x135 + x139;
-Tbase Syntax.TZ x141 = x124 + x140;
-Tbase Syntax.TZ x142 = x141 >> 0x1b;
-Tbase Syntax.TZ x143 = x0 * x14;
-Tbase Syntax.TZ x144 = x13 * 0x2;
-Tbase Syntax.TZ x145 = x1 * x144;
-Tbase Syntax.TZ x146 = x12 * 0x2;
-Tbase Syntax.TZ x147 = x2 * x146;
-Tbase Syntax.TZ x148 = x3 * x11;
-Tbase Syntax.TZ x149 = x10 * 0x2;
-Tbase Syntax.TZ x150 = x4 * x149;
-Tbase Syntax.TZ x151 = x9 * 0x2;
-Tbase Syntax.TZ x152 = x5 * x151;
-Tbase Syntax.TZ x153 = x6 * x8;
-Tbase Syntax.TZ x154 = x152 + x153;
-Tbase Syntax.TZ x155 = x150 + x154;
-Tbase Syntax.TZ x156 = x148 + x155;
-Tbase Syntax.TZ x157 = x147 + x156;
-Tbase Syntax.TZ x158 = x145 + x157;
-Tbase Syntax.TZ x159 = x143 + x158;
-Tbase Syntax.TZ x160 = x7 * 0x2;
-Tbase Syntax.TZ x161 = x * x160;
-Tbase Syntax.TZ x162 = 0x3 * x161;
-Tbase Syntax.TZ x163 = x159 + x162;
-Tbase Syntax.TZ x164 = x142 + x163;
-Tbase Syntax.TZ x165 = x164 >> 0x1c;
-Tbase Syntax.TZ x166 = x * x14;
-Tbase Syntax.TZ x167 = x0 * x13;
-Tbase Syntax.TZ x168 = x12 * 0x2;
-Tbase Syntax.TZ x169 = x1 * x168;
-Tbase Syntax.TZ x170 = x2 * x11;
-Tbase Syntax.TZ x171 = x3 * x10;
-Tbase Syntax.TZ x172 = x9 * 0x2;
-Tbase Syntax.TZ x173 = x4 * x172;
-Tbase Syntax.TZ x174 = x5 * x8;
-Tbase Syntax.TZ x175 = x6 * x7;
-Tbase Syntax.TZ x176 = x174 + x175;
-Tbase Syntax.TZ x177 = x173 + x176;
-Tbase Syntax.TZ x178 = x171 + x177;
-Tbase Syntax.TZ x179 = x170 + x178;
-Tbase Syntax.TZ x180 = x169 + x179;
-Tbase Syntax.TZ x181 = x167 + x180;
-Tbase Syntax.TZ x182 = x166 + x181;
-Tbase Syntax.TZ x183 = x165 + x182;
-Tbase Syntax.TZ x184 = x183 >> 0x1b;
-Tbase Syntax.TZ x185 = 0x3 * x184;
-Tbase Syntax.TZ x186 = x37 & 0xfffffff;
-Tbase Syntax.TZ x187 = x185 + x186;
-Tbase Syntax.TZ x188 = x187 >> 0x1c;
-Tbase Syntax.TZ x189 = x59 & 0xfffffff;
-Tbase Syntax.TZ x190 = x188 + x189;
-Tbase Syntax.TZ x191 = x183 & 0x7ffffff;
-Tbase Syntax.TZ x192 = x164 & 0xfffffff;
-Tbase Syntax.TZ x193 = x141 & 0x7ffffff;
-Tbase Syntax.TZ x194 = x123 & 0xfffffff;
-Tbase Syntax.TZ x195 = x102 & 0xfffffff;
-Tbase Syntax.TZ x196 = x190 >> 0x1c;
-Tbase Syntax.TZ x197 = x78 & 0x7ffffff;
-Tbase Syntax.TZ x198 = x196 + x197;
-Tbase Syntax.TZ x199 = x190 & 0xfffffff;
-Tbase Syntax.TZ x200 = x187 & 0xfffffff;
-(Return x191, Return x192, Return x193, Return x194,
-Return x195, Return x198, Return x199, Return x200)
- : forall var : Syntax.base_type -> Type,
- expr Syntax.base_type Syntax.op
- (Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF2213_32Reflective/Reified/MulDisplay.v b/src/SpecificGen/GF2213_32Reflective/Reified/MulDisplay.v
deleted file mode 100644
index eacf666a4..000000000
--- a/src/SpecificGen/GF2213_32Reflective/Reified/MulDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF2213_32Reflective.Reified.Mul.
-Require Export Crypto.Reflection.Z.CNotations.
-
-Print rmulW.
diff --git a/src/SpecificGen/GF2213_32Reflective/Reified/MulJavaDisplay.log b/src/SpecificGen/GF2213_32Reflective/Reified/MulJavaDisplay.log
deleted file mode 100644
index 0c4efc86c..000000000
--- a/src/SpecificGen/GF2213_32Reflective/Reified/MulJavaDisplay.log
+++ /dev/null
@@ -1,214 +0,0 @@
-rmulW =
-fun var : Syntax.base_type -> Type =>
-λ x x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 : var Syntax.TZ,
-Tbase Syntax.TZ x15 = x6 * x14;
-Tbase Syntax.TZ x16 = x13 * 0x2;
-Tbase Syntax.TZ x17 = x * x16;
-Tbase Syntax.TZ x18 = x12 * 0x2;
-Tbase Syntax.TZ x19 = x0 * x18;
-Tbase Syntax.TZ x20 = x11 * 0x2;
-Tbase Syntax.TZ x21 = x1 * x20;
-Tbase Syntax.TZ x22 = x10 * 0x2;
-Tbase Syntax.TZ x23 = x2 * x22;
-Tbase Syntax.TZ x24 = x9 * 0x2;
-Tbase Syntax.TZ x25 = x3 * x24;
-Tbase Syntax.TZ x26 = x8 * 0x2;
-Tbase Syntax.TZ x27 = x4 * x26;
-Tbase Syntax.TZ x28 = x7 * 0x2;
-Tbase Syntax.TZ x29 = x5 * x28;
-Tbase Syntax.TZ x30 = x27 + x29;
-Tbase Syntax.TZ x31 = x25 + x30;
-Tbase Syntax.TZ x32 = x23 + x31;
-Tbase Syntax.TZ x33 = x21 + x32;
-Tbase Syntax.TZ x34 = x19 + x33;
-Tbase Syntax.TZ x35 = x17 + x34;
-Tbase Syntax.TZ x36 = 0x3 * x35;
-Tbase Syntax.TZ x37 = x15 + x36;
-Tbase Syntax.TZ x38 = x37 >>> 0x1c;
-Tbase Syntax.TZ x39 = x5 * x14;
-Tbase Syntax.TZ x40 = x6 * x13;
-Tbase Syntax.TZ x41 = x39 + x40;
-Tbase Syntax.TZ x42 = x12 * 0x2;
-Tbase Syntax.TZ x43 = x * x42;
-Tbase Syntax.TZ x44 = x0 * x11;
-Tbase Syntax.TZ x45 = x10 * 0x2;
-Tbase Syntax.TZ x46 = x1 * x45;
-Tbase Syntax.TZ x47 = x9 * 0x2;
-Tbase Syntax.TZ x48 = x2 * x47;
-Tbase Syntax.TZ x49 = x3 * x8;
-Tbase Syntax.TZ x50 = x7 * 0x2;
-Tbase Syntax.TZ x51 = x4 * x50;
-Tbase Syntax.TZ x52 = x49 + x51;
-Tbase Syntax.TZ x53 = x48 + x52;
-Tbase Syntax.TZ x54 = x46 + x53;
-Tbase Syntax.TZ x55 = x44 + x54;
-Tbase Syntax.TZ x56 = x43 + x55;
-Tbase Syntax.TZ x57 = 0x3 * x56;
-Tbase Syntax.TZ x58 = x41 + x57;
-Tbase Syntax.TZ x59 = x38 + x58;
-Tbase Syntax.TZ x60 = x59 >>> 0x1c;
-Tbase Syntax.TZ x61 = x4 * x14;
-Tbase Syntax.TZ x62 = x5 * x13;
-Tbase Syntax.TZ x63 = x6 * x12;
-Tbase Syntax.TZ x64 = x62 + x63;
-Tbase Syntax.TZ x65 = x61 + x64;
-Tbase Syntax.TZ x66 = x * x11;
-Tbase Syntax.TZ x67 = x0 * x10;
-Tbase Syntax.TZ x68 = x9 * 0x2;
-Tbase Syntax.TZ x69 = x1 * x68;
-Tbase Syntax.TZ x70 = x2 * x8;
-Tbase Syntax.TZ x71 = x3 * x7;
-Tbase Syntax.TZ x72 = x70 + x71;
-Tbase Syntax.TZ x73 = x69 + x72;
-Tbase Syntax.TZ x74 = x67 + x73;
-Tbase Syntax.TZ x75 = x66 + x74;
-Tbase Syntax.TZ x76 = 0x3 * x75;
-Tbase Syntax.TZ x77 = x65 + x76;
-Tbase Syntax.TZ x78 = x60 + x77;
-Tbase Syntax.TZ x79 = x78 >>> 0x1b;
-Tbase Syntax.TZ x80 = x3 * x14;
-Tbase Syntax.TZ x81 = x13 * 0x2;
-Tbase Syntax.TZ x82 = x4 * x81;
-Tbase Syntax.TZ x83 = x12 * 0x2;
-Tbase Syntax.TZ x84 = x5 * x83;
-Tbase Syntax.TZ x85 = x6 * x11;
-Tbase Syntax.TZ x86 = x84 + x85;
-Tbase Syntax.TZ x87 = x82 + x86;
-Tbase Syntax.TZ x88 = x80 + x87;
-Tbase Syntax.TZ x89 = x10 * 0x2;
-Tbase Syntax.TZ x90 = x * x89;
-Tbase Syntax.TZ x91 = x9 * 0x2;
-Tbase Syntax.TZ x92 = x0 * x91;
-Tbase Syntax.TZ x93 = x8 * 0x2;
-Tbase Syntax.TZ x94 = x1 * x93;
-Tbase Syntax.TZ x95 = x7 * 0x2;
-Tbase Syntax.TZ x96 = x2 * x95;
-Tbase Syntax.TZ x97 = x94 + x96;
-Tbase Syntax.TZ x98 = x92 + x97;
-Tbase Syntax.TZ x99 = x90 + x98;
-Tbase Syntax.TZ x100 = 0x3 * x99;
-Tbase Syntax.TZ x101 = x88 + x100;
-Tbase Syntax.TZ x102 = x79 + x101;
-Tbase Syntax.TZ x103 = x102 >>> 0x1c;
-Tbase Syntax.TZ x104 = x2 * x14;
-Tbase Syntax.TZ x105 = x3 * x13;
-Tbase Syntax.TZ x106 = x12 * 0x2;
-Tbase Syntax.TZ x107 = x4 * x106;
-Tbase Syntax.TZ x108 = x5 * x11;
-Tbase Syntax.TZ x109 = x6 * x10;
-Tbase Syntax.TZ x110 = x108 + x109;
-Tbase Syntax.TZ x111 = x107 + x110;
-Tbase Syntax.TZ x112 = x105 + x111;
-Tbase Syntax.TZ x113 = x104 + x112;
-Tbase Syntax.TZ x114 = x9 * 0x2;
-Tbase Syntax.TZ x115 = x * x114;
-Tbase Syntax.TZ x116 = x0 * x8;
-Tbase Syntax.TZ x117 = x7 * 0x2;
-Tbase Syntax.TZ x118 = x1 * x117;
-Tbase Syntax.TZ x119 = x116 + x118;
-Tbase Syntax.TZ x120 = x115 + x119;
-Tbase Syntax.TZ x121 = 0x3 * x120;
-Tbase Syntax.TZ x122 = x113 + x121;
-Tbase Syntax.TZ x123 = x103 + x122;
-Tbase Syntax.TZ x124 = x123 >>> 0x1c;
-Tbase Syntax.TZ x125 = x1 * x14;
-Tbase Syntax.TZ x126 = x2 * x13;
-Tbase Syntax.TZ x127 = x3 * x12;
-Tbase Syntax.TZ x128 = x4 * x11;
-Tbase Syntax.TZ x129 = x5 * x10;
-Tbase Syntax.TZ x130 = x6 * x9;
-Tbase Syntax.TZ x131 = x129 + x130;
-Tbase Syntax.TZ x132 = x128 + x131;
-Tbase Syntax.TZ x133 = x127 + x132;
-Tbase Syntax.TZ x134 = x126 + x133;
-Tbase Syntax.TZ x135 = x125 + x134;
-Tbase Syntax.TZ x136 = x * x8;
-Tbase Syntax.TZ x137 = x0 * x7;
-Tbase Syntax.TZ x138 = x136 + x137;
-Tbase Syntax.TZ x139 = 0x3 * x138;
-Tbase Syntax.TZ x140 = x135 + x139;
-Tbase Syntax.TZ x141 = x124 + x140;
-Tbase Syntax.TZ x142 = x141 >>> 0x1b;
-Tbase Syntax.TZ x143 = x0 * x14;
-Tbase Syntax.TZ x144 = x13 * 0x2;
-Tbase Syntax.TZ x145 = x1 * x144;
-Tbase Syntax.TZ x146 = x12 * 0x2;
-Tbase Syntax.TZ x147 = x2 * x146;
-Tbase Syntax.TZ x148 = x3 * x11;
-Tbase Syntax.TZ x149 = x10 * 0x2;
-Tbase Syntax.TZ x150 = x4 * x149;
-Tbase Syntax.TZ x151 = x9 * 0x2;
-Tbase Syntax.TZ x152 = x5 * x151;
-Tbase Syntax.TZ x153 = x6 * x8;
-Tbase Syntax.TZ x154 = x152 + x153;
-Tbase Syntax.TZ x155 = x150 + x154;
-Tbase Syntax.TZ x156 = x148 + x155;
-Tbase Syntax.TZ x157 = x147 + x156;
-Tbase Syntax.TZ x158 = x145 + x157;
-Tbase Syntax.TZ x159 = x143 + x158;
-Tbase Syntax.TZ x160 = x7 * 0x2;
-Tbase Syntax.TZ x161 = x * x160;
-Tbase Syntax.TZ x162 = 0x3 * x161;
-Tbase Syntax.TZ x163 = x159 + x162;
-Tbase Syntax.TZ x164 = x142 + x163;
-Tbase Syntax.TZ x165 = x164 >>> 0x1c;
-Tbase Syntax.TZ x166 = x * x14;
-Tbase Syntax.TZ x167 = x0 * x13;
-Tbase Syntax.TZ x168 = x12 * 0x2;
-Tbase Syntax.TZ x169 = x1 * x168;
-Tbase Syntax.TZ x170 = x2 * x11;
-Tbase Syntax.TZ x171 = x3 * x10;
-Tbase Syntax.TZ x172 = x9 * 0x2;
-Tbase Syntax.TZ x173 = x4 * x172;
-Tbase Syntax.TZ x174 = x5 * x8;
-Tbase Syntax.TZ x175 = x6 * x7;
-Tbase Syntax.TZ x176 = x174 + x175;
-Tbase Syntax.TZ x177 = x173 + x176;
-Tbase Syntax.TZ x178 = x171 + x177;
-Tbase Syntax.TZ x179 = x170 + x178;
-Tbase Syntax.TZ x180 = x169 + x179;
-Tbase Syntax.TZ x181 = x167 + x180;
-Tbase Syntax.TZ x182 = x166 + x181;
-Tbase Syntax.TZ x183 = x165 + x182;
-Tbase Syntax.TZ x184 = x183 >>> 0x1b;
-Tbase Syntax.TZ x185 = 0x3 * x184;
-Tbase Syntax.TZ x186 = x37 & 0xfffffff;
-Tbase Syntax.TZ x187 = x185 + x186;
-Tbase Syntax.TZ x188 = x187 >>> 0x1c;
-Tbase Syntax.TZ x189 = x59 & 0xfffffff;
-Tbase Syntax.TZ x190 = x188 + x189;
-Tbase Syntax.TZ x191 = x183 & 0x7ffffff;
-Tbase Syntax.TZ x192 = x164 & 0xfffffff;
-Tbase Syntax.TZ x193 = x141 & 0x7ffffff;
-Tbase Syntax.TZ x194 = x123 & 0xfffffff;
-Tbase Syntax.TZ x195 = x102 & 0xfffffff;
-Tbase Syntax.TZ x196 = x190 >>> 0x1c;
-Tbase Syntax.TZ x197 = x78 & 0x7ffffff;
-Tbase Syntax.TZ x198 = x196 + x197;
-Tbase Syntax.TZ x199 = x190 & 0xfffffff;
-Tbase Syntax.TZ x200 = x187 & 0xfffffff;
-(Return x191, Return x192, Return x193, Return x194,
-Return x195, Return x198, Return x199, Return x200)
- : forall var : Syntax.base_type -> Type,
- expr Syntax.base_type Syntax.op
- (Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF2213_32Reflective/Reified/MulJavaDisplay.v b/src/SpecificGen/GF2213_32Reflective/Reified/MulJavaDisplay.v
deleted file mode 100644
index 67f57ed42..000000000
--- a/src/SpecificGen/GF2213_32Reflective/Reified/MulJavaDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF2213_32Reflective.Reified.Mul.
-Require Export Crypto.Reflection.Z.JavaNotations.
-
-Print rmulW.
diff --git a/src/SpecificGen/GF2213_32Reflective/Reified/Opp.v b/src/SpecificGen/GF2213_32Reflective/Reified/Opp.v
deleted file mode 100644
index 091cb96de..000000000
--- a/src/SpecificGen/GF2213_32Reflective/Reified/Opp.v
+++ /dev/null
@@ -1,12 +0,0 @@
-Require Import Crypto.SpecificGen.GF2213_32Reflective.CommonUnOp.
-
-Definition roppZ_sig : rexpr_unop_sig opp. Proof. reify_sig. Defined.
-Definition roppW := Eval vm_compute in rword_of_Z roppZ_sig.
-Lemma roppW_correct_and_bounded_gen : correct_and_bounded_genT roppW roppZ_sig.
-Proof. rexpr_correct. Qed.
-Definition ropp_output_bounds := Eval vm_compute in compute_bounds roppW ExprUnOp_bounds.
-
-Local Open Scope string_scope.
-Compute ("Opp", compute_bounds_for_display roppW ExprUnOp_bounds).
-Compute ("Opp overflows? ", sanity_compute roppW ExprUnOp_bounds).
-Compute ("Opp overflows (error if it does)? ", sanity_check roppW ExprUnOp_bounds).
diff --git a/src/SpecificGen/GF2213_32Reflective/Reified/Pack.v b/src/SpecificGen/GF2213_32Reflective/Reified/Pack.v
deleted file mode 100644
index f96f81a53..000000000
--- a/src/SpecificGen/GF2213_32Reflective/Reified/Pack.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF2213_32Reflective.CommonUnOpFEToWire.
-
-Definition rpackZ_sig : rexpr_unop_FEToWire_sig pack. Proof. reify_sig. Defined.
-Definition rpackW := Eval vm_compute in rword_of_Z rpackZ_sig.
-Lemma rpackW_correct_and_bounded_gen : correct_and_bounded_genT rpackW rpackZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rpack_output_bounds := Eval vm_compute in compute_bounds rpackW ExprUnOpFEToWire_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rpackW_correct_and_bounded
- := ExprUnOpFEToWire_correct_and_bounded
- rpackW pack rpackZ_sig rpackW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Pack", compute_bounds_for_display rpackW ExprUnOpFEToWire_bounds).
-Compute ("Pack overflows? ", sanity_compute rpackW ExprUnOpFEToWire_bounds).
-Compute ("Pack overflows (error if it does)? ", sanity_check rpackW ExprUnOpFEToWire_bounds).
diff --git a/src/SpecificGen/GF2213_32Reflective/Reified/PreFreeze.v b/src/SpecificGen/GF2213_32Reflective/Reified/PreFreeze.v
deleted file mode 100644
index 359a9c432..000000000
--- a/src/SpecificGen/GF2213_32Reflective/Reified/PreFreeze.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF2213_32Reflective.CommonUnOp.
-
-Definition rprefreezeZ_sig : rexpr_unop_sig prefreeze. Proof. reify_sig. Defined.
-Definition rprefreezeW := Eval vm_compute in rword_of_Z rprefreezeZ_sig.
-Lemma rprefreezeW_correct_and_bounded_gen : correct_and_bounded_genT rprefreezeW rprefreezeZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rprefreeze_output_bounds := Eval vm_compute in compute_bounds rprefreezeW ExprUnOp_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rprefreezeW_correct_and_bounded
- := ExprUnOp_correct_and_bounded
- rprefreezeW prefreeze rprefreezeZ_sig rprefreezeW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("PreFreeze", compute_bounds_for_display rprefreezeW ExprUnOp_bounds).
-Compute ("PreFreeze overflows? ", sanity_compute rprefreezeW ExprUnOp_bounds).
-Compute ("PreFreeze overflows (error if it does)? ", sanity_check rprefreezeW ExprUnOp_bounds).
diff --git a/src/SpecificGen/GF2213_32Reflective/Reified/Sub.v b/src/SpecificGen/GF2213_32Reflective/Reified/Sub.v
deleted file mode 100644
index cc7ba69dd..000000000
--- a/src/SpecificGen/GF2213_32Reflective/Reified/Sub.v
+++ /dev/null
@@ -1,12 +0,0 @@
-Require Import Crypto.SpecificGen.GF2213_32Reflective.CommonBinOp.
-
-Definition rsubZ_sig : rexpr_binop_sig sub. Proof. reify_sig. Defined.
-Definition rsubW := Eval vm_compute in rword_of_Z rsubZ_sig.
-Lemma rsubW_correct_and_bounded_gen : correct_and_bounded_genT rsubW rsubZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rsub_output_bounds := Eval vm_compute in compute_bounds rsubW ExprBinOp_bounds.
-
-Local Open Scope string_scope.
-Compute ("Sub", compute_bounds_for_display rsubW ExprBinOp_bounds).
-Compute ("Sub overflows? ", sanity_compute rsubW ExprBinOp_bounds).
-Compute ("Sub overflows (error if it does)? ", sanity_check rsubW ExprBinOp_bounds).
diff --git a/src/SpecificGen/GF2213_32Reflective/Reified/Unpack.v b/src/SpecificGen/GF2213_32Reflective/Reified/Unpack.v
deleted file mode 100644
index 5ef4ff3d8..000000000
--- a/src/SpecificGen/GF2213_32Reflective/Reified/Unpack.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF2213_32Reflective.CommonUnOpWireToFE.
-
-Definition runpackZ_sig : rexpr_unop_WireToFE_sig unpack. Proof. reify_sig. Defined.
-Definition runpackW := Eval vm_compute in rword_of_Z runpackZ_sig.
-Lemma runpackW_correct_and_bounded_gen : correct_and_bounded_genT runpackW runpackZ_sig.
-Proof. rexpr_correct. Qed.
-Definition runpack_output_bounds := Eval vm_compute in compute_bounds runpackW ExprUnOpWireToFE_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition runpackW_correct_and_bounded
- := ExprUnOpWireToFE_correct_and_bounded
- runpackW unpack runpackZ_sig runpackW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Unpack", compute_bounds_for_display runpackW ExprUnOpWireToFE_bounds).
-Compute ("Unpack overflows? ", sanity_compute runpackW ExprUnOpWireToFE_bounds).
-Compute ("Unpack overflows (error if it does)? ", sanity_check runpackW ExprUnOpWireToFE_bounds).
diff --git a/src/SpecificGen/GF2213_32ReflectiveAddCoordinates.v b/src/SpecificGen/GF2213_32ReflectiveAddCoordinates.v
deleted file mode 100644
index dbe640f39..000000000
--- a/src/SpecificGen/GF2213_32ReflectiveAddCoordinates.v
+++ /dev/null
@@ -1,77 +0,0 @@
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParams.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParamProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemOpt.
-Require Export Crypto.SpecificGen.GF2213_32.
-Require Import Crypto.SpecificGen.GF2213_32BoundedCommon.
-Require Import Crypto.Reflection.Reify.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.Map.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Crypto.Reflection.Z.Interpretations64.Relations.
-Require Import Crypto.Reflection.Z.Interpretations64.RelationsCombinations.
-Require Import Crypto.Reflection.Z.Reify.
-Require Import Crypto.Reflection.Z.Syntax.
-Require Import Crypto.SpecificGen.GF2213_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF2213_32Reflective.Reified.AddCoordinates.
-Require Import Bedrock.Word Crypto.Util.WordUtil.
-Require Import Coq.Lists.List Crypto.Util.ListUtil.
-Require Import Crypto.Tactics.VerdiTactics.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Notations.
-Require Import Crypto.Util.Bool.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Algebra.
-Import ListNotations.
-Require Import Coq.ZArith.ZArith Coq.ZArith.Zpower Coq.ZArith.ZArith Coq.ZArith.Znumtheory.
-Local Open Scope Z.
-
-Time Definition radd_coordinates : Expr _ := Eval vm_compute in radd_coordinatesW.
-
-Declare Reduction asm_interp_add_coordinates
- := cbv beta iota delta
- [id
- interp_bexpr interp_uexpr interp_uexpr_FEToWire interp_uexpr_FEToZ interp_uexpr_WireToFE interp_9_4expr
- radd_coordinates
- curry_binop_fe2213_32W curry_unop_fe2213_32W curry_unop_wire_digitsW curry_9op_fe2213_32W
- WordW.interp_op WordW.interp_base_type
- Z.interp_op Z.interp_base_type
- Z.Syntax.interp_op Z.Syntax.interp_base_type
- mapf_interp_flat_type WordW.interp_base_type word64ize
- Interp interp interp_flat_type interpf interpf_step interp_flat_type fst snd].
-Ltac asm_interp_add_coordinates
- := cbv beta iota delta
- [id
- interp_bexpr interp_uexpr interp_uexpr_FEToWire interp_uexpr_FEToZ interp_uexpr_WireToFE interp_9_4expr
- radd_coordinates
- curry_binop_fe2213_32W curry_unop_fe2213_32W curry_unop_wire_digitsW curry_9op_fe2213_32W
- WordW.interp_op WordW.interp_base_type
- Z.interp_op Z.interp_base_type
- Z.Syntax.interp_op Z.Syntax.interp_base_type
- mapf_interp_flat_type WordW.interp_base_type word64ize
- Interp interp interp_flat_type interpf interp_flat_type fst snd].
-
-(*
-Time Definition interp_radd_coordinates : SpecificGen.GF2213_32BoundedCommon.fe2213_32W
- -> SpecificGen.GF2213_32BoundedCommon.fe2213_32W
- -> SpecificGen.GF2213_32BoundedCommon.fe2213_32W
- -> SpecificGen.GF2213_32BoundedCommon.fe2213_32W
- -> SpecificGen.GF2213_32BoundedCommon.fe2213_32W
- -> SpecificGen.GF2213_32BoundedCommon.fe2213_32W
- -> SpecificGen.GF2213_32BoundedCommon.fe2213_32W
- -> SpecificGen.GF2213_32BoundedCommon.fe2213_32W
- -> SpecificGen.GF2213_32BoundedCommon.fe2213_32W
- -> Tuple.tuple SpecificGen.GF2213_32BoundedCommon.fe2213_32W 4
- := Eval asm_interp_add_coordinates in interp_9_4expr radd_coordinates.
-(*Print interp_radd_coordinates.*)
-Time Definition interp_radd_coordinates_correct : interp_radd_coordinates = interp_9_4expr radd_coordinates := eq_refl.
-
-Lemma radd_coordinates_correct_and_bounded : op9_4_correct_and_bounded radd_coordinates add_coordinates.
-Proof. exact_no_check radd_coordinatesW_correct_and_bounded. Time Qed.
-*)
diff --git a/src/SpecificGen/GF2519_32.v b/src/SpecificGen/GF2519_32.v
deleted file mode 100644
index 72c686596..000000000
--- a/src/SpecificGen/GF2519_32.v
+++ /dev/null
@@ -1,773 +0,0 @@
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParams.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParamProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemOpt.
-Require Import Coq.Lists.List Crypto.Util.ListUtil.
-Require Import Crypto.Tactics.VerdiTactics.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Tower.
-Require Import Crypto.Util.Notations.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Algebra.
-Import ListNotations.
-Require Import Coq.ZArith.ZArith Coq.ZArith.Zpower Coq.ZArith.ZArith Coq.ZArith.Znumtheory.
-Local Open Scope Z.
-
-(* BEGIN precomputation. *)
-
-Definition modulus : Z := Eval compute in 2^251 - 9.
-Lemma prime_modulus : prime modulus. Admitted.
-Definition int_width := Eval compute in (2 * 32)%Z.
-Definition freeze_input_bound := 32%Z.
-
-Instance params2519_32 : PseudoMersenneBaseParams modulus.
- construct_params prime_modulus 10%nat 251.
-Defined.
-
-Definition length_fe2519_32 := Eval compute in length limb_widths.
-Definition fe2519_32 := Eval compute in (tuple Z length_fe2519_32).
-
-Definition mul2modulus : fe2519_32 :=
- Eval compute in (from_list_default 0%Z (length limb_widths) (construct_mul2modulus params2519_32)).
-
-Instance subCoeff : SubtractionCoefficient.
- apply Build_SubtractionCoefficient with (coeff := mul2modulus).
- vm_decide.
-Defined.
-
-Instance carryChain : CarryChain limb_widths.
- apply Build_CarryChain with (carry_chain := (rev [0;1;2;3;4;5;6;7;8;9;0;1])%nat).
- intros.
- repeat (destruct H as [|H]; [subst; vm_compute; repeat constructor | ]).
- contradiction H.
-Defined.
-
-Definition freezePreconditions : FreezePreconditions freeze_input_bound int_width.
-Proof.
- constructor; compute_preconditions.
-Defined.
-
-(* Wire format for [pack] and [unpack] *)
-Definition wire_widths := Eval compute in (repeat 32 7 ++ 27 :: nil).
-
-Definition wire_digits := Eval compute in (tuple Z (length wire_widths)).
-
-Lemma wire_widths_nonneg : forall w, In w wire_widths -> 0 <= w.
-Proof.
- intros.
- repeat (destruct H as [|H]; [subst; vm_compute; congruence | ]).
- contradiction H.
-Qed.
-
-Lemma bits_eq : sum_firstn limb_widths (length limb_widths) = sum_firstn wire_widths (length wire_widths).
-Proof.
- reflexivity.
-Qed.
-
-Lemma modulus_gt_2 : 2 < modulus. Proof. cbv; congruence. Qed.
-
-(* Temporarily, we'll use addition chains equivalent to double-and-add. This is pending
- finding the real, more optimal chains from previous work. *)
-Fixpoint pow2Chain'' p (pow2_index acc_index : nat) chain_acc : list (nat * nat) :=
- match p with
- | xI p' => pow2Chain'' p' 1 0
- (chain_acc ++ (pow2_index, pow2_index) :: (0%nat, S acc_index) :: nil)
- | xO p' => pow2Chain'' p' 0 (S acc_index)
- (chain_acc ++ (pow2_index, pow2_index)::nil)
- | xH => (chain_acc ++ (pow2_index, pow2_index) :: (0%nat, S acc_index) :: nil)
- end.
-
-Fixpoint pow2Chain' p index :=
- match p with
- | xI p' => pow2Chain'' p' 0 0 (repeat (0,0)%nat index)
- | xO p' => pow2Chain' p' (S index)
- | xH => repeat (0,0)%nat index
- end.
-
-Definition pow2_chain p :=
- match p with
- | xH => nil
- | _ => pow2Chain' p 0
- end.
-
-Definition invChain := Eval compute in pow2_chain (Z.to_pos (modulus - 2)).
-
-Instance inv_ec : ExponentiationChain (modulus - 2).
- apply Build_ExponentiationChain with (chain := invChain).
- reflexivity.
-Defined.
-
-(* Note : use caution copying square root code to other primes. The (modulus / 8 + 1) chains are
- for primes that are 5 mod 8; if the prime is 3 mod 4 then use (modulus / 4 + 1). *)
-Definition sqrtChain := Eval compute in pow2_chain (Z.to_pos (modulus / 4 + 1)).
-
-Instance sqrt_ec : ExponentiationChain (modulus / 4 + 1).
- apply Build_ExponentiationChain with (chain := sqrtChain).
- reflexivity.
-Defined.
-
-Arguments chain {_ _ _} _.
-
-(* END precomputation *)
-
-(* Precompute constants *)
-Definition k_ := Eval compute in k.
-Definition k_subst : k = k_ := eq_refl k_.
-
-Definition c_ := Eval compute in c.
-Definition c_subst : c = c_ := eq_refl c_.
-
-Definition one_ := Eval compute in one.
-Definition one_subst : one = one_ := eq_refl one_.
-
-Definition zero_ := Eval compute in zero.
-Definition zero_subst : zero = zero_ := eq_refl zero_.
-
-Definition modulus_digits_ := Eval compute in ModularBaseSystemList.modulus_digits.
-Definition modulus_digits_subst : ModularBaseSystemList.modulus_digits = modulus_digits_ := eq_refl modulus_digits_.
-
-Local Opaque Z.shiftr Z.shiftl Z.land Z.mul Z.add Z.sub Z.lor Let_In Z.eqb Z.ltb Z.leb ModularBaseSystemListZOperations.neg ModularBaseSystemListZOperations.cmovl ModularBaseSystemListZOperations.cmovne.
-
-Definition app_n2 {T} (f : wire_digits) (P : wire_digits -> T) : T.
-Proof.
- cbv [wire_digits] in *.
- set (f0 := f).
- repeat (let g := fresh "g" in destruct f as [f g]).
- apply P.
- apply f0.
-Defined.
-
-Definition app_n2_correct {T} f (P : wire_digits -> T) : app_n2 f P = P f.
-Proof.
- intros.
- cbv [wire_digits] in *.
- repeat match goal with [p : (_*Z)%type |- _ ] => destruct p end.
- reflexivity.
-Qed.
-
-Definition app_n {T} (f : fe2519_32) (P : fe2519_32 -> T) : T.
-Proof.
- cbv [fe2519_32] in *.
- set (f0 := f).
- repeat (let g := fresh "g" in destruct f as [f g]).
- apply P.
- apply f0.
-Defined.
-
-Definition app_n_correct {T} f (P : fe2519_32 -> T) : app_n f P = P f.
-Proof.
- intros.
- cbv [fe2519_32] in *.
- repeat match goal with [p : (_*Z)%type |- _ ] => destruct p end.
- reflexivity.
-Qed.
-
-Definition appify2 {T} (op : fe2519_32 -> fe2519_32 -> T) (f g : fe2519_32) :=
- app_n f (fun f0 => (app_n g (fun g0 => op f0 g0))).
-
-Lemma appify2_correct : forall {T} op f g, @appify2 T op f g = op f g.
-Proof.
- intros. cbv [appify2].
- etransitivity; apply app_n_correct.
-Qed.
-
-Definition appify9 {T} (op : fe2519_32 -> fe2519_32 -> fe2519_32 -> fe2519_32 -> fe2519_32 -> fe2519_32 -> fe2519_32 -> fe2519_32 -> fe2519_32 -> T) (x0 x1 x2 x3 x4 x5 x6 x7 x8 : fe2519_32) :=
- app_n x0 (fun x0' =>
- app_n x1 (fun x1' =>
- app_n x2 (fun x2' =>
- app_n x3 (fun x3' =>
- app_n x4 (fun x4' =>
- app_n x5 (fun x5' =>
- app_n x6 (fun x6' =>
- app_n x7 (fun x7' =>
- app_n x8 (fun x8' =>
- op x0' x1' x2' x3' x4' x5' x6' x7' x8'))))))))).
-
-Lemma appify9_correct : forall {T} op x0 x1 x2 x3 x4 x5 x6 x7 x8,
- @appify9 T op x0 x1 x2 x3 x4 x5 x6 x7 x8 = op x0 x1 x2 x3 x4 x5 x6 x7 x8.
-Proof.
- intros. cbv [appify9].
- repeat (etransitivity; [ apply app_n_correct | ]); reflexivity.
-Qed.
-
-Definition uncurry_unop_fe2519_32 {T} (op : fe2519_32 -> T)
- := Eval compute in Tuple.uncurry (n:=length_fe2519_32) op.
-Definition curry_unop_fe2519_32 {T} op : fe2519_32 -> T
- := Eval compute in fun f => app_n f (Tuple.curry (n:=length_fe2519_32) op).
-
-Fixpoint uncurry_n_op_fe2519_32 {T} n
- : forall (op : Tower.tower_nd fe2519_32 T n),
- Tower.tower_nd Z T (n * length_fe2519_32)
- := match n
- return (forall (op : Tower.tower_nd fe2519_32 T n),
- Tower.tower_nd Z T (n * length_fe2519_32))
- with
- | O => fun x => x
- | S n' => fun f => uncurry_unop_fe2519_32 (fun x => @uncurry_n_op_fe2519_32 _ n' (f x))
- end.
-
-Definition uncurry_binop_fe2519_32 {T} (op : fe2519_32 -> fe2519_32 -> T)
- := Eval compute in uncurry_n_op_fe2519_32 2 op.
-Definition curry_binop_fe2519_32 {T} op : fe2519_32 -> fe2519_32 -> T
- := Eval compute in appify2 (fun f => curry_unop_fe2519_32 (curry_unop_fe2519_32 op f)).
-
-Definition uncurry_unop_wire_digits {T} (op : wire_digits -> T)
- := Eval compute in Tuple.uncurry (n:=length wire_widths) op.
-Definition curry_unop_wire_digits {T} op : wire_digits -> T
- := Eval compute in fun f => app_n2 f (Tuple.curry (n:=length wire_widths) op).
-
-Definition uncurry_9op_fe2519_32 {T} (op : fe2519_32 -> fe2519_32 -> fe2519_32 -> fe2519_32 -> fe2519_32 -> fe2519_32 -> fe2519_32 -> fe2519_32 -> fe2519_32 -> T)
- := Eval compute in uncurry_n_op_fe2519_32 9 op.
-Definition curry_9op_fe2519_32 {T} op : fe2519_32 -> fe2519_32 -> fe2519_32 -> fe2519_32 -> fe2519_32 -> fe2519_32 -> fe2519_32 -> fe2519_32 -> fe2519_32 -> T
- := Eval compute in
- appify9 (fun x0 x1 x2 x3 x4 x5 x6 x7 x8
- => curry_unop_fe2519_32 (curry_unop_fe2519_32 (curry_unop_fe2519_32 (curry_unop_fe2519_32 (curry_unop_fe2519_32 (curry_unop_fe2519_32 (curry_unop_fe2519_32 (curry_unop_fe2519_32 (curry_unop_fe2519_32 op x0) x1) x2) x3) x4) x5) x6) x7) x8).
-
-Definition add_sig (f g : fe2519_32) :
- { fg : fe2519_32 | fg = add_opt f g}.
-Proof.
- eexists.
- rewrite <-(@appify2_correct fe2519_32).
- cbv.
- reflexivity.
-Defined.
-
-Definition add (f g : fe2519_32) : fe2519_32 :=
- Eval cbv beta iota delta [proj1_sig add_sig] in
- proj1_sig (add_sig f g).
-
-Definition add_correct (f g : fe2519_32)
- : add f g = add_opt f g :=
- Eval cbv beta iota delta [proj1_sig add_sig] in
- proj2_sig (add_sig f g).
-
-Definition carry_add_sig (f g : fe2519_32) :
- { fg : fe2519_32 | fg = carry_add_opt f g}.
-Proof.
- eexists.
- rewrite <-(@appify2_correct fe2519_32).
- cbv.
- autorewrite with zsimplify_fast zsimplify_Z_to_pos; cbv.
- autorewrite with zsimplify_Z_to_pos; cbv.
- reflexivity.
-Defined.
-
-Definition carry_add (f g : fe2519_32) : fe2519_32 :=
- Eval cbv beta iota delta [proj1_sig carry_add_sig] in
- proj1_sig (carry_add_sig f g).
-
-Definition carry_add_correct (f g : fe2519_32)
- : carry_add f g = carry_add_opt f g :=
- Eval cbv beta iota delta [proj1_sig carry_add_sig] in
- proj2_sig (carry_add_sig f g).
-
-Definition sub_sig (f g : fe2519_32) :
- { fg : fe2519_32 | fg = sub_opt f g}.
-Proof.
- eexists.
- rewrite <-(@appify2_correct fe2519_32).
- cbv.
- reflexivity.
-Defined.
-
-Definition sub (f g : fe2519_32) : fe2519_32 :=
- Eval cbv beta iota delta [proj1_sig sub_sig] in
- proj1_sig (sub_sig f g).
-
-Definition sub_correct (f g : fe2519_32)
- : sub f g = sub_opt f g :=
- Eval cbv beta iota delta [proj1_sig sub_sig] in
- proj2_sig (sub_sig f g).
-
-Definition carry_sub_sig (f g : fe2519_32) :
- { fg : fe2519_32 | fg = carry_sub_opt f g}.
-Proof.
- eexists.
- rewrite <-(@appify2_correct fe2519_32).
- cbv.
- autorewrite with zsimplify_fast zsimplify_Z_to_pos; cbv.
- autorewrite with zsimplify_Z_to_pos; cbv.
- reflexivity.
-Defined.
-
-Definition carry_sub (f g : fe2519_32) : fe2519_32 :=
- Eval cbv beta iota delta [proj1_sig carry_sub_sig] in
- proj1_sig (carry_sub_sig f g).
-
-Definition carry_sub_correct (f g : fe2519_32)
- : carry_sub f g = carry_sub_opt f g :=
- Eval cbv beta iota delta [proj1_sig carry_sub_sig] in
- proj2_sig (carry_sub_sig f g).
-
-(* For multiplication, we add another layer of definition so that we can
- rewrite under the [let] binders. *)
-Definition mul_simpl_sig (f g : fe2519_32) :
- { fg : fe2519_32 | fg = carry_mul_opt k_ c_ f g}.
-Proof.
- cbv [fe2519_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv. (* N.B. The slow part of this is computing with [Z_div_opt].
- It would be much faster if we could take advantage of
- the form of [base_from_limb_widths] when doing
- division, so we could do subtraction instead. *)
- autorewrite with zsimplify_fast.
- reflexivity.
-Defined.
-
-Definition mul_simpl (f g : fe2519_32) : fe2519_32 :=
- Eval cbv beta iota delta [proj1_sig mul_simpl_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9) := f in
- let '(g0, g1, g2, g3, g4, g5, g6, g7, g8, g9) := g in
- proj1_sig (mul_simpl_sig (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9)
- (g0, g1, g2, g3, g4, g5, g6, g7, g8, g9)).
-
-Definition mul_simpl_correct (f g : fe2519_32)
- : mul_simpl f g = carry_mul_opt k_ c_ f g.
-Proof.
- pose proof (proj2_sig (mul_simpl_sig f g)).
- cbv [fe2519_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Qed.
-
-Definition mul_sig (f g : fe2519_32) :
- { fg : fe2519_32 | fg = carry_mul_opt k_ c_ f g}.
-Proof.
- eexists.
- rewrite <-mul_simpl_correct.
- rewrite <-(@appify2_correct fe2519_32).
- cbv.
- autorewrite with zsimplify_fast zsimplify_Z_to_pos; cbv.
- autorewrite with zsimplify_Z_to_pos; cbv.
- reflexivity.
-Defined.
-
-Definition mul (f g : fe2519_32) : fe2519_32 :=
- Eval cbv beta iota delta [proj1_sig mul_sig] in
- proj1_sig (mul_sig f g).
-
-Definition mul_correct (f g : fe2519_32)
- : mul f g = carry_mul_opt k_ c_ f g :=
- Eval cbv beta iota delta [proj1_sig add_sig] in
- proj2_sig (mul_sig f g).
-
-Definition opp_sig (f : fe2519_32) :
- { g : fe2519_32 | g = opp_opt f }.
-Proof.
- eexists.
- cbv [opp_opt].
- rewrite <-sub_correct.
- rewrite zero_subst.
- cbv [sub].
- reflexivity.
-Defined.
-
-Definition opp (f : fe2519_32) : fe2519_32
- := Eval cbv beta iota delta [proj1_sig opp_sig] in proj1_sig (opp_sig f).
-
-Definition opp_correct (f : fe2519_32)
- : opp f = opp_opt f
- := Eval cbv beta iota delta [proj2_sig add_sig] in proj2_sig (opp_sig f).
-
-Definition carry_opp_sig (f : fe2519_32) :
- { g : fe2519_32 | g = carry_opp_opt f }.
-Proof.
- eexists.
- cbv [carry_opp_opt].
- rewrite <-carry_sub_correct.
- rewrite zero_subst.
- cbv [carry_sub].
- reflexivity.
-Defined.
-
-Definition carry_opp (f : fe2519_32) : fe2519_32
- := Eval cbv beta iota delta [proj1_sig carry_opp_sig] in proj1_sig (carry_opp_sig f).
-
-Definition carry_opp_correct (f : fe2519_32)
- : carry_opp f = carry_opp_opt f
- := Eval cbv beta iota delta [proj2_sig add_sig] in proj2_sig (carry_opp_sig f).
-
-Definition pow (f : fe2519_32) chain := fold_chain_opt one_ mul chain [f].
-
-Lemma pow_correct (f : fe2519_32) : forall chain, pow f chain = pow_opt k_ c_ one_ f chain.
-Proof.
- cbv [pow pow_opt]; intros.
- rewrite !fold_chain_opt_correct.
- apply Proper_fold_chain; try reflexivity.
- intros; subst; apply mul_correct.
-Qed.
-
-(* Now that we have [pow], we can compute sqrt of -1 for use
- in sqrt function (this is not needed unless the prime is
- 5 mod 8) *)
-Local Transparent Z.shiftr Z.shiftl Z.land Z.mul Z.add Z.sub Z.lor Let_In Z.eqb Z.ltb andb.
-
-Definition sqrt_m1 := Eval vm_compute in (pow (encode (F.of_Z _ 2)) (pow2_chain (Z.to_pos ((modulus - 1) / 4)))).
-
-Local Opaque Z.shiftr Z.shiftl Z.land Z.mul Z.add Z.sub Z.lor Let_In Z.eqb Z.ltb andb.
-
-Definition inv_sig (f : fe2519_32) :
- { g : fe2519_32 | g = inv_opt k_ c_ one_ f }.
-Proof.
- eexists; cbv [inv_opt].
- rewrite <-pow_correct.
- cbv - [mul].
- reflexivity.
-Defined.
-
-Definition inv (f : fe2519_32) : fe2519_32
- := Eval cbv beta iota delta [proj1_sig inv_sig] in proj1_sig (inv_sig f).
-
-Definition inv_correct (f : fe2519_32)
- : inv f = inv_opt k_ c_ one_ f
- := Eval cbv beta iota delta [proj2_sig inv_sig] in proj2_sig (inv_sig f).
-
-Definition mbs_field := modular_base_system_field modulus_gt_2.
-
-Import Morphisms.
-
-Local Existing Instance prime_modulus.
-
-Lemma field_and_homomorphisms
- : @field fe2519_32 eq zero_ one_ opp add sub mul inv div
- /\ @Ring.is_homomorphism
- (F modulus) Logic.eq F.one F.add F.mul
- fe2519_32 eq one_ add mul encode
- /\ @Ring.is_homomorphism
- fe2519_32 eq one_ add mul
- (F modulus) Logic.eq F.one F.add F.mul
- decode.
-Proof.
- eapply @Field.field_and_homomorphism_from_redundant_representation.
- { exact (F.field_modulo _). }
- { apply encode_rep. }
- { reflexivity. }
- { reflexivity. }
- { reflexivity. }
- { intros; rewrite opp_correct, opp_opt_correct; apply opp_rep; reflexivity. }
- { intros; rewrite add_correct, add_opt_correct; apply add_rep; reflexivity. }
- { intros; rewrite sub_correct, sub_opt_correct; apply sub_rep; reflexivity. }
- { intros; rewrite mul_correct, carry_mul_opt_correct by reflexivity; apply carry_mul_rep; reflexivity. }
- { intros; rewrite inv_correct, inv_opt_correct by reflexivity; apply inv_rep; reflexivity. }
- { intros; apply encode_rep. }
-Qed.
-
-Definition field2519_32 : @field fe2519_32 eq zero_ one_ opp add sub mul inv div := proj1 field_and_homomorphisms.
-
-Lemma carry_field_and_homomorphisms
- : @field fe2519_32 eq zero_ one_ carry_opp carry_add carry_sub mul inv div
- /\ @Ring.is_homomorphism
- (F modulus) Logic.eq F.one F.add F.mul
- fe2519_32 eq one_ carry_add mul encode
- /\ @Ring.is_homomorphism
- fe2519_32 eq one_ carry_add mul
- (F modulus) Logic.eq F.one F.add F.mul
- decode.
-Proof.
- eapply @Field.field_and_homomorphism_from_redundant_representation.
- { exact (F.field_modulo _). }
- { apply encode_rep. }
- { reflexivity. }
- { reflexivity. }
- { reflexivity. }
- { intros; rewrite carry_opp_correct, carry_opp_opt_correct, carry_opp_rep; apply opp_rep; reflexivity. }
- { intros; rewrite carry_add_correct, carry_add_opt_correct, carry_add_rep; apply add_rep; reflexivity. }
- { intros; rewrite carry_sub_correct, carry_sub_opt_correct, carry_sub_rep; apply sub_rep; reflexivity. }
- { intros; rewrite mul_correct, carry_mul_opt_correct by reflexivity; apply carry_mul_rep; reflexivity. }
- { intros; rewrite inv_correct, inv_opt_correct by reflexivity; apply inv_rep; reflexivity. }
- { intros; apply encode_rep. }
-Qed.
-
-Definition carry_field2519_32 : @field fe2519_32 eq zero_ one_ carry_opp carry_add carry_sub mul inv div := proj1 carry_field_and_homomorphisms.
-
-Lemma homomorphism_F2519_32_encode
- : @Ring.is_homomorphism (F modulus) Logic.eq F.one F.add F.mul fe2519_32 eq one add mul encode.
-Proof. apply field_and_homomorphisms. Qed.
-
-Lemma homomorphism_F2519_32_decode
- : @Ring.is_homomorphism fe2519_32 eq one add mul (F modulus) Logic.eq F.one F.add F.mul decode.
-Proof. apply field_and_homomorphisms. Qed.
-
-
-Lemma homomorphism_carry_F2519_32_encode
- : @Ring.is_homomorphism (F modulus) Logic.eq F.one F.add F.mul fe2519_32 eq one carry_add mul encode.
-Proof. apply carry_field_and_homomorphisms. Qed.
-
-Lemma homomorphism_carry_F2519_32_decode
- : @Ring.is_homomorphism fe2519_32 eq one carry_add mul (F modulus) Logic.eq F.one F.add F.mul decode.
-Proof. apply carry_field_and_homomorphisms. Qed.
-
-Definition ge_modulus_sig (f : fe2519_32) :
- { b : Z | b = ge_modulus_opt (to_list 10 f) }.
-Proof.
- cbv [fe2519_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists; cbv [ge_modulus_opt].
- rewrite !modulus_digits_subst.
- cbv.
- reflexivity.
-Defined.
-
-Definition ge_modulus (f : fe2519_32) : Z :=
- Eval cbv beta iota delta [proj1_sig ge_modulus_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9) := f in
- proj1_sig (ge_modulus_sig (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9)).
-
-Definition ge_modulus_correct (f : fe2519_32) :
- ge_modulus f = ge_modulus_opt (to_list 10 f).
-Proof.
- pose proof (proj2_sig (ge_modulus_sig f)).
- cbv [fe2519_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Defined.
-
-Definition prefreeze_sig (f : fe2519_32) :
- { f' : fe2519_32 | f' = from_list_default 0 10 (carry_full_3_opt c_ (to_list 10 f)) }.
-Proof.
- cbv [fe2519_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv - [from_list_default].
- (* TODO(jgross,jadep): use Reflective linearization here? *)
- repeat (
- set_evars; rewrite app_Let_In_nd; subst_evars;
- eapply Proper_Let_In_nd_changebody; [reflexivity|intro]).
- cbv [from_list_default from_list_default'].
- reflexivity.
-Defined.
-
-Definition prefreeze (f : fe2519_32) : fe2519_32 :=
- Eval cbv beta iota delta [proj1_sig prefreeze_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9) := f in
- proj1_sig (prefreeze_sig (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9)).
-
-Definition prefreeze_correct (f : fe2519_32)
- : prefreeze f = from_list_default 0 10 (carry_full_3_opt c_ (to_list 10 f)).
-Proof.
- pose proof (proj2_sig (prefreeze_sig f)).
- cbv [fe2519_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Defined.
-
-Definition postfreeze_sig (f : fe2519_32) :
- { f' : fe2519_32 | f' = from_list_default 0 10 (conditional_subtract_modulus_opt (int_width := int_width) (to_list 10 f)) }.
-Proof.
- cbv [fe2519_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists; cbv [freeze_opt int_width].
- cbv [to_list to_list'].
- cbv [conditional_subtract_modulus_opt].
- rewrite !modulus_digits_subst.
- cbv - [from_list_default].
- (* TODO(jgross,jadep): use Reflective linearization here? *)
- repeat (
- set_evars; rewrite app_Let_In_nd; subst_evars;
- eapply Proper_Let_In_nd_changebody; [reflexivity|intro]).
- cbv [from_list_default from_list_default'].
- reflexivity.
-Defined.
-
-Definition postfreeze (f : fe2519_32) : fe2519_32 :=
- Eval cbv beta iota delta [proj1_sig postfreeze_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9) := f in
- proj1_sig (postfreeze_sig (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9)).
-
-Definition postfreeze_correct (f : fe2519_32)
- : postfreeze f = from_list_default 0 10 (conditional_subtract_modulus_opt (int_width := int_width) (to_list 10 f)).
-Proof.
- pose proof (proj2_sig (postfreeze_sig f)).
- cbv [fe2519_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Defined.
-
-Definition freeze (f : fe2519_32) : fe2519_32 :=
- dlet x := prefreeze f in
- postfreeze x.
-
-Local Transparent Let_In.
-Definition freeze_correct (f : fe2519_32)
- : freeze f = from_list_default 0 10 (freeze_opt (int_width := int_width) c_ (to_list 10 f)).
-Proof.
- cbv [freeze_opt freeze Let_In].
- rewrite prefreeze_correct.
- rewrite postfreeze_correct.
- match goal with
- |- appcontext [to_list _ (from_list_default _ ?n ?xs)] =>
- assert (length xs = n) as pf; [ | rewrite from_list_default_eq with (pf0 := pf) ] end.
- { rewrite carry_full_3_opt_correct; repeat rewrite ModularBaseSystemListProofs.length_carry_full; auto using length_to_list. }
- rewrite to_list_from_list.
- reflexivity.
-Qed.
-Local Opaque Let_In.
-
-Definition fieldwiseb_sig (f g : fe2519_32) :
- { b | b = @fieldwiseb Z Z 10 Z.eqb f g }.
-Proof.
- cbv [fe2519_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv.
- reflexivity.
-Defined.
-
-Definition fieldwiseb (f g : fe2519_32) : bool
- := Eval cbv beta iota delta [proj1_sig fieldwiseb_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9) := f in
- let '(g0, g1, g2, g3, g4, g5, g6, g7, g8, g9) := g in
- proj1_sig (fieldwiseb_sig (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9)
- (g0, g1, g2, g3, g4, g5, g6, g7, g8, g9)).
-
-Lemma fieldwiseb_correct (f g : fe2519_32)
- : fieldwiseb f g = @Tuple.fieldwiseb Z Z 10 Z.eqb f g.
-Proof.
- set (f' := f); set (g' := g).
- hnf in f, g; destruct_head' prod.
- exact (proj2_sig (fieldwiseb_sig f' g')).
-Qed.
-
-Definition eqb_sig (f g : fe2519_32) :
- { b | b = eqb int_width f g }.
-Proof.
- cbv [eqb].
- cbv [fe2519_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv [ModularBaseSystem.freeze int_width].
- rewrite <-!from_list_default_eq with (d := 0).
- rewrite <-!(freeze_opt_correct c_) by auto using length_to_list.
- rewrite <-!freeze_correct.
- rewrite <-fieldwiseb_correct.
- reflexivity.
-Defined.
-
-Definition eqb (f g : fe2519_32) : bool
- := Eval cbv beta iota delta [proj1_sig eqb_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9) := f in
- let '(g0, g1, g2, g3, g4, g5, g6, g7, g8, g9) := g in
- proj1_sig (eqb_sig (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9)
- (g0, g1, g2, g3, g4, g5, g6, g7, g8, g9)).
-
-Lemma eqb_correct (f g : fe2519_32)
- : eqb f g = ModularBaseSystem.eqb int_width f g.
-Proof.
- set (f' := f); set (g' := g).
- hnf in f, g; destruct_head' prod.
- exact (proj2_sig (eqb_sig f' g')).
-Qed.
-
-Definition sqrt_sig (f : fe2519_32) :
- { f' : fe2519_32 | f' = sqrt_3mod4_opt k_ c_ one_ f}.
-Proof.
- eexists.
- cbv [sqrt_3mod4_opt int_width].
- rewrite <- pow_correct.
- reflexivity.
-Defined.
-
-Definition sqrt (f : fe2519_32) : fe2519_32
- := Eval cbv beta iota delta [proj1_sig sqrt_sig] in proj1_sig (sqrt_sig f).
-
-Definition sqrt_correct (f : fe2519_32)
- : sqrt f = sqrt_3mod4_opt k_ c_ one_ f
- := Eval cbv beta iota delta [proj2_sig sqrt_sig] in proj2_sig (sqrt_sig f).
-
-Definition pack_simpl_sig (f : fe2519_32) :
- { f' | f' = pack_opt params2519_32 wire_widths_nonneg bits_eq f }.
-Proof.
- cbv [fe2519_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv [pack_opt].
- repeat (rewrite <-convert'_opt_correct;
- cbv - [from_list_default_opt Conversion.convert']).
- repeat progress rewrite ?Z.shiftl_0_r, ?Z.shiftr_0_r, ?Z.land_0_l, ?Z.lor_0_l, ?Z.land_same_r.
- cbv [from_list_default_opt].
- reflexivity.
-Defined.
-
-Definition pack_simpl (f : fe2519_32) :=
- Eval cbv beta iota delta [proj1_sig pack_simpl_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9) := f in
- proj1_sig (pack_simpl_sig (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9)).
-
-Definition pack_simpl_correct (f : fe2519_32)
- : pack_simpl f = pack_opt params2519_32 wire_widths_nonneg bits_eq f.
-Proof.
- pose proof (proj2_sig (pack_simpl_sig f)).
- cbv [fe2519_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Qed.
-
-Definition pack_sig (f : fe2519_32) :
- { f' | f' = pack_opt params2519_32 wire_widths_nonneg bits_eq f }.
-Proof.
- eexists.
- rewrite <-pack_simpl_correct.
- rewrite <-(@app_n_correct wire_digits).
- cbv.
- reflexivity.
-Defined.
-
-Definition pack (f : fe2519_32) : wire_digits :=
- Eval cbv beta iota delta [proj1_sig pack_sig] in proj1_sig (pack_sig f).
-
-Definition pack_correct (f : fe2519_32)
- : pack f = pack_opt params2519_32 wire_widths_nonneg bits_eq f
- := Eval cbv beta iota delta [proj2_sig pack_sig] in proj2_sig (pack_sig f).
-
-Definition unpack_simpl_sig (f : wire_digits) :
- { f' | f' = unpack_opt params2519_32 wire_widths_nonneg bits_eq f }.
-Proof.
- cbv [wire_digits] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv [unpack_opt].
- repeat (
- rewrite <-convert'_opt_correct;
- cbv - [from_list_default_opt Conversion.convert']).
- repeat progress rewrite ?Z.shiftl_0_r, ?Z.shiftr_0_r, ?Z.land_0_l, ?Z.lor_0_l, ?Z.land_same_r.
- cbv [from_list_default_opt].
- reflexivity.
-Defined.
-
-Definition unpack_simpl (f : wire_digits) : fe2519_32 :=
- Eval cbv beta iota delta [proj1_sig unpack_simpl_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7) := f in
- proj1_sig (unpack_simpl_sig (f0, f1, f2, f3, f4, f5, f6, f7)).
-
-Definition unpack_simpl_correct (f : wire_digits)
- : unpack_simpl f = unpack_opt params2519_32 wire_widths_nonneg bits_eq f.
-Proof.
- pose proof (proj2_sig (unpack_simpl_sig f)).
- cbv [wire_digits] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Qed.
-
-Definition unpack_sig (f : wire_digits) :
- { f' | f' = unpack_opt params2519_32 wire_widths_nonneg bits_eq f }.
-Proof.
- eexists.
- rewrite <-unpack_simpl_correct.
- rewrite <-(@app_n2_correct fe2519_32).
- cbv.
- reflexivity.
-Defined.
-
-Definition unpack (f : wire_digits) : fe2519_32 :=
- Eval cbv beta iota delta [proj1_sig unpack_sig] in proj1_sig (unpack_sig f).
-
-Definition unpack_correct (f : wire_digits)
- : unpack f = unpack_opt params2519_32 wire_widths_nonneg bits_eq f
- := Eval cbv beta iota delta [proj2_sig pack_sig] in proj2_sig (unpack_sig f).
diff --git a/src/SpecificGen/GF2519_32Bounded.v b/src/SpecificGen/GF2519_32Bounded.v
deleted file mode 100644
index 83dcec8a4..000000000
--- a/src/SpecificGen/GF2519_32Bounded.v
+++ /dev/null
@@ -1,521 +0,0 @@
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParams.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParamProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemOpt.
-Require Import Crypto.SpecificGen.GF2519_32.
-Require Import Crypto.SpecificGen.GF2519_32BoundedCommon.
-Require Import Crypto.SpecificGen.GF2519_32Reflective.
-Require Import Bedrock.Word Crypto.Util.WordUtil.
-Require Import Coq.Lists.List Crypto.Util.ListUtil.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemWord.
-Require Import Crypto.Tactics.VerdiTactics.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Notations.
-Require Import Crypto.Util.Bool.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Algebra.
-Import ListNotations.
-Require Import Coq.ZArith.ZArith Coq.ZArith.Zpower Coq.ZArith.ZArith Coq.ZArith.Znumtheory.
-Local Open Scope Z.
-
-
-Local Ltac cbv_tuple_map :=
- cbv [Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list' HList.hlistP HList.hlistP'].
-
-Local Ltac post_bounded_t :=
- (* much pain and hackery to work around [Defined] taking forever *)
- cbv_tuple_map;
- let blem' := fresh "blem'" in
- let is_bounded_lem := fresh "is_bounded_lem" in
- intros is_bounded_lem blem';
- apply blem'; repeat apply conj; apply is_bounded_lem.
-Local Ltac bounded_t opW blem :=
- generalize blem; generalize is_bounded_proj1_fe2519_32; post_bounded_t.
-Local Ltac bounded_wire_digits_t opW blem :=
- generalize blem; generalize is_bounded_proj1_wire_digits; post_bounded_t.
-
-Local Ltac define_binop f g opW blem :=
- refine (exist_fe2519_32W (opW (proj1_fe2519_32W f, proj1_fe2519_32W g)) _);
- abstract bounded_t opW blem.
-Local Ltac define_unop f opW blem :=
- refine (exist_fe2519_32W (opW (proj1_fe2519_32W f)) _);
- abstract bounded_t opW blem.
-Local Ltac define_unop_FEToZ f opW :=
- refine (opW (proj1_fe2519_32W f)).
-Local Ltac define_unop_FEToWire f opW blem :=
- refine (exist_wire_digitsW (opW (proj1_fe2519_32W f)) _);
- abstract bounded_t opW blem.
-Local Ltac define_unop_WireToFE f opW blem :=
- refine (exist_fe2519_32W (opW (proj1_wire_digitsW f)) _);
- abstract bounded_wire_digits_t opW blem.
-
-Local Opaque Let_In.
-Local Opaque Z.add Z.sub Z.mul Z.shiftl Z.shiftr Z.land Z.lor Z.eqb NToWord64.
-Local Arguments interp_radd / _.
-Local Arguments interp_rsub / _.
-Local Arguments interp_rmul / _.
-Local Arguments interp_ropp / _.
-Local Arguments interp_rprefreeze / _.
-Local Arguments interp_rge_modulus / _.
-Local Arguments interp_rpack / _.
-Local Arguments interp_runpack / _.
-Definition addW (f : fe2519_32W * fe2519_32W) : fe2519_32W := Eval simpl in interp_radd f.
-Definition subW (f : fe2519_32W * fe2519_32W) : fe2519_32W := Eval simpl in interp_rsub f.
-Definition mulW (f : fe2519_32W * fe2519_32W) : fe2519_32W := Eval simpl in interp_rmul f.
-Definition oppW (f : fe2519_32W) : fe2519_32W := Eval simpl in interp_ropp f.
-Definition prefreezeW (f : fe2519_32W) : fe2519_32W := Eval simpl in interp_rprefreeze f.
-Definition ge_modulusW (f : fe2519_32W) : word64 := Eval simpl in interp_rge_modulus f.
-Definition packW (f : fe2519_32W) : wire_digitsW := Eval simpl in interp_rpack f.
-Definition unpackW (f : wire_digitsW) : fe2519_32W := Eval simpl in interp_runpack f.
-
-Definition modulusW :=
- Eval cbv - [ZToWord64] in (Tuple.map ZToWord64 (Tuple.from_list_default 0%Z length_fe2519_32 GF2519_32.modulus_digits_)).
-
-Definition postfreeze : GF2519_32.fe2519_32 -> GF2519_32.fe2519_32 :=
- GF2519_32.postfreeze.
-
-Lemma freeze_prepost_freeze : forall x, postfreeze (prefreeze x) = GF2519_32.freeze x.
-Proof. reflexivity. Qed.
-
-Definition postfreezeW : fe2519_32W -> fe2519_32W :=
- (conditional_subtract_modulusW
- (num_limbs := length_fe2519_32)
- modulusW
- ge_modulusW
- (Interpretations64.WordW.neg GF2519_32.int_width)
- ).
-
-Definition freezeW (f : fe2519_32W) : fe2519_32W := Eval cbv beta delta [prefreezeW postfreezeW] in postfreezeW (prefreezeW f).
-
-Local Transparent Let_In.
-(* Wrapper to allow extracted code to not unfold [mulW] *)
-Definition mulW_noinline := mulW.
-Definition powW (f : fe2519_32W) chain := fold_chain_opt (proj1_fe2519_32W one) (fun f g => mulW_noinline (f, g)) chain [f].
-Definition invW (f : fe2519_32W) : fe2519_32W
- := Eval cbv -[Let_In fe2519_32W mulW_noinline] in powW f (chain inv_ec).
-
-Local Ltac port_correct_and_bounded pre_rewrite opW interp_rop rop_cb :=
- change opW with (interp_rop);
- rewrite pre_rewrite;
- intros; apply rop_cb; assumption.
-
-Lemma addW_correct_and_bounded : ibinop_correct_and_bounded addW (Curry.curry2 carry_add).
-Proof. port_correct_and_bounded interp_radd_correct addW interp_radd radd_correct_and_bounded. Qed.
-Lemma subW_correct_and_bounded : ibinop_correct_and_bounded subW (Curry.curry2 carry_sub).
-Proof. port_correct_and_bounded interp_rsub_correct subW interp_rsub rsub_correct_and_bounded. Qed.
-Lemma mulW_correct_and_bounded : ibinop_correct_and_bounded mulW (Curry.curry2 mul).
-Proof. port_correct_and_bounded interp_rmul_correct mulW interp_rmul rmul_correct_and_bounded. Qed.
-Lemma oppW_correct_and_bounded : iunop_correct_and_bounded oppW carry_opp.
-Proof. port_correct_and_bounded interp_ropp_correct oppW interp_ropp ropp_correct_and_bounded. Qed.
-Lemma prefreezeW_correct_and_bounded : iunop_correct_and_bounded prefreezeW prefreeze.
-Proof. port_correct_and_bounded interp_rprefreeze_correct prefreezeW interp_rprefreeze rprefreeze_correct_and_bounded. Qed.
-Lemma ge_modulusW_correct : iunop_FEToZ_correct ge_modulusW ge_modulus.
-Proof. port_correct_and_bounded interp_rge_modulus_correct ge_modulusW interp_rge_modulus rge_modulus_correct_and_bounded. Qed.
-Lemma packW_correct_and_bounded : iunop_FEToWire_correct_and_bounded packW pack.
-Proof. port_correct_and_bounded interp_rpack_correct packW interp_rpack rpack_correct_and_bounded. Qed.
-Lemma unpackW_correct_and_bounded : iunop_WireToFE_correct_and_bounded unpackW unpack.
-Proof. port_correct_and_bounded interp_runpack_correct unpackW interp_runpack runpack_correct_and_bounded. Qed.
-
-Ltac lower_bound_minus_ge_modulus :=
- apply Z.le_0_sub;
- cbv [ge_modulus Let_In ModularBaseSystemListZOperations.cmovl ModularBaseSystemListZOperations.cmovne ModularBaseSystemListZOperations.neg];
- repeat break_if; Z.ltb_to_lt; subst; try omega;
- rewrite ?Z.land_0_l; auto;
- change Interpretations64.WordW.wordWToZ with word64ToZ;
- etransitivity; try apply Z.land_upper_bound_r; instantiate; try omega;
- apply Z.ones_nonneg; instantiate; vm_compute; discriminate.
-
-Ltac upper_bound_minus_ge_modulus :=
- (apply Z.log2_lt_pow2_alt; [ vm_compute; reflexivity | ]);
- eapply Z.le_lt_trans; [ apply Z.le_sub_nonneg; apply Z.land_nonneg; right; omega | ];
- eapply Z.le_lt_trans; [ eassumption | ];
- instantiate; vm_compute; reflexivity.
-
-Lemma postfreezeW_correct_and_bounded : iunop_correct_and_bounded postfreezeW postfreeze.
-Proof.
- intros x H.
- pose proof (ge_modulusW_correct x H) as Hgm.
- destruct_head_hnf' prod.
- unfold_is_bounded_in H.
- destruct_head' and.
- Z.ltb_to_lt.
- cbv [postfreezeW].
- cbv [conditional_subtract_modulusW Interpretations64.WordW.neg].
- change word64ToZ with Interpretations64.WordW.wordWToZ in *.
- rewrite Hgm.
-
- cbv [modulusW Tuple.map].
- cbv [on_tuple List.map to_list to_list' from_list from_list'
- HList.hlistP HList.hlistP'
- Tuple.map2 on_tuple2 ListUtil.map2 fe2519_32WToZ length_fe2519_32].
- cbv [postfreeze GF2519_32.postfreeze].
- cbv [Let_In].
-
- split.
- { match goal with
- |- (_,word64ToZ (_ ^- (Interpretations64.WordW.ZToWordW ?x) ^& _)) = (_,_ - (?y &' _)) => assert (x = y) as Hxy by reflexivity; repeat rewrite <-Hxy; clear Hxy end.
-
- change ZToWord64 with Interpretations64.WordW.ZToWordW in *.
- preunfold_is_bounded.
- rewrite !Interpretations64.WordW.wordWToZ_sub;
- rewrite !Interpretations64.WordW.wordWToZ_land;
- rewrite !Interpretations64.WordW.wordWToZ_ZToWordW;
- try match goal with
- | |- 0 <= ModularBaseSystemListZOperations.neg _ _ < 2 ^ _ => apply ModularBaseSystemListZOperationsProofs.neg_range; omega
- | |- 0 <= _ < 2 ^ Z.of_nat _ => vm_compute; split; [refine (fun x => match x with eq_refl => I end) | reflexivity]
- | |- 0 <= _ &' _ => apply Z.land_nonneg; right; omega
- | |- (_,_) = (_,_) => reflexivity
- end;
- try solve [
- (apply Z.log2_lt_pow2_alt; [ vm_compute; reflexivity | ]);
- eapply Z.le_lt_trans; try apply Z.land_upper_bound_r; try apply ModularBaseSystemListZOperationsProofs.neg_range; instantiate; try match goal with |- ?G => not has_evar G; vm_compute; discriminate end; reflexivity];
- match goal with
- | |- 0 <= _ - _ => lower_bound_minus_ge_modulus
- | |- Z.log2 (_ - _) < _ => upper_bound_minus_ge_modulus
- end. }
-
-
- change ZToWord64 with Interpretations64.WordW.ZToWordW in *;
- preunfold_is_bounded.
- rewrite !Interpretations64.WordW.wordWToZ_sub;
- rewrite !Interpretations64.WordW.wordWToZ_land;
- rewrite !Interpretations64.WordW.wordWToZ_ZToWordW;
- repeat match goal with |- _ /\ _ => split; Z.ltb_to_lt end;
- Z.ltb_to_lt; unfold_is_bounded; Z.ltb_to_lt;
- try match goal with
- | |- 0 <= ModularBaseSystemListZOperations.neg _ _ < 2 ^ _ => apply ModularBaseSystemListZOperationsProofs.neg_range; omega
- | |- 0 <= _ < 2 ^ Z.of_nat _ => vm_compute; split; [refine (fun x => match x with eq_refl => I end) | reflexivity]
- | |- 0 <= _ &' _ => apply Z.land_nonneg; right; omega
- end;
- try solve [
- (apply Z.log2_lt_pow2_alt; [ vm_compute; reflexivity | ]);
- eapply Z.le_lt_trans; try apply Z.land_upper_bound_r; try apply ModularBaseSystemListZOperationsProofs.neg_range; instantiate; try match goal with |- ?G => not has_evar G; vm_compute; discriminate end; reflexivity];
- try match goal with
- | |- 0 <= _ - _ => lower_bound_minus_ge_modulus
- | |- Z.log2 (_ - _) < _ => upper_bound_minus_ge_modulus
- | |- _ - _ <= _ => etransitivity; [ apply Z.le_sub_nonneg; apply Z.land_nonneg; right; omega | instantiate; assumption ]
- | |- 0 <= ModularBaseSystemListZOperations.neg _ _ =>
- apply ModularBaseSystemListZOperationsProofs.neg_range; vm_compute; discriminate
- | |- ModularBaseSystemListZOperations.neg _ _ < _ =>
- apply ModularBaseSystemListZOperationsProofs.neg_range; vm_compute; discriminate
- | |- _ => vm_compute; (discriminate || reflexivity)
- end.
-Qed.
-
-Lemma freezeW_correct_and_bounded : iunop_correct_and_bounded freezeW freeze.
-Proof.
- intros f H; rewrite <- freeze_prepost_freeze.
- change (freezeW f) with (postfreezeW (prefreezeW f)).
- destruct (prefreezeW_correct_and_bounded f H) as [H0 H1].
- destruct (postfreezeW_correct_and_bounded _ H1) as [H0' H1'].
- split; [ | assumption ].
- rewrite H0', H0; reflexivity.
-Qed.
-
-Lemma powW_correct_and_bounded chain : iunop_correct_and_bounded (fun x => powW x chain) (fun x => pow x chain).
-Proof.
- cbv [powW pow].
- intro x; intros; apply (fold_chain_opt_gen fe2519_32WToZ is_bounded [x]).
- { reflexivity. }
- { reflexivity. }
- { intros; pose proof (fun k0 k1 X Y => proj1 (mulW_correct_and_bounded (k0, k1) (conj X Y))) as H'.
- cbv [Curry.curry2 Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list'] in H'.
- rewrite <- H' by assumption.
- apply mulW_correct_and_bounded; split; assumption. }
- { intros; rewrite (fun X Y => proj1 (mulW_correct_and_bounded (_, _) (conj X Y))) by assumption; reflexivity. }
- { intros [|?]; autorewrite with simpl_nth_default;
- (assumption || reflexivity). }
-Qed.
-
-Lemma invW_correct_and_bounded : iunop_correct_and_bounded invW inv.
-Proof.
- intro f.
- assert (H : forall f, invW f = powW f (chain inv_ec))
- by abstract (cbv -[Let_In fe2519_32W mulW_noinline]; reflexivity).
- rewrite H.
- rewrite inv_correct.
- cbv [inv_opt].
- rewrite <- pow_correct.
- apply powW_correct_and_bounded.
-Qed.
-
-Definition fieldwisebW_sig (f g : fe2519_32W)
- : { b | b = GF2519_32.fieldwiseb (fe2519_32WToZ f) (fe2519_32WToZ g) }.
-Proof.
- hnf in f, g; destruct_head' prod.
- eexists.
- cbv [GF2519_32.fieldwiseb fe2519_32WToZ].
- rewrite ?word64eqb_Zeqb.
- reflexivity.
-Defined.
-
-Definition fieldwisebW (f g : fe2519_32W) : bool :=
- Eval cbv [proj1_sig fieldwisebW_sig appify2 app_fe2519_32W] in
- appify2 (fun f g => proj1_sig (fieldwisebW_sig f g)) f g.
-
-Lemma fieldwisebW_correct f g
- : fieldwisebW f g = GF2519_32.fieldwiseb (fe2519_32WToZ f) (fe2519_32WToZ g).
-Proof.
- set (f' := f); set (g' := g).
- hnf in f, g; destruct_head' prod.
- exact (proj2_sig (fieldwisebW_sig f' g')).
-Qed.
-
-Local Arguments freezeW : simpl never.
-Local Arguments fe2519_32WToZ !_ / .
-Local Opaque freezeW.
-
-Definition eqbW_sig (f g : fe2519_32W)
- : { b | is_bounded (fe2519_32WToZ f) = true
- -> is_bounded (fe2519_32WToZ g) = true
- -> b = GF2519_32.eqb (fe2519_32WToZ f) (fe2519_32WToZ g) }.
-Proof.
- pose proof (fun pf => proj1 (freezeW_correct_and_bounded f pf)) as frf.
- pose proof (fun pf => proj1 (freezeW_correct_and_bounded g pf)) as frg.
- hnf in f, g; destruct_head' prod.
- eexists.
- unfold GF2519_32.eqb.
- simpl @fe2519_32WToZ in *; cbv beta iota.
- intros.
- cbv [Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list' fe2519_32WToZ] in *.
- rewrite <- frf, <- frg by assumption.
- etransitivity; [ eapply fieldwisebW_correct | ].
- cbv [fe2519_32WToZ].
- reflexivity.
-Defined.
-
-Definition eqbW (f g : fe2519_32W) : bool :=
- Eval cbv [proj1_sig eqbW_sig appify2 app_fe2519_32W] in
- appify2 (fun f g => proj1_sig (eqbW_sig f g)) f g.
-
-Lemma eqbW_correct f g
- : is_bounded (fe2519_32WToZ f) = true
- -> is_bounded (fe2519_32WToZ g) = true
- -> eqbW f g = GF2519_32.eqb (fe2519_32WToZ f) (fe2519_32WToZ g).
-Proof.
- set (f' := f); set (g' := g).
- hnf in f, g; destruct_head' prod.
- exact (proj2_sig (eqbW_sig f' g')).
-Qed.
-
-Definition sqrt_m1W' : fe2519_32W :=
- Eval vm_compute in fe2519_32ZToW sqrt_m1.
-Definition sqrt_m1W := Eval cbv [sqrt_m1W' fe2519_32W_word64ize word64ize andb opt.word64ToZ opt.word64ize opt.Zleb Z.compare CompOpp Pos.compare Pos.compare_cont] in fe2519_32W_word64ize sqrt_m1W'.
-
-Definition GF2519_32sqrt (x : GF2519_32.fe2519_32) : GF2519_32.fe2519_32.
-Proof.
- lazymatch (eval cbv delta [GF2519_32.sqrt] in GF2519_32.sqrt) with
- | (fun powf powf_squared f => dlet a := powf in _)
- => exact (dlet powx := powW (fe2519_32ZToW x) (chain GF2519_32.sqrt_ec) in
- GF2519_32.sqrt (fe2519_32WToZ powx) (fe2519_32WToZ (mulW_noinline (powx, powx))) x)
- | (fun f => pow f _)
- => exact (GF2519_32.sqrt x)
- end.
-Defined.
-
-Definition sqrtW_sig
- : { sqrtW | iunop_correct_and_bounded sqrtW GF2519_32sqrt }.
-Proof.
- eexists.
- unfold GF2519_32sqrt, GF2519_32.sqrt.
- intros.
- rewrite ?fe2519_32ZToW_WToZ.
- split.
- { etransitivity.
- Focus 2. {
- lazymatch goal with
- | [ |- _ = pow _ _ ]
- => apply powW_correct_and_bounded; assumption
- | [ |- _ = (dlet powx := _ in _) ]
- => apply Proper_Let_In_nd_changebody_eq; intros;
- set_evars;
- match goal with (* unfold the first dlet ... in, but only if it's binding a var *)
- | [ |- ?x = dlet y := fe2519_32WToZ ?z in ?f ]
- => is_var z; change (x = match fe2519_32WToZ z with y => f end)
- end;
- change sqrt_m1 with (fe2519_32WToZ sqrt_m1W);
- pose proof (fun X Y => proj1 (mulW_correct_and_bounded (sqrt_m1W, a) (conj X Y))) as correctness;
- let cbv_in_all _ := (cbv [fe2519_32WToZ Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list' fe2519_32WToZ Curry.curry2 HList.hlistP HList.hlistP'] in *; idtac) in
- cbv_in_all ();
- let solver _ := (repeat match goal with
- | _ => progress subst
- | _ => progress unfold fst, snd
- | _ => progress cbv_in_all ()
- | [ |- ?x /\ ?x ] => cut x; [ intro; split; assumption | ]
- | [ |- is_bounded ?op = true ]
- => let H := fresh in
- lazymatch op with
- | context[mulW (_, _)] => pose proof mulW_correct_and_bounded as H
- | context[mulW_noinline (_, _)] => pose proof mulW_correct_and_bounded as H
- | context[powW _ _] => pose proof powW_correct_and_bounded as H
- | context[sqrt_m1W] => vm_compute; reflexivity
- | _ => assumption
- end;
- cbv_in_all ();
- apply H
- end) in
- rewrite <- correctness by solver (); clear correctness;
- let lem := fresh in
- pose proof eqbW_correct as lem; cbv_in_all (); rewrite <- lem by solver (); clear lem;
- pose proof (pull_bool_if fe2519_32WToZ) as lem; cbv_in_all (); rewrite lem by solver (); clear lem;
- subst_evars; reflexivity
- end.
- } Unfocus.
- assert (Hfold : forall x, fe2519_32WToZ x = fe2519_32WToZ x) by reflexivity.
- unfold fe2519_32WToZ at 2 in Hfold.
- etransitivity.
- Focus 2. {
- apply Proper_Let_In_nd_changebody; [ reflexivity | intro ].
- apply Hfold.
- } Unfocus.
- clear Hfold.
- lazymatch goal with
- | [ |- context G[dlet x := ?v in fe2519_32WToZ (@?f x)] ]
- => let G' := context G[fe2519_32WToZ (dlet x := v in f x)] in
- cut G'; cbv beta;
- [ cbv [Let_In]; exact (fun x => x) | apply f_equal ]
- | _ => idtac
- end;
- reflexivity.
- }
-
- { cbv [Let_In HList.hlistP HList.hlistP'];
- try break_if;
- repeat lazymatch goal with
- | [ |- is_bounded (?WToZ (powW _ _)) = true ]
- => apply powW_correct_and_bounded; assumption
- | [ |- is_bounded (snd (?WToZ (_, powW _ _))) = true ]
- => generalize powW_correct_and_bounded;
- cbv [snd Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list' HList.hlistP HList.hlistP'];
- let H := fresh in intro H; apply H; assumption
- | [ |- is_bounded (?WToZ (mulW (_, _))) = true ]
- => apply mulW_correct_and_bounded; split; [ vm_compute; reflexivity | ]
- end.
- }
-Defined.
-
-Definition sqrtW (f : fe2519_32W) : fe2519_32W :=
- Eval cbv [proj1_sig sqrtW_sig app_fe2519_32W] in
- app_fe2519_32W f (proj1_sig sqrtW_sig).
-
-Lemma sqrtW_correct_and_bounded : iunop_correct_and_bounded sqrtW GF2519_32sqrt.
-Proof.
- intro f.
- set (f' := f).
- hnf in f; destruct_head' prod.
- assert (H : sqrtW f' = proj1_sig sqrtW_sig f')
- by (subst f'; cbv beta iota delta [proj1_sig sqrtW_sig sqrtW]; reflexivity).
- rewrite H.
- exact (proj2_sig sqrtW_sig f').
-Qed.
-
-
-
-Definition add (f g : fe2519_32) : fe2519_32.
-Proof. define_binop f g addW addW_correct_and_bounded. Defined.
-Definition sub (f g : fe2519_32) : fe2519_32.
-Proof. define_binop f g subW subW_correct_and_bounded. Defined.
-Definition mul (f g : fe2519_32) : fe2519_32.
-Proof. define_binop f g mulW mulW_correct_and_bounded. Defined.
-Definition opp (f : fe2519_32) : fe2519_32.
-Proof. define_unop f oppW oppW_correct_and_bounded. Defined.
-Definition freeze (f : fe2519_32) : fe2519_32.
-Proof. define_unop f freezeW freezeW_correct_and_bounded. Defined.
-Definition ge_modulus (f : fe2519_32) : word64.
-Proof. define_unop_FEToZ f ge_modulusW. Defined.
-Definition pack (f : fe2519_32) : wire_digits.
-Proof. define_unop_FEToWire f packW packW_correct_and_bounded. Defined.
-Definition unpack (f : wire_digits) : fe2519_32.
-Proof. define_unop_WireToFE f unpackW unpackW_correct_and_bounded. Defined.
-
-Definition pow (f : fe2519_32) (chain : list (nat * nat)) : fe2519_32.
-Proof. define_unop f (fun x => powW x chain) powW_correct_and_bounded. Defined.
-Definition inv (f : fe2519_32) : fe2519_32.
-Proof. define_unop f invW (fun x p => proj2 (invW_correct_and_bounded x p)). Defined.
-Definition sqrt (f : fe2519_32) : fe2519_32.
-Proof. define_unop f sqrtW sqrtW_correct_and_bounded. Defined.
-
-Local Ltac op_correct_t op opW_correct_and_bounded :=
- cbv [op];
- lazymatch goal with
- | [ |- context[proj1_fe2519_32 (exist_fe2519_32W _ _)] ]
- => rewrite proj1_fe2519_32_exist_fe2519_32W
- | [ |- context[proj1_wire_digits (exist_wire_digitsW _ _)] ]
- => rewrite proj1_wire_digits_exist_wire_digitsW
- | _ => idtac
- end;
- generalize opW_correct_and_bounded;
- cbv_tuple_map;
- cbv [fst snd];
- let H := fresh in
- intro H; apply H;
- repeat match goal with |- and _ _ => apply conj end;
- lazymatch goal with
- | [ |- is_bounded _ = true ]
- => apply is_bounded_proj1_fe2519_32
- | [ |- wire_digits_is_bounded _ = true ]
- => apply is_bounded_proj1_wire_digits
- end.
-
-Lemma add_correct (f g : fe2519_32) : proj1_fe2519_32 (add f g) = carry_add (proj1_fe2519_32 f) (proj1_fe2519_32 g).
-Proof. op_correct_t add addW_correct_and_bounded. Qed.
-Lemma sub_correct (f g : fe2519_32) : proj1_fe2519_32 (sub f g) = carry_sub (proj1_fe2519_32 f) (proj1_fe2519_32 g).
-Proof. op_correct_t sub subW_correct_and_bounded. Qed.
-Lemma mul_correct (f g : fe2519_32) : proj1_fe2519_32 (mul f g) = GF2519_32.mul (proj1_fe2519_32 f) (proj1_fe2519_32 g).
-Proof. op_correct_t mul mulW_correct_and_bounded. Qed.
-Lemma opp_correct (f : fe2519_32) : proj1_fe2519_32 (opp f) = carry_opp (proj1_fe2519_32 f).
-Proof. op_correct_t opp oppW_correct_and_bounded. Qed.
-Lemma freeze_correct (f : fe2519_32) : proj1_fe2519_32 (freeze f) = GF2519_32.freeze (proj1_fe2519_32 f).
-Proof. op_correct_t freeze freezeW_correct_and_bounded. Qed.
-Lemma ge_modulus_correct (f : fe2519_32) : word64ToZ (ge_modulus f) = GF2519_32.ge_modulus (proj1_fe2519_32 f).
-Proof. op_correct_t ge_modulus ge_modulusW_correct. Qed.
-Lemma pack_correct (f : fe2519_32) : proj1_wire_digits (pack f) = GF2519_32.pack (proj1_fe2519_32 f).
-Proof. op_correct_t pack packW_correct_and_bounded. Qed.
-Lemma unpack_correct (f : wire_digits) : proj1_fe2519_32 (unpack f) = GF2519_32.unpack (proj1_wire_digits f).
-Proof. op_correct_t unpack unpackW_correct_and_bounded. Qed.
-Lemma pow_correct (f : fe2519_32) chain : proj1_fe2519_32 (pow f chain) = GF2519_32.pow (proj1_fe2519_32 f) chain.
-Proof. op_correct_t pow (powW_correct_and_bounded chain). Qed.
-Lemma inv_correct (f : fe2519_32) : proj1_fe2519_32 (inv f) = GF2519_32.inv (proj1_fe2519_32 f).
-Proof. op_correct_t inv (fun x p => proj1 (invW_correct_and_bounded x p)). Qed.
-Lemma sqrt_correct (f : fe2519_32) : proj1_fe2519_32 (sqrt f) = GF2519_32sqrt (proj1_fe2519_32 f).
-Proof. op_correct_t sqrt sqrtW_correct_and_bounded. Qed.
-
-Import Morphisms.
-
-Local Existing Instance prime_modulus.
-
-Lemma field2519_32_and_homomorphisms
- : @field fe2519_32 eq zero one opp add sub mul inv div
- /\ @Ring.is_homomorphism (F _) (@Logic.eq _) 1%F F.add F.mul fe2519_32 eq one add mul encode
- /\ @Ring.is_homomorphism fe2519_32 eq one add mul (F _) (@Logic.eq _) 1%F F.add F.mul decode.
-Proof.
- eapply @Field.field_and_homomorphism_from_redundant_representation.
- { exact (F.field_modulo _). }
- { cbv [decode encode]; intros; rewrite !proj1_fe2519_32_exist_fe2519_32; apply encode_rep. }
- { reflexivity. }
- { reflexivity. }
- { reflexivity. }
- { cbv [decode encode]; intros; rewrite opp_correct, carry_opp_correct, carry_opp_opt_correct, carry_opp_rep; apply opp_rep; reflexivity. }
- { cbv [decode encode]; intros; rewrite add_correct, carry_add_correct, carry_add_opt_correct, carry_add_rep; apply add_rep; reflexivity. }
- { cbv [decode encode]; intros; rewrite sub_correct, carry_sub_correct, carry_sub_opt_correct, carry_sub_rep; apply sub_rep; reflexivity. }
- { cbv [decode encode]; intros; rewrite mul_correct, GF2519_32.mul_correct, carry_mul_opt_correct by reflexivity; apply carry_mul_rep; reflexivity. }
- { cbv [decode encode]; intros; rewrite inv_correct, GF2519_32.inv_correct, inv_opt_correct by reflexivity; apply inv_rep; reflexivity. }
- { cbv [decode encode div]; intros; rewrite !proj1_fe2519_32_exist_fe2519_32; apply encode_rep. }
-Qed.
-
-Global Instance field2519_32 : @field fe2519_32 eq zero one opp add sub mul inv div := proj1 field2519_32_and_homomorphisms.
-
-Local Opaque proj1_fe2519_32 exist_fe2519_32 proj1_fe2519_32W exist_fe2519_32W.
-Global Instance homomorphism_F2519_32_encode
- : @Ring.is_homomorphism (F modulus) Logic.eq F.one F.add F.mul fe2519_32 eq one add mul encode.
-Proof. apply field2519_32_and_homomorphisms. Qed.
-
-Global Instance homomorphism_F2519_32_decode
- : @Ring.is_homomorphism fe2519_32 eq one add mul (F modulus) Logic.eq F.one F.add F.mul decode.
-Proof. apply field2519_32_and_homomorphisms. Qed.
diff --git a/src/SpecificGen/GF2519_32BoundedAddCoordinates.v b/src/SpecificGen/GF2519_32BoundedAddCoordinates.v
deleted file mode 100644
index 6ff1a8198..000000000
--- a/src/SpecificGen/GF2519_32BoundedAddCoordinates.v
+++ /dev/null
@@ -1,78 +0,0 @@
-Require Import Coq.ZArith.ZArith.
-Require Import Crypto.SpecificGen.GF2519_32.
-Require Import Crypto.SpecificGen.GF2519_32BoundedCommon.
-Require Import Crypto.SpecificGen.GF2519_32ReflectiveAddCoordinates.
-Require Import Crypto.Util.LetIn.
-Local Open Scope Z.
-
-Local Ltac bounded_t opW blem :=
- apply blem; apply is_bounded_proj1_fe2519_32.
-
-Local Ltac define_binop f g opW blem :=
- refine (exist_fe2519_32W (opW (proj1_fe2519_32W f) (proj1_fe2519_32W g)) _);
- abstract bounded_t opW blem.
-
-Local Opaque Let_In.
-Local Opaque Z.add Z.sub Z.mul Z.shiftl Z.shiftr Z.land Z.lor Z.eqb NToWord64.
-(*Local Arguments interp_radd_coordinates / _ _ _ _ _ _ _ _ _.
-Definition add_coordinatesW (x0 x1 x2 x3 x4 x5 x6 x7 x8 : fe2519_32W) : Tuple.tuple fe2519_32W 4
- := Eval simpl in interp_radd_coordinates x0 x1 x2 x3 x4 x5 x6 x7 x8.
-
-Local Ltac port_correct_and_bounded pre_rewrite opW interp_rop rop_cb :=
- change opW with (interp_rop);
- rewrite pre_rewrite;
- intros; apply rop_cb; assumption.
-
-Lemma add_coordinatesW_correct_and_bounded : i9top_correct_and_bounded 4 add_coordinatesW Reified.AddCoordinates.add_coordinates.
-Proof. port_correct_and_bounded interp_radd_coordinates_correct add_coordinatesW interp_radd_coordinates radd_coordinates_correct_and_bounded. Qed.
-
-Local Ltac define_9_4op x0 x1 x2 x3 x4 x5 x6 x7 x8 opW blem :=
- refine (let ts := opW (proj1_fe2519_32W x0)
- (proj1_fe2519_32W x1)
- (proj1_fe2519_32W x2)
- (proj1_fe2519_32W x3)
- (proj1_fe2519_32W x4)
- (proj1_fe2519_32W x5)
- (proj1_fe2519_32W x6)
- (proj1_fe2519_32W x7)
- (proj1_fe2519_32W x8) in
- HList.mapt exist_fe2519_32W (ts:=ts) _);
- abstract (
- rewrite <- (HList.hlist_map (F:=fun x => is_bounded x = true) (f:=fe2519_32WToZ));
- apply add_coordinatesW_correct_and_bounded; apply is_bounded_proj1_fe2519_32
- ).
-Definition add_coordinates (x0 x1 x2 x3 x4 x5 x6 x7 x8 : fe2519_32) : Tuple.tuple fe2519_32 4.
-Proof. define_9_4op x0 x1 x2 x3 x4 x5 x6 x7 x8 add_coordinatesW add_coordinatesW_correct_and_bounded. Defined.
-
-Local Ltac op_correct_t op opW_correct_and_bounded :=
- cbv [op];
- rewrite ?HList.map_mapt;
- lazymatch goal with
- | [ |- context[proj1_fe2519_32 (exist_fe2519_32W _ _)] ]
- => rewrite proj1_fe2519_32_exist_fe2519_32W || setoid_rewrite proj1_fe2519_32_exist_fe2519_32W
- | [ |- context[proj1_wire_digits (exist_wire_digitsW _ _)] ]
- => rewrite proj1_wire_digits_exist_wire_digitsW
- | _ => idtac
- end;
- rewrite <- ?HList.map_is_mapt;
- apply opW_correct_and_bounded;
- lazymatch goal with
- | [ |- is_bounded _ = true ]
- => apply is_bounded_proj1_fe2519_32
- | [ |- wire_digits_is_bounded _ = true ]
- => apply is_bounded_proj1_wire_digits
- end.
-
-Lemma add_coordinates_correct (x0 x1 x2 x3 x4 x5 x6 x7 x8 : fe2519_32)
- : Tuple.map (n:=4) proj1_fe2519_32 (add_coordinates x0 x1 x2 x3 x4 x5 x6 x7 x8)
- = Reified.AddCoordinates.add_coordinates (proj1_fe2519_32 x0)
- (proj1_fe2519_32 x1)
- (proj1_fe2519_32 x2)
- (proj1_fe2519_32 x3)
- (proj1_fe2519_32 x4)
- (proj1_fe2519_32 x5)
- (proj1_fe2519_32 x6)
- (proj1_fe2519_32 x7)
- (proj1_fe2519_32 x8).
-Proof. op_correct_t add_coordinates add_coordinatesW_correct_and_bounded. Qed.
-*)
diff --git a/src/SpecificGen/GF2519_32BoundedCommon.v b/src/SpecificGen/GF2519_32BoundedCommon.v
deleted file mode 100644
index b37b6bc4e..000000000
--- a/src/SpecificGen/GF2519_32BoundedCommon.v
+++ /dev/null
@@ -1,819 +0,0 @@
-Require Import Coq.Classes.Morphisms.
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParams.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParamProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemOpt.
-Require Import Crypto.SpecificGen.GF2519_32.
-Require Import Bedrock.Word Crypto.Util.WordUtil.
-Require Import Coq.Lists.List Crypto.Util.ListUtil.
-Require Import Crypto.Tactics.VerdiTactics.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Notations.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Util.HList.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Algebra.
-Import ListNotations.
-Require Import Coq.ZArith.ZArith Coq.ZArith.Zpower Coq.ZArith.ZArith Coq.ZArith.Znumtheory.
-Local Open Scope Z.
-
-(* BEGIN common curve-specific definitions *)
-Definition bit_width : nat := Eval compute in Z.to_nat (GF2519_32.int_width).
-Local Notation b_of exp := (0, 2^exp + 2^(exp-3))%Z (only parsing). (* max is [(0, 2^(exp+2) + 2^exp + 2^(exp-1) + 2^(exp-3) + 2^(exp-4) + 2^(exp-5) + 2^(exp-6) + 2^(exp-10) + 2^(exp-12) + 2^(exp-13) + 2^(exp-14) + 2^(exp-15) + 2^(exp-17) + 2^(exp-23) + 2^(exp-24))%Z] *)
-Definition bounds_exp : tuple Z length_fe2519_32
- := Eval compute in
- Tuple.from_list length_fe2519_32 limb_widths eq_refl.
-Definition bounds : tuple (Z * Z) length_fe2519_32
- := Eval compute in
- Tuple.map (fun e => b_of e) bounds_exp.
-Definition wire_digit_bounds_exp : tuple Z (length wire_widths)
- := Eval compute in Tuple.from_list _ wire_widths eq_refl.
-Definition wire_digit_bounds : tuple (Z * Z) (length wire_widths)
- := Eval compute in Tuple.map (fun e => (0,2^e-1)%Z) wire_digit_bounds_exp.
-(* END common curve-specific definitions *)
-
-(* BEGIN aliases for word extraction *)
-Definition word64 := Word.word bit_width.
-Coercion word64ToZ (x : word64) : Z := Z.of_N (wordToN x).
-Coercion ZToWord64 (x : Z) : word64 := NToWord _ (Z.to_N x).
-Definition NToWord64 : N -> word64 := NToWord _.
-Definition word64ize (x : word64) : word64
- := Eval cbv [wordToN N.succ_double N.double] in NToWord64 (wordToN x).
-Definition w64eqb (x y : word64) := weqb x y.
-
-Global Arguments NToWord64 : simpl never.
-Arguments word64 : simpl never.
-Arguments bit_width : simpl never.
-Global Opaque word64.
-Global Opaque bit_width.
-
-(* END aliases for word extraction *)
-
-(* BEGIN basic types *)
-Module Type WordIsBounded.
- Parameter is_boundedT : forall (lower upper : Z), word64 -> bool.
- Parameter Build_is_boundedT : forall {lower upper} {proj_word : word64},
- andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z = true -> is_boundedT lower upper proj_word = true.
- Parameter project_is_boundedT : forall {lower upper} {proj_word : word64},
- is_boundedT lower upper proj_word = true -> andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z = true.
-End WordIsBounded.
-
-Module Import WordIsBoundedDefault : WordIsBounded.
- Definition is_boundedT : forall (lower upper : Z), word64 -> bool
- := fun lower upper proj_word => andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z.
- Definition Build_is_boundedT {lower upper} {proj_word : word64}
- : andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z = true -> is_boundedT lower upper proj_word = true
- := fun x => x.
- Definition project_is_boundedT {lower upper} {proj_word : word64}
- : is_boundedT lower upper proj_word = true -> andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z = true
- := fun x => x.
-End WordIsBoundedDefault.
-
-Definition bounded_word (lower upper : Z)
- := { proj_word : word64 | is_boundedT lower upper proj_word = true }.
-Local Notation word_of exp := (bounded_word (fst (b_of exp)) (snd (b_of exp))).
-Local Notation unbounded_word sz := (bounded_word 0 (2^sz-1)%Z).
-
-Local Opaque word64.
-Definition fe2519_32W := Eval cbv (*-[word64]*) in (tuple word64 length_fe2519_32).
-Definition wire_digitsW := Eval cbv (*-[word64]*) in (tuple word64 (length wire_widths)).
-Definition fe2519_32 :=
- Eval cbv -[bounded_word Z.pow Z.sub Z.add] in
- hlist (fun e => word_of e) bounds_exp.
-Definition wire_digits :=
- Eval cbv -[bounded_word Z.pow Z.sub Z.add] in
- hlist (fun e => unbounded_word e) wire_digit_bounds_exp.
-
-Definition is_bounded_gen {n} (x : tuple Z n) (bounds : tuple (Z * Z) n) : bool
- := let res := Tuple.map2
- (fun bounds v =>
- let '(lower, upper) := bounds in
- (lower <=? v) && (v <=? upper))%bool%Z
- bounds x in
- List.fold_right andb true (Tuple.to_list _ res).
-
-Definition is_bounded (x : SpecificGen.GF2519_32.fe2519_32) : bool
- := is_bounded_gen (n:=length_fe2519_32) x bounds.
-
-Definition wire_digits_is_bounded (x : SpecificGen.GF2519_32.wire_digits) : bool
- := is_bounded_gen (n:=length wire_widths) x wire_digit_bounds.
-
-(* END basic types *)
-
-Section generic_destructuring.
- Fixpoint app_on' A n : forall T (f : tuple' A n) (P : forall x : tuple' A n, T x), T f
- := match n return forall T (f : tuple' A n) (P : forall x : tuple' A n, T x), T f with
- | O => fun T v P => P v
- | S n' => fun T v P => let '(v, x) := v in app_on' A n' _ v (fun v => P (v, x))
- end.
- Definition app_on {A n} : forall {T} (f : tuple A n) (P : forall x : tuple A n, T x), T f
- := match n return forall T (f : tuple A n) (P : forall x : tuple A n, T x), T f with
- | O => fun T v P => P v
- | S n' => @app_on' A n'
- end.
- Lemma app_on'_correct {A n T} f (P : forall x : tuple' A n, T x) : app_on' A n T f P = P f.
- Proof.
- induction n; simpl in *; destruct_head' prod; [ reflexivity | exact (IHn _ _ (fun t => P (t, _))) ].
- Qed.
- Lemma app_on_correct {A n T} f (P : forall x : tuple A n, T x) : app_on f P = P f.
- Proof. destruct n; [ reflexivity | apply app_on'_correct ]. Qed.
-
- Fixpoint app_on_h' A F n : forall ts T (f : @hlist' A n F ts) (P : forall x : @hlist' A n F ts, T x), T f
- := match n return forall ts T (f : @hlist' A n F ts) (P : forall x : @hlist' A n F ts, T x), T f with
- | O => fun ts T v P => P v
- | S n' => fun ts T v P => let '(v, x) := v in app_on_h' A F n' _ _ v (fun v => P (v, x))
- end.
- Definition app_on_h {A F n} : forall ts T (f : @hlist A n F ts) (P : forall x : @hlist A n F ts, T x), T f
- := match n return forall ts T (f : @hlist A n F ts) (P : forall x : @hlist A n F ts, T x), T f with
- | O => fun ts T v P => P v
- | S n' => @app_on_h' A F n'
- end.
- Lemma app_on_h'_correct {A F n ts T} f P : @app_on_h' A F n ts T f P = P f.
- Proof.
- induction n; simpl in *; destruct_head' prod; [ reflexivity | exact (IHn _ _ _ (fun h => P (h, f))) ].
- Qed.
- Lemma app_on_h_correct {A} F {n} ts {T} f P : @app_on_h A F n ts T f P = P f.
- Proof. destruct n; [ reflexivity | apply app_on_h'_correct ]. Qed.
-
- Definition app_wire_digitsW_dep {A T} (P : forall x : tuple A (length wire_widths), T x)
- : forall (f : tuple A (length wire_widths)), T f
- := Eval compute in fun f => @app_on A (length wire_widths) T f P.
- Definition app_wire_digitsW {A T} (f : tuple A (length wire_widths)) (P : tuple A (length wire_widths) -> T)
- := Eval compute in @app_wire_digitsW_dep A (fun _ => T) P f.
- Definition app_fe2519_32W_dep {A T} (P : forall x : tuple A length_fe2519_32, T x)
- : forall (f : tuple A length_fe2519_32), T f
- := Eval compute in fun f => @app_on A length_fe2519_32 T f P.
- Definition app_fe2519_32W {A T} (f : tuple A length_fe2519_32) (P : tuple A length_fe2519_32 -> T)
- := Eval compute in @app_fe2519_32W_dep A (fun _ => T) P f.
- Definition app_fe2519_32_dep {T} (P : forall x : fe2519_32, T x)
- : forall f : fe2519_32, T f
- := Eval compute in fun f => @app_on_h _ (fun e => word_of e) length_fe2519_32 bounds_exp T f P.
- Definition app_fe2519_32 {T} (f : fe2519_32) (P : hlist (fun e => word_of e) bounds_exp -> T)
- := Eval compute in @app_fe2519_32_dep (fun _ => T) P f.
- Definition app_wire_digits_dep {T} (P : forall x : wire_digits, T x)
- : forall f : wire_digits, T f
- := Eval compute in fun f => @app_on_h _ (fun e => unbounded_word e) (length wire_widths) wire_digit_bounds_exp T f P.
- Definition app_wire_digits {T} (f : wire_digits) (P : hlist (fun e => unbounded_word e) wire_digit_bounds_exp -> T)
- := Eval compute in @app_wire_digits_dep (fun _ => T) P f.
-
- Definition app_wire_digitsW_dep_correct {A T} f P : @app_wire_digitsW_dep A T P f = P f
- := app_on_correct f P.
- Definition app_wire_digitsW_correct {A T} f P : @app_wire_digitsW A T f P = P f
- := @app_wire_digitsW_dep_correct A (fun _ => T) f P.
- Definition app_fe2519_32W_dep_correct {A T} f P : @app_fe2519_32W_dep A T P f = P f
- := app_on_correct f P.
- Definition app_fe2519_32W_correct {A T} f P : @app_fe2519_32W A T f P = P f
- := @app_fe2519_32W_dep_correct A (fun _ => T) f P.
- Definition app_fe2519_32_dep_correct {T} f P : @app_fe2519_32_dep T P f = P f
- := app_on_h_correct (fun e => word_of e) bounds_exp f P.
- Definition app_fe2519_32_correct {T} f P : @app_fe2519_32 T f P = P f
- := @app_fe2519_32_dep_correct (fun _ => T) f P.
- Definition app_wire_digits_dep_correct {T} f P : @app_wire_digits_dep T P f = P f
- := app_on_h_correct (fun e => unbounded_word e) wire_digit_bounds_exp f P.
- Definition app_wire_digits_correct {T} f P : @app_wire_digits T f P = P f
- := @app_wire_digits_dep_correct (fun _ => T) f P.
-
- Definition appify2 {T} (op : fe2519_32W -> fe2519_32W -> T) (f g : fe2519_32W) :=
- app_fe2519_32W f (fun f0 => (app_fe2519_32W g (fun g0 => op f0 g0))).
-
- Lemma appify2_correct : forall {T} op f g, @appify2 T op f g = op f g.
- Proof.
- intros. cbv [appify2].
- etransitivity; apply app_fe2519_32W_correct.
- Qed.
-
- Definition appify9 {T} (op : fe2519_32W -> fe2519_32W -> fe2519_32W -> fe2519_32W -> fe2519_32W -> fe2519_32W -> fe2519_32W -> fe2519_32W -> fe2519_32W -> T) (x0 x1 x2 x3 x4 x5 x6 x7 x8 : fe2519_32W) :=
- app_fe2519_32W x0 (fun x0' =>
- app_fe2519_32W x1 (fun x1' =>
- app_fe2519_32W x2 (fun x2' =>
- app_fe2519_32W x3 (fun x3' =>
- app_fe2519_32W x4 (fun x4' =>
- app_fe2519_32W x5 (fun x5' =>
- app_fe2519_32W x6 (fun x6' =>
- app_fe2519_32W x7 (fun x7' =>
- app_fe2519_32W x8 (fun x8' =>
- op x0' x1' x2' x3' x4' x5' x6' x7' x8'))))))))).
-
- Lemma appify9_correct : forall {T} op x0 x1 x2 x3 x4 x5 x6 x7 x8,
- @appify9 T op x0 x1 x2 x3 x4 x5 x6 x7 x8 = op x0 x1 x2 x3 x4 x5 x6 x7 x8.
- Proof.
- intros. cbv [appify9].
- repeat (etransitivity; [ apply app_fe2519_32W_correct | ]); reflexivity.
- Qed.
-End generic_destructuring.
-
-Definition eta_fe2519_32W_sig (x : fe2519_32W) : { v : fe2519_32W | v = x }.
-Proof.
- eexists; symmetry.
- repeat (etransitivity; [ apply surjective_pairing | apply f_equal2 ]); reflexivity.
-Defined.
-Definition eta_fe2519_32W (x : fe2519_32W) : fe2519_32W
- := Eval cbv [proj1_sig eta_fe2519_32W_sig] in proj1_sig (eta_fe2519_32W_sig x).
-Definition eta_wire_digitsW_sig (x : wire_digitsW) : { v : wire_digitsW | v = x }.
-Proof.
- eexists; symmetry.
- repeat (etransitivity; [ apply surjective_pairing | apply f_equal2 ]); reflexivity.
-Defined.
-Definition eta_wire_digitsW (x : wire_digitsW) : wire_digitsW
- := Eval cbv [proj1_sig eta_wire_digitsW_sig] in proj1_sig (eta_wire_digitsW_sig x).
-
-Local Transparent word64.
-Lemma word64ize_id x : word64ize x = x.
-Proof. apply NToWord_wordToN. Qed.
-Local Opaque word64.
-
-Lemma word64eqb_Zeqb x y : (word64ToZ x =? word64ToZ y)%Z = w64eqb x y.
-Proof. apply wordeqb_Zeqb. Qed.
-
-Local Arguments Z.pow_pos !_ !_ / .
-Lemma word64ToZ_ZToWord64 x : 0 <= x < 2^Z.of_nat bit_width -> word64ToZ (ZToWord64 x) = x.
-Proof.
- intros; unfold word64ToZ, ZToWord64.
- rewrite wordToN_NToWord_idempotent, Z2N.id
- by (omega || apply N2Z.inj_lt; rewrite <- ?(N_nat_Z (Npow2 _)), ?Npow2_nat, ?Zpow_pow2, ?N2Z.id, ?Z2N.id, ?Z2Nat.id by omega; omega).
- reflexivity.
-Qed.
-Lemma ZToWord64_word64ToZ x : ZToWord64 (word64ToZ x) = x.
-Proof.
- intros; unfold word64ToZ, ZToWord64.
- rewrite N2Z.id, NToWord_wordToN; reflexivity.
-Qed.
-
-(* BEGIN precomputation. *)
-
-Definition proj_word {lower upper} (v : bounded_word lower upper) := Eval cbv [proj1_sig] in proj1_sig v.
-Definition word_bounded {lower upper} (v : bounded_word lower upper)
- : andb (lower <=? proj_word v)%Z (proj_word v <=? upper)%Z = true
- := project_is_boundedT (proj2_sig v).
-Definition Build_bounded_word' {lower upper} proj_word word_bounded : bounded_word lower upper
- := exist _ proj_word (Build_is_boundedT word_bounded).
-Arguments proj_word {_ _} _.
-Arguments word_bounded {_ _} _.
-Arguments Build_bounded_word' {_ _} _ _.
-Definition Build_bounded_word {lower upper} (proj_word : word64) (word_bounded : andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z = true)
- : bounded_word lower upper
- := Build_bounded_word'
- proj_word
- (match andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z as b return b = true -> b = true with
- | true => fun _ => eq_refl
- | false => fun x => x
- end word_bounded).
-Lemma word_to_unbounded_helper {x e : nat} : (x < pow2 e)%nat -> (Z.of_nat e <= Z.of_nat bit_width)%Z -> ((0 <=? word64ToZ (ZToWord64 (Z.of_nat x))) && (word64ToZ (ZToWord64 (Z.of_nat x)) <=? 2 ^ (Z.of_nat e) - 1))%bool = true.
-Proof.
- rewrite pow2_id; intro H; apply Nat2Z.inj_lt in H; revert H.
- rewrite Z.pow_Zpow; simpl Z.of_nat.
- intros H H'.
- assert (2^Z.of_nat e <= 2^Z.of_nat bit_width) by auto with zarith.
- rewrite ?word64ToZ_ZToWord64 by omega.
- match goal with
- | [ |- context[andb ?x ?y] ]
- => destruct x eqn:?, y eqn:?; try reflexivity; Z.ltb_to_lt
- end;
- intros; omega.
-Qed.
-Definition word_to_unbounded_word {sz} (x : word sz) : (Z.of_nat sz <=? Z.of_nat bit_width)%Z = true -> unbounded_word (Z.of_nat sz).
-Proof.
- refine (fun pf => Build_bounded_word (Z.of_N (wordToN x)) _).
- abstract (rewrite wordToN_nat, nat_N_Z; Z.ltb_to_lt; apply (word_to_unbounded_helper (wordToNat_bound x)); simpl; omega).
-Defined.
-Definition word32_to_unbounded_word (x : word 32) : unbounded_word 32.
-Proof. apply (word_to_unbounded_word x); reflexivity. Defined.
-Definition word31_to_unbounded_word (x : word 31) : unbounded_word 31.
-Proof. apply (word_to_unbounded_word x); reflexivity. Defined.
-
-Local Opaque word64.
-Declare Reduction app_tuple_map := cbv [app_wire_digitsW app_fe2519_32W app_fe2519_32 HList.mapt HList.mapt' Tuple.map on_tuple List.map List.app length_fe2519_32 List.length wire_widths Tuple.from_list Tuple.from_list' Tuple.to_list Tuple.to_list' fst snd].
-Definition fe2519_32WToZ (x : fe2519_32W) : SpecificGen.GF2519_32.fe2519_32
- := Eval app_tuple_map in
- app_fe2519_32W x (Tuple.map (fun v : word64 => v : Z)).
-Definition fe2519_32ZToW (x : SpecificGen.GF2519_32.fe2519_32) : fe2519_32W
- := Eval app_tuple_map in
- app_fe2519_32W x (Tuple.map (fun v : Z => v : word64)).
-Definition wire_digitsWToZ (x : wire_digitsW) : SpecificGen.GF2519_32.wire_digits
- := Eval app_tuple_map in
- app_wire_digitsW x (Tuple.map (fun v : word64 => v : Z)).
-Definition wire_digitsZToW (x : SpecificGen.GF2519_32.wire_digits) : wire_digitsW
- := Eval app_tuple_map in
- app_wire_digitsW x (Tuple.map (fun v : Z => v : word64)).
-Definition fe2519_32W_word64ize (x : fe2519_32W) : fe2519_32W
- := Eval app_tuple_map in
- app_fe2519_32W x (Tuple.map word64ize).
-Definition wire_digitsW_word64ize (x : wire_digitsW) : wire_digitsW
- := Eval app_tuple_map in
- app_wire_digitsW x (Tuple.map word64ize).
-
-(** TODO: Turn this into a lemma to speed up proofs *)
-Ltac unfold_is_bounded_in' H :=
- lazymatch type of H with
- | andb _ _ = true
- => apply andb_prop in H;
- let H1 := fresh in
- let H2 := fresh in
- destruct H as [H1 H2];
- unfold_is_bounded_in' H1;
- unfold_is_bounded_in' H2
- | _ => idtac
- end.
-Ltac preunfold_is_bounded_in H :=
- unfold is_bounded, wire_digits_is_bounded, is_bounded_gen, fe2519_32WToZ, wire_digitsWToZ in H;
- cbv [to_list length bounds wire_digit_bounds from_list from_list' map2 on_tuple2 to_list' ListUtil.map2 Tuple.map List.map fold_right List.rev List.app length_fe2519_32 List.length wire_widths HList.hlistP HList.hlistP' Tuple.on_tuple] in H.
-Ltac unfold_is_bounded_in H :=
- preunfold_is_bounded_in H;
- unfold_is_bounded_in' H.
-
-Ltac preunfold_is_bounded :=
- unfold is_bounded, wire_digits_is_bounded, is_bounded_gen, fe2519_32WToZ, wire_digitsWToZ;
- cbv [to_list length bounds wire_digit_bounds from_list from_list' map2 on_tuple2 to_list' ListUtil.map2 Tuple.map List.map fold_right List.rev List.app length_fe2519_32 List.length wire_widths HList.hlistP HList.hlistP' Tuple.on_tuple].
-
-Ltac unfold_is_bounded :=
- preunfold_is_bounded;
- repeat match goal with
- | [ |- andb _ _ = true ] => apply andb_true_intro
- | [ |- and _ _ ] => split
- end.
-
-Local Transparent bit_width.
-Definition Pow2_64 := Eval compute in 2^Z.of_nat bit_width.
-Definition unfold_Pow2_64 : 2^Z.of_nat bit_width = Pow2_64 := eq_refl.
-Local Opaque bit_width.
-
-Local Ltac prove_lt_bit_width :=
- rewrite unfold_Pow2_64; cbv [Pow2_64]; omega.
-
-Lemma fe2519_32ZToW_WToZ (x : fe2519_32W) : fe2519_32ZToW (fe2519_32WToZ x) = x.
-Proof.
- hnf in x; destruct_head' prod; cbv [fe2519_32WToZ fe2519_32ZToW].
- rewrite !ZToWord64_word64ToZ; reflexivity.
-Qed.
-
-Lemma fe2519_32WToZ_ZToW x : is_bounded x = true -> fe2519_32WToZ (fe2519_32ZToW x) = x.
-Proof.
- hnf in x; destruct_head' prod; cbv [fe2519_32WToZ fe2519_32ZToW].
- intro H.
- unfold_is_bounded_in H; destruct_head' and.
- Z.ltb_to_lt.
- rewrite !word64ToZ_ZToWord64 by prove_lt_bit_width.
- reflexivity.
-Qed.
-
-Lemma fe2519_32W_word64ize_id x : fe2519_32W_word64ize x = x.
-Proof.
- hnf in x; destruct_head' prod.
- cbv [fe2519_32W_word64ize];
- repeat apply f_equal2; apply word64ize_id.
-Qed.
-Lemma wire_digitsW_word64ize_id x : wire_digitsW_word64ize x = x.
-Proof.
- hnf in x; destruct_head' prod.
- cbv [wire_digitsW_word64ize];
- repeat apply f_equal2; apply word64ize_id.
-Qed.
-
-Definition uncurry_unop_fe2519_32W {T} (op : fe2519_32W -> T)
- := Eval cbv (*-[word64]*) in Tuple.uncurry (n:=length_fe2519_32) op.
-Definition curry_unop_fe2519_32W {T} op : fe2519_32W -> T
- := Eval cbv (*-[word64]*) in fun f => app_fe2519_32W f (Tuple.curry (n:=length_fe2519_32) op).
-Definition uncurry_binop_fe2519_32W {T} (op : fe2519_32W -> fe2519_32W -> T)
- := Eval cbv (*-[word64]*) in uncurry_unop_fe2519_32W (fun f => uncurry_unop_fe2519_32W (op f)).
-Definition curry_binop_fe2519_32W {T} op : fe2519_32W -> fe2519_32W -> T
- := Eval cbv (*-[word64]*) in appify2 (fun f => curry_unop_fe2519_32W (curry_unop_fe2519_32W op f)).
-
-Definition uncurry_unop_wire_digitsW {T} (op : wire_digitsW -> T)
- := Eval cbv (*-[word64]*) in Tuple.uncurry (n:=length wire_widths) op.
-Definition curry_unop_wire_digitsW {T} op : wire_digitsW -> T
- := Eval cbv (*-[word64]*) in fun f => app_wire_digitsW f (Tuple.curry (n:=length wire_widths) op).
-
-Definition uncurry_9op_fe2519_32W {T} (op : fe2519_32W -> fe2519_32W -> fe2519_32W -> fe2519_32W -> fe2519_32W -> fe2519_32W -> fe2519_32W -> fe2519_32W -> fe2519_32W -> T)
- := Eval cbv (*-[word64]*) in
- uncurry_unop_fe2519_32W (fun x0 =>
- uncurry_unop_fe2519_32W (fun x1 =>
- uncurry_unop_fe2519_32W (fun x2 =>
- uncurry_unop_fe2519_32W (fun x3 =>
- uncurry_unop_fe2519_32W (fun x4 =>
- uncurry_unop_fe2519_32W (fun x5 =>
- uncurry_unop_fe2519_32W (fun x6 =>
- uncurry_unop_fe2519_32W (fun x7 =>
- uncurry_unop_fe2519_32W (fun x8 =>
- op x0 x1 x2 x3 x4 x5 x6 x7 x8))))))))).
-Definition curry_9op_fe2519_32W {T} op : fe2519_32W -> fe2519_32W -> fe2519_32W -> fe2519_32W -> fe2519_32W -> fe2519_32W -> fe2519_32W -> fe2519_32W -> fe2519_32W -> T
- := Eval cbv (*-[word64]*) in
- appify9 (fun x0 x1 x2 x3 x4 x5 x6 x7 x8
- => curry_unop_fe2519_32W (curry_unop_fe2519_32W (curry_unop_fe2519_32W (curry_unop_fe2519_32W (curry_unop_fe2519_32W (curry_unop_fe2519_32W (curry_unop_fe2519_32W (curry_unop_fe2519_32W (curry_unop_fe2519_32W op x0) x1) x2) x3) x4) x5) x6) x7) x8).
-
-Definition proj1_fe2519_32W (x : fe2519_32) : fe2519_32W
- := Eval app_tuple_map in
- app_fe2519_32 x (HList.mapt (fun _ => (@proj_word _ _))).
-Coercion proj1_fe2519_32 (x : fe2519_32) : SpecificGen.GF2519_32.fe2519_32
- := fe2519_32WToZ (proj1_fe2519_32W x).
-
-Lemma is_bounded_proj1_fe2519_32 (x : fe2519_32) : is_bounded (proj1_fe2519_32 x) = true.
-Proof.
- revert x; refine (app_fe2519_32_dep _); intro x.
- hnf in x; destruct_head' prod; destruct_head' bounded_word.
- cbv [is_bounded proj1_fe2519_32 proj1_fe2519_32W fe2519_32WToZ to_list length bounds from_list from_list' map2 on_tuple2 to_list' ListUtil.map2 List.map List.rev List.app proj_word length_fe2519_32 is_bounded_gen].
- apply fold_right_andb_true_iff_fold_right_and_True.
- cbv [fold_right List.map].
- cbv beta in *.
- repeat split; auto using project_is_boundedT.
-Qed.
-
-Definition proj1_wire_digitsW (x : wire_digits) : wire_digitsW
- := app_wire_digits x (HList.mapt (fun _ => proj_word)).
-Coercion proj1_wire_digits (x : wire_digits) : SpecificGen.GF2519_32.wire_digits
- := wire_digitsWToZ (proj1_wire_digitsW x).
-
-Lemma is_bounded_proj1_wire_digits (x : wire_digits) : wire_digits_is_bounded (proj1_wire_digits x) = true.
-Proof.
- revert x; refine (app_wire_digits_dep _); intro x.
- hnf in x; destruct_head' prod; destruct_head' bounded_word.
- cbv [wire_digits_is_bounded proj1_wire_digits proj1_wire_digitsW wire_digitsWToZ to_list length wire_digit_bounds from_list from_list' map2 on_tuple2 to_list' ListUtil.map2 List.map List.rev List.app proj_word is_bounded_gen wire_widths HList.mapt HList.mapt' app_wire_digits fst snd].
- apply fold_right_andb_true_iff_fold_right_and_True.
- cbv [fold_right List.map].
- cbv beta in *.
- repeat split; auto using project_is_boundedT.
-Qed.
-
-Local Ltac make_exist_W' x app_W_dep :=
- let H := fresh in
- revert x; refine (@app_W_dep _ _ _); intros x H;
- let x' := fresh in
- set (x' := x);
- cbv [tuple tuple' length_fe2519_32 List.length wire_widths] in x;
- destruct_head' prod;
- let rec do_refine v H :=
- first [ let v' := (eval cbv [snd fst] in (snd v)) in
- refine (_, Build_bounded_word v' _);
- [ do_refine (fst v) (proj2 H) | subst x'; abstract exact (proj1 H) ]
- | let v' := (eval cbv [snd fst] in v) in
- refine (Build_bounded_word v' _); subst x'; abstract exact (proj1 H) ] in
- let H' := constr:(proj1 (@fold_right_andb_true_iff_fold_right_and_True _) H) in
- let T := type of H' in
- let T := (eval cbv [id
- List.fold_right List.map List.length List.app ListUtil.map2 List.rev
- Tuple.to_list Tuple.to_list' Tuple.from_list Tuple.from_list' Tuple.map2 Tuple.on_tuple2
- fe2519_32 bounds fe2519_32WToZ length_fe2519_32
- wire_digits wire_digit_bounds wire_digitsWToZ wire_widths] in T) in
- let H' := constr:(H' : T) in
- let v := (eval unfold x' in x') in
- do_refine v H'.
-Local Ltac make_exist'' x exist_W ZToW :=
- let H := fresh in
- intro H; apply (exist_W (ZToW x));
- abstract (
- hnf in x; destruct_head' prod;
- let H' := fresh in
- pose proof H as H';
- unfold_is_bounded_in H;
- destruct_head' and; simpl in *;
- Z.ltb_to_lt;
- rewrite ?word64ToZ_ZToWord64 by prove_lt_bit_width;
- assumption
- ).
-Local Ltac make_exist' x app_W_dep exist'' exist_W ZToW :=
- let H := fresh in
- revert x; refine (@app_W_dep _ _ _); intros x H;
- let x' := fresh in
- set (x' := x) in *;
- cbv [tuple tuple' length_fe2519_32 List.length wire_widths] in x;
- destruct_head' prod;
- let rec do_refine v :=
- first [ let v' := (eval cbv [exist_W ZToW exist'' proj_word Build_bounded_word Build_bounded_word' snd fst] in (proj_word v)) in
- refine (Build_bounded_word v' _); subst x'; abstract exact (word_bounded v)
- | let v' := (eval cbv [exist_W ZToW exist'' proj_word Build_bounded_word Build_bounded_word' snd fst] in (proj_word (snd v))) in
- refine (_, Build_bounded_word v' _);
- [ do_refine (fst v) | subst x'; abstract exact (word_bounded (snd v)) ] ] in
- let v := (eval unfold x' in (exist'' x' H)) in
- do_refine v.
-
-Definition exist_fe2519_32W' (x : fe2519_32W) : is_bounded (fe2519_32WToZ x) = true -> fe2519_32.
-Proof. make_exist_W' x (@app_fe2519_32W_dep). Defined.
-Definition exist_fe2519_32W (x : fe2519_32W) : is_bounded (fe2519_32WToZ x) = true -> fe2519_32
- := Eval cbv [app_fe2519_32W_dep exist_fe2519_32W' fe2519_32ZToW] in exist_fe2519_32W' x.
-Definition exist_fe2519_32'' (x : SpecificGen.GF2519_32.fe2519_32) : is_bounded x = true -> fe2519_32.
-Proof. make_exist'' x exist_fe2519_32W fe2519_32ZToW. Defined.
-Definition exist_fe2519_32' (x : SpecificGen.GF2519_32.fe2519_32) : is_bounded x = true -> fe2519_32.
-Proof. make_exist' x (@app_fe2519_32W_dep) exist_fe2519_32'' exist_fe2519_32W fe2519_32ZToW. Defined.
-Definition exist_fe2519_32 (x : SpecificGen.GF2519_32.fe2519_32) : is_bounded x = true -> fe2519_32
- := Eval cbv [exist_fe2519_32' exist_fe2519_32W exist_fe2519_32' app_fe2519_32 app_fe2519_32W_dep] in
- exist_fe2519_32' x.
-
-Lemma proj1_fe2519_32_exist_fe2519_32W x pf : proj1_fe2519_32 (exist_fe2519_32W x pf) = fe2519_32WToZ x.
-Proof. now hnf in x; destruct_head' prod. Qed.
-Lemma proj1_fe2519_32W_exist_fe2519_32 x pf : proj1_fe2519_32W (exist_fe2519_32 x pf) = fe2519_32ZToW x.
-Proof. now hnf in x; destruct_head' prod. Qed.
-Lemma proj1_fe2519_32_exist_fe2519_32 x pf : proj1_fe2519_32 (exist_fe2519_32 x pf) = x.
-Proof.
- hnf in x; destruct_head' prod.
- cbv [proj1_fe2519_32 exist_fe2519_32 proj1_fe2519_32W fe2519_32WToZ proj_word Build_bounded_word Build_bounded_word'].
- unfold_is_bounded_in pf.
- destruct_head' and.
- Z.ltb_to_lt.
- rewrite ?word64ToZ_ZToWord64 by prove_lt_bit_width.
- reflexivity.
-Qed.
-
-Definition exist_wire_digitsW' (x : wire_digitsW)
- : wire_digits_is_bounded (wire_digitsWToZ x) = true -> wire_digits.
-Proof. make_exist_W' x (@app_wire_digitsW_dep). Defined.
-Definition exist_wire_digitsW (x : wire_digitsW)
- : wire_digits_is_bounded (wire_digitsWToZ x) = true -> wire_digits
- := Eval cbv [app_wire_digitsW_dep exist_wire_digitsW' wire_digitsZToW] in exist_wire_digitsW' x.
-Definition exist_wire_digits'' (x : SpecificGen.GF2519_32.wire_digits)
- : wire_digits_is_bounded x = true -> wire_digits.
-Proof. make_exist'' x exist_wire_digitsW wire_digitsZToW. Defined.
-Definition exist_wire_digits' (x : SpecificGen.GF2519_32.wire_digits)
- : wire_digits_is_bounded x = true -> wire_digits.
-Proof. make_exist' x (@app_wire_digitsW_dep) exist_wire_digits'' exist_wire_digitsW wire_digitsZToW. Defined.
-Definition exist_wire_digits (x : SpecificGen.GF2519_32.wire_digits)
- : wire_digits_is_bounded x = true -> wire_digits
- := Eval cbv [exist_wire_digits' exist_wire_digitsW exist_wire_digits' app_wire_digits app_wire_digitsW_dep] in
- exist_wire_digits' x.
-
-Lemma proj1_wire_digits_exist_wire_digitsW x pf : proj1_wire_digits (exist_wire_digitsW x pf) = wire_digitsWToZ x.
-Proof. now hnf in x; destruct_head' prod. Qed.
-Lemma proj1_wire_digitsW_exist_wire_digits x pf : proj1_wire_digitsW (exist_wire_digits x pf) = wire_digitsZToW x.
-Proof. now hnf in x; destruct_head' prod. Qed.
-Lemma proj1_wire_digits_exist_wire_digits x pf : proj1_wire_digits (exist_wire_digits x pf) = x.
-Proof.
- hnf in x; destruct_head' prod.
- cbv [proj1_wire_digits exist_wire_digits proj1_wire_digitsW wire_digitsWToZ proj_word Build_bounded_word Build_bounded_word' app_wire_digits HList.mapt HList.mapt' length wire_widths fst snd].
- unfold_is_bounded_in pf.
- destruct_head' and.
- Z.ltb_to_lt.
- rewrite ?word64ToZ_ZToWord64 by prove_lt_bit_width.
- reflexivity.
-Qed.
-
-Module opt.
- Definition word64ToZ := Eval vm_compute in word64ToZ.
- Definition word64ToN := Eval vm_compute in @wordToN bit_width.
- Definition NToWord64 := Eval vm_compute in NToWord64.
- Definition bit_width := Eval vm_compute in bit_width.
- Definition Zleb := Eval cbv [Z.leb] in Z.leb.
- Definition andb := Eval vm_compute in andb.
- Definition word64ize := Eval vm_compute in word64ize.
-End opt.
-
-Local Transparent bit_width.
-Local Ltac do_change lem :=
- match lem with
- | context L[andb (?x <=? ?y)%Z (?y <=? ?z)]
- => let x' := (eval vm_compute in x) in
- let z' := (eval vm_compute in z) in
- lazymatch y with
- | word64ToZ (word64ize ?v)
- => let y' := constr:(opt.word64ToZ (opt.word64ize v)) in
- let L' := context L[andb (opt.Zleb x' y') (opt.Zleb y' z')] in
- do_change L'
- end
- | _ => lem
- end.
-Definition fe2519_32_word64ize (x : fe2519_32) : fe2519_32.
-Proof.
- set (x' := x).
- hnf in x; destruct_head' prod.
- let lem := constr:(exist_fe2519_32W (fe2519_32W_word64ize (proj1_fe2519_32W x'))) in
- let lem := (eval cbv [proj1_fe2519_32W x' fe2519_32W_word64ize proj_word exist_fe2519_32W Build_bounded_word' Build_bounded_word] in lem) in
- let lem := do_change lem in
- refine (lem _);
- change (is_bounded (fe2519_32WToZ (fe2519_32W_word64ize (proj1_fe2519_32W x'))) = true);
- abstract (rewrite fe2519_32W_word64ize_id; apply is_bounded_proj1_fe2519_32).
-Defined.
-Definition wire_digits_word64ize (x : wire_digits) : wire_digits.
-Proof.
- set (x' := x).
- hnf in x; destruct_head' prod.
- let lem := constr:(exist_wire_digitsW (wire_digitsW_word64ize (proj1_wire_digitsW x'))) in
- let lem := (eval cbv [proj1_wire_digitsW x' wire_digitsW_word64ize proj_word exist_wire_digitsW Build_bounded_word Build_bounded_word'] in lem) in
- let lem := do_change lem in
- let lem := (eval cbv [word64ize opt.word64ize andb Z.leb Z.compare CompOpp Pos.compare] in lem) in
- refine (lem _);
- change (wire_digits_is_bounded (wire_digitsWToZ (wire_digitsW_word64ize (proj1_wire_digitsW x'))) = true);
- abstract (rewrite wire_digitsW_word64ize_id; apply is_bounded_proj1_wire_digits).
-Defined.
-
-Lemma is_bounded_to_nth_default x (H : is_bounded x = true)
- : forall n : nat,
- (n < length limb_widths)%nat
- -> (0 <= nth_default 0 (Tuple.to_list length_fe2519_32 x) n <=
- snd (b_of (nth_default (-1) limb_widths n)))%Z.
-Proof.
- hnf in x; destruct_head' prod.
- unfold_is_bounded_in H; destruct_head' and.
- Z.ltb_to_lt.
- unfold nth_default; simpl.
- intros.
- repeat match goal with
- | [ |- context[nth_error _ ?x] ]
- => is_var x; destruct x; simpl
- end;
- omega.
-Qed.
-
-(* END precomputation *)
-
-(* Precompute constants *)
-
-Definition one' := Eval vm_compute in exist_fe2519_32 SpecificGen.GF2519_32.one_ eq_refl.
-Definition one := Eval cbv [one' fe2519_32_word64ize word64ize andb opt.word64ToZ opt.word64ize opt.Zleb Z.compare CompOpp Pos.compare Pos.compare_cont] in fe2519_32_word64ize one'.
-
-Definition zero' := Eval vm_compute in exist_fe2519_32 SpecificGen.GF2519_32.zero_ eq_refl.
-Definition zero := Eval cbv [zero' fe2519_32_word64ize word64ize andb opt.word64ToZ opt.word64ize opt.Zleb Z.compare CompOpp Pos.compare Pos.compare_cont] in fe2519_32_word64ize zero'.
-
-Lemma fold_chain_opt_gen {A B} (F : A -> B) is_bounded ls id' op' id op chain
- (Hid_bounded : is_bounded (F id') = true)
- (Hid : id = F id')
- (Hop_bounded : forall x y, is_bounded (F x) = true
- -> is_bounded (F y) = true
- -> is_bounded (op (F x) (F y)) = true)
- (Hop : forall x y, is_bounded (F x) = true
- -> is_bounded (F y) = true
- -> op (F x) (F y) = F (op' x y))
- (Hls_bounded : forall n, is_bounded (F (nth_default id' ls n)) = true)
- : F (fold_chain_opt id' op' chain ls)
- = fold_chain_opt id op chain (List.map F ls)
- /\ is_bounded (F (fold_chain_opt id' op' chain ls)) = true.
-Proof.
- rewrite !fold_chain_opt_correct.
- revert dependent ls; induction chain as [|x xs IHxs]; intros.
- { pose proof (Hls_bounded 0%nat).
- destruct ls; simpl; split; trivial; congruence. }
- { destruct x; simpl; unfold Let_In; simpl.
- rewrite (fun ls pf => proj1 (IHxs ls pf)) at 1; simpl.
- { do 2 f_equal.
- rewrite <- Hop, Hid by auto.
- rewrite !map_nth_default_always.
- split; try reflexivity.
- apply (IHxs (_::_)).
- intros [|?]; autorewrite with simpl_nth_default; auto.
- rewrite <- Hop; auto. }
- { intros [|?]; simpl;
- autorewrite with simpl_nth_default; auto.
- rewrite <- Hop; auto. } }
-Qed.
-
-Lemma encode_bounded x : is_bounded (encode x) = true.
-Proof.
- pose proof (bounded_encode x).
- generalize dependent (encode x).
- intro t; compute in t; intros.
- destruct_head' prod.
- unfold Pow2Base.bounded in H.
- cbv [nth_default Tuple.to_list Tuple.to_list' List.length limb_widths params2519_32] in H.
- repeat match type of H with
- | context[nth_error (cons _ _) _]
- => let H' := fresh in
- pose proof (H O) as H'; specialize (fun i => H (S i)); simpl @nth_error in H, H';
- cbv beta iota in H'
- end.
- clear H.
- simpl in *.
- cbv [Z.pow_pos Z.mul Pos.mul Pos.iter nth_default nth_error value] in *.
- unfold is_bounded.
- apply fold_right_andb_true_iff_fold_right_and_True.
- cbv [is_bounded proj1_fe2519_32 to_list length bounds from_list from_list' map2 on_tuple2 to_list' ListUtil.map2 List.map List.rev List.app proj_word fold_right length_fe2519_32].
- repeat split; rewrite !Bool.andb_true_iff, !Z.leb_le; omega.
-Qed.
-
-Definition encode (x : F modulus) : fe2519_32
- := exist_fe2519_32 (encode x) (encode_bounded x).
-
-Definition decode (x : fe2519_32) : F modulus
- := ModularBaseSystem.decode (proj1_fe2519_32 x).
-
-Lemma proj1_fe2519_32_encode x
- : proj1_fe2519_32 (encode x) = ModularBaseSystem.encode x.
-Proof.
- cbv [encode].
- generalize (encode_bounded x); generalize (ModularBaseSystem.encode x).
- intros y pf; intros; hnf in y; destruct_head_hnf' prod.
- cbv [proj1_fe2519_32 exist_fe2519_32 proj1_fe2519_32W Build_bounded_word Build_bounded_word' fe2519_32WToZ proj_word].
- unfold_is_bounded_in pf.
- destruct_head' and.
- Z.ltb_to_lt.
- rewrite ?word64ToZ_ZToWord64 by prove_lt_bit_width.
- reflexivity.
-Qed.
-
-Lemma decode_exist_fe2519_32 x pf
- : decode (exist_fe2519_32 x pf) = ModularBaseSystem.decode x.
-Proof.
- hnf in x; destruct_head' prod.
- cbv [decode proj1_fe2519_32 exist_fe2519_32 proj1_fe2519_32W Build_bounded_word Build_bounded_word' fe2519_32WToZ proj_word].
- unfold_is_bounded_in pf.
- destruct_head' and.
- Z.ltb_to_lt.
- rewrite ?word64ToZ_ZToWord64 by prove_lt_bit_width.
- reflexivity.
-Qed.
-
-Definition div (f g : fe2519_32) : fe2519_32
- := exist_fe2519_32 (div (proj1_fe2519_32 f) (proj1_fe2519_32 g)) (encode_bounded _).
-
-Definition eq (f g : fe2519_32) : Prop := eq (proj1_fe2519_32 f) (proj1_fe2519_32 g).
-
-
-Notation in_op_correct_and_bounded k irop op
- := (((Tuple.map (n:=k) fe2519_32WToZ irop = op)
- /\ HList.hlistP (fun v => is_bounded v = true) (Tuple.map (n:=k) fe2519_32WToZ irop))%type)
- (only parsing).
-
-(*Fixpoint inm_op_correct_and_bounded' (count_in count_out : nat)
- : forall (irop : Tower.tower_nd fe2519_32W (Tuple.tuple fe2519_32W count_out) count_in)
- (op : Tower.tower_nd GF2519_32.fe2519_32 (Tuple.tuple GF2519_32.fe2519_32 count_out) count_in)
- (cont : Prop -> Prop),
- Prop
- := match count_in return
- forall (irop : Tower.tower_nd fe2519_32W (Tuple.tuple fe2519_32W count_out) count_in)
- (op : Tower.tower_nd GF2519_32.fe2519_32 (Tuple.tuple GF2519_32.fe2519_32 count_out) count_in)
- (cont : Prop -> Prop),
- Prop
- with
- | O => fun irop op cont => cont (in_op_correct_and_bounded count_out irop op)
- | S n => fun irop op cont
- => forall x : fe2519_32W,
- @inm_op_correct_and_bounded'
- n count_out (irop x) (op (fe2519_32WToZ x))
- (fun P => cont (is_bounded (fe2519_32WToZ x) = true -> P))
- end.
-Definition inm_op_correct_and_bounded count_in count_out irop op
- := Eval cbv [inm_op_correct_and_bounded' Tower.tower_nd Tuple.tuple Tuple.tuple' HList.hlistP HList.hlistP'] in
- inm_op_correct_and_bounded' count_in count_out irop op (fun P => P).
-Fixpoint inm_op_correct_and_bounded_prefix' (count_in count_out : nat)
- : forall (irop : Tower.tower_nd fe2519_32W (Tuple.tuple fe2519_32W count_out) count_in)
- (op : Tower.tower_nd GF2519_32.fe2519_32 (Tuple.tuple GF2519_32.fe2519_32 count_out) count_in),
- Prop
- := match count_in return
- forall (irop : Tower.tower_nd fe2519_32W (Tuple.tuple fe2519_32W count_out) count_in)
- (op : Tower.tower_nd GF2519_32.fe2519_32 (Tuple.tuple GF2519_32.fe2519_32 count_out) count_in),
- Prop
- with
- | O => fun irop op => in_op_correct_and_bounded count_out irop op
- | S n => fun irop op
- => forall x : fe2519_32W,
- is_bounded (fe2519_32WToZ x) = true
- -> @inm_op_correct_and_bounded_prefix'
- n count_out (irop x) (op (fe2519_32WToZ x))
- end.
-Definition inm_op_correct_and_bounded_prefix count_in count_out irop op
- := inm_op_correct_and_bounded_prefix' count_in count_out irop op.
-
-Lemma inm_op_correct_and_bounded_iff_prefix' count_in count_out irop op
- (cont : Prop -> Prop)
- (cont_forall : forall T (P : T -> Prop), cont (forall x : T, P x) <-> forall x : T, cont (P x))
- : inm_op_correct_and_bounded' count_in count_out irop op cont <-> cont (inm_op_correct_and_bounded_prefix' count_in count_out irop op).
-Proof.
- revert dependent cont; induction count_in as [|count_in IHcount_in]; intros.
- { reflexivity. }
- { simpl.
- rewrite cont_forall.
- split; intros H' x; specialize (H' x);
- specialize (IHcount_in (irop x) (op (fe2519_32WToZ x)) (fun P => cont (is_bounded (fe2519_32WToZ x) = true -> P)));
- cbv beta in *;
- [ erewrite <- IHcount_in; [ assumption | .. ]
- | erewrite -> IHcount_in; [ assumption | .. ] ];
- clear IHcount_in.
- { intros; repeat setoid_rewrite cont_forall; split; eauto. }
- { intros; repeat setoid_rewrite cont_forall; split; eauto. } }
-Qed.
-
-Lemma inm_op_correct_and_bounded_iff_prefix count_in count_out irop op
- : inm_op_correct_and_bounded count_in count_out irop op <-> inm_op_correct_and_bounded_prefix count_in count_out irop op.
-Proof.
- apply (inm_op_correct_and_bounded_iff_prefix' count_in count_out irop op (fun P => P)).
- reflexivity.
-Qed.
-
-Definition inm_op_correct_and_bounded1 count_in irop op
- := Eval cbv [inm_op_correct_and_bounded Tuple.map Tuple.to_list Tuple.to_list' Tuple.from_list Tuple.from_list' Tuple.on_tuple List.map] in
- inm_op_correct_and_bounded count_in 1 irop op.*)
-Notation inm_op_correct_and_bounded n m irop op
- := ((forall x,
- HList.hlistP (fun v => is_bounded v = true) (Tuple.map (n:=n%nat%type) fe2519_32WToZ x)
- -> in_op_correct_and_bounded m (irop x) (op (Tuple.map (n:=n) fe2519_32WToZ x))))
- (only parsing).
-Notation ibinop_correct_and_bounded irop op := (inm_op_correct_and_bounded 2 1 irop op) (only parsing).
-Notation iunop_correct_and_bounded irop op := (inm_op_correct_and_bounded 1 1 irop op) (only parsing).
-Notation iunop_FEToZ_correct irop op
- := (forall x,
- is_bounded (fe2519_32WToZ x) = true
- -> word64ToZ (irop x) = op (fe2519_32WToZ x)) (only parsing).
-Notation iunop_FEToWire_correct_and_bounded irop op
- := (forall x,
- is_bounded (fe2519_32WToZ x) = true
- -> wire_digitsWToZ (irop x) = op (fe2519_32WToZ x)
- /\ wire_digits_is_bounded (wire_digitsWToZ (irop x)) = true) (only parsing).
-Notation iunop_WireToFE_correct_and_bounded irop op
- := (forall x,
- wire_digits_is_bounded (wire_digitsWToZ x) = true
- -> fe2519_32WToZ (irop x) = op (wire_digitsWToZ x)
- /\ is_bounded (fe2519_32WToZ (irop x)) = true) (only parsing).
-Notation i9top_correct_and_bounded k irop op := (inm_op_correct_and_bounded 9 k irop op) (only parsing).
-
-Notation prefreeze := GF2519_32.prefreeze.
diff --git a/src/SpecificGen/GF2519_32BoundedExtendedAddCoordinates.v b/src/SpecificGen/GF2519_32BoundedExtendedAddCoordinates.v
deleted file mode 100644
index eb6602760..000000000
--- a/src/SpecificGen/GF2519_32BoundedExtendedAddCoordinates.v
+++ /dev/null
@@ -1,68 +0,0 @@
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.SpecificGen.GF2519_32Bounded.
-Require Import Crypto.SpecificGen.GF2519_32ExtendedAddCoordinates.
-Require Import Crypto.SpecificGen.GF2519_32BoundedAddCoordinates.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-(*
-Lemma fieldwise_eq_extended_add_coordinates_full' twice_d P10 P11 P12 P13 P20 P21 P22 P23
- : Tuple.fieldwise
- (n:=4) GF2519_32BoundedCommon.eq
- (@GF2519_32BoundedAddCoordinates.add_coordinates
- twice_d P10 P11 P12 P13 P20 P21 P22 P23)
- (@ExtendedCoordinates.Extended.add_coordinates
- GF2519_32BoundedCommon.fe2519_32
- GF2519_32Bounded.add GF2519_32Bounded.sub GF2519_32Bounded.mul twice_d
- (P10, P11, P12, P13) (P20, P21, P22, P23)).
-Proof.
- unfold GF2519_32BoundedCommon.eq.
- apply -> (fieldwise_map_iff (n:=4) eq GF2519_32BoundedCommon.proj1_fe2519_32 GF2519_32BoundedCommon.proj1_fe2519_32).
- rewrite add_coordinates_correct.
- cbv [AddCoordinates.add_coordinates].
- setoid_rewrite <- fieldwise_eq_edwards_extended_add_coordinates_carry_nocarry.
- unfold edwards_extended_carry_add_coordinates.
- match goal with |- ?R ?x ?y => rewrite <- (Tuple.map_id (n:=4) x) end.
- apply <- (fieldwise_map_iff (n:=4) eq (fun x => x) GF2519_32BoundedCommon.proj1_fe2519_32).
- apply ExtendedCoordinates.Extended.add_coordinates_respectful_hetero;
- intros;
- repeat match goal with
- | [ |- context[add _ _] ]
- => rewrite add_correct
- | [ |- context[sub _ _] ]
- => rewrite sub_correct
- | [ |- context[mul _ _] ]
- => rewrite mul_correct
- | _ => progress unfold Tuple.fieldwise, Tuple.fieldwise', fst, snd, eq in *
- | [ |- and _ _ ] => split
- | [ |- ?x = ?x ] => reflexivity
- | _ => progress rewrite_strat topdown hints edwards_extended_add_coordinates_correct
- | _ => congruence
- end.
-Qed.
-
-Definition add_coordinates' twice_d P1 P2
- := let '(P10, P11, P12, P13) := P1 in
- let '(P20, P21, P22, P23) := P2 in
- @GF2519_32BoundedAddCoordinates.add_coordinates
- twice_d P10 P11 P12 P13 P20 P21 P22 P23.
-
-Definition add_coordinates twice_d P1 P2
- := Eval cbv beta iota delta [GF2519_32BoundedAddCoordinates.add_coordinates HList.mapt HList.mapt'] in
- let '(P10, P11, P12, P13) := P1 in
- let '(P20, P21, P22, P23) := P2 in
- @GF2519_32BoundedAddCoordinates.add_coordinates
- twice_d P10 P11 P12 P13 P20 P21 P22 P23.
-
-Lemma add_coordinates_correct_full twice_d P1 P2
- : Tuple.fieldwise
- GF2519_32BoundedCommon.eq
- (add_coordinates twice_d P1 P2)
- (@ExtendedCoordinates.Extended.add_coordinates
- GF2519_32BoundedCommon.fe2519_32
- GF2519_32Bounded.add GF2519_32Bounded.sub GF2519_32Bounded.mul twice_d P1 P2).
-Proof.
- destruct_head' prod.
- rewrite <- fieldwise_eq_extended_add_coordinates_full'; reflexivity.
-Qed.
-*)
diff --git a/src/SpecificGen/GF2519_32ExtendedAddCoordinates.v b/src/SpecificGen/GF2519_32ExtendedAddCoordinates.v
deleted file mode 100644
index 6e149fec8..000000000
--- a/src/SpecificGen/GF2519_32ExtendedAddCoordinates.v
+++ /dev/null
@@ -1,81 +0,0 @@
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.Algebra.
-Require Import Crypto.Util.Relations.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Tactics.
-
-Require Import Crypto.SpecificGen.GF2519_32.
-Require Import Crypto.CompleteEdwardsCurve.ExtendedCoordinates.
-
-Definition edwards_extended_add_coordinates td P Q :=
- (@ExtendedCoordinates.Extended.add_coordinates _ add sub mul td P Q).
-Definition edwards_extended_carry_add_coordinates td P Q :=
- (@ExtendedCoordinates.Extended.add_coordinates _ carry_add carry_sub mul td P Q).
-
-Create HintDb edwards_extended_add_coordinates_correct discriminated.
-Local Existing Instance field2519_32.
-Hint Rewrite
- (Ring.homomorphism_mul(is_homomorphism:=homomorphism_F2519_32_decode))
- (Ring.homomorphism_add(H1 :=homomorphism_F2519_32_decode))
- (Ring.homomorphism_sub(H1 :=homomorphism_F2519_32_decode))
- : edwards_extended_add_coordinates_correct.
-Lemma edwards_extended_add_coordinates_correct td P Q :
- Tuple.map (n:=4) decode (edwards_extended_add_coordinates td P Q)
- = (@ExtendedCoordinates.Extended.add_coordinates _ F.add F.sub F.mul (decode td) (Tuple.map (n:=4) decode P) (Tuple.map (n:=4) decode Q)).
-Proof.
- change (edwards_extended_add_coordinates td P Q)
- with (@ExtendedCoordinates.Extended.add_coordinates _ add sub mul td P Q).
- destruct_head' prod.
- simpl.
- (*rewrite_strat topdown hints edwards_extended_add_coordinates_correct.*) (* loops on Coq 8.4 *)
- repeat (rewrite ?(Ring.homomorphism_mul(is_homomorphism:=homomorphism_F2519_32_decode)),
- ?(Ring.homomorphism_add(H1 :=homomorphism_F2519_32_decode)),
- ?(Ring.homomorphism_sub(H1 :=homomorphism_F2519_32_decode))).
- reflexivity.
-Qed.
-Local Existing Instance carry_field2519_32.
-Hint Rewrite
- (Ring.homomorphism_mul(is_homomorphism:=homomorphism_carry_F2519_32_decode))
- (Ring.homomorphism_add(H1 :=homomorphism_carry_F2519_32_decode))
- (Ring.homomorphism_sub(H1 :=homomorphism_carry_F2519_32_decode))
- : edwards_extended_add_coordinates_correct.
-Lemma edwards_extended_carry_add_coordinates_correct td P Q :
- Tuple.map (n:=4) decode (edwards_extended_carry_add_coordinates td P Q)
- = (@ExtendedCoordinates.Extended.add_coordinates _ F.add F.sub F.mul (decode td) (Tuple.map (n:=4) decode P) (Tuple.map (n:=4) decode Q)).
-Proof.
- change (edwards_extended_carry_add_coordinates td P Q)
- with (@ExtendedCoordinates.Extended.add_coordinates _ carry_add carry_sub mul td P Q).
- destruct_head' prod.
- simpl.
- (*rewrite_strat topdown hints edwards_extended_add_coordinates_correct.*) (* loops on Coq 8.4 *)
- (* This is an annoying replacement for rewrite_strat loopiness *)
- generalize (Ring.homomorphism_mul(is_homomorphism:=homomorphism_carry_F2519_32_decode)).
- generalize (Ring.homomorphism_add(H1 :=homomorphism_carry_F2519_32_decode)).
- generalize (Ring.homomorphism_sub(H1 :=homomorphism_carry_F2519_32_decode)).
- generalize mul; generalize carry_sub; generalize carry_add.
- intros carry_add' carry_sub' mul'.
- intros H0 H1 H2.
- repeat rewrite ?H2, ?H1, ?H0.
- reflexivity.
-Qed.
-
-Lemma fieldwise_eq_edwards_extended_add_coordinates_carry_nocarry td P Q :
- Tuple.fieldwise
- (n:=4) eq
- (edwards_extended_carry_add_coordinates td P Q)
- (edwards_extended_add_coordinates td P Q).
-Proof.
- pose proof (edwards_extended_carry_add_coordinates_correct td P Q) as H0.
- pose proof (edwards_extended_add_coordinates_correct td P Q) as H1.
- rewrite <- H0 in H1; clear H0.
- assert (Tuple.fieldwise
- (fun x y => x = y)
- (Tuple.map (n:=4) decode (edwards_extended_carry_add_coordinates td P Q))
- (Tuple.map (n:=4) decode (edwards_extended_add_coordinates td P Q)))
- by (rewrite H1; reflexivity).
- clear H1.
- destruct (edwards_extended_carry_add_coordinates td P Q), (edwards_extended_add_coordinates td P Q).
- destruct_head' prod; simpl; unfold eq; trivial.
-Qed.
diff --git a/src/SpecificGen/GF2519_32Reflective.v b/src/SpecificGen/GF2519_32Reflective.v
deleted file mode 100644
index 6c5759e0d..000000000
--- a/src/SpecificGen/GF2519_32Reflective.v
+++ /dev/null
@@ -1,118 +0,0 @@
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParams.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParamProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemOpt.
-Require Export Crypto.SpecificGen.GF2519_32.
-Require Import Crypto.SpecificGen.GF2519_32BoundedCommon.
-Require Import Crypto.Reflection.Reify.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.Map.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Crypto.Reflection.Z.Interpretations64.Relations.
-Require Import Crypto.Reflection.Z.Interpretations64.RelationsCombinations.
-Require Import Crypto.Reflection.Z.Reify.
-Require Import Crypto.Reflection.Z.Syntax.
-Require Import Crypto.SpecificGen.GF2519_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF2519_32Reflective.Reified.
-Require Import Bedrock.Word Crypto.Util.WordUtil.
-Require Import Coq.Lists.List Crypto.Util.ListUtil.
-Require Import Crypto.Tactics.VerdiTactics.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Notations.
-Require Import Crypto.Util.Bool.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Algebra.
-Import ListNotations.
-Require Import Coq.ZArith.ZArith Coq.ZArith.Zpower Coq.ZArith.ZArith Coq.ZArith.Znumtheory.
-Local Open Scope Z.
-
-Definition radd : ExprBinOp := Eval vm_compute in rcarry_addW.
-Definition rsub : ExprBinOp := Eval vm_compute in rcarry_subW.
-Definition rmul : ExprBinOp := Eval vm_compute in rmulW.
-Definition ropp : ExprUnOp := Eval vm_compute in rcarry_oppW.
-Definition rprefreeze : ExprUnOp := Eval vm_compute in rprefreezeW.
-Definition rge_modulus : ExprUnOpFEToZ := Eval vm_compute in rge_modulusW.
-Definition rpack : ExprUnOpFEToWire := Eval vm_compute in rpackW.
-Definition runpack : ExprUnOpWireToFE := Eval vm_compute in runpackW.
-
-Declare Reduction asm_interp
- := cbv beta iota delta
- [id
- interp_bexpr interp_uexpr interp_uexpr_FEToWire interp_uexpr_FEToZ interp_uexpr_WireToFE interp_9_4expr
- Eta.interp_flat_type_eta Eta.interp_flat_type_eta_gen
- radd rsub rmul ropp rprefreeze rge_modulus rpack runpack
- curry_binop_fe2519_32W curry_unop_fe2519_32W curry_unop_wire_digitsW curry_9op_fe2519_32W
- WordW.interp_op WordW.interp_base_type
- Z.interp_op Z.interp_base_type
- Z.Syntax.interp_op Z.Syntax.interp_base_type
- mapf_interp_flat_type WordW.interp_base_type word64ize
- Interp interp interp_flat_type interpf interpf_step interp_flat_type fst snd].
-Ltac asm_interp
- := cbv beta iota delta
- [id
- interp_bexpr interp_uexpr interp_uexpr_FEToWire interp_uexpr_FEToZ interp_uexpr_WireToFE interp_9_4expr
- Eta.interp_flat_type_eta Eta.interp_flat_type_eta_gen
- radd rsub rmul ropp rprefreeze rge_modulus rpack runpack
- curry_binop_fe2519_32W curry_unop_fe2519_32W curry_unop_wire_digitsW curry_9op_fe2519_32W
- WordW.interp_op WordW.interp_base_type
- Z.interp_op Z.interp_base_type
- Z.Syntax.interp_op Z.Syntax.interp_base_type
- mapf_interp_flat_type WordW.interp_base_type word64ize
- Interp interp interp_flat_type interpf interp_flat_type fst snd].
-
-
-Definition interp_radd : SpecificGen.GF2519_32BoundedCommon.fe2519_32W * SpecificGen.GF2519_32BoundedCommon.fe2519_32W -> SpecificGen.GF2519_32BoundedCommon.fe2519_32W
- := Eval asm_interp in interp_bexpr radd.
-(*Print interp_radd.*)
-Definition interp_radd_correct : interp_radd = interp_bexpr radd := eq_refl.
-Definition interp_rsub : SpecificGen.GF2519_32BoundedCommon.fe2519_32W * SpecificGen.GF2519_32BoundedCommon.fe2519_32W -> SpecificGen.GF2519_32BoundedCommon.fe2519_32W
- := Eval asm_interp in interp_bexpr rsub.
-(*Print interp_rsub.*)
-Definition interp_rsub_correct : interp_rsub = interp_bexpr rsub := eq_refl.
-Definition interp_rmul : SpecificGen.GF2519_32BoundedCommon.fe2519_32W * SpecificGen.GF2519_32BoundedCommon.fe2519_32W -> SpecificGen.GF2519_32BoundedCommon.fe2519_32W
- := Eval asm_interp in interp_bexpr rmul.
-(*Print interp_rmul.*)
-Definition interp_rmul_correct : interp_rmul = interp_bexpr rmul := eq_refl.
-Definition interp_ropp : SpecificGen.GF2519_32BoundedCommon.fe2519_32W -> SpecificGen.GF2519_32BoundedCommon.fe2519_32W
- := Eval asm_interp in interp_uexpr ropp.
-(*Print interp_ropp.*)
-Definition interp_ropp_correct : interp_ropp = interp_uexpr ropp := eq_refl.
-Definition interp_rprefreeze : SpecificGen.GF2519_32BoundedCommon.fe2519_32W -> SpecificGen.GF2519_32BoundedCommon.fe2519_32W
- := Eval asm_interp in interp_uexpr rprefreeze.
-(*Print interp_rprefreeze.*)
-Definition interp_rprefreeze_correct : interp_rprefreeze = interp_uexpr rprefreeze := eq_refl.
-
-Definition interp_rge_modulus : SpecificGen.GF2519_32BoundedCommon.fe2519_32W -> SpecificGen.GF2519_32BoundedCommon.word64
- := Eval asm_interp in interp_uexpr_FEToZ rge_modulus.
-Definition interp_rge_modulus_correct : interp_rge_modulus = interp_uexpr_FEToZ rge_modulus := eq_refl.
-
-Definition interp_rpack : SpecificGen.GF2519_32BoundedCommon.fe2519_32W -> SpecificGen.GF2519_32BoundedCommon.wire_digitsW
- := Eval asm_interp in interp_uexpr_FEToWire rpack.
-Definition interp_rpack_correct : interp_rpack = interp_uexpr_FEToWire rpack := eq_refl.
-
-Definition interp_runpack : SpecificGen.GF2519_32BoundedCommon.wire_digitsW -> SpecificGen.GF2519_32BoundedCommon.fe2519_32W
- := Eval asm_interp in interp_uexpr_WireToFE runpack.
-Definition interp_runpack_correct : interp_runpack = interp_uexpr_WireToFE runpack := eq_refl.
-
-Lemma radd_correct_and_bounded : binop_correct_and_bounded radd carry_add.
-Proof. exact rcarry_addW_correct_and_bounded. Qed.
-Lemma rsub_correct_and_bounded : binop_correct_and_bounded rsub carry_sub.
-Proof. exact rcarry_subW_correct_and_bounded. Qed.
-Lemma rmul_correct_and_bounded : binop_correct_and_bounded rmul mul.
-Proof. exact rmulW_correct_and_bounded. Qed.
-Lemma ropp_correct_and_bounded : unop_correct_and_bounded ropp carry_opp.
-Proof. exact rcarry_oppW_correct_and_bounded. Qed.
-Lemma rprefreeze_correct_and_bounded : unop_correct_and_bounded rprefreeze prefreeze.
-Proof. exact rprefreezeW_correct_and_bounded. Qed.
-Lemma rge_modulus_correct_and_bounded : unop_FEToZ_correct rge_modulus ge_modulus.
-Proof. exact rge_modulusW_correct_and_bounded. Qed.
-Lemma rpack_correct_and_bounded : unop_FEToWire_correct_and_bounded rpack pack.
-Proof. exact rpackW_correct_and_bounded. Qed.
-Lemma runpack_correct_and_bounded : unop_WireToFE_correct_and_bounded runpack unpack.
-Proof. exact runpackW_correct_and_bounded. Qed.
diff --git a/src/SpecificGen/GF2519_32Reflective/Common.v b/src/SpecificGen/GF2519_32Reflective/Common.v
deleted file mode 100644
index ea27f9a6b..000000000
--- a/src/SpecificGen/GF2519_32Reflective/Common.v
+++ /dev/null
@@ -1,668 +0,0 @@
-Require Export Coq.ZArith.ZArith.
-Require Export Coq.Strings.String.
-Require Export Crypto.SpecificGen.GF2519_32.
-Require Export Crypto.SpecificGen.GF2519_32BoundedCommon.
-Require Import Crypto.Reflection.Reify.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Reflection.Wf.
-Require Import Crypto.Reflection.ExprInversion.
-Require Import Crypto.Reflection.Tuple.
-Require Import Crypto.Reflection.Relations.
-Require Import Crypto.Reflection.Eta.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Crypto.Reflection.Z.Interpretations64.Relations.
-Require Import Crypto.Reflection.Z.Interpretations64.RelationsCombinations.
-Require Import Crypto.Reflection.Z.Reify.
-Require Export Crypto.Reflection.Z.Syntax.
-Require Import Crypto.Reflection.Z.Syntax.Equality.
-Require Import Crypto.Reflection.InterpWfRel.
-Require Import Crypto.Reflection.WfReflective.
-Require Import Crypto.Util.Curry.
-Require Import Crypto.Util.Tower.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.ListUtil.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.Prod.
-Require Import Crypto.Util.Notations.
-
-Notation Expr := (Expr base_type op).
-
-Local Ltac make_type_from' T :=
- let T := (eval compute in T) in
- let rT := reify_type T in
- exact rT.
-Local Ltac make_type_from uncurried_op :=
- let T := (type of uncurried_op) in
- make_type_from' T.
-
-Definition fe2519_32T : flat_type base_type.
-Proof.
- let T := (eval compute in GF2519_32.fe2519_32) in
- let T := reify_flat_type T in
- exact T.
-Defined.
-Definition Expr_n_OpT (count_out : nat) : flat_type base_type
- := Eval cbv [Syntax.tuple Syntax.tuple' fe2519_32T] in
- Syntax.tuple fe2519_32T count_out.
-Definition Expr_nm_OpT (count_in count_out : nat) : type base_type
- := Eval cbv [Syntax.tuple Syntax.tuple' fe2519_32T Expr_n_OpT] in
- Arrow (Syntax.tuple fe2519_32T count_in) (Expr_n_OpT count_out).
-Definition ExprBinOpT : type base_type := Eval compute in Expr_nm_OpT 2 1.
-Definition ExprUnOpT : type base_type := Eval compute in Expr_nm_OpT 1 1.
-Definition ExprUnOpFEToZT : type base_type.
-Proof. make_type_from ge_modulus. Defined.
-Definition ExprUnOpWireToFET : type base_type.
-Proof. make_type_from unpack. Defined.
-Definition ExprUnOpFEToWireT : type base_type.
-Proof. make_type_from pack. Defined.
-Definition Expr4OpT : type base_type := Eval compute in Expr_nm_OpT 4 1.
-Definition Expr9_4OpT : type base_type := Eval compute in Expr_nm_OpT 9 4.
-Definition ExprArgT : flat_type base_type
- := Eval compute in domain ExprUnOpT.
-Definition ExprArgWireT : flat_type base_type
- := Eval compute in domain ExprUnOpWireToFET.
-Definition ExprZ : Type := Expr (Arrow Unit (Tbase TZ)).
-Definition ExprUnOpFEToZ : Type := Expr ExprUnOpFEToZT.
-Definition ExprUnOpWireToFE : Type := Expr ExprUnOpWireToFET.
-Definition ExprUnOpFEToWire : Type := Expr ExprUnOpFEToWireT.
-Definition Expr_nm_Op count_in count_out : Type := Expr (Expr_nm_OpT count_in count_out).
-Definition ExprBinOp : Type := Expr ExprBinOpT.
-Definition ExprUnOp : Type := Expr ExprUnOpT.
-Definition Expr4Op : Type := Expr Expr4OpT.
-Definition Expr9_4Op : Type := Expr Expr9_4OpT.
-Definition ExprArg : Type := Expr (Arrow Unit ExprArgT).
-Definition ExprArgWire : Type := Expr (Arrow Unit ExprArgWireT).
-Definition expr_nm_Op count_in count_out var : Type
- := expr base_type op (var:=var) (Expr_nm_OpT count_in count_out).
-Definition exprBinOp var : Type := expr base_type op (var:=var) ExprBinOpT.
-Definition exprUnOp var : Type := expr base_type op (var:=var) ExprUnOpT.
-Definition expr4Op var : Type := expr base_type op (var:=var) Expr4OpT.
-Definition expr9_4Op var : Type := expr base_type op (var:=var) Expr9_4OpT.
-Definition exprZ var : Type := expr base_type op (var:=var) (Arrow Unit (Tbase TZ)).
-Definition exprUnOpFEToZ var : Type := expr base_type op (var:=var) ExprUnOpFEToZT.
-Definition exprUnOpWireToFE var : Type := expr base_type op (var:=var) ExprUnOpWireToFET.
-Definition exprUnOpFEToWire var : Type := expr base_type op (var:=var) ExprUnOpFEToWireT.
-Definition exprArg var : Type := expr base_type op (var:=var) (Arrow Unit ExprArgT).
-Definition exprArgWire var : Type := expr base_type op (var:=var) (Arrow Unit ExprArgWireT).
-
-Definition make_bound (x : Z * Z) : ZBounds.t
- := Some {| Bounds.lower := fst x ; Bounds.upper := snd x |}.
-
-Fixpoint Expr_nm_Op_bounds count_in count_out {struct count_in} : interp_flat_type ZBounds.interp_base_type (domain (Expr_nm_OpT count_in count_out))
- := match count_in return interp_flat_type _ (domain (Expr_nm_OpT count_in count_out)) with
- | 0 => tt
- | S n
- => let b := (Tuple.map make_bound bounds) in
- let bs := Expr_nm_Op_bounds n count_out in
- match n return interp_flat_type _ (domain (Expr_nm_OpT n _)) -> interp_flat_type _ (domain (Expr_nm_OpT (S n) _)) with
- | 0 => fun _ => b
- | S n' => fun bs => (bs, b)
- end bs
- end.
-Definition ExprBinOp_bounds : interp_flat_type ZBounds.interp_base_type (domain ExprBinOpT)
- := Eval compute in Expr_nm_Op_bounds 2 1.
-Definition ExprUnOp_bounds : interp_flat_type ZBounds.interp_base_type (domain ExprUnOpT)
- := Eval compute in Expr_nm_Op_bounds 1 1.
-Definition ExprUnOpFEToZ_bounds : interp_flat_type ZBounds.interp_base_type (domain ExprUnOpFEToZT)
- := Eval compute in Expr_nm_Op_bounds 1 1.
-Definition ExprUnOpFEToWire_bounds : interp_flat_type ZBounds.interp_base_type (domain ExprUnOpFEToWireT)
- := Eval compute in Expr_nm_Op_bounds 1 1.
-Definition Expr4Op_bounds : interp_flat_type ZBounds.interp_base_type (domain Expr4OpT)
- := Eval compute in Expr_nm_Op_bounds 4 1.
-Definition Expr9Op_bounds : interp_flat_type ZBounds.interp_base_type (domain Expr9_4OpT)
- := Eval compute in Expr_nm_Op_bounds 9 4.
-Definition ExprUnOpWireToFE_bounds : interp_flat_type ZBounds.interp_base_type (domain ExprUnOpWireToFET)
- := Tuple.map make_bound wire_digit_bounds.
-
-Definition interp_bexpr : ExprBinOp -> SpecificGen.GF2519_32BoundedCommon.fe2519_32W * SpecificGen.GF2519_32BoundedCommon.fe2519_32W -> SpecificGen.GF2519_32BoundedCommon.fe2519_32W
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-Definition interp_uexpr : ExprUnOp -> SpecificGen.GF2519_32BoundedCommon.fe2519_32W -> SpecificGen.GF2519_32BoundedCommon.fe2519_32W
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-Definition interp_uexpr_FEToZ : ExprUnOpFEToZ -> SpecificGen.GF2519_32BoundedCommon.fe2519_32W -> SpecificGen.GF2519_32BoundedCommon.word64
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-Definition interp_uexpr_FEToWire : ExprUnOpFEToWire -> SpecificGen.GF2519_32BoundedCommon.fe2519_32W -> SpecificGen.GF2519_32BoundedCommon.wire_digitsW
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-Definition interp_uexpr_WireToFE : ExprUnOpWireToFE -> SpecificGen.GF2519_32BoundedCommon.wire_digitsW -> SpecificGen.GF2519_32BoundedCommon.fe2519_32W
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-Definition interp_9_4expr : Expr9_4Op
- -> Tuple.tuple SpecificGen.GF2519_32BoundedCommon.fe2519_32W 9
- -> Tuple.tuple SpecificGen.GF2519_32BoundedCommon.fe2519_32W 4
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-
-Notation binop_correct_and_bounded rop op
- := (ibinop_correct_and_bounded (interp_bexpr rop) (curry2 op)) (only parsing).
-Notation unop_correct_and_bounded rop op
- := (iunop_correct_and_bounded (interp_uexpr rop) op) (only parsing).
-Notation unop_FEToZ_correct rop op
- := (iunop_FEToZ_correct (interp_uexpr_FEToZ rop) op) (only parsing).
-Notation unop_FEToWire_correct_and_bounded rop op
- := (iunop_FEToWire_correct_and_bounded (interp_uexpr_FEToWire rop) op) (only parsing).
-Notation unop_WireToFE_correct_and_bounded rop op
- := (iunop_WireToFE_correct_and_bounded (interp_uexpr_WireToFE rop) op) (only parsing).
-Notation op9_4_correct_and_bounded rop op
- := (i9top_correct_and_bounded 4 (interp_9_4expr rop) op) (only parsing).
-
-Ltac rexpr_cbv :=
- lazymatch goal with
- | [ |- { rexpr | forall x, Interp _ (t:=?T) rexpr x = ?uncurry ?oper x } ]
- => let operf := head oper in
- let uncurryf := head uncurry in
- try cbv delta [T]; try cbv delta [oper];
- try cbv beta iota delta [uncurryf]
- | [ |- { rexpr | forall x, Interp _ (t:=?T) rexpr x = ?oper x } ]
- => let operf := head oper in
- try cbv delta [T]; try cbv delta [oper]
- end;
- cbv beta iota delta [interp_flat_type interp_base_type zero_ GF2519_32.fe2519_32 GF2519_32.wire_digits].
-
-Ltac reify_sig :=
- rexpr_cbv; eexists; Reify_rhs; reflexivity.
-
-Local Notation rexpr_sig T uncurried_op :=
- { rexprZ
- | forall x, Interp interp_op (t:=T) rexprZ x = uncurried_op x }
- (only parsing).
-
-Notation rexpr_binop_sig op := (rexpr_sig ExprBinOpT (curry2 op)) (only parsing).
-Notation rexpr_unop_sig op := (rexpr_sig ExprUnOpT op) (only parsing).
-Notation rexpr_unop_FEToZ_sig op := (rexpr_sig ExprUnOpFEToZT op) (only parsing).
-Notation rexpr_unop_FEToWire_sig op := (rexpr_sig ExprUnOpFEToWireT op) (only parsing).
-Notation rexpr_unop_WireToFE_sig op := (rexpr_sig ExprUnOpWireToFET op) (only parsing).
-Notation rexpr_9_4op_sig op := (rexpr_sig Expr9_4OpT op) (only parsing).
-
-Notation correct_and_bounded_genT ropW'v ropZ_sigv
- := (let ropW' := ropW'v in
- let ropZ_sig := ropZ_sigv in
- ropW' = proj1_sig ropZ_sig
- /\ interp_type_rel_pointwise Relations.related_Z (Interp (@BoundedWordW.interp_op) ropW') (Interp (@Z.interp_op) ropW')
- /\ interp_type_rel_pointwise Relations.related_bounds (Interp (@BoundedWordW.interp_op) ropW') (Interp (@ZBounds.interp_op) ropW')
- /\ interp_type_rel_pointwise Relations.related_wordW (Interp (@BoundedWordW.interp_op) ropW') (Interp (@WordW.interp_op) ropW'))
- (only parsing).
-
-Ltac app_tuples x y :=
- let tx := type of x in
- lazymatch (eval hnf in tx) with
- | prod _ _ => let xs := app_tuples (snd x) y in
- constr:((fst x, xs))
- | _ => constr:((x, y))
- end.
-
-Local Arguments Tuple.map2 : simpl never.
-Local Arguments Tuple.map : simpl never.
-(*
-Fixpoint args_to_bounded_helperT {n}
- (v : Tuple.tuple' WordW.wordW n)
- (bounds : Tuple.tuple' (Z * Z) n)
- (pf : List.fold_right
- andb true
- (Tuple.to_list
- _
- (Tuple.map2
- (n:=S n)
- (fun bounds v =>
- let '(lower, upper) := bounds in ((lower <=? v)%Z && (v <=? upper)%Z)%bool)
- bounds
- (Tuple.map (n:=S n) WordW.wordWToZ v))) = true)
- (res : Type)
- {struct n}
- : Type.
-Proof.
- refine (match n return (forall (v : Tuple.tuple' _ n) (bounds : Tuple.tuple' _ n),
- List.fold_right
- _ _ (Tuple.to_list
- _
- (Tuple.map2 (n:=S n) _ bounds (Tuple.map (n:=S n) _ v))) = true
- -> Type)
- with
- | 0 => fun v' bounds' pf0 => forall pf1 : (0 <= fst bounds' /\ Z.log2 (snd bounds') < Z.of_nat WordW.bit_width)%Z, res
- | S n' => fun v' bounds' pf0 => let t := _ in
- forall pf1 : (0 <= fst (snd bounds') /\ Z.log2 (snd (snd bounds')) < Z.of_nat WordW.bit_width)%Z, @args_to_bounded_helperT n' (fst v') (fst bounds') t res
- end v bounds pf).
- { clear -pf0.
- abstract (
- destruct v', bounds'; simpl @fst;
- rewrite Tuple.map_S in pf0;
- simpl in pf0;
- rewrite Tuple.map2_S in pf0;
- simpl @List.fold_right in *;
- rewrite Bool.andb_true_iff in pf0; tauto
- ). }
-Defined.
-
-Fixpoint args_to_bounded_helper {n} res
- {struct n}
- : forall v bounds pf, (Tuple.tuple' BoundedWordW.BoundedWord n -> res) -> @args_to_bounded_helperT n v bounds pf res.
-Proof.
- refine match n return (forall v bounds pf, (Tuple.tuple' BoundedWordW.BoundedWord n -> res) -> @args_to_bounded_helperT n v bounds pf res) with
- | 0 => fun v bounds pf f pf' => f {| BoundedWord.lower := fst bounds ; BoundedWord.value := v ; BoundedWord.upper := snd bounds |}
- | S n'
- => fun v bounds pf f pf'
- => @args_to_bounded_helper
- n' res (fst v) (fst bounds) _
- (fun ts => f (ts, {| BoundedWord.lower := fst (snd bounds) ; BoundedWord.value := snd v ; BoundedWord.upper := snd (snd bounds) |}))
- end.
- { clear -pf pf'.
- unfold Tuple.map2, Tuple.map in pf; simpl in *.
- abstract (
- destruct bounds;
- simpl in *;
- rewrite !Bool.andb_true_iff in pf;
- destruct_head' and;
- Z.ltb_to_lt; auto
- ). }
- { simpl in *.
- clear -pf pf'.
- abstract (
- destruct bounds as [? [? ?] ], v; simpl in *;
- rewrite Tuple.map_S in pf; simpl in pf; rewrite Tuple.map2_S in pf;
- simpl in pf;
- rewrite !Bool.andb_true_iff in pf;
- destruct_head' and;
- Z.ltb_to_lt; auto
- ). }
-Defined.
-*)
-
-Definition assoc_right''
- := Eval cbv [Tuple.assoc_right' Tuple.rsnoc' fst snd] in @Tuple.assoc_right'.
-(*
-Definition args_to_bounded {n} v bounds pf
- := Eval cbv [args_to_bounded_helper assoc_right''] in
- @args_to_bounded_helper n _ v bounds pf (@assoc_right'' _ _).
-*)
-Local Ltac get_len T :=
- match (eval hnf in T) with
- | prod ?A ?B
- => let a := get_len A in
- let b := get_len B in
- (eval compute in (a + b)%nat)
- | _ => constr:(1%nat)
- end.
-
-Ltac assoc_right_tuple x so_far :=
- let t := type of x in
- lazymatch (eval hnf in t) with
- | prod _ _ => let so_far := assoc_right_tuple (snd x) so_far in
- assoc_right_tuple (fst x) so_far
- | _ => lazymatch so_far with
- | @None => x
- | _ => constr:((x, so_far))
- end
- end.
-
-(*
-Local Ltac make_args x :=
- let x' := fresh "x'" in
- compute in x |- *;
- let t := match type of x with @expr _ _ _ (Tflat ?t) => t end in
- let t' := match goal with |- @expr _ _ _ (Tflat ?t) => t end in
- refine (LetIn (invert_Return x) _);
- let x'' := fresh "x''" in
- intro x'';
- let xv := assoc_right_tuple x'' (@None) in
- refine (SmartVarf (xv : interp_flat_type _ t')).
-
-Local Ltac args_to_bounded x H :=
- let x' := fresh in
- set (x' := x);
- compute in x;
- let len := (let T := type of x in get_len T) in
- destruct_head' prod;
- let c := constr:(args_to_bounded (n:=pred len) x' _ H) in
- let bounds := lazymatch c with args_to_bounded _ ?bounds _ => bounds end in
- let c := (eval cbv [domain ExprUnOpT interp_flat_type args_to_bounded bounds pred fst snd] in c) in
- apply c; compute; clear;
- try abstract (
- repeat split;
- solve [ reflexivity
- | refine (fun v => match v with eq_refl => I end) ]
- ).
- *)
-
-Section gen.
- Definition bounds_are_good_gen
- {n : nat} (bounds : Tuple.tuple (Z * Z) n)
- := let res :=
- Tuple.map (fun bs => let '(lower, upper) := bs in ((0 <=? lower)%Z && (Z.log2 upper <? Z.of_nat WordW.bit_width)%Z)%bool) bounds
- in
- List.fold_right andb true (Tuple.to_list n res).
- Definition unop_args_to_bounded'
- (bs : Z * Z)
- (Hbs : bounds_are_good_gen (n:=1) bs = true)
- (x : word64)
- (H : is_bounded_gen (Tuple.map (fun v : word64 => (v : Z)) (n:=1) x) bs = true)
- : BoundedWordW.BoundedWord.
- Proof.
- refine {| BoundedWord.lower := fst bs ; BoundedWord.value := x ; BoundedWord.upper := snd bs |}.
- unfold bounds_are_good_gen, is_bounded_gen, Tuple.map, Tuple.map2 in *; simpl in *.
- abstract (
- destruct bs; Bool.split_andb; Z.ltb_to_lt; simpl;
- repeat apply conj; assumption
- ).
- Defined.
- Fixpoint n_op_args_to_bounded'
- n
- : forall (bs : Tuple.tuple' (Z * Z) n)
- (Hbs : bounds_are_good_gen (n:=S n) bs = true)
- (x : Tuple.tuple' word64 n)
- (H : is_bounded_gen (Tuple.eta_tuple (Tuple.map (n:=S n) (fun v : word64 => v : Z)) x) bs = true),
- interp_flat_type (fun _ => BoundedWordW.BoundedWord) (Syntax.tuple' (Tbase TZ) n).
- Proof.
- destruct n as [|n']; simpl in *.
- { exact unop_args_to_bounded'. }
- { refine (fun bs Hbs x H
- => (@n_op_args_to_bounded' n' (fst bs) _ (fst x) _,
- @unop_args_to_bounded' (snd bs) _ (snd x) _));
- clear n_op_args_to_bounded';
- simpl in *;
- [ clear x H | clear Hbs | clear x H | clear Hbs ];
- unfold bounds_are_good_gen, is_bounded_gen in *;
- abstract (
- repeat first [ progress simpl in *
- | assumption
- | reflexivity
- | progress Bool.split_andb
- | progress destruct_head prod
- | match goal with
- | [ H : _ |- _ ] => progress rewrite ?Tuple.map_S, ?Tuple.map2_S, ?Tuple.strip_eta_tuple'_dep in H
- end
- | progress rewrite ?Tuple.map_S, ?Tuple.map2_S, ?Tuple.strip_eta_tuple'_dep
- | progress break_match_hyps
- | rewrite Bool.andb_true_iff; apply conj
- | unfold Tuple.map, Tuple.map2; simpl; rewrite Bool.andb_true_iff; apply conj ]
- ). }
- Defined.
-
- Definition n_op_args_to_bounded
- n
- : forall (bs : Tuple.tuple (Z * Z) n)
- (Hbs : bounds_are_good_gen bs = true)
- (x : Tuple.tuple word64 n)
- (H : is_bounded_gen (Tuple.eta_tuple (Tuple.map (fun v : word64 => v : Z)) x) bs = true),
- interp_flat_type (fun _ => BoundedWordW.BoundedWord) (Syntax.tuple (Tbase TZ) n)
- := match n with
- | 0 => fun _ _ _ _ => tt
- | S n' => @n_op_args_to_bounded' n'
- end.
-
- Fixpoint nm_op_args_to_bounded' n m
- (bs : Tuple.tuple (Z * Z) m)
- (Hbs : bounds_are_good_gen bs = true)
- : forall (x : interp_flat_type (fun _ => Tuple.tuple word64 m) (Syntax.tuple' (Tbase TZ) n))
- (H : SmartVarfPropMap (fun _ x => is_bounded_gen (Tuple.eta_tuple (Tuple.map (fun v : word64 => v : Z)) x) bs = true)
- x),
- interp_flat_type (fun _ => BoundedWordW.BoundedWord) (Syntax.tuple' (Syntax.tuple (Tbase TZ) m) n)
- := match n with
- | 0 => @n_op_args_to_bounded m bs Hbs
- | S n' => fun x H
- => (@nm_op_args_to_bounded' n' m bs Hbs (fst x) (proj1 H),
- @n_op_args_to_bounded m bs Hbs (snd x) (proj2 H))
- end.
- Definition nm_op_args_to_bounded n m
- (bs : Tuple.tuple (Z * Z) m)
- (Hbs : bounds_are_good_gen bs = true)
- : forall (x : interp_flat_type (fun _ => Tuple.tuple word64 m) (Syntax.tuple (Tbase TZ) n))
- (H : SmartVarfPropMap (fun _ x => is_bounded_gen (Tuple.eta_tuple (Tuple.map (fun v : word64 => v : Z)) x) bs = true)
- x),
- interp_flat_type (fun _ => BoundedWordW.BoundedWord) (Syntax.tuple (Syntax.tuple (Tbase TZ) m) n)
- := match n with
- | 0 => fun _ _ => tt
- | S n' => @nm_op_args_to_bounded' n' m bs Hbs
- end.
-End gen.
-
-Local Ltac get_inner_len T :=
- lazymatch T with
- | (?T * _)%type => get_inner_len T
- | ?T => get_len T
- end.
-Local Ltac get_outer_len T :=
- lazymatch T with
- | (?A * ?B)%type => let a := get_outer_len A in
- let b := get_outer_len B in
- (eval compute in (a + b)%nat)
- | ?T => constr:(1%nat)
- end.
-Local Ltac args_to_bounded x H :=
- let t := type of x in
- let m := get_inner_len t in
- let n := get_outer_len t in
- let H := constr:(fun Hbs => @nm_op_args_to_bounded n m _ Hbs x H) in
- let H := (eval cbv beta in (H eq_refl)) in
- exact H.
-
-Definition binop_args_to_bounded (x : fe2519_32W * fe2519_32W)
- (H : is_bounded (fe2519_32WToZ (fst x)) = true)
- (H' : is_bounded (fe2519_32WToZ (snd x)) = true)
- : interp_flat_type (fun _ => BoundedWordW.BoundedWord) (domain ExprBinOpT).
-Proof. args_to_bounded x (conj H H'). Defined.
-Definition unop_args_to_bounded (x : fe2519_32W) (H : is_bounded (fe2519_32WToZ x) = true)
- : interp_flat_type (fun _ => BoundedWordW.BoundedWord) (domain ExprUnOpT).
-Proof. args_to_bounded x H. Defined.
-Definition unopWireToFE_args_to_bounded (x : wire_digitsW) (H : wire_digits_is_bounded (wire_digitsWToZ x) = true)
- : interp_flat_type (fun _ => BoundedWordW.BoundedWord) (domain ExprUnOpWireToFET).
-Proof. args_to_bounded x H. Defined.
-Definition op9_args_to_bounded (x : fe2519_32W * fe2519_32W * fe2519_32W * fe2519_32W * fe2519_32W * fe2519_32W * fe2519_32W * fe2519_32W * fe2519_32W)
- (H0 : is_bounded (fe2519_32WToZ (fst (fst (fst (fst (fst (fst (fst (fst x))))))))) = true)
- (H1 : is_bounded (fe2519_32WToZ (snd (fst (fst (fst (fst (fst (fst (fst x))))))))) = true)
- (H2 : is_bounded (fe2519_32WToZ (snd (fst (fst (fst (fst (fst (fst x)))))))) = true)
- (H3 : is_bounded (fe2519_32WToZ (snd (fst (fst (fst (fst (fst x))))))) = true)
- (H4 : is_bounded (fe2519_32WToZ (snd (fst (fst (fst (fst x)))))) = true)
- (H5 : is_bounded (fe2519_32WToZ (snd (fst (fst (fst x))))) = true)
- (H6 : is_bounded (fe2519_32WToZ (snd (fst (fst x)))) = true)
- (H7 : is_bounded (fe2519_32WToZ (snd (fst x))) = true)
- (H8 : is_bounded (fe2519_32WToZ (snd x)) = true)
- : interp_flat_type (fun _ => BoundedWordW.BoundedWord) (domain Expr9_4OpT).
-Proof. args_to_bounded x (conj (conj (conj (conj (conj (conj (conj (conj H0 H1) H2) H3) H4) H5) H6) H7) H8). Defined.
-Local Ltac make_bounds_prop' bounds bounds' :=
- first [ refine (andb _ _);
- [ destruct bounds' as [bounds' _], bounds as [bounds _]
- | destruct bounds' as [_ bounds'], bounds as [_ bounds] ];
- try make_bounds_prop' bounds bounds'
- | exact (match bounds' with
- | Some bounds' => let (l, u) := bounds in
- let (l', u') := bounds' in
- ((l' <=? l) && (u <=? u'))%Z%bool
- | None => false
- end) ].
-Local Ltac make_bounds_prop bounds orig_bounds :=
- let bounds' := fresh "bounds'" in
- pose orig_bounds as bounds';
- make_bounds_prop' bounds bounds'.
-Definition unop_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain ExprUnOpT)) : bool.
-Proof. make_bounds_prop bounds ExprUnOp_bounds. Defined.
-Definition binop_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain ExprBinOpT)) : bool.
-Proof. make_bounds_prop bounds ExprUnOp_bounds. Defined.
-Definition unopFEToWire_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain ExprUnOpFEToWireT)) : bool.
-Proof. make_bounds_prop bounds ExprUnOpWireToFE_bounds. Defined.
-Definition unopWireToFE_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain ExprUnOpWireToFET)) : bool.
-Proof. make_bounds_prop bounds ExprUnOp_bounds. Defined.
-(* TODO FIXME(jgross?, andreser?): Is every function returning a single Z a boolean function? *)
-Definition unopFEToZ_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain ExprUnOpFEToZT)) : bool.
-Proof.
- refine (let (l, u) := bounds in ((0 <=? l) && (u <=? 1))%Z%bool).
-Defined.
-Definition op9_4_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain Expr9_4OpT)) : bool.
-Proof. make_bounds_prop bounds Expr4Op_bounds. Defined.
-(*Definition ApplyUnOp {var} (f : exprUnOp var) : exprArg var -> exprArg var
- := fun x
- => LetIn (invert_Return (unop_make_args x))
- (fun k => invert_Return (Apply length_fe2519_32 f k)).
-Definition ApplyBinOp {var} (f : exprBinOp var) : exprArg var -> exprArg var -> exprArg var
- := fun x y
- => LetIn (invert_Return (unop_make_args x))
- (fun x'
- => LetIn (invert_Return (unop_make_args y))
- (fun y'
- => invert_Return (Apply length_fe2519_32
- (Apply length_fe2519_32
- f x') y'))).
-Definition ApplyUnOpFEToWire {var} (f : exprUnOpFEToWire var) : exprArg var -> exprArgWire var
- := fun x
- => LetIn (invert_Return (unop_make_args x))
- (fun k => invert_Return (Apply length_fe2519_32 f k)).
-Definition ApplyUnOpWireToFE {var} (f : exprUnOpWireToFE var) : exprArgWire var -> exprArg var
- := fun x
- => LetIn (invert_Return (unop_wire_make_args x))
- (fun k => invert_Return (Apply (List.length wire_widths) f k)).
-Definition ApplyUnOpFEToZ {var} (f : exprUnOpFEToZ var) : exprArg var -> exprZ var
- := fun x
- => LetIn (invert_Return (unop_make_args x))
- (fun k => invert_Return (Apply length_fe2519_32 f k)).
-*)
-
-(* FIXME TODO(jgross): This is a horrible tactic. We should unify the
- various kinds of correct and boundedness, and abstract in Gallina
- rather than Ltac *)
-Ltac t_correct_and_bounded ropZ_sig Hbounds H0 H1 args :=
- let Heq := fresh "Heq" in
- let Hbounds0 := fresh "Hbounds0" in
- let Hbounds1 := fresh "Hbounds1" in
- let Hbounds2 := fresh "Hbounds2" in
- pose proof (proj2_sig ropZ_sig) as Heq;
- cbv [interp_bexpr interp_uexpr interp_uexpr_FEToWire interp_uexpr_FEToZ interp_uexpr_WireToFE interp_9_4expr
- interp_flat_type_eta interp_flat_type_eta_gen
- curry_binop_fe2519_32W curry_unop_fe2519_32W curry_unop_wire_digitsW curry_9op_fe2519_32W
- curry_binop_fe2519_32 curry_unop_fe2519_32 curry_unop_wire_digits curry_9op_fe2519_32
- uncurry_binop_fe2519_32W uncurry_unop_fe2519_32W uncurry_unop_wire_digitsW uncurry_9op_fe2519_32W
- uncurry_binop_fe2519_32 uncurry_unop_fe2519_32 uncurry_unop_wire_digits uncurry_9op_fe2519_32
- ExprBinOpT ExprUnOpFEToWireT ExprUnOpT ExprUnOpFEToZT ExprUnOpWireToFET Expr9_4OpT Expr4OpT] in *;
- cbv zeta in *;
- simpl @fe2519_32WToZ; simpl @wire_digitsWToZ;
- rewrite <- Heq; clear Heq;
- destruct Hbounds as [Heq Hbounds];
- change interp_op with (@Z.interp_op) in *;
- change interp_base_type with (@Z.interp_base_type) in *;
- change word64 with WordW.wordW in *;
- rewrite <- Heq; clear Heq;
- destruct Hbounds as [ Hbounds0 [Hbounds1 Hbounds2] ];
- pose proof (fun pf => Relations.uncurry_interp_type_rel_pointwise_proj_from_option2 WordW.to_Z pf Hbounds2 Hbounds0) as Hbounds_left;
- pose proof (fun pf => Relations.uncurry_interp_type_rel_pointwise_proj1_from_option2 Relations.related_wordW_boundsi' pf Hbounds1 Hbounds2) as Hbounds_right;
- specialize_by repeat first [ progress intros
- | progress unfold RelationClasses.Reflexive
- | reflexivity
- | assumption
- | progress destruct_head' base_type
- | progress destruct_head' BoundedWordW.BoundedWord
- | progress destruct_head' and
- | progress repeat apply conj ];
- specialize (Hbounds_left args H0);
- specialize (Hbounds_right args H0);
- cbv beta in *;
- lazymatch type of Hbounds_right with
- | match ?e with _ => _ end
- => lazymatch type of H1 with
- | match ?e' with _ => _ end
- => change e' with e in H1; destruct e eqn:?; [ | exfalso; assumption ]
- end
- end;
- repeat match goal with x := _ |- _ => subst x end;
- cbv [id
- binop_args_to_bounded unop_args_to_bounded unopWireToFE_args_to_bounded op9_args_to_bounded
- Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list
- Relations.proj_eq_rel SmartVarfMap interp_flat_type smart_interp_flat_map domain fst snd BoundedWordW.to_wordW' BoundedWordW.boundedWordToWordW BoundedWord.value Relations.related_wordW_boundsi' Relations.related'_wordW_bounds Bounds.upper Bounds.lower codomain WordW.to_Z nm_op_args_to_bounded nm_op_args_to_bounded' n_op_args_to_bounded n_op_args_to_bounded' unop_args_to_bounded' Relations.interp_flat_type_rel_pointwise Relations.interp_flat_type_rel_pointwise_gen_Prop] in Hbounds_left, Hbounds_right;
- simpl @interp_flat_type in *;
- (let v := (eval unfold WordW.interp_base_type in (WordW.interp_base_type TZ)) in
- change (WordW.interp_base_type TZ) with v in *);
- cbv beta iota zeta in *;
- lazymatch goal with
- | [ |- fe2519_32WToZ ?x = _ /\ _ ]
- => generalize dependent x; intros
- | [ |- wire_digitsWToZ ?x = _ /\ _ ]
- => generalize dependent x; intros
- | [ |- (Tuple.map fe2519_32WToZ ?x = _) /\ _ ]
- => generalize dependent x; intros
- | [ |- ((Tuple.map fe2519_32WToZ ?x = _) * _)%type ]
- => generalize dependent x; intros
- | [ |- _ = _ ]
- => exact Hbounds_left
- end;
- cbv [interp_type interp_type_gen interp_type_gen_hetero interp_flat_type WordW.interp_base_type codomain] in *;
- destruct_head' prod;
- change word64ToZ with WordW.wordWToZ in *;
- (split; [ exact Hbounds_left | ]);
- cbv [interp_flat_type] in *;
- cbv [fst snd
- Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list Tuple.from_list'
- make_bound
- Datatypes.length wire_widths wire_digit_bounds PseudoMersenneBaseParams.limb_widths bounds
- binop_bounds_good unop_bounds_good unopFEToWire_bounds_good unopWireToFE_bounds_good unopFEToZ_bounds_good op9_4_bounds_good
- ExprUnOp_bounds ExprBinOp_bounds ExprUnOpFEToWire_bounds ExprUnOpFEToZ_bounds ExprUnOpWireToFE_bounds Expr9Op_bounds Expr4Op_bounds] in H1;
- destruct_head' ZBounds.bounds;
- unfold_is_bounded_in H1;
- simpl @fe2519_32WToZ; simpl @wire_digitsWToZ;
- destruct_head' and;
- Z.ltb_to_lt;
- change WordW.wordWToZ with word64ToZ in *;
- cbv [Tuple.map HList.hlist Tuple.on_tuple Tuple.from_list Tuple.from_list' Tuple.to_list Tuple.to_list' List.map HList.hlist' fst snd fe2519_32WToZ HList.hlistP HList.hlistP'];
- cbv [WordW.bit_width BitSize64.bit_width Z.of_nat Pos.of_succ_nat Pos.succ] in *;
- repeat split; unfold_is_bounded;
- Z.ltb_to_lt;
- try omega; try reflexivity.
-
-Ltac rexpr_correct :=
- let ropW' := fresh in
- let ropZ_sig := fresh in
- intros ropW' ropZ_sig;
- let wf_ropW := fresh "wf_ropW" in
- assert (wf_ropW : Wf ropW') by (subst ropW' ropZ_sig; reflect_Wf base_type_eq_semidec_is_dec op_beq_bl);
- cbv zeta; repeat apply conj;
- [ vm_compute; reflexivity
- | apply @InterpWf;
- [ | apply wf_ropW ].. ];
- auto with interp_related.
-
-Notation rword_of_Z rexprZ_sig := (proj1_sig rexprZ_sig) (only parsing).
-
-Notation compute_bounds opW bounds
- := (Interp (@ZBounds.interp_op) opW bounds)
- (only parsing).
-
-Notation rexpr_wfT e := (Wf.Wf e) (only parsing).
-
-Ltac prove_rexpr_wfT
- := reflect_Wf Equality.base_type_eq_semidec_is_dec Equality.op_beq_bl.
-
-Module Export PrettyPrinting.
- (* We add [enlargen] to force [bounds_on] to be in [Type] in 8.4 and
- 8.5/8.6. Because [Set] is special and things break if
- [bounds_on] ends up in [Set] for reasons jgross hasn't bothered
- to debug. *)
- Inductive bounds_on := overflow | in_range (lower upper : Z) | enlargen (_ : Set).
-
- Inductive result := yes | no | borked.
-
- Definition ZBounds_to_bounds_on
- := fun (t : base_type) (x : ZBounds.interp_base_type t)
- => match x with
- | Some {| Bounds.lower := l ; Bounds.upper := u |}
- => in_range l u
- | None
- => overflow
- end.
-
- Fixpoint does_it_overflow {t} : interp_flat_type (fun t : base_type => bounds_on) t -> result
- := match t return interp_flat_type _ t -> result with
- | Tbase _ => fun v => match v with
- | overflow => yes
- | in_range _ _ => no
- | enlargen _ => borked
- end
- | Unit => fun _ => no
- | Prod x y => fun v => match @does_it_overflow _ (fst v), @does_it_overflow _ (snd v) with
- | no, no => no
- | yes, no | no, yes | yes, yes => yes
- | borked, _ | _, borked => borked
- end
- end.
-
- (** This gives a slightly easier to read version of the bounds *)
- Notation compute_bounds_for_display opW bounds
- := (SmartVarfMap ZBounds_to_bounds_on (compute_bounds opW bounds)) (only parsing).
- Notation sanity_compute opW bounds
- := (does_it_overflow (SmartVarfMap ZBounds_to_bounds_on (compute_bounds opW bounds))) (only parsing).
- Notation sanity_check opW bounds
- := (eq_refl (sanity_compute opW bounds) <: no = no) (only parsing).
-End PrettyPrinting.
diff --git a/src/SpecificGen/GF2519_32Reflective/Common9_4Op.v b/src/SpecificGen/GF2519_32Reflective/Common9_4Op.v
deleted file mode 100644
index 90befd75b..000000000
--- a/src/SpecificGen/GF2519_32Reflective/Common9_4Op.v
+++ /dev/null
@@ -1,102 +0,0 @@
-Require Export Crypto.SpecificGen.GF2519_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF2519_32BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Local Notation eta_and x := (let (a, b) := x in a, let (a, b) := x in b) (only parsing).
-Lemma Expr9_4Op_correct_and_bounded
- ropW op (ropZ_sig : rexpr_9_4op_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall x012345678
- (x012345678
- := (eta_fe2519_32W (fst (fst (fst (fst (fst (fst (fst (fst x012345678)))))))),
- eta_fe2519_32W (snd (fst (fst (fst (fst (fst (fst (fst x012345678)))))))),
- eta_fe2519_32W (snd (fst (fst (fst (fst (fst (fst x012345678))))))),
- eta_fe2519_32W (snd (fst (fst (fst (fst (fst x012345678)))))),
- eta_fe2519_32W (snd (fst (fst (fst (fst x012345678))))),
- eta_fe2519_32W (snd (fst (fst (fst x012345678)))),
- eta_fe2519_32W (snd (fst (fst x012345678))),
- eta_fe2519_32W (snd (fst x012345678)),
- eta_fe2519_32W (snd x012345678)))
- (Hx012345678
- : is_bounded (fe2519_32WToZ (fst (fst (fst (fst (fst (fst (fst (fst x012345678))))))))) = true
- /\ is_bounded (fe2519_32WToZ (snd (fst (fst (fst (fst (fst (fst (fst x012345678))))))))) = true
- /\ is_bounded (fe2519_32WToZ (snd (fst (fst (fst (fst (fst (fst x012345678)))))))) = true
- /\ is_bounded (fe2519_32WToZ (snd (fst (fst (fst (fst (fst x012345678))))))) = true
- /\ is_bounded (fe2519_32WToZ (snd (fst (fst (fst (fst x012345678)))))) = true
- /\ is_bounded (fe2519_32WToZ (snd (fst (fst (fst x012345678))))) = true
- /\ is_bounded (fe2519_32WToZ (snd (fst (fst x012345678)))) = true
- /\ is_bounded (fe2519_32WToZ (snd (fst x012345678))) = true
- /\ is_bounded (fe2519_32WToZ (snd x012345678)) = true),
- let (Hx0, Hx12345678) := (eta_and Hx012345678) in
- let (Hx1, Hx2345678) := (eta_and Hx12345678) in
- let (Hx2, Hx345678) := (eta_and Hx2345678) in
- let (Hx3, Hx45678) := (eta_and Hx345678) in
- let (Hx4, Hx5678) := (eta_and Hx45678) in
- let (Hx5, Hx678) := (eta_and Hx5678) in
- let (Hx6, Hx78) := (eta_and Hx678) in
- let (Hx7, Hx8) := (eta_and Hx78) in
- let args := op9_args_to_bounded x012345678 Hx0 Hx1 Hx2 Hx3 Hx4 Hx5 Hx6 Hx7 Hx8 in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall x012345678
- (x012345678
- := (eta_fe2519_32W (fst (fst (fst (fst (fst (fst (fst (fst x012345678)))))))),
- eta_fe2519_32W (snd (fst (fst (fst (fst (fst (fst (fst x012345678)))))))),
- eta_fe2519_32W (snd (fst (fst (fst (fst (fst (fst x012345678))))))),
- eta_fe2519_32W (snd (fst (fst (fst (fst (fst x012345678)))))),
- eta_fe2519_32W (snd (fst (fst (fst (fst x012345678))))),
- eta_fe2519_32W (snd (fst (fst (fst x012345678)))),
- eta_fe2519_32W (snd (fst (fst x012345678))),
- eta_fe2519_32W (snd (fst x012345678)),
- eta_fe2519_32W (snd x012345678)))
- (Hx012345678
- : is_bounded (fe2519_32WToZ (fst (fst (fst (fst (fst (fst (fst (fst x012345678))))))))) = true
- /\ is_bounded (fe2519_32WToZ (snd (fst (fst (fst (fst (fst (fst (fst x012345678))))))))) = true
- /\ is_bounded (fe2519_32WToZ (snd (fst (fst (fst (fst (fst (fst x012345678)))))))) = true
- /\ is_bounded (fe2519_32WToZ (snd (fst (fst (fst (fst (fst x012345678))))))) = true
- /\ is_bounded (fe2519_32WToZ (snd (fst (fst (fst (fst x012345678)))))) = true
- /\ is_bounded (fe2519_32WToZ (snd (fst (fst (fst x012345678))))) = true
- /\ is_bounded (fe2519_32WToZ (snd (fst (fst x012345678)))) = true
- /\ is_bounded (fe2519_32WToZ (snd (fst x012345678))) = true
- /\ is_bounded (fe2519_32WToZ (snd x012345678)) = true),
- let (Hx0, Hx12345678) := (eta_and Hx012345678) in
- let (Hx1, Hx2345678) := (eta_and Hx12345678) in
- let (Hx2, Hx345678) := (eta_and Hx2345678) in
- let (Hx3, Hx45678) := (eta_and Hx345678) in
- let (Hx4, Hx5678) := (eta_and Hx45678) in
- let (Hx5, Hx678) := (eta_and Hx5678) in
- let (Hx6, Hx78) := (eta_and Hx678) in
- let (Hx7, Hx8) := (eta_and Hx78) in
- let args := op9_args_to_bounded x012345678 Hx0 Hx1 Hx2 Hx3 Hx4 Hx5 Hx6 Hx7 Hx8 in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => op9_4_bounds_good bounds = true
- | None => False
- end)
- : op9_4_correct_and_bounded ropW op.
-Proof.
- intros xs Hxs.
- pose xs as xs'.
- compute in xs.
- destruct_head' prod.
- cbv [Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' fst snd List.map Tuple.from_list Tuple.from_list' HList.hlistP HList.hlistP'] in Hxs.
- pose Hxs as Hxs'.
- destruct Hxs as [ [ [ [ [ [ [ [ Hx0 Hx1 ] Hx2 ] Hx3 ] Hx4 ] Hx5 ] Hx6 ] Hx7 ] Hx8 ].
- specialize (H0 xs'
- (conj Hx0 (conj Hx1 (conj Hx2 (conj Hx3 (conj Hx4 (conj Hx5 (conj Hx6 (conj Hx7 Hx8))))))))).
- specialize (H1 xs'
- (conj Hx0 (conj Hx1 (conj Hx2 (conj Hx3 (conj Hx4 (conj Hx5 (conj Hx6 (conj Hx7 Hx8))))))))).
- Time let args := constr:(op9_args_to_bounded xs' Hx0 Hx1 Hx2 Hx3 Hx4 Hx5 Hx6 Hx7 Hx8) in
- admit; t_correct_and_bounded ropZ_sig Hbounds H0 H1 args. (* On 8.6beta1, with ~2 GB RAM, Finished transaction in 46.56 secs (46.372u,0.14s) (successful) *)
-Admitted. (*Time Qed. (* On 8.6beta1, with ~4.3 GB RAM, Finished transaction in 67.652 secs (66.932u,0.64s) (successful) *)*)
diff --git a/src/SpecificGen/GF2519_32Reflective/CommonBinOp.v b/src/SpecificGen/GF2519_32Reflective/CommonBinOp.v
deleted file mode 100644
index bf8795d45..000000000
--- a/src/SpecificGen/GF2519_32Reflective/CommonBinOp.v
+++ /dev/null
@@ -1,50 +0,0 @@
-Require Export Crypto.SpecificGen.GF2519_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF2519_32BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Lemma ExprBinOp_correct_and_bounded
- ropW op (ropZ_sig : rexpr_binop_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall xy
- (xy := (eta_fe2519_32W (fst xy), eta_fe2519_32W (snd xy)))
- (Hxy : is_bounded (fe2519_32WToZ (fst xy)) = true
- /\ is_bounded (fe2519_32WToZ (snd xy)) = true),
- let Hx := let (Hx, Hy) := Hxy in Hx in
- let Hy := let (Hx, Hy) := Hxy in Hy in
- let args := binop_args_to_bounded xy Hx Hy in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall xy
- (xy := (eta_fe2519_32W (fst xy), eta_fe2519_32W (snd xy)))
- (Hxy : is_bounded (fe2519_32WToZ (fst xy)) = true
- /\ is_bounded (fe2519_32WToZ (snd xy)) = true),
- let Hx := let (Hx, Hy) := Hxy in Hx in
- let Hy := let (Hx, Hy) := Hxy in Hy in
- let args := binop_args_to_bounded (fst xy, snd xy) Hx Hy in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => binop_bounds_good bounds = true
- | None => False
- end)
- : binop_correct_and_bounded ropW op.
-Proof.
- intros xy HxHy.
- pose xy as xy'.
- compute in xy; destruct_head' prod.
- specialize (H0 xy' HxHy).
- specialize (H1 xy' HxHy).
- destruct HxHy as [Hx Hy].
- let args := constr:(binop_args_to_bounded xy' Hx Hy) in
- t_correct_and_bounded ropZ_sig Hbounds H0 H1 args.
-Qed.
diff --git a/src/SpecificGen/GF2519_32Reflective/CommonUnOp.v b/src/SpecificGen/GF2519_32Reflective/CommonUnOp.v
deleted file mode 100644
index 418dfd5e5..000000000
--- a/src/SpecificGen/GF2519_32Reflective/CommonUnOp.v
+++ /dev/null
@@ -1,43 +0,0 @@
-Require Export Crypto.SpecificGen.GF2519_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF2519_32BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Lemma ExprUnOp_correct_and_bounded
- ropW op (ropZ_sig : rexpr_unop_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall x
- (x := eta_fe2519_32W x)
- (Hx : is_bounded (fe2519_32WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall x
- (x := eta_fe2519_32W x)
- (Hx : is_bounded (fe2519_32WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => unop_bounds_good bounds = true
- | None => False
- end)
- : unop_correct_and_bounded ropW op.
-Proof.
- intros x Hx.
- pose x as x'.
- hnf in x; destruct_head' prod.
- specialize (H0 x' Hx).
- specialize (H1 x' Hx).
- let args := constr:(unop_args_to_bounded x' Hx) in
- t_correct_and_bounded ropZ_sig Hbounds H0 H1 args.
-Qed.
diff --git a/src/SpecificGen/GF2519_32Reflective/CommonUnOpFEToWire.v b/src/SpecificGen/GF2519_32Reflective/CommonUnOpFEToWire.v
deleted file mode 100644
index 6668a3b64..000000000
--- a/src/SpecificGen/GF2519_32Reflective/CommonUnOpFEToWire.v
+++ /dev/null
@@ -1,43 +0,0 @@
-Require Export Crypto.SpecificGen.GF2519_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF2519_32BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Lemma ExprUnOpFEToWire_correct_and_bounded
- ropW op (ropZ_sig : rexpr_unop_FEToWire_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall x
- (x := eta_fe2519_32W x)
- (Hx : is_bounded (fe2519_32WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall x
- (x := eta_fe2519_32W x)
- (Hx : is_bounded (fe2519_32WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => unopFEToWire_bounds_good bounds = true
- | None => False
- end)
- : unop_FEToWire_correct_and_bounded ropW op.
-Proof.
- intros x Hx.
- pose x as x'.
- hnf in x; destruct_head' prod.
- specialize (H0 x' Hx).
- specialize (H1 x' Hx).
- let args := constr:(unop_args_to_bounded x' Hx) in
- t_correct_and_bounded ropZ_sig Hbounds H0 H1 args.
-Qed.
diff --git a/src/SpecificGen/GF2519_32Reflective/CommonUnOpFEToZ.v b/src/SpecificGen/GF2519_32Reflective/CommonUnOpFEToZ.v
deleted file mode 100644
index bdf2a49c7..000000000
--- a/src/SpecificGen/GF2519_32Reflective/CommonUnOpFEToZ.v
+++ /dev/null
@@ -1,43 +0,0 @@
-Require Export Crypto.SpecificGen.GF2519_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF2519_32BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Lemma ExprUnOpFEToZ_correct_and_bounded
- ropW op (ropZ_sig : rexpr_unop_FEToZ_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall x
- (x := eta_fe2519_32W x)
- (Hx : is_bounded (fe2519_32WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall x
- (x := eta_fe2519_32W x)
- (Hx : is_bounded (fe2519_32WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => unopFEToZ_bounds_good bounds = true
- | None => False
- end)
- : unop_FEToZ_correct ropW op.
-Proof.
- intros x Hx.
- pose x as x'.
- hnf in x; destruct_head' prod.
- specialize (H0 x' Hx).
- specialize (H1 x' Hx).
- let args := constr:(unop_args_to_bounded x' Hx) in
- t_correct_and_bounded ropZ_sig Hbounds H0 H1 args.
-Qed.
diff --git a/src/SpecificGen/GF2519_32Reflective/CommonUnOpWireToFE.v b/src/SpecificGen/GF2519_32Reflective/CommonUnOpWireToFE.v
deleted file mode 100644
index c2f260694..000000000
--- a/src/SpecificGen/GF2519_32Reflective/CommonUnOpWireToFE.v
+++ /dev/null
@@ -1,43 +0,0 @@
-Require Export Crypto.SpecificGen.GF2519_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF2519_32BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Lemma ExprUnOpWireToFE_correct_and_bounded
- ropW op (ropZ_sig : rexpr_unop_WireToFE_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall x
- (x := eta_wire_digitsW x)
- (Hx : wire_digits_is_bounded (wire_digitsWToZ x) = true),
- let args := unopWireToFE_args_to_bounded x Hx in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall x
- (x := eta_wire_digitsW x)
- (Hx : wire_digits_is_bounded (wire_digitsWToZ x) = true),
- let args := unopWireToFE_args_to_bounded x Hx in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => unopWireToFE_bounds_good bounds = true
- | None => False
- end)
- : unop_WireToFE_correct_and_bounded ropW op.
-Proof.
- intros x Hx.
- pose x as x'.
- hnf in x; destruct_head' prod.
- specialize (H0 x' Hx).
- specialize (H1 x' Hx).
- let args := constr:(unopWireToFE_args_to_bounded x' Hx) in
- t_correct_and_bounded ropZ_sig Hbounds H0 H1 args.
-Qed.
diff --git a/src/SpecificGen/GF2519_32Reflective/Reified.v b/src/SpecificGen/GF2519_32Reflective/Reified.v
deleted file mode 100644
index 4630e532f..000000000
--- a/src/SpecificGen/GF2519_32Reflective/Reified.v
+++ /dev/null
@@ -1,13 +0,0 @@
-(** We split the reification up into separate files, one operation per
- file, so that it can run in parallel. *)
-Require Export Crypto.SpecificGen.GF2519_32Reflective.Reified.Add.
-Require Export Crypto.SpecificGen.GF2519_32Reflective.Reified.CarryAdd.
-Require Export Crypto.SpecificGen.GF2519_32Reflective.Reified.Sub.
-Require Export Crypto.SpecificGen.GF2519_32Reflective.Reified.CarrySub.
-Require Export Crypto.SpecificGen.GF2519_32Reflective.Reified.Mul.
-Require Export Crypto.SpecificGen.GF2519_32Reflective.Reified.Opp.
-Require Export Crypto.SpecificGen.GF2519_32Reflective.Reified.CarryOpp.
-Require Export Crypto.SpecificGen.GF2519_32Reflective.Reified.PreFreeze.
-Require Export Crypto.SpecificGen.GF2519_32Reflective.Reified.GeModulus.
-Require Export Crypto.SpecificGen.GF2519_32Reflective.Reified.Pack.
-Require Export Crypto.SpecificGen.GF2519_32Reflective.Reified.Unpack.
diff --git a/src/SpecificGen/GF2519_32Reflective/Reified/Add.v b/src/SpecificGen/GF2519_32Reflective/Reified/Add.v
deleted file mode 100644
index c379c398a..000000000
--- a/src/SpecificGen/GF2519_32Reflective/Reified/Add.v
+++ /dev/null
@@ -1,12 +0,0 @@
-Require Import Crypto.SpecificGen.GF2519_32Reflective.CommonBinOp.
-
-Definition raddZ_sig : rexpr_binop_sig add. Proof. reify_sig. Defined.
-Definition raddW := Eval vm_compute in rword_of_Z raddZ_sig.
-Lemma raddW_correct_and_bounded_gen : correct_and_bounded_genT raddW raddZ_sig.
-Proof. rexpr_correct. Qed.
-Definition radd_output_bounds := Eval vm_compute in compute_bounds raddW ExprBinOp_bounds.
-
-Local Open Scope string_scope.
-Compute ("Add", compute_bounds_for_display raddW ExprBinOp_bounds).
-Compute ("Add overflows? ", sanity_compute raddW ExprBinOp_bounds).
-Compute ("Add overflows (error if it does)? ", sanity_check raddW ExprBinOp_bounds).
diff --git a/src/SpecificGen/GF2519_32Reflective/Reified/AddCoordinates.v b/src/SpecificGen/GF2519_32Reflective/Reified/AddCoordinates.v
deleted file mode 100644
index 4411362c0..000000000
--- a/src/SpecificGen/GF2519_32Reflective/Reified/AddCoordinates.v
+++ /dev/null
@@ -1,183 +0,0 @@
-Require Export Coq.ZArith.ZArith.
-Require Export Coq.Strings.String.
-Require Export Crypto.SpecificGen.GF2519_32.
-Require Export Crypto.SpecificGen.GF2519_32BoundedCommon.
-Require Import Crypto.Reflection.Reify.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Reflection.ExprInversion.
-Require Import Crypto.Reflection.Relations.
-Require Import Crypto.Reflection.Linearize.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Crypto.Reflection.Z.Interpretations64.Relations.
-Require Import Crypto.Reflection.Z.Interpretations64.RelationsCombinations.
-Require Import Crypto.Reflection.Z.Reify.
-Require Export Crypto.Reflection.Z.Syntax.
-Require Import Crypto.Reflection.InterpWfRel.
-Require Import Crypto.Reflection.LinearizeInterp.
-Require Import Crypto.Reflection.WfReflective.
-Require Import Crypto.Reflection.Eta.
-Require Import Crypto.Reflection.EtaInterp.
-Require Import Crypto.CompleteEdwardsCurve.ExtendedCoordinates.
-Require Import Crypto.SpecificGen.GF2519_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF2519_32Reflective.Reified.Add.
-Require Import Crypto.SpecificGen.GF2519_32Reflective.Reified.Sub.
-Require Import Crypto.SpecificGen.GF2519_32Reflective.Reified.Mul.
-Require Import Crypto.SpecificGen.GF2519_32Reflective.Common9_4Op.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.HList.
-Require Import Crypto.Util.Tower.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.Notations.
-Require Import Bedrock.Word.
-
-Definition radd_coordinatesZ' var twice_d P1 P2
- := @Extended.add_coordinates_gen
- _
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig raddZ_sig var)))
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig rsubZ_sig var)))
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig rmulZ_sig var)))
- twice_d _
- (fun x y z w => (x, y, z, w)%expr)
- (fun v f => LetIn v
- (fun k => f (SmartVarf k)))
- P1 P2.
-
-Local Notation eta x := (fst x, snd x).
-
-Definition radd_coordinatesZ'' : Syntax.Expr _ _ _
- := Linearize
- (ExprEta
- (fun var
- => Abs (fun twice_d_P1_P2 : interp_flat_type _ (_ * ((_ * _ * _ * _) * (_ * _ * _ * _)))
- => let '(twice_d, ((P10, P11, P12, P13), (P20, P21, P22, P23)))
- := twice_d_P1_P2 in
- radd_coordinatesZ'
- var (SmartVarf twice_d)
- (SmartVarf P10, SmartVarf P11, SmartVarf P12, SmartVarf P13)
- (SmartVarf P20, SmartVarf P21, SmartVarf P22, SmartVarf P23)))).
-
-Definition add_coordinates
- := fun twice_d P10 P11 P12 P13 P20 P21 P22 P23
- => @Extended.add_coordinates
- _ add sub mul
- twice_d (P10, P11, P12, P13) (P20, P21, P22, P23).
-
-Definition uncurried_add_coordinates
- := fun twice_d_P1_P2
- => let twice_d := fst twice_d_P1_P2 in
- let (P1, P2) := eta (snd twice_d_P1_P2) in
- @Extended.add_coordinates
- _ add sub mul
- twice_d P1 P2.
-
-Local Notation rexpr_sigPf T uncurried_op rexprZ x :=
- (Interp interp_op (t:=T) rexprZ x = uncurried_op x)
- (only parsing).
-Local Notation rexpr_sigP T uncurried_op rexprZ :=
- (forall x, rexpr_sigPf T uncurried_op rexprZ x)
- (only parsing).
-Local Notation rexpr_sig T uncurried_op :=
- { rexprZ | rexpr_sigP T uncurried_op rexprZ }
- (only parsing).
-
-Local Ltac fold_interpf' :=
- let k := (eval unfold interpf, interpf_step in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- change k with k'; clearbody k'; subst k'.
-
-Local Ltac fold_interpf :=
- let k := (eval unfold interpf in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- change k with k'; clearbody k'; subst k';
- fold_interpf'.
-
-Local Ltac repeat_step_interpf :=
- let k := (eval unfold interpf in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- repeat (unfold k'; change k with k'; unfold interpf_step);
- clearbody k'; subst k'.
-
-Lemma radd_coordinatesZ_sigP' : rexpr_sigP _ uncurried_add_coordinates radd_coordinatesZ''.
-Proof.
- cbv [radd_coordinatesZ''].
- intro x; rewrite InterpLinearize, InterpExprEta.
- cbv [domain interp_flat_type] in x.
- destruct x as [twice_d [ [ [ [P10_ P11_] P12_] P13_] [ [ [P20_ P21_] P22_] P23_] ] ].
- repeat match goal with
- | [ H : prod _ _ |- _ ] => let H0 := fresh H in let H1 := fresh H in destruct H as [H0 H1]
- end.
- cbv [invert_Abs domain codomain Interp interp SmartVarf smart_interp_flat_map fst snd].
- cbv [radd_coordinatesZ' add_coordinates Extended.add_coordinates_gen uncurried_add_coordinates SmartVarf smart_interp_flat_map]; simpl @fst; simpl @snd.
- repeat match goal with
- | [ |- appcontext[@proj1_sig ?A ?B ?v] ]
- => let k := fresh "f" in
- let k' := fresh "f" in
- let H := fresh in
- set (k := v);
- set (k' := @proj1_sig A B k);
- pose proof (proj2_sig k) as H;
- change (proj1_sig k) with k' in H;
- clearbody k'; clear k;
- cbv beta in *
- end.
- cbv [Interp Curry.curry2] in *.
- unfold interpf, interpf_step; fold_interpf.
- cbv beta iota delta [Extended.add_coordinates interp_flat_type interp_base_type GF2519_32.fe2519_32].
- Time
- abstract (
- repeat match goal with
- | [ |- (dlet x := ?y in @?z x) = (let x' := ?y' in @?z' x') ]
- => refine ((fun pf0 pf1 => @Proper_Let_In_nd_changebody _ _ Logic.eq _ y y' pf0 z z' pf1)
- (_ : y = y')
- (_ : forall x, z x = z' x));
- cbv beta; intros;
- [ cbv [Let_In] | ]
- end;
- repeat match goal with
- | _ => rewrite !interpf_invert_Abs
- | _ => rewrite_hyp !*
- | [ |- ?x = ?x ] => reflexivity
- | _ => rewrite <- !surjective_pairing
- end
- ).
-Time Defined.
-Lemma radd_coordinatesZ_sigP : rexpr_sigP _ uncurried_add_coordinates radd_coordinatesZ''.
-Proof.
- exact radd_coordinatesZ_sigP'.
-Qed.
-Definition radd_coordinatesZ_sig
- := exist (fun v => rexpr_sigP _ _ v) radd_coordinatesZ'' radd_coordinatesZ_sigP.
-
-Definition radd_coordinates_input_bounds
- := (ExprUnOp_bounds, ((ExprUnOp_bounds, ExprUnOp_bounds, ExprUnOp_bounds, ExprUnOp_bounds),
- (ExprUnOp_bounds, ExprUnOp_bounds, ExprUnOp_bounds, ExprUnOp_bounds))).
-
-Time Definition radd_coordinatesW := Eval vm_compute in rword_of_Z radd_coordinatesZ_sig.
-Lemma radd_coordinatesW_correct_and_bounded_gen : correct_and_bounded_genT radd_coordinatesW radd_coordinatesZ_sig.
-Proof. Time rexpr_correct. Time Qed.
-Definition radd_coordinates_output_bounds := Eval vm_compute in compute_bounds radd_coordinatesW radd_coordinates_input_bounds.
-
-Local Obligation Tactic := intros; vm_compute; constructor.
-
-(*
-Program Definition radd_coordinatesW_correct_and_bounded
- := Expr9_4Op_correct_and_bounded
- radd_coordinatesW uncurried_add_coordinates radd_coordinatesZ_sig radd_coordinatesW_correct_and_bounded_gen
- _ _.
- *)
-
-Local Open Scope string_scope.
-Compute ("Add_Coordinates", compute_bounds_for_display radd_coordinatesW radd_coordinates_input_bounds).
-Compute ("Add_Coordinates overflows? ", sanity_compute radd_coordinatesW radd_coordinates_input_bounds).
-Compute ("Add_Coordinates overflows (error if it does)? ", sanity_check radd_coordinatesW radd_coordinates_input_bounds).
diff --git a/src/SpecificGen/GF2519_32Reflective/Reified/AddDisplay.log b/src/SpecificGen/GF2519_32Reflective/Reified/AddDisplay.log
deleted file mode 100644
index 156f0286e..000000000
--- a/src/SpecificGen/GF2519_32Reflective/Reified/AddDisplay.log
+++ /dev/null
@@ -1,45 +0,0 @@
-raddW =
-fun var : Syntax.base_type -> Type =>
-λ
-x x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17
- x18 : var Syntax.TZ,
-Tbase Syntax.TZ x19 = x + x9;
-Tbase Syntax.TZ x20 = x0 + x10;
-Tbase Syntax.TZ x21 = x1 + x11;
-Tbase Syntax.TZ x22 = x2 + x12;
-Tbase Syntax.TZ x23 = x3 + x13;
-Tbase Syntax.TZ x24 = x4 + x14;
-Tbase Syntax.TZ x25 = x5 + x15;
-Tbase Syntax.TZ x26 = x6 + x16;
-Tbase Syntax.TZ x27 = x7 + x17;
-Tbase Syntax.TZ x28 = x8 + x18;
-(Return x19, Return x20, Return x21, Return x22, Return x23,
-Return x24, Return x25, Return x26, Return x27, Return x28)
- : forall var : Syntax.base_type -> Type,
- expr Syntax.base_type Syntax.op
- (Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF2519_32Reflective/Reified/AddDisplay.v b/src/SpecificGen/GF2519_32Reflective/Reified/AddDisplay.v
deleted file mode 100644
index 3721cfa71..000000000
--- a/src/SpecificGen/GF2519_32Reflective/Reified/AddDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF2519_32Reflective.Reified.Add.
-Require Export Crypto.Reflection.Z.CNotations.
-
-Print raddW.
diff --git a/src/SpecificGen/GF2519_32Reflective/Reified/AddJavaDisplay.log b/src/SpecificGen/GF2519_32Reflective/Reified/AddJavaDisplay.log
deleted file mode 100644
index 156f0286e..000000000
--- a/src/SpecificGen/GF2519_32Reflective/Reified/AddJavaDisplay.log
+++ /dev/null
@@ -1,45 +0,0 @@
-raddW =
-fun var : Syntax.base_type -> Type =>
-λ
-x x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17
- x18 : var Syntax.TZ,
-Tbase Syntax.TZ x19 = x + x9;
-Tbase Syntax.TZ x20 = x0 + x10;
-Tbase Syntax.TZ x21 = x1 + x11;
-Tbase Syntax.TZ x22 = x2 + x12;
-Tbase Syntax.TZ x23 = x3 + x13;
-Tbase Syntax.TZ x24 = x4 + x14;
-Tbase Syntax.TZ x25 = x5 + x15;
-Tbase Syntax.TZ x26 = x6 + x16;
-Tbase Syntax.TZ x27 = x7 + x17;
-Tbase Syntax.TZ x28 = x8 + x18;
-(Return x19, Return x20, Return x21, Return x22, Return x23,
-Return x24, Return x25, Return x26, Return x27, Return x28)
- : forall var : Syntax.base_type -> Type,
- expr Syntax.base_type Syntax.op
- (Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF2519_32Reflective/Reified/AddJavaDisplay.v b/src/SpecificGen/GF2519_32Reflective/Reified/AddJavaDisplay.v
deleted file mode 100644
index e9819e147..000000000
--- a/src/SpecificGen/GF2519_32Reflective/Reified/AddJavaDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF2519_32Reflective.Reified.Add.
-Require Export Crypto.Reflection.Z.JavaNotations.
-
-Print raddW.
diff --git a/src/SpecificGen/GF2519_32Reflective/Reified/CarryAdd.v b/src/SpecificGen/GF2519_32Reflective/Reified/CarryAdd.v
deleted file mode 100644
index 91571ac77..000000000
--- a/src/SpecificGen/GF2519_32Reflective/Reified/CarryAdd.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF2519_32Reflective.CommonBinOp.
-
-Definition rcarry_addZ_sig : rexpr_binop_sig carry_add. Proof. reify_sig. Defined.
-Definition rcarry_addW := Eval vm_compute in rword_of_Z rcarry_addZ_sig.
-Lemma rcarry_addW_correct_and_bounded_gen : correct_and_bounded_genT rcarry_addW rcarry_addZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rcarry_add_output_bounds := Eval vm_compute in compute_bounds rcarry_addW ExprBinOp_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rcarry_addW_correct_and_bounded
- := ExprBinOp_correct_and_bounded
- rcarry_addW carry_add rcarry_addZ_sig rcarry_addW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Carry_Add", compute_bounds_for_display rcarry_addW ExprBinOp_bounds).
-Compute ("Carry_Add overflows? ", sanity_compute rcarry_addW ExprBinOp_bounds).
-Compute ("Carry_Add overflows (error if it does)? ", sanity_check rcarry_addW ExprBinOp_bounds).
diff --git a/src/SpecificGen/GF2519_32Reflective/Reified/CarryOpp.v b/src/SpecificGen/GF2519_32Reflective/Reified/CarryOpp.v
deleted file mode 100644
index 708dd54bf..000000000
--- a/src/SpecificGen/GF2519_32Reflective/Reified/CarryOpp.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF2519_32Reflective.CommonUnOp.
-
-Definition rcarry_oppZ_sig : rexpr_unop_sig carry_opp. Proof. reify_sig. Defined.
-Definition rcarry_oppW := Eval vm_compute in rword_of_Z rcarry_oppZ_sig.
-Lemma rcarry_oppW_correct_and_bounded_gen : correct_and_bounded_genT rcarry_oppW rcarry_oppZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rcarry_opp_output_bounds := Eval vm_compute in compute_bounds rcarry_oppW ExprUnOp_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rcarry_oppW_correct_and_bounded
- := ExprUnOp_correct_and_bounded
- rcarry_oppW carry_opp rcarry_oppZ_sig rcarry_oppW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Carry_Opp", compute_bounds_for_display rcarry_oppW ExprUnOp_bounds).
-Compute ("Carry_Opp overflows? ", sanity_compute rcarry_oppW ExprUnOp_bounds).
-Compute ("Carry_Opp overflows (error if it does)? ", sanity_check rcarry_oppW ExprUnOp_bounds).
diff --git a/src/SpecificGen/GF2519_32Reflective/Reified/CarrySub.v b/src/SpecificGen/GF2519_32Reflective/Reified/CarrySub.v
deleted file mode 100644
index f69b61455..000000000
--- a/src/SpecificGen/GF2519_32Reflective/Reified/CarrySub.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF2519_32Reflective.CommonBinOp.
-
-Definition rcarry_subZ_sig : rexpr_binop_sig carry_sub. Proof. reify_sig. Defined.
-Definition rcarry_subW := Eval vm_compute in rword_of_Z rcarry_subZ_sig.
-Lemma rcarry_subW_correct_and_bounded_gen : correct_and_bounded_genT rcarry_subW rcarry_subZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rcarry_sub_output_bounds := Eval vm_compute in compute_bounds rcarry_subW ExprBinOp_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rcarry_subW_correct_and_bounded
- := ExprBinOp_correct_and_bounded
- rcarry_subW carry_sub rcarry_subZ_sig rcarry_subW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Carry_Sub", compute_bounds_for_display rcarry_subW ExprBinOp_bounds).
-Compute ("Carry_Sub overflows? ", sanity_compute rcarry_subW ExprBinOp_bounds).
-Compute ("Carry_Sub overflows (error if it does)? ", sanity_check rcarry_subW ExprBinOp_bounds).
diff --git a/src/SpecificGen/GF2519_32Reflective/Reified/GeModulus.v b/src/SpecificGen/GF2519_32Reflective/Reified/GeModulus.v
deleted file mode 100644
index e5dfa9e43..000000000
--- a/src/SpecificGen/GF2519_32Reflective/Reified/GeModulus.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF2519_32Reflective.CommonUnOpFEToZ.
-
-Definition rge_modulusZ_sig : rexpr_unop_FEToZ_sig ge_modulus. Proof. reify_sig. Defined.
-Definition rge_modulusW := Eval vm_compute in rword_of_Z rge_modulusZ_sig.
-Lemma rge_modulusW_correct_and_bounded_gen : correct_and_bounded_genT rge_modulusW rge_modulusZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rge_modulus_output_bounds := Eval vm_compute in compute_bounds rge_modulusW ExprUnOpFEToZ_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rge_modulusW_correct_and_bounded
- := ExprUnOpFEToZ_correct_and_bounded
- rge_modulusW ge_modulus rge_modulusZ_sig rge_modulusW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Ge_Modulus", compute_bounds_for_display rge_modulusW ExprUnOpFEToZ_bounds).
-Compute ("Ge_Modulus overflows? ", sanity_compute rge_modulusW ExprUnOpFEToZ_bounds).
-Compute ("Ge_Modulus overflows (error if it does)? ", sanity_check rge_modulusW ExprUnOpFEToZ_bounds).
diff --git a/src/SpecificGen/GF2519_32Reflective/Reified/LadderStep.v b/src/SpecificGen/GF2519_32Reflective/Reified/LadderStep.v
deleted file mode 100644
index 1a4204457..000000000
--- a/src/SpecificGen/GF2519_32Reflective/Reified/LadderStep.v
+++ /dev/null
@@ -1,189 +0,0 @@
-Require Export Coq.ZArith.ZArith.
-Require Export Coq.Strings.String.
-Require Export Crypto.SpecificGen.GF2519_32.
-Require Export Crypto.SpecificGen.GF2519_32BoundedCommon.
-Require Import Crypto.Reflection.Reify.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Reflection.Relations.
-Require Import Crypto.Reflection.ExprInversion.
-Require Import Crypto.Reflection.Linearize.
-Require Import Crypto.Reflection.Eta.
-Require Import Crypto.Reflection.EtaInterp.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Crypto.Reflection.Z.Interpretations64.Relations.
-Require Import Crypto.Reflection.Z.Interpretations64.RelationsCombinations.
-Require Import Crypto.Reflection.Z.Reify.
-Require Export Crypto.Reflection.Z.Syntax.
-Require Import Crypto.Reflection.InterpWfRel.
-Require Import Crypto.Reflection.LinearizeInterp.
-Require Import Crypto.Reflection.WfReflective.
-Require Import Crypto.Spec.MxDH.
-Require Import Crypto.SpecificGen.GF2519_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF2519_32Reflective.Reified.Add.
-Require Import Crypto.SpecificGen.GF2519_32Reflective.Reified.Sub.
-Require Import Crypto.SpecificGen.GF2519_32Reflective.Reified.Mul.
-Require Import Crypto.SpecificGen.GF2519_32Reflective.Common9_4Op.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.HList.
-Require Import Crypto.Util.Tower.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.Notations.
-Require Import Bedrock.Word.
-
-Definition rladderstepZ' var (T:=_) (a24 x0 : T) P1 P2
- := @MxDH.ladderstep_gen
- _
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig raddZ_sig var)))
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig rsubZ_sig var)))
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig rmulZ_sig var)))
- a24
- _
- (fun x y z w => (x, y, z, w)%expr)
- (fun v f => LetIn v
- (fun k => f (SmartVarf k)))
- x0
- P1 P2.
-
-Definition rladderstepZ'' : Syntax.Expr _ _ _
- := Linearize
- (ExprEta
- (fun var
- => Abs (fun a24_x0_P1_P2 : interp_flat_type _ (_ * _ * ((_ * _) * (_ * _)))
- => let '(a24, x0, ((P10, P11), (P20, P21)))
- := a24_x0_P1_P2 in
- rladderstepZ'
- var (SmartVarf a24) (SmartVarf x0)
- (SmartVarf P10, SmartVarf P11)
- (SmartVarf P20, SmartVarf P21)))).
-
-Local Notation eta x := (fst x, snd x).
-
-Definition ladderstep_other_assoc {F Fadd Fsub Fmul} a24 (X1:F) (P1 P2:F*F) : F*F*F*F :=
- Eval cbv beta delta [MxDH.ladderstep_gen] in
- @MxDH.ladderstep_gen
- F Fadd Fsub Fmul a24
- (F*F*F*F)
- (fun X3 Y3 Z3 T3 => (X3, Y3, Z3, T3))
- (fun x f => dlet y := x in f y)
- X1 P1 P2.
-
-Definition uncurried_ladderstep
- := fun (a24_x0_P1_P2 : _ * _ * ((_ * _) * (_ * _)))
- => let a24 := fst (fst a24_x0_P1_P2) in
- let x0 := snd (fst a24_x0_P1_P2) in
- let '(P1, P2) := eta (snd a24_x0_P1_P2) in
- let '((P10, P11), (P20, P21)) := (eta P1, eta P2) in
- @ladderstep_other_assoc
- _ add sub mul
- a24 x0 (P10, P11) (P20, P21).
-
-Local Notation rexpr_sigPf T uncurried_op rexprZ x :=
- (Interp interp_op (t:=T) rexprZ x = uncurried_op x)
- (only parsing).
-Local Notation rexpr_sigP T uncurried_op rexprZ :=
- (forall x, rexpr_sigPf T uncurried_op rexprZ x)
- (only parsing).
-Local Notation rexpr_sig T uncurried_op :=
- { rexprZ | rexpr_sigP T uncurried_op rexprZ }
- (only parsing).
-
-Local Ltac fold_interpf' :=
- let k := (eval unfold interpf, interpf_step in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- change k with k'; clearbody k'; subst k'.
-
-Local Ltac fold_interpf :=
- let k := (eval unfold interpf in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- change k with k'; clearbody k'; subst k';
- fold_interpf'.
-
-Local Ltac repeat_step_interpf :=
- let k := (eval unfold interpf in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- repeat (unfold interpf_step at 1; change k with k' at 1);
- clearbody k'; subst k'.
-
-Lemma rladderstepZ_sigP' : rexpr_sigP _ uncurried_ladderstep rladderstepZ''.
-Proof.
- cbv [rladderstepZ''].
- intro x; rewrite InterpLinearize, InterpExprEta.
- cbv [domain interp_flat_type interp_base_type] in x.
- destruct_head' prod.
- cbv [invert_Abs domain codomain Interp interp SmartVarf smart_interp_flat_map fst snd].
- cbv [rladderstepZ' MxDH.ladderstep_gen uncurried_ladderstep SmartVarf smart_interp_flat_map]; simpl @fst; simpl @snd.
- repeat match goal with
- | [ |- appcontext[@proj1_sig ?A ?B ?v] ]
- => let k := fresh "f" in
- let k' := fresh "f" in
- let H := fresh in
- set (k := v);
- set (k' := @proj1_sig A B k);
- pose proof (proj2_sig k) as H;
- change (proj1_sig k) with k' in H;
- clearbody k'; clear k;
- cbv beta in *
- end.
- cbv [Interp Curry.curry2] in *.
- unfold interpf, interpf_step; fold_interpf.
- cbv [ladderstep_other_assoc interp_flat_type GF2519_32.fe2519_32].
- Time
- abstract (
- repeat match goal with
- | [ |- (dlet x := ?y in @?z x) = (dlet x' := ?y' in @?z' x') ]
- => refine ((fun pf0 pf1 => @Proper_Let_In_nd_changebody _ _ Logic.eq _ y y' pf0 z z' pf1)
- (_ : y = y')
- (_ : forall x, z x = z' x));
- cbv beta; intros;
- [ cbv [Let_In Common.ExprBinOpT] | ]
- end;
- repeat match goal with
- | _ => rewrite !interpf_invert_Abs
- | _ => rewrite_hyp !*
- | _ => progress cbv [interp_base_type]
- | [ |- ?x = ?x ] => reflexivity
- | _ => rewrite <- !surjective_pairing
- end
- ).
-Time Defined.
-Lemma rladderstepZ_sigP : rexpr_sigP _ uncurried_ladderstep rladderstepZ''.
-Proof.
- exact rladderstepZ_sigP'.
-Qed.
-Definition rladderstepZ_sig
- := exist (fun v => rexpr_sigP _ _ v) rladderstepZ'' rladderstepZ_sigP.
-
-Definition rladderstep_input_bounds
- := (ExprUnOp_bounds, ExprUnOp_bounds,
- ((ExprUnOp_bounds, ExprUnOp_bounds),
- (ExprUnOp_bounds, ExprUnOp_bounds))).
-
-Time Definition rladderstepW := Eval vm_compute in rword_of_Z rladderstepZ_sig.
-Lemma rladderstepW_correct_and_bounded_gen : correct_and_bounded_genT rladderstepW rladderstepZ_sig.
-Proof. Time rexpr_correct. Time Qed.
-Definition rladderstep_output_bounds := Eval vm_compute in compute_bounds rladderstepW rladderstep_input_bounds.
-
-Local Obligation Tactic := intros; vm_compute; constructor.
-
-(*
-Program Definition rladderstepW_correct_and_bounded
- := Expr9_4Op_correct_and_bounded
- rladderstepW uncurried_ladderstep rladderstepZ_sig rladderstepW_correct_and_bounded_gen
- _ _.
- *)
-
-Local Open Scope string_scope.
-Compute ("Ladderstep", compute_bounds_for_display rladderstepW rladderstep_input_bounds).
-Compute ("Ladderstep overflows? ", sanity_compute rladderstepW rladderstep_input_bounds).
-Compute ("Ladderstep overflows (error if it does)? ", sanity_check rladderstepW rladderstep_input_bounds).
diff --git a/src/SpecificGen/GF2519_32Reflective/Reified/LadderStepDisplay.log b/src/SpecificGen/GF2519_32Reflective/Reified/LadderStepDisplay.log
deleted file mode 100644
index 75e6fece4..000000000
--- a/src/SpecificGen/GF2519_32Reflective/Reified/LadderStepDisplay.log
+++ /dev/null
@@ -1,3859 +0,0 @@
-rladderstepW =
-fun var : base_type -> Type =>
-λ
-_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ x29 x30 x31 x32
- x33 x34 x35 x36 x37 x38 x39 x40 x41 x42 x43 x44 x45 x46 x47 x48 x49 x50 x51
- x52 x53 x54 x55 x56 x57 x58 x59 x60 x61 x62 x63 x64 x65 x66 x67 x68 x69 x70
- x71 x72 x73 x74 x75 x76 x77 x78 x79 x80 x81 x82 x83 x84 x85 x86 x87
- x88 : var TZ,
-Tbase TZ x89 = x49 + x59;
-Tbase TZ x90 = x50 + x60;
-Tbase TZ x91 = x51 + x61;
-Tbase TZ x92 = x52 + x62;
-Tbase TZ x93 = x53 + x63;
-Tbase TZ x94 = x54 + x64;
-Tbase TZ x95 = x55 + x65;
-Tbase TZ x96 = x56 + x66;
-Tbase TZ x97 = x57 + x67;
-Tbase TZ x98 = x58 + x68;
-Tbase TZ x99 = x98 * x98;
-Tbase TZ x100 = 0x2;
-Tbase TZ x101 = x97 * x100;
-Tbase TZ x102 = x89 * x101;
-Tbase TZ x103 = 0x2;
-Tbase TZ x104 = x96 * x103;
-Tbase TZ x105 = x90 * x104;
-Tbase TZ x106 = 0x2;
-Tbase TZ x107 = x95 * x106;
-Tbase TZ x108 = x91 * x107;
-Tbase TZ x109 = 0x2;
-Tbase TZ x110 = x94 * x109;
-Tbase TZ x111 = x92 * x110;
-Tbase TZ x112 = 0x2;
-Tbase TZ x113 = x93 * x112;
-Tbase TZ x114 = x93 * x113;
-Tbase TZ x115 = 0x2;
-Tbase TZ x116 = x92 * x115;
-Tbase TZ x117 = x94 * x116;
-Tbase TZ x118 = 0x2;
-Tbase TZ x119 = x91 * x118;
-Tbase TZ x120 = x95 * x119;
-Tbase TZ x121 = 0x2;
-Tbase TZ x122 = x90 * x121;
-Tbase TZ x123 = x96 * x122;
-Tbase TZ x124 = 0x2;
-Tbase TZ x125 = x89 * x124;
-Tbase TZ x126 = x97 * x125;
-Tbase TZ x127 = x123 + x126;
-Tbase TZ x128 = x120 + x127;
-Tbase TZ x129 = x117 + x128;
-Tbase TZ x130 = x114 + x129;
-Tbase TZ x131 = x111 + x130;
-Tbase TZ x132 = x108 + x131;
-Tbase TZ x133 = x105 + x132;
-Tbase TZ x134 = x102 + x133;
-Tbase TZ x135 = 0x9;
-Tbase TZ x136 = x135 * x134;
-Tbase TZ x137 = x99 + x136;
-Tbase TZ x138 = 0x1a;
-Tbase TZ x139 = x137 >> x138;
-Tbase TZ x140 = x97 * x98;
-Tbase TZ x141 = x98 * x97;
-Tbase TZ x142 = x140 + x141;
-Tbase TZ x143 = x89 * x96;
-Tbase TZ x144 = x90 * x95;
-Tbase TZ x145 = x91 * x94;
-Tbase TZ x146 = x92 * x93;
-Tbase TZ x147 = x93 * x92;
-Tbase TZ x148 = x94 * x91;
-Tbase TZ x149 = x95 * x90;
-Tbase TZ x150 = x96 * x89;
-Tbase TZ x151 = x149 + x150;
-Tbase TZ x152 = x148 + x151;
-Tbase TZ x153 = x147 + x152;
-Tbase TZ x154 = x146 + x153;
-Tbase TZ x155 = x145 + x154;
-Tbase TZ x156 = x144 + x155;
-Tbase TZ x157 = x143 + x156;
-Tbase TZ x158 = 0x9;
-Tbase TZ x159 = x158 * x157;
-Tbase TZ x160 = x142 + x159;
-Tbase TZ x161 = x139 + x160;
-Tbase TZ x162 = 0x19;
-Tbase TZ x163 = x161 >> x162;
-Tbase TZ x164 = x96 * x98;
-Tbase TZ x165 = 0x2;
-Tbase TZ x166 = x97 * x165;
-Tbase TZ x167 = x97 * x166;
-Tbase TZ x168 = x98 * x96;
-Tbase TZ x169 = x167 + x168;
-Tbase TZ x170 = x164 + x169;
-Tbase TZ x171 = x89 * x95;
-Tbase TZ x172 = x90 * x94;
-Tbase TZ x173 = x91 * x93;
-Tbase TZ x174 = x92 * x92;
-Tbase TZ x175 = x93 * x91;
-Tbase TZ x176 = x94 * x90;
-Tbase TZ x177 = x95 * x89;
-Tbase TZ x178 = x176 + x177;
-Tbase TZ x179 = x175 + x178;
-Tbase TZ x180 = x174 + x179;
-Tbase TZ x181 = x173 + x180;
-Tbase TZ x182 = x172 + x181;
-Tbase TZ x183 = x171 + x182;
-Tbase TZ x184 = 0x9;
-Tbase TZ x185 = x184 * x183;
-Tbase TZ x186 = x170 + x185;
-Tbase TZ x187 = x163 + x186;
-Tbase TZ x188 = 0x19;
-Tbase TZ x189 = x187 >> x188;
-Tbase TZ x190 = x95 * x98;
-Tbase TZ x191 = 0x2;
-Tbase TZ x192 = x97 * x191;
-Tbase TZ x193 = x96 * x192;
-Tbase TZ x194 = 0x2;
-Tbase TZ x195 = x96 * x194;
-Tbase TZ x196 = x97 * x195;
-Tbase TZ x197 = x98 * x95;
-Tbase TZ x198 = x196 + x197;
-Tbase TZ x199 = x193 + x198;
-Tbase TZ x200 = x190 + x199;
-Tbase TZ x201 = x89 * x94;
-Tbase TZ x202 = x90 * x93;
-Tbase TZ x203 = x91 * x92;
-Tbase TZ x204 = x92 * x91;
-Tbase TZ x205 = x93 * x90;
-Tbase TZ x206 = x94 * x89;
-Tbase TZ x207 = x205 + x206;
-Tbase TZ x208 = x204 + x207;
-Tbase TZ x209 = x203 + x208;
-Tbase TZ x210 = x202 + x209;
-Tbase TZ x211 = x201 + x210;
-Tbase TZ x212 = 0x9;
-Tbase TZ x213 = x212 * x211;
-Tbase TZ x214 = x200 + x213;
-Tbase TZ x215 = x189 + x214;
-Tbase TZ x216 = 0x19;
-Tbase TZ x217 = x215 >> x216;
-Tbase TZ x218 = x94 * x98;
-Tbase TZ x219 = 0x2;
-Tbase TZ x220 = x97 * x219;
-Tbase TZ x221 = x95 * x220;
-Tbase TZ x222 = 0x2;
-Tbase TZ x223 = x96 * x222;
-Tbase TZ x224 = x96 * x223;
-Tbase TZ x225 = 0x2;
-Tbase TZ x226 = x95 * x225;
-Tbase TZ x227 = x97 * x226;
-Tbase TZ x228 = x98 * x94;
-Tbase TZ x229 = x227 + x228;
-Tbase TZ x230 = x224 + x229;
-Tbase TZ x231 = x221 + x230;
-Tbase TZ x232 = x218 + x231;
-Tbase TZ x233 = x89 * x93;
-Tbase TZ x234 = x90 * x92;
-Tbase TZ x235 = x91 * x91;
-Tbase TZ x236 = x92 * x90;
-Tbase TZ x237 = x93 * x89;
-Tbase TZ x238 = x236 + x237;
-Tbase TZ x239 = x235 + x238;
-Tbase TZ x240 = x234 + x239;
-Tbase TZ x241 = x233 + x240;
-Tbase TZ x242 = 0x9;
-Tbase TZ x243 = x242 * x241;
-Tbase TZ x244 = x232 + x243;
-Tbase TZ x245 = x217 + x244;
-Tbase TZ x246 = 0x19;
-Tbase TZ x247 = x245 >> x246;
-Tbase TZ x248 = x93 * x98;
-Tbase TZ x249 = 0x2;
-Tbase TZ x250 = x97 * x249;
-Tbase TZ x251 = x94 * x250;
-Tbase TZ x252 = 0x2;
-Tbase TZ x253 = x96 * x252;
-Tbase TZ x254 = x95 * x253;
-Tbase TZ x255 = 0x2;
-Tbase TZ x256 = x95 * x255;
-Tbase TZ x257 = x96 * x256;
-Tbase TZ x258 = 0x2;
-Tbase TZ x259 = x94 * x258;
-Tbase TZ x260 = x97 * x259;
-Tbase TZ x261 = x98 * x93;
-Tbase TZ x262 = x260 + x261;
-Tbase TZ x263 = x257 + x262;
-Tbase TZ x264 = x254 + x263;
-Tbase TZ x265 = x251 + x264;
-Tbase TZ x266 = x248 + x265;
-Tbase TZ x267 = x89 * x92;
-Tbase TZ x268 = x90 * x91;
-Tbase TZ x269 = x91 * x90;
-Tbase TZ x270 = x92 * x89;
-Tbase TZ x271 = x269 + x270;
-Tbase TZ x272 = x268 + x271;
-Tbase TZ x273 = x267 + x272;
-Tbase TZ x274 = 0x9;
-Tbase TZ x275 = x274 * x273;
-Tbase TZ x276 = x266 + x275;
-Tbase TZ x277 = x247 + x276;
-Tbase TZ x278 = 0x19;
-Tbase TZ x279 = x277 >> x278;
-Tbase TZ x280 = x92 * x98;
-Tbase TZ x281 = 0x2;
-Tbase TZ x282 = x97 * x281;
-Tbase TZ x283 = x93 * x282;
-Tbase TZ x284 = 0x2;
-Tbase TZ x285 = x96 * x284;
-Tbase TZ x286 = x94 * x285;
-Tbase TZ x287 = 0x2;
-Tbase TZ x288 = x95 * x287;
-Tbase TZ x289 = x95 * x288;
-Tbase TZ x290 = 0x2;
-Tbase TZ x291 = x94 * x290;
-Tbase TZ x292 = x96 * x291;
-Tbase TZ x293 = 0x2;
-Tbase TZ x294 = x93 * x293;
-Tbase TZ x295 = x97 * x294;
-Tbase TZ x296 = x98 * x92;
-Tbase TZ x297 = x295 + x296;
-Tbase TZ x298 = x292 + x297;
-Tbase TZ x299 = x289 + x298;
-Tbase TZ x300 = x286 + x299;
-Tbase TZ x301 = x283 + x300;
-Tbase TZ x302 = x280 + x301;
-Tbase TZ x303 = x89 * x91;
-Tbase TZ x304 = x90 * x90;
-Tbase TZ x305 = x91 * x89;
-Tbase TZ x306 = x304 + x305;
-Tbase TZ x307 = x303 + x306;
-Tbase TZ x308 = 0x9;
-Tbase TZ x309 = x308 * x307;
-Tbase TZ x310 = x302 + x309;
-Tbase TZ x311 = x279 + x310;
-Tbase TZ x312 = 0x19;
-Tbase TZ x313 = x311 >> x312;
-Tbase TZ x314 = x91 * x98;
-Tbase TZ x315 = 0x2;
-Tbase TZ x316 = x97 * x315;
-Tbase TZ x317 = x92 * x316;
-Tbase TZ x318 = 0x2;
-Tbase TZ x319 = x96 * x318;
-Tbase TZ x320 = x93 * x319;
-Tbase TZ x321 = 0x2;
-Tbase TZ x322 = x95 * x321;
-Tbase TZ x323 = x94 * x322;
-Tbase TZ x324 = 0x2;
-Tbase TZ x325 = x94 * x324;
-Tbase TZ x326 = x95 * x325;
-Tbase TZ x327 = 0x2;
-Tbase TZ x328 = x93 * x327;
-Tbase TZ x329 = x96 * x328;
-Tbase TZ x330 = 0x2;
-Tbase TZ x331 = x92 * x330;
-Tbase TZ x332 = x97 * x331;
-Tbase TZ x333 = x98 * x91;
-Tbase TZ x334 = x332 + x333;
-Tbase TZ x335 = x329 + x334;
-Tbase TZ x336 = x326 + x335;
-Tbase TZ x337 = x323 + x336;
-Tbase TZ x338 = x320 + x337;
-Tbase TZ x339 = x317 + x338;
-Tbase TZ x340 = x314 + x339;
-Tbase TZ x341 = x89 * x90;
-Tbase TZ x342 = x90 * x89;
-Tbase TZ x343 = x341 + x342;
-Tbase TZ x344 = 0x9;
-Tbase TZ x345 = x344 * x343;
-Tbase TZ x346 = x340 + x345;
-Tbase TZ x347 = x313 + x346;
-Tbase TZ x348 = 0x19;
-Tbase TZ x349 = x347 >> x348;
-Tbase TZ x350 = x90 * x98;
-Tbase TZ x351 = 0x2;
-Tbase TZ x352 = x97 * x351;
-Tbase TZ x353 = x91 * x352;
-Tbase TZ x354 = 0x2;
-Tbase TZ x355 = x96 * x354;
-Tbase TZ x356 = x92 * x355;
-Tbase TZ x357 = 0x2;
-Tbase TZ x358 = x95 * x357;
-Tbase TZ x359 = x93 * x358;
-Tbase TZ x360 = 0x2;
-Tbase TZ x361 = x94 * x360;
-Tbase TZ x362 = x94 * x361;
-Tbase TZ x363 = 0x2;
-Tbase TZ x364 = x93 * x363;
-Tbase TZ x365 = x95 * x364;
-Tbase TZ x366 = 0x2;
-Tbase TZ x367 = x92 * x366;
-Tbase TZ x368 = x96 * x367;
-Tbase TZ x369 = 0x2;
-Tbase TZ x370 = x91 * x369;
-Tbase TZ x371 = x97 * x370;
-Tbase TZ x372 = x98 * x90;
-Tbase TZ x373 = x371 + x372;
-Tbase TZ x374 = x368 + x373;
-Tbase TZ x375 = x365 + x374;
-Tbase TZ x376 = x362 + x375;
-Tbase TZ x377 = x359 + x376;
-Tbase TZ x378 = x356 + x377;
-Tbase TZ x379 = x353 + x378;
-Tbase TZ x380 = x350 + x379;
-Tbase TZ x381 = x89 * x89;
-Tbase TZ x382 = 0x9;
-Tbase TZ x383 = x382 * x381;
-Tbase TZ x384 = x380 + x383;
-Tbase TZ x385 = x349 + x384;
-Tbase TZ x386 = 0x19;
-Tbase TZ x387 = x385 >> x386;
-Tbase TZ x388 = x89 * x98;
-Tbase TZ x389 = 0x2;
-Tbase TZ x390 = x97 * x389;
-Tbase TZ x391 = x90 * x390;
-Tbase TZ x392 = 0x2;
-Tbase TZ x393 = x96 * x392;
-Tbase TZ x394 = x91 * x393;
-Tbase TZ x395 = 0x2;
-Tbase TZ x396 = x95 * x395;
-Tbase TZ x397 = x92 * x396;
-Tbase TZ x398 = 0x2;
-Tbase TZ x399 = x94 * x398;
-Tbase TZ x400 = x93 * x399;
-Tbase TZ x401 = 0x2;
-Tbase TZ x402 = x93 * x401;
-Tbase TZ x403 = x94 * x402;
-Tbase TZ x404 = 0x2;
-Tbase TZ x405 = x92 * x404;
-Tbase TZ x406 = x95 * x405;
-Tbase TZ x407 = 0x2;
-Tbase TZ x408 = x91 * x407;
-Tbase TZ x409 = x96 * x408;
-Tbase TZ x410 = 0x2;
-Tbase TZ x411 = x90 * x410;
-Tbase TZ x412 = x97 * x411;
-Tbase TZ x413 = x98 * x89;
-Tbase TZ x414 = x412 + x413;
-Tbase TZ x415 = x409 + x414;
-Tbase TZ x416 = x406 + x415;
-Tbase TZ x417 = x403 + x416;
-Tbase TZ x418 = x400 + x417;
-Tbase TZ x419 = x397 + x418;
-Tbase TZ x420 = x394 + x419;
-Tbase TZ x421 = x391 + x420;
-Tbase TZ x422 = x388 + x421;
-Tbase TZ x423 = x387 + x422;
-Tbase TZ x424 = 0x19;
-Tbase TZ x425 = x423 >> x424;
-Tbase TZ x426 = 0x9;
-Tbase TZ x427 = x426 * x425;
-Tbase TZ x428 = 0x3ffffff;
-Tbase TZ x429 = x137 & x428;
-Tbase TZ x430 = x427 + x429;
-Tbase TZ x431 = 0x1a;
-Tbase TZ x432 = x430 >> x431;
-Tbase TZ x433 = 0x1ffffff;
-Tbase TZ x434 = x161 & x433;
-Tbase TZ x435 = x432 + x434;
-Tbase TZ x436 = 0x1ffffff;
-Tbase TZ x437 = x423 & x436;
-Tbase TZ x438 = 0x1ffffff;
-Tbase TZ x439 = x385 & x438;
-Tbase TZ x440 = 0x1ffffff;
-Tbase TZ x441 = x347 & x440;
-Tbase TZ x442 = 0x1ffffff;
-Tbase TZ x443 = x311 & x442;
-Tbase TZ x444 = 0x1ffffff;
-Tbase TZ x445 = x277 & x444;
-Tbase TZ x446 = 0x1ffffff;
-Tbase TZ x447 = x245 & x446;
-Tbase TZ x448 = 0x1ffffff;
-Tbase TZ x449 = x215 & x448;
-Tbase TZ x450 = 0x19;
-Tbase TZ x451 = x435 >> x450;
-Tbase TZ x452 = 0x1ffffff;
-Tbase TZ x453 = x187 & x452;
-Tbase TZ x454 = x451 + x453;
-Tbase TZ x455 = 0x1ffffff;
-Tbase TZ x456 = x435 & x455;
-Tbase TZ x457 = 0x3ffffff;
-Tbase TZ x458 = x430 & x457;
-Tbase TZ x459 = 0x3fffffe;
-Tbase TZ x460 = x459 + x49;
-Tbase TZ x461 = x460 - x59;
-Tbase TZ x462 = 0x3fffffe;
-Tbase TZ x463 = x462 + x50;
-Tbase TZ x464 = x463 - x60;
-Tbase TZ x465 = 0x3fffffe;
-Tbase TZ x466 = x465 + x51;
-Tbase TZ x467 = x466 - x61;
-Tbase TZ x468 = 0x3fffffe;
-Tbase TZ x469 = x468 + x52;
-Tbase TZ x470 = x469 - x62;
-Tbase TZ x471 = 0x3fffffe;
-Tbase TZ x472 = x471 + x53;
-Tbase TZ x473 = x472 - x63;
-Tbase TZ x474 = 0x3fffffe;
-Tbase TZ x475 = x474 + x54;
-Tbase TZ x476 = x475 - x64;
-Tbase TZ x477 = 0x3fffffe;
-Tbase TZ x478 = x477 + x55;
-Tbase TZ x479 = x478 - x65;
-Tbase TZ x480 = 0x3fffffe;
-Tbase TZ x481 = x480 + x56;
-Tbase TZ x482 = x481 - x66;
-Tbase TZ x483 = 0x3fffffe;
-Tbase TZ x484 = x483 + x57;
-Tbase TZ x485 = x484 - x67;
-Tbase TZ x486 = 0x7ffffee;
-Tbase TZ x487 = x486 + x58;
-Tbase TZ x488 = x487 - x68;
-Tbase TZ x489 = x488 * x488;
-Tbase TZ x490 = 0x2;
-Tbase TZ x491 = x485 * x490;
-Tbase TZ x492 = x461 * x491;
-Tbase TZ x493 = 0x2;
-Tbase TZ x494 = x482 * x493;
-Tbase TZ x495 = x464 * x494;
-Tbase TZ x496 = 0x2;
-Tbase TZ x497 = x479 * x496;
-Tbase TZ x498 = x467 * x497;
-Tbase TZ x499 = 0x2;
-Tbase TZ x500 = x476 * x499;
-Tbase TZ x501 = x470 * x500;
-Tbase TZ x502 = 0x2;
-Tbase TZ x503 = x473 * x502;
-Tbase TZ x504 = x473 * x503;
-Tbase TZ x505 = 0x2;
-Tbase TZ x506 = x470 * x505;
-Tbase TZ x507 = x476 * x506;
-Tbase TZ x508 = 0x2;
-Tbase TZ x509 = x467 * x508;
-Tbase TZ x510 = x479 * x509;
-Tbase TZ x511 = 0x2;
-Tbase TZ x512 = x464 * x511;
-Tbase TZ x513 = x482 * x512;
-Tbase TZ x514 = 0x2;
-Tbase TZ x515 = x461 * x514;
-Tbase TZ x516 = x485 * x515;
-Tbase TZ x517 = x513 + x516;
-Tbase TZ x518 = x510 + x517;
-Tbase TZ x519 = x507 + x518;
-Tbase TZ x520 = x504 + x519;
-Tbase TZ x521 = x501 + x520;
-Tbase TZ x522 = x498 + x521;
-Tbase TZ x523 = x495 + x522;
-Tbase TZ x524 = x492 + x523;
-Tbase TZ x525 = 0x9;
-Tbase TZ x526 = x525 * x524;
-Tbase TZ x527 = x489 + x526;
-Tbase TZ x528 = 0x1a;
-Tbase TZ x529 = x527 >> x528;
-Tbase TZ x530 = x485 * x488;
-Tbase TZ x531 = x488 * x485;
-Tbase TZ x532 = x530 + x531;
-Tbase TZ x533 = x461 * x482;
-Tbase TZ x534 = x464 * x479;
-Tbase TZ x535 = x467 * x476;
-Tbase TZ x536 = x470 * x473;
-Tbase TZ x537 = x473 * x470;
-Tbase TZ x538 = x476 * x467;
-Tbase TZ x539 = x479 * x464;
-Tbase TZ x540 = x482 * x461;
-Tbase TZ x541 = x539 + x540;
-Tbase TZ x542 = x538 + x541;
-Tbase TZ x543 = x537 + x542;
-Tbase TZ x544 = x536 + x543;
-Tbase TZ x545 = x535 + x544;
-Tbase TZ x546 = x534 + x545;
-Tbase TZ x547 = x533 + x546;
-Tbase TZ x548 = 0x9;
-Tbase TZ x549 = x548 * x547;
-Tbase TZ x550 = x532 + x549;
-Tbase TZ x551 = x529 + x550;
-Tbase TZ x552 = 0x19;
-Tbase TZ x553 = x551 >> x552;
-Tbase TZ x554 = x482 * x488;
-Tbase TZ x555 = 0x2;
-Tbase TZ x556 = x485 * x555;
-Tbase TZ x557 = x485 * x556;
-Tbase TZ x558 = x488 * x482;
-Tbase TZ x559 = x557 + x558;
-Tbase TZ x560 = x554 + x559;
-Tbase TZ x561 = x461 * x479;
-Tbase TZ x562 = x464 * x476;
-Tbase TZ x563 = x467 * x473;
-Tbase TZ x564 = x470 * x470;
-Tbase TZ x565 = x473 * x467;
-Tbase TZ x566 = x476 * x464;
-Tbase TZ x567 = x479 * x461;
-Tbase TZ x568 = x566 + x567;
-Tbase TZ x569 = x565 + x568;
-Tbase TZ x570 = x564 + x569;
-Tbase TZ x571 = x563 + x570;
-Tbase TZ x572 = x562 + x571;
-Tbase TZ x573 = x561 + x572;
-Tbase TZ x574 = 0x9;
-Tbase TZ x575 = x574 * x573;
-Tbase TZ x576 = x560 + x575;
-Tbase TZ x577 = x553 + x576;
-Tbase TZ x578 = 0x19;
-Tbase TZ x579 = x577 >> x578;
-Tbase TZ x580 = x479 * x488;
-Tbase TZ x581 = 0x2;
-Tbase TZ x582 = x485 * x581;
-Tbase TZ x583 = x482 * x582;
-Tbase TZ x584 = 0x2;
-Tbase TZ x585 = x482 * x584;
-Tbase TZ x586 = x485 * x585;
-Tbase TZ x587 = x488 * x479;
-Tbase TZ x588 = x586 + x587;
-Tbase TZ x589 = x583 + x588;
-Tbase TZ x590 = x580 + x589;
-Tbase TZ x591 = x461 * x476;
-Tbase TZ x592 = x464 * x473;
-Tbase TZ x593 = x467 * x470;
-Tbase TZ x594 = x470 * x467;
-Tbase TZ x595 = x473 * x464;
-Tbase TZ x596 = x476 * x461;
-Tbase TZ x597 = x595 + x596;
-Tbase TZ x598 = x594 + x597;
-Tbase TZ x599 = x593 + x598;
-Tbase TZ x600 = x592 + x599;
-Tbase TZ x601 = x591 + x600;
-Tbase TZ x602 = 0x9;
-Tbase TZ x603 = x602 * x601;
-Tbase TZ x604 = x590 + x603;
-Tbase TZ x605 = x579 + x604;
-Tbase TZ x606 = 0x19;
-Tbase TZ x607 = x605 >> x606;
-Tbase TZ x608 = x476 * x488;
-Tbase TZ x609 = 0x2;
-Tbase TZ x610 = x485 * x609;
-Tbase TZ x611 = x479 * x610;
-Tbase TZ x612 = 0x2;
-Tbase TZ x613 = x482 * x612;
-Tbase TZ x614 = x482 * x613;
-Tbase TZ x615 = 0x2;
-Tbase TZ x616 = x479 * x615;
-Tbase TZ x617 = x485 * x616;
-Tbase TZ x618 = x488 * x476;
-Tbase TZ x619 = x617 + x618;
-Tbase TZ x620 = x614 + x619;
-Tbase TZ x621 = x611 + x620;
-Tbase TZ x622 = x608 + x621;
-Tbase TZ x623 = x461 * x473;
-Tbase TZ x624 = x464 * x470;
-Tbase TZ x625 = x467 * x467;
-Tbase TZ x626 = x470 * x464;
-Tbase TZ x627 = x473 * x461;
-Tbase TZ x628 = x626 + x627;
-Tbase TZ x629 = x625 + x628;
-Tbase TZ x630 = x624 + x629;
-Tbase TZ x631 = x623 + x630;
-Tbase TZ x632 = 0x9;
-Tbase TZ x633 = x632 * x631;
-Tbase TZ x634 = x622 + x633;
-Tbase TZ x635 = x607 + x634;
-Tbase TZ x636 = 0x19;
-Tbase TZ x637 = x635 >> x636;
-Tbase TZ x638 = x473 * x488;
-Tbase TZ x639 = 0x2;
-Tbase TZ x640 = x485 * x639;
-Tbase TZ x641 = x476 * x640;
-Tbase TZ x642 = 0x2;
-Tbase TZ x643 = x482 * x642;
-Tbase TZ x644 = x479 * x643;
-Tbase TZ x645 = 0x2;
-Tbase TZ x646 = x479 * x645;
-Tbase TZ x647 = x482 * x646;
-Tbase TZ x648 = 0x2;
-Tbase TZ x649 = x476 * x648;
-Tbase TZ x650 = x485 * x649;
-Tbase TZ x651 = x488 * x473;
-Tbase TZ x652 = x650 + x651;
-Tbase TZ x653 = x647 + x652;
-Tbase TZ x654 = x644 + x653;
-Tbase TZ x655 = x641 + x654;
-Tbase TZ x656 = x638 + x655;
-Tbase TZ x657 = x461 * x470;
-Tbase TZ x658 = x464 * x467;
-Tbase TZ x659 = x467 * x464;
-Tbase TZ x660 = x470 * x461;
-Tbase TZ x661 = x659 + x660;
-Tbase TZ x662 = x658 + x661;
-Tbase TZ x663 = x657 + x662;
-Tbase TZ x664 = 0x9;
-Tbase TZ x665 = x664 * x663;
-Tbase TZ x666 = x656 + x665;
-Tbase TZ x667 = x637 + x666;
-Tbase TZ x668 = 0x19;
-Tbase TZ x669 = x667 >> x668;
-Tbase TZ x670 = x470 * x488;
-Tbase TZ x671 = 0x2;
-Tbase TZ x672 = x485 * x671;
-Tbase TZ x673 = x473 * x672;
-Tbase TZ x674 = 0x2;
-Tbase TZ x675 = x482 * x674;
-Tbase TZ x676 = x476 * x675;
-Tbase TZ x677 = 0x2;
-Tbase TZ x678 = x479 * x677;
-Tbase TZ x679 = x479 * x678;
-Tbase TZ x680 = 0x2;
-Tbase TZ x681 = x476 * x680;
-Tbase TZ x682 = x482 * x681;
-Tbase TZ x683 = 0x2;
-Tbase TZ x684 = x473 * x683;
-Tbase TZ x685 = x485 * x684;
-Tbase TZ x686 = x488 * x470;
-Tbase TZ x687 = x685 + x686;
-Tbase TZ x688 = x682 + x687;
-Tbase TZ x689 = x679 + x688;
-Tbase TZ x690 = x676 + x689;
-Tbase TZ x691 = x673 + x690;
-Tbase TZ x692 = x670 + x691;
-Tbase TZ x693 = x461 * x467;
-Tbase TZ x694 = x464 * x464;
-Tbase TZ x695 = x467 * x461;
-Tbase TZ x696 = x694 + x695;
-Tbase TZ x697 = x693 + x696;
-Tbase TZ x698 = 0x9;
-Tbase TZ x699 = x698 * x697;
-Tbase TZ x700 = x692 + x699;
-Tbase TZ x701 = x669 + x700;
-Tbase TZ x702 = 0x19;
-Tbase TZ x703 = x701 >> x702;
-Tbase TZ x704 = x467 * x488;
-Tbase TZ x705 = 0x2;
-Tbase TZ x706 = x485 * x705;
-Tbase TZ x707 = x470 * x706;
-Tbase TZ x708 = 0x2;
-Tbase TZ x709 = x482 * x708;
-Tbase TZ x710 = x473 * x709;
-Tbase TZ x711 = 0x2;
-Tbase TZ x712 = x479 * x711;
-Tbase TZ x713 = x476 * x712;
-Tbase TZ x714 = 0x2;
-Tbase TZ x715 = x476 * x714;
-Tbase TZ x716 = x479 * x715;
-Tbase TZ x717 = 0x2;
-Tbase TZ x718 = x473 * x717;
-Tbase TZ x719 = x482 * x718;
-Tbase TZ x720 = 0x2;
-Tbase TZ x721 = x470 * x720;
-Tbase TZ x722 = x485 * x721;
-Tbase TZ x723 = x488 * x467;
-Tbase TZ x724 = x722 + x723;
-Tbase TZ x725 = x719 + x724;
-Tbase TZ x726 = x716 + x725;
-Tbase TZ x727 = x713 + x726;
-Tbase TZ x728 = x710 + x727;
-Tbase TZ x729 = x707 + x728;
-Tbase TZ x730 = x704 + x729;
-Tbase TZ x731 = x461 * x464;
-Tbase TZ x732 = x464 * x461;
-Tbase TZ x733 = x731 + x732;
-Tbase TZ x734 = 0x9;
-Tbase TZ x735 = x734 * x733;
-Tbase TZ x736 = x730 + x735;
-Tbase TZ x737 = x703 + x736;
-Tbase TZ x738 = 0x19;
-Tbase TZ x739 = x737 >> x738;
-Tbase TZ x740 = x464 * x488;
-Tbase TZ x741 = 0x2;
-Tbase TZ x742 = x485 * x741;
-Tbase TZ x743 = x467 * x742;
-Tbase TZ x744 = 0x2;
-Tbase TZ x745 = x482 * x744;
-Tbase TZ x746 = x470 * x745;
-Tbase TZ x747 = 0x2;
-Tbase TZ x748 = x479 * x747;
-Tbase TZ x749 = x473 * x748;
-Tbase TZ x750 = 0x2;
-Tbase TZ x751 = x476 * x750;
-Tbase TZ x752 = x476 * x751;
-Tbase TZ x753 = 0x2;
-Tbase TZ x754 = x473 * x753;
-Tbase TZ x755 = x479 * x754;
-Tbase TZ x756 = 0x2;
-Tbase TZ x757 = x470 * x756;
-Tbase TZ x758 = x482 * x757;
-Tbase TZ x759 = 0x2;
-Tbase TZ x760 = x467 * x759;
-Tbase TZ x761 = x485 * x760;
-Tbase TZ x762 = x488 * x464;
-Tbase TZ x763 = x761 + x762;
-Tbase TZ x764 = x758 + x763;
-Tbase TZ x765 = x755 + x764;
-Tbase TZ x766 = x752 + x765;
-Tbase TZ x767 = x749 + x766;
-Tbase TZ x768 = x746 + x767;
-Tbase TZ x769 = x743 + x768;
-Tbase TZ x770 = x740 + x769;
-Tbase TZ x771 = x461 * x461;
-Tbase TZ x772 = 0x9;
-Tbase TZ x773 = x772 * x771;
-Tbase TZ x774 = x770 + x773;
-Tbase TZ x775 = x739 + x774;
-Tbase TZ x776 = 0x19;
-Tbase TZ x777 = x775 >> x776;
-Tbase TZ x778 = x461 * x488;
-Tbase TZ x779 = 0x2;
-Tbase TZ x780 = x485 * x779;
-Tbase TZ x781 = x464 * x780;
-Tbase TZ x782 = 0x2;
-Tbase TZ x783 = x482 * x782;
-Tbase TZ x784 = x467 * x783;
-Tbase TZ x785 = 0x2;
-Tbase TZ x786 = x479 * x785;
-Tbase TZ x787 = x470 * x786;
-Tbase TZ x788 = 0x2;
-Tbase TZ x789 = x476 * x788;
-Tbase TZ x790 = x473 * x789;
-Tbase TZ x791 = 0x2;
-Tbase TZ x792 = x473 * x791;
-Tbase TZ x793 = x476 * x792;
-Tbase TZ x794 = 0x2;
-Tbase TZ x795 = x470 * x794;
-Tbase TZ x796 = x479 * x795;
-Tbase TZ x797 = 0x2;
-Tbase TZ x798 = x467 * x797;
-Tbase TZ x799 = x482 * x798;
-Tbase TZ x800 = 0x2;
-Tbase TZ x801 = x464 * x800;
-Tbase TZ x802 = x485 * x801;
-Tbase TZ x803 = x488 * x461;
-Tbase TZ x804 = x802 + x803;
-Tbase TZ x805 = x799 + x804;
-Tbase TZ x806 = x796 + x805;
-Tbase TZ x807 = x793 + x806;
-Tbase TZ x808 = x790 + x807;
-Tbase TZ x809 = x787 + x808;
-Tbase TZ x810 = x784 + x809;
-Tbase TZ x811 = x781 + x810;
-Tbase TZ x812 = x778 + x811;
-Tbase TZ x813 = x777 + x812;
-Tbase TZ x814 = 0x19;
-Tbase TZ x815 = x813 >> x814;
-Tbase TZ x816 = 0x9;
-Tbase TZ x817 = x816 * x815;
-Tbase TZ x818 = 0x3ffffff;
-Tbase TZ x819 = x527 & x818;
-Tbase TZ x820 = x817 + x819;
-Tbase TZ x821 = 0x1a;
-Tbase TZ x822 = x820 >> x821;
-Tbase TZ x823 = 0x1ffffff;
-Tbase TZ x824 = x551 & x823;
-Tbase TZ x825 = x822 + x824;
-Tbase TZ x826 = 0x1ffffff;
-Tbase TZ x827 = x813 & x826;
-Tbase TZ x828 = 0x1ffffff;
-Tbase TZ x829 = x775 & x828;
-Tbase TZ x830 = 0x1ffffff;
-Tbase TZ x831 = x737 & x830;
-Tbase TZ x832 = 0x1ffffff;
-Tbase TZ x833 = x701 & x832;
-Tbase TZ x834 = 0x1ffffff;
-Tbase TZ x835 = x667 & x834;
-Tbase TZ x836 = 0x1ffffff;
-Tbase TZ x837 = x635 & x836;
-Tbase TZ x838 = 0x1ffffff;
-Tbase TZ x839 = x605 & x838;
-Tbase TZ x840 = 0x19;
-Tbase TZ x841 = x825 >> x840;
-Tbase TZ x842 = 0x1ffffff;
-Tbase TZ x843 = x577 & x842;
-Tbase TZ x844 = x841 + x843;
-Tbase TZ x845 = 0x1ffffff;
-Tbase TZ x846 = x825 & x845;
-Tbase TZ x847 = 0x3ffffff;
-Tbase TZ x848 = x820 & x847;
-Tbase TZ x849 = 0x3fffffe;
-Tbase TZ x850 = x849 + x437;
-Tbase TZ x851 = x850 - x827;
-Tbase TZ x852 = 0x3fffffe;
-Tbase TZ x853 = x852 + x439;
-Tbase TZ x854 = x853 - x829;
-Tbase TZ x855 = 0x3fffffe;
-Tbase TZ x856 = x855 + x441;
-Tbase TZ x857 = x856 - x831;
-Tbase TZ x858 = 0x3fffffe;
-Tbase TZ x859 = x858 + x443;
-Tbase TZ x860 = x859 - x833;
-Tbase TZ x861 = 0x3fffffe;
-Tbase TZ x862 = x861 + x445;
-Tbase TZ x863 = x862 - x835;
-Tbase TZ x864 = 0x3fffffe;
-Tbase TZ x865 = x864 + x447;
-Tbase TZ x866 = x865 - x837;
-Tbase TZ x867 = 0x3fffffe;
-Tbase TZ x868 = x867 + x449;
-Tbase TZ x869 = x868 - x839;
-Tbase TZ x870 = 0x3fffffe;
-Tbase TZ x871 = x870 + x454;
-Tbase TZ x872 = x871 - x844;
-Tbase TZ x873 = 0x3fffffe;
-Tbase TZ x874 = x873 + x456;
-Tbase TZ x875 = x874 - x846;
-Tbase TZ x876 = 0x7ffffee;
-Tbase TZ x877 = x876 + x458;
-Tbase TZ x878 = x877 - x848;
-Tbase TZ x879 = x69 + x79;
-Tbase TZ x880 = x70 + x80;
-Tbase TZ x881 = x71 + x81;
-Tbase TZ x882 = x72 + x82;
-Tbase TZ x883 = x73 + x83;
-Tbase TZ x884 = x74 + x84;
-Tbase TZ x885 = x75 + x85;
-Tbase TZ x886 = x76 + x86;
-Tbase TZ x887 = x77 + x87;
-Tbase TZ x888 = x78 + x88;
-Tbase TZ x889 = 0x3fffffe;
-Tbase TZ x890 = x889 + x69;
-Tbase TZ x891 = x890 - x79;
-Tbase TZ x892 = 0x3fffffe;
-Tbase TZ x893 = x892 + x70;
-Tbase TZ x894 = x893 - x80;
-Tbase TZ x895 = 0x3fffffe;
-Tbase TZ x896 = x895 + x71;
-Tbase TZ x897 = x896 - x81;
-Tbase TZ x898 = 0x3fffffe;
-Tbase TZ x899 = x898 + x72;
-Tbase TZ x900 = x899 - x82;
-Tbase TZ x901 = 0x3fffffe;
-Tbase TZ x902 = x901 + x73;
-Tbase TZ x903 = x902 - x83;
-Tbase TZ x904 = 0x3fffffe;
-Tbase TZ x905 = x904 + x74;
-Tbase TZ x906 = x905 - x84;
-Tbase TZ x907 = 0x3fffffe;
-Tbase TZ x908 = x907 + x75;
-Tbase TZ x909 = x908 - x85;
-Tbase TZ x910 = 0x3fffffe;
-Tbase TZ x911 = x910 + x76;
-Tbase TZ x912 = x911 - x86;
-Tbase TZ x913 = 0x3fffffe;
-Tbase TZ x914 = x913 + x77;
-Tbase TZ x915 = x914 - x87;
-Tbase TZ x916 = 0x7ffffee;
-Tbase TZ x917 = x916 + x78;
-Tbase TZ x918 = x917 - x88;
-Tbase TZ x919 = x918 * x98;
-Tbase TZ x920 = 0x2;
-Tbase TZ x921 = x97 * x920;
-Tbase TZ x922 = x891 * x921;
-Tbase TZ x923 = 0x2;
-Tbase TZ x924 = x96 * x923;
-Tbase TZ x925 = x894 * x924;
-Tbase TZ x926 = 0x2;
-Tbase TZ x927 = x95 * x926;
-Tbase TZ x928 = x897 * x927;
-Tbase TZ x929 = 0x2;
-Tbase TZ x930 = x94 * x929;
-Tbase TZ x931 = x900 * x930;
-Tbase TZ x932 = 0x2;
-Tbase TZ x933 = x93 * x932;
-Tbase TZ x934 = x903 * x933;
-Tbase TZ x935 = 0x2;
-Tbase TZ x936 = x92 * x935;
-Tbase TZ x937 = x906 * x936;
-Tbase TZ x938 = 0x2;
-Tbase TZ x939 = x91 * x938;
-Tbase TZ x940 = x909 * x939;
-Tbase TZ x941 = 0x2;
-Tbase TZ x942 = x90 * x941;
-Tbase TZ x943 = x912 * x942;
-Tbase TZ x944 = 0x2;
-Tbase TZ x945 = x89 * x944;
-Tbase TZ x946 = x915 * x945;
-Tbase TZ x947 = x943 + x946;
-Tbase TZ x948 = x940 + x947;
-Tbase TZ x949 = x937 + x948;
-Tbase TZ x950 = x934 + x949;
-Tbase TZ x951 = x931 + x950;
-Tbase TZ x952 = x928 + x951;
-Tbase TZ x953 = x925 + x952;
-Tbase TZ x954 = x922 + x953;
-Tbase TZ x955 = 0x9;
-Tbase TZ x956 = x955 * x954;
-Tbase TZ x957 = x919 + x956;
-Tbase TZ x958 = 0x1a;
-Tbase TZ x959 = x957 >> x958;
-Tbase TZ x960 = x915 * x98;
-Tbase TZ x961 = x918 * x97;
-Tbase TZ x962 = x960 + x961;
-Tbase TZ x963 = x891 * x96;
-Tbase TZ x964 = x894 * x95;
-Tbase TZ x965 = x897 * x94;
-Tbase TZ x966 = x900 * x93;
-Tbase TZ x967 = x903 * x92;
-Tbase TZ x968 = x906 * x91;
-Tbase TZ x969 = x909 * x90;
-Tbase TZ x970 = x912 * x89;
-Tbase TZ x971 = x969 + x970;
-Tbase TZ x972 = x968 + x971;
-Tbase TZ x973 = x967 + x972;
-Tbase TZ x974 = x966 + x973;
-Tbase TZ x975 = x965 + x974;
-Tbase TZ x976 = x964 + x975;
-Tbase TZ x977 = x963 + x976;
-Tbase TZ x978 = 0x9;
-Tbase TZ x979 = x978 * x977;
-Tbase TZ x980 = x962 + x979;
-Tbase TZ x981 = x959 + x980;
-Tbase TZ x982 = 0x19;
-Tbase TZ x983 = x981 >> x982;
-Tbase TZ x984 = x912 * x98;
-Tbase TZ x985 = 0x2;
-Tbase TZ x986 = x97 * x985;
-Tbase TZ x987 = x915 * x986;
-Tbase TZ x988 = x918 * x96;
-Tbase TZ x989 = x987 + x988;
-Tbase TZ x990 = x984 + x989;
-Tbase TZ x991 = x891 * x95;
-Tbase TZ x992 = x894 * x94;
-Tbase TZ x993 = x897 * x93;
-Tbase TZ x994 = x900 * x92;
-Tbase TZ x995 = x903 * x91;
-Tbase TZ x996 = x906 * x90;
-Tbase TZ x997 = x909 * x89;
-Tbase TZ x998 = x996 + x997;
-Tbase TZ x999 = x995 + x998;
-Tbase TZ x1000 = x994 + x999;
-Tbase TZ x1001 = x993 + x1000;
-Tbase TZ x1002 = x992 + x1001;
-Tbase TZ x1003 = x991 + x1002;
-Tbase TZ x1004 = 0x9;
-Tbase TZ x1005 = x1004 * x1003;
-Tbase TZ x1006 = x990 + x1005;
-Tbase TZ x1007 = x983 + x1006;
-Tbase TZ x1008 = 0x19;
-Tbase TZ x1009 = x1007 >> x1008;
-Tbase TZ x1010 = x909 * x98;
-Tbase TZ x1011 = 0x2;
-Tbase TZ x1012 = x97 * x1011;
-Tbase TZ x1013 = x912 * x1012;
-Tbase TZ x1014 = 0x2;
-Tbase TZ x1015 = x96 * x1014;
-Tbase TZ x1016 = x915 * x1015;
-Tbase TZ x1017 = x918 * x95;
-Tbase TZ x1018 = x1016 + x1017;
-Tbase TZ x1019 = x1013 + x1018;
-Tbase TZ x1020 = x1010 + x1019;
-Tbase TZ x1021 = x891 * x94;
-Tbase TZ x1022 = x894 * x93;
-Tbase TZ x1023 = x897 * x92;
-Tbase TZ x1024 = x900 * x91;
-Tbase TZ x1025 = x903 * x90;
-Tbase TZ x1026 = x906 * x89;
-Tbase TZ x1027 = x1025 + x1026;
-Tbase TZ x1028 = x1024 + x1027;
-Tbase TZ x1029 = x1023 + x1028;
-Tbase TZ x1030 = x1022 + x1029;
-Tbase TZ x1031 = x1021 + x1030;
-Tbase TZ x1032 = 0x9;
-Tbase TZ x1033 = x1032 * x1031;
-Tbase TZ x1034 = x1020 + x1033;
-Tbase TZ x1035 = x1009 + x1034;
-Tbase TZ x1036 = 0x19;
-Tbase TZ x1037 = x1035 >> x1036;
-Tbase TZ x1038 = x906 * x98;
-Tbase TZ x1039 = 0x2;
-Tbase TZ x1040 = x97 * x1039;
-Tbase TZ x1041 = x909 * x1040;
-Tbase TZ x1042 = 0x2;
-Tbase TZ x1043 = x96 * x1042;
-Tbase TZ x1044 = x912 * x1043;
-Tbase TZ x1045 = 0x2;
-Tbase TZ x1046 = x95 * x1045;
-Tbase TZ x1047 = x915 * x1046;
-Tbase TZ x1048 = x918 * x94;
-Tbase TZ x1049 = x1047 + x1048;
-Tbase TZ x1050 = x1044 + x1049;
-Tbase TZ x1051 = x1041 + x1050;
-Tbase TZ x1052 = x1038 + x1051;
-Tbase TZ x1053 = x891 * x93;
-Tbase TZ x1054 = x894 * x92;
-Tbase TZ x1055 = x897 * x91;
-Tbase TZ x1056 = x900 * x90;
-Tbase TZ x1057 = x903 * x89;
-Tbase TZ x1058 = x1056 + x1057;
-Tbase TZ x1059 = x1055 + x1058;
-Tbase TZ x1060 = x1054 + x1059;
-Tbase TZ x1061 = x1053 + x1060;
-Tbase TZ x1062 = 0x9;
-Tbase TZ x1063 = x1062 * x1061;
-Tbase TZ x1064 = x1052 + x1063;
-Tbase TZ x1065 = x1037 + x1064;
-Tbase TZ x1066 = 0x19;
-Tbase TZ x1067 = x1065 >> x1066;
-Tbase TZ x1068 = x903 * x98;
-Tbase TZ x1069 = 0x2;
-Tbase TZ x1070 = x97 * x1069;
-Tbase TZ x1071 = x906 * x1070;
-Tbase TZ x1072 = 0x2;
-Tbase TZ x1073 = x96 * x1072;
-Tbase TZ x1074 = x909 * x1073;
-Tbase TZ x1075 = 0x2;
-Tbase TZ x1076 = x95 * x1075;
-Tbase TZ x1077 = x912 * x1076;
-Tbase TZ x1078 = 0x2;
-Tbase TZ x1079 = x94 * x1078;
-Tbase TZ x1080 = x915 * x1079;
-Tbase TZ x1081 = x918 * x93;
-Tbase TZ x1082 = x1080 + x1081;
-Tbase TZ x1083 = x1077 + x1082;
-Tbase TZ x1084 = x1074 + x1083;
-Tbase TZ x1085 = x1071 + x1084;
-Tbase TZ x1086 = x1068 + x1085;
-Tbase TZ x1087 = x891 * x92;
-Tbase TZ x1088 = x894 * x91;
-Tbase TZ x1089 = x897 * x90;
-Tbase TZ x1090 = x900 * x89;
-Tbase TZ x1091 = x1089 + x1090;
-Tbase TZ x1092 = x1088 + x1091;
-Tbase TZ x1093 = x1087 + x1092;
-Tbase TZ x1094 = 0x9;
-Tbase TZ x1095 = x1094 * x1093;
-Tbase TZ x1096 = x1086 + x1095;
-Tbase TZ x1097 = x1067 + x1096;
-Tbase TZ x1098 = 0x19;
-Tbase TZ x1099 = x1097 >> x1098;
-Tbase TZ x1100 = x900 * x98;
-Tbase TZ x1101 = 0x2;
-Tbase TZ x1102 = x97 * x1101;
-Tbase TZ x1103 = x903 * x1102;
-Tbase TZ x1104 = 0x2;
-Tbase TZ x1105 = x96 * x1104;
-Tbase TZ x1106 = x906 * x1105;
-Tbase TZ x1107 = 0x2;
-Tbase TZ x1108 = x95 * x1107;
-Tbase TZ x1109 = x909 * x1108;
-Tbase TZ x1110 = 0x2;
-Tbase TZ x1111 = x94 * x1110;
-Tbase TZ x1112 = x912 * x1111;
-Tbase TZ x1113 = 0x2;
-Tbase TZ x1114 = x93 * x1113;
-Tbase TZ x1115 = x915 * x1114;
-Tbase TZ x1116 = x918 * x92;
-Tbase TZ x1117 = x1115 + x1116;
-Tbase TZ x1118 = x1112 + x1117;
-Tbase TZ x1119 = x1109 + x1118;
-Tbase TZ x1120 = x1106 + x1119;
-Tbase TZ x1121 = x1103 + x1120;
-Tbase TZ x1122 = x1100 + x1121;
-Tbase TZ x1123 = x891 * x91;
-Tbase TZ x1124 = x894 * x90;
-Tbase TZ x1125 = x897 * x89;
-Tbase TZ x1126 = x1124 + x1125;
-Tbase TZ x1127 = x1123 + x1126;
-Tbase TZ x1128 = 0x9;
-Tbase TZ x1129 = x1128 * x1127;
-Tbase TZ x1130 = x1122 + x1129;
-Tbase TZ x1131 = x1099 + x1130;
-Tbase TZ x1132 = 0x19;
-Tbase TZ x1133 = x1131 >> x1132;
-Tbase TZ x1134 = x897 * x98;
-Tbase TZ x1135 = 0x2;
-Tbase TZ x1136 = x97 * x1135;
-Tbase TZ x1137 = x900 * x1136;
-Tbase TZ x1138 = 0x2;
-Tbase TZ x1139 = x96 * x1138;
-Tbase TZ x1140 = x903 * x1139;
-Tbase TZ x1141 = 0x2;
-Tbase TZ x1142 = x95 * x1141;
-Tbase TZ x1143 = x906 * x1142;
-Tbase TZ x1144 = 0x2;
-Tbase TZ x1145 = x94 * x1144;
-Tbase TZ x1146 = x909 * x1145;
-Tbase TZ x1147 = 0x2;
-Tbase TZ x1148 = x93 * x1147;
-Tbase TZ x1149 = x912 * x1148;
-Tbase TZ x1150 = 0x2;
-Tbase TZ x1151 = x92 * x1150;
-Tbase TZ x1152 = x915 * x1151;
-Tbase TZ x1153 = x918 * x91;
-Tbase TZ x1154 = x1152 + x1153;
-Tbase TZ x1155 = x1149 + x1154;
-Tbase TZ x1156 = x1146 + x1155;
-Tbase TZ x1157 = x1143 + x1156;
-Tbase TZ x1158 = x1140 + x1157;
-Tbase TZ x1159 = x1137 + x1158;
-Tbase TZ x1160 = x1134 + x1159;
-Tbase TZ x1161 = x891 * x90;
-Tbase TZ x1162 = x894 * x89;
-Tbase TZ x1163 = x1161 + x1162;
-Tbase TZ x1164 = 0x9;
-Tbase TZ x1165 = x1164 * x1163;
-Tbase TZ x1166 = x1160 + x1165;
-Tbase TZ x1167 = x1133 + x1166;
-Tbase TZ x1168 = 0x19;
-Tbase TZ x1169 = x1167 >> x1168;
-Tbase TZ x1170 = x894 * x98;
-Tbase TZ x1171 = 0x2;
-Tbase TZ x1172 = x97 * x1171;
-Tbase TZ x1173 = x897 * x1172;
-Tbase TZ x1174 = 0x2;
-Tbase TZ x1175 = x96 * x1174;
-Tbase TZ x1176 = x900 * x1175;
-Tbase TZ x1177 = 0x2;
-Tbase TZ x1178 = x95 * x1177;
-Tbase TZ x1179 = x903 * x1178;
-Tbase TZ x1180 = 0x2;
-Tbase TZ x1181 = x94 * x1180;
-Tbase TZ x1182 = x906 * x1181;
-Tbase TZ x1183 = 0x2;
-Tbase TZ x1184 = x93 * x1183;
-Tbase TZ x1185 = x909 * x1184;
-Tbase TZ x1186 = 0x2;
-Tbase TZ x1187 = x92 * x1186;
-Tbase TZ x1188 = x912 * x1187;
-Tbase TZ x1189 = 0x2;
-Tbase TZ x1190 = x91 * x1189;
-Tbase TZ x1191 = x915 * x1190;
-Tbase TZ x1192 = x918 * x90;
-Tbase TZ x1193 = x1191 + x1192;
-Tbase TZ x1194 = x1188 + x1193;
-Tbase TZ x1195 = x1185 + x1194;
-Tbase TZ x1196 = x1182 + x1195;
-Tbase TZ x1197 = x1179 + x1196;
-Tbase TZ x1198 = x1176 + x1197;
-Tbase TZ x1199 = x1173 + x1198;
-Tbase TZ x1200 = x1170 + x1199;
-Tbase TZ x1201 = x891 * x89;
-Tbase TZ x1202 = 0x9;
-Tbase TZ x1203 = x1202 * x1201;
-Tbase TZ x1204 = x1200 + x1203;
-Tbase TZ x1205 = x1169 + x1204;
-Tbase TZ x1206 = 0x19;
-Tbase TZ x1207 = x1205 >> x1206;
-Tbase TZ x1208 = x891 * x98;
-Tbase TZ x1209 = 0x2;
-Tbase TZ x1210 = x97 * x1209;
-Tbase TZ x1211 = x894 * x1210;
-Tbase TZ x1212 = 0x2;
-Tbase TZ x1213 = x96 * x1212;
-Tbase TZ x1214 = x897 * x1213;
-Tbase TZ x1215 = 0x2;
-Tbase TZ x1216 = x95 * x1215;
-Tbase TZ x1217 = x900 * x1216;
-Tbase TZ x1218 = 0x2;
-Tbase TZ x1219 = x94 * x1218;
-Tbase TZ x1220 = x903 * x1219;
-Tbase TZ x1221 = 0x2;
-Tbase TZ x1222 = x93 * x1221;
-Tbase TZ x1223 = x906 * x1222;
-Tbase TZ x1224 = 0x2;
-Tbase TZ x1225 = x92 * x1224;
-Tbase TZ x1226 = x909 * x1225;
-Tbase TZ x1227 = 0x2;
-Tbase TZ x1228 = x91 * x1227;
-Tbase TZ x1229 = x912 * x1228;
-Tbase TZ x1230 = 0x2;
-Tbase TZ x1231 = x90 * x1230;
-Tbase TZ x1232 = x915 * x1231;
-Tbase TZ x1233 = x918 * x89;
-Tbase TZ x1234 = x1232 + x1233;
-Tbase TZ x1235 = x1229 + x1234;
-Tbase TZ x1236 = x1226 + x1235;
-Tbase TZ x1237 = x1223 + x1236;
-Tbase TZ x1238 = x1220 + x1237;
-Tbase TZ x1239 = x1217 + x1238;
-Tbase TZ x1240 = x1214 + x1239;
-Tbase TZ x1241 = x1211 + x1240;
-Tbase TZ x1242 = x1208 + x1241;
-Tbase TZ x1243 = x1207 + x1242;
-Tbase TZ x1244 = 0x19;
-Tbase TZ x1245 = x1243 >> x1244;
-Tbase TZ x1246 = 0x9;
-Tbase TZ x1247 = x1246 * x1245;
-Tbase TZ x1248 = 0x3ffffff;
-Tbase TZ x1249 = x957 & x1248;
-Tbase TZ x1250 = x1247 + x1249;
-Tbase TZ x1251 = 0x1a;
-Tbase TZ x1252 = x1250 >> x1251;
-Tbase TZ x1253 = 0x1ffffff;
-Tbase TZ x1254 = x981 & x1253;
-Tbase TZ x1255 = x1252 + x1254;
-Tbase TZ x1256 = 0x1ffffff;
-Tbase TZ x1257 = x1243 & x1256;
-Tbase TZ x1258 = 0x1ffffff;
-Tbase TZ x1259 = x1205 & x1258;
-Tbase TZ x1260 = 0x1ffffff;
-Tbase TZ x1261 = x1167 & x1260;
-Tbase TZ x1262 = 0x1ffffff;
-Tbase TZ x1263 = x1131 & x1262;
-Tbase TZ x1264 = 0x1ffffff;
-Tbase TZ x1265 = x1097 & x1264;
-Tbase TZ x1266 = 0x1ffffff;
-Tbase TZ x1267 = x1065 & x1266;
-Tbase TZ x1268 = 0x1ffffff;
-Tbase TZ x1269 = x1035 & x1268;
-Tbase TZ x1270 = 0x19;
-Tbase TZ x1271 = x1255 >> x1270;
-Tbase TZ x1272 = 0x1ffffff;
-Tbase TZ x1273 = x1007 & x1272;
-Tbase TZ x1274 = x1271 + x1273;
-Tbase TZ x1275 = 0x1ffffff;
-Tbase TZ x1276 = x1255 & x1275;
-Tbase TZ x1277 = 0x3ffffff;
-Tbase TZ x1278 = x1250 & x1277;
-Tbase TZ x1279 = x888 * x488;
-Tbase TZ x1280 = 0x2;
-Tbase TZ x1281 = x485 * x1280;
-Tbase TZ x1282 = x879 * x1281;
-Tbase TZ x1283 = 0x2;
-Tbase TZ x1284 = x482 * x1283;
-Tbase TZ x1285 = x880 * x1284;
-Tbase TZ x1286 = 0x2;
-Tbase TZ x1287 = x479 * x1286;
-Tbase TZ x1288 = x881 * x1287;
-Tbase TZ x1289 = 0x2;
-Tbase TZ x1290 = x476 * x1289;
-Tbase TZ x1291 = x882 * x1290;
-Tbase TZ x1292 = 0x2;
-Tbase TZ x1293 = x473 * x1292;
-Tbase TZ x1294 = x883 * x1293;
-Tbase TZ x1295 = 0x2;
-Tbase TZ x1296 = x470 * x1295;
-Tbase TZ x1297 = x884 * x1296;
-Tbase TZ x1298 = 0x2;
-Tbase TZ x1299 = x467 * x1298;
-Tbase TZ x1300 = x885 * x1299;
-Tbase TZ x1301 = 0x2;
-Tbase TZ x1302 = x464 * x1301;
-Tbase TZ x1303 = x886 * x1302;
-Tbase TZ x1304 = 0x2;
-Tbase TZ x1305 = x461 * x1304;
-Tbase TZ x1306 = x887 * x1305;
-Tbase TZ x1307 = x1303 + x1306;
-Tbase TZ x1308 = x1300 + x1307;
-Tbase TZ x1309 = x1297 + x1308;
-Tbase TZ x1310 = x1294 + x1309;
-Tbase TZ x1311 = x1291 + x1310;
-Tbase TZ x1312 = x1288 + x1311;
-Tbase TZ x1313 = x1285 + x1312;
-Tbase TZ x1314 = x1282 + x1313;
-Tbase TZ x1315 = 0x9;
-Tbase TZ x1316 = x1315 * x1314;
-Tbase TZ x1317 = x1279 + x1316;
-Tbase TZ x1318 = 0x1a;
-Tbase TZ x1319 = x1317 >> x1318;
-Tbase TZ x1320 = x887 * x488;
-Tbase TZ x1321 = x888 * x485;
-Tbase TZ x1322 = x1320 + x1321;
-Tbase TZ x1323 = x879 * x482;
-Tbase TZ x1324 = x880 * x479;
-Tbase TZ x1325 = x881 * x476;
-Tbase TZ x1326 = x882 * x473;
-Tbase TZ x1327 = x883 * x470;
-Tbase TZ x1328 = x884 * x467;
-Tbase TZ x1329 = x885 * x464;
-Tbase TZ x1330 = x886 * x461;
-Tbase TZ x1331 = x1329 + x1330;
-Tbase TZ x1332 = x1328 + x1331;
-Tbase TZ x1333 = x1327 + x1332;
-Tbase TZ x1334 = x1326 + x1333;
-Tbase TZ x1335 = x1325 + x1334;
-Tbase TZ x1336 = x1324 + x1335;
-Tbase TZ x1337 = x1323 + x1336;
-Tbase TZ x1338 = 0x9;
-Tbase TZ x1339 = x1338 * x1337;
-Tbase TZ x1340 = x1322 + x1339;
-Tbase TZ x1341 = x1319 + x1340;
-Tbase TZ x1342 = 0x19;
-Tbase TZ x1343 = x1341 >> x1342;
-Tbase TZ x1344 = x886 * x488;
-Tbase TZ x1345 = 0x2;
-Tbase TZ x1346 = x485 * x1345;
-Tbase TZ x1347 = x887 * x1346;
-Tbase TZ x1348 = x888 * x482;
-Tbase TZ x1349 = x1347 + x1348;
-Tbase TZ x1350 = x1344 + x1349;
-Tbase TZ x1351 = x879 * x479;
-Tbase TZ x1352 = x880 * x476;
-Tbase TZ x1353 = x881 * x473;
-Tbase TZ x1354 = x882 * x470;
-Tbase TZ x1355 = x883 * x467;
-Tbase TZ x1356 = x884 * x464;
-Tbase TZ x1357 = x885 * x461;
-Tbase TZ x1358 = x1356 + x1357;
-Tbase TZ x1359 = x1355 + x1358;
-Tbase TZ x1360 = x1354 + x1359;
-Tbase TZ x1361 = x1353 + x1360;
-Tbase TZ x1362 = x1352 + x1361;
-Tbase TZ x1363 = x1351 + x1362;
-Tbase TZ x1364 = 0x9;
-Tbase TZ x1365 = x1364 * x1363;
-Tbase TZ x1366 = x1350 + x1365;
-Tbase TZ x1367 = x1343 + x1366;
-Tbase TZ x1368 = 0x19;
-Tbase TZ x1369 = x1367 >> x1368;
-Tbase TZ x1370 = x885 * x488;
-Tbase TZ x1371 = 0x2;
-Tbase TZ x1372 = x485 * x1371;
-Tbase TZ x1373 = x886 * x1372;
-Tbase TZ x1374 = 0x2;
-Tbase TZ x1375 = x482 * x1374;
-Tbase TZ x1376 = x887 * x1375;
-Tbase TZ x1377 = x888 * x479;
-Tbase TZ x1378 = x1376 + x1377;
-Tbase TZ x1379 = x1373 + x1378;
-Tbase TZ x1380 = x1370 + x1379;
-Tbase TZ x1381 = x879 * x476;
-Tbase TZ x1382 = x880 * x473;
-Tbase TZ x1383 = x881 * x470;
-Tbase TZ x1384 = x882 * x467;
-Tbase TZ x1385 = x883 * x464;
-Tbase TZ x1386 = x884 * x461;
-Tbase TZ x1387 = x1385 + x1386;
-Tbase TZ x1388 = x1384 + x1387;
-Tbase TZ x1389 = x1383 + x1388;
-Tbase TZ x1390 = x1382 + x1389;
-Tbase TZ x1391 = x1381 + x1390;
-Tbase TZ x1392 = 0x9;
-Tbase TZ x1393 = x1392 * x1391;
-Tbase TZ x1394 = x1380 + x1393;
-Tbase TZ x1395 = x1369 + x1394;
-Tbase TZ x1396 = 0x19;
-Tbase TZ x1397 = x1395 >> x1396;
-Tbase TZ x1398 = x884 * x488;
-Tbase TZ x1399 = 0x2;
-Tbase TZ x1400 = x485 * x1399;
-Tbase TZ x1401 = x885 * x1400;
-Tbase TZ x1402 = 0x2;
-Tbase TZ x1403 = x482 * x1402;
-Tbase TZ x1404 = x886 * x1403;
-Tbase TZ x1405 = 0x2;
-Tbase TZ x1406 = x479 * x1405;
-Tbase TZ x1407 = x887 * x1406;
-Tbase TZ x1408 = x888 * x476;
-Tbase TZ x1409 = x1407 + x1408;
-Tbase TZ x1410 = x1404 + x1409;
-Tbase TZ x1411 = x1401 + x1410;
-Tbase TZ x1412 = x1398 + x1411;
-Tbase TZ x1413 = x879 * x473;
-Tbase TZ x1414 = x880 * x470;
-Tbase TZ x1415 = x881 * x467;
-Tbase TZ x1416 = x882 * x464;
-Tbase TZ x1417 = x883 * x461;
-Tbase TZ x1418 = x1416 + x1417;
-Tbase TZ x1419 = x1415 + x1418;
-Tbase TZ x1420 = x1414 + x1419;
-Tbase TZ x1421 = x1413 + x1420;
-Tbase TZ x1422 = 0x9;
-Tbase TZ x1423 = x1422 * x1421;
-Tbase TZ x1424 = x1412 + x1423;
-Tbase TZ x1425 = x1397 + x1424;
-Tbase TZ x1426 = 0x19;
-Tbase TZ x1427 = x1425 >> x1426;
-Tbase TZ x1428 = x883 * x488;
-Tbase TZ x1429 = 0x2;
-Tbase TZ x1430 = x485 * x1429;
-Tbase TZ x1431 = x884 * x1430;
-Tbase TZ x1432 = 0x2;
-Tbase TZ x1433 = x482 * x1432;
-Tbase TZ x1434 = x885 * x1433;
-Tbase TZ x1435 = 0x2;
-Tbase TZ x1436 = x479 * x1435;
-Tbase TZ x1437 = x886 * x1436;
-Tbase TZ x1438 = 0x2;
-Tbase TZ x1439 = x476 * x1438;
-Tbase TZ x1440 = x887 * x1439;
-Tbase TZ x1441 = x888 * x473;
-Tbase TZ x1442 = x1440 + x1441;
-Tbase TZ x1443 = x1437 + x1442;
-Tbase TZ x1444 = x1434 + x1443;
-Tbase TZ x1445 = x1431 + x1444;
-Tbase TZ x1446 = x1428 + x1445;
-Tbase TZ x1447 = x879 * x470;
-Tbase TZ x1448 = x880 * x467;
-Tbase TZ x1449 = x881 * x464;
-Tbase TZ x1450 = x882 * x461;
-Tbase TZ x1451 = x1449 + x1450;
-Tbase TZ x1452 = x1448 + x1451;
-Tbase TZ x1453 = x1447 + x1452;
-Tbase TZ x1454 = 0x9;
-Tbase TZ x1455 = x1454 * x1453;
-Tbase TZ x1456 = x1446 + x1455;
-Tbase TZ x1457 = x1427 + x1456;
-Tbase TZ x1458 = 0x19;
-Tbase TZ x1459 = x1457 >> x1458;
-Tbase TZ x1460 = x882 * x488;
-Tbase TZ x1461 = 0x2;
-Tbase TZ x1462 = x485 * x1461;
-Tbase TZ x1463 = x883 * x1462;
-Tbase TZ x1464 = 0x2;
-Tbase TZ x1465 = x482 * x1464;
-Tbase TZ x1466 = x884 * x1465;
-Tbase TZ x1467 = 0x2;
-Tbase TZ x1468 = x479 * x1467;
-Tbase TZ x1469 = x885 * x1468;
-Tbase TZ x1470 = 0x2;
-Tbase TZ x1471 = x476 * x1470;
-Tbase TZ x1472 = x886 * x1471;
-Tbase TZ x1473 = 0x2;
-Tbase TZ x1474 = x473 * x1473;
-Tbase TZ x1475 = x887 * x1474;
-Tbase TZ x1476 = x888 * x470;
-Tbase TZ x1477 = x1475 + x1476;
-Tbase TZ x1478 = x1472 + x1477;
-Tbase TZ x1479 = x1469 + x1478;
-Tbase TZ x1480 = x1466 + x1479;
-Tbase TZ x1481 = x1463 + x1480;
-Tbase TZ x1482 = x1460 + x1481;
-Tbase TZ x1483 = x879 * x467;
-Tbase TZ x1484 = x880 * x464;
-Tbase TZ x1485 = x881 * x461;
-Tbase TZ x1486 = x1484 + x1485;
-Tbase TZ x1487 = x1483 + x1486;
-Tbase TZ x1488 = 0x9;
-Tbase TZ x1489 = x1488 * x1487;
-Tbase TZ x1490 = x1482 + x1489;
-Tbase TZ x1491 = x1459 + x1490;
-Tbase TZ x1492 = 0x19;
-Tbase TZ x1493 = x1491 >> x1492;
-Tbase TZ x1494 = x881 * x488;
-Tbase TZ x1495 = 0x2;
-Tbase TZ x1496 = x485 * x1495;
-Tbase TZ x1497 = x882 * x1496;
-Tbase TZ x1498 = 0x2;
-Tbase TZ x1499 = x482 * x1498;
-Tbase TZ x1500 = x883 * x1499;
-Tbase TZ x1501 = 0x2;
-Tbase TZ x1502 = x479 * x1501;
-Tbase TZ x1503 = x884 * x1502;
-Tbase TZ x1504 = 0x2;
-Tbase TZ x1505 = x476 * x1504;
-Tbase TZ x1506 = x885 * x1505;
-Tbase TZ x1507 = 0x2;
-Tbase TZ x1508 = x473 * x1507;
-Tbase TZ x1509 = x886 * x1508;
-Tbase TZ x1510 = 0x2;
-Tbase TZ x1511 = x470 * x1510;
-Tbase TZ x1512 = x887 * x1511;
-Tbase TZ x1513 = x888 * x467;
-Tbase TZ x1514 = x1512 + x1513;
-Tbase TZ x1515 = x1509 + x1514;
-Tbase TZ x1516 = x1506 + x1515;
-Tbase TZ x1517 = x1503 + x1516;
-Tbase TZ x1518 = x1500 + x1517;
-Tbase TZ x1519 = x1497 + x1518;
-Tbase TZ x1520 = x1494 + x1519;
-Tbase TZ x1521 = x879 * x464;
-Tbase TZ x1522 = x880 * x461;
-Tbase TZ x1523 = x1521 + x1522;
-Tbase TZ x1524 = 0x9;
-Tbase TZ x1525 = x1524 * x1523;
-Tbase TZ x1526 = x1520 + x1525;
-Tbase TZ x1527 = x1493 + x1526;
-Tbase TZ x1528 = 0x19;
-Tbase TZ x1529 = x1527 >> x1528;
-Tbase TZ x1530 = x880 * x488;
-Tbase TZ x1531 = 0x2;
-Tbase TZ x1532 = x485 * x1531;
-Tbase TZ x1533 = x881 * x1532;
-Tbase TZ x1534 = 0x2;
-Tbase TZ x1535 = x482 * x1534;
-Tbase TZ x1536 = x882 * x1535;
-Tbase TZ x1537 = 0x2;
-Tbase TZ x1538 = x479 * x1537;
-Tbase TZ x1539 = x883 * x1538;
-Tbase TZ x1540 = 0x2;
-Tbase TZ x1541 = x476 * x1540;
-Tbase TZ x1542 = x884 * x1541;
-Tbase TZ x1543 = 0x2;
-Tbase TZ x1544 = x473 * x1543;
-Tbase TZ x1545 = x885 * x1544;
-Tbase TZ x1546 = 0x2;
-Tbase TZ x1547 = x470 * x1546;
-Tbase TZ x1548 = x886 * x1547;
-Tbase TZ x1549 = 0x2;
-Tbase TZ x1550 = x467 * x1549;
-Tbase TZ x1551 = x887 * x1550;
-Tbase TZ x1552 = x888 * x464;
-Tbase TZ x1553 = x1551 + x1552;
-Tbase TZ x1554 = x1548 + x1553;
-Tbase TZ x1555 = x1545 + x1554;
-Tbase TZ x1556 = x1542 + x1555;
-Tbase TZ x1557 = x1539 + x1556;
-Tbase TZ x1558 = x1536 + x1557;
-Tbase TZ x1559 = x1533 + x1558;
-Tbase TZ x1560 = x1530 + x1559;
-Tbase TZ x1561 = x879 * x461;
-Tbase TZ x1562 = 0x9;
-Tbase TZ x1563 = x1562 * x1561;
-Tbase TZ x1564 = x1560 + x1563;
-Tbase TZ x1565 = x1529 + x1564;
-Tbase TZ x1566 = 0x19;
-Tbase TZ x1567 = x1565 >> x1566;
-Tbase TZ x1568 = x879 * x488;
-Tbase TZ x1569 = 0x2;
-Tbase TZ x1570 = x485 * x1569;
-Tbase TZ x1571 = x880 * x1570;
-Tbase TZ x1572 = 0x2;
-Tbase TZ x1573 = x482 * x1572;
-Tbase TZ x1574 = x881 * x1573;
-Tbase TZ x1575 = 0x2;
-Tbase TZ x1576 = x479 * x1575;
-Tbase TZ x1577 = x882 * x1576;
-Tbase TZ x1578 = 0x2;
-Tbase TZ x1579 = x476 * x1578;
-Tbase TZ x1580 = x883 * x1579;
-Tbase TZ x1581 = 0x2;
-Tbase TZ x1582 = x473 * x1581;
-Tbase TZ x1583 = x884 * x1582;
-Tbase TZ x1584 = 0x2;
-Tbase TZ x1585 = x470 * x1584;
-Tbase TZ x1586 = x885 * x1585;
-Tbase TZ x1587 = 0x2;
-Tbase TZ x1588 = x467 * x1587;
-Tbase TZ x1589 = x886 * x1588;
-Tbase TZ x1590 = 0x2;
-Tbase TZ x1591 = x464 * x1590;
-Tbase TZ x1592 = x887 * x1591;
-Tbase TZ x1593 = x888 * x461;
-Tbase TZ x1594 = x1592 + x1593;
-Tbase TZ x1595 = x1589 + x1594;
-Tbase TZ x1596 = x1586 + x1595;
-Tbase TZ x1597 = x1583 + x1596;
-Tbase TZ x1598 = x1580 + x1597;
-Tbase TZ x1599 = x1577 + x1598;
-Tbase TZ x1600 = x1574 + x1599;
-Tbase TZ x1601 = x1571 + x1600;
-Tbase TZ x1602 = x1568 + x1601;
-Tbase TZ x1603 = x1567 + x1602;
-Tbase TZ x1604 = 0x19;
-Tbase TZ x1605 = x1603 >> x1604;
-Tbase TZ x1606 = 0x9;
-Tbase TZ x1607 = x1606 * x1605;
-Tbase TZ x1608 = 0x3ffffff;
-Tbase TZ x1609 = x1317 & x1608;
-Tbase TZ x1610 = x1607 + x1609;
-Tbase TZ x1611 = 0x1a;
-Tbase TZ x1612 = x1610 >> x1611;
-Tbase TZ x1613 = 0x1ffffff;
-Tbase TZ x1614 = x1341 & x1613;
-Tbase TZ x1615 = x1612 + x1614;
-Tbase TZ x1616 = 0x1ffffff;
-Tbase TZ x1617 = x1603 & x1616;
-Tbase TZ x1618 = 0x1ffffff;
-Tbase TZ x1619 = x1565 & x1618;
-Tbase TZ x1620 = 0x1ffffff;
-Tbase TZ x1621 = x1527 & x1620;
-Tbase TZ x1622 = 0x1ffffff;
-Tbase TZ x1623 = x1491 & x1622;
-Tbase TZ x1624 = 0x1ffffff;
-Tbase TZ x1625 = x1457 & x1624;
-Tbase TZ x1626 = 0x1ffffff;
-Tbase TZ x1627 = x1425 & x1626;
-Tbase TZ x1628 = 0x1ffffff;
-Tbase TZ x1629 = x1395 & x1628;
-Tbase TZ x1630 = 0x19;
-Tbase TZ x1631 = x1615 >> x1630;
-Tbase TZ x1632 = 0x1ffffff;
-Tbase TZ x1633 = x1367 & x1632;
-Tbase TZ x1634 = x1631 + x1633;
-Tbase TZ x1635 = 0x1ffffff;
-Tbase TZ x1636 = x1615 & x1635;
-Tbase TZ x1637 = 0x3ffffff;
-Tbase TZ x1638 = x1610 & x1637;
-Tbase TZ x1639 = x1257 + x1617;
-Tbase TZ x1640 = x1259 + x1619;
-Tbase TZ x1641 = x1261 + x1621;
-Tbase TZ x1642 = x1263 + x1623;
-Tbase TZ x1643 = x1265 + x1625;
-Tbase TZ x1644 = x1267 + x1627;
-Tbase TZ x1645 = x1269 + x1629;
-Tbase TZ x1646 = x1274 + x1634;
-Tbase TZ x1647 = x1276 + x1636;
-Tbase TZ x1648 = x1278 + x1638;
-Tbase TZ x1649 = x1257 + x1617;
-Tbase TZ x1650 = x1259 + x1619;
-Tbase TZ x1651 = x1261 + x1621;
-Tbase TZ x1652 = x1263 + x1623;
-Tbase TZ x1653 = x1265 + x1625;
-Tbase TZ x1654 = x1267 + x1627;
-Tbase TZ x1655 = x1269 + x1629;
-Tbase TZ x1656 = x1274 + x1634;
-Tbase TZ x1657 = x1276 + x1636;
-Tbase TZ x1658 = x1278 + x1638;
-Tbase TZ x1659 = x1648 * x1658;
-Tbase TZ x1660 = 0x2;
-Tbase TZ x1661 = x1657 * x1660;
-Tbase TZ x1662 = x1639 * x1661;
-Tbase TZ x1663 = 0x2;
-Tbase TZ x1664 = x1656 * x1663;
-Tbase TZ x1665 = x1640 * x1664;
-Tbase TZ x1666 = 0x2;
-Tbase TZ x1667 = x1655 * x1666;
-Tbase TZ x1668 = x1641 * x1667;
-Tbase TZ x1669 = 0x2;
-Tbase TZ x1670 = x1654 * x1669;
-Tbase TZ x1671 = x1642 * x1670;
-Tbase TZ x1672 = 0x2;
-Tbase TZ x1673 = x1653 * x1672;
-Tbase TZ x1674 = x1643 * x1673;
-Tbase TZ x1675 = 0x2;
-Tbase TZ x1676 = x1652 * x1675;
-Tbase TZ x1677 = x1644 * x1676;
-Tbase TZ x1678 = 0x2;
-Tbase TZ x1679 = x1651 * x1678;
-Tbase TZ x1680 = x1645 * x1679;
-Tbase TZ x1681 = 0x2;
-Tbase TZ x1682 = x1650 * x1681;
-Tbase TZ x1683 = x1646 * x1682;
-Tbase TZ x1684 = 0x2;
-Tbase TZ x1685 = x1649 * x1684;
-Tbase TZ x1686 = x1647 * x1685;
-Tbase TZ x1687 = x1683 + x1686;
-Tbase TZ x1688 = x1680 + x1687;
-Tbase TZ x1689 = x1677 + x1688;
-Tbase TZ x1690 = x1674 + x1689;
-Tbase TZ x1691 = x1671 + x1690;
-Tbase TZ x1692 = x1668 + x1691;
-Tbase TZ x1693 = x1665 + x1692;
-Tbase TZ x1694 = x1662 + x1693;
-Tbase TZ x1695 = 0x9;
-Tbase TZ x1696 = x1695 * x1694;
-Tbase TZ x1697 = x1659 + x1696;
-Tbase TZ x1698 = 0x1a;
-Tbase TZ x1699 = x1697 >> x1698;
-Tbase TZ x1700 = x1647 * x1658;
-Tbase TZ x1701 = x1648 * x1657;
-Tbase TZ x1702 = x1700 + x1701;
-Tbase TZ x1703 = x1639 * x1656;
-Tbase TZ x1704 = x1640 * x1655;
-Tbase TZ x1705 = x1641 * x1654;
-Tbase TZ x1706 = x1642 * x1653;
-Tbase TZ x1707 = x1643 * x1652;
-Tbase TZ x1708 = x1644 * x1651;
-Tbase TZ x1709 = x1645 * x1650;
-Tbase TZ x1710 = x1646 * x1649;
-Tbase TZ x1711 = x1709 + x1710;
-Tbase TZ x1712 = x1708 + x1711;
-Tbase TZ x1713 = x1707 + x1712;
-Tbase TZ x1714 = x1706 + x1713;
-Tbase TZ x1715 = x1705 + x1714;
-Tbase TZ x1716 = x1704 + x1715;
-Tbase TZ x1717 = x1703 + x1716;
-Tbase TZ x1718 = 0x9;
-Tbase TZ x1719 = x1718 * x1717;
-Tbase TZ x1720 = x1702 + x1719;
-Tbase TZ x1721 = x1699 + x1720;
-Tbase TZ x1722 = 0x19;
-Tbase TZ x1723 = x1721 >> x1722;
-Tbase TZ x1724 = x1646 * x1658;
-Tbase TZ x1725 = 0x2;
-Tbase TZ x1726 = x1657 * x1725;
-Tbase TZ x1727 = x1647 * x1726;
-Tbase TZ x1728 = x1648 * x1656;
-Tbase TZ x1729 = x1727 + x1728;
-Tbase TZ x1730 = x1724 + x1729;
-Tbase TZ x1731 = x1639 * x1655;
-Tbase TZ x1732 = x1640 * x1654;
-Tbase TZ x1733 = x1641 * x1653;
-Tbase TZ x1734 = x1642 * x1652;
-Tbase TZ x1735 = x1643 * x1651;
-Tbase TZ x1736 = x1644 * x1650;
-Tbase TZ x1737 = x1645 * x1649;
-Tbase TZ x1738 = x1736 + x1737;
-Tbase TZ x1739 = x1735 + x1738;
-Tbase TZ x1740 = x1734 + x1739;
-Tbase TZ x1741 = x1733 + x1740;
-Tbase TZ x1742 = x1732 + x1741;
-Tbase TZ x1743 = x1731 + x1742;
-Tbase TZ x1744 = 0x9;
-Tbase TZ x1745 = x1744 * x1743;
-Tbase TZ x1746 = x1730 + x1745;
-Tbase TZ x1747 = x1723 + x1746;
-Tbase TZ x1748 = 0x19;
-Tbase TZ x1749 = x1747 >> x1748;
-Tbase TZ x1750 = x1645 * x1658;
-Tbase TZ x1751 = 0x2;
-Tbase TZ x1752 = x1657 * x1751;
-Tbase TZ x1753 = x1646 * x1752;
-Tbase TZ x1754 = 0x2;
-Tbase TZ x1755 = x1656 * x1754;
-Tbase TZ x1756 = x1647 * x1755;
-Tbase TZ x1757 = x1648 * x1655;
-Tbase TZ x1758 = x1756 + x1757;
-Tbase TZ x1759 = x1753 + x1758;
-Tbase TZ x1760 = x1750 + x1759;
-Tbase TZ x1761 = x1639 * x1654;
-Tbase TZ x1762 = x1640 * x1653;
-Tbase TZ x1763 = x1641 * x1652;
-Tbase TZ x1764 = x1642 * x1651;
-Tbase TZ x1765 = x1643 * x1650;
-Tbase TZ x1766 = x1644 * x1649;
-Tbase TZ x1767 = x1765 + x1766;
-Tbase TZ x1768 = x1764 + x1767;
-Tbase TZ x1769 = x1763 + x1768;
-Tbase TZ x1770 = x1762 + x1769;
-Tbase TZ x1771 = x1761 + x1770;
-Tbase TZ x1772 = 0x9;
-Tbase TZ x1773 = x1772 * x1771;
-Tbase TZ x1774 = x1760 + x1773;
-Tbase TZ x1775 = x1749 + x1774;
-Tbase TZ x1776 = 0x19;
-Tbase TZ x1777 = x1775 >> x1776;
-Tbase TZ x1778 = x1644 * x1658;
-Tbase TZ x1779 = 0x2;
-Tbase TZ x1780 = x1657 * x1779;
-Tbase TZ x1781 = x1645 * x1780;
-Tbase TZ x1782 = 0x2;
-Tbase TZ x1783 = x1656 * x1782;
-Tbase TZ x1784 = x1646 * x1783;
-Tbase TZ x1785 = 0x2;
-Tbase TZ x1786 = x1655 * x1785;
-Tbase TZ x1787 = x1647 * x1786;
-Tbase TZ x1788 = x1648 * x1654;
-Tbase TZ x1789 = x1787 + x1788;
-Tbase TZ x1790 = x1784 + x1789;
-Tbase TZ x1791 = x1781 + x1790;
-Tbase TZ x1792 = x1778 + x1791;
-Tbase TZ x1793 = x1639 * x1653;
-Tbase TZ x1794 = x1640 * x1652;
-Tbase TZ x1795 = x1641 * x1651;
-Tbase TZ x1796 = x1642 * x1650;
-Tbase TZ x1797 = x1643 * x1649;
-Tbase TZ x1798 = x1796 + x1797;
-Tbase TZ x1799 = x1795 + x1798;
-Tbase TZ x1800 = x1794 + x1799;
-Tbase TZ x1801 = x1793 + x1800;
-Tbase TZ x1802 = 0x9;
-Tbase TZ x1803 = x1802 * x1801;
-Tbase TZ x1804 = x1792 + x1803;
-Tbase TZ x1805 = x1777 + x1804;
-Tbase TZ x1806 = 0x19;
-Tbase TZ x1807 = x1805 >> x1806;
-Tbase TZ x1808 = x1643 * x1658;
-Tbase TZ x1809 = 0x2;
-Tbase TZ x1810 = x1657 * x1809;
-Tbase TZ x1811 = x1644 * x1810;
-Tbase TZ x1812 = 0x2;
-Tbase TZ x1813 = x1656 * x1812;
-Tbase TZ x1814 = x1645 * x1813;
-Tbase TZ x1815 = 0x2;
-Tbase TZ x1816 = x1655 * x1815;
-Tbase TZ x1817 = x1646 * x1816;
-Tbase TZ x1818 = 0x2;
-Tbase TZ x1819 = x1654 * x1818;
-Tbase TZ x1820 = x1647 * x1819;
-Tbase TZ x1821 = x1648 * x1653;
-Tbase TZ x1822 = x1820 + x1821;
-Tbase TZ x1823 = x1817 + x1822;
-Tbase TZ x1824 = x1814 + x1823;
-Tbase TZ x1825 = x1811 + x1824;
-Tbase TZ x1826 = x1808 + x1825;
-Tbase TZ x1827 = x1639 * x1652;
-Tbase TZ x1828 = x1640 * x1651;
-Tbase TZ x1829 = x1641 * x1650;
-Tbase TZ x1830 = x1642 * x1649;
-Tbase TZ x1831 = x1829 + x1830;
-Tbase TZ x1832 = x1828 + x1831;
-Tbase TZ x1833 = x1827 + x1832;
-Tbase TZ x1834 = 0x9;
-Tbase TZ x1835 = x1834 * x1833;
-Tbase TZ x1836 = x1826 + x1835;
-Tbase TZ x1837 = x1807 + x1836;
-Tbase TZ x1838 = 0x19;
-Tbase TZ x1839 = x1837 >> x1838;
-Tbase TZ x1840 = x1642 * x1658;
-Tbase TZ x1841 = 0x2;
-Tbase TZ x1842 = x1657 * x1841;
-Tbase TZ x1843 = x1643 * x1842;
-Tbase TZ x1844 = 0x2;
-Tbase TZ x1845 = x1656 * x1844;
-Tbase TZ x1846 = x1644 * x1845;
-Tbase TZ x1847 = 0x2;
-Tbase TZ x1848 = x1655 * x1847;
-Tbase TZ x1849 = x1645 * x1848;
-Tbase TZ x1850 = 0x2;
-Tbase TZ x1851 = x1654 * x1850;
-Tbase TZ x1852 = x1646 * x1851;
-Tbase TZ x1853 = 0x2;
-Tbase TZ x1854 = x1653 * x1853;
-Tbase TZ x1855 = x1647 * x1854;
-Tbase TZ x1856 = x1648 * x1652;
-Tbase TZ x1857 = x1855 + x1856;
-Tbase TZ x1858 = x1852 + x1857;
-Tbase TZ x1859 = x1849 + x1858;
-Tbase TZ x1860 = x1846 + x1859;
-Tbase TZ x1861 = x1843 + x1860;
-Tbase TZ x1862 = x1840 + x1861;
-Tbase TZ x1863 = x1639 * x1651;
-Tbase TZ x1864 = x1640 * x1650;
-Tbase TZ x1865 = x1641 * x1649;
-Tbase TZ x1866 = x1864 + x1865;
-Tbase TZ x1867 = x1863 + x1866;
-Tbase TZ x1868 = 0x9;
-Tbase TZ x1869 = x1868 * x1867;
-Tbase TZ x1870 = x1862 + x1869;
-Tbase TZ x1871 = x1839 + x1870;
-Tbase TZ x1872 = 0x19;
-Tbase TZ x1873 = x1871 >> x1872;
-Tbase TZ x1874 = x1641 * x1658;
-Tbase TZ x1875 = 0x2;
-Tbase TZ x1876 = x1657 * x1875;
-Tbase TZ x1877 = x1642 * x1876;
-Tbase TZ x1878 = 0x2;
-Tbase TZ x1879 = x1656 * x1878;
-Tbase TZ x1880 = x1643 * x1879;
-Tbase TZ x1881 = 0x2;
-Tbase TZ x1882 = x1655 * x1881;
-Tbase TZ x1883 = x1644 * x1882;
-Tbase TZ x1884 = 0x2;
-Tbase TZ x1885 = x1654 * x1884;
-Tbase TZ x1886 = x1645 * x1885;
-Tbase TZ x1887 = 0x2;
-Tbase TZ x1888 = x1653 * x1887;
-Tbase TZ x1889 = x1646 * x1888;
-Tbase TZ x1890 = 0x2;
-Tbase TZ x1891 = x1652 * x1890;
-Tbase TZ x1892 = x1647 * x1891;
-Tbase TZ x1893 = x1648 * x1651;
-Tbase TZ x1894 = x1892 + x1893;
-Tbase TZ x1895 = x1889 + x1894;
-Tbase TZ x1896 = x1886 + x1895;
-Tbase TZ x1897 = x1883 + x1896;
-Tbase TZ x1898 = x1880 + x1897;
-Tbase TZ x1899 = x1877 + x1898;
-Tbase TZ x1900 = x1874 + x1899;
-Tbase TZ x1901 = x1639 * x1650;
-Tbase TZ x1902 = x1640 * x1649;
-Tbase TZ x1903 = x1901 + x1902;
-Tbase TZ x1904 = 0x9;
-Tbase TZ x1905 = x1904 * x1903;
-Tbase TZ x1906 = x1900 + x1905;
-Tbase TZ x1907 = x1873 + x1906;
-Tbase TZ x1908 = 0x19;
-Tbase TZ x1909 = x1907 >> x1908;
-Tbase TZ x1910 = x1640 * x1658;
-Tbase TZ x1911 = 0x2;
-Tbase TZ x1912 = x1657 * x1911;
-Tbase TZ x1913 = x1641 * x1912;
-Tbase TZ x1914 = 0x2;
-Tbase TZ x1915 = x1656 * x1914;
-Tbase TZ x1916 = x1642 * x1915;
-Tbase TZ x1917 = 0x2;
-Tbase TZ x1918 = x1655 * x1917;
-Tbase TZ x1919 = x1643 * x1918;
-Tbase TZ x1920 = 0x2;
-Tbase TZ x1921 = x1654 * x1920;
-Tbase TZ x1922 = x1644 * x1921;
-Tbase TZ x1923 = 0x2;
-Tbase TZ x1924 = x1653 * x1923;
-Tbase TZ x1925 = x1645 * x1924;
-Tbase TZ x1926 = 0x2;
-Tbase TZ x1927 = x1652 * x1926;
-Tbase TZ x1928 = x1646 * x1927;
-Tbase TZ x1929 = 0x2;
-Tbase TZ x1930 = x1651 * x1929;
-Tbase TZ x1931 = x1647 * x1930;
-Tbase TZ x1932 = x1648 * x1650;
-Tbase TZ x1933 = x1931 + x1932;
-Tbase TZ x1934 = x1928 + x1933;
-Tbase TZ x1935 = x1925 + x1934;
-Tbase TZ x1936 = x1922 + x1935;
-Tbase TZ x1937 = x1919 + x1936;
-Tbase TZ x1938 = x1916 + x1937;
-Tbase TZ x1939 = x1913 + x1938;
-Tbase TZ x1940 = x1910 + x1939;
-Tbase TZ x1941 = x1639 * x1649;
-Tbase TZ x1942 = 0x9;
-Tbase TZ x1943 = x1942 * x1941;
-Tbase TZ x1944 = x1940 + x1943;
-Tbase TZ x1945 = x1909 + x1944;
-Tbase TZ x1946 = 0x19;
-Tbase TZ x1947 = x1945 >> x1946;
-Tbase TZ x1948 = x1639 * x1658;
-Tbase TZ x1949 = 0x2;
-Tbase TZ x1950 = x1657 * x1949;
-Tbase TZ x1951 = x1640 * x1950;
-Tbase TZ x1952 = 0x2;
-Tbase TZ x1953 = x1656 * x1952;
-Tbase TZ x1954 = x1641 * x1953;
-Tbase TZ x1955 = 0x2;
-Tbase TZ x1956 = x1655 * x1955;
-Tbase TZ x1957 = x1642 * x1956;
-Tbase TZ x1958 = 0x2;
-Tbase TZ x1959 = x1654 * x1958;
-Tbase TZ x1960 = x1643 * x1959;
-Tbase TZ x1961 = 0x2;
-Tbase TZ x1962 = x1653 * x1961;
-Tbase TZ x1963 = x1644 * x1962;
-Tbase TZ x1964 = 0x2;
-Tbase TZ x1965 = x1652 * x1964;
-Tbase TZ x1966 = x1645 * x1965;
-Tbase TZ x1967 = 0x2;
-Tbase TZ x1968 = x1651 * x1967;
-Tbase TZ x1969 = x1646 * x1968;
-Tbase TZ x1970 = 0x2;
-Tbase TZ x1971 = x1650 * x1970;
-Tbase TZ x1972 = x1647 * x1971;
-Tbase TZ x1973 = x1648 * x1649;
-Tbase TZ x1974 = x1972 + x1973;
-Tbase TZ x1975 = x1969 + x1974;
-Tbase TZ x1976 = x1966 + x1975;
-Tbase TZ x1977 = x1963 + x1976;
-Tbase TZ x1978 = x1960 + x1977;
-Tbase TZ x1979 = x1957 + x1978;
-Tbase TZ x1980 = x1954 + x1979;
-Tbase TZ x1981 = x1951 + x1980;
-Tbase TZ x1982 = x1948 + x1981;
-Tbase TZ x1983 = x1947 + x1982;
-Tbase TZ x1984 = 0x19;
-Tbase TZ x1985 = x1983 >> x1984;
-Tbase TZ x1986 = 0x9;
-Tbase TZ x1987 = x1986 * x1985;
-Tbase TZ x1988 = 0x3ffffff;
-Tbase TZ x1989 = x1697 & x1988;
-Tbase TZ x1990 = x1987 + x1989;
-Tbase TZ x1991 = 0x1a;
-Tbase TZ x1992 = x1990 >> x1991;
-Tbase TZ x1993 = 0x1ffffff;
-Tbase TZ x1994 = x1721 & x1993;
-Tbase TZ x1995 = x1992 + x1994;
-Tbase TZ x1996 = 0x1ffffff;
-Tbase TZ x1997 = x1983 & x1996;
-Tbase TZ x1998 = 0x1ffffff;
-Tbase TZ x1999 = x1945 & x1998;
-Tbase TZ x2000 = 0x1ffffff;
-Tbase TZ x2001 = x1907 & x2000;
-Tbase TZ x2002 = 0x1ffffff;
-Tbase TZ x2003 = x1871 & x2002;
-Tbase TZ x2004 = 0x1ffffff;
-Tbase TZ x2005 = x1837 & x2004;
-Tbase TZ x2006 = 0x1ffffff;
-Tbase TZ x2007 = x1805 & x2006;
-Tbase TZ x2008 = 0x1ffffff;
-Tbase TZ x2009 = x1775 & x2008;
-Tbase TZ x2010 = 0x19;
-Tbase TZ x2011 = x1995 >> x2010;
-Tbase TZ x2012 = 0x1ffffff;
-Tbase TZ x2013 = x1747 & x2012;
-Tbase TZ x2014 = x2011 + x2013;
-Tbase TZ x2015 = 0x1ffffff;
-Tbase TZ x2016 = x1995 & x2015;
-Tbase TZ x2017 = 0x3ffffff;
-Tbase TZ x2018 = x1990 & x2017;
-Tbase TZ x2019 = 0x3fffffe;
-Tbase TZ x2020 = x2019 + x1257;
-Tbase TZ x2021 = x2020 - x1617;
-Tbase TZ x2022 = 0x3fffffe;
-Tbase TZ x2023 = x2022 + x1259;
-Tbase TZ x2024 = x2023 - x1619;
-Tbase TZ x2025 = 0x3fffffe;
-Tbase TZ x2026 = x2025 + x1261;
-Tbase TZ x2027 = x2026 - x1621;
-Tbase TZ x2028 = 0x3fffffe;
-Tbase TZ x2029 = x2028 + x1263;
-Tbase TZ x2030 = x2029 - x1623;
-Tbase TZ x2031 = 0x3fffffe;
-Tbase TZ x2032 = x2031 + x1265;
-Tbase TZ x2033 = x2032 - x1625;
-Tbase TZ x2034 = 0x3fffffe;
-Tbase TZ x2035 = x2034 + x1267;
-Tbase TZ x2036 = x2035 - x1627;
-Tbase TZ x2037 = 0x3fffffe;
-Tbase TZ x2038 = x2037 + x1269;
-Tbase TZ x2039 = x2038 - x1629;
-Tbase TZ x2040 = 0x3fffffe;
-Tbase TZ x2041 = x2040 + x1274;
-Tbase TZ x2042 = x2041 - x1634;
-Tbase TZ x2043 = 0x3fffffe;
-Tbase TZ x2044 = x2043 + x1276;
-Tbase TZ x2045 = x2044 - x1636;
-Tbase TZ x2046 = 0x7ffffee;
-Tbase TZ x2047 = x2046 + x1278;
-Tbase TZ x2048 = x2047 - x1638;
-Tbase TZ x2049 = 0x3fffffe;
-Tbase TZ x2050 = x2049 + x1257;
-Tbase TZ x2051 = x2050 - x1617;
-Tbase TZ x2052 = 0x3fffffe;
-Tbase TZ x2053 = x2052 + x1259;
-Tbase TZ x2054 = x2053 - x1619;
-Tbase TZ x2055 = 0x3fffffe;
-Tbase TZ x2056 = x2055 + x1261;
-Tbase TZ x2057 = x2056 - x1621;
-Tbase TZ x2058 = 0x3fffffe;
-Tbase TZ x2059 = x2058 + x1263;
-Tbase TZ x2060 = x2059 - x1623;
-Tbase TZ x2061 = 0x3fffffe;
-Tbase TZ x2062 = x2061 + x1265;
-Tbase TZ x2063 = x2062 - x1625;
-Tbase TZ x2064 = 0x3fffffe;
-Tbase TZ x2065 = x2064 + x1267;
-Tbase TZ x2066 = x2065 - x1627;
-Tbase TZ x2067 = 0x3fffffe;
-Tbase TZ x2068 = x2067 + x1269;
-Tbase TZ x2069 = x2068 - x1629;
-Tbase TZ x2070 = 0x3fffffe;
-Tbase TZ x2071 = x2070 + x1274;
-Tbase TZ x2072 = x2071 - x1634;
-Tbase TZ x2073 = 0x3fffffe;
-Tbase TZ x2074 = x2073 + x1276;
-Tbase TZ x2075 = x2074 - x1636;
-Tbase TZ x2076 = 0x7ffffee;
-Tbase TZ x2077 = x2076 + x1278;
-Tbase TZ x2078 = x2077 - x1638;
-Tbase TZ x2079 = x2048 * x2078;
-Tbase TZ x2080 = 0x2;
-Tbase TZ x2081 = x2075 * x2080;
-Tbase TZ x2082 = x2021 * x2081;
-Tbase TZ x2083 = 0x2;
-Tbase TZ x2084 = x2072 * x2083;
-Tbase TZ x2085 = x2024 * x2084;
-Tbase TZ x2086 = 0x2;
-Tbase TZ x2087 = x2069 * x2086;
-Tbase TZ x2088 = x2027 * x2087;
-Tbase TZ x2089 = 0x2;
-Tbase TZ x2090 = x2066 * x2089;
-Tbase TZ x2091 = x2030 * x2090;
-Tbase TZ x2092 = 0x2;
-Tbase TZ x2093 = x2063 * x2092;
-Tbase TZ x2094 = x2033 * x2093;
-Tbase TZ x2095 = 0x2;
-Tbase TZ x2096 = x2060 * x2095;
-Tbase TZ x2097 = x2036 * x2096;
-Tbase TZ x2098 = 0x2;
-Tbase TZ x2099 = x2057 * x2098;
-Tbase TZ x2100 = x2039 * x2099;
-Tbase TZ x2101 = 0x2;
-Tbase TZ x2102 = x2054 * x2101;
-Tbase TZ x2103 = x2042 * x2102;
-Tbase TZ x2104 = 0x2;
-Tbase TZ x2105 = x2051 * x2104;
-Tbase TZ x2106 = x2045 * x2105;
-Tbase TZ x2107 = x2103 + x2106;
-Tbase TZ x2108 = x2100 + x2107;
-Tbase TZ x2109 = x2097 + x2108;
-Tbase TZ x2110 = x2094 + x2109;
-Tbase TZ x2111 = x2091 + x2110;
-Tbase TZ x2112 = x2088 + x2111;
-Tbase TZ x2113 = x2085 + x2112;
-Tbase TZ x2114 = x2082 + x2113;
-Tbase TZ x2115 = 0x9;
-Tbase TZ x2116 = x2115 * x2114;
-Tbase TZ x2117 = x2079 + x2116;
-Tbase TZ x2118 = 0x1a;
-Tbase TZ x2119 = x2117 >> x2118;
-Tbase TZ x2120 = x2045 * x2078;
-Tbase TZ x2121 = x2048 * x2075;
-Tbase TZ x2122 = x2120 + x2121;
-Tbase TZ x2123 = x2021 * x2072;
-Tbase TZ x2124 = x2024 * x2069;
-Tbase TZ x2125 = x2027 * x2066;
-Tbase TZ x2126 = x2030 * x2063;
-Tbase TZ x2127 = x2033 * x2060;
-Tbase TZ x2128 = x2036 * x2057;
-Tbase TZ x2129 = x2039 * x2054;
-Tbase TZ x2130 = x2042 * x2051;
-Tbase TZ x2131 = x2129 + x2130;
-Tbase TZ x2132 = x2128 + x2131;
-Tbase TZ x2133 = x2127 + x2132;
-Tbase TZ x2134 = x2126 + x2133;
-Tbase TZ x2135 = x2125 + x2134;
-Tbase TZ x2136 = x2124 + x2135;
-Tbase TZ x2137 = x2123 + x2136;
-Tbase TZ x2138 = 0x9;
-Tbase TZ x2139 = x2138 * x2137;
-Tbase TZ x2140 = x2122 + x2139;
-Tbase TZ x2141 = x2119 + x2140;
-Tbase TZ x2142 = 0x19;
-Tbase TZ x2143 = x2141 >> x2142;
-Tbase TZ x2144 = x2042 * x2078;
-Tbase TZ x2145 = 0x2;
-Tbase TZ x2146 = x2075 * x2145;
-Tbase TZ x2147 = x2045 * x2146;
-Tbase TZ x2148 = x2048 * x2072;
-Tbase TZ x2149 = x2147 + x2148;
-Tbase TZ x2150 = x2144 + x2149;
-Tbase TZ x2151 = x2021 * x2069;
-Tbase TZ x2152 = x2024 * x2066;
-Tbase TZ x2153 = x2027 * x2063;
-Tbase TZ x2154 = x2030 * x2060;
-Tbase TZ x2155 = x2033 * x2057;
-Tbase TZ x2156 = x2036 * x2054;
-Tbase TZ x2157 = x2039 * x2051;
-Tbase TZ x2158 = x2156 + x2157;
-Tbase TZ x2159 = x2155 + x2158;
-Tbase TZ x2160 = x2154 + x2159;
-Tbase TZ x2161 = x2153 + x2160;
-Tbase TZ x2162 = x2152 + x2161;
-Tbase TZ x2163 = x2151 + x2162;
-Tbase TZ x2164 = 0x9;
-Tbase TZ x2165 = x2164 * x2163;
-Tbase TZ x2166 = x2150 + x2165;
-Tbase TZ x2167 = x2143 + x2166;
-Tbase TZ x2168 = 0x19;
-Tbase TZ x2169 = x2167 >> x2168;
-Tbase TZ x2170 = x2039 * x2078;
-Tbase TZ x2171 = 0x2;
-Tbase TZ x2172 = x2075 * x2171;
-Tbase TZ x2173 = x2042 * x2172;
-Tbase TZ x2174 = 0x2;
-Tbase TZ x2175 = x2072 * x2174;
-Tbase TZ x2176 = x2045 * x2175;
-Tbase TZ x2177 = x2048 * x2069;
-Tbase TZ x2178 = x2176 + x2177;
-Tbase TZ x2179 = x2173 + x2178;
-Tbase TZ x2180 = x2170 + x2179;
-Tbase TZ x2181 = x2021 * x2066;
-Tbase TZ x2182 = x2024 * x2063;
-Tbase TZ x2183 = x2027 * x2060;
-Tbase TZ x2184 = x2030 * x2057;
-Tbase TZ x2185 = x2033 * x2054;
-Tbase TZ x2186 = x2036 * x2051;
-Tbase TZ x2187 = x2185 + x2186;
-Tbase TZ x2188 = x2184 + x2187;
-Tbase TZ x2189 = x2183 + x2188;
-Tbase TZ x2190 = x2182 + x2189;
-Tbase TZ x2191 = x2181 + x2190;
-Tbase TZ x2192 = 0x9;
-Tbase TZ x2193 = x2192 * x2191;
-Tbase TZ x2194 = x2180 + x2193;
-Tbase TZ x2195 = x2169 + x2194;
-Tbase TZ x2196 = 0x19;
-Tbase TZ x2197 = x2195 >> x2196;
-Tbase TZ x2198 = x2036 * x2078;
-Tbase TZ x2199 = 0x2;
-Tbase TZ x2200 = x2075 * x2199;
-Tbase TZ x2201 = x2039 * x2200;
-Tbase TZ x2202 = 0x2;
-Tbase TZ x2203 = x2072 * x2202;
-Tbase TZ x2204 = x2042 * x2203;
-Tbase TZ x2205 = 0x2;
-Tbase TZ x2206 = x2069 * x2205;
-Tbase TZ x2207 = x2045 * x2206;
-Tbase TZ x2208 = x2048 * x2066;
-Tbase TZ x2209 = x2207 + x2208;
-Tbase TZ x2210 = x2204 + x2209;
-Tbase TZ x2211 = x2201 + x2210;
-Tbase TZ x2212 = x2198 + x2211;
-Tbase TZ x2213 = x2021 * x2063;
-Tbase TZ x2214 = x2024 * x2060;
-Tbase TZ x2215 = x2027 * x2057;
-Tbase TZ x2216 = x2030 * x2054;
-Tbase TZ x2217 = x2033 * x2051;
-Tbase TZ x2218 = x2216 + x2217;
-Tbase TZ x2219 = x2215 + x2218;
-Tbase TZ x2220 = x2214 + x2219;
-Tbase TZ x2221 = x2213 + x2220;
-Tbase TZ x2222 = 0x9;
-Tbase TZ x2223 = x2222 * x2221;
-Tbase TZ x2224 = x2212 + x2223;
-Tbase TZ x2225 = x2197 + x2224;
-Tbase TZ x2226 = 0x19;
-Tbase TZ x2227 = x2225 >> x2226;
-Tbase TZ x2228 = x2033 * x2078;
-Tbase TZ x2229 = 0x2;
-Tbase TZ x2230 = x2075 * x2229;
-Tbase TZ x2231 = x2036 * x2230;
-Tbase TZ x2232 = 0x2;
-Tbase TZ x2233 = x2072 * x2232;
-Tbase TZ x2234 = x2039 * x2233;
-Tbase TZ x2235 = 0x2;
-Tbase TZ x2236 = x2069 * x2235;
-Tbase TZ x2237 = x2042 * x2236;
-Tbase TZ x2238 = 0x2;
-Tbase TZ x2239 = x2066 * x2238;
-Tbase TZ x2240 = x2045 * x2239;
-Tbase TZ x2241 = x2048 * x2063;
-Tbase TZ x2242 = x2240 + x2241;
-Tbase TZ x2243 = x2237 + x2242;
-Tbase TZ x2244 = x2234 + x2243;
-Tbase TZ x2245 = x2231 + x2244;
-Tbase TZ x2246 = x2228 + x2245;
-Tbase TZ x2247 = x2021 * x2060;
-Tbase TZ x2248 = x2024 * x2057;
-Tbase TZ x2249 = x2027 * x2054;
-Tbase TZ x2250 = x2030 * x2051;
-Tbase TZ x2251 = x2249 + x2250;
-Tbase TZ x2252 = x2248 + x2251;
-Tbase TZ x2253 = x2247 + x2252;
-Tbase TZ x2254 = 0x9;
-Tbase TZ x2255 = x2254 * x2253;
-Tbase TZ x2256 = x2246 + x2255;
-Tbase TZ x2257 = x2227 + x2256;
-Tbase TZ x2258 = 0x19;
-Tbase TZ x2259 = x2257 >> x2258;
-Tbase TZ x2260 = x2030 * x2078;
-Tbase TZ x2261 = 0x2;
-Tbase TZ x2262 = x2075 * x2261;
-Tbase TZ x2263 = x2033 * x2262;
-Tbase TZ x2264 = 0x2;
-Tbase TZ x2265 = x2072 * x2264;
-Tbase TZ x2266 = x2036 * x2265;
-Tbase TZ x2267 = 0x2;
-Tbase TZ x2268 = x2069 * x2267;
-Tbase TZ x2269 = x2039 * x2268;
-Tbase TZ x2270 = 0x2;
-Tbase TZ x2271 = x2066 * x2270;
-Tbase TZ x2272 = x2042 * x2271;
-Tbase TZ x2273 = 0x2;
-Tbase TZ x2274 = x2063 * x2273;
-Tbase TZ x2275 = x2045 * x2274;
-Tbase TZ x2276 = x2048 * x2060;
-Tbase TZ x2277 = x2275 + x2276;
-Tbase TZ x2278 = x2272 + x2277;
-Tbase TZ x2279 = x2269 + x2278;
-Tbase TZ x2280 = x2266 + x2279;
-Tbase TZ x2281 = x2263 + x2280;
-Tbase TZ x2282 = x2260 + x2281;
-Tbase TZ x2283 = x2021 * x2057;
-Tbase TZ x2284 = x2024 * x2054;
-Tbase TZ x2285 = x2027 * x2051;
-Tbase TZ x2286 = x2284 + x2285;
-Tbase TZ x2287 = x2283 + x2286;
-Tbase TZ x2288 = 0x9;
-Tbase TZ x2289 = x2288 * x2287;
-Tbase TZ x2290 = x2282 + x2289;
-Tbase TZ x2291 = x2259 + x2290;
-Tbase TZ x2292 = 0x19;
-Tbase TZ x2293 = x2291 >> x2292;
-Tbase TZ x2294 = x2027 * x2078;
-Tbase TZ x2295 = 0x2;
-Tbase TZ x2296 = x2075 * x2295;
-Tbase TZ x2297 = x2030 * x2296;
-Tbase TZ x2298 = 0x2;
-Tbase TZ x2299 = x2072 * x2298;
-Tbase TZ x2300 = x2033 * x2299;
-Tbase TZ x2301 = 0x2;
-Tbase TZ x2302 = x2069 * x2301;
-Tbase TZ x2303 = x2036 * x2302;
-Tbase TZ x2304 = 0x2;
-Tbase TZ x2305 = x2066 * x2304;
-Tbase TZ x2306 = x2039 * x2305;
-Tbase TZ x2307 = 0x2;
-Tbase TZ x2308 = x2063 * x2307;
-Tbase TZ x2309 = x2042 * x2308;
-Tbase TZ x2310 = 0x2;
-Tbase TZ x2311 = x2060 * x2310;
-Tbase TZ x2312 = x2045 * x2311;
-Tbase TZ x2313 = x2048 * x2057;
-Tbase TZ x2314 = x2312 + x2313;
-Tbase TZ x2315 = x2309 + x2314;
-Tbase TZ x2316 = x2306 + x2315;
-Tbase TZ x2317 = x2303 + x2316;
-Tbase TZ x2318 = x2300 + x2317;
-Tbase TZ x2319 = x2297 + x2318;
-Tbase TZ x2320 = x2294 + x2319;
-Tbase TZ x2321 = x2021 * x2054;
-Tbase TZ x2322 = x2024 * x2051;
-Tbase TZ x2323 = x2321 + x2322;
-Tbase TZ x2324 = 0x9;
-Tbase TZ x2325 = x2324 * x2323;
-Tbase TZ x2326 = x2320 + x2325;
-Tbase TZ x2327 = x2293 + x2326;
-Tbase TZ x2328 = 0x19;
-Tbase TZ x2329 = x2327 >> x2328;
-Tbase TZ x2330 = x2024 * x2078;
-Tbase TZ x2331 = 0x2;
-Tbase TZ x2332 = x2075 * x2331;
-Tbase TZ x2333 = x2027 * x2332;
-Tbase TZ x2334 = 0x2;
-Tbase TZ x2335 = x2072 * x2334;
-Tbase TZ x2336 = x2030 * x2335;
-Tbase TZ x2337 = 0x2;
-Tbase TZ x2338 = x2069 * x2337;
-Tbase TZ x2339 = x2033 * x2338;
-Tbase TZ x2340 = 0x2;
-Tbase TZ x2341 = x2066 * x2340;
-Tbase TZ x2342 = x2036 * x2341;
-Tbase TZ x2343 = 0x2;
-Tbase TZ x2344 = x2063 * x2343;
-Tbase TZ x2345 = x2039 * x2344;
-Tbase TZ x2346 = 0x2;
-Tbase TZ x2347 = x2060 * x2346;
-Tbase TZ x2348 = x2042 * x2347;
-Tbase TZ x2349 = 0x2;
-Tbase TZ x2350 = x2057 * x2349;
-Tbase TZ x2351 = x2045 * x2350;
-Tbase TZ x2352 = x2048 * x2054;
-Tbase TZ x2353 = x2351 + x2352;
-Tbase TZ x2354 = x2348 + x2353;
-Tbase TZ x2355 = x2345 + x2354;
-Tbase TZ x2356 = x2342 + x2355;
-Tbase TZ x2357 = x2339 + x2356;
-Tbase TZ x2358 = x2336 + x2357;
-Tbase TZ x2359 = x2333 + x2358;
-Tbase TZ x2360 = x2330 + x2359;
-Tbase TZ x2361 = x2021 * x2051;
-Tbase TZ x2362 = 0x9;
-Tbase TZ x2363 = x2362 * x2361;
-Tbase TZ x2364 = x2360 + x2363;
-Tbase TZ x2365 = x2329 + x2364;
-Tbase TZ x2366 = 0x19;
-Tbase TZ x2367 = x2365 >> x2366;
-Tbase TZ x2368 = x2021 * x2078;
-Tbase TZ x2369 = 0x2;
-Tbase TZ x2370 = x2075 * x2369;
-Tbase TZ x2371 = x2024 * x2370;
-Tbase TZ x2372 = 0x2;
-Tbase TZ x2373 = x2072 * x2372;
-Tbase TZ x2374 = x2027 * x2373;
-Tbase TZ x2375 = 0x2;
-Tbase TZ x2376 = x2069 * x2375;
-Tbase TZ x2377 = x2030 * x2376;
-Tbase TZ x2378 = 0x2;
-Tbase TZ x2379 = x2066 * x2378;
-Tbase TZ x2380 = x2033 * x2379;
-Tbase TZ x2381 = 0x2;
-Tbase TZ x2382 = x2063 * x2381;
-Tbase TZ x2383 = x2036 * x2382;
-Tbase TZ x2384 = 0x2;
-Tbase TZ x2385 = x2060 * x2384;
-Tbase TZ x2386 = x2039 * x2385;
-Tbase TZ x2387 = 0x2;
-Tbase TZ x2388 = x2057 * x2387;
-Tbase TZ x2389 = x2042 * x2388;
-Tbase TZ x2390 = 0x2;
-Tbase TZ x2391 = x2054 * x2390;
-Tbase TZ x2392 = x2045 * x2391;
-Tbase TZ x2393 = x2048 * x2051;
-Tbase TZ x2394 = x2392 + x2393;
-Tbase TZ x2395 = x2389 + x2394;
-Tbase TZ x2396 = x2386 + x2395;
-Tbase TZ x2397 = x2383 + x2396;
-Tbase TZ x2398 = x2380 + x2397;
-Tbase TZ x2399 = x2377 + x2398;
-Tbase TZ x2400 = x2374 + x2399;
-Tbase TZ x2401 = x2371 + x2400;
-Tbase TZ x2402 = x2368 + x2401;
-Tbase TZ x2403 = x2367 + x2402;
-Tbase TZ x2404 = 0x19;
-Tbase TZ x2405 = x2403 >> x2404;
-Tbase TZ x2406 = 0x9;
-Tbase TZ x2407 = x2406 * x2405;
-Tbase TZ x2408 = 0x3ffffff;
-Tbase TZ x2409 = x2117 & x2408;
-Tbase TZ x2410 = x2407 + x2409;
-Tbase TZ x2411 = 0x1a;
-Tbase TZ x2412 = x2410 >> x2411;
-Tbase TZ x2413 = 0x1ffffff;
-Tbase TZ x2414 = x2141 & x2413;
-Tbase TZ x2415 = x2412 + x2414;
-Tbase TZ x2416 = 0x1ffffff;
-Tbase TZ x2417 = x2403 & x2416;
-Tbase TZ x2418 = 0x1ffffff;
-Tbase TZ x2419 = x2365 & x2418;
-Tbase TZ x2420 = 0x1ffffff;
-Tbase TZ x2421 = x2327 & x2420;
-Tbase TZ x2422 = 0x1ffffff;
-Tbase TZ x2423 = x2291 & x2422;
-Tbase TZ x2424 = 0x1ffffff;
-Tbase TZ x2425 = x2257 & x2424;
-Tbase TZ x2426 = 0x1ffffff;
-Tbase TZ x2427 = x2225 & x2426;
-Tbase TZ x2428 = 0x1ffffff;
-Tbase TZ x2429 = x2195 & x2428;
-Tbase TZ x2430 = 0x19;
-Tbase TZ x2431 = x2415 >> x2430;
-Tbase TZ x2432 = 0x1ffffff;
-Tbase TZ x2433 = x2167 & x2432;
-Tbase TZ x2434 = x2431 + x2433;
-Tbase TZ x2435 = 0x1ffffff;
-Tbase TZ x2436 = x2415 & x2435;
-Tbase TZ x2437 = 0x3ffffff;
-Tbase TZ x2438 = x2410 & x2437;
-Tbase TZ x2439 = x48 * x2438;
-Tbase TZ x2440 = 0x2;
-Tbase TZ x2441 = x2436 * x2440;
-Tbase TZ x2442 = x39 * x2441;
-Tbase TZ x2443 = 0x2;
-Tbase TZ x2444 = x2434 * x2443;
-Tbase TZ x2445 = x40 * x2444;
-Tbase TZ x2446 = 0x2;
-Tbase TZ x2447 = x2429 * x2446;
-Tbase TZ x2448 = x41 * x2447;
-Tbase TZ x2449 = 0x2;
-Tbase TZ x2450 = x2427 * x2449;
-Tbase TZ x2451 = x42 * x2450;
-Tbase TZ x2452 = 0x2;
-Tbase TZ x2453 = x2425 * x2452;
-Tbase TZ x2454 = x43 * x2453;
-Tbase TZ x2455 = 0x2;
-Tbase TZ x2456 = x2423 * x2455;
-Tbase TZ x2457 = x44 * x2456;
-Tbase TZ x2458 = 0x2;
-Tbase TZ x2459 = x2421 * x2458;
-Tbase TZ x2460 = x45 * x2459;
-Tbase TZ x2461 = 0x2;
-Tbase TZ x2462 = x2419 * x2461;
-Tbase TZ x2463 = x46 * x2462;
-Tbase TZ x2464 = 0x2;
-Tbase TZ x2465 = x2417 * x2464;
-Tbase TZ x2466 = x47 * x2465;
-Tbase TZ x2467 = x2463 + x2466;
-Tbase TZ x2468 = x2460 + x2467;
-Tbase TZ x2469 = x2457 + x2468;
-Tbase TZ x2470 = x2454 + x2469;
-Tbase TZ x2471 = x2451 + x2470;
-Tbase TZ x2472 = x2448 + x2471;
-Tbase TZ x2473 = x2445 + x2472;
-Tbase TZ x2474 = x2442 + x2473;
-Tbase TZ x2475 = 0x9;
-Tbase TZ x2476 = x2475 * x2474;
-Tbase TZ x2477 = x2439 + x2476;
-Tbase TZ x2478 = 0x1a;
-Tbase TZ x2479 = x2477 >> x2478;
-Tbase TZ x2480 = x47 * x2438;
-Tbase TZ x2481 = x48 * x2436;
-Tbase TZ x2482 = x2480 + x2481;
-Tbase TZ x2483 = x39 * x2434;
-Tbase TZ x2484 = x40 * x2429;
-Tbase TZ x2485 = x41 * x2427;
-Tbase TZ x2486 = x42 * x2425;
-Tbase TZ x2487 = x43 * x2423;
-Tbase TZ x2488 = x44 * x2421;
-Tbase TZ x2489 = x45 * x2419;
-Tbase TZ x2490 = x46 * x2417;
-Tbase TZ x2491 = x2489 + x2490;
-Tbase TZ x2492 = x2488 + x2491;
-Tbase TZ x2493 = x2487 + x2492;
-Tbase TZ x2494 = x2486 + x2493;
-Tbase TZ x2495 = x2485 + x2494;
-Tbase TZ x2496 = x2484 + x2495;
-Tbase TZ x2497 = x2483 + x2496;
-Tbase TZ x2498 = 0x9;
-Tbase TZ x2499 = x2498 * x2497;
-Tbase TZ x2500 = x2482 + x2499;
-Tbase TZ x2501 = x2479 + x2500;
-Tbase TZ x2502 = 0x19;
-Tbase TZ x2503 = x2501 >> x2502;
-Tbase TZ x2504 = x46 * x2438;
-Tbase TZ x2505 = 0x2;
-Tbase TZ x2506 = x2436 * x2505;
-Tbase TZ x2507 = x47 * x2506;
-Tbase TZ x2508 = x48 * x2434;
-Tbase TZ x2509 = x2507 + x2508;
-Tbase TZ x2510 = x2504 + x2509;
-Tbase TZ x2511 = x39 * x2429;
-Tbase TZ x2512 = x40 * x2427;
-Tbase TZ x2513 = x41 * x2425;
-Tbase TZ x2514 = x42 * x2423;
-Tbase TZ x2515 = x43 * x2421;
-Tbase TZ x2516 = x44 * x2419;
-Tbase TZ x2517 = x45 * x2417;
-Tbase TZ x2518 = x2516 + x2517;
-Tbase TZ x2519 = x2515 + x2518;
-Tbase TZ x2520 = x2514 + x2519;
-Tbase TZ x2521 = x2513 + x2520;
-Tbase TZ x2522 = x2512 + x2521;
-Tbase TZ x2523 = x2511 + x2522;
-Tbase TZ x2524 = 0x9;
-Tbase TZ x2525 = x2524 * x2523;
-Tbase TZ x2526 = x2510 + x2525;
-Tbase TZ x2527 = x2503 + x2526;
-Tbase TZ x2528 = 0x19;
-Tbase TZ x2529 = x2527 >> x2528;
-Tbase TZ x2530 = x45 * x2438;
-Tbase TZ x2531 = 0x2;
-Tbase TZ x2532 = x2436 * x2531;
-Tbase TZ x2533 = x46 * x2532;
-Tbase TZ x2534 = 0x2;
-Tbase TZ x2535 = x2434 * x2534;
-Tbase TZ x2536 = x47 * x2535;
-Tbase TZ x2537 = x48 * x2429;
-Tbase TZ x2538 = x2536 + x2537;
-Tbase TZ x2539 = x2533 + x2538;
-Tbase TZ x2540 = x2530 + x2539;
-Tbase TZ x2541 = x39 * x2427;
-Tbase TZ x2542 = x40 * x2425;
-Tbase TZ x2543 = x41 * x2423;
-Tbase TZ x2544 = x42 * x2421;
-Tbase TZ x2545 = x43 * x2419;
-Tbase TZ x2546 = x44 * x2417;
-Tbase TZ x2547 = x2545 + x2546;
-Tbase TZ x2548 = x2544 + x2547;
-Tbase TZ x2549 = x2543 + x2548;
-Tbase TZ x2550 = x2542 + x2549;
-Tbase TZ x2551 = x2541 + x2550;
-Tbase TZ x2552 = 0x9;
-Tbase TZ x2553 = x2552 * x2551;
-Tbase TZ x2554 = x2540 + x2553;
-Tbase TZ x2555 = x2529 + x2554;
-Tbase TZ x2556 = 0x19;
-Tbase TZ x2557 = x2555 >> x2556;
-Tbase TZ x2558 = x44 * x2438;
-Tbase TZ x2559 = 0x2;
-Tbase TZ x2560 = x2436 * x2559;
-Tbase TZ x2561 = x45 * x2560;
-Tbase TZ x2562 = 0x2;
-Tbase TZ x2563 = x2434 * x2562;
-Tbase TZ x2564 = x46 * x2563;
-Tbase TZ x2565 = 0x2;
-Tbase TZ x2566 = x2429 * x2565;
-Tbase TZ x2567 = x47 * x2566;
-Tbase TZ x2568 = x48 * x2427;
-Tbase TZ x2569 = x2567 + x2568;
-Tbase TZ x2570 = x2564 + x2569;
-Tbase TZ x2571 = x2561 + x2570;
-Tbase TZ x2572 = x2558 + x2571;
-Tbase TZ x2573 = x39 * x2425;
-Tbase TZ x2574 = x40 * x2423;
-Tbase TZ x2575 = x41 * x2421;
-Tbase TZ x2576 = x42 * x2419;
-Tbase TZ x2577 = x43 * x2417;
-Tbase TZ x2578 = x2576 + x2577;
-Tbase TZ x2579 = x2575 + x2578;
-Tbase TZ x2580 = x2574 + x2579;
-Tbase TZ x2581 = x2573 + x2580;
-Tbase TZ x2582 = 0x9;
-Tbase TZ x2583 = x2582 * x2581;
-Tbase TZ x2584 = x2572 + x2583;
-Tbase TZ x2585 = x2557 + x2584;
-Tbase TZ x2586 = 0x19;
-Tbase TZ x2587 = x2585 >> x2586;
-Tbase TZ x2588 = x43 * x2438;
-Tbase TZ x2589 = 0x2;
-Tbase TZ x2590 = x2436 * x2589;
-Tbase TZ x2591 = x44 * x2590;
-Tbase TZ x2592 = 0x2;
-Tbase TZ x2593 = x2434 * x2592;
-Tbase TZ x2594 = x45 * x2593;
-Tbase TZ x2595 = 0x2;
-Tbase TZ x2596 = x2429 * x2595;
-Tbase TZ x2597 = x46 * x2596;
-Tbase TZ x2598 = 0x2;
-Tbase TZ x2599 = x2427 * x2598;
-Tbase TZ x2600 = x47 * x2599;
-Tbase TZ x2601 = x48 * x2425;
-Tbase TZ x2602 = x2600 + x2601;
-Tbase TZ x2603 = x2597 + x2602;
-Tbase TZ x2604 = x2594 + x2603;
-Tbase TZ x2605 = x2591 + x2604;
-Tbase TZ x2606 = x2588 + x2605;
-Tbase TZ x2607 = x39 * x2423;
-Tbase TZ x2608 = x40 * x2421;
-Tbase TZ x2609 = x41 * x2419;
-Tbase TZ x2610 = x42 * x2417;
-Tbase TZ x2611 = x2609 + x2610;
-Tbase TZ x2612 = x2608 + x2611;
-Tbase TZ x2613 = x2607 + x2612;
-Tbase TZ x2614 = 0x9;
-Tbase TZ x2615 = x2614 * x2613;
-Tbase TZ x2616 = x2606 + x2615;
-Tbase TZ x2617 = x2587 + x2616;
-Tbase TZ x2618 = 0x19;
-Tbase TZ x2619 = x2617 >> x2618;
-Tbase TZ x2620 = x42 * x2438;
-Tbase TZ x2621 = 0x2;
-Tbase TZ x2622 = x2436 * x2621;
-Tbase TZ x2623 = x43 * x2622;
-Tbase TZ x2624 = 0x2;
-Tbase TZ x2625 = x2434 * x2624;
-Tbase TZ x2626 = x44 * x2625;
-Tbase TZ x2627 = 0x2;
-Tbase TZ x2628 = x2429 * x2627;
-Tbase TZ x2629 = x45 * x2628;
-Tbase TZ x2630 = 0x2;
-Tbase TZ x2631 = x2427 * x2630;
-Tbase TZ x2632 = x46 * x2631;
-Tbase TZ x2633 = 0x2;
-Tbase TZ x2634 = x2425 * x2633;
-Tbase TZ x2635 = x47 * x2634;
-Tbase TZ x2636 = x48 * x2423;
-Tbase TZ x2637 = x2635 + x2636;
-Tbase TZ x2638 = x2632 + x2637;
-Tbase TZ x2639 = x2629 + x2638;
-Tbase TZ x2640 = x2626 + x2639;
-Tbase TZ x2641 = x2623 + x2640;
-Tbase TZ x2642 = x2620 + x2641;
-Tbase TZ x2643 = x39 * x2421;
-Tbase TZ x2644 = x40 * x2419;
-Tbase TZ x2645 = x41 * x2417;
-Tbase TZ x2646 = x2644 + x2645;
-Tbase TZ x2647 = x2643 + x2646;
-Tbase TZ x2648 = 0x9;
-Tbase TZ x2649 = x2648 * x2647;
-Tbase TZ x2650 = x2642 + x2649;
-Tbase TZ x2651 = x2619 + x2650;
-Tbase TZ x2652 = 0x19;
-Tbase TZ x2653 = x2651 >> x2652;
-Tbase TZ x2654 = x41 * x2438;
-Tbase TZ x2655 = 0x2;
-Tbase TZ x2656 = x2436 * x2655;
-Tbase TZ x2657 = x42 * x2656;
-Tbase TZ x2658 = 0x2;
-Tbase TZ x2659 = x2434 * x2658;
-Tbase TZ x2660 = x43 * x2659;
-Tbase TZ x2661 = 0x2;
-Tbase TZ x2662 = x2429 * x2661;
-Tbase TZ x2663 = x44 * x2662;
-Tbase TZ x2664 = 0x2;
-Tbase TZ x2665 = x2427 * x2664;
-Tbase TZ x2666 = x45 * x2665;
-Tbase TZ x2667 = 0x2;
-Tbase TZ x2668 = x2425 * x2667;
-Tbase TZ x2669 = x46 * x2668;
-Tbase TZ x2670 = 0x2;
-Tbase TZ x2671 = x2423 * x2670;
-Tbase TZ x2672 = x47 * x2671;
-Tbase TZ x2673 = x48 * x2421;
-Tbase TZ x2674 = x2672 + x2673;
-Tbase TZ x2675 = x2669 + x2674;
-Tbase TZ x2676 = x2666 + x2675;
-Tbase TZ x2677 = x2663 + x2676;
-Tbase TZ x2678 = x2660 + x2677;
-Tbase TZ x2679 = x2657 + x2678;
-Tbase TZ x2680 = x2654 + x2679;
-Tbase TZ x2681 = x39 * x2419;
-Tbase TZ x2682 = x40 * x2417;
-Tbase TZ x2683 = x2681 + x2682;
-Tbase TZ x2684 = 0x9;
-Tbase TZ x2685 = x2684 * x2683;
-Tbase TZ x2686 = x2680 + x2685;
-Tbase TZ x2687 = x2653 + x2686;
-Tbase TZ x2688 = 0x19;
-Tbase TZ x2689 = x2687 >> x2688;
-Tbase TZ x2690 = x40 * x2438;
-Tbase TZ x2691 = 0x2;
-Tbase TZ x2692 = x2436 * x2691;
-Tbase TZ x2693 = x41 * x2692;
-Tbase TZ x2694 = 0x2;
-Tbase TZ x2695 = x2434 * x2694;
-Tbase TZ x2696 = x42 * x2695;
-Tbase TZ x2697 = 0x2;
-Tbase TZ x2698 = x2429 * x2697;
-Tbase TZ x2699 = x43 * x2698;
-Tbase TZ x2700 = 0x2;
-Tbase TZ x2701 = x2427 * x2700;
-Tbase TZ x2702 = x44 * x2701;
-Tbase TZ x2703 = 0x2;
-Tbase TZ x2704 = x2425 * x2703;
-Tbase TZ x2705 = x45 * x2704;
-Tbase TZ x2706 = 0x2;
-Tbase TZ x2707 = x2423 * x2706;
-Tbase TZ x2708 = x46 * x2707;
-Tbase TZ x2709 = 0x2;
-Tbase TZ x2710 = x2421 * x2709;
-Tbase TZ x2711 = x47 * x2710;
-Tbase TZ x2712 = x48 * x2419;
-Tbase TZ x2713 = x2711 + x2712;
-Tbase TZ x2714 = x2708 + x2713;
-Tbase TZ x2715 = x2705 + x2714;
-Tbase TZ x2716 = x2702 + x2715;
-Tbase TZ x2717 = x2699 + x2716;
-Tbase TZ x2718 = x2696 + x2717;
-Tbase TZ x2719 = x2693 + x2718;
-Tbase TZ x2720 = x2690 + x2719;
-Tbase TZ x2721 = x39 * x2417;
-Tbase TZ x2722 = 0x9;
-Tbase TZ x2723 = x2722 * x2721;
-Tbase TZ x2724 = x2720 + x2723;
-Tbase TZ x2725 = x2689 + x2724;
-Tbase TZ x2726 = 0x19;
-Tbase TZ x2727 = x2725 >> x2726;
-Tbase TZ x2728 = x39 * x2438;
-Tbase TZ x2729 = 0x2;
-Tbase TZ x2730 = x2436 * x2729;
-Tbase TZ x2731 = x40 * x2730;
-Tbase TZ x2732 = 0x2;
-Tbase TZ x2733 = x2434 * x2732;
-Tbase TZ x2734 = x41 * x2733;
-Tbase TZ x2735 = 0x2;
-Tbase TZ x2736 = x2429 * x2735;
-Tbase TZ x2737 = x42 * x2736;
-Tbase TZ x2738 = 0x2;
-Tbase TZ x2739 = x2427 * x2738;
-Tbase TZ x2740 = x43 * x2739;
-Tbase TZ x2741 = 0x2;
-Tbase TZ x2742 = x2425 * x2741;
-Tbase TZ x2743 = x44 * x2742;
-Tbase TZ x2744 = 0x2;
-Tbase TZ x2745 = x2423 * x2744;
-Tbase TZ x2746 = x45 * x2745;
-Tbase TZ x2747 = 0x2;
-Tbase TZ x2748 = x2421 * x2747;
-Tbase TZ x2749 = x46 * x2748;
-Tbase TZ x2750 = 0x2;
-Tbase TZ x2751 = x2419 * x2750;
-Tbase TZ x2752 = x47 * x2751;
-Tbase TZ x2753 = x48 * x2417;
-Tbase TZ x2754 = x2752 + x2753;
-Tbase TZ x2755 = x2749 + x2754;
-Tbase TZ x2756 = x2746 + x2755;
-Tbase TZ x2757 = x2743 + x2756;
-Tbase TZ x2758 = x2740 + x2757;
-Tbase TZ x2759 = x2737 + x2758;
-Tbase TZ x2760 = x2734 + x2759;
-Tbase TZ x2761 = x2731 + x2760;
-Tbase TZ x2762 = x2728 + x2761;
-Tbase TZ x2763 = x2727 + x2762;
-Tbase TZ x2764 = 0x19;
-Tbase TZ x2765 = x2763 >> x2764;
-Tbase TZ x2766 = 0x9;
-Tbase TZ x2767 = x2766 * x2765;
-Tbase TZ x2768 = 0x3ffffff;
-Tbase TZ x2769 = x2477 & x2768;
-Tbase TZ x2770 = x2767 + x2769;
-Tbase TZ x2771 = 0x1a;
-Tbase TZ x2772 = x2770 >> x2771;
-Tbase TZ x2773 = 0x1ffffff;
-Tbase TZ x2774 = x2501 & x2773;
-Tbase TZ x2775 = x2772 + x2774;
-Tbase TZ x2776 = 0x1ffffff;
-Tbase TZ x2777 = x2763 & x2776;
-Tbase TZ x2778 = 0x1ffffff;
-Tbase TZ x2779 = x2725 & x2778;
-Tbase TZ x2780 = 0x1ffffff;
-Tbase TZ x2781 = x2687 & x2780;
-Tbase TZ x2782 = 0x1ffffff;
-Tbase TZ x2783 = x2651 & x2782;
-Tbase TZ x2784 = 0x1ffffff;
-Tbase TZ x2785 = x2617 & x2784;
-Tbase TZ x2786 = 0x1ffffff;
-Tbase TZ x2787 = x2585 & x2786;
-Tbase TZ x2788 = 0x1ffffff;
-Tbase TZ x2789 = x2555 & x2788;
-Tbase TZ x2790 = 0x19;
-Tbase TZ x2791 = x2775 >> x2790;
-Tbase TZ x2792 = 0x1ffffff;
-Tbase TZ x2793 = x2527 & x2792;
-Tbase TZ x2794 = x2791 + x2793;
-Tbase TZ x2795 = 0x1ffffff;
-Tbase TZ x2796 = x2775 & x2795;
-Tbase TZ x2797 = 0x3ffffff;
-Tbase TZ x2798 = x2770 & x2797;
-Tbase TZ x2799 = x458 * x848;
-Tbase TZ x2800 = 0x2;
-Tbase TZ x2801 = x846 * x2800;
-Tbase TZ x2802 = x437 * x2801;
-Tbase TZ x2803 = 0x2;
-Tbase TZ x2804 = x844 * x2803;
-Tbase TZ x2805 = x439 * x2804;
-Tbase TZ x2806 = 0x2;
-Tbase TZ x2807 = x839 * x2806;
-Tbase TZ x2808 = x441 * x2807;
-Tbase TZ x2809 = 0x2;
-Tbase TZ x2810 = x837 * x2809;
-Tbase TZ x2811 = x443 * x2810;
-Tbase TZ x2812 = 0x2;
-Tbase TZ x2813 = x835 * x2812;
-Tbase TZ x2814 = x445 * x2813;
-Tbase TZ x2815 = 0x2;
-Tbase TZ x2816 = x833 * x2815;
-Tbase TZ x2817 = x447 * x2816;
-Tbase TZ x2818 = 0x2;
-Tbase TZ x2819 = x831 * x2818;
-Tbase TZ x2820 = x449 * x2819;
-Tbase TZ x2821 = 0x2;
-Tbase TZ x2822 = x829 * x2821;
-Tbase TZ x2823 = x454 * x2822;
-Tbase TZ x2824 = 0x2;
-Tbase TZ x2825 = x827 * x2824;
-Tbase TZ x2826 = x456 * x2825;
-Tbase TZ x2827 = x2823 + x2826;
-Tbase TZ x2828 = x2820 + x2827;
-Tbase TZ x2829 = x2817 + x2828;
-Tbase TZ x2830 = x2814 + x2829;
-Tbase TZ x2831 = x2811 + x2830;
-Tbase TZ x2832 = x2808 + x2831;
-Tbase TZ x2833 = x2805 + x2832;
-Tbase TZ x2834 = x2802 + x2833;
-Tbase TZ x2835 = 0x9;
-Tbase TZ x2836 = x2835 * x2834;
-Tbase TZ x2837 = x2799 + x2836;
-Tbase TZ x2838 = 0x1a;
-Tbase TZ x2839 = x2837 >> x2838;
-Tbase TZ x2840 = x456 * x848;
-Tbase TZ x2841 = x458 * x846;
-Tbase TZ x2842 = x2840 + x2841;
-Tbase TZ x2843 = x437 * x844;
-Tbase TZ x2844 = x439 * x839;
-Tbase TZ x2845 = x441 * x837;
-Tbase TZ x2846 = x443 * x835;
-Tbase TZ x2847 = x445 * x833;
-Tbase TZ x2848 = x447 * x831;
-Tbase TZ x2849 = x449 * x829;
-Tbase TZ x2850 = x454 * x827;
-Tbase TZ x2851 = x2849 + x2850;
-Tbase TZ x2852 = x2848 + x2851;
-Tbase TZ x2853 = x2847 + x2852;
-Tbase TZ x2854 = x2846 + x2853;
-Tbase TZ x2855 = x2845 + x2854;
-Tbase TZ x2856 = x2844 + x2855;
-Tbase TZ x2857 = x2843 + x2856;
-Tbase TZ x2858 = 0x9;
-Tbase TZ x2859 = x2858 * x2857;
-Tbase TZ x2860 = x2842 + x2859;
-Tbase TZ x2861 = x2839 + x2860;
-Tbase TZ x2862 = 0x19;
-Tbase TZ x2863 = x2861 >> x2862;
-Tbase TZ x2864 = x454 * x848;
-Tbase TZ x2865 = 0x2;
-Tbase TZ x2866 = x846 * x2865;
-Tbase TZ x2867 = x456 * x2866;
-Tbase TZ x2868 = x458 * x844;
-Tbase TZ x2869 = x2867 + x2868;
-Tbase TZ x2870 = x2864 + x2869;
-Tbase TZ x2871 = x437 * x839;
-Tbase TZ x2872 = x439 * x837;
-Tbase TZ x2873 = x441 * x835;
-Tbase TZ x2874 = x443 * x833;
-Tbase TZ x2875 = x445 * x831;
-Tbase TZ x2876 = x447 * x829;
-Tbase TZ x2877 = x449 * x827;
-Tbase TZ x2878 = x2876 + x2877;
-Tbase TZ x2879 = x2875 + x2878;
-Tbase TZ x2880 = x2874 + x2879;
-Tbase TZ x2881 = x2873 + x2880;
-Tbase TZ x2882 = x2872 + x2881;
-Tbase TZ x2883 = x2871 + x2882;
-Tbase TZ x2884 = 0x9;
-Tbase TZ x2885 = x2884 * x2883;
-Tbase TZ x2886 = x2870 + x2885;
-Tbase TZ x2887 = x2863 + x2886;
-Tbase TZ x2888 = 0x19;
-Tbase TZ x2889 = x2887 >> x2888;
-Tbase TZ x2890 = x449 * x848;
-Tbase TZ x2891 = 0x2;
-Tbase TZ x2892 = x846 * x2891;
-Tbase TZ x2893 = x454 * x2892;
-Tbase TZ x2894 = 0x2;
-Tbase TZ x2895 = x844 * x2894;
-Tbase TZ x2896 = x456 * x2895;
-Tbase TZ x2897 = x458 * x839;
-Tbase TZ x2898 = x2896 + x2897;
-Tbase TZ x2899 = x2893 + x2898;
-Tbase TZ x2900 = x2890 + x2899;
-Tbase TZ x2901 = x437 * x837;
-Tbase TZ x2902 = x439 * x835;
-Tbase TZ x2903 = x441 * x833;
-Tbase TZ x2904 = x443 * x831;
-Tbase TZ x2905 = x445 * x829;
-Tbase TZ x2906 = x447 * x827;
-Tbase TZ x2907 = x2905 + x2906;
-Tbase TZ x2908 = x2904 + x2907;
-Tbase TZ x2909 = x2903 + x2908;
-Tbase TZ x2910 = x2902 + x2909;
-Tbase TZ x2911 = x2901 + x2910;
-Tbase TZ x2912 = 0x9;
-Tbase TZ x2913 = x2912 * x2911;
-Tbase TZ x2914 = x2900 + x2913;
-Tbase TZ x2915 = x2889 + x2914;
-Tbase TZ x2916 = 0x19;
-Tbase TZ x2917 = x2915 >> x2916;
-Tbase TZ x2918 = x447 * x848;
-Tbase TZ x2919 = 0x2;
-Tbase TZ x2920 = x846 * x2919;
-Tbase TZ x2921 = x449 * x2920;
-Tbase TZ x2922 = 0x2;
-Tbase TZ x2923 = x844 * x2922;
-Tbase TZ x2924 = x454 * x2923;
-Tbase TZ x2925 = 0x2;
-Tbase TZ x2926 = x839 * x2925;
-Tbase TZ x2927 = x456 * x2926;
-Tbase TZ x2928 = x458 * x837;
-Tbase TZ x2929 = x2927 + x2928;
-Tbase TZ x2930 = x2924 + x2929;
-Tbase TZ x2931 = x2921 + x2930;
-Tbase TZ x2932 = x2918 + x2931;
-Tbase TZ x2933 = x437 * x835;
-Tbase TZ x2934 = x439 * x833;
-Tbase TZ x2935 = x441 * x831;
-Tbase TZ x2936 = x443 * x829;
-Tbase TZ x2937 = x445 * x827;
-Tbase TZ x2938 = x2936 + x2937;
-Tbase TZ x2939 = x2935 + x2938;
-Tbase TZ x2940 = x2934 + x2939;
-Tbase TZ x2941 = x2933 + x2940;
-Tbase TZ x2942 = 0x9;
-Tbase TZ x2943 = x2942 * x2941;
-Tbase TZ x2944 = x2932 + x2943;
-Tbase TZ x2945 = x2917 + x2944;
-Tbase TZ x2946 = 0x19;
-Tbase TZ x2947 = x2945 >> x2946;
-Tbase TZ x2948 = x445 * x848;
-Tbase TZ x2949 = 0x2;
-Tbase TZ x2950 = x846 * x2949;
-Tbase TZ x2951 = x447 * x2950;
-Tbase TZ x2952 = 0x2;
-Tbase TZ x2953 = x844 * x2952;
-Tbase TZ x2954 = x449 * x2953;
-Tbase TZ x2955 = 0x2;
-Tbase TZ x2956 = x839 * x2955;
-Tbase TZ x2957 = x454 * x2956;
-Tbase TZ x2958 = 0x2;
-Tbase TZ x2959 = x837 * x2958;
-Tbase TZ x2960 = x456 * x2959;
-Tbase TZ x2961 = x458 * x835;
-Tbase TZ x2962 = x2960 + x2961;
-Tbase TZ x2963 = x2957 + x2962;
-Tbase TZ x2964 = x2954 + x2963;
-Tbase TZ x2965 = x2951 + x2964;
-Tbase TZ x2966 = x2948 + x2965;
-Tbase TZ x2967 = x437 * x833;
-Tbase TZ x2968 = x439 * x831;
-Tbase TZ x2969 = x441 * x829;
-Tbase TZ x2970 = x443 * x827;
-Tbase TZ x2971 = x2969 + x2970;
-Tbase TZ x2972 = x2968 + x2971;
-Tbase TZ x2973 = x2967 + x2972;
-Tbase TZ x2974 = 0x9;
-Tbase TZ x2975 = x2974 * x2973;
-Tbase TZ x2976 = x2966 + x2975;
-Tbase TZ x2977 = x2947 + x2976;
-Tbase TZ x2978 = 0x19;
-Tbase TZ x2979 = x2977 >> x2978;
-Tbase TZ x2980 = x443 * x848;
-Tbase TZ x2981 = 0x2;
-Tbase TZ x2982 = x846 * x2981;
-Tbase TZ x2983 = x445 * x2982;
-Tbase TZ x2984 = 0x2;
-Tbase TZ x2985 = x844 * x2984;
-Tbase TZ x2986 = x447 * x2985;
-Tbase TZ x2987 = 0x2;
-Tbase TZ x2988 = x839 * x2987;
-Tbase TZ x2989 = x449 * x2988;
-Tbase TZ x2990 = 0x2;
-Tbase TZ x2991 = x837 * x2990;
-Tbase TZ x2992 = x454 * x2991;
-Tbase TZ x2993 = 0x2;
-Tbase TZ x2994 = x835 * x2993;
-Tbase TZ x2995 = x456 * x2994;
-Tbase TZ x2996 = x458 * x833;
-Tbase TZ x2997 = x2995 + x2996;
-Tbase TZ x2998 = x2992 + x2997;
-Tbase TZ x2999 = x2989 + x2998;
-Tbase TZ x3000 = x2986 + x2999;
-Tbase TZ x3001 = x2983 + x3000;
-Tbase TZ x3002 = x2980 + x3001;
-Tbase TZ x3003 = x437 * x831;
-Tbase TZ x3004 = x439 * x829;
-Tbase TZ x3005 = x441 * x827;
-Tbase TZ x3006 = x3004 + x3005;
-Tbase TZ x3007 = x3003 + x3006;
-Tbase TZ x3008 = 0x9;
-Tbase TZ x3009 = x3008 * x3007;
-Tbase TZ x3010 = x3002 + x3009;
-Tbase TZ x3011 = x2979 + x3010;
-Tbase TZ x3012 = 0x19;
-Tbase TZ x3013 = x3011 >> x3012;
-Tbase TZ x3014 = x441 * x848;
-Tbase TZ x3015 = 0x2;
-Tbase TZ x3016 = x846 * x3015;
-Tbase TZ x3017 = x443 * x3016;
-Tbase TZ x3018 = 0x2;
-Tbase TZ x3019 = x844 * x3018;
-Tbase TZ x3020 = x445 * x3019;
-Tbase TZ x3021 = 0x2;
-Tbase TZ x3022 = x839 * x3021;
-Tbase TZ x3023 = x447 * x3022;
-Tbase TZ x3024 = 0x2;
-Tbase TZ x3025 = x837 * x3024;
-Tbase TZ x3026 = x449 * x3025;
-Tbase TZ x3027 = 0x2;
-Tbase TZ x3028 = x835 * x3027;
-Tbase TZ x3029 = x454 * x3028;
-Tbase TZ x3030 = 0x2;
-Tbase TZ x3031 = x833 * x3030;
-Tbase TZ x3032 = x456 * x3031;
-Tbase TZ x3033 = x458 * x831;
-Tbase TZ x3034 = x3032 + x3033;
-Tbase TZ x3035 = x3029 + x3034;
-Tbase TZ x3036 = x3026 + x3035;
-Tbase TZ x3037 = x3023 + x3036;
-Tbase TZ x3038 = x3020 + x3037;
-Tbase TZ x3039 = x3017 + x3038;
-Tbase TZ x3040 = x3014 + x3039;
-Tbase TZ x3041 = x437 * x829;
-Tbase TZ x3042 = x439 * x827;
-Tbase TZ x3043 = x3041 + x3042;
-Tbase TZ x3044 = 0x9;
-Tbase TZ x3045 = x3044 * x3043;
-Tbase TZ x3046 = x3040 + x3045;
-Tbase TZ x3047 = x3013 + x3046;
-Tbase TZ x3048 = 0x19;
-Tbase TZ x3049 = x3047 >> x3048;
-Tbase TZ x3050 = x439 * x848;
-Tbase TZ x3051 = 0x2;
-Tbase TZ x3052 = x846 * x3051;
-Tbase TZ x3053 = x441 * x3052;
-Tbase TZ x3054 = 0x2;
-Tbase TZ x3055 = x844 * x3054;
-Tbase TZ x3056 = x443 * x3055;
-Tbase TZ x3057 = 0x2;
-Tbase TZ x3058 = x839 * x3057;
-Tbase TZ x3059 = x445 * x3058;
-Tbase TZ x3060 = 0x2;
-Tbase TZ x3061 = x837 * x3060;
-Tbase TZ x3062 = x447 * x3061;
-Tbase TZ x3063 = 0x2;
-Tbase TZ x3064 = x835 * x3063;
-Tbase TZ x3065 = x449 * x3064;
-Tbase TZ x3066 = 0x2;
-Tbase TZ x3067 = x833 * x3066;
-Tbase TZ x3068 = x454 * x3067;
-Tbase TZ x3069 = 0x2;
-Tbase TZ x3070 = x831 * x3069;
-Tbase TZ x3071 = x456 * x3070;
-Tbase TZ x3072 = x458 * x829;
-Tbase TZ x3073 = x3071 + x3072;
-Tbase TZ x3074 = x3068 + x3073;
-Tbase TZ x3075 = x3065 + x3074;
-Tbase TZ x3076 = x3062 + x3075;
-Tbase TZ x3077 = x3059 + x3076;
-Tbase TZ x3078 = x3056 + x3077;
-Tbase TZ x3079 = x3053 + x3078;
-Tbase TZ x3080 = x3050 + x3079;
-Tbase TZ x3081 = x437 * x827;
-Tbase TZ x3082 = 0x9;
-Tbase TZ x3083 = x3082 * x3081;
-Tbase TZ x3084 = x3080 + x3083;
-Tbase TZ x3085 = x3049 + x3084;
-Tbase TZ x3086 = 0x19;
-Tbase TZ x3087 = x3085 >> x3086;
-Tbase TZ x3088 = x437 * x848;
-Tbase TZ x3089 = 0x2;
-Tbase TZ x3090 = x846 * x3089;
-Tbase TZ x3091 = x439 * x3090;
-Tbase TZ x3092 = 0x2;
-Tbase TZ x3093 = x844 * x3092;
-Tbase TZ x3094 = x441 * x3093;
-Tbase TZ x3095 = 0x2;
-Tbase TZ x3096 = x839 * x3095;
-Tbase TZ x3097 = x443 * x3096;
-Tbase TZ x3098 = 0x2;
-Tbase TZ x3099 = x837 * x3098;
-Tbase TZ x3100 = x445 * x3099;
-Tbase TZ x3101 = 0x2;
-Tbase TZ x3102 = x835 * x3101;
-Tbase TZ x3103 = x447 * x3102;
-Tbase TZ x3104 = 0x2;
-Tbase TZ x3105 = x833 * x3104;
-Tbase TZ x3106 = x449 * x3105;
-Tbase TZ x3107 = 0x2;
-Tbase TZ x3108 = x831 * x3107;
-Tbase TZ x3109 = x454 * x3108;
-Tbase TZ x3110 = 0x2;
-Tbase TZ x3111 = x829 * x3110;
-Tbase TZ x3112 = x456 * x3111;
-Tbase TZ x3113 = x458 * x827;
-Tbase TZ x3114 = x3112 + x3113;
-Tbase TZ x3115 = x3109 + x3114;
-Tbase TZ x3116 = x3106 + x3115;
-Tbase TZ x3117 = x3103 + x3116;
-Tbase TZ x3118 = x3100 + x3117;
-Tbase TZ x3119 = x3097 + x3118;
-Tbase TZ x3120 = x3094 + x3119;
-Tbase TZ x3121 = x3091 + x3120;
-Tbase TZ x3122 = x3088 + x3121;
-Tbase TZ x3123 = x3087 + x3122;
-Tbase TZ x3124 = 0x19;
-Tbase TZ x3125 = x3123 >> x3124;
-Tbase TZ x3126 = 0x9;
-Tbase TZ x3127 = x3126 * x3125;
-Tbase TZ x3128 = 0x3ffffff;
-Tbase TZ x3129 = x2837 & x3128;
-Tbase TZ x3130 = x3127 + x3129;
-Tbase TZ x3131 = 0x1a;
-Tbase TZ x3132 = x3130 >> x3131;
-Tbase TZ x3133 = 0x1ffffff;
-Tbase TZ x3134 = x2861 & x3133;
-Tbase TZ x3135 = x3132 + x3134;
-Tbase TZ x3136 = 0x1ffffff;
-Tbase TZ x3137 = x3123 & x3136;
-Tbase TZ x3138 = 0x1ffffff;
-Tbase TZ x3139 = x3085 & x3138;
-Tbase TZ x3140 = 0x1ffffff;
-Tbase TZ x3141 = x3047 & x3140;
-Tbase TZ x3142 = 0x1ffffff;
-Tbase TZ x3143 = x3011 & x3142;
-Tbase TZ x3144 = 0x1ffffff;
-Tbase TZ x3145 = x2977 & x3144;
-Tbase TZ x3146 = 0x1ffffff;
-Tbase TZ x3147 = x2945 & x3146;
-Tbase TZ x3148 = 0x1ffffff;
-Tbase TZ x3149 = x2915 & x3148;
-Tbase TZ x3150 = 0x19;
-Tbase TZ x3151 = x3135 >> x3150;
-Tbase TZ x3152 = 0x1ffffff;
-Tbase TZ x3153 = x2887 & x3152;
-Tbase TZ x3154 = x3151 + x3153;
-Tbase TZ x3155 = 0x1ffffff;
-Tbase TZ x3156 = x3135 & x3155;
-Tbase TZ x3157 = 0x3ffffff;
-Tbase TZ x3158 = x3130 & x3157;
-Tbase TZ x3159 = x38 * x878;
-Tbase TZ x3160 = 0x2;
-Tbase TZ x3161 = x875 * x3160;
-Tbase TZ x3162 = x29 * x3161;
-Tbase TZ x3163 = 0x2;
-Tbase TZ x3164 = x872 * x3163;
-Tbase TZ x3165 = x30 * x3164;
-Tbase TZ x3166 = 0x2;
-Tbase TZ x3167 = x869 * x3166;
-Tbase TZ x3168 = x31 * x3167;
-Tbase TZ x3169 = 0x2;
-Tbase TZ x3170 = x866 * x3169;
-Tbase TZ x3171 = x32 * x3170;
-Tbase TZ x3172 = 0x2;
-Tbase TZ x3173 = x863 * x3172;
-Tbase TZ x3174 = x33 * x3173;
-Tbase TZ x3175 = 0x2;
-Tbase TZ x3176 = x860 * x3175;
-Tbase TZ x3177 = x34 * x3176;
-Tbase TZ x3178 = 0x2;
-Tbase TZ x3179 = x857 * x3178;
-Tbase TZ x3180 = x35 * x3179;
-Tbase TZ x3181 = 0x2;
-Tbase TZ x3182 = x854 * x3181;
-Tbase TZ x3183 = x36 * x3182;
-Tbase TZ x3184 = 0x2;
-Tbase TZ x3185 = x851 * x3184;
-Tbase TZ x3186 = x37 * x3185;
-Tbase TZ x3187 = x3183 + x3186;
-Tbase TZ x3188 = x3180 + x3187;
-Tbase TZ x3189 = x3177 + x3188;
-Tbase TZ x3190 = x3174 + x3189;
-Tbase TZ x3191 = x3171 + x3190;
-Tbase TZ x3192 = x3168 + x3191;
-Tbase TZ x3193 = x3165 + x3192;
-Tbase TZ x3194 = x3162 + x3193;
-Tbase TZ x3195 = 0x9;
-Tbase TZ x3196 = x3195 * x3194;
-Tbase TZ x3197 = x3159 + x3196;
-Tbase TZ x3198 = 0x1a;
-Tbase TZ x3199 = x3197 >> x3198;
-Tbase TZ x3200 = x37 * x878;
-Tbase TZ x3201 = x38 * x875;
-Tbase TZ x3202 = x3200 + x3201;
-Tbase TZ x3203 = x29 * x872;
-Tbase TZ x3204 = x30 * x869;
-Tbase TZ x3205 = x31 * x866;
-Tbase TZ x3206 = x32 * x863;
-Tbase TZ x3207 = x33 * x860;
-Tbase TZ x3208 = x34 * x857;
-Tbase TZ x3209 = x35 * x854;
-Tbase TZ x3210 = x36 * x851;
-Tbase TZ x3211 = x3209 + x3210;
-Tbase TZ x3212 = x3208 + x3211;
-Tbase TZ x3213 = x3207 + x3212;
-Tbase TZ x3214 = x3206 + x3213;
-Tbase TZ x3215 = x3205 + x3214;
-Tbase TZ x3216 = x3204 + x3215;
-Tbase TZ x3217 = x3203 + x3216;
-Tbase TZ x3218 = 0x9;
-Tbase TZ x3219 = x3218 * x3217;
-Tbase TZ x3220 = x3202 + x3219;
-Tbase TZ x3221 = x3199 + x3220;
-Tbase TZ x3222 = 0x19;
-Tbase TZ x3223 = x3221 >> x3222;
-Tbase TZ x3224 = x36 * x878;
-Tbase TZ x3225 = 0x2;
-Tbase TZ x3226 = x875 * x3225;
-Tbase TZ x3227 = x37 * x3226;
-Tbase TZ x3228 = x38 * x872;
-Tbase TZ x3229 = x3227 + x3228;
-Tbase TZ x3230 = x3224 + x3229;
-Tbase TZ x3231 = x29 * x869;
-Tbase TZ x3232 = x30 * x866;
-Tbase TZ x3233 = x31 * x863;
-Tbase TZ x3234 = x32 * x860;
-Tbase TZ x3235 = x33 * x857;
-Tbase TZ x3236 = x34 * x854;
-Tbase TZ x3237 = x35 * x851;
-Tbase TZ x3238 = x3236 + x3237;
-Tbase TZ x3239 = x3235 + x3238;
-Tbase TZ x3240 = x3234 + x3239;
-Tbase TZ x3241 = x3233 + x3240;
-Tbase TZ x3242 = x3232 + x3241;
-Tbase TZ x3243 = x3231 + x3242;
-Tbase TZ x3244 = 0x9;
-Tbase TZ x3245 = x3244 * x3243;
-Tbase TZ x3246 = x3230 + x3245;
-Tbase TZ x3247 = x3223 + x3246;
-Tbase TZ x3248 = 0x19;
-Tbase TZ x3249 = x3247 >> x3248;
-Tbase TZ x3250 = x35 * x878;
-Tbase TZ x3251 = 0x2;
-Tbase TZ x3252 = x875 * x3251;
-Tbase TZ x3253 = x36 * x3252;
-Tbase TZ x3254 = 0x2;
-Tbase TZ x3255 = x872 * x3254;
-Tbase TZ x3256 = x37 * x3255;
-Tbase TZ x3257 = x38 * x869;
-Tbase TZ x3258 = x3256 + x3257;
-Tbase TZ x3259 = x3253 + x3258;
-Tbase TZ x3260 = x3250 + x3259;
-Tbase TZ x3261 = x29 * x866;
-Tbase TZ x3262 = x30 * x863;
-Tbase TZ x3263 = x31 * x860;
-Tbase TZ x3264 = x32 * x857;
-Tbase TZ x3265 = x33 * x854;
-Tbase TZ x3266 = x34 * x851;
-Tbase TZ x3267 = x3265 + x3266;
-Tbase TZ x3268 = x3264 + x3267;
-Tbase TZ x3269 = x3263 + x3268;
-Tbase TZ x3270 = x3262 + x3269;
-Tbase TZ x3271 = x3261 + x3270;
-Tbase TZ x3272 = 0x9;
-Tbase TZ x3273 = x3272 * x3271;
-Tbase TZ x3274 = x3260 + x3273;
-Tbase TZ x3275 = x3249 + x3274;
-Tbase TZ x3276 = 0x19;
-Tbase TZ x3277 = x3275 >> x3276;
-Tbase TZ x3278 = x34 * x878;
-Tbase TZ x3279 = 0x2;
-Tbase TZ x3280 = x875 * x3279;
-Tbase TZ x3281 = x35 * x3280;
-Tbase TZ x3282 = 0x2;
-Tbase TZ x3283 = x872 * x3282;
-Tbase TZ x3284 = x36 * x3283;
-Tbase TZ x3285 = 0x2;
-Tbase TZ x3286 = x869 * x3285;
-Tbase TZ x3287 = x37 * x3286;
-Tbase TZ x3288 = x38 * x866;
-Tbase TZ x3289 = x3287 + x3288;
-Tbase TZ x3290 = x3284 + x3289;
-Tbase TZ x3291 = x3281 + x3290;
-Tbase TZ x3292 = x3278 + x3291;
-Tbase TZ x3293 = x29 * x863;
-Tbase TZ x3294 = x30 * x860;
-Tbase TZ x3295 = x31 * x857;
-Tbase TZ x3296 = x32 * x854;
-Tbase TZ x3297 = x33 * x851;
-Tbase TZ x3298 = x3296 + x3297;
-Tbase TZ x3299 = x3295 + x3298;
-Tbase TZ x3300 = x3294 + x3299;
-Tbase TZ x3301 = x3293 + x3300;
-Tbase TZ x3302 = 0x9;
-Tbase TZ x3303 = x3302 * x3301;
-Tbase TZ x3304 = x3292 + x3303;
-Tbase TZ x3305 = x3277 + x3304;
-Tbase TZ x3306 = 0x19;
-Tbase TZ x3307 = x3305 >> x3306;
-Tbase TZ x3308 = x33 * x878;
-Tbase TZ x3309 = 0x2;
-Tbase TZ x3310 = x875 * x3309;
-Tbase TZ x3311 = x34 * x3310;
-Tbase TZ x3312 = 0x2;
-Tbase TZ x3313 = x872 * x3312;
-Tbase TZ x3314 = x35 * x3313;
-Tbase TZ x3315 = 0x2;
-Tbase TZ x3316 = x869 * x3315;
-Tbase TZ x3317 = x36 * x3316;
-Tbase TZ x3318 = 0x2;
-Tbase TZ x3319 = x866 * x3318;
-Tbase TZ x3320 = x37 * x3319;
-Tbase TZ x3321 = x38 * x863;
-Tbase TZ x3322 = x3320 + x3321;
-Tbase TZ x3323 = x3317 + x3322;
-Tbase TZ x3324 = x3314 + x3323;
-Tbase TZ x3325 = x3311 + x3324;
-Tbase TZ x3326 = x3308 + x3325;
-Tbase TZ x3327 = x29 * x860;
-Tbase TZ x3328 = x30 * x857;
-Tbase TZ x3329 = x31 * x854;
-Tbase TZ x3330 = x32 * x851;
-Tbase TZ x3331 = x3329 + x3330;
-Tbase TZ x3332 = x3328 + x3331;
-Tbase TZ x3333 = x3327 + x3332;
-Tbase TZ x3334 = 0x9;
-Tbase TZ x3335 = x3334 * x3333;
-Tbase TZ x3336 = x3326 + x3335;
-Tbase TZ x3337 = x3307 + x3336;
-Tbase TZ x3338 = 0x19;
-Tbase TZ x3339 = x3337 >> x3338;
-Tbase TZ x3340 = x32 * x878;
-Tbase TZ x3341 = 0x2;
-Tbase TZ x3342 = x875 * x3341;
-Tbase TZ x3343 = x33 * x3342;
-Tbase TZ x3344 = 0x2;
-Tbase TZ x3345 = x872 * x3344;
-Tbase TZ x3346 = x34 * x3345;
-Tbase TZ x3347 = 0x2;
-Tbase TZ x3348 = x869 * x3347;
-Tbase TZ x3349 = x35 * x3348;
-Tbase TZ x3350 = 0x2;
-Tbase TZ x3351 = x866 * x3350;
-Tbase TZ x3352 = x36 * x3351;
-Tbase TZ x3353 = 0x2;
-Tbase TZ x3354 = x863 * x3353;
-Tbase TZ x3355 = x37 * x3354;
-Tbase TZ x3356 = x38 * x860;
-Tbase TZ x3357 = x3355 + x3356;
-Tbase TZ x3358 = x3352 + x3357;
-Tbase TZ x3359 = x3349 + x3358;
-Tbase TZ x3360 = x3346 + x3359;
-Tbase TZ x3361 = x3343 + x3360;
-Tbase TZ x3362 = x3340 + x3361;
-Tbase TZ x3363 = x29 * x857;
-Tbase TZ x3364 = x30 * x854;
-Tbase TZ x3365 = x31 * x851;
-Tbase TZ x3366 = x3364 + x3365;
-Tbase TZ x3367 = x3363 + x3366;
-Tbase TZ x3368 = 0x9;
-Tbase TZ x3369 = x3368 * x3367;
-Tbase TZ x3370 = x3362 + x3369;
-Tbase TZ x3371 = x3339 + x3370;
-Tbase TZ x3372 = 0x19;
-Tbase TZ x3373 = x3371 >> x3372;
-Tbase TZ x3374 = x31 * x878;
-Tbase TZ x3375 = 0x2;
-Tbase TZ x3376 = x875 * x3375;
-Tbase TZ x3377 = x32 * x3376;
-Tbase TZ x3378 = 0x2;
-Tbase TZ x3379 = x872 * x3378;
-Tbase TZ x3380 = x33 * x3379;
-Tbase TZ x3381 = 0x2;
-Tbase TZ x3382 = x869 * x3381;
-Tbase TZ x3383 = x34 * x3382;
-Tbase TZ x3384 = 0x2;
-Tbase TZ x3385 = x866 * x3384;
-Tbase TZ x3386 = x35 * x3385;
-Tbase TZ x3387 = 0x2;
-Tbase TZ x3388 = x863 * x3387;
-Tbase TZ x3389 = x36 * x3388;
-Tbase TZ x3390 = 0x2;
-Tbase TZ x3391 = x860 * x3390;
-Tbase TZ x3392 = x37 * x3391;
-Tbase TZ x3393 = x38 * x857;
-Tbase TZ x3394 = x3392 + x3393;
-Tbase TZ x3395 = x3389 + x3394;
-Tbase TZ x3396 = x3386 + x3395;
-Tbase TZ x3397 = x3383 + x3396;
-Tbase TZ x3398 = x3380 + x3397;
-Tbase TZ x3399 = x3377 + x3398;
-Tbase TZ x3400 = x3374 + x3399;
-Tbase TZ x3401 = x29 * x854;
-Tbase TZ x3402 = x30 * x851;
-Tbase TZ x3403 = x3401 + x3402;
-Tbase TZ x3404 = 0x9;
-Tbase TZ x3405 = x3404 * x3403;
-Tbase TZ x3406 = x3400 + x3405;
-Tbase TZ x3407 = x3373 + x3406;
-Tbase TZ x3408 = 0x19;
-Tbase TZ x3409 = x3407 >> x3408;
-Tbase TZ x3410 = x30 * x878;
-Tbase TZ x3411 = 0x2;
-Tbase TZ x3412 = x875 * x3411;
-Tbase TZ x3413 = x31 * x3412;
-Tbase TZ x3414 = 0x2;
-Tbase TZ x3415 = x872 * x3414;
-Tbase TZ x3416 = x32 * x3415;
-Tbase TZ x3417 = 0x2;
-Tbase TZ x3418 = x869 * x3417;
-Tbase TZ x3419 = x33 * x3418;
-Tbase TZ x3420 = 0x2;
-Tbase TZ x3421 = x866 * x3420;
-Tbase TZ x3422 = x34 * x3421;
-Tbase TZ x3423 = 0x2;
-Tbase TZ x3424 = x863 * x3423;
-Tbase TZ x3425 = x35 * x3424;
-Tbase TZ x3426 = 0x2;
-Tbase TZ x3427 = x860 * x3426;
-Tbase TZ x3428 = x36 * x3427;
-Tbase TZ x3429 = 0x2;
-Tbase TZ x3430 = x857 * x3429;
-Tbase TZ x3431 = x37 * x3430;
-Tbase TZ x3432 = x38 * x854;
-Tbase TZ x3433 = x3431 + x3432;
-Tbase TZ x3434 = x3428 + x3433;
-Tbase TZ x3435 = x3425 + x3434;
-Tbase TZ x3436 = x3422 + x3435;
-Tbase TZ x3437 = x3419 + x3436;
-Tbase TZ x3438 = x3416 + x3437;
-Tbase TZ x3439 = x3413 + x3438;
-Tbase TZ x3440 = x3410 + x3439;
-Tbase TZ x3441 = x29 * x851;
-Tbase TZ x3442 = 0x9;
-Tbase TZ x3443 = x3442 * x3441;
-Tbase TZ x3444 = x3440 + x3443;
-Tbase TZ x3445 = x3409 + x3444;
-Tbase TZ x3446 = 0x19;
-Tbase TZ x3447 = x3445 >> x3446;
-Tbase TZ x3448 = x29 * x878;
-Tbase TZ x3449 = 0x2;
-Tbase TZ x3450 = x875 * x3449;
-Tbase TZ x3451 = x30 * x3450;
-Tbase TZ x3452 = 0x2;
-Tbase TZ x3453 = x872 * x3452;
-Tbase TZ x3454 = x31 * x3453;
-Tbase TZ x3455 = 0x2;
-Tbase TZ x3456 = x869 * x3455;
-Tbase TZ x3457 = x32 * x3456;
-Tbase TZ x3458 = 0x2;
-Tbase TZ x3459 = x866 * x3458;
-Tbase TZ x3460 = x33 * x3459;
-Tbase TZ x3461 = 0x2;
-Tbase TZ x3462 = x863 * x3461;
-Tbase TZ x3463 = x34 * x3462;
-Tbase TZ x3464 = 0x2;
-Tbase TZ x3465 = x860 * x3464;
-Tbase TZ x3466 = x35 * x3465;
-Tbase TZ x3467 = 0x2;
-Tbase TZ x3468 = x857 * x3467;
-Tbase TZ x3469 = x36 * x3468;
-Tbase TZ x3470 = 0x2;
-Tbase TZ x3471 = x854 * x3470;
-Tbase TZ x3472 = x37 * x3471;
-Tbase TZ x3473 = x38 * x851;
-Tbase TZ x3474 = x3472 + x3473;
-Tbase TZ x3475 = x3469 + x3474;
-Tbase TZ x3476 = x3466 + x3475;
-Tbase TZ x3477 = x3463 + x3476;
-Tbase TZ x3478 = x3460 + x3477;
-Tbase TZ x3479 = x3457 + x3478;
-Tbase TZ x3480 = x3454 + x3479;
-Tbase TZ x3481 = x3451 + x3480;
-Tbase TZ x3482 = x3448 + x3481;
-Tbase TZ x3483 = x3447 + x3482;
-Tbase TZ x3484 = 0x19;
-Tbase TZ x3485 = x3483 >> x3484;
-Tbase TZ x3486 = 0x9;
-Tbase TZ x3487 = x3486 * x3485;
-Tbase TZ x3488 = 0x3ffffff;
-Tbase TZ x3489 = x3197 & x3488;
-Tbase TZ x3490 = x3487 + x3489;
-Tbase TZ x3491 = 0x1a;
-Tbase TZ x3492 = x3490 >> x3491;
-Tbase TZ x3493 = 0x1ffffff;
-Tbase TZ x3494 = x3221 & x3493;
-Tbase TZ x3495 = x3492 + x3494;
-Tbase TZ x3496 = 0x1ffffff;
-Tbase TZ x3497 = x3483 & x3496;
-Tbase TZ x3498 = 0x1ffffff;
-Tbase TZ x3499 = x3445 & x3498;
-Tbase TZ x3500 = 0x1ffffff;
-Tbase TZ x3501 = x3407 & x3500;
-Tbase TZ x3502 = 0x1ffffff;
-Tbase TZ x3503 = x3371 & x3502;
-Tbase TZ x3504 = 0x1ffffff;
-Tbase TZ x3505 = x3337 & x3504;
-Tbase TZ x3506 = 0x1ffffff;
-Tbase TZ x3507 = x3305 & x3506;
-Tbase TZ x3508 = 0x1ffffff;
-Tbase TZ x3509 = x3275 & x3508;
-Tbase TZ x3510 = 0x19;
-Tbase TZ x3511 = x3495 >> x3510;
-Tbase TZ x3512 = 0x1ffffff;
-Tbase TZ x3513 = x3247 & x3512;
-Tbase TZ x3514 = x3511 + x3513;
-Tbase TZ x3515 = 0x1ffffff;
-Tbase TZ x3516 = x3495 & x3515;
-Tbase TZ x3517 = 0x3ffffff;
-Tbase TZ x3518 = x3490 & x3517;
-Tbase TZ x3519 = x437 + x3497;
-Tbase TZ x3520 = x439 + x3499;
-Tbase TZ x3521 = x441 + x3501;
-Tbase TZ x3522 = x443 + x3503;
-Tbase TZ x3523 = x445 + x3505;
-Tbase TZ x3524 = x447 + x3507;
-Tbase TZ x3525 = x449 + x3509;
-Tbase TZ x3526 = x454 + x3514;
-Tbase TZ x3527 = x456 + x3516;
-Tbase TZ x3528 = x458 + x3518;
-Tbase TZ x3529 = x878 * x3528;
-Tbase TZ x3530 = 0x2;
-Tbase TZ x3531 = x3527 * x3530;
-Tbase TZ x3532 = x851 * x3531;
-Tbase TZ x3533 = 0x2;
-Tbase TZ x3534 = x3526 * x3533;
-Tbase TZ x3535 = x854 * x3534;
-Tbase TZ x3536 = 0x2;
-Tbase TZ x3537 = x3525 * x3536;
-Tbase TZ x3538 = x857 * x3537;
-Tbase TZ x3539 = 0x2;
-Tbase TZ x3540 = x3524 * x3539;
-Tbase TZ x3541 = x860 * x3540;
-Tbase TZ x3542 = 0x2;
-Tbase TZ x3543 = x3523 * x3542;
-Tbase TZ x3544 = x863 * x3543;
-Tbase TZ x3545 = 0x2;
-Tbase TZ x3546 = x3522 * x3545;
-Tbase TZ x3547 = x866 * x3546;
-Tbase TZ x3548 = 0x2;
-Tbase TZ x3549 = x3521 * x3548;
-Tbase TZ x3550 = x869 * x3549;
-Tbase TZ x3551 = 0x2;
-Tbase TZ x3552 = x3520 * x3551;
-Tbase TZ x3553 = x872 * x3552;
-Tbase TZ x3554 = 0x2;
-Tbase TZ x3555 = x3519 * x3554;
-Tbase TZ x3556 = x875 * x3555;
-Tbase TZ x3557 = x3553 + x3556;
-Tbase TZ x3558 = x3550 + x3557;
-Tbase TZ x3559 = x3547 + x3558;
-Tbase TZ x3560 = x3544 + x3559;
-Tbase TZ x3561 = x3541 + x3560;
-Tbase TZ x3562 = x3538 + x3561;
-Tbase TZ x3563 = x3535 + x3562;
-Tbase TZ x3564 = x3532 + x3563;
-Tbase TZ x3565 = 0x9;
-Tbase TZ x3566 = x3565 * x3564;
-Tbase TZ x3567 = x3529 + x3566;
-Tbase TZ x3568 = 0x1a;
-Tbase TZ x3569 = x3567 >> x3568;
-Tbase TZ x3570 = x875 * x3528;
-Tbase TZ x3571 = x878 * x3527;
-Tbase TZ x3572 = x3570 + x3571;
-Tbase TZ x3573 = x851 * x3526;
-Tbase TZ x3574 = x854 * x3525;
-Tbase TZ x3575 = x857 * x3524;
-Tbase TZ x3576 = x860 * x3523;
-Tbase TZ x3577 = x863 * x3522;
-Tbase TZ x3578 = x866 * x3521;
-Tbase TZ x3579 = x869 * x3520;
-Tbase TZ x3580 = x872 * x3519;
-Tbase TZ x3581 = x3579 + x3580;
-Tbase TZ x3582 = x3578 + x3581;
-Tbase TZ x3583 = x3577 + x3582;
-Tbase TZ x3584 = x3576 + x3583;
-Tbase TZ x3585 = x3575 + x3584;
-Tbase TZ x3586 = x3574 + x3585;
-Tbase TZ x3587 = x3573 + x3586;
-Tbase TZ x3588 = 0x9;
-Tbase TZ x3589 = x3588 * x3587;
-Tbase TZ x3590 = x3572 + x3589;
-Tbase TZ x3591 = x3569 + x3590;
-Tbase TZ x3592 = 0x19;
-Tbase TZ x3593 = x3591 >> x3592;
-Tbase TZ x3594 = x872 * x3528;
-Tbase TZ x3595 = 0x2;
-Tbase TZ x3596 = x3527 * x3595;
-Tbase TZ x3597 = x875 * x3596;
-Tbase TZ x3598 = x878 * x3526;
-Tbase TZ x3599 = x3597 + x3598;
-Tbase TZ x3600 = x3594 + x3599;
-Tbase TZ x3601 = x851 * x3525;
-Tbase TZ x3602 = x854 * x3524;
-Tbase TZ x3603 = x857 * x3523;
-Tbase TZ x3604 = x860 * x3522;
-Tbase TZ x3605 = x863 * x3521;
-Tbase TZ x3606 = x866 * x3520;
-Tbase TZ x3607 = x869 * x3519;
-Tbase TZ x3608 = x3606 + x3607;
-Tbase TZ x3609 = x3605 + x3608;
-Tbase TZ x3610 = x3604 + x3609;
-Tbase TZ x3611 = x3603 + x3610;
-Tbase TZ x3612 = x3602 + x3611;
-Tbase TZ x3613 = x3601 + x3612;
-Tbase TZ x3614 = 0x9;
-Tbase TZ x3615 = x3614 * x3613;
-Tbase TZ x3616 = x3600 + x3615;
-Tbase TZ x3617 = x3593 + x3616;
-Tbase TZ x3618 = 0x19;
-Tbase TZ x3619 = x3617 >> x3618;
-Tbase TZ x3620 = x869 * x3528;
-Tbase TZ x3621 = 0x2;
-Tbase TZ x3622 = x3527 * x3621;
-Tbase TZ x3623 = x872 * x3622;
-Tbase TZ x3624 = 0x2;
-Tbase TZ x3625 = x3526 * x3624;
-Tbase TZ x3626 = x875 * x3625;
-Tbase TZ x3627 = x878 * x3525;
-Tbase TZ x3628 = x3626 + x3627;
-Tbase TZ x3629 = x3623 + x3628;
-Tbase TZ x3630 = x3620 + x3629;
-Tbase TZ x3631 = x851 * x3524;
-Tbase TZ x3632 = x854 * x3523;
-Tbase TZ x3633 = x857 * x3522;
-Tbase TZ x3634 = x860 * x3521;
-Tbase TZ x3635 = x863 * x3520;
-Tbase TZ x3636 = x866 * x3519;
-Tbase TZ x3637 = x3635 + x3636;
-Tbase TZ x3638 = x3634 + x3637;
-Tbase TZ x3639 = x3633 + x3638;
-Tbase TZ x3640 = x3632 + x3639;
-Tbase TZ x3641 = x3631 + x3640;
-Tbase TZ x3642 = 0x9;
-Tbase TZ x3643 = x3642 * x3641;
-Tbase TZ x3644 = x3630 + x3643;
-Tbase TZ x3645 = x3619 + x3644;
-Tbase TZ x3646 = 0x19;
-Tbase TZ x3647 = x3645 >> x3646;
-Tbase TZ x3648 = x866 * x3528;
-Tbase TZ x3649 = 0x2;
-Tbase TZ x3650 = x3527 * x3649;
-Tbase TZ x3651 = x869 * x3650;
-Tbase TZ x3652 = 0x2;
-Tbase TZ x3653 = x3526 * x3652;
-Tbase TZ x3654 = x872 * x3653;
-Tbase TZ x3655 = 0x2;
-Tbase TZ x3656 = x3525 * x3655;
-Tbase TZ x3657 = x875 * x3656;
-Tbase TZ x3658 = x878 * x3524;
-Tbase TZ x3659 = x3657 + x3658;
-Tbase TZ x3660 = x3654 + x3659;
-Tbase TZ x3661 = x3651 + x3660;
-Tbase TZ x3662 = x3648 + x3661;
-Tbase TZ x3663 = x851 * x3523;
-Tbase TZ x3664 = x854 * x3522;
-Tbase TZ x3665 = x857 * x3521;
-Tbase TZ x3666 = x860 * x3520;
-Tbase TZ x3667 = x863 * x3519;
-Tbase TZ x3668 = x3666 + x3667;
-Tbase TZ x3669 = x3665 + x3668;
-Tbase TZ x3670 = x3664 + x3669;
-Tbase TZ x3671 = x3663 + x3670;
-Tbase TZ x3672 = 0x9;
-Tbase TZ x3673 = x3672 * x3671;
-Tbase TZ x3674 = x3662 + x3673;
-Tbase TZ x3675 = x3647 + x3674;
-Tbase TZ x3676 = 0x19;
-Tbase TZ x3677 = x3675 >> x3676;
-Tbase TZ x3678 = x863 * x3528;
-Tbase TZ x3679 = 0x2;
-Tbase TZ x3680 = x3527 * x3679;
-Tbase TZ x3681 = x866 * x3680;
-Tbase TZ x3682 = 0x2;
-Tbase TZ x3683 = x3526 * x3682;
-Tbase TZ x3684 = x869 * x3683;
-Tbase TZ x3685 = 0x2;
-Tbase TZ x3686 = x3525 * x3685;
-Tbase TZ x3687 = x872 * x3686;
-Tbase TZ x3688 = 0x2;
-Tbase TZ x3689 = x3524 * x3688;
-Tbase TZ x3690 = x875 * x3689;
-Tbase TZ x3691 = x878 * x3523;
-Tbase TZ x3692 = x3690 + x3691;
-Tbase TZ x3693 = x3687 + x3692;
-Tbase TZ x3694 = x3684 + x3693;
-Tbase TZ x3695 = x3681 + x3694;
-Tbase TZ x3696 = x3678 + x3695;
-Tbase TZ x3697 = x851 * x3522;
-Tbase TZ x3698 = x854 * x3521;
-Tbase TZ x3699 = x857 * x3520;
-Tbase TZ x3700 = x860 * x3519;
-Tbase TZ x3701 = x3699 + x3700;
-Tbase TZ x3702 = x3698 + x3701;
-Tbase TZ x3703 = x3697 + x3702;
-Tbase TZ x3704 = 0x9;
-Tbase TZ x3705 = x3704 * x3703;
-Tbase TZ x3706 = x3696 + x3705;
-Tbase TZ x3707 = x3677 + x3706;
-Tbase TZ x3708 = 0x19;
-Tbase TZ x3709 = x3707 >> x3708;
-Tbase TZ x3710 = x860 * x3528;
-Tbase TZ x3711 = 0x2;
-Tbase TZ x3712 = x3527 * x3711;
-Tbase TZ x3713 = x863 * x3712;
-Tbase TZ x3714 = 0x2;
-Tbase TZ x3715 = x3526 * x3714;
-Tbase TZ x3716 = x866 * x3715;
-Tbase TZ x3717 = 0x2;
-Tbase TZ x3718 = x3525 * x3717;
-Tbase TZ x3719 = x869 * x3718;
-Tbase TZ x3720 = 0x2;
-Tbase TZ x3721 = x3524 * x3720;
-Tbase TZ x3722 = x872 * x3721;
-Tbase TZ x3723 = 0x2;
-Tbase TZ x3724 = x3523 * x3723;
-Tbase TZ x3725 = x875 * x3724;
-Tbase TZ x3726 = x878 * x3522;
-Tbase TZ x3727 = x3725 + x3726;
-Tbase TZ x3728 = x3722 + x3727;
-Tbase TZ x3729 = x3719 + x3728;
-Tbase TZ x3730 = x3716 + x3729;
-Tbase TZ x3731 = x3713 + x3730;
-Tbase TZ x3732 = x3710 + x3731;
-Tbase TZ x3733 = x851 * x3521;
-Tbase TZ x3734 = x854 * x3520;
-Tbase TZ x3735 = x857 * x3519;
-Tbase TZ x3736 = x3734 + x3735;
-Tbase TZ x3737 = x3733 + x3736;
-Tbase TZ x3738 = 0x9;
-Tbase TZ x3739 = x3738 * x3737;
-Tbase TZ x3740 = x3732 + x3739;
-Tbase TZ x3741 = x3709 + x3740;
-Tbase TZ x3742 = 0x19;
-Tbase TZ x3743 = x3741 >> x3742;
-Tbase TZ x3744 = x857 * x3528;
-Tbase TZ x3745 = 0x2;
-Tbase TZ x3746 = x3527 * x3745;
-Tbase TZ x3747 = x860 * x3746;
-Tbase TZ x3748 = 0x2;
-Tbase TZ x3749 = x3526 * x3748;
-Tbase TZ x3750 = x863 * x3749;
-Tbase TZ x3751 = 0x2;
-Tbase TZ x3752 = x3525 * x3751;
-Tbase TZ x3753 = x866 * x3752;
-Tbase TZ x3754 = 0x2;
-Tbase TZ x3755 = x3524 * x3754;
-Tbase TZ x3756 = x869 * x3755;
-Tbase TZ x3757 = 0x2;
-Tbase TZ x3758 = x3523 * x3757;
-Tbase TZ x3759 = x872 * x3758;
-Tbase TZ x3760 = 0x2;
-Tbase TZ x3761 = x3522 * x3760;
-Tbase TZ x3762 = x875 * x3761;
-Tbase TZ x3763 = x878 * x3521;
-Tbase TZ x3764 = x3762 + x3763;
-Tbase TZ x3765 = x3759 + x3764;
-Tbase TZ x3766 = x3756 + x3765;
-Tbase TZ x3767 = x3753 + x3766;
-Tbase TZ x3768 = x3750 + x3767;
-Tbase TZ x3769 = x3747 + x3768;
-Tbase TZ x3770 = x3744 + x3769;
-Tbase TZ x3771 = x851 * x3520;
-Tbase TZ x3772 = x854 * x3519;
-Tbase TZ x3773 = x3771 + x3772;
-Tbase TZ x3774 = 0x9;
-Tbase TZ x3775 = x3774 * x3773;
-Tbase TZ x3776 = x3770 + x3775;
-Tbase TZ x3777 = x3743 + x3776;
-Tbase TZ x3778 = 0x19;
-Tbase TZ x3779 = x3777 >> x3778;
-Tbase TZ x3780 = x854 * x3528;
-Tbase TZ x3781 = 0x2;
-Tbase TZ x3782 = x3527 * x3781;
-Tbase TZ x3783 = x857 * x3782;
-Tbase TZ x3784 = 0x2;
-Tbase TZ x3785 = x3526 * x3784;
-Tbase TZ x3786 = x860 * x3785;
-Tbase TZ x3787 = 0x2;
-Tbase TZ x3788 = x3525 * x3787;
-Tbase TZ x3789 = x863 * x3788;
-Tbase TZ x3790 = 0x2;
-Tbase TZ x3791 = x3524 * x3790;
-Tbase TZ x3792 = x866 * x3791;
-Tbase TZ x3793 = 0x2;
-Tbase TZ x3794 = x3523 * x3793;
-Tbase TZ x3795 = x869 * x3794;
-Tbase TZ x3796 = 0x2;
-Tbase TZ x3797 = x3522 * x3796;
-Tbase TZ x3798 = x872 * x3797;
-Tbase TZ x3799 = 0x2;
-Tbase TZ x3800 = x3521 * x3799;
-Tbase TZ x3801 = x875 * x3800;
-Tbase TZ x3802 = x878 * x3520;
-Tbase TZ x3803 = x3801 + x3802;
-Tbase TZ x3804 = x3798 + x3803;
-Tbase TZ x3805 = x3795 + x3804;
-Tbase TZ x3806 = x3792 + x3805;
-Tbase TZ x3807 = x3789 + x3806;
-Tbase TZ x3808 = x3786 + x3807;
-Tbase TZ x3809 = x3783 + x3808;
-Tbase TZ x3810 = x3780 + x3809;
-Tbase TZ x3811 = x851 * x3519;
-Tbase TZ x3812 = 0x9;
-Tbase TZ x3813 = x3812 * x3811;
-Tbase TZ x3814 = x3810 + x3813;
-Tbase TZ x3815 = x3779 + x3814;
-Tbase TZ x3816 = 0x19;
-Tbase TZ x3817 = x3815 >> x3816;
-Tbase TZ x3818 = x851 * x3528;
-Tbase TZ x3819 = 0x2;
-Tbase TZ x3820 = x3527 * x3819;
-Tbase TZ x3821 = x854 * x3820;
-Tbase TZ x3822 = 0x2;
-Tbase TZ x3823 = x3526 * x3822;
-Tbase TZ x3824 = x857 * x3823;
-Tbase TZ x3825 = 0x2;
-Tbase TZ x3826 = x3525 * x3825;
-Tbase TZ x3827 = x860 * x3826;
-Tbase TZ x3828 = 0x2;
-Tbase TZ x3829 = x3524 * x3828;
-Tbase TZ x3830 = x863 * x3829;
-Tbase TZ x3831 = 0x2;
-Tbase TZ x3832 = x3523 * x3831;
-Tbase TZ x3833 = x866 * x3832;
-Tbase TZ x3834 = 0x2;
-Tbase TZ x3835 = x3522 * x3834;
-Tbase TZ x3836 = x869 * x3835;
-Tbase TZ x3837 = 0x2;
-Tbase TZ x3838 = x3521 * x3837;
-Tbase TZ x3839 = x872 * x3838;
-Tbase TZ x3840 = 0x2;
-Tbase TZ x3841 = x3520 * x3840;
-Tbase TZ x3842 = x875 * x3841;
-Tbase TZ x3843 = x878 * x3519;
-Tbase TZ x3844 = x3842 + x3843;
-Tbase TZ x3845 = x3839 + x3844;
-Tbase TZ x3846 = x3836 + x3845;
-Tbase TZ x3847 = x3833 + x3846;
-Tbase TZ x3848 = x3830 + x3847;
-Tbase TZ x3849 = x3827 + x3848;
-Tbase TZ x3850 = x3824 + x3849;
-Tbase TZ x3851 = x3821 + x3850;
-Tbase TZ x3852 = x3818 + x3851;
-Tbase TZ x3853 = x3817 + x3852;
-Tbase TZ x3854 = 0x19;
-Tbase TZ x3855 = x3853 >> x3854;
-Tbase TZ x3856 = 0x9;
-Tbase TZ x3857 = x3856 * x3855;
-Tbase TZ x3858 = 0x3ffffff;
-Tbase TZ x3859 = x3567 & x3858;
-Tbase TZ x3860 = x3857 + x3859;
-Tbase TZ x3861 = 0x1a;
-Tbase TZ x3862 = x3860 >> x3861;
-Tbase TZ x3863 = 0x1ffffff;
-Tbase TZ x3864 = x3591 & x3863;
-Tbase TZ x3865 = x3862 + x3864;
-Tbase TZ x3866 = 0x1ffffff;
-Tbase TZ x3867 = x3853 & x3866;
-Tbase TZ x3868 = 0x1ffffff;
-Tbase TZ x3869 = x3815 & x3868;
-Tbase TZ x3870 = 0x1ffffff;
-Tbase TZ x3871 = x3777 & x3870;
-Tbase TZ x3872 = 0x1ffffff;
-Tbase TZ x3873 = x3741 & x3872;
-Tbase TZ x3874 = 0x1ffffff;
-Tbase TZ x3875 = x3707 & x3874;
-Tbase TZ x3876 = 0x1ffffff;
-Tbase TZ x3877 = x3675 & x3876;
-Tbase TZ x3878 = 0x1ffffff;
-Tbase TZ x3879 = x3645 & x3878;
-Tbase TZ x3880 = 0x19;
-Tbase TZ x3881 = x3865 >> x3880;
-Tbase TZ x3882 = 0x1ffffff;
-Tbase TZ x3883 = x3617 & x3882;
-Tbase TZ x3884 = x3881 + x3883;
-Tbase TZ x3885 = 0x1ffffff;
-Tbase TZ x3886 = x3865 & x3885;
-Tbase TZ x3887 = 0x3ffffff;
-Tbase TZ x3888 = x3860 & x3887;
-(Return x3137, Return x3139, Return x3141, Return x3143,
-Return x3145, Return x3147, Return x3149, Return x3154,
-Return x3156, Return x3158,
-(Return x3867, Return x3869, Return x3871, Return x3873,
-Return x3875, Return x3877, Return x3879, Return x3884,
-Return x3886, Return x3888),
-(Return x1997, Return x1999, Return x2001, Return x2003,
-Return x2005, Return x2007, Return x2009, Return x2014,
-Return x2016, Return x2018),
-(Return x2777, Return x2779, Return x2781, Return x2783,
-Return x2785, Return x2787, Return x2789, Return x2794,
-Return x2796, Return x2798))
- : forall var : base_type -> Type,
- expr base_type op
- (TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> ...)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF2519_32Reflective/Reified/LadderStepDisplay.v b/src/SpecificGen/GF2519_32Reflective/Reified/LadderStepDisplay.v
deleted file mode 100644
index 357921f6f..000000000
--- a/src/SpecificGen/GF2519_32Reflective/Reified/LadderStepDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF2519_32Reflective.Reified.LadderStep.
-Require Export Crypto.Reflection.Z.CNotations.
-
-Print rladderstepW.
diff --git a/src/SpecificGen/GF2519_32Reflective/Reified/LadderStepJavaDisplay.log b/src/SpecificGen/GF2519_32Reflective/Reified/LadderStepJavaDisplay.log
deleted file mode 100644
index 7cbfcc9ee..000000000
--- a/src/SpecificGen/GF2519_32Reflective/Reified/LadderStepJavaDisplay.log
+++ /dev/null
@@ -1,3859 +0,0 @@
-rladderstepW =
-fun var : base_type -> Type =>
-λ
-_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ x29 x30 x31 x32
- x33 x34 x35 x36 x37 x38 x39 x40 x41 x42 x43 x44 x45 x46 x47 x48 x49 x50 x51
- x52 x53 x54 x55 x56 x57 x58 x59 x60 x61 x62 x63 x64 x65 x66 x67 x68 x69 x70
- x71 x72 x73 x74 x75 x76 x77 x78 x79 x80 x81 x82 x83 x84 x85 x86 x87
- x88 : var TZ,
-Tbase TZ x89 = x49 + x59;
-Tbase TZ x90 = x50 + x60;
-Tbase TZ x91 = x51 + x61;
-Tbase TZ x92 = x52 + x62;
-Tbase TZ x93 = x53 + x63;
-Tbase TZ x94 = x54 + x64;
-Tbase TZ x95 = x55 + x65;
-Tbase TZ x96 = x56 + x66;
-Tbase TZ x97 = x57 + x67;
-Tbase TZ x98 = x58 + x68;
-Tbase TZ x99 = x98 * x98;
-Tbase TZ x100 = 0x2;
-Tbase TZ x101 = x97 * x100;
-Tbase TZ x102 = x89 * x101;
-Tbase TZ x103 = 0x2;
-Tbase TZ x104 = x96 * x103;
-Tbase TZ x105 = x90 * x104;
-Tbase TZ x106 = 0x2;
-Tbase TZ x107 = x95 * x106;
-Tbase TZ x108 = x91 * x107;
-Tbase TZ x109 = 0x2;
-Tbase TZ x110 = x94 * x109;
-Tbase TZ x111 = x92 * x110;
-Tbase TZ x112 = 0x2;
-Tbase TZ x113 = x93 * x112;
-Tbase TZ x114 = x93 * x113;
-Tbase TZ x115 = 0x2;
-Tbase TZ x116 = x92 * x115;
-Tbase TZ x117 = x94 * x116;
-Tbase TZ x118 = 0x2;
-Tbase TZ x119 = x91 * x118;
-Tbase TZ x120 = x95 * x119;
-Tbase TZ x121 = 0x2;
-Tbase TZ x122 = x90 * x121;
-Tbase TZ x123 = x96 * x122;
-Tbase TZ x124 = 0x2;
-Tbase TZ x125 = x89 * x124;
-Tbase TZ x126 = x97 * x125;
-Tbase TZ x127 = x123 + x126;
-Tbase TZ x128 = x120 + x127;
-Tbase TZ x129 = x117 + x128;
-Tbase TZ x130 = x114 + x129;
-Tbase TZ x131 = x111 + x130;
-Tbase TZ x132 = x108 + x131;
-Tbase TZ x133 = x105 + x132;
-Tbase TZ x134 = x102 + x133;
-Tbase TZ x135 = 0x9;
-Tbase TZ x136 = x135 * x134;
-Tbase TZ x137 = x99 + x136;
-Tbase TZ x138 = 0x1a;
-Tbase TZ x139 = x137 >>> x138;
-Tbase TZ x140 = x97 * x98;
-Tbase TZ x141 = x98 * x97;
-Tbase TZ x142 = x140 + x141;
-Tbase TZ x143 = x89 * x96;
-Tbase TZ x144 = x90 * x95;
-Tbase TZ x145 = x91 * x94;
-Tbase TZ x146 = x92 * x93;
-Tbase TZ x147 = x93 * x92;
-Tbase TZ x148 = x94 * x91;
-Tbase TZ x149 = x95 * x90;
-Tbase TZ x150 = x96 * x89;
-Tbase TZ x151 = x149 + x150;
-Tbase TZ x152 = x148 + x151;
-Tbase TZ x153 = x147 + x152;
-Tbase TZ x154 = x146 + x153;
-Tbase TZ x155 = x145 + x154;
-Tbase TZ x156 = x144 + x155;
-Tbase TZ x157 = x143 + x156;
-Tbase TZ x158 = 0x9;
-Tbase TZ x159 = x158 * x157;
-Tbase TZ x160 = x142 + x159;
-Tbase TZ x161 = x139 + x160;
-Tbase TZ x162 = 0x19;
-Tbase TZ x163 = x161 >>> x162;
-Tbase TZ x164 = x96 * x98;
-Tbase TZ x165 = 0x2;
-Tbase TZ x166 = x97 * x165;
-Tbase TZ x167 = x97 * x166;
-Tbase TZ x168 = x98 * x96;
-Tbase TZ x169 = x167 + x168;
-Tbase TZ x170 = x164 + x169;
-Tbase TZ x171 = x89 * x95;
-Tbase TZ x172 = x90 * x94;
-Tbase TZ x173 = x91 * x93;
-Tbase TZ x174 = x92 * x92;
-Tbase TZ x175 = x93 * x91;
-Tbase TZ x176 = x94 * x90;
-Tbase TZ x177 = x95 * x89;
-Tbase TZ x178 = x176 + x177;
-Tbase TZ x179 = x175 + x178;
-Tbase TZ x180 = x174 + x179;
-Tbase TZ x181 = x173 + x180;
-Tbase TZ x182 = x172 + x181;
-Tbase TZ x183 = x171 + x182;
-Tbase TZ x184 = 0x9;
-Tbase TZ x185 = x184 * x183;
-Tbase TZ x186 = x170 + x185;
-Tbase TZ x187 = x163 + x186;
-Tbase TZ x188 = 0x19;
-Tbase TZ x189 = x187 >>> x188;
-Tbase TZ x190 = x95 * x98;
-Tbase TZ x191 = 0x2;
-Tbase TZ x192 = x97 * x191;
-Tbase TZ x193 = x96 * x192;
-Tbase TZ x194 = 0x2;
-Tbase TZ x195 = x96 * x194;
-Tbase TZ x196 = x97 * x195;
-Tbase TZ x197 = x98 * x95;
-Tbase TZ x198 = x196 + x197;
-Tbase TZ x199 = x193 + x198;
-Tbase TZ x200 = x190 + x199;
-Tbase TZ x201 = x89 * x94;
-Tbase TZ x202 = x90 * x93;
-Tbase TZ x203 = x91 * x92;
-Tbase TZ x204 = x92 * x91;
-Tbase TZ x205 = x93 * x90;
-Tbase TZ x206 = x94 * x89;
-Tbase TZ x207 = x205 + x206;
-Tbase TZ x208 = x204 + x207;
-Tbase TZ x209 = x203 + x208;
-Tbase TZ x210 = x202 + x209;
-Tbase TZ x211 = x201 + x210;
-Tbase TZ x212 = 0x9;
-Tbase TZ x213 = x212 * x211;
-Tbase TZ x214 = x200 + x213;
-Tbase TZ x215 = x189 + x214;
-Tbase TZ x216 = 0x19;
-Tbase TZ x217 = x215 >>> x216;
-Tbase TZ x218 = x94 * x98;
-Tbase TZ x219 = 0x2;
-Tbase TZ x220 = x97 * x219;
-Tbase TZ x221 = x95 * x220;
-Tbase TZ x222 = 0x2;
-Tbase TZ x223 = x96 * x222;
-Tbase TZ x224 = x96 * x223;
-Tbase TZ x225 = 0x2;
-Tbase TZ x226 = x95 * x225;
-Tbase TZ x227 = x97 * x226;
-Tbase TZ x228 = x98 * x94;
-Tbase TZ x229 = x227 + x228;
-Tbase TZ x230 = x224 + x229;
-Tbase TZ x231 = x221 + x230;
-Tbase TZ x232 = x218 + x231;
-Tbase TZ x233 = x89 * x93;
-Tbase TZ x234 = x90 * x92;
-Tbase TZ x235 = x91 * x91;
-Tbase TZ x236 = x92 * x90;
-Tbase TZ x237 = x93 * x89;
-Tbase TZ x238 = x236 + x237;
-Tbase TZ x239 = x235 + x238;
-Tbase TZ x240 = x234 + x239;
-Tbase TZ x241 = x233 + x240;
-Tbase TZ x242 = 0x9;
-Tbase TZ x243 = x242 * x241;
-Tbase TZ x244 = x232 + x243;
-Tbase TZ x245 = x217 + x244;
-Tbase TZ x246 = 0x19;
-Tbase TZ x247 = x245 >>> x246;
-Tbase TZ x248 = x93 * x98;
-Tbase TZ x249 = 0x2;
-Tbase TZ x250 = x97 * x249;
-Tbase TZ x251 = x94 * x250;
-Tbase TZ x252 = 0x2;
-Tbase TZ x253 = x96 * x252;
-Tbase TZ x254 = x95 * x253;
-Tbase TZ x255 = 0x2;
-Tbase TZ x256 = x95 * x255;
-Tbase TZ x257 = x96 * x256;
-Tbase TZ x258 = 0x2;
-Tbase TZ x259 = x94 * x258;
-Tbase TZ x260 = x97 * x259;
-Tbase TZ x261 = x98 * x93;
-Tbase TZ x262 = x260 + x261;
-Tbase TZ x263 = x257 + x262;
-Tbase TZ x264 = x254 + x263;
-Tbase TZ x265 = x251 + x264;
-Tbase TZ x266 = x248 + x265;
-Tbase TZ x267 = x89 * x92;
-Tbase TZ x268 = x90 * x91;
-Tbase TZ x269 = x91 * x90;
-Tbase TZ x270 = x92 * x89;
-Tbase TZ x271 = x269 + x270;
-Tbase TZ x272 = x268 + x271;
-Tbase TZ x273 = x267 + x272;
-Tbase TZ x274 = 0x9;
-Tbase TZ x275 = x274 * x273;
-Tbase TZ x276 = x266 + x275;
-Tbase TZ x277 = x247 + x276;
-Tbase TZ x278 = 0x19;
-Tbase TZ x279 = x277 >>> x278;
-Tbase TZ x280 = x92 * x98;
-Tbase TZ x281 = 0x2;
-Tbase TZ x282 = x97 * x281;
-Tbase TZ x283 = x93 * x282;
-Tbase TZ x284 = 0x2;
-Tbase TZ x285 = x96 * x284;
-Tbase TZ x286 = x94 * x285;
-Tbase TZ x287 = 0x2;
-Tbase TZ x288 = x95 * x287;
-Tbase TZ x289 = x95 * x288;
-Tbase TZ x290 = 0x2;
-Tbase TZ x291 = x94 * x290;
-Tbase TZ x292 = x96 * x291;
-Tbase TZ x293 = 0x2;
-Tbase TZ x294 = x93 * x293;
-Tbase TZ x295 = x97 * x294;
-Tbase TZ x296 = x98 * x92;
-Tbase TZ x297 = x295 + x296;
-Tbase TZ x298 = x292 + x297;
-Tbase TZ x299 = x289 + x298;
-Tbase TZ x300 = x286 + x299;
-Tbase TZ x301 = x283 + x300;
-Tbase TZ x302 = x280 + x301;
-Tbase TZ x303 = x89 * x91;
-Tbase TZ x304 = x90 * x90;
-Tbase TZ x305 = x91 * x89;
-Tbase TZ x306 = x304 + x305;
-Tbase TZ x307 = x303 + x306;
-Tbase TZ x308 = 0x9;
-Tbase TZ x309 = x308 * x307;
-Tbase TZ x310 = x302 + x309;
-Tbase TZ x311 = x279 + x310;
-Tbase TZ x312 = 0x19;
-Tbase TZ x313 = x311 >>> x312;
-Tbase TZ x314 = x91 * x98;
-Tbase TZ x315 = 0x2;
-Tbase TZ x316 = x97 * x315;
-Tbase TZ x317 = x92 * x316;
-Tbase TZ x318 = 0x2;
-Tbase TZ x319 = x96 * x318;
-Tbase TZ x320 = x93 * x319;
-Tbase TZ x321 = 0x2;
-Tbase TZ x322 = x95 * x321;
-Tbase TZ x323 = x94 * x322;
-Tbase TZ x324 = 0x2;
-Tbase TZ x325 = x94 * x324;
-Tbase TZ x326 = x95 * x325;
-Tbase TZ x327 = 0x2;
-Tbase TZ x328 = x93 * x327;
-Tbase TZ x329 = x96 * x328;
-Tbase TZ x330 = 0x2;
-Tbase TZ x331 = x92 * x330;
-Tbase TZ x332 = x97 * x331;
-Tbase TZ x333 = x98 * x91;
-Tbase TZ x334 = x332 + x333;
-Tbase TZ x335 = x329 + x334;
-Tbase TZ x336 = x326 + x335;
-Tbase TZ x337 = x323 + x336;
-Tbase TZ x338 = x320 + x337;
-Tbase TZ x339 = x317 + x338;
-Tbase TZ x340 = x314 + x339;
-Tbase TZ x341 = x89 * x90;
-Tbase TZ x342 = x90 * x89;
-Tbase TZ x343 = x341 + x342;
-Tbase TZ x344 = 0x9;
-Tbase TZ x345 = x344 * x343;
-Tbase TZ x346 = x340 + x345;
-Tbase TZ x347 = x313 + x346;
-Tbase TZ x348 = 0x19;
-Tbase TZ x349 = x347 >>> x348;
-Tbase TZ x350 = x90 * x98;
-Tbase TZ x351 = 0x2;
-Tbase TZ x352 = x97 * x351;
-Tbase TZ x353 = x91 * x352;
-Tbase TZ x354 = 0x2;
-Tbase TZ x355 = x96 * x354;
-Tbase TZ x356 = x92 * x355;
-Tbase TZ x357 = 0x2;
-Tbase TZ x358 = x95 * x357;
-Tbase TZ x359 = x93 * x358;
-Tbase TZ x360 = 0x2;
-Tbase TZ x361 = x94 * x360;
-Tbase TZ x362 = x94 * x361;
-Tbase TZ x363 = 0x2;
-Tbase TZ x364 = x93 * x363;
-Tbase TZ x365 = x95 * x364;
-Tbase TZ x366 = 0x2;
-Tbase TZ x367 = x92 * x366;
-Tbase TZ x368 = x96 * x367;
-Tbase TZ x369 = 0x2;
-Tbase TZ x370 = x91 * x369;
-Tbase TZ x371 = x97 * x370;
-Tbase TZ x372 = x98 * x90;
-Tbase TZ x373 = x371 + x372;
-Tbase TZ x374 = x368 + x373;
-Tbase TZ x375 = x365 + x374;
-Tbase TZ x376 = x362 + x375;
-Tbase TZ x377 = x359 + x376;
-Tbase TZ x378 = x356 + x377;
-Tbase TZ x379 = x353 + x378;
-Tbase TZ x380 = x350 + x379;
-Tbase TZ x381 = x89 * x89;
-Tbase TZ x382 = 0x9;
-Tbase TZ x383 = x382 * x381;
-Tbase TZ x384 = x380 + x383;
-Tbase TZ x385 = x349 + x384;
-Tbase TZ x386 = 0x19;
-Tbase TZ x387 = x385 >>> x386;
-Tbase TZ x388 = x89 * x98;
-Tbase TZ x389 = 0x2;
-Tbase TZ x390 = x97 * x389;
-Tbase TZ x391 = x90 * x390;
-Tbase TZ x392 = 0x2;
-Tbase TZ x393 = x96 * x392;
-Tbase TZ x394 = x91 * x393;
-Tbase TZ x395 = 0x2;
-Tbase TZ x396 = x95 * x395;
-Tbase TZ x397 = x92 * x396;
-Tbase TZ x398 = 0x2;
-Tbase TZ x399 = x94 * x398;
-Tbase TZ x400 = x93 * x399;
-Tbase TZ x401 = 0x2;
-Tbase TZ x402 = x93 * x401;
-Tbase TZ x403 = x94 * x402;
-Tbase TZ x404 = 0x2;
-Tbase TZ x405 = x92 * x404;
-Tbase TZ x406 = x95 * x405;
-Tbase TZ x407 = 0x2;
-Tbase TZ x408 = x91 * x407;
-Tbase TZ x409 = x96 * x408;
-Tbase TZ x410 = 0x2;
-Tbase TZ x411 = x90 * x410;
-Tbase TZ x412 = x97 * x411;
-Tbase TZ x413 = x98 * x89;
-Tbase TZ x414 = x412 + x413;
-Tbase TZ x415 = x409 + x414;
-Tbase TZ x416 = x406 + x415;
-Tbase TZ x417 = x403 + x416;
-Tbase TZ x418 = x400 + x417;
-Tbase TZ x419 = x397 + x418;
-Tbase TZ x420 = x394 + x419;
-Tbase TZ x421 = x391 + x420;
-Tbase TZ x422 = x388 + x421;
-Tbase TZ x423 = x387 + x422;
-Tbase TZ x424 = 0x19;
-Tbase TZ x425 = x423 >>> x424;
-Tbase TZ x426 = 0x9;
-Tbase TZ x427 = x426 * x425;
-Tbase TZ x428 = 0x3ffffff;
-Tbase TZ x429 = x137 & x428;
-Tbase TZ x430 = x427 + x429;
-Tbase TZ x431 = 0x1a;
-Tbase TZ x432 = x430 >>> x431;
-Tbase TZ x433 = 0x1ffffff;
-Tbase TZ x434 = x161 & x433;
-Tbase TZ x435 = x432 + x434;
-Tbase TZ x436 = 0x1ffffff;
-Tbase TZ x437 = x423 & x436;
-Tbase TZ x438 = 0x1ffffff;
-Tbase TZ x439 = x385 & x438;
-Tbase TZ x440 = 0x1ffffff;
-Tbase TZ x441 = x347 & x440;
-Tbase TZ x442 = 0x1ffffff;
-Tbase TZ x443 = x311 & x442;
-Tbase TZ x444 = 0x1ffffff;
-Tbase TZ x445 = x277 & x444;
-Tbase TZ x446 = 0x1ffffff;
-Tbase TZ x447 = x245 & x446;
-Tbase TZ x448 = 0x1ffffff;
-Tbase TZ x449 = x215 & x448;
-Tbase TZ x450 = 0x19;
-Tbase TZ x451 = x435 >>> x450;
-Tbase TZ x452 = 0x1ffffff;
-Tbase TZ x453 = x187 & x452;
-Tbase TZ x454 = x451 + x453;
-Tbase TZ x455 = 0x1ffffff;
-Tbase TZ x456 = x435 & x455;
-Tbase TZ x457 = 0x3ffffff;
-Tbase TZ x458 = x430 & x457;
-Tbase TZ x459 = 0x3fffffe;
-Tbase TZ x460 = x459 + x49;
-Tbase TZ x461 = x460 - x59;
-Tbase TZ x462 = 0x3fffffe;
-Tbase TZ x463 = x462 + x50;
-Tbase TZ x464 = x463 - x60;
-Tbase TZ x465 = 0x3fffffe;
-Tbase TZ x466 = x465 + x51;
-Tbase TZ x467 = x466 - x61;
-Tbase TZ x468 = 0x3fffffe;
-Tbase TZ x469 = x468 + x52;
-Tbase TZ x470 = x469 - x62;
-Tbase TZ x471 = 0x3fffffe;
-Tbase TZ x472 = x471 + x53;
-Tbase TZ x473 = x472 - x63;
-Tbase TZ x474 = 0x3fffffe;
-Tbase TZ x475 = x474 + x54;
-Tbase TZ x476 = x475 - x64;
-Tbase TZ x477 = 0x3fffffe;
-Tbase TZ x478 = x477 + x55;
-Tbase TZ x479 = x478 - x65;
-Tbase TZ x480 = 0x3fffffe;
-Tbase TZ x481 = x480 + x56;
-Tbase TZ x482 = x481 - x66;
-Tbase TZ x483 = 0x3fffffe;
-Tbase TZ x484 = x483 + x57;
-Tbase TZ x485 = x484 - x67;
-Tbase TZ x486 = 0x7ffffee;
-Tbase TZ x487 = x486 + x58;
-Tbase TZ x488 = x487 - x68;
-Tbase TZ x489 = x488 * x488;
-Tbase TZ x490 = 0x2;
-Tbase TZ x491 = x485 * x490;
-Tbase TZ x492 = x461 * x491;
-Tbase TZ x493 = 0x2;
-Tbase TZ x494 = x482 * x493;
-Tbase TZ x495 = x464 * x494;
-Tbase TZ x496 = 0x2;
-Tbase TZ x497 = x479 * x496;
-Tbase TZ x498 = x467 * x497;
-Tbase TZ x499 = 0x2;
-Tbase TZ x500 = x476 * x499;
-Tbase TZ x501 = x470 * x500;
-Tbase TZ x502 = 0x2;
-Tbase TZ x503 = x473 * x502;
-Tbase TZ x504 = x473 * x503;
-Tbase TZ x505 = 0x2;
-Tbase TZ x506 = x470 * x505;
-Tbase TZ x507 = x476 * x506;
-Tbase TZ x508 = 0x2;
-Tbase TZ x509 = x467 * x508;
-Tbase TZ x510 = x479 * x509;
-Tbase TZ x511 = 0x2;
-Tbase TZ x512 = x464 * x511;
-Tbase TZ x513 = x482 * x512;
-Tbase TZ x514 = 0x2;
-Tbase TZ x515 = x461 * x514;
-Tbase TZ x516 = x485 * x515;
-Tbase TZ x517 = x513 + x516;
-Tbase TZ x518 = x510 + x517;
-Tbase TZ x519 = x507 + x518;
-Tbase TZ x520 = x504 + x519;
-Tbase TZ x521 = x501 + x520;
-Tbase TZ x522 = x498 + x521;
-Tbase TZ x523 = x495 + x522;
-Tbase TZ x524 = x492 + x523;
-Tbase TZ x525 = 0x9;
-Tbase TZ x526 = x525 * x524;
-Tbase TZ x527 = x489 + x526;
-Tbase TZ x528 = 0x1a;
-Tbase TZ x529 = x527 >>> x528;
-Tbase TZ x530 = x485 * x488;
-Tbase TZ x531 = x488 * x485;
-Tbase TZ x532 = x530 + x531;
-Tbase TZ x533 = x461 * x482;
-Tbase TZ x534 = x464 * x479;
-Tbase TZ x535 = x467 * x476;
-Tbase TZ x536 = x470 * x473;
-Tbase TZ x537 = x473 * x470;
-Tbase TZ x538 = x476 * x467;
-Tbase TZ x539 = x479 * x464;
-Tbase TZ x540 = x482 * x461;
-Tbase TZ x541 = x539 + x540;
-Tbase TZ x542 = x538 + x541;
-Tbase TZ x543 = x537 + x542;
-Tbase TZ x544 = x536 + x543;
-Tbase TZ x545 = x535 + x544;
-Tbase TZ x546 = x534 + x545;
-Tbase TZ x547 = x533 + x546;
-Tbase TZ x548 = 0x9;
-Tbase TZ x549 = x548 * x547;
-Tbase TZ x550 = x532 + x549;
-Tbase TZ x551 = x529 + x550;
-Tbase TZ x552 = 0x19;
-Tbase TZ x553 = x551 >>> x552;
-Tbase TZ x554 = x482 * x488;
-Tbase TZ x555 = 0x2;
-Tbase TZ x556 = x485 * x555;
-Tbase TZ x557 = x485 * x556;
-Tbase TZ x558 = x488 * x482;
-Tbase TZ x559 = x557 + x558;
-Tbase TZ x560 = x554 + x559;
-Tbase TZ x561 = x461 * x479;
-Tbase TZ x562 = x464 * x476;
-Tbase TZ x563 = x467 * x473;
-Tbase TZ x564 = x470 * x470;
-Tbase TZ x565 = x473 * x467;
-Tbase TZ x566 = x476 * x464;
-Tbase TZ x567 = x479 * x461;
-Tbase TZ x568 = x566 + x567;
-Tbase TZ x569 = x565 + x568;
-Tbase TZ x570 = x564 + x569;
-Tbase TZ x571 = x563 + x570;
-Tbase TZ x572 = x562 + x571;
-Tbase TZ x573 = x561 + x572;
-Tbase TZ x574 = 0x9;
-Tbase TZ x575 = x574 * x573;
-Tbase TZ x576 = x560 + x575;
-Tbase TZ x577 = x553 + x576;
-Tbase TZ x578 = 0x19;
-Tbase TZ x579 = x577 >>> x578;
-Tbase TZ x580 = x479 * x488;
-Tbase TZ x581 = 0x2;
-Tbase TZ x582 = x485 * x581;
-Tbase TZ x583 = x482 * x582;
-Tbase TZ x584 = 0x2;
-Tbase TZ x585 = x482 * x584;
-Tbase TZ x586 = x485 * x585;
-Tbase TZ x587 = x488 * x479;
-Tbase TZ x588 = x586 + x587;
-Tbase TZ x589 = x583 + x588;
-Tbase TZ x590 = x580 + x589;
-Tbase TZ x591 = x461 * x476;
-Tbase TZ x592 = x464 * x473;
-Tbase TZ x593 = x467 * x470;
-Tbase TZ x594 = x470 * x467;
-Tbase TZ x595 = x473 * x464;
-Tbase TZ x596 = x476 * x461;
-Tbase TZ x597 = x595 + x596;
-Tbase TZ x598 = x594 + x597;
-Tbase TZ x599 = x593 + x598;
-Tbase TZ x600 = x592 + x599;
-Tbase TZ x601 = x591 + x600;
-Tbase TZ x602 = 0x9;
-Tbase TZ x603 = x602 * x601;
-Tbase TZ x604 = x590 + x603;
-Tbase TZ x605 = x579 + x604;
-Tbase TZ x606 = 0x19;
-Tbase TZ x607 = x605 >>> x606;
-Tbase TZ x608 = x476 * x488;
-Tbase TZ x609 = 0x2;
-Tbase TZ x610 = x485 * x609;
-Tbase TZ x611 = x479 * x610;
-Tbase TZ x612 = 0x2;
-Tbase TZ x613 = x482 * x612;
-Tbase TZ x614 = x482 * x613;
-Tbase TZ x615 = 0x2;
-Tbase TZ x616 = x479 * x615;
-Tbase TZ x617 = x485 * x616;
-Tbase TZ x618 = x488 * x476;
-Tbase TZ x619 = x617 + x618;
-Tbase TZ x620 = x614 + x619;
-Tbase TZ x621 = x611 + x620;
-Tbase TZ x622 = x608 + x621;
-Tbase TZ x623 = x461 * x473;
-Tbase TZ x624 = x464 * x470;
-Tbase TZ x625 = x467 * x467;
-Tbase TZ x626 = x470 * x464;
-Tbase TZ x627 = x473 * x461;
-Tbase TZ x628 = x626 + x627;
-Tbase TZ x629 = x625 + x628;
-Tbase TZ x630 = x624 + x629;
-Tbase TZ x631 = x623 + x630;
-Tbase TZ x632 = 0x9;
-Tbase TZ x633 = x632 * x631;
-Tbase TZ x634 = x622 + x633;
-Tbase TZ x635 = x607 + x634;
-Tbase TZ x636 = 0x19;
-Tbase TZ x637 = x635 >>> x636;
-Tbase TZ x638 = x473 * x488;
-Tbase TZ x639 = 0x2;
-Tbase TZ x640 = x485 * x639;
-Tbase TZ x641 = x476 * x640;
-Tbase TZ x642 = 0x2;
-Tbase TZ x643 = x482 * x642;
-Tbase TZ x644 = x479 * x643;
-Tbase TZ x645 = 0x2;
-Tbase TZ x646 = x479 * x645;
-Tbase TZ x647 = x482 * x646;
-Tbase TZ x648 = 0x2;
-Tbase TZ x649 = x476 * x648;
-Tbase TZ x650 = x485 * x649;
-Tbase TZ x651 = x488 * x473;
-Tbase TZ x652 = x650 + x651;
-Tbase TZ x653 = x647 + x652;
-Tbase TZ x654 = x644 + x653;
-Tbase TZ x655 = x641 + x654;
-Tbase TZ x656 = x638 + x655;
-Tbase TZ x657 = x461 * x470;
-Tbase TZ x658 = x464 * x467;
-Tbase TZ x659 = x467 * x464;
-Tbase TZ x660 = x470 * x461;
-Tbase TZ x661 = x659 + x660;
-Tbase TZ x662 = x658 + x661;
-Tbase TZ x663 = x657 + x662;
-Tbase TZ x664 = 0x9;
-Tbase TZ x665 = x664 * x663;
-Tbase TZ x666 = x656 + x665;
-Tbase TZ x667 = x637 + x666;
-Tbase TZ x668 = 0x19;
-Tbase TZ x669 = x667 >>> x668;
-Tbase TZ x670 = x470 * x488;
-Tbase TZ x671 = 0x2;
-Tbase TZ x672 = x485 * x671;
-Tbase TZ x673 = x473 * x672;
-Tbase TZ x674 = 0x2;
-Tbase TZ x675 = x482 * x674;
-Tbase TZ x676 = x476 * x675;
-Tbase TZ x677 = 0x2;
-Tbase TZ x678 = x479 * x677;
-Tbase TZ x679 = x479 * x678;
-Tbase TZ x680 = 0x2;
-Tbase TZ x681 = x476 * x680;
-Tbase TZ x682 = x482 * x681;
-Tbase TZ x683 = 0x2;
-Tbase TZ x684 = x473 * x683;
-Tbase TZ x685 = x485 * x684;
-Tbase TZ x686 = x488 * x470;
-Tbase TZ x687 = x685 + x686;
-Tbase TZ x688 = x682 + x687;
-Tbase TZ x689 = x679 + x688;
-Tbase TZ x690 = x676 + x689;
-Tbase TZ x691 = x673 + x690;
-Tbase TZ x692 = x670 + x691;
-Tbase TZ x693 = x461 * x467;
-Tbase TZ x694 = x464 * x464;
-Tbase TZ x695 = x467 * x461;
-Tbase TZ x696 = x694 + x695;
-Tbase TZ x697 = x693 + x696;
-Tbase TZ x698 = 0x9;
-Tbase TZ x699 = x698 * x697;
-Tbase TZ x700 = x692 + x699;
-Tbase TZ x701 = x669 + x700;
-Tbase TZ x702 = 0x19;
-Tbase TZ x703 = x701 >>> x702;
-Tbase TZ x704 = x467 * x488;
-Tbase TZ x705 = 0x2;
-Tbase TZ x706 = x485 * x705;
-Tbase TZ x707 = x470 * x706;
-Tbase TZ x708 = 0x2;
-Tbase TZ x709 = x482 * x708;
-Tbase TZ x710 = x473 * x709;
-Tbase TZ x711 = 0x2;
-Tbase TZ x712 = x479 * x711;
-Tbase TZ x713 = x476 * x712;
-Tbase TZ x714 = 0x2;
-Tbase TZ x715 = x476 * x714;
-Tbase TZ x716 = x479 * x715;
-Tbase TZ x717 = 0x2;
-Tbase TZ x718 = x473 * x717;
-Tbase TZ x719 = x482 * x718;
-Tbase TZ x720 = 0x2;
-Tbase TZ x721 = x470 * x720;
-Tbase TZ x722 = x485 * x721;
-Tbase TZ x723 = x488 * x467;
-Tbase TZ x724 = x722 + x723;
-Tbase TZ x725 = x719 + x724;
-Tbase TZ x726 = x716 + x725;
-Tbase TZ x727 = x713 + x726;
-Tbase TZ x728 = x710 + x727;
-Tbase TZ x729 = x707 + x728;
-Tbase TZ x730 = x704 + x729;
-Tbase TZ x731 = x461 * x464;
-Tbase TZ x732 = x464 * x461;
-Tbase TZ x733 = x731 + x732;
-Tbase TZ x734 = 0x9;
-Tbase TZ x735 = x734 * x733;
-Tbase TZ x736 = x730 + x735;
-Tbase TZ x737 = x703 + x736;
-Tbase TZ x738 = 0x19;
-Tbase TZ x739 = x737 >>> x738;
-Tbase TZ x740 = x464 * x488;
-Tbase TZ x741 = 0x2;
-Tbase TZ x742 = x485 * x741;
-Tbase TZ x743 = x467 * x742;
-Tbase TZ x744 = 0x2;
-Tbase TZ x745 = x482 * x744;
-Tbase TZ x746 = x470 * x745;
-Tbase TZ x747 = 0x2;
-Tbase TZ x748 = x479 * x747;
-Tbase TZ x749 = x473 * x748;
-Tbase TZ x750 = 0x2;
-Tbase TZ x751 = x476 * x750;
-Tbase TZ x752 = x476 * x751;
-Tbase TZ x753 = 0x2;
-Tbase TZ x754 = x473 * x753;
-Tbase TZ x755 = x479 * x754;
-Tbase TZ x756 = 0x2;
-Tbase TZ x757 = x470 * x756;
-Tbase TZ x758 = x482 * x757;
-Tbase TZ x759 = 0x2;
-Tbase TZ x760 = x467 * x759;
-Tbase TZ x761 = x485 * x760;
-Tbase TZ x762 = x488 * x464;
-Tbase TZ x763 = x761 + x762;
-Tbase TZ x764 = x758 + x763;
-Tbase TZ x765 = x755 + x764;
-Tbase TZ x766 = x752 + x765;
-Tbase TZ x767 = x749 + x766;
-Tbase TZ x768 = x746 + x767;
-Tbase TZ x769 = x743 + x768;
-Tbase TZ x770 = x740 + x769;
-Tbase TZ x771 = x461 * x461;
-Tbase TZ x772 = 0x9;
-Tbase TZ x773 = x772 * x771;
-Tbase TZ x774 = x770 + x773;
-Tbase TZ x775 = x739 + x774;
-Tbase TZ x776 = 0x19;
-Tbase TZ x777 = x775 >>> x776;
-Tbase TZ x778 = x461 * x488;
-Tbase TZ x779 = 0x2;
-Tbase TZ x780 = x485 * x779;
-Tbase TZ x781 = x464 * x780;
-Tbase TZ x782 = 0x2;
-Tbase TZ x783 = x482 * x782;
-Tbase TZ x784 = x467 * x783;
-Tbase TZ x785 = 0x2;
-Tbase TZ x786 = x479 * x785;
-Tbase TZ x787 = x470 * x786;
-Tbase TZ x788 = 0x2;
-Tbase TZ x789 = x476 * x788;
-Tbase TZ x790 = x473 * x789;
-Tbase TZ x791 = 0x2;
-Tbase TZ x792 = x473 * x791;
-Tbase TZ x793 = x476 * x792;
-Tbase TZ x794 = 0x2;
-Tbase TZ x795 = x470 * x794;
-Tbase TZ x796 = x479 * x795;
-Tbase TZ x797 = 0x2;
-Tbase TZ x798 = x467 * x797;
-Tbase TZ x799 = x482 * x798;
-Tbase TZ x800 = 0x2;
-Tbase TZ x801 = x464 * x800;
-Tbase TZ x802 = x485 * x801;
-Tbase TZ x803 = x488 * x461;
-Tbase TZ x804 = x802 + x803;
-Tbase TZ x805 = x799 + x804;
-Tbase TZ x806 = x796 + x805;
-Tbase TZ x807 = x793 + x806;
-Tbase TZ x808 = x790 + x807;
-Tbase TZ x809 = x787 + x808;
-Tbase TZ x810 = x784 + x809;
-Tbase TZ x811 = x781 + x810;
-Tbase TZ x812 = x778 + x811;
-Tbase TZ x813 = x777 + x812;
-Tbase TZ x814 = 0x19;
-Tbase TZ x815 = x813 >>> x814;
-Tbase TZ x816 = 0x9;
-Tbase TZ x817 = x816 * x815;
-Tbase TZ x818 = 0x3ffffff;
-Tbase TZ x819 = x527 & x818;
-Tbase TZ x820 = x817 + x819;
-Tbase TZ x821 = 0x1a;
-Tbase TZ x822 = x820 >>> x821;
-Tbase TZ x823 = 0x1ffffff;
-Tbase TZ x824 = x551 & x823;
-Tbase TZ x825 = x822 + x824;
-Tbase TZ x826 = 0x1ffffff;
-Tbase TZ x827 = x813 & x826;
-Tbase TZ x828 = 0x1ffffff;
-Tbase TZ x829 = x775 & x828;
-Tbase TZ x830 = 0x1ffffff;
-Tbase TZ x831 = x737 & x830;
-Tbase TZ x832 = 0x1ffffff;
-Tbase TZ x833 = x701 & x832;
-Tbase TZ x834 = 0x1ffffff;
-Tbase TZ x835 = x667 & x834;
-Tbase TZ x836 = 0x1ffffff;
-Tbase TZ x837 = x635 & x836;
-Tbase TZ x838 = 0x1ffffff;
-Tbase TZ x839 = x605 & x838;
-Tbase TZ x840 = 0x19;
-Tbase TZ x841 = x825 >>> x840;
-Tbase TZ x842 = 0x1ffffff;
-Tbase TZ x843 = x577 & x842;
-Tbase TZ x844 = x841 + x843;
-Tbase TZ x845 = 0x1ffffff;
-Tbase TZ x846 = x825 & x845;
-Tbase TZ x847 = 0x3ffffff;
-Tbase TZ x848 = x820 & x847;
-Tbase TZ x849 = 0x3fffffe;
-Tbase TZ x850 = x849 + x437;
-Tbase TZ x851 = x850 - x827;
-Tbase TZ x852 = 0x3fffffe;
-Tbase TZ x853 = x852 + x439;
-Tbase TZ x854 = x853 - x829;
-Tbase TZ x855 = 0x3fffffe;
-Tbase TZ x856 = x855 + x441;
-Tbase TZ x857 = x856 - x831;
-Tbase TZ x858 = 0x3fffffe;
-Tbase TZ x859 = x858 + x443;
-Tbase TZ x860 = x859 - x833;
-Tbase TZ x861 = 0x3fffffe;
-Tbase TZ x862 = x861 + x445;
-Tbase TZ x863 = x862 - x835;
-Tbase TZ x864 = 0x3fffffe;
-Tbase TZ x865 = x864 + x447;
-Tbase TZ x866 = x865 - x837;
-Tbase TZ x867 = 0x3fffffe;
-Tbase TZ x868 = x867 + x449;
-Tbase TZ x869 = x868 - x839;
-Tbase TZ x870 = 0x3fffffe;
-Tbase TZ x871 = x870 + x454;
-Tbase TZ x872 = x871 - x844;
-Tbase TZ x873 = 0x3fffffe;
-Tbase TZ x874 = x873 + x456;
-Tbase TZ x875 = x874 - x846;
-Tbase TZ x876 = 0x7ffffee;
-Tbase TZ x877 = x876 + x458;
-Tbase TZ x878 = x877 - x848;
-Tbase TZ x879 = x69 + x79;
-Tbase TZ x880 = x70 + x80;
-Tbase TZ x881 = x71 + x81;
-Tbase TZ x882 = x72 + x82;
-Tbase TZ x883 = x73 + x83;
-Tbase TZ x884 = x74 + x84;
-Tbase TZ x885 = x75 + x85;
-Tbase TZ x886 = x76 + x86;
-Tbase TZ x887 = x77 + x87;
-Tbase TZ x888 = x78 + x88;
-Tbase TZ x889 = 0x3fffffe;
-Tbase TZ x890 = x889 + x69;
-Tbase TZ x891 = x890 - x79;
-Tbase TZ x892 = 0x3fffffe;
-Tbase TZ x893 = x892 + x70;
-Tbase TZ x894 = x893 - x80;
-Tbase TZ x895 = 0x3fffffe;
-Tbase TZ x896 = x895 + x71;
-Tbase TZ x897 = x896 - x81;
-Tbase TZ x898 = 0x3fffffe;
-Tbase TZ x899 = x898 + x72;
-Tbase TZ x900 = x899 - x82;
-Tbase TZ x901 = 0x3fffffe;
-Tbase TZ x902 = x901 + x73;
-Tbase TZ x903 = x902 - x83;
-Tbase TZ x904 = 0x3fffffe;
-Tbase TZ x905 = x904 + x74;
-Tbase TZ x906 = x905 - x84;
-Tbase TZ x907 = 0x3fffffe;
-Tbase TZ x908 = x907 + x75;
-Tbase TZ x909 = x908 - x85;
-Tbase TZ x910 = 0x3fffffe;
-Tbase TZ x911 = x910 + x76;
-Tbase TZ x912 = x911 - x86;
-Tbase TZ x913 = 0x3fffffe;
-Tbase TZ x914 = x913 + x77;
-Tbase TZ x915 = x914 - x87;
-Tbase TZ x916 = 0x7ffffee;
-Tbase TZ x917 = x916 + x78;
-Tbase TZ x918 = x917 - x88;
-Tbase TZ x919 = x918 * x98;
-Tbase TZ x920 = 0x2;
-Tbase TZ x921 = x97 * x920;
-Tbase TZ x922 = x891 * x921;
-Tbase TZ x923 = 0x2;
-Tbase TZ x924 = x96 * x923;
-Tbase TZ x925 = x894 * x924;
-Tbase TZ x926 = 0x2;
-Tbase TZ x927 = x95 * x926;
-Tbase TZ x928 = x897 * x927;
-Tbase TZ x929 = 0x2;
-Tbase TZ x930 = x94 * x929;
-Tbase TZ x931 = x900 * x930;
-Tbase TZ x932 = 0x2;
-Tbase TZ x933 = x93 * x932;
-Tbase TZ x934 = x903 * x933;
-Tbase TZ x935 = 0x2;
-Tbase TZ x936 = x92 * x935;
-Tbase TZ x937 = x906 * x936;
-Tbase TZ x938 = 0x2;
-Tbase TZ x939 = x91 * x938;
-Tbase TZ x940 = x909 * x939;
-Tbase TZ x941 = 0x2;
-Tbase TZ x942 = x90 * x941;
-Tbase TZ x943 = x912 * x942;
-Tbase TZ x944 = 0x2;
-Tbase TZ x945 = x89 * x944;
-Tbase TZ x946 = x915 * x945;
-Tbase TZ x947 = x943 + x946;
-Tbase TZ x948 = x940 + x947;
-Tbase TZ x949 = x937 + x948;
-Tbase TZ x950 = x934 + x949;
-Tbase TZ x951 = x931 + x950;
-Tbase TZ x952 = x928 + x951;
-Tbase TZ x953 = x925 + x952;
-Tbase TZ x954 = x922 + x953;
-Tbase TZ x955 = 0x9;
-Tbase TZ x956 = x955 * x954;
-Tbase TZ x957 = x919 + x956;
-Tbase TZ x958 = 0x1a;
-Tbase TZ x959 = x957 >>> x958;
-Tbase TZ x960 = x915 * x98;
-Tbase TZ x961 = x918 * x97;
-Tbase TZ x962 = x960 + x961;
-Tbase TZ x963 = x891 * x96;
-Tbase TZ x964 = x894 * x95;
-Tbase TZ x965 = x897 * x94;
-Tbase TZ x966 = x900 * x93;
-Tbase TZ x967 = x903 * x92;
-Tbase TZ x968 = x906 * x91;
-Tbase TZ x969 = x909 * x90;
-Tbase TZ x970 = x912 * x89;
-Tbase TZ x971 = x969 + x970;
-Tbase TZ x972 = x968 + x971;
-Tbase TZ x973 = x967 + x972;
-Tbase TZ x974 = x966 + x973;
-Tbase TZ x975 = x965 + x974;
-Tbase TZ x976 = x964 + x975;
-Tbase TZ x977 = x963 + x976;
-Tbase TZ x978 = 0x9;
-Tbase TZ x979 = x978 * x977;
-Tbase TZ x980 = x962 + x979;
-Tbase TZ x981 = x959 + x980;
-Tbase TZ x982 = 0x19;
-Tbase TZ x983 = x981 >>> x982;
-Tbase TZ x984 = x912 * x98;
-Tbase TZ x985 = 0x2;
-Tbase TZ x986 = x97 * x985;
-Tbase TZ x987 = x915 * x986;
-Tbase TZ x988 = x918 * x96;
-Tbase TZ x989 = x987 + x988;
-Tbase TZ x990 = x984 + x989;
-Tbase TZ x991 = x891 * x95;
-Tbase TZ x992 = x894 * x94;
-Tbase TZ x993 = x897 * x93;
-Tbase TZ x994 = x900 * x92;
-Tbase TZ x995 = x903 * x91;
-Tbase TZ x996 = x906 * x90;
-Tbase TZ x997 = x909 * x89;
-Tbase TZ x998 = x996 + x997;
-Tbase TZ x999 = x995 + x998;
-Tbase TZ x1000 = x994 + x999;
-Tbase TZ x1001 = x993 + x1000;
-Tbase TZ x1002 = x992 + x1001;
-Tbase TZ x1003 = x991 + x1002;
-Tbase TZ x1004 = 0x9;
-Tbase TZ x1005 = x1004 * x1003;
-Tbase TZ x1006 = x990 + x1005;
-Tbase TZ x1007 = x983 + x1006;
-Tbase TZ x1008 = 0x19;
-Tbase TZ x1009 = x1007 >>> x1008;
-Tbase TZ x1010 = x909 * x98;
-Tbase TZ x1011 = 0x2;
-Tbase TZ x1012 = x97 * x1011;
-Tbase TZ x1013 = x912 * x1012;
-Tbase TZ x1014 = 0x2;
-Tbase TZ x1015 = x96 * x1014;
-Tbase TZ x1016 = x915 * x1015;
-Tbase TZ x1017 = x918 * x95;
-Tbase TZ x1018 = x1016 + x1017;
-Tbase TZ x1019 = x1013 + x1018;
-Tbase TZ x1020 = x1010 + x1019;
-Tbase TZ x1021 = x891 * x94;
-Tbase TZ x1022 = x894 * x93;
-Tbase TZ x1023 = x897 * x92;
-Tbase TZ x1024 = x900 * x91;
-Tbase TZ x1025 = x903 * x90;
-Tbase TZ x1026 = x906 * x89;
-Tbase TZ x1027 = x1025 + x1026;
-Tbase TZ x1028 = x1024 + x1027;
-Tbase TZ x1029 = x1023 + x1028;
-Tbase TZ x1030 = x1022 + x1029;
-Tbase TZ x1031 = x1021 + x1030;
-Tbase TZ x1032 = 0x9;
-Tbase TZ x1033 = x1032 * x1031;
-Tbase TZ x1034 = x1020 + x1033;
-Tbase TZ x1035 = x1009 + x1034;
-Tbase TZ x1036 = 0x19;
-Tbase TZ x1037 = x1035 >>> x1036;
-Tbase TZ x1038 = x906 * x98;
-Tbase TZ x1039 = 0x2;
-Tbase TZ x1040 = x97 * x1039;
-Tbase TZ x1041 = x909 * x1040;
-Tbase TZ x1042 = 0x2;
-Tbase TZ x1043 = x96 * x1042;
-Tbase TZ x1044 = x912 * x1043;
-Tbase TZ x1045 = 0x2;
-Tbase TZ x1046 = x95 * x1045;
-Tbase TZ x1047 = x915 * x1046;
-Tbase TZ x1048 = x918 * x94;
-Tbase TZ x1049 = x1047 + x1048;
-Tbase TZ x1050 = x1044 + x1049;
-Tbase TZ x1051 = x1041 + x1050;
-Tbase TZ x1052 = x1038 + x1051;
-Tbase TZ x1053 = x891 * x93;
-Tbase TZ x1054 = x894 * x92;
-Tbase TZ x1055 = x897 * x91;
-Tbase TZ x1056 = x900 * x90;
-Tbase TZ x1057 = x903 * x89;
-Tbase TZ x1058 = x1056 + x1057;
-Tbase TZ x1059 = x1055 + x1058;
-Tbase TZ x1060 = x1054 + x1059;
-Tbase TZ x1061 = x1053 + x1060;
-Tbase TZ x1062 = 0x9;
-Tbase TZ x1063 = x1062 * x1061;
-Tbase TZ x1064 = x1052 + x1063;
-Tbase TZ x1065 = x1037 + x1064;
-Tbase TZ x1066 = 0x19;
-Tbase TZ x1067 = x1065 >>> x1066;
-Tbase TZ x1068 = x903 * x98;
-Tbase TZ x1069 = 0x2;
-Tbase TZ x1070 = x97 * x1069;
-Tbase TZ x1071 = x906 * x1070;
-Tbase TZ x1072 = 0x2;
-Tbase TZ x1073 = x96 * x1072;
-Tbase TZ x1074 = x909 * x1073;
-Tbase TZ x1075 = 0x2;
-Tbase TZ x1076 = x95 * x1075;
-Tbase TZ x1077 = x912 * x1076;
-Tbase TZ x1078 = 0x2;
-Tbase TZ x1079 = x94 * x1078;
-Tbase TZ x1080 = x915 * x1079;
-Tbase TZ x1081 = x918 * x93;
-Tbase TZ x1082 = x1080 + x1081;
-Tbase TZ x1083 = x1077 + x1082;
-Tbase TZ x1084 = x1074 + x1083;
-Tbase TZ x1085 = x1071 + x1084;
-Tbase TZ x1086 = x1068 + x1085;
-Tbase TZ x1087 = x891 * x92;
-Tbase TZ x1088 = x894 * x91;
-Tbase TZ x1089 = x897 * x90;
-Tbase TZ x1090 = x900 * x89;
-Tbase TZ x1091 = x1089 + x1090;
-Tbase TZ x1092 = x1088 + x1091;
-Tbase TZ x1093 = x1087 + x1092;
-Tbase TZ x1094 = 0x9;
-Tbase TZ x1095 = x1094 * x1093;
-Tbase TZ x1096 = x1086 + x1095;
-Tbase TZ x1097 = x1067 + x1096;
-Tbase TZ x1098 = 0x19;
-Tbase TZ x1099 = x1097 >>> x1098;
-Tbase TZ x1100 = x900 * x98;
-Tbase TZ x1101 = 0x2;
-Tbase TZ x1102 = x97 * x1101;
-Tbase TZ x1103 = x903 * x1102;
-Tbase TZ x1104 = 0x2;
-Tbase TZ x1105 = x96 * x1104;
-Tbase TZ x1106 = x906 * x1105;
-Tbase TZ x1107 = 0x2;
-Tbase TZ x1108 = x95 * x1107;
-Tbase TZ x1109 = x909 * x1108;
-Tbase TZ x1110 = 0x2;
-Tbase TZ x1111 = x94 * x1110;
-Tbase TZ x1112 = x912 * x1111;
-Tbase TZ x1113 = 0x2;
-Tbase TZ x1114 = x93 * x1113;
-Tbase TZ x1115 = x915 * x1114;
-Tbase TZ x1116 = x918 * x92;
-Tbase TZ x1117 = x1115 + x1116;
-Tbase TZ x1118 = x1112 + x1117;
-Tbase TZ x1119 = x1109 + x1118;
-Tbase TZ x1120 = x1106 + x1119;
-Tbase TZ x1121 = x1103 + x1120;
-Tbase TZ x1122 = x1100 + x1121;
-Tbase TZ x1123 = x891 * x91;
-Tbase TZ x1124 = x894 * x90;
-Tbase TZ x1125 = x897 * x89;
-Tbase TZ x1126 = x1124 + x1125;
-Tbase TZ x1127 = x1123 + x1126;
-Tbase TZ x1128 = 0x9;
-Tbase TZ x1129 = x1128 * x1127;
-Tbase TZ x1130 = x1122 + x1129;
-Tbase TZ x1131 = x1099 + x1130;
-Tbase TZ x1132 = 0x19;
-Tbase TZ x1133 = x1131 >>> x1132;
-Tbase TZ x1134 = x897 * x98;
-Tbase TZ x1135 = 0x2;
-Tbase TZ x1136 = x97 * x1135;
-Tbase TZ x1137 = x900 * x1136;
-Tbase TZ x1138 = 0x2;
-Tbase TZ x1139 = x96 * x1138;
-Tbase TZ x1140 = x903 * x1139;
-Tbase TZ x1141 = 0x2;
-Tbase TZ x1142 = x95 * x1141;
-Tbase TZ x1143 = x906 * x1142;
-Tbase TZ x1144 = 0x2;
-Tbase TZ x1145 = x94 * x1144;
-Tbase TZ x1146 = x909 * x1145;
-Tbase TZ x1147 = 0x2;
-Tbase TZ x1148 = x93 * x1147;
-Tbase TZ x1149 = x912 * x1148;
-Tbase TZ x1150 = 0x2;
-Tbase TZ x1151 = x92 * x1150;
-Tbase TZ x1152 = x915 * x1151;
-Tbase TZ x1153 = x918 * x91;
-Tbase TZ x1154 = x1152 + x1153;
-Tbase TZ x1155 = x1149 + x1154;
-Tbase TZ x1156 = x1146 + x1155;
-Tbase TZ x1157 = x1143 + x1156;
-Tbase TZ x1158 = x1140 + x1157;
-Tbase TZ x1159 = x1137 + x1158;
-Tbase TZ x1160 = x1134 + x1159;
-Tbase TZ x1161 = x891 * x90;
-Tbase TZ x1162 = x894 * x89;
-Tbase TZ x1163 = x1161 + x1162;
-Tbase TZ x1164 = 0x9;
-Tbase TZ x1165 = x1164 * x1163;
-Tbase TZ x1166 = x1160 + x1165;
-Tbase TZ x1167 = x1133 + x1166;
-Tbase TZ x1168 = 0x19;
-Tbase TZ x1169 = x1167 >>> x1168;
-Tbase TZ x1170 = x894 * x98;
-Tbase TZ x1171 = 0x2;
-Tbase TZ x1172 = x97 * x1171;
-Tbase TZ x1173 = x897 * x1172;
-Tbase TZ x1174 = 0x2;
-Tbase TZ x1175 = x96 * x1174;
-Tbase TZ x1176 = x900 * x1175;
-Tbase TZ x1177 = 0x2;
-Tbase TZ x1178 = x95 * x1177;
-Tbase TZ x1179 = x903 * x1178;
-Tbase TZ x1180 = 0x2;
-Tbase TZ x1181 = x94 * x1180;
-Tbase TZ x1182 = x906 * x1181;
-Tbase TZ x1183 = 0x2;
-Tbase TZ x1184 = x93 * x1183;
-Tbase TZ x1185 = x909 * x1184;
-Tbase TZ x1186 = 0x2;
-Tbase TZ x1187 = x92 * x1186;
-Tbase TZ x1188 = x912 * x1187;
-Tbase TZ x1189 = 0x2;
-Tbase TZ x1190 = x91 * x1189;
-Tbase TZ x1191 = x915 * x1190;
-Tbase TZ x1192 = x918 * x90;
-Tbase TZ x1193 = x1191 + x1192;
-Tbase TZ x1194 = x1188 + x1193;
-Tbase TZ x1195 = x1185 + x1194;
-Tbase TZ x1196 = x1182 + x1195;
-Tbase TZ x1197 = x1179 + x1196;
-Tbase TZ x1198 = x1176 + x1197;
-Tbase TZ x1199 = x1173 + x1198;
-Tbase TZ x1200 = x1170 + x1199;
-Tbase TZ x1201 = x891 * x89;
-Tbase TZ x1202 = 0x9;
-Tbase TZ x1203 = x1202 * x1201;
-Tbase TZ x1204 = x1200 + x1203;
-Tbase TZ x1205 = x1169 + x1204;
-Tbase TZ x1206 = 0x19;
-Tbase TZ x1207 = x1205 >>> x1206;
-Tbase TZ x1208 = x891 * x98;
-Tbase TZ x1209 = 0x2;
-Tbase TZ x1210 = x97 * x1209;
-Tbase TZ x1211 = x894 * x1210;
-Tbase TZ x1212 = 0x2;
-Tbase TZ x1213 = x96 * x1212;
-Tbase TZ x1214 = x897 * x1213;
-Tbase TZ x1215 = 0x2;
-Tbase TZ x1216 = x95 * x1215;
-Tbase TZ x1217 = x900 * x1216;
-Tbase TZ x1218 = 0x2;
-Tbase TZ x1219 = x94 * x1218;
-Tbase TZ x1220 = x903 * x1219;
-Tbase TZ x1221 = 0x2;
-Tbase TZ x1222 = x93 * x1221;
-Tbase TZ x1223 = x906 * x1222;
-Tbase TZ x1224 = 0x2;
-Tbase TZ x1225 = x92 * x1224;
-Tbase TZ x1226 = x909 * x1225;
-Tbase TZ x1227 = 0x2;
-Tbase TZ x1228 = x91 * x1227;
-Tbase TZ x1229 = x912 * x1228;
-Tbase TZ x1230 = 0x2;
-Tbase TZ x1231 = x90 * x1230;
-Tbase TZ x1232 = x915 * x1231;
-Tbase TZ x1233 = x918 * x89;
-Tbase TZ x1234 = x1232 + x1233;
-Tbase TZ x1235 = x1229 + x1234;
-Tbase TZ x1236 = x1226 + x1235;
-Tbase TZ x1237 = x1223 + x1236;
-Tbase TZ x1238 = x1220 + x1237;
-Tbase TZ x1239 = x1217 + x1238;
-Tbase TZ x1240 = x1214 + x1239;
-Tbase TZ x1241 = x1211 + x1240;
-Tbase TZ x1242 = x1208 + x1241;
-Tbase TZ x1243 = x1207 + x1242;
-Tbase TZ x1244 = 0x19;
-Tbase TZ x1245 = x1243 >>> x1244;
-Tbase TZ x1246 = 0x9;
-Tbase TZ x1247 = x1246 * x1245;
-Tbase TZ x1248 = 0x3ffffff;
-Tbase TZ x1249 = x957 & x1248;
-Tbase TZ x1250 = x1247 + x1249;
-Tbase TZ x1251 = 0x1a;
-Tbase TZ x1252 = x1250 >>> x1251;
-Tbase TZ x1253 = 0x1ffffff;
-Tbase TZ x1254 = x981 & x1253;
-Tbase TZ x1255 = x1252 + x1254;
-Tbase TZ x1256 = 0x1ffffff;
-Tbase TZ x1257 = x1243 & x1256;
-Tbase TZ x1258 = 0x1ffffff;
-Tbase TZ x1259 = x1205 & x1258;
-Tbase TZ x1260 = 0x1ffffff;
-Tbase TZ x1261 = x1167 & x1260;
-Tbase TZ x1262 = 0x1ffffff;
-Tbase TZ x1263 = x1131 & x1262;
-Tbase TZ x1264 = 0x1ffffff;
-Tbase TZ x1265 = x1097 & x1264;
-Tbase TZ x1266 = 0x1ffffff;
-Tbase TZ x1267 = x1065 & x1266;
-Tbase TZ x1268 = 0x1ffffff;
-Tbase TZ x1269 = x1035 & x1268;
-Tbase TZ x1270 = 0x19;
-Tbase TZ x1271 = x1255 >>> x1270;
-Tbase TZ x1272 = 0x1ffffff;
-Tbase TZ x1273 = x1007 & x1272;
-Tbase TZ x1274 = x1271 + x1273;
-Tbase TZ x1275 = 0x1ffffff;
-Tbase TZ x1276 = x1255 & x1275;
-Tbase TZ x1277 = 0x3ffffff;
-Tbase TZ x1278 = x1250 & x1277;
-Tbase TZ x1279 = x888 * x488;
-Tbase TZ x1280 = 0x2;
-Tbase TZ x1281 = x485 * x1280;
-Tbase TZ x1282 = x879 * x1281;
-Tbase TZ x1283 = 0x2;
-Tbase TZ x1284 = x482 * x1283;
-Tbase TZ x1285 = x880 * x1284;
-Tbase TZ x1286 = 0x2;
-Tbase TZ x1287 = x479 * x1286;
-Tbase TZ x1288 = x881 * x1287;
-Tbase TZ x1289 = 0x2;
-Tbase TZ x1290 = x476 * x1289;
-Tbase TZ x1291 = x882 * x1290;
-Tbase TZ x1292 = 0x2;
-Tbase TZ x1293 = x473 * x1292;
-Tbase TZ x1294 = x883 * x1293;
-Tbase TZ x1295 = 0x2;
-Tbase TZ x1296 = x470 * x1295;
-Tbase TZ x1297 = x884 * x1296;
-Tbase TZ x1298 = 0x2;
-Tbase TZ x1299 = x467 * x1298;
-Tbase TZ x1300 = x885 * x1299;
-Tbase TZ x1301 = 0x2;
-Tbase TZ x1302 = x464 * x1301;
-Tbase TZ x1303 = x886 * x1302;
-Tbase TZ x1304 = 0x2;
-Tbase TZ x1305 = x461 * x1304;
-Tbase TZ x1306 = x887 * x1305;
-Tbase TZ x1307 = x1303 + x1306;
-Tbase TZ x1308 = x1300 + x1307;
-Tbase TZ x1309 = x1297 + x1308;
-Tbase TZ x1310 = x1294 + x1309;
-Tbase TZ x1311 = x1291 + x1310;
-Tbase TZ x1312 = x1288 + x1311;
-Tbase TZ x1313 = x1285 + x1312;
-Tbase TZ x1314 = x1282 + x1313;
-Tbase TZ x1315 = 0x9;
-Tbase TZ x1316 = x1315 * x1314;
-Tbase TZ x1317 = x1279 + x1316;
-Tbase TZ x1318 = 0x1a;
-Tbase TZ x1319 = x1317 >>> x1318;
-Tbase TZ x1320 = x887 * x488;
-Tbase TZ x1321 = x888 * x485;
-Tbase TZ x1322 = x1320 + x1321;
-Tbase TZ x1323 = x879 * x482;
-Tbase TZ x1324 = x880 * x479;
-Tbase TZ x1325 = x881 * x476;
-Tbase TZ x1326 = x882 * x473;
-Tbase TZ x1327 = x883 * x470;
-Tbase TZ x1328 = x884 * x467;
-Tbase TZ x1329 = x885 * x464;
-Tbase TZ x1330 = x886 * x461;
-Tbase TZ x1331 = x1329 + x1330;
-Tbase TZ x1332 = x1328 + x1331;
-Tbase TZ x1333 = x1327 + x1332;
-Tbase TZ x1334 = x1326 + x1333;
-Tbase TZ x1335 = x1325 + x1334;
-Tbase TZ x1336 = x1324 + x1335;
-Tbase TZ x1337 = x1323 + x1336;
-Tbase TZ x1338 = 0x9;
-Tbase TZ x1339 = x1338 * x1337;
-Tbase TZ x1340 = x1322 + x1339;
-Tbase TZ x1341 = x1319 + x1340;
-Tbase TZ x1342 = 0x19;
-Tbase TZ x1343 = x1341 >>> x1342;
-Tbase TZ x1344 = x886 * x488;
-Tbase TZ x1345 = 0x2;
-Tbase TZ x1346 = x485 * x1345;
-Tbase TZ x1347 = x887 * x1346;
-Tbase TZ x1348 = x888 * x482;
-Tbase TZ x1349 = x1347 + x1348;
-Tbase TZ x1350 = x1344 + x1349;
-Tbase TZ x1351 = x879 * x479;
-Tbase TZ x1352 = x880 * x476;
-Tbase TZ x1353 = x881 * x473;
-Tbase TZ x1354 = x882 * x470;
-Tbase TZ x1355 = x883 * x467;
-Tbase TZ x1356 = x884 * x464;
-Tbase TZ x1357 = x885 * x461;
-Tbase TZ x1358 = x1356 + x1357;
-Tbase TZ x1359 = x1355 + x1358;
-Tbase TZ x1360 = x1354 + x1359;
-Tbase TZ x1361 = x1353 + x1360;
-Tbase TZ x1362 = x1352 + x1361;
-Tbase TZ x1363 = x1351 + x1362;
-Tbase TZ x1364 = 0x9;
-Tbase TZ x1365 = x1364 * x1363;
-Tbase TZ x1366 = x1350 + x1365;
-Tbase TZ x1367 = x1343 + x1366;
-Tbase TZ x1368 = 0x19;
-Tbase TZ x1369 = x1367 >>> x1368;
-Tbase TZ x1370 = x885 * x488;
-Tbase TZ x1371 = 0x2;
-Tbase TZ x1372 = x485 * x1371;
-Tbase TZ x1373 = x886 * x1372;
-Tbase TZ x1374 = 0x2;
-Tbase TZ x1375 = x482 * x1374;
-Tbase TZ x1376 = x887 * x1375;
-Tbase TZ x1377 = x888 * x479;
-Tbase TZ x1378 = x1376 + x1377;
-Tbase TZ x1379 = x1373 + x1378;
-Tbase TZ x1380 = x1370 + x1379;
-Tbase TZ x1381 = x879 * x476;
-Tbase TZ x1382 = x880 * x473;
-Tbase TZ x1383 = x881 * x470;
-Tbase TZ x1384 = x882 * x467;
-Tbase TZ x1385 = x883 * x464;
-Tbase TZ x1386 = x884 * x461;
-Tbase TZ x1387 = x1385 + x1386;
-Tbase TZ x1388 = x1384 + x1387;
-Tbase TZ x1389 = x1383 + x1388;
-Tbase TZ x1390 = x1382 + x1389;
-Tbase TZ x1391 = x1381 + x1390;
-Tbase TZ x1392 = 0x9;
-Tbase TZ x1393 = x1392 * x1391;
-Tbase TZ x1394 = x1380 + x1393;
-Tbase TZ x1395 = x1369 + x1394;
-Tbase TZ x1396 = 0x19;
-Tbase TZ x1397 = x1395 >>> x1396;
-Tbase TZ x1398 = x884 * x488;
-Tbase TZ x1399 = 0x2;
-Tbase TZ x1400 = x485 * x1399;
-Tbase TZ x1401 = x885 * x1400;
-Tbase TZ x1402 = 0x2;
-Tbase TZ x1403 = x482 * x1402;
-Tbase TZ x1404 = x886 * x1403;
-Tbase TZ x1405 = 0x2;
-Tbase TZ x1406 = x479 * x1405;
-Tbase TZ x1407 = x887 * x1406;
-Tbase TZ x1408 = x888 * x476;
-Tbase TZ x1409 = x1407 + x1408;
-Tbase TZ x1410 = x1404 + x1409;
-Tbase TZ x1411 = x1401 + x1410;
-Tbase TZ x1412 = x1398 + x1411;
-Tbase TZ x1413 = x879 * x473;
-Tbase TZ x1414 = x880 * x470;
-Tbase TZ x1415 = x881 * x467;
-Tbase TZ x1416 = x882 * x464;
-Tbase TZ x1417 = x883 * x461;
-Tbase TZ x1418 = x1416 + x1417;
-Tbase TZ x1419 = x1415 + x1418;
-Tbase TZ x1420 = x1414 + x1419;
-Tbase TZ x1421 = x1413 + x1420;
-Tbase TZ x1422 = 0x9;
-Tbase TZ x1423 = x1422 * x1421;
-Tbase TZ x1424 = x1412 + x1423;
-Tbase TZ x1425 = x1397 + x1424;
-Tbase TZ x1426 = 0x19;
-Tbase TZ x1427 = x1425 >>> x1426;
-Tbase TZ x1428 = x883 * x488;
-Tbase TZ x1429 = 0x2;
-Tbase TZ x1430 = x485 * x1429;
-Tbase TZ x1431 = x884 * x1430;
-Tbase TZ x1432 = 0x2;
-Tbase TZ x1433 = x482 * x1432;
-Tbase TZ x1434 = x885 * x1433;
-Tbase TZ x1435 = 0x2;
-Tbase TZ x1436 = x479 * x1435;
-Tbase TZ x1437 = x886 * x1436;
-Tbase TZ x1438 = 0x2;
-Tbase TZ x1439 = x476 * x1438;
-Tbase TZ x1440 = x887 * x1439;
-Tbase TZ x1441 = x888 * x473;
-Tbase TZ x1442 = x1440 + x1441;
-Tbase TZ x1443 = x1437 + x1442;
-Tbase TZ x1444 = x1434 + x1443;
-Tbase TZ x1445 = x1431 + x1444;
-Tbase TZ x1446 = x1428 + x1445;
-Tbase TZ x1447 = x879 * x470;
-Tbase TZ x1448 = x880 * x467;
-Tbase TZ x1449 = x881 * x464;
-Tbase TZ x1450 = x882 * x461;
-Tbase TZ x1451 = x1449 + x1450;
-Tbase TZ x1452 = x1448 + x1451;
-Tbase TZ x1453 = x1447 + x1452;
-Tbase TZ x1454 = 0x9;
-Tbase TZ x1455 = x1454 * x1453;
-Tbase TZ x1456 = x1446 + x1455;
-Tbase TZ x1457 = x1427 + x1456;
-Tbase TZ x1458 = 0x19;
-Tbase TZ x1459 = x1457 >>> x1458;
-Tbase TZ x1460 = x882 * x488;
-Tbase TZ x1461 = 0x2;
-Tbase TZ x1462 = x485 * x1461;
-Tbase TZ x1463 = x883 * x1462;
-Tbase TZ x1464 = 0x2;
-Tbase TZ x1465 = x482 * x1464;
-Tbase TZ x1466 = x884 * x1465;
-Tbase TZ x1467 = 0x2;
-Tbase TZ x1468 = x479 * x1467;
-Tbase TZ x1469 = x885 * x1468;
-Tbase TZ x1470 = 0x2;
-Tbase TZ x1471 = x476 * x1470;
-Tbase TZ x1472 = x886 * x1471;
-Tbase TZ x1473 = 0x2;
-Tbase TZ x1474 = x473 * x1473;
-Tbase TZ x1475 = x887 * x1474;
-Tbase TZ x1476 = x888 * x470;
-Tbase TZ x1477 = x1475 + x1476;
-Tbase TZ x1478 = x1472 + x1477;
-Tbase TZ x1479 = x1469 + x1478;
-Tbase TZ x1480 = x1466 + x1479;
-Tbase TZ x1481 = x1463 + x1480;
-Tbase TZ x1482 = x1460 + x1481;
-Tbase TZ x1483 = x879 * x467;
-Tbase TZ x1484 = x880 * x464;
-Tbase TZ x1485 = x881 * x461;
-Tbase TZ x1486 = x1484 + x1485;
-Tbase TZ x1487 = x1483 + x1486;
-Tbase TZ x1488 = 0x9;
-Tbase TZ x1489 = x1488 * x1487;
-Tbase TZ x1490 = x1482 + x1489;
-Tbase TZ x1491 = x1459 + x1490;
-Tbase TZ x1492 = 0x19;
-Tbase TZ x1493 = x1491 >>> x1492;
-Tbase TZ x1494 = x881 * x488;
-Tbase TZ x1495 = 0x2;
-Tbase TZ x1496 = x485 * x1495;
-Tbase TZ x1497 = x882 * x1496;
-Tbase TZ x1498 = 0x2;
-Tbase TZ x1499 = x482 * x1498;
-Tbase TZ x1500 = x883 * x1499;
-Tbase TZ x1501 = 0x2;
-Tbase TZ x1502 = x479 * x1501;
-Tbase TZ x1503 = x884 * x1502;
-Tbase TZ x1504 = 0x2;
-Tbase TZ x1505 = x476 * x1504;
-Tbase TZ x1506 = x885 * x1505;
-Tbase TZ x1507 = 0x2;
-Tbase TZ x1508 = x473 * x1507;
-Tbase TZ x1509 = x886 * x1508;
-Tbase TZ x1510 = 0x2;
-Tbase TZ x1511 = x470 * x1510;
-Tbase TZ x1512 = x887 * x1511;
-Tbase TZ x1513 = x888 * x467;
-Tbase TZ x1514 = x1512 + x1513;
-Tbase TZ x1515 = x1509 + x1514;
-Tbase TZ x1516 = x1506 + x1515;
-Tbase TZ x1517 = x1503 + x1516;
-Tbase TZ x1518 = x1500 + x1517;
-Tbase TZ x1519 = x1497 + x1518;
-Tbase TZ x1520 = x1494 + x1519;
-Tbase TZ x1521 = x879 * x464;
-Tbase TZ x1522 = x880 * x461;
-Tbase TZ x1523 = x1521 + x1522;
-Tbase TZ x1524 = 0x9;
-Tbase TZ x1525 = x1524 * x1523;
-Tbase TZ x1526 = x1520 + x1525;
-Tbase TZ x1527 = x1493 + x1526;
-Tbase TZ x1528 = 0x19;
-Tbase TZ x1529 = x1527 >>> x1528;
-Tbase TZ x1530 = x880 * x488;
-Tbase TZ x1531 = 0x2;
-Tbase TZ x1532 = x485 * x1531;
-Tbase TZ x1533 = x881 * x1532;
-Tbase TZ x1534 = 0x2;
-Tbase TZ x1535 = x482 * x1534;
-Tbase TZ x1536 = x882 * x1535;
-Tbase TZ x1537 = 0x2;
-Tbase TZ x1538 = x479 * x1537;
-Tbase TZ x1539 = x883 * x1538;
-Tbase TZ x1540 = 0x2;
-Tbase TZ x1541 = x476 * x1540;
-Tbase TZ x1542 = x884 * x1541;
-Tbase TZ x1543 = 0x2;
-Tbase TZ x1544 = x473 * x1543;
-Tbase TZ x1545 = x885 * x1544;
-Tbase TZ x1546 = 0x2;
-Tbase TZ x1547 = x470 * x1546;
-Tbase TZ x1548 = x886 * x1547;
-Tbase TZ x1549 = 0x2;
-Tbase TZ x1550 = x467 * x1549;
-Tbase TZ x1551 = x887 * x1550;
-Tbase TZ x1552 = x888 * x464;
-Tbase TZ x1553 = x1551 + x1552;
-Tbase TZ x1554 = x1548 + x1553;
-Tbase TZ x1555 = x1545 + x1554;
-Tbase TZ x1556 = x1542 + x1555;
-Tbase TZ x1557 = x1539 + x1556;
-Tbase TZ x1558 = x1536 + x1557;
-Tbase TZ x1559 = x1533 + x1558;
-Tbase TZ x1560 = x1530 + x1559;
-Tbase TZ x1561 = x879 * x461;
-Tbase TZ x1562 = 0x9;
-Tbase TZ x1563 = x1562 * x1561;
-Tbase TZ x1564 = x1560 + x1563;
-Tbase TZ x1565 = x1529 + x1564;
-Tbase TZ x1566 = 0x19;
-Tbase TZ x1567 = x1565 >>> x1566;
-Tbase TZ x1568 = x879 * x488;
-Tbase TZ x1569 = 0x2;
-Tbase TZ x1570 = x485 * x1569;
-Tbase TZ x1571 = x880 * x1570;
-Tbase TZ x1572 = 0x2;
-Tbase TZ x1573 = x482 * x1572;
-Tbase TZ x1574 = x881 * x1573;
-Tbase TZ x1575 = 0x2;
-Tbase TZ x1576 = x479 * x1575;
-Tbase TZ x1577 = x882 * x1576;
-Tbase TZ x1578 = 0x2;
-Tbase TZ x1579 = x476 * x1578;
-Tbase TZ x1580 = x883 * x1579;
-Tbase TZ x1581 = 0x2;
-Tbase TZ x1582 = x473 * x1581;
-Tbase TZ x1583 = x884 * x1582;
-Tbase TZ x1584 = 0x2;
-Tbase TZ x1585 = x470 * x1584;
-Tbase TZ x1586 = x885 * x1585;
-Tbase TZ x1587 = 0x2;
-Tbase TZ x1588 = x467 * x1587;
-Tbase TZ x1589 = x886 * x1588;
-Tbase TZ x1590 = 0x2;
-Tbase TZ x1591 = x464 * x1590;
-Tbase TZ x1592 = x887 * x1591;
-Tbase TZ x1593 = x888 * x461;
-Tbase TZ x1594 = x1592 + x1593;
-Tbase TZ x1595 = x1589 + x1594;
-Tbase TZ x1596 = x1586 + x1595;
-Tbase TZ x1597 = x1583 + x1596;
-Tbase TZ x1598 = x1580 + x1597;
-Tbase TZ x1599 = x1577 + x1598;
-Tbase TZ x1600 = x1574 + x1599;
-Tbase TZ x1601 = x1571 + x1600;
-Tbase TZ x1602 = x1568 + x1601;
-Tbase TZ x1603 = x1567 + x1602;
-Tbase TZ x1604 = 0x19;
-Tbase TZ x1605 = x1603 >>> x1604;
-Tbase TZ x1606 = 0x9;
-Tbase TZ x1607 = x1606 * x1605;
-Tbase TZ x1608 = 0x3ffffff;
-Tbase TZ x1609 = x1317 & x1608;
-Tbase TZ x1610 = x1607 + x1609;
-Tbase TZ x1611 = 0x1a;
-Tbase TZ x1612 = x1610 >>> x1611;
-Tbase TZ x1613 = 0x1ffffff;
-Tbase TZ x1614 = x1341 & x1613;
-Tbase TZ x1615 = x1612 + x1614;
-Tbase TZ x1616 = 0x1ffffff;
-Tbase TZ x1617 = x1603 & x1616;
-Tbase TZ x1618 = 0x1ffffff;
-Tbase TZ x1619 = x1565 & x1618;
-Tbase TZ x1620 = 0x1ffffff;
-Tbase TZ x1621 = x1527 & x1620;
-Tbase TZ x1622 = 0x1ffffff;
-Tbase TZ x1623 = x1491 & x1622;
-Tbase TZ x1624 = 0x1ffffff;
-Tbase TZ x1625 = x1457 & x1624;
-Tbase TZ x1626 = 0x1ffffff;
-Tbase TZ x1627 = x1425 & x1626;
-Tbase TZ x1628 = 0x1ffffff;
-Tbase TZ x1629 = x1395 & x1628;
-Tbase TZ x1630 = 0x19;
-Tbase TZ x1631 = x1615 >>> x1630;
-Tbase TZ x1632 = 0x1ffffff;
-Tbase TZ x1633 = x1367 & x1632;
-Tbase TZ x1634 = x1631 + x1633;
-Tbase TZ x1635 = 0x1ffffff;
-Tbase TZ x1636 = x1615 & x1635;
-Tbase TZ x1637 = 0x3ffffff;
-Tbase TZ x1638 = x1610 & x1637;
-Tbase TZ x1639 = x1257 + x1617;
-Tbase TZ x1640 = x1259 + x1619;
-Tbase TZ x1641 = x1261 + x1621;
-Tbase TZ x1642 = x1263 + x1623;
-Tbase TZ x1643 = x1265 + x1625;
-Tbase TZ x1644 = x1267 + x1627;
-Tbase TZ x1645 = x1269 + x1629;
-Tbase TZ x1646 = x1274 + x1634;
-Tbase TZ x1647 = x1276 + x1636;
-Tbase TZ x1648 = x1278 + x1638;
-Tbase TZ x1649 = x1257 + x1617;
-Tbase TZ x1650 = x1259 + x1619;
-Tbase TZ x1651 = x1261 + x1621;
-Tbase TZ x1652 = x1263 + x1623;
-Tbase TZ x1653 = x1265 + x1625;
-Tbase TZ x1654 = x1267 + x1627;
-Tbase TZ x1655 = x1269 + x1629;
-Tbase TZ x1656 = x1274 + x1634;
-Tbase TZ x1657 = x1276 + x1636;
-Tbase TZ x1658 = x1278 + x1638;
-Tbase TZ x1659 = x1648 * x1658;
-Tbase TZ x1660 = 0x2;
-Tbase TZ x1661 = x1657 * x1660;
-Tbase TZ x1662 = x1639 * x1661;
-Tbase TZ x1663 = 0x2;
-Tbase TZ x1664 = x1656 * x1663;
-Tbase TZ x1665 = x1640 * x1664;
-Tbase TZ x1666 = 0x2;
-Tbase TZ x1667 = x1655 * x1666;
-Tbase TZ x1668 = x1641 * x1667;
-Tbase TZ x1669 = 0x2;
-Tbase TZ x1670 = x1654 * x1669;
-Tbase TZ x1671 = x1642 * x1670;
-Tbase TZ x1672 = 0x2;
-Tbase TZ x1673 = x1653 * x1672;
-Tbase TZ x1674 = x1643 * x1673;
-Tbase TZ x1675 = 0x2;
-Tbase TZ x1676 = x1652 * x1675;
-Tbase TZ x1677 = x1644 * x1676;
-Tbase TZ x1678 = 0x2;
-Tbase TZ x1679 = x1651 * x1678;
-Tbase TZ x1680 = x1645 * x1679;
-Tbase TZ x1681 = 0x2;
-Tbase TZ x1682 = x1650 * x1681;
-Tbase TZ x1683 = x1646 * x1682;
-Tbase TZ x1684 = 0x2;
-Tbase TZ x1685 = x1649 * x1684;
-Tbase TZ x1686 = x1647 * x1685;
-Tbase TZ x1687 = x1683 + x1686;
-Tbase TZ x1688 = x1680 + x1687;
-Tbase TZ x1689 = x1677 + x1688;
-Tbase TZ x1690 = x1674 + x1689;
-Tbase TZ x1691 = x1671 + x1690;
-Tbase TZ x1692 = x1668 + x1691;
-Tbase TZ x1693 = x1665 + x1692;
-Tbase TZ x1694 = x1662 + x1693;
-Tbase TZ x1695 = 0x9;
-Tbase TZ x1696 = x1695 * x1694;
-Tbase TZ x1697 = x1659 + x1696;
-Tbase TZ x1698 = 0x1a;
-Tbase TZ x1699 = x1697 >>> x1698;
-Tbase TZ x1700 = x1647 * x1658;
-Tbase TZ x1701 = x1648 * x1657;
-Tbase TZ x1702 = x1700 + x1701;
-Tbase TZ x1703 = x1639 * x1656;
-Tbase TZ x1704 = x1640 * x1655;
-Tbase TZ x1705 = x1641 * x1654;
-Tbase TZ x1706 = x1642 * x1653;
-Tbase TZ x1707 = x1643 * x1652;
-Tbase TZ x1708 = x1644 * x1651;
-Tbase TZ x1709 = x1645 * x1650;
-Tbase TZ x1710 = x1646 * x1649;
-Tbase TZ x1711 = x1709 + x1710;
-Tbase TZ x1712 = x1708 + x1711;
-Tbase TZ x1713 = x1707 + x1712;
-Tbase TZ x1714 = x1706 + x1713;
-Tbase TZ x1715 = x1705 + x1714;
-Tbase TZ x1716 = x1704 + x1715;
-Tbase TZ x1717 = x1703 + x1716;
-Tbase TZ x1718 = 0x9;
-Tbase TZ x1719 = x1718 * x1717;
-Tbase TZ x1720 = x1702 + x1719;
-Tbase TZ x1721 = x1699 + x1720;
-Tbase TZ x1722 = 0x19;
-Tbase TZ x1723 = x1721 >>> x1722;
-Tbase TZ x1724 = x1646 * x1658;
-Tbase TZ x1725 = 0x2;
-Tbase TZ x1726 = x1657 * x1725;
-Tbase TZ x1727 = x1647 * x1726;
-Tbase TZ x1728 = x1648 * x1656;
-Tbase TZ x1729 = x1727 + x1728;
-Tbase TZ x1730 = x1724 + x1729;
-Tbase TZ x1731 = x1639 * x1655;
-Tbase TZ x1732 = x1640 * x1654;
-Tbase TZ x1733 = x1641 * x1653;
-Tbase TZ x1734 = x1642 * x1652;
-Tbase TZ x1735 = x1643 * x1651;
-Tbase TZ x1736 = x1644 * x1650;
-Tbase TZ x1737 = x1645 * x1649;
-Tbase TZ x1738 = x1736 + x1737;
-Tbase TZ x1739 = x1735 + x1738;
-Tbase TZ x1740 = x1734 + x1739;
-Tbase TZ x1741 = x1733 + x1740;
-Tbase TZ x1742 = x1732 + x1741;
-Tbase TZ x1743 = x1731 + x1742;
-Tbase TZ x1744 = 0x9;
-Tbase TZ x1745 = x1744 * x1743;
-Tbase TZ x1746 = x1730 + x1745;
-Tbase TZ x1747 = x1723 + x1746;
-Tbase TZ x1748 = 0x19;
-Tbase TZ x1749 = x1747 >>> x1748;
-Tbase TZ x1750 = x1645 * x1658;
-Tbase TZ x1751 = 0x2;
-Tbase TZ x1752 = x1657 * x1751;
-Tbase TZ x1753 = x1646 * x1752;
-Tbase TZ x1754 = 0x2;
-Tbase TZ x1755 = x1656 * x1754;
-Tbase TZ x1756 = x1647 * x1755;
-Tbase TZ x1757 = x1648 * x1655;
-Tbase TZ x1758 = x1756 + x1757;
-Tbase TZ x1759 = x1753 + x1758;
-Tbase TZ x1760 = x1750 + x1759;
-Tbase TZ x1761 = x1639 * x1654;
-Tbase TZ x1762 = x1640 * x1653;
-Tbase TZ x1763 = x1641 * x1652;
-Tbase TZ x1764 = x1642 * x1651;
-Tbase TZ x1765 = x1643 * x1650;
-Tbase TZ x1766 = x1644 * x1649;
-Tbase TZ x1767 = x1765 + x1766;
-Tbase TZ x1768 = x1764 + x1767;
-Tbase TZ x1769 = x1763 + x1768;
-Tbase TZ x1770 = x1762 + x1769;
-Tbase TZ x1771 = x1761 + x1770;
-Tbase TZ x1772 = 0x9;
-Tbase TZ x1773 = x1772 * x1771;
-Tbase TZ x1774 = x1760 + x1773;
-Tbase TZ x1775 = x1749 + x1774;
-Tbase TZ x1776 = 0x19;
-Tbase TZ x1777 = x1775 >>> x1776;
-Tbase TZ x1778 = x1644 * x1658;
-Tbase TZ x1779 = 0x2;
-Tbase TZ x1780 = x1657 * x1779;
-Tbase TZ x1781 = x1645 * x1780;
-Tbase TZ x1782 = 0x2;
-Tbase TZ x1783 = x1656 * x1782;
-Tbase TZ x1784 = x1646 * x1783;
-Tbase TZ x1785 = 0x2;
-Tbase TZ x1786 = x1655 * x1785;
-Tbase TZ x1787 = x1647 * x1786;
-Tbase TZ x1788 = x1648 * x1654;
-Tbase TZ x1789 = x1787 + x1788;
-Tbase TZ x1790 = x1784 + x1789;
-Tbase TZ x1791 = x1781 + x1790;
-Tbase TZ x1792 = x1778 + x1791;
-Tbase TZ x1793 = x1639 * x1653;
-Tbase TZ x1794 = x1640 * x1652;
-Tbase TZ x1795 = x1641 * x1651;
-Tbase TZ x1796 = x1642 * x1650;
-Tbase TZ x1797 = x1643 * x1649;
-Tbase TZ x1798 = x1796 + x1797;
-Tbase TZ x1799 = x1795 + x1798;
-Tbase TZ x1800 = x1794 + x1799;
-Tbase TZ x1801 = x1793 + x1800;
-Tbase TZ x1802 = 0x9;
-Tbase TZ x1803 = x1802 * x1801;
-Tbase TZ x1804 = x1792 + x1803;
-Tbase TZ x1805 = x1777 + x1804;
-Tbase TZ x1806 = 0x19;
-Tbase TZ x1807 = x1805 >>> x1806;
-Tbase TZ x1808 = x1643 * x1658;
-Tbase TZ x1809 = 0x2;
-Tbase TZ x1810 = x1657 * x1809;
-Tbase TZ x1811 = x1644 * x1810;
-Tbase TZ x1812 = 0x2;
-Tbase TZ x1813 = x1656 * x1812;
-Tbase TZ x1814 = x1645 * x1813;
-Tbase TZ x1815 = 0x2;
-Tbase TZ x1816 = x1655 * x1815;
-Tbase TZ x1817 = x1646 * x1816;
-Tbase TZ x1818 = 0x2;
-Tbase TZ x1819 = x1654 * x1818;
-Tbase TZ x1820 = x1647 * x1819;
-Tbase TZ x1821 = x1648 * x1653;
-Tbase TZ x1822 = x1820 + x1821;
-Tbase TZ x1823 = x1817 + x1822;
-Tbase TZ x1824 = x1814 + x1823;
-Tbase TZ x1825 = x1811 + x1824;
-Tbase TZ x1826 = x1808 + x1825;
-Tbase TZ x1827 = x1639 * x1652;
-Tbase TZ x1828 = x1640 * x1651;
-Tbase TZ x1829 = x1641 * x1650;
-Tbase TZ x1830 = x1642 * x1649;
-Tbase TZ x1831 = x1829 + x1830;
-Tbase TZ x1832 = x1828 + x1831;
-Tbase TZ x1833 = x1827 + x1832;
-Tbase TZ x1834 = 0x9;
-Tbase TZ x1835 = x1834 * x1833;
-Tbase TZ x1836 = x1826 + x1835;
-Tbase TZ x1837 = x1807 + x1836;
-Tbase TZ x1838 = 0x19;
-Tbase TZ x1839 = x1837 >>> x1838;
-Tbase TZ x1840 = x1642 * x1658;
-Tbase TZ x1841 = 0x2;
-Tbase TZ x1842 = x1657 * x1841;
-Tbase TZ x1843 = x1643 * x1842;
-Tbase TZ x1844 = 0x2;
-Tbase TZ x1845 = x1656 * x1844;
-Tbase TZ x1846 = x1644 * x1845;
-Tbase TZ x1847 = 0x2;
-Tbase TZ x1848 = x1655 * x1847;
-Tbase TZ x1849 = x1645 * x1848;
-Tbase TZ x1850 = 0x2;
-Tbase TZ x1851 = x1654 * x1850;
-Tbase TZ x1852 = x1646 * x1851;
-Tbase TZ x1853 = 0x2;
-Tbase TZ x1854 = x1653 * x1853;
-Tbase TZ x1855 = x1647 * x1854;
-Tbase TZ x1856 = x1648 * x1652;
-Tbase TZ x1857 = x1855 + x1856;
-Tbase TZ x1858 = x1852 + x1857;
-Tbase TZ x1859 = x1849 + x1858;
-Tbase TZ x1860 = x1846 + x1859;
-Tbase TZ x1861 = x1843 + x1860;
-Tbase TZ x1862 = x1840 + x1861;
-Tbase TZ x1863 = x1639 * x1651;
-Tbase TZ x1864 = x1640 * x1650;
-Tbase TZ x1865 = x1641 * x1649;
-Tbase TZ x1866 = x1864 + x1865;
-Tbase TZ x1867 = x1863 + x1866;
-Tbase TZ x1868 = 0x9;
-Tbase TZ x1869 = x1868 * x1867;
-Tbase TZ x1870 = x1862 + x1869;
-Tbase TZ x1871 = x1839 + x1870;
-Tbase TZ x1872 = 0x19;
-Tbase TZ x1873 = x1871 >>> x1872;
-Tbase TZ x1874 = x1641 * x1658;
-Tbase TZ x1875 = 0x2;
-Tbase TZ x1876 = x1657 * x1875;
-Tbase TZ x1877 = x1642 * x1876;
-Tbase TZ x1878 = 0x2;
-Tbase TZ x1879 = x1656 * x1878;
-Tbase TZ x1880 = x1643 * x1879;
-Tbase TZ x1881 = 0x2;
-Tbase TZ x1882 = x1655 * x1881;
-Tbase TZ x1883 = x1644 * x1882;
-Tbase TZ x1884 = 0x2;
-Tbase TZ x1885 = x1654 * x1884;
-Tbase TZ x1886 = x1645 * x1885;
-Tbase TZ x1887 = 0x2;
-Tbase TZ x1888 = x1653 * x1887;
-Tbase TZ x1889 = x1646 * x1888;
-Tbase TZ x1890 = 0x2;
-Tbase TZ x1891 = x1652 * x1890;
-Tbase TZ x1892 = x1647 * x1891;
-Tbase TZ x1893 = x1648 * x1651;
-Tbase TZ x1894 = x1892 + x1893;
-Tbase TZ x1895 = x1889 + x1894;
-Tbase TZ x1896 = x1886 + x1895;
-Tbase TZ x1897 = x1883 + x1896;
-Tbase TZ x1898 = x1880 + x1897;
-Tbase TZ x1899 = x1877 + x1898;
-Tbase TZ x1900 = x1874 + x1899;
-Tbase TZ x1901 = x1639 * x1650;
-Tbase TZ x1902 = x1640 * x1649;
-Tbase TZ x1903 = x1901 + x1902;
-Tbase TZ x1904 = 0x9;
-Tbase TZ x1905 = x1904 * x1903;
-Tbase TZ x1906 = x1900 + x1905;
-Tbase TZ x1907 = x1873 + x1906;
-Tbase TZ x1908 = 0x19;
-Tbase TZ x1909 = x1907 >>> x1908;
-Tbase TZ x1910 = x1640 * x1658;
-Tbase TZ x1911 = 0x2;
-Tbase TZ x1912 = x1657 * x1911;
-Tbase TZ x1913 = x1641 * x1912;
-Tbase TZ x1914 = 0x2;
-Tbase TZ x1915 = x1656 * x1914;
-Tbase TZ x1916 = x1642 * x1915;
-Tbase TZ x1917 = 0x2;
-Tbase TZ x1918 = x1655 * x1917;
-Tbase TZ x1919 = x1643 * x1918;
-Tbase TZ x1920 = 0x2;
-Tbase TZ x1921 = x1654 * x1920;
-Tbase TZ x1922 = x1644 * x1921;
-Tbase TZ x1923 = 0x2;
-Tbase TZ x1924 = x1653 * x1923;
-Tbase TZ x1925 = x1645 * x1924;
-Tbase TZ x1926 = 0x2;
-Tbase TZ x1927 = x1652 * x1926;
-Tbase TZ x1928 = x1646 * x1927;
-Tbase TZ x1929 = 0x2;
-Tbase TZ x1930 = x1651 * x1929;
-Tbase TZ x1931 = x1647 * x1930;
-Tbase TZ x1932 = x1648 * x1650;
-Tbase TZ x1933 = x1931 + x1932;
-Tbase TZ x1934 = x1928 + x1933;
-Tbase TZ x1935 = x1925 + x1934;
-Tbase TZ x1936 = x1922 + x1935;
-Tbase TZ x1937 = x1919 + x1936;
-Tbase TZ x1938 = x1916 + x1937;
-Tbase TZ x1939 = x1913 + x1938;
-Tbase TZ x1940 = x1910 + x1939;
-Tbase TZ x1941 = x1639 * x1649;
-Tbase TZ x1942 = 0x9;
-Tbase TZ x1943 = x1942 * x1941;
-Tbase TZ x1944 = x1940 + x1943;
-Tbase TZ x1945 = x1909 + x1944;
-Tbase TZ x1946 = 0x19;
-Tbase TZ x1947 = x1945 >>> x1946;
-Tbase TZ x1948 = x1639 * x1658;
-Tbase TZ x1949 = 0x2;
-Tbase TZ x1950 = x1657 * x1949;
-Tbase TZ x1951 = x1640 * x1950;
-Tbase TZ x1952 = 0x2;
-Tbase TZ x1953 = x1656 * x1952;
-Tbase TZ x1954 = x1641 * x1953;
-Tbase TZ x1955 = 0x2;
-Tbase TZ x1956 = x1655 * x1955;
-Tbase TZ x1957 = x1642 * x1956;
-Tbase TZ x1958 = 0x2;
-Tbase TZ x1959 = x1654 * x1958;
-Tbase TZ x1960 = x1643 * x1959;
-Tbase TZ x1961 = 0x2;
-Tbase TZ x1962 = x1653 * x1961;
-Tbase TZ x1963 = x1644 * x1962;
-Tbase TZ x1964 = 0x2;
-Tbase TZ x1965 = x1652 * x1964;
-Tbase TZ x1966 = x1645 * x1965;
-Tbase TZ x1967 = 0x2;
-Tbase TZ x1968 = x1651 * x1967;
-Tbase TZ x1969 = x1646 * x1968;
-Tbase TZ x1970 = 0x2;
-Tbase TZ x1971 = x1650 * x1970;
-Tbase TZ x1972 = x1647 * x1971;
-Tbase TZ x1973 = x1648 * x1649;
-Tbase TZ x1974 = x1972 + x1973;
-Tbase TZ x1975 = x1969 + x1974;
-Tbase TZ x1976 = x1966 + x1975;
-Tbase TZ x1977 = x1963 + x1976;
-Tbase TZ x1978 = x1960 + x1977;
-Tbase TZ x1979 = x1957 + x1978;
-Tbase TZ x1980 = x1954 + x1979;
-Tbase TZ x1981 = x1951 + x1980;
-Tbase TZ x1982 = x1948 + x1981;
-Tbase TZ x1983 = x1947 + x1982;
-Tbase TZ x1984 = 0x19;
-Tbase TZ x1985 = x1983 >>> x1984;
-Tbase TZ x1986 = 0x9;
-Tbase TZ x1987 = x1986 * x1985;
-Tbase TZ x1988 = 0x3ffffff;
-Tbase TZ x1989 = x1697 & x1988;
-Tbase TZ x1990 = x1987 + x1989;
-Tbase TZ x1991 = 0x1a;
-Tbase TZ x1992 = x1990 >>> x1991;
-Tbase TZ x1993 = 0x1ffffff;
-Tbase TZ x1994 = x1721 & x1993;
-Tbase TZ x1995 = x1992 + x1994;
-Tbase TZ x1996 = 0x1ffffff;
-Tbase TZ x1997 = x1983 & x1996;
-Tbase TZ x1998 = 0x1ffffff;
-Tbase TZ x1999 = x1945 & x1998;
-Tbase TZ x2000 = 0x1ffffff;
-Tbase TZ x2001 = x1907 & x2000;
-Tbase TZ x2002 = 0x1ffffff;
-Tbase TZ x2003 = x1871 & x2002;
-Tbase TZ x2004 = 0x1ffffff;
-Tbase TZ x2005 = x1837 & x2004;
-Tbase TZ x2006 = 0x1ffffff;
-Tbase TZ x2007 = x1805 & x2006;
-Tbase TZ x2008 = 0x1ffffff;
-Tbase TZ x2009 = x1775 & x2008;
-Tbase TZ x2010 = 0x19;
-Tbase TZ x2011 = x1995 >>> x2010;
-Tbase TZ x2012 = 0x1ffffff;
-Tbase TZ x2013 = x1747 & x2012;
-Tbase TZ x2014 = x2011 + x2013;
-Tbase TZ x2015 = 0x1ffffff;
-Tbase TZ x2016 = x1995 & x2015;
-Tbase TZ x2017 = 0x3ffffff;
-Tbase TZ x2018 = x1990 & x2017;
-Tbase TZ x2019 = 0x3fffffe;
-Tbase TZ x2020 = x2019 + x1257;
-Tbase TZ x2021 = x2020 - x1617;
-Tbase TZ x2022 = 0x3fffffe;
-Tbase TZ x2023 = x2022 + x1259;
-Tbase TZ x2024 = x2023 - x1619;
-Tbase TZ x2025 = 0x3fffffe;
-Tbase TZ x2026 = x2025 + x1261;
-Tbase TZ x2027 = x2026 - x1621;
-Tbase TZ x2028 = 0x3fffffe;
-Tbase TZ x2029 = x2028 + x1263;
-Tbase TZ x2030 = x2029 - x1623;
-Tbase TZ x2031 = 0x3fffffe;
-Tbase TZ x2032 = x2031 + x1265;
-Tbase TZ x2033 = x2032 - x1625;
-Tbase TZ x2034 = 0x3fffffe;
-Tbase TZ x2035 = x2034 + x1267;
-Tbase TZ x2036 = x2035 - x1627;
-Tbase TZ x2037 = 0x3fffffe;
-Tbase TZ x2038 = x2037 + x1269;
-Tbase TZ x2039 = x2038 - x1629;
-Tbase TZ x2040 = 0x3fffffe;
-Tbase TZ x2041 = x2040 + x1274;
-Tbase TZ x2042 = x2041 - x1634;
-Tbase TZ x2043 = 0x3fffffe;
-Tbase TZ x2044 = x2043 + x1276;
-Tbase TZ x2045 = x2044 - x1636;
-Tbase TZ x2046 = 0x7ffffee;
-Tbase TZ x2047 = x2046 + x1278;
-Tbase TZ x2048 = x2047 - x1638;
-Tbase TZ x2049 = 0x3fffffe;
-Tbase TZ x2050 = x2049 + x1257;
-Tbase TZ x2051 = x2050 - x1617;
-Tbase TZ x2052 = 0x3fffffe;
-Tbase TZ x2053 = x2052 + x1259;
-Tbase TZ x2054 = x2053 - x1619;
-Tbase TZ x2055 = 0x3fffffe;
-Tbase TZ x2056 = x2055 + x1261;
-Tbase TZ x2057 = x2056 - x1621;
-Tbase TZ x2058 = 0x3fffffe;
-Tbase TZ x2059 = x2058 + x1263;
-Tbase TZ x2060 = x2059 - x1623;
-Tbase TZ x2061 = 0x3fffffe;
-Tbase TZ x2062 = x2061 + x1265;
-Tbase TZ x2063 = x2062 - x1625;
-Tbase TZ x2064 = 0x3fffffe;
-Tbase TZ x2065 = x2064 + x1267;
-Tbase TZ x2066 = x2065 - x1627;
-Tbase TZ x2067 = 0x3fffffe;
-Tbase TZ x2068 = x2067 + x1269;
-Tbase TZ x2069 = x2068 - x1629;
-Tbase TZ x2070 = 0x3fffffe;
-Tbase TZ x2071 = x2070 + x1274;
-Tbase TZ x2072 = x2071 - x1634;
-Tbase TZ x2073 = 0x3fffffe;
-Tbase TZ x2074 = x2073 + x1276;
-Tbase TZ x2075 = x2074 - x1636;
-Tbase TZ x2076 = 0x7ffffee;
-Tbase TZ x2077 = x2076 + x1278;
-Tbase TZ x2078 = x2077 - x1638;
-Tbase TZ x2079 = x2048 * x2078;
-Tbase TZ x2080 = 0x2;
-Tbase TZ x2081 = x2075 * x2080;
-Tbase TZ x2082 = x2021 * x2081;
-Tbase TZ x2083 = 0x2;
-Tbase TZ x2084 = x2072 * x2083;
-Tbase TZ x2085 = x2024 * x2084;
-Tbase TZ x2086 = 0x2;
-Tbase TZ x2087 = x2069 * x2086;
-Tbase TZ x2088 = x2027 * x2087;
-Tbase TZ x2089 = 0x2;
-Tbase TZ x2090 = x2066 * x2089;
-Tbase TZ x2091 = x2030 * x2090;
-Tbase TZ x2092 = 0x2;
-Tbase TZ x2093 = x2063 * x2092;
-Tbase TZ x2094 = x2033 * x2093;
-Tbase TZ x2095 = 0x2;
-Tbase TZ x2096 = x2060 * x2095;
-Tbase TZ x2097 = x2036 * x2096;
-Tbase TZ x2098 = 0x2;
-Tbase TZ x2099 = x2057 * x2098;
-Tbase TZ x2100 = x2039 * x2099;
-Tbase TZ x2101 = 0x2;
-Tbase TZ x2102 = x2054 * x2101;
-Tbase TZ x2103 = x2042 * x2102;
-Tbase TZ x2104 = 0x2;
-Tbase TZ x2105 = x2051 * x2104;
-Tbase TZ x2106 = x2045 * x2105;
-Tbase TZ x2107 = x2103 + x2106;
-Tbase TZ x2108 = x2100 + x2107;
-Tbase TZ x2109 = x2097 + x2108;
-Tbase TZ x2110 = x2094 + x2109;
-Tbase TZ x2111 = x2091 + x2110;
-Tbase TZ x2112 = x2088 + x2111;
-Tbase TZ x2113 = x2085 + x2112;
-Tbase TZ x2114 = x2082 + x2113;
-Tbase TZ x2115 = 0x9;
-Tbase TZ x2116 = x2115 * x2114;
-Tbase TZ x2117 = x2079 + x2116;
-Tbase TZ x2118 = 0x1a;
-Tbase TZ x2119 = x2117 >>> x2118;
-Tbase TZ x2120 = x2045 * x2078;
-Tbase TZ x2121 = x2048 * x2075;
-Tbase TZ x2122 = x2120 + x2121;
-Tbase TZ x2123 = x2021 * x2072;
-Tbase TZ x2124 = x2024 * x2069;
-Tbase TZ x2125 = x2027 * x2066;
-Tbase TZ x2126 = x2030 * x2063;
-Tbase TZ x2127 = x2033 * x2060;
-Tbase TZ x2128 = x2036 * x2057;
-Tbase TZ x2129 = x2039 * x2054;
-Tbase TZ x2130 = x2042 * x2051;
-Tbase TZ x2131 = x2129 + x2130;
-Tbase TZ x2132 = x2128 + x2131;
-Tbase TZ x2133 = x2127 + x2132;
-Tbase TZ x2134 = x2126 + x2133;
-Tbase TZ x2135 = x2125 + x2134;
-Tbase TZ x2136 = x2124 + x2135;
-Tbase TZ x2137 = x2123 + x2136;
-Tbase TZ x2138 = 0x9;
-Tbase TZ x2139 = x2138 * x2137;
-Tbase TZ x2140 = x2122 + x2139;
-Tbase TZ x2141 = x2119 + x2140;
-Tbase TZ x2142 = 0x19;
-Tbase TZ x2143 = x2141 >>> x2142;
-Tbase TZ x2144 = x2042 * x2078;
-Tbase TZ x2145 = 0x2;
-Tbase TZ x2146 = x2075 * x2145;
-Tbase TZ x2147 = x2045 * x2146;
-Tbase TZ x2148 = x2048 * x2072;
-Tbase TZ x2149 = x2147 + x2148;
-Tbase TZ x2150 = x2144 + x2149;
-Tbase TZ x2151 = x2021 * x2069;
-Tbase TZ x2152 = x2024 * x2066;
-Tbase TZ x2153 = x2027 * x2063;
-Tbase TZ x2154 = x2030 * x2060;
-Tbase TZ x2155 = x2033 * x2057;
-Tbase TZ x2156 = x2036 * x2054;
-Tbase TZ x2157 = x2039 * x2051;
-Tbase TZ x2158 = x2156 + x2157;
-Tbase TZ x2159 = x2155 + x2158;
-Tbase TZ x2160 = x2154 + x2159;
-Tbase TZ x2161 = x2153 + x2160;
-Tbase TZ x2162 = x2152 + x2161;
-Tbase TZ x2163 = x2151 + x2162;
-Tbase TZ x2164 = 0x9;
-Tbase TZ x2165 = x2164 * x2163;
-Tbase TZ x2166 = x2150 + x2165;
-Tbase TZ x2167 = x2143 + x2166;
-Tbase TZ x2168 = 0x19;
-Tbase TZ x2169 = x2167 >>> x2168;
-Tbase TZ x2170 = x2039 * x2078;
-Tbase TZ x2171 = 0x2;
-Tbase TZ x2172 = x2075 * x2171;
-Tbase TZ x2173 = x2042 * x2172;
-Tbase TZ x2174 = 0x2;
-Tbase TZ x2175 = x2072 * x2174;
-Tbase TZ x2176 = x2045 * x2175;
-Tbase TZ x2177 = x2048 * x2069;
-Tbase TZ x2178 = x2176 + x2177;
-Tbase TZ x2179 = x2173 + x2178;
-Tbase TZ x2180 = x2170 + x2179;
-Tbase TZ x2181 = x2021 * x2066;
-Tbase TZ x2182 = x2024 * x2063;
-Tbase TZ x2183 = x2027 * x2060;
-Tbase TZ x2184 = x2030 * x2057;
-Tbase TZ x2185 = x2033 * x2054;
-Tbase TZ x2186 = x2036 * x2051;
-Tbase TZ x2187 = x2185 + x2186;
-Tbase TZ x2188 = x2184 + x2187;
-Tbase TZ x2189 = x2183 + x2188;
-Tbase TZ x2190 = x2182 + x2189;
-Tbase TZ x2191 = x2181 + x2190;
-Tbase TZ x2192 = 0x9;
-Tbase TZ x2193 = x2192 * x2191;
-Tbase TZ x2194 = x2180 + x2193;
-Tbase TZ x2195 = x2169 + x2194;
-Tbase TZ x2196 = 0x19;
-Tbase TZ x2197 = x2195 >>> x2196;
-Tbase TZ x2198 = x2036 * x2078;
-Tbase TZ x2199 = 0x2;
-Tbase TZ x2200 = x2075 * x2199;
-Tbase TZ x2201 = x2039 * x2200;
-Tbase TZ x2202 = 0x2;
-Tbase TZ x2203 = x2072 * x2202;
-Tbase TZ x2204 = x2042 * x2203;
-Tbase TZ x2205 = 0x2;
-Tbase TZ x2206 = x2069 * x2205;
-Tbase TZ x2207 = x2045 * x2206;
-Tbase TZ x2208 = x2048 * x2066;
-Tbase TZ x2209 = x2207 + x2208;
-Tbase TZ x2210 = x2204 + x2209;
-Tbase TZ x2211 = x2201 + x2210;
-Tbase TZ x2212 = x2198 + x2211;
-Tbase TZ x2213 = x2021 * x2063;
-Tbase TZ x2214 = x2024 * x2060;
-Tbase TZ x2215 = x2027 * x2057;
-Tbase TZ x2216 = x2030 * x2054;
-Tbase TZ x2217 = x2033 * x2051;
-Tbase TZ x2218 = x2216 + x2217;
-Tbase TZ x2219 = x2215 + x2218;
-Tbase TZ x2220 = x2214 + x2219;
-Tbase TZ x2221 = x2213 + x2220;
-Tbase TZ x2222 = 0x9;
-Tbase TZ x2223 = x2222 * x2221;
-Tbase TZ x2224 = x2212 + x2223;
-Tbase TZ x2225 = x2197 + x2224;
-Tbase TZ x2226 = 0x19;
-Tbase TZ x2227 = x2225 >>> x2226;
-Tbase TZ x2228 = x2033 * x2078;
-Tbase TZ x2229 = 0x2;
-Tbase TZ x2230 = x2075 * x2229;
-Tbase TZ x2231 = x2036 * x2230;
-Tbase TZ x2232 = 0x2;
-Tbase TZ x2233 = x2072 * x2232;
-Tbase TZ x2234 = x2039 * x2233;
-Tbase TZ x2235 = 0x2;
-Tbase TZ x2236 = x2069 * x2235;
-Tbase TZ x2237 = x2042 * x2236;
-Tbase TZ x2238 = 0x2;
-Tbase TZ x2239 = x2066 * x2238;
-Tbase TZ x2240 = x2045 * x2239;
-Tbase TZ x2241 = x2048 * x2063;
-Tbase TZ x2242 = x2240 + x2241;
-Tbase TZ x2243 = x2237 + x2242;
-Tbase TZ x2244 = x2234 + x2243;
-Tbase TZ x2245 = x2231 + x2244;
-Tbase TZ x2246 = x2228 + x2245;
-Tbase TZ x2247 = x2021 * x2060;
-Tbase TZ x2248 = x2024 * x2057;
-Tbase TZ x2249 = x2027 * x2054;
-Tbase TZ x2250 = x2030 * x2051;
-Tbase TZ x2251 = x2249 + x2250;
-Tbase TZ x2252 = x2248 + x2251;
-Tbase TZ x2253 = x2247 + x2252;
-Tbase TZ x2254 = 0x9;
-Tbase TZ x2255 = x2254 * x2253;
-Tbase TZ x2256 = x2246 + x2255;
-Tbase TZ x2257 = x2227 + x2256;
-Tbase TZ x2258 = 0x19;
-Tbase TZ x2259 = x2257 >>> x2258;
-Tbase TZ x2260 = x2030 * x2078;
-Tbase TZ x2261 = 0x2;
-Tbase TZ x2262 = x2075 * x2261;
-Tbase TZ x2263 = x2033 * x2262;
-Tbase TZ x2264 = 0x2;
-Tbase TZ x2265 = x2072 * x2264;
-Tbase TZ x2266 = x2036 * x2265;
-Tbase TZ x2267 = 0x2;
-Tbase TZ x2268 = x2069 * x2267;
-Tbase TZ x2269 = x2039 * x2268;
-Tbase TZ x2270 = 0x2;
-Tbase TZ x2271 = x2066 * x2270;
-Tbase TZ x2272 = x2042 * x2271;
-Tbase TZ x2273 = 0x2;
-Tbase TZ x2274 = x2063 * x2273;
-Tbase TZ x2275 = x2045 * x2274;
-Tbase TZ x2276 = x2048 * x2060;
-Tbase TZ x2277 = x2275 + x2276;
-Tbase TZ x2278 = x2272 + x2277;
-Tbase TZ x2279 = x2269 + x2278;
-Tbase TZ x2280 = x2266 + x2279;
-Tbase TZ x2281 = x2263 + x2280;
-Tbase TZ x2282 = x2260 + x2281;
-Tbase TZ x2283 = x2021 * x2057;
-Tbase TZ x2284 = x2024 * x2054;
-Tbase TZ x2285 = x2027 * x2051;
-Tbase TZ x2286 = x2284 + x2285;
-Tbase TZ x2287 = x2283 + x2286;
-Tbase TZ x2288 = 0x9;
-Tbase TZ x2289 = x2288 * x2287;
-Tbase TZ x2290 = x2282 + x2289;
-Tbase TZ x2291 = x2259 + x2290;
-Tbase TZ x2292 = 0x19;
-Tbase TZ x2293 = x2291 >>> x2292;
-Tbase TZ x2294 = x2027 * x2078;
-Tbase TZ x2295 = 0x2;
-Tbase TZ x2296 = x2075 * x2295;
-Tbase TZ x2297 = x2030 * x2296;
-Tbase TZ x2298 = 0x2;
-Tbase TZ x2299 = x2072 * x2298;
-Tbase TZ x2300 = x2033 * x2299;
-Tbase TZ x2301 = 0x2;
-Tbase TZ x2302 = x2069 * x2301;
-Tbase TZ x2303 = x2036 * x2302;
-Tbase TZ x2304 = 0x2;
-Tbase TZ x2305 = x2066 * x2304;
-Tbase TZ x2306 = x2039 * x2305;
-Tbase TZ x2307 = 0x2;
-Tbase TZ x2308 = x2063 * x2307;
-Tbase TZ x2309 = x2042 * x2308;
-Tbase TZ x2310 = 0x2;
-Tbase TZ x2311 = x2060 * x2310;
-Tbase TZ x2312 = x2045 * x2311;
-Tbase TZ x2313 = x2048 * x2057;
-Tbase TZ x2314 = x2312 + x2313;
-Tbase TZ x2315 = x2309 + x2314;
-Tbase TZ x2316 = x2306 + x2315;
-Tbase TZ x2317 = x2303 + x2316;
-Tbase TZ x2318 = x2300 + x2317;
-Tbase TZ x2319 = x2297 + x2318;
-Tbase TZ x2320 = x2294 + x2319;
-Tbase TZ x2321 = x2021 * x2054;
-Tbase TZ x2322 = x2024 * x2051;
-Tbase TZ x2323 = x2321 + x2322;
-Tbase TZ x2324 = 0x9;
-Tbase TZ x2325 = x2324 * x2323;
-Tbase TZ x2326 = x2320 + x2325;
-Tbase TZ x2327 = x2293 + x2326;
-Tbase TZ x2328 = 0x19;
-Tbase TZ x2329 = x2327 >>> x2328;
-Tbase TZ x2330 = x2024 * x2078;
-Tbase TZ x2331 = 0x2;
-Tbase TZ x2332 = x2075 * x2331;
-Tbase TZ x2333 = x2027 * x2332;
-Tbase TZ x2334 = 0x2;
-Tbase TZ x2335 = x2072 * x2334;
-Tbase TZ x2336 = x2030 * x2335;
-Tbase TZ x2337 = 0x2;
-Tbase TZ x2338 = x2069 * x2337;
-Tbase TZ x2339 = x2033 * x2338;
-Tbase TZ x2340 = 0x2;
-Tbase TZ x2341 = x2066 * x2340;
-Tbase TZ x2342 = x2036 * x2341;
-Tbase TZ x2343 = 0x2;
-Tbase TZ x2344 = x2063 * x2343;
-Tbase TZ x2345 = x2039 * x2344;
-Tbase TZ x2346 = 0x2;
-Tbase TZ x2347 = x2060 * x2346;
-Tbase TZ x2348 = x2042 * x2347;
-Tbase TZ x2349 = 0x2;
-Tbase TZ x2350 = x2057 * x2349;
-Tbase TZ x2351 = x2045 * x2350;
-Tbase TZ x2352 = x2048 * x2054;
-Tbase TZ x2353 = x2351 + x2352;
-Tbase TZ x2354 = x2348 + x2353;
-Tbase TZ x2355 = x2345 + x2354;
-Tbase TZ x2356 = x2342 + x2355;
-Tbase TZ x2357 = x2339 + x2356;
-Tbase TZ x2358 = x2336 + x2357;
-Tbase TZ x2359 = x2333 + x2358;
-Tbase TZ x2360 = x2330 + x2359;
-Tbase TZ x2361 = x2021 * x2051;
-Tbase TZ x2362 = 0x9;
-Tbase TZ x2363 = x2362 * x2361;
-Tbase TZ x2364 = x2360 + x2363;
-Tbase TZ x2365 = x2329 + x2364;
-Tbase TZ x2366 = 0x19;
-Tbase TZ x2367 = x2365 >>> x2366;
-Tbase TZ x2368 = x2021 * x2078;
-Tbase TZ x2369 = 0x2;
-Tbase TZ x2370 = x2075 * x2369;
-Tbase TZ x2371 = x2024 * x2370;
-Tbase TZ x2372 = 0x2;
-Tbase TZ x2373 = x2072 * x2372;
-Tbase TZ x2374 = x2027 * x2373;
-Tbase TZ x2375 = 0x2;
-Tbase TZ x2376 = x2069 * x2375;
-Tbase TZ x2377 = x2030 * x2376;
-Tbase TZ x2378 = 0x2;
-Tbase TZ x2379 = x2066 * x2378;
-Tbase TZ x2380 = x2033 * x2379;
-Tbase TZ x2381 = 0x2;
-Tbase TZ x2382 = x2063 * x2381;
-Tbase TZ x2383 = x2036 * x2382;
-Tbase TZ x2384 = 0x2;
-Tbase TZ x2385 = x2060 * x2384;
-Tbase TZ x2386 = x2039 * x2385;
-Tbase TZ x2387 = 0x2;
-Tbase TZ x2388 = x2057 * x2387;
-Tbase TZ x2389 = x2042 * x2388;
-Tbase TZ x2390 = 0x2;
-Tbase TZ x2391 = x2054 * x2390;
-Tbase TZ x2392 = x2045 * x2391;
-Tbase TZ x2393 = x2048 * x2051;
-Tbase TZ x2394 = x2392 + x2393;
-Tbase TZ x2395 = x2389 + x2394;
-Tbase TZ x2396 = x2386 + x2395;
-Tbase TZ x2397 = x2383 + x2396;
-Tbase TZ x2398 = x2380 + x2397;
-Tbase TZ x2399 = x2377 + x2398;
-Tbase TZ x2400 = x2374 + x2399;
-Tbase TZ x2401 = x2371 + x2400;
-Tbase TZ x2402 = x2368 + x2401;
-Tbase TZ x2403 = x2367 + x2402;
-Tbase TZ x2404 = 0x19;
-Tbase TZ x2405 = x2403 >>> x2404;
-Tbase TZ x2406 = 0x9;
-Tbase TZ x2407 = x2406 * x2405;
-Tbase TZ x2408 = 0x3ffffff;
-Tbase TZ x2409 = x2117 & x2408;
-Tbase TZ x2410 = x2407 + x2409;
-Tbase TZ x2411 = 0x1a;
-Tbase TZ x2412 = x2410 >>> x2411;
-Tbase TZ x2413 = 0x1ffffff;
-Tbase TZ x2414 = x2141 & x2413;
-Tbase TZ x2415 = x2412 + x2414;
-Tbase TZ x2416 = 0x1ffffff;
-Tbase TZ x2417 = x2403 & x2416;
-Tbase TZ x2418 = 0x1ffffff;
-Tbase TZ x2419 = x2365 & x2418;
-Tbase TZ x2420 = 0x1ffffff;
-Tbase TZ x2421 = x2327 & x2420;
-Tbase TZ x2422 = 0x1ffffff;
-Tbase TZ x2423 = x2291 & x2422;
-Tbase TZ x2424 = 0x1ffffff;
-Tbase TZ x2425 = x2257 & x2424;
-Tbase TZ x2426 = 0x1ffffff;
-Tbase TZ x2427 = x2225 & x2426;
-Tbase TZ x2428 = 0x1ffffff;
-Tbase TZ x2429 = x2195 & x2428;
-Tbase TZ x2430 = 0x19;
-Tbase TZ x2431 = x2415 >>> x2430;
-Tbase TZ x2432 = 0x1ffffff;
-Tbase TZ x2433 = x2167 & x2432;
-Tbase TZ x2434 = x2431 + x2433;
-Tbase TZ x2435 = 0x1ffffff;
-Tbase TZ x2436 = x2415 & x2435;
-Tbase TZ x2437 = 0x3ffffff;
-Tbase TZ x2438 = x2410 & x2437;
-Tbase TZ x2439 = x48 * x2438;
-Tbase TZ x2440 = 0x2;
-Tbase TZ x2441 = x2436 * x2440;
-Tbase TZ x2442 = x39 * x2441;
-Tbase TZ x2443 = 0x2;
-Tbase TZ x2444 = x2434 * x2443;
-Tbase TZ x2445 = x40 * x2444;
-Tbase TZ x2446 = 0x2;
-Tbase TZ x2447 = x2429 * x2446;
-Tbase TZ x2448 = x41 * x2447;
-Tbase TZ x2449 = 0x2;
-Tbase TZ x2450 = x2427 * x2449;
-Tbase TZ x2451 = x42 * x2450;
-Tbase TZ x2452 = 0x2;
-Tbase TZ x2453 = x2425 * x2452;
-Tbase TZ x2454 = x43 * x2453;
-Tbase TZ x2455 = 0x2;
-Tbase TZ x2456 = x2423 * x2455;
-Tbase TZ x2457 = x44 * x2456;
-Tbase TZ x2458 = 0x2;
-Tbase TZ x2459 = x2421 * x2458;
-Tbase TZ x2460 = x45 * x2459;
-Tbase TZ x2461 = 0x2;
-Tbase TZ x2462 = x2419 * x2461;
-Tbase TZ x2463 = x46 * x2462;
-Tbase TZ x2464 = 0x2;
-Tbase TZ x2465 = x2417 * x2464;
-Tbase TZ x2466 = x47 * x2465;
-Tbase TZ x2467 = x2463 + x2466;
-Tbase TZ x2468 = x2460 + x2467;
-Tbase TZ x2469 = x2457 + x2468;
-Tbase TZ x2470 = x2454 + x2469;
-Tbase TZ x2471 = x2451 + x2470;
-Tbase TZ x2472 = x2448 + x2471;
-Tbase TZ x2473 = x2445 + x2472;
-Tbase TZ x2474 = x2442 + x2473;
-Tbase TZ x2475 = 0x9;
-Tbase TZ x2476 = x2475 * x2474;
-Tbase TZ x2477 = x2439 + x2476;
-Tbase TZ x2478 = 0x1a;
-Tbase TZ x2479 = x2477 >>> x2478;
-Tbase TZ x2480 = x47 * x2438;
-Tbase TZ x2481 = x48 * x2436;
-Tbase TZ x2482 = x2480 + x2481;
-Tbase TZ x2483 = x39 * x2434;
-Tbase TZ x2484 = x40 * x2429;
-Tbase TZ x2485 = x41 * x2427;
-Tbase TZ x2486 = x42 * x2425;
-Tbase TZ x2487 = x43 * x2423;
-Tbase TZ x2488 = x44 * x2421;
-Tbase TZ x2489 = x45 * x2419;
-Tbase TZ x2490 = x46 * x2417;
-Tbase TZ x2491 = x2489 + x2490;
-Tbase TZ x2492 = x2488 + x2491;
-Tbase TZ x2493 = x2487 + x2492;
-Tbase TZ x2494 = x2486 + x2493;
-Tbase TZ x2495 = x2485 + x2494;
-Tbase TZ x2496 = x2484 + x2495;
-Tbase TZ x2497 = x2483 + x2496;
-Tbase TZ x2498 = 0x9;
-Tbase TZ x2499 = x2498 * x2497;
-Tbase TZ x2500 = x2482 + x2499;
-Tbase TZ x2501 = x2479 + x2500;
-Tbase TZ x2502 = 0x19;
-Tbase TZ x2503 = x2501 >>> x2502;
-Tbase TZ x2504 = x46 * x2438;
-Tbase TZ x2505 = 0x2;
-Tbase TZ x2506 = x2436 * x2505;
-Tbase TZ x2507 = x47 * x2506;
-Tbase TZ x2508 = x48 * x2434;
-Tbase TZ x2509 = x2507 + x2508;
-Tbase TZ x2510 = x2504 + x2509;
-Tbase TZ x2511 = x39 * x2429;
-Tbase TZ x2512 = x40 * x2427;
-Tbase TZ x2513 = x41 * x2425;
-Tbase TZ x2514 = x42 * x2423;
-Tbase TZ x2515 = x43 * x2421;
-Tbase TZ x2516 = x44 * x2419;
-Tbase TZ x2517 = x45 * x2417;
-Tbase TZ x2518 = x2516 + x2517;
-Tbase TZ x2519 = x2515 + x2518;
-Tbase TZ x2520 = x2514 + x2519;
-Tbase TZ x2521 = x2513 + x2520;
-Tbase TZ x2522 = x2512 + x2521;
-Tbase TZ x2523 = x2511 + x2522;
-Tbase TZ x2524 = 0x9;
-Tbase TZ x2525 = x2524 * x2523;
-Tbase TZ x2526 = x2510 + x2525;
-Tbase TZ x2527 = x2503 + x2526;
-Tbase TZ x2528 = 0x19;
-Tbase TZ x2529 = x2527 >>> x2528;
-Tbase TZ x2530 = x45 * x2438;
-Tbase TZ x2531 = 0x2;
-Tbase TZ x2532 = x2436 * x2531;
-Tbase TZ x2533 = x46 * x2532;
-Tbase TZ x2534 = 0x2;
-Tbase TZ x2535 = x2434 * x2534;
-Tbase TZ x2536 = x47 * x2535;
-Tbase TZ x2537 = x48 * x2429;
-Tbase TZ x2538 = x2536 + x2537;
-Tbase TZ x2539 = x2533 + x2538;
-Tbase TZ x2540 = x2530 + x2539;
-Tbase TZ x2541 = x39 * x2427;
-Tbase TZ x2542 = x40 * x2425;
-Tbase TZ x2543 = x41 * x2423;
-Tbase TZ x2544 = x42 * x2421;
-Tbase TZ x2545 = x43 * x2419;
-Tbase TZ x2546 = x44 * x2417;
-Tbase TZ x2547 = x2545 + x2546;
-Tbase TZ x2548 = x2544 + x2547;
-Tbase TZ x2549 = x2543 + x2548;
-Tbase TZ x2550 = x2542 + x2549;
-Tbase TZ x2551 = x2541 + x2550;
-Tbase TZ x2552 = 0x9;
-Tbase TZ x2553 = x2552 * x2551;
-Tbase TZ x2554 = x2540 + x2553;
-Tbase TZ x2555 = x2529 + x2554;
-Tbase TZ x2556 = 0x19;
-Tbase TZ x2557 = x2555 >>> x2556;
-Tbase TZ x2558 = x44 * x2438;
-Tbase TZ x2559 = 0x2;
-Tbase TZ x2560 = x2436 * x2559;
-Tbase TZ x2561 = x45 * x2560;
-Tbase TZ x2562 = 0x2;
-Tbase TZ x2563 = x2434 * x2562;
-Tbase TZ x2564 = x46 * x2563;
-Tbase TZ x2565 = 0x2;
-Tbase TZ x2566 = x2429 * x2565;
-Tbase TZ x2567 = x47 * x2566;
-Tbase TZ x2568 = x48 * x2427;
-Tbase TZ x2569 = x2567 + x2568;
-Tbase TZ x2570 = x2564 + x2569;
-Tbase TZ x2571 = x2561 + x2570;
-Tbase TZ x2572 = x2558 + x2571;
-Tbase TZ x2573 = x39 * x2425;
-Tbase TZ x2574 = x40 * x2423;
-Tbase TZ x2575 = x41 * x2421;
-Tbase TZ x2576 = x42 * x2419;
-Tbase TZ x2577 = x43 * x2417;
-Tbase TZ x2578 = x2576 + x2577;
-Tbase TZ x2579 = x2575 + x2578;
-Tbase TZ x2580 = x2574 + x2579;
-Tbase TZ x2581 = x2573 + x2580;
-Tbase TZ x2582 = 0x9;
-Tbase TZ x2583 = x2582 * x2581;
-Tbase TZ x2584 = x2572 + x2583;
-Tbase TZ x2585 = x2557 + x2584;
-Tbase TZ x2586 = 0x19;
-Tbase TZ x2587 = x2585 >>> x2586;
-Tbase TZ x2588 = x43 * x2438;
-Tbase TZ x2589 = 0x2;
-Tbase TZ x2590 = x2436 * x2589;
-Tbase TZ x2591 = x44 * x2590;
-Tbase TZ x2592 = 0x2;
-Tbase TZ x2593 = x2434 * x2592;
-Tbase TZ x2594 = x45 * x2593;
-Tbase TZ x2595 = 0x2;
-Tbase TZ x2596 = x2429 * x2595;
-Tbase TZ x2597 = x46 * x2596;
-Tbase TZ x2598 = 0x2;
-Tbase TZ x2599 = x2427 * x2598;
-Tbase TZ x2600 = x47 * x2599;
-Tbase TZ x2601 = x48 * x2425;
-Tbase TZ x2602 = x2600 + x2601;
-Tbase TZ x2603 = x2597 + x2602;
-Tbase TZ x2604 = x2594 + x2603;
-Tbase TZ x2605 = x2591 + x2604;
-Tbase TZ x2606 = x2588 + x2605;
-Tbase TZ x2607 = x39 * x2423;
-Tbase TZ x2608 = x40 * x2421;
-Tbase TZ x2609 = x41 * x2419;
-Tbase TZ x2610 = x42 * x2417;
-Tbase TZ x2611 = x2609 + x2610;
-Tbase TZ x2612 = x2608 + x2611;
-Tbase TZ x2613 = x2607 + x2612;
-Tbase TZ x2614 = 0x9;
-Tbase TZ x2615 = x2614 * x2613;
-Tbase TZ x2616 = x2606 + x2615;
-Tbase TZ x2617 = x2587 + x2616;
-Tbase TZ x2618 = 0x19;
-Tbase TZ x2619 = x2617 >>> x2618;
-Tbase TZ x2620 = x42 * x2438;
-Tbase TZ x2621 = 0x2;
-Tbase TZ x2622 = x2436 * x2621;
-Tbase TZ x2623 = x43 * x2622;
-Tbase TZ x2624 = 0x2;
-Tbase TZ x2625 = x2434 * x2624;
-Tbase TZ x2626 = x44 * x2625;
-Tbase TZ x2627 = 0x2;
-Tbase TZ x2628 = x2429 * x2627;
-Tbase TZ x2629 = x45 * x2628;
-Tbase TZ x2630 = 0x2;
-Tbase TZ x2631 = x2427 * x2630;
-Tbase TZ x2632 = x46 * x2631;
-Tbase TZ x2633 = 0x2;
-Tbase TZ x2634 = x2425 * x2633;
-Tbase TZ x2635 = x47 * x2634;
-Tbase TZ x2636 = x48 * x2423;
-Tbase TZ x2637 = x2635 + x2636;
-Tbase TZ x2638 = x2632 + x2637;
-Tbase TZ x2639 = x2629 + x2638;
-Tbase TZ x2640 = x2626 + x2639;
-Tbase TZ x2641 = x2623 + x2640;
-Tbase TZ x2642 = x2620 + x2641;
-Tbase TZ x2643 = x39 * x2421;
-Tbase TZ x2644 = x40 * x2419;
-Tbase TZ x2645 = x41 * x2417;
-Tbase TZ x2646 = x2644 + x2645;
-Tbase TZ x2647 = x2643 + x2646;
-Tbase TZ x2648 = 0x9;
-Tbase TZ x2649 = x2648 * x2647;
-Tbase TZ x2650 = x2642 + x2649;
-Tbase TZ x2651 = x2619 + x2650;
-Tbase TZ x2652 = 0x19;
-Tbase TZ x2653 = x2651 >>> x2652;
-Tbase TZ x2654 = x41 * x2438;
-Tbase TZ x2655 = 0x2;
-Tbase TZ x2656 = x2436 * x2655;
-Tbase TZ x2657 = x42 * x2656;
-Tbase TZ x2658 = 0x2;
-Tbase TZ x2659 = x2434 * x2658;
-Tbase TZ x2660 = x43 * x2659;
-Tbase TZ x2661 = 0x2;
-Tbase TZ x2662 = x2429 * x2661;
-Tbase TZ x2663 = x44 * x2662;
-Tbase TZ x2664 = 0x2;
-Tbase TZ x2665 = x2427 * x2664;
-Tbase TZ x2666 = x45 * x2665;
-Tbase TZ x2667 = 0x2;
-Tbase TZ x2668 = x2425 * x2667;
-Tbase TZ x2669 = x46 * x2668;
-Tbase TZ x2670 = 0x2;
-Tbase TZ x2671 = x2423 * x2670;
-Tbase TZ x2672 = x47 * x2671;
-Tbase TZ x2673 = x48 * x2421;
-Tbase TZ x2674 = x2672 + x2673;
-Tbase TZ x2675 = x2669 + x2674;
-Tbase TZ x2676 = x2666 + x2675;
-Tbase TZ x2677 = x2663 + x2676;
-Tbase TZ x2678 = x2660 + x2677;
-Tbase TZ x2679 = x2657 + x2678;
-Tbase TZ x2680 = x2654 + x2679;
-Tbase TZ x2681 = x39 * x2419;
-Tbase TZ x2682 = x40 * x2417;
-Tbase TZ x2683 = x2681 + x2682;
-Tbase TZ x2684 = 0x9;
-Tbase TZ x2685 = x2684 * x2683;
-Tbase TZ x2686 = x2680 + x2685;
-Tbase TZ x2687 = x2653 + x2686;
-Tbase TZ x2688 = 0x19;
-Tbase TZ x2689 = x2687 >>> x2688;
-Tbase TZ x2690 = x40 * x2438;
-Tbase TZ x2691 = 0x2;
-Tbase TZ x2692 = x2436 * x2691;
-Tbase TZ x2693 = x41 * x2692;
-Tbase TZ x2694 = 0x2;
-Tbase TZ x2695 = x2434 * x2694;
-Tbase TZ x2696 = x42 * x2695;
-Tbase TZ x2697 = 0x2;
-Tbase TZ x2698 = x2429 * x2697;
-Tbase TZ x2699 = x43 * x2698;
-Tbase TZ x2700 = 0x2;
-Tbase TZ x2701 = x2427 * x2700;
-Tbase TZ x2702 = x44 * x2701;
-Tbase TZ x2703 = 0x2;
-Tbase TZ x2704 = x2425 * x2703;
-Tbase TZ x2705 = x45 * x2704;
-Tbase TZ x2706 = 0x2;
-Tbase TZ x2707 = x2423 * x2706;
-Tbase TZ x2708 = x46 * x2707;
-Tbase TZ x2709 = 0x2;
-Tbase TZ x2710 = x2421 * x2709;
-Tbase TZ x2711 = x47 * x2710;
-Tbase TZ x2712 = x48 * x2419;
-Tbase TZ x2713 = x2711 + x2712;
-Tbase TZ x2714 = x2708 + x2713;
-Tbase TZ x2715 = x2705 + x2714;
-Tbase TZ x2716 = x2702 + x2715;
-Tbase TZ x2717 = x2699 + x2716;
-Tbase TZ x2718 = x2696 + x2717;
-Tbase TZ x2719 = x2693 + x2718;
-Tbase TZ x2720 = x2690 + x2719;
-Tbase TZ x2721 = x39 * x2417;
-Tbase TZ x2722 = 0x9;
-Tbase TZ x2723 = x2722 * x2721;
-Tbase TZ x2724 = x2720 + x2723;
-Tbase TZ x2725 = x2689 + x2724;
-Tbase TZ x2726 = 0x19;
-Tbase TZ x2727 = x2725 >>> x2726;
-Tbase TZ x2728 = x39 * x2438;
-Tbase TZ x2729 = 0x2;
-Tbase TZ x2730 = x2436 * x2729;
-Tbase TZ x2731 = x40 * x2730;
-Tbase TZ x2732 = 0x2;
-Tbase TZ x2733 = x2434 * x2732;
-Tbase TZ x2734 = x41 * x2733;
-Tbase TZ x2735 = 0x2;
-Tbase TZ x2736 = x2429 * x2735;
-Tbase TZ x2737 = x42 * x2736;
-Tbase TZ x2738 = 0x2;
-Tbase TZ x2739 = x2427 * x2738;
-Tbase TZ x2740 = x43 * x2739;
-Tbase TZ x2741 = 0x2;
-Tbase TZ x2742 = x2425 * x2741;
-Tbase TZ x2743 = x44 * x2742;
-Tbase TZ x2744 = 0x2;
-Tbase TZ x2745 = x2423 * x2744;
-Tbase TZ x2746 = x45 * x2745;
-Tbase TZ x2747 = 0x2;
-Tbase TZ x2748 = x2421 * x2747;
-Tbase TZ x2749 = x46 * x2748;
-Tbase TZ x2750 = 0x2;
-Tbase TZ x2751 = x2419 * x2750;
-Tbase TZ x2752 = x47 * x2751;
-Tbase TZ x2753 = x48 * x2417;
-Tbase TZ x2754 = x2752 + x2753;
-Tbase TZ x2755 = x2749 + x2754;
-Tbase TZ x2756 = x2746 + x2755;
-Tbase TZ x2757 = x2743 + x2756;
-Tbase TZ x2758 = x2740 + x2757;
-Tbase TZ x2759 = x2737 + x2758;
-Tbase TZ x2760 = x2734 + x2759;
-Tbase TZ x2761 = x2731 + x2760;
-Tbase TZ x2762 = x2728 + x2761;
-Tbase TZ x2763 = x2727 + x2762;
-Tbase TZ x2764 = 0x19;
-Tbase TZ x2765 = x2763 >>> x2764;
-Tbase TZ x2766 = 0x9;
-Tbase TZ x2767 = x2766 * x2765;
-Tbase TZ x2768 = 0x3ffffff;
-Tbase TZ x2769 = x2477 & x2768;
-Tbase TZ x2770 = x2767 + x2769;
-Tbase TZ x2771 = 0x1a;
-Tbase TZ x2772 = x2770 >>> x2771;
-Tbase TZ x2773 = 0x1ffffff;
-Tbase TZ x2774 = x2501 & x2773;
-Tbase TZ x2775 = x2772 + x2774;
-Tbase TZ x2776 = 0x1ffffff;
-Tbase TZ x2777 = x2763 & x2776;
-Tbase TZ x2778 = 0x1ffffff;
-Tbase TZ x2779 = x2725 & x2778;
-Tbase TZ x2780 = 0x1ffffff;
-Tbase TZ x2781 = x2687 & x2780;
-Tbase TZ x2782 = 0x1ffffff;
-Tbase TZ x2783 = x2651 & x2782;
-Tbase TZ x2784 = 0x1ffffff;
-Tbase TZ x2785 = x2617 & x2784;
-Tbase TZ x2786 = 0x1ffffff;
-Tbase TZ x2787 = x2585 & x2786;
-Tbase TZ x2788 = 0x1ffffff;
-Tbase TZ x2789 = x2555 & x2788;
-Tbase TZ x2790 = 0x19;
-Tbase TZ x2791 = x2775 >>> x2790;
-Tbase TZ x2792 = 0x1ffffff;
-Tbase TZ x2793 = x2527 & x2792;
-Tbase TZ x2794 = x2791 + x2793;
-Tbase TZ x2795 = 0x1ffffff;
-Tbase TZ x2796 = x2775 & x2795;
-Tbase TZ x2797 = 0x3ffffff;
-Tbase TZ x2798 = x2770 & x2797;
-Tbase TZ x2799 = x458 * x848;
-Tbase TZ x2800 = 0x2;
-Tbase TZ x2801 = x846 * x2800;
-Tbase TZ x2802 = x437 * x2801;
-Tbase TZ x2803 = 0x2;
-Tbase TZ x2804 = x844 * x2803;
-Tbase TZ x2805 = x439 * x2804;
-Tbase TZ x2806 = 0x2;
-Tbase TZ x2807 = x839 * x2806;
-Tbase TZ x2808 = x441 * x2807;
-Tbase TZ x2809 = 0x2;
-Tbase TZ x2810 = x837 * x2809;
-Tbase TZ x2811 = x443 * x2810;
-Tbase TZ x2812 = 0x2;
-Tbase TZ x2813 = x835 * x2812;
-Tbase TZ x2814 = x445 * x2813;
-Tbase TZ x2815 = 0x2;
-Tbase TZ x2816 = x833 * x2815;
-Tbase TZ x2817 = x447 * x2816;
-Tbase TZ x2818 = 0x2;
-Tbase TZ x2819 = x831 * x2818;
-Tbase TZ x2820 = x449 * x2819;
-Tbase TZ x2821 = 0x2;
-Tbase TZ x2822 = x829 * x2821;
-Tbase TZ x2823 = x454 * x2822;
-Tbase TZ x2824 = 0x2;
-Tbase TZ x2825 = x827 * x2824;
-Tbase TZ x2826 = x456 * x2825;
-Tbase TZ x2827 = x2823 + x2826;
-Tbase TZ x2828 = x2820 + x2827;
-Tbase TZ x2829 = x2817 + x2828;
-Tbase TZ x2830 = x2814 + x2829;
-Tbase TZ x2831 = x2811 + x2830;
-Tbase TZ x2832 = x2808 + x2831;
-Tbase TZ x2833 = x2805 + x2832;
-Tbase TZ x2834 = x2802 + x2833;
-Tbase TZ x2835 = 0x9;
-Tbase TZ x2836 = x2835 * x2834;
-Tbase TZ x2837 = x2799 + x2836;
-Tbase TZ x2838 = 0x1a;
-Tbase TZ x2839 = x2837 >>> x2838;
-Tbase TZ x2840 = x456 * x848;
-Tbase TZ x2841 = x458 * x846;
-Tbase TZ x2842 = x2840 + x2841;
-Tbase TZ x2843 = x437 * x844;
-Tbase TZ x2844 = x439 * x839;
-Tbase TZ x2845 = x441 * x837;
-Tbase TZ x2846 = x443 * x835;
-Tbase TZ x2847 = x445 * x833;
-Tbase TZ x2848 = x447 * x831;
-Tbase TZ x2849 = x449 * x829;
-Tbase TZ x2850 = x454 * x827;
-Tbase TZ x2851 = x2849 + x2850;
-Tbase TZ x2852 = x2848 + x2851;
-Tbase TZ x2853 = x2847 + x2852;
-Tbase TZ x2854 = x2846 + x2853;
-Tbase TZ x2855 = x2845 + x2854;
-Tbase TZ x2856 = x2844 + x2855;
-Tbase TZ x2857 = x2843 + x2856;
-Tbase TZ x2858 = 0x9;
-Tbase TZ x2859 = x2858 * x2857;
-Tbase TZ x2860 = x2842 + x2859;
-Tbase TZ x2861 = x2839 + x2860;
-Tbase TZ x2862 = 0x19;
-Tbase TZ x2863 = x2861 >>> x2862;
-Tbase TZ x2864 = x454 * x848;
-Tbase TZ x2865 = 0x2;
-Tbase TZ x2866 = x846 * x2865;
-Tbase TZ x2867 = x456 * x2866;
-Tbase TZ x2868 = x458 * x844;
-Tbase TZ x2869 = x2867 + x2868;
-Tbase TZ x2870 = x2864 + x2869;
-Tbase TZ x2871 = x437 * x839;
-Tbase TZ x2872 = x439 * x837;
-Tbase TZ x2873 = x441 * x835;
-Tbase TZ x2874 = x443 * x833;
-Tbase TZ x2875 = x445 * x831;
-Tbase TZ x2876 = x447 * x829;
-Tbase TZ x2877 = x449 * x827;
-Tbase TZ x2878 = x2876 + x2877;
-Tbase TZ x2879 = x2875 + x2878;
-Tbase TZ x2880 = x2874 + x2879;
-Tbase TZ x2881 = x2873 + x2880;
-Tbase TZ x2882 = x2872 + x2881;
-Tbase TZ x2883 = x2871 + x2882;
-Tbase TZ x2884 = 0x9;
-Tbase TZ x2885 = x2884 * x2883;
-Tbase TZ x2886 = x2870 + x2885;
-Tbase TZ x2887 = x2863 + x2886;
-Tbase TZ x2888 = 0x19;
-Tbase TZ x2889 = x2887 >>> x2888;
-Tbase TZ x2890 = x449 * x848;
-Tbase TZ x2891 = 0x2;
-Tbase TZ x2892 = x846 * x2891;
-Tbase TZ x2893 = x454 * x2892;
-Tbase TZ x2894 = 0x2;
-Tbase TZ x2895 = x844 * x2894;
-Tbase TZ x2896 = x456 * x2895;
-Tbase TZ x2897 = x458 * x839;
-Tbase TZ x2898 = x2896 + x2897;
-Tbase TZ x2899 = x2893 + x2898;
-Tbase TZ x2900 = x2890 + x2899;
-Tbase TZ x2901 = x437 * x837;
-Tbase TZ x2902 = x439 * x835;
-Tbase TZ x2903 = x441 * x833;
-Tbase TZ x2904 = x443 * x831;
-Tbase TZ x2905 = x445 * x829;
-Tbase TZ x2906 = x447 * x827;
-Tbase TZ x2907 = x2905 + x2906;
-Tbase TZ x2908 = x2904 + x2907;
-Tbase TZ x2909 = x2903 + x2908;
-Tbase TZ x2910 = x2902 + x2909;
-Tbase TZ x2911 = x2901 + x2910;
-Tbase TZ x2912 = 0x9;
-Tbase TZ x2913 = x2912 * x2911;
-Tbase TZ x2914 = x2900 + x2913;
-Tbase TZ x2915 = x2889 + x2914;
-Tbase TZ x2916 = 0x19;
-Tbase TZ x2917 = x2915 >>> x2916;
-Tbase TZ x2918 = x447 * x848;
-Tbase TZ x2919 = 0x2;
-Tbase TZ x2920 = x846 * x2919;
-Tbase TZ x2921 = x449 * x2920;
-Tbase TZ x2922 = 0x2;
-Tbase TZ x2923 = x844 * x2922;
-Tbase TZ x2924 = x454 * x2923;
-Tbase TZ x2925 = 0x2;
-Tbase TZ x2926 = x839 * x2925;
-Tbase TZ x2927 = x456 * x2926;
-Tbase TZ x2928 = x458 * x837;
-Tbase TZ x2929 = x2927 + x2928;
-Tbase TZ x2930 = x2924 + x2929;
-Tbase TZ x2931 = x2921 + x2930;
-Tbase TZ x2932 = x2918 + x2931;
-Tbase TZ x2933 = x437 * x835;
-Tbase TZ x2934 = x439 * x833;
-Tbase TZ x2935 = x441 * x831;
-Tbase TZ x2936 = x443 * x829;
-Tbase TZ x2937 = x445 * x827;
-Tbase TZ x2938 = x2936 + x2937;
-Tbase TZ x2939 = x2935 + x2938;
-Tbase TZ x2940 = x2934 + x2939;
-Tbase TZ x2941 = x2933 + x2940;
-Tbase TZ x2942 = 0x9;
-Tbase TZ x2943 = x2942 * x2941;
-Tbase TZ x2944 = x2932 + x2943;
-Tbase TZ x2945 = x2917 + x2944;
-Tbase TZ x2946 = 0x19;
-Tbase TZ x2947 = x2945 >>> x2946;
-Tbase TZ x2948 = x445 * x848;
-Tbase TZ x2949 = 0x2;
-Tbase TZ x2950 = x846 * x2949;
-Tbase TZ x2951 = x447 * x2950;
-Tbase TZ x2952 = 0x2;
-Tbase TZ x2953 = x844 * x2952;
-Tbase TZ x2954 = x449 * x2953;
-Tbase TZ x2955 = 0x2;
-Tbase TZ x2956 = x839 * x2955;
-Tbase TZ x2957 = x454 * x2956;
-Tbase TZ x2958 = 0x2;
-Tbase TZ x2959 = x837 * x2958;
-Tbase TZ x2960 = x456 * x2959;
-Tbase TZ x2961 = x458 * x835;
-Tbase TZ x2962 = x2960 + x2961;
-Tbase TZ x2963 = x2957 + x2962;
-Tbase TZ x2964 = x2954 + x2963;
-Tbase TZ x2965 = x2951 + x2964;
-Tbase TZ x2966 = x2948 + x2965;
-Tbase TZ x2967 = x437 * x833;
-Tbase TZ x2968 = x439 * x831;
-Tbase TZ x2969 = x441 * x829;
-Tbase TZ x2970 = x443 * x827;
-Tbase TZ x2971 = x2969 + x2970;
-Tbase TZ x2972 = x2968 + x2971;
-Tbase TZ x2973 = x2967 + x2972;
-Tbase TZ x2974 = 0x9;
-Tbase TZ x2975 = x2974 * x2973;
-Tbase TZ x2976 = x2966 + x2975;
-Tbase TZ x2977 = x2947 + x2976;
-Tbase TZ x2978 = 0x19;
-Tbase TZ x2979 = x2977 >>> x2978;
-Tbase TZ x2980 = x443 * x848;
-Tbase TZ x2981 = 0x2;
-Tbase TZ x2982 = x846 * x2981;
-Tbase TZ x2983 = x445 * x2982;
-Tbase TZ x2984 = 0x2;
-Tbase TZ x2985 = x844 * x2984;
-Tbase TZ x2986 = x447 * x2985;
-Tbase TZ x2987 = 0x2;
-Tbase TZ x2988 = x839 * x2987;
-Tbase TZ x2989 = x449 * x2988;
-Tbase TZ x2990 = 0x2;
-Tbase TZ x2991 = x837 * x2990;
-Tbase TZ x2992 = x454 * x2991;
-Tbase TZ x2993 = 0x2;
-Tbase TZ x2994 = x835 * x2993;
-Tbase TZ x2995 = x456 * x2994;
-Tbase TZ x2996 = x458 * x833;
-Tbase TZ x2997 = x2995 + x2996;
-Tbase TZ x2998 = x2992 + x2997;
-Tbase TZ x2999 = x2989 + x2998;
-Tbase TZ x3000 = x2986 + x2999;
-Tbase TZ x3001 = x2983 + x3000;
-Tbase TZ x3002 = x2980 + x3001;
-Tbase TZ x3003 = x437 * x831;
-Tbase TZ x3004 = x439 * x829;
-Tbase TZ x3005 = x441 * x827;
-Tbase TZ x3006 = x3004 + x3005;
-Tbase TZ x3007 = x3003 + x3006;
-Tbase TZ x3008 = 0x9;
-Tbase TZ x3009 = x3008 * x3007;
-Tbase TZ x3010 = x3002 + x3009;
-Tbase TZ x3011 = x2979 + x3010;
-Tbase TZ x3012 = 0x19;
-Tbase TZ x3013 = x3011 >>> x3012;
-Tbase TZ x3014 = x441 * x848;
-Tbase TZ x3015 = 0x2;
-Tbase TZ x3016 = x846 * x3015;
-Tbase TZ x3017 = x443 * x3016;
-Tbase TZ x3018 = 0x2;
-Tbase TZ x3019 = x844 * x3018;
-Tbase TZ x3020 = x445 * x3019;
-Tbase TZ x3021 = 0x2;
-Tbase TZ x3022 = x839 * x3021;
-Tbase TZ x3023 = x447 * x3022;
-Tbase TZ x3024 = 0x2;
-Tbase TZ x3025 = x837 * x3024;
-Tbase TZ x3026 = x449 * x3025;
-Tbase TZ x3027 = 0x2;
-Tbase TZ x3028 = x835 * x3027;
-Tbase TZ x3029 = x454 * x3028;
-Tbase TZ x3030 = 0x2;
-Tbase TZ x3031 = x833 * x3030;
-Tbase TZ x3032 = x456 * x3031;
-Tbase TZ x3033 = x458 * x831;
-Tbase TZ x3034 = x3032 + x3033;
-Tbase TZ x3035 = x3029 + x3034;
-Tbase TZ x3036 = x3026 + x3035;
-Tbase TZ x3037 = x3023 + x3036;
-Tbase TZ x3038 = x3020 + x3037;
-Tbase TZ x3039 = x3017 + x3038;
-Tbase TZ x3040 = x3014 + x3039;
-Tbase TZ x3041 = x437 * x829;
-Tbase TZ x3042 = x439 * x827;
-Tbase TZ x3043 = x3041 + x3042;
-Tbase TZ x3044 = 0x9;
-Tbase TZ x3045 = x3044 * x3043;
-Tbase TZ x3046 = x3040 + x3045;
-Tbase TZ x3047 = x3013 + x3046;
-Tbase TZ x3048 = 0x19;
-Tbase TZ x3049 = x3047 >>> x3048;
-Tbase TZ x3050 = x439 * x848;
-Tbase TZ x3051 = 0x2;
-Tbase TZ x3052 = x846 * x3051;
-Tbase TZ x3053 = x441 * x3052;
-Tbase TZ x3054 = 0x2;
-Tbase TZ x3055 = x844 * x3054;
-Tbase TZ x3056 = x443 * x3055;
-Tbase TZ x3057 = 0x2;
-Tbase TZ x3058 = x839 * x3057;
-Tbase TZ x3059 = x445 * x3058;
-Tbase TZ x3060 = 0x2;
-Tbase TZ x3061 = x837 * x3060;
-Tbase TZ x3062 = x447 * x3061;
-Tbase TZ x3063 = 0x2;
-Tbase TZ x3064 = x835 * x3063;
-Tbase TZ x3065 = x449 * x3064;
-Tbase TZ x3066 = 0x2;
-Tbase TZ x3067 = x833 * x3066;
-Tbase TZ x3068 = x454 * x3067;
-Tbase TZ x3069 = 0x2;
-Tbase TZ x3070 = x831 * x3069;
-Tbase TZ x3071 = x456 * x3070;
-Tbase TZ x3072 = x458 * x829;
-Tbase TZ x3073 = x3071 + x3072;
-Tbase TZ x3074 = x3068 + x3073;
-Tbase TZ x3075 = x3065 + x3074;
-Tbase TZ x3076 = x3062 + x3075;
-Tbase TZ x3077 = x3059 + x3076;
-Tbase TZ x3078 = x3056 + x3077;
-Tbase TZ x3079 = x3053 + x3078;
-Tbase TZ x3080 = x3050 + x3079;
-Tbase TZ x3081 = x437 * x827;
-Tbase TZ x3082 = 0x9;
-Tbase TZ x3083 = x3082 * x3081;
-Tbase TZ x3084 = x3080 + x3083;
-Tbase TZ x3085 = x3049 + x3084;
-Tbase TZ x3086 = 0x19;
-Tbase TZ x3087 = x3085 >>> x3086;
-Tbase TZ x3088 = x437 * x848;
-Tbase TZ x3089 = 0x2;
-Tbase TZ x3090 = x846 * x3089;
-Tbase TZ x3091 = x439 * x3090;
-Tbase TZ x3092 = 0x2;
-Tbase TZ x3093 = x844 * x3092;
-Tbase TZ x3094 = x441 * x3093;
-Tbase TZ x3095 = 0x2;
-Tbase TZ x3096 = x839 * x3095;
-Tbase TZ x3097 = x443 * x3096;
-Tbase TZ x3098 = 0x2;
-Tbase TZ x3099 = x837 * x3098;
-Tbase TZ x3100 = x445 * x3099;
-Tbase TZ x3101 = 0x2;
-Tbase TZ x3102 = x835 * x3101;
-Tbase TZ x3103 = x447 * x3102;
-Tbase TZ x3104 = 0x2;
-Tbase TZ x3105 = x833 * x3104;
-Tbase TZ x3106 = x449 * x3105;
-Tbase TZ x3107 = 0x2;
-Tbase TZ x3108 = x831 * x3107;
-Tbase TZ x3109 = x454 * x3108;
-Tbase TZ x3110 = 0x2;
-Tbase TZ x3111 = x829 * x3110;
-Tbase TZ x3112 = x456 * x3111;
-Tbase TZ x3113 = x458 * x827;
-Tbase TZ x3114 = x3112 + x3113;
-Tbase TZ x3115 = x3109 + x3114;
-Tbase TZ x3116 = x3106 + x3115;
-Tbase TZ x3117 = x3103 + x3116;
-Tbase TZ x3118 = x3100 + x3117;
-Tbase TZ x3119 = x3097 + x3118;
-Tbase TZ x3120 = x3094 + x3119;
-Tbase TZ x3121 = x3091 + x3120;
-Tbase TZ x3122 = x3088 + x3121;
-Tbase TZ x3123 = x3087 + x3122;
-Tbase TZ x3124 = 0x19;
-Tbase TZ x3125 = x3123 >>> x3124;
-Tbase TZ x3126 = 0x9;
-Tbase TZ x3127 = x3126 * x3125;
-Tbase TZ x3128 = 0x3ffffff;
-Tbase TZ x3129 = x2837 & x3128;
-Tbase TZ x3130 = x3127 + x3129;
-Tbase TZ x3131 = 0x1a;
-Tbase TZ x3132 = x3130 >>> x3131;
-Tbase TZ x3133 = 0x1ffffff;
-Tbase TZ x3134 = x2861 & x3133;
-Tbase TZ x3135 = x3132 + x3134;
-Tbase TZ x3136 = 0x1ffffff;
-Tbase TZ x3137 = x3123 & x3136;
-Tbase TZ x3138 = 0x1ffffff;
-Tbase TZ x3139 = x3085 & x3138;
-Tbase TZ x3140 = 0x1ffffff;
-Tbase TZ x3141 = x3047 & x3140;
-Tbase TZ x3142 = 0x1ffffff;
-Tbase TZ x3143 = x3011 & x3142;
-Tbase TZ x3144 = 0x1ffffff;
-Tbase TZ x3145 = x2977 & x3144;
-Tbase TZ x3146 = 0x1ffffff;
-Tbase TZ x3147 = x2945 & x3146;
-Tbase TZ x3148 = 0x1ffffff;
-Tbase TZ x3149 = x2915 & x3148;
-Tbase TZ x3150 = 0x19;
-Tbase TZ x3151 = x3135 >>> x3150;
-Tbase TZ x3152 = 0x1ffffff;
-Tbase TZ x3153 = x2887 & x3152;
-Tbase TZ x3154 = x3151 + x3153;
-Tbase TZ x3155 = 0x1ffffff;
-Tbase TZ x3156 = x3135 & x3155;
-Tbase TZ x3157 = 0x3ffffff;
-Tbase TZ x3158 = x3130 & x3157;
-Tbase TZ x3159 = x38 * x878;
-Tbase TZ x3160 = 0x2;
-Tbase TZ x3161 = x875 * x3160;
-Tbase TZ x3162 = x29 * x3161;
-Tbase TZ x3163 = 0x2;
-Tbase TZ x3164 = x872 * x3163;
-Tbase TZ x3165 = x30 * x3164;
-Tbase TZ x3166 = 0x2;
-Tbase TZ x3167 = x869 * x3166;
-Tbase TZ x3168 = x31 * x3167;
-Tbase TZ x3169 = 0x2;
-Tbase TZ x3170 = x866 * x3169;
-Tbase TZ x3171 = x32 * x3170;
-Tbase TZ x3172 = 0x2;
-Tbase TZ x3173 = x863 * x3172;
-Tbase TZ x3174 = x33 * x3173;
-Tbase TZ x3175 = 0x2;
-Tbase TZ x3176 = x860 * x3175;
-Tbase TZ x3177 = x34 * x3176;
-Tbase TZ x3178 = 0x2;
-Tbase TZ x3179 = x857 * x3178;
-Tbase TZ x3180 = x35 * x3179;
-Tbase TZ x3181 = 0x2;
-Tbase TZ x3182 = x854 * x3181;
-Tbase TZ x3183 = x36 * x3182;
-Tbase TZ x3184 = 0x2;
-Tbase TZ x3185 = x851 * x3184;
-Tbase TZ x3186 = x37 * x3185;
-Tbase TZ x3187 = x3183 + x3186;
-Tbase TZ x3188 = x3180 + x3187;
-Tbase TZ x3189 = x3177 + x3188;
-Tbase TZ x3190 = x3174 + x3189;
-Tbase TZ x3191 = x3171 + x3190;
-Tbase TZ x3192 = x3168 + x3191;
-Tbase TZ x3193 = x3165 + x3192;
-Tbase TZ x3194 = x3162 + x3193;
-Tbase TZ x3195 = 0x9;
-Tbase TZ x3196 = x3195 * x3194;
-Tbase TZ x3197 = x3159 + x3196;
-Tbase TZ x3198 = 0x1a;
-Tbase TZ x3199 = x3197 >>> x3198;
-Tbase TZ x3200 = x37 * x878;
-Tbase TZ x3201 = x38 * x875;
-Tbase TZ x3202 = x3200 + x3201;
-Tbase TZ x3203 = x29 * x872;
-Tbase TZ x3204 = x30 * x869;
-Tbase TZ x3205 = x31 * x866;
-Tbase TZ x3206 = x32 * x863;
-Tbase TZ x3207 = x33 * x860;
-Tbase TZ x3208 = x34 * x857;
-Tbase TZ x3209 = x35 * x854;
-Tbase TZ x3210 = x36 * x851;
-Tbase TZ x3211 = x3209 + x3210;
-Tbase TZ x3212 = x3208 + x3211;
-Tbase TZ x3213 = x3207 + x3212;
-Tbase TZ x3214 = x3206 + x3213;
-Tbase TZ x3215 = x3205 + x3214;
-Tbase TZ x3216 = x3204 + x3215;
-Tbase TZ x3217 = x3203 + x3216;
-Tbase TZ x3218 = 0x9;
-Tbase TZ x3219 = x3218 * x3217;
-Tbase TZ x3220 = x3202 + x3219;
-Tbase TZ x3221 = x3199 + x3220;
-Tbase TZ x3222 = 0x19;
-Tbase TZ x3223 = x3221 >>> x3222;
-Tbase TZ x3224 = x36 * x878;
-Tbase TZ x3225 = 0x2;
-Tbase TZ x3226 = x875 * x3225;
-Tbase TZ x3227 = x37 * x3226;
-Tbase TZ x3228 = x38 * x872;
-Tbase TZ x3229 = x3227 + x3228;
-Tbase TZ x3230 = x3224 + x3229;
-Tbase TZ x3231 = x29 * x869;
-Tbase TZ x3232 = x30 * x866;
-Tbase TZ x3233 = x31 * x863;
-Tbase TZ x3234 = x32 * x860;
-Tbase TZ x3235 = x33 * x857;
-Tbase TZ x3236 = x34 * x854;
-Tbase TZ x3237 = x35 * x851;
-Tbase TZ x3238 = x3236 + x3237;
-Tbase TZ x3239 = x3235 + x3238;
-Tbase TZ x3240 = x3234 + x3239;
-Tbase TZ x3241 = x3233 + x3240;
-Tbase TZ x3242 = x3232 + x3241;
-Tbase TZ x3243 = x3231 + x3242;
-Tbase TZ x3244 = 0x9;
-Tbase TZ x3245 = x3244 * x3243;
-Tbase TZ x3246 = x3230 + x3245;
-Tbase TZ x3247 = x3223 + x3246;
-Tbase TZ x3248 = 0x19;
-Tbase TZ x3249 = x3247 >>> x3248;
-Tbase TZ x3250 = x35 * x878;
-Tbase TZ x3251 = 0x2;
-Tbase TZ x3252 = x875 * x3251;
-Tbase TZ x3253 = x36 * x3252;
-Tbase TZ x3254 = 0x2;
-Tbase TZ x3255 = x872 * x3254;
-Tbase TZ x3256 = x37 * x3255;
-Tbase TZ x3257 = x38 * x869;
-Tbase TZ x3258 = x3256 + x3257;
-Tbase TZ x3259 = x3253 + x3258;
-Tbase TZ x3260 = x3250 + x3259;
-Tbase TZ x3261 = x29 * x866;
-Tbase TZ x3262 = x30 * x863;
-Tbase TZ x3263 = x31 * x860;
-Tbase TZ x3264 = x32 * x857;
-Tbase TZ x3265 = x33 * x854;
-Tbase TZ x3266 = x34 * x851;
-Tbase TZ x3267 = x3265 + x3266;
-Tbase TZ x3268 = x3264 + x3267;
-Tbase TZ x3269 = x3263 + x3268;
-Tbase TZ x3270 = x3262 + x3269;
-Tbase TZ x3271 = x3261 + x3270;
-Tbase TZ x3272 = 0x9;
-Tbase TZ x3273 = x3272 * x3271;
-Tbase TZ x3274 = x3260 + x3273;
-Tbase TZ x3275 = x3249 + x3274;
-Tbase TZ x3276 = 0x19;
-Tbase TZ x3277 = x3275 >>> x3276;
-Tbase TZ x3278 = x34 * x878;
-Tbase TZ x3279 = 0x2;
-Tbase TZ x3280 = x875 * x3279;
-Tbase TZ x3281 = x35 * x3280;
-Tbase TZ x3282 = 0x2;
-Tbase TZ x3283 = x872 * x3282;
-Tbase TZ x3284 = x36 * x3283;
-Tbase TZ x3285 = 0x2;
-Tbase TZ x3286 = x869 * x3285;
-Tbase TZ x3287 = x37 * x3286;
-Tbase TZ x3288 = x38 * x866;
-Tbase TZ x3289 = x3287 + x3288;
-Tbase TZ x3290 = x3284 + x3289;
-Tbase TZ x3291 = x3281 + x3290;
-Tbase TZ x3292 = x3278 + x3291;
-Tbase TZ x3293 = x29 * x863;
-Tbase TZ x3294 = x30 * x860;
-Tbase TZ x3295 = x31 * x857;
-Tbase TZ x3296 = x32 * x854;
-Tbase TZ x3297 = x33 * x851;
-Tbase TZ x3298 = x3296 + x3297;
-Tbase TZ x3299 = x3295 + x3298;
-Tbase TZ x3300 = x3294 + x3299;
-Tbase TZ x3301 = x3293 + x3300;
-Tbase TZ x3302 = 0x9;
-Tbase TZ x3303 = x3302 * x3301;
-Tbase TZ x3304 = x3292 + x3303;
-Tbase TZ x3305 = x3277 + x3304;
-Tbase TZ x3306 = 0x19;
-Tbase TZ x3307 = x3305 >>> x3306;
-Tbase TZ x3308 = x33 * x878;
-Tbase TZ x3309 = 0x2;
-Tbase TZ x3310 = x875 * x3309;
-Tbase TZ x3311 = x34 * x3310;
-Tbase TZ x3312 = 0x2;
-Tbase TZ x3313 = x872 * x3312;
-Tbase TZ x3314 = x35 * x3313;
-Tbase TZ x3315 = 0x2;
-Tbase TZ x3316 = x869 * x3315;
-Tbase TZ x3317 = x36 * x3316;
-Tbase TZ x3318 = 0x2;
-Tbase TZ x3319 = x866 * x3318;
-Tbase TZ x3320 = x37 * x3319;
-Tbase TZ x3321 = x38 * x863;
-Tbase TZ x3322 = x3320 + x3321;
-Tbase TZ x3323 = x3317 + x3322;
-Tbase TZ x3324 = x3314 + x3323;
-Tbase TZ x3325 = x3311 + x3324;
-Tbase TZ x3326 = x3308 + x3325;
-Tbase TZ x3327 = x29 * x860;
-Tbase TZ x3328 = x30 * x857;
-Tbase TZ x3329 = x31 * x854;
-Tbase TZ x3330 = x32 * x851;
-Tbase TZ x3331 = x3329 + x3330;
-Tbase TZ x3332 = x3328 + x3331;
-Tbase TZ x3333 = x3327 + x3332;
-Tbase TZ x3334 = 0x9;
-Tbase TZ x3335 = x3334 * x3333;
-Tbase TZ x3336 = x3326 + x3335;
-Tbase TZ x3337 = x3307 + x3336;
-Tbase TZ x3338 = 0x19;
-Tbase TZ x3339 = x3337 >>> x3338;
-Tbase TZ x3340 = x32 * x878;
-Tbase TZ x3341 = 0x2;
-Tbase TZ x3342 = x875 * x3341;
-Tbase TZ x3343 = x33 * x3342;
-Tbase TZ x3344 = 0x2;
-Tbase TZ x3345 = x872 * x3344;
-Tbase TZ x3346 = x34 * x3345;
-Tbase TZ x3347 = 0x2;
-Tbase TZ x3348 = x869 * x3347;
-Tbase TZ x3349 = x35 * x3348;
-Tbase TZ x3350 = 0x2;
-Tbase TZ x3351 = x866 * x3350;
-Tbase TZ x3352 = x36 * x3351;
-Tbase TZ x3353 = 0x2;
-Tbase TZ x3354 = x863 * x3353;
-Tbase TZ x3355 = x37 * x3354;
-Tbase TZ x3356 = x38 * x860;
-Tbase TZ x3357 = x3355 + x3356;
-Tbase TZ x3358 = x3352 + x3357;
-Tbase TZ x3359 = x3349 + x3358;
-Tbase TZ x3360 = x3346 + x3359;
-Tbase TZ x3361 = x3343 + x3360;
-Tbase TZ x3362 = x3340 + x3361;
-Tbase TZ x3363 = x29 * x857;
-Tbase TZ x3364 = x30 * x854;
-Tbase TZ x3365 = x31 * x851;
-Tbase TZ x3366 = x3364 + x3365;
-Tbase TZ x3367 = x3363 + x3366;
-Tbase TZ x3368 = 0x9;
-Tbase TZ x3369 = x3368 * x3367;
-Tbase TZ x3370 = x3362 + x3369;
-Tbase TZ x3371 = x3339 + x3370;
-Tbase TZ x3372 = 0x19;
-Tbase TZ x3373 = x3371 >>> x3372;
-Tbase TZ x3374 = x31 * x878;
-Tbase TZ x3375 = 0x2;
-Tbase TZ x3376 = x875 * x3375;
-Tbase TZ x3377 = x32 * x3376;
-Tbase TZ x3378 = 0x2;
-Tbase TZ x3379 = x872 * x3378;
-Tbase TZ x3380 = x33 * x3379;
-Tbase TZ x3381 = 0x2;
-Tbase TZ x3382 = x869 * x3381;
-Tbase TZ x3383 = x34 * x3382;
-Tbase TZ x3384 = 0x2;
-Tbase TZ x3385 = x866 * x3384;
-Tbase TZ x3386 = x35 * x3385;
-Tbase TZ x3387 = 0x2;
-Tbase TZ x3388 = x863 * x3387;
-Tbase TZ x3389 = x36 * x3388;
-Tbase TZ x3390 = 0x2;
-Tbase TZ x3391 = x860 * x3390;
-Tbase TZ x3392 = x37 * x3391;
-Tbase TZ x3393 = x38 * x857;
-Tbase TZ x3394 = x3392 + x3393;
-Tbase TZ x3395 = x3389 + x3394;
-Tbase TZ x3396 = x3386 + x3395;
-Tbase TZ x3397 = x3383 + x3396;
-Tbase TZ x3398 = x3380 + x3397;
-Tbase TZ x3399 = x3377 + x3398;
-Tbase TZ x3400 = x3374 + x3399;
-Tbase TZ x3401 = x29 * x854;
-Tbase TZ x3402 = x30 * x851;
-Tbase TZ x3403 = x3401 + x3402;
-Tbase TZ x3404 = 0x9;
-Tbase TZ x3405 = x3404 * x3403;
-Tbase TZ x3406 = x3400 + x3405;
-Tbase TZ x3407 = x3373 + x3406;
-Tbase TZ x3408 = 0x19;
-Tbase TZ x3409 = x3407 >>> x3408;
-Tbase TZ x3410 = x30 * x878;
-Tbase TZ x3411 = 0x2;
-Tbase TZ x3412 = x875 * x3411;
-Tbase TZ x3413 = x31 * x3412;
-Tbase TZ x3414 = 0x2;
-Tbase TZ x3415 = x872 * x3414;
-Tbase TZ x3416 = x32 * x3415;
-Tbase TZ x3417 = 0x2;
-Tbase TZ x3418 = x869 * x3417;
-Tbase TZ x3419 = x33 * x3418;
-Tbase TZ x3420 = 0x2;
-Tbase TZ x3421 = x866 * x3420;
-Tbase TZ x3422 = x34 * x3421;
-Tbase TZ x3423 = 0x2;
-Tbase TZ x3424 = x863 * x3423;
-Tbase TZ x3425 = x35 * x3424;
-Tbase TZ x3426 = 0x2;
-Tbase TZ x3427 = x860 * x3426;
-Tbase TZ x3428 = x36 * x3427;
-Tbase TZ x3429 = 0x2;
-Tbase TZ x3430 = x857 * x3429;
-Tbase TZ x3431 = x37 * x3430;
-Tbase TZ x3432 = x38 * x854;
-Tbase TZ x3433 = x3431 + x3432;
-Tbase TZ x3434 = x3428 + x3433;
-Tbase TZ x3435 = x3425 + x3434;
-Tbase TZ x3436 = x3422 + x3435;
-Tbase TZ x3437 = x3419 + x3436;
-Tbase TZ x3438 = x3416 + x3437;
-Tbase TZ x3439 = x3413 + x3438;
-Tbase TZ x3440 = x3410 + x3439;
-Tbase TZ x3441 = x29 * x851;
-Tbase TZ x3442 = 0x9;
-Tbase TZ x3443 = x3442 * x3441;
-Tbase TZ x3444 = x3440 + x3443;
-Tbase TZ x3445 = x3409 + x3444;
-Tbase TZ x3446 = 0x19;
-Tbase TZ x3447 = x3445 >>> x3446;
-Tbase TZ x3448 = x29 * x878;
-Tbase TZ x3449 = 0x2;
-Tbase TZ x3450 = x875 * x3449;
-Tbase TZ x3451 = x30 * x3450;
-Tbase TZ x3452 = 0x2;
-Tbase TZ x3453 = x872 * x3452;
-Tbase TZ x3454 = x31 * x3453;
-Tbase TZ x3455 = 0x2;
-Tbase TZ x3456 = x869 * x3455;
-Tbase TZ x3457 = x32 * x3456;
-Tbase TZ x3458 = 0x2;
-Tbase TZ x3459 = x866 * x3458;
-Tbase TZ x3460 = x33 * x3459;
-Tbase TZ x3461 = 0x2;
-Tbase TZ x3462 = x863 * x3461;
-Tbase TZ x3463 = x34 * x3462;
-Tbase TZ x3464 = 0x2;
-Tbase TZ x3465 = x860 * x3464;
-Tbase TZ x3466 = x35 * x3465;
-Tbase TZ x3467 = 0x2;
-Tbase TZ x3468 = x857 * x3467;
-Tbase TZ x3469 = x36 * x3468;
-Tbase TZ x3470 = 0x2;
-Tbase TZ x3471 = x854 * x3470;
-Tbase TZ x3472 = x37 * x3471;
-Tbase TZ x3473 = x38 * x851;
-Tbase TZ x3474 = x3472 + x3473;
-Tbase TZ x3475 = x3469 + x3474;
-Tbase TZ x3476 = x3466 + x3475;
-Tbase TZ x3477 = x3463 + x3476;
-Tbase TZ x3478 = x3460 + x3477;
-Tbase TZ x3479 = x3457 + x3478;
-Tbase TZ x3480 = x3454 + x3479;
-Tbase TZ x3481 = x3451 + x3480;
-Tbase TZ x3482 = x3448 + x3481;
-Tbase TZ x3483 = x3447 + x3482;
-Tbase TZ x3484 = 0x19;
-Tbase TZ x3485 = x3483 >>> x3484;
-Tbase TZ x3486 = 0x9;
-Tbase TZ x3487 = x3486 * x3485;
-Tbase TZ x3488 = 0x3ffffff;
-Tbase TZ x3489 = x3197 & x3488;
-Tbase TZ x3490 = x3487 + x3489;
-Tbase TZ x3491 = 0x1a;
-Tbase TZ x3492 = x3490 >>> x3491;
-Tbase TZ x3493 = 0x1ffffff;
-Tbase TZ x3494 = x3221 & x3493;
-Tbase TZ x3495 = x3492 + x3494;
-Tbase TZ x3496 = 0x1ffffff;
-Tbase TZ x3497 = x3483 & x3496;
-Tbase TZ x3498 = 0x1ffffff;
-Tbase TZ x3499 = x3445 & x3498;
-Tbase TZ x3500 = 0x1ffffff;
-Tbase TZ x3501 = x3407 & x3500;
-Tbase TZ x3502 = 0x1ffffff;
-Tbase TZ x3503 = x3371 & x3502;
-Tbase TZ x3504 = 0x1ffffff;
-Tbase TZ x3505 = x3337 & x3504;
-Tbase TZ x3506 = 0x1ffffff;
-Tbase TZ x3507 = x3305 & x3506;
-Tbase TZ x3508 = 0x1ffffff;
-Tbase TZ x3509 = x3275 & x3508;
-Tbase TZ x3510 = 0x19;
-Tbase TZ x3511 = x3495 >>> x3510;
-Tbase TZ x3512 = 0x1ffffff;
-Tbase TZ x3513 = x3247 & x3512;
-Tbase TZ x3514 = x3511 + x3513;
-Tbase TZ x3515 = 0x1ffffff;
-Tbase TZ x3516 = x3495 & x3515;
-Tbase TZ x3517 = 0x3ffffff;
-Tbase TZ x3518 = x3490 & x3517;
-Tbase TZ x3519 = x437 + x3497;
-Tbase TZ x3520 = x439 + x3499;
-Tbase TZ x3521 = x441 + x3501;
-Tbase TZ x3522 = x443 + x3503;
-Tbase TZ x3523 = x445 + x3505;
-Tbase TZ x3524 = x447 + x3507;
-Tbase TZ x3525 = x449 + x3509;
-Tbase TZ x3526 = x454 + x3514;
-Tbase TZ x3527 = x456 + x3516;
-Tbase TZ x3528 = x458 + x3518;
-Tbase TZ x3529 = x878 * x3528;
-Tbase TZ x3530 = 0x2;
-Tbase TZ x3531 = x3527 * x3530;
-Tbase TZ x3532 = x851 * x3531;
-Tbase TZ x3533 = 0x2;
-Tbase TZ x3534 = x3526 * x3533;
-Tbase TZ x3535 = x854 * x3534;
-Tbase TZ x3536 = 0x2;
-Tbase TZ x3537 = x3525 * x3536;
-Tbase TZ x3538 = x857 * x3537;
-Tbase TZ x3539 = 0x2;
-Tbase TZ x3540 = x3524 * x3539;
-Tbase TZ x3541 = x860 * x3540;
-Tbase TZ x3542 = 0x2;
-Tbase TZ x3543 = x3523 * x3542;
-Tbase TZ x3544 = x863 * x3543;
-Tbase TZ x3545 = 0x2;
-Tbase TZ x3546 = x3522 * x3545;
-Tbase TZ x3547 = x866 * x3546;
-Tbase TZ x3548 = 0x2;
-Tbase TZ x3549 = x3521 * x3548;
-Tbase TZ x3550 = x869 * x3549;
-Tbase TZ x3551 = 0x2;
-Tbase TZ x3552 = x3520 * x3551;
-Tbase TZ x3553 = x872 * x3552;
-Tbase TZ x3554 = 0x2;
-Tbase TZ x3555 = x3519 * x3554;
-Tbase TZ x3556 = x875 * x3555;
-Tbase TZ x3557 = x3553 + x3556;
-Tbase TZ x3558 = x3550 + x3557;
-Tbase TZ x3559 = x3547 + x3558;
-Tbase TZ x3560 = x3544 + x3559;
-Tbase TZ x3561 = x3541 + x3560;
-Tbase TZ x3562 = x3538 + x3561;
-Tbase TZ x3563 = x3535 + x3562;
-Tbase TZ x3564 = x3532 + x3563;
-Tbase TZ x3565 = 0x9;
-Tbase TZ x3566 = x3565 * x3564;
-Tbase TZ x3567 = x3529 + x3566;
-Tbase TZ x3568 = 0x1a;
-Tbase TZ x3569 = x3567 >>> x3568;
-Tbase TZ x3570 = x875 * x3528;
-Tbase TZ x3571 = x878 * x3527;
-Tbase TZ x3572 = x3570 + x3571;
-Tbase TZ x3573 = x851 * x3526;
-Tbase TZ x3574 = x854 * x3525;
-Tbase TZ x3575 = x857 * x3524;
-Tbase TZ x3576 = x860 * x3523;
-Tbase TZ x3577 = x863 * x3522;
-Tbase TZ x3578 = x866 * x3521;
-Tbase TZ x3579 = x869 * x3520;
-Tbase TZ x3580 = x872 * x3519;
-Tbase TZ x3581 = x3579 + x3580;
-Tbase TZ x3582 = x3578 + x3581;
-Tbase TZ x3583 = x3577 + x3582;
-Tbase TZ x3584 = x3576 + x3583;
-Tbase TZ x3585 = x3575 + x3584;
-Tbase TZ x3586 = x3574 + x3585;
-Tbase TZ x3587 = x3573 + x3586;
-Tbase TZ x3588 = 0x9;
-Tbase TZ x3589 = x3588 * x3587;
-Tbase TZ x3590 = x3572 + x3589;
-Tbase TZ x3591 = x3569 + x3590;
-Tbase TZ x3592 = 0x19;
-Tbase TZ x3593 = x3591 >>> x3592;
-Tbase TZ x3594 = x872 * x3528;
-Tbase TZ x3595 = 0x2;
-Tbase TZ x3596 = x3527 * x3595;
-Tbase TZ x3597 = x875 * x3596;
-Tbase TZ x3598 = x878 * x3526;
-Tbase TZ x3599 = x3597 + x3598;
-Tbase TZ x3600 = x3594 + x3599;
-Tbase TZ x3601 = x851 * x3525;
-Tbase TZ x3602 = x854 * x3524;
-Tbase TZ x3603 = x857 * x3523;
-Tbase TZ x3604 = x860 * x3522;
-Tbase TZ x3605 = x863 * x3521;
-Tbase TZ x3606 = x866 * x3520;
-Tbase TZ x3607 = x869 * x3519;
-Tbase TZ x3608 = x3606 + x3607;
-Tbase TZ x3609 = x3605 + x3608;
-Tbase TZ x3610 = x3604 + x3609;
-Tbase TZ x3611 = x3603 + x3610;
-Tbase TZ x3612 = x3602 + x3611;
-Tbase TZ x3613 = x3601 + x3612;
-Tbase TZ x3614 = 0x9;
-Tbase TZ x3615 = x3614 * x3613;
-Tbase TZ x3616 = x3600 + x3615;
-Tbase TZ x3617 = x3593 + x3616;
-Tbase TZ x3618 = 0x19;
-Tbase TZ x3619 = x3617 >>> x3618;
-Tbase TZ x3620 = x869 * x3528;
-Tbase TZ x3621 = 0x2;
-Tbase TZ x3622 = x3527 * x3621;
-Tbase TZ x3623 = x872 * x3622;
-Tbase TZ x3624 = 0x2;
-Tbase TZ x3625 = x3526 * x3624;
-Tbase TZ x3626 = x875 * x3625;
-Tbase TZ x3627 = x878 * x3525;
-Tbase TZ x3628 = x3626 + x3627;
-Tbase TZ x3629 = x3623 + x3628;
-Tbase TZ x3630 = x3620 + x3629;
-Tbase TZ x3631 = x851 * x3524;
-Tbase TZ x3632 = x854 * x3523;
-Tbase TZ x3633 = x857 * x3522;
-Tbase TZ x3634 = x860 * x3521;
-Tbase TZ x3635 = x863 * x3520;
-Tbase TZ x3636 = x866 * x3519;
-Tbase TZ x3637 = x3635 + x3636;
-Tbase TZ x3638 = x3634 + x3637;
-Tbase TZ x3639 = x3633 + x3638;
-Tbase TZ x3640 = x3632 + x3639;
-Tbase TZ x3641 = x3631 + x3640;
-Tbase TZ x3642 = 0x9;
-Tbase TZ x3643 = x3642 * x3641;
-Tbase TZ x3644 = x3630 + x3643;
-Tbase TZ x3645 = x3619 + x3644;
-Tbase TZ x3646 = 0x19;
-Tbase TZ x3647 = x3645 >>> x3646;
-Tbase TZ x3648 = x866 * x3528;
-Tbase TZ x3649 = 0x2;
-Tbase TZ x3650 = x3527 * x3649;
-Tbase TZ x3651 = x869 * x3650;
-Tbase TZ x3652 = 0x2;
-Tbase TZ x3653 = x3526 * x3652;
-Tbase TZ x3654 = x872 * x3653;
-Tbase TZ x3655 = 0x2;
-Tbase TZ x3656 = x3525 * x3655;
-Tbase TZ x3657 = x875 * x3656;
-Tbase TZ x3658 = x878 * x3524;
-Tbase TZ x3659 = x3657 + x3658;
-Tbase TZ x3660 = x3654 + x3659;
-Tbase TZ x3661 = x3651 + x3660;
-Tbase TZ x3662 = x3648 + x3661;
-Tbase TZ x3663 = x851 * x3523;
-Tbase TZ x3664 = x854 * x3522;
-Tbase TZ x3665 = x857 * x3521;
-Tbase TZ x3666 = x860 * x3520;
-Tbase TZ x3667 = x863 * x3519;
-Tbase TZ x3668 = x3666 + x3667;
-Tbase TZ x3669 = x3665 + x3668;
-Tbase TZ x3670 = x3664 + x3669;
-Tbase TZ x3671 = x3663 + x3670;
-Tbase TZ x3672 = 0x9;
-Tbase TZ x3673 = x3672 * x3671;
-Tbase TZ x3674 = x3662 + x3673;
-Tbase TZ x3675 = x3647 + x3674;
-Tbase TZ x3676 = 0x19;
-Tbase TZ x3677 = x3675 >>> x3676;
-Tbase TZ x3678 = x863 * x3528;
-Tbase TZ x3679 = 0x2;
-Tbase TZ x3680 = x3527 * x3679;
-Tbase TZ x3681 = x866 * x3680;
-Tbase TZ x3682 = 0x2;
-Tbase TZ x3683 = x3526 * x3682;
-Tbase TZ x3684 = x869 * x3683;
-Tbase TZ x3685 = 0x2;
-Tbase TZ x3686 = x3525 * x3685;
-Tbase TZ x3687 = x872 * x3686;
-Tbase TZ x3688 = 0x2;
-Tbase TZ x3689 = x3524 * x3688;
-Tbase TZ x3690 = x875 * x3689;
-Tbase TZ x3691 = x878 * x3523;
-Tbase TZ x3692 = x3690 + x3691;
-Tbase TZ x3693 = x3687 + x3692;
-Tbase TZ x3694 = x3684 + x3693;
-Tbase TZ x3695 = x3681 + x3694;
-Tbase TZ x3696 = x3678 + x3695;
-Tbase TZ x3697 = x851 * x3522;
-Tbase TZ x3698 = x854 * x3521;
-Tbase TZ x3699 = x857 * x3520;
-Tbase TZ x3700 = x860 * x3519;
-Tbase TZ x3701 = x3699 + x3700;
-Tbase TZ x3702 = x3698 + x3701;
-Tbase TZ x3703 = x3697 + x3702;
-Tbase TZ x3704 = 0x9;
-Tbase TZ x3705 = x3704 * x3703;
-Tbase TZ x3706 = x3696 + x3705;
-Tbase TZ x3707 = x3677 + x3706;
-Tbase TZ x3708 = 0x19;
-Tbase TZ x3709 = x3707 >>> x3708;
-Tbase TZ x3710 = x860 * x3528;
-Tbase TZ x3711 = 0x2;
-Tbase TZ x3712 = x3527 * x3711;
-Tbase TZ x3713 = x863 * x3712;
-Tbase TZ x3714 = 0x2;
-Tbase TZ x3715 = x3526 * x3714;
-Tbase TZ x3716 = x866 * x3715;
-Tbase TZ x3717 = 0x2;
-Tbase TZ x3718 = x3525 * x3717;
-Tbase TZ x3719 = x869 * x3718;
-Tbase TZ x3720 = 0x2;
-Tbase TZ x3721 = x3524 * x3720;
-Tbase TZ x3722 = x872 * x3721;
-Tbase TZ x3723 = 0x2;
-Tbase TZ x3724 = x3523 * x3723;
-Tbase TZ x3725 = x875 * x3724;
-Tbase TZ x3726 = x878 * x3522;
-Tbase TZ x3727 = x3725 + x3726;
-Tbase TZ x3728 = x3722 + x3727;
-Tbase TZ x3729 = x3719 + x3728;
-Tbase TZ x3730 = x3716 + x3729;
-Tbase TZ x3731 = x3713 + x3730;
-Tbase TZ x3732 = x3710 + x3731;
-Tbase TZ x3733 = x851 * x3521;
-Tbase TZ x3734 = x854 * x3520;
-Tbase TZ x3735 = x857 * x3519;
-Tbase TZ x3736 = x3734 + x3735;
-Tbase TZ x3737 = x3733 + x3736;
-Tbase TZ x3738 = 0x9;
-Tbase TZ x3739 = x3738 * x3737;
-Tbase TZ x3740 = x3732 + x3739;
-Tbase TZ x3741 = x3709 + x3740;
-Tbase TZ x3742 = 0x19;
-Tbase TZ x3743 = x3741 >>> x3742;
-Tbase TZ x3744 = x857 * x3528;
-Tbase TZ x3745 = 0x2;
-Tbase TZ x3746 = x3527 * x3745;
-Tbase TZ x3747 = x860 * x3746;
-Tbase TZ x3748 = 0x2;
-Tbase TZ x3749 = x3526 * x3748;
-Tbase TZ x3750 = x863 * x3749;
-Tbase TZ x3751 = 0x2;
-Tbase TZ x3752 = x3525 * x3751;
-Tbase TZ x3753 = x866 * x3752;
-Tbase TZ x3754 = 0x2;
-Tbase TZ x3755 = x3524 * x3754;
-Tbase TZ x3756 = x869 * x3755;
-Tbase TZ x3757 = 0x2;
-Tbase TZ x3758 = x3523 * x3757;
-Tbase TZ x3759 = x872 * x3758;
-Tbase TZ x3760 = 0x2;
-Tbase TZ x3761 = x3522 * x3760;
-Tbase TZ x3762 = x875 * x3761;
-Tbase TZ x3763 = x878 * x3521;
-Tbase TZ x3764 = x3762 + x3763;
-Tbase TZ x3765 = x3759 + x3764;
-Tbase TZ x3766 = x3756 + x3765;
-Tbase TZ x3767 = x3753 + x3766;
-Tbase TZ x3768 = x3750 + x3767;
-Tbase TZ x3769 = x3747 + x3768;
-Tbase TZ x3770 = x3744 + x3769;
-Tbase TZ x3771 = x851 * x3520;
-Tbase TZ x3772 = x854 * x3519;
-Tbase TZ x3773 = x3771 + x3772;
-Tbase TZ x3774 = 0x9;
-Tbase TZ x3775 = x3774 * x3773;
-Tbase TZ x3776 = x3770 + x3775;
-Tbase TZ x3777 = x3743 + x3776;
-Tbase TZ x3778 = 0x19;
-Tbase TZ x3779 = x3777 >>> x3778;
-Tbase TZ x3780 = x854 * x3528;
-Tbase TZ x3781 = 0x2;
-Tbase TZ x3782 = x3527 * x3781;
-Tbase TZ x3783 = x857 * x3782;
-Tbase TZ x3784 = 0x2;
-Tbase TZ x3785 = x3526 * x3784;
-Tbase TZ x3786 = x860 * x3785;
-Tbase TZ x3787 = 0x2;
-Tbase TZ x3788 = x3525 * x3787;
-Tbase TZ x3789 = x863 * x3788;
-Tbase TZ x3790 = 0x2;
-Tbase TZ x3791 = x3524 * x3790;
-Tbase TZ x3792 = x866 * x3791;
-Tbase TZ x3793 = 0x2;
-Tbase TZ x3794 = x3523 * x3793;
-Tbase TZ x3795 = x869 * x3794;
-Tbase TZ x3796 = 0x2;
-Tbase TZ x3797 = x3522 * x3796;
-Tbase TZ x3798 = x872 * x3797;
-Tbase TZ x3799 = 0x2;
-Tbase TZ x3800 = x3521 * x3799;
-Tbase TZ x3801 = x875 * x3800;
-Tbase TZ x3802 = x878 * x3520;
-Tbase TZ x3803 = x3801 + x3802;
-Tbase TZ x3804 = x3798 + x3803;
-Tbase TZ x3805 = x3795 + x3804;
-Tbase TZ x3806 = x3792 + x3805;
-Tbase TZ x3807 = x3789 + x3806;
-Tbase TZ x3808 = x3786 + x3807;
-Tbase TZ x3809 = x3783 + x3808;
-Tbase TZ x3810 = x3780 + x3809;
-Tbase TZ x3811 = x851 * x3519;
-Tbase TZ x3812 = 0x9;
-Tbase TZ x3813 = x3812 * x3811;
-Tbase TZ x3814 = x3810 + x3813;
-Tbase TZ x3815 = x3779 + x3814;
-Tbase TZ x3816 = 0x19;
-Tbase TZ x3817 = x3815 >>> x3816;
-Tbase TZ x3818 = x851 * x3528;
-Tbase TZ x3819 = 0x2;
-Tbase TZ x3820 = x3527 * x3819;
-Tbase TZ x3821 = x854 * x3820;
-Tbase TZ x3822 = 0x2;
-Tbase TZ x3823 = x3526 * x3822;
-Tbase TZ x3824 = x857 * x3823;
-Tbase TZ x3825 = 0x2;
-Tbase TZ x3826 = x3525 * x3825;
-Tbase TZ x3827 = x860 * x3826;
-Tbase TZ x3828 = 0x2;
-Tbase TZ x3829 = x3524 * x3828;
-Tbase TZ x3830 = x863 * x3829;
-Tbase TZ x3831 = 0x2;
-Tbase TZ x3832 = x3523 * x3831;
-Tbase TZ x3833 = x866 * x3832;
-Tbase TZ x3834 = 0x2;
-Tbase TZ x3835 = x3522 * x3834;
-Tbase TZ x3836 = x869 * x3835;
-Tbase TZ x3837 = 0x2;
-Tbase TZ x3838 = x3521 * x3837;
-Tbase TZ x3839 = x872 * x3838;
-Tbase TZ x3840 = 0x2;
-Tbase TZ x3841 = x3520 * x3840;
-Tbase TZ x3842 = x875 * x3841;
-Tbase TZ x3843 = x878 * x3519;
-Tbase TZ x3844 = x3842 + x3843;
-Tbase TZ x3845 = x3839 + x3844;
-Tbase TZ x3846 = x3836 + x3845;
-Tbase TZ x3847 = x3833 + x3846;
-Tbase TZ x3848 = x3830 + x3847;
-Tbase TZ x3849 = x3827 + x3848;
-Tbase TZ x3850 = x3824 + x3849;
-Tbase TZ x3851 = x3821 + x3850;
-Tbase TZ x3852 = x3818 + x3851;
-Tbase TZ x3853 = x3817 + x3852;
-Tbase TZ x3854 = 0x19;
-Tbase TZ x3855 = x3853 >>> x3854;
-Tbase TZ x3856 = 0x9;
-Tbase TZ x3857 = x3856 * x3855;
-Tbase TZ x3858 = 0x3ffffff;
-Tbase TZ x3859 = x3567 & x3858;
-Tbase TZ x3860 = x3857 + x3859;
-Tbase TZ x3861 = 0x1a;
-Tbase TZ x3862 = x3860 >>> x3861;
-Tbase TZ x3863 = 0x1ffffff;
-Tbase TZ x3864 = x3591 & x3863;
-Tbase TZ x3865 = x3862 + x3864;
-Tbase TZ x3866 = 0x1ffffff;
-Tbase TZ x3867 = x3853 & x3866;
-Tbase TZ x3868 = 0x1ffffff;
-Tbase TZ x3869 = x3815 & x3868;
-Tbase TZ x3870 = 0x1ffffff;
-Tbase TZ x3871 = x3777 & x3870;
-Tbase TZ x3872 = 0x1ffffff;
-Tbase TZ x3873 = x3741 & x3872;
-Tbase TZ x3874 = 0x1ffffff;
-Tbase TZ x3875 = x3707 & x3874;
-Tbase TZ x3876 = 0x1ffffff;
-Tbase TZ x3877 = x3675 & x3876;
-Tbase TZ x3878 = 0x1ffffff;
-Tbase TZ x3879 = x3645 & x3878;
-Tbase TZ x3880 = 0x19;
-Tbase TZ x3881 = x3865 >>> x3880;
-Tbase TZ x3882 = 0x1ffffff;
-Tbase TZ x3883 = x3617 & x3882;
-Tbase TZ x3884 = x3881 + x3883;
-Tbase TZ x3885 = 0x1ffffff;
-Tbase TZ x3886 = x3865 & x3885;
-Tbase TZ x3887 = 0x3ffffff;
-Tbase TZ x3888 = x3860 & x3887;
-(Return x3137, Return x3139, Return x3141, Return x3143,
-Return x3145, Return x3147, Return x3149, Return x3154,
-Return x3156, Return x3158,
-(Return x3867, Return x3869, Return x3871, Return x3873,
-Return x3875, Return x3877, Return x3879, Return x3884,
-Return x3886, Return x3888),
-(Return x1997, Return x1999, Return x2001, Return x2003,
-Return x2005, Return x2007, Return x2009, Return x2014,
-Return x2016, Return x2018),
-(Return x2777, Return x2779, Return x2781, Return x2783,
-Return x2785, Return x2787, Return x2789, Return x2794,
-Return x2796, Return x2798))
- : forall var : base_type -> Type,
- expr base_type op
- (TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> ...)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF2519_32Reflective/Reified/LadderStepJavaDisplay.v b/src/SpecificGen/GF2519_32Reflective/Reified/LadderStepJavaDisplay.v
deleted file mode 100644
index 40196eed3..000000000
--- a/src/SpecificGen/GF2519_32Reflective/Reified/LadderStepJavaDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF2519_32Reflective.Reified.LadderStep.
-Require Export Crypto.Reflection.Z.JavaNotations.
-
-Print rladderstepW.
diff --git a/src/SpecificGen/GF2519_32Reflective/Reified/Mul.v b/src/SpecificGen/GF2519_32Reflective/Reified/Mul.v
deleted file mode 100644
index dc1e0bf49..000000000
--- a/src/SpecificGen/GF2519_32Reflective/Reified/Mul.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF2519_32Reflective.CommonBinOp.
-
-Definition rmulZ_sig : rexpr_binop_sig mul. Proof. reify_sig. Defined.
-Definition rmulW := Eval vm_compute in rword_of_Z rmulZ_sig.
-Lemma rmulW_correct_and_bounded_gen : correct_and_bounded_genT rmulW rmulZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rmul_output_bounds := Eval vm_compute in compute_bounds rmulW ExprBinOp_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rmulW_correct_and_bounded
- := ExprBinOp_correct_and_bounded
- rmulW mul rmulZ_sig rmulW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Mul", compute_bounds_for_display rmulW ExprBinOp_bounds).
-Compute ("Mul overflows? ", sanity_compute rmulW ExprBinOp_bounds).
-Compute ("Mul overflows (error if it does)? ", sanity_check rmulW ExprBinOp_bounds).
diff --git a/src/SpecificGen/GF2519_32Reflective/Reified/MulDisplay.log b/src/SpecificGen/GF2519_32Reflective/Reified/MulDisplay.log
deleted file mode 100644
index 37db43d02..000000000
--- a/src/SpecificGen/GF2519_32Reflective/Reified/MulDisplay.log
+++ /dev/null
@@ -1,317 +0,0 @@
-rmulW =
-fun var : Syntax.base_type -> Type =>
-λ
-x x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17
- x18 : var Syntax.TZ,
-Tbase Syntax.TZ x19 = x8 * x18;
-Tbase Syntax.TZ x20 = x17 * 0x2;
-Tbase Syntax.TZ x21 = x * x20;
-Tbase Syntax.TZ x22 = x16 * 0x2;
-Tbase Syntax.TZ x23 = x0 * x22;
-Tbase Syntax.TZ x24 = x15 * 0x2;
-Tbase Syntax.TZ x25 = x1 * x24;
-Tbase Syntax.TZ x26 = x14 * 0x2;
-Tbase Syntax.TZ x27 = x2 * x26;
-Tbase Syntax.TZ x28 = x13 * 0x2;
-Tbase Syntax.TZ x29 = x3 * x28;
-Tbase Syntax.TZ x30 = x12 * 0x2;
-Tbase Syntax.TZ x31 = x4 * x30;
-Tbase Syntax.TZ x32 = x11 * 0x2;
-Tbase Syntax.TZ x33 = x5 * x32;
-Tbase Syntax.TZ x34 = x10 * 0x2;
-Tbase Syntax.TZ x35 = x6 * x34;
-Tbase Syntax.TZ x36 = x9 * 0x2;
-Tbase Syntax.TZ x37 = x7 * x36;
-Tbase Syntax.TZ x38 = x35 + x37;
-Tbase Syntax.TZ x39 = x33 + x38;
-Tbase Syntax.TZ x40 = x31 + x39;
-Tbase Syntax.TZ x41 = x29 + x40;
-Tbase Syntax.TZ x42 = x27 + x41;
-Tbase Syntax.TZ x43 = x25 + x42;
-Tbase Syntax.TZ x44 = x23 + x43;
-Tbase Syntax.TZ x45 = x21 + x44;
-Tbase Syntax.TZ x46 = 0x9 * x45;
-Tbase Syntax.TZ x47 = x19 + x46;
-Tbase Syntax.TZ x48 = x47 >> 0x1a;
-Tbase Syntax.TZ x49 = x7 * x18;
-Tbase Syntax.TZ x50 = x8 * x17;
-Tbase Syntax.TZ x51 = x49 + x50;
-Tbase Syntax.TZ x52 = x * x16;
-Tbase Syntax.TZ x53 = x0 * x15;
-Tbase Syntax.TZ x54 = x1 * x14;
-Tbase Syntax.TZ x55 = x2 * x13;
-Tbase Syntax.TZ x56 = x3 * x12;
-Tbase Syntax.TZ x57 = x4 * x11;
-Tbase Syntax.TZ x58 = x5 * x10;
-Tbase Syntax.TZ x59 = x6 * x9;
-Tbase Syntax.TZ x60 = x58 + x59;
-Tbase Syntax.TZ x61 = x57 + x60;
-Tbase Syntax.TZ x62 = x56 + x61;
-Tbase Syntax.TZ x63 = x55 + x62;
-Tbase Syntax.TZ x64 = x54 + x63;
-Tbase Syntax.TZ x65 = x53 + x64;
-Tbase Syntax.TZ x66 = x52 + x65;
-Tbase Syntax.TZ x67 = 0x9 * x66;
-Tbase Syntax.TZ x68 = x51 + x67;
-Tbase Syntax.TZ x69 = x48 + x68;
-Tbase Syntax.TZ x70 = x69 >> 0x19;
-Tbase Syntax.TZ x71 = x6 * x18;
-Tbase Syntax.TZ x72 = x17 * 0x2;
-Tbase Syntax.TZ x73 = x7 * x72;
-Tbase Syntax.TZ x74 = x8 * x16;
-Tbase Syntax.TZ x75 = x73 + x74;
-Tbase Syntax.TZ x76 = x71 + x75;
-Tbase Syntax.TZ x77 = x * x15;
-Tbase Syntax.TZ x78 = x0 * x14;
-Tbase Syntax.TZ x79 = x1 * x13;
-Tbase Syntax.TZ x80 = x2 * x12;
-Tbase Syntax.TZ x81 = x3 * x11;
-Tbase Syntax.TZ x82 = x4 * x10;
-Tbase Syntax.TZ x83 = x5 * x9;
-Tbase Syntax.TZ x84 = x82 + x83;
-Tbase Syntax.TZ x85 = x81 + x84;
-Tbase Syntax.TZ x86 = x80 + x85;
-Tbase Syntax.TZ x87 = x79 + x86;
-Tbase Syntax.TZ x88 = x78 + x87;
-Tbase Syntax.TZ x89 = x77 + x88;
-Tbase Syntax.TZ x90 = 0x9 * x89;
-Tbase Syntax.TZ x91 = x76 + x90;
-Tbase Syntax.TZ x92 = x70 + x91;
-Tbase Syntax.TZ x93 = x92 >> 0x19;
-Tbase Syntax.TZ x94 = x5 * x18;
-Tbase Syntax.TZ x95 = x17 * 0x2;
-Tbase Syntax.TZ x96 = x6 * x95;
-Tbase Syntax.TZ x97 = x16 * 0x2;
-Tbase Syntax.TZ x98 = x7 * x97;
-Tbase Syntax.TZ x99 = x8 * x15;
-Tbase Syntax.TZ x100 = x98 + x99;
-Tbase Syntax.TZ x101 = x96 + x100;
-Tbase Syntax.TZ x102 = x94 + x101;
-Tbase Syntax.TZ x103 = x * x14;
-Tbase Syntax.TZ x104 = x0 * x13;
-Tbase Syntax.TZ x105 = x1 * x12;
-Tbase Syntax.TZ x106 = x2 * x11;
-Tbase Syntax.TZ x107 = x3 * x10;
-Tbase Syntax.TZ x108 = x4 * x9;
-Tbase Syntax.TZ x109 = x107 + x108;
-Tbase Syntax.TZ x110 = x106 + x109;
-Tbase Syntax.TZ x111 = x105 + x110;
-Tbase Syntax.TZ x112 = x104 + x111;
-Tbase Syntax.TZ x113 = x103 + x112;
-Tbase Syntax.TZ x114 = 0x9 * x113;
-Tbase Syntax.TZ x115 = x102 + x114;
-Tbase Syntax.TZ x116 = x93 + x115;
-Tbase Syntax.TZ x117 = x116 >> 0x19;
-Tbase Syntax.TZ x118 = x4 * x18;
-Tbase Syntax.TZ x119 = x17 * 0x2;
-Tbase Syntax.TZ x120 = x5 * x119;
-Tbase Syntax.TZ x121 = x16 * 0x2;
-Tbase Syntax.TZ x122 = x6 * x121;
-Tbase Syntax.TZ x123 = x15 * 0x2;
-Tbase Syntax.TZ x124 = x7 * x123;
-Tbase Syntax.TZ x125 = x8 * x14;
-Tbase Syntax.TZ x126 = x124 + x125;
-Tbase Syntax.TZ x127 = x122 + x126;
-Tbase Syntax.TZ x128 = x120 + x127;
-Tbase Syntax.TZ x129 = x118 + x128;
-Tbase Syntax.TZ x130 = x * x13;
-Tbase Syntax.TZ x131 = x0 * x12;
-Tbase Syntax.TZ x132 = x1 * x11;
-Tbase Syntax.TZ x133 = x2 * x10;
-Tbase Syntax.TZ x134 = x3 * x9;
-Tbase Syntax.TZ x135 = x133 + x134;
-Tbase Syntax.TZ x136 = x132 + x135;
-Tbase Syntax.TZ x137 = x131 + x136;
-Tbase Syntax.TZ x138 = x130 + x137;
-Tbase Syntax.TZ x139 = 0x9 * x138;
-Tbase Syntax.TZ x140 = x129 + x139;
-Tbase Syntax.TZ x141 = x117 + x140;
-Tbase Syntax.TZ x142 = x141 >> 0x19;
-Tbase Syntax.TZ x143 = x3 * x18;
-Tbase Syntax.TZ x144 = x17 * 0x2;
-Tbase Syntax.TZ x145 = x4 * x144;
-Tbase Syntax.TZ x146 = x16 * 0x2;
-Tbase Syntax.TZ x147 = x5 * x146;
-Tbase Syntax.TZ x148 = x15 * 0x2;
-Tbase Syntax.TZ x149 = x6 * x148;
-Tbase Syntax.TZ x150 = x14 * 0x2;
-Tbase Syntax.TZ x151 = x7 * x150;
-Tbase Syntax.TZ x152 = x8 * x13;
-Tbase Syntax.TZ x153 = x151 + x152;
-Tbase Syntax.TZ x154 = x149 + x153;
-Tbase Syntax.TZ x155 = x147 + x154;
-Tbase Syntax.TZ x156 = x145 + x155;
-Tbase Syntax.TZ x157 = x143 + x156;
-Tbase Syntax.TZ x158 = x * x12;
-Tbase Syntax.TZ x159 = x0 * x11;
-Tbase Syntax.TZ x160 = x1 * x10;
-Tbase Syntax.TZ x161 = x2 * x9;
-Tbase Syntax.TZ x162 = x160 + x161;
-Tbase Syntax.TZ x163 = x159 + x162;
-Tbase Syntax.TZ x164 = x158 + x163;
-Tbase Syntax.TZ x165 = 0x9 * x164;
-Tbase Syntax.TZ x166 = x157 + x165;
-Tbase Syntax.TZ x167 = x142 + x166;
-Tbase Syntax.TZ x168 = x167 >> 0x19;
-Tbase Syntax.TZ x169 = x2 * x18;
-Tbase Syntax.TZ x170 = x17 * 0x2;
-Tbase Syntax.TZ x171 = x3 * x170;
-Tbase Syntax.TZ x172 = x16 * 0x2;
-Tbase Syntax.TZ x173 = x4 * x172;
-Tbase Syntax.TZ x174 = x15 * 0x2;
-Tbase Syntax.TZ x175 = x5 * x174;
-Tbase Syntax.TZ x176 = x14 * 0x2;
-Tbase Syntax.TZ x177 = x6 * x176;
-Tbase Syntax.TZ x178 = x13 * 0x2;
-Tbase Syntax.TZ x179 = x7 * x178;
-Tbase Syntax.TZ x180 = x8 * x12;
-Tbase Syntax.TZ x181 = x179 + x180;
-Tbase Syntax.TZ x182 = x177 + x181;
-Tbase Syntax.TZ x183 = x175 + x182;
-Tbase Syntax.TZ x184 = x173 + x183;
-Tbase Syntax.TZ x185 = x171 + x184;
-Tbase Syntax.TZ x186 = x169 + x185;
-Tbase Syntax.TZ x187 = x * x11;
-Tbase Syntax.TZ x188 = x0 * x10;
-Tbase Syntax.TZ x189 = x1 * x9;
-Tbase Syntax.TZ x190 = x188 + x189;
-Tbase Syntax.TZ x191 = x187 + x190;
-Tbase Syntax.TZ x192 = 0x9 * x191;
-Tbase Syntax.TZ x193 = x186 + x192;
-Tbase Syntax.TZ x194 = x168 + x193;
-Tbase Syntax.TZ x195 = x194 >> 0x19;
-Tbase Syntax.TZ x196 = x1 * x18;
-Tbase Syntax.TZ x197 = x17 * 0x2;
-Tbase Syntax.TZ x198 = x2 * x197;
-Tbase Syntax.TZ x199 = x16 * 0x2;
-Tbase Syntax.TZ x200 = x3 * x199;
-Tbase Syntax.TZ x201 = x15 * 0x2;
-Tbase Syntax.TZ x202 = x4 * x201;
-Tbase Syntax.TZ x203 = x14 * 0x2;
-Tbase Syntax.TZ x204 = x5 * x203;
-Tbase Syntax.TZ x205 = x13 * 0x2;
-Tbase Syntax.TZ x206 = x6 * x205;
-Tbase Syntax.TZ x207 = x12 * 0x2;
-Tbase Syntax.TZ x208 = x7 * x207;
-Tbase Syntax.TZ x209 = x8 * x11;
-Tbase Syntax.TZ x210 = x208 + x209;
-Tbase Syntax.TZ x211 = x206 + x210;
-Tbase Syntax.TZ x212 = x204 + x211;
-Tbase Syntax.TZ x213 = x202 + x212;
-Tbase Syntax.TZ x214 = x200 + x213;
-Tbase Syntax.TZ x215 = x198 + x214;
-Tbase Syntax.TZ x216 = x196 + x215;
-Tbase Syntax.TZ x217 = x * x10;
-Tbase Syntax.TZ x218 = x0 * x9;
-Tbase Syntax.TZ x219 = x217 + x218;
-Tbase Syntax.TZ x220 = 0x9 * x219;
-Tbase Syntax.TZ x221 = x216 + x220;
-Tbase Syntax.TZ x222 = x195 + x221;
-Tbase Syntax.TZ x223 = x222 >> 0x19;
-Tbase Syntax.TZ x224 = x0 * x18;
-Tbase Syntax.TZ x225 = x17 * 0x2;
-Tbase Syntax.TZ x226 = x1 * x225;
-Tbase Syntax.TZ x227 = x16 * 0x2;
-Tbase Syntax.TZ x228 = x2 * x227;
-Tbase Syntax.TZ x229 = x15 * 0x2;
-Tbase Syntax.TZ x230 = x3 * x229;
-Tbase Syntax.TZ x231 = x14 * 0x2;
-Tbase Syntax.TZ x232 = x4 * x231;
-Tbase Syntax.TZ x233 = x13 * 0x2;
-Tbase Syntax.TZ x234 = x5 * x233;
-Tbase Syntax.TZ x235 = x12 * 0x2;
-Tbase Syntax.TZ x236 = x6 * x235;
-Tbase Syntax.TZ x237 = x11 * 0x2;
-Tbase Syntax.TZ x238 = x7 * x237;
-Tbase Syntax.TZ x239 = x8 * x10;
-Tbase Syntax.TZ x240 = x238 + x239;
-Tbase Syntax.TZ x241 = x236 + x240;
-Tbase Syntax.TZ x242 = x234 + x241;
-Tbase Syntax.TZ x243 = x232 + x242;
-Tbase Syntax.TZ x244 = x230 + x243;
-Tbase Syntax.TZ x245 = x228 + x244;
-Tbase Syntax.TZ x246 = x226 + x245;
-Tbase Syntax.TZ x247 = x224 + x246;
-Tbase Syntax.TZ x248 = x * x9;
-Tbase Syntax.TZ x249 = 0x9 * x248;
-Tbase Syntax.TZ x250 = x247 + x249;
-Tbase Syntax.TZ x251 = x223 + x250;
-Tbase Syntax.TZ x252 = x251 >> 0x19;
-Tbase Syntax.TZ x253 = x * x18;
-Tbase Syntax.TZ x254 = x17 * 0x2;
-Tbase Syntax.TZ x255 = x0 * x254;
-Tbase Syntax.TZ x256 = x16 * 0x2;
-Tbase Syntax.TZ x257 = x1 * x256;
-Tbase Syntax.TZ x258 = x15 * 0x2;
-Tbase Syntax.TZ x259 = x2 * x258;
-Tbase Syntax.TZ x260 = x14 * 0x2;
-Tbase Syntax.TZ x261 = x3 * x260;
-Tbase Syntax.TZ x262 = x13 * 0x2;
-Tbase Syntax.TZ x263 = x4 * x262;
-Tbase Syntax.TZ x264 = x12 * 0x2;
-Tbase Syntax.TZ x265 = x5 * x264;
-Tbase Syntax.TZ x266 = x11 * 0x2;
-Tbase Syntax.TZ x267 = x6 * x266;
-Tbase Syntax.TZ x268 = x10 * 0x2;
-Tbase Syntax.TZ x269 = x7 * x268;
-Tbase Syntax.TZ x270 = x8 * x9;
-Tbase Syntax.TZ x271 = x269 + x270;
-Tbase Syntax.TZ x272 = x267 + x271;
-Tbase Syntax.TZ x273 = x265 + x272;
-Tbase Syntax.TZ x274 = x263 + x273;
-Tbase Syntax.TZ x275 = x261 + x274;
-Tbase Syntax.TZ x276 = x259 + x275;
-Tbase Syntax.TZ x277 = x257 + x276;
-Tbase Syntax.TZ x278 = x255 + x277;
-Tbase Syntax.TZ x279 = x253 + x278;
-Tbase Syntax.TZ x280 = x252 + x279;
-Tbase Syntax.TZ x281 = x280 >> 0x19;
-Tbase Syntax.TZ x282 = 0x9 * x281;
-Tbase Syntax.TZ x283 = x47 & 0x3ffffff;
-Tbase Syntax.TZ x284 = x282 + x283;
-Tbase Syntax.TZ x285 = x284 >> 0x1a;
-Tbase Syntax.TZ x286 = x69 & 0x1ffffff;
-Tbase Syntax.TZ x287 = x285 + x286;
-Tbase Syntax.TZ x288 = x280 & 0x1ffffff;
-Tbase Syntax.TZ x289 = x251 & 0x1ffffff;
-Tbase Syntax.TZ x290 = x222 & 0x1ffffff;
-Tbase Syntax.TZ x291 = x194 & 0x1ffffff;
-Tbase Syntax.TZ x292 = x167 & 0x1ffffff;
-Tbase Syntax.TZ x293 = x141 & 0x1ffffff;
-Tbase Syntax.TZ x294 = x116 & 0x1ffffff;
-Tbase Syntax.TZ x295 = x287 >> 0x19;
-Tbase Syntax.TZ x296 = x92 & 0x1ffffff;
-Tbase Syntax.TZ x297 = x295 + x296;
-Tbase Syntax.TZ x298 = x287 & 0x1ffffff;
-Tbase Syntax.TZ x299 = x284 & 0x3ffffff;
-(Return x288, Return x289, Return x290, Return x291,
-Return x292, Return x293, Return x294, Return x297,
-Return x298, Return x299)
- : forall var : Syntax.base_type -> Type,
- expr Syntax.base_type Syntax.op
- (Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF2519_32Reflective/Reified/MulDisplay.v b/src/SpecificGen/GF2519_32Reflective/Reified/MulDisplay.v
deleted file mode 100644
index 74541b3a5..000000000
--- a/src/SpecificGen/GF2519_32Reflective/Reified/MulDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF2519_32Reflective.Reified.Mul.
-Require Export Crypto.Reflection.Z.CNotations.
-
-Print rmulW.
diff --git a/src/SpecificGen/GF2519_32Reflective/Reified/MulJavaDisplay.log b/src/SpecificGen/GF2519_32Reflective/Reified/MulJavaDisplay.log
deleted file mode 100644
index edcc8bbd0..000000000
--- a/src/SpecificGen/GF2519_32Reflective/Reified/MulJavaDisplay.log
+++ /dev/null
@@ -1,317 +0,0 @@
-rmulW =
-fun var : Syntax.base_type -> Type =>
-λ
-x x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17
- x18 : var Syntax.TZ,
-Tbase Syntax.TZ x19 = x8 * x18;
-Tbase Syntax.TZ x20 = x17 * 0x2;
-Tbase Syntax.TZ x21 = x * x20;
-Tbase Syntax.TZ x22 = x16 * 0x2;
-Tbase Syntax.TZ x23 = x0 * x22;
-Tbase Syntax.TZ x24 = x15 * 0x2;
-Tbase Syntax.TZ x25 = x1 * x24;
-Tbase Syntax.TZ x26 = x14 * 0x2;
-Tbase Syntax.TZ x27 = x2 * x26;
-Tbase Syntax.TZ x28 = x13 * 0x2;
-Tbase Syntax.TZ x29 = x3 * x28;
-Tbase Syntax.TZ x30 = x12 * 0x2;
-Tbase Syntax.TZ x31 = x4 * x30;
-Tbase Syntax.TZ x32 = x11 * 0x2;
-Tbase Syntax.TZ x33 = x5 * x32;
-Tbase Syntax.TZ x34 = x10 * 0x2;
-Tbase Syntax.TZ x35 = x6 * x34;
-Tbase Syntax.TZ x36 = x9 * 0x2;
-Tbase Syntax.TZ x37 = x7 * x36;
-Tbase Syntax.TZ x38 = x35 + x37;
-Tbase Syntax.TZ x39 = x33 + x38;
-Tbase Syntax.TZ x40 = x31 + x39;
-Tbase Syntax.TZ x41 = x29 + x40;
-Tbase Syntax.TZ x42 = x27 + x41;
-Tbase Syntax.TZ x43 = x25 + x42;
-Tbase Syntax.TZ x44 = x23 + x43;
-Tbase Syntax.TZ x45 = x21 + x44;
-Tbase Syntax.TZ x46 = 0x9 * x45;
-Tbase Syntax.TZ x47 = x19 + x46;
-Tbase Syntax.TZ x48 = x47 >>> 0x1a;
-Tbase Syntax.TZ x49 = x7 * x18;
-Tbase Syntax.TZ x50 = x8 * x17;
-Tbase Syntax.TZ x51 = x49 + x50;
-Tbase Syntax.TZ x52 = x * x16;
-Tbase Syntax.TZ x53 = x0 * x15;
-Tbase Syntax.TZ x54 = x1 * x14;
-Tbase Syntax.TZ x55 = x2 * x13;
-Tbase Syntax.TZ x56 = x3 * x12;
-Tbase Syntax.TZ x57 = x4 * x11;
-Tbase Syntax.TZ x58 = x5 * x10;
-Tbase Syntax.TZ x59 = x6 * x9;
-Tbase Syntax.TZ x60 = x58 + x59;
-Tbase Syntax.TZ x61 = x57 + x60;
-Tbase Syntax.TZ x62 = x56 + x61;
-Tbase Syntax.TZ x63 = x55 + x62;
-Tbase Syntax.TZ x64 = x54 + x63;
-Tbase Syntax.TZ x65 = x53 + x64;
-Tbase Syntax.TZ x66 = x52 + x65;
-Tbase Syntax.TZ x67 = 0x9 * x66;
-Tbase Syntax.TZ x68 = x51 + x67;
-Tbase Syntax.TZ x69 = x48 + x68;
-Tbase Syntax.TZ x70 = x69 >>> 0x19;
-Tbase Syntax.TZ x71 = x6 * x18;
-Tbase Syntax.TZ x72 = x17 * 0x2;
-Tbase Syntax.TZ x73 = x7 * x72;
-Tbase Syntax.TZ x74 = x8 * x16;
-Tbase Syntax.TZ x75 = x73 + x74;
-Tbase Syntax.TZ x76 = x71 + x75;
-Tbase Syntax.TZ x77 = x * x15;
-Tbase Syntax.TZ x78 = x0 * x14;
-Tbase Syntax.TZ x79 = x1 * x13;
-Tbase Syntax.TZ x80 = x2 * x12;
-Tbase Syntax.TZ x81 = x3 * x11;
-Tbase Syntax.TZ x82 = x4 * x10;
-Tbase Syntax.TZ x83 = x5 * x9;
-Tbase Syntax.TZ x84 = x82 + x83;
-Tbase Syntax.TZ x85 = x81 + x84;
-Tbase Syntax.TZ x86 = x80 + x85;
-Tbase Syntax.TZ x87 = x79 + x86;
-Tbase Syntax.TZ x88 = x78 + x87;
-Tbase Syntax.TZ x89 = x77 + x88;
-Tbase Syntax.TZ x90 = 0x9 * x89;
-Tbase Syntax.TZ x91 = x76 + x90;
-Tbase Syntax.TZ x92 = x70 + x91;
-Tbase Syntax.TZ x93 = x92 >>> 0x19;
-Tbase Syntax.TZ x94 = x5 * x18;
-Tbase Syntax.TZ x95 = x17 * 0x2;
-Tbase Syntax.TZ x96 = x6 * x95;
-Tbase Syntax.TZ x97 = x16 * 0x2;
-Tbase Syntax.TZ x98 = x7 * x97;
-Tbase Syntax.TZ x99 = x8 * x15;
-Tbase Syntax.TZ x100 = x98 + x99;
-Tbase Syntax.TZ x101 = x96 + x100;
-Tbase Syntax.TZ x102 = x94 + x101;
-Tbase Syntax.TZ x103 = x * x14;
-Tbase Syntax.TZ x104 = x0 * x13;
-Tbase Syntax.TZ x105 = x1 * x12;
-Tbase Syntax.TZ x106 = x2 * x11;
-Tbase Syntax.TZ x107 = x3 * x10;
-Tbase Syntax.TZ x108 = x4 * x9;
-Tbase Syntax.TZ x109 = x107 + x108;
-Tbase Syntax.TZ x110 = x106 + x109;
-Tbase Syntax.TZ x111 = x105 + x110;
-Tbase Syntax.TZ x112 = x104 + x111;
-Tbase Syntax.TZ x113 = x103 + x112;
-Tbase Syntax.TZ x114 = 0x9 * x113;
-Tbase Syntax.TZ x115 = x102 + x114;
-Tbase Syntax.TZ x116 = x93 + x115;
-Tbase Syntax.TZ x117 = x116 >>> 0x19;
-Tbase Syntax.TZ x118 = x4 * x18;
-Tbase Syntax.TZ x119 = x17 * 0x2;
-Tbase Syntax.TZ x120 = x5 * x119;
-Tbase Syntax.TZ x121 = x16 * 0x2;
-Tbase Syntax.TZ x122 = x6 * x121;
-Tbase Syntax.TZ x123 = x15 * 0x2;
-Tbase Syntax.TZ x124 = x7 * x123;
-Tbase Syntax.TZ x125 = x8 * x14;
-Tbase Syntax.TZ x126 = x124 + x125;
-Tbase Syntax.TZ x127 = x122 + x126;
-Tbase Syntax.TZ x128 = x120 + x127;
-Tbase Syntax.TZ x129 = x118 + x128;
-Tbase Syntax.TZ x130 = x * x13;
-Tbase Syntax.TZ x131 = x0 * x12;
-Tbase Syntax.TZ x132 = x1 * x11;
-Tbase Syntax.TZ x133 = x2 * x10;
-Tbase Syntax.TZ x134 = x3 * x9;
-Tbase Syntax.TZ x135 = x133 + x134;
-Tbase Syntax.TZ x136 = x132 + x135;
-Tbase Syntax.TZ x137 = x131 + x136;
-Tbase Syntax.TZ x138 = x130 + x137;
-Tbase Syntax.TZ x139 = 0x9 * x138;
-Tbase Syntax.TZ x140 = x129 + x139;
-Tbase Syntax.TZ x141 = x117 + x140;
-Tbase Syntax.TZ x142 = x141 >>> 0x19;
-Tbase Syntax.TZ x143 = x3 * x18;
-Tbase Syntax.TZ x144 = x17 * 0x2;
-Tbase Syntax.TZ x145 = x4 * x144;
-Tbase Syntax.TZ x146 = x16 * 0x2;
-Tbase Syntax.TZ x147 = x5 * x146;
-Tbase Syntax.TZ x148 = x15 * 0x2;
-Tbase Syntax.TZ x149 = x6 * x148;
-Tbase Syntax.TZ x150 = x14 * 0x2;
-Tbase Syntax.TZ x151 = x7 * x150;
-Tbase Syntax.TZ x152 = x8 * x13;
-Tbase Syntax.TZ x153 = x151 + x152;
-Tbase Syntax.TZ x154 = x149 + x153;
-Tbase Syntax.TZ x155 = x147 + x154;
-Tbase Syntax.TZ x156 = x145 + x155;
-Tbase Syntax.TZ x157 = x143 + x156;
-Tbase Syntax.TZ x158 = x * x12;
-Tbase Syntax.TZ x159 = x0 * x11;
-Tbase Syntax.TZ x160 = x1 * x10;
-Tbase Syntax.TZ x161 = x2 * x9;
-Tbase Syntax.TZ x162 = x160 + x161;
-Tbase Syntax.TZ x163 = x159 + x162;
-Tbase Syntax.TZ x164 = x158 + x163;
-Tbase Syntax.TZ x165 = 0x9 * x164;
-Tbase Syntax.TZ x166 = x157 + x165;
-Tbase Syntax.TZ x167 = x142 + x166;
-Tbase Syntax.TZ x168 = x167 >>> 0x19;
-Tbase Syntax.TZ x169 = x2 * x18;
-Tbase Syntax.TZ x170 = x17 * 0x2;
-Tbase Syntax.TZ x171 = x3 * x170;
-Tbase Syntax.TZ x172 = x16 * 0x2;
-Tbase Syntax.TZ x173 = x4 * x172;
-Tbase Syntax.TZ x174 = x15 * 0x2;
-Tbase Syntax.TZ x175 = x5 * x174;
-Tbase Syntax.TZ x176 = x14 * 0x2;
-Tbase Syntax.TZ x177 = x6 * x176;
-Tbase Syntax.TZ x178 = x13 * 0x2;
-Tbase Syntax.TZ x179 = x7 * x178;
-Tbase Syntax.TZ x180 = x8 * x12;
-Tbase Syntax.TZ x181 = x179 + x180;
-Tbase Syntax.TZ x182 = x177 + x181;
-Tbase Syntax.TZ x183 = x175 + x182;
-Tbase Syntax.TZ x184 = x173 + x183;
-Tbase Syntax.TZ x185 = x171 + x184;
-Tbase Syntax.TZ x186 = x169 + x185;
-Tbase Syntax.TZ x187 = x * x11;
-Tbase Syntax.TZ x188 = x0 * x10;
-Tbase Syntax.TZ x189 = x1 * x9;
-Tbase Syntax.TZ x190 = x188 + x189;
-Tbase Syntax.TZ x191 = x187 + x190;
-Tbase Syntax.TZ x192 = 0x9 * x191;
-Tbase Syntax.TZ x193 = x186 + x192;
-Tbase Syntax.TZ x194 = x168 + x193;
-Tbase Syntax.TZ x195 = x194 >>> 0x19;
-Tbase Syntax.TZ x196 = x1 * x18;
-Tbase Syntax.TZ x197 = x17 * 0x2;
-Tbase Syntax.TZ x198 = x2 * x197;
-Tbase Syntax.TZ x199 = x16 * 0x2;
-Tbase Syntax.TZ x200 = x3 * x199;
-Tbase Syntax.TZ x201 = x15 * 0x2;
-Tbase Syntax.TZ x202 = x4 * x201;
-Tbase Syntax.TZ x203 = x14 * 0x2;
-Tbase Syntax.TZ x204 = x5 * x203;
-Tbase Syntax.TZ x205 = x13 * 0x2;
-Tbase Syntax.TZ x206 = x6 * x205;
-Tbase Syntax.TZ x207 = x12 * 0x2;
-Tbase Syntax.TZ x208 = x7 * x207;
-Tbase Syntax.TZ x209 = x8 * x11;
-Tbase Syntax.TZ x210 = x208 + x209;
-Tbase Syntax.TZ x211 = x206 + x210;
-Tbase Syntax.TZ x212 = x204 + x211;
-Tbase Syntax.TZ x213 = x202 + x212;
-Tbase Syntax.TZ x214 = x200 + x213;
-Tbase Syntax.TZ x215 = x198 + x214;
-Tbase Syntax.TZ x216 = x196 + x215;
-Tbase Syntax.TZ x217 = x * x10;
-Tbase Syntax.TZ x218 = x0 * x9;
-Tbase Syntax.TZ x219 = x217 + x218;
-Tbase Syntax.TZ x220 = 0x9 * x219;
-Tbase Syntax.TZ x221 = x216 + x220;
-Tbase Syntax.TZ x222 = x195 + x221;
-Tbase Syntax.TZ x223 = x222 >>> 0x19;
-Tbase Syntax.TZ x224 = x0 * x18;
-Tbase Syntax.TZ x225 = x17 * 0x2;
-Tbase Syntax.TZ x226 = x1 * x225;
-Tbase Syntax.TZ x227 = x16 * 0x2;
-Tbase Syntax.TZ x228 = x2 * x227;
-Tbase Syntax.TZ x229 = x15 * 0x2;
-Tbase Syntax.TZ x230 = x3 * x229;
-Tbase Syntax.TZ x231 = x14 * 0x2;
-Tbase Syntax.TZ x232 = x4 * x231;
-Tbase Syntax.TZ x233 = x13 * 0x2;
-Tbase Syntax.TZ x234 = x5 * x233;
-Tbase Syntax.TZ x235 = x12 * 0x2;
-Tbase Syntax.TZ x236 = x6 * x235;
-Tbase Syntax.TZ x237 = x11 * 0x2;
-Tbase Syntax.TZ x238 = x7 * x237;
-Tbase Syntax.TZ x239 = x8 * x10;
-Tbase Syntax.TZ x240 = x238 + x239;
-Tbase Syntax.TZ x241 = x236 + x240;
-Tbase Syntax.TZ x242 = x234 + x241;
-Tbase Syntax.TZ x243 = x232 + x242;
-Tbase Syntax.TZ x244 = x230 + x243;
-Tbase Syntax.TZ x245 = x228 + x244;
-Tbase Syntax.TZ x246 = x226 + x245;
-Tbase Syntax.TZ x247 = x224 + x246;
-Tbase Syntax.TZ x248 = x * x9;
-Tbase Syntax.TZ x249 = 0x9 * x248;
-Tbase Syntax.TZ x250 = x247 + x249;
-Tbase Syntax.TZ x251 = x223 + x250;
-Tbase Syntax.TZ x252 = x251 >>> 0x19;
-Tbase Syntax.TZ x253 = x * x18;
-Tbase Syntax.TZ x254 = x17 * 0x2;
-Tbase Syntax.TZ x255 = x0 * x254;
-Tbase Syntax.TZ x256 = x16 * 0x2;
-Tbase Syntax.TZ x257 = x1 * x256;
-Tbase Syntax.TZ x258 = x15 * 0x2;
-Tbase Syntax.TZ x259 = x2 * x258;
-Tbase Syntax.TZ x260 = x14 * 0x2;
-Tbase Syntax.TZ x261 = x3 * x260;
-Tbase Syntax.TZ x262 = x13 * 0x2;
-Tbase Syntax.TZ x263 = x4 * x262;
-Tbase Syntax.TZ x264 = x12 * 0x2;
-Tbase Syntax.TZ x265 = x5 * x264;
-Tbase Syntax.TZ x266 = x11 * 0x2;
-Tbase Syntax.TZ x267 = x6 * x266;
-Tbase Syntax.TZ x268 = x10 * 0x2;
-Tbase Syntax.TZ x269 = x7 * x268;
-Tbase Syntax.TZ x270 = x8 * x9;
-Tbase Syntax.TZ x271 = x269 + x270;
-Tbase Syntax.TZ x272 = x267 + x271;
-Tbase Syntax.TZ x273 = x265 + x272;
-Tbase Syntax.TZ x274 = x263 + x273;
-Tbase Syntax.TZ x275 = x261 + x274;
-Tbase Syntax.TZ x276 = x259 + x275;
-Tbase Syntax.TZ x277 = x257 + x276;
-Tbase Syntax.TZ x278 = x255 + x277;
-Tbase Syntax.TZ x279 = x253 + x278;
-Tbase Syntax.TZ x280 = x252 + x279;
-Tbase Syntax.TZ x281 = x280 >>> 0x19;
-Tbase Syntax.TZ x282 = 0x9 * x281;
-Tbase Syntax.TZ x283 = x47 & 0x3ffffff;
-Tbase Syntax.TZ x284 = x282 + x283;
-Tbase Syntax.TZ x285 = x284 >>> 0x1a;
-Tbase Syntax.TZ x286 = x69 & 0x1ffffff;
-Tbase Syntax.TZ x287 = x285 + x286;
-Tbase Syntax.TZ x288 = x280 & 0x1ffffff;
-Tbase Syntax.TZ x289 = x251 & 0x1ffffff;
-Tbase Syntax.TZ x290 = x222 & 0x1ffffff;
-Tbase Syntax.TZ x291 = x194 & 0x1ffffff;
-Tbase Syntax.TZ x292 = x167 & 0x1ffffff;
-Tbase Syntax.TZ x293 = x141 & 0x1ffffff;
-Tbase Syntax.TZ x294 = x116 & 0x1ffffff;
-Tbase Syntax.TZ x295 = x287 >>> 0x19;
-Tbase Syntax.TZ x296 = x92 & 0x1ffffff;
-Tbase Syntax.TZ x297 = x295 + x296;
-Tbase Syntax.TZ x298 = x287 & 0x1ffffff;
-Tbase Syntax.TZ x299 = x284 & 0x3ffffff;
-(Return x288, Return x289, Return x290, Return x291,
-Return x292, Return x293, Return x294, Return x297,
-Return x298, Return x299)
- : forall var : Syntax.base_type -> Type,
- expr Syntax.base_type Syntax.op
- (Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF2519_32Reflective/Reified/MulJavaDisplay.v b/src/SpecificGen/GF2519_32Reflective/Reified/MulJavaDisplay.v
deleted file mode 100644
index 5b5740fc3..000000000
--- a/src/SpecificGen/GF2519_32Reflective/Reified/MulJavaDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF2519_32Reflective.Reified.Mul.
-Require Export Crypto.Reflection.Z.JavaNotations.
-
-Print rmulW.
diff --git a/src/SpecificGen/GF2519_32Reflective/Reified/Opp.v b/src/SpecificGen/GF2519_32Reflective/Reified/Opp.v
deleted file mode 100644
index 4d38eb057..000000000
--- a/src/SpecificGen/GF2519_32Reflective/Reified/Opp.v
+++ /dev/null
@@ -1,12 +0,0 @@
-Require Import Crypto.SpecificGen.GF2519_32Reflective.CommonUnOp.
-
-Definition roppZ_sig : rexpr_unop_sig opp. Proof. reify_sig. Defined.
-Definition roppW := Eval vm_compute in rword_of_Z roppZ_sig.
-Lemma roppW_correct_and_bounded_gen : correct_and_bounded_genT roppW roppZ_sig.
-Proof. rexpr_correct. Qed.
-Definition ropp_output_bounds := Eval vm_compute in compute_bounds roppW ExprUnOp_bounds.
-
-Local Open Scope string_scope.
-Compute ("Opp", compute_bounds_for_display roppW ExprUnOp_bounds).
-Compute ("Opp overflows? ", sanity_compute roppW ExprUnOp_bounds).
-Compute ("Opp overflows (error if it does)? ", sanity_check roppW ExprUnOp_bounds).
diff --git a/src/SpecificGen/GF2519_32Reflective/Reified/Pack.v b/src/SpecificGen/GF2519_32Reflective/Reified/Pack.v
deleted file mode 100644
index f82b07842..000000000
--- a/src/SpecificGen/GF2519_32Reflective/Reified/Pack.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF2519_32Reflective.CommonUnOpFEToWire.
-
-Definition rpackZ_sig : rexpr_unop_FEToWire_sig pack. Proof. reify_sig. Defined.
-Definition rpackW := Eval vm_compute in rword_of_Z rpackZ_sig.
-Lemma rpackW_correct_and_bounded_gen : correct_and_bounded_genT rpackW rpackZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rpack_output_bounds := Eval vm_compute in compute_bounds rpackW ExprUnOpFEToWire_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rpackW_correct_and_bounded
- := ExprUnOpFEToWire_correct_and_bounded
- rpackW pack rpackZ_sig rpackW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Pack", compute_bounds_for_display rpackW ExprUnOpFEToWire_bounds).
-Compute ("Pack overflows? ", sanity_compute rpackW ExprUnOpFEToWire_bounds).
-Compute ("Pack overflows (error if it does)? ", sanity_check rpackW ExprUnOpFEToWire_bounds).
diff --git a/src/SpecificGen/GF2519_32Reflective/Reified/PreFreeze.v b/src/SpecificGen/GF2519_32Reflective/Reified/PreFreeze.v
deleted file mode 100644
index fd509d77c..000000000
--- a/src/SpecificGen/GF2519_32Reflective/Reified/PreFreeze.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF2519_32Reflective.CommonUnOp.
-
-Definition rprefreezeZ_sig : rexpr_unop_sig prefreeze. Proof. reify_sig. Defined.
-Definition rprefreezeW := Eval vm_compute in rword_of_Z rprefreezeZ_sig.
-Lemma rprefreezeW_correct_and_bounded_gen : correct_and_bounded_genT rprefreezeW rprefreezeZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rprefreeze_output_bounds := Eval vm_compute in compute_bounds rprefreezeW ExprUnOp_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rprefreezeW_correct_and_bounded
- := ExprUnOp_correct_and_bounded
- rprefreezeW prefreeze rprefreezeZ_sig rprefreezeW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("PreFreeze", compute_bounds_for_display rprefreezeW ExprUnOp_bounds).
-Compute ("PreFreeze overflows? ", sanity_compute rprefreezeW ExprUnOp_bounds).
-Compute ("PreFreeze overflows (error if it does)? ", sanity_check rprefreezeW ExprUnOp_bounds).
diff --git a/src/SpecificGen/GF2519_32Reflective/Reified/Sub.v b/src/SpecificGen/GF2519_32Reflective/Reified/Sub.v
deleted file mode 100644
index 1875487fb..000000000
--- a/src/SpecificGen/GF2519_32Reflective/Reified/Sub.v
+++ /dev/null
@@ -1,12 +0,0 @@
-Require Import Crypto.SpecificGen.GF2519_32Reflective.CommonBinOp.
-
-Definition rsubZ_sig : rexpr_binop_sig sub. Proof. reify_sig. Defined.
-Definition rsubW := Eval vm_compute in rword_of_Z rsubZ_sig.
-Lemma rsubW_correct_and_bounded_gen : correct_and_bounded_genT rsubW rsubZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rsub_output_bounds := Eval vm_compute in compute_bounds rsubW ExprBinOp_bounds.
-
-Local Open Scope string_scope.
-Compute ("Sub", compute_bounds_for_display rsubW ExprBinOp_bounds).
-Compute ("Sub overflows? ", sanity_compute rsubW ExprBinOp_bounds).
-Compute ("Sub overflows (error if it does)? ", sanity_check rsubW ExprBinOp_bounds).
diff --git a/src/SpecificGen/GF2519_32Reflective/Reified/Unpack.v b/src/SpecificGen/GF2519_32Reflective/Reified/Unpack.v
deleted file mode 100644
index f839f4f0c..000000000
--- a/src/SpecificGen/GF2519_32Reflective/Reified/Unpack.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF2519_32Reflective.CommonUnOpWireToFE.
-
-Definition runpackZ_sig : rexpr_unop_WireToFE_sig unpack. Proof. reify_sig. Defined.
-Definition runpackW := Eval vm_compute in rword_of_Z runpackZ_sig.
-Lemma runpackW_correct_and_bounded_gen : correct_and_bounded_genT runpackW runpackZ_sig.
-Proof. rexpr_correct. Qed.
-Definition runpack_output_bounds := Eval vm_compute in compute_bounds runpackW ExprUnOpWireToFE_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition runpackW_correct_and_bounded
- := ExprUnOpWireToFE_correct_and_bounded
- runpackW unpack runpackZ_sig runpackW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Unpack", compute_bounds_for_display runpackW ExprUnOpWireToFE_bounds).
-Compute ("Unpack overflows? ", sanity_compute runpackW ExprUnOpWireToFE_bounds).
-Compute ("Unpack overflows (error if it does)? ", sanity_check runpackW ExprUnOpWireToFE_bounds).
diff --git a/src/SpecificGen/GF2519_32ReflectiveAddCoordinates.v b/src/SpecificGen/GF2519_32ReflectiveAddCoordinates.v
deleted file mode 100644
index 4010eac57..000000000
--- a/src/SpecificGen/GF2519_32ReflectiveAddCoordinates.v
+++ /dev/null
@@ -1,77 +0,0 @@
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParams.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParamProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemOpt.
-Require Export Crypto.SpecificGen.GF2519_32.
-Require Import Crypto.SpecificGen.GF2519_32BoundedCommon.
-Require Import Crypto.Reflection.Reify.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.Map.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Crypto.Reflection.Z.Interpretations64.Relations.
-Require Import Crypto.Reflection.Z.Interpretations64.RelationsCombinations.
-Require Import Crypto.Reflection.Z.Reify.
-Require Import Crypto.Reflection.Z.Syntax.
-Require Import Crypto.SpecificGen.GF2519_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF2519_32Reflective.Reified.AddCoordinates.
-Require Import Bedrock.Word Crypto.Util.WordUtil.
-Require Import Coq.Lists.List Crypto.Util.ListUtil.
-Require Import Crypto.Tactics.VerdiTactics.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Notations.
-Require Import Crypto.Util.Bool.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Algebra.
-Import ListNotations.
-Require Import Coq.ZArith.ZArith Coq.ZArith.Zpower Coq.ZArith.ZArith Coq.ZArith.Znumtheory.
-Local Open Scope Z.
-
-Time Definition radd_coordinates : Expr _ := Eval vm_compute in radd_coordinatesW.
-
-Declare Reduction asm_interp_add_coordinates
- := cbv beta iota delta
- [id
- interp_bexpr interp_uexpr interp_uexpr_FEToWire interp_uexpr_FEToZ interp_uexpr_WireToFE interp_9_4expr
- radd_coordinates
- curry_binop_fe2519_32W curry_unop_fe2519_32W curry_unop_wire_digitsW curry_9op_fe2519_32W
- WordW.interp_op WordW.interp_base_type
- Z.interp_op Z.interp_base_type
- Z.Syntax.interp_op Z.Syntax.interp_base_type
- mapf_interp_flat_type WordW.interp_base_type word64ize
- Interp interp interp_flat_type interpf interpf_step interp_flat_type fst snd].
-Ltac asm_interp_add_coordinates
- := cbv beta iota delta
- [id
- interp_bexpr interp_uexpr interp_uexpr_FEToWire interp_uexpr_FEToZ interp_uexpr_WireToFE interp_9_4expr
- radd_coordinates
- curry_binop_fe2519_32W curry_unop_fe2519_32W curry_unop_wire_digitsW curry_9op_fe2519_32W
- WordW.interp_op WordW.interp_base_type
- Z.interp_op Z.interp_base_type
- Z.Syntax.interp_op Z.Syntax.interp_base_type
- mapf_interp_flat_type WordW.interp_base_type word64ize
- Interp interp interp_flat_type interpf interp_flat_type fst snd].
-
-(*
-Time Definition interp_radd_coordinates : SpecificGen.GF2519_32BoundedCommon.fe2519_32W
- -> SpecificGen.GF2519_32BoundedCommon.fe2519_32W
- -> SpecificGen.GF2519_32BoundedCommon.fe2519_32W
- -> SpecificGen.GF2519_32BoundedCommon.fe2519_32W
- -> SpecificGen.GF2519_32BoundedCommon.fe2519_32W
- -> SpecificGen.GF2519_32BoundedCommon.fe2519_32W
- -> SpecificGen.GF2519_32BoundedCommon.fe2519_32W
- -> SpecificGen.GF2519_32BoundedCommon.fe2519_32W
- -> SpecificGen.GF2519_32BoundedCommon.fe2519_32W
- -> Tuple.tuple SpecificGen.GF2519_32BoundedCommon.fe2519_32W 4
- := Eval asm_interp_add_coordinates in interp_9_4expr radd_coordinates.
-(*Print interp_radd_coordinates.*)
-Time Definition interp_radd_coordinates_correct : interp_radd_coordinates = interp_9_4expr radd_coordinates := eq_refl.
-
-Lemma radd_coordinates_correct_and_bounded : op9_4_correct_and_bounded radd_coordinates add_coordinates.
-Proof. exact_no_check radd_coordinatesW_correct_and_bounded. Time Qed.
-*)
diff --git a/src/SpecificGen/GF25519_32.v b/src/SpecificGen/GF25519_32.v
deleted file mode 100644
index 2221c9860..000000000
--- a/src/SpecificGen/GF25519_32.v
+++ /dev/null
@@ -1,782 +0,0 @@
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParams.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParamProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemOpt.
-Require Import Coq.Lists.List Crypto.Util.ListUtil.
-Require Import Crypto.Tactics.VerdiTactics.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Tower.
-Require Import Crypto.Util.Notations.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Algebra.
-Import ListNotations.
-Require Import Coq.ZArith.ZArith Coq.ZArith.Zpower Coq.ZArith.ZArith Coq.ZArith.Znumtheory.
-Local Open Scope Z.
-
-(* BEGIN precomputation. *)
-
-Definition modulus : Z := Eval compute in 2^255 - 19.
-Lemma prime_modulus : prime modulus. Admitted.
-Definition int_width := Eval compute in (2 * 32)%Z.
-Definition freeze_input_bound := 32%Z.
-
-Instance params25519_32 : PseudoMersenneBaseParams modulus.
- construct_params prime_modulus 10%nat 255.
-Defined.
-
-Definition length_fe25519_32 := Eval compute in length limb_widths.
-Definition fe25519_32 := Eval compute in (tuple Z length_fe25519_32).
-
-Definition mul2modulus : fe25519_32 :=
- Eval compute in (from_list_default 0%Z (length limb_widths) (construct_mul2modulus params25519_32)).
-
-Instance subCoeff : SubtractionCoefficient.
- apply Build_SubtractionCoefficient with (coeff := mul2modulus).
- vm_decide.
-Defined.
-
-Instance carryChain : CarryChain limb_widths.
- apply Build_CarryChain with (carry_chain := (rev [0;1;2;3;4;5;6;7;8;9;0;1])%nat).
- intros.
- repeat (destruct H as [|H]; [subst; vm_compute; repeat constructor | ]).
- contradiction H.
-Defined.
-
-Definition freezePreconditions : FreezePreconditions freeze_input_bound int_width.
-Proof.
- constructor; compute_preconditions.
-Defined.
-
-(* Wire format for [pack] and [unpack] *)
-Definition wire_widths := Eval compute in (repeat 32 7 ++ 31 :: nil).
-
-Definition wire_digits := Eval compute in (tuple Z (length wire_widths)).
-
-Lemma wire_widths_nonneg : forall w, In w wire_widths -> 0 <= w.
-Proof.
- intros.
- repeat (destruct H as [|H]; [subst; vm_compute; congruence | ]).
- contradiction H.
-Qed.
-
-Lemma bits_eq : sum_firstn limb_widths (length limb_widths) = sum_firstn wire_widths (length wire_widths).
-Proof.
- reflexivity.
-Qed.
-
-Lemma modulus_gt_2 : 2 < modulus. Proof. cbv; congruence. Qed.
-
-(* Temporarily, we'll use addition chains equivalent to double-and-add. This is pending
- finding the real, more optimal chains from previous work. *)
-Fixpoint pow2Chain'' p (pow2_index acc_index : nat) chain_acc : list (nat * nat) :=
- match p with
- | xI p' => pow2Chain'' p' 1 0
- (chain_acc ++ (pow2_index, pow2_index) :: (0%nat, S acc_index) :: nil)
- | xO p' => pow2Chain'' p' 0 (S acc_index)
- (chain_acc ++ (pow2_index, pow2_index)::nil)
- | xH => (chain_acc ++ (pow2_index, pow2_index) :: (0%nat, S acc_index) :: nil)
- end.
-
-Fixpoint pow2Chain' p index :=
- match p with
- | xI p' => pow2Chain'' p' 0 0 (repeat (0,0)%nat index)
- | xO p' => pow2Chain' p' (S index)
- | xH => repeat (0,0)%nat index
- end.
-
-Definition pow2_chain p :=
- match p with
- | xH => nil
- | _ => pow2Chain' p 0
- end.
-
-Definition invChain := Eval compute in pow2_chain (Z.to_pos (modulus - 2)).
-
-Instance inv_ec : ExponentiationChain (modulus - 2).
- apply Build_ExponentiationChain with (chain := invChain).
- reflexivity.
-Defined.
-
-(* Note : use caution copying square root code to other primes. The (modulus / 8 + 1) chains are
- for primes that are 5 mod 8; if the prime is 3 mod 4 then use (modulus / 4 + 1). *)
-Definition sqrtChain := Eval compute in pow2_chain (Z.to_pos (modulus / 8 + 1)).
-
-Instance sqrt_ec : ExponentiationChain (modulus / 8 + 1).
- apply Build_ExponentiationChain with (chain := sqrtChain).
- reflexivity.
-Defined.
-
-Arguments chain {_ _ _} _.
-
-(* END precomputation *)
-
-(* Precompute constants *)
-Definition k_ := Eval compute in k.
-Definition k_subst : k = k_ := eq_refl k_.
-
-Definition c_ := Eval compute in c.
-Definition c_subst : c = c_ := eq_refl c_.
-
-Definition one_ := Eval compute in one.
-Definition one_subst : one = one_ := eq_refl one_.
-
-Definition zero_ := Eval compute in zero.
-Definition zero_subst : zero = zero_ := eq_refl zero_.
-
-Definition modulus_digits_ := Eval compute in ModularBaseSystemList.modulus_digits.
-Definition modulus_digits_subst : ModularBaseSystemList.modulus_digits = modulus_digits_ := eq_refl modulus_digits_.
-
-Local Opaque Z.shiftr Z.shiftl Z.land Z.mul Z.add Z.sub Z.lor Let_In Z.eqb Z.ltb Z.leb ModularBaseSystemListZOperations.neg ModularBaseSystemListZOperations.cmovl ModularBaseSystemListZOperations.cmovne.
-
-Definition app_n2 {T} (f : wire_digits) (P : wire_digits -> T) : T.
-Proof.
- cbv [wire_digits] in *.
- set (f0 := f).
- repeat (let g := fresh "g" in destruct f as [f g]).
- apply P.
- apply f0.
-Defined.
-
-Definition app_n2_correct {T} f (P : wire_digits -> T) : app_n2 f P = P f.
-Proof.
- intros.
- cbv [wire_digits] in *.
- repeat match goal with [p : (_*Z)%type |- _ ] => destruct p end.
- reflexivity.
-Qed.
-
-Definition app_n {T} (f : fe25519_32) (P : fe25519_32 -> T) : T.
-Proof.
- cbv [fe25519_32] in *.
- set (f0 := f).
- repeat (let g := fresh "g" in destruct f as [f g]).
- apply P.
- apply f0.
-Defined.
-
-Definition app_n_correct {T} f (P : fe25519_32 -> T) : app_n f P = P f.
-Proof.
- intros.
- cbv [fe25519_32] in *.
- repeat match goal with [p : (_*Z)%type |- _ ] => destruct p end.
- reflexivity.
-Qed.
-
-Definition appify2 {T} (op : fe25519_32 -> fe25519_32 -> T) (f g : fe25519_32) :=
- app_n f (fun f0 => (app_n g (fun g0 => op f0 g0))).
-
-Lemma appify2_correct : forall {T} op f g, @appify2 T op f g = op f g.
-Proof.
- intros. cbv [appify2].
- etransitivity; apply app_n_correct.
-Qed.
-
-Definition appify9 {T} (op : fe25519_32 -> fe25519_32 -> fe25519_32 -> fe25519_32 -> fe25519_32 -> fe25519_32 -> fe25519_32 -> fe25519_32 -> fe25519_32 -> T) (x0 x1 x2 x3 x4 x5 x6 x7 x8 : fe25519_32) :=
- app_n x0 (fun x0' =>
- app_n x1 (fun x1' =>
- app_n x2 (fun x2' =>
- app_n x3 (fun x3' =>
- app_n x4 (fun x4' =>
- app_n x5 (fun x5' =>
- app_n x6 (fun x6' =>
- app_n x7 (fun x7' =>
- app_n x8 (fun x8' =>
- op x0' x1' x2' x3' x4' x5' x6' x7' x8'))))))))).
-
-Lemma appify9_correct : forall {T} op x0 x1 x2 x3 x4 x5 x6 x7 x8,
- @appify9 T op x0 x1 x2 x3 x4 x5 x6 x7 x8 = op x0 x1 x2 x3 x4 x5 x6 x7 x8.
-Proof.
- intros. cbv [appify9].
- repeat (etransitivity; [ apply app_n_correct | ]); reflexivity.
-Qed.
-
-Definition uncurry_unop_fe25519_32 {T} (op : fe25519_32 -> T)
- := Eval compute in Tuple.uncurry (n:=length_fe25519_32) op.
-Definition curry_unop_fe25519_32 {T} op : fe25519_32 -> T
- := Eval compute in fun f => app_n f (Tuple.curry (n:=length_fe25519_32) op).
-
-Fixpoint uncurry_n_op_fe25519_32 {T} n
- : forall (op : Tower.tower_nd fe25519_32 T n),
- Tower.tower_nd Z T (n * length_fe25519_32)
- := match n
- return (forall (op : Tower.tower_nd fe25519_32 T n),
- Tower.tower_nd Z T (n * length_fe25519_32))
- with
- | O => fun x => x
- | S n' => fun f => uncurry_unop_fe25519_32 (fun x => @uncurry_n_op_fe25519_32 _ n' (f x))
- end.
-
-Definition uncurry_binop_fe25519_32 {T} (op : fe25519_32 -> fe25519_32 -> T)
- := Eval compute in uncurry_n_op_fe25519_32 2 op.
-Definition curry_binop_fe25519_32 {T} op : fe25519_32 -> fe25519_32 -> T
- := Eval compute in appify2 (fun f => curry_unop_fe25519_32 (curry_unop_fe25519_32 op f)).
-
-Definition uncurry_unop_wire_digits {T} (op : wire_digits -> T)
- := Eval compute in Tuple.uncurry (n:=length wire_widths) op.
-Definition curry_unop_wire_digits {T} op : wire_digits -> T
- := Eval compute in fun f => app_n2 f (Tuple.curry (n:=length wire_widths) op).
-
-Definition uncurry_9op_fe25519_32 {T} (op : fe25519_32 -> fe25519_32 -> fe25519_32 -> fe25519_32 -> fe25519_32 -> fe25519_32 -> fe25519_32 -> fe25519_32 -> fe25519_32 -> T)
- := Eval compute in uncurry_n_op_fe25519_32 9 op.
-Definition curry_9op_fe25519_32 {T} op : fe25519_32 -> fe25519_32 -> fe25519_32 -> fe25519_32 -> fe25519_32 -> fe25519_32 -> fe25519_32 -> fe25519_32 -> fe25519_32 -> T
- := Eval compute in
- appify9 (fun x0 x1 x2 x3 x4 x5 x6 x7 x8
- => curry_unop_fe25519_32 (curry_unop_fe25519_32 (curry_unop_fe25519_32 (curry_unop_fe25519_32 (curry_unop_fe25519_32 (curry_unop_fe25519_32 (curry_unop_fe25519_32 (curry_unop_fe25519_32 (curry_unop_fe25519_32 op x0) x1) x2) x3) x4) x5) x6) x7) x8).
-
-Definition add_sig (f g : fe25519_32) :
- { fg : fe25519_32 | fg = add_opt f g}.
-Proof.
- eexists.
- rewrite <-(@appify2_correct fe25519_32).
- cbv.
- reflexivity.
-Defined.
-
-Definition add (f g : fe25519_32) : fe25519_32 :=
- Eval cbv beta iota delta [proj1_sig add_sig] in
- proj1_sig (add_sig f g).
-
-Definition add_correct (f g : fe25519_32)
- : add f g = add_opt f g :=
- Eval cbv beta iota delta [proj1_sig add_sig] in
- proj2_sig (add_sig f g).
-
-Definition carry_add_sig (f g : fe25519_32) :
- { fg : fe25519_32 | fg = carry_add_opt f g}.
-Proof.
- eexists.
- rewrite <-(@appify2_correct fe25519_32).
- cbv.
- autorewrite with zsimplify_fast zsimplify_Z_to_pos; cbv.
- autorewrite with zsimplify_Z_to_pos; cbv.
- reflexivity.
-Defined.
-
-Definition carry_add (f g : fe25519_32) : fe25519_32 :=
- Eval cbv beta iota delta [proj1_sig carry_add_sig] in
- proj1_sig (carry_add_sig f g).
-
-Definition carry_add_correct (f g : fe25519_32)
- : carry_add f g = carry_add_opt f g :=
- Eval cbv beta iota delta [proj1_sig carry_add_sig] in
- proj2_sig (carry_add_sig f g).
-
-Definition sub_sig (f g : fe25519_32) :
- { fg : fe25519_32 | fg = sub_opt f g}.
-Proof.
- eexists.
- rewrite <-(@appify2_correct fe25519_32).
- cbv.
- reflexivity.
-Defined.
-
-Definition sub (f g : fe25519_32) : fe25519_32 :=
- Eval cbv beta iota delta [proj1_sig sub_sig] in
- proj1_sig (sub_sig f g).
-
-Definition sub_correct (f g : fe25519_32)
- : sub f g = sub_opt f g :=
- Eval cbv beta iota delta [proj1_sig sub_sig] in
- proj2_sig (sub_sig f g).
-
-Definition carry_sub_sig (f g : fe25519_32) :
- { fg : fe25519_32 | fg = carry_sub_opt f g}.
-Proof.
- eexists.
- rewrite <-(@appify2_correct fe25519_32).
- cbv.
- autorewrite with zsimplify_fast zsimplify_Z_to_pos; cbv.
- autorewrite with zsimplify_Z_to_pos; cbv.
- reflexivity.
-Defined.
-
-Definition carry_sub (f g : fe25519_32) : fe25519_32 :=
- Eval cbv beta iota delta [proj1_sig carry_sub_sig] in
- proj1_sig (carry_sub_sig f g).
-
-Definition carry_sub_correct (f g : fe25519_32)
- : carry_sub f g = carry_sub_opt f g :=
- Eval cbv beta iota delta [proj1_sig carry_sub_sig] in
- proj2_sig (carry_sub_sig f g).
-
-(* For multiplication, we add another layer of definition so that we can
- rewrite under the [let] binders. *)
-Definition mul_simpl_sig (f g : fe25519_32) :
- { fg : fe25519_32 | fg = carry_mul_opt k_ c_ f g}.
-Proof.
- cbv [fe25519_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv. (* N.B. The slow part of this is computing with [Z_div_opt].
- It would be much faster if we could take advantage of
- the form of [base_from_limb_widths] when doing
- division, so we could do subtraction instead. *)
- autorewrite with zsimplify_fast.
- reflexivity.
-Defined.
-
-Definition mul_simpl (f g : fe25519_32) : fe25519_32 :=
- Eval cbv beta iota delta [proj1_sig mul_simpl_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9) := f in
- let '(g0, g1, g2, g3, g4, g5, g6, g7, g8, g9) := g in
- proj1_sig (mul_simpl_sig (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9)
- (g0, g1, g2, g3, g4, g5, g6, g7, g8, g9)).
-
-Definition mul_simpl_correct (f g : fe25519_32)
- : mul_simpl f g = carry_mul_opt k_ c_ f g.
-Proof.
- pose proof (proj2_sig (mul_simpl_sig f g)).
- cbv [fe25519_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Qed.
-
-Definition mul_sig (f g : fe25519_32) :
- { fg : fe25519_32 | fg = carry_mul_opt k_ c_ f g}.
-Proof.
- eexists.
- rewrite <-mul_simpl_correct.
- rewrite <-(@appify2_correct fe25519_32).
- cbv.
- autorewrite with zsimplify_fast zsimplify_Z_to_pos; cbv.
- autorewrite with zsimplify_Z_to_pos; cbv.
- reflexivity.
-Defined.
-
-Definition mul (f g : fe25519_32) : fe25519_32 :=
- Eval cbv beta iota delta [proj1_sig mul_sig] in
- proj1_sig (mul_sig f g).
-
-Definition mul_correct (f g : fe25519_32)
- : mul f g = carry_mul_opt k_ c_ f g :=
- Eval cbv beta iota delta [proj1_sig add_sig] in
- proj2_sig (mul_sig f g).
-
-Definition opp_sig (f : fe25519_32) :
- { g : fe25519_32 | g = opp_opt f }.
-Proof.
- eexists.
- cbv [opp_opt].
- rewrite <-sub_correct.
- rewrite zero_subst.
- cbv [sub].
- reflexivity.
-Defined.
-
-Definition opp (f : fe25519_32) : fe25519_32
- := Eval cbv beta iota delta [proj1_sig opp_sig] in proj1_sig (opp_sig f).
-
-Definition opp_correct (f : fe25519_32)
- : opp f = opp_opt f
- := Eval cbv beta iota delta [proj2_sig add_sig] in proj2_sig (opp_sig f).
-
-Definition carry_opp_sig (f : fe25519_32) :
- { g : fe25519_32 | g = carry_opp_opt f }.
-Proof.
- eexists.
- cbv [carry_opp_opt].
- rewrite <-carry_sub_correct.
- rewrite zero_subst.
- cbv [carry_sub].
- reflexivity.
-Defined.
-
-Definition carry_opp (f : fe25519_32) : fe25519_32
- := Eval cbv beta iota delta [proj1_sig carry_opp_sig] in proj1_sig (carry_opp_sig f).
-
-Definition carry_opp_correct (f : fe25519_32)
- : carry_opp f = carry_opp_opt f
- := Eval cbv beta iota delta [proj2_sig add_sig] in proj2_sig (carry_opp_sig f).
-
-Definition pow (f : fe25519_32) chain := fold_chain_opt one_ mul chain [f].
-
-Lemma pow_correct (f : fe25519_32) : forall chain, pow f chain = pow_opt k_ c_ one_ f chain.
-Proof.
- cbv [pow pow_opt]; intros.
- rewrite !fold_chain_opt_correct.
- apply Proper_fold_chain; try reflexivity.
- intros; subst; apply mul_correct.
-Qed.
-
-(* Now that we have [pow], we can compute sqrt of -1 for use
- in sqrt function (this is not needed unless the prime is
- 5 mod 8) *)
-Local Transparent Z.shiftr Z.shiftl Z.land Z.mul Z.add Z.sub Z.lor Let_In Z.eqb Z.ltb andb.
-
-Definition sqrt_m1 := Eval vm_compute in (pow (encode (F.of_Z _ 2)) (pow2_chain (Z.to_pos ((modulus - 1) / 4)))).
-
-Lemma sqrt_m1_correct : rep (mul sqrt_m1 sqrt_m1) (F.opp 1%F).
-Proof.
- cbv [rep].
- apply F.eq_to_Z_iff.
- vm_compute.
- reflexivity.
-Qed.
-
-Local Opaque Z.shiftr Z.shiftl Z.land Z.mul Z.add Z.sub Z.lor Let_In Z.eqb Z.ltb andb.
-
-Definition inv_sig (f : fe25519_32) :
- { g : fe25519_32 | g = inv_opt k_ c_ one_ f }.
-Proof.
- eexists; cbv [inv_opt].
- rewrite <-pow_correct.
- cbv - [mul].
- reflexivity.
-Defined.
-
-Definition inv (f : fe25519_32) : fe25519_32
- := Eval cbv beta iota delta [proj1_sig inv_sig] in proj1_sig (inv_sig f).
-
-Definition inv_correct (f : fe25519_32)
- : inv f = inv_opt k_ c_ one_ f
- := Eval cbv beta iota delta [proj2_sig inv_sig] in proj2_sig (inv_sig f).
-
-Definition mbs_field := modular_base_system_field modulus_gt_2.
-
-Import Morphisms.
-
-Local Existing Instance prime_modulus.
-
-Lemma field_and_homomorphisms
- : @field fe25519_32 eq zero_ one_ opp add sub mul inv div
- /\ @Ring.is_homomorphism
- (F modulus) Logic.eq F.one F.add F.mul
- fe25519_32 eq one_ add mul encode
- /\ @Ring.is_homomorphism
- fe25519_32 eq one_ add mul
- (F modulus) Logic.eq F.one F.add F.mul
- decode.
-Proof.
- eapply @Field.field_and_homomorphism_from_redundant_representation.
- { exact (F.field_modulo _). }
- { apply encode_rep. }
- { reflexivity. }
- { reflexivity. }
- { reflexivity. }
- { intros; rewrite opp_correct, opp_opt_correct; apply opp_rep; reflexivity. }
- { intros; rewrite add_correct, add_opt_correct; apply add_rep; reflexivity. }
- { intros; rewrite sub_correct, sub_opt_correct; apply sub_rep; reflexivity. }
- { intros; rewrite mul_correct, carry_mul_opt_correct by reflexivity; apply carry_mul_rep; reflexivity. }
- { intros; rewrite inv_correct, inv_opt_correct by reflexivity; apply inv_rep; reflexivity. }
- { intros; apply encode_rep. }
-Qed.
-
-Definition field25519_32 : @field fe25519_32 eq zero_ one_ opp add sub mul inv div := proj1 field_and_homomorphisms.
-
-Lemma carry_field_and_homomorphisms
- : @field fe25519_32 eq zero_ one_ carry_opp carry_add carry_sub mul inv div
- /\ @Ring.is_homomorphism
- (F modulus) Logic.eq F.one F.add F.mul
- fe25519_32 eq one_ carry_add mul encode
- /\ @Ring.is_homomorphism
- fe25519_32 eq one_ carry_add mul
- (F modulus) Logic.eq F.one F.add F.mul
- decode.
-Proof.
- eapply @Field.field_and_homomorphism_from_redundant_representation.
- { exact (F.field_modulo _). }
- { apply encode_rep. }
- { reflexivity. }
- { reflexivity. }
- { reflexivity. }
- { intros; rewrite carry_opp_correct, carry_opp_opt_correct, carry_opp_rep; apply opp_rep; reflexivity. }
- { intros; rewrite carry_add_correct, carry_add_opt_correct, carry_add_rep; apply add_rep; reflexivity. }
- { intros; rewrite carry_sub_correct, carry_sub_opt_correct, carry_sub_rep; apply sub_rep; reflexivity. }
- { intros; rewrite mul_correct, carry_mul_opt_correct by reflexivity; apply carry_mul_rep; reflexivity. }
- { intros; rewrite inv_correct, inv_opt_correct by reflexivity; apply inv_rep; reflexivity. }
- { intros; apply encode_rep. }
-Qed.
-
-Definition carry_field25519_32 : @field fe25519_32 eq zero_ one_ carry_opp carry_add carry_sub mul inv div := proj1 carry_field_and_homomorphisms.
-
-Lemma homomorphism_F25519_32_encode
- : @Ring.is_homomorphism (F modulus) Logic.eq F.one F.add F.mul fe25519_32 eq one add mul encode.
-Proof. apply field_and_homomorphisms. Qed.
-
-Lemma homomorphism_F25519_32_decode
- : @Ring.is_homomorphism fe25519_32 eq one add mul (F modulus) Logic.eq F.one F.add F.mul decode.
-Proof. apply field_and_homomorphisms. Qed.
-
-
-Lemma homomorphism_carry_F25519_32_encode
- : @Ring.is_homomorphism (F modulus) Logic.eq F.one F.add F.mul fe25519_32 eq one carry_add mul encode.
-Proof. apply carry_field_and_homomorphisms. Qed.
-
-Lemma homomorphism_carry_F25519_32_decode
- : @Ring.is_homomorphism fe25519_32 eq one carry_add mul (F modulus) Logic.eq F.one F.add F.mul decode.
-Proof. apply carry_field_and_homomorphisms. Qed.
-
-Definition ge_modulus_sig (f : fe25519_32) :
- { b : Z | b = ge_modulus_opt (to_list 10 f) }.
-Proof.
- cbv [fe25519_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists; cbv [ge_modulus_opt].
- rewrite !modulus_digits_subst.
- cbv.
- reflexivity.
-Defined.
-
-Definition ge_modulus (f : fe25519_32) : Z :=
- Eval cbv beta iota delta [proj1_sig ge_modulus_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9) := f in
- proj1_sig (ge_modulus_sig (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9)).
-
-Definition ge_modulus_correct (f : fe25519_32) :
- ge_modulus f = ge_modulus_opt (to_list 10 f).
-Proof.
- pose proof (proj2_sig (ge_modulus_sig f)).
- cbv [fe25519_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Defined.
-
-Definition prefreeze_sig (f : fe25519_32) :
- { f' : fe25519_32 | f' = from_list_default 0 10 (carry_full_3_opt c_ (to_list 10 f)) }.
-Proof.
- cbv [fe25519_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv - [from_list_default].
- (* TODO(jgross,jadep): use Reflective linearization here? *)
- repeat (
- set_evars; rewrite app_Let_In_nd; subst_evars;
- eapply Proper_Let_In_nd_changebody; [reflexivity|intro]).
- cbv [from_list_default from_list_default'].
- reflexivity.
-Defined.
-
-Definition prefreeze (f : fe25519_32) : fe25519_32 :=
- Eval cbv beta iota delta [proj1_sig prefreeze_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9) := f in
- proj1_sig (prefreeze_sig (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9)).
-
-Definition prefreeze_correct (f : fe25519_32)
- : prefreeze f = from_list_default 0 10 (carry_full_3_opt c_ (to_list 10 f)).
-Proof.
- pose proof (proj2_sig (prefreeze_sig f)).
- cbv [fe25519_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Defined.
-
-Definition postfreeze_sig (f : fe25519_32) :
- { f' : fe25519_32 | f' = from_list_default 0 10 (conditional_subtract_modulus_opt (int_width := int_width) (to_list 10 f)) }.
-Proof.
- cbv [fe25519_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists; cbv [freeze_opt int_width].
- cbv [to_list to_list'].
- cbv [conditional_subtract_modulus_opt].
- rewrite !modulus_digits_subst.
- cbv - [from_list_default].
- (* TODO(jgross,jadep): use Reflective linearization here? *)
- repeat (
- set_evars; rewrite app_Let_In_nd; subst_evars;
- eapply Proper_Let_In_nd_changebody; [reflexivity|intro]).
- cbv [from_list_default from_list_default'].
- reflexivity.
-Defined.
-
-Definition postfreeze (f : fe25519_32) : fe25519_32 :=
- Eval cbv beta iota delta [proj1_sig postfreeze_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9) := f in
- proj1_sig (postfreeze_sig (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9)).
-
-Definition postfreeze_correct (f : fe25519_32)
- : postfreeze f = from_list_default 0 10 (conditional_subtract_modulus_opt (int_width := int_width) (to_list 10 f)).
-Proof.
- pose proof (proj2_sig (postfreeze_sig f)).
- cbv [fe25519_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Defined.
-
-Definition freeze (f : fe25519_32) : fe25519_32 :=
- dlet x := prefreeze f in
- postfreeze x.
-
-Local Transparent Let_In.
-Definition freeze_correct (f : fe25519_32)
- : freeze f = from_list_default 0 10 (freeze_opt (int_width := int_width) c_ (to_list 10 f)).
-Proof.
- cbv [freeze_opt freeze Let_In].
- rewrite prefreeze_correct.
- rewrite postfreeze_correct.
- match goal with
- |- appcontext [to_list _ (from_list_default _ ?n ?xs)] =>
- assert (length xs = n) as pf; [ | rewrite from_list_default_eq with (pf0 := pf) ] end.
- { rewrite carry_full_3_opt_correct; repeat rewrite ModularBaseSystemListProofs.length_carry_full; auto using length_to_list. }
- rewrite to_list_from_list.
- reflexivity.
-Qed.
-Local Opaque Let_In.
-
-Definition fieldwiseb_sig (f g : fe25519_32) :
- { b | b = @fieldwiseb Z Z 10 Z.eqb f g }.
-Proof.
- cbv [fe25519_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv.
- reflexivity.
-Defined.
-
-Definition fieldwiseb (f g : fe25519_32) : bool
- := Eval cbv beta iota delta [proj1_sig fieldwiseb_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9) := f in
- let '(g0, g1, g2, g3, g4, g5, g6, g7, g8, g9) := g in
- proj1_sig (fieldwiseb_sig (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9)
- (g0, g1, g2, g3, g4, g5, g6, g7, g8, g9)).
-
-Lemma fieldwiseb_correct (f g : fe25519_32)
- : fieldwiseb f g = @Tuple.fieldwiseb Z Z 10 Z.eqb f g.
-Proof.
- set (f' := f); set (g' := g).
- hnf in f, g; destruct_head' prod.
- exact (proj2_sig (fieldwiseb_sig f' g')).
-Qed.
-
-Definition eqb_sig (f g : fe25519_32) :
- { b | b = eqb int_width f g }.
-Proof.
- cbv [eqb].
- cbv [fe25519_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv [ModularBaseSystem.freeze int_width].
- rewrite <-!from_list_default_eq with (d := 0).
- rewrite <-!(freeze_opt_correct c_) by auto using length_to_list.
- rewrite <-!freeze_correct.
- rewrite <-fieldwiseb_correct.
- reflexivity.
-Defined.
-
-Definition eqb (f g : fe25519_32) : bool
- := Eval cbv beta iota delta [proj1_sig eqb_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9) := f in
- let '(g0, g1, g2, g3, g4, g5, g6, g7, g8, g9) := g in
- proj1_sig (eqb_sig (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9)
- (g0, g1, g2, g3, g4, g5, g6, g7, g8, g9)).
-
-Lemma eqb_correct (f g : fe25519_32)
- : eqb f g = ModularBaseSystem.eqb int_width f g.
-Proof.
- set (f' := f); set (g' := g).
- hnf in f, g; destruct_head' prod.
- exact (proj2_sig (eqb_sig f' g')).
-Qed.
-
-Definition sqrt_sig (powx powx_squared f : fe25519_32) :
- { f' : fe25519_32 | f' = sqrt_5mod8_opt (int_width := int_width) k_ c_ sqrt_m1 powx powx_squared f}.
-Proof.
- eexists.
- cbv [sqrt_5mod8_opt int_width].
- apply Proper_Let_In_nd_changebody; [reflexivity|intro].
- set_evars. rewrite <-!mul_correct, <-eqb_correct. subst_evars.
- reflexivity.
-Defined.
-
-Definition sqrt (powx powx_squared f : fe25519_32) : fe25519_32
- := Eval cbv beta iota delta [proj1_sig sqrt_sig] in proj1_sig (sqrt_sig powx powx_squared f).
-
-Definition sqrt_correct (powx powx_squared f : fe25519_32)
- : sqrt powx powx_squared f = sqrt_5mod8_opt k_ c_ sqrt_m1 powx powx_squared f
- := Eval cbv beta iota delta [proj2_sig sqrt_sig] in proj2_sig (sqrt_sig powx powx_squared f).
-
-Definition pack_simpl_sig (f : fe25519_32) :
- { f' | f' = pack_opt params25519_32 wire_widths_nonneg bits_eq f }.
-Proof.
- cbv [fe25519_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv [pack_opt].
- repeat (rewrite <-convert'_opt_correct;
- cbv - [from_list_default_opt Conversion.convert']).
- repeat progress rewrite ?Z.shiftl_0_r, ?Z.shiftr_0_r, ?Z.land_0_l, ?Z.lor_0_l, ?Z.land_same_r.
- cbv [from_list_default_opt].
- reflexivity.
-Defined.
-
-Definition pack_simpl (f : fe25519_32) :=
- Eval cbv beta iota delta [proj1_sig pack_simpl_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9) := f in
- proj1_sig (pack_simpl_sig (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9)).
-
-Definition pack_simpl_correct (f : fe25519_32)
- : pack_simpl f = pack_opt params25519_32 wire_widths_nonneg bits_eq f.
-Proof.
- pose proof (proj2_sig (pack_simpl_sig f)).
- cbv [fe25519_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Qed.
-
-Definition pack_sig (f : fe25519_32) :
- { f' | f' = pack_opt params25519_32 wire_widths_nonneg bits_eq f }.
-Proof.
- eexists.
- rewrite <-pack_simpl_correct.
- rewrite <-(@app_n_correct wire_digits).
- cbv.
- reflexivity.
-Defined.
-
-Definition pack (f : fe25519_32) : wire_digits :=
- Eval cbv beta iota delta [proj1_sig pack_sig] in proj1_sig (pack_sig f).
-
-Definition pack_correct (f : fe25519_32)
- : pack f = pack_opt params25519_32 wire_widths_nonneg bits_eq f
- := Eval cbv beta iota delta [proj2_sig pack_sig] in proj2_sig (pack_sig f).
-
-Definition unpack_simpl_sig (f : wire_digits) :
- { f' | f' = unpack_opt params25519_32 wire_widths_nonneg bits_eq f }.
-Proof.
- cbv [wire_digits] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv [unpack_opt].
- repeat (
- rewrite <-convert'_opt_correct;
- cbv - [from_list_default_opt Conversion.convert']).
- repeat progress rewrite ?Z.shiftl_0_r, ?Z.shiftr_0_r, ?Z.land_0_l, ?Z.lor_0_l, ?Z.land_same_r.
- cbv [from_list_default_opt].
- reflexivity.
-Defined.
-
-Definition unpack_simpl (f : wire_digits) : fe25519_32 :=
- Eval cbv beta iota delta [proj1_sig unpack_simpl_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7) := f in
- proj1_sig (unpack_simpl_sig (f0, f1, f2, f3, f4, f5, f6, f7)).
-
-Definition unpack_simpl_correct (f : wire_digits)
- : unpack_simpl f = unpack_opt params25519_32 wire_widths_nonneg bits_eq f.
-Proof.
- pose proof (proj2_sig (unpack_simpl_sig f)).
- cbv [wire_digits] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Qed.
-
-Definition unpack_sig (f : wire_digits) :
- { f' | f' = unpack_opt params25519_32 wire_widths_nonneg bits_eq f }.
-Proof.
- eexists.
- rewrite <-unpack_simpl_correct.
- rewrite <-(@app_n2_correct fe25519_32).
- cbv.
- reflexivity.
-Defined.
-
-Definition unpack (f : wire_digits) : fe25519_32 :=
- Eval cbv beta iota delta [proj1_sig unpack_sig] in proj1_sig (unpack_sig f).
-
-Definition unpack_correct (f : wire_digits)
- : unpack f = unpack_opt params25519_32 wire_widths_nonneg bits_eq f
- := Eval cbv beta iota delta [proj2_sig pack_sig] in proj2_sig (unpack_sig f).
diff --git a/src/SpecificGen/GF25519_32Bounded.v b/src/SpecificGen/GF25519_32Bounded.v
deleted file mode 100644
index 025950bee..000000000
--- a/src/SpecificGen/GF25519_32Bounded.v
+++ /dev/null
@@ -1,521 +0,0 @@
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParams.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParamProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemOpt.
-Require Import Crypto.SpecificGen.GF25519_32.
-Require Import Crypto.SpecificGen.GF25519_32BoundedCommon.
-Require Import Crypto.SpecificGen.GF25519_32Reflective.
-Require Import Bedrock.Word Crypto.Util.WordUtil.
-Require Import Coq.Lists.List Crypto.Util.ListUtil.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemWord.
-Require Import Crypto.Tactics.VerdiTactics.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Notations.
-Require Import Crypto.Util.Bool.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Algebra.
-Import ListNotations.
-Require Import Coq.ZArith.ZArith Coq.ZArith.Zpower Coq.ZArith.ZArith Coq.ZArith.Znumtheory.
-Local Open Scope Z.
-
-
-Local Ltac cbv_tuple_map :=
- cbv [Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list' HList.hlistP HList.hlistP'].
-
-Local Ltac post_bounded_t :=
- (* much pain and hackery to work around [Defined] taking forever *)
- cbv_tuple_map;
- let blem' := fresh "blem'" in
- let is_bounded_lem := fresh "is_bounded_lem" in
- intros is_bounded_lem blem';
- apply blem'; repeat apply conj; apply is_bounded_lem.
-Local Ltac bounded_t opW blem :=
- generalize blem; generalize is_bounded_proj1_fe25519_32; post_bounded_t.
-Local Ltac bounded_wire_digits_t opW blem :=
- generalize blem; generalize is_bounded_proj1_wire_digits; post_bounded_t.
-
-Local Ltac define_binop f g opW blem :=
- refine (exist_fe25519_32W (opW (proj1_fe25519_32W f, proj1_fe25519_32W g)) _);
- abstract bounded_t opW blem.
-Local Ltac define_unop f opW blem :=
- refine (exist_fe25519_32W (opW (proj1_fe25519_32W f)) _);
- abstract bounded_t opW blem.
-Local Ltac define_unop_FEToZ f opW :=
- refine (opW (proj1_fe25519_32W f)).
-Local Ltac define_unop_FEToWire f opW blem :=
- refine (exist_wire_digitsW (opW (proj1_fe25519_32W f)) _);
- abstract bounded_t opW blem.
-Local Ltac define_unop_WireToFE f opW blem :=
- refine (exist_fe25519_32W (opW (proj1_wire_digitsW f)) _);
- abstract bounded_wire_digits_t opW blem.
-
-Local Opaque Let_In.
-Local Opaque Z.add Z.sub Z.mul Z.shiftl Z.shiftr Z.land Z.lor Z.eqb NToWord64.
-Local Arguments interp_radd / _.
-Local Arguments interp_rsub / _.
-Local Arguments interp_rmul / _.
-Local Arguments interp_ropp / _.
-Local Arguments interp_rprefreeze / _.
-Local Arguments interp_rge_modulus / _.
-Local Arguments interp_rpack / _.
-Local Arguments interp_runpack / _.
-Definition addW (f : fe25519_32W * fe25519_32W) : fe25519_32W := Eval simpl in interp_radd f.
-Definition subW (f : fe25519_32W * fe25519_32W) : fe25519_32W := Eval simpl in interp_rsub f.
-Definition mulW (f : fe25519_32W * fe25519_32W) : fe25519_32W := Eval simpl in interp_rmul f.
-Definition oppW (f : fe25519_32W) : fe25519_32W := Eval simpl in interp_ropp f.
-Definition prefreezeW (f : fe25519_32W) : fe25519_32W := Eval simpl in interp_rprefreeze f.
-Definition ge_modulusW (f : fe25519_32W) : word64 := Eval simpl in interp_rge_modulus f.
-Definition packW (f : fe25519_32W) : wire_digitsW := Eval simpl in interp_rpack f.
-Definition unpackW (f : wire_digitsW) : fe25519_32W := Eval simpl in interp_runpack f.
-
-Definition modulusW :=
- Eval cbv - [ZToWord64] in (Tuple.map ZToWord64 (Tuple.from_list_default 0%Z length_fe25519_32 GF25519_32.modulus_digits_)).
-
-Definition postfreeze : GF25519_32.fe25519_32 -> GF25519_32.fe25519_32 :=
- GF25519_32.postfreeze.
-
-Lemma freeze_prepost_freeze : forall x, postfreeze (prefreeze x) = GF25519_32.freeze x.
-Proof. reflexivity. Qed.
-
-Definition postfreezeW : fe25519_32W -> fe25519_32W :=
- (conditional_subtract_modulusW
- (num_limbs := length_fe25519_32)
- modulusW
- ge_modulusW
- (Interpretations64.WordW.neg GF25519_32.int_width)
- ).
-
-Definition freezeW (f : fe25519_32W) : fe25519_32W := Eval cbv beta delta [prefreezeW postfreezeW] in postfreezeW (prefreezeW f).
-
-Local Transparent Let_In.
-(* Wrapper to allow extracted code to not unfold [mulW] *)
-Definition mulW_noinline := mulW.
-Definition powW (f : fe25519_32W) chain := fold_chain_opt (proj1_fe25519_32W one) (fun f g => mulW_noinline (f, g)) chain [f].
-Definition invW (f : fe25519_32W) : fe25519_32W
- := Eval cbv -[Let_In fe25519_32W mulW_noinline] in powW f (chain inv_ec).
-
-Local Ltac port_correct_and_bounded pre_rewrite opW interp_rop rop_cb :=
- change opW with (interp_rop);
- rewrite pre_rewrite;
- intros; apply rop_cb; assumption.
-
-Lemma addW_correct_and_bounded : ibinop_correct_and_bounded addW (Curry.curry2 carry_add).
-Proof. port_correct_and_bounded interp_radd_correct addW interp_radd radd_correct_and_bounded. Qed.
-Lemma subW_correct_and_bounded : ibinop_correct_and_bounded subW (Curry.curry2 carry_sub).
-Proof. port_correct_and_bounded interp_rsub_correct subW interp_rsub rsub_correct_and_bounded. Qed.
-Lemma mulW_correct_and_bounded : ibinop_correct_and_bounded mulW (Curry.curry2 mul).
-Proof. port_correct_and_bounded interp_rmul_correct mulW interp_rmul rmul_correct_and_bounded. Qed.
-Lemma oppW_correct_and_bounded : iunop_correct_and_bounded oppW carry_opp.
-Proof. port_correct_and_bounded interp_ropp_correct oppW interp_ropp ropp_correct_and_bounded. Qed.
-Lemma prefreezeW_correct_and_bounded : iunop_correct_and_bounded prefreezeW prefreeze.
-Proof. port_correct_and_bounded interp_rprefreeze_correct prefreezeW interp_rprefreeze rprefreeze_correct_and_bounded. Qed.
-Lemma ge_modulusW_correct : iunop_FEToZ_correct ge_modulusW ge_modulus.
-Proof. port_correct_and_bounded interp_rge_modulus_correct ge_modulusW interp_rge_modulus rge_modulus_correct_and_bounded. Qed.
-Lemma packW_correct_and_bounded : iunop_FEToWire_correct_and_bounded packW pack.
-Proof. port_correct_and_bounded interp_rpack_correct packW interp_rpack rpack_correct_and_bounded. Qed.
-Lemma unpackW_correct_and_bounded : iunop_WireToFE_correct_and_bounded unpackW unpack.
-Proof. port_correct_and_bounded interp_runpack_correct unpackW interp_runpack runpack_correct_and_bounded. Qed.
-
-Ltac lower_bound_minus_ge_modulus :=
- apply Z.le_0_sub;
- cbv [ge_modulus Let_In ModularBaseSystemListZOperations.cmovl ModularBaseSystemListZOperations.cmovne ModularBaseSystemListZOperations.neg];
- repeat break_if; Z.ltb_to_lt; subst; try omega;
- rewrite ?Z.land_0_l; auto;
- change Interpretations64.WordW.wordWToZ with word64ToZ;
- etransitivity; try apply Z.land_upper_bound_r; instantiate; try omega;
- apply Z.ones_nonneg; instantiate; vm_compute; discriminate.
-
-Ltac upper_bound_minus_ge_modulus :=
- (apply Z.log2_lt_pow2_alt; [ vm_compute; reflexivity | ]);
- eapply Z.le_lt_trans; [ apply Z.le_sub_nonneg; apply Z.land_nonneg; right; omega | ];
- eapply Z.le_lt_trans; [ eassumption | ];
- instantiate; vm_compute; reflexivity.
-
-Lemma postfreezeW_correct_and_bounded : iunop_correct_and_bounded postfreezeW postfreeze.
-Proof.
- intros x H.
- pose proof (ge_modulusW_correct x H) as Hgm.
- destruct_head_hnf' prod.
- unfold_is_bounded_in H.
- destruct_head' and.
- Z.ltb_to_lt.
- cbv [postfreezeW].
- cbv [conditional_subtract_modulusW Interpretations64.WordW.neg].
- change word64ToZ with Interpretations64.WordW.wordWToZ in *.
- rewrite Hgm.
-
- cbv [modulusW Tuple.map].
- cbv [on_tuple List.map to_list to_list' from_list from_list'
- HList.hlistP HList.hlistP'
- Tuple.map2 on_tuple2 ListUtil.map2 fe25519_32WToZ length_fe25519_32].
- cbv [postfreeze GF25519_32.postfreeze].
- cbv [Let_In].
-
- split.
- { match goal with
- |- (_,word64ToZ (_ ^- (Interpretations64.WordW.ZToWordW ?x) ^& _)) = (_,_ - (?y &' _)) => assert (x = y) as Hxy by reflexivity; repeat rewrite <-Hxy; clear Hxy end.
-
- change ZToWord64 with Interpretations64.WordW.ZToWordW in *.
- preunfold_is_bounded.
- rewrite !Interpretations64.WordW.wordWToZ_sub;
- rewrite !Interpretations64.WordW.wordWToZ_land;
- rewrite !Interpretations64.WordW.wordWToZ_ZToWordW;
- try match goal with
- | |- 0 <= ModularBaseSystemListZOperations.neg _ _ < 2 ^ _ => apply ModularBaseSystemListZOperationsProofs.neg_range; omega
- | |- 0 <= _ < 2 ^ Z.of_nat _ => vm_compute; split; [refine (fun x => match x with eq_refl => I end) | reflexivity]
- | |- 0 <= _ &' _ => apply Z.land_nonneg; right; omega
- | |- (_,_) = (_,_) => reflexivity
- end;
- try solve [
- (apply Z.log2_lt_pow2_alt; [ vm_compute; reflexivity | ]);
- eapply Z.le_lt_trans; try apply Z.land_upper_bound_r; try apply ModularBaseSystemListZOperationsProofs.neg_range; instantiate; try match goal with |- ?G => not has_evar G; vm_compute; discriminate end; reflexivity];
- match goal with
- | |- 0 <= _ - _ => lower_bound_minus_ge_modulus
- | |- Z.log2 (_ - _) < _ => upper_bound_minus_ge_modulus
- end. }
-
-
- change ZToWord64 with Interpretations64.WordW.ZToWordW in *;
- preunfold_is_bounded.
- rewrite !Interpretations64.WordW.wordWToZ_sub;
- rewrite !Interpretations64.WordW.wordWToZ_land;
- rewrite !Interpretations64.WordW.wordWToZ_ZToWordW;
- repeat match goal with |- _ /\ _ => split; Z.ltb_to_lt end;
- Z.ltb_to_lt; unfold_is_bounded; Z.ltb_to_lt;
- try match goal with
- | |- 0 <= ModularBaseSystemListZOperations.neg _ _ < 2 ^ _ => apply ModularBaseSystemListZOperationsProofs.neg_range; omega
- | |- 0 <= _ < 2 ^ Z.of_nat _ => vm_compute; split; [refine (fun x => match x with eq_refl => I end) | reflexivity]
- | |- 0 <= _ &' _ => apply Z.land_nonneg; right; omega
- end;
- try solve [
- (apply Z.log2_lt_pow2_alt; [ vm_compute; reflexivity | ]);
- eapply Z.le_lt_trans; try apply Z.land_upper_bound_r; try apply ModularBaseSystemListZOperationsProofs.neg_range; instantiate; try match goal with |- ?G => not has_evar G; vm_compute; discriminate end; reflexivity];
- try match goal with
- | |- 0 <= _ - _ => lower_bound_minus_ge_modulus
- | |- Z.log2 (_ - _) < _ => upper_bound_minus_ge_modulus
- | |- _ - _ <= _ => etransitivity; [ apply Z.le_sub_nonneg; apply Z.land_nonneg; right; omega | instantiate; assumption ]
- | |- 0 <= ModularBaseSystemListZOperations.neg _ _ =>
- apply ModularBaseSystemListZOperationsProofs.neg_range; vm_compute; discriminate
- | |- ModularBaseSystemListZOperations.neg _ _ < _ =>
- apply ModularBaseSystemListZOperationsProofs.neg_range; vm_compute; discriminate
- | |- _ => vm_compute; (discriminate || reflexivity)
- end.
-Qed.
-
-Lemma freezeW_correct_and_bounded : iunop_correct_and_bounded freezeW freeze.
-Proof.
- intros f H; rewrite <- freeze_prepost_freeze.
- change (freezeW f) with (postfreezeW (prefreezeW f)).
- destruct (prefreezeW_correct_and_bounded f H) as [H0 H1].
- destruct (postfreezeW_correct_and_bounded _ H1) as [H0' H1'].
- split; [ | assumption ].
- rewrite H0', H0; reflexivity.
-Qed.
-
-Lemma powW_correct_and_bounded chain : iunop_correct_and_bounded (fun x => powW x chain) (fun x => pow x chain).
-Proof.
- cbv [powW pow].
- intro x; intros; apply (fold_chain_opt_gen fe25519_32WToZ is_bounded [x]).
- { reflexivity. }
- { reflexivity. }
- { intros; pose proof (fun k0 k1 X Y => proj1 (mulW_correct_and_bounded (k0, k1) (conj X Y))) as H'.
- cbv [Curry.curry2 Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list'] in H'.
- rewrite <- H' by assumption.
- apply mulW_correct_and_bounded; split; assumption. }
- { intros; rewrite (fun X Y => proj1 (mulW_correct_and_bounded (_, _) (conj X Y))) by assumption; reflexivity. }
- { intros [|?]; autorewrite with simpl_nth_default;
- (assumption || reflexivity). }
-Qed.
-
-Lemma invW_correct_and_bounded : iunop_correct_and_bounded invW inv.
-Proof.
- intro f.
- assert (H : forall f, invW f = powW f (chain inv_ec))
- by abstract (cbv -[Let_In fe25519_32W mulW_noinline]; reflexivity).
- rewrite H.
- rewrite inv_correct.
- cbv [inv_opt].
- rewrite <- pow_correct.
- apply powW_correct_and_bounded.
-Qed.
-
-Definition fieldwisebW_sig (f g : fe25519_32W)
- : { b | b = GF25519_32.fieldwiseb (fe25519_32WToZ f) (fe25519_32WToZ g) }.
-Proof.
- hnf in f, g; destruct_head' prod.
- eexists.
- cbv [GF25519_32.fieldwiseb fe25519_32WToZ].
- rewrite ?word64eqb_Zeqb.
- reflexivity.
-Defined.
-
-Definition fieldwisebW (f g : fe25519_32W) : bool :=
- Eval cbv [proj1_sig fieldwisebW_sig appify2 app_fe25519_32W] in
- appify2 (fun f g => proj1_sig (fieldwisebW_sig f g)) f g.
-
-Lemma fieldwisebW_correct f g
- : fieldwisebW f g = GF25519_32.fieldwiseb (fe25519_32WToZ f) (fe25519_32WToZ g).
-Proof.
- set (f' := f); set (g' := g).
- hnf in f, g; destruct_head' prod.
- exact (proj2_sig (fieldwisebW_sig f' g')).
-Qed.
-
-Local Arguments freezeW : simpl never.
-Local Arguments fe25519_32WToZ !_ / .
-Local Opaque freezeW.
-
-Definition eqbW_sig (f g : fe25519_32W)
- : { b | is_bounded (fe25519_32WToZ f) = true
- -> is_bounded (fe25519_32WToZ g) = true
- -> b = GF25519_32.eqb (fe25519_32WToZ f) (fe25519_32WToZ g) }.
-Proof.
- pose proof (fun pf => proj1 (freezeW_correct_and_bounded f pf)) as frf.
- pose proof (fun pf => proj1 (freezeW_correct_and_bounded g pf)) as frg.
- hnf in f, g; destruct_head' prod.
- eexists.
- unfold GF25519_32.eqb.
- simpl @fe25519_32WToZ in *; cbv beta iota.
- intros.
- cbv [Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list' fe25519_32WToZ] in *.
- rewrite <- frf, <- frg by assumption.
- etransitivity; [ eapply fieldwisebW_correct | ].
- cbv [fe25519_32WToZ].
- reflexivity.
-Defined.
-
-Definition eqbW (f g : fe25519_32W) : bool :=
- Eval cbv [proj1_sig eqbW_sig appify2 app_fe25519_32W] in
- appify2 (fun f g => proj1_sig (eqbW_sig f g)) f g.
-
-Lemma eqbW_correct f g
- : is_bounded (fe25519_32WToZ f) = true
- -> is_bounded (fe25519_32WToZ g) = true
- -> eqbW f g = GF25519_32.eqb (fe25519_32WToZ f) (fe25519_32WToZ g).
-Proof.
- set (f' := f); set (g' := g).
- hnf in f, g; destruct_head' prod.
- exact (proj2_sig (eqbW_sig f' g')).
-Qed.
-
-Definition sqrt_m1W' : fe25519_32W :=
- Eval vm_compute in fe25519_32ZToW sqrt_m1.
-Definition sqrt_m1W := Eval cbv [sqrt_m1W' fe25519_32W_word64ize word64ize andb opt.word64ToZ opt.word64ize opt.Zleb Z.compare CompOpp Pos.compare Pos.compare_cont] in fe25519_32W_word64ize sqrt_m1W'.
-
-Definition GF25519_32sqrt (x : GF25519_32.fe25519_32) : GF25519_32.fe25519_32.
-Proof.
- lazymatch (eval cbv delta [GF25519_32.sqrt] in GF25519_32.sqrt) with
- | (fun powf powf_squared f => dlet a := powf in _)
- => exact (dlet powx := powW (fe25519_32ZToW x) (chain GF25519_32.sqrt_ec) in
- GF25519_32.sqrt (fe25519_32WToZ powx) (fe25519_32WToZ (mulW_noinline (powx, powx))) x)
- | (fun f => pow f _)
- => exact (GF25519_32.sqrt x)
- end.
-Defined.
-
-Definition sqrtW_sig
- : { sqrtW | iunop_correct_and_bounded sqrtW GF25519_32sqrt }.
-Proof.
- eexists.
- unfold GF25519_32sqrt, GF25519_32.sqrt.
- intros.
- rewrite ?fe25519_32ZToW_WToZ.
- split.
- { etransitivity.
- Focus 2. {
- lazymatch goal with
- | [ |- _ = pow _ _ ]
- => apply powW_correct_and_bounded; assumption
- | [ |- _ = (dlet powx := _ in _) ]
- => apply Proper_Let_In_nd_changebody_eq; intros;
- set_evars;
- match goal with (* unfold the first dlet ... in, but only if it's binding a var *)
- | [ |- ?x = dlet y := fe25519_32WToZ ?z in ?f ]
- => is_var z; change (x = match fe25519_32WToZ z with y => f end)
- end;
- change sqrt_m1 with (fe25519_32WToZ sqrt_m1W);
- pose proof (fun X Y => proj1 (mulW_correct_and_bounded (sqrt_m1W, a) (conj X Y))) as correctness;
- let cbv_in_all _ := (cbv [fe25519_32WToZ Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list' fe25519_32WToZ Curry.curry2 HList.hlistP HList.hlistP'] in *; idtac) in
- cbv_in_all ();
- let solver _ := (repeat match goal with
- | _ => progress subst
- | _ => progress unfold fst, snd
- | _ => progress cbv_in_all ()
- | [ |- ?x /\ ?x ] => cut x; [ intro; split; assumption | ]
- | [ |- is_bounded ?op = true ]
- => let H := fresh in
- lazymatch op with
- | context[mulW (_, _)] => pose proof mulW_correct_and_bounded as H
- | context[mulW_noinline (_, _)] => pose proof mulW_correct_and_bounded as H
- | context[powW _ _] => pose proof powW_correct_and_bounded as H
- | context[sqrt_m1W] => vm_compute; reflexivity
- | _ => assumption
- end;
- cbv_in_all ();
- apply H
- end) in
- rewrite <- correctness by solver (); clear correctness;
- let lem := fresh in
- pose proof eqbW_correct as lem; cbv_in_all (); rewrite <- lem by solver (); clear lem;
- pose proof (pull_bool_if fe25519_32WToZ) as lem; cbv_in_all (); rewrite lem by solver (); clear lem;
- subst_evars; reflexivity
- end.
- } Unfocus.
- assert (Hfold : forall x, fe25519_32WToZ x = fe25519_32WToZ x) by reflexivity.
- unfold fe25519_32WToZ at 2 in Hfold.
- etransitivity.
- Focus 2. {
- apply Proper_Let_In_nd_changebody; [ reflexivity | intro ].
- apply Hfold.
- } Unfocus.
- clear Hfold.
- lazymatch goal with
- | [ |- context G[dlet x := ?v in fe25519_32WToZ (@?f x)] ]
- => let G' := context G[fe25519_32WToZ (dlet x := v in f x)] in
- cut G'; cbv beta;
- [ cbv [Let_In]; exact (fun x => x) | apply f_equal ]
- | _ => idtac
- end;
- reflexivity.
- }
-
- { cbv [Let_In HList.hlistP HList.hlistP'];
- try break_if;
- repeat lazymatch goal with
- | [ |- is_bounded (?WToZ (powW _ _)) = true ]
- => apply powW_correct_and_bounded; assumption
- | [ |- is_bounded (snd (?WToZ (_, powW _ _))) = true ]
- => generalize powW_correct_and_bounded;
- cbv [snd Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list' HList.hlistP HList.hlistP'];
- let H := fresh in intro H; apply H; assumption
- | [ |- is_bounded (?WToZ (mulW (_, _))) = true ]
- => apply mulW_correct_and_bounded; split; [ vm_compute; reflexivity | ]
- end.
- }
-Defined.
-
-Definition sqrtW (f : fe25519_32W) : fe25519_32W :=
- Eval cbv [proj1_sig sqrtW_sig app_fe25519_32W] in
- app_fe25519_32W f (proj1_sig sqrtW_sig).
-
-Lemma sqrtW_correct_and_bounded : iunop_correct_and_bounded sqrtW GF25519_32sqrt.
-Proof.
- intro f.
- set (f' := f).
- hnf in f; destruct_head' prod.
- assert (H : sqrtW f' = proj1_sig sqrtW_sig f')
- by (subst f'; cbv beta iota delta [proj1_sig sqrtW_sig sqrtW]; reflexivity).
- rewrite H.
- exact (proj2_sig sqrtW_sig f').
-Qed.
-
-
-
-Definition add (f g : fe25519_32) : fe25519_32.
-Proof. define_binop f g addW addW_correct_and_bounded. Defined.
-Definition sub (f g : fe25519_32) : fe25519_32.
-Proof. define_binop f g subW subW_correct_and_bounded. Defined.
-Definition mul (f g : fe25519_32) : fe25519_32.
-Proof. define_binop f g mulW mulW_correct_and_bounded. Defined.
-Definition opp (f : fe25519_32) : fe25519_32.
-Proof. define_unop f oppW oppW_correct_and_bounded. Defined.
-Definition freeze (f : fe25519_32) : fe25519_32.
-Proof. define_unop f freezeW freezeW_correct_and_bounded. Defined.
-Definition ge_modulus (f : fe25519_32) : word64.
-Proof. define_unop_FEToZ f ge_modulusW. Defined.
-Definition pack (f : fe25519_32) : wire_digits.
-Proof. define_unop_FEToWire f packW packW_correct_and_bounded. Defined.
-Definition unpack (f : wire_digits) : fe25519_32.
-Proof. define_unop_WireToFE f unpackW unpackW_correct_and_bounded. Defined.
-
-Definition pow (f : fe25519_32) (chain : list (nat * nat)) : fe25519_32.
-Proof. define_unop f (fun x => powW x chain) powW_correct_and_bounded. Defined.
-Definition inv (f : fe25519_32) : fe25519_32.
-Proof. define_unop f invW (fun x p => proj2 (invW_correct_and_bounded x p)). Defined.
-Definition sqrt (f : fe25519_32) : fe25519_32.
-Proof. define_unop f sqrtW sqrtW_correct_and_bounded. Defined.
-
-Local Ltac op_correct_t op opW_correct_and_bounded :=
- cbv [op];
- lazymatch goal with
- | [ |- context[proj1_fe25519_32 (exist_fe25519_32W _ _)] ]
- => rewrite proj1_fe25519_32_exist_fe25519_32W
- | [ |- context[proj1_wire_digits (exist_wire_digitsW _ _)] ]
- => rewrite proj1_wire_digits_exist_wire_digitsW
- | _ => idtac
- end;
- generalize opW_correct_and_bounded;
- cbv_tuple_map;
- cbv [fst snd];
- let H := fresh in
- intro H; apply H;
- repeat match goal with |- and _ _ => apply conj end;
- lazymatch goal with
- | [ |- is_bounded _ = true ]
- => apply is_bounded_proj1_fe25519_32
- | [ |- wire_digits_is_bounded _ = true ]
- => apply is_bounded_proj1_wire_digits
- end.
-
-Lemma add_correct (f g : fe25519_32) : proj1_fe25519_32 (add f g) = carry_add (proj1_fe25519_32 f) (proj1_fe25519_32 g).
-Proof. op_correct_t add addW_correct_and_bounded. Qed.
-Lemma sub_correct (f g : fe25519_32) : proj1_fe25519_32 (sub f g) = carry_sub (proj1_fe25519_32 f) (proj1_fe25519_32 g).
-Proof. op_correct_t sub subW_correct_and_bounded. Qed.
-Lemma mul_correct (f g : fe25519_32) : proj1_fe25519_32 (mul f g) = GF25519_32.mul (proj1_fe25519_32 f) (proj1_fe25519_32 g).
-Proof. op_correct_t mul mulW_correct_and_bounded. Qed.
-Lemma opp_correct (f : fe25519_32) : proj1_fe25519_32 (opp f) = carry_opp (proj1_fe25519_32 f).
-Proof. op_correct_t opp oppW_correct_and_bounded. Qed.
-Lemma freeze_correct (f : fe25519_32) : proj1_fe25519_32 (freeze f) = GF25519_32.freeze (proj1_fe25519_32 f).
-Proof. op_correct_t freeze freezeW_correct_and_bounded. Qed.
-Lemma ge_modulus_correct (f : fe25519_32) : word64ToZ (ge_modulus f) = GF25519_32.ge_modulus (proj1_fe25519_32 f).
-Proof. op_correct_t ge_modulus ge_modulusW_correct. Qed.
-Lemma pack_correct (f : fe25519_32) : proj1_wire_digits (pack f) = GF25519_32.pack (proj1_fe25519_32 f).
-Proof. op_correct_t pack packW_correct_and_bounded. Qed.
-Lemma unpack_correct (f : wire_digits) : proj1_fe25519_32 (unpack f) = GF25519_32.unpack (proj1_wire_digits f).
-Proof. op_correct_t unpack unpackW_correct_and_bounded. Qed.
-Lemma pow_correct (f : fe25519_32) chain : proj1_fe25519_32 (pow f chain) = GF25519_32.pow (proj1_fe25519_32 f) chain.
-Proof. op_correct_t pow (powW_correct_and_bounded chain). Qed.
-Lemma inv_correct (f : fe25519_32) : proj1_fe25519_32 (inv f) = GF25519_32.inv (proj1_fe25519_32 f).
-Proof. op_correct_t inv (fun x p => proj1 (invW_correct_and_bounded x p)). Qed.
-Lemma sqrt_correct (f : fe25519_32) : proj1_fe25519_32 (sqrt f) = GF25519_32sqrt (proj1_fe25519_32 f).
-Proof. op_correct_t sqrt sqrtW_correct_and_bounded. Qed.
-
-Import Morphisms.
-
-Local Existing Instance prime_modulus.
-
-Lemma field25519_32_and_homomorphisms
- : @field fe25519_32 eq zero one opp add sub mul inv div
- /\ @Ring.is_homomorphism (F _) (@Logic.eq _) 1%F F.add F.mul fe25519_32 eq one add mul encode
- /\ @Ring.is_homomorphism fe25519_32 eq one add mul (F _) (@Logic.eq _) 1%F F.add F.mul decode.
-Proof.
- eapply @Field.field_and_homomorphism_from_redundant_representation.
- { exact (F.field_modulo _). }
- { cbv [decode encode]; intros; rewrite !proj1_fe25519_32_exist_fe25519_32; apply encode_rep. }
- { reflexivity. }
- { reflexivity. }
- { reflexivity. }
- { cbv [decode encode]; intros; rewrite opp_correct, carry_opp_correct, carry_opp_opt_correct, carry_opp_rep; apply opp_rep; reflexivity. }
- { cbv [decode encode]; intros; rewrite add_correct, carry_add_correct, carry_add_opt_correct, carry_add_rep; apply add_rep; reflexivity. }
- { cbv [decode encode]; intros; rewrite sub_correct, carry_sub_correct, carry_sub_opt_correct, carry_sub_rep; apply sub_rep; reflexivity. }
- { cbv [decode encode]; intros; rewrite mul_correct, GF25519_32.mul_correct, carry_mul_opt_correct by reflexivity; apply carry_mul_rep; reflexivity. }
- { cbv [decode encode]; intros; rewrite inv_correct, GF25519_32.inv_correct, inv_opt_correct by reflexivity; apply inv_rep; reflexivity. }
- { cbv [decode encode div]; intros; rewrite !proj1_fe25519_32_exist_fe25519_32; apply encode_rep. }
-Qed.
-
-Global Instance field25519_32 : @field fe25519_32 eq zero one opp add sub mul inv div := proj1 field25519_32_and_homomorphisms.
-
-Local Opaque proj1_fe25519_32 exist_fe25519_32 proj1_fe25519_32W exist_fe25519_32W.
-Global Instance homomorphism_F25519_32_encode
- : @Ring.is_homomorphism (F modulus) Logic.eq F.one F.add F.mul fe25519_32 eq one add mul encode.
-Proof. apply field25519_32_and_homomorphisms. Qed.
-
-Global Instance homomorphism_F25519_32_decode
- : @Ring.is_homomorphism fe25519_32 eq one add mul (F modulus) Logic.eq F.one F.add F.mul decode.
-Proof. apply field25519_32_and_homomorphisms. Qed.
diff --git a/src/SpecificGen/GF25519_32BoundedAddCoordinates.v b/src/SpecificGen/GF25519_32BoundedAddCoordinates.v
deleted file mode 100644
index 6e5bdae4f..000000000
--- a/src/SpecificGen/GF25519_32BoundedAddCoordinates.v
+++ /dev/null
@@ -1,78 +0,0 @@
-Require Import Coq.ZArith.ZArith.
-Require Import Crypto.SpecificGen.GF25519_32.
-Require Import Crypto.SpecificGen.GF25519_32BoundedCommon.
-Require Import Crypto.SpecificGen.GF25519_32ReflectiveAddCoordinates.
-Require Import Crypto.Util.LetIn.
-Local Open Scope Z.
-
-Local Ltac bounded_t opW blem :=
- apply blem; apply is_bounded_proj1_fe25519_32.
-
-Local Ltac define_binop f g opW blem :=
- refine (exist_fe25519_32W (opW (proj1_fe25519_32W f) (proj1_fe25519_32W g)) _);
- abstract bounded_t opW blem.
-
-Local Opaque Let_In.
-Local Opaque Z.add Z.sub Z.mul Z.shiftl Z.shiftr Z.land Z.lor Z.eqb NToWord64.
-(*Local Arguments interp_radd_coordinates / _ _ _ _ _ _ _ _ _.
-Definition add_coordinatesW (x0 x1 x2 x3 x4 x5 x6 x7 x8 : fe25519_32W) : Tuple.tuple fe25519_32W 4
- := Eval simpl in interp_radd_coordinates x0 x1 x2 x3 x4 x5 x6 x7 x8.
-
-Local Ltac port_correct_and_bounded pre_rewrite opW interp_rop rop_cb :=
- change opW with (interp_rop);
- rewrite pre_rewrite;
- intros; apply rop_cb; assumption.
-
-Lemma add_coordinatesW_correct_and_bounded : i9top_correct_and_bounded 4 add_coordinatesW Reified.AddCoordinates.add_coordinates.
-Proof. port_correct_and_bounded interp_radd_coordinates_correct add_coordinatesW interp_radd_coordinates radd_coordinates_correct_and_bounded. Qed.
-
-Local Ltac define_9_4op x0 x1 x2 x3 x4 x5 x6 x7 x8 opW blem :=
- refine (let ts := opW (proj1_fe25519_32W x0)
- (proj1_fe25519_32W x1)
- (proj1_fe25519_32W x2)
- (proj1_fe25519_32W x3)
- (proj1_fe25519_32W x4)
- (proj1_fe25519_32W x5)
- (proj1_fe25519_32W x6)
- (proj1_fe25519_32W x7)
- (proj1_fe25519_32W x8) in
- HList.mapt exist_fe25519_32W (ts:=ts) _);
- abstract (
- rewrite <- (HList.hlist_map (F:=fun x => is_bounded x = true) (f:=fe25519_32WToZ));
- apply add_coordinatesW_correct_and_bounded; apply is_bounded_proj1_fe25519_32
- ).
-Definition add_coordinates (x0 x1 x2 x3 x4 x5 x6 x7 x8 : fe25519_32) : Tuple.tuple fe25519_32 4.
-Proof. define_9_4op x0 x1 x2 x3 x4 x5 x6 x7 x8 add_coordinatesW add_coordinatesW_correct_and_bounded. Defined.
-
-Local Ltac op_correct_t op opW_correct_and_bounded :=
- cbv [op];
- rewrite ?HList.map_mapt;
- lazymatch goal with
- | [ |- context[proj1_fe25519_32 (exist_fe25519_32W _ _)] ]
- => rewrite proj1_fe25519_32_exist_fe25519_32W || setoid_rewrite proj1_fe25519_32_exist_fe25519_32W
- | [ |- context[proj1_wire_digits (exist_wire_digitsW _ _)] ]
- => rewrite proj1_wire_digits_exist_wire_digitsW
- | _ => idtac
- end;
- rewrite <- ?HList.map_is_mapt;
- apply opW_correct_and_bounded;
- lazymatch goal with
- | [ |- is_bounded _ = true ]
- => apply is_bounded_proj1_fe25519_32
- | [ |- wire_digits_is_bounded _ = true ]
- => apply is_bounded_proj1_wire_digits
- end.
-
-Lemma add_coordinates_correct (x0 x1 x2 x3 x4 x5 x6 x7 x8 : fe25519_32)
- : Tuple.map (n:=4) proj1_fe25519_32 (add_coordinates x0 x1 x2 x3 x4 x5 x6 x7 x8)
- = Reified.AddCoordinates.add_coordinates (proj1_fe25519_32 x0)
- (proj1_fe25519_32 x1)
- (proj1_fe25519_32 x2)
- (proj1_fe25519_32 x3)
- (proj1_fe25519_32 x4)
- (proj1_fe25519_32 x5)
- (proj1_fe25519_32 x6)
- (proj1_fe25519_32 x7)
- (proj1_fe25519_32 x8).
-Proof. op_correct_t add_coordinates add_coordinatesW_correct_and_bounded. Qed.
-*)
diff --git a/src/SpecificGen/GF25519_32BoundedCommon.v b/src/SpecificGen/GF25519_32BoundedCommon.v
deleted file mode 100644
index f21a391b8..000000000
--- a/src/SpecificGen/GF25519_32BoundedCommon.v
+++ /dev/null
@@ -1,819 +0,0 @@
-Require Import Coq.Classes.Morphisms.
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParams.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParamProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemOpt.
-Require Import Crypto.SpecificGen.GF25519_32.
-Require Import Bedrock.Word Crypto.Util.WordUtil.
-Require Import Coq.Lists.List Crypto.Util.ListUtil.
-Require Import Crypto.Tactics.VerdiTactics.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Notations.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Util.HList.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Algebra.
-Import ListNotations.
-Require Import Coq.ZArith.ZArith Coq.ZArith.Zpower Coq.ZArith.ZArith Coq.ZArith.Znumtheory.
-Local Open Scope Z.
-
-(* BEGIN common curve-specific definitions *)
-Definition bit_width : nat := Eval compute in Z.to_nat (GF25519_32.int_width).
-Local Notation b_of exp := (0, 2^exp + 2^(exp-3))%Z (only parsing). (* max is [(0, 2^(exp+2) + 2^exp + 2^(exp-1) + 2^(exp-3) + 2^(exp-4) + 2^(exp-5) + 2^(exp-6) + 2^(exp-10) + 2^(exp-12) + 2^(exp-13) + 2^(exp-14) + 2^(exp-15) + 2^(exp-17) + 2^(exp-23) + 2^(exp-24))%Z] *)
-Definition bounds_exp : tuple Z length_fe25519_32
- := Eval compute in
- Tuple.from_list length_fe25519_32 limb_widths eq_refl.
-Definition bounds : tuple (Z * Z) length_fe25519_32
- := Eval compute in
- Tuple.map (fun e => b_of e) bounds_exp.
-Definition wire_digit_bounds_exp : tuple Z (length wire_widths)
- := Eval compute in Tuple.from_list _ wire_widths eq_refl.
-Definition wire_digit_bounds : tuple (Z * Z) (length wire_widths)
- := Eval compute in Tuple.map (fun e => (0,2^e-1)%Z) wire_digit_bounds_exp.
-(* END common curve-specific definitions *)
-
-(* BEGIN aliases for word extraction *)
-Definition word64 := Word.word bit_width.
-Coercion word64ToZ (x : word64) : Z := Z.of_N (wordToN x).
-Coercion ZToWord64 (x : Z) : word64 := NToWord _ (Z.to_N x).
-Definition NToWord64 : N -> word64 := NToWord _.
-Definition word64ize (x : word64) : word64
- := Eval cbv [wordToN N.succ_double N.double] in NToWord64 (wordToN x).
-Definition w64eqb (x y : word64) := weqb x y.
-
-Global Arguments NToWord64 : simpl never.
-Arguments word64 : simpl never.
-Arguments bit_width : simpl never.
-Global Opaque word64.
-Global Opaque bit_width.
-
-(* END aliases for word extraction *)
-
-(* BEGIN basic types *)
-Module Type WordIsBounded.
- Parameter is_boundedT : forall (lower upper : Z), word64 -> bool.
- Parameter Build_is_boundedT : forall {lower upper} {proj_word : word64},
- andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z = true -> is_boundedT lower upper proj_word = true.
- Parameter project_is_boundedT : forall {lower upper} {proj_word : word64},
- is_boundedT lower upper proj_word = true -> andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z = true.
-End WordIsBounded.
-
-Module Import WordIsBoundedDefault : WordIsBounded.
- Definition is_boundedT : forall (lower upper : Z), word64 -> bool
- := fun lower upper proj_word => andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z.
- Definition Build_is_boundedT {lower upper} {proj_word : word64}
- : andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z = true -> is_boundedT lower upper proj_word = true
- := fun x => x.
- Definition project_is_boundedT {lower upper} {proj_word : word64}
- : is_boundedT lower upper proj_word = true -> andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z = true
- := fun x => x.
-End WordIsBoundedDefault.
-
-Definition bounded_word (lower upper : Z)
- := { proj_word : word64 | is_boundedT lower upper proj_word = true }.
-Local Notation word_of exp := (bounded_word (fst (b_of exp)) (snd (b_of exp))).
-Local Notation unbounded_word sz := (bounded_word 0 (2^sz-1)%Z).
-
-Local Opaque word64.
-Definition fe25519_32W := Eval cbv (*-[word64]*) in (tuple word64 length_fe25519_32).
-Definition wire_digitsW := Eval cbv (*-[word64]*) in (tuple word64 (length wire_widths)).
-Definition fe25519_32 :=
- Eval cbv -[bounded_word Z.pow Z.sub Z.add] in
- hlist (fun e => word_of e) bounds_exp.
-Definition wire_digits :=
- Eval cbv -[bounded_word Z.pow Z.sub Z.add] in
- hlist (fun e => unbounded_word e) wire_digit_bounds_exp.
-
-Definition is_bounded_gen {n} (x : tuple Z n) (bounds : tuple (Z * Z) n) : bool
- := let res := Tuple.map2
- (fun bounds v =>
- let '(lower, upper) := bounds in
- (lower <=? v) && (v <=? upper))%bool%Z
- bounds x in
- List.fold_right andb true (Tuple.to_list _ res).
-
-Definition is_bounded (x : SpecificGen.GF25519_32.fe25519_32) : bool
- := is_bounded_gen (n:=length_fe25519_32) x bounds.
-
-Definition wire_digits_is_bounded (x : SpecificGen.GF25519_32.wire_digits) : bool
- := is_bounded_gen (n:=length wire_widths) x wire_digit_bounds.
-
-(* END basic types *)
-
-Section generic_destructuring.
- Fixpoint app_on' A n : forall T (f : tuple' A n) (P : forall x : tuple' A n, T x), T f
- := match n return forall T (f : tuple' A n) (P : forall x : tuple' A n, T x), T f with
- | O => fun T v P => P v
- | S n' => fun T v P => let '(v, x) := v in app_on' A n' _ v (fun v => P (v, x))
- end.
- Definition app_on {A n} : forall {T} (f : tuple A n) (P : forall x : tuple A n, T x), T f
- := match n return forall T (f : tuple A n) (P : forall x : tuple A n, T x), T f with
- | O => fun T v P => P v
- | S n' => @app_on' A n'
- end.
- Lemma app_on'_correct {A n T} f (P : forall x : tuple' A n, T x) : app_on' A n T f P = P f.
- Proof.
- induction n; simpl in *; destruct_head' prod; [ reflexivity | exact (IHn _ _ (fun t => P (t, _))) ].
- Qed.
- Lemma app_on_correct {A n T} f (P : forall x : tuple A n, T x) : app_on f P = P f.
- Proof. destruct n; [ reflexivity | apply app_on'_correct ]. Qed.
-
- Fixpoint app_on_h' A F n : forall ts T (f : @hlist' A n F ts) (P : forall x : @hlist' A n F ts, T x), T f
- := match n return forall ts T (f : @hlist' A n F ts) (P : forall x : @hlist' A n F ts, T x), T f with
- | O => fun ts T v P => P v
- | S n' => fun ts T v P => let '(v, x) := v in app_on_h' A F n' _ _ v (fun v => P (v, x))
- end.
- Definition app_on_h {A F n} : forall ts T (f : @hlist A n F ts) (P : forall x : @hlist A n F ts, T x), T f
- := match n return forall ts T (f : @hlist A n F ts) (P : forall x : @hlist A n F ts, T x), T f with
- | O => fun ts T v P => P v
- | S n' => @app_on_h' A F n'
- end.
- Lemma app_on_h'_correct {A F n ts T} f P : @app_on_h' A F n ts T f P = P f.
- Proof.
- induction n; simpl in *; destruct_head' prod; [ reflexivity | exact (IHn _ _ _ (fun h => P (h, f))) ].
- Qed.
- Lemma app_on_h_correct {A} F {n} ts {T} f P : @app_on_h A F n ts T f P = P f.
- Proof. destruct n; [ reflexivity | apply app_on_h'_correct ]. Qed.
-
- Definition app_wire_digitsW_dep {A T} (P : forall x : tuple A (length wire_widths), T x)
- : forall (f : tuple A (length wire_widths)), T f
- := Eval compute in fun f => @app_on A (length wire_widths) T f P.
- Definition app_wire_digitsW {A T} (f : tuple A (length wire_widths)) (P : tuple A (length wire_widths) -> T)
- := Eval compute in @app_wire_digitsW_dep A (fun _ => T) P f.
- Definition app_fe25519_32W_dep {A T} (P : forall x : tuple A length_fe25519_32, T x)
- : forall (f : tuple A length_fe25519_32), T f
- := Eval compute in fun f => @app_on A length_fe25519_32 T f P.
- Definition app_fe25519_32W {A T} (f : tuple A length_fe25519_32) (P : tuple A length_fe25519_32 -> T)
- := Eval compute in @app_fe25519_32W_dep A (fun _ => T) P f.
- Definition app_fe25519_32_dep {T} (P : forall x : fe25519_32, T x)
- : forall f : fe25519_32, T f
- := Eval compute in fun f => @app_on_h _ (fun e => word_of e) length_fe25519_32 bounds_exp T f P.
- Definition app_fe25519_32 {T} (f : fe25519_32) (P : hlist (fun e => word_of e) bounds_exp -> T)
- := Eval compute in @app_fe25519_32_dep (fun _ => T) P f.
- Definition app_wire_digits_dep {T} (P : forall x : wire_digits, T x)
- : forall f : wire_digits, T f
- := Eval compute in fun f => @app_on_h _ (fun e => unbounded_word e) (length wire_widths) wire_digit_bounds_exp T f P.
- Definition app_wire_digits {T} (f : wire_digits) (P : hlist (fun e => unbounded_word e) wire_digit_bounds_exp -> T)
- := Eval compute in @app_wire_digits_dep (fun _ => T) P f.
-
- Definition app_wire_digitsW_dep_correct {A T} f P : @app_wire_digitsW_dep A T P f = P f
- := app_on_correct f P.
- Definition app_wire_digitsW_correct {A T} f P : @app_wire_digitsW A T f P = P f
- := @app_wire_digitsW_dep_correct A (fun _ => T) f P.
- Definition app_fe25519_32W_dep_correct {A T} f P : @app_fe25519_32W_dep A T P f = P f
- := app_on_correct f P.
- Definition app_fe25519_32W_correct {A T} f P : @app_fe25519_32W A T f P = P f
- := @app_fe25519_32W_dep_correct A (fun _ => T) f P.
- Definition app_fe25519_32_dep_correct {T} f P : @app_fe25519_32_dep T P f = P f
- := app_on_h_correct (fun e => word_of e) bounds_exp f P.
- Definition app_fe25519_32_correct {T} f P : @app_fe25519_32 T f P = P f
- := @app_fe25519_32_dep_correct (fun _ => T) f P.
- Definition app_wire_digits_dep_correct {T} f P : @app_wire_digits_dep T P f = P f
- := app_on_h_correct (fun e => unbounded_word e) wire_digit_bounds_exp f P.
- Definition app_wire_digits_correct {T} f P : @app_wire_digits T f P = P f
- := @app_wire_digits_dep_correct (fun _ => T) f P.
-
- Definition appify2 {T} (op : fe25519_32W -> fe25519_32W -> T) (f g : fe25519_32W) :=
- app_fe25519_32W f (fun f0 => (app_fe25519_32W g (fun g0 => op f0 g0))).
-
- Lemma appify2_correct : forall {T} op f g, @appify2 T op f g = op f g.
- Proof.
- intros. cbv [appify2].
- etransitivity; apply app_fe25519_32W_correct.
- Qed.
-
- Definition appify9 {T} (op : fe25519_32W -> fe25519_32W -> fe25519_32W -> fe25519_32W -> fe25519_32W -> fe25519_32W -> fe25519_32W -> fe25519_32W -> fe25519_32W -> T) (x0 x1 x2 x3 x4 x5 x6 x7 x8 : fe25519_32W) :=
- app_fe25519_32W x0 (fun x0' =>
- app_fe25519_32W x1 (fun x1' =>
- app_fe25519_32W x2 (fun x2' =>
- app_fe25519_32W x3 (fun x3' =>
- app_fe25519_32W x4 (fun x4' =>
- app_fe25519_32W x5 (fun x5' =>
- app_fe25519_32W x6 (fun x6' =>
- app_fe25519_32W x7 (fun x7' =>
- app_fe25519_32W x8 (fun x8' =>
- op x0' x1' x2' x3' x4' x5' x6' x7' x8'))))))))).
-
- Lemma appify9_correct : forall {T} op x0 x1 x2 x3 x4 x5 x6 x7 x8,
- @appify9 T op x0 x1 x2 x3 x4 x5 x6 x7 x8 = op x0 x1 x2 x3 x4 x5 x6 x7 x8.
- Proof.
- intros. cbv [appify9].
- repeat (etransitivity; [ apply app_fe25519_32W_correct | ]); reflexivity.
- Qed.
-End generic_destructuring.
-
-Definition eta_fe25519_32W_sig (x : fe25519_32W) : { v : fe25519_32W | v = x }.
-Proof.
- eexists; symmetry.
- repeat (etransitivity; [ apply surjective_pairing | apply f_equal2 ]); reflexivity.
-Defined.
-Definition eta_fe25519_32W (x : fe25519_32W) : fe25519_32W
- := Eval cbv [proj1_sig eta_fe25519_32W_sig] in proj1_sig (eta_fe25519_32W_sig x).
-Definition eta_wire_digitsW_sig (x : wire_digitsW) : { v : wire_digitsW | v = x }.
-Proof.
- eexists; symmetry.
- repeat (etransitivity; [ apply surjective_pairing | apply f_equal2 ]); reflexivity.
-Defined.
-Definition eta_wire_digitsW (x : wire_digitsW) : wire_digitsW
- := Eval cbv [proj1_sig eta_wire_digitsW_sig] in proj1_sig (eta_wire_digitsW_sig x).
-
-Local Transparent word64.
-Lemma word64ize_id x : word64ize x = x.
-Proof. apply NToWord_wordToN. Qed.
-Local Opaque word64.
-
-Lemma word64eqb_Zeqb x y : (word64ToZ x =? word64ToZ y)%Z = w64eqb x y.
-Proof. apply wordeqb_Zeqb. Qed.
-
-Local Arguments Z.pow_pos !_ !_ / .
-Lemma word64ToZ_ZToWord64 x : 0 <= x < 2^Z.of_nat bit_width -> word64ToZ (ZToWord64 x) = x.
-Proof.
- intros; unfold word64ToZ, ZToWord64.
- rewrite wordToN_NToWord_idempotent, Z2N.id
- by (omega || apply N2Z.inj_lt; rewrite <- ?(N_nat_Z (Npow2 _)), ?Npow2_nat, ?Zpow_pow2, ?N2Z.id, ?Z2N.id, ?Z2Nat.id by omega; omega).
- reflexivity.
-Qed.
-Lemma ZToWord64_word64ToZ x : ZToWord64 (word64ToZ x) = x.
-Proof.
- intros; unfold word64ToZ, ZToWord64.
- rewrite N2Z.id, NToWord_wordToN; reflexivity.
-Qed.
-
-(* BEGIN precomputation. *)
-
-Definition proj_word {lower upper} (v : bounded_word lower upper) := Eval cbv [proj1_sig] in proj1_sig v.
-Definition word_bounded {lower upper} (v : bounded_word lower upper)
- : andb (lower <=? proj_word v)%Z (proj_word v <=? upper)%Z = true
- := project_is_boundedT (proj2_sig v).
-Definition Build_bounded_word' {lower upper} proj_word word_bounded : bounded_word lower upper
- := exist _ proj_word (Build_is_boundedT word_bounded).
-Arguments proj_word {_ _} _.
-Arguments word_bounded {_ _} _.
-Arguments Build_bounded_word' {_ _} _ _.
-Definition Build_bounded_word {lower upper} (proj_word : word64) (word_bounded : andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z = true)
- : bounded_word lower upper
- := Build_bounded_word'
- proj_word
- (match andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z as b return b = true -> b = true with
- | true => fun _ => eq_refl
- | false => fun x => x
- end word_bounded).
-Lemma word_to_unbounded_helper {x e : nat} : (x < pow2 e)%nat -> (Z.of_nat e <= Z.of_nat bit_width)%Z -> ((0 <=? word64ToZ (ZToWord64 (Z.of_nat x))) && (word64ToZ (ZToWord64 (Z.of_nat x)) <=? 2 ^ (Z.of_nat e) - 1))%bool = true.
-Proof.
- rewrite pow2_id; intro H; apply Nat2Z.inj_lt in H; revert H.
- rewrite Z.pow_Zpow; simpl Z.of_nat.
- intros H H'.
- assert (2^Z.of_nat e <= 2^Z.of_nat bit_width) by auto with zarith.
- rewrite ?word64ToZ_ZToWord64 by omega.
- match goal with
- | [ |- context[andb ?x ?y] ]
- => destruct x eqn:?, y eqn:?; try reflexivity; Z.ltb_to_lt
- end;
- intros; omega.
-Qed.
-Definition word_to_unbounded_word {sz} (x : word sz) : (Z.of_nat sz <=? Z.of_nat bit_width)%Z = true -> unbounded_word (Z.of_nat sz).
-Proof.
- refine (fun pf => Build_bounded_word (Z.of_N (wordToN x)) _).
- abstract (rewrite wordToN_nat, nat_N_Z; Z.ltb_to_lt; apply (word_to_unbounded_helper (wordToNat_bound x)); simpl; omega).
-Defined.
-Definition word32_to_unbounded_word (x : word 32) : unbounded_word 32.
-Proof. apply (word_to_unbounded_word x); reflexivity. Defined.
-Definition word31_to_unbounded_word (x : word 31) : unbounded_word 31.
-Proof. apply (word_to_unbounded_word x); reflexivity. Defined.
-
-Local Opaque word64.
-Declare Reduction app_tuple_map := cbv [app_wire_digitsW app_fe25519_32W app_fe25519_32 HList.mapt HList.mapt' Tuple.map on_tuple List.map List.app length_fe25519_32 List.length wire_widths Tuple.from_list Tuple.from_list' Tuple.to_list Tuple.to_list' fst snd].
-Definition fe25519_32WToZ (x : fe25519_32W) : SpecificGen.GF25519_32.fe25519_32
- := Eval app_tuple_map in
- app_fe25519_32W x (Tuple.map (fun v : word64 => v : Z)).
-Definition fe25519_32ZToW (x : SpecificGen.GF25519_32.fe25519_32) : fe25519_32W
- := Eval app_tuple_map in
- app_fe25519_32W x (Tuple.map (fun v : Z => v : word64)).
-Definition wire_digitsWToZ (x : wire_digitsW) : SpecificGen.GF25519_32.wire_digits
- := Eval app_tuple_map in
- app_wire_digitsW x (Tuple.map (fun v : word64 => v : Z)).
-Definition wire_digitsZToW (x : SpecificGen.GF25519_32.wire_digits) : wire_digitsW
- := Eval app_tuple_map in
- app_wire_digitsW x (Tuple.map (fun v : Z => v : word64)).
-Definition fe25519_32W_word64ize (x : fe25519_32W) : fe25519_32W
- := Eval app_tuple_map in
- app_fe25519_32W x (Tuple.map word64ize).
-Definition wire_digitsW_word64ize (x : wire_digitsW) : wire_digitsW
- := Eval app_tuple_map in
- app_wire_digitsW x (Tuple.map word64ize).
-
-(** TODO: Turn this into a lemma to speed up proofs *)
-Ltac unfold_is_bounded_in' H :=
- lazymatch type of H with
- | andb _ _ = true
- => apply andb_prop in H;
- let H1 := fresh in
- let H2 := fresh in
- destruct H as [H1 H2];
- unfold_is_bounded_in' H1;
- unfold_is_bounded_in' H2
- | _ => idtac
- end.
-Ltac preunfold_is_bounded_in H :=
- unfold is_bounded, wire_digits_is_bounded, is_bounded_gen, fe25519_32WToZ, wire_digitsWToZ in H;
- cbv [to_list length bounds wire_digit_bounds from_list from_list' map2 on_tuple2 to_list' ListUtil.map2 Tuple.map List.map fold_right List.rev List.app length_fe25519_32 List.length wire_widths HList.hlistP HList.hlistP' Tuple.on_tuple] in H.
-Ltac unfold_is_bounded_in H :=
- preunfold_is_bounded_in H;
- unfold_is_bounded_in' H.
-
-Ltac preunfold_is_bounded :=
- unfold is_bounded, wire_digits_is_bounded, is_bounded_gen, fe25519_32WToZ, wire_digitsWToZ;
- cbv [to_list length bounds wire_digit_bounds from_list from_list' map2 on_tuple2 to_list' ListUtil.map2 Tuple.map List.map fold_right List.rev List.app length_fe25519_32 List.length wire_widths HList.hlistP HList.hlistP' Tuple.on_tuple].
-
-Ltac unfold_is_bounded :=
- preunfold_is_bounded;
- repeat match goal with
- | [ |- andb _ _ = true ] => apply andb_true_intro
- | [ |- and _ _ ] => split
- end.
-
-Local Transparent bit_width.
-Definition Pow2_64 := Eval compute in 2^Z.of_nat bit_width.
-Definition unfold_Pow2_64 : 2^Z.of_nat bit_width = Pow2_64 := eq_refl.
-Local Opaque bit_width.
-
-Local Ltac prove_lt_bit_width :=
- rewrite unfold_Pow2_64; cbv [Pow2_64]; omega.
-
-Lemma fe25519_32ZToW_WToZ (x : fe25519_32W) : fe25519_32ZToW (fe25519_32WToZ x) = x.
-Proof.
- hnf in x; destruct_head' prod; cbv [fe25519_32WToZ fe25519_32ZToW].
- rewrite !ZToWord64_word64ToZ; reflexivity.
-Qed.
-
-Lemma fe25519_32WToZ_ZToW x : is_bounded x = true -> fe25519_32WToZ (fe25519_32ZToW x) = x.
-Proof.
- hnf in x; destruct_head' prod; cbv [fe25519_32WToZ fe25519_32ZToW].
- intro H.
- unfold_is_bounded_in H; destruct_head' and.
- Z.ltb_to_lt.
- rewrite !word64ToZ_ZToWord64 by prove_lt_bit_width.
- reflexivity.
-Qed.
-
-Lemma fe25519_32W_word64ize_id x : fe25519_32W_word64ize x = x.
-Proof.
- hnf in x; destruct_head' prod.
- cbv [fe25519_32W_word64ize];
- repeat apply f_equal2; apply word64ize_id.
-Qed.
-Lemma wire_digitsW_word64ize_id x : wire_digitsW_word64ize x = x.
-Proof.
- hnf in x; destruct_head' prod.
- cbv [wire_digitsW_word64ize];
- repeat apply f_equal2; apply word64ize_id.
-Qed.
-
-Definition uncurry_unop_fe25519_32W {T} (op : fe25519_32W -> T)
- := Eval cbv (*-[word64]*) in Tuple.uncurry (n:=length_fe25519_32) op.
-Definition curry_unop_fe25519_32W {T} op : fe25519_32W -> T
- := Eval cbv (*-[word64]*) in fun f => app_fe25519_32W f (Tuple.curry (n:=length_fe25519_32) op).
-Definition uncurry_binop_fe25519_32W {T} (op : fe25519_32W -> fe25519_32W -> T)
- := Eval cbv (*-[word64]*) in uncurry_unop_fe25519_32W (fun f => uncurry_unop_fe25519_32W (op f)).
-Definition curry_binop_fe25519_32W {T} op : fe25519_32W -> fe25519_32W -> T
- := Eval cbv (*-[word64]*) in appify2 (fun f => curry_unop_fe25519_32W (curry_unop_fe25519_32W op f)).
-
-Definition uncurry_unop_wire_digitsW {T} (op : wire_digitsW -> T)
- := Eval cbv (*-[word64]*) in Tuple.uncurry (n:=length wire_widths) op.
-Definition curry_unop_wire_digitsW {T} op : wire_digitsW -> T
- := Eval cbv (*-[word64]*) in fun f => app_wire_digitsW f (Tuple.curry (n:=length wire_widths) op).
-
-Definition uncurry_9op_fe25519_32W {T} (op : fe25519_32W -> fe25519_32W -> fe25519_32W -> fe25519_32W -> fe25519_32W -> fe25519_32W -> fe25519_32W -> fe25519_32W -> fe25519_32W -> T)
- := Eval cbv (*-[word64]*) in
- uncurry_unop_fe25519_32W (fun x0 =>
- uncurry_unop_fe25519_32W (fun x1 =>
- uncurry_unop_fe25519_32W (fun x2 =>
- uncurry_unop_fe25519_32W (fun x3 =>
- uncurry_unop_fe25519_32W (fun x4 =>
- uncurry_unop_fe25519_32W (fun x5 =>
- uncurry_unop_fe25519_32W (fun x6 =>
- uncurry_unop_fe25519_32W (fun x7 =>
- uncurry_unop_fe25519_32W (fun x8 =>
- op x0 x1 x2 x3 x4 x5 x6 x7 x8))))))))).
-Definition curry_9op_fe25519_32W {T} op : fe25519_32W -> fe25519_32W -> fe25519_32W -> fe25519_32W -> fe25519_32W -> fe25519_32W -> fe25519_32W -> fe25519_32W -> fe25519_32W -> T
- := Eval cbv (*-[word64]*) in
- appify9 (fun x0 x1 x2 x3 x4 x5 x6 x7 x8
- => curry_unop_fe25519_32W (curry_unop_fe25519_32W (curry_unop_fe25519_32W (curry_unop_fe25519_32W (curry_unop_fe25519_32W (curry_unop_fe25519_32W (curry_unop_fe25519_32W (curry_unop_fe25519_32W (curry_unop_fe25519_32W op x0) x1) x2) x3) x4) x5) x6) x7) x8).
-
-Definition proj1_fe25519_32W (x : fe25519_32) : fe25519_32W
- := Eval app_tuple_map in
- app_fe25519_32 x (HList.mapt (fun _ => (@proj_word _ _))).
-Coercion proj1_fe25519_32 (x : fe25519_32) : SpecificGen.GF25519_32.fe25519_32
- := fe25519_32WToZ (proj1_fe25519_32W x).
-
-Lemma is_bounded_proj1_fe25519_32 (x : fe25519_32) : is_bounded (proj1_fe25519_32 x) = true.
-Proof.
- revert x; refine (app_fe25519_32_dep _); intro x.
- hnf in x; destruct_head' prod; destruct_head' bounded_word.
- cbv [is_bounded proj1_fe25519_32 proj1_fe25519_32W fe25519_32WToZ to_list length bounds from_list from_list' map2 on_tuple2 to_list' ListUtil.map2 List.map List.rev List.app proj_word length_fe25519_32 is_bounded_gen].
- apply fold_right_andb_true_iff_fold_right_and_True.
- cbv [fold_right List.map].
- cbv beta in *.
- repeat split; auto using project_is_boundedT.
-Qed.
-
-Definition proj1_wire_digitsW (x : wire_digits) : wire_digitsW
- := app_wire_digits x (HList.mapt (fun _ => proj_word)).
-Coercion proj1_wire_digits (x : wire_digits) : SpecificGen.GF25519_32.wire_digits
- := wire_digitsWToZ (proj1_wire_digitsW x).
-
-Lemma is_bounded_proj1_wire_digits (x : wire_digits) : wire_digits_is_bounded (proj1_wire_digits x) = true.
-Proof.
- revert x; refine (app_wire_digits_dep _); intro x.
- hnf in x; destruct_head' prod; destruct_head' bounded_word.
- cbv [wire_digits_is_bounded proj1_wire_digits proj1_wire_digitsW wire_digitsWToZ to_list length wire_digit_bounds from_list from_list' map2 on_tuple2 to_list' ListUtil.map2 List.map List.rev List.app proj_word is_bounded_gen wire_widths HList.mapt HList.mapt' app_wire_digits fst snd].
- apply fold_right_andb_true_iff_fold_right_and_True.
- cbv [fold_right List.map].
- cbv beta in *.
- repeat split; auto using project_is_boundedT.
-Qed.
-
-Local Ltac make_exist_W' x app_W_dep :=
- let H := fresh in
- revert x; refine (@app_W_dep _ _ _); intros x H;
- let x' := fresh in
- set (x' := x);
- cbv [tuple tuple' length_fe25519_32 List.length wire_widths] in x;
- destruct_head' prod;
- let rec do_refine v H :=
- first [ let v' := (eval cbv [snd fst] in (snd v)) in
- refine (_, Build_bounded_word v' _);
- [ do_refine (fst v) (proj2 H) | subst x'; abstract exact (proj1 H) ]
- | let v' := (eval cbv [snd fst] in v) in
- refine (Build_bounded_word v' _); subst x'; abstract exact (proj1 H) ] in
- let H' := constr:(proj1 (@fold_right_andb_true_iff_fold_right_and_True _) H) in
- let T := type of H' in
- let T := (eval cbv [id
- List.fold_right List.map List.length List.app ListUtil.map2 List.rev
- Tuple.to_list Tuple.to_list' Tuple.from_list Tuple.from_list' Tuple.map2 Tuple.on_tuple2
- fe25519_32 bounds fe25519_32WToZ length_fe25519_32
- wire_digits wire_digit_bounds wire_digitsWToZ wire_widths] in T) in
- let H' := constr:(H' : T) in
- let v := (eval unfold x' in x') in
- do_refine v H'.
-Local Ltac make_exist'' x exist_W ZToW :=
- let H := fresh in
- intro H; apply (exist_W (ZToW x));
- abstract (
- hnf in x; destruct_head' prod;
- let H' := fresh in
- pose proof H as H';
- unfold_is_bounded_in H;
- destruct_head' and; simpl in *;
- Z.ltb_to_lt;
- rewrite ?word64ToZ_ZToWord64 by prove_lt_bit_width;
- assumption
- ).
-Local Ltac make_exist' x app_W_dep exist'' exist_W ZToW :=
- let H := fresh in
- revert x; refine (@app_W_dep _ _ _); intros x H;
- let x' := fresh in
- set (x' := x) in *;
- cbv [tuple tuple' length_fe25519_32 List.length wire_widths] in x;
- destruct_head' prod;
- let rec do_refine v :=
- first [ let v' := (eval cbv [exist_W ZToW exist'' proj_word Build_bounded_word Build_bounded_word' snd fst] in (proj_word v)) in
- refine (Build_bounded_word v' _); subst x'; abstract exact (word_bounded v)
- | let v' := (eval cbv [exist_W ZToW exist'' proj_word Build_bounded_word Build_bounded_word' snd fst] in (proj_word (snd v))) in
- refine (_, Build_bounded_word v' _);
- [ do_refine (fst v) | subst x'; abstract exact (word_bounded (snd v)) ] ] in
- let v := (eval unfold x' in (exist'' x' H)) in
- do_refine v.
-
-Definition exist_fe25519_32W' (x : fe25519_32W) : is_bounded (fe25519_32WToZ x) = true -> fe25519_32.
-Proof. make_exist_W' x (@app_fe25519_32W_dep). Defined.
-Definition exist_fe25519_32W (x : fe25519_32W) : is_bounded (fe25519_32WToZ x) = true -> fe25519_32
- := Eval cbv [app_fe25519_32W_dep exist_fe25519_32W' fe25519_32ZToW] in exist_fe25519_32W' x.
-Definition exist_fe25519_32'' (x : SpecificGen.GF25519_32.fe25519_32) : is_bounded x = true -> fe25519_32.
-Proof. make_exist'' x exist_fe25519_32W fe25519_32ZToW. Defined.
-Definition exist_fe25519_32' (x : SpecificGen.GF25519_32.fe25519_32) : is_bounded x = true -> fe25519_32.
-Proof. make_exist' x (@app_fe25519_32W_dep) exist_fe25519_32'' exist_fe25519_32W fe25519_32ZToW. Defined.
-Definition exist_fe25519_32 (x : SpecificGen.GF25519_32.fe25519_32) : is_bounded x = true -> fe25519_32
- := Eval cbv [exist_fe25519_32' exist_fe25519_32W exist_fe25519_32' app_fe25519_32 app_fe25519_32W_dep] in
- exist_fe25519_32' x.
-
-Lemma proj1_fe25519_32_exist_fe25519_32W x pf : proj1_fe25519_32 (exist_fe25519_32W x pf) = fe25519_32WToZ x.
-Proof. now hnf in x; destruct_head' prod. Qed.
-Lemma proj1_fe25519_32W_exist_fe25519_32 x pf : proj1_fe25519_32W (exist_fe25519_32 x pf) = fe25519_32ZToW x.
-Proof. now hnf in x; destruct_head' prod. Qed.
-Lemma proj1_fe25519_32_exist_fe25519_32 x pf : proj1_fe25519_32 (exist_fe25519_32 x pf) = x.
-Proof.
- hnf in x; destruct_head' prod.
- cbv [proj1_fe25519_32 exist_fe25519_32 proj1_fe25519_32W fe25519_32WToZ proj_word Build_bounded_word Build_bounded_word'].
- unfold_is_bounded_in pf.
- destruct_head' and.
- Z.ltb_to_lt.
- rewrite ?word64ToZ_ZToWord64 by prove_lt_bit_width.
- reflexivity.
-Qed.
-
-Definition exist_wire_digitsW' (x : wire_digitsW)
- : wire_digits_is_bounded (wire_digitsWToZ x) = true -> wire_digits.
-Proof. make_exist_W' x (@app_wire_digitsW_dep). Defined.
-Definition exist_wire_digitsW (x : wire_digitsW)
- : wire_digits_is_bounded (wire_digitsWToZ x) = true -> wire_digits
- := Eval cbv [app_wire_digitsW_dep exist_wire_digitsW' wire_digitsZToW] in exist_wire_digitsW' x.
-Definition exist_wire_digits'' (x : SpecificGen.GF25519_32.wire_digits)
- : wire_digits_is_bounded x = true -> wire_digits.
-Proof. make_exist'' x exist_wire_digitsW wire_digitsZToW. Defined.
-Definition exist_wire_digits' (x : SpecificGen.GF25519_32.wire_digits)
- : wire_digits_is_bounded x = true -> wire_digits.
-Proof. make_exist' x (@app_wire_digitsW_dep) exist_wire_digits'' exist_wire_digitsW wire_digitsZToW. Defined.
-Definition exist_wire_digits (x : SpecificGen.GF25519_32.wire_digits)
- : wire_digits_is_bounded x = true -> wire_digits
- := Eval cbv [exist_wire_digits' exist_wire_digitsW exist_wire_digits' app_wire_digits app_wire_digitsW_dep] in
- exist_wire_digits' x.
-
-Lemma proj1_wire_digits_exist_wire_digitsW x pf : proj1_wire_digits (exist_wire_digitsW x pf) = wire_digitsWToZ x.
-Proof. now hnf in x; destruct_head' prod. Qed.
-Lemma proj1_wire_digitsW_exist_wire_digits x pf : proj1_wire_digitsW (exist_wire_digits x pf) = wire_digitsZToW x.
-Proof. now hnf in x; destruct_head' prod. Qed.
-Lemma proj1_wire_digits_exist_wire_digits x pf : proj1_wire_digits (exist_wire_digits x pf) = x.
-Proof.
- hnf in x; destruct_head' prod.
- cbv [proj1_wire_digits exist_wire_digits proj1_wire_digitsW wire_digitsWToZ proj_word Build_bounded_word Build_bounded_word' app_wire_digits HList.mapt HList.mapt' length wire_widths fst snd].
- unfold_is_bounded_in pf.
- destruct_head' and.
- Z.ltb_to_lt.
- rewrite ?word64ToZ_ZToWord64 by prove_lt_bit_width.
- reflexivity.
-Qed.
-
-Module opt.
- Definition word64ToZ := Eval vm_compute in word64ToZ.
- Definition word64ToN := Eval vm_compute in @wordToN bit_width.
- Definition NToWord64 := Eval vm_compute in NToWord64.
- Definition bit_width := Eval vm_compute in bit_width.
- Definition Zleb := Eval cbv [Z.leb] in Z.leb.
- Definition andb := Eval vm_compute in andb.
- Definition word64ize := Eval vm_compute in word64ize.
-End opt.
-
-Local Transparent bit_width.
-Local Ltac do_change lem :=
- match lem with
- | context L[andb (?x <=? ?y)%Z (?y <=? ?z)]
- => let x' := (eval vm_compute in x) in
- let z' := (eval vm_compute in z) in
- lazymatch y with
- | word64ToZ (word64ize ?v)
- => let y' := constr:(opt.word64ToZ (opt.word64ize v)) in
- let L' := context L[andb (opt.Zleb x' y') (opt.Zleb y' z')] in
- do_change L'
- end
- | _ => lem
- end.
-Definition fe25519_32_word64ize (x : fe25519_32) : fe25519_32.
-Proof.
- set (x' := x).
- hnf in x; destruct_head' prod.
- let lem := constr:(exist_fe25519_32W (fe25519_32W_word64ize (proj1_fe25519_32W x'))) in
- let lem := (eval cbv [proj1_fe25519_32W x' fe25519_32W_word64ize proj_word exist_fe25519_32W Build_bounded_word' Build_bounded_word] in lem) in
- let lem := do_change lem in
- refine (lem _);
- change (is_bounded (fe25519_32WToZ (fe25519_32W_word64ize (proj1_fe25519_32W x'))) = true);
- abstract (rewrite fe25519_32W_word64ize_id; apply is_bounded_proj1_fe25519_32).
-Defined.
-Definition wire_digits_word64ize (x : wire_digits) : wire_digits.
-Proof.
- set (x' := x).
- hnf in x; destruct_head' prod.
- let lem := constr:(exist_wire_digitsW (wire_digitsW_word64ize (proj1_wire_digitsW x'))) in
- let lem := (eval cbv [proj1_wire_digitsW x' wire_digitsW_word64ize proj_word exist_wire_digitsW Build_bounded_word Build_bounded_word'] in lem) in
- let lem := do_change lem in
- let lem := (eval cbv [word64ize opt.word64ize andb Z.leb Z.compare CompOpp Pos.compare] in lem) in
- refine (lem _);
- change (wire_digits_is_bounded (wire_digitsWToZ (wire_digitsW_word64ize (proj1_wire_digitsW x'))) = true);
- abstract (rewrite wire_digitsW_word64ize_id; apply is_bounded_proj1_wire_digits).
-Defined.
-
-Lemma is_bounded_to_nth_default x (H : is_bounded x = true)
- : forall n : nat,
- (n < length limb_widths)%nat
- -> (0 <= nth_default 0 (Tuple.to_list length_fe25519_32 x) n <=
- snd (b_of (nth_default (-1) limb_widths n)))%Z.
-Proof.
- hnf in x; destruct_head' prod.
- unfold_is_bounded_in H; destruct_head' and.
- Z.ltb_to_lt.
- unfold nth_default; simpl.
- intros.
- repeat match goal with
- | [ |- context[nth_error _ ?x] ]
- => is_var x; destruct x; simpl
- end;
- omega.
-Qed.
-
-(* END precomputation *)
-
-(* Precompute constants *)
-
-Definition one' := Eval vm_compute in exist_fe25519_32 SpecificGen.GF25519_32.one_ eq_refl.
-Definition one := Eval cbv [one' fe25519_32_word64ize word64ize andb opt.word64ToZ opt.word64ize opt.Zleb Z.compare CompOpp Pos.compare Pos.compare_cont] in fe25519_32_word64ize one'.
-
-Definition zero' := Eval vm_compute in exist_fe25519_32 SpecificGen.GF25519_32.zero_ eq_refl.
-Definition zero := Eval cbv [zero' fe25519_32_word64ize word64ize andb opt.word64ToZ opt.word64ize opt.Zleb Z.compare CompOpp Pos.compare Pos.compare_cont] in fe25519_32_word64ize zero'.
-
-Lemma fold_chain_opt_gen {A B} (F : A -> B) is_bounded ls id' op' id op chain
- (Hid_bounded : is_bounded (F id') = true)
- (Hid : id = F id')
- (Hop_bounded : forall x y, is_bounded (F x) = true
- -> is_bounded (F y) = true
- -> is_bounded (op (F x) (F y)) = true)
- (Hop : forall x y, is_bounded (F x) = true
- -> is_bounded (F y) = true
- -> op (F x) (F y) = F (op' x y))
- (Hls_bounded : forall n, is_bounded (F (nth_default id' ls n)) = true)
- : F (fold_chain_opt id' op' chain ls)
- = fold_chain_opt id op chain (List.map F ls)
- /\ is_bounded (F (fold_chain_opt id' op' chain ls)) = true.
-Proof.
- rewrite !fold_chain_opt_correct.
- revert dependent ls; induction chain as [|x xs IHxs]; intros.
- { pose proof (Hls_bounded 0%nat).
- destruct ls; simpl; split; trivial; congruence. }
- { destruct x; simpl; unfold Let_In; simpl.
- rewrite (fun ls pf => proj1 (IHxs ls pf)) at 1; simpl.
- { do 2 f_equal.
- rewrite <- Hop, Hid by auto.
- rewrite !map_nth_default_always.
- split; try reflexivity.
- apply (IHxs (_::_)).
- intros [|?]; autorewrite with simpl_nth_default; auto.
- rewrite <- Hop; auto. }
- { intros [|?]; simpl;
- autorewrite with simpl_nth_default; auto.
- rewrite <- Hop; auto. } }
-Qed.
-
-Lemma encode_bounded x : is_bounded (encode x) = true.
-Proof.
- pose proof (bounded_encode x).
- generalize dependent (encode x).
- intro t; compute in t; intros.
- destruct_head' prod.
- unfold Pow2Base.bounded in H.
- cbv [nth_default Tuple.to_list Tuple.to_list' List.length limb_widths params25519_32] in H.
- repeat match type of H with
- | context[nth_error (cons _ _) _]
- => let H' := fresh in
- pose proof (H O) as H'; specialize (fun i => H (S i)); simpl @nth_error in H, H';
- cbv beta iota in H'
- end.
- clear H.
- simpl in *.
- cbv [Z.pow_pos Z.mul Pos.mul Pos.iter nth_default nth_error value] in *.
- unfold is_bounded.
- apply fold_right_andb_true_iff_fold_right_and_True.
- cbv [is_bounded proj1_fe25519_32 to_list length bounds from_list from_list' map2 on_tuple2 to_list' ListUtil.map2 List.map List.rev List.app proj_word fold_right length_fe25519_32].
- repeat split; rewrite !Bool.andb_true_iff, !Z.leb_le; omega.
-Qed.
-
-Definition encode (x : F modulus) : fe25519_32
- := exist_fe25519_32 (encode x) (encode_bounded x).
-
-Definition decode (x : fe25519_32) : F modulus
- := ModularBaseSystem.decode (proj1_fe25519_32 x).
-
-Lemma proj1_fe25519_32_encode x
- : proj1_fe25519_32 (encode x) = ModularBaseSystem.encode x.
-Proof.
- cbv [encode].
- generalize (encode_bounded x); generalize (ModularBaseSystem.encode x).
- intros y pf; intros; hnf in y; destruct_head_hnf' prod.
- cbv [proj1_fe25519_32 exist_fe25519_32 proj1_fe25519_32W Build_bounded_word Build_bounded_word' fe25519_32WToZ proj_word].
- unfold_is_bounded_in pf.
- destruct_head' and.
- Z.ltb_to_lt.
- rewrite ?word64ToZ_ZToWord64 by prove_lt_bit_width.
- reflexivity.
-Qed.
-
-Lemma decode_exist_fe25519_32 x pf
- : decode (exist_fe25519_32 x pf) = ModularBaseSystem.decode x.
-Proof.
- hnf in x; destruct_head' prod.
- cbv [decode proj1_fe25519_32 exist_fe25519_32 proj1_fe25519_32W Build_bounded_word Build_bounded_word' fe25519_32WToZ proj_word].
- unfold_is_bounded_in pf.
- destruct_head' and.
- Z.ltb_to_lt.
- rewrite ?word64ToZ_ZToWord64 by prove_lt_bit_width.
- reflexivity.
-Qed.
-
-Definition div (f g : fe25519_32) : fe25519_32
- := exist_fe25519_32 (div (proj1_fe25519_32 f) (proj1_fe25519_32 g)) (encode_bounded _).
-
-Definition eq (f g : fe25519_32) : Prop := eq (proj1_fe25519_32 f) (proj1_fe25519_32 g).
-
-
-Notation in_op_correct_and_bounded k irop op
- := (((Tuple.map (n:=k) fe25519_32WToZ irop = op)
- /\ HList.hlistP (fun v => is_bounded v = true) (Tuple.map (n:=k) fe25519_32WToZ irop))%type)
- (only parsing).
-
-(*Fixpoint inm_op_correct_and_bounded' (count_in count_out : nat)
- : forall (irop : Tower.tower_nd fe25519_32W (Tuple.tuple fe25519_32W count_out) count_in)
- (op : Tower.tower_nd GF25519_32.fe25519_32 (Tuple.tuple GF25519_32.fe25519_32 count_out) count_in)
- (cont : Prop -> Prop),
- Prop
- := match count_in return
- forall (irop : Tower.tower_nd fe25519_32W (Tuple.tuple fe25519_32W count_out) count_in)
- (op : Tower.tower_nd GF25519_32.fe25519_32 (Tuple.tuple GF25519_32.fe25519_32 count_out) count_in)
- (cont : Prop -> Prop),
- Prop
- with
- | O => fun irop op cont => cont (in_op_correct_and_bounded count_out irop op)
- | S n => fun irop op cont
- => forall x : fe25519_32W,
- @inm_op_correct_and_bounded'
- n count_out (irop x) (op (fe25519_32WToZ x))
- (fun P => cont (is_bounded (fe25519_32WToZ x) = true -> P))
- end.
-Definition inm_op_correct_and_bounded count_in count_out irop op
- := Eval cbv [inm_op_correct_and_bounded' Tower.tower_nd Tuple.tuple Tuple.tuple' HList.hlistP HList.hlistP'] in
- inm_op_correct_and_bounded' count_in count_out irop op (fun P => P).
-Fixpoint inm_op_correct_and_bounded_prefix' (count_in count_out : nat)
- : forall (irop : Tower.tower_nd fe25519_32W (Tuple.tuple fe25519_32W count_out) count_in)
- (op : Tower.tower_nd GF25519_32.fe25519_32 (Tuple.tuple GF25519_32.fe25519_32 count_out) count_in),
- Prop
- := match count_in return
- forall (irop : Tower.tower_nd fe25519_32W (Tuple.tuple fe25519_32W count_out) count_in)
- (op : Tower.tower_nd GF25519_32.fe25519_32 (Tuple.tuple GF25519_32.fe25519_32 count_out) count_in),
- Prop
- with
- | O => fun irop op => in_op_correct_and_bounded count_out irop op
- | S n => fun irop op
- => forall x : fe25519_32W,
- is_bounded (fe25519_32WToZ x) = true
- -> @inm_op_correct_and_bounded_prefix'
- n count_out (irop x) (op (fe25519_32WToZ x))
- end.
-Definition inm_op_correct_and_bounded_prefix count_in count_out irop op
- := inm_op_correct_and_bounded_prefix' count_in count_out irop op.
-
-Lemma inm_op_correct_and_bounded_iff_prefix' count_in count_out irop op
- (cont : Prop -> Prop)
- (cont_forall : forall T (P : T -> Prop), cont (forall x : T, P x) <-> forall x : T, cont (P x))
- : inm_op_correct_and_bounded' count_in count_out irop op cont <-> cont (inm_op_correct_and_bounded_prefix' count_in count_out irop op).
-Proof.
- revert dependent cont; induction count_in as [|count_in IHcount_in]; intros.
- { reflexivity. }
- { simpl.
- rewrite cont_forall.
- split; intros H' x; specialize (H' x);
- specialize (IHcount_in (irop x) (op (fe25519_32WToZ x)) (fun P => cont (is_bounded (fe25519_32WToZ x) = true -> P)));
- cbv beta in *;
- [ erewrite <- IHcount_in; [ assumption | .. ]
- | erewrite -> IHcount_in; [ assumption | .. ] ];
- clear IHcount_in.
- { intros; repeat setoid_rewrite cont_forall; split; eauto. }
- { intros; repeat setoid_rewrite cont_forall; split; eauto. } }
-Qed.
-
-Lemma inm_op_correct_and_bounded_iff_prefix count_in count_out irop op
- : inm_op_correct_and_bounded count_in count_out irop op <-> inm_op_correct_and_bounded_prefix count_in count_out irop op.
-Proof.
- apply (inm_op_correct_and_bounded_iff_prefix' count_in count_out irop op (fun P => P)).
- reflexivity.
-Qed.
-
-Definition inm_op_correct_and_bounded1 count_in irop op
- := Eval cbv [inm_op_correct_and_bounded Tuple.map Tuple.to_list Tuple.to_list' Tuple.from_list Tuple.from_list' Tuple.on_tuple List.map] in
- inm_op_correct_and_bounded count_in 1 irop op.*)
-Notation inm_op_correct_and_bounded n m irop op
- := ((forall x,
- HList.hlistP (fun v => is_bounded v = true) (Tuple.map (n:=n%nat%type) fe25519_32WToZ x)
- -> in_op_correct_and_bounded m (irop x) (op (Tuple.map (n:=n) fe25519_32WToZ x))))
- (only parsing).
-Notation ibinop_correct_and_bounded irop op := (inm_op_correct_and_bounded 2 1 irop op) (only parsing).
-Notation iunop_correct_and_bounded irop op := (inm_op_correct_and_bounded 1 1 irop op) (only parsing).
-Notation iunop_FEToZ_correct irop op
- := (forall x,
- is_bounded (fe25519_32WToZ x) = true
- -> word64ToZ (irop x) = op (fe25519_32WToZ x)) (only parsing).
-Notation iunop_FEToWire_correct_and_bounded irop op
- := (forall x,
- is_bounded (fe25519_32WToZ x) = true
- -> wire_digitsWToZ (irop x) = op (fe25519_32WToZ x)
- /\ wire_digits_is_bounded (wire_digitsWToZ (irop x)) = true) (only parsing).
-Notation iunop_WireToFE_correct_and_bounded irop op
- := (forall x,
- wire_digits_is_bounded (wire_digitsWToZ x) = true
- -> fe25519_32WToZ (irop x) = op (wire_digitsWToZ x)
- /\ is_bounded (fe25519_32WToZ (irop x)) = true) (only parsing).
-Notation i9top_correct_and_bounded k irop op := (inm_op_correct_and_bounded 9 k irop op) (only parsing).
-
-Notation prefreeze := GF25519_32.prefreeze.
diff --git a/src/SpecificGen/GF25519_32BoundedExtendedAddCoordinates.v b/src/SpecificGen/GF25519_32BoundedExtendedAddCoordinates.v
deleted file mode 100644
index 4d28f5376..000000000
--- a/src/SpecificGen/GF25519_32BoundedExtendedAddCoordinates.v
+++ /dev/null
@@ -1,68 +0,0 @@
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.SpecificGen.GF25519_32Bounded.
-Require Import Crypto.SpecificGen.GF25519_32ExtendedAddCoordinates.
-Require Import Crypto.SpecificGen.GF25519_32BoundedAddCoordinates.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-(*
-Lemma fieldwise_eq_extended_add_coordinates_full' twice_d P10 P11 P12 P13 P20 P21 P22 P23
- : Tuple.fieldwise
- (n:=4) GF25519_32BoundedCommon.eq
- (@GF25519_32BoundedAddCoordinates.add_coordinates
- twice_d P10 P11 P12 P13 P20 P21 P22 P23)
- (@ExtendedCoordinates.Extended.add_coordinates
- GF25519_32BoundedCommon.fe25519_32
- GF25519_32Bounded.add GF25519_32Bounded.sub GF25519_32Bounded.mul twice_d
- (P10, P11, P12, P13) (P20, P21, P22, P23)).
-Proof.
- unfold GF25519_32BoundedCommon.eq.
- apply -> (fieldwise_map_iff (n:=4) eq GF25519_32BoundedCommon.proj1_fe25519_32 GF25519_32BoundedCommon.proj1_fe25519_32).
- rewrite add_coordinates_correct.
- cbv [AddCoordinates.add_coordinates].
- setoid_rewrite <- fieldwise_eq_edwards_extended_add_coordinates_carry_nocarry.
- unfold edwards_extended_carry_add_coordinates.
- match goal with |- ?R ?x ?y => rewrite <- (Tuple.map_id (n:=4) x) end.
- apply <- (fieldwise_map_iff (n:=4) eq (fun x => x) GF25519_32BoundedCommon.proj1_fe25519_32).
- apply ExtendedCoordinates.Extended.add_coordinates_respectful_hetero;
- intros;
- repeat match goal with
- | [ |- context[add _ _] ]
- => rewrite add_correct
- | [ |- context[sub _ _] ]
- => rewrite sub_correct
- | [ |- context[mul _ _] ]
- => rewrite mul_correct
- | _ => progress unfold Tuple.fieldwise, Tuple.fieldwise', fst, snd, eq in *
- | [ |- and _ _ ] => split
- | [ |- ?x = ?x ] => reflexivity
- | _ => progress rewrite_strat topdown hints edwards_extended_add_coordinates_correct
- | _ => congruence
- end.
-Qed.
-
-Definition add_coordinates' twice_d P1 P2
- := let '(P10, P11, P12, P13) := P1 in
- let '(P20, P21, P22, P23) := P2 in
- @GF25519_32BoundedAddCoordinates.add_coordinates
- twice_d P10 P11 P12 P13 P20 P21 P22 P23.
-
-Definition add_coordinates twice_d P1 P2
- := Eval cbv beta iota delta [GF25519_32BoundedAddCoordinates.add_coordinates HList.mapt HList.mapt'] in
- let '(P10, P11, P12, P13) := P1 in
- let '(P20, P21, P22, P23) := P2 in
- @GF25519_32BoundedAddCoordinates.add_coordinates
- twice_d P10 P11 P12 P13 P20 P21 P22 P23.
-
-Lemma add_coordinates_correct_full twice_d P1 P2
- : Tuple.fieldwise
- GF25519_32BoundedCommon.eq
- (add_coordinates twice_d P1 P2)
- (@ExtendedCoordinates.Extended.add_coordinates
- GF25519_32BoundedCommon.fe25519_32
- GF25519_32Bounded.add GF25519_32Bounded.sub GF25519_32Bounded.mul twice_d P1 P2).
-Proof.
- destruct_head' prod.
- rewrite <- fieldwise_eq_extended_add_coordinates_full'; reflexivity.
-Qed.
-*)
diff --git a/src/SpecificGen/GF25519_32ExtendedAddCoordinates.v b/src/SpecificGen/GF25519_32ExtendedAddCoordinates.v
deleted file mode 100644
index e375be5f0..000000000
--- a/src/SpecificGen/GF25519_32ExtendedAddCoordinates.v
+++ /dev/null
@@ -1,81 +0,0 @@
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.Algebra.
-Require Import Crypto.Util.Relations.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Tactics.
-
-Require Import Crypto.SpecificGen.GF25519_32.
-Require Import Crypto.CompleteEdwardsCurve.ExtendedCoordinates.
-
-Definition edwards_extended_add_coordinates td P Q :=
- (@ExtendedCoordinates.Extended.add_coordinates _ add sub mul td P Q).
-Definition edwards_extended_carry_add_coordinates td P Q :=
- (@ExtendedCoordinates.Extended.add_coordinates _ carry_add carry_sub mul td P Q).
-
-Create HintDb edwards_extended_add_coordinates_correct discriminated.
-Local Existing Instance field25519_32.
-Hint Rewrite
- (Ring.homomorphism_mul(is_homomorphism:=homomorphism_F25519_32_decode))
- (Ring.homomorphism_add(H1 :=homomorphism_F25519_32_decode))
- (Ring.homomorphism_sub(H1 :=homomorphism_F25519_32_decode))
- : edwards_extended_add_coordinates_correct.
-Lemma edwards_extended_add_coordinates_correct td P Q :
- Tuple.map (n:=4) decode (edwards_extended_add_coordinates td P Q)
- = (@ExtendedCoordinates.Extended.add_coordinates _ F.add F.sub F.mul (decode td) (Tuple.map (n:=4) decode P) (Tuple.map (n:=4) decode Q)).
-Proof.
- change (edwards_extended_add_coordinates td P Q)
- with (@ExtendedCoordinates.Extended.add_coordinates _ add sub mul td P Q).
- destruct_head' prod.
- simpl.
- (*rewrite_strat topdown hints edwards_extended_add_coordinates_correct.*) (* loops on Coq 8.4 *)
- repeat (rewrite ?(Ring.homomorphism_mul(is_homomorphism:=homomorphism_F25519_32_decode)),
- ?(Ring.homomorphism_add(H1 :=homomorphism_F25519_32_decode)),
- ?(Ring.homomorphism_sub(H1 :=homomorphism_F25519_32_decode))).
- reflexivity.
-Qed.
-Local Existing Instance carry_field25519_32.
-Hint Rewrite
- (Ring.homomorphism_mul(is_homomorphism:=homomorphism_carry_F25519_32_decode))
- (Ring.homomorphism_add(H1 :=homomorphism_carry_F25519_32_decode))
- (Ring.homomorphism_sub(H1 :=homomorphism_carry_F25519_32_decode))
- : edwards_extended_add_coordinates_correct.
-Lemma edwards_extended_carry_add_coordinates_correct td P Q :
- Tuple.map (n:=4) decode (edwards_extended_carry_add_coordinates td P Q)
- = (@ExtendedCoordinates.Extended.add_coordinates _ F.add F.sub F.mul (decode td) (Tuple.map (n:=4) decode P) (Tuple.map (n:=4) decode Q)).
-Proof.
- change (edwards_extended_carry_add_coordinates td P Q)
- with (@ExtendedCoordinates.Extended.add_coordinates _ carry_add carry_sub mul td P Q).
- destruct_head' prod.
- simpl.
- (*rewrite_strat topdown hints edwards_extended_add_coordinates_correct.*) (* loops on Coq 8.4 *)
- (* This is an annoying replacement for rewrite_strat loopiness *)
- generalize (Ring.homomorphism_mul(is_homomorphism:=homomorphism_carry_F25519_32_decode)).
- generalize (Ring.homomorphism_add(H1 :=homomorphism_carry_F25519_32_decode)).
- generalize (Ring.homomorphism_sub(H1 :=homomorphism_carry_F25519_32_decode)).
- generalize mul; generalize carry_sub; generalize carry_add.
- intros carry_add' carry_sub' mul'.
- intros H0 H1 H2.
- repeat rewrite ?H2, ?H1, ?H0.
- reflexivity.
-Qed.
-
-Lemma fieldwise_eq_edwards_extended_add_coordinates_carry_nocarry td P Q :
- Tuple.fieldwise
- (n:=4) eq
- (edwards_extended_carry_add_coordinates td P Q)
- (edwards_extended_add_coordinates td P Q).
-Proof.
- pose proof (edwards_extended_carry_add_coordinates_correct td P Q) as H0.
- pose proof (edwards_extended_add_coordinates_correct td P Q) as H1.
- rewrite <- H0 in H1; clear H0.
- assert (Tuple.fieldwise
- (fun x y => x = y)
- (Tuple.map (n:=4) decode (edwards_extended_carry_add_coordinates td P Q))
- (Tuple.map (n:=4) decode (edwards_extended_add_coordinates td P Q)))
- by (rewrite H1; reflexivity).
- clear H1.
- destruct (edwards_extended_carry_add_coordinates td P Q), (edwards_extended_add_coordinates td P Q).
- destruct_head' prod; simpl; unfold eq; trivial.
-Qed.
diff --git a/src/SpecificGen/GF25519_32Reflective.v b/src/SpecificGen/GF25519_32Reflective.v
deleted file mode 100644
index 6e3f169ea..000000000
--- a/src/SpecificGen/GF25519_32Reflective.v
+++ /dev/null
@@ -1,118 +0,0 @@
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParams.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParamProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemOpt.
-Require Export Crypto.SpecificGen.GF25519_32.
-Require Import Crypto.SpecificGen.GF25519_32BoundedCommon.
-Require Import Crypto.Reflection.Reify.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.Map.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Crypto.Reflection.Z.Interpretations64.Relations.
-Require Import Crypto.Reflection.Z.Interpretations64.RelationsCombinations.
-Require Import Crypto.Reflection.Z.Reify.
-Require Import Crypto.Reflection.Z.Syntax.
-Require Import Crypto.SpecificGen.GF25519_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF25519_32Reflective.Reified.
-Require Import Bedrock.Word Crypto.Util.WordUtil.
-Require Import Coq.Lists.List Crypto.Util.ListUtil.
-Require Import Crypto.Tactics.VerdiTactics.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Notations.
-Require Import Crypto.Util.Bool.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Algebra.
-Import ListNotations.
-Require Import Coq.ZArith.ZArith Coq.ZArith.Zpower Coq.ZArith.ZArith Coq.ZArith.Znumtheory.
-Local Open Scope Z.
-
-Definition radd : ExprBinOp := Eval vm_compute in rcarry_addW.
-Definition rsub : ExprBinOp := Eval vm_compute in rcarry_subW.
-Definition rmul : ExprBinOp := Eval vm_compute in rmulW.
-Definition ropp : ExprUnOp := Eval vm_compute in rcarry_oppW.
-Definition rprefreeze : ExprUnOp := Eval vm_compute in rprefreezeW.
-Definition rge_modulus : ExprUnOpFEToZ := Eval vm_compute in rge_modulusW.
-Definition rpack : ExprUnOpFEToWire := Eval vm_compute in rpackW.
-Definition runpack : ExprUnOpWireToFE := Eval vm_compute in runpackW.
-
-Declare Reduction asm_interp
- := cbv beta iota delta
- [id
- interp_bexpr interp_uexpr interp_uexpr_FEToWire interp_uexpr_FEToZ interp_uexpr_WireToFE interp_9_4expr
- Eta.interp_flat_type_eta Eta.interp_flat_type_eta_gen
- radd rsub rmul ropp rprefreeze rge_modulus rpack runpack
- curry_binop_fe25519_32W curry_unop_fe25519_32W curry_unop_wire_digitsW curry_9op_fe25519_32W
- WordW.interp_op WordW.interp_base_type
- Z.interp_op Z.interp_base_type
- Z.Syntax.interp_op Z.Syntax.interp_base_type
- mapf_interp_flat_type WordW.interp_base_type word64ize
- Interp interp interp_flat_type interpf interpf_step interp_flat_type fst snd].
-Ltac asm_interp
- := cbv beta iota delta
- [id
- interp_bexpr interp_uexpr interp_uexpr_FEToWire interp_uexpr_FEToZ interp_uexpr_WireToFE interp_9_4expr
- Eta.interp_flat_type_eta Eta.interp_flat_type_eta_gen
- radd rsub rmul ropp rprefreeze rge_modulus rpack runpack
- curry_binop_fe25519_32W curry_unop_fe25519_32W curry_unop_wire_digitsW curry_9op_fe25519_32W
- WordW.interp_op WordW.interp_base_type
- Z.interp_op Z.interp_base_type
- Z.Syntax.interp_op Z.Syntax.interp_base_type
- mapf_interp_flat_type WordW.interp_base_type word64ize
- Interp interp interp_flat_type interpf interp_flat_type fst snd].
-
-
-Definition interp_radd : SpecificGen.GF25519_32BoundedCommon.fe25519_32W * SpecificGen.GF25519_32BoundedCommon.fe25519_32W -> SpecificGen.GF25519_32BoundedCommon.fe25519_32W
- := Eval asm_interp in interp_bexpr radd.
-(*Print interp_radd.*)
-Definition interp_radd_correct : interp_radd = interp_bexpr radd := eq_refl.
-Definition interp_rsub : SpecificGen.GF25519_32BoundedCommon.fe25519_32W * SpecificGen.GF25519_32BoundedCommon.fe25519_32W -> SpecificGen.GF25519_32BoundedCommon.fe25519_32W
- := Eval asm_interp in interp_bexpr rsub.
-(*Print interp_rsub.*)
-Definition interp_rsub_correct : interp_rsub = interp_bexpr rsub := eq_refl.
-Definition interp_rmul : SpecificGen.GF25519_32BoundedCommon.fe25519_32W * SpecificGen.GF25519_32BoundedCommon.fe25519_32W -> SpecificGen.GF25519_32BoundedCommon.fe25519_32W
- := Eval asm_interp in interp_bexpr rmul.
-(*Print interp_rmul.*)
-Definition interp_rmul_correct : interp_rmul = interp_bexpr rmul := eq_refl.
-Definition interp_ropp : SpecificGen.GF25519_32BoundedCommon.fe25519_32W -> SpecificGen.GF25519_32BoundedCommon.fe25519_32W
- := Eval asm_interp in interp_uexpr ropp.
-(*Print interp_ropp.*)
-Definition interp_ropp_correct : interp_ropp = interp_uexpr ropp := eq_refl.
-Definition interp_rprefreeze : SpecificGen.GF25519_32BoundedCommon.fe25519_32W -> SpecificGen.GF25519_32BoundedCommon.fe25519_32W
- := Eval asm_interp in interp_uexpr rprefreeze.
-(*Print interp_rprefreeze.*)
-Definition interp_rprefreeze_correct : interp_rprefreeze = interp_uexpr rprefreeze := eq_refl.
-
-Definition interp_rge_modulus : SpecificGen.GF25519_32BoundedCommon.fe25519_32W -> SpecificGen.GF25519_32BoundedCommon.word64
- := Eval asm_interp in interp_uexpr_FEToZ rge_modulus.
-Definition interp_rge_modulus_correct : interp_rge_modulus = interp_uexpr_FEToZ rge_modulus := eq_refl.
-
-Definition interp_rpack : SpecificGen.GF25519_32BoundedCommon.fe25519_32W -> SpecificGen.GF25519_32BoundedCommon.wire_digitsW
- := Eval asm_interp in interp_uexpr_FEToWire rpack.
-Definition interp_rpack_correct : interp_rpack = interp_uexpr_FEToWire rpack := eq_refl.
-
-Definition interp_runpack : SpecificGen.GF25519_32BoundedCommon.wire_digitsW -> SpecificGen.GF25519_32BoundedCommon.fe25519_32W
- := Eval asm_interp in interp_uexpr_WireToFE runpack.
-Definition interp_runpack_correct : interp_runpack = interp_uexpr_WireToFE runpack := eq_refl.
-
-Lemma radd_correct_and_bounded : binop_correct_and_bounded radd carry_add.
-Proof. exact rcarry_addW_correct_and_bounded. Qed.
-Lemma rsub_correct_and_bounded : binop_correct_and_bounded rsub carry_sub.
-Proof. exact rcarry_subW_correct_and_bounded. Qed.
-Lemma rmul_correct_and_bounded : binop_correct_and_bounded rmul mul.
-Proof. exact rmulW_correct_and_bounded. Qed.
-Lemma ropp_correct_and_bounded : unop_correct_and_bounded ropp carry_opp.
-Proof. exact rcarry_oppW_correct_and_bounded. Qed.
-Lemma rprefreeze_correct_and_bounded : unop_correct_and_bounded rprefreeze prefreeze.
-Proof. exact rprefreezeW_correct_and_bounded. Qed.
-Lemma rge_modulus_correct_and_bounded : unop_FEToZ_correct rge_modulus ge_modulus.
-Proof. exact rge_modulusW_correct_and_bounded. Qed.
-Lemma rpack_correct_and_bounded : unop_FEToWire_correct_and_bounded rpack pack.
-Proof. exact rpackW_correct_and_bounded. Qed.
-Lemma runpack_correct_and_bounded : unop_WireToFE_correct_and_bounded runpack unpack.
-Proof. exact runpackW_correct_and_bounded. Qed.
diff --git a/src/SpecificGen/GF25519_32Reflective/Common.v b/src/SpecificGen/GF25519_32Reflective/Common.v
deleted file mode 100644
index 29d653cd6..000000000
--- a/src/SpecificGen/GF25519_32Reflective/Common.v
+++ /dev/null
@@ -1,668 +0,0 @@
-Require Export Coq.ZArith.ZArith.
-Require Export Coq.Strings.String.
-Require Export Crypto.SpecificGen.GF25519_32.
-Require Export Crypto.SpecificGen.GF25519_32BoundedCommon.
-Require Import Crypto.Reflection.Reify.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Reflection.Wf.
-Require Import Crypto.Reflection.ExprInversion.
-Require Import Crypto.Reflection.Tuple.
-Require Import Crypto.Reflection.Relations.
-Require Import Crypto.Reflection.Eta.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Crypto.Reflection.Z.Interpretations64.Relations.
-Require Import Crypto.Reflection.Z.Interpretations64.RelationsCombinations.
-Require Import Crypto.Reflection.Z.Reify.
-Require Export Crypto.Reflection.Z.Syntax.
-Require Import Crypto.Reflection.Z.Syntax.Equality.
-Require Import Crypto.Reflection.InterpWfRel.
-Require Import Crypto.Reflection.WfReflective.
-Require Import Crypto.Util.Curry.
-Require Import Crypto.Util.Tower.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.ListUtil.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.Prod.
-Require Import Crypto.Util.Notations.
-
-Notation Expr := (Expr base_type op).
-
-Local Ltac make_type_from' T :=
- let T := (eval compute in T) in
- let rT := reify_type T in
- exact rT.
-Local Ltac make_type_from uncurried_op :=
- let T := (type of uncurried_op) in
- make_type_from' T.
-
-Definition fe25519_32T : flat_type base_type.
-Proof.
- let T := (eval compute in GF25519_32.fe25519_32) in
- let T := reify_flat_type T in
- exact T.
-Defined.
-Definition Expr_n_OpT (count_out : nat) : flat_type base_type
- := Eval cbv [Syntax.tuple Syntax.tuple' fe25519_32T] in
- Syntax.tuple fe25519_32T count_out.
-Definition Expr_nm_OpT (count_in count_out : nat) : type base_type
- := Eval cbv [Syntax.tuple Syntax.tuple' fe25519_32T Expr_n_OpT] in
- Arrow (Syntax.tuple fe25519_32T count_in) (Expr_n_OpT count_out).
-Definition ExprBinOpT : type base_type := Eval compute in Expr_nm_OpT 2 1.
-Definition ExprUnOpT : type base_type := Eval compute in Expr_nm_OpT 1 1.
-Definition ExprUnOpFEToZT : type base_type.
-Proof. make_type_from ge_modulus. Defined.
-Definition ExprUnOpWireToFET : type base_type.
-Proof. make_type_from unpack. Defined.
-Definition ExprUnOpFEToWireT : type base_type.
-Proof. make_type_from pack. Defined.
-Definition Expr4OpT : type base_type := Eval compute in Expr_nm_OpT 4 1.
-Definition Expr9_4OpT : type base_type := Eval compute in Expr_nm_OpT 9 4.
-Definition ExprArgT : flat_type base_type
- := Eval compute in domain ExprUnOpT.
-Definition ExprArgWireT : flat_type base_type
- := Eval compute in domain ExprUnOpWireToFET.
-Definition ExprZ : Type := Expr (Arrow Unit (Tbase TZ)).
-Definition ExprUnOpFEToZ : Type := Expr ExprUnOpFEToZT.
-Definition ExprUnOpWireToFE : Type := Expr ExprUnOpWireToFET.
-Definition ExprUnOpFEToWire : Type := Expr ExprUnOpFEToWireT.
-Definition Expr_nm_Op count_in count_out : Type := Expr (Expr_nm_OpT count_in count_out).
-Definition ExprBinOp : Type := Expr ExprBinOpT.
-Definition ExprUnOp : Type := Expr ExprUnOpT.
-Definition Expr4Op : Type := Expr Expr4OpT.
-Definition Expr9_4Op : Type := Expr Expr9_4OpT.
-Definition ExprArg : Type := Expr (Arrow Unit ExprArgT).
-Definition ExprArgWire : Type := Expr (Arrow Unit ExprArgWireT).
-Definition expr_nm_Op count_in count_out var : Type
- := expr base_type op (var:=var) (Expr_nm_OpT count_in count_out).
-Definition exprBinOp var : Type := expr base_type op (var:=var) ExprBinOpT.
-Definition exprUnOp var : Type := expr base_type op (var:=var) ExprUnOpT.
-Definition expr4Op var : Type := expr base_type op (var:=var) Expr4OpT.
-Definition expr9_4Op var : Type := expr base_type op (var:=var) Expr9_4OpT.
-Definition exprZ var : Type := expr base_type op (var:=var) (Arrow Unit (Tbase TZ)).
-Definition exprUnOpFEToZ var : Type := expr base_type op (var:=var) ExprUnOpFEToZT.
-Definition exprUnOpWireToFE var : Type := expr base_type op (var:=var) ExprUnOpWireToFET.
-Definition exprUnOpFEToWire var : Type := expr base_type op (var:=var) ExprUnOpFEToWireT.
-Definition exprArg var : Type := expr base_type op (var:=var) (Arrow Unit ExprArgT).
-Definition exprArgWire var : Type := expr base_type op (var:=var) (Arrow Unit ExprArgWireT).
-
-Definition make_bound (x : Z * Z) : ZBounds.t
- := Some {| Bounds.lower := fst x ; Bounds.upper := snd x |}.
-
-Fixpoint Expr_nm_Op_bounds count_in count_out {struct count_in} : interp_flat_type ZBounds.interp_base_type (domain (Expr_nm_OpT count_in count_out))
- := match count_in return interp_flat_type _ (domain (Expr_nm_OpT count_in count_out)) with
- | 0 => tt
- | S n
- => let b := (Tuple.map make_bound bounds) in
- let bs := Expr_nm_Op_bounds n count_out in
- match n return interp_flat_type _ (domain (Expr_nm_OpT n _)) -> interp_flat_type _ (domain (Expr_nm_OpT (S n) _)) with
- | 0 => fun _ => b
- | S n' => fun bs => (bs, b)
- end bs
- end.
-Definition ExprBinOp_bounds : interp_flat_type ZBounds.interp_base_type (domain ExprBinOpT)
- := Eval compute in Expr_nm_Op_bounds 2 1.
-Definition ExprUnOp_bounds : interp_flat_type ZBounds.interp_base_type (domain ExprUnOpT)
- := Eval compute in Expr_nm_Op_bounds 1 1.
-Definition ExprUnOpFEToZ_bounds : interp_flat_type ZBounds.interp_base_type (domain ExprUnOpFEToZT)
- := Eval compute in Expr_nm_Op_bounds 1 1.
-Definition ExprUnOpFEToWire_bounds : interp_flat_type ZBounds.interp_base_type (domain ExprUnOpFEToWireT)
- := Eval compute in Expr_nm_Op_bounds 1 1.
-Definition Expr4Op_bounds : interp_flat_type ZBounds.interp_base_type (domain Expr4OpT)
- := Eval compute in Expr_nm_Op_bounds 4 1.
-Definition Expr9Op_bounds : interp_flat_type ZBounds.interp_base_type (domain Expr9_4OpT)
- := Eval compute in Expr_nm_Op_bounds 9 4.
-Definition ExprUnOpWireToFE_bounds : interp_flat_type ZBounds.interp_base_type (domain ExprUnOpWireToFET)
- := Tuple.map make_bound wire_digit_bounds.
-
-Definition interp_bexpr : ExprBinOp -> SpecificGen.GF25519_32BoundedCommon.fe25519_32W * SpecificGen.GF25519_32BoundedCommon.fe25519_32W -> SpecificGen.GF25519_32BoundedCommon.fe25519_32W
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-Definition interp_uexpr : ExprUnOp -> SpecificGen.GF25519_32BoundedCommon.fe25519_32W -> SpecificGen.GF25519_32BoundedCommon.fe25519_32W
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-Definition interp_uexpr_FEToZ : ExprUnOpFEToZ -> SpecificGen.GF25519_32BoundedCommon.fe25519_32W -> SpecificGen.GF25519_32BoundedCommon.word64
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-Definition interp_uexpr_FEToWire : ExprUnOpFEToWire -> SpecificGen.GF25519_32BoundedCommon.fe25519_32W -> SpecificGen.GF25519_32BoundedCommon.wire_digitsW
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-Definition interp_uexpr_WireToFE : ExprUnOpWireToFE -> SpecificGen.GF25519_32BoundedCommon.wire_digitsW -> SpecificGen.GF25519_32BoundedCommon.fe25519_32W
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-Definition interp_9_4expr : Expr9_4Op
- -> Tuple.tuple SpecificGen.GF25519_32BoundedCommon.fe25519_32W 9
- -> Tuple.tuple SpecificGen.GF25519_32BoundedCommon.fe25519_32W 4
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-
-Notation binop_correct_and_bounded rop op
- := (ibinop_correct_and_bounded (interp_bexpr rop) (curry2 op)) (only parsing).
-Notation unop_correct_and_bounded rop op
- := (iunop_correct_and_bounded (interp_uexpr rop) op) (only parsing).
-Notation unop_FEToZ_correct rop op
- := (iunop_FEToZ_correct (interp_uexpr_FEToZ rop) op) (only parsing).
-Notation unop_FEToWire_correct_and_bounded rop op
- := (iunop_FEToWire_correct_and_bounded (interp_uexpr_FEToWire rop) op) (only parsing).
-Notation unop_WireToFE_correct_and_bounded rop op
- := (iunop_WireToFE_correct_and_bounded (interp_uexpr_WireToFE rop) op) (only parsing).
-Notation op9_4_correct_and_bounded rop op
- := (i9top_correct_and_bounded 4 (interp_9_4expr rop) op) (only parsing).
-
-Ltac rexpr_cbv :=
- lazymatch goal with
- | [ |- { rexpr | forall x, Interp _ (t:=?T) rexpr x = ?uncurry ?oper x } ]
- => let operf := head oper in
- let uncurryf := head uncurry in
- try cbv delta [T]; try cbv delta [oper];
- try cbv beta iota delta [uncurryf]
- | [ |- { rexpr | forall x, Interp _ (t:=?T) rexpr x = ?oper x } ]
- => let operf := head oper in
- try cbv delta [T]; try cbv delta [oper]
- end;
- cbv beta iota delta [interp_flat_type interp_base_type zero_ GF25519_32.fe25519_32 GF25519_32.wire_digits].
-
-Ltac reify_sig :=
- rexpr_cbv; eexists; Reify_rhs; reflexivity.
-
-Local Notation rexpr_sig T uncurried_op :=
- { rexprZ
- | forall x, Interp interp_op (t:=T) rexprZ x = uncurried_op x }
- (only parsing).
-
-Notation rexpr_binop_sig op := (rexpr_sig ExprBinOpT (curry2 op)) (only parsing).
-Notation rexpr_unop_sig op := (rexpr_sig ExprUnOpT op) (only parsing).
-Notation rexpr_unop_FEToZ_sig op := (rexpr_sig ExprUnOpFEToZT op) (only parsing).
-Notation rexpr_unop_FEToWire_sig op := (rexpr_sig ExprUnOpFEToWireT op) (only parsing).
-Notation rexpr_unop_WireToFE_sig op := (rexpr_sig ExprUnOpWireToFET op) (only parsing).
-Notation rexpr_9_4op_sig op := (rexpr_sig Expr9_4OpT op) (only parsing).
-
-Notation correct_and_bounded_genT ropW'v ropZ_sigv
- := (let ropW' := ropW'v in
- let ropZ_sig := ropZ_sigv in
- ropW' = proj1_sig ropZ_sig
- /\ interp_type_rel_pointwise Relations.related_Z (Interp (@BoundedWordW.interp_op) ropW') (Interp (@Z.interp_op) ropW')
- /\ interp_type_rel_pointwise Relations.related_bounds (Interp (@BoundedWordW.interp_op) ropW') (Interp (@ZBounds.interp_op) ropW')
- /\ interp_type_rel_pointwise Relations.related_wordW (Interp (@BoundedWordW.interp_op) ropW') (Interp (@WordW.interp_op) ropW'))
- (only parsing).
-
-Ltac app_tuples x y :=
- let tx := type of x in
- lazymatch (eval hnf in tx) with
- | prod _ _ => let xs := app_tuples (snd x) y in
- constr:((fst x, xs))
- | _ => constr:((x, y))
- end.
-
-Local Arguments Tuple.map2 : simpl never.
-Local Arguments Tuple.map : simpl never.
-(*
-Fixpoint args_to_bounded_helperT {n}
- (v : Tuple.tuple' WordW.wordW n)
- (bounds : Tuple.tuple' (Z * Z) n)
- (pf : List.fold_right
- andb true
- (Tuple.to_list
- _
- (Tuple.map2
- (n:=S n)
- (fun bounds v =>
- let '(lower, upper) := bounds in ((lower <=? v)%Z && (v <=? upper)%Z)%bool)
- bounds
- (Tuple.map (n:=S n) WordW.wordWToZ v))) = true)
- (res : Type)
- {struct n}
- : Type.
-Proof.
- refine (match n return (forall (v : Tuple.tuple' _ n) (bounds : Tuple.tuple' _ n),
- List.fold_right
- _ _ (Tuple.to_list
- _
- (Tuple.map2 (n:=S n) _ bounds (Tuple.map (n:=S n) _ v))) = true
- -> Type)
- with
- | 0 => fun v' bounds' pf0 => forall pf1 : (0 <= fst bounds' /\ Z.log2 (snd bounds') < Z.of_nat WordW.bit_width)%Z, res
- | S n' => fun v' bounds' pf0 => let t := _ in
- forall pf1 : (0 <= fst (snd bounds') /\ Z.log2 (snd (snd bounds')) < Z.of_nat WordW.bit_width)%Z, @args_to_bounded_helperT n' (fst v') (fst bounds') t res
- end v bounds pf).
- { clear -pf0.
- abstract (
- destruct v', bounds'; simpl @fst;
- rewrite Tuple.map_S in pf0;
- simpl in pf0;
- rewrite Tuple.map2_S in pf0;
- simpl @List.fold_right in *;
- rewrite Bool.andb_true_iff in pf0; tauto
- ). }
-Defined.
-
-Fixpoint args_to_bounded_helper {n} res
- {struct n}
- : forall v bounds pf, (Tuple.tuple' BoundedWordW.BoundedWord n -> res) -> @args_to_bounded_helperT n v bounds pf res.
-Proof.
- refine match n return (forall v bounds pf, (Tuple.tuple' BoundedWordW.BoundedWord n -> res) -> @args_to_bounded_helperT n v bounds pf res) with
- | 0 => fun v bounds pf f pf' => f {| BoundedWord.lower := fst bounds ; BoundedWord.value := v ; BoundedWord.upper := snd bounds |}
- | S n'
- => fun v bounds pf f pf'
- => @args_to_bounded_helper
- n' res (fst v) (fst bounds) _
- (fun ts => f (ts, {| BoundedWord.lower := fst (snd bounds) ; BoundedWord.value := snd v ; BoundedWord.upper := snd (snd bounds) |}))
- end.
- { clear -pf pf'.
- unfold Tuple.map2, Tuple.map in pf; simpl in *.
- abstract (
- destruct bounds;
- simpl in *;
- rewrite !Bool.andb_true_iff in pf;
- destruct_head' and;
- Z.ltb_to_lt; auto
- ). }
- { simpl in *.
- clear -pf pf'.
- abstract (
- destruct bounds as [? [? ?] ], v; simpl in *;
- rewrite Tuple.map_S in pf; simpl in pf; rewrite Tuple.map2_S in pf;
- simpl in pf;
- rewrite !Bool.andb_true_iff in pf;
- destruct_head' and;
- Z.ltb_to_lt; auto
- ). }
-Defined.
-*)
-
-Definition assoc_right''
- := Eval cbv [Tuple.assoc_right' Tuple.rsnoc' fst snd] in @Tuple.assoc_right'.
-(*
-Definition args_to_bounded {n} v bounds pf
- := Eval cbv [args_to_bounded_helper assoc_right''] in
- @args_to_bounded_helper n _ v bounds pf (@assoc_right'' _ _).
-*)
-Local Ltac get_len T :=
- match (eval hnf in T) with
- | prod ?A ?B
- => let a := get_len A in
- let b := get_len B in
- (eval compute in (a + b)%nat)
- | _ => constr:(1%nat)
- end.
-
-Ltac assoc_right_tuple x so_far :=
- let t := type of x in
- lazymatch (eval hnf in t) with
- | prod _ _ => let so_far := assoc_right_tuple (snd x) so_far in
- assoc_right_tuple (fst x) so_far
- | _ => lazymatch so_far with
- | @None => x
- | _ => constr:((x, so_far))
- end
- end.
-
-(*
-Local Ltac make_args x :=
- let x' := fresh "x'" in
- compute in x |- *;
- let t := match type of x with @expr _ _ _ (Tflat ?t) => t end in
- let t' := match goal with |- @expr _ _ _ (Tflat ?t) => t end in
- refine (LetIn (invert_Return x) _);
- let x'' := fresh "x''" in
- intro x'';
- let xv := assoc_right_tuple x'' (@None) in
- refine (SmartVarf (xv : interp_flat_type _ t')).
-
-Local Ltac args_to_bounded x H :=
- let x' := fresh in
- set (x' := x);
- compute in x;
- let len := (let T := type of x in get_len T) in
- destruct_head' prod;
- let c := constr:(args_to_bounded (n:=pred len) x' _ H) in
- let bounds := lazymatch c with args_to_bounded _ ?bounds _ => bounds end in
- let c := (eval cbv [domain ExprUnOpT interp_flat_type args_to_bounded bounds pred fst snd] in c) in
- apply c; compute; clear;
- try abstract (
- repeat split;
- solve [ reflexivity
- | refine (fun v => match v with eq_refl => I end) ]
- ).
- *)
-
-Section gen.
- Definition bounds_are_good_gen
- {n : nat} (bounds : Tuple.tuple (Z * Z) n)
- := let res :=
- Tuple.map (fun bs => let '(lower, upper) := bs in ((0 <=? lower)%Z && (Z.log2 upper <? Z.of_nat WordW.bit_width)%Z)%bool) bounds
- in
- List.fold_right andb true (Tuple.to_list n res).
- Definition unop_args_to_bounded'
- (bs : Z * Z)
- (Hbs : bounds_are_good_gen (n:=1) bs = true)
- (x : word64)
- (H : is_bounded_gen (Tuple.map (fun v : word64 => (v : Z)) (n:=1) x) bs = true)
- : BoundedWordW.BoundedWord.
- Proof.
- refine {| BoundedWord.lower := fst bs ; BoundedWord.value := x ; BoundedWord.upper := snd bs |}.
- unfold bounds_are_good_gen, is_bounded_gen, Tuple.map, Tuple.map2 in *; simpl in *.
- abstract (
- destruct bs; Bool.split_andb; Z.ltb_to_lt; simpl;
- repeat apply conj; assumption
- ).
- Defined.
- Fixpoint n_op_args_to_bounded'
- n
- : forall (bs : Tuple.tuple' (Z * Z) n)
- (Hbs : bounds_are_good_gen (n:=S n) bs = true)
- (x : Tuple.tuple' word64 n)
- (H : is_bounded_gen (Tuple.eta_tuple (Tuple.map (n:=S n) (fun v : word64 => v : Z)) x) bs = true),
- interp_flat_type (fun _ => BoundedWordW.BoundedWord) (Syntax.tuple' (Tbase TZ) n).
- Proof.
- destruct n as [|n']; simpl in *.
- { exact unop_args_to_bounded'. }
- { refine (fun bs Hbs x H
- => (@n_op_args_to_bounded' n' (fst bs) _ (fst x) _,
- @unop_args_to_bounded' (snd bs) _ (snd x) _));
- clear n_op_args_to_bounded';
- simpl in *;
- [ clear x H | clear Hbs | clear x H | clear Hbs ];
- unfold bounds_are_good_gen, is_bounded_gen in *;
- abstract (
- repeat first [ progress simpl in *
- | assumption
- | reflexivity
- | progress Bool.split_andb
- | progress destruct_head prod
- | match goal with
- | [ H : _ |- _ ] => progress rewrite ?Tuple.map_S, ?Tuple.map2_S, ?Tuple.strip_eta_tuple'_dep in H
- end
- | progress rewrite ?Tuple.map_S, ?Tuple.map2_S, ?Tuple.strip_eta_tuple'_dep
- | progress break_match_hyps
- | rewrite Bool.andb_true_iff; apply conj
- | unfold Tuple.map, Tuple.map2; simpl; rewrite Bool.andb_true_iff; apply conj ]
- ). }
- Defined.
-
- Definition n_op_args_to_bounded
- n
- : forall (bs : Tuple.tuple (Z * Z) n)
- (Hbs : bounds_are_good_gen bs = true)
- (x : Tuple.tuple word64 n)
- (H : is_bounded_gen (Tuple.eta_tuple (Tuple.map (fun v : word64 => v : Z)) x) bs = true),
- interp_flat_type (fun _ => BoundedWordW.BoundedWord) (Syntax.tuple (Tbase TZ) n)
- := match n with
- | 0 => fun _ _ _ _ => tt
- | S n' => @n_op_args_to_bounded' n'
- end.
-
- Fixpoint nm_op_args_to_bounded' n m
- (bs : Tuple.tuple (Z * Z) m)
- (Hbs : bounds_are_good_gen bs = true)
- : forall (x : interp_flat_type (fun _ => Tuple.tuple word64 m) (Syntax.tuple' (Tbase TZ) n))
- (H : SmartVarfPropMap (fun _ x => is_bounded_gen (Tuple.eta_tuple (Tuple.map (fun v : word64 => v : Z)) x) bs = true)
- x),
- interp_flat_type (fun _ => BoundedWordW.BoundedWord) (Syntax.tuple' (Syntax.tuple (Tbase TZ) m) n)
- := match n with
- | 0 => @n_op_args_to_bounded m bs Hbs
- | S n' => fun x H
- => (@nm_op_args_to_bounded' n' m bs Hbs (fst x) (proj1 H),
- @n_op_args_to_bounded m bs Hbs (snd x) (proj2 H))
- end.
- Definition nm_op_args_to_bounded n m
- (bs : Tuple.tuple (Z * Z) m)
- (Hbs : bounds_are_good_gen bs = true)
- : forall (x : interp_flat_type (fun _ => Tuple.tuple word64 m) (Syntax.tuple (Tbase TZ) n))
- (H : SmartVarfPropMap (fun _ x => is_bounded_gen (Tuple.eta_tuple (Tuple.map (fun v : word64 => v : Z)) x) bs = true)
- x),
- interp_flat_type (fun _ => BoundedWordW.BoundedWord) (Syntax.tuple (Syntax.tuple (Tbase TZ) m) n)
- := match n with
- | 0 => fun _ _ => tt
- | S n' => @nm_op_args_to_bounded' n' m bs Hbs
- end.
-End gen.
-
-Local Ltac get_inner_len T :=
- lazymatch T with
- | (?T * _)%type => get_inner_len T
- | ?T => get_len T
- end.
-Local Ltac get_outer_len T :=
- lazymatch T with
- | (?A * ?B)%type => let a := get_outer_len A in
- let b := get_outer_len B in
- (eval compute in (a + b)%nat)
- | ?T => constr:(1%nat)
- end.
-Local Ltac args_to_bounded x H :=
- let t := type of x in
- let m := get_inner_len t in
- let n := get_outer_len t in
- let H := constr:(fun Hbs => @nm_op_args_to_bounded n m _ Hbs x H) in
- let H := (eval cbv beta in (H eq_refl)) in
- exact H.
-
-Definition binop_args_to_bounded (x : fe25519_32W * fe25519_32W)
- (H : is_bounded (fe25519_32WToZ (fst x)) = true)
- (H' : is_bounded (fe25519_32WToZ (snd x)) = true)
- : interp_flat_type (fun _ => BoundedWordW.BoundedWord) (domain ExprBinOpT).
-Proof. args_to_bounded x (conj H H'). Defined.
-Definition unop_args_to_bounded (x : fe25519_32W) (H : is_bounded (fe25519_32WToZ x) = true)
- : interp_flat_type (fun _ => BoundedWordW.BoundedWord) (domain ExprUnOpT).
-Proof. args_to_bounded x H. Defined.
-Definition unopWireToFE_args_to_bounded (x : wire_digitsW) (H : wire_digits_is_bounded (wire_digitsWToZ x) = true)
- : interp_flat_type (fun _ => BoundedWordW.BoundedWord) (domain ExprUnOpWireToFET).
-Proof. args_to_bounded x H. Defined.
-Definition op9_args_to_bounded (x : fe25519_32W * fe25519_32W * fe25519_32W * fe25519_32W * fe25519_32W * fe25519_32W * fe25519_32W * fe25519_32W * fe25519_32W)
- (H0 : is_bounded (fe25519_32WToZ (fst (fst (fst (fst (fst (fst (fst (fst x))))))))) = true)
- (H1 : is_bounded (fe25519_32WToZ (snd (fst (fst (fst (fst (fst (fst (fst x))))))))) = true)
- (H2 : is_bounded (fe25519_32WToZ (snd (fst (fst (fst (fst (fst (fst x)))))))) = true)
- (H3 : is_bounded (fe25519_32WToZ (snd (fst (fst (fst (fst (fst x))))))) = true)
- (H4 : is_bounded (fe25519_32WToZ (snd (fst (fst (fst (fst x)))))) = true)
- (H5 : is_bounded (fe25519_32WToZ (snd (fst (fst (fst x))))) = true)
- (H6 : is_bounded (fe25519_32WToZ (snd (fst (fst x)))) = true)
- (H7 : is_bounded (fe25519_32WToZ (snd (fst x))) = true)
- (H8 : is_bounded (fe25519_32WToZ (snd x)) = true)
- : interp_flat_type (fun _ => BoundedWordW.BoundedWord) (domain Expr9_4OpT).
-Proof. args_to_bounded x (conj (conj (conj (conj (conj (conj (conj (conj H0 H1) H2) H3) H4) H5) H6) H7) H8). Defined.
-Local Ltac make_bounds_prop' bounds bounds' :=
- first [ refine (andb _ _);
- [ destruct bounds' as [bounds' _], bounds as [bounds _]
- | destruct bounds' as [_ bounds'], bounds as [_ bounds] ];
- try make_bounds_prop' bounds bounds'
- | exact (match bounds' with
- | Some bounds' => let (l, u) := bounds in
- let (l', u') := bounds' in
- ((l' <=? l) && (u <=? u'))%Z%bool
- | None => false
- end) ].
-Local Ltac make_bounds_prop bounds orig_bounds :=
- let bounds' := fresh "bounds'" in
- pose orig_bounds as bounds';
- make_bounds_prop' bounds bounds'.
-Definition unop_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain ExprUnOpT)) : bool.
-Proof. make_bounds_prop bounds ExprUnOp_bounds. Defined.
-Definition binop_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain ExprBinOpT)) : bool.
-Proof. make_bounds_prop bounds ExprUnOp_bounds. Defined.
-Definition unopFEToWire_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain ExprUnOpFEToWireT)) : bool.
-Proof. make_bounds_prop bounds ExprUnOpWireToFE_bounds. Defined.
-Definition unopWireToFE_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain ExprUnOpWireToFET)) : bool.
-Proof. make_bounds_prop bounds ExprUnOp_bounds. Defined.
-(* TODO FIXME(jgross?, andreser?): Is every function returning a single Z a boolean function? *)
-Definition unopFEToZ_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain ExprUnOpFEToZT)) : bool.
-Proof.
- refine (let (l, u) := bounds in ((0 <=? l) && (u <=? 1))%Z%bool).
-Defined.
-Definition op9_4_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain Expr9_4OpT)) : bool.
-Proof. make_bounds_prop bounds Expr4Op_bounds. Defined.
-(*Definition ApplyUnOp {var} (f : exprUnOp var) : exprArg var -> exprArg var
- := fun x
- => LetIn (invert_Return (unop_make_args x))
- (fun k => invert_Return (Apply length_fe25519_32 f k)).
-Definition ApplyBinOp {var} (f : exprBinOp var) : exprArg var -> exprArg var -> exprArg var
- := fun x y
- => LetIn (invert_Return (unop_make_args x))
- (fun x'
- => LetIn (invert_Return (unop_make_args y))
- (fun y'
- => invert_Return (Apply length_fe25519_32
- (Apply length_fe25519_32
- f x') y'))).
-Definition ApplyUnOpFEToWire {var} (f : exprUnOpFEToWire var) : exprArg var -> exprArgWire var
- := fun x
- => LetIn (invert_Return (unop_make_args x))
- (fun k => invert_Return (Apply length_fe25519_32 f k)).
-Definition ApplyUnOpWireToFE {var} (f : exprUnOpWireToFE var) : exprArgWire var -> exprArg var
- := fun x
- => LetIn (invert_Return (unop_wire_make_args x))
- (fun k => invert_Return (Apply (List.length wire_widths) f k)).
-Definition ApplyUnOpFEToZ {var} (f : exprUnOpFEToZ var) : exprArg var -> exprZ var
- := fun x
- => LetIn (invert_Return (unop_make_args x))
- (fun k => invert_Return (Apply length_fe25519_32 f k)).
-*)
-
-(* FIXME TODO(jgross): This is a horrible tactic. We should unify the
- various kinds of correct and boundedness, and abstract in Gallina
- rather than Ltac *)
-Ltac t_correct_and_bounded ropZ_sig Hbounds H0 H1 args :=
- let Heq := fresh "Heq" in
- let Hbounds0 := fresh "Hbounds0" in
- let Hbounds1 := fresh "Hbounds1" in
- let Hbounds2 := fresh "Hbounds2" in
- pose proof (proj2_sig ropZ_sig) as Heq;
- cbv [interp_bexpr interp_uexpr interp_uexpr_FEToWire interp_uexpr_FEToZ interp_uexpr_WireToFE interp_9_4expr
- interp_flat_type_eta interp_flat_type_eta_gen
- curry_binop_fe25519_32W curry_unop_fe25519_32W curry_unop_wire_digitsW curry_9op_fe25519_32W
- curry_binop_fe25519_32 curry_unop_fe25519_32 curry_unop_wire_digits curry_9op_fe25519_32
- uncurry_binop_fe25519_32W uncurry_unop_fe25519_32W uncurry_unop_wire_digitsW uncurry_9op_fe25519_32W
- uncurry_binop_fe25519_32 uncurry_unop_fe25519_32 uncurry_unop_wire_digits uncurry_9op_fe25519_32
- ExprBinOpT ExprUnOpFEToWireT ExprUnOpT ExprUnOpFEToZT ExprUnOpWireToFET Expr9_4OpT Expr4OpT] in *;
- cbv zeta in *;
- simpl @fe25519_32WToZ; simpl @wire_digitsWToZ;
- rewrite <- Heq; clear Heq;
- destruct Hbounds as [Heq Hbounds];
- change interp_op with (@Z.interp_op) in *;
- change interp_base_type with (@Z.interp_base_type) in *;
- change word64 with WordW.wordW in *;
- rewrite <- Heq; clear Heq;
- destruct Hbounds as [ Hbounds0 [Hbounds1 Hbounds2] ];
- pose proof (fun pf => Relations.uncurry_interp_type_rel_pointwise_proj_from_option2 WordW.to_Z pf Hbounds2 Hbounds0) as Hbounds_left;
- pose proof (fun pf => Relations.uncurry_interp_type_rel_pointwise_proj1_from_option2 Relations.related_wordW_boundsi' pf Hbounds1 Hbounds2) as Hbounds_right;
- specialize_by repeat first [ progress intros
- | progress unfold RelationClasses.Reflexive
- | reflexivity
- | assumption
- | progress destruct_head' base_type
- | progress destruct_head' BoundedWordW.BoundedWord
- | progress destruct_head' and
- | progress repeat apply conj ];
- specialize (Hbounds_left args H0);
- specialize (Hbounds_right args H0);
- cbv beta in *;
- lazymatch type of Hbounds_right with
- | match ?e with _ => _ end
- => lazymatch type of H1 with
- | match ?e' with _ => _ end
- => change e' with e in H1; destruct e eqn:?; [ | exfalso; assumption ]
- end
- end;
- repeat match goal with x := _ |- _ => subst x end;
- cbv [id
- binop_args_to_bounded unop_args_to_bounded unopWireToFE_args_to_bounded op9_args_to_bounded
- Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list
- Relations.proj_eq_rel SmartVarfMap interp_flat_type smart_interp_flat_map domain fst snd BoundedWordW.to_wordW' BoundedWordW.boundedWordToWordW BoundedWord.value Relations.related_wordW_boundsi' Relations.related'_wordW_bounds Bounds.upper Bounds.lower codomain WordW.to_Z nm_op_args_to_bounded nm_op_args_to_bounded' n_op_args_to_bounded n_op_args_to_bounded' unop_args_to_bounded' Relations.interp_flat_type_rel_pointwise Relations.interp_flat_type_rel_pointwise_gen_Prop] in Hbounds_left, Hbounds_right;
- simpl @interp_flat_type in *;
- (let v := (eval unfold WordW.interp_base_type in (WordW.interp_base_type TZ)) in
- change (WordW.interp_base_type TZ) with v in *);
- cbv beta iota zeta in *;
- lazymatch goal with
- | [ |- fe25519_32WToZ ?x = _ /\ _ ]
- => generalize dependent x; intros
- | [ |- wire_digitsWToZ ?x = _ /\ _ ]
- => generalize dependent x; intros
- | [ |- (Tuple.map fe25519_32WToZ ?x = _) /\ _ ]
- => generalize dependent x; intros
- | [ |- ((Tuple.map fe25519_32WToZ ?x = _) * _)%type ]
- => generalize dependent x; intros
- | [ |- _ = _ ]
- => exact Hbounds_left
- end;
- cbv [interp_type interp_type_gen interp_type_gen_hetero interp_flat_type WordW.interp_base_type codomain] in *;
- destruct_head' prod;
- change word64ToZ with WordW.wordWToZ in *;
- (split; [ exact Hbounds_left | ]);
- cbv [interp_flat_type] in *;
- cbv [fst snd
- Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list Tuple.from_list'
- make_bound
- Datatypes.length wire_widths wire_digit_bounds PseudoMersenneBaseParams.limb_widths bounds
- binop_bounds_good unop_bounds_good unopFEToWire_bounds_good unopWireToFE_bounds_good unopFEToZ_bounds_good op9_4_bounds_good
- ExprUnOp_bounds ExprBinOp_bounds ExprUnOpFEToWire_bounds ExprUnOpFEToZ_bounds ExprUnOpWireToFE_bounds Expr9Op_bounds Expr4Op_bounds] in H1;
- destruct_head' ZBounds.bounds;
- unfold_is_bounded_in H1;
- simpl @fe25519_32WToZ; simpl @wire_digitsWToZ;
- destruct_head' and;
- Z.ltb_to_lt;
- change WordW.wordWToZ with word64ToZ in *;
- cbv [Tuple.map HList.hlist Tuple.on_tuple Tuple.from_list Tuple.from_list' Tuple.to_list Tuple.to_list' List.map HList.hlist' fst snd fe25519_32WToZ HList.hlistP HList.hlistP'];
- cbv [WordW.bit_width BitSize64.bit_width Z.of_nat Pos.of_succ_nat Pos.succ] in *;
- repeat split; unfold_is_bounded;
- Z.ltb_to_lt;
- try omega; try reflexivity.
-
-Ltac rexpr_correct :=
- let ropW' := fresh in
- let ropZ_sig := fresh in
- intros ropW' ropZ_sig;
- let wf_ropW := fresh "wf_ropW" in
- assert (wf_ropW : Wf ropW') by (subst ropW' ropZ_sig; reflect_Wf base_type_eq_semidec_is_dec op_beq_bl);
- cbv zeta; repeat apply conj;
- [ vm_compute; reflexivity
- | apply @InterpWf;
- [ | apply wf_ropW ].. ];
- auto with interp_related.
-
-Notation rword_of_Z rexprZ_sig := (proj1_sig rexprZ_sig) (only parsing).
-
-Notation compute_bounds opW bounds
- := (Interp (@ZBounds.interp_op) opW bounds)
- (only parsing).
-
-Notation rexpr_wfT e := (Wf.Wf e) (only parsing).
-
-Ltac prove_rexpr_wfT
- := reflect_Wf Equality.base_type_eq_semidec_is_dec Equality.op_beq_bl.
-
-Module Export PrettyPrinting.
- (* We add [enlargen] to force [bounds_on] to be in [Type] in 8.4 and
- 8.5/8.6. Because [Set] is special and things break if
- [bounds_on] ends up in [Set] for reasons jgross hasn't bothered
- to debug. *)
- Inductive bounds_on := overflow | in_range (lower upper : Z) | enlargen (_ : Set).
-
- Inductive result := yes | no | borked.
-
- Definition ZBounds_to_bounds_on
- := fun (t : base_type) (x : ZBounds.interp_base_type t)
- => match x with
- | Some {| Bounds.lower := l ; Bounds.upper := u |}
- => in_range l u
- | None
- => overflow
- end.
-
- Fixpoint does_it_overflow {t} : interp_flat_type (fun t : base_type => bounds_on) t -> result
- := match t return interp_flat_type _ t -> result with
- | Tbase _ => fun v => match v with
- | overflow => yes
- | in_range _ _ => no
- | enlargen _ => borked
- end
- | Unit => fun _ => no
- | Prod x y => fun v => match @does_it_overflow _ (fst v), @does_it_overflow _ (snd v) with
- | no, no => no
- | yes, no | no, yes | yes, yes => yes
- | borked, _ | _, borked => borked
- end
- end.
-
- (** This gives a slightly easier to read version of the bounds *)
- Notation compute_bounds_for_display opW bounds
- := (SmartVarfMap ZBounds_to_bounds_on (compute_bounds opW bounds)) (only parsing).
- Notation sanity_compute opW bounds
- := (does_it_overflow (SmartVarfMap ZBounds_to_bounds_on (compute_bounds opW bounds))) (only parsing).
- Notation sanity_check opW bounds
- := (eq_refl (sanity_compute opW bounds) <: no = no) (only parsing).
-End PrettyPrinting.
diff --git a/src/SpecificGen/GF25519_32Reflective/Common9_4Op.v b/src/SpecificGen/GF25519_32Reflective/Common9_4Op.v
deleted file mode 100644
index e9b0209db..000000000
--- a/src/SpecificGen/GF25519_32Reflective/Common9_4Op.v
+++ /dev/null
@@ -1,102 +0,0 @@
-Require Export Crypto.SpecificGen.GF25519_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF25519_32BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Local Notation eta_and x := (let (a, b) := x in a, let (a, b) := x in b) (only parsing).
-Lemma Expr9_4Op_correct_and_bounded
- ropW op (ropZ_sig : rexpr_9_4op_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall x012345678
- (x012345678
- := (eta_fe25519_32W (fst (fst (fst (fst (fst (fst (fst (fst x012345678)))))))),
- eta_fe25519_32W (snd (fst (fst (fst (fst (fst (fst (fst x012345678)))))))),
- eta_fe25519_32W (snd (fst (fst (fst (fst (fst (fst x012345678))))))),
- eta_fe25519_32W (snd (fst (fst (fst (fst (fst x012345678)))))),
- eta_fe25519_32W (snd (fst (fst (fst (fst x012345678))))),
- eta_fe25519_32W (snd (fst (fst (fst x012345678)))),
- eta_fe25519_32W (snd (fst (fst x012345678))),
- eta_fe25519_32W (snd (fst x012345678)),
- eta_fe25519_32W (snd x012345678)))
- (Hx012345678
- : is_bounded (fe25519_32WToZ (fst (fst (fst (fst (fst (fst (fst (fst x012345678))))))))) = true
- /\ is_bounded (fe25519_32WToZ (snd (fst (fst (fst (fst (fst (fst (fst x012345678))))))))) = true
- /\ is_bounded (fe25519_32WToZ (snd (fst (fst (fst (fst (fst (fst x012345678)))))))) = true
- /\ is_bounded (fe25519_32WToZ (snd (fst (fst (fst (fst (fst x012345678))))))) = true
- /\ is_bounded (fe25519_32WToZ (snd (fst (fst (fst (fst x012345678)))))) = true
- /\ is_bounded (fe25519_32WToZ (snd (fst (fst (fst x012345678))))) = true
- /\ is_bounded (fe25519_32WToZ (snd (fst (fst x012345678)))) = true
- /\ is_bounded (fe25519_32WToZ (snd (fst x012345678))) = true
- /\ is_bounded (fe25519_32WToZ (snd x012345678)) = true),
- let (Hx0, Hx12345678) := (eta_and Hx012345678) in
- let (Hx1, Hx2345678) := (eta_and Hx12345678) in
- let (Hx2, Hx345678) := (eta_and Hx2345678) in
- let (Hx3, Hx45678) := (eta_and Hx345678) in
- let (Hx4, Hx5678) := (eta_and Hx45678) in
- let (Hx5, Hx678) := (eta_and Hx5678) in
- let (Hx6, Hx78) := (eta_and Hx678) in
- let (Hx7, Hx8) := (eta_and Hx78) in
- let args := op9_args_to_bounded x012345678 Hx0 Hx1 Hx2 Hx3 Hx4 Hx5 Hx6 Hx7 Hx8 in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall x012345678
- (x012345678
- := (eta_fe25519_32W (fst (fst (fst (fst (fst (fst (fst (fst x012345678)))))))),
- eta_fe25519_32W (snd (fst (fst (fst (fst (fst (fst (fst x012345678)))))))),
- eta_fe25519_32W (snd (fst (fst (fst (fst (fst (fst x012345678))))))),
- eta_fe25519_32W (snd (fst (fst (fst (fst (fst x012345678)))))),
- eta_fe25519_32W (snd (fst (fst (fst (fst x012345678))))),
- eta_fe25519_32W (snd (fst (fst (fst x012345678)))),
- eta_fe25519_32W (snd (fst (fst x012345678))),
- eta_fe25519_32W (snd (fst x012345678)),
- eta_fe25519_32W (snd x012345678)))
- (Hx012345678
- : is_bounded (fe25519_32WToZ (fst (fst (fst (fst (fst (fst (fst (fst x012345678))))))))) = true
- /\ is_bounded (fe25519_32WToZ (snd (fst (fst (fst (fst (fst (fst (fst x012345678))))))))) = true
- /\ is_bounded (fe25519_32WToZ (snd (fst (fst (fst (fst (fst (fst x012345678)))))))) = true
- /\ is_bounded (fe25519_32WToZ (snd (fst (fst (fst (fst (fst x012345678))))))) = true
- /\ is_bounded (fe25519_32WToZ (snd (fst (fst (fst (fst x012345678)))))) = true
- /\ is_bounded (fe25519_32WToZ (snd (fst (fst (fst x012345678))))) = true
- /\ is_bounded (fe25519_32WToZ (snd (fst (fst x012345678)))) = true
- /\ is_bounded (fe25519_32WToZ (snd (fst x012345678))) = true
- /\ is_bounded (fe25519_32WToZ (snd x012345678)) = true),
- let (Hx0, Hx12345678) := (eta_and Hx012345678) in
- let (Hx1, Hx2345678) := (eta_and Hx12345678) in
- let (Hx2, Hx345678) := (eta_and Hx2345678) in
- let (Hx3, Hx45678) := (eta_and Hx345678) in
- let (Hx4, Hx5678) := (eta_and Hx45678) in
- let (Hx5, Hx678) := (eta_and Hx5678) in
- let (Hx6, Hx78) := (eta_and Hx678) in
- let (Hx7, Hx8) := (eta_and Hx78) in
- let args := op9_args_to_bounded x012345678 Hx0 Hx1 Hx2 Hx3 Hx4 Hx5 Hx6 Hx7 Hx8 in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => op9_4_bounds_good bounds = true
- | None => False
- end)
- : op9_4_correct_and_bounded ropW op.
-Proof.
- intros xs Hxs.
- pose xs as xs'.
- compute in xs.
- destruct_head' prod.
- cbv [Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' fst snd List.map Tuple.from_list Tuple.from_list' HList.hlistP HList.hlistP'] in Hxs.
- pose Hxs as Hxs'.
- destruct Hxs as [ [ [ [ [ [ [ [ Hx0 Hx1 ] Hx2 ] Hx3 ] Hx4 ] Hx5 ] Hx6 ] Hx7 ] Hx8 ].
- specialize (H0 xs'
- (conj Hx0 (conj Hx1 (conj Hx2 (conj Hx3 (conj Hx4 (conj Hx5 (conj Hx6 (conj Hx7 Hx8))))))))).
- specialize (H1 xs'
- (conj Hx0 (conj Hx1 (conj Hx2 (conj Hx3 (conj Hx4 (conj Hx5 (conj Hx6 (conj Hx7 Hx8))))))))).
- Time let args := constr:(op9_args_to_bounded xs' Hx0 Hx1 Hx2 Hx3 Hx4 Hx5 Hx6 Hx7 Hx8) in
- admit; t_correct_and_bounded ropZ_sig Hbounds H0 H1 args. (* On 8.6beta1, with ~2 GB RAM, Finished transaction in 46.56 secs (46.372u,0.14s) (successful) *)
-Admitted. (*Time Qed. (* On 8.6beta1, with ~4.3 GB RAM, Finished transaction in 67.652 secs (66.932u,0.64s) (successful) *)*)
diff --git a/src/SpecificGen/GF25519_32Reflective/CommonBinOp.v b/src/SpecificGen/GF25519_32Reflective/CommonBinOp.v
deleted file mode 100644
index 48fc98b9d..000000000
--- a/src/SpecificGen/GF25519_32Reflective/CommonBinOp.v
+++ /dev/null
@@ -1,50 +0,0 @@
-Require Export Crypto.SpecificGen.GF25519_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF25519_32BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Lemma ExprBinOp_correct_and_bounded
- ropW op (ropZ_sig : rexpr_binop_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall xy
- (xy := (eta_fe25519_32W (fst xy), eta_fe25519_32W (snd xy)))
- (Hxy : is_bounded (fe25519_32WToZ (fst xy)) = true
- /\ is_bounded (fe25519_32WToZ (snd xy)) = true),
- let Hx := let (Hx, Hy) := Hxy in Hx in
- let Hy := let (Hx, Hy) := Hxy in Hy in
- let args := binop_args_to_bounded xy Hx Hy in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall xy
- (xy := (eta_fe25519_32W (fst xy), eta_fe25519_32W (snd xy)))
- (Hxy : is_bounded (fe25519_32WToZ (fst xy)) = true
- /\ is_bounded (fe25519_32WToZ (snd xy)) = true),
- let Hx := let (Hx, Hy) := Hxy in Hx in
- let Hy := let (Hx, Hy) := Hxy in Hy in
- let args := binop_args_to_bounded (fst xy, snd xy) Hx Hy in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => binop_bounds_good bounds = true
- | None => False
- end)
- : binop_correct_and_bounded ropW op.
-Proof.
- intros xy HxHy.
- pose xy as xy'.
- compute in xy; destruct_head' prod.
- specialize (H0 xy' HxHy).
- specialize (H1 xy' HxHy).
- destruct HxHy as [Hx Hy].
- let args := constr:(binop_args_to_bounded xy' Hx Hy) in
- t_correct_and_bounded ropZ_sig Hbounds H0 H1 args.
-Qed.
diff --git a/src/SpecificGen/GF25519_32Reflective/CommonUnOp.v b/src/SpecificGen/GF25519_32Reflective/CommonUnOp.v
deleted file mode 100644
index 8bfdba221..000000000
--- a/src/SpecificGen/GF25519_32Reflective/CommonUnOp.v
+++ /dev/null
@@ -1,43 +0,0 @@
-Require Export Crypto.SpecificGen.GF25519_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF25519_32BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Lemma ExprUnOp_correct_and_bounded
- ropW op (ropZ_sig : rexpr_unop_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall x
- (x := eta_fe25519_32W x)
- (Hx : is_bounded (fe25519_32WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall x
- (x := eta_fe25519_32W x)
- (Hx : is_bounded (fe25519_32WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => unop_bounds_good bounds = true
- | None => False
- end)
- : unop_correct_and_bounded ropW op.
-Proof.
- intros x Hx.
- pose x as x'.
- hnf in x; destruct_head' prod.
- specialize (H0 x' Hx).
- specialize (H1 x' Hx).
- let args := constr:(unop_args_to_bounded x' Hx) in
- t_correct_and_bounded ropZ_sig Hbounds H0 H1 args.
-Qed.
diff --git a/src/SpecificGen/GF25519_32Reflective/CommonUnOpFEToWire.v b/src/SpecificGen/GF25519_32Reflective/CommonUnOpFEToWire.v
deleted file mode 100644
index 1bc40e3a9..000000000
--- a/src/SpecificGen/GF25519_32Reflective/CommonUnOpFEToWire.v
+++ /dev/null
@@ -1,43 +0,0 @@
-Require Export Crypto.SpecificGen.GF25519_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF25519_32BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Lemma ExprUnOpFEToWire_correct_and_bounded
- ropW op (ropZ_sig : rexpr_unop_FEToWire_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall x
- (x := eta_fe25519_32W x)
- (Hx : is_bounded (fe25519_32WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall x
- (x := eta_fe25519_32W x)
- (Hx : is_bounded (fe25519_32WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => unopFEToWire_bounds_good bounds = true
- | None => False
- end)
- : unop_FEToWire_correct_and_bounded ropW op.
-Proof.
- intros x Hx.
- pose x as x'.
- hnf in x; destruct_head' prod.
- specialize (H0 x' Hx).
- specialize (H1 x' Hx).
- let args := constr:(unop_args_to_bounded x' Hx) in
- t_correct_and_bounded ropZ_sig Hbounds H0 H1 args.
-Qed.
diff --git a/src/SpecificGen/GF25519_32Reflective/CommonUnOpFEToZ.v b/src/SpecificGen/GF25519_32Reflective/CommonUnOpFEToZ.v
deleted file mode 100644
index 9d9e24690..000000000
--- a/src/SpecificGen/GF25519_32Reflective/CommonUnOpFEToZ.v
+++ /dev/null
@@ -1,43 +0,0 @@
-Require Export Crypto.SpecificGen.GF25519_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF25519_32BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Lemma ExprUnOpFEToZ_correct_and_bounded
- ropW op (ropZ_sig : rexpr_unop_FEToZ_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall x
- (x := eta_fe25519_32W x)
- (Hx : is_bounded (fe25519_32WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall x
- (x := eta_fe25519_32W x)
- (Hx : is_bounded (fe25519_32WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => unopFEToZ_bounds_good bounds = true
- | None => False
- end)
- : unop_FEToZ_correct ropW op.
-Proof.
- intros x Hx.
- pose x as x'.
- hnf in x; destruct_head' prod.
- specialize (H0 x' Hx).
- specialize (H1 x' Hx).
- let args := constr:(unop_args_to_bounded x' Hx) in
- t_correct_and_bounded ropZ_sig Hbounds H0 H1 args.
-Qed.
diff --git a/src/SpecificGen/GF25519_32Reflective/CommonUnOpWireToFE.v b/src/SpecificGen/GF25519_32Reflective/CommonUnOpWireToFE.v
deleted file mode 100644
index 3d6ba7d3b..000000000
--- a/src/SpecificGen/GF25519_32Reflective/CommonUnOpWireToFE.v
+++ /dev/null
@@ -1,43 +0,0 @@
-Require Export Crypto.SpecificGen.GF25519_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF25519_32BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Lemma ExprUnOpWireToFE_correct_and_bounded
- ropW op (ropZ_sig : rexpr_unop_WireToFE_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall x
- (x := eta_wire_digitsW x)
- (Hx : wire_digits_is_bounded (wire_digitsWToZ x) = true),
- let args := unopWireToFE_args_to_bounded x Hx in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall x
- (x := eta_wire_digitsW x)
- (Hx : wire_digits_is_bounded (wire_digitsWToZ x) = true),
- let args := unopWireToFE_args_to_bounded x Hx in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => unopWireToFE_bounds_good bounds = true
- | None => False
- end)
- : unop_WireToFE_correct_and_bounded ropW op.
-Proof.
- intros x Hx.
- pose x as x'.
- hnf in x; destruct_head' prod.
- specialize (H0 x' Hx).
- specialize (H1 x' Hx).
- let args := constr:(unopWireToFE_args_to_bounded x' Hx) in
- t_correct_and_bounded ropZ_sig Hbounds H0 H1 args.
-Qed.
diff --git a/src/SpecificGen/GF25519_32Reflective/Reified.v b/src/SpecificGen/GF25519_32Reflective/Reified.v
deleted file mode 100644
index 106a6beb8..000000000
--- a/src/SpecificGen/GF25519_32Reflective/Reified.v
+++ /dev/null
@@ -1,13 +0,0 @@
-(** We split the reification up into separate files, one operation per
- file, so that it can run in parallel. *)
-Require Export Crypto.SpecificGen.GF25519_32Reflective.Reified.Add.
-Require Export Crypto.SpecificGen.GF25519_32Reflective.Reified.CarryAdd.
-Require Export Crypto.SpecificGen.GF25519_32Reflective.Reified.Sub.
-Require Export Crypto.SpecificGen.GF25519_32Reflective.Reified.CarrySub.
-Require Export Crypto.SpecificGen.GF25519_32Reflective.Reified.Mul.
-Require Export Crypto.SpecificGen.GF25519_32Reflective.Reified.Opp.
-Require Export Crypto.SpecificGen.GF25519_32Reflective.Reified.CarryOpp.
-Require Export Crypto.SpecificGen.GF25519_32Reflective.Reified.PreFreeze.
-Require Export Crypto.SpecificGen.GF25519_32Reflective.Reified.GeModulus.
-Require Export Crypto.SpecificGen.GF25519_32Reflective.Reified.Pack.
-Require Export Crypto.SpecificGen.GF25519_32Reflective.Reified.Unpack.
diff --git a/src/SpecificGen/GF25519_32Reflective/Reified/Add.v b/src/SpecificGen/GF25519_32Reflective/Reified/Add.v
deleted file mode 100644
index c35de3c76..000000000
--- a/src/SpecificGen/GF25519_32Reflective/Reified/Add.v
+++ /dev/null
@@ -1,12 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_32Reflective.CommonBinOp.
-
-Definition raddZ_sig : rexpr_binop_sig add. Proof. reify_sig. Defined.
-Definition raddW := Eval vm_compute in rword_of_Z raddZ_sig.
-Lemma raddW_correct_and_bounded_gen : correct_and_bounded_genT raddW raddZ_sig.
-Proof. rexpr_correct. Qed.
-Definition radd_output_bounds := Eval vm_compute in compute_bounds raddW ExprBinOp_bounds.
-
-Local Open Scope string_scope.
-Compute ("Add", compute_bounds_for_display raddW ExprBinOp_bounds).
-Compute ("Add overflows? ", sanity_compute raddW ExprBinOp_bounds).
-Compute ("Add overflows (error if it does)? ", sanity_check raddW ExprBinOp_bounds).
diff --git a/src/SpecificGen/GF25519_32Reflective/Reified/AddCoordinates.v b/src/SpecificGen/GF25519_32Reflective/Reified/AddCoordinates.v
deleted file mode 100644
index 5d0b9deb7..000000000
--- a/src/SpecificGen/GF25519_32Reflective/Reified/AddCoordinates.v
+++ /dev/null
@@ -1,183 +0,0 @@
-Require Export Coq.ZArith.ZArith.
-Require Export Coq.Strings.String.
-Require Export Crypto.SpecificGen.GF25519_32.
-Require Export Crypto.SpecificGen.GF25519_32BoundedCommon.
-Require Import Crypto.Reflection.Reify.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Reflection.ExprInversion.
-Require Import Crypto.Reflection.Relations.
-Require Import Crypto.Reflection.Linearize.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Crypto.Reflection.Z.Interpretations64.Relations.
-Require Import Crypto.Reflection.Z.Interpretations64.RelationsCombinations.
-Require Import Crypto.Reflection.Z.Reify.
-Require Export Crypto.Reflection.Z.Syntax.
-Require Import Crypto.Reflection.InterpWfRel.
-Require Import Crypto.Reflection.LinearizeInterp.
-Require Import Crypto.Reflection.WfReflective.
-Require Import Crypto.Reflection.Eta.
-Require Import Crypto.Reflection.EtaInterp.
-Require Import Crypto.CompleteEdwardsCurve.ExtendedCoordinates.
-Require Import Crypto.SpecificGen.GF25519_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF25519_32Reflective.Reified.Add.
-Require Import Crypto.SpecificGen.GF25519_32Reflective.Reified.Sub.
-Require Import Crypto.SpecificGen.GF25519_32Reflective.Reified.Mul.
-Require Import Crypto.SpecificGen.GF25519_32Reflective.Common9_4Op.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.HList.
-Require Import Crypto.Util.Tower.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.Notations.
-Require Import Bedrock.Word.
-
-Definition radd_coordinatesZ' var twice_d P1 P2
- := @Extended.add_coordinates_gen
- _
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig raddZ_sig var)))
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig rsubZ_sig var)))
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig rmulZ_sig var)))
- twice_d _
- (fun x y z w => (x, y, z, w)%expr)
- (fun v f => LetIn v
- (fun k => f (SmartVarf k)))
- P1 P2.
-
-Local Notation eta x := (fst x, snd x).
-
-Definition radd_coordinatesZ'' : Syntax.Expr _ _ _
- := Linearize
- (ExprEta
- (fun var
- => Abs (fun twice_d_P1_P2 : interp_flat_type _ (_ * ((_ * _ * _ * _) * (_ * _ * _ * _)))
- => let '(twice_d, ((P10, P11, P12, P13), (P20, P21, P22, P23)))
- := twice_d_P1_P2 in
- radd_coordinatesZ'
- var (SmartVarf twice_d)
- (SmartVarf P10, SmartVarf P11, SmartVarf P12, SmartVarf P13)
- (SmartVarf P20, SmartVarf P21, SmartVarf P22, SmartVarf P23)))).
-
-Definition add_coordinates
- := fun twice_d P10 P11 P12 P13 P20 P21 P22 P23
- => @Extended.add_coordinates
- _ add sub mul
- twice_d (P10, P11, P12, P13) (P20, P21, P22, P23).
-
-Definition uncurried_add_coordinates
- := fun twice_d_P1_P2
- => let twice_d := fst twice_d_P1_P2 in
- let (P1, P2) := eta (snd twice_d_P1_P2) in
- @Extended.add_coordinates
- _ add sub mul
- twice_d P1 P2.
-
-Local Notation rexpr_sigPf T uncurried_op rexprZ x :=
- (Interp interp_op (t:=T) rexprZ x = uncurried_op x)
- (only parsing).
-Local Notation rexpr_sigP T uncurried_op rexprZ :=
- (forall x, rexpr_sigPf T uncurried_op rexprZ x)
- (only parsing).
-Local Notation rexpr_sig T uncurried_op :=
- { rexprZ | rexpr_sigP T uncurried_op rexprZ }
- (only parsing).
-
-Local Ltac fold_interpf' :=
- let k := (eval unfold interpf, interpf_step in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- change k with k'; clearbody k'; subst k'.
-
-Local Ltac fold_interpf :=
- let k := (eval unfold interpf in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- change k with k'; clearbody k'; subst k';
- fold_interpf'.
-
-Local Ltac repeat_step_interpf :=
- let k := (eval unfold interpf in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- repeat (unfold k'; change k with k'; unfold interpf_step);
- clearbody k'; subst k'.
-
-Lemma radd_coordinatesZ_sigP' : rexpr_sigP _ uncurried_add_coordinates radd_coordinatesZ''.
-Proof.
- cbv [radd_coordinatesZ''].
- intro x; rewrite InterpLinearize, InterpExprEta.
- cbv [domain interp_flat_type] in x.
- destruct x as [twice_d [ [ [ [P10_ P11_] P12_] P13_] [ [ [P20_ P21_] P22_] P23_] ] ].
- repeat match goal with
- | [ H : prod _ _ |- _ ] => let H0 := fresh H in let H1 := fresh H in destruct H as [H0 H1]
- end.
- cbv [invert_Abs domain codomain Interp interp SmartVarf smart_interp_flat_map fst snd].
- cbv [radd_coordinatesZ' add_coordinates Extended.add_coordinates_gen uncurried_add_coordinates SmartVarf smart_interp_flat_map]; simpl @fst; simpl @snd.
- repeat match goal with
- | [ |- appcontext[@proj1_sig ?A ?B ?v] ]
- => let k := fresh "f" in
- let k' := fresh "f" in
- let H := fresh in
- set (k := v);
- set (k' := @proj1_sig A B k);
- pose proof (proj2_sig k) as H;
- change (proj1_sig k) with k' in H;
- clearbody k'; clear k;
- cbv beta in *
- end.
- cbv [Interp Curry.curry2] in *.
- unfold interpf, interpf_step; fold_interpf.
- cbv beta iota delta [Extended.add_coordinates interp_flat_type interp_base_type GF25519_32.fe25519_32].
- Time
- abstract (
- repeat match goal with
- | [ |- (dlet x := ?y in @?z x) = (let x' := ?y' in @?z' x') ]
- => refine ((fun pf0 pf1 => @Proper_Let_In_nd_changebody _ _ Logic.eq _ y y' pf0 z z' pf1)
- (_ : y = y')
- (_ : forall x, z x = z' x));
- cbv beta; intros;
- [ cbv [Let_In] | ]
- end;
- repeat match goal with
- | _ => rewrite !interpf_invert_Abs
- | _ => rewrite_hyp !*
- | [ |- ?x = ?x ] => reflexivity
- | _ => rewrite <- !surjective_pairing
- end
- ).
-Time Defined.
-Lemma radd_coordinatesZ_sigP : rexpr_sigP _ uncurried_add_coordinates radd_coordinatesZ''.
-Proof.
- exact radd_coordinatesZ_sigP'.
-Qed.
-Definition radd_coordinatesZ_sig
- := exist (fun v => rexpr_sigP _ _ v) radd_coordinatesZ'' radd_coordinatesZ_sigP.
-
-Definition radd_coordinates_input_bounds
- := (ExprUnOp_bounds, ((ExprUnOp_bounds, ExprUnOp_bounds, ExprUnOp_bounds, ExprUnOp_bounds),
- (ExprUnOp_bounds, ExprUnOp_bounds, ExprUnOp_bounds, ExprUnOp_bounds))).
-
-Time Definition radd_coordinatesW := Eval vm_compute in rword_of_Z radd_coordinatesZ_sig.
-Lemma radd_coordinatesW_correct_and_bounded_gen : correct_and_bounded_genT radd_coordinatesW radd_coordinatesZ_sig.
-Proof. Time rexpr_correct. Time Qed.
-Definition radd_coordinates_output_bounds := Eval vm_compute in compute_bounds radd_coordinatesW radd_coordinates_input_bounds.
-
-Local Obligation Tactic := intros; vm_compute; constructor.
-
-(*
-Program Definition radd_coordinatesW_correct_and_bounded
- := Expr9_4Op_correct_and_bounded
- radd_coordinatesW uncurried_add_coordinates radd_coordinatesZ_sig radd_coordinatesW_correct_and_bounded_gen
- _ _.
- *)
-
-Local Open Scope string_scope.
-Compute ("Add_Coordinates", compute_bounds_for_display radd_coordinatesW radd_coordinates_input_bounds).
-Compute ("Add_Coordinates overflows? ", sanity_compute radd_coordinatesW radd_coordinates_input_bounds).
-Compute ("Add_Coordinates overflows (error if it does)? ", sanity_check radd_coordinatesW radd_coordinates_input_bounds).
diff --git a/src/SpecificGen/GF25519_32Reflective/Reified/AddDisplay.log b/src/SpecificGen/GF25519_32Reflective/Reified/AddDisplay.log
deleted file mode 100644
index 156f0286e..000000000
--- a/src/SpecificGen/GF25519_32Reflective/Reified/AddDisplay.log
+++ /dev/null
@@ -1,45 +0,0 @@
-raddW =
-fun var : Syntax.base_type -> Type =>
-λ
-x x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17
- x18 : var Syntax.TZ,
-Tbase Syntax.TZ x19 = x + x9;
-Tbase Syntax.TZ x20 = x0 + x10;
-Tbase Syntax.TZ x21 = x1 + x11;
-Tbase Syntax.TZ x22 = x2 + x12;
-Tbase Syntax.TZ x23 = x3 + x13;
-Tbase Syntax.TZ x24 = x4 + x14;
-Tbase Syntax.TZ x25 = x5 + x15;
-Tbase Syntax.TZ x26 = x6 + x16;
-Tbase Syntax.TZ x27 = x7 + x17;
-Tbase Syntax.TZ x28 = x8 + x18;
-(Return x19, Return x20, Return x21, Return x22, Return x23,
-Return x24, Return x25, Return x26, Return x27, Return x28)
- : forall var : Syntax.base_type -> Type,
- expr Syntax.base_type Syntax.op
- (Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF25519_32Reflective/Reified/AddDisplay.v b/src/SpecificGen/GF25519_32Reflective/Reified/AddDisplay.v
deleted file mode 100644
index ba6c45088..000000000
--- a/src/SpecificGen/GF25519_32Reflective/Reified/AddDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_32Reflective.Reified.Add.
-Require Export Crypto.Reflection.Z.CNotations.
-
-Print raddW.
diff --git a/src/SpecificGen/GF25519_32Reflective/Reified/AddJavaDisplay.log b/src/SpecificGen/GF25519_32Reflective/Reified/AddJavaDisplay.log
deleted file mode 100644
index 156f0286e..000000000
--- a/src/SpecificGen/GF25519_32Reflective/Reified/AddJavaDisplay.log
+++ /dev/null
@@ -1,45 +0,0 @@
-raddW =
-fun var : Syntax.base_type -> Type =>
-λ
-x x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17
- x18 : var Syntax.TZ,
-Tbase Syntax.TZ x19 = x + x9;
-Tbase Syntax.TZ x20 = x0 + x10;
-Tbase Syntax.TZ x21 = x1 + x11;
-Tbase Syntax.TZ x22 = x2 + x12;
-Tbase Syntax.TZ x23 = x3 + x13;
-Tbase Syntax.TZ x24 = x4 + x14;
-Tbase Syntax.TZ x25 = x5 + x15;
-Tbase Syntax.TZ x26 = x6 + x16;
-Tbase Syntax.TZ x27 = x7 + x17;
-Tbase Syntax.TZ x28 = x8 + x18;
-(Return x19, Return x20, Return x21, Return x22, Return x23,
-Return x24, Return x25, Return x26, Return x27, Return x28)
- : forall var : Syntax.base_type -> Type,
- expr Syntax.base_type Syntax.op
- (Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF25519_32Reflective/Reified/AddJavaDisplay.v b/src/SpecificGen/GF25519_32Reflective/Reified/AddJavaDisplay.v
deleted file mode 100644
index 55d7ad833..000000000
--- a/src/SpecificGen/GF25519_32Reflective/Reified/AddJavaDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_32Reflective.Reified.Add.
-Require Export Crypto.Reflection.Z.JavaNotations.
-
-Print raddW.
diff --git a/src/SpecificGen/GF25519_32Reflective/Reified/CarryAdd.v b/src/SpecificGen/GF25519_32Reflective/Reified/CarryAdd.v
deleted file mode 100644
index d7a9923fb..000000000
--- a/src/SpecificGen/GF25519_32Reflective/Reified/CarryAdd.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_32Reflective.CommonBinOp.
-
-Definition rcarry_addZ_sig : rexpr_binop_sig carry_add. Proof. reify_sig. Defined.
-Definition rcarry_addW := Eval vm_compute in rword_of_Z rcarry_addZ_sig.
-Lemma rcarry_addW_correct_and_bounded_gen : correct_and_bounded_genT rcarry_addW rcarry_addZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rcarry_add_output_bounds := Eval vm_compute in compute_bounds rcarry_addW ExprBinOp_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rcarry_addW_correct_and_bounded
- := ExprBinOp_correct_and_bounded
- rcarry_addW carry_add rcarry_addZ_sig rcarry_addW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Carry_Add", compute_bounds_for_display rcarry_addW ExprBinOp_bounds).
-Compute ("Carry_Add overflows? ", sanity_compute rcarry_addW ExprBinOp_bounds).
-Compute ("Carry_Add overflows (error if it does)? ", sanity_check rcarry_addW ExprBinOp_bounds).
diff --git a/src/SpecificGen/GF25519_32Reflective/Reified/CarryOpp.v b/src/SpecificGen/GF25519_32Reflective/Reified/CarryOpp.v
deleted file mode 100644
index 9a3eb5cb4..000000000
--- a/src/SpecificGen/GF25519_32Reflective/Reified/CarryOpp.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_32Reflective.CommonUnOp.
-
-Definition rcarry_oppZ_sig : rexpr_unop_sig carry_opp. Proof. reify_sig. Defined.
-Definition rcarry_oppW := Eval vm_compute in rword_of_Z rcarry_oppZ_sig.
-Lemma rcarry_oppW_correct_and_bounded_gen : correct_and_bounded_genT rcarry_oppW rcarry_oppZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rcarry_opp_output_bounds := Eval vm_compute in compute_bounds rcarry_oppW ExprUnOp_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rcarry_oppW_correct_and_bounded
- := ExprUnOp_correct_and_bounded
- rcarry_oppW carry_opp rcarry_oppZ_sig rcarry_oppW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Carry_Opp", compute_bounds_for_display rcarry_oppW ExprUnOp_bounds).
-Compute ("Carry_Opp overflows? ", sanity_compute rcarry_oppW ExprUnOp_bounds).
-Compute ("Carry_Opp overflows (error if it does)? ", sanity_check rcarry_oppW ExprUnOp_bounds).
diff --git a/src/SpecificGen/GF25519_32Reflective/Reified/CarrySub.v b/src/SpecificGen/GF25519_32Reflective/Reified/CarrySub.v
deleted file mode 100644
index a632e6ae7..000000000
--- a/src/SpecificGen/GF25519_32Reflective/Reified/CarrySub.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_32Reflective.CommonBinOp.
-
-Definition rcarry_subZ_sig : rexpr_binop_sig carry_sub. Proof. reify_sig. Defined.
-Definition rcarry_subW := Eval vm_compute in rword_of_Z rcarry_subZ_sig.
-Lemma rcarry_subW_correct_and_bounded_gen : correct_and_bounded_genT rcarry_subW rcarry_subZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rcarry_sub_output_bounds := Eval vm_compute in compute_bounds rcarry_subW ExprBinOp_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rcarry_subW_correct_and_bounded
- := ExprBinOp_correct_and_bounded
- rcarry_subW carry_sub rcarry_subZ_sig rcarry_subW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Carry_Sub", compute_bounds_for_display rcarry_subW ExprBinOp_bounds).
-Compute ("Carry_Sub overflows? ", sanity_compute rcarry_subW ExprBinOp_bounds).
-Compute ("Carry_Sub overflows (error if it does)? ", sanity_check rcarry_subW ExprBinOp_bounds).
diff --git a/src/SpecificGen/GF25519_32Reflective/Reified/GeModulus.v b/src/SpecificGen/GF25519_32Reflective/Reified/GeModulus.v
deleted file mode 100644
index 961940d22..000000000
--- a/src/SpecificGen/GF25519_32Reflective/Reified/GeModulus.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_32Reflective.CommonUnOpFEToZ.
-
-Definition rge_modulusZ_sig : rexpr_unop_FEToZ_sig ge_modulus. Proof. reify_sig. Defined.
-Definition rge_modulusW := Eval vm_compute in rword_of_Z rge_modulusZ_sig.
-Lemma rge_modulusW_correct_and_bounded_gen : correct_and_bounded_genT rge_modulusW rge_modulusZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rge_modulus_output_bounds := Eval vm_compute in compute_bounds rge_modulusW ExprUnOpFEToZ_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rge_modulusW_correct_and_bounded
- := ExprUnOpFEToZ_correct_and_bounded
- rge_modulusW ge_modulus rge_modulusZ_sig rge_modulusW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Ge_Modulus", compute_bounds_for_display rge_modulusW ExprUnOpFEToZ_bounds).
-Compute ("Ge_Modulus overflows? ", sanity_compute rge_modulusW ExprUnOpFEToZ_bounds).
-Compute ("Ge_Modulus overflows (error if it does)? ", sanity_check rge_modulusW ExprUnOpFEToZ_bounds).
diff --git a/src/SpecificGen/GF25519_32Reflective/Reified/LadderStep.v b/src/SpecificGen/GF25519_32Reflective/Reified/LadderStep.v
deleted file mode 100644
index 36919539d..000000000
--- a/src/SpecificGen/GF25519_32Reflective/Reified/LadderStep.v
+++ /dev/null
@@ -1,189 +0,0 @@
-Require Export Coq.ZArith.ZArith.
-Require Export Coq.Strings.String.
-Require Export Crypto.SpecificGen.GF25519_32.
-Require Export Crypto.SpecificGen.GF25519_32BoundedCommon.
-Require Import Crypto.Reflection.Reify.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Reflection.Relations.
-Require Import Crypto.Reflection.ExprInversion.
-Require Import Crypto.Reflection.Linearize.
-Require Import Crypto.Reflection.Eta.
-Require Import Crypto.Reflection.EtaInterp.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Crypto.Reflection.Z.Interpretations64.Relations.
-Require Import Crypto.Reflection.Z.Interpretations64.RelationsCombinations.
-Require Import Crypto.Reflection.Z.Reify.
-Require Export Crypto.Reflection.Z.Syntax.
-Require Import Crypto.Reflection.InterpWfRel.
-Require Import Crypto.Reflection.LinearizeInterp.
-Require Import Crypto.Reflection.WfReflective.
-Require Import Crypto.Spec.MxDH.
-Require Import Crypto.SpecificGen.GF25519_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF25519_32Reflective.Reified.Add.
-Require Import Crypto.SpecificGen.GF25519_32Reflective.Reified.Sub.
-Require Import Crypto.SpecificGen.GF25519_32Reflective.Reified.Mul.
-Require Import Crypto.SpecificGen.GF25519_32Reflective.Common9_4Op.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.HList.
-Require Import Crypto.Util.Tower.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.Notations.
-Require Import Bedrock.Word.
-
-Definition rladderstepZ' var (T:=_) (a24 x0 : T) P1 P2
- := @MxDH.ladderstep_gen
- _
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig raddZ_sig var)))
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig rsubZ_sig var)))
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig rmulZ_sig var)))
- a24
- _
- (fun x y z w => (x, y, z, w)%expr)
- (fun v f => LetIn v
- (fun k => f (SmartVarf k)))
- x0
- P1 P2.
-
-Definition rladderstepZ'' : Syntax.Expr _ _ _
- := Linearize
- (ExprEta
- (fun var
- => Abs (fun a24_x0_P1_P2 : interp_flat_type _ (_ * _ * ((_ * _) * (_ * _)))
- => let '(a24, x0, ((P10, P11), (P20, P21)))
- := a24_x0_P1_P2 in
- rladderstepZ'
- var (SmartVarf a24) (SmartVarf x0)
- (SmartVarf P10, SmartVarf P11)
- (SmartVarf P20, SmartVarf P21)))).
-
-Local Notation eta x := (fst x, snd x).
-
-Definition ladderstep_other_assoc {F Fadd Fsub Fmul} a24 (X1:F) (P1 P2:F*F) : F*F*F*F :=
- Eval cbv beta delta [MxDH.ladderstep_gen] in
- @MxDH.ladderstep_gen
- F Fadd Fsub Fmul a24
- (F*F*F*F)
- (fun X3 Y3 Z3 T3 => (X3, Y3, Z3, T3))
- (fun x f => dlet y := x in f y)
- X1 P1 P2.
-
-Definition uncurried_ladderstep
- := fun (a24_x0_P1_P2 : _ * _ * ((_ * _) * (_ * _)))
- => let a24 := fst (fst a24_x0_P1_P2) in
- let x0 := snd (fst a24_x0_P1_P2) in
- let '(P1, P2) := eta (snd a24_x0_P1_P2) in
- let '((P10, P11), (P20, P21)) := (eta P1, eta P2) in
- @ladderstep_other_assoc
- _ add sub mul
- a24 x0 (P10, P11) (P20, P21).
-
-Local Notation rexpr_sigPf T uncurried_op rexprZ x :=
- (Interp interp_op (t:=T) rexprZ x = uncurried_op x)
- (only parsing).
-Local Notation rexpr_sigP T uncurried_op rexprZ :=
- (forall x, rexpr_sigPf T uncurried_op rexprZ x)
- (only parsing).
-Local Notation rexpr_sig T uncurried_op :=
- { rexprZ | rexpr_sigP T uncurried_op rexprZ }
- (only parsing).
-
-Local Ltac fold_interpf' :=
- let k := (eval unfold interpf, interpf_step in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- change k with k'; clearbody k'; subst k'.
-
-Local Ltac fold_interpf :=
- let k := (eval unfold interpf in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- change k with k'; clearbody k'; subst k';
- fold_interpf'.
-
-Local Ltac repeat_step_interpf :=
- let k := (eval unfold interpf in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- repeat (unfold interpf_step at 1; change k with k' at 1);
- clearbody k'; subst k'.
-
-Lemma rladderstepZ_sigP' : rexpr_sigP _ uncurried_ladderstep rladderstepZ''.
-Proof.
- cbv [rladderstepZ''].
- intro x; rewrite InterpLinearize, InterpExprEta.
- cbv [domain interp_flat_type interp_base_type] in x.
- destruct_head' prod.
- cbv [invert_Abs domain codomain Interp interp SmartVarf smart_interp_flat_map fst snd].
- cbv [rladderstepZ' MxDH.ladderstep_gen uncurried_ladderstep SmartVarf smart_interp_flat_map]; simpl @fst; simpl @snd.
- repeat match goal with
- | [ |- appcontext[@proj1_sig ?A ?B ?v] ]
- => let k := fresh "f" in
- let k' := fresh "f" in
- let H := fresh in
- set (k := v);
- set (k' := @proj1_sig A B k);
- pose proof (proj2_sig k) as H;
- change (proj1_sig k) with k' in H;
- clearbody k'; clear k;
- cbv beta in *
- end.
- cbv [Interp Curry.curry2] in *.
- unfold interpf, interpf_step; fold_interpf.
- cbv [ladderstep_other_assoc interp_flat_type GF25519_32.fe25519_32].
- Time
- abstract (
- repeat match goal with
- | [ |- (dlet x := ?y in @?z x) = (dlet x' := ?y' in @?z' x') ]
- => refine ((fun pf0 pf1 => @Proper_Let_In_nd_changebody _ _ Logic.eq _ y y' pf0 z z' pf1)
- (_ : y = y')
- (_ : forall x, z x = z' x));
- cbv beta; intros;
- [ cbv [Let_In Common.ExprBinOpT] | ]
- end;
- repeat match goal with
- | _ => rewrite !interpf_invert_Abs
- | _ => rewrite_hyp !*
- | _ => progress cbv [interp_base_type]
- | [ |- ?x = ?x ] => reflexivity
- | _ => rewrite <- !surjective_pairing
- end
- ).
-Time Defined.
-Lemma rladderstepZ_sigP : rexpr_sigP _ uncurried_ladderstep rladderstepZ''.
-Proof.
- exact rladderstepZ_sigP'.
-Qed.
-Definition rladderstepZ_sig
- := exist (fun v => rexpr_sigP _ _ v) rladderstepZ'' rladderstepZ_sigP.
-
-Definition rladderstep_input_bounds
- := (ExprUnOp_bounds, ExprUnOp_bounds,
- ((ExprUnOp_bounds, ExprUnOp_bounds),
- (ExprUnOp_bounds, ExprUnOp_bounds))).
-
-Time Definition rladderstepW := Eval vm_compute in rword_of_Z rladderstepZ_sig.
-Lemma rladderstepW_correct_and_bounded_gen : correct_and_bounded_genT rladderstepW rladderstepZ_sig.
-Proof. Time rexpr_correct. Time Qed.
-Definition rladderstep_output_bounds := Eval vm_compute in compute_bounds rladderstepW rladderstep_input_bounds.
-
-Local Obligation Tactic := intros; vm_compute; constructor.
-
-(*
-Program Definition rladderstepW_correct_and_bounded
- := Expr9_4Op_correct_and_bounded
- rladderstepW uncurried_ladderstep rladderstepZ_sig rladderstepW_correct_and_bounded_gen
- _ _.
- *)
-
-Local Open Scope string_scope.
-Compute ("Ladderstep", compute_bounds_for_display rladderstepW rladderstep_input_bounds).
-Compute ("Ladderstep overflows? ", sanity_compute rladderstepW rladderstep_input_bounds).
-Compute ("Ladderstep overflows (error if it does)? ", sanity_check rladderstepW rladderstep_input_bounds).
diff --git a/src/SpecificGen/GF25519_32Reflective/Reified/LadderStepDisplay.log b/src/SpecificGen/GF25519_32Reflective/Reified/LadderStepDisplay.log
deleted file mode 100644
index ce961efd5..000000000
--- a/src/SpecificGen/GF25519_32Reflective/Reified/LadderStepDisplay.log
+++ /dev/null
@@ -1,3459 +0,0 @@
-rladderstepW =
-fun var : base_type -> Type =>
-λ
-_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ x29 x30 x31 x32
- x33 x34 x35 x36 x37 x38 x39 x40 x41 x42 x43 x44 x45 x46 x47 x48 x49 x50 x51
- x52 x53 x54 x55 x56 x57 x58 x59 x60 x61 x62 x63 x64 x65 x66 x67 x68 x69 x70
- x71 x72 x73 x74 x75 x76 x77 x78 x79 x80 x81 x82 x83 x84 x85 x86 x87
- x88 : var TZ,
-Tbase TZ x89 = x49 + x59;
-Tbase TZ x90 = x50 + x60;
-Tbase TZ x91 = x51 + x61;
-Tbase TZ x92 = x52 + x62;
-Tbase TZ x93 = x53 + x63;
-Tbase TZ x94 = x54 + x64;
-Tbase TZ x95 = x55 + x65;
-Tbase TZ x96 = x56 + x66;
-Tbase TZ x97 = x57 + x67;
-Tbase TZ x98 = x58 + x68;
-Tbase TZ x99 = x98 * x98;
-Tbase TZ x100 = 0x2;
-Tbase TZ x101 = x97 * x100;
-Tbase TZ x102 = x89 * x101;
-Tbase TZ x103 = x90 * x96;
-Tbase TZ x104 = 0x2;
-Tbase TZ x105 = x95 * x104;
-Tbase TZ x106 = x91 * x105;
-Tbase TZ x107 = x92 * x94;
-Tbase TZ x108 = 0x2;
-Tbase TZ x109 = x93 * x108;
-Tbase TZ x110 = x93 * x109;
-Tbase TZ x111 = x94 * x92;
-Tbase TZ x112 = 0x2;
-Tbase TZ x113 = x91 * x112;
-Tbase TZ x114 = x95 * x113;
-Tbase TZ x115 = x96 * x90;
-Tbase TZ x116 = 0x2;
-Tbase TZ x117 = x89 * x116;
-Tbase TZ x118 = x97 * x117;
-Tbase TZ x119 = x115 + x118;
-Tbase TZ x120 = x114 + x119;
-Tbase TZ x121 = x111 + x120;
-Tbase TZ x122 = x110 + x121;
-Tbase TZ x123 = x107 + x122;
-Tbase TZ x124 = x106 + x123;
-Tbase TZ x125 = x103 + x124;
-Tbase TZ x126 = x102 + x125;
-Tbase TZ x127 = 0x13;
-Tbase TZ x128 = x127 * x126;
-Tbase TZ x129 = x99 + x128;
-Tbase TZ x130 = 0x1a;
-Tbase TZ x131 = x129 >> x130;
-Tbase TZ x132 = x97 * x98;
-Tbase TZ x133 = x98 * x97;
-Tbase TZ x134 = x132 + x133;
-Tbase TZ x135 = x89 * x96;
-Tbase TZ x136 = x90 * x95;
-Tbase TZ x137 = x91 * x94;
-Tbase TZ x138 = x92 * x93;
-Tbase TZ x139 = x93 * x92;
-Tbase TZ x140 = x94 * x91;
-Tbase TZ x141 = x95 * x90;
-Tbase TZ x142 = x96 * x89;
-Tbase TZ x143 = x141 + x142;
-Tbase TZ x144 = x140 + x143;
-Tbase TZ x145 = x139 + x144;
-Tbase TZ x146 = x138 + x145;
-Tbase TZ x147 = x137 + x146;
-Tbase TZ x148 = x136 + x147;
-Tbase TZ x149 = x135 + x148;
-Tbase TZ x150 = 0x13;
-Tbase TZ x151 = x150 * x149;
-Tbase TZ x152 = x134 + x151;
-Tbase TZ x153 = x131 + x152;
-Tbase TZ x154 = 0x19;
-Tbase TZ x155 = x153 >> x154;
-Tbase TZ x156 = x96 * x98;
-Tbase TZ x157 = 0x2;
-Tbase TZ x158 = x97 * x157;
-Tbase TZ x159 = x97 * x158;
-Tbase TZ x160 = x98 * x96;
-Tbase TZ x161 = x159 + x160;
-Tbase TZ x162 = x156 + x161;
-Tbase TZ x163 = 0x2;
-Tbase TZ x164 = x95 * x163;
-Tbase TZ x165 = x89 * x164;
-Tbase TZ x166 = x90 * x94;
-Tbase TZ x167 = 0x2;
-Tbase TZ x168 = x93 * x167;
-Tbase TZ x169 = x91 * x168;
-Tbase TZ x170 = x92 * x92;
-Tbase TZ x171 = 0x2;
-Tbase TZ x172 = x91 * x171;
-Tbase TZ x173 = x93 * x172;
-Tbase TZ x174 = x94 * x90;
-Tbase TZ x175 = 0x2;
-Tbase TZ x176 = x89 * x175;
-Tbase TZ x177 = x95 * x176;
-Tbase TZ x178 = x174 + x177;
-Tbase TZ x179 = x173 + x178;
-Tbase TZ x180 = x170 + x179;
-Tbase TZ x181 = x169 + x180;
-Tbase TZ x182 = x166 + x181;
-Tbase TZ x183 = x165 + x182;
-Tbase TZ x184 = 0x13;
-Tbase TZ x185 = x184 * x183;
-Tbase TZ x186 = x162 + x185;
-Tbase TZ x187 = x155 + x186;
-Tbase TZ x188 = 0x1a;
-Tbase TZ x189 = x187 >> x188;
-Tbase TZ x190 = x95 * x98;
-Tbase TZ x191 = x96 * x97;
-Tbase TZ x192 = x97 * x96;
-Tbase TZ x193 = x98 * x95;
-Tbase TZ x194 = x192 + x193;
-Tbase TZ x195 = x191 + x194;
-Tbase TZ x196 = x190 + x195;
-Tbase TZ x197 = x89 * x94;
-Tbase TZ x198 = x90 * x93;
-Tbase TZ x199 = x91 * x92;
-Tbase TZ x200 = x92 * x91;
-Tbase TZ x201 = x93 * x90;
-Tbase TZ x202 = x94 * x89;
-Tbase TZ x203 = x201 + x202;
-Tbase TZ x204 = x200 + x203;
-Tbase TZ x205 = x199 + x204;
-Tbase TZ x206 = x198 + x205;
-Tbase TZ x207 = x197 + x206;
-Tbase TZ x208 = 0x13;
-Tbase TZ x209 = x208 * x207;
-Tbase TZ x210 = x196 + x209;
-Tbase TZ x211 = x189 + x210;
-Tbase TZ x212 = 0x19;
-Tbase TZ x213 = x211 >> x212;
-Tbase TZ x214 = x94 * x98;
-Tbase TZ x215 = 0x2;
-Tbase TZ x216 = x97 * x215;
-Tbase TZ x217 = x95 * x216;
-Tbase TZ x218 = x96 * x96;
-Tbase TZ x219 = 0x2;
-Tbase TZ x220 = x95 * x219;
-Tbase TZ x221 = x97 * x220;
-Tbase TZ x222 = x98 * x94;
-Tbase TZ x223 = x221 + x222;
-Tbase TZ x224 = x218 + x223;
-Tbase TZ x225 = x217 + x224;
-Tbase TZ x226 = x214 + x225;
-Tbase TZ x227 = 0x2;
-Tbase TZ x228 = x93 * x227;
-Tbase TZ x229 = x89 * x228;
-Tbase TZ x230 = x90 * x92;
-Tbase TZ x231 = 0x2;
-Tbase TZ x232 = x91 * x231;
-Tbase TZ x233 = x91 * x232;
-Tbase TZ x234 = x92 * x90;
-Tbase TZ x235 = 0x2;
-Tbase TZ x236 = x89 * x235;
-Tbase TZ x237 = x93 * x236;
-Tbase TZ x238 = x234 + x237;
-Tbase TZ x239 = x233 + x238;
-Tbase TZ x240 = x230 + x239;
-Tbase TZ x241 = x229 + x240;
-Tbase TZ x242 = 0x13;
-Tbase TZ x243 = x242 * x241;
-Tbase TZ x244 = x226 + x243;
-Tbase TZ x245 = x213 + x244;
-Tbase TZ x246 = 0x1a;
-Tbase TZ x247 = x245 >> x246;
-Tbase TZ x248 = x93 * x98;
-Tbase TZ x249 = x94 * x97;
-Tbase TZ x250 = x95 * x96;
-Tbase TZ x251 = x96 * x95;
-Tbase TZ x252 = x97 * x94;
-Tbase TZ x253 = x98 * x93;
-Tbase TZ x254 = x252 + x253;
-Tbase TZ x255 = x251 + x254;
-Tbase TZ x256 = x250 + x255;
-Tbase TZ x257 = x249 + x256;
-Tbase TZ x258 = x248 + x257;
-Tbase TZ x259 = x89 * x92;
-Tbase TZ x260 = x90 * x91;
-Tbase TZ x261 = x91 * x90;
-Tbase TZ x262 = x92 * x89;
-Tbase TZ x263 = x261 + x262;
-Tbase TZ x264 = x260 + x263;
-Tbase TZ x265 = x259 + x264;
-Tbase TZ x266 = 0x13;
-Tbase TZ x267 = x266 * x265;
-Tbase TZ x268 = x258 + x267;
-Tbase TZ x269 = x247 + x268;
-Tbase TZ x270 = 0x19;
-Tbase TZ x271 = x269 >> x270;
-Tbase TZ x272 = x92 * x98;
-Tbase TZ x273 = 0x2;
-Tbase TZ x274 = x97 * x273;
-Tbase TZ x275 = x93 * x274;
-Tbase TZ x276 = x94 * x96;
-Tbase TZ x277 = 0x2;
-Tbase TZ x278 = x95 * x277;
-Tbase TZ x279 = x95 * x278;
-Tbase TZ x280 = x96 * x94;
-Tbase TZ x281 = 0x2;
-Tbase TZ x282 = x93 * x281;
-Tbase TZ x283 = x97 * x282;
-Tbase TZ x284 = x98 * x92;
-Tbase TZ x285 = x283 + x284;
-Tbase TZ x286 = x280 + x285;
-Tbase TZ x287 = x279 + x286;
-Tbase TZ x288 = x276 + x287;
-Tbase TZ x289 = x275 + x288;
-Tbase TZ x290 = x272 + x289;
-Tbase TZ x291 = 0x2;
-Tbase TZ x292 = x91 * x291;
-Tbase TZ x293 = x89 * x292;
-Tbase TZ x294 = x90 * x90;
-Tbase TZ x295 = 0x2;
-Tbase TZ x296 = x89 * x295;
-Tbase TZ x297 = x91 * x296;
-Tbase TZ x298 = x294 + x297;
-Tbase TZ x299 = x293 + x298;
-Tbase TZ x300 = 0x13;
-Tbase TZ x301 = x300 * x299;
-Tbase TZ x302 = x290 + x301;
-Tbase TZ x303 = x271 + x302;
-Tbase TZ x304 = 0x1a;
-Tbase TZ x305 = x303 >> x304;
-Tbase TZ x306 = x91 * x98;
-Tbase TZ x307 = x92 * x97;
-Tbase TZ x308 = x93 * x96;
-Tbase TZ x309 = x94 * x95;
-Tbase TZ x310 = x95 * x94;
-Tbase TZ x311 = x96 * x93;
-Tbase TZ x312 = x97 * x92;
-Tbase TZ x313 = x98 * x91;
-Tbase TZ x314 = x312 + x313;
-Tbase TZ x315 = x311 + x314;
-Tbase TZ x316 = x310 + x315;
-Tbase TZ x317 = x309 + x316;
-Tbase TZ x318 = x308 + x317;
-Tbase TZ x319 = x307 + x318;
-Tbase TZ x320 = x306 + x319;
-Tbase TZ x321 = x89 * x90;
-Tbase TZ x322 = x90 * x89;
-Tbase TZ x323 = x321 + x322;
-Tbase TZ x324 = 0x13;
-Tbase TZ x325 = x324 * x323;
-Tbase TZ x326 = x320 + x325;
-Tbase TZ x327 = x305 + x326;
-Tbase TZ x328 = 0x19;
-Tbase TZ x329 = x327 >> x328;
-Tbase TZ x330 = x90 * x98;
-Tbase TZ x331 = 0x2;
-Tbase TZ x332 = x97 * x331;
-Tbase TZ x333 = x91 * x332;
-Tbase TZ x334 = x92 * x96;
-Tbase TZ x335 = 0x2;
-Tbase TZ x336 = x95 * x335;
-Tbase TZ x337 = x93 * x336;
-Tbase TZ x338 = x94 * x94;
-Tbase TZ x339 = 0x2;
-Tbase TZ x340 = x93 * x339;
-Tbase TZ x341 = x95 * x340;
-Tbase TZ x342 = x96 * x92;
-Tbase TZ x343 = 0x2;
-Tbase TZ x344 = x91 * x343;
-Tbase TZ x345 = x97 * x344;
-Tbase TZ x346 = x98 * x90;
-Tbase TZ x347 = x345 + x346;
-Tbase TZ x348 = x342 + x347;
-Tbase TZ x349 = x341 + x348;
-Tbase TZ x350 = x338 + x349;
-Tbase TZ x351 = x337 + x350;
-Tbase TZ x352 = x334 + x351;
-Tbase TZ x353 = x333 + x352;
-Tbase TZ x354 = x330 + x353;
-Tbase TZ x355 = 0x2;
-Tbase TZ x356 = x89 * x355;
-Tbase TZ x357 = x89 * x356;
-Tbase TZ x358 = 0x13;
-Tbase TZ x359 = x358 * x357;
-Tbase TZ x360 = x354 + x359;
-Tbase TZ x361 = x329 + x360;
-Tbase TZ x362 = 0x1a;
-Tbase TZ x363 = x361 >> x362;
-Tbase TZ x364 = x89 * x98;
-Tbase TZ x365 = x90 * x97;
-Tbase TZ x366 = x91 * x96;
-Tbase TZ x367 = x92 * x95;
-Tbase TZ x368 = x93 * x94;
-Tbase TZ x369 = x94 * x93;
-Tbase TZ x370 = x95 * x92;
-Tbase TZ x371 = x96 * x91;
-Tbase TZ x372 = x97 * x90;
-Tbase TZ x373 = x98 * x89;
-Tbase TZ x374 = x372 + x373;
-Tbase TZ x375 = x371 + x374;
-Tbase TZ x376 = x370 + x375;
-Tbase TZ x377 = x369 + x376;
-Tbase TZ x378 = x368 + x377;
-Tbase TZ x379 = x367 + x378;
-Tbase TZ x380 = x366 + x379;
-Tbase TZ x381 = x365 + x380;
-Tbase TZ x382 = x364 + x381;
-Tbase TZ x383 = x363 + x382;
-Tbase TZ x384 = 0x19;
-Tbase TZ x385 = x383 >> x384;
-Tbase TZ x386 = 0x13;
-Tbase TZ x387 = x386 * x385;
-Tbase TZ x388 = 0x3ffffff;
-Tbase TZ x389 = x129 & x388;
-Tbase TZ x390 = x387 + x389;
-Tbase TZ x391 = 0x1a;
-Tbase TZ x392 = x390 >> x391;
-Tbase TZ x393 = 0x1ffffff;
-Tbase TZ x394 = x153 & x393;
-Tbase TZ x395 = x392 + x394;
-Tbase TZ x396 = 0x1ffffff;
-Tbase TZ x397 = x383 & x396;
-Tbase TZ x398 = 0x3ffffff;
-Tbase TZ x399 = x361 & x398;
-Tbase TZ x400 = 0x1ffffff;
-Tbase TZ x401 = x327 & x400;
-Tbase TZ x402 = 0x3ffffff;
-Tbase TZ x403 = x303 & x402;
-Tbase TZ x404 = 0x1ffffff;
-Tbase TZ x405 = x269 & x404;
-Tbase TZ x406 = 0x3ffffff;
-Tbase TZ x407 = x245 & x406;
-Tbase TZ x408 = 0x1ffffff;
-Tbase TZ x409 = x211 & x408;
-Tbase TZ x410 = 0x19;
-Tbase TZ x411 = x395 >> x410;
-Tbase TZ x412 = 0x3ffffff;
-Tbase TZ x413 = x187 & x412;
-Tbase TZ x414 = x411 + x413;
-Tbase TZ x415 = 0x1ffffff;
-Tbase TZ x416 = x395 & x415;
-Tbase TZ x417 = 0x3ffffff;
-Tbase TZ x418 = x390 & x417;
-Tbase TZ x419 = 0x3fffffe;
-Tbase TZ x420 = x419 + x49;
-Tbase TZ x421 = x420 - x59;
-Tbase TZ x422 = 0x7fffffe;
-Tbase TZ x423 = x422 + x50;
-Tbase TZ x424 = x423 - x60;
-Tbase TZ x425 = 0x3fffffe;
-Tbase TZ x426 = x425 + x51;
-Tbase TZ x427 = x426 - x61;
-Tbase TZ x428 = 0x7fffffe;
-Tbase TZ x429 = x428 + x52;
-Tbase TZ x430 = x429 - x62;
-Tbase TZ x431 = 0x3fffffe;
-Tbase TZ x432 = x431 + x53;
-Tbase TZ x433 = x432 - x63;
-Tbase TZ x434 = 0x7fffffe;
-Tbase TZ x435 = x434 + x54;
-Tbase TZ x436 = x435 - x64;
-Tbase TZ x437 = 0x3fffffe;
-Tbase TZ x438 = x437 + x55;
-Tbase TZ x439 = x438 - x65;
-Tbase TZ x440 = 0x7fffffe;
-Tbase TZ x441 = x440 + x56;
-Tbase TZ x442 = x441 - x66;
-Tbase TZ x443 = 0x3fffffe;
-Tbase TZ x444 = x443 + x57;
-Tbase TZ x445 = x444 - x67;
-Tbase TZ x446 = 0x7ffffda;
-Tbase TZ x447 = x446 + x58;
-Tbase TZ x448 = x447 - x68;
-Tbase TZ x449 = x448 * x448;
-Tbase TZ x450 = 0x2;
-Tbase TZ x451 = x445 * x450;
-Tbase TZ x452 = x421 * x451;
-Tbase TZ x453 = x424 * x442;
-Tbase TZ x454 = 0x2;
-Tbase TZ x455 = x439 * x454;
-Tbase TZ x456 = x427 * x455;
-Tbase TZ x457 = x430 * x436;
-Tbase TZ x458 = 0x2;
-Tbase TZ x459 = x433 * x458;
-Tbase TZ x460 = x433 * x459;
-Tbase TZ x461 = x436 * x430;
-Tbase TZ x462 = 0x2;
-Tbase TZ x463 = x427 * x462;
-Tbase TZ x464 = x439 * x463;
-Tbase TZ x465 = x442 * x424;
-Tbase TZ x466 = 0x2;
-Tbase TZ x467 = x421 * x466;
-Tbase TZ x468 = x445 * x467;
-Tbase TZ x469 = x465 + x468;
-Tbase TZ x470 = x464 + x469;
-Tbase TZ x471 = x461 + x470;
-Tbase TZ x472 = x460 + x471;
-Tbase TZ x473 = x457 + x472;
-Tbase TZ x474 = x456 + x473;
-Tbase TZ x475 = x453 + x474;
-Tbase TZ x476 = x452 + x475;
-Tbase TZ x477 = 0x13;
-Tbase TZ x478 = x477 * x476;
-Tbase TZ x479 = x449 + x478;
-Tbase TZ x480 = 0x1a;
-Tbase TZ x481 = x479 >> x480;
-Tbase TZ x482 = x445 * x448;
-Tbase TZ x483 = x448 * x445;
-Tbase TZ x484 = x482 + x483;
-Tbase TZ x485 = x421 * x442;
-Tbase TZ x486 = x424 * x439;
-Tbase TZ x487 = x427 * x436;
-Tbase TZ x488 = x430 * x433;
-Tbase TZ x489 = x433 * x430;
-Tbase TZ x490 = x436 * x427;
-Tbase TZ x491 = x439 * x424;
-Tbase TZ x492 = x442 * x421;
-Tbase TZ x493 = x491 + x492;
-Tbase TZ x494 = x490 + x493;
-Tbase TZ x495 = x489 + x494;
-Tbase TZ x496 = x488 + x495;
-Tbase TZ x497 = x487 + x496;
-Tbase TZ x498 = x486 + x497;
-Tbase TZ x499 = x485 + x498;
-Tbase TZ x500 = 0x13;
-Tbase TZ x501 = x500 * x499;
-Tbase TZ x502 = x484 + x501;
-Tbase TZ x503 = x481 + x502;
-Tbase TZ x504 = 0x19;
-Tbase TZ x505 = x503 >> x504;
-Tbase TZ x506 = x442 * x448;
-Tbase TZ x507 = 0x2;
-Tbase TZ x508 = x445 * x507;
-Tbase TZ x509 = x445 * x508;
-Tbase TZ x510 = x448 * x442;
-Tbase TZ x511 = x509 + x510;
-Tbase TZ x512 = x506 + x511;
-Tbase TZ x513 = 0x2;
-Tbase TZ x514 = x439 * x513;
-Tbase TZ x515 = x421 * x514;
-Tbase TZ x516 = x424 * x436;
-Tbase TZ x517 = 0x2;
-Tbase TZ x518 = x433 * x517;
-Tbase TZ x519 = x427 * x518;
-Tbase TZ x520 = x430 * x430;
-Tbase TZ x521 = 0x2;
-Tbase TZ x522 = x427 * x521;
-Tbase TZ x523 = x433 * x522;
-Tbase TZ x524 = x436 * x424;
-Tbase TZ x525 = 0x2;
-Tbase TZ x526 = x421 * x525;
-Tbase TZ x527 = x439 * x526;
-Tbase TZ x528 = x524 + x527;
-Tbase TZ x529 = x523 + x528;
-Tbase TZ x530 = x520 + x529;
-Tbase TZ x531 = x519 + x530;
-Tbase TZ x532 = x516 + x531;
-Tbase TZ x533 = x515 + x532;
-Tbase TZ x534 = 0x13;
-Tbase TZ x535 = x534 * x533;
-Tbase TZ x536 = x512 + x535;
-Tbase TZ x537 = x505 + x536;
-Tbase TZ x538 = 0x1a;
-Tbase TZ x539 = x537 >> x538;
-Tbase TZ x540 = x439 * x448;
-Tbase TZ x541 = x442 * x445;
-Tbase TZ x542 = x445 * x442;
-Tbase TZ x543 = x448 * x439;
-Tbase TZ x544 = x542 + x543;
-Tbase TZ x545 = x541 + x544;
-Tbase TZ x546 = x540 + x545;
-Tbase TZ x547 = x421 * x436;
-Tbase TZ x548 = x424 * x433;
-Tbase TZ x549 = x427 * x430;
-Tbase TZ x550 = x430 * x427;
-Tbase TZ x551 = x433 * x424;
-Tbase TZ x552 = x436 * x421;
-Tbase TZ x553 = x551 + x552;
-Tbase TZ x554 = x550 + x553;
-Tbase TZ x555 = x549 + x554;
-Tbase TZ x556 = x548 + x555;
-Tbase TZ x557 = x547 + x556;
-Tbase TZ x558 = 0x13;
-Tbase TZ x559 = x558 * x557;
-Tbase TZ x560 = x546 + x559;
-Tbase TZ x561 = x539 + x560;
-Tbase TZ x562 = 0x19;
-Tbase TZ x563 = x561 >> x562;
-Tbase TZ x564 = x436 * x448;
-Tbase TZ x565 = 0x2;
-Tbase TZ x566 = x445 * x565;
-Tbase TZ x567 = x439 * x566;
-Tbase TZ x568 = x442 * x442;
-Tbase TZ x569 = 0x2;
-Tbase TZ x570 = x439 * x569;
-Tbase TZ x571 = x445 * x570;
-Tbase TZ x572 = x448 * x436;
-Tbase TZ x573 = x571 + x572;
-Tbase TZ x574 = x568 + x573;
-Tbase TZ x575 = x567 + x574;
-Tbase TZ x576 = x564 + x575;
-Tbase TZ x577 = 0x2;
-Tbase TZ x578 = x433 * x577;
-Tbase TZ x579 = x421 * x578;
-Tbase TZ x580 = x424 * x430;
-Tbase TZ x581 = 0x2;
-Tbase TZ x582 = x427 * x581;
-Tbase TZ x583 = x427 * x582;
-Tbase TZ x584 = x430 * x424;
-Tbase TZ x585 = 0x2;
-Tbase TZ x586 = x421 * x585;
-Tbase TZ x587 = x433 * x586;
-Tbase TZ x588 = x584 + x587;
-Tbase TZ x589 = x583 + x588;
-Tbase TZ x590 = x580 + x589;
-Tbase TZ x591 = x579 + x590;
-Tbase TZ x592 = 0x13;
-Tbase TZ x593 = x592 * x591;
-Tbase TZ x594 = x576 + x593;
-Tbase TZ x595 = x563 + x594;
-Tbase TZ x596 = 0x1a;
-Tbase TZ x597 = x595 >> x596;
-Tbase TZ x598 = x433 * x448;
-Tbase TZ x599 = x436 * x445;
-Tbase TZ x600 = x439 * x442;
-Tbase TZ x601 = x442 * x439;
-Tbase TZ x602 = x445 * x436;
-Tbase TZ x603 = x448 * x433;
-Tbase TZ x604 = x602 + x603;
-Tbase TZ x605 = x601 + x604;
-Tbase TZ x606 = x600 + x605;
-Tbase TZ x607 = x599 + x606;
-Tbase TZ x608 = x598 + x607;
-Tbase TZ x609 = x421 * x430;
-Tbase TZ x610 = x424 * x427;
-Tbase TZ x611 = x427 * x424;
-Tbase TZ x612 = x430 * x421;
-Tbase TZ x613 = x611 + x612;
-Tbase TZ x614 = x610 + x613;
-Tbase TZ x615 = x609 + x614;
-Tbase TZ x616 = 0x13;
-Tbase TZ x617 = x616 * x615;
-Tbase TZ x618 = x608 + x617;
-Tbase TZ x619 = x597 + x618;
-Tbase TZ x620 = 0x19;
-Tbase TZ x621 = x619 >> x620;
-Tbase TZ x622 = x430 * x448;
-Tbase TZ x623 = 0x2;
-Tbase TZ x624 = x445 * x623;
-Tbase TZ x625 = x433 * x624;
-Tbase TZ x626 = x436 * x442;
-Tbase TZ x627 = 0x2;
-Tbase TZ x628 = x439 * x627;
-Tbase TZ x629 = x439 * x628;
-Tbase TZ x630 = x442 * x436;
-Tbase TZ x631 = 0x2;
-Tbase TZ x632 = x433 * x631;
-Tbase TZ x633 = x445 * x632;
-Tbase TZ x634 = x448 * x430;
-Tbase TZ x635 = x633 + x634;
-Tbase TZ x636 = x630 + x635;
-Tbase TZ x637 = x629 + x636;
-Tbase TZ x638 = x626 + x637;
-Tbase TZ x639 = x625 + x638;
-Tbase TZ x640 = x622 + x639;
-Tbase TZ x641 = 0x2;
-Tbase TZ x642 = x427 * x641;
-Tbase TZ x643 = x421 * x642;
-Tbase TZ x644 = x424 * x424;
-Tbase TZ x645 = 0x2;
-Tbase TZ x646 = x421 * x645;
-Tbase TZ x647 = x427 * x646;
-Tbase TZ x648 = x644 + x647;
-Tbase TZ x649 = x643 + x648;
-Tbase TZ x650 = 0x13;
-Tbase TZ x651 = x650 * x649;
-Tbase TZ x652 = x640 + x651;
-Tbase TZ x653 = x621 + x652;
-Tbase TZ x654 = 0x1a;
-Tbase TZ x655 = x653 >> x654;
-Tbase TZ x656 = x427 * x448;
-Tbase TZ x657 = x430 * x445;
-Tbase TZ x658 = x433 * x442;
-Tbase TZ x659 = x436 * x439;
-Tbase TZ x660 = x439 * x436;
-Tbase TZ x661 = x442 * x433;
-Tbase TZ x662 = x445 * x430;
-Tbase TZ x663 = x448 * x427;
-Tbase TZ x664 = x662 + x663;
-Tbase TZ x665 = x661 + x664;
-Tbase TZ x666 = x660 + x665;
-Tbase TZ x667 = x659 + x666;
-Tbase TZ x668 = x658 + x667;
-Tbase TZ x669 = x657 + x668;
-Tbase TZ x670 = x656 + x669;
-Tbase TZ x671 = x421 * x424;
-Tbase TZ x672 = x424 * x421;
-Tbase TZ x673 = x671 + x672;
-Tbase TZ x674 = 0x13;
-Tbase TZ x675 = x674 * x673;
-Tbase TZ x676 = x670 + x675;
-Tbase TZ x677 = x655 + x676;
-Tbase TZ x678 = 0x19;
-Tbase TZ x679 = x677 >> x678;
-Tbase TZ x680 = x424 * x448;
-Tbase TZ x681 = 0x2;
-Tbase TZ x682 = x445 * x681;
-Tbase TZ x683 = x427 * x682;
-Tbase TZ x684 = x430 * x442;
-Tbase TZ x685 = 0x2;
-Tbase TZ x686 = x439 * x685;
-Tbase TZ x687 = x433 * x686;
-Tbase TZ x688 = x436 * x436;
-Tbase TZ x689 = 0x2;
-Tbase TZ x690 = x433 * x689;
-Tbase TZ x691 = x439 * x690;
-Tbase TZ x692 = x442 * x430;
-Tbase TZ x693 = 0x2;
-Tbase TZ x694 = x427 * x693;
-Tbase TZ x695 = x445 * x694;
-Tbase TZ x696 = x448 * x424;
-Tbase TZ x697 = x695 + x696;
-Tbase TZ x698 = x692 + x697;
-Tbase TZ x699 = x691 + x698;
-Tbase TZ x700 = x688 + x699;
-Tbase TZ x701 = x687 + x700;
-Tbase TZ x702 = x684 + x701;
-Tbase TZ x703 = x683 + x702;
-Tbase TZ x704 = x680 + x703;
-Tbase TZ x705 = 0x2;
-Tbase TZ x706 = x421 * x705;
-Tbase TZ x707 = x421 * x706;
-Tbase TZ x708 = 0x13;
-Tbase TZ x709 = x708 * x707;
-Tbase TZ x710 = x704 + x709;
-Tbase TZ x711 = x679 + x710;
-Tbase TZ x712 = 0x1a;
-Tbase TZ x713 = x711 >> x712;
-Tbase TZ x714 = x421 * x448;
-Tbase TZ x715 = x424 * x445;
-Tbase TZ x716 = x427 * x442;
-Tbase TZ x717 = x430 * x439;
-Tbase TZ x718 = x433 * x436;
-Tbase TZ x719 = x436 * x433;
-Tbase TZ x720 = x439 * x430;
-Tbase TZ x721 = x442 * x427;
-Tbase TZ x722 = x445 * x424;
-Tbase TZ x723 = x448 * x421;
-Tbase TZ x724 = x722 + x723;
-Tbase TZ x725 = x721 + x724;
-Tbase TZ x726 = x720 + x725;
-Tbase TZ x727 = x719 + x726;
-Tbase TZ x728 = x718 + x727;
-Tbase TZ x729 = x717 + x728;
-Tbase TZ x730 = x716 + x729;
-Tbase TZ x731 = x715 + x730;
-Tbase TZ x732 = x714 + x731;
-Tbase TZ x733 = x713 + x732;
-Tbase TZ x734 = 0x19;
-Tbase TZ x735 = x733 >> x734;
-Tbase TZ x736 = 0x13;
-Tbase TZ x737 = x736 * x735;
-Tbase TZ x738 = 0x3ffffff;
-Tbase TZ x739 = x479 & x738;
-Tbase TZ x740 = x737 + x739;
-Tbase TZ x741 = 0x1a;
-Tbase TZ x742 = x740 >> x741;
-Tbase TZ x743 = 0x1ffffff;
-Tbase TZ x744 = x503 & x743;
-Tbase TZ x745 = x742 + x744;
-Tbase TZ x746 = 0x1ffffff;
-Tbase TZ x747 = x733 & x746;
-Tbase TZ x748 = 0x3ffffff;
-Tbase TZ x749 = x711 & x748;
-Tbase TZ x750 = 0x1ffffff;
-Tbase TZ x751 = x677 & x750;
-Tbase TZ x752 = 0x3ffffff;
-Tbase TZ x753 = x653 & x752;
-Tbase TZ x754 = 0x1ffffff;
-Tbase TZ x755 = x619 & x754;
-Tbase TZ x756 = 0x3ffffff;
-Tbase TZ x757 = x595 & x756;
-Tbase TZ x758 = 0x1ffffff;
-Tbase TZ x759 = x561 & x758;
-Tbase TZ x760 = 0x19;
-Tbase TZ x761 = x745 >> x760;
-Tbase TZ x762 = 0x3ffffff;
-Tbase TZ x763 = x537 & x762;
-Tbase TZ x764 = x761 + x763;
-Tbase TZ x765 = 0x1ffffff;
-Tbase TZ x766 = x745 & x765;
-Tbase TZ x767 = 0x3ffffff;
-Tbase TZ x768 = x740 & x767;
-Tbase TZ x769 = 0x3fffffe;
-Tbase TZ x770 = x769 + x397;
-Tbase TZ x771 = x770 - x747;
-Tbase TZ x772 = 0x7fffffe;
-Tbase TZ x773 = x772 + x399;
-Tbase TZ x774 = x773 - x749;
-Tbase TZ x775 = 0x3fffffe;
-Tbase TZ x776 = x775 + x401;
-Tbase TZ x777 = x776 - x751;
-Tbase TZ x778 = 0x7fffffe;
-Tbase TZ x779 = x778 + x403;
-Tbase TZ x780 = x779 - x753;
-Tbase TZ x781 = 0x3fffffe;
-Tbase TZ x782 = x781 + x405;
-Tbase TZ x783 = x782 - x755;
-Tbase TZ x784 = 0x7fffffe;
-Tbase TZ x785 = x784 + x407;
-Tbase TZ x786 = x785 - x757;
-Tbase TZ x787 = 0x3fffffe;
-Tbase TZ x788 = x787 + x409;
-Tbase TZ x789 = x788 - x759;
-Tbase TZ x790 = 0x7fffffe;
-Tbase TZ x791 = x790 + x414;
-Tbase TZ x792 = x791 - x764;
-Tbase TZ x793 = 0x3fffffe;
-Tbase TZ x794 = x793 + x416;
-Tbase TZ x795 = x794 - x766;
-Tbase TZ x796 = 0x7ffffda;
-Tbase TZ x797 = x796 + x418;
-Tbase TZ x798 = x797 - x768;
-Tbase TZ x799 = x69 + x79;
-Tbase TZ x800 = x70 + x80;
-Tbase TZ x801 = x71 + x81;
-Tbase TZ x802 = x72 + x82;
-Tbase TZ x803 = x73 + x83;
-Tbase TZ x804 = x74 + x84;
-Tbase TZ x805 = x75 + x85;
-Tbase TZ x806 = x76 + x86;
-Tbase TZ x807 = x77 + x87;
-Tbase TZ x808 = x78 + x88;
-Tbase TZ x809 = 0x3fffffe;
-Tbase TZ x810 = x809 + x69;
-Tbase TZ x811 = x810 - x79;
-Tbase TZ x812 = 0x7fffffe;
-Tbase TZ x813 = x812 + x70;
-Tbase TZ x814 = x813 - x80;
-Tbase TZ x815 = 0x3fffffe;
-Tbase TZ x816 = x815 + x71;
-Tbase TZ x817 = x816 - x81;
-Tbase TZ x818 = 0x7fffffe;
-Tbase TZ x819 = x818 + x72;
-Tbase TZ x820 = x819 - x82;
-Tbase TZ x821 = 0x3fffffe;
-Tbase TZ x822 = x821 + x73;
-Tbase TZ x823 = x822 - x83;
-Tbase TZ x824 = 0x7fffffe;
-Tbase TZ x825 = x824 + x74;
-Tbase TZ x826 = x825 - x84;
-Tbase TZ x827 = 0x3fffffe;
-Tbase TZ x828 = x827 + x75;
-Tbase TZ x829 = x828 - x85;
-Tbase TZ x830 = 0x7fffffe;
-Tbase TZ x831 = x830 + x76;
-Tbase TZ x832 = x831 - x86;
-Tbase TZ x833 = 0x3fffffe;
-Tbase TZ x834 = x833 + x77;
-Tbase TZ x835 = x834 - x87;
-Tbase TZ x836 = 0x7ffffda;
-Tbase TZ x837 = x836 + x78;
-Tbase TZ x838 = x837 - x88;
-Tbase TZ x839 = x838 * x98;
-Tbase TZ x840 = 0x2;
-Tbase TZ x841 = x97 * x840;
-Tbase TZ x842 = x811 * x841;
-Tbase TZ x843 = x814 * x96;
-Tbase TZ x844 = 0x2;
-Tbase TZ x845 = x95 * x844;
-Tbase TZ x846 = x817 * x845;
-Tbase TZ x847 = x820 * x94;
-Tbase TZ x848 = 0x2;
-Tbase TZ x849 = x93 * x848;
-Tbase TZ x850 = x823 * x849;
-Tbase TZ x851 = x826 * x92;
-Tbase TZ x852 = 0x2;
-Tbase TZ x853 = x91 * x852;
-Tbase TZ x854 = x829 * x853;
-Tbase TZ x855 = x832 * x90;
-Tbase TZ x856 = 0x2;
-Tbase TZ x857 = x89 * x856;
-Tbase TZ x858 = x835 * x857;
-Tbase TZ x859 = x855 + x858;
-Tbase TZ x860 = x854 + x859;
-Tbase TZ x861 = x851 + x860;
-Tbase TZ x862 = x850 + x861;
-Tbase TZ x863 = x847 + x862;
-Tbase TZ x864 = x846 + x863;
-Tbase TZ x865 = x843 + x864;
-Tbase TZ x866 = x842 + x865;
-Tbase TZ x867 = 0x13;
-Tbase TZ x868 = x867 * x866;
-Tbase TZ x869 = x839 + x868;
-Tbase TZ x870 = 0x1a;
-Tbase TZ x871 = x869 >> x870;
-Tbase TZ x872 = x835 * x98;
-Tbase TZ x873 = x838 * x97;
-Tbase TZ x874 = x872 + x873;
-Tbase TZ x875 = x811 * x96;
-Tbase TZ x876 = x814 * x95;
-Tbase TZ x877 = x817 * x94;
-Tbase TZ x878 = x820 * x93;
-Tbase TZ x879 = x823 * x92;
-Tbase TZ x880 = x826 * x91;
-Tbase TZ x881 = x829 * x90;
-Tbase TZ x882 = x832 * x89;
-Tbase TZ x883 = x881 + x882;
-Tbase TZ x884 = x880 + x883;
-Tbase TZ x885 = x879 + x884;
-Tbase TZ x886 = x878 + x885;
-Tbase TZ x887 = x877 + x886;
-Tbase TZ x888 = x876 + x887;
-Tbase TZ x889 = x875 + x888;
-Tbase TZ x890 = 0x13;
-Tbase TZ x891 = x890 * x889;
-Tbase TZ x892 = x874 + x891;
-Tbase TZ x893 = x871 + x892;
-Tbase TZ x894 = 0x19;
-Tbase TZ x895 = x893 >> x894;
-Tbase TZ x896 = x832 * x98;
-Tbase TZ x897 = 0x2;
-Tbase TZ x898 = x97 * x897;
-Tbase TZ x899 = x835 * x898;
-Tbase TZ x900 = x838 * x96;
-Tbase TZ x901 = x899 + x900;
-Tbase TZ x902 = x896 + x901;
-Tbase TZ x903 = 0x2;
-Tbase TZ x904 = x95 * x903;
-Tbase TZ x905 = x811 * x904;
-Tbase TZ x906 = x814 * x94;
-Tbase TZ x907 = 0x2;
-Tbase TZ x908 = x93 * x907;
-Tbase TZ x909 = x817 * x908;
-Tbase TZ x910 = x820 * x92;
-Tbase TZ x911 = 0x2;
-Tbase TZ x912 = x91 * x911;
-Tbase TZ x913 = x823 * x912;
-Tbase TZ x914 = x826 * x90;
-Tbase TZ x915 = 0x2;
-Tbase TZ x916 = x89 * x915;
-Tbase TZ x917 = x829 * x916;
-Tbase TZ x918 = x914 + x917;
-Tbase TZ x919 = x913 + x918;
-Tbase TZ x920 = x910 + x919;
-Tbase TZ x921 = x909 + x920;
-Tbase TZ x922 = x906 + x921;
-Tbase TZ x923 = x905 + x922;
-Tbase TZ x924 = 0x13;
-Tbase TZ x925 = x924 * x923;
-Tbase TZ x926 = x902 + x925;
-Tbase TZ x927 = x895 + x926;
-Tbase TZ x928 = 0x1a;
-Tbase TZ x929 = x927 >> x928;
-Tbase TZ x930 = x829 * x98;
-Tbase TZ x931 = x832 * x97;
-Tbase TZ x932 = x835 * x96;
-Tbase TZ x933 = x838 * x95;
-Tbase TZ x934 = x932 + x933;
-Tbase TZ x935 = x931 + x934;
-Tbase TZ x936 = x930 + x935;
-Tbase TZ x937 = x811 * x94;
-Tbase TZ x938 = x814 * x93;
-Tbase TZ x939 = x817 * x92;
-Tbase TZ x940 = x820 * x91;
-Tbase TZ x941 = x823 * x90;
-Tbase TZ x942 = x826 * x89;
-Tbase TZ x943 = x941 + x942;
-Tbase TZ x944 = x940 + x943;
-Tbase TZ x945 = x939 + x944;
-Tbase TZ x946 = x938 + x945;
-Tbase TZ x947 = x937 + x946;
-Tbase TZ x948 = 0x13;
-Tbase TZ x949 = x948 * x947;
-Tbase TZ x950 = x936 + x949;
-Tbase TZ x951 = x929 + x950;
-Tbase TZ x952 = 0x19;
-Tbase TZ x953 = x951 >> x952;
-Tbase TZ x954 = x826 * x98;
-Tbase TZ x955 = 0x2;
-Tbase TZ x956 = x97 * x955;
-Tbase TZ x957 = x829 * x956;
-Tbase TZ x958 = x832 * x96;
-Tbase TZ x959 = 0x2;
-Tbase TZ x960 = x95 * x959;
-Tbase TZ x961 = x835 * x960;
-Tbase TZ x962 = x838 * x94;
-Tbase TZ x963 = x961 + x962;
-Tbase TZ x964 = x958 + x963;
-Tbase TZ x965 = x957 + x964;
-Tbase TZ x966 = x954 + x965;
-Tbase TZ x967 = 0x2;
-Tbase TZ x968 = x93 * x967;
-Tbase TZ x969 = x811 * x968;
-Tbase TZ x970 = x814 * x92;
-Tbase TZ x971 = 0x2;
-Tbase TZ x972 = x91 * x971;
-Tbase TZ x973 = x817 * x972;
-Tbase TZ x974 = x820 * x90;
-Tbase TZ x975 = 0x2;
-Tbase TZ x976 = x89 * x975;
-Tbase TZ x977 = x823 * x976;
-Tbase TZ x978 = x974 + x977;
-Tbase TZ x979 = x973 + x978;
-Tbase TZ x980 = x970 + x979;
-Tbase TZ x981 = x969 + x980;
-Tbase TZ x982 = 0x13;
-Tbase TZ x983 = x982 * x981;
-Tbase TZ x984 = x966 + x983;
-Tbase TZ x985 = x953 + x984;
-Tbase TZ x986 = 0x1a;
-Tbase TZ x987 = x985 >> x986;
-Tbase TZ x988 = x823 * x98;
-Tbase TZ x989 = x826 * x97;
-Tbase TZ x990 = x829 * x96;
-Tbase TZ x991 = x832 * x95;
-Tbase TZ x992 = x835 * x94;
-Tbase TZ x993 = x838 * x93;
-Tbase TZ x994 = x992 + x993;
-Tbase TZ x995 = x991 + x994;
-Tbase TZ x996 = x990 + x995;
-Tbase TZ x997 = x989 + x996;
-Tbase TZ x998 = x988 + x997;
-Tbase TZ x999 = x811 * x92;
-Tbase TZ x1000 = x814 * x91;
-Tbase TZ x1001 = x817 * x90;
-Tbase TZ x1002 = x820 * x89;
-Tbase TZ x1003 = x1001 + x1002;
-Tbase TZ x1004 = x1000 + x1003;
-Tbase TZ x1005 = x999 + x1004;
-Tbase TZ x1006 = 0x13;
-Tbase TZ x1007 = x1006 * x1005;
-Tbase TZ x1008 = x998 + x1007;
-Tbase TZ x1009 = x987 + x1008;
-Tbase TZ x1010 = 0x19;
-Tbase TZ x1011 = x1009 >> x1010;
-Tbase TZ x1012 = x820 * x98;
-Tbase TZ x1013 = 0x2;
-Tbase TZ x1014 = x97 * x1013;
-Tbase TZ x1015 = x823 * x1014;
-Tbase TZ x1016 = x826 * x96;
-Tbase TZ x1017 = 0x2;
-Tbase TZ x1018 = x95 * x1017;
-Tbase TZ x1019 = x829 * x1018;
-Tbase TZ x1020 = x832 * x94;
-Tbase TZ x1021 = 0x2;
-Tbase TZ x1022 = x93 * x1021;
-Tbase TZ x1023 = x835 * x1022;
-Tbase TZ x1024 = x838 * x92;
-Tbase TZ x1025 = x1023 + x1024;
-Tbase TZ x1026 = x1020 + x1025;
-Tbase TZ x1027 = x1019 + x1026;
-Tbase TZ x1028 = x1016 + x1027;
-Tbase TZ x1029 = x1015 + x1028;
-Tbase TZ x1030 = x1012 + x1029;
-Tbase TZ x1031 = 0x2;
-Tbase TZ x1032 = x91 * x1031;
-Tbase TZ x1033 = x811 * x1032;
-Tbase TZ x1034 = x814 * x90;
-Tbase TZ x1035 = 0x2;
-Tbase TZ x1036 = x89 * x1035;
-Tbase TZ x1037 = x817 * x1036;
-Tbase TZ x1038 = x1034 + x1037;
-Tbase TZ x1039 = x1033 + x1038;
-Tbase TZ x1040 = 0x13;
-Tbase TZ x1041 = x1040 * x1039;
-Tbase TZ x1042 = x1030 + x1041;
-Tbase TZ x1043 = x1011 + x1042;
-Tbase TZ x1044 = 0x1a;
-Tbase TZ x1045 = x1043 >> x1044;
-Tbase TZ x1046 = x817 * x98;
-Tbase TZ x1047 = x820 * x97;
-Tbase TZ x1048 = x823 * x96;
-Tbase TZ x1049 = x826 * x95;
-Tbase TZ x1050 = x829 * x94;
-Tbase TZ x1051 = x832 * x93;
-Tbase TZ x1052 = x835 * x92;
-Tbase TZ x1053 = x838 * x91;
-Tbase TZ x1054 = x1052 + x1053;
-Tbase TZ x1055 = x1051 + x1054;
-Tbase TZ x1056 = x1050 + x1055;
-Tbase TZ x1057 = x1049 + x1056;
-Tbase TZ x1058 = x1048 + x1057;
-Tbase TZ x1059 = x1047 + x1058;
-Tbase TZ x1060 = x1046 + x1059;
-Tbase TZ x1061 = x811 * x90;
-Tbase TZ x1062 = x814 * x89;
-Tbase TZ x1063 = x1061 + x1062;
-Tbase TZ x1064 = 0x13;
-Tbase TZ x1065 = x1064 * x1063;
-Tbase TZ x1066 = x1060 + x1065;
-Tbase TZ x1067 = x1045 + x1066;
-Tbase TZ x1068 = 0x19;
-Tbase TZ x1069 = x1067 >> x1068;
-Tbase TZ x1070 = x814 * x98;
-Tbase TZ x1071 = 0x2;
-Tbase TZ x1072 = x97 * x1071;
-Tbase TZ x1073 = x817 * x1072;
-Tbase TZ x1074 = x820 * x96;
-Tbase TZ x1075 = 0x2;
-Tbase TZ x1076 = x95 * x1075;
-Tbase TZ x1077 = x823 * x1076;
-Tbase TZ x1078 = x826 * x94;
-Tbase TZ x1079 = 0x2;
-Tbase TZ x1080 = x93 * x1079;
-Tbase TZ x1081 = x829 * x1080;
-Tbase TZ x1082 = x832 * x92;
-Tbase TZ x1083 = 0x2;
-Tbase TZ x1084 = x91 * x1083;
-Tbase TZ x1085 = x835 * x1084;
-Tbase TZ x1086 = x838 * x90;
-Tbase TZ x1087 = x1085 + x1086;
-Tbase TZ x1088 = x1082 + x1087;
-Tbase TZ x1089 = x1081 + x1088;
-Tbase TZ x1090 = x1078 + x1089;
-Tbase TZ x1091 = x1077 + x1090;
-Tbase TZ x1092 = x1074 + x1091;
-Tbase TZ x1093 = x1073 + x1092;
-Tbase TZ x1094 = x1070 + x1093;
-Tbase TZ x1095 = 0x2;
-Tbase TZ x1096 = x89 * x1095;
-Tbase TZ x1097 = x811 * x1096;
-Tbase TZ x1098 = 0x13;
-Tbase TZ x1099 = x1098 * x1097;
-Tbase TZ x1100 = x1094 + x1099;
-Tbase TZ x1101 = x1069 + x1100;
-Tbase TZ x1102 = 0x1a;
-Tbase TZ x1103 = x1101 >> x1102;
-Tbase TZ x1104 = x811 * x98;
-Tbase TZ x1105 = x814 * x97;
-Tbase TZ x1106 = x817 * x96;
-Tbase TZ x1107 = x820 * x95;
-Tbase TZ x1108 = x823 * x94;
-Tbase TZ x1109 = x826 * x93;
-Tbase TZ x1110 = x829 * x92;
-Tbase TZ x1111 = x832 * x91;
-Tbase TZ x1112 = x835 * x90;
-Tbase TZ x1113 = x838 * x89;
-Tbase TZ x1114 = x1112 + x1113;
-Tbase TZ x1115 = x1111 + x1114;
-Tbase TZ x1116 = x1110 + x1115;
-Tbase TZ x1117 = x1109 + x1116;
-Tbase TZ x1118 = x1108 + x1117;
-Tbase TZ x1119 = x1107 + x1118;
-Tbase TZ x1120 = x1106 + x1119;
-Tbase TZ x1121 = x1105 + x1120;
-Tbase TZ x1122 = x1104 + x1121;
-Tbase TZ x1123 = x1103 + x1122;
-Tbase TZ x1124 = 0x19;
-Tbase TZ x1125 = x1123 >> x1124;
-Tbase TZ x1126 = 0x13;
-Tbase TZ x1127 = x1126 * x1125;
-Tbase TZ x1128 = 0x3ffffff;
-Tbase TZ x1129 = x869 & x1128;
-Tbase TZ x1130 = x1127 + x1129;
-Tbase TZ x1131 = 0x1a;
-Tbase TZ x1132 = x1130 >> x1131;
-Tbase TZ x1133 = 0x1ffffff;
-Tbase TZ x1134 = x893 & x1133;
-Tbase TZ x1135 = x1132 + x1134;
-Tbase TZ x1136 = 0x1ffffff;
-Tbase TZ x1137 = x1123 & x1136;
-Tbase TZ x1138 = 0x3ffffff;
-Tbase TZ x1139 = x1101 & x1138;
-Tbase TZ x1140 = 0x1ffffff;
-Tbase TZ x1141 = x1067 & x1140;
-Tbase TZ x1142 = 0x3ffffff;
-Tbase TZ x1143 = x1043 & x1142;
-Tbase TZ x1144 = 0x1ffffff;
-Tbase TZ x1145 = x1009 & x1144;
-Tbase TZ x1146 = 0x3ffffff;
-Tbase TZ x1147 = x985 & x1146;
-Tbase TZ x1148 = 0x1ffffff;
-Tbase TZ x1149 = x951 & x1148;
-Tbase TZ x1150 = 0x19;
-Tbase TZ x1151 = x1135 >> x1150;
-Tbase TZ x1152 = 0x3ffffff;
-Tbase TZ x1153 = x927 & x1152;
-Tbase TZ x1154 = x1151 + x1153;
-Tbase TZ x1155 = 0x1ffffff;
-Tbase TZ x1156 = x1135 & x1155;
-Tbase TZ x1157 = 0x3ffffff;
-Tbase TZ x1158 = x1130 & x1157;
-Tbase TZ x1159 = x808 * x448;
-Tbase TZ x1160 = 0x2;
-Tbase TZ x1161 = x445 * x1160;
-Tbase TZ x1162 = x799 * x1161;
-Tbase TZ x1163 = x800 * x442;
-Tbase TZ x1164 = 0x2;
-Tbase TZ x1165 = x439 * x1164;
-Tbase TZ x1166 = x801 * x1165;
-Tbase TZ x1167 = x802 * x436;
-Tbase TZ x1168 = 0x2;
-Tbase TZ x1169 = x433 * x1168;
-Tbase TZ x1170 = x803 * x1169;
-Tbase TZ x1171 = x804 * x430;
-Tbase TZ x1172 = 0x2;
-Tbase TZ x1173 = x427 * x1172;
-Tbase TZ x1174 = x805 * x1173;
-Tbase TZ x1175 = x806 * x424;
-Tbase TZ x1176 = 0x2;
-Tbase TZ x1177 = x421 * x1176;
-Tbase TZ x1178 = x807 * x1177;
-Tbase TZ x1179 = x1175 + x1178;
-Tbase TZ x1180 = x1174 + x1179;
-Tbase TZ x1181 = x1171 + x1180;
-Tbase TZ x1182 = x1170 + x1181;
-Tbase TZ x1183 = x1167 + x1182;
-Tbase TZ x1184 = x1166 + x1183;
-Tbase TZ x1185 = x1163 + x1184;
-Tbase TZ x1186 = x1162 + x1185;
-Tbase TZ x1187 = 0x13;
-Tbase TZ x1188 = x1187 * x1186;
-Tbase TZ x1189 = x1159 + x1188;
-Tbase TZ x1190 = 0x1a;
-Tbase TZ x1191 = x1189 >> x1190;
-Tbase TZ x1192 = x807 * x448;
-Tbase TZ x1193 = x808 * x445;
-Tbase TZ x1194 = x1192 + x1193;
-Tbase TZ x1195 = x799 * x442;
-Tbase TZ x1196 = x800 * x439;
-Tbase TZ x1197 = x801 * x436;
-Tbase TZ x1198 = x802 * x433;
-Tbase TZ x1199 = x803 * x430;
-Tbase TZ x1200 = x804 * x427;
-Tbase TZ x1201 = x805 * x424;
-Tbase TZ x1202 = x806 * x421;
-Tbase TZ x1203 = x1201 + x1202;
-Tbase TZ x1204 = x1200 + x1203;
-Tbase TZ x1205 = x1199 + x1204;
-Tbase TZ x1206 = x1198 + x1205;
-Tbase TZ x1207 = x1197 + x1206;
-Tbase TZ x1208 = x1196 + x1207;
-Tbase TZ x1209 = x1195 + x1208;
-Tbase TZ x1210 = 0x13;
-Tbase TZ x1211 = x1210 * x1209;
-Tbase TZ x1212 = x1194 + x1211;
-Tbase TZ x1213 = x1191 + x1212;
-Tbase TZ x1214 = 0x19;
-Tbase TZ x1215 = x1213 >> x1214;
-Tbase TZ x1216 = x806 * x448;
-Tbase TZ x1217 = 0x2;
-Tbase TZ x1218 = x445 * x1217;
-Tbase TZ x1219 = x807 * x1218;
-Tbase TZ x1220 = x808 * x442;
-Tbase TZ x1221 = x1219 + x1220;
-Tbase TZ x1222 = x1216 + x1221;
-Tbase TZ x1223 = 0x2;
-Tbase TZ x1224 = x439 * x1223;
-Tbase TZ x1225 = x799 * x1224;
-Tbase TZ x1226 = x800 * x436;
-Tbase TZ x1227 = 0x2;
-Tbase TZ x1228 = x433 * x1227;
-Tbase TZ x1229 = x801 * x1228;
-Tbase TZ x1230 = x802 * x430;
-Tbase TZ x1231 = 0x2;
-Tbase TZ x1232 = x427 * x1231;
-Tbase TZ x1233 = x803 * x1232;
-Tbase TZ x1234 = x804 * x424;
-Tbase TZ x1235 = 0x2;
-Tbase TZ x1236 = x421 * x1235;
-Tbase TZ x1237 = x805 * x1236;
-Tbase TZ x1238 = x1234 + x1237;
-Tbase TZ x1239 = x1233 + x1238;
-Tbase TZ x1240 = x1230 + x1239;
-Tbase TZ x1241 = x1229 + x1240;
-Tbase TZ x1242 = x1226 + x1241;
-Tbase TZ x1243 = x1225 + x1242;
-Tbase TZ x1244 = 0x13;
-Tbase TZ x1245 = x1244 * x1243;
-Tbase TZ x1246 = x1222 + x1245;
-Tbase TZ x1247 = x1215 + x1246;
-Tbase TZ x1248 = 0x1a;
-Tbase TZ x1249 = x1247 >> x1248;
-Tbase TZ x1250 = x805 * x448;
-Tbase TZ x1251 = x806 * x445;
-Tbase TZ x1252 = x807 * x442;
-Tbase TZ x1253 = x808 * x439;
-Tbase TZ x1254 = x1252 + x1253;
-Tbase TZ x1255 = x1251 + x1254;
-Tbase TZ x1256 = x1250 + x1255;
-Tbase TZ x1257 = x799 * x436;
-Tbase TZ x1258 = x800 * x433;
-Tbase TZ x1259 = x801 * x430;
-Tbase TZ x1260 = x802 * x427;
-Tbase TZ x1261 = x803 * x424;
-Tbase TZ x1262 = x804 * x421;
-Tbase TZ x1263 = x1261 + x1262;
-Tbase TZ x1264 = x1260 + x1263;
-Tbase TZ x1265 = x1259 + x1264;
-Tbase TZ x1266 = x1258 + x1265;
-Tbase TZ x1267 = x1257 + x1266;
-Tbase TZ x1268 = 0x13;
-Tbase TZ x1269 = x1268 * x1267;
-Tbase TZ x1270 = x1256 + x1269;
-Tbase TZ x1271 = x1249 + x1270;
-Tbase TZ x1272 = 0x19;
-Tbase TZ x1273 = x1271 >> x1272;
-Tbase TZ x1274 = x804 * x448;
-Tbase TZ x1275 = 0x2;
-Tbase TZ x1276 = x445 * x1275;
-Tbase TZ x1277 = x805 * x1276;
-Tbase TZ x1278 = x806 * x442;
-Tbase TZ x1279 = 0x2;
-Tbase TZ x1280 = x439 * x1279;
-Tbase TZ x1281 = x807 * x1280;
-Tbase TZ x1282 = x808 * x436;
-Tbase TZ x1283 = x1281 + x1282;
-Tbase TZ x1284 = x1278 + x1283;
-Tbase TZ x1285 = x1277 + x1284;
-Tbase TZ x1286 = x1274 + x1285;
-Tbase TZ x1287 = 0x2;
-Tbase TZ x1288 = x433 * x1287;
-Tbase TZ x1289 = x799 * x1288;
-Tbase TZ x1290 = x800 * x430;
-Tbase TZ x1291 = 0x2;
-Tbase TZ x1292 = x427 * x1291;
-Tbase TZ x1293 = x801 * x1292;
-Tbase TZ x1294 = x802 * x424;
-Tbase TZ x1295 = 0x2;
-Tbase TZ x1296 = x421 * x1295;
-Tbase TZ x1297 = x803 * x1296;
-Tbase TZ x1298 = x1294 + x1297;
-Tbase TZ x1299 = x1293 + x1298;
-Tbase TZ x1300 = x1290 + x1299;
-Tbase TZ x1301 = x1289 + x1300;
-Tbase TZ x1302 = 0x13;
-Tbase TZ x1303 = x1302 * x1301;
-Tbase TZ x1304 = x1286 + x1303;
-Tbase TZ x1305 = x1273 + x1304;
-Tbase TZ x1306 = 0x1a;
-Tbase TZ x1307 = x1305 >> x1306;
-Tbase TZ x1308 = x803 * x448;
-Tbase TZ x1309 = x804 * x445;
-Tbase TZ x1310 = x805 * x442;
-Tbase TZ x1311 = x806 * x439;
-Tbase TZ x1312 = x807 * x436;
-Tbase TZ x1313 = x808 * x433;
-Tbase TZ x1314 = x1312 + x1313;
-Tbase TZ x1315 = x1311 + x1314;
-Tbase TZ x1316 = x1310 + x1315;
-Tbase TZ x1317 = x1309 + x1316;
-Tbase TZ x1318 = x1308 + x1317;
-Tbase TZ x1319 = x799 * x430;
-Tbase TZ x1320 = x800 * x427;
-Tbase TZ x1321 = x801 * x424;
-Tbase TZ x1322 = x802 * x421;
-Tbase TZ x1323 = x1321 + x1322;
-Tbase TZ x1324 = x1320 + x1323;
-Tbase TZ x1325 = x1319 + x1324;
-Tbase TZ x1326 = 0x13;
-Tbase TZ x1327 = x1326 * x1325;
-Tbase TZ x1328 = x1318 + x1327;
-Tbase TZ x1329 = x1307 + x1328;
-Tbase TZ x1330 = 0x19;
-Tbase TZ x1331 = x1329 >> x1330;
-Tbase TZ x1332 = x802 * x448;
-Tbase TZ x1333 = 0x2;
-Tbase TZ x1334 = x445 * x1333;
-Tbase TZ x1335 = x803 * x1334;
-Tbase TZ x1336 = x804 * x442;
-Tbase TZ x1337 = 0x2;
-Tbase TZ x1338 = x439 * x1337;
-Tbase TZ x1339 = x805 * x1338;
-Tbase TZ x1340 = x806 * x436;
-Tbase TZ x1341 = 0x2;
-Tbase TZ x1342 = x433 * x1341;
-Tbase TZ x1343 = x807 * x1342;
-Tbase TZ x1344 = x808 * x430;
-Tbase TZ x1345 = x1343 + x1344;
-Tbase TZ x1346 = x1340 + x1345;
-Tbase TZ x1347 = x1339 + x1346;
-Tbase TZ x1348 = x1336 + x1347;
-Tbase TZ x1349 = x1335 + x1348;
-Tbase TZ x1350 = x1332 + x1349;
-Tbase TZ x1351 = 0x2;
-Tbase TZ x1352 = x427 * x1351;
-Tbase TZ x1353 = x799 * x1352;
-Tbase TZ x1354 = x800 * x424;
-Tbase TZ x1355 = 0x2;
-Tbase TZ x1356 = x421 * x1355;
-Tbase TZ x1357 = x801 * x1356;
-Tbase TZ x1358 = x1354 + x1357;
-Tbase TZ x1359 = x1353 + x1358;
-Tbase TZ x1360 = 0x13;
-Tbase TZ x1361 = x1360 * x1359;
-Tbase TZ x1362 = x1350 + x1361;
-Tbase TZ x1363 = x1331 + x1362;
-Tbase TZ x1364 = 0x1a;
-Tbase TZ x1365 = x1363 >> x1364;
-Tbase TZ x1366 = x801 * x448;
-Tbase TZ x1367 = x802 * x445;
-Tbase TZ x1368 = x803 * x442;
-Tbase TZ x1369 = x804 * x439;
-Tbase TZ x1370 = x805 * x436;
-Tbase TZ x1371 = x806 * x433;
-Tbase TZ x1372 = x807 * x430;
-Tbase TZ x1373 = x808 * x427;
-Tbase TZ x1374 = x1372 + x1373;
-Tbase TZ x1375 = x1371 + x1374;
-Tbase TZ x1376 = x1370 + x1375;
-Tbase TZ x1377 = x1369 + x1376;
-Tbase TZ x1378 = x1368 + x1377;
-Tbase TZ x1379 = x1367 + x1378;
-Tbase TZ x1380 = x1366 + x1379;
-Tbase TZ x1381 = x799 * x424;
-Tbase TZ x1382 = x800 * x421;
-Tbase TZ x1383 = x1381 + x1382;
-Tbase TZ x1384 = 0x13;
-Tbase TZ x1385 = x1384 * x1383;
-Tbase TZ x1386 = x1380 + x1385;
-Tbase TZ x1387 = x1365 + x1386;
-Tbase TZ x1388 = 0x19;
-Tbase TZ x1389 = x1387 >> x1388;
-Tbase TZ x1390 = x800 * x448;
-Tbase TZ x1391 = 0x2;
-Tbase TZ x1392 = x445 * x1391;
-Tbase TZ x1393 = x801 * x1392;
-Tbase TZ x1394 = x802 * x442;
-Tbase TZ x1395 = 0x2;
-Tbase TZ x1396 = x439 * x1395;
-Tbase TZ x1397 = x803 * x1396;
-Tbase TZ x1398 = x804 * x436;
-Tbase TZ x1399 = 0x2;
-Tbase TZ x1400 = x433 * x1399;
-Tbase TZ x1401 = x805 * x1400;
-Tbase TZ x1402 = x806 * x430;
-Tbase TZ x1403 = 0x2;
-Tbase TZ x1404 = x427 * x1403;
-Tbase TZ x1405 = x807 * x1404;
-Tbase TZ x1406 = x808 * x424;
-Tbase TZ x1407 = x1405 + x1406;
-Tbase TZ x1408 = x1402 + x1407;
-Tbase TZ x1409 = x1401 + x1408;
-Tbase TZ x1410 = x1398 + x1409;
-Tbase TZ x1411 = x1397 + x1410;
-Tbase TZ x1412 = x1394 + x1411;
-Tbase TZ x1413 = x1393 + x1412;
-Tbase TZ x1414 = x1390 + x1413;
-Tbase TZ x1415 = 0x2;
-Tbase TZ x1416 = x421 * x1415;
-Tbase TZ x1417 = x799 * x1416;
-Tbase TZ x1418 = 0x13;
-Tbase TZ x1419 = x1418 * x1417;
-Tbase TZ x1420 = x1414 + x1419;
-Tbase TZ x1421 = x1389 + x1420;
-Tbase TZ x1422 = 0x1a;
-Tbase TZ x1423 = x1421 >> x1422;
-Tbase TZ x1424 = x799 * x448;
-Tbase TZ x1425 = x800 * x445;
-Tbase TZ x1426 = x801 * x442;
-Tbase TZ x1427 = x802 * x439;
-Tbase TZ x1428 = x803 * x436;
-Tbase TZ x1429 = x804 * x433;
-Tbase TZ x1430 = x805 * x430;
-Tbase TZ x1431 = x806 * x427;
-Tbase TZ x1432 = x807 * x424;
-Tbase TZ x1433 = x808 * x421;
-Tbase TZ x1434 = x1432 + x1433;
-Tbase TZ x1435 = x1431 + x1434;
-Tbase TZ x1436 = x1430 + x1435;
-Tbase TZ x1437 = x1429 + x1436;
-Tbase TZ x1438 = x1428 + x1437;
-Tbase TZ x1439 = x1427 + x1438;
-Tbase TZ x1440 = x1426 + x1439;
-Tbase TZ x1441 = x1425 + x1440;
-Tbase TZ x1442 = x1424 + x1441;
-Tbase TZ x1443 = x1423 + x1442;
-Tbase TZ x1444 = 0x19;
-Tbase TZ x1445 = x1443 >> x1444;
-Tbase TZ x1446 = 0x13;
-Tbase TZ x1447 = x1446 * x1445;
-Tbase TZ x1448 = 0x3ffffff;
-Tbase TZ x1449 = x1189 & x1448;
-Tbase TZ x1450 = x1447 + x1449;
-Tbase TZ x1451 = 0x1a;
-Tbase TZ x1452 = x1450 >> x1451;
-Tbase TZ x1453 = 0x1ffffff;
-Tbase TZ x1454 = x1213 & x1453;
-Tbase TZ x1455 = x1452 + x1454;
-Tbase TZ x1456 = 0x1ffffff;
-Tbase TZ x1457 = x1443 & x1456;
-Tbase TZ x1458 = 0x3ffffff;
-Tbase TZ x1459 = x1421 & x1458;
-Tbase TZ x1460 = 0x1ffffff;
-Tbase TZ x1461 = x1387 & x1460;
-Tbase TZ x1462 = 0x3ffffff;
-Tbase TZ x1463 = x1363 & x1462;
-Tbase TZ x1464 = 0x1ffffff;
-Tbase TZ x1465 = x1329 & x1464;
-Tbase TZ x1466 = 0x3ffffff;
-Tbase TZ x1467 = x1305 & x1466;
-Tbase TZ x1468 = 0x1ffffff;
-Tbase TZ x1469 = x1271 & x1468;
-Tbase TZ x1470 = 0x19;
-Tbase TZ x1471 = x1455 >> x1470;
-Tbase TZ x1472 = 0x3ffffff;
-Tbase TZ x1473 = x1247 & x1472;
-Tbase TZ x1474 = x1471 + x1473;
-Tbase TZ x1475 = 0x1ffffff;
-Tbase TZ x1476 = x1455 & x1475;
-Tbase TZ x1477 = 0x3ffffff;
-Tbase TZ x1478 = x1450 & x1477;
-Tbase TZ x1479 = x1137 + x1457;
-Tbase TZ x1480 = x1139 + x1459;
-Tbase TZ x1481 = x1141 + x1461;
-Tbase TZ x1482 = x1143 + x1463;
-Tbase TZ x1483 = x1145 + x1465;
-Tbase TZ x1484 = x1147 + x1467;
-Tbase TZ x1485 = x1149 + x1469;
-Tbase TZ x1486 = x1154 + x1474;
-Tbase TZ x1487 = x1156 + x1476;
-Tbase TZ x1488 = x1158 + x1478;
-Tbase TZ x1489 = x1137 + x1457;
-Tbase TZ x1490 = x1139 + x1459;
-Tbase TZ x1491 = x1141 + x1461;
-Tbase TZ x1492 = x1143 + x1463;
-Tbase TZ x1493 = x1145 + x1465;
-Tbase TZ x1494 = x1147 + x1467;
-Tbase TZ x1495 = x1149 + x1469;
-Tbase TZ x1496 = x1154 + x1474;
-Tbase TZ x1497 = x1156 + x1476;
-Tbase TZ x1498 = x1158 + x1478;
-Tbase TZ x1499 = x1488 * x1498;
-Tbase TZ x1500 = 0x2;
-Tbase TZ x1501 = x1497 * x1500;
-Tbase TZ x1502 = x1479 * x1501;
-Tbase TZ x1503 = x1480 * x1496;
-Tbase TZ x1504 = 0x2;
-Tbase TZ x1505 = x1495 * x1504;
-Tbase TZ x1506 = x1481 * x1505;
-Tbase TZ x1507 = x1482 * x1494;
-Tbase TZ x1508 = 0x2;
-Tbase TZ x1509 = x1493 * x1508;
-Tbase TZ x1510 = x1483 * x1509;
-Tbase TZ x1511 = x1484 * x1492;
-Tbase TZ x1512 = 0x2;
-Tbase TZ x1513 = x1491 * x1512;
-Tbase TZ x1514 = x1485 * x1513;
-Tbase TZ x1515 = x1486 * x1490;
-Tbase TZ x1516 = 0x2;
-Tbase TZ x1517 = x1489 * x1516;
-Tbase TZ x1518 = x1487 * x1517;
-Tbase TZ x1519 = x1515 + x1518;
-Tbase TZ x1520 = x1514 + x1519;
-Tbase TZ x1521 = x1511 + x1520;
-Tbase TZ x1522 = x1510 + x1521;
-Tbase TZ x1523 = x1507 + x1522;
-Tbase TZ x1524 = x1506 + x1523;
-Tbase TZ x1525 = x1503 + x1524;
-Tbase TZ x1526 = x1502 + x1525;
-Tbase TZ x1527 = 0x13;
-Tbase TZ x1528 = x1527 * x1526;
-Tbase TZ x1529 = x1499 + x1528;
-Tbase TZ x1530 = 0x1a;
-Tbase TZ x1531 = x1529 >> x1530;
-Tbase TZ x1532 = x1487 * x1498;
-Tbase TZ x1533 = x1488 * x1497;
-Tbase TZ x1534 = x1532 + x1533;
-Tbase TZ x1535 = x1479 * x1496;
-Tbase TZ x1536 = x1480 * x1495;
-Tbase TZ x1537 = x1481 * x1494;
-Tbase TZ x1538 = x1482 * x1493;
-Tbase TZ x1539 = x1483 * x1492;
-Tbase TZ x1540 = x1484 * x1491;
-Tbase TZ x1541 = x1485 * x1490;
-Tbase TZ x1542 = x1486 * x1489;
-Tbase TZ x1543 = x1541 + x1542;
-Tbase TZ x1544 = x1540 + x1543;
-Tbase TZ x1545 = x1539 + x1544;
-Tbase TZ x1546 = x1538 + x1545;
-Tbase TZ x1547 = x1537 + x1546;
-Tbase TZ x1548 = x1536 + x1547;
-Tbase TZ x1549 = x1535 + x1548;
-Tbase TZ x1550 = 0x13;
-Tbase TZ x1551 = x1550 * x1549;
-Tbase TZ x1552 = x1534 + x1551;
-Tbase TZ x1553 = x1531 + x1552;
-Tbase TZ x1554 = 0x19;
-Tbase TZ x1555 = x1553 >> x1554;
-Tbase TZ x1556 = x1486 * x1498;
-Tbase TZ x1557 = 0x2;
-Tbase TZ x1558 = x1497 * x1557;
-Tbase TZ x1559 = x1487 * x1558;
-Tbase TZ x1560 = x1488 * x1496;
-Tbase TZ x1561 = x1559 + x1560;
-Tbase TZ x1562 = x1556 + x1561;
-Tbase TZ x1563 = 0x2;
-Tbase TZ x1564 = x1495 * x1563;
-Tbase TZ x1565 = x1479 * x1564;
-Tbase TZ x1566 = x1480 * x1494;
-Tbase TZ x1567 = 0x2;
-Tbase TZ x1568 = x1493 * x1567;
-Tbase TZ x1569 = x1481 * x1568;
-Tbase TZ x1570 = x1482 * x1492;
-Tbase TZ x1571 = 0x2;
-Tbase TZ x1572 = x1491 * x1571;
-Tbase TZ x1573 = x1483 * x1572;
-Tbase TZ x1574 = x1484 * x1490;
-Tbase TZ x1575 = 0x2;
-Tbase TZ x1576 = x1489 * x1575;
-Tbase TZ x1577 = x1485 * x1576;
-Tbase TZ x1578 = x1574 + x1577;
-Tbase TZ x1579 = x1573 + x1578;
-Tbase TZ x1580 = x1570 + x1579;
-Tbase TZ x1581 = x1569 + x1580;
-Tbase TZ x1582 = x1566 + x1581;
-Tbase TZ x1583 = x1565 + x1582;
-Tbase TZ x1584 = 0x13;
-Tbase TZ x1585 = x1584 * x1583;
-Tbase TZ x1586 = x1562 + x1585;
-Tbase TZ x1587 = x1555 + x1586;
-Tbase TZ x1588 = 0x1a;
-Tbase TZ x1589 = x1587 >> x1588;
-Tbase TZ x1590 = x1485 * x1498;
-Tbase TZ x1591 = x1486 * x1497;
-Tbase TZ x1592 = x1487 * x1496;
-Tbase TZ x1593 = x1488 * x1495;
-Tbase TZ x1594 = x1592 + x1593;
-Tbase TZ x1595 = x1591 + x1594;
-Tbase TZ x1596 = x1590 + x1595;
-Tbase TZ x1597 = x1479 * x1494;
-Tbase TZ x1598 = x1480 * x1493;
-Tbase TZ x1599 = x1481 * x1492;
-Tbase TZ x1600 = x1482 * x1491;
-Tbase TZ x1601 = x1483 * x1490;
-Tbase TZ x1602 = x1484 * x1489;
-Tbase TZ x1603 = x1601 + x1602;
-Tbase TZ x1604 = x1600 + x1603;
-Tbase TZ x1605 = x1599 + x1604;
-Tbase TZ x1606 = x1598 + x1605;
-Tbase TZ x1607 = x1597 + x1606;
-Tbase TZ x1608 = 0x13;
-Tbase TZ x1609 = x1608 * x1607;
-Tbase TZ x1610 = x1596 + x1609;
-Tbase TZ x1611 = x1589 + x1610;
-Tbase TZ x1612 = 0x19;
-Tbase TZ x1613 = x1611 >> x1612;
-Tbase TZ x1614 = x1484 * x1498;
-Tbase TZ x1615 = 0x2;
-Tbase TZ x1616 = x1497 * x1615;
-Tbase TZ x1617 = x1485 * x1616;
-Tbase TZ x1618 = x1486 * x1496;
-Tbase TZ x1619 = 0x2;
-Tbase TZ x1620 = x1495 * x1619;
-Tbase TZ x1621 = x1487 * x1620;
-Tbase TZ x1622 = x1488 * x1494;
-Tbase TZ x1623 = x1621 + x1622;
-Tbase TZ x1624 = x1618 + x1623;
-Tbase TZ x1625 = x1617 + x1624;
-Tbase TZ x1626 = x1614 + x1625;
-Tbase TZ x1627 = 0x2;
-Tbase TZ x1628 = x1493 * x1627;
-Tbase TZ x1629 = x1479 * x1628;
-Tbase TZ x1630 = x1480 * x1492;
-Tbase TZ x1631 = 0x2;
-Tbase TZ x1632 = x1491 * x1631;
-Tbase TZ x1633 = x1481 * x1632;
-Tbase TZ x1634 = x1482 * x1490;
-Tbase TZ x1635 = 0x2;
-Tbase TZ x1636 = x1489 * x1635;
-Tbase TZ x1637 = x1483 * x1636;
-Tbase TZ x1638 = x1634 + x1637;
-Tbase TZ x1639 = x1633 + x1638;
-Tbase TZ x1640 = x1630 + x1639;
-Tbase TZ x1641 = x1629 + x1640;
-Tbase TZ x1642 = 0x13;
-Tbase TZ x1643 = x1642 * x1641;
-Tbase TZ x1644 = x1626 + x1643;
-Tbase TZ x1645 = x1613 + x1644;
-Tbase TZ x1646 = 0x1a;
-Tbase TZ x1647 = x1645 >> x1646;
-Tbase TZ x1648 = x1483 * x1498;
-Tbase TZ x1649 = x1484 * x1497;
-Tbase TZ x1650 = x1485 * x1496;
-Tbase TZ x1651 = x1486 * x1495;
-Tbase TZ x1652 = x1487 * x1494;
-Tbase TZ x1653 = x1488 * x1493;
-Tbase TZ x1654 = x1652 + x1653;
-Tbase TZ x1655 = x1651 + x1654;
-Tbase TZ x1656 = x1650 + x1655;
-Tbase TZ x1657 = x1649 + x1656;
-Tbase TZ x1658 = x1648 + x1657;
-Tbase TZ x1659 = x1479 * x1492;
-Tbase TZ x1660 = x1480 * x1491;
-Tbase TZ x1661 = x1481 * x1490;
-Tbase TZ x1662 = x1482 * x1489;
-Tbase TZ x1663 = x1661 + x1662;
-Tbase TZ x1664 = x1660 + x1663;
-Tbase TZ x1665 = x1659 + x1664;
-Tbase TZ x1666 = 0x13;
-Tbase TZ x1667 = x1666 * x1665;
-Tbase TZ x1668 = x1658 + x1667;
-Tbase TZ x1669 = x1647 + x1668;
-Tbase TZ x1670 = 0x19;
-Tbase TZ x1671 = x1669 >> x1670;
-Tbase TZ x1672 = x1482 * x1498;
-Tbase TZ x1673 = 0x2;
-Tbase TZ x1674 = x1497 * x1673;
-Tbase TZ x1675 = x1483 * x1674;
-Tbase TZ x1676 = x1484 * x1496;
-Tbase TZ x1677 = 0x2;
-Tbase TZ x1678 = x1495 * x1677;
-Tbase TZ x1679 = x1485 * x1678;
-Tbase TZ x1680 = x1486 * x1494;
-Tbase TZ x1681 = 0x2;
-Tbase TZ x1682 = x1493 * x1681;
-Tbase TZ x1683 = x1487 * x1682;
-Tbase TZ x1684 = x1488 * x1492;
-Tbase TZ x1685 = x1683 + x1684;
-Tbase TZ x1686 = x1680 + x1685;
-Tbase TZ x1687 = x1679 + x1686;
-Tbase TZ x1688 = x1676 + x1687;
-Tbase TZ x1689 = x1675 + x1688;
-Tbase TZ x1690 = x1672 + x1689;
-Tbase TZ x1691 = 0x2;
-Tbase TZ x1692 = x1491 * x1691;
-Tbase TZ x1693 = x1479 * x1692;
-Tbase TZ x1694 = x1480 * x1490;
-Tbase TZ x1695 = 0x2;
-Tbase TZ x1696 = x1489 * x1695;
-Tbase TZ x1697 = x1481 * x1696;
-Tbase TZ x1698 = x1694 + x1697;
-Tbase TZ x1699 = x1693 + x1698;
-Tbase TZ x1700 = 0x13;
-Tbase TZ x1701 = x1700 * x1699;
-Tbase TZ x1702 = x1690 + x1701;
-Tbase TZ x1703 = x1671 + x1702;
-Tbase TZ x1704 = 0x1a;
-Tbase TZ x1705 = x1703 >> x1704;
-Tbase TZ x1706 = x1481 * x1498;
-Tbase TZ x1707 = x1482 * x1497;
-Tbase TZ x1708 = x1483 * x1496;
-Tbase TZ x1709 = x1484 * x1495;
-Tbase TZ x1710 = x1485 * x1494;
-Tbase TZ x1711 = x1486 * x1493;
-Tbase TZ x1712 = x1487 * x1492;
-Tbase TZ x1713 = x1488 * x1491;
-Tbase TZ x1714 = x1712 + x1713;
-Tbase TZ x1715 = x1711 + x1714;
-Tbase TZ x1716 = x1710 + x1715;
-Tbase TZ x1717 = x1709 + x1716;
-Tbase TZ x1718 = x1708 + x1717;
-Tbase TZ x1719 = x1707 + x1718;
-Tbase TZ x1720 = x1706 + x1719;
-Tbase TZ x1721 = x1479 * x1490;
-Tbase TZ x1722 = x1480 * x1489;
-Tbase TZ x1723 = x1721 + x1722;
-Tbase TZ x1724 = 0x13;
-Tbase TZ x1725 = x1724 * x1723;
-Tbase TZ x1726 = x1720 + x1725;
-Tbase TZ x1727 = x1705 + x1726;
-Tbase TZ x1728 = 0x19;
-Tbase TZ x1729 = x1727 >> x1728;
-Tbase TZ x1730 = x1480 * x1498;
-Tbase TZ x1731 = 0x2;
-Tbase TZ x1732 = x1497 * x1731;
-Tbase TZ x1733 = x1481 * x1732;
-Tbase TZ x1734 = x1482 * x1496;
-Tbase TZ x1735 = 0x2;
-Tbase TZ x1736 = x1495 * x1735;
-Tbase TZ x1737 = x1483 * x1736;
-Tbase TZ x1738 = x1484 * x1494;
-Tbase TZ x1739 = 0x2;
-Tbase TZ x1740 = x1493 * x1739;
-Tbase TZ x1741 = x1485 * x1740;
-Tbase TZ x1742 = x1486 * x1492;
-Tbase TZ x1743 = 0x2;
-Tbase TZ x1744 = x1491 * x1743;
-Tbase TZ x1745 = x1487 * x1744;
-Tbase TZ x1746 = x1488 * x1490;
-Tbase TZ x1747 = x1745 + x1746;
-Tbase TZ x1748 = x1742 + x1747;
-Tbase TZ x1749 = x1741 + x1748;
-Tbase TZ x1750 = x1738 + x1749;
-Tbase TZ x1751 = x1737 + x1750;
-Tbase TZ x1752 = x1734 + x1751;
-Tbase TZ x1753 = x1733 + x1752;
-Tbase TZ x1754 = x1730 + x1753;
-Tbase TZ x1755 = 0x2;
-Tbase TZ x1756 = x1489 * x1755;
-Tbase TZ x1757 = x1479 * x1756;
-Tbase TZ x1758 = 0x13;
-Tbase TZ x1759 = x1758 * x1757;
-Tbase TZ x1760 = x1754 + x1759;
-Tbase TZ x1761 = x1729 + x1760;
-Tbase TZ x1762 = 0x1a;
-Tbase TZ x1763 = x1761 >> x1762;
-Tbase TZ x1764 = x1479 * x1498;
-Tbase TZ x1765 = x1480 * x1497;
-Tbase TZ x1766 = x1481 * x1496;
-Tbase TZ x1767 = x1482 * x1495;
-Tbase TZ x1768 = x1483 * x1494;
-Tbase TZ x1769 = x1484 * x1493;
-Tbase TZ x1770 = x1485 * x1492;
-Tbase TZ x1771 = x1486 * x1491;
-Tbase TZ x1772 = x1487 * x1490;
-Tbase TZ x1773 = x1488 * x1489;
-Tbase TZ x1774 = x1772 + x1773;
-Tbase TZ x1775 = x1771 + x1774;
-Tbase TZ x1776 = x1770 + x1775;
-Tbase TZ x1777 = x1769 + x1776;
-Tbase TZ x1778 = x1768 + x1777;
-Tbase TZ x1779 = x1767 + x1778;
-Tbase TZ x1780 = x1766 + x1779;
-Tbase TZ x1781 = x1765 + x1780;
-Tbase TZ x1782 = x1764 + x1781;
-Tbase TZ x1783 = x1763 + x1782;
-Tbase TZ x1784 = 0x19;
-Tbase TZ x1785 = x1783 >> x1784;
-Tbase TZ x1786 = 0x13;
-Tbase TZ x1787 = x1786 * x1785;
-Tbase TZ x1788 = 0x3ffffff;
-Tbase TZ x1789 = x1529 & x1788;
-Tbase TZ x1790 = x1787 + x1789;
-Tbase TZ x1791 = 0x1a;
-Tbase TZ x1792 = x1790 >> x1791;
-Tbase TZ x1793 = 0x1ffffff;
-Tbase TZ x1794 = x1553 & x1793;
-Tbase TZ x1795 = x1792 + x1794;
-Tbase TZ x1796 = 0x1ffffff;
-Tbase TZ x1797 = x1783 & x1796;
-Tbase TZ x1798 = 0x3ffffff;
-Tbase TZ x1799 = x1761 & x1798;
-Tbase TZ x1800 = 0x1ffffff;
-Tbase TZ x1801 = x1727 & x1800;
-Tbase TZ x1802 = 0x3ffffff;
-Tbase TZ x1803 = x1703 & x1802;
-Tbase TZ x1804 = 0x1ffffff;
-Tbase TZ x1805 = x1669 & x1804;
-Tbase TZ x1806 = 0x3ffffff;
-Tbase TZ x1807 = x1645 & x1806;
-Tbase TZ x1808 = 0x1ffffff;
-Tbase TZ x1809 = x1611 & x1808;
-Tbase TZ x1810 = 0x19;
-Tbase TZ x1811 = x1795 >> x1810;
-Tbase TZ x1812 = 0x3ffffff;
-Tbase TZ x1813 = x1587 & x1812;
-Tbase TZ x1814 = x1811 + x1813;
-Tbase TZ x1815 = 0x1ffffff;
-Tbase TZ x1816 = x1795 & x1815;
-Tbase TZ x1817 = 0x3ffffff;
-Tbase TZ x1818 = x1790 & x1817;
-Tbase TZ x1819 = 0x3fffffe;
-Tbase TZ x1820 = x1819 + x1137;
-Tbase TZ x1821 = x1820 - x1457;
-Tbase TZ x1822 = 0x7fffffe;
-Tbase TZ x1823 = x1822 + x1139;
-Tbase TZ x1824 = x1823 - x1459;
-Tbase TZ x1825 = 0x3fffffe;
-Tbase TZ x1826 = x1825 + x1141;
-Tbase TZ x1827 = x1826 - x1461;
-Tbase TZ x1828 = 0x7fffffe;
-Tbase TZ x1829 = x1828 + x1143;
-Tbase TZ x1830 = x1829 - x1463;
-Tbase TZ x1831 = 0x3fffffe;
-Tbase TZ x1832 = x1831 + x1145;
-Tbase TZ x1833 = x1832 - x1465;
-Tbase TZ x1834 = 0x7fffffe;
-Tbase TZ x1835 = x1834 + x1147;
-Tbase TZ x1836 = x1835 - x1467;
-Tbase TZ x1837 = 0x3fffffe;
-Tbase TZ x1838 = x1837 + x1149;
-Tbase TZ x1839 = x1838 - x1469;
-Tbase TZ x1840 = 0x7fffffe;
-Tbase TZ x1841 = x1840 + x1154;
-Tbase TZ x1842 = x1841 - x1474;
-Tbase TZ x1843 = 0x3fffffe;
-Tbase TZ x1844 = x1843 + x1156;
-Tbase TZ x1845 = x1844 - x1476;
-Tbase TZ x1846 = 0x7ffffda;
-Tbase TZ x1847 = x1846 + x1158;
-Tbase TZ x1848 = x1847 - x1478;
-Tbase TZ x1849 = 0x3fffffe;
-Tbase TZ x1850 = x1849 + x1137;
-Tbase TZ x1851 = x1850 - x1457;
-Tbase TZ x1852 = 0x7fffffe;
-Tbase TZ x1853 = x1852 + x1139;
-Tbase TZ x1854 = x1853 - x1459;
-Tbase TZ x1855 = 0x3fffffe;
-Tbase TZ x1856 = x1855 + x1141;
-Tbase TZ x1857 = x1856 - x1461;
-Tbase TZ x1858 = 0x7fffffe;
-Tbase TZ x1859 = x1858 + x1143;
-Tbase TZ x1860 = x1859 - x1463;
-Tbase TZ x1861 = 0x3fffffe;
-Tbase TZ x1862 = x1861 + x1145;
-Tbase TZ x1863 = x1862 - x1465;
-Tbase TZ x1864 = 0x7fffffe;
-Tbase TZ x1865 = x1864 + x1147;
-Tbase TZ x1866 = x1865 - x1467;
-Tbase TZ x1867 = 0x3fffffe;
-Tbase TZ x1868 = x1867 + x1149;
-Tbase TZ x1869 = x1868 - x1469;
-Tbase TZ x1870 = 0x7fffffe;
-Tbase TZ x1871 = x1870 + x1154;
-Tbase TZ x1872 = x1871 - x1474;
-Tbase TZ x1873 = 0x3fffffe;
-Tbase TZ x1874 = x1873 + x1156;
-Tbase TZ x1875 = x1874 - x1476;
-Tbase TZ x1876 = 0x7ffffda;
-Tbase TZ x1877 = x1876 + x1158;
-Tbase TZ x1878 = x1877 - x1478;
-Tbase TZ x1879 = x1848 * x1878;
-Tbase TZ x1880 = 0x2;
-Tbase TZ x1881 = x1875 * x1880;
-Tbase TZ x1882 = x1821 * x1881;
-Tbase TZ x1883 = x1824 * x1872;
-Tbase TZ x1884 = 0x2;
-Tbase TZ x1885 = x1869 * x1884;
-Tbase TZ x1886 = x1827 * x1885;
-Tbase TZ x1887 = x1830 * x1866;
-Tbase TZ x1888 = 0x2;
-Tbase TZ x1889 = x1863 * x1888;
-Tbase TZ x1890 = x1833 * x1889;
-Tbase TZ x1891 = x1836 * x1860;
-Tbase TZ x1892 = 0x2;
-Tbase TZ x1893 = x1857 * x1892;
-Tbase TZ x1894 = x1839 * x1893;
-Tbase TZ x1895 = x1842 * x1854;
-Tbase TZ x1896 = 0x2;
-Tbase TZ x1897 = x1851 * x1896;
-Tbase TZ x1898 = x1845 * x1897;
-Tbase TZ x1899 = x1895 + x1898;
-Tbase TZ x1900 = x1894 + x1899;
-Tbase TZ x1901 = x1891 + x1900;
-Tbase TZ x1902 = x1890 + x1901;
-Tbase TZ x1903 = x1887 + x1902;
-Tbase TZ x1904 = x1886 + x1903;
-Tbase TZ x1905 = x1883 + x1904;
-Tbase TZ x1906 = x1882 + x1905;
-Tbase TZ x1907 = 0x13;
-Tbase TZ x1908 = x1907 * x1906;
-Tbase TZ x1909 = x1879 + x1908;
-Tbase TZ x1910 = 0x1a;
-Tbase TZ x1911 = x1909 >> x1910;
-Tbase TZ x1912 = x1845 * x1878;
-Tbase TZ x1913 = x1848 * x1875;
-Tbase TZ x1914 = x1912 + x1913;
-Tbase TZ x1915 = x1821 * x1872;
-Tbase TZ x1916 = x1824 * x1869;
-Tbase TZ x1917 = x1827 * x1866;
-Tbase TZ x1918 = x1830 * x1863;
-Tbase TZ x1919 = x1833 * x1860;
-Tbase TZ x1920 = x1836 * x1857;
-Tbase TZ x1921 = x1839 * x1854;
-Tbase TZ x1922 = x1842 * x1851;
-Tbase TZ x1923 = x1921 + x1922;
-Tbase TZ x1924 = x1920 + x1923;
-Tbase TZ x1925 = x1919 + x1924;
-Tbase TZ x1926 = x1918 + x1925;
-Tbase TZ x1927 = x1917 + x1926;
-Tbase TZ x1928 = x1916 + x1927;
-Tbase TZ x1929 = x1915 + x1928;
-Tbase TZ x1930 = 0x13;
-Tbase TZ x1931 = x1930 * x1929;
-Tbase TZ x1932 = x1914 + x1931;
-Tbase TZ x1933 = x1911 + x1932;
-Tbase TZ x1934 = 0x19;
-Tbase TZ x1935 = x1933 >> x1934;
-Tbase TZ x1936 = x1842 * x1878;
-Tbase TZ x1937 = 0x2;
-Tbase TZ x1938 = x1875 * x1937;
-Tbase TZ x1939 = x1845 * x1938;
-Tbase TZ x1940 = x1848 * x1872;
-Tbase TZ x1941 = x1939 + x1940;
-Tbase TZ x1942 = x1936 + x1941;
-Tbase TZ x1943 = 0x2;
-Tbase TZ x1944 = x1869 * x1943;
-Tbase TZ x1945 = x1821 * x1944;
-Tbase TZ x1946 = x1824 * x1866;
-Tbase TZ x1947 = 0x2;
-Tbase TZ x1948 = x1863 * x1947;
-Tbase TZ x1949 = x1827 * x1948;
-Tbase TZ x1950 = x1830 * x1860;
-Tbase TZ x1951 = 0x2;
-Tbase TZ x1952 = x1857 * x1951;
-Tbase TZ x1953 = x1833 * x1952;
-Tbase TZ x1954 = x1836 * x1854;
-Tbase TZ x1955 = 0x2;
-Tbase TZ x1956 = x1851 * x1955;
-Tbase TZ x1957 = x1839 * x1956;
-Tbase TZ x1958 = x1954 + x1957;
-Tbase TZ x1959 = x1953 + x1958;
-Tbase TZ x1960 = x1950 + x1959;
-Tbase TZ x1961 = x1949 + x1960;
-Tbase TZ x1962 = x1946 + x1961;
-Tbase TZ x1963 = x1945 + x1962;
-Tbase TZ x1964 = 0x13;
-Tbase TZ x1965 = x1964 * x1963;
-Tbase TZ x1966 = x1942 + x1965;
-Tbase TZ x1967 = x1935 + x1966;
-Tbase TZ x1968 = 0x1a;
-Tbase TZ x1969 = x1967 >> x1968;
-Tbase TZ x1970 = x1839 * x1878;
-Tbase TZ x1971 = x1842 * x1875;
-Tbase TZ x1972 = x1845 * x1872;
-Tbase TZ x1973 = x1848 * x1869;
-Tbase TZ x1974 = x1972 + x1973;
-Tbase TZ x1975 = x1971 + x1974;
-Tbase TZ x1976 = x1970 + x1975;
-Tbase TZ x1977 = x1821 * x1866;
-Tbase TZ x1978 = x1824 * x1863;
-Tbase TZ x1979 = x1827 * x1860;
-Tbase TZ x1980 = x1830 * x1857;
-Tbase TZ x1981 = x1833 * x1854;
-Tbase TZ x1982 = x1836 * x1851;
-Tbase TZ x1983 = x1981 + x1982;
-Tbase TZ x1984 = x1980 + x1983;
-Tbase TZ x1985 = x1979 + x1984;
-Tbase TZ x1986 = x1978 + x1985;
-Tbase TZ x1987 = x1977 + x1986;
-Tbase TZ x1988 = 0x13;
-Tbase TZ x1989 = x1988 * x1987;
-Tbase TZ x1990 = x1976 + x1989;
-Tbase TZ x1991 = x1969 + x1990;
-Tbase TZ x1992 = 0x19;
-Tbase TZ x1993 = x1991 >> x1992;
-Tbase TZ x1994 = x1836 * x1878;
-Tbase TZ x1995 = 0x2;
-Tbase TZ x1996 = x1875 * x1995;
-Tbase TZ x1997 = x1839 * x1996;
-Tbase TZ x1998 = x1842 * x1872;
-Tbase TZ x1999 = 0x2;
-Tbase TZ x2000 = x1869 * x1999;
-Tbase TZ x2001 = x1845 * x2000;
-Tbase TZ x2002 = x1848 * x1866;
-Tbase TZ x2003 = x2001 + x2002;
-Tbase TZ x2004 = x1998 + x2003;
-Tbase TZ x2005 = x1997 + x2004;
-Tbase TZ x2006 = x1994 + x2005;
-Tbase TZ x2007 = 0x2;
-Tbase TZ x2008 = x1863 * x2007;
-Tbase TZ x2009 = x1821 * x2008;
-Tbase TZ x2010 = x1824 * x1860;
-Tbase TZ x2011 = 0x2;
-Tbase TZ x2012 = x1857 * x2011;
-Tbase TZ x2013 = x1827 * x2012;
-Tbase TZ x2014 = x1830 * x1854;
-Tbase TZ x2015 = 0x2;
-Tbase TZ x2016 = x1851 * x2015;
-Tbase TZ x2017 = x1833 * x2016;
-Tbase TZ x2018 = x2014 + x2017;
-Tbase TZ x2019 = x2013 + x2018;
-Tbase TZ x2020 = x2010 + x2019;
-Tbase TZ x2021 = x2009 + x2020;
-Tbase TZ x2022 = 0x13;
-Tbase TZ x2023 = x2022 * x2021;
-Tbase TZ x2024 = x2006 + x2023;
-Tbase TZ x2025 = x1993 + x2024;
-Tbase TZ x2026 = 0x1a;
-Tbase TZ x2027 = x2025 >> x2026;
-Tbase TZ x2028 = x1833 * x1878;
-Tbase TZ x2029 = x1836 * x1875;
-Tbase TZ x2030 = x1839 * x1872;
-Tbase TZ x2031 = x1842 * x1869;
-Tbase TZ x2032 = x1845 * x1866;
-Tbase TZ x2033 = x1848 * x1863;
-Tbase TZ x2034 = x2032 + x2033;
-Tbase TZ x2035 = x2031 + x2034;
-Tbase TZ x2036 = x2030 + x2035;
-Tbase TZ x2037 = x2029 + x2036;
-Tbase TZ x2038 = x2028 + x2037;
-Tbase TZ x2039 = x1821 * x1860;
-Tbase TZ x2040 = x1824 * x1857;
-Tbase TZ x2041 = x1827 * x1854;
-Tbase TZ x2042 = x1830 * x1851;
-Tbase TZ x2043 = x2041 + x2042;
-Tbase TZ x2044 = x2040 + x2043;
-Tbase TZ x2045 = x2039 + x2044;
-Tbase TZ x2046 = 0x13;
-Tbase TZ x2047 = x2046 * x2045;
-Tbase TZ x2048 = x2038 + x2047;
-Tbase TZ x2049 = x2027 + x2048;
-Tbase TZ x2050 = 0x19;
-Tbase TZ x2051 = x2049 >> x2050;
-Tbase TZ x2052 = x1830 * x1878;
-Tbase TZ x2053 = 0x2;
-Tbase TZ x2054 = x1875 * x2053;
-Tbase TZ x2055 = x1833 * x2054;
-Tbase TZ x2056 = x1836 * x1872;
-Tbase TZ x2057 = 0x2;
-Tbase TZ x2058 = x1869 * x2057;
-Tbase TZ x2059 = x1839 * x2058;
-Tbase TZ x2060 = x1842 * x1866;
-Tbase TZ x2061 = 0x2;
-Tbase TZ x2062 = x1863 * x2061;
-Tbase TZ x2063 = x1845 * x2062;
-Tbase TZ x2064 = x1848 * x1860;
-Tbase TZ x2065 = x2063 + x2064;
-Tbase TZ x2066 = x2060 + x2065;
-Tbase TZ x2067 = x2059 + x2066;
-Tbase TZ x2068 = x2056 + x2067;
-Tbase TZ x2069 = x2055 + x2068;
-Tbase TZ x2070 = x2052 + x2069;
-Tbase TZ x2071 = 0x2;
-Tbase TZ x2072 = x1857 * x2071;
-Tbase TZ x2073 = x1821 * x2072;
-Tbase TZ x2074 = x1824 * x1854;
-Tbase TZ x2075 = 0x2;
-Tbase TZ x2076 = x1851 * x2075;
-Tbase TZ x2077 = x1827 * x2076;
-Tbase TZ x2078 = x2074 + x2077;
-Tbase TZ x2079 = x2073 + x2078;
-Tbase TZ x2080 = 0x13;
-Tbase TZ x2081 = x2080 * x2079;
-Tbase TZ x2082 = x2070 + x2081;
-Tbase TZ x2083 = x2051 + x2082;
-Tbase TZ x2084 = 0x1a;
-Tbase TZ x2085 = x2083 >> x2084;
-Tbase TZ x2086 = x1827 * x1878;
-Tbase TZ x2087 = x1830 * x1875;
-Tbase TZ x2088 = x1833 * x1872;
-Tbase TZ x2089 = x1836 * x1869;
-Tbase TZ x2090 = x1839 * x1866;
-Tbase TZ x2091 = x1842 * x1863;
-Tbase TZ x2092 = x1845 * x1860;
-Tbase TZ x2093 = x1848 * x1857;
-Tbase TZ x2094 = x2092 + x2093;
-Tbase TZ x2095 = x2091 + x2094;
-Tbase TZ x2096 = x2090 + x2095;
-Tbase TZ x2097 = x2089 + x2096;
-Tbase TZ x2098 = x2088 + x2097;
-Tbase TZ x2099 = x2087 + x2098;
-Tbase TZ x2100 = x2086 + x2099;
-Tbase TZ x2101 = x1821 * x1854;
-Tbase TZ x2102 = x1824 * x1851;
-Tbase TZ x2103 = x2101 + x2102;
-Tbase TZ x2104 = 0x13;
-Tbase TZ x2105 = x2104 * x2103;
-Tbase TZ x2106 = x2100 + x2105;
-Tbase TZ x2107 = x2085 + x2106;
-Tbase TZ x2108 = 0x19;
-Tbase TZ x2109 = x2107 >> x2108;
-Tbase TZ x2110 = x1824 * x1878;
-Tbase TZ x2111 = 0x2;
-Tbase TZ x2112 = x1875 * x2111;
-Tbase TZ x2113 = x1827 * x2112;
-Tbase TZ x2114 = x1830 * x1872;
-Tbase TZ x2115 = 0x2;
-Tbase TZ x2116 = x1869 * x2115;
-Tbase TZ x2117 = x1833 * x2116;
-Tbase TZ x2118 = x1836 * x1866;
-Tbase TZ x2119 = 0x2;
-Tbase TZ x2120 = x1863 * x2119;
-Tbase TZ x2121 = x1839 * x2120;
-Tbase TZ x2122 = x1842 * x1860;
-Tbase TZ x2123 = 0x2;
-Tbase TZ x2124 = x1857 * x2123;
-Tbase TZ x2125 = x1845 * x2124;
-Tbase TZ x2126 = x1848 * x1854;
-Tbase TZ x2127 = x2125 + x2126;
-Tbase TZ x2128 = x2122 + x2127;
-Tbase TZ x2129 = x2121 + x2128;
-Tbase TZ x2130 = x2118 + x2129;
-Tbase TZ x2131 = x2117 + x2130;
-Tbase TZ x2132 = x2114 + x2131;
-Tbase TZ x2133 = x2113 + x2132;
-Tbase TZ x2134 = x2110 + x2133;
-Tbase TZ x2135 = 0x2;
-Tbase TZ x2136 = x1851 * x2135;
-Tbase TZ x2137 = x1821 * x2136;
-Tbase TZ x2138 = 0x13;
-Tbase TZ x2139 = x2138 * x2137;
-Tbase TZ x2140 = x2134 + x2139;
-Tbase TZ x2141 = x2109 + x2140;
-Tbase TZ x2142 = 0x1a;
-Tbase TZ x2143 = x2141 >> x2142;
-Tbase TZ x2144 = x1821 * x1878;
-Tbase TZ x2145 = x1824 * x1875;
-Tbase TZ x2146 = x1827 * x1872;
-Tbase TZ x2147 = x1830 * x1869;
-Tbase TZ x2148 = x1833 * x1866;
-Tbase TZ x2149 = x1836 * x1863;
-Tbase TZ x2150 = x1839 * x1860;
-Tbase TZ x2151 = x1842 * x1857;
-Tbase TZ x2152 = x1845 * x1854;
-Tbase TZ x2153 = x1848 * x1851;
-Tbase TZ x2154 = x2152 + x2153;
-Tbase TZ x2155 = x2151 + x2154;
-Tbase TZ x2156 = x2150 + x2155;
-Tbase TZ x2157 = x2149 + x2156;
-Tbase TZ x2158 = x2148 + x2157;
-Tbase TZ x2159 = x2147 + x2158;
-Tbase TZ x2160 = x2146 + x2159;
-Tbase TZ x2161 = x2145 + x2160;
-Tbase TZ x2162 = x2144 + x2161;
-Tbase TZ x2163 = x2143 + x2162;
-Tbase TZ x2164 = 0x19;
-Tbase TZ x2165 = x2163 >> x2164;
-Tbase TZ x2166 = 0x13;
-Tbase TZ x2167 = x2166 * x2165;
-Tbase TZ x2168 = 0x3ffffff;
-Tbase TZ x2169 = x1909 & x2168;
-Tbase TZ x2170 = x2167 + x2169;
-Tbase TZ x2171 = 0x1a;
-Tbase TZ x2172 = x2170 >> x2171;
-Tbase TZ x2173 = 0x1ffffff;
-Tbase TZ x2174 = x1933 & x2173;
-Tbase TZ x2175 = x2172 + x2174;
-Tbase TZ x2176 = 0x1ffffff;
-Tbase TZ x2177 = x2163 & x2176;
-Tbase TZ x2178 = 0x3ffffff;
-Tbase TZ x2179 = x2141 & x2178;
-Tbase TZ x2180 = 0x1ffffff;
-Tbase TZ x2181 = x2107 & x2180;
-Tbase TZ x2182 = 0x3ffffff;
-Tbase TZ x2183 = x2083 & x2182;
-Tbase TZ x2184 = 0x1ffffff;
-Tbase TZ x2185 = x2049 & x2184;
-Tbase TZ x2186 = 0x3ffffff;
-Tbase TZ x2187 = x2025 & x2186;
-Tbase TZ x2188 = 0x1ffffff;
-Tbase TZ x2189 = x1991 & x2188;
-Tbase TZ x2190 = 0x19;
-Tbase TZ x2191 = x2175 >> x2190;
-Tbase TZ x2192 = 0x3ffffff;
-Tbase TZ x2193 = x1967 & x2192;
-Tbase TZ x2194 = x2191 + x2193;
-Tbase TZ x2195 = 0x1ffffff;
-Tbase TZ x2196 = x2175 & x2195;
-Tbase TZ x2197 = 0x3ffffff;
-Tbase TZ x2198 = x2170 & x2197;
-Tbase TZ x2199 = x48 * x2198;
-Tbase TZ x2200 = 0x2;
-Tbase TZ x2201 = x2196 * x2200;
-Tbase TZ x2202 = x39 * x2201;
-Tbase TZ x2203 = x40 * x2194;
-Tbase TZ x2204 = 0x2;
-Tbase TZ x2205 = x2189 * x2204;
-Tbase TZ x2206 = x41 * x2205;
-Tbase TZ x2207 = x42 * x2187;
-Tbase TZ x2208 = 0x2;
-Tbase TZ x2209 = x2185 * x2208;
-Tbase TZ x2210 = x43 * x2209;
-Tbase TZ x2211 = x44 * x2183;
-Tbase TZ x2212 = 0x2;
-Tbase TZ x2213 = x2181 * x2212;
-Tbase TZ x2214 = x45 * x2213;
-Tbase TZ x2215 = x46 * x2179;
-Tbase TZ x2216 = 0x2;
-Tbase TZ x2217 = x2177 * x2216;
-Tbase TZ x2218 = x47 * x2217;
-Tbase TZ x2219 = x2215 + x2218;
-Tbase TZ x2220 = x2214 + x2219;
-Tbase TZ x2221 = x2211 + x2220;
-Tbase TZ x2222 = x2210 + x2221;
-Tbase TZ x2223 = x2207 + x2222;
-Tbase TZ x2224 = x2206 + x2223;
-Tbase TZ x2225 = x2203 + x2224;
-Tbase TZ x2226 = x2202 + x2225;
-Tbase TZ x2227 = 0x13;
-Tbase TZ x2228 = x2227 * x2226;
-Tbase TZ x2229 = x2199 + x2228;
-Tbase TZ x2230 = 0x1a;
-Tbase TZ x2231 = x2229 >> x2230;
-Tbase TZ x2232 = x47 * x2198;
-Tbase TZ x2233 = x48 * x2196;
-Tbase TZ x2234 = x2232 + x2233;
-Tbase TZ x2235 = x39 * x2194;
-Tbase TZ x2236 = x40 * x2189;
-Tbase TZ x2237 = x41 * x2187;
-Tbase TZ x2238 = x42 * x2185;
-Tbase TZ x2239 = x43 * x2183;
-Tbase TZ x2240 = x44 * x2181;
-Tbase TZ x2241 = x45 * x2179;
-Tbase TZ x2242 = x46 * x2177;
-Tbase TZ x2243 = x2241 + x2242;
-Tbase TZ x2244 = x2240 + x2243;
-Tbase TZ x2245 = x2239 + x2244;
-Tbase TZ x2246 = x2238 + x2245;
-Tbase TZ x2247 = x2237 + x2246;
-Tbase TZ x2248 = x2236 + x2247;
-Tbase TZ x2249 = x2235 + x2248;
-Tbase TZ x2250 = 0x13;
-Tbase TZ x2251 = x2250 * x2249;
-Tbase TZ x2252 = x2234 + x2251;
-Tbase TZ x2253 = x2231 + x2252;
-Tbase TZ x2254 = 0x19;
-Tbase TZ x2255 = x2253 >> x2254;
-Tbase TZ x2256 = x46 * x2198;
-Tbase TZ x2257 = 0x2;
-Tbase TZ x2258 = x2196 * x2257;
-Tbase TZ x2259 = x47 * x2258;
-Tbase TZ x2260 = x48 * x2194;
-Tbase TZ x2261 = x2259 + x2260;
-Tbase TZ x2262 = x2256 + x2261;
-Tbase TZ x2263 = 0x2;
-Tbase TZ x2264 = x2189 * x2263;
-Tbase TZ x2265 = x39 * x2264;
-Tbase TZ x2266 = x40 * x2187;
-Tbase TZ x2267 = 0x2;
-Tbase TZ x2268 = x2185 * x2267;
-Tbase TZ x2269 = x41 * x2268;
-Tbase TZ x2270 = x42 * x2183;
-Tbase TZ x2271 = 0x2;
-Tbase TZ x2272 = x2181 * x2271;
-Tbase TZ x2273 = x43 * x2272;
-Tbase TZ x2274 = x44 * x2179;
-Tbase TZ x2275 = 0x2;
-Tbase TZ x2276 = x2177 * x2275;
-Tbase TZ x2277 = x45 * x2276;
-Tbase TZ x2278 = x2274 + x2277;
-Tbase TZ x2279 = x2273 + x2278;
-Tbase TZ x2280 = x2270 + x2279;
-Tbase TZ x2281 = x2269 + x2280;
-Tbase TZ x2282 = x2266 + x2281;
-Tbase TZ x2283 = x2265 + x2282;
-Tbase TZ x2284 = 0x13;
-Tbase TZ x2285 = x2284 * x2283;
-Tbase TZ x2286 = x2262 + x2285;
-Tbase TZ x2287 = x2255 + x2286;
-Tbase TZ x2288 = 0x1a;
-Tbase TZ x2289 = x2287 >> x2288;
-Tbase TZ x2290 = x45 * x2198;
-Tbase TZ x2291 = x46 * x2196;
-Tbase TZ x2292 = x47 * x2194;
-Tbase TZ x2293 = x48 * x2189;
-Tbase TZ x2294 = x2292 + x2293;
-Tbase TZ x2295 = x2291 + x2294;
-Tbase TZ x2296 = x2290 + x2295;
-Tbase TZ x2297 = x39 * x2187;
-Tbase TZ x2298 = x40 * x2185;
-Tbase TZ x2299 = x41 * x2183;
-Tbase TZ x2300 = x42 * x2181;
-Tbase TZ x2301 = x43 * x2179;
-Tbase TZ x2302 = x44 * x2177;
-Tbase TZ x2303 = x2301 + x2302;
-Tbase TZ x2304 = x2300 + x2303;
-Tbase TZ x2305 = x2299 + x2304;
-Tbase TZ x2306 = x2298 + x2305;
-Tbase TZ x2307 = x2297 + x2306;
-Tbase TZ x2308 = 0x13;
-Tbase TZ x2309 = x2308 * x2307;
-Tbase TZ x2310 = x2296 + x2309;
-Tbase TZ x2311 = x2289 + x2310;
-Tbase TZ x2312 = 0x19;
-Tbase TZ x2313 = x2311 >> x2312;
-Tbase TZ x2314 = x44 * x2198;
-Tbase TZ x2315 = 0x2;
-Tbase TZ x2316 = x2196 * x2315;
-Tbase TZ x2317 = x45 * x2316;
-Tbase TZ x2318 = x46 * x2194;
-Tbase TZ x2319 = 0x2;
-Tbase TZ x2320 = x2189 * x2319;
-Tbase TZ x2321 = x47 * x2320;
-Tbase TZ x2322 = x48 * x2187;
-Tbase TZ x2323 = x2321 + x2322;
-Tbase TZ x2324 = x2318 + x2323;
-Tbase TZ x2325 = x2317 + x2324;
-Tbase TZ x2326 = x2314 + x2325;
-Tbase TZ x2327 = 0x2;
-Tbase TZ x2328 = x2185 * x2327;
-Tbase TZ x2329 = x39 * x2328;
-Tbase TZ x2330 = x40 * x2183;
-Tbase TZ x2331 = 0x2;
-Tbase TZ x2332 = x2181 * x2331;
-Tbase TZ x2333 = x41 * x2332;
-Tbase TZ x2334 = x42 * x2179;
-Tbase TZ x2335 = 0x2;
-Tbase TZ x2336 = x2177 * x2335;
-Tbase TZ x2337 = x43 * x2336;
-Tbase TZ x2338 = x2334 + x2337;
-Tbase TZ x2339 = x2333 + x2338;
-Tbase TZ x2340 = x2330 + x2339;
-Tbase TZ x2341 = x2329 + x2340;
-Tbase TZ x2342 = 0x13;
-Tbase TZ x2343 = x2342 * x2341;
-Tbase TZ x2344 = x2326 + x2343;
-Tbase TZ x2345 = x2313 + x2344;
-Tbase TZ x2346 = 0x1a;
-Tbase TZ x2347 = x2345 >> x2346;
-Tbase TZ x2348 = x43 * x2198;
-Tbase TZ x2349 = x44 * x2196;
-Tbase TZ x2350 = x45 * x2194;
-Tbase TZ x2351 = x46 * x2189;
-Tbase TZ x2352 = x47 * x2187;
-Tbase TZ x2353 = x48 * x2185;
-Tbase TZ x2354 = x2352 + x2353;
-Tbase TZ x2355 = x2351 + x2354;
-Tbase TZ x2356 = x2350 + x2355;
-Tbase TZ x2357 = x2349 + x2356;
-Tbase TZ x2358 = x2348 + x2357;
-Tbase TZ x2359 = x39 * x2183;
-Tbase TZ x2360 = x40 * x2181;
-Tbase TZ x2361 = x41 * x2179;
-Tbase TZ x2362 = x42 * x2177;
-Tbase TZ x2363 = x2361 + x2362;
-Tbase TZ x2364 = x2360 + x2363;
-Tbase TZ x2365 = x2359 + x2364;
-Tbase TZ x2366 = 0x13;
-Tbase TZ x2367 = x2366 * x2365;
-Tbase TZ x2368 = x2358 + x2367;
-Tbase TZ x2369 = x2347 + x2368;
-Tbase TZ x2370 = 0x19;
-Tbase TZ x2371 = x2369 >> x2370;
-Tbase TZ x2372 = x42 * x2198;
-Tbase TZ x2373 = 0x2;
-Tbase TZ x2374 = x2196 * x2373;
-Tbase TZ x2375 = x43 * x2374;
-Tbase TZ x2376 = x44 * x2194;
-Tbase TZ x2377 = 0x2;
-Tbase TZ x2378 = x2189 * x2377;
-Tbase TZ x2379 = x45 * x2378;
-Tbase TZ x2380 = x46 * x2187;
-Tbase TZ x2381 = 0x2;
-Tbase TZ x2382 = x2185 * x2381;
-Tbase TZ x2383 = x47 * x2382;
-Tbase TZ x2384 = x48 * x2183;
-Tbase TZ x2385 = x2383 + x2384;
-Tbase TZ x2386 = x2380 + x2385;
-Tbase TZ x2387 = x2379 + x2386;
-Tbase TZ x2388 = x2376 + x2387;
-Tbase TZ x2389 = x2375 + x2388;
-Tbase TZ x2390 = x2372 + x2389;
-Tbase TZ x2391 = 0x2;
-Tbase TZ x2392 = x2181 * x2391;
-Tbase TZ x2393 = x39 * x2392;
-Tbase TZ x2394 = x40 * x2179;
-Tbase TZ x2395 = 0x2;
-Tbase TZ x2396 = x2177 * x2395;
-Tbase TZ x2397 = x41 * x2396;
-Tbase TZ x2398 = x2394 + x2397;
-Tbase TZ x2399 = x2393 + x2398;
-Tbase TZ x2400 = 0x13;
-Tbase TZ x2401 = x2400 * x2399;
-Tbase TZ x2402 = x2390 + x2401;
-Tbase TZ x2403 = x2371 + x2402;
-Tbase TZ x2404 = 0x1a;
-Tbase TZ x2405 = x2403 >> x2404;
-Tbase TZ x2406 = x41 * x2198;
-Tbase TZ x2407 = x42 * x2196;
-Tbase TZ x2408 = x43 * x2194;
-Tbase TZ x2409 = x44 * x2189;
-Tbase TZ x2410 = x45 * x2187;
-Tbase TZ x2411 = x46 * x2185;
-Tbase TZ x2412 = x47 * x2183;
-Tbase TZ x2413 = x48 * x2181;
-Tbase TZ x2414 = x2412 + x2413;
-Tbase TZ x2415 = x2411 + x2414;
-Tbase TZ x2416 = x2410 + x2415;
-Tbase TZ x2417 = x2409 + x2416;
-Tbase TZ x2418 = x2408 + x2417;
-Tbase TZ x2419 = x2407 + x2418;
-Tbase TZ x2420 = x2406 + x2419;
-Tbase TZ x2421 = x39 * x2179;
-Tbase TZ x2422 = x40 * x2177;
-Tbase TZ x2423 = x2421 + x2422;
-Tbase TZ x2424 = 0x13;
-Tbase TZ x2425 = x2424 * x2423;
-Tbase TZ x2426 = x2420 + x2425;
-Tbase TZ x2427 = x2405 + x2426;
-Tbase TZ x2428 = 0x19;
-Tbase TZ x2429 = x2427 >> x2428;
-Tbase TZ x2430 = x40 * x2198;
-Tbase TZ x2431 = 0x2;
-Tbase TZ x2432 = x2196 * x2431;
-Tbase TZ x2433 = x41 * x2432;
-Tbase TZ x2434 = x42 * x2194;
-Tbase TZ x2435 = 0x2;
-Tbase TZ x2436 = x2189 * x2435;
-Tbase TZ x2437 = x43 * x2436;
-Tbase TZ x2438 = x44 * x2187;
-Tbase TZ x2439 = 0x2;
-Tbase TZ x2440 = x2185 * x2439;
-Tbase TZ x2441 = x45 * x2440;
-Tbase TZ x2442 = x46 * x2183;
-Tbase TZ x2443 = 0x2;
-Tbase TZ x2444 = x2181 * x2443;
-Tbase TZ x2445 = x47 * x2444;
-Tbase TZ x2446 = x48 * x2179;
-Tbase TZ x2447 = x2445 + x2446;
-Tbase TZ x2448 = x2442 + x2447;
-Tbase TZ x2449 = x2441 + x2448;
-Tbase TZ x2450 = x2438 + x2449;
-Tbase TZ x2451 = x2437 + x2450;
-Tbase TZ x2452 = x2434 + x2451;
-Tbase TZ x2453 = x2433 + x2452;
-Tbase TZ x2454 = x2430 + x2453;
-Tbase TZ x2455 = 0x2;
-Tbase TZ x2456 = x2177 * x2455;
-Tbase TZ x2457 = x39 * x2456;
-Tbase TZ x2458 = 0x13;
-Tbase TZ x2459 = x2458 * x2457;
-Tbase TZ x2460 = x2454 + x2459;
-Tbase TZ x2461 = x2429 + x2460;
-Tbase TZ x2462 = 0x1a;
-Tbase TZ x2463 = x2461 >> x2462;
-Tbase TZ x2464 = x39 * x2198;
-Tbase TZ x2465 = x40 * x2196;
-Tbase TZ x2466 = x41 * x2194;
-Tbase TZ x2467 = x42 * x2189;
-Tbase TZ x2468 = x43 * x2187;
-Tbase TZ x2469 = x44 * x2185;
-Tbase TZ x2470 = x45 * x2183;
-Tbase TZ x2471 = x46 * x2181;
-Tbase TZ x2472 = x47 * x2179;
-Tbase TZ x2473 = x48 * x2177;
-Tbase TZ x2474 = x2472 + x2473;
-Tbase TZ x2475 = x2471 + x2474;
-Tbase TZ x2476 = x2470 + x2475;
-Tbase TZ x2477 = x2469 + x2476;
-Tbase TZ x2478 = x2468 + x2477;
-Tbase TZ x2479 = x2467 + x2478;
-Tbase TZ x2480 = x2466 + x2479;
-Tbase TZ x2481 = x2465 + x2480;
-Tbase TZ x2482 = x2464 + x2481;
-Tbase TZ x2483 = x2463 + x2482;
-Tbase TZ x2484 = 0x19;
-Tbase TZ x2485 = x2483 >> x2484;
-Tbase TZ x2486 = 0x13;
-Tbase TZ x2487 = x2486 * x2485;
-Tbase TZ x2488 = 0x3ffffff;
-Tbase TZ x2489 = x2229 & x2488;
-Tbase TZ x2490 = x2487 + x2489;
-Tbase TZ x2491 = 0x1a;
-Tbase TZ x2492 = x2490 >> x2491;
-Tbase TZ x2493 = 0x1ffffff;
-Tbase TZ x2494 = x2253 & x2493;
-Tbase TZ x2495 = x2492 + x2494;
-Tbase TZ x2496 = 0x1ffffff;
-Tbase TZ x2497 = x2483 & x2496;
-Tbase TZ x2498 = 0x3ffffff;
-Tbase TZ x2499 = x2461 & x2498;
-Tbase TZ x2500 = 0x1ffffff;
-Tbase TZ x2501 = x2427 & x2500;
-Tbase TZ x2502 = 0x3ffffff;
-Tbase TZ x2503 = x2403 & x2502;
-Tbase TZ x2504 = 0x1ffffff;
-Tbase TZ x2505 = x2369 & x2504;
-Tbase TZ x2506 = 0x3ffffff;
-Tbase TZ x2507 = x2345 & x2506;
-Tbase TZ x2508 = 0x1ffffff;
-Tbase TZ x2509 = x2311 & x2508;
-Tbase TZ x2510 = 0x19;
-Tbase TZ x2511 = x2495 >> x2510;
-Tbase TZ x2512 = 0x3ffffff;
-Tbase TZ x2513 = x2287 & x2512;
-Tbase TZ x2514 = x2511 + x2513;
-Tbase TZ x2515 = 0x1ffffff;
-Tbase TZ x2516 = x2495 & x2515;
-Tbase TZ x2517 = 0x3ffffff;
-Tbase TZ x2518 = x2490 & x2517;
-Tbase TZ x2519 = x418 * x768;
-Tbase TZ x2520 = 0x2;
-Tbase TZ x2521 = x766 * x2520;
-Tbase TZ x2522 = x397 * x2521;
-Tbase TZ x2523 = x399 * x764;
-Tbase TZ x2524 = 0x2;
-Tbase TZ x2525 = x759 * x2524;
-Tbase TZ x2526 = x401 * x2525;
-Tbase TZ x2527 = x403 * x757;
-Tbase TZ x2528 = 0x2;
-Tbase TZ x2529 = x755 * x2528;
-Tbase TZ x2530 = x405 * x2529;
-Tbase TZ x2531 = x407 * x753;
-Tbase TZ x2532 = 0x2;
-Tbase TZ x2533 = x751 * x2532;
-Tbase TZ x2534 = x409 * x2533;
-Tbase TZ x2535 = x414 * x749;
-Tbase TZ x2536 = 0x2;
-Tbase TZ x2537 = x747 * x2536;
-Tbase TZ x2538 = x416 * x2537;
-Tbase TZ x2539 = x2535 + x2538;
-Tbase TZ x2540 = x2534 + x2539;
-Tbase TZ x2541 = x2531 + x2540;
-Tbase TZ x2542 = x2530 + x2541;
-Tbase TZ x2543 = x2527 + x2542;
-Tbase TZ x2544 = x2526 + x2543;
-Tbase TZ x2545 = x2523 + x2544;
-Tbase TZ x2546 = x2522 + x2545;
-Tbase TZ x2547 = 0x13;
-Tbase TZ x2548 = x2547 * x2546;
-Tbase TZ x2549 = x2519 + x2548;
-Tbase TZ x2550 = 0x1a;
-Tbase TZ x2551 = x2549 >> x2550;
-Tbase TZ x2552 = x416 * x768;
-Tbase TZ x2553 = x418 * x766;
-Tbase TZ x2554 = x2552 + x2553;
-Tbase TZ x2555 = x397 * x764;
-Tbase TZ x2556 = x399 * x759;
-Tbase TZ x2557 = x401 * x757;
-Tbase TZ x2558 = x403 * x755;
-Tbase TZ x2559 = x405 * x753;
-Tbase TZ x2560 = x407 * x751;
-Tbase TZ x2561 = x409 * x749;
-Tbase TZ x2562 = x414 * x747;
-Tbase TZ x2563 = x2561 + x2562;
-Tbase TZ x2564 = x2560 + x2563;
-Tbase TZ x2565 = x2559 + x2564;
-Tbase TZ x2566 = x2558 + x2565;
-Tbase TZ x2567 = x2557 + x2566;
-Tbase TZ x2568 = x2556 + x2567;
-Tbase TZ x2569 = x2555 + x2568;
-Tbase TZ x2570 = 0x13;
-Tbase TZ x2571 = x2570 * x2569;
-Tbase TZ x2572 = x2554 + x2571;
-Tbase TZ x2573 = x2551 + x2572;
-Tbase TZ x2574 = 0x19;
-Tbase TZ x2575 = x2573 >> x2574;
-Tbase TZ x2576 = x414 * x768;
-Tbase TZ x2577 = 0x2;
-Tbase TZ x2578 = x766 * x2577;
-Tbase TZ x2579 = x416 * x2578;
-Tbase TZ x2580 = x418 * x764;
-Tbase TZ x2581 = x2579 + x2580;
-Tbase TZ x2582 = x2576 + x2581;
-Tbase TZ x2583 = 0x2;
-Tbase TZ x2584 = x759 * x2583;
-Tbase TZ x2585 = x397 * x2584;
-Tbase TZ x2586 = x399 * x757;
-Tbase TZ x2587 = 0x2;
-Tbase TZ x2588 = x755 * x2587;
-Tbase TZ x2589 = x401 * x2588;
-Tbase TZ x2590 = x403 * x753;
-Tbase TZ x2591 = 0x2;
-Tbase TZ x2592 = x751 * x2591;
-Tbase TZ x2593 = x405 * x2592;
-Tbase TZ x2594 = x407 * x749;
-Tbase TZ x2595 = 0x2;
-Tbase TZ x2596 = x747 * x2595;
-Tbase TZ x2597 = x409 * x2596;
-Tbase TZ x2598 = x2594 + x2597;
-Tbase TZ x2599 = x2593 + x2598;
-Tbase TZ x2600 = x2590 + x2599;
-Tbase TZ x2601 = x2589 + x2600;
-Tbase TZ x2602 = x2586 + x2601;
-Tbase TZ x2603 = x2585 + x2602;
-Tbase TZ x2604 = 0x13;
-Tbase TZ x2605 = x2604 * x2603;
-Tbase TZ x2606 = x2582 + x2605;
-Tbase TZ x2607 = x2575 + x2606;
-Tbase TZ x2608 = 0x1a;
-Tbase TZ x2609 = x2607 >> x2608;
-Tbase TZ x2610 = x409 * x768;
-Tbase TZ x2611 = x414 * x766;
-Tbase TZ x2612 = x416 * x764;
-Tbase TZ x2613 = x418 * x759;
-Tbase TZ x2614 = x2612 + x2613;
-Tbase TZ x2615 = x2611 + x2614;
-Tbase TZ x2616 = x2610 + x2615;
-Tbase TZ x2617 = x397 * x757;
-Tbase TZ x2618 = x399 * x755;
-Tbase TZ x2619 = x401 * x753;
-Tbase TZ x2620 = x403 * x751;
-Tbase TZ x2621 = x405 * x749;
-Tbase TZ x2622 = x407 * x747;
-Tbase TZ x2623 = x2621 + x2622;
-Tbase TZ x2624 = x2620 + x2623;
-Tbase TZ x2625 = x2619 + x2624;
-Tbase TZ x2626 = x2618 + x2625;
-Tbase TZ x2627 = x2617 + x2626;
-Tbase TZ x2628 = 0x13;
-Tbase TZ x2629 = x2628 * x2627;
-Tbase TZ x2630 = x2616 + x2629;
-Tbase TZ x2631 = x2609 + x2630;
-Tbase TZ x2632 = 0x19;
-Tbase TZ x2633 = x2631 >> x2632;
-Tbase TZ x2634 = x407 * x768;
-Tbase TZ x2635 = 0x2;
-Tbase TZ x2636 = x766 * x2635;
-Tbase TZ x2637 = x409 * x2636;
-Tbase TZ x2638 = x414 * x764;
-Tbase TZ x2639 = 0x2;
-Tbase TZ x2640 = x759 * x2639;
-Tbase TZ x2641 = x416 * x2640;
-Tbase TZ x2642 = x418 * x757;
-Tbase TZ x2643 = x2641 + x2642;
-Tbase TZ x2644 = x2638 + x2643;
-Tbase TZ x2645 = x2637 + x2644;
-Tbase TZ x2646 = x2634 + x2645;
-Tbase TZ x2647 = 0x2;
-Tbase TZ x2648 = x755 * x2647;
-Tbase TZ x2649 = x397 * x2648;
-Tbase TZ x2650 = x399 * x753;
-Tbase TZ x2651 = 0x2;
-Tbase TZ x2652 = x751 * x2651;
-Tbase TZ x2653 = x401 * x2652;
-Tbase TZ x2654 = x403 * x749;
-Tbase TZ x2655 = 0x2;
-Tbase TZ x2656 = x747 * x2655;
-Tbase TZ x2657 = x405 * x2656;
-Tbase TZ x2658 = x2654 + x2657;
-Tbase TZ x2659 = x2653 + x2658;
-Tbase TZ x2660 = x2650 + x2659;
-Tbase TZ x2661 = x2649 + x2660;
-Tbase TZ x2662 = 0x13;
-Tbase TZ x2663 = x2662 * x2661;
-Tbase TZ x2664 = x2646 + x2663;
-Tbase TZ x2665 = x2633 + x2664;
-Tbase TZ x2666 = 0x1a;
-Tbase TZ x2667 = x2665 >> x2666;
-Tbase TZ x2668 = x405 * x768;
-Tbase TZ x2669 = x407 * x766;
-Tbase TZ x2670 = x409 * x764;
-Tbase TZ x2671 = x414 * x759;
-Tbase TZ x2672 = x416 * x757;
-Tbase TZ x2673 = x418 * x755;
-Tbase TZ x2674 = x2672 + x2673;
-Tbase TZ x2675 = x2671 + x2674;
-Tbase TZ x2676 = x2670 + x2675;
-Tbase TZ x2677 = x2669 + x2676;
-Tbase TZ x2678 = x2668 + x2677;
-Tbase TZ x2679 = x397 * x753;
-Tbase TZ x2680 = x399 * x751;
-Tbase TZ x2681 = x401 * x749;
-Tbase TZ x2682 = x403 * x747;
-Tbase TZ x2683 = x2681 + x2682;
-Tbase TZ x2684 = x2680 + x2683;
-Tbase TZ x2685 = x2679 + x2684;
-Tbase TZ x2686 = 0x13;
-Tbase TZ x2687 = x2686 * x2685;
-Tbase TZ x2688 = x2678 + x2687;
-Tbase TZ x2689 = x2667 + x2688;
-Tbase TZ x2690 = 0x19;
-Tbase TZ x2691 = x2689 >> x2690;
-Tbase TZ x2692 = x403 * x768;
-Tbase TZ x2693 = 0x2;
-Tbase TZ x2694 = x766 * x2693;
-Tbase TZ x2695 = x405 * x2694;
-Tbase TZ x2696 = x407 * x764;
-Tbase TZ x2697 = 0x2;
-Tbase TZ x2698 = x759 * x2697;
-Tbase TZ x2699 = x409 * x2698;
-Tbase TZ x2700 = x414 * x757;
-Tbase TZ x2701 = 0x2;
-Tbase TZ x2702 = x755 * x2701;
-Tbase TZ x2703 = x416 * x2702;
-Tbase TZ x2704 = x418 * x753;
-Tbase TZ x2705 = x2703 + x2704;
-Tbase TZ x2706 = x2700 + x2705;
-Tbase TZ x2707 = x2699 + x2706;
-Tbase TZ x2708 = x2696 + x2707;
-Tbase TZ x2709 = x2695 + x2708;
-Tbase TZ x2710 = x2692 + x2709;
-Tbase TZ x2711 = 0x2;
-Tbase TZ x2712 = x751 * x2711;
-Tbase TZ x2713 = x397 * x2712;
-Tbase TZ x2714 = x399 * x749;
-Tbase TZ x2715 = 0x2;
-Tbase TZ x2716 = x747 * x2715;
-Tbase TZ x2717 = x401 * x2716;
-Tbase TZ x2718 = x2714 + x2717;
-Tbase TZ x2719 = x2713 + x2718;
-Tbase TZ x2720 = 0x13;
-Tbase TZ x2721 = x2720 * x2719;
-Tbase TZ x2722 = x2710 + x2721;
-Tbase TZ x2723 = x2691 + x2722;
-Tbase TZ x2724 = 0x1a;
-Tbase TZ x2725 = x2723 >> x2724;
-Tbase TZ x2726 = x401 * x768;
-Tbase TZ x2727 = x403 * x766;
-Tbase TZ x2728 = x405 * x764;
-Tbase TZ x2729 = x407 * x759;
-Tbase TZ x2730 = x409 * x757;
-Tbase TZ x2731 = x414 * x755;
-Tbase TZ x2732 = x416 * x753;
-Tbase TZ x2733 = x418 * x751;
-Tbase TZ x2734 = x2732 + x2733;
-Tbase TZ x2735 = x2731 + x2734;
-Tbase TZ x2736 = x2730 + x2735;
-Tbase TZ x2737 = x2729 + x2736;
-Tbase TZ x2738 = x2728 + x2737;
-Tbase TZ x2739 = x2727 + x2738;
-Tbase TZ x2740 = x2726 + x2739;
-Tbase TZ x2741 = x397 * x749;
-Tbase TZ x2742 = x399 * x747;
-Tbase TZ x2743 = x2741 + x2742;
-Tbase TZ x2744 = 0x13;
-Tbase TZ x2745 = x2744 * x2743;
-Tbase TZ x2746 = x2740 + x2745;
-Tbase TZ x2747 = x2725 + x2746;
-Tbase TZ x2748 = 0x19;
-Tbase TZ x2749 = x2747 >> x2748;
-Tbase TZ x2750 = x399 * x768;
-Tbase TZ x2751 = 0x2;
-Tbase TZ x2752 = x766 * x2751;
-Tbase TZ x2753 = x401 * x2752;
-Tbase TZ x2754 = x403 * x764;
-Tbase TZ x2755 = 0x2;
-Tbase TZ x2756 = x759 * x2755;
-Tbase TZ x2757 = x405 * x2756;
-Tbase TZ x2758 = x407 * x757;
-Tbase TZ x2759 = 0x2;
-Tbase TZ x2760 = x755 * x2759;
-Tbase TZ x2761 = x409 * x2760;
-Tbase TZ x2762 = x414 * x753;
-Tbase TZ x2763 = 0x2;
-Tbase TZ x2764 = x751 * x2763;
-Tbase TZ x2765 = x416 * x2764;
-Tbase TZ x2766 = x418 * x749;
-Tbase TZ x2767 = x2765 + x2766;
-Tbase TZ x2768 = x2762 + x2767;
-Tbase TZ x2769 = x2761 + x2768;
-Tbase TZ x2770 = x2758 + x2769;
-Tbase TZ x2771 = x2757 + x2770;
-Tbase TZ x2772 = x2754 + x2771;
-Tbase TZ x2773 = x2753 + x2772;
-Tbase TZ x2774 = x2750 + x2773;
-Tbase TZ x2775 = 0x2;
-Tbase TZ x2776 = x747 * x2775;
-Tbase TZ x2777 = x397 * x2776;
-Tbase TZ x2778 = 0x13;
-Tbase TZ x2779 = x2778 * x2777;
-Tbase TZ x2780 = x2774 + x2779;
-Tbase TZ x2781 = x2749 + x2780;
-Tbase TZ x2782 = 0x1a;
-Tbase TZ x2783 = x2781 >> x2782;
-Tbase TZ x2784 = x397 * x768;
-Tbase TZ x2785 = x399 * x766;
-Tbase TZ x2786 = x401 * x764;
-Tbase TZ x2787 = x403 * x759;
-Tbase TZ x2788 = x405 * x757;
-Tbase TZ x2789 = x407 * x755;
-Tbase TZ x2790 = x409 * x753;
-Tbase TZ x2791 = x414 * x751;
-Tbase TZ x2792 = x416 * x749;
-Tbase TZ x2793 = x418 * x747;
-Tbase TZ x2794 = x2792 + x2793;
-Tbase TZ x2795 = x2791 + x2794;
-Tbase TZ x2796 = x2790 + x2795;
-Tbase TZ x2797 = x2789 + x2796;
-Tbase TZ x2798 = x2788 + x2797;
-Tbase TZ x2799 = x2787 + x2798;
-Tbase TZ x2800 = x2786 + x2799;
-Tbase TZ x2801 = x2785 + x2800;
-Tbase TZ x2802 = x2784 + x2801;
-Tbase TZ x2803 = x2783 + x2802;
-Tbase TZ x2804 = 0x19;
-Tbase TZ x2805 = x2803 >> x2804;
-Tbase TZ x2806 = 0x13;
-Tbase TZ x2807 = x2806 * x2805;
-Tbase TZ x2808 = 0x3ffffff;
-Tbase TZ x2809 = x2549 & x2808;
-Tbase TZ x2810 = x2807 + x2809;
-Tbase TZ x2811 = 0x1a;
-Tbase TZ x2812 = x2810 >> x2811;
-Tbase TZ x2813 = 0x1ffffff;
-Tbase TZ x2814 = x2573 & x2813;
-Tbase TZ x2815 = x2812 + x2814;
-Tbase TZ x2816 = 0x1ffffff;
-Tbase TZ x2817 = x2803 & x2816;
-Tbase TZ x2818 = 0x3ffffff;
-Tbase TZ x2819 = x2781 & x2818;
-Tbase TZ x2820 = 0x1ffffff;
-Tbase TZ x2821 = x2747 & x2820;
-Tbase TZ x2822 = 0x3ffffff;
-Tbase TZ x2823 = x2723 & x2822;
-Tbase TZ x2824 = 0x1ffffff;
-Tbase TZ x2825 = x2689 & x2824;
-Tbase TZ x2826 = 0x3ffffff;
-Tbase TZ x2827 = x2665 & x2826;
-Tbase TZ x2828 = 0x1ffffff;
-Tbase TZ x2829 = x2631 & x2828;
-Tbase TZ x2830 = 0x19;
-Tbase TZ x2831 = x2815 >> x2830;
-Tbase TZ x2832 = 0x3ffffff;
-Tbase TZ x2833 = x2607 & x2832;
-Tbase TZ x2834 = x2831 + x2833;
-Tbase TZ x2835 = 0x1ffffff;
-Tbase TZ x2836 = x2815 & x2835;
-Tbase TZ x2837 = 0x3ffffff;
-Tbase TZ x2838 = x2810 & x2837;
-Tbase TZ x2839 = x38 * x798;
-Tbase TZ x2840 = 0x2;
-Tbase TZ x2841 = x795 * x2840;
-Tbase TZ x2842 = x29 * x2841;
-Tbase TZ x2843 = x30 * x792;
-Tbase TZ x2844 = 0x2;
-Tbase TZ x2845 = x789 * x2844;
-Tbase TZ x2846 = x31 * x2845;
-Tbase TZ x2847 = x32 * x786;
-Tbase TZ x2848 = 0x2;
-Tbase TZ x2849 = x783 * x2848;
-Tbase TZ x2850 = x33 * x2849;
-Tbase TZ x2851 = x34 * x780;
-Tbase TZ x2852 = 0x2;
-Tbase TZ x2853 = x777 * x2852;
-Tbase TZ x2854 = x35 * x2853;
-Tbase TZ x2855 = x36 * x774;
-Tbase TZ x2856 = 0x2;
-Tbase TZ x2857 = x771 * x2856;
-Tbase TZ x2858 = x37 * x2857;
-Tbase TZ x2859 = x2855 + x2858;
-Tbase TZ x2860 = x2854 + x2859;
-Tbase TZ x2861 = x2851 + x2860;
-Tbase TZ x2862 = x2850 + x2861;
-Tbase TZ x2863 = x2847 + x2862;
-Tbase TZ x2864 = x2846 + x2863;
-Tbase TZ x2865 = x2843 + x2864;
-Tbase TZ x2866 = x2842 + x2865;
-Tbase TZ x2867 = 0x13;
-Tbase TZ x2868 = x2867 * x2866;
-Tbase TZ x2869 = x2839 + x2868;
-Tbase TZ x2870 = 0x1a;
-Tbase TZ x2871 = x2869 >> x2870;
-Tbase TZ x2872 = x37 * x798;
-Tbase TZ x2873 = x38 * x795;
-Tbase TZ x2874 = x2872 + x2873;
-Tbase TZ x2875 = x29 * x792;
-Tbase TZ x2876 = x30 * x789;
-Tbase TZ x2877 = x31 * x786;
-Tbase TZ x2878 = x32 * x783;
-Tbase TZ x2879 = x33 * x780;
-Tbase TZ x2880 = x34 * x777;
-Tbase TZ x2881 = x35 * x774;
-Tbase TZ x2882 = x36 * x771;
-Tbase TZ x2883 = x2881 + x2882;
-Tbase TZ x2884 = x2880 + x2883;
-Tbase TZ x2885 = x2879 + x2884;
-Tbase TZ x2886 = x2878 + x2885;
-Tbase TZ x2887 = x2877 + x2886;
-Tbase TZ x2888 = x2876 + x2887;
-Tbase TZ x2889 = x2875 + x2888;
-Tbase TZ x2890 = 0x13;
-Tbase TZ x2891 = x2890 * x2889;
-Tbase TZ x2892 = x2874 + x2891;
-Tbase TZ x2893 = x2871 + x2892;
-Tbase TZ x2894 = 0x19;
-Tbase TZ x2895 = x2893 >> x2894;
-Tbase TZ x2896 = x36 * x798;
-Tbase TZ x2897 = 0x2;
-Tbase TZ x2898 = x795 * x2897;
-Tbase TZ x2899 = x37 * x2898;
-Tbase TZ x2900 = x38 * x792;
-Tbase TZ x2901 = x2899 + x2900;
-Tbase TZ x2902 = x2896 + x2901;
-Tbase TZ x2903 = 0x2;
-Tbase TZ x2904 = x789 * x2903;
-Tbase TZ x2905 = x29 * x2904;
-Tbase TZ x2906 = x30 * x786;
-Tbase TZ x2907 = 0x2;
-Tbase TZ x2908 = x783 * x2907;
-Tbase TZ x2909 = x31 * x2908;
-Tbase TZ x2910 = x32 * x780;
-Tbase TZ x2911 = 0x2;
-Tbase TZ x2912 = x777 * x2911;
-Tbase TZ x2913 = x33 * x2912;
-Tbase TZ x2914 = x34 * x774;
-Tbase TZ x2915 = 0x2;
-Tbase TZ x2916 = x771 * x2915;
-Tbase TZ x2917 = x35 * x2916;
-Tbase TZ x2918 = x2914 + x2917;
-Tbase TZ x2919 = x2913 + x2918;
-Tbase TZ x2920 = x2910 + x2919;
-Tbase TZ x2921 = x2909 + x2920;
-Tbase TZ x2922 = x2906 + x2921;
-Tbase TZ x2923 = x2905 + x2922;
-Tbase TZ x2924 = 0x13;
-Tbase TZ x2925 = x2924 * x2923;
-Tbase TZ x2926 = x2902 + x2925;
-Tbase TZ x2927 = x2895 + x2926;
-Tbase TZ x2928 = 0x1a;
-Tbase TZ x2929 = x2927 >> x2928;
-Tbase TZ x2930 = x35 * x798;
-Tbase TZ x2931 = x36 * x795;
-Tbase TZ x2932 = x37 * x792;
-Tbase TZ x2933 = x38 * x789;
-Tbase TZ x2934 = x2932 + x2933;
-Tbase TZ x2935 = x2931 + x2934;
-Tbase TZ x2936 = x2930 + x2935;
-Tbase TZ x2937 = x29 * x786;
-Tbase TZ x2938 = x30 * x783;
-Tbase TZ x2939 = x31 * x780;
-Tbase TZ x2940 = x32 * x777;
-Tbase TZ x2941 = x33 * x774;
-Tbase TZ x2942 = x34 * x771;
-Tbase TZ x2943 = x2941 + x2942;
-Tbase TZ x2944 = x2940 + x2943;
-Tbase TZ x2945 = x2939 + x2944;
-Tbase TZ x2946 = x2938 + x2945;
-Tbase TZ x2947 = x2937 + x2946;
-Tbase TZ x2948 = 0x13;
-Tbase TZ x2949 = x2948 * x2947;
-Tbase TZ x2950 = x2936 + x2949;
-Tbase TZ x2951 = x2929 + x2950;
-Tbase TZ x2952 = 0x19;
-Tbase TZ x2953 = x2951 >> x2952;
-Tbase TZ x2954 = x34 * x798;
-Tbase TZ x2955 = 0x2;
-Tbase TZ x2956 = x795 * x2955;
-Tbase TZ x2957 = x35 * x2956;
-Tbase TZ x2958 = x36 * x792;
-Tbase TZ x2959 = 0x2;
-Tbase TZ x2960 = x789 * x2959;
-Tbase TZ x2961 = x37 * x2960;
-Tbase TZ x2962 = x38 * x786;
-Tbase TZ x2963 = x2961 + x2962;
-Tbase TZ x2964 = x2958 + x2963;
-Tbase TZ x2965 = x2957 + x2964;
-Tbase TZ x2966 = x2954 + x2965;
-Tbase TZ x2967 = 0x2;
-Tbase TZ x2968 = x783 * x2967;
-Tbase TZ x2969 = x29 * x2968;
-Tbase TZ x2970 = x30 * x780;
-Tbase TZ x2971 = 0x2;
-Tbase TZ x2972 = x777 * x2971;
-Tbase TZ x2973 = x31 * x2972;
-Tbase TZ x2974 = x32 * x774;
-Tbase TZ x2975 = 0x2;
-Tbase TZ x2976 = x771 * x2975;
-Tbase TZ x2977 = x33 * x2976;
-Tbase TZ x2978 = x2974 + x2977;
-Tbase TZ x2979 = x2973 + x2978;
-Tbase TZ x2980 = x2970 + x2979;
-Tbase TZ x2981 = x2969 + x2980;
-Tbase TZ x2982 = 0x13;
-Tbase TZ x2983 = x2982 * x2981;
-Tbase TZ x2984 = x2966 + x2983;
-Tbase TZ x2985 = x2953 + x2984;
-Tbase TZ x2986 = 0x1a;
-Tbase TZ x2987 = x2985 >> x2986;
-Tbase TZ x2988 = x33 * x798;
-Tbase TZ x2989 = x34 * x795;
-Tbase TZ x2990 = x35 * x792;
-Tbase TZ x2991 = x36 * x789;
-Tbase TZ x2992 = x37 * x786;
-Tbase TZ x2993 = x38 * x783;
-Tbase TZ x2994 = x2992 + x2993;
-Tbase TZ x2995 = x2991 + x2994;
-Tbase TZ x2996 = x2990 + x2995;
-Tbase TZ x2997 = x2989 + x2996;
-Tbase TZ x2998 = x2988 + x2997;
-Tbase TZ x2999 = x29 * x780;
-Tbase TZ x3000 = x30 * x777;
-Tbase TZ x3001 = x31 * x774;
-Tbase TZ x3002 = x32 * x771;
-Tbase TZ x3003 = x3001 + x3002;
-Tbase TZ x3004 = x3000 + x3003;
-Tbase TZ x3005 = x2999 + x3004;
-Tbase TZ x3006 = 0x13;
-Tbase TZ x3007 = x3006 * x3005;
-Tbase TZ x3008 = x2998 + x3007;
-Tbase TZ x3009 = x2987 + x3008;
-Tbase TZ x3010 = 0x19;
-Tbase TZ x3011 = x3009 >> x3010;
-Tbase TZ x3012 = x32 * x798;
-Tbase TZ x3013 = 0x2;
-Tbase TZ x3014 = x795 * x3013;
-Tbase TZ x3015 = x33 * x3014;
-Tbase TZ x3016 = x34 * x792;
-Tbase TZ x3017 = 0x2;
-Tbase TZ x3018 = x789 * x3017;
-Tbase TZ x3019 = x35 * x3018;
-Tbase TZ x3020 = x36 * x786;
-Tbase TZ x3021 = 0x2;
-Tbase TZ x3022 = x783 * x3021;
-Tbase TZ x3023 = x37 * x3022;
-Tbase TZ x3024 = x38 * x780;
-Tbase TZ x3025 = x3023 + x3024;
-Tbase TZ x3026 = x3020 + x3025;
-Tbase TZ x3027 = x3019 + x3026;
-Tbase TZ x3028 = x3016 + x3027;
-Tbase TZ x3029 = x3015 + x3028;
-Tbase TZ x3030 = x3012 + x3029;
-Tbase TZ x3031 = 0x2;
-Tbase TZ x3032 = x777 * x3031;
-Tbase TZ x3033 = x29 * x3032;
-Tbase TZ x3034 = x30 * x774;
-Tbase TZ x3035 = 0x2;
-Tbase TZ x3036 = x771 * x3035;
-Tbase TZ x3037 = x31 * x3036;
-Tbase TZ x3038 = x3034 + x3037;
-Tbase TZ x3039 = x3033 + x3038;
-Tbase TZ x3040 = 0x13;
-Tbase TZ x3041 = x3040 * x3039;
-Tbase TZ x3042 = x3030 + x3041;
-Tbase TZ x3043 = x3011 + x3042;
-Tbase TZ x3044 = 0x1a;
-Tbase TZ x3045 = x3043 >> x3044;
-Tbase TZ x3046 = x31 * x798;
-Tbase TZ x3047 = x32 * x795;
-Tbase TZ x3048 = x33 * x792;
-Tbase TZ x3049 = x34 * x789;
-Tbase TZ x3050 = x35 * x786;
-Tbase TZ x3051 = x36 * x783;
-Tbase TZ x3052 = x37 * x780;
-Tbase TZ x3053 = x38 * x777;
-Tbase TZ x3054 = x3052 + x3053;
-Tbase TZ x3055 = x3051 + x3054;
-Tbase TZ x3056 = x3050 + x3055;
-Tbase TZ x3057 = x3049 + x3056;
-Tbase TZ x3058 = x3048 + x3057;
-Tbase TZ x3059 = x3047 + x3058;
-Tbase TZ x3060 = x3046 + x3059;
-Tbase TZ x3061 = x29 * x774;
-Tbase TZ x3062 = x30 * x771;
-Tbase TZ x3063 = x3061 + x3062;
-Tbase TZ x3064 = 0x13;
-Tbase TZ x3065 = x3064 * x3063;
-Tbase TZ x3066 = x3060 + x3065;
-Tbase TZ x3067 = x3045 + x3066;
-Tbase TZ x3068 = 0x19;
-Tbase TZ x3069 = x3067 >> x3068;
-Tbase TZ x3070 = x30 * x798;
-Tbase TZ x3071 = 0x2;
-Tbase TZ x3072 = x795 * x3071;
-Tbase TZ x3073 = x31 * x3072;
-Tbase TZ x3074 = x32 * x792;
-Tbase TZ x3075 = 0x2;
-Tbase TZ x3076 = x789 * x3075;
-Tbase TZ x3077 = x33 * x3076;
-Tbase TZ x3078 = x34 * x786;
-Tbase TZ x3079 = 0x2;
-Tbase TZ x3080 = x783 * x3079;
-Tbase TZ x3081 = x35 * x3080;
-Tbase TZ x3082 = x36 * x780;
-Tbase TZ x3083 = 0x2;
-Tbase TZ x3084 = x777 * x3083;
-Tbase TZ x3085 = x37 * x3084;
-Tbase TZ x3086 = x38 * x774;
-Tbase TZ x3087 = x3085 + x3086;
-Tbase TZ x3088 = x3082 + x3087;
-Tbase TZ x3089 = x3081 + x3088;
-Tbase TZ x3090 = x3078 + x3089;
-Tbase TZ x3091 = x3077 + x3090;
-Tbase TZ x3092 = x3074 + x3091;
-Tbase TZ x3093 = x3073 + x3092;
-Tbase TZ x3094 = x3070 + x3093;
-Tbase TZ x3095 = 0x2;
-Tbase TZ x3096 = x771 * x3095;
-Tbase TZ x3097 = x29 * x3096;
-Tbase TZ x3098 = 0x13;
-Tbase TZ x3099 = x3098 * x3097;
-Tbase TZ x3100 = x3094 + x3099;
-Tbase TZ x3101 = x3069 + x3100;
-Tbase TZ x3102 = 0x1a;
-Tbase TZ x3103 = x3101 >> x3102;
-Tbase TZ x3104 = x29 * x798;
-Tbase TZ x3105 = x30 * x795;
-Tbase TZ x3106 = x31 * x792;
-Tbase TZ x3107 = x32 * x789;
-Tbase TZ x3108 = x33 * x786;
-Tbase TZ x3109 = x34 * x783;
-Tbase TZ x3110 = x35 * x780;
-Tbase TZ x3111 = x36 * x777;
-Tbase TZ x3112 = x37 * x774;
-Tbase TZ x3113 = x38 * x771;
-Tbase TZ x3114 = x3112 + x3113;
-Tbase TZ x3115 = x3111 + x3114;
-Tbase TZ x3116 = x3110 + x3115;
-Tbase TZ x3117 = x3109 + x3116;
-Tbase TZ x3118 = x3108 + x3117;
-Tbase TZ x3119 = x3107 + x3118;
-Tbase TZ x3120 = x3106 + x3119;
-Tbase TZ x3121 = x3105 + x3120;
-Tbase TZ x3122 = x3104 + x3121;
-Tbase TZ x3123 = x3103 + x3122;
-Tbase TZ x3124 = 0x19;
-Tbase TZ x3125 = x3123 >> x3124;
-Tbase TZ x3126 = 0x13;
-Tbase TZ x3127 = x3126 * x3125;
-Tbase TZ x3128 = 0x3ffffff;
-Tbase TZ x3129 = x2869 & x3128;
-Tbase TZ x3130 = x3127 + x3129;
-Tbase TZ x3131 = 0x1a;
-Tbase TZ x3132 = x3130 >> x3131;
-Tbase TZ x3133 = 0x1ffffff;
-Tbase TZ x3134 = x2893 & x3133;
-Tbase TZ x3135 = x3132 + x3134;
-Tbase TZ x3136 = 0x1ffffff;
-Tbase TZ x3137 = x3123 & x3136;
-Tbase TZ x3138 = 0x3ffffff;
-Tbase TZ x3139 = x3101 & x3138;
-Tbase TZ x3140 = 0x1ffffff;
-Tbase TZ x3141 = x3067 & x3140;
-Tbase TZ x3142 = 0x3ffffff;
-Tbase TZ x3143 = x3043 & x3142;
-Tbase TZ x3144 = 0x1ffffff;
-Tbase TZ x3145 = x3009 & x3144;
-Tbase TZ x3146 = 0x3ffffff;
-Tbase TZ x3147 = x2985 & x3146;
-Tbase TZ x3148 = 0x1ffffff;
-Tbase TZ x3149 = x2951 & x3148;
-Tbase TZ x3150 = 0x19;
-Tbase TZ x3151 = x3135 >> x3150;
-Tbase TZ x3152 = 0x3ffffff;
-Tbase TZ x3153 = x2927 & x3152;
-Tbase TZ x3154 = x3151 + x3153;
-Tbase TZ x3155 = 0x1ffffff;
-Tbase TZ x3156 = x3135 & x3155;
-Tbase TZ x3157 = 0x3ffffff;
-Tbase TZ x3158 = x3130 & x3157;
-Tbase TZ x3159 = x397 + x3137;
-Tbase TZ x3160 = x399 + x3139;
-Tbase TZ x3161 = x401 + x3141;
-Tbase TZ x3162 = x403 + x3143;
-Tbase TZ x3163 = x405 + x3145;
-Tbase TZ x3164 = x407 + x3147;
-Tbase TZ x3165 = x409 + x3149;
-Tbase TZ x3166 = x414 + x3154;
-Tbase TZ x3167 = x416 + x3156;
-Tbase TZ x3168 = x418 + x3158;
-Tbase TZ x3169 = x798 * x3168;
-Tbase TZ x3170 = 0x2;
-Tbase TZ x3171 = x3167 * x3170;
-Tbase TZ x3172 = x771 * x3171;
-Tbase TZ x3173 = x774 * x3166;
-Tbase TZ x3174 = 0x2;
-Tbase TZ x3175 = x3165 * x3174;
-Tbase TZ x3176 = x777 * x3175;
-Tbase TZ x3177 = x780 * x3164;
-Tbase TZ x3178 = 0x2;
-Tbase TZ x3179 = x3163 * x3178;
-Tbase TZ x3180 = x783 * x3179;
-Tbase TZ x3181 = x786 * x3162;
-Tbase TZ x3182 = 0x2;
-Tbase TZ x3183 = x3161 * x3182;
-Tbase TZ x3184 = x789 * x3183;
-Tbase TZ x3185 = x792 * x3160;
-Tbase TZ x3186 = 0x2;
-Tbase TZ x3187 = x3159 * x3186;
-Tbase TZ x3188 = x795 * x3187;
-Tbase TZ x3189 = x3185 + x3188;
-Tbase TZ x3190 = x3184 + x3189;
-Tbase TZ x3191 = x3181 + x3190;
-Tbase TZ x3192 = x3180 + x3191;
-Tbase TZ x3193 = x3177 + x3192;
-Tbase TZ x3194 = x3176 + x3193;
-Tbase TZ x3195 = x3173 + x3194;
-Tbase TZ x3196 = x3172 + x3195;
-Tbase TZ x3197 = 0x13;
-Tbase TZ x3198 = x3197 * x3196;
-Tbase TZ x3199 = x3169 + x3198;
-Tbase TZ x3200 = 0x1a;
-Tbase TZ x3201 = x3199 >> x3200;
-Tbase TZ x3202 = x795 * x3168;
-Tbase TZ x3203 = x798 * x3167;
-Tbase TZ x3204 = x3202 + x3203;
-Tbase TZ x3205 = x771 * x3166;
-Tbase TZ x3206 = x774 * x3165;
-Tbase TZ x3207 = x777 * x3164;
-Tbase TZ x3208 = x780 * x3163;
-Tbase TZ x3209 = x783 * x3162;
-Tbase TZ x3210 = x786 * x3161;
-Tbase TZ x3211 = x789 * x3160;
-Tbase TZ x3212 = x792 * x3159;
-Tbase TZ x3213 = x3211 + x3212;
-Tbase TZ x3214 = x3210 + x3213;
-Tbase TZ x3215 = x3209 + x3214;
-Tbase TZ x3216 = x3208 + x3215;
-Tbase TZ x3217 = x3207 + x3216;
-Tbase TZ x3218 = x3206 + x3217;
-Tbase TZ x3219 = x3205 + x3218;
-Tbase TZ x3220 = 0x13;
-Tbase TZ x3221 = x3220 * x3219;
-Tbase TZ x3222 = x3204 + x3221;
-Tbase TZ x3223 = x3201 + x3222;
-Tbase TZ x3224 = 0x19;
-Tbase TZ x3225 = x3223 >> x3224;
-Tbase TZ x3226 = x792 * x3168;
-Tbase TZ x3227 = 0x2;
-Tbase TZ x3228 = x3167 * x3227;
-Tbase TZ x3229 = x795 * x3228;
-Tbase TZ x3230 = x798 * x3166;
-Tbase TZ x3231 = x3229 + x3230;
-Tbase TZ x3232 = x3226 + x3231;
-Tbase TZ x3233 = 0x2;
-Tbase TZ x3234 = x3165 * x3233;
-Tbase TZ x3235 = x771 * x3234;
-Tbase TZ x3236 = x774 * x3164;
-Tbase TZ x3237 = 0x2;
-Tbase TZ x3238 = x3163 * x3237;
-Tbase TZ x3239 = x777 * x3238;
-Tbase TZ x3240 = x780 * x3162;
-Tbase TZ x3241 = 0x2;
-Tbase TZ x3242 = x3161 * x3241;
-Tbase TZ x3243 = x783 * x3242;
-Tbase TZ x3244 = x786 * x3160;
-Tbase TZ x3245 = 0x2;
-Tbase TZ x3246 = x3159 * x3245;
-Tbase TZ x3247 = x789 * x3246;
-Tbase TZ x3248 = x3244 + x3247;
-Tbase TZ x3249 = x3243 + x3248;
-Tbase TZ x3250 = x3240 + x3249;
-Tbase TZ x3251 = x3239 + x3250;
-Tbase TZ x3252 = x3236 + x3251;
-Tbase TZ x3253 = x3235 + x3252;
-Tbase TZ x3254 = 0x13;
-Tbase TZ x3255 = x3254 * x3253;
-Tbase TZ x3256 = x3232 + x3255;
-Tbase TZ x3257 = x3225 + x3256;
-Tbase TZ x3258 = 0x1a;
-Tbase TZ x3259 = x3257 >> x3258;
-Tbase TZ x3260 = x789 * x3168;
-Tbase TZ x3261 = x792 * x3167;
-Tbase TZ x3262 = x795 * x3166;
-Tbase TZ x3263 = x798 * x3165;
-Tbase TZ x3264 = x3262 + x3263;
-Tbase TZ x3265 = x3261 + x3264;
-Tbase TZ x3266 = x3260 + x3265;
-Tbase TZ x3267 = x771 * x3164;
-Tbase TZ x3268 = x774 * x3163;
-Tbase TZ x3269 = x777 * x3162;
-Tbase TZ x3270 = x780 * x3161;
-Tbase TZ x3271 = x783 * x3160;
-Tbase TZ x3272 = x786 * x3159;
-Tbase TZ x3273 = x3271 + x3272;
-Tbase TZ x3274 = x3270 + x3273;
-Tbase TZ x3275 = x3269 + x3274;
-Tbase TZ x3276 = x3268 + x3275;
-Tbase TZ x3277 = x3267 + x3276;
-Tbase TZ x3278 = 0x13;
-Tbase TZ x3279 = x3278 * x3277;
-Tbase TZ x3280 = x3266 + x3279;
-Tbase TZ x3281 = x3259 + x3280;
-Tbase TZ x3282 = 0x19;
-Tbase TZ x3283 = x3281 >> x3282;
-Tbase TZ x3284 = x786 * x3168;
-Tbase TZ x3285 = 0x2;
-Tbase TZ x3286 = x3167 * x3285;
-Tbase TZ x3287 = x789 * x3286;
-Tbase TZ x3288 = x792 * x3166;
-Tbase TZ x3289 = 0x2;
-Tbase TZ x3290 = x3165 * x3289;
-Tbase TZ x3291 = x795 * x3290;
-Tbase TZ x3292 = x798 * x3164;
-Tbase TZ x3293 = x3291 + x3292;
-Tbase TZ x3294 = x3288 + x3293;
-Tbase TZ x3295 = x3287 + x3294;
-Tbase TZ x3296 = x3284 + x3295;
-Tbase TZ x3297 = 0x2;
-Tbase TZ x3298 = x3163 * x3297;
-Tbase TZ x3299 = x771 * x3298;
-Tbase TZ x3300 = x774 * x3162;
-Tbase TZ x3301 = 0x2;
-Tbase TZ x3302 = x3161 * x3301;
-Tbase TZ x3303 = x777 * x3302;
-Tbase TZ x3304 = x780 * x3160;
-Tbase TZ x3305 = 0x2;
-Tbase TZ x3306 = x3159 * x3305;
-Tbase TZ x3307 = x783 * x3306;
-Tbase TZ x3308 = x3304 + x3307;
-Tbase TZ x3309 = x3303 + x3308;
-Tbase TZ x3310 = x3300 + x3309;
-Tbase TZ x3311 = x3299 + x3310;
-Tbase TZ x3312 = 0x13;
-Tbase TZ x3313 = x3312 * x3311;
-Tbase TZ x3314 = x3296 + x3313;
-Tbase TZ x3315 = x3283 + x3314;
-Tbase TZ x3316 = 0x1a;
-Tbase TZ x3317 = x3315 >> x3316;
-Tbase TZ x3318 = x783 * x3168;
-Tbase TZ x3319 = x786 * x3167;
-Tbase TZ x3320 = x789 * x3166;
-Tbase TZ x3321 = x792 * x3165;
-Tbase TZ x3322 = x795 * x3164;
-Tbase TZ x3323 = x798 * x3163;
-Tbase TZ x3324 = x3322 + x3323;
-Tbase TZ x3325 = x3321 + x3324;
-Tbase TZ x3326 = x3320 + x3325;
-Tbase TZ x3327 = x3319 + x3326;
-Tbase TZ x3328 = x3318 + x3327;
-Tbase TZ x3329 = x771 * x3162;
-Tbase TZ x3330 = x774 * x3161;
-Tbase TZ x3331 = x777 * x3160;
-Tbase TZ x3332 = x780 * x3159;
-Tbase TZ x3333 = x3331 + x3332;
-Tbase TZ x3334 = x3330 + x3333;
-Tbase TZ x3335 = x3329 + x3334;
-Tbase TZ x3336 = 0x13;
-Tbase TZ x3337 = x3336 * x3335;
-Tbase TZ x3338 = x3328 + x3337;
-Tbase TZ x3339 = x3317 + x3338;
-Tbase TZ x3340 = 0x19;
-Tbase TZ x3341 = x3339 >> x3340;
-Tbase TZ x3342 = x780 * x3168;
-Tbase TZ x3343 = 0x2;
-Tbase TZ x3344 = x3167 * x3343;
-Tbase TZ x3345 = x783 * x3344;
-Tbase TZ x3346 = x786 * x3166;
-Tbase TZ x3347 = 0x2;
-Tbase TZ x3348 = x3165 * x3347;
-Tbase TZ x3349 = x789 * x3348;
-Tbase TZ x3350 = x792 * x3164;
-Tbase TZ x3351 = 0x2;
-Tbase TZ x3352 = x3163 * x3351;
-Tbase TZ x3353 = x795 * x3352;
-Tbase TZ x3354 = x798 * x3162;
-Tbase TZ x3355 = x3353 + x3354;
-Tbase TZ x3356 = x3350 + x3355;
-Tbase TZ x3357 = x3349 + x3356;
-Tbase TZ x3358 = x3346 + x3357;
-Tbase TZ x3359 = x3345 + x3358;
-Tbase TZ x3360 = x3342 + x3359;
-Tbase TZ x3361 = 0x2;
-Tbase TZ x3362 = x3161 * x3361;
-Tbase TZ x3363 = x771 * x3362;
-Tbase TZ x3364 = x774 * x3160;
-Tbase TZ x3365 = 0x2;
-Tbase TZ x3366 = x3159 * x3365;
-Tbase TZ x3367 = x777 * x3366;
-Tbase TZ x3368 = x3364 + x3367;
-Tbase TZ x3369 = x3363 + x3368;
-Tbase TZ x3370 = 0x13;
-Tbase TZ x3371 = x3370 * x3369;
-Tbase TZ x3372 = x3360 + x3371;
-Tbase TZ x3373 = x3341 + x3372;
-Tbase TZ x3374 = 0x1a;
-Tbase TZ x3375 = x3373 >> x3374;
-Tbase TZ x3376 = x777 * x3168;
-Tbase TZ x3377 = x780 * x3167;
-Tbase TZ x3378 = x783 * x3166;
-Tbase TZ x3379 = x786 * x3165;
-Tbase TZ x3380 = x789 * x3164;
-Tbase TZ x3381 = x792 * x3163;
-Tbase TZ x3382 = x795 * x3162;
-Tbase TZ x3383 = x798 * x3161;
-Tbase TZ x3384 = x3382 + x3383;
-Tbase TZ x3385 = x3381 + x3384;
-Tbase TZ x3386 = x3380 + x3385;
-Tbase TZ x3387 = x3379 + x3386;
-Tbase TZ x3388 = x3378 + x3387;
-Tbase TZ x3389 = x3377 + x3388;
-Tbase TZ x3390 = x3376 + x3389;
-Tbase TZ x3391 = x771 * x3160;
-Tbase TZ x3392 = x774 * x3159;
-Tbase TZ x3393 = x3391 + x3392;
-Tbase TZ x3394 = 0x13;
-Tbase TZ x3395 = x3394 * x3393;
-Tbase TZ x3396 = x3390 + x3395;
-Tbase TZ x3397 = x3375 + x3396;
-Tbase TZ x3398 = 0x19;
-Tbase TZ x3399 = x3397 >> x3398;
-Tbase TZ x3400 = x774 * x3168;
-Tbase TZ x3401 = 0x2;
-Tbase TZ x3402 = x3167 * x3401;
-Tbase TZ x3403 = x777 * x3402;
-Tbase TZ x3404 = x780 * x3166;
-Tbase TZ x3405 = 0x2;
-Tbase TZ x3406 = x3165 * x3405;
-Tbase TZ x3407 = x783 * x3406;
-Tbase TZ x3408 = x786 * x3164;
-Tbase TZ x3409 = 0x2;
-Tbase TZ x3410 = x3163 * x3409;
-Tbase TZ x3411 = x789 * x3410;
-Tbase TZ x3412 = x792 * x3162;
-Tbase TZ x3413 = 0x2;
-Tbase TZ x3414 = x3161 * x3413;
-Tbase TZ x3415 = x795 * x3414;
-Tbase TZ x3416 = x798 * x3160;
-Tbase TZ x3417 = x3415 + x3416;
-Tbase TZ x3418 = x3412 + x3417;
-Tbase TZ x3419 = x3411 + x3418;
-Tbase TZ x3420 = x3408 + x3419;
-Tbase TZ x3421 = x3407 + x3420;
-Tbase TZ x3422 = x3404 + x3421;
-Tbase TZ x3423 = x3403 + x3422;
-Tbase TZ x3424 = x3400 + x3423;
-Tbase TZ x3425 = 0x2;
-Tbase TZ x3426 = x3159 * x3425;
-Tbase TZ x3427 = x771 * x3426;
-Tbase TZ x3428 = 0x13;
-Tbase TZ x3429 = x3428 * x3427;
-Tbase TZ x3430 = x3424 + x3429;
-Tbase TZ x3431 = x3399 + x3430;
-Tbase TZ x3432 = 0x1a;
-Tbase TZ x3433 = x3431 >> x3432;
-Tbase TZ x3434 = x771 * x3168;
-Tbase TZ x3435 = x774 * x3167;
-Tbase TZ x3436 = x777 * x3166;
-Tbase TZ x3437 = x780 * x3165;
-Tbase TZ x3438 = x783 * x3164;
-Tbase TZ x3439 = x786 * x3163;
-Tbase TZ x3440 = x789 * x3162;
-Tbase TZ x3441 = x792 * x3161;
-Tbase TZ x3442 = x795 * x3160;
-Tbase TZ x3443 = x798 * x3159;
-Tbase TZ x3444 = x3442 + x3443;
-Tbase TZ x3445 = x3441 + x3444;
-Tbase TZ x3446 = x3440 + x3445;
-Tbase TZ x3447 = x3439 + x3446;
-Tbase TZ x3448 = x3438 + x3447;
-Tbase TZ x3449 = x3437 + x3448;
-Tbase TZ x3450 = x3436 + x3449;
-Tbase TZ x3451 = x3435 + x3450;
-Tbase TZ x3452 = x3434 + x3451;
-Tbase TZ x3453 = x3433 + x3452;
-Tbase TZ x3454 = 0x19;
-Tbase TZ x3455 = x3453 >> x3454;
-Tbase TZ x3456 = 0x13;
-Tbase TZ x3457 = x3456 * x3455;
-Tbase TZ x3458 = 0x3ffffff;
-Tbase TZ x3459 = x3199 & x3458;
-Tbase TZ x3460 = x3457 + x3459;
-Tbase TZ x3461 = 0x1a;
-Tbase TZ x3462 = x3460 >> x3461;
-Tbase TZ x3463 = 0x1ffffff;
-Tbase TZ x3464 = x3223 & x3463;
-Tbase TZ x3465 = x3462 + x3464;
-Tbase TZ x3466 = 0x1ffffff;
-Tbase TZ x3467 = x3453 & x3466;
-Tbase TZ x3468 = 0x3ffffff;
-Tbase TZ x3469 = x3431 & x3468;
-Tbase TZ x3470 = 0x1ffffff;
-Tbase TZ x3471 = x3397 & x3470;
-Tbase TZ x3472 = 0x3ffffff;
-Tbase TZ x3473 = x3373 & x3472;
-Tbase TZ x3474 = 0x1ffffff;
-Tbase TZ x3475 = x3339 & x3474;
-Tbase TZ x3476 = 0x3ffffff;
-Tbase TZ x3477 = x3315 & x3476;
-Tbase TZ x3478 = 0x1ffffff;
-Tbase TZ x3479 = x3281 & x3478;
-Tbase TZ x3480 = 0x19;
-Tbase TZ x3481 = x3465 >> x3480;
-Tbase TZ x3482 = 0x3ffffff;
-Tbase TZ x3483 = x3257 & x3482;
-Tbase TZ x3484 = x3481 + x3483;
-Tbase TZ x3485 = 0x1ffffff;
-Tbase TZ x3486 = x3465 & x3485;
-Tbase TZ x3487 = 0x3ffffff;
-Tbase TZ x3488 = x3460 & x3487;
-(Return x2817, Return x2819, Return x2821, Return x2823,
-Return x2825, Return x2827, Return x2829, Return x2834,
-Return x2836, Return x2838,
-(Return x3467, Return x3469, Return x3471, Return x3473,
-Return x3475, Return x3477, Return x3479, Return x3484,
-Return x3486, Return x3488),
-(Return x1797, Return x1799, Return x1801, Return x1803,
-Return x1805, Return x1807, Return x1809, Return x1814,
-Return x1816, Return x1818),
-(Return x2497, Return x2499, Return x2501, Return x2503,
-Return x2505, Return x2507, Return x2509, Return x2514,
-Return x2516, Return x2518))
- : forall var : base_type -> Type,
- expr base_type op
- (TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> ...)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF25519_32Reflective/Reified/LadderStepDisplay.v b/src/SpecificGen/GF25519_32Reflective/Reified/LadderStepDisplay.v
deleted file mode 100644
index 9985b1278..000000000
--- a/src/SpecificGen/GF25519_32Reflective/Reified/LadderStepDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_32Reflective.Reified.LadderStep.
-Require Export Crypto.Reflection.Z.CNotations.
-
-Print rladderstepW.
diff --git a/src/SpecificGen/GF25519_32Reflective/Reified/LadderStepJavaDisplay.log b/src/SpecificGen/GF25519_32Reflective/Reified/LadderStepJavaDisplay.log
deleted file mode 100644
index 7fdca4c10..000000000
--- a/src/SpecificGen/GF25519_32Reflective/Reified/LadderStepJavaDisplay.log
+++ /dev/null
@@ -1,3459 +0,0 @@
-rladderstepW =
-fun var : base_type -> Type =>
-λ
-_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ x29 x30 x31 x32
- x33 x34 x35 x36 x37 x38 x39 x40 x41 x42 x43 x44 x45 x46 x47 x48 x49 x50 x51
- x52 x53 x54 x55 x56 x57 x58 x59 x60 x61 x62 x63 x64 x65 x66 x67 x68 x69 x70
- x71 x72 x73 x74 x75 x76 x77 x78 x79 x80 x81 x82 x83 x84 x85 x86 x87
- x88 : var TZ,
-Tbase TZ x89 = x49 + x59;
-Tbase TZ x90 = x50 + x60;
-Tbase TZ x91 = x51 + x61;
-Tbase TZ x92 = x52 + x62;
-Tbase TZ x93 = x53 + x63;
-Tbase TZ x94 = x54 + x64;
-Tbase TZ x95 = x55 + x65;
-Tbase TZ x96 = x56 + x66;
-Tbase TZ x97 = x57 + x67;
-Tbase TZ x98 = x58 + x68;
-Tbase TZ x99 = x98 * x98;
-Tbase TZ x100 = 0x2;
-Tbase TZ x101 = x97 * x100;
-Tbase TZ x102 = x89 * x101;
-Tbase TZ x103 = x90 * x96;
-Tbase TZ x104 = 0x2;
-Tbase TZ x105 = x95 * x104;
-Tbase TZ x106 = x91 * x105;
-Tbase TZ x107 = x92 * x94;
-Tbase TZ x108 = 0x2;
-Tbase TZ x109 = x93 * x108;
-Tbase TZ x110 = x93 * x109;
-Tbase TZ x111 = x94 * x92;
-Tbase TZ x112 = 0x2;
-Tbase TZ x113 = x91 * x112;
-Tbase TZ x114 = x95 * x113;
-Tbase TZ x115 = x96 * x90;
-Tbase TZ x116 = 0x2;
-Tbase TZ x117 = x89 * x116;
-Tbase TZ x118 = x97 * x117;
-Tbase TZ x119 = x115 + x118;
-Tbase TZ x120 = x114 + x119;
-Tbase TZ x121 = x111 + x120;
-Tbase TZ x122 = x110 + x121;
-Tbase TZ x123 = x107 + x122;
-Tbase TZ x124 = x106 + x123;
-Tbase TZ x125 = x103 + x124;
-Tbase TZ x126 = x102 + x125;
-Tbase TZ x127 = 0x13;
-Tbase TZ x128 = x127 * x126;
-Tbase TZ x129 = x99 + x128;
-Tbase TZ x130 = 0x1a;
-Tbase TZ x131 = x129 >>> x130;
-Tbase TZ x132 = x97 * x98;
-Tbase TZ x133 = x98 * x97;
-Tbase TZ x134 = x132 + x133;
-Tbase TZ x135 = x89 * x96;
-Tbase TZ x136 = x90 * x95;
-Tbase TZ x137 = x91 * x94;
-Tbase TZ x138 = x92 * x93;
-Tbase TZ x139 = x93 * x92;
-Tbase TZ x140 = x94 * x91;
-Tbase TZ x141 = x95 * x90;
-Tbase TZ x142 = x96 * x89;
-Tbase TZ x143 = x141 + x142;
-Tbase TZ x144 = x140 + x143;
-Tbase TZ x145 = x139 + x144;
-Tbase TZ x146 = x138 + x145;
-Tbase TZ x147 = x137 + x146;
-Tbase TZ x148 = x136 + x147;
-Tbase TZ x149 = x135 + x148;
-Tbase TZ x150 = 0x13;
-Tbase TZ x151 = x150 * x149;
-Tbase TZ x152 = x134 + x151;
-Tbase TZ x153 = x131 + x152;
-Tbase TZ x154 = 0x19;
-Tbase TZ x155 = x153 >>> x154;
-Tbase TZ x156 = x96 * x98;
-Tbase TZ x157 = 0x2;
-Tbase TZ x158 = x97 * x157;
-Tbase TZ x159 = x97 * x158;
-Tbase TZ x160 = x98 * x96;
-Tbase TZ x161 = x159 + x160;
-Tbase TZ x162 = x156 + x161;
-Tbase TZ x163 = 0x2;
-Tbase TZ x164 = x95 * x163;
-Tbase TZ x165 = x89 * x164;
-Tbase TZ x166 = x90 * x94;
-Tbase TZ x167 = 0x2;
-Tbase TZ x168 = x93 * x167;
-Tbase TZ x169 = x91 * x168;
-Tbase TZ x170 = x92 * x92;
-Tbase TZ x171 = 0x2;
-Tbase TZ x172 = x91 * x171;
-Tbase TZ x173 = x93 * x172;
-Tbase TZ x174 = x94 * x90;
-Tbase TZ x175 = 0x2;
-Tbase TZ x176 = x89 * x175;
-Tbase TZ x177 = x95 * x176;
-Tbase TZ x178 = x174 + x177;
-Tbase TZ x179 = x173 + x178;
-Tbase TZ x180 = x170 + x179;
-Tbase TZ x181 = x169 + x180;
-Tbase TZ x182 = x166 + x181;
-Tbase TZ x183 = x165 + x182;
-Tbase TZ x184 = 0x13;
-Tbase TZ x185 = x184 * x183;
-Tbase TZ x186 = x162 + x185;
-Tbase TZ x187 = x155 + x186;
-Tbase TZ x188 = 0x1a;
-Tbase TZ x189 = x187 >>> x188;
-Tbase TZ x190 = x95 * x98;
-Tbase TZ x191 = x96 * x97;
-Tbase TZ x192 = x97 * x96;
-Tbase TZ x193 = x98 * x95;
-Tbase TZ x194 = x192 + x193;
-Tbase TZ x195 = x191 + x194;
-Tbase TZ x196 = x190 + x195;
-Tbase TZ x197 = x89 * x94;
-Tbase TZ x198 = x90 * x93;
-Tbase TZ x199 = x91 * x92;
-Tbase TZ x200 = x92 * x91;
-Tbase TZ x201 = x93 * x90;
-Tbase TZ x202 = x94 * x89;
-Tbase TZ x203 = x201 + x202;
-Tbase TZ x204 = x200 + x203;
-Tbase TZ x205 = x199 + x204;
-Tbase TZ x206 = x198 + x205;
-Tbase TZ x207 = x197 + x206;
-Tbase TZ x208 = 0x13;
-Tbase TZ x209 = x208 * x207;
-Tbase TZ x210 = x196 + x209;
-Tbase TZ x211 = x189 + x210;
-Tbase TZ x212 = 0x19;
-Tbase TZ x213 = x211 >>> x212;
-Tbase TZ x214 = x94 * x98;
-Tbase TZ x215 = 0x2;
-Tbase TZ x216 = x97 * x215;
-Tbase TZ x217 = x95 * x216;
-Tbase TZ x218 = x96 * x96;
-Tbase TZ x219 = 0x2;
-Tbase TZ x220 = x95 * x219;
-Tbase TZ x221 = x97 * x220;
-Tbase TZ x222 = x98 * x94;
-Tbase TZ x223 = x221 + x222;
-Tbase TZ x224 = x218 + x223;
-Tbase TZ x225 = x217 + x224;
-Tbase TZ x226 = x214 + x225;
-Tbase TZ x227 = 0x2;
-Tbase TZ x228 = x93 * x227;
-Tbase TZ x229 = x89 * x228;
-Tbase TZ x230 = x90 * x92;
-Tbase TZ x231 = 0x2;
-Tbase TZ x232 = x91 * x231;
-Tbase TZ x233 = x91 * x232;
-Tbase TZ x234 = x92 * x90;
-Tbase TZ x235 = 0x2;
-Tbase TZ x236 = x89 * x235;
-Tbase TZ x237 = x93 * x236;
-Tbase TZ x238 = x234 + x237;
-Tbase TZ x239 = x233 + x238;
-Tbase TZ x240 = x230 + x239;
-Tbase TZ x241 = x229 + x240;
-Tbase TZ x242 = 0x13;
-Tbase TZ x243 = x242 * x241;
-Tbase TZ x244 = x226 + x243;
-Tbase TZ x245 = x213 + x244;
-Tbase TZ x246 = 0x1a;
-Tbase TZ x247 = x245 >>> x246;
-Tbase TZ x248 = x93 * x98;
-Tbase TZ x249 = x94 * x97;
-Tbase TZ x250 = x95 * x96;
-Tbase TZ x251 = x96 * x95;
-Tbase TZ x252 = x97 * x94;
-Tbase TZ x253 = x98 * x93;
-Tbase TZ x254 = x252 + x253;
-Tbase TZ x255 = x251 + x254;
-Tbase TZ x256 = x250 + x255;
-Tbase TZ x257 = x249 + x256;
-Tbase TZ x258 = x248 + x257;
-Tbase TZ x259 = x89 * x92;
-Tbase TZ x260 = x90 * x91;
-Tbase TZ x261 = x91 * x90;
-Tbase TZ x262 = x92 * x89;
-Tbase TZ x263 = x261 + x262;
-Tbase TZ x264 = x260 + x263;
-Tbase TZ x265 = x259 + x264;
-Tbase TZ x266 = 0x13;
-Tbase TZ x267 = x266 * x265;
-Tbase TZ x268 = x258 + x267;
-Tbase TZ x269 = x247 + x268;
-Tbase TZ x270 = 0x19;
-Tbase TZ x271 = x269 >>> x270;
-Tbase TZ x272 = x92 * x98;
-Tbase TZ x273 = 0x2;
-Tbase TZ x274 = x97 * x273;
-Tbase TZ x275 = x93 * x274;
-Tbase TZ x276 = x94 * x96;
-Tbase TZ x277 = 0x2;
-Tbase TZ x278 = x95 * x277;
-Tbase TZ x279 = x95 * x278;
-Tbase TZ x280 = x96 * x94;
-Tbase TZ x281 = 0x2;
-Tbase TZ x282 = x93 * x281;
-Tbase TZ x283 = x97 * x282;
-Tbase TZ x284 = x98 * x92;
-Tbase TZ x285 = x283 + x284;
-Tbase TZ x286 = x280 + x285;
-Tbase TZ x287 = x279 + x286;
-Tbase TZ x288 = x276 + x287;
-Tbase TZ x289 = x275 + x288;
-Tbase TZ x290 = x272 + x289;
-Tbase TZ x291 = 0x2;
-Tbase TZ x292 = x91 * x291;
-Tbase TZ x293 = x89 * x292;
-Tbase TZ x294 = x90 * x90;
-Tbase TZ x295 = 0x2;
-Tbase TZ x296 = x89 * x295;
-Tbase TZ x297 = x91 * x296;
-Tbase TZ x298 = x294 + x297;
-Tbase TZ x299 = x293 + x298;
-Tbase TZ x300 = 0x13;
-Tbase TZ x301 = x300 * x299;
-Tbase TZ x302 = x290 + x301;
-Tbase TZ x303 = x271 + x302;
-Tbase TZ x304 = 0x1a;
-Tbase TZ x305 = x303 >>> x304;
-Tbase TZ x306 = x91 * x98;
-Tbase TZ x307 = x92 * x97;
-Tbase TZ x308 = x93 * x96;
-Tbase TZ x309 = x94 * x95;
-Tbase TZ x310 = x95 * x94;
-Tbase TZ x311 = x96 * x93;
-Tbase TZ x312 = x97 * x92;
-Tbase TZ x313 = x98 * x91;
-Tbase TZ x314 = x312 + x313;
-Tbase TZ x315 = x311 + x314;
-Tbase TZ x316 = x310 + x315;
-Tbase TZ x317 = x309 + x316;
-Tbase TZ x318 = x308 + x317;
-Tbase TZ x319 = x307 + x318;
-Tbase TZ x320 = x306 + x319;
-Tbase TZ x321 = x89 * x90;
-Tbase TZ x322 = x90 * x89;
-Tbase TZ x323 = x321 + x322;
-Tbase TZ x324 = 0x13;
-Tbase TZ x325 = x324 * x323;
-Tbase TZ x326 = x320 + x325;
-Tbase TZ x327 = x305 + x326;
-Tbase TZ x328 = 0x19;
-Tbase TZ x329 = x327 >>> x328;
-Tbase TZ x330 = x90 * x98;
-Tbase TZ x331 = 0x2;
-Tbase TZ x332 = x97 * x331;
-Tbase TZ x333 = x91 * x332;
-Tbase TZ x334 = x92 * x96;
-Tbase TZ x335 = 0x2;
-Tbase TZ x336 = x95 * x335;
-Tbase TZ x337 = x93 * x336;
-Tbase TZ x338 = x94 * x94;
-Tbase TZ x339 = 0x2;
-Tbase TZ x340 = x93 * x339;
-Tbase TZ x341 = x95 * x340;
-Tbase TZ x342 = x96 * x92;
-Tbase TZ x343 = 0x2;
-Tbase TZ x344 = x91 * x343;
-Tbase TZ x345 = x97 * x344;
-Tbase TZ x346 = x98 * x90;
-Tbase TZ x347 = x345 + x346;
-Tbase TZ x348 = x342 + x347;
-Tbase TZ x349 = x341 + x348;
-Tbase TZ x350 = x338 + x349;
-Tbase TZ x351 = x337 + x350;
-Tbase TZ x352 = x334 + x351;
-Tbase TZ x353 = x333 + x352;
-Tbase TZ x354 = x330 + x353;
-Tbase TZ x355 = 0x2;
-Tbase TZ x356 = x89 * x355;
-Tbase TZ x357 = x89 * x356;
-Tbase TZ x358 = 0x13;
-Tbase TZ x359 = x358 * x357;
-Tbase TZ x360 = x354 + x359;
-Tbase TZ x361 = x329 + x360;
-Tbase TZ x362 = 0x1a;
-Tbase TZ x363 = x361 >>> x362;
-Tbase TZ x364 = x89 * x98;
-Tbase TZ x365 = x90 * x97;
-Tbase TZ x366 = x91 * x96;
-Tbase TZ x367 = x92 * x95;
-Tbase TZ x368 = x93 * x94;
-Tbase TZ x369 = x94 * x93;
-Tbase TZ x370 = x95 * x92;
-Tbase TZ x371 = x96 * x91;
-Tbase TZ x372 = x97 * x90;
-Tbase TZ x373 = x98 * x89;
-Tbase TZ x374 = x372 + x373;
-Tbase TZ x375 = x371 + x374;
-Tbase TZ x376 = x370 + x375;
-Tbase TZ x377 = x369 + x376;
-Tbase TZ x378 = x368 + x377;
-Tbase TZ x379 = x367 + x378;
-Tbase TZ x380 = x366 + x379;
-Tbase TZ x381 = x365 + x380;
-Tbase TZ x382 = x364 + x381;
-Tbase TZ x383 = x363 + x382;
-Tbase TZ x384 = 0x19;
-Tbase TZ x385 = x383 >>> x384;
-Tbase TZ x386 = 0x13;
-Tbase TZ x387 = x386 * x385;
-Tbase TZ x388 = 0x3ffffff;
-Tbase TZ x389 = x129 & x388;
-Tbase TZ x390 = x387 + x389;
-Tbase TZ x391 = 0x1a;
-Tbase TZ x392 = x390 >>> x391;
-Tbase TZ x393 = 0x1ffffff;
-Tbase TZ x394 = x153 & x393;
-Tbase TZ x395 = x392 + x394;
-Tbase TZ x396 = 0x1ffffff;
-Tbase TZ x397 = x383 & x396;
-Tbase TZ x398 = 0x3ffffff;
-Tbase TZ x399 = x361 & x398;
-Tbase TZ x400 = 0x1ffffff;
-Tbase TZ x401 = x327 & x400;
-Tbase TZ x402 = 0x3ffffff;
-Tbase TZ x403 = x303 & x402;
-Tbase TZ x404 = 0x1ffffff;
-Tbase TZ x405 = x269 & x404;
-Tbase TZ x406 = 0x3ffffff;
-Tbase TZ x407 = x245 & x406;
-Tbase TZ x408 = 0x1ffffff;
-Tbase TZ x409 = x211 & x408;
-Tbase TZ x410 = 0x19;
-Tbase TZ x411 = x395 >>> x410;
-Tbase TZ x412 = 0x3ffffff;
-Tbase TZ x413 = x187 & x412;
-Tbase TZ x414 = x411 + x413;
-Tbase TZ x415 = 0x1ffffff;
-Tbase TZ x416 = x395 & x415;
-Tbase TZ x417 = 0x3ffffff;
-Tbase TZ x418 = x390 & x417;
-Tbase TZ x419 = 0x3fffffe;
-Tbase TZ x420 = x419 + x49;
-Tbase TZ x421 = x420 - x59;
-Tbase TZ x422 = 0x7fffffe;
-Tbase TZ x423 = x422 + x50;
-Tbase TZ x424 = x423 - x60;
-Tbase TZ x425 = 0x3fffffe;
-Tbase TZ x426 = x425 + x51;
-Tbase TZ x427 = x426 - x61;
-Tbase TZ x428 = 0x7fffffe;
-Tbase TZ x429 = x428 + x52;
-Tbase TZ x430 = x429 - x62;
-Tbase TZ x431 = 0x3fffffe;
-Tbase TZ x432 = x431 + x53;
-Tbase TZ x433 = x432 - x63;
-Tbase TZ x434 = 0x7fffffe;
-Tbase TZ x435 = x434 + x54;
-Tbase TZ x436 = x435 - x64;
-Tbase TZ x437 = 0x3fffffe;
-Tbase TZ x438 = x437 + x55;
-Tbase TZ x439 = x438 - x65;
-Tbase TZ x440 = 0x7fffffe;
-Tbase TZ x441 = x440 + x56;
-Tbase TZ x442 = x441 - x66;
-Tbase TZ x443 = 0x3fffffe;
-Tbase TZ x444 = x443 + x57;
-Tbase TZ x445 = x444 - x67;
-Tbase TZ x446 = 0x7ffffda;
-Tbase TZ x447 = x446 + x58;
-Tbase TZ x448 = x447 - x68;
-Tbase TZ x449 = x448 * x448;
-Tbase TZ x450 = 0x2;
-Tbase TZ x451 = x445 * x450;
-Tbase TZ x452 = x421 * x451;
-Tbase TZ x453 = x424 * x442;
-Tbase TZ x454 = 0x2;
-Tbase TZ x455 = x439 * x454;
-Tbase TZ x456 = x427 * x455;
-Tbase TZ x457 = x430 * x436;
-Tbase TZ x458 = 0x2;
-Tbase TZ x459 = x433 * x458;
-Tbase TZ x460 = x433 * x459;
-Tbase TZ x461 = x436 * x430;
-Tbase TZ x462 = 0x2;
-Tbase TZ x463 = x427 * x462;
-Tbase TZ x464 = x439 * x463;
-Tbase TZ x465 = x442 * x424;
-Tbase TZ x466 = 0x2;
-Tbase TZ x467 = x421 * x466;
-Tbase TZ x468 = x445 * x467;
-Tbase TZ x469 = x465 + x468;
-Tbase TZ x470 = x464 + x469;
-Tbase TZ x471 = x461 + x470;
-Tbase TZ x472 = x460 + x471;
-Tbase TZ x473 = x457 + x472;
-Tbase TZ x474 = x456 + x473;
-Tbase TZ x475 = x453 + x474;
-Tbase TZ x476 = x452 + x475;
-Tbase TZ x477 = 0x13;
-Tbase TZ x478 = x477 * x476;
-Tbase TZ x479 = x449 + x478;
-Tbase TZ x480 = 0x1a;
-Tbase TZ x481 = x479 >>> x480;
-Tbase TZ x482 = x445 * x448;
-Tbase TZ x483 = x448 * x445;
-Tbase TZ x484 = x482 + x483;
-Tbase TZ x485 = x421 * x442;
-Tbase TZ x486 = x424 * x439;
-Tbase TZ x487 = x427 * x436;
-Tbase TZ x488 = x430 * x433;
-Tbase TZ x489 = x433 * x430;
-Tbase TZ x490 = x436 * x427;
-Tbase TZ x491 = x439 * x424;
-Tbase TZ x492 = x442 * x421;
-Tbase TZ x493 = x491 + x492;
-Tbase TZ x494 = x490 + x493;
-Tbase TZ x495 = x489 + x494;
-Tbase TZ x496 = x488 + x495;
-Tbase TZ x497 = x487 + x496;
-Tbase TZ x498 = x486 + x497;
-Tbase TZ x499 = x485 + x498;
-Tbase TZ x500 = 0x13;
-Tbase TZ x501 = x500 * x499;
-Tbase TZ x502 = x484 + x501;
-Tbase TZ x503 = x481 + x502;
-Tbase TZ x504 = 0x19;
-Tbase TZ x505 = x503 >>> x504;
-Tbase TZ x506 = x442 * x448;
-Tbase TZ x507 = 0x2;
-Tbase TZ x508 = x445 * x507;
-Tbase TZ x509 = x445 * x508;
-Tbase TZ x510 = x448 * x442;
-Tbase TZ x511 = x509 + x510;
-Tbase TZ x512 = x506 + x511;
-Tbase TZ x513 = 0x2;
-Tbase TZ x514 = x439 * x513;
-Tbase TZ x515 = x421 * x514;
-Tbase TZ x516 = x424 * x436;
-Tbase TZ x517 = 0x2;
-Tbase TZ x518 = x433 * x517;
-Tbase TZ x519 = x427 * x518;
-Tbase TZ x520 = x430 * x430;
-Tbase TZ x521 = 0x2;
-Tbase TZ x522 = x427 * x521;
-Tbase TZ x523 = x433 * x522;
-Tbase TZ x524 = x436 * x424;
-Tbase TZ x525 = 0x2;
-Tbase TZ x526 = x421 * x525;
-Tbase TZ x527 = x439 * x526;
-Tbase TZ x528 = x524 + x527;
-Tbase TZ x529 = x523 + x528;
-Tbase TZ x530 = x520 + x529;
-Tbase TZ x531 = x519 + x530;
-Tbase TZ x532 = x516 + x531;
-Tbase TZ x533 = x515 + x532;
-Tbase TZ x534 = 0x13;
-Tbase TZ x535 = x534 * x533;
-Tbase TZ x536 = x512 + x535;
-Tbase TZ x537 = x505 + x536;
-Tbase TZ x538 = 0x1a;
-Tbase TZ x539 = x537 >>> x538;
-Tbase TZ x540 = x439 * x448;
-Tbase TZ x541 = x442 * x445;
-Tbase TZ x542 = x445 * x442;
-Tbase TZ x543 = x448 * x439;
-Tbase TZ x544 = x542 + x543;
-Tbase TZ x545 = x541 + x544;
-Tbase TZ x546 = x540 + x545;
-Tbase TZ x547 = x421 * x436;
-Tbase TZ x548 = x424 * x433;
-Tbase TZ x549 = x427 * x430;
-Tbase TZ x550 = x430 * x427;
-Tbase TZ x551 = x433 * x424;
-Tbase TZ x552 = x436 * x421;
-Tbase TZ x553 = x551 + x552;
-Tbase TZ x554 = x550 + x553;
-Tbase TZ x555 = x549 + x554;
-Tbase TZ x556 = x548 + x555;
-Tbase TZ x557 = x547 + x556;
-Tbase TZ x558 = 0x13;
-Tbase TZ x559 = x558 * x557;
-Tbase TZ x560 = x546 + x559;
-Tbase TZ x561 = x539 + x560;
-Tbase TZ x562 = 0x19;
-Tbase TZ x563 = x561 >>> x562;
-Tbase TZ x564 = x436 * x448;
-Tbase TZ x565 = 0x2;
-Tbase TZ x566 = x445 * x565;
-Tbase TZ x567 = x439 * x566;
-Tbase TZ x568 = x442 * x442;
-Tbase TZ x569 = 0x2;
-Tbase TZ x570 = x439 * x569;
-Tbase TZ x571 = x445 * x570;
-Tbase TZ x572 = x448 * x436;
-Tbase TZ x573 = x571 + x572;
-Tbase TZ x574 = x568 + x573;
-Tbase TZ x575 = x567 + x574;
-Tbase TZ x576 = x564 + x575;
-Tbase TZ x577 = 0x2;
-Tbase TZ x578 = x433 * x577;
-Tbase TZ x579 = x421 * x578;
-Tbase TZ x580 = x424 * x430;
-Tbase TZ x581 = 0x2;
-Tbase TZ x582 = x427 * x581;
-Tbase TZ x583 = x427 * x582;
-Tbase TZ x584 = x430 * x424;
-Tbase TZ x585 = 0x2;
-Tbase TZ x586 = x421 * x585;
-Tbase TZ x587 = x433 * x586;
-Tbase TZ x588 = x584 + x587;
-Tbase TZ x589 = x583 + x588;
-Tbase TZ x590 = x580 + x589;
-Tbase TZ x591 = x579 + x590;
-Tbase TZ x592 = 0x13;
-Tbase TZ x593 = x592 * x591;
-Tbase TZ x594 = x576 + x593;
-Tbase TZ x595 = x563 + x594;
-Tbase TZ x596 = 0x1a;
-Tbase TZ x597 = x595 >>> x596;
-Tbase TZ x598 = x433 * x448;
-Tbase TZ x599 = x436 * x445;
-Tbase TZ x600 = x439 * x442;
-Tbase TZ x601 = x442 * x439;
-Tbase TZ x602 = x445 * x436;
-Tbase TZ x603 = x448 * x433;
-Tbase TZ x604 = x602 + x603;
-Tbase TZ x605 = x601 + x604;
-Tbase TZ x606 = x600 + x605;
-Tbase TZ x607 = x599 + x606;
-Tbase TZ x608 = x598 + x607;
-Tbase TZ x609 = x421 * x430;
-Tbase TZ x610 = x424 * x427;
-Tbase TZ x611 = x427 * x424;
-Tbase TZ x612 = x430 * x421;
-Tbase TZ x613 = x611 + x612;
-Tbase TZ x614 = x610 + x613;
-Tbase TZ x615 = x609 + x614;
-Tbase TZ x616 = 0x13;
-Tbase TZ x617 = x616 * x615;
-Tbase TZ x618 = x608 + x617;
-Tbase TZ x619 = x597 + x618;
-Tbase TZ x620 = 0x19;
-Tbase TZ x621 = x619 >>> x620;
-Tbase TZ x622 = x430 * x448;
-Tbase TZ x623 = 0x2;
-Tbase TZ x624 = x445 * x623;
-Tbase TZ x625 = x433 * x624;
-Tbase TZ x626 = x436 * x442;
-Tbase TZ x627 = 0x2;
-Tbase TZ x628 = x439 * x627;
-Tbase TZ x629 = x439 * x628;
-Tbase TZ x630 = x442 * x436;
-Tbase TZ x631 = 0x2;
-Tbase TZ x632 = x433 * x631;
-Tbase TZ x633 = x445 * x632;
-Tbase TZ x634 = x448 * x430;
-Tbase TZ x635 = x633 + x634;
-Tbase TZ x636 = x630 + x635;
-Tbase TZ x637 = x629 + x636;
-Tbase TZ x638 = x626 + x637;
-Tbase TZ x639 = x625 + x638;
-Tbase TZ x640 = x622 + x639;
-Tbase TZ x641 = 0x2;
-Tbase TZ x642 = x427 * x641;
-Tbase TZ x643 = x421 * x642;
-Tbase TZ x644 = x424 * x424;
-Tbase TZ x645 = 0x2;
-Tbase TZ x646 = x421 * x645;
-Tbase TZ x647 = x427 * x646;
-Tbase TZ x648 = x644 + x647;
-Tbase TZ x649 = x643 + x648;
-Tbase TZ x650 = 0x13;
-Tbase TZ x651 = x650 * x649;
-Tbase TZ x652 = x640 + x651;
-Tbase TZ x653 = x621 + x652;
-Tbase TZ x654 = 0x1a;
-Tbase TZ x655 = x653 >>> x654;
-Tbase TZ x656 = x427 * x448;
-Tbase TZ x657 = x430 * x445;
-Tbase TZ x658 = x433 * x442;
-Tbase TZ x659 = x436 * x439;
-Tbase TZ x660 = x439 * x436;
-Tbase TZ x661 = x442 * x433;
-Tbase TZ x662 = x445 * x430;
-Tbase TZ x663 = x448 * x427;
-Tbase TZ x664 = x662 + x663;
-Tbase TZ x665 = x661 + x664;
-Tbase TZ x666 = x660 + x665;
-Tbase TZ x667 = x659 + x666;
-Tbase TZ x668 = x658 + x667;
-Tbase TZ x669 = x657 + x668;
-Tbase TZ x670 = x656 + x669;
-Tbase TZ x671 = x421 * x424;
-Tbase TZ x672 = x424 * x421;
-Tbase TZ x673 = x671 + x672;
-Tbase TZ x674 = 0x13;
-Tbase TZ x675 = x674 * x673;
-Tbase TZ x676 = x670 + x675;
-Tbase TZ x677 = x655 + x676;
-Tbase TZ x678 = 0x19;
-Tbase TZ x679 = x677 >>> x678;
-Tbase TZ x680 = x424 * x448;
-Tbase TZ x681 = 0x2;
-Tbase TZ x682 = x445 * x681;
-Tbase TZ x683 = x427 * x682;
-Tbase TZ x684 = x430 * x442;
-Tbase TZ x685 = 0x2;
-Tbase TZ x686 = x439 * x685;
-Tbase TZ x687 = x433 * x686;
-Tbase TZ x688 = x436 * x436;
-Tbase TZ x689 = 0x2;
-Tbase TZ x690 = x433 * x689;
-Tbase TZ x691 = x439 * x690;
-Tbase TZ x692 = x442 * x430;
-Tbase TZ x693 = 0x2;
-Tbase TZ x694 = x427 * x693;
-Tbase TZ x695 = x445 * x694;
-Tbase TZ x696 = x448 * x424;
-Tbase TZ x697 = x695 + x696;
-Tbase TZ x698 = x692 + x697;
-Tbase TZ x699 = x691 + x698;
-Tbase TZ x700 = x688 + x699;
-Tbase TZ x701 = x687 + x700;
-Tbase TZ x702 = x684 + x701;
-Tbase TZ x703 = x683 + x702;
-Tbase TZ x704 = x680 + x703;
-Tbase TZ x705 = 0x2;
-Tbase TZ x706 = x421 * x705;
-Tbase TZ x707 = x421 * x706;
-Tbase TZ x708 = 0x13;
-Tbase TZ x709 = x708 * x707;
-Tbase TZ x710 = x704 + x709;
-Tbase TZ x711 = x679 + x710;
-Tbase TZ x712 = 0x1a;
-Tbase TZ x713 = x711 >>> x712;
-Tbase TZ x714 = x421 * x448;
-Tbase TZ x715 = x424 * x445;
-Tbase TZ x716 = x427 * x442;
-Tbase TZ x717 = x430 * x439;
-Tbase TZ x718 = x433 * x436;
-Tbase TZ x719 = x436 * x433;
-Tbase TZ x720 = x439 * x430;
-Tbase TZ x721 = x442 * x427;
-Tbase TZ x722 = x445 * x424;
-Tbase TZ x723 = x448 * x421;
-Tbase TZ x724 = x722 + x723;
-Tbase TZ x725 = x721 + x724;
-Tbase TZ x726 = x720 + x725;
-Tbase TZ x727 = x719 + x726;
-Tbase TZ x728 = x718 + x727;
-Tbase TZ x729 = x717 + x728;
-Tbase TZ x730 = x716 + x729;
-Tbase TZ x731 = x715 + x730;
-Tbase TZ x732 = x714 + x731;
-Tbase TZ x733 = x713 + x732;
-Tbase TZ x734 = 0x19;
-Tbase TZ x735 = x733 >>> x734;
-Tbase TZ x736 = 0x13;
-Tbase TZ x737 = x736 * x735;
-Tbase TZ x738 = 0x3ffffff;
-Tbase TZ x739 = x479 & x738;
-Tbase TZ x740 = x737 + x739;
-Tbase TZ x741 = 0x1a;
-Tbase TZ x742 = x740 >>> x741;
-Tbase TZ x743 = 0x1ffffff;
-Tbase TZ x744 = x503 & x743;
-Tbase TZ x745 = x742 + x744;
-Tbase TZ x746 = 0x1ffffff;
-Tbase TZ x747 = x733 & x746;
-Tbase TZ x748 = 0x3ffffff;
-Tbase TZ x749 = x711 & x748;
-Tbase TZ x750 = 0x1ffffff;
-Tbase TZ x751 = x677 & x750;
-Tbase TZ x752 = 0x3ffffff;
-Tbase TZ x753 = x653 & x752;
-Tbase TZ x754 = 0x1ffffff;
-Tbase TZ x755 = x619 & x754;
-Tbase TZ x756 = 0x3ffffff;
-Tbase TZ x757 = x595 & x756;
-Tbase TZ x758 = 0x1ffffff;
-Tbase TZ x759 = x561 & x758;
-Tbase TZ x760 = 0x19;
-Tbase TZ x761 = x745 >>> x760;
-Tbase TZ x762 = 0x3ffffff;
-Tbase TZ x763 = x537 & x762;
-Tbase TZ x764 = x761 + x763;
-Tbase TZ x765 = 0x1ffffff;
-Tbase TZ x766 = x745 & x765;
-Tbase TZ x767 = 0x3ffffff;
-Tbase TZ x768 = x740 & x767;
-Tbase TZ x769 = 0x3fffffe;
-Tbase TZ x770 = x769 + x397;
-Tbase TZ x771 = x770 - x747;
-Tbase TZ x772 = 0x7fffffe;
-Tbase TZ x773 = x772 + x399;
-Tbase TZ x774 = x773 - x749;
-Tbase TZ x775 = 0x3fffffe;
-Tbase TZ x776 = x775 + x401;
-Tbase TZ x777 = x776 - x751;
-Tbase TZ x778 = 0x7fffffe;
-Tbase TZ x779 = x778 + x403;
-Tbase TZ x780 = x779 - x753;
-Tbase TZ x781 = 0x3fffffe;
-Tbase TZ x782 = x781 + x405;
-Tbase TZ x783 = x782 - x755;
-Tbase TZ x784 = 0x7fffffe;
-Tbase TZ x785 = x784 + x407;
-Tbase TZ x786 = x785 - x757;
-Tbase TZ x787 = 0x3fffffe;
-Tbase TZ x788 = x787 + x409;
-Tbase TZ x789 = x788 - x759;
-Tbase TZ x790 = 0x7fffffe;
-Tbase TZ x791 = x790 + x414;
-Tbase TZ x792 = x791 - x764;
-Tbase TZ x793 = 0x3fffffe;
-Tbase TZ x794 = x793 + x416;
-Tbase TZ x795 = x794 - x766;
-Tbase TZ x796 = 0x7ffffda;
-Tbase TZ x797 = x796 + x418;
-Tbase TZ x798 = x797 - x768;
-Tbase TZ x799 = x69 + x79;
-Tbase TZ x800 = x70 + x80;
-Tbase TZ x801 = x71 + x81;
-Tbase TZ x802 = x72 + x82;
-Tbase TZ x803 = x73 + x83;
-Tbase TZ x804 = x74 + x84;
-Tbase TZ x805 = x75 + x85;
-Tbase TZ x806 = x76 + x86;
-Tbase TZ x807 = x77 + x87;
-Tbase TZ x808 = x78 + x88;
-Tbase TZ x809 = 0x3fffffe;
-Tbase TZ x810 = x809 + x69;
-Tbase TZ x811 = x810 - x79;
-Tbase TZ x812 = 0x7fffffe;
-Tbase TZ x813 = x812 + x70;
-Tbase TZ x814 = x813 - x80;
-Tbase TZ x815 = 0x3fffffe;
-Tbase TZ x816 = x815 + x71;
-Tbase TZ x817 = x816 - x81;
-Tbase TZ x818 = 0x7fffffe;
-Tbase TZ x819 = x818 + x72;
-Tbase TZ x820 = x819 - x82;
-Tbase TZ x821 = 0x3fffffe;
-Tbase TZ x822 = x821 + x73;
-Tbase TZ x823 = x822 - x83;
-Tbase TZ x824 = 0x7fffffe;
-Tbase TZ x825 = x824 + x74;
-Tbase TZ x826 = x825 - x84;
-Tbase TZ x827 = 0x3fffffe;
-Tbase TZ x828 = x827 + x75;
-Tbase TZ x829 = x828 - x85;
-Tbase TZ x830 = 0x7fffffe;
-Tbase TZ x831 = x830 + x76;
-Tbase TZ x832 = x831 - x86;
-Tbase TZ x833 = 0x3fffffe;
-Tbase TZ x834 = x833 + x77;
-Tbase TZ x835 = x834 - x87;
-Tbase TZ x836 = 0x7ffffda;
-Tbase TZ x837 = x836 + x78;
-Tbase TZ x838 = x837 - x88;
-Tbase TZ x839 = x838 * x98;
-Tbase TZ x840 = 0x2;
-Tbase TZ x841 = x97 * x840;
-Tbase TZ x842 = x811 * x841;
-Tbase TZ x843 = x814 * x96;
-Tbase TZ x844 = 0x2;
-Tbase TZ x845 = x95 * x844;
-Tbase TZ x846 = x817 * x845;
-Tbase TZ x847 = x820 * x94;
-Tbase TZ x848 = 0x2;
-Tbase TZ x849 = x93 * x848;
-Tbase TZ x850 = x823 * x849;
-Tbase TZ x851 = x826 * x92;
-Tbase TZ x852 = 0x2;
-Tbase TZ x853 = x91 * x852;
-Tbase TZ x854 = x829 * x853;
-Tbase TZ x855 = x832 * x90;
-Tbase TZ x856 = 0x2;
-Tbase TZ x857 = x89 * x856;
-Tbase TZ x858 = x835 * x857;
-Tbase TZ x859 = x855 + x858;
-Tbase TZ x860 = x854 + x859;
-Tbase TZ x861 = x851 + x860;
-Tbase TZ x862 = x850 + x861;
-Tbase TZ x863 = x847 + x862;
-Tbase TZ x864 = x846 + x863;
-Tbase TZ x865 = x843 + x864;
-Tbase TZ x866 = x842 + x865;
-Tbase TZ x867 = 0x13;
-Tbase TZ x868 = x867 * x866;
-Tbase TZ x869 = x839 + x868;
-Tbase TZ x870 = 0x1a;
-Tbase TZ x871 = x869 >>> x870;
-Tbase TZ x872 = x835 * x98;
-Tbase TZ x873 = x838 * x97;
-Tbase TZ x874 = x872 + x873;
-Tbase TZ x875 = x811 * x96;
-Tbase TZ x876 = x814 * x95;
-Tbase TZ x877 = x817 * x94;
-Tbase TZ x878 = x820 * x93;
-Tbase TZ x879 = x823 * x92;
-Tbase TZ x880 = x826 * x91;
-Tbase TZ x881 = x829 * x90;
-Tbase TZ x882 = x832 * x89;
-Tbase TZ x883 = x881 + x882;
-Tbase TZ x884 = x880 + x883;
-Tbase TZ x885 = x879 + x884;
-Tbase TZ x886 = x878 + x885;
-Tbase TZ x887 = x877 + x886;
-Tbase TZ x888 = x876 + x887;
-Tbase TZ x889 = x875 + x888;
-Tbase TZ x890 = 0x13;
-Tbase TZ x891 = x890 * x889;
-Tbase TZ x892 = x874 + x891;
-Tbase TZ x893 = x871 + x892;
-Tbase TZ x894 = 0x19;
-Tbase TZ x895 = x893 >>> x894;
-Tbase TZ x896 = x832 * x98;
-Tbase TZ x897 = 0x2;
-Tbase TZ x898 = x97 * x897;
-Tbase TZ x899 = x835 * x898;
-Tbase TZ x900 = x838 * x96;
-Tbase TZ x901 = x899 + x900;
-Tbase TZ x902 = x896 + x901;
-Tbase TZ x903 = 0x2;
-Tbase TZ x904 = x95 * x903;
-Tbase TZ x905 = x811 * x904;
-Tbase TZ x906 = x814 * x94;
-Tbase TZ x907 = 0x2;
-Tbase TZ x908 = x93 * x907;
-Tbase TZ x909 = x817 * x908;
-Tbase TZ x910 = x820 * x92;
-Tbase TZ x911 = 0x2;
-Tbase TZ x912 = x91 * x911;
-Tbase TZ x913 = x823 * x912;
-Tbase TZ x914 = x826 * x90;
-Tbase TZ x915 = 0x2;
-Tbase TZ x916 = x89 * x915;
-Tbase TZ x917 = x829 * x916;
-Tbase TZ x918 = x914 + x917;
-Tbase TZ x919 = x913 + x918;
-Tbase TZ x920 = x910 + x919;
-Tbase TZ x921 = x909 + x920;
-Tbase TZ x922 = x906 + x921;
-Tbase TZ x923 = x905 + x922;
-Tbase TZ x924 = 0x13;
-Tbase TZ x925 = x924 * x923;
-Tbase TZ x926 = x902 + x925;
-Tbase TZ x927 = x895 + x926;
-Tbase TZ x928 = 0x1a;
-Tbase TZ x929 = x927 >>> x928;
-Tbase TZ x930 = x829 * x98;
-Tbase TZ x931 = x832 * x97;
-Tbase TZ x932 = x835 * x96;
-Tbase TZ x933 = x838 * x95;
-Tbase TZ x934 = x932 + x933;
-Tbase TZ x935 = x931 + x934;
-Tbase TZ x936 = x930 + x935;
-Tbase TZ x937 = x811 * x94;
-Tbase TZ x938 = x814 * x93;
-Tbase TZ x939 = x817 * x92;
-Tbase TZ x940 = x820 * x91;
-Tbase TZ x941 = x823 * x90;
-Tbase TZ x942 = x826 * x89;
-Tbase TZ x943 = x941 + x942;
-Tbase TZ x944 = x940 + x943;
-Tbase TZ x945 = x939 + x944;
-Tbase TZ x946 = x938 + x945;
-Tbase TZ x947 = x937 + x946;
-Tbase TZ x948 = 0x13;
-Tbase TZ x949 = x948 * x947;
-Tbase TZ x950 = x936 + x949;
-Tbase TZ x951 = x929 + x950;
-Tbase TZ x952 = 0x19;
-Tbase TZ x953 = x951 >>> x952;
-Tbase TZ x954 = x826 * x98;
-Tbase TZ x955 = 0x2;
-Tbase TZ x956 = x97 * x955;
-Tbase TZ x957 = x829 * x956;
-Tbase TZ x958 = x832 * x96;
-Tbase TZ x959 = 0x2;
-Tbase TZ x960 = x95 * x959;
-Tbase TZ x961 = x835 * x960;
-Tbase TZ x962 = x838 * x94;
-Tbase TZ x963 = x961 + x962;
-Tbase TZ x964 = x958 + x963;
-Tbase TZ x965 = x957 + x964;
-Tbase TZ x966 = x954 + x965;
-Tbase TZ x967 = 0x2;
-Tbase TZ x968 = x93 * x967;
-Tbase TZ x969 = x811 * x968;
-Tbase TZ x970 = x814 * x92;
-Tbase TZ x971 = 0x2;
-Tbase TZ x972 = x91 * x971;
-Tbase TZ x973 = x817 * x972;
-Tbase TZ x974 = x820 * x90;
-Tbase TZ x975 = 0x2;
-Tbase TZ x976 = x89 * x975;
-Tbase TZ x977 = x823 * x976;
-Tbase TZ x978 = x974 + x977;
-Tbase TZ x979 = x973 + x978;
-Tbase TZ x980 = x970 + x979;
-Tbase TZ x981 = x969 + x980;
-Tbase TZ x982 = 0x13;
-Tbase TZ x983 = x982 * x981;
-Tbase TZ x984 = x966 + x983;
-Tbase TZ x985 = x953 + x984;
-Tbase TZ x986 = 0x1a;
-Tbase TZ x987 = x985 >>> x986;
-Tbase TZ x988 = x823 * x98;
-Tbase TZ x989 = x826 * x97;
-Tbase TZ x990 = x829 * x96;
-Tbase TZ x991 = x832 * x95;
-Tbase TZ x992 = x835 * x94;
-Tbase TZ x993 = x838 * x93;
-Tbase TZ x994 = x992 + x993;
-Tbase TZ x995 = x991 + x994;
-Tbase TZ x996 = x990 + x995;
-Tbase TZ x997 = x989 + x996;
-Tbase TZ x998 = x988 + x997;
-Tbase TZ x999 = x811 * x92;
-Tbase TZ x1000 = x814 * x91;
-Tbase TZ x1001 = x817 * x90;
-Tbase TZ x1002 = x820 * x89;
-Tbase TZ x1003 = x1001 + x1002;
-Tbase TZ x1004 = x1000 + x1003;
-Tbase TZ x1005 = x999 + x1004;
-Tbase TZ x1006 = 0x13;
-Tbase TZ x1007 = x1006 * x1005;
-Tbase TZ x1008 = x998 + x1007;
-Tbase TZ x1009 = x987 + x1008;
-Tbase TZ x1010 = 0x19;
-Tbase TZ x1011 = x1009 >>> x1010;
-Tbase TZ x1012 = x820 * x98;
-Tbase TZ x1013 = 0x2;
-Tbase TZ x1014 = x97 * x1013;
-Tbase TZ x1015 = x823 * x1014;
-Tbase TZ x1016 = x826 * x96;
-Tbase TZ x1017 = 0x2;
-Tbase TZ x1018 = x95 * x1017;
-Tbase TZ x1019 = x829 * x1018;
-Tbase TZ x1020 = x832 * x94;
-Tbase TZ x1021 = 0x2;
-Tbase TZ x1022 = x93 * x1021;
-Tbase TZ x1023 = x835 * x1022;
-Tbase TZ x1024 = x838 * x92;
-Tbase TZ x1025 = x1023 + x1024;
-Tbase TZ x1026 = x1020 + x1025;
-Tbase TZ x1027 = x1019 + x1026;
-Tbase TZ x1028 = x1016 + x1027;
-Tbase TZ x1029 = x1015 + x1028;
-Tbase TZ x1030 = x1012 + x1029;
-Tbase TZ x1031 = 0x2;
-Tbase TZ x1032 = x91 * x1031;
-Tbase TZ x1033 = x811 * x1032;
-Tbase TZ x1034 = x814 * x90;
-Tbase TZ x1035 = 0x2;
-Tbase TZ x1036 = x89 * x1035;
-Tbase TZ x1037 = x817 * x1036;
-Tbase TZ x1038 = x1034 + x1037;
-Tbase TZ x1039 = x1033 + x1038;
-Tbase TZ x1040 = 0x13;
-Tbase TZ x1041 = x1040 * x1039;
-Tbase TZ x1042 = x1030 + x1041;
-Tbase TZ x1043 = x1011 + x1042;
-Tbase TZ x1044 = 0x1a;
-Tbase TZ x1045 = x1043 >>> x1044;
-Tbase TZ x1046 = x817 * x98;
-Tbase TZ x1047 = x820 * x97;
-Tbase TZ x1048 = x823 * x96;
-Tbase TZ x1049 = x826 * x95;
-Tbase TZ x1050 = x829 * x94;
-Tbase TZ x1051 = x832 * x93;
-Tbase TZ x1052 = x835 * x92;
-Tbase TZ x1053 = x838 * x91;
-Tbase TZ x1054 = x1052 + x1053;
-Tbase TZ x1055 = x1051 + x1054;
-Tbase TZ x1056 = x1050 + x1055;
-Tbase TZ x1057 = x1049 + x1056;
-Tbase TZ x1058 = x1048 + x1057;
-Tbase TZ x1059 = x1047 + x1058;
-Tbase TZ x1060 = x1046 + x1059;
-Tbase TZ x1061 = x811 * x90;
-Tbase TZ x1062 = x814 * x89;
-Tbase TZ x1063 = x1061 + x1062;
-Tbase TZ x1064 = 0x13;
-Tbase TZ x1065 = x1064 * x1063;
-Tbase TZ x1066 = x1060 + x1065;
-Tbase TZ x1067 = x1045 + x1066;
-Tbase TZ x1068 = 0x19;
-Tbase TZ x1069 = x1067 >>> x1068;
-Tbase TZ x1070 = x814 * x98;
-Tbase TZ x1071 = 0x2;
-Tbase TZ x1072 = x97 * x1071;
-Tbase TZ x1073 = x817 * x1072;
-Tbase TZ x1074 = x820 * x96;
-Tbase TZ x1075 = 0x2;
-Tbase TZ x1076 = x95 * x1075;
-Tbase TZ x1077 = x823 * x1076;
-Tbase TZ x1078 = x826 * x94;
-Tbase TZ x1079 = 0x2;
-Tbase TZ x1080 = x93 * x1079;
-Tbase TZ x1081 = x829 * x1080;
-Tbase TZ x1082 = x832 * x92;
-Tbase TZ x1083 = 0x2;
-Tbase TZ x1084 = x91 * x1083;
-Tbase TZ x1085 = x835 * x1084;
-Tbase TZ x1086 = x838 * x90;
-Tbase TZ x1087 = x1085 + x1086;
-Tbase TZ x1088 = x1082 + x1087;
-Tbase TZ x1089 = x1081 + x1088;
-Tbase TZ x1090 = x1078 + x1089;
-Tbase TZ x1091 = x1077 + x1090;
-Tbase TZ x1092 = x1074 + x1091;
-Tbase TZ x1093 = x1073 + x1092;
-Tbase TZ x1094 = x1070 + x1093;
-Tbase TZ x1095 = 0x2;
-Tbase TZ x1096 = x89 * x1095;
-Tbase TZ x1097 = x811 * x1096;
-Tbase TZ x1098 = 0x13;
-Tbase TZ x1099 = x1098 * x1097;
-Tbase TZ x1100 = x1094 + x1099;
-Tbase TZ x1101 = x1069 + x1100;
-Tbase TZ x1102 = 0x1a;
-Tbase TZ x1103 = x1101 >>> x1102;
-Tbase TZ x1104 = x811 * x98;
-Tbase TZ x1105 = x814 * x97;
-Tbase TZ x1106 = x817 * x96;
-Tbase TZ x1107 = x820 * x95;
-Tbase TZ x1108 = x823 * x94;
-Tbase TZ x1109 = x826 * x93;
-Tbase TZ x1110 = x829 * x92;
-Tbase TZ x1111 = x832 * x91;
-Tbase TZ x1112 = x835 * x90;
-Tbase TZ x1113 = x838 * x89;
-Tbase TZ x1114 = x1112 + x1113;
-Tbase TZ x1115 = x1111 + x1114;
-Tbase TZ x1116 = x1110 + x1115;
-Tbase TZ x1117 = x1109 + x1116;
-Tbase TZ x1118 = x1108 + x1117;
-Tbase TZ x1119 = x1107 + x1118;
-Tbase TZ x1120 = x1106 + x1119;
-Tbase TZ x1121 = x1105 + x1120;
-Tbase TZ x1122 = x1104 + x1121;
-Tbase TZ x1123 = x1103 + x1122;
-Tbase TZ x1124 = 0x19;
-Tbase TZ x1125 = x1123 >>> x1124;
-Tbase TZ x1126 = 0x13;
-Tbase TZ x1127 = x1126 * x1125;
-Tbase TZ x1128 = 0x3ffffff;
-Tbase TZ x1129 = x869 & x1128;
-Tbase TZ x1130 = x1127 + x1129;
-Tbase TZ x1131 = 0x1a;
-Tbase TZ x1132 = x1130 >>> x1131;
-Tbase TZ x1133 = 0x1ffffff;
-Tbase TZ x1134 = x893 & x1133;
-Tbase TZ x1135 = x1132 + x1134;
-Tbase TZ x1136 = 0x1ffffff;
-Tbase TZ x1137 = x1123 & x1136;
-Tbase TZ x1138 = 0x3ffffff;
-Tbase TZ x1139 = x1101 & x1138;
-Tbase TZ x1140 = 0x1ffffff;
-Tbase TZ x1141 = x1067 & x1140;
-Tbase TZ x1142 = 0x3ffffff;
-Tbase TZ x1143 = x1043 & x1142;
-Tbase TZ x1144 = 0x1ffffff;
-Tbase TZ x1145 = x1009 & x1144;
-Tbase TZ x1146 = 0x3ffffff;
-Tbase TZ x1147 = x985 & x1146;
-Tbase TZ x1148 = 0x1ffffff;
-Tbase TZ x1149 = x951 & x1148;
-Tbase TZ x1150 = 0x19;
-Tbase TZ x1151 = x1135 >>> x1150;
-Tbase TZ x1152 = 0x3ffffff;
-Tbase TZ x1153 = x927 & x1152;
-Tbase TZ x1154 = x1151 + x1153;
-Tbase TZ x1155 = 0x1ffffff;
-Tbase TZ x1156 = x1135 & x1155;
-Tbase TZ x1157 = 0x3ffffff;
-Tbase TZ x1158 = x1130 & x1157;
-Tbase TZ x1159 = x808 * x448;
-Tbase TZ x1160 = 0x2;
-Tbase TZ x1161 = x445 * x1160;
-Tbase TZ x1162 = x799 * x1161;
-Tbase TZ x1163 = x800 * x442;
-Tbase TZ x1164 = 0x2;
-Tbase TZ x1165 = x439 * x1164;
-Tbase TZ x1166 = x801 * x1165;
-Tbase TZ x1167 = x802 * x436;
-Tbase TZ x1168 = 0x2;
-Tbase TZ x1169 = x433 * x1168;
-Tbase TZ x1170 = x803 * x1169;
-Tbase TZ x1171 = x804 * x430;
-Tbase TZ x1172 = 0x2;
-Tbase TZ x1173 = x427 * x1172;
-Tbase TZ x1174 = x805 * x1173;
-Tbase TZ x1175 = x806 * x424;
-Tbase TZ x1176 = 0x2;
-Tbase TZ x1177 = x421 * x1176;
-Tbase TZ x1178 = x807 * x1177;
-Tbase TZ x1179 = x1175 + x1178;
-Tbase TZ x1180 = x1174 + x1179;
-Tbase TZ x1181 = x1171 + x1180;
-Tbase TZ x1182 = x1170 + x1181;
-Tbase TZ x1183 = x1167 + x1182;
-Tbase TZ x1184 = x1166 + x1183;
-Tbase TZ x1185 = x1163 + x1184;
-Tbase TZ x1186 = x1162 + x1185;
-Tbase TZ x1187 = 0x13;
-Tbase TZ x1188 = x1187 * x1186;
-Tbase TZ x1189 = x1159 + x1188;
-Tbase TZ x1190 = 0x1a;
-Tbase TZ x1191 = x1189 >>> x1190;
-Tbase TZ x1192 = x807 * x448;
-Tbase TZ x1193 = x808 * x445;
-Tbase TZ x1194 = x1192 + x1193;
-Tbase TZ x1195 = x799 * x442;
-Tbase TZ x1196 = x800 * x439;
-Tbase TZ x1197 = x801 * x436;
-Tbase TZ x1198 = x802 * x433;
-Tbase TZ x1199 = x803 * x430;
-Tbase TZ x1200 = x804 * x427;
-Tbase TZ x1201 = x805 * x424;
-Tbase TZ x1202 = x806 * x421;
-Tbase TZ x1203 = x1201 + x1202;
-Tbase TZ x1204 = x1200 + x1203;
-Tbase TZ x1205 = x1199 + x1204;
-Tbase TZ x1206 = x1198 + x1205;
-Tbase TZ x1207 = x1197 + x1206;
-Tbase TZ x1208 = x1196 + x1207;
-Tbase TZ x1209 = x1195 + x1208;
-Tbase TZ x1210 = 0x13;
-Tbase TZ x1211 = x1210 * x1209;
-Tbase TZ x1212 = x1194 + x1211;
-Tbase TZ x1213 = x1191 + x1212;
-Tbase TZ x1214 = 0x19;
-Tbase TZ x1215 = x1213 >>> x1214;
-Tbase TZ x1216 = x806 * x448;
-Tbase TZ x1217 = 0x2;
-Tbase TZ x1218 = x445 * x1217;
-Tbase TZ x1219 = x807 * x1218;
-Tbase TZ x1220 = x808 * x442;
-Tbase TZ x1221 = x1219 + x1220;
-Tbase TZ x1222 = x1216 + x1221;
-Tbase TZ x1223 = 0x2;
-Tbase TZ x1224 = x439 * x1223;
-Tbase TZ x1225 = x799 * x1224;
-Tbase TZ x1226 = x800 * x436;
-Tbase TZ x1227 = 0x2;
-Tbase TZ x1228 = x433 * x1227;
-Tbase TZ x1229 = x801 * x1228;
-Tbase TZ x1230 = x802 * x430;
-Tbase TZ x1231 = 0x2;
-Tbase TZ x1232 = x427 * x1231;
-Tbase TZ x1233 = x803 * x1232;
-Tbase TZ x1234 = x804 * x424;
-Tbase TZ x1235 = 0x2;
-Tbase TZ x1236 = x421 * x1235;
-Tbase TZ x1237 = x805 * x1236;
-Tbase TZ x1238 = x1234 + x1237;
-Tbase TZ x1239 = x1233 + x1238;
-Tbase TZ x1240 = x1230 + x1239;
-Tbase TZ x1241 = x1229 + x1240;
-Tbase TZ x1242 = x1226 + x1241;
-Tbase TZ x1243 = x1225 + x1242;
-Tbase TZ x1244 = 0x13;
-Tbase TZ x1245 = x1244 * x1243;
-Tbase TZ x1246 = x1222 + x1245;
-Tbase TZ x1247 = x1215 + x1246;
-Tbase TZ x1248 = 0x1a;
-Tbase TZ x1249 = x1247 >>> x1248;
-Tbase TZ x1250 = x805 * x448;
-Tbase TZ x1251 = x806 * x445;
-Tbase TZ x1252 = x807 * x442;
-Tbase TZ x1253 = x808 * x439;
-Tbase TZ x1254 = x1252 + x1253;
-Tbase TZ x1255 = x1251 + x1254;
-Tbase TZ x1256 = x1250 + x1255;
-Tbase TZ x1257 = x799 * x436;
-Tbase TZ x1258 = x800 * x433;
-Tbase TZ x1259 = x801 * x430;
-Tbase TZ x1260 = x802 * x427;
-Tbase TZ x1261 = x803 * x424;
-Tbase TZ x1262 = x804 * x421;
-Tbase TZ x1263 = x1261 + x1262;
-Tbase TZ x1264 = x1260 + x1263;
-Tbase TZ x1265 = x1259 + x1264;
-Tbase TZ x1266 = x1258 + x1265;
-Tbase TZ x1267 = x1257 + x1266;
-Tbase TZ x1268 = 0x13;
-Tbase TZ x1269 = x1268 * x1267;
-Tbase TZ x1270 = x1256 + x1269;
-Tbase TZ x1271 = x1249 + x1270;
-Tbase TZ x1272 = 0x19;
-Tbase TZ x1273 = x1271 >>> x1272;
-Tbase TZ x1274 = x804 * x448;
-Tbase TZ x1275 = 0x2;
-Tbase TZ x1276 = x445 * x1275;
-Tbase TZ x1277 = x805 * x1276;
-Tbase TZ x1278 = x806 * x442;
-Tbase TZ x1279 = 0x2;
-Tbase TZ x1280 = x439 * x1279;
-Tbase TZ x1281 = x807 * x1280;
-Tbase TZ x1282 = x808 * x436;
-Tbase TZ x1283 = x1281 + x1282;
-Tbase TZ x1284 = x1278 + x1283;
-Tbase TZ x1285 = x1277 + x1284;
-Tbase TZ x1286 = x1274 + x1285;
-Tbase TZ x1287 = 0x2;
-Tbase TZ x1288 = x433 * x1287;
-Tbase TZ x1289 = x799 * x1288;
-Tbase TZ x1290 = x800 * x430;
-Tbase TZ x1291 = 0x2;
-Tbase TZ x1292 = x427 * x1291;
-Tbase TZ x1293 = x801 * x1292;
-Tbase TZ x1294 = x802 * x424;
-Tbase TZ x1295 = 0x2;
-Tbase TZ x1296 = x421 * x1295;
-Tbase TZ x1297 = x803 * x1296;
-Tbase TZ x1298 = x1294 + x1297;
-Tbase TZ x1299 = x1293 + x1298;
-Tbase TZ x1300 = x1290 + x1299;
-Tbase TZ x1301 = x1289 + x1300;
-Tbase TZ x1302 = 0x13;
-Tbase TZ x1303 = x1302 * x1301;
-Tbase TZ x1304 = x1286 + x1303;
-Tbase TZ x1305 = x1273 + x1304;
-Tbase TZ x1306 = 0x1a;
-Tbase TZ x1307 = x1305 >>> x1306;
-Tbase TZ x1308 = x803 * x448;
-Tbase TZ x1309 = x804 * x445;
-Tbase TZ x1310 = x805 * x442;
-Tbase TZ x1311 = x806 * x439;
-Tbase TZ x1312 = x807 * x436;
-Tbase TZ x1313 = x808 * x433;
-Tbase TZ x1314 = x1312 + x1313;
-Tbase TZ x1315 = x1311 + x1314;
-Tbase TZ x1316 = x1310 + x1315;
-Tbase TZ x1317 = x1309 + x1316;
-Tbase TZ x1318 = x1308 + x1317;
-Tbase TZ x1319 = x799 * x430;
-Tbase TZ x1320 = x800 * x427;
-Tbase TZ x1321 = x801 * x424;
-Tbase TZ x1322 = x802 * x421;
-Tbase TZ x1323 = x1321 + x1322;
-Tbase TZ x1324 = x1320 + x1323;
-Tbase TZ x1325 = x1319 + x1324;
-Tbase TZ x1326 = 0x13;
-Tbase TZ x1327 = x1326 * x1325;
-Tbase TZ x1328 = x1318 + x1327;
-Tbase TZ x1329 = x1307 + x1328;
-Tbase TZ x1330 = 0x19;
-Tbase TZ x1331 = x1329 >>> x1330;
-Tbase TZ x1332 = x802 * x448;
-Tbase TZ x1333 = 0x2;
-Tbase TZ x1334 = x445 * x1333;
-Tbase TZ x1335 = x803 * x1334;
-Tbase TZ x1336 = x804 * x442;
-Tbase TZ x1337 = 0x2;
-Tbase TZ x1338 = x439 * x1337;
-Tbase TZ x1339 = x805 * x1338;
-Tbase TZ x1340 = x806 * x436;
-Tbase TZ x1341 = 0x2;
-Tbase TZ x1342 = x433 * x1341;
-Tbase TZ x1343 = x807 * x1342;
-Tbase TZ x1344 = x808 * x430;
-Tbase TZ x1345 = x1343 + x1344;
-Tbase TZ x1346 = x1340 + x1345;
-Tbase TZ x1347 = x1339 + x1346;
-Tbase TZ x1348 = x1336 + x1347;
-Tbase TZ x1349 = x1335 + x1348;
-Tbase TZ x1350 = x1332 + x1349;
-Tbase TZ x1351 = 0x2;
-Tbase TZ x1352 = x427 * x1351;
-Tbase TZ x1353 = x799 * x1352;
-Tbase TZ x1354 = x800 * x424;
-Tbase TZ x1355 = 0x2;
-Tbase TZ x1356 = x421 * x1355;
-Tbase TZ x1357 = x801 * x1356;
-Tbase TZ x1358 = x1354 + x1357;
-Tbase TZ x1359 = x1353 + x1358;
-Tbase TZ x1360 = 0x13;
-Tbase TZ x1361 = x1360 * x1359;
-Tbase TZ x1362 = x1350 + x1361;
-Tbase TZ x1363 = x1331 + x1362;
-Tbase TZ x1364 = 0x1a;
-Tbase TZ x1365 = x1363 >>> x1364;
-Tbase TZ x1366 = x801 * x448;
-Tbase TZ x1367 = x802 * x445;
-Tbase TZ x1368 = x803 * x442;
-Tbase TZ x1369 = x804 * x439;
-Tbase TZ x1370 = x805 * x436;
-Tbase TZ x1371 = x806 * x433;
-Tbase TZ x1372 = x807 * x430;
-Tbase TZ x1373 = x808 * x427;
-Tbase TZ x1374 = x1372 + x1373;
-Tbase TZ x1375 = x1371 + x1374;
-Tbase TZ x1376 = x1370 + x1375;
-Tbase TZ x1377 = x1369 + x1376;
-Tbase TZ x1378 = x1368 + x1377;
-Tbase TZ x1379 = x1367 + x1378;
-Tbase TZ x1380 = x1366 + x1379;
-Tbase TZ x1381 = x799 * x424;
-Tbase TZ x1382 = x800 * x421;
-Tbase TZ x1383 = x1381 + x1382;
-Tbase TZ x1384 = 0x13;
-Tbase TZ x1385 = x1384 * x1383;
-Tbase TZ x1386 = x1380 + x1385;
-Tbase TZ x1387 = x1365 + x1386;
-Tbase TZ x1388 = 0x19;
-Tbase TZ x1389 = x1387 >>> x1388;
-Tbase TZ x1390 = x800 * x448;
-Tbase TZ x1391 = 0x2;
-Tbase TZ x1392 = x445 * x1391;
-Tbase TZ x1393 = x801 * x1392;
-Tbase TZ x1394 = x802 * x442;
-Tbase TZ x1395 = 0x2;
-Tbase TZ x1396 = x439 * x1395;
-Tbase TZ x1397 = x803 * x1396;
-Tbase TZ x1398 = x804 * x436;
-Tbase TZ x1399 = 0x2;
-Tbase TZ x1400 = x433 * x1399;
-Tbase TZ x1401 = x805 * x1400;
-Tbase TZ x1402 = x806 * x430;
-Tbase TZ x1403 = 0x2;
-Tbase TZ x1404 = x427 * x1403;
-Tbase TZ x1405 = x807 * x1404;
-Tbase TZ x1406 = x808 * x424;
-Tbase TZ x1407 = x1405 + x1406;
-Tbase TZ x1408 = x1402 + x1407;
-Tbase TZ x1409 = x1401 + x1408;
-Tbase TZ x1410 = x1398 + x1409;
-Tbase TZ x1411 = x1397 + x1410;
-Tbase TZ x1412 = x1394 + x1411;
-Tbase TZ x1413 = x1393 + x1412;
-Tbase TZ x1414 = x1390 + x1413;
-Tbase TZ x1415 = 0x2;
-Tbase TZ x1416 = x421 * x1415;
-Tbase TZ x1417 = x799 * x1416;
-Tbase TZ x1418 = 0x13;
-Tbase TZ x1419 = x1418 * x1417;
-Tbase TZ x1420 = x1414 + x1419;
-Tbase TZ x1421 = x1389 + x1420;
-Tbase TZ x1422 = 0x1a;
-Tbase TZ x1423 = x1421 >>> x1422;
-Tbase TZ x1424 = x799 * x448;
-Tbase TZ x1425 = x800 * x445;
-Tbase TZ x1426 = x801 * x442;
-Tbase TZ x1427 = x802 * x439;
-Tbase TZ x1428 = x803 * x436;
-Tbase TZ x1429 = x804 * x433;
-Tbase TZ x1430 = x805 * x430;
-Tbase TZ x1431 = x806 * x427;
-Tbase TZ x1432 = x807 * x424;
-Tbase TZ x1433 = x808 * x421;
-Tbase TZ x1434 = x1432 + x1433;
-Tbase TZ x1435 = x1431 + x1434;
-Tbase TZ x1436 = x1430 + x1435;
-Tbase TZ x1437 = x1429 + x1436;
-Tbase TZ x1438 = x1428 + x1437;
-Tbase TZ x1439 = x1427 + x1438;
-Tbase TZ x1440 = x1426 + x1439;
-Tbase TZ x1441 = x1425 + x1440;
-Tbase TZ x1442 = x1424 + x1441;
-Tbase TZ x1443 = x1423 + x1442;
-Tbase TZ x1444 = 0x19;
-Tbase TZ x1445 = x1443 >>> x1444;
-Tbase TZ x1446 = 0x13;
-Tbase TZ x1447 = x1446 * x1445;
-Tbase TZ x1448 = 0x3ffffff;
-Tbase TZ x1449 = x1189 & x1448;
-Tbase TZ x1450 = x1447 + x1449;
-Tbase TZ x1451 = 0x1a;
-Tbase TZ x1452 = x1450 >>> x1451;
-Tbase TZ x1453 = 0x1ffffff;
-Tbase TZ x1454 = x1213 & x1453;
-Tbase TZ x1455 = x1452 + x1454;
-Tbase TZ x1456 = 0x1ffffff;
-Tbase TZ x1457 = x1443 & x1456;
-Tbase TZ x1458 = 0x3ffffff;
-Tbase TZ x1459 = x1421 & x1458;
-Tbase TZ x1460 = 0x1ffffff;
-Tbase TZ x1461 = x1387 & x1460;
-Tbase TZ x1462 = 0x3ffffff;
-Tbase TZ x1463 = x1363 & x1462;
-Tbase TZ x1464 = 0x1ffffff;
-Tbase TZ x1465 = x1329 & x1464;
-Tbase TZ x1466 = 0x3ffffff;
-Tbase TZ x1467 = x1305 & x1466;
-Tbase TZ x1468 = 0x1ffffff;
-Tbase TZ x1469 = x1271 & x1468;
-Tbase TZ x1470 = 0x19;
-Tbase TZ x1471 = x1455 >>> x1470;
-Tbase TZ x1472 = 0x3ffffff;
-Tbase TZ x1473 = x1247 & x1472;
-Tbase TZ x1474 = x1471 + x1473;
-Tbase TZ x1475 = 0x1ffffff;
-Tbase TZ x1476 = x1455 & x1475;
-Tbase TZ x1477 = 0x3ffffff;
-Tbase TZ x1478 = x1450 & x1477;
-Tbase TZ x1479 = x1137 + x1457;
-Tbase TZ x1480 = x1139 + x1459;
-Tbase TZ x1481 = x1141 + x1461;
-Tbase TZ x1482 = x1143 + x1463;
-Tbase TZ x1483 = x1145 + x1465;
-Tbase TZ x1484 = x1147 + x1467;
-Tbase TZ x1485 = x1149 + x1469;
-Tbase TZ x1486 = x1154 + x1474;
-Tbase TZ x1487 = x1156 + x1476;
-Tbase TZ x1488 = x1158 + x1478;
-Tbase TZ x1489 = x1137 + x1457;
-Tbase TZ x1490 = x1139 + x1459;
-Tbase TZ x1491 = x1141 + x1461;
-Tbase TZ x1492 = x1143 + x1463;
-Tbase TZ x1493 = x1145 + x1465;
-Tbase TZ x1494 = x1147 + x1467;
-Tbase TZ x1495 = x1149 + x1469;
-Tbase TZ x1496 = x1154 + x1474;
-Tbase TZ x1497 = x1156 + x1476;
-Tbase TZ x1498 = x1158 + x1478;
-Tbase TZ x1499 = x1488 * x1498;
-Tbase TZ x1500 = 0x2;
-Tbase TZ x1501 = x1497 * x1500;
-Tbase TZ x1502 = x1479 * x1501;
-Tbase TZ x1503 = x1480 * x1496;
-Tbase TZ x1504 = 0x2;
-Tbase TZ x1505 = x1495 * x1504;
-Tbase TZ x1506 = x1481 * x1505;
-Tbase TZ x1507 = x1482 * x1494;
-Tbase TZ x1508 = 0x2;
-Tbase TZ x1509 = x1493 * x1508;
-Tbase TZ x1510 = x1483 * x1509;
-Tbase TZ x1511 = x1484 * x1492;
-Tbase TZ x1512 = 0x2;
-Tbase TZ x1513 = x1491 * x1512;
-Tbase TZ x1514 = x1485 * x1513;
-Tbase TZ x1515 = x1486 * x1490;
-Tbase TZ x1516 = 0x2;
-Tbase TZ x1517 = x1489 * x1516;
-Tbase TZ x1518 = x1487 * x1517;
-Tbase TZ x1519 = x1515 + x1518;
-Tbase TZ x1520 = x1514 + x1519;
-Tbase TZ x1521 = x1511 + x1520;
-Tbase TZ x1522 = x1510 + x1521;
-Tbase TZ x1523 = x1507 + x1522;
-Tbase TZ x1524 = x1506 + x1523;
-Tbase TZ x1525 = x1503 + x1524;
-Tbase TZ x1526 = x1502 + x1525;
-Tbase TZ x1527 = 0x13;
-Tbase TZ x1528 = x1527 * x1526;
-Tbase TZ x1529 = x1499 + x1528;
-Tbase TZ x1530 = 0x1a;
-Tbase TZ x1531 = x1529 >>> x1530;
-Tbase TZ x1532 = x1487 * x1498;
-Tbase TZ x1533 = x1488 * x1497;
-Tbase TZ x1534 = x1532 + x1533;
-Tbase TZ x1535 = x1479 * x1496;
-Tbase TZ x1536 = x1480 * x1495;
-Tbase TZ x1537 = x1481 * x1494;
-Tbase TZ x1538 = x1482 * x1493;
-Tbase TZ x1539 = x1483 * x1492;
-Tbase TZ x1540 = x1484 * x1491;
-Tbase TZ x1541 = x1485 * x1490;
-Tbase TZ x1542 = x1486 * x1489;
-Tbase TZ x1543 = x1541 + x1542;
-Tbase TZ x1544 = x1540 + x1543;
-Tbase TZ x1545 = x1539 + x1544;
-Tbase TZ x1546 = x1538 + x1545;
-Tbase TZ x1547 = x1537 + x1546;
-Tbase TZ x1548 = x1536 + x1547;
-Tbase TZ x1549 = x1535 + x1548;
-Tbase TZ x1550 = 0x13;
-Tbase TZ x1551 = x1550 * x1549;
-Tbase TZ x1552 = x1534 + x1551;
-Tbase TZ x1553 = x1531 + x1552;
-Tbase TZ x1554 = 0x19;
-Tbase TZ x1555 = x1553 >>> x1554;
-Tbase TZ x1556 = x1486 * x1498;
-Tbase TZ x1557 = 0x2;
-Tbase TZ x1558 = x1497 * x1557;
-Tbase TZ x1559 = x1487 * x1558;
-Tbase TZ x1560 = x1488 * x1496;
-Tbase TZ x1561 = x1559 + x1560;
-Tbase TZ x1562 = x1556 + x1561;
-Tbase TZ x1563 = 0x2;
-Tbase TZ x1564 = x1495 * x1563;
-Tbase TZ x1565 = x1479 * x1564;
-Tbase TZ x1566 = x1480 * x1494;
-Tbase TZ x1567 = 0x2;
-Tbase TZ x1568 = x1493 * x1567;
-Tbase TZ x1569 = x1481 * x1568;
-Tbase TZ x1570 = x1482 * x1492;
-Tbase TZ x1571 = 0x2;
-Tbase TZ x1572 = x1491 * x1571;
-Tbase TZ x1573 = x1483 * x1572;
-Tbase TZ x1574 = x1484 * x1490;
-Tbase TZ x1575 = 0x2;
-Tbase TZ x1576 = x1489 * x1575;
-Tbase TZ x1577 = x1485 * x1576;
-Tbase TZ x1578 = x1574 + x1577;
-Tbase TZ x1579 = x1573 + x1578;
-Tbase TZ x1580 = x1570 + x1579;
-Tbase TZ x1581 = x1569 + x1580;
-Tbase TZ x1582 = x1566 + x1581;
-Tbase TZ x1583 = x1565 + x1582;
-Tbase TZ x1584 = 0x13;
-Tbase TZ x1585 = x1584 * x1583;
-Tbase TZ x1586 = x1562 + x1585;
-Tbase TZ x1587 = x1555 + x1586;
-Tbase TZ x1588 = 0x1a;
-Tbase TZ x1589 = x1587 >>> x1588;
-Tbase TZ x1590 = x1485 * x1498;
-Tbase TZ x1591 = x1486 * x1497;
-Tbase TZ x1592 = x1487 * x1496;
-Tbase TZ x1593 = x1488 * x1495;
-Tbase TZ x1594 = x1592 + x1593;
-Tbase TZ x1595 = x1591 + x1594;
-Tbase TZ x1596 = x1590 + x1595;
-Tbase TZ x1597 = x1479 * x1494;
-Tbase TZ x1598 = x1480 * x1493;
-Tbase TZ x1599 = x1481 * x1492;
-Tbase TZ x1600 = x1482 * x1491;
-Tbase TZ x1601 = x1483 * x1490;
-Tbase TZ x1602 = x1484 * x1489;
-Tbase TZ x1603 = x1601 + x1602;
-Tbase TZ x1604 = x1600 + x1603;
-Tbase TZ x1605 = x1599 + x1604;
-Tbase TZ x1606 = x1598 + x1605;
-Tbase TZ x1607 = x1597 + x1606;
-Tbase TZ x1608 = 0x13;
-Tbase TZ x1609 = x1608 * x1607;
-Tbase TZ x1610 = x1596 + x1609;
-Tbase TZ x1611 = x1589 + x1610;
-Tbase TZ x1612 = 0x19;
-Tbase TZ x1613 = x1611 >>> x1612;
-Tbase TZ x1614 = x1484 * x1498;
-Tbase TZ x1615 = 0x2;
-Tbase TZ x1616 = x1497 * x1615;
-Tbase TZ x1617 = x1485 * x1616;
-Tbase TZ x1618 = x1486 * x1496;
-Tbase TZ x1619 = 0x2;
-Tbase TZ x1620 = x1495 * x1619;
-Tbase TZ x1621 = x1487 * x1620;
-Tbase TZ x1622 = x1488 * x1494;
-Tbase TZ x1623 = x1621 + x1622;
-Tbase TZ x1624 = x1618 + x1623;
-Tbase TZ x1625 = x1617 + x1624;
-Tbase TZ x1626 = x1614 + x1625;
-Tbase TZ x1627 = 0x2;
-Tbase TZ x1628 = x1493 * x1627;
-Tbase TZ x1629 = x1479 * x1628;
-Tbase TZ x1630 = x1480 * x1492;
-Tbase TZ x1631 = 0x2;
-Tbase TZ x1632 = x1491 * x1631;
-Tbase TZ x1633 = x1481 * x1632;
-Tbase TZ x1634 = x1482 * x1490;
-Tbase TZ x1635 = 0x2;
-Tbase TZ x1636 = x1489 * x1635;
-Tbase TZ x1637 = x1483 * x1636;
-Tbase TZ x1638 = x1634 + x1637;
-Tbase TZ x1639 = x1633 + x1638;
-Tbase TZ x1640 = x1630 + x1639;
-Tbase TZ x1641 = x1629 + x1640;
-Tbase TZ x1642 = 0x13;
-Tbase TZ x1643 = x1642 * x1641;
-Tbase TZ x1644 = x1626 + x1643;
-Tbase TZ x1645 = x1613 + x1644;
-Tbase TZ x1646 = 0x1a;
-Tbase TZ x1647 = x1645 >>> x1646;
-Tbase TZ x1648 = x1483 * x1498;
-Tbase TZ x1649 = x1484 * x1497;
-Tbase TZ x1650 = x1485 * x1496;
-Tbase TZ x1651 = x1486 * x1495;
-Tbase TZ x1652 = x1487 * x1494;
-Tbase TZ x1653 = x1488 * x1493;
-Tbase TZ x1654 = x1652 + x1653;
-Tbase TZ x1655 = x1651 + x1654;
-Tbase TZ x1656 = x1650 + x1655;
-Tbase TZ x1657 = x1649 + x1656;
-Tbase TZ x1658 = x1648 + x1657;
-Tbase TZ x1659 = x1479 * x1492;
-Tbase TZ x1660 = x1480 * x1491;
-Tbase TZ x1661 = x1481 * x1490;
-Tbase TZ x1662 = x1482 * x1489;
-Tbase TZ x1663 = x1661 + x1662;
-Tbase TZ x1664 = x1660 + x1663;
-Tbase TZ x1665 = x1659 + x1664;
-Tbase TZ x1666 = 0x13;
-Tbase TZ x1667 = x1666 * x1665;
-Tbase TZ x1668 = x1658 + x1667;
-Tbase TZ x1669 = x1647 + x1668;
-Tbase TZ x1670 = 0x19;
-Tbase TZ x1671 = x1669 >>> x1670;
-Tbase TZ x1672 = x1482 * x1498;
-Tbase TZ x1673 = 0x2;
-Tbase TZ x1674 = x1497 * x1673;
-Tbase TZ x1675 = x1483 * x1674;
-Tbase TZ x1676 = x1484 * x1496;
-Tbase TZ x1677 = 0x2;
-Tbase TZ x1678 = x1495 * x1677;
-Tbase TZ x1679 = x1485 * x1678;
-Tbase TZ x1680 = x1486 * x1494;
-Tbase TZ x1681 = 0x2;
-Tbase TZ x1682 = x1493 * x1681;
-Tbase TZ x1683 = x1487 * x1682;
-Tbase TZ x1684 = x1488 * x1492;
-Tbase TZ x1685 = x1683 + x1684;
-Tbase TZ x1686 = x1680 + x1685;
-Tbase TZ x1687 = x1679 + x1686;
-Tbase TZ x1688 = x1676 + x1687;
-Tbase TZ x1689 = x1675 + x1688;
-Tbase TZ x1690 = x1672 + x1689;
-Tbase TZ x1691 = 0x2;
-Tbase TZ x1692 = x1491 * x1691;
-Tbase TZ x1693 = x1479 * x1692;
-Tbase TZ x1694 = x1480 * x1490;
-Tbase TZ x1695 = 0x2;
-Tbase TZ x1696 = x1489 * x1695;
-Tbase TZ x1697 = x1481 * x1696;
-Tbase TZ x1698 = x1694 + x1697;
-Tbase TZ x1699 = x1693 + x1698;
-Tbase TZ x1700 = 0x13;
-Tbase TZ x1701 = x1700 * x1699;
-Tbase TZ x1702 = x1690 + x1701;
-Tbase TZ x1703 = x1671 + x1702;
-Tbase TZ x1704 = 0x1a;
-Tbase TZ x1705 = x1703 >>> x1704;
-Tbase TZ x1706 = x1481 * x1498;
-Tbase TZ x1707 = x1482 * x1497;
-Tbase TZ x1708 = x1483 * x1496;
-Tbase TZ x1709 = x1484 * x1495;
-Tbase TZ x1710 = x1485 * x1494;
-Tbase TZ x1711 = x1486 * x1493;
-Tbase TZ x1712 = x1487 * x1492;
-Tbase TZ x1713 = x1488 * x1491;
-Tbase TZ x1714 = x1712 + x1713;
-Tbase TZ x1715 = x1711 + x1714;
-Tbase TZ x1716 = x1710 + x1715;
-Tbase TZ x1717 = x1709 + x1716;
-Tbase TZ x1718 = x1708 + x1717;
-Tbase TZ x1719 = x1707 + x1718;
-Tbase TZ x1720 = x1706 + x1719;
-Tbase TZ x1721 = x1479 * x1490;
-Tbase TZ x1722 = x1480 * x1489;
-Tbase TZ x1723 = x1721 + x1722;
-Tbase TZ x1724 = 0x13;
-Tbase TZ x1725 = x1724 * x1723;
-Tbase TZ x1726 = x1720 + x1725;
-Tbase TZ x1727 = x1705 + x1726;
-Tbase TZ x1728 = 0x19;
-Tbase TZ x1729 = x1727 >>> x1728;
-Tbase TZ x1730 = x1480 * x1498;
-Tbase TZ x1731 = 0x2;
-Tbase TZ x1732 = x1497 * x1731;
-Tbase TZ x1733 = x1481 * x1732;
-Tbase TZ x1734 = x1482 * x1496;
-Tbase TZ x1735 = 0x2;
-Tbase TZ x1736 = x1495 * x1735;
-Tbase TZ x1737 = x1483 * x1736;
-Tbase TZ x1738 = x1484 * x1494;
-Tbase TZ x1739 = 0x2;
-Tbase TZ x1740 = x1493 * x1739;
-Tbase TZ x1741 = x1485 * x1740;
-Tbase TZ x1742 = x1486 * x1492;
-Tbase TZ x1743 = 0x2;
-Tbase TZ x1744 = x1491 * x1743;
-Tbase TZ x1745 = x1487 * x1744;
-Tbase TZ x1746 = x1488 * x1490;
-Tbase TZ x1747 = x1745 + x1746;
-Tbase TZ x1748 = x1742 + x1747;
-Tbase TZ x1749 = x1741 + x1748;
-Tbase TZ x1750 = x1738 + x1749;
-Tbase TZ x1751 = x1737 + x1750;
-Tbase TZ x1752 = x1734 + x1751;
-Tbase TZ x1753 = x1733 + x1752;
-Tbase TZ x1754 = x1730 + x1753;
-Tbase TZ x1755 = 0x2;
-Tbase TZ x1756 = x1489 * x1755;
-Tbase TZ x1757 = x1479 * x1756;
-Tbase TZ x1758 = 0x13;
-Tbase TZ x1759 = x1758 * x1757;
-Tbase TZ x1760 = x1754 + x1759;
-Tbase TZ x1761 = x1729 + x1760;
-Tbase TZ x1762 = 0x1a;
-Tbase TZ x1763 = x1761 >>> x1762;
-Tbase TZ x1764 = x1479 * x1498;
-Tbase TZ x1765 = x1480 * x1497;
-Tbase TZ x1766 = x1481 * x1496;
-Tbase TZ x1767 = x1482 * x1495;
-Tbase TZ x1768 = x1483 * x1494;
-Tbase TZ x1769 = x1484 * x1493;
-Tbase TZ x1770 = x1485 * x1492;
-Tbase TZ x1771 = x1486 * x1491;
-Tbase TZ x1772 = x1487 * x1490;
-Tbase TZ x1773 = x1488 * x1489;
-Tbase TZ x1774 = x1772 + x1773;
-Tbase TZ x1775 = x1771 + x1774;
-Tbase TZ x1776 = x1770 + x1775;
-Tbase TZ x1777 = x1769 + x1776;
-Tbase TZ x1778 = x1768 + x1777;
-Tbase TZ x1779 = x1767 + x1778;
-Tbase TZ x1780 = x1766 + x1779;
-Tbase TZ x1781 = x1765 + x1780;
-Tbase TZ x1782 = x1764 + x1781;
-Tbase TZ x1783 = x1763 + x1782;
-Tbase TZ x1784 = 0x19;
-Tbase TZ x1785 = x1783 >>> x1784;
-Tbase TZ x1786 = 0x13;
-Tbase TZ x1787 = x1786 * x1785;
-Tbase TZ x1788 = 0x3ffffff;
-Tbase TZ x1789 = x1529 & x1788;
-Tbase TZ x1790 = x1787 + x1789;
-Tbase TZ x1791 = 0x1a;
-Tbase TZ x1792 = x1790 >>> x1791;
-Tbase TZ x1793 = 0x1ffffff;
-Tbase TZ x1794 = x1553 & x1793;
-Tbase TZ x1795 = x1792 + x1794;
-Tbase TZ x1796 = 0x1ffffff;
-Tbase TZ x1797 = x1783 & x1796;
-Tbase TZ x1798 = 0x3ffffff;
-Tbase TZ x1799 = x1761 & x1798;
-Tbase TZ x1800 = 0x1ffffff;
-Tbase TZ x1801 = x1727 & x1800;
-Tbase TZ x1802 = 0x3ffffff;
-Tbase TZ x1803 = x1703 & x1802;
-Tbase TZ x1804 = 0x1ffffff;
-Tbase TZ x1805 = x1669 & x1804;
-Tbase TZ x1806 = 0x3ffffff;
-Tbase TZ x1807 = x1645 & x1806;
-Tbase TZ x1808 = 0x1ffffff;
-Tbase TZ x1809 = x1611 & x1808;
-Tbase TZ x1810 = 0x19;
-Tbase TZ x1811 = x1795 >>> x1810;
-Tbase TZ x1812 = 0x3ffffff;
-Tbase TZ x1813 = x1587 & x1812;
-Tbase TZ x1814 = x1811 + x1813;
-Tbase TZ x1815 = 0x1ffffff;
-Tbase TZ x1816 = x1795 & x1815;
-Tbase TZ x1817 = 0x3ffffff;
-Tbase TZ x1818 = x1790 & x1817;
-Tbase TZ x1819 = 0x3fffffe;
-Tbase TZ x1820 = x1819 + x1137;
-Tbase TZ x1821 = x1820 - x1457;
-Tbase TZ x1822 = 0x7fffffe;
-Tbase TZ x1823 = x1822 + x1139;
-Tbase TZ x1824 = x1823 - x1459;
-Tbase TZ x1825 = 0x3fffffe;
-Tbase TZ x1826 = x1825 + x1141;
-Tbase TZ x1827 = x1826 - x1461;
-Tbase TZ x1828 = 0x7fffffe;
-Tbase TZ x1829 = x1828 + x1143;
-Tbase TZ x1830 = x1829 - x1463;
-Tbase TZ x1831 = 0x3fffffe;
-Tbase TZ x1832 = x1831 + x1145;
-Tbase TZ x1833 = x1832 - x1465;
-Tbase TZ x1834 = 0x7fffffe;
-Tbase TZ x1835 = x1834 + x1147;
-Tbase TZ x1836 = x1835 - x1467;
-Tbase TZ x1837 = 0x3fffffe;
-Tbase TZ x1838 = x1837 + x1149;
-Tbase TZ x1839 = x1838 - x1469;
-Tbase TZ x1840 = 0x7fffffe;
-Tbase TZ x1841 = x1840 + x1154;
-Tbase TZ x1842 = x1841 - x1474;
-Tbase TZ x1843 = 0x3fffffe;
-Tbase TZ x1844 = x1843 + x1156;
-Tbase TZ x1845 = x1844 - x1476;
-Tbase TZ x1846 = 0x7ffffda;
-Tbase TZ x1847 = x1846 + x1158;
-Tbase TZ x1848 = x1847 - x1478;
-Tbase TZ x1849 = 0x3fffffe;
-Tbase TZ x1850 = x1849 + x1137;
-Tbase TZ x1851 = x1850 - x1457;
-Tbase TZ x1852 = 0x7fffffe;
-Tbase TZ x1853 = x1852 + x1139;
-Tbase TZ x1854 = x1853 - x1459;
-Tbase TZ x1855 = 0x3fffffe;
-Tbase TZ x1856 = x1855 + x1141;
-Tbase TZ x1857 = x1856 - x1461;
-Tbase TZ x1858 = 0x7fffffe;
-Tbase TZ x1859 = x1858 + x1143;
-Tbase TZ x1860 = x1859 - x1463;
-Tbase TZ x1861 = 0x3fffffe;
-Tbase TZ x1862 = x1861 + x1145;
-Tbase TZ x1863 = x1862 - x1465;
-Tbase TZ x1864 = 0x7fffffe;
-Tbase TZ x1865 = x1864 + x1147;
-Tbase TZ x1866 = x1865 - x1467;
-Tbase TZ x1867 = 0x3fffffe;
-Tbase TZ x1868 = x1867 + x1149;
-Tbase TZ x1869 = x1868 - x1469;
-Tbase TZ x1870 = 0x7fffffe;
-Tbase TZ x1871 = x1870 + x1154;
-Tbase TZ x1872 = x1871 - x1474;
-Tbase TZ x1873 = 0x3fffffe;
-Tbase TZ x1874 = x1873 + x1156;
-Tbase TZ x1875 = x1874 - x1476;
-Tbase TZ x1876 = 0x7ffffda;
-Tbase TZ x1877 = x1876 + x1158;
-Tbase TZ x1878 = x1877 - x1478;
-Tbase TZ x1879 = x1848 * x1878;
-Tbase TZ x1880 = 0x2;
-Tbase TZ x1881 = x1875 * x1880;
-Tbase TZ x1882 = x1821 * x1881;
-Tbase TZ x1883 = x1824 * x1872;
-Tbase TZ x1884 = 0x2;
-Tbase TZ x1885 = x1869 * x1884;
-Tbase TZ x1886 = x1827 * x1885;
-Tbase TZ x1887 = x1830 * x1866;
-Tbase TZ x1888 = 0x2;
-Tbase TZ x1889 = x1863 * x1888;
-Tbase TZ x1890 = x1833 * x1889;
-Tbase TZ x1891 = x1836 * x1860;
-Tbase TZ x1892 = 0x2;
-Tbase TZ x1893 = x1857 * x1892;
-Tbase TZ x1894 = x1839 * x1893;
-Tbase TZ x1895 = x1842 * x1854;
-Tbase TZ x1896 = 0x2;
-Tbase TZ x1897 = x1851 * x1896;
-Tbase TZ x1898 = x1845 * x1897;
-Tbase TZ x1899 = x1895 + x1898;
-Tbase TZ x1900 = x1894 + x1899;
-Tbase TZ x1901 = x1891 + x1900;
-Tbase TZ x1902 = x1890 + x1901;
-Tbase TZ x1903 = x1887 + x1902;
-Tbase TZ x1904 = x1886 + x1903;
-Tbase TZ x1905 = x1883 + x1904;
-Tbase TZ x1906 = x1882 + x1905;
-Tbase TZ x1907 = 0x13;
-Tbase TZ x1908 = x1907 * x1906;
-Tbase TZ x1909 = x1879 + x1908;
-Tbase TZ x1910 = 0x1a;
-Tbase TZ x1911 = x1909 >>> x1910;
-Tbase TZ x1912 = x1845 * x1878;
-Tbase TZ x1913 = x1848 * x1875;
-Tbase TZ x1914 = x1912 + x1913;
-Tbase TZ x1915 = x1821 * x1872;
-Tbase TZ x1916 = x1824 * x1869;
-Tbase TZ x1917 = x1827 * x1866;
-Tbase TZ x1918 = x1830 * x1863;
-Tbase TZ x1919 = x1833 * x1860;
-Tbase TZ x1920 = x1836 * x1857;
-Tbase TZ x1921 = x1839 * x1854;
-Tbase TZ x1922 = x1842 * x1851;
-Tbase TZ x1923 = x1921 + x1922;
-Tbase TZ x1924 = x1920 + x1923;
-Tbase TZ x1925 = x1919 + x1924;
-Tbase TZ x1926 = x1918 + x1925;
-Tbase TZ x1927 = x1917 + x1926;
-Tbase TZ x1928 = x1916 + x1927;
-Tbase TZ x1929 = x1915 + x1928;
-Tbase TZ x1930 = 0x13;
-Tbase TZ x1931 = x1930 * x1929;
-Tbase TZ x1932 = x1914 + x1931;
-Tbase TZ x1933 = x1911 + x1932;
-Tbase TZ x1934 = 0x19;
-Tbase TZ x1935 = x1933 >>> x1934;
-Tbase TZ x1936 = x1842 * x1878;
-Tbase TZ x1937 = 0x2;
-Tbase TZ x1938 = x1875 * x1937;
-Tbase TZ x1939 = x1845 * x1938;
-Tbase TZ x1940 = x1848 * x1872;
-Tbase TZ x1941 = x1939 + x1940;
-Tbase TZ x1942 = x1936 + x1941;
-Tbase TZ x1943 = 0x2;
-Tbase TZ x1944 = x1869 * x1943;
-Tbase TZ x1945 = x1821 * x1944;
-Tbase TZ x1946 = x1824 * x1866;
-Tbase TZ x1947 = 0x2;
-Tbase TZ x1948 = x1863 * x1947;
-Tbase TZ x1949 = x1827 * x1948;
-Tbase TZ x1950 = x1830 * x1860;
-Tbase TZ x1951 = 0x2;
-Tbase TZ x1952 = x1857 * x1951;
-Tbase TZ x1953 = x1833 * x1952;
-Tbase TZ x1954 = x1836 * x1854;
-Tbase TZ x1955 = 0x2;
-Tbase TZ x1956 = x1851 * x1955;
-Tbase TZ x1957 = x1839 * x1956;
-Tbase TZ x1958 = x1954 + x1957;
-Tbase TZ x1959 = x1953 + x1958;
-Tbase TZ x1960 = x1950 + x1959;
-Tbase TZ x1961 = x1949 + x1960;
-Tbase TZ x1962 = x1946 + x1961;
-Tbase TZ x1963 = x1945 + x1962;
-Tbase TZ x1964 = 0x13;
-Tbase TZ x1965 = x1964 * x1963;
-Tbase TZ x1966 = x1942 + x1965;
-Tbase TZ x1967 = x1935 + x1966;
-Tbase TZ x1968 = 0x1a;
-Tbase TZ x1969 = x1967 >>> x1968;
-Tbase TZ x1970 = x1839 * x1878;
-Tbase TZ x1971 = x1842 * x1875;
-Tbase TZ x1972 = x1845 * x1872;
-Tbase TZ x1973 = x1848 * x1869;
-Tbase TZ x1974 = x1972 + x1973;
-Tbase TZ x1975 = x1971 + x1974;
-Tbase TZ x1976 = x1970 + x1975;
-Tbase TZ x1977 = x1821 * x1866;
-Tbase TZ x1978 = x1824 * x1863;
-Tbase TZ x1979 = x1827 * x1860;
-Tbase TZ x1980 = x1830 * x1857;
-Tbase TZ x1981 = x1833 * x1854;
-Tbase TZ x1982 = x1836 * x1851;
-Tbase TZ x1983 = x1981 + x1982;
-Tbase TZ x1984 = x1980 + x1983;
-Tbase TZ x1985 = x1979 + x1984;
-Tbase TZ x1986 = x1978 + x1985;
-Tbase TZ x1987 = x1977 + x1986;
-Tbase TZ x1988 = 0x13;
-Tbase TZ x1989 = x1988 * x1987;
-Tbase TZ x1990 = x1976 + x1989;
-Tbase TZ x1991 = x1969 + x1990;
-Tbase TZ x1992 = 0x19;
-Tbase TZ x1993 = x1991 >>> x1992;
-Tbase TZ x1994 = x1836 * x1878;
-Tbase TZ x1995 = 0x2;
-Tbase TZ x1996 = x1875 * x1995;
-Tbase TZ x1997 = x1839 * x1996;
-Tbase TZ x1998 = x1842 * x1872;
-Tbase TZ x1999 = 0x2;
-Tbase TZ x2000 = x1869 * x1999;
-Tbase TZ x2001 = x1845 * x2000;
-Tbase TZ x2002 = x1848 * x1866;
-Tbase TZ x2003 = x2001 + x2002;
-Tbase TZ x2004 = x1998 + x2003;
-Tbase TZ x2005 = x1997 + x2004;
-Tbase TZ x2006 = x1994 + x2005;
-Tbase TZ x2007 = 0x2;
-Tbase TZ x2008 = x1863 * x2007;
-Tbase TZ x2009 = x1821 * x2008;
-Tbase TZ x2010 = x1824 * x1860;
-Tbase TZ x2011 = 0x2;
-Tbase TZ x2012 = x1857 * x2011;
-Tbase TZ x2013 = x1827 * x2012;
-Tbase TZ x2014 = x1830 * x1854;
-Tbase TZ x2015 = 0x2;
-Tbase TZ x2016 = x1851 * x2015;
-Tbase TZ x2017 = x1833 * x2016;
-Tbase TZ x2018 = x2014 + x2017;
-Tbase TZ x2019 = x2013 + x2018;
-Tbase TZ x2020 = x2010 + x2019;
-Tbase TZ x2021 = x2009 + x2020;
-Tbase TZ x2022 = 0x13;
-Tbase TZ x2023 = x2022 * x2021;
-Tbase TZ x2024 = x2006 + x2023;
-Tbase TZ x2025 = x1993 + x2024;
-Tbase TZ x2026 = 0x1a;
-Tbase TZ x2027 = x2025 >>> x2026;
-Tbase TZ x2028 = x1833 * x1878;
-Tbase TZ x2029 = x1836 * x1875;
-Tbase TZ x2030 = x1839 * x1872;
-Tbase TZ x2031 = x1842 * x1869;
-Tbase TZ x2032 = x1845 * x1866;
-Tbase TZ x2033 = x1848 * x1863;
-Tbase TZ x2034 = x2032 + x2033;
-Tbase TZ x2035 = x2031 + x2034;
-Tbase TZ x2036 = x2030 + x2035;
-Tbase TZ x2037 = x2029 + x2036;
-Tbase TZ x2038 = x2028 + x2037;
-Tbase TZ x2039 = x1821 * x1860;
-Tbase TZ x2040 = x1824 * x1857;
-Tbase TZ x2041 = x1827 * x1854;
-Tbase TZ x2042 = x1830 * x1851;
-Tbase TZ x2043 = x2041 + x2042;
-Tbase TZ x2044 = x2040 + x2043;
-Tbase TZ x2045 = x2039 + x2044;
-Tbase TZ x2046 = 0x13;
-Tbase TZ x2047 = x2046 * x2045;
-Tbase TZ x2048 = x2038 + x2047;
-Tbase TZ x2049 = x2027 + x2048;
-Tbase TZ x2050 = 0x19;
-Tbase TZ x2051 = x2049 >>> x2050;
-Tbase TZ x2052 = x1830 * x1878;
-Tbase TZ x2053 = 0x2;
-Tbase TZ x2054 = x1875 * x2053;
-Tbase TZ x2055 = x1833 * x2054;
-Tbase TZ x2056 = x1836 * x1872;
-Tbase TZ x2057 = 0x2;
-Tbase TZ x2058 = x1869 * x2057;
-Tbase TZ x2059 = x1839 * x2058;
-Tbase TZ x2060 = x1842 * x1866;
-Tbase TZ x2061 = 0x2;
-Tbase TZ x2062 = x1863 * x2061;
-Tbase TZ x2063 = x1845 * x2062;
-Tbase TZ x2064 = x1848 * x1860;
-Tbase TZ x2065 = x2063 + x2064;
-Tbase TZ x2066 = x2060 + x2065;
-Tbase TZ x2067 = x2059 + x2066;
-Tbase TZ x2068 = x2056 + x2067;
-Tbase TZ x2069 = x2055 + x2068;
-Tbase TZ x2070 = x2052 + x2069;
-Tbase TZ x2071 = 0x2;
-Tbase TZ x2072 = x1857 * x2071;
-Tbase TZ x2073 = x1821 * x2072;
-Tbase TZ x2074 = x1824 * x1854;
-Tbase TZ x2075 = 0x2;
-Tbase TZ x2076 = x1851 * x2075;
-Tbase TZ x2077 = x1827 * x2076;
-Tbase TZ x2078 = x2074 + x2077;
-Tbase TZ x2079 = x2073 + x2078;
-Tbase TZ x2080 = 0x13;
-Tbase TZ x2081 = x2080 * x2079;
-Tbase TZ x2082 = x2070 + x2081;
-Tbase TZ x2083 = x2051 + x2082;
-Tbase TZ x2084 = 0x1a;
-Tbase TZ x2085 = x2083 >>> x2084;
-Tbase TZ x2086 = x1827 * x1878;
-Tbase TZ x2087 = x1830 * x1875;
-Tbase TZ x2088 = x1833 * x1872;
-Tbase TZ x2089 = x1836 * x1869;
-Tbase TZ x2090 = x1839 * x1866;
-Tbase TZ x2091 = x1842 * x1863;
-Tbase TZ x2092 = x1845 * x1860;
-Tbase TZ x2093 = x1848 * x1857;
-Tbase TZ x2094 = x2092 + x2093;
-Tbase TZ x2095 = x2091 + x2094;
-Tbase TZ x2096 = x2090 + x2095;
-Tbase TZ x2097 = x2089 + x2096;
-Tbase TZ x2098 = x2088 + x2097;
-Tbase TZ x2099 = x2087 + x2098;
-Tbase TZ x2100 = x2086 + x2099;
-Tbase TZ x2101 = x1821 * x1854;
-Tbase TZ x2102 = x1824 * x1851;
-Tbase TZ x2103 = x2101 + x2102;
-Tbase TZ x2104 = 0x13;
-Tbase TZ x2105 = x2104 * x2103;
-Tbase TZ x2106 = x2100 + x2105;
-Tbase TZ x2107 = x2085 + x2106;
-Tbase TZ x2108 = 0x19;
-Tbase TZ x2109 = x2107 >>> x2108;
-Tbase TZ x2110 = x1824 * x1878;
-Tbase TZ x2111 = 0x2;
-Tbase TZ x2112 = x1875 * x2111;
-Tbase TZ x2113 = x1827 * x2112;
-Tbase TZ x2114 = x1830 * x1872;
-Tbase TZ x2115 = 0x2;
-Tbase TZ x2116 = x1869 * x2115;
-Tbase TZ x2117 = x1833 * x2116;
-Tbase TZ x2118 = x1836 * x1866;
-Tbase TZ x2119 = 0x2;
-Tbase TZ x2120 = x1863 * x2119;
-Tbase TZ x2121 = x1839 * x2120;
-Tbase TZ x2122 = x1842 * x1860;
-Tbase TZ x2123 = 0x2;
-Tbase TZ x2124 = x1857 * x2123;
-Tbase TZ x2125 = x1845 * x2124;
-Tbase TZ x2126 = x1848 * x1854;
-Tbase TZ x2127 = x2125 + x2126;
-Tbase TZ x2128 = x2122 + x2127;
-Tbase TZ x2129 = x2121 + x2128;
-Tbase TZ x2130 = x2118 + x2129;
-Tbase TZ x2131 = x2117 + x2130;
-Tbase TZ x2132 = x2114 + x2131;
-Tbase TZ x2133 = x2113 + x2132;
-Tbase TZ x2134 = x2110 + x2133;
-Tbase TZ x2135 = 0x2;
-Tbase TZ x2136 = x1851 * x2135;
-Tbase TZ x2137 = x1821 * x2136;
-Tbase TZ x2138 = 0x13;
-Tbase TZ x2139 = x2138 * x2137;
-Tbase TZ x2140 = x2134 + x2139;
-Tbase TZ x2141 = x2109 + x2140;
-Tbase TZ x2142 = 0x1a;
-Tbase TZ x2143 = x2141 >>> x2142;
-Tbase TZ x2144 = x1821 * x1878;
-Tbase TZ x2145 = x1824 * x1875;
-Tbase TZ x2146 = x1827 * x1872;
-Tbase TZ x2147 = x1830 * x1869;
-Tbase TZ x2148 = x1833 * x1866;
-Tbase TZ x2149 = x1836 * x1863;
-Tbase TZ x2150 = x1839 * x1860;
-Tbase TZ x2151 = x1842 * x1857;
-Tbase TZ x2152 = x1845 * x1854;
-Tbase TZ x2153 = x1848 * x1851;
-Tbase TZ x2154 = x2152 + x2153;
-Tbase TZ x2155 = x2151 + x2154;
-Tbase TZ x2156 = x2150 + x2155;
-Tbase TZ x2157 = x2149 + x2156;
-Tbase TZ x2158 = x2148 + x2157;
-Tbase TZ x2159 = x2147 + x2158;
-Tbase TZ x2160 = x2146 + x2159;
-Tbase TZ x2161 = x2145 + x2160;
-Tbase TZ x2162 = x2144 + x2161;
-Tbase TZ x2163 = x2143 + x2162;
-Tbase TZ x2164 = 0x19;
-Tbase TZ x2165 = x2163 >>> x2164;
-Tbase TZ x2166 = 0x13;
-Tbase TZ x2167 = x2166 * x2165;
-Tbase TZ x2168 = 0x3ffffff;
-Tbase TZ x2169 = x1909 & x2168;
-Tbase TZ x2170 = x2167 + x2169;
-Tbase TZ x2171 = 0x1a;
-Tbase TZ x2172 = x2170 >>> x2171;
-Tbase TZ x2173 = 0x1ffffff;
-Tbase TZ x2174 = x1933 & x2173;
-Tbase TZ x2175 = x2172 + x2174;
-Tbase TZ x2176 = 0x1ffffff;
-Tbase TZ x2177 = x2163 & x2176;
-Tbase TZ x2178 = 0x3ffffff;
-Tbase TZ x2179 = x2141 & x2178;
-Tbase TZ x2180 = 0x1ffffff;
-Tbase TZ x2181 = x2107 & x2180;
-Tbase TZ x2182 = 0x3ffffff;
-Tbase TZ x2183 = x2083 & x2182;
-Tbase TZ x2184 = 0x1ffffff;
-Tbase TZ x2185 = x2049 & x2184;
-Tbase TZ x2186 = 0x3ffffff;
-Tbase TZ x2187 = x2025 & x2186;
-Tbase TZ x2188 = 0x1ffffff;
-Tbase TZ x2189 = x1991 & x2188;
-Tbase TZ x2190 = 0x19;
-Tbase TZ x2191 = x2175 >>> x2190;
-Tbase TZ x2192 = 0x3ffffff;
-Tbase TZ x2193 = x1967 & x2192;
-Tbase TZ x2194 = x2191 + x2193;
-Tbase TZ x2195 = 0x1ffffff;
-Tbase TZ x2196 = x2175 & x2195;
-Tbase TZ x2197 = 0x3ffffff;
-Tbase TZ x2198 = x2170 & x2197;
-Tbase TZ x2199 = x48 * x2198;
-Tbase TZ x2200 = 0x2;
-Tbase TZ x2201 = x2196 * x2200;
-Tbase TZ x2202 = x39 * x2201;
-Tbase TZ x2203 = x40 * x2194;
-Tbase TZ x2204 = 0x2;
-Tbase TZ x2205 = x2189 * x2204;
-Tbase TZ x2206 = x41 * x2205;
-Tbase TZ x2207 = x42 * x2187;
-Tbase TZ x2208 = 0x2;
-Tbase TZ x2209 = x2185 * x2208;
-Tbase TZ x2210 = x43 * x2209;
-Tbase TZ x2211 = x44 * x2183;
-Tbase TZ x2212 = 0x2;
-Tbase TZ x2213 = x2181 * x2212;
-Tbase TZ x2214 = x45 * x2213;
-Tbase TZ x2215 = x46 * x2179;
-Tbase TZ x2216 = 0x2;
-Tbase TZ x2217 = x2177 * x2216;
-Tbase TZ x2218 = x47 * x2217;
-Tbase TZ x2219 = x2215 + x2218;
-Tbase TZ x2220 = x2214 + x2219;
-Tbase TZ x2221 = x2211 + x2220;
-Tbase TZ x2222 = x2210 + x2221;
-Tbase TZ x2223 = x2207 + x2222;
-Tbase TZ x2224 = x2206 + x2223;
-Tbase TZ x2225 = x2203 + x2224;
-Tbase TZ x2226 = x2202 + x2225;
-Tbase TZ x2227 = 0x13;
-Tbase TZ x2228 = x2227 * x2226;
-Tbase TZ x2229 = x2199 + x2228;
-Tbase TZ x2230 = 0x1a;
-Tbase TZ x2231 = x2229 >>> x2230;
-Tbase TZ x2232 = x47 * x2198;
-Tbase TZ x2233 = x48 * x2196;
-Tbase TZ x2234 = x2232 + x2233;
-Tbase TZ x2235 = x39 * x2194;
-Tbase TZ x2236 = x40 * x2189;
-Tbase TZ x2237 = x41 * x2187;
-Tbase TZ x2238 = x42 * x2185;
-Tbase TZ x2239 = x43 * x2183;
-Tbase TZ x2240 = x44 * x2181;
-Tbase TZ x2241 = x45 * x2179;
-Tbase TZ x2242 = x46 * x2177;
-Tbase TZ x2243 = x2241 + x2242;
-Tbase TZ x2244 = x2240 + x2243;
-Tbase TZ x2245 = x2239 + x2244;
-Tbase TZ x2246 = x2238 + x2245;
-Tbase TZ x2247 = x2237 + x2246;
-Tbase TZ x2248 = x2236 + x2247;
-Tbase TZ x2249 = x2235 + x2248;
-Tbase TZ x2250 = 0x13;
-Tbase TZ x2251 = x2250 * x2249;
-Tbase TZ x2252 = x2234 + x2251;
-Tbase TZ x2253 = x2231 + x2252;
-Tbase TZ x2254 = 0x19;
-Tbase TZ x2255 = x2253 >>> x2254;
-Tbase TZ x2256 = x46 * x2198;
-Tbase TZ x2257 = 0x2;
-Tbase TZ x2258 = x2196 * x2257;
-Tbase TZ x2259 = x47 * x2258;
-Tbase TZ x2260 = x48 * x2194;
-Tbase TZ x2261 = x2259 + x2260;
-Tbase TZ x2262 = x2256 + x2261;
-Tbase TZ x2263 = 0x2;
-Tbase TZ x2264 = x2189 * x2263;
-Tbase TZ x2265 = x39 * x2264;
-Tbase TZ x2266 = x40 * x2187;
-Tbase TZ x2267 = 0x2;
-Tbase TZ x2268 = x2185 * x2267;
-Tbase TZ x2269 = x41 * x2268;
-Tbase TZ x2270 = x42 * x2183;
-Tbase TZ x2271 = 0x2;
-Tbase TZ x2272 = x2181 * x2271;
-Tbase TZ x2273 = x43 * x2272;
-Tbase TZ x2274 = x44 * x2179;
-Tbase TZ x2275 = 0x2;
-Tbase TZ x2276 = x2177 * x2275;
-Tbase TZ x2277 = x45 * x2276;
-Tbase TZ x2278 = x2274 + x2277;
-Tbase TZ x2279 = x2273 + x2278;
-Tbase TZ x2280 = x2270 + x2279;
-Tbase TZ x2281 = x2269 + x2280;
-Tbase TZ x2282 = x2266 + x2281;
-Tbase TZ x2283 = x2265 + x2282;
-Tbase TZ x2284 = 0x13;
-Tbase TZ x2285 = x2284 * x2283;
-Tbase TZ x2286 = x2262 + x2285;
-Tbase TZ x2287 = x2255 + x2286;
-Tbase TZ x2288 = 0x1a;
-Tbase TZ x2289 = x2287 >>> x2288;
-Tbase TZ x2290 = x45 * x2198;
-Tbase TZ x2291 = x46 * x2196;
-Tbase TZ x2292 = x47 * x2194;
-Tbase TZ x2293 = x48 * x2189;
-Tbase TZ x2294 = x2292 + x2293;
-Tbase TZ x2295 = x2291 + x2294;
-Tbase TZ x2296 = x2290 + x2295;
-Tbase TZ x2297 = x39 * x2187;
-Tbase TZ x2298 = x40 * x2185;
-Tbase TZ x2299 = x41 * x2183;
-Tbase TZ x2300 = x42 * x2181;
-Tbase TZ x2301 = x43 * x2179;
-Tbase TZ x2302 = x44 * x2177;
-Tbase TZ x2303 = x2301 + x2302;
-Tbase TZ x2304 = x2300 + x2303;
-Tbase TZ x2305 = x2299 + x2304;
-Tbase TZ x2306 = x2298 + x2305;
-Tbase TZ x2307 = x2297 + x2306;
-Tbase TZ x2308 = 0x13;
-Tbase TZ x2309 = x2308 * x2307;
-Tbase TZ x2310 = x2296 + x2309;
-Tbase TZ x2311 = x2289 + x2310;
-Tbase TZ x2312 = 0x19;
-Tbase TZ x2313 = x2311 >>> x2312;
-Tbase TZ x2314 = x44 * x2198;
-Tbase TZ x2315 = 0x2;
-Tbase TZ x2316 = x2196 * x2315;
-Tbase TZ x2317 = x45 * x2316;
-Tbase TZ x2318 = x46 * x2194;
-Tbase TZ x2319 = 0x2;
-Tbase TZ x2320 = x2189 * x2319;
-Tbase TZ x2321 = x47 * x2320;
-Tbase TZ x2322 = x48 * x2187;
-Tbase TZ x2323 = x2321 + x2322;
-Tbase TZ x2324 = x2318 + x2323;
-Tbase TZ x2325 = x2317 + x2324;
-Tbase TZ x2326 = x2314 + x2325;
-Tbase TZ x2327 = 0x2;
-Tbase TZ x2328 = x2185 * x2327;
-Tbase TZ x2329 = x39 * x2328;
-Tbase TZ x2330 = x40 * x2183;
-Tbase TZ x2331 = 0x2;
-Tbase TZ x2332 = x2181 * x2331;
-Tbase TZ x2333 = x41 * x2332;
-Tbase TZ x2334 = x42 * x2179;
-Tbase TZ x2335 = 0x2;
-Tbase TZ x2336 = x2177 * x2335;
-Tbase TZ x2337 = x43 * x2336;
-Tbase TZ x2338 = x2334 + x2337;
-Tbase TZ x2339 = x2333 + x2338;
-Tbase TZ x2340 = x2330 + x2339;
-Tbase TZ x2341 = x2329 + x2340;
-Tbase TZ x2342 = 0x13;
-Tbase TZ x2343 = x2342 * x2341;
-Tbase TZ x2344 = x2326 + x2343;
-Tbase TZ x2345 = x2313 + x2344;
-Tbase TZ x2346 = 0x1a;
-Tbase TZ x2347 = x2345 >>> x2346;
-Tbase TZ x2348 = x43 * x2198;
-Tbase TZ x2349 = x44 * x2196;
-Tbase TZ x2350 = x45 * x2194;
-Tbase TZ x2351 = x46 * x2189;
-Tbase TZ x2352 = x47 * x2187;
-Tbase TZ x2353 = x48 * x2185;
-Tbase TZ x2354 = x2352 + x2353;
-Tbase TZ x2355 = x2351 + x2354;
-Tbase TZ x2356 = x2350 + x2355;
-Tbase TZ x2357 = x2349 + x2356;
-Tbase TZ x2358 = x2348 + x2357;
-Tbase TZ x2359 = x39 * x2183;
-Tbase TZ x2360 = x40 * x2181;
-Tbase TZ x2361 = x41 * x2179;
-Tbase TZ x2362 = x42 * x2177;
-Tbase TZ x2363 = x2361 + x2362;
-Tbase TZ x2364 = x2360 + x2363;
-Tbase TZ x2365 = x2359 + x2364;
-Tbase TZ x2366 = 0x13;
-Tbase TZ x2367 = x2366 * x2365;
-Tbase TZ x2368 = x2358 + x2367;
-Tbase TZ x2369 = x2347 + x2368;
-Tbase TZ x2370 = 0x19;
-Tbase TZ x2371 = x2369 >>> x2370;
-Tbase TZ x2372 = x42 * x2198;
-Tbase TZ x2373 = 0x2;
-Tbase TZ x2374 = x2196 * x2373;
-Tbase TZ x2375 = x43 * x2374;
-Tbase TZ x2376 = x44 * x2194;
-Tbase TZ x2377 = 0x2;
-Tbase TZ x2378 = x2189 * x2377;
-Tbase TZ x2379 = x45 * x2378;
-Tbase TZ x2380 = x46 * x2187;
-Tbase TZ x2381 = 0x2;
-Tbase TZ x2382 = x2185 * x2381;
-Tbase TZ x2383 = x47 * x2382;
-Tbase TZ x2384 = x48 * x2183;
-Tbase TZ x2385 = x2383 + x2384;
-Tbase TZ x2386 = x2380 + x2385;
-Tbase TZ x2387 = x2379 + x2386;
-Tbase TZ x2388 = x2376 + x2387;
-Tbase TZ x2389 = x2375 + x2388;
-Tbase TZ x2390 = x2372 + x2389;
-Tbase TZ x2391 = 0x2;
-Tbase TZ x2392 = x2181 * x2391;
-Tbase TZ x2393 = x39 * x2392;
-Tbase TZ x2394 = x40 * x2179;
-Tbase TZ x2395 = 0x2;
-Tbase TZ x2396 = x2177 * x2395;
-Tbase TZ x2397 = x41 * x2396;
-Tbase TZ x2398 = x2394 + x2397;
-Tbase TZ x2399 = x2393 + x2398;
-Tbase TZ x2400 = 0x13;
-Tbase TZ x2401 = x2400 * x2399;
-Tbase TZ x2402 = x2390 + x2401;
-Tbase TZ x2403 = x2371 + x2402;
-Tbase TZ x2404 = 0x1a;
-Tbase TZ x2405 = x2403 >>> x2404;
-Tbase TZ x2406 = x41 * x2198;
-Tbase TZ x2407 = x42 * x2196;
-Tbase TZ x2408 = x43 * x2194;
-Tbase TZ x2409 = x44 * x2189;
-Tbase TZ x2410 = x45 * x2187;
-Tbase TZ x2411 = x46 * x2185;
-Tbase TZ x2412 = x47 * x2183;
-Tbase TZ x2413 = x48 * x2181;
-Tbase TZ x2414 = x2412 + x2413;
-Tbase TZ x2415 = x2411 + x2414;
-Tbase TZ x2416 = x2410 + x2415;
-Tbase TZ x2417 = x2409 + x2416;
-Tbase TZ x2418 = x2408 + x2417;
-Tbase TZ x2419 = x2407 + x2418;
-Tbase TZ x2420 = x2406 + x2419;
-Tbase TZ x2421 = x39 * x2179;
-Tbase TZ x2422 = x40 * x2177;
-Tbase TZ x2423 = x2421 + x2422;
-Tbase TZ x2424 = 0x13;
-Tbase TZ x2425 = x2424 * x2423;
-Tbase TZ x2426 = x2420 + x2425;
-Tbase TZ x2427 = x2405 + x2426;
-Tbase TZ x2428 = 0x19;
-Tbase TZ x2429 = x2427 >>> x2428;
-Tbase TZ x2430 = x40 * x2198;
-Tbase TZ x2431 = 0x2;
-Tbase TZ x2432 = x2196 * x2431;
-Tbase TZ x2433 = x41 * x2432;
-Tbase TZ x2434 = x42 * x2194;
-Tbase TZ x2435 = 0x2;
-Tbase TZ x2436 = x2189 * x2435;
-Tbase TZ x2437 = x43 * x2436;
-Tbase TZ x2438 = x44 * x2187;
-Tbase TZ x2439 = 0x2;
-Tbase TZ x2440 = x2185 * x2439;
-Tbase TZ x2441 = x45 * x2440;
-Tbase TZ x2442 = x46 * x2183;
-Tbase TZ x2443 = 0x2;
-Tbase TZ x2444 = x2181 * x2443;
-Tbase TZ x2445 = x47 * x2444;
-Tbase TZ x2446 = x48 * x2179;
-Tbase TZ x2447 = x2445 + x2446;
-Tbase TZ x2448 = x2442 + x2447;
-Tbase TZ x2449 = x2441 + x2448;
-Tbase TZ x2450 = x2438 + x2449;
-Tbase TZ x2451 = x2437 + x2450;
-Tbase TZ x2452 = x2434 + x2451;
-Tbase TZ x2453 = x2433 + x2452;
-Tbase TZ x2454 = x2430 + x2453;
-Tbase TZ x2455 = 0x2;
-Tbase TZ x2456 = x2177 * x2455;
-Tbase TZ x2457 = x39 * x2456;
-Tbase TZ x2458 = 0x13;
-Tbase TZ x2459 = x2458 * x2457;
-Tbase TZ x2460 = x2454 + x2459;
-Tbase TZ x2461 = x2429 + x2460;
-Tbase TZ x2462 = 0x1a;
-Tbase TZ x2463 = x2461 >>> x2462;
-Tbase TZ x2464 = x39 * x2198;
-Tbase TZ x2465 = x40 * x2196;
-Tbase TZ x2466 = x41 * x2194;
-Tbase TZ x2467 = x42 * x2189;
-Tbase TZ x2468 = x43 * x2187;
-Tbase TZ x2469 = x44 * x2185;
-Tbase TZ x2470 = x45 * x2183;
-Tbase TZ x2471 = x46 * x2181;
-Tbase TZ x2472 = x47 * x2179;
-Tbase TZ x2473 = x48 * x2177;
-Tbase TZ x2474 = x2472 + x2473;
-Tbase TZ x2475 = x2471 + x2474;
-Tbase TZ x2476 = x2470 + x2475;
-Tbase TZ x2477 = x2469 + x2476;
-Tbase TZ x2478 = x2468 + x2477;
-Tbase TZ x2479 = x2467 + x2478;
-Tbase TZ x2480 = x2466 + x2479;
-Tbase TZ x2481 = x2465 + x2480;
-Tbase TZ x2482 = x2464 + x2481;
-Tbase TZ x2483 = x2463 + x2482;
-Tbase TZ x2484 = 0x19;
-Tbase TZ x2485 = x2483 >>> x2484;
-Tbase TZ x2486 = 0x13;
-Tbase TZ x2487 = x2486 * x2485;
-Tbase TZ x2488 = 0x3ffffff;
-Tbase TZ x2489 = x2229 & x2488;
-Tbase TZ x2490 = x2487 + x2489;
-Tbase TZ x2491 = 0x1a;
-Tbase TZ x2492 = x2490 >>> x2491;
-Tbase TZ x2493 = 0x1ffffff;
-Tbase TZ x2494 = x2253 & x2493;
-Tbase TZ x2495 = x2492 + x2494;
-Tbase TZ x2496 = 0x1ffffff;
-Tbase TZ x2497 = x2483 & x2496;
-Tbase TZ x2498 = 0x3ffffff;
-Tbase TZ x2499 = x2461 & x2498;
-Tbase TZ x2500 = 0x1ffffff;
-Tbase TZ x2501 = x2427 & x2500;
-Tbase TZ x2502 = 0x3ffffff;
-Tbase TZ x2503 = x2403 & x2502;
-Tbase TZ x2504 = 0x1ffffff;
-Tbase TZ x2505 = x2369 & x2504;
-Tbase TZ x2506 = 0x3ffffff;
-Tbase TZ x2507 = x2345 & x2506;
-Tbase TZ x2508 = 0x1ffffff;
-Tbase TZ x2509 = x2311 & x2508;
-Tbase TZ x2510 = 0x19;
-Tbase TZ x2511 = x2495 >>> x2510;
-Tbase TZ x2512 = 0x3ffffff;
-Tbase TZ x2513 = x2287 & x2512;
-Tbase TZ x2514 = x2511 + x2513;
-Tbase TZ x2515 = 0x1ffffff;
-Tbase TZ x2516 = x2495 & x2515;
-Tbase TZ x2517 = 0x3ffffff;
-Tbase TZ x2518 = x2490 & x2517;
-Tbase TZ x2519 = x418 * x768;
-Tbase TZ x2520 = 0x2;
-Tbase TZ x2521 = x766 * x2520;
-Tbase TZ x2522 = x397 * x2521;
-Tbase TZ x2523 = x399 * x764;
-Tbase TZ x2524 = 0x2;
-Tbase TZ x2525 = x759 * x2524;
-Tbase TZ x2526 = x401 * x2525;
-Tbase TZ x2527 = x403 * x757;
-Tbase TZ x2528 = 0x2;
-Tbase TZ x2529 = x755 * x2528;
-Tbase TZ x2530 = x405 * x2529;
-Tbase TZ x2531 = x407 * x753;
-Tbase TZ x2532 = 0x2;
-Tbase TZ x2533 = x751 * x2532;
-Tbase TZ x2534 = x409 * x2533;
-Tbase TZ x2535 = x414 * x749;
-Tbase TZ x2536 = 0x2;
-Tbase TZ x2537 = x747 * x2536;
-Tbase TZ x2538 = x416 * x2537;
-Tbase TZ x2539 = x2535 + x2538;
-Tbase TZ x2540 = x2534 + x2539;
-Tbase TZ x2541 = x2531 + x2540;
-Tbase TZ x2542 = x2530 + x2541;
-Tbase TZ x2543 = x2527 + x2542;
-Tbase TZ x2544 = x2526 + x2543;
-Tbase TZ x2545 = x2523 + x2544;
-Tbase TZ x2546 = x2522 + x2545;
-Tbase TZ x2547 = 0x13;
-Tbase TZ x2548 = x2547 * x2546;
-Tbase TZ x2549 = x2519 + x2548;
-Tbase TZ x2550 = 0x1a;
-Tbase TZ x2551 = x2549 >>> x2550;
-Tbase TZ x2552 = x416 * x768;
-Tbase TZ x2553 = x418 * x766;
-Tbase TZ x2554 = x2552 + x2553;
-Tbase TZ x2555 = x397 * x764;
-Tbase TZ x2556 = x399 * x759;
-Tbase TZ x2557 = x401 * x757;
-Tbase TZ x2558 = x403 * x755;
-Tbase TZ x2559 = x405 * x753;
-Tbase TZ x2560 = x407 * x751;
-Tbase TZ x2561 = x409 * x749;
-Tbase TZ x2562 = x414 * x747;
-Tbase TZ x2563 = x2561 + x2562;
-Tbase TZ x2564 = x2560 + x2563;
-Tbase TZ x2565 = x2559 + x2564;
-Tbase TZ x2566 = x2558 + x2565;
-Tbase TZ x2567 = x2557 + x2566;
-Tbase TZ x2568 = x2556 + x2567;
-Tbase TZ x2569 = x2555 + x2568;
-Tbase TZ x2570 = 0x13;
-Tbase TZ x2571 = x2570 * x2569;
-Tbase TZ x2572 = x2554 + x2571;
-Tbase TZ x2573 = x2551 + x2572;
-Tbase TZ x2574 = 0x19;
-Tbase TZ x2575 = x2573 >>> x2574;
-Tbase TZ x2576 = x414 * x768;
-Tbase TZ x2577 = 0x2;
-Tbase TZ x2578 = x766 * x2577;
-Tbase TZ x2579 = x416 * x2578;
-Tbase TZ x2580 = x418 * x764;
-Tbase TZ x2581 = x2579 + x2580;
-Tbase TZ x2582 = x2576 + x2581;
-Tbase TZ x2583 = 0x2;
-Tbase TZ x2584 = x759 * x2583;
-Tbase TZ x2585 = x397 * x2584;
-Tbase TZ x2586 = x399 * x757;
-Tbase TZ x2587 = 0x2;
-Tbase TZ x2588 = x755 * x2587;
-Tbase TZ x2589 = x401 * x2588;
-Tbase TZ x2590 = x403 * x753;
-Tbase TZ x2591 = 0x2;
-Tbase TZ x2592 = x751 * x2591;
-Tbase TZ x2593 = x405 * x2592;
-Tbase TZ x2594 = x407 * x749;
-Tbase TZ x2595 = 0x2;
-Tbase TZ x2596 = x747 * x2595;
-Tbase TZ x2597 = x409 * x2596;
-Tbase TZ x2598 = x2594 + x2597;
-Tbase TZ x2599 = x2593 + x2598;
-Tbase TZ x2600 = x2590 + x2599;
-Tbase TZ x2601 = x2589 + x2600;
-Tbase TZ x2602 = x2586 + x2601;
-Tbase TZ x2603 = x2585 + x2602;
-Tbase TZ x2604 = 0x13;
-Tbase TZ x2605 = x2604 * x2603;
-Tbase TZ x2606 = x2582 + x2605;
-Tbase TZ x2607 = x2575 + x2606;
-Tbase TZ x2608 = 0x1a;
-Tbase TZ x2609 = x2607 >>> x2608;
-Tbase TZ x2610 = x409 * x768;
-Tbase TZ x2611 = x414 * x766;
-Tbase TZ x2612 = x416 * x764;
-Tbase TZ x2613 = x418 * x759;
-Tbase TZ x2614 = x2612 + x2613;
-Tbase TZ x2615 = x2611 + x2614;
-Tbase TZ x2616 = x2610 + x2615;
-Tbase TZ x2617 = x397 * x757;
-Tbase TZ x2618 = x399 * x755;
-Tbase TZ x2619 = x401 * x753;
-Tbase TZ x2620 = x403 * x751;
-Tbase TZ x2621 = x405 * x749;
-Tbase TZ x2622 = x407 * x747;
-Tbase TZ x2623 = x2621 + x2622;
-Tbase TZ x2624 = x2620 + x2623;
-Tbase TZ x2625 = x2619 + x2624;
-Tbase TZ x2626 = x2618 + x2625;
-Tbase TZ x2627 = x2617 + x2626;
-Tbase TZ x2628 = 0x13;
-Tbase TZ x2629 = x2628 * x2627;
-Tbase TZ x2630 = x2616 + x2629;
-Tbase TZ x2631 = x2609 + x2630;
-Tbase TZ x2632 = 0x19;
-Tbase TZ x2633 = x2631 >>> x2632;
-Tbase TZ x2634 = x407 * x768;
-Tbase TZ x2635 = 0x2;
-Tbase TZ x2636 = x766 * x2635;
-Tbase TZ x2637 = x409 * x2636;
-Tbase TZ x2638 = x414 * x764;
-Tbase TZ x2639 = 0x2;
-Tbase TZ x2640 = x759 * x2639;
-Tbase TZ x2641 = x416 * x2640;
-Tbase TZ x2642 = x418 * x757;
-Tbase TZ x2643 = x2641 + x2642;
-Tbase TZ x2644 = x2638 + x2643;
-Tbase TZ x2645 = x2637 + x2644;
-Tbase TZ x2646 = x2634 + x2645;
-Tbase TZ x2647 = 0x2;
-Tbase TZ x2648 = x755 * x2647;
-Tbase TZ x2649 = x397 * x2648;
-Tbase TZ x2650 = x399 * x753;
-Tbase TZ x2651 = 0x2;
-Tbase TZ x2652 = x751 * x2651;
-Tbase TZ x2653 = x401 * x2652;
-Tbase TZ x2654 = x403 * x749;
-Tbase TZ x2655 = 0x2;
-Tbase TZ x2656 = x747 * x2655;
-Tbase TZ x2657 = x405 * x2656;
-Tbase TZ x2658 = x2654 + x2657;
-Tbase TZ x2659 = x2653 + x2658;
-Tbase TZ x2660 = x2650 + x2659;
-Tbase TZ x2661 = x2649 + x2660;
-Tbase TZ x2662 = 0x13;
-Tbase TZ x2663 = x2662 * x2661;
-Tbase TZ x2664 = x2646 + x2663;
-Tbase TZ x2665 = x2633 + x2664;
-Tbase TZ x2666 = 0x1a;
-Tbase TZ x2667 = x2665 >>> x2666;
-Tbase TZ x2668 = x405 * x768;
-Tbase TZ x2669 = x407 * x766;
-Tbase TZ x2670 = x409 * x764;
-Tbase TZ x2671 = x414 * x759;
-Tbase TZ x2672 = x416 * x757;
-Tbase TZ x2673 = x418 * x755;
-Tbase TZ x2674 = x2672 + x2673;
-Tbase TZ x2675 = x2671 + x2674;
-Tbase TZ x2676 = x2670 + x2675;
-Tbase TZ x2677 = x2669 + x2676;
-Tbase TZ x2678 = x2668 + x2677;
-Tbase TZ x2679 = x397 * x753;
-Tbase TZ x2680 = x399 * x751;
-Tbase TZ x2681 = x401 * x749;
-Tbase TZ x2682 = x403 * x747;
-Tbase TZ x2683 = x2681 + x2682;
-Tbase TZ x2684 = x2680 + x2683;
-Tbase TZ x2685 = x2679 + x2684;
-Tbase TZ x2686 = 0x13;
-Tbase TZ x2687 = x2686 * x2685;
-Tbase TZ x2688 = x2678 + x2687;
-Tbase TZ x2689 = x2667 + x2688;
-Tbase TZ x2690 = 0x19;
-Tbase TZ x2691 = x2689 >>> x2690;
-Tbase TZ x2692 = x403 * x768;
-Tbase TZ x2693 = 0x2;
-Tbase TZ x2694 = x766 * x2693;
-Tbase TZ x2695 = x405 * x2694;
-Tbase TZ x2696 = x407 * x764;
-Tbase TZ x2697 = 0x2;
-Tbase TZ x2698 = x759 * x2697;
-Tbase TZ x2699 = x409 * x2698;
-Tbase TZ x2700 = x414 * x757;
-Tbase TZ x2701 = 0x2;
-Tbase TZ x2702 = x755 * x2701;
-Tbase TZ x2703 = x416 * x2702;
-Tbase TZ x2704 = x418 * x753;
-Tbase TZ x2705 = x2703 + x2704;
-Tbase TZ x2706 = x2700 + x2705;
-Tbase TZ x2707 = x2699 + x2706;
-Tbase TZ x2708 = x2696 + x2707;
-Tbase TZ x2709 = x2695 + x2708;
-Tbase TZ x2710 = x2692 + x2709;
-Tbase TZ x2711 = 0x2;
-Tbase TZ x2712 = x751 * x2711;
-Tbase TZ x2713 = x397 * x2712;
-Tbase TZ x2714 = x399 * x749;
-Tbase TZ x2715 = 0x2;
-Tbase TZ x2716 = x747 * x2715;
-Tbase TZ x2717 = x401 * x2716;
-Tbase TZ x2718 = x2714 + x2717;
-Tbase TZ x2719 = x2713 + x2718;
-Tbase TZ x2720 = 0x13;
-Tbase TZ x2721 = x2720 * x2719;
-Tbase TZ x2722 = x2710 + x2721;
-Tbase TZ x2723 = x2691 + x2722;
-Tbase TZ x2724 = 0x1a;
-Tbase TZ x2725 = x2723 >>> x2724;
-Tbase TZ x2726 = x401 * x768;
-Tbase TZ x2727 = x403 * x766;
-Tbase TZ x2728 = x405 * x764;
-Tbase TZ x2729 = x407 * x759;
-Tbase TZ x2730 = x409 * x757;
-Tbase TZ x2731 = x414 * x755;
-Tbase TZ x2732 = x416 * x753;
-Tbase TZ x2733 = x418 * x751;
-Tbase TZ x2734 = x2732 + x2733;
-Tbase TZ x2735 = x2731 + x2734;
-Tbase TZ x2736 = x2730 + x2735;
-Tbase TZ x2737 = x2729 + x2736;
-Tbase TZ x2738 = x2728 + x2737;
-Tbase TZ x2739 = x2727 + x2738;
-Tbase TZ x2740 = x2726 + x2739;
-Tbase TZ x2741 = x397 * x749;
-Tbase TZ x2742 = x399 * x747;
-Tbase TZ x2743 = x2741 + x2742;
-Tbase TZ x2744 = 0x13;
-Tbase TZ x2745 = x2744 * x2743;
-Tbase TZ x2746 = x2740 + x2745;
-Tbase TZ x2747 = x2725 + x2746;
-Tbase TZ x2748 = 0x19;
-Tbase TZ x2749 = x2747 >>> x2748;
-Tbase TZ x2750 = x399 * x768;
-Tbase TZ x2751 = 0x2;
-Tbase TZ x2752 = x766 * x2751;
-Tbase TZ x2753 = x401 * x2752;
-Tbase TZ x2754 = x403 * x764;
-Tbase TZ x2755 = 0x2;
-Tbase TZ x2756 = x759 * x2755;
-Tbase TZ x2757 = x405 * x2756;
-Tbase TZ x2758 = x407 * x757;
-Tbase TZ x2759 = 0x2;
-Tbase TZ x2760 = x755 * x2759;
-Tbase TZ x2761 = x409 * x2760;
-Tbase TZ x2762 = x414 * x753;
-Tbase TZ x2763 = 0x2;
-Tbase TZ x2764 = x751 * x2763;
-Tbase TZ x2765 = x416 * x2764;
-Tbase TZ x2766 = x418 * x749;
-Tbase TZ x2767 = x2765 + x2766;
-Tbase TZ x2768 = x2762 + x2767;
-Tbase TZ x2769 = x2761 + x2768;
-Tbase TZ x2770 = x2758 + x2769;
-Tbase TZ x2771 = x2757 + x2770;
-Tbase TZ x2772 = x2754 + x2771;
-Tbase TZ x2773 = x2753 + x2772;
-Tbase TZ x2774 = x2750 + x2773;
-Tbase TZ x2775 = 0x2;
-Tbase TZ x2776 = x747 * x2775;
-Tbase TZ x2777 = x397 * x2776;
-Tbase TZ x2778 = 0x13;
-Tbase TZ x2779 = x2778 * x2777;
-Tbase TZ x2780 = x2774 + x2779;
-Tbase TZ x2781 = x2749 + x2780;
-Tbase TZ x2782 = 0x1a;
-Tbase TZ x2783 = x2781 >>> x2782;
-Tbase TZ x2784 = x397 * x768;
-Tbase TZ x2785 = x399 * x766;
-Tbase TZ x2786 = x401 * x764;
-Tbase TZ x2787 = x403 * x759;
-Tbase TZ x2788 = x405 * x757;
-Tbase TZ x2789 = x407 * x755;
-Tbase TZ x2790 = x409 * x753;
-Tbase TZ x2791 = x414 * x751;
-Tbase TZ x2792 = x416 * x749;
-Tbase TZ x2793 = x418 * x747;
-Tbase TZ x2794 = x2792 + x2793;
-Tbase TZ x2795 = x2791 + x2794;
-Tbase TZ x2796 = x2790 + x2795;
-Tbase TZ x2797 = x2789 + x2796;
-Tbase TZ x2798 = x2788 + x2797;
-Tbase TZ x2799 = x2787 + x2798;
-Tbase TZ x2800 = x2786 + x2799;
-Tbase TZ x2801 = x2785 + x2800;
-Tbase TZ x2802 = x2784 + x2801;
-Tbase TZ x2803 = x2783 + x2802;
-Tbase TZ x2804 = 0x19;
-Tbase TZ x2805 = x2803 >>> x2804;
-Tbase TZ x2806 = 0x13;
-Tbase TZ x2807 = x2806 * x2805;
-Tbase TZ x2808 = 0x3ffffff;
-Tbase TZ x2809 = x2549 & x2808;
-Tbase TZ x2810 = x2807 + x2809;
-Tbase TZ x2811 = 0x1a;
-Tbase TZ x2812 = x2810 >>> x2811;
-Tbase TZ x2813 = 0x1ffffff;
-Tbase TZ x2814 = x2573 & x2813;
-Tbase TZ x2815 = x2812 + x2814;
-Tbase TZ x2816 = 0x1ffffff;
-Tbase TZ x2817 = x2803 & x2816;
-Tbase TZ x2818 = 0x3ffffff;
-Tbase TZ x2819 = x2781 & x2818;
-Tbase TZ x2820 = 0x1ffffff;
-Tbase TZ x2821 = x2747 & x2820;
-Tbase TZ x2822 = 0x3ffffff;
-Tbase TZ x2823 = x2723 & x2822;
-Tbase TZ x2824 = 0x1ffffff;
-Tbase TZ x2825 = x2689 & x2824;
-Tbase TZ x2826 = 0x3ffffff;
-Tbase TZ x2827 = x2665 & x2826;
-Tbase TZ x2828 = 0x1ffffff;
-Tbase TZ x2829 = x2631 & x2828;
-Tbase TZ x2830 = 0x19;
-Tbase TZ x2831 = x2815 >>> x2830;
-Tbase TZ x2832 = 0x3ffffff;
-Tbase TZ x2833 = x2607 & x2832;
-Tbase TZ x2834 = x2831 + x2833;
-Tbase TZ x2835 = 0x1ffffff;
-Tbase TZ x2836 = x2815 & x2835;
-Tbase TZ x2837 = 0x3ffffff;
-Tbase TZ x2838 = x2810 & x2837;
-Tbase TZ x2839 = x38 * x798;
-Tbase TZ x2840 = 0x2;
-Tbase TZ x2841 = x795 * x2840;
-Tbase TZ x2842 = x29 * x2841;
-Tbase TZ x2843 = x30 * x792;
-Tbase TZ x2844 = 0x2;
-Tbase TZ x2845 = x789 * x2844;
-Tbase TZ x2846 = x31 * x2845;
-Tbase TZ x2847 = x32 * x786;
-Tbase TZ x2848 = 0x2;
-Tbase TZ x2849 = x783 * x2848;
-Tbase TZ x2850 = x33 * x2849;
-Tbase TZ x2851 = x34 * x780;
-Tbase TZ x2852 = 0x2;
-Tbase TZ x2853 = x777 * x2852;
-Tbase TZ x2854 = x35 * x2853;
-Tbase TZ x2855 = x36 * x774;
-Tbase TZ x2856 = 0x2;
-Tbase TZ x2857 = x771 * x2856;
-Tbase TZ x2858 = x37 * x2857;
-Tbase TZ x2859 = x2855 + x2858;
-Tbase TZ x2860 = x2854 + x2859;
-Tbase TZ x2861 = x2851 + x2860;
-Tbase TZ x2862 = x2850 + x2861;
-Tbase TZ x2863 = x2847 + x2862;
-Tbase TZ x2864 = x2846 + x2863;
-Tbase TZ x2865 = x2843 + x2864;
-Tbase TZ x2866 = x2842 + x2865;
-Tbase TZ x2867 = 0x13;
-Tbase TZ x2868 = x2867 * x2866;
-Tbase TZ x2869 = x2839 + x2868;
-Tbase TZ x2870 = 0x1a;
-Tbase TZ x2871 = x2869 >>> x2870;
-Tbase TZ x2872 = x37 * x798;
-Tbase TZ x2873 = x38 * x795;
-Tbase TZ x2874 = x2872 + x2873;
-Tbase TZ x2875 = x29 * x792;
-Tbase TZ x2876 = x30 * x789;
-Tbase TZ x2877 = x31 * x786;
-Tbase TZ x2878 = x32 * x783;
-Tbase TZ x2879 = x33 * x780;
-Tbase TZ x2880 = x34 * x777;
-Tbase TZ x2881 = x35 * x774;
-Tbase TZ x2882 = x36 * x771;
-Tbase TZ x2883 = x2881 + x2882;
-Tbase TZ x2884 = x2880 + x2883;
-Tbase TZ x2885 = x2879 + x2884;
-Tbase TZ x2886 = x2878 + x2885;
-Tbase TZ x2887 = x2877 + x2886;
-Tbase TZ x2888 = x2876 + x2887;
-Tbase TZ x2889 = x2875 + x2888;
-Tbase TZ x2890 = 0x13;
-Tbase TZ x2891 = x2890 * x2889;
-Tbase TZ x2892 = x2874 + x2891;
-Tbase TZ x2893 = x2871 + x2892;
-Tbase TZ x2894 = 0x19;
-Tbase TZ x2895 = x2893 >>> x2894;
-Tbase TZ x2896 = x36 * x798;
-Tbase TZ x2897 = 0x2;
-Tbase TZ x2898 = x795 * x2897;
-Tbase TZ x2899 = x37 * x2898;
-Tbase TZ x2900 = x38 * x792;
-Tbase TZ x2901 = x2899 + x2900;
-Tbase TZ x2902 = x2896 + x2901;
-Tbase TZ x2903 = 0x2;
-Tbase TZ x2904 = x789 * x2903;
-Tbase TZ x2905 = x29 * x2904;
-Tbase TZ x2906 = x30 * x786;
-Tbase TZ x2907 = 0x2;
-Tbase TZ x2908 = x783 * x2907;
-Tbase TZ x2909 = x31 * x2908;
-Tbase TZ x2910 = x32 * x780;
-Tbase TZ x2911 = 0x2;
-Tbase TZ x2912 = x777 * x2911;
-Tbase TZ x2913 = x33 * x2912;
-Tbase TZ x2914 = x34 * x774;
-Tbase TZ x2915 = 0x2;
-Tbase TZ x2916 = x771 * x2915;
-Tbase TZ x2917 = x35 * x2916;
-Tbase TZ x2918 = x2914 + x2917;
-Tbase TZ x2919 = x2913 + x2918;
-Tbase TZ x2920 = x2910 + x2919;
-Tbase TZ x2921 = x2909 + x2920;
-Tbase TZ x2922 = x2906 + x2921;
-Tbase TZ x2923 = x2905 + x2922;
-Tbase TZ x2924 = 0x13;
-Tbase TZ x2925 = x2924 * x2923;
-Tbase TZ x2926 = x2902 + x2925;
-Tbase TZ x2927 = x2895 + x2926;
-Tbase TZ x2928 = 0x1a;
-Tbase TZ x2929 = x2927 >>> x2928;
-Tbase TZ x2930 = x35 * x798;
-Tbase TZ x2931 = x36 * x795;
-Tbase TZ x2932 = x37 * x792;
-Tbase TZ x2933 = x38 * x789;
-Tbase TZ x2934 = x2932 + x2933;
-Tbase TZ x2935 = x2931 + x2934;
-Tbase TZ x2936 = x2930 + x2935;
-Tbase TZ x2937 = x29 * x786;
-Tbase TZ x2938 = x30 * x783;
-Tbase TZ x2939 = x31 * x780;
-Tbase TZ x2940 = x32 * x777;
-Tbase TZ x2941 = x33 * x774;
-Tbase TZ x2942 = x34 * x771;
-Tbase TZ x2943 = x2941 + x2942;
-Tbase TZ x2944 = x2940 + x2943;
-Tbase TZ x2945 = x2939 + x2944;
-Tbase TZ x2946 = x2938 + x2945;
-Tbase TZ x2947 = x2937 + x2946;
-Tbase TZ x2948 = 0x13;
-Tbase TZ x2949 = x2948 * x2947;
-Tbase TZ x2950 = x2936 + x2949;
-Tbase TZ x2951 = x2929 + x2950;
-Tbase TZ x2952 = 0x19;
-Tbase TZ x2953 = x2951 >>> x2952;
-Tbase TZ x2954 = x34 * x798;
-Tbase TZ x2955 = 0x2;
-Tbase TZ x2956 = x795 * x2955;
-Tbase TZ x2957 = x35 * x2956;
-Tbase TZ x2958 = x36 * x792;
-Tbase TZ x2959 = 0x2;
-Tbase TZ x2960 = x789 * x2959;
-Tbase TZ x2961 = x37 * x2960;
-Tbase TZ x2962 = x38 * x786;
-Tbase TZ x2963 = x2961 + x2962;
-Tbase TZ x2964 = x2958 + x2963;
-Tbase TZ x2965 = x2957 + x2964;
-Tbase TZ x2966 = x2954 + x2965;
-Tbase TZ x2967 = 0x2;
-Tbase TZ x2968 = x783 * x2967;
-Tbase TZ x2969 = x29 * x2968;
-Tbase TZ x2970 = x30 * x780;
-Tbase TZ x2971 = 0x2;
-Tbase TZ x2972 = x777 * x2971;
-Tbase TZ x2973 = x31 * x2972;
-Tbase TZ x2974 = x32 * x774;
-Tbase TZ x2975 = 0x2;
-Tbase TZ x2976 = x771 * x2975;
-Tbase TZ x2977 = x33 * x2976;
-Tbase TZ x2978 = x2974 + x2977;
-Tbase TZ x2979 = x2973 + x2978;
-Tbase TZ x2980 = x2970 + x2979;
-Tbase TZ x2981 = x2969 + x2980;
-Tbase TZ x2982 = 0x13;
-Tbase TZ x2983 = x2982 * x2981;
-Tbase TZ x2984 = x2966 + x2983;
-Tbase TZ x2985 = x2953 + x2984;
-Tbase TZ x2986 = 0x1a;
-Tbase TZ x2987 = x2985 >>> x2986;
-Tbase TZ x2988 = x33 * x798;
-Tbase TZ x2989 = x34 * x795;
-Tbase TZ x2990 = x35 * x792;
-Tbase TZ x2991 = x36 * x789;
-Tbase TZ x2992 = x37 * x786;
-Tbase TZ x2993 = x38 * x783;
-Tbase TZ x2994 = x2992 + x2993;
-Tbase TZ x2995 = x2991 + x2994;
-Tbase TZ x2996 = x2990 + x2995;
-Tbase TZ x2997 = x2989 + x2996;
-Tbase TZ x2998 = x2988 + x2997;
-Tbase TZ x2999 = x29 * x780;
-Tbase TZ x3000 = x30 * x777;
-Tbase TZ x3001 = x31 * x774;
-Tbase TZ x3002 = x32 * x771;
-Tbase TZ x3003 = x3001 + x3002;
-Tbase TZ x3004 = x3000 + x3003;
-Tbase TZ x3005 = x2999 + x3004;
-Tbase TZ x3006 = 0x13;
-Tbase TZ x3007 = x3006 * x3005;
-Tbase TZ x3008 = x2998 + x3007;
-Tbase TZ x3009 = x2987 + x3008;
-Tbase TZ x3010 = 0x19;
-Tbase TZ x3011 = x3009 >>> x3010;
-Tbase TZ x3012 = x32 * x798;
-Tbase TZ x3013 = 0x2;
-Tbase TZ x3014 = x795 * x3013;
-Tbase TZ x3015 = x33 * x3014;
-Tbase TZ x3016 = x34 * x792;
-Tbase TZ x3017 = 0x2;
-Tbase TZ x3018 = x789 * x3017;
-Tbase TZ x3019 = x35 * x3018;
-Tbase TZ x3020 = x36 * x786;
-Tbase TZ x3021 = 0x2;
-Tbase TZ x3022 = x783 * x3021;
-Tbase TZ x3023 = x37 * x3022;
-Tbase TZ x3024 = x38 * x780;
-Tbase TZ x3025 = x3023 + x3024;
-Tbase TZ x3026 = x3020 + x3025;
-Tbase TZ x3027 = x3019 + x3026;
-Tbase TZ x3028 = x3016 + x3027;
-Tbase TZ x3029 = x3015 + x3028;
-Tbase TZ x3030 = x3012 + x3029;
-Tbase TZ x3031 = 0x2;
-Tbase TZ x3032 = x777 * x3031;
-Tbase TZ x3033 = x29 * x3032;
-Tbase TZ x3034 = x30 * x774;
-Tbase TZ x3035 = 0x2;
-Tbase TZ x3036 = x771 * x3035;
-Tbase TZ x3037 = x31 * x3036;
-Tbase TZ x3038 = x3034 + x3037;
-Tbase TZ x3039 = x3033 + x3038;
-Tbase TZ x3040 = 0x13;
-Tbase TZ x3041 = x3040 * x3039;
-Tbase TZ x3042 = x3030 + x3041;
-Tbase TZ x3043 = x3011 + x3042;
-Tbase TZ x3044 = 0x1a;
-Tbase TZ x3045 = x3043 >>> x3044;
-Tbase TZ x3046 = x31 * x798;
-Tbase TZ x3047 = x32 * x795;
-Tbase TZ x3048 = x33 * x792;
-Tbase TZ x3049 = x34 * x789;
-Tbase TZ x3050 = x35 * x786;
-Tbase TZ x3051 = x36 * x783;
-Tbase TZ x3052 = x37 * x780;
-Tbase TZ x3053 = x38 * x777;
-Tbase TZ x3054 = x3052 + x3053;
-Tbase TZ x3055 = x3051 + x3054;
-Tbase TZ x3056 = x3050 + x3055;
-Tbase TZ x3057 = x3049 + x3056;
-Tbase TZ x3058 = x3048 + x3057;
-Tbase TZ x3059 = x3047 + x3058;
-Tbase TZ x3060 = x3046 + x3059;
-Tbase TZ x3061 = x29 * x774;
-Tbase TZ x3062 = x30 * x771;
-Tbase TZ x3063 = x3061 + x3062;
-Tbase TZ x3064 = 0x13;
-Tbase TZ x3065 = x3064 * x3063;
-Tbase TZ x3066 = x3060 + x3065;
-Tbase TZ x3067 = x3045 + x3066;
-Tbase TZ x3068 = 0x19;
-Tbase TZ x3069 = x3067 >>> x3068;
-Tbase TZ x3070 = x30 * x798;
-Tbase TZ x3071 = 0x2;
-Tbase TZ x3072 = x795 * x3071;
-Tbase TZ x3073 = x31 * x3072;
-Tbase TZ x3074 = x32 * x792;
-Tbase TZ x3075 = 0x2;
-Tbase TZ x3076 = x789 * x3075;
-Tbase TZ x3077 = x33 * x3076;
-Tbase TZ x3078 = x34 * x786;
-Tbase TZ x3079 = 0x2;
-Tbase TZ x3080 = x783 * x3079;
-Tbase TZ x3081 = x35 * x3080;
-Tbase TZ x3082 = x36 * x780;
-Tbase TZ x3083 = 0x2;
-Tbase TZ x3084 = x777 * x3083;
-Tbase TZ x3085 = x37 * x3084;
-Tbase TZ x3086 = x38 * x774;
-Tbase TZ x3087 = x3085 + x3086;
-Tbase TZ x3088 = x3082 + x3087;
-Tbase TZ x3089 = x3081 + x3088;
-Tbase TZ x3090 = x3078 + x3089;
-Tbase TZ x3091 = x3077 + x3090;
-Tbase TZ x3092 = x3074 + x3091;
-Tbase TZ x3093 = x3073 + x3092;
-Tbase TZ x3094 = x3070 + x3093;
-Tbase TZ x3095 = 0x2;
-Tbase TZ x3096 = x771 * x3095;
-Tbase TZ x3097 = x29 * x3096;
-Tbase TZ x3098 = 0x13;
-Tbase TZ x3099 = x3098 * x3097;
-Tbase TZ x3100 = x3094 + x3099;
-Tbase TZ x3101 = x3069 + x3100;
-Tbase TZ x3102 = 0x1a;
-Tbase TZ x3103 = x3101 >>> x3102;
-Tbase TZ x3104 = x29 * x798;
-Tbase TZ x3105 = x30 * x795;
-Tbase TZ x3106 = x31 * x792;
-Tbase TZ x3107 = x32 * x789;
-Tbase TZ x3108 = x33 * x786;
-Tbase TZ x3109 = x34 * x783;
-Tbase TZ x3110 = x35 * x780;
-Tbase TZ x3111 = x36 * x777;
-Tbase TZ x3112 = x37 * x774;
-Tbase TZ x3113 = x38 * x771;
-Tbase TZ x3114 = x3112 + x3113;
-Tbase TZ x3115 = x3111 + x3114;
-Tbase TZ x3116 = x3110 + x3115;
-Tbase TZ x3117 = x3109 + x3116;
-Tbase TZ x3118 = x3108 + x3117;
-Tbase TZ x3119 = x3107 + x3118;
-Tbase TZ x3120 = x3106 + x3119;
-Tbase TZ x3121 = x3105 + x3120;
-Tbase TZ x3122 = x3104 + x3121;
-Tbase TZ x3123 = x3103 + x3122;
-Tbase TZ x3124 = 0x19;
-Tbase TZ x3125 = x3123 >>> x3124;
-Tbase TZ x3126 = 0x13;
-Tbase TZ x3127 = x3126 * x3125;
-Tbase TZ x3128 = 0x3ffffff;
-Tbase TZ x3129 = x2869 & x3128;
-Tbase TZ x3130 = x3127 + x3129;
-Tbase TZ x3131 = 0x1a;
-Tbase TZ x3132 = x3130 >>> x3131;
-Tbase TZ x3133 = 0x1ffffff;
-Tbase TZ x3134 = x2893 & x3133;
-Tbase TZ x3135 = x3132 + x3134;
-Tbase TZ x3136 = 0x1ffffff;
-Tbase TZ x3137 = x3123 & x3136;
-Tbase TZ x3138 = 0x3ffffff;
-Tbase TZ x3139 = x3101 & x3138;
-Tbase TZ x3140 = 0x1ffffff;
-Tbase TZ x3141 = x3067 & x3140;
-Tbase TZ x3142 = 0x3ffffff;
-Tbase TZ x3143 = x3043 & x3142;
-Tbase TZ x3144 = 0x1ffffff;
-Tbase TZ x3145 = x3009 & x3144;
-Tbase TZ x3146 = 0x3ffffff;
-Tbase TZ x3147 = x2985 & x3146;
-Tbase TZ x3148 = 0x1ffffff;
-Tbase TZ x3149 = x2951 & x3148;
-Tbase TZ x3150 = 0x19;
-Tbase TZ x3151 = x3135 >>> x3150;
-Tbase TZ x3152 = 0x3ffffff;
-Tbase TZ x3153 = x2927 & x3152;
-Tbase TZ x3154 = x3151 + x3153;
-Tbase TZ x3155 = 0x1ffffff;
-Tbase TZ x3156 = x3135 & x3155;
-Tbase TZ x3157 = 0x3ffffff;
-Tbase TZ x3158 = x3130 & x3157;
-Tbase TZ x3159 = x397 + x3137;
-Tbase TZ x3160 = x399 + x3139;
-Tbase TZ x3161 = x401 + x3141;
-Tbase TZ x3162 = x403 + x3143;
-Tbase TZ x3163 = x405 + x3145;
-Tbase TZ x3164 = x407 + x3147;
-Tbase TZ x3165 = x409 + x3149;
-Tbase TZ x3166 = x414 + x3154;
-Tbase TZ x3167 = x416 + x3156;
-Tbase TZ x3168 = x418 + x3158;
-Tbase TZ x3169 = x798 * x3168;
-Tbase TZ x3170 = 0x2;
-Tbase TZ x3171 = x3167 * x3170;
-Tbase TZ x3172 = x771 * x3171;
-Tbase TZ x3173 = x774 * x3166;
-Tbase TZ x3174 = 0x2;
-Tbase TZ x3175 = x3165 * x3174;
-Tbase TZ x3176 = x777 * x3175;
-Tbase TZ x3177 = x780 * x3164;
-Tbase TZ x3178 = 0x2;
-Tbase TZ x3179 = x3163 * x3178;
-Tbase TZ x3180 = x783 * x3179;
-Tbase TZ x3181 = x786 * x3162;
-Tbase TZ x3182 = 0x2;
-Tbase TZ x3183 = x3161 * x3182;
-Tbase TZ x3184 = x789 * x3183;
-Tbase TZ x3185 = x792 * x3160;
-Tbase TZ x3186 = 0x2;
-Tbase TZ x3187 = x3159 * x3186;
-Tbase TZ x3188 = x795 * x3187;
-Tbase TZ x3189 = x3185 + x3188;
-Tbase TZ x3190 = x3184 + x3189;
-Tbase TZ x3191 = x3181 + x3190;
-Tbase TZ x3192 = x3180 + x3191;
-Tbase TZ x3193 = x3177 + x3192;
-Tbase TZ x3194 = x3176 + x3193;
-Tbase TZ x3195 = x3173 + x3194;
-Tbase TZ x3196 = x3172 + x3195;
-Tbase TZ x3197 = 0x13;
-Tbase TZ x3198 = x3197 * x3196;
-Tbase TZ x3199 = x3169 + x3198;
-Tbase TZ x3200 = 0x1a;
-Tbase TZ x3201 = x3199 >>> x3200;
-Tbase TZ x3202 = x795 * x3168;
-Tbase TZ x3203 = x798 * x3167;
-Tbase TZ x3204 = x3202 + x3203;
-Tbase TZ x3205 = x771 * x3166;
-Tbase TZ x3206 = x774 * x3165;
-Tbase TZ x3207 = x777 * x3164;
-Tbase TZ x3208 = x780 * x3163;
-Tbase TZ x3209 = x783 * x3162;
-Tbase TZ x3210 = x786 * x3161;
-Tbase TZ x3211 = x789 * x3160;
-Tbase TZ x3212 = x792 * x3159;
-Tbase TZ x3213 = x3211 + x3212;
-Tbase TZ x3214 = x3210 + x3213;
-Tbase TZ x3215 = x3209 + x3214;
-Tbase TZ x3216 = x3208 + x3215;
-Tbase TZ x3217 = x3207 + x3216;
-Tbase TZ x3218 = x3206 + x3217;
-Tbase TZ x3219 = x3205 + x3218;
-Tbase TZ x3220 = 0x13;
-Tbase TZ x3221 = x3220 * x3219;
-Tbase TZ x3222 = x3204 + x3221;
-Tbase TZ x3223 = x3201 + x3222;
-Tbase TZ x3224 = 0x19;
-Tbase TZ x3225 = x3223 >>> x3224;
-Tbase TZ x3226 = x792 * x3168;
-Tbase TZ x3227 = 0x2;
-Tbase TZ x3228 = x3167 * x3227;
-Tbase TZ x3229 = x795 * x3228;
-Tbase TZ x3230 = x798 * x3166;
-Tbase TZ x3231 = x3229 + x3230;
-Tbase TZ x3232 = x3226 + x3231;
-Tbase TZ x3233 = 0x2;
-Tbase TZ x3234 = x3165 * x3233;
-Tbase TZ x3235 = x771 * x3234;
-Tbase TZ x3236 = x774 * x3164;
-Tbase TZ x3237 = 0x2;
-Tbase TZ x3238 = x3163 * x3237;
-Tbase TZ x3239 = x777 * x3238;
-Tbase TZ x3240 = x780 * x3162;
-Tbase TZ x3241 = 0x2;
-Tbase TZ x3242 = x3161 * x3241;
-Tbase TZ x3243 = x783 * x3242;
-Tbase TZ x3244 = x786 * x3160;
-Tbase TZ x3245 = 0x2;
-Tbase TZ x3246 = x3159 * x3245;
-Tbase TZ x3247 = x789 * x3246;
-Tbase TZ x3248 = x3244 + x3247;
-Tbase TZ x3249 = x3243 + x3248;
-Tbase TZ x3250 = x3240 + x3249;
-Tbase TZ x3251 = x3239 + x3250;
-Tbase TZ x3252 = x3236 + x3251;
-Tbase TZ x3253 = x3235 + x3252;
-Tbase TZ x3254 = 0x13;
-Tbase TZ x3255 = x3254 * x3253;
-Tbase TZ x3256 = x3232 + x3255;
-Tbase TZ x3257 = x3225 + x3256;
-Tbase TZ x3258 = 0x1a;
-Tbase TZ x3259 = x3257 >>> x3258;
-Tbase TZ x3260 = x789 * x3168;
-Tbase TZ x3261 = x792 * x3167;
-Tbase TZ x3262 = x795 * x3166;
-Tbase TZ x3263 = x798 * x3165;
-Tbase TZ x3264 = x3262 + x3263;
-Tbase TZ x3265 = x3261 + x3264;
-Tbase TZ x3266 = x3260 + x3265;
-Tbase TZ x3267 = x771 * x3164;
-Tbase TZ x3268 = x774 * x3163;
-Tbase TZ x3269 = x777 * x3162;
-Tbase TZ x3270 = x780 * x3161;
-Tbase TZ x3271 = x783 * x3160;
-Tbase TZ x3272 = x786 * x3159;
-Tbase TZ x3273 = x3271 + x3272;
-Tbase TZ x3274 = x3270 + x3273;
-Tbase TZ x3275 = x3269 + x3274;
-Tbase TZ x3276 = x3268 + x3275;
-Tbase TZ x3277 = x3267 + x3276;
-Tbase TZ x3278 = 0x13;
-Tbase TZ x3279 = x3278 * x3277;
-Tbase TZ x3280 = x3266 + x3279;
-Tbase TZ x3281 = x3259 + x3280;
-Tbase TZ x3282 = 0x19;
-Tbase TZ x3283 = x3281 >>> x3282;
-Tbase TZ x3284 = x786 * x3168;
-Tbase TZ x3285 = 0x2;
-Tbase TZ x3286 = x3167 * x3285;
-Tbase TZ x3287 = x789 * x3286;
-Tbase TZ x3288 = x792 * x3166;
-Tbase TZ x3289 = 0x2;
-Tbase TZ x3290 = x3165 * x3289;
-Tbase TZ x3291 = x795 * x3290;
-Tbase TZ x3292 = x798 * x3164;
-Tbase TZ x3293 = x3291 + x3292;
-Tbase TZ x3294 = x3288 + x3293;
-Tbase TZ x3295 = x3287 + x3294;
-Tbase TZ x3296 = x3284 + x3295;
-Tbase TZ x3297 = 0x2;
-Tbase TZ x3298 = x3163 * x3297;
-Tbase TZ x3299 = x771 * x3298;
-Tbase TZ x3300 = x774 * x3162;
-Tbase TZ x3301 = 0x2;
-Tbase TZ x3302 = x3161 * x3301;
-Tbase TZ x3303 = x777 * x3302;
-Tbase TZ x3304 = x780 * x3160;
-Tbase TZ x3305 = 0x2;
-Tbase TZ x3306 = x3159 * x3305;
-Tbase TZ x3307 = x783 * x3306;
-Tbase TZ x3308 = x3304 + x3307;
-Tbase TZ x3309 = x3303 + x3308;
-Tbase TZ x3310 = x3300 + x3309;
-Tbase TZ x3311 = x3299 + x3310;
-Tbase TZ x3312 = 0x13;
-Tbase TZ x3313 = x3312 * x3311;
-Tbase TZ x3314 = x3296 + x3313;
-Tbase TZ x3315 = x3283 + x3314;
-Tbase TZ x3316 = 0x1a;
-Tbase TZ x3317 = x3315 >>> x3316;
-Tbase TZ x3318 = x783 * x3168;
-Tbase TZ x3319 = x786 * x3167;
-Tbase TZ x3320 = x789 * x3166;
-Tbase TZ x3321 = x792 * x3165;
-Tbase TZ x3322 = x795 * x3164;
-Tbase TZ x3323 = x798 * x3163;
-Tbase TZ x3324 = x3322 + x3323;
-Tbase TZ x3325 = x3321 + x3324;
-Tbase TZ x3326 = x3320 + x3325;
-Tbase TZ x3327 = x3319 + x3326;
-Tbase TZ x3328 = x3318 + x3327;
-Tbase TZ x3329 = x771 * x3162;
-Tbase TZ x3330 = x774 * x3161;
-Tbase TZ x3331 = x777 * x3160;
-Tbase TZ x3332 = x780 * x3159;
-Tbase TZ x3333 = x3331 + x3332;
-Tbase TZ x3334 = x3330 + x3333;
-Tbase TZ x3335 = x3329 + x3334;
-Tbase TZ x3336 = 0x13;
-Tbase TZ x3337 = x3336 * x3335;
-Tbase TZ x3338 = x3328 + x3337;
-Tbase TZ x3339 = x3317 + x3338;
-Tbase TZ x3340 = 0x19;
-Tbase TZ x3341 = x3339 >>> x3340;
-Tbase TZ x3342 = x780 * x3168;
-Tbase TZ x3343 = 0x2;
-Tbase TZ x3344 = x3167 * x3343;
-Tbase TZ x3345 = x783 * x3344;
-Tbase TZ x3346 = x786 * x3166;
-Tbase TZ x3347 = 0x2;
-Tbase TZ x3348 = x3165 * x3347;
-Tbase TZ x3349 = x789 * x3348;
-Tbase TZ x3350 = x792 * x3164;
-Tbase TZ x3351 = 0x2;
-Tbase TZ x3352 = x3163 * x3351;
-Tbase TZ x3353 = x795 * x3352;
-Tbase TZ x3354 = x798 * x3162;
-Tbase TZ x3355 = x3353 + x3354;
-Tbase TZ x3356 = x3350 + x3355;
-Tbase TZ x3357 = x3349 + x3356;
-Tbase TZ x3358 = x3346 + x3357;
-Tbase TZ x3359 = x3345 + x3358;
-Tbase TZ x3360 = x3342 + x3359;
-Tbase TZ x3361 = 0x2;
-Tbase TZ x3362 = x3161 * x3361;
-Tbase TZ x3363 = x771 * x3362;
-Tbase TZ x3364 = x774 * x3160;
-Tbase TZ x3365 = 0x2;
-Tbase TZ x3366 = x3159 * x3365;
-Tbase TZ x3367 = x777 * x3366;
-Tbase TZ x3368 = x3364 + x3367;
-Tbase TZ x3369 = x3363 + x3368;
-Tbase TZ x3370 = 0x13;
-Tbase TZ x3371 = x3370 * x3369;
-Tbase TZ x3372 = x3360 + x3371;
-Tbase TZ x3373 = x3341 + x3372;
-Tbase TZ x3374 = 0x1a;
-Tbase TZ x3375 = x3373 >>> x3374;
-Tbase TZ x3376 = x777 * x3168;
-Tbase TZ x3377 = x780 * x3167;
-Tbase TZ x3378 = x783 * x3166;
-Tbase TZ x3379 = x786 * x3165;
-Tbase TZ x3380 = x789 * x3164;
-Tbase TZ x3381 = x792 * x3163;
-Tbase TZ x3382 = x795 * x3162;
-Tbase TZ x3383 = x798 * x3161;
-Tbase TZ x3384 = x3382 + x3383;
-Tbase TZ x3385 = x3381 + x3384;
-Tbase TZ x3386 = x3380 + x3385;
-Tbase TZ x3387 = x3379 + x3386;
-Tbase TZ x3388 = x3378 + x3387;
-Tbase TZ x3389 = x3377 + x3388;
-Tbase TZ x3390 = x3376 + x3389;
-Tbase TZ x3391 = x771 * x3160;
-Tbase TZ x3392 = x774 * x3159;
-Tbase TZ x3393 = x3391 + x3392;
-Tbase TZ x3394 = 0x13;
-Tbase TZ x3395 = x3394 * x3393;
-Tbase TZ x3396 = x3390 + x3395;
-Tbase TZ x3397 = x3375 + x3396;
-Tbase TZ x3398 = 0x19;
-Tbase TZ x3399 = x3397 >>> x3398;
-Tbase TZ x3400 = x774 * x3168;
-Tbase TZ x3401 = 0x2;
-Tbase TZ x3402 = x3167 * x3401;
-Tbase TZ x3403 = x777 * x3402;
-Tbase TZ x3404 = x780 * x3166;
-Tbase TZ x3405 = 0x2;
-Tbase TZ x3406 = x3165 * x3405;
-Tbase TZ x3407 = x783 * x3406;
-Tbase TZ x3408 = x786 * x3164;
-Tbase TZ x3409 = 0x2;
-Tbase TZ x3410 = x3163 * x3409;
-Tbase TZ x3411 = x789 * x3410;
-Tbase TZ x3412 = x792 * x3162;
-Tbase TZ x3413 = 0x2;
-Tbase TZ x3414 = x3161 * x3413;
-Tbase TZ x3415 = x795 * x3414;
-Tbase TZ x3416 = x798 * x3160;
-Tbase TZ x3417 = x3415 + x3416;
-Tbase TZ x3418 = x3412 + x3417;
-Tbase TZ x3419 = x3411 + x3418;
-Tbase TZ x3420 = x3408 + x3419;
-Tbase TZ x3421 = x3407 + x3420;
-Tbase TZ x3422 = x3404 + x3421;
-Tbase TZ x3423 = x3403 + x3422;
-Tbase TZ x3424 = x3400 + x3423;
-Tbase TZ x3425 = 0x2;
-Tbase TZ x3426 = x3159 * x3425;
-Tbase TZ x3427 = x771 * x3426;
-Tbase TZ x3428 = 0x13;
-Tbase TZ x3429 = x3428 * x3427;
-Tbase TZ x3430 = x3424 + x3429;
-Tbase TZ x3431 = x3399 + x3430;
-Tbase TZ x3432 = 0x1a;
-Tbase TZ x3433 = x3431 >>> x3432;
-Tbase TZ x3434 = x771 * x3168;
-Tbase TZ x3435 = x774 * x3167;
-Tbase TZ x3436 = x777 * x3166;
-Tbase TZ x3437 = x780 * x3165;
-Tbase TZ x3438 = x783 * x3164;
-Tbase TZ x3439 = x786 * x3163;
-Tbase TZ x3440 = x789 * x3162;
-Tbase TZ x3441 = x792 * x3161;
-Tbase TZ x3442 = x795 * x3160;
-Tbase TZ x3443 = x798 * x3159;
-Tbase TZ x3444 = x3442 + x3443;
-Tbase TZ x3445 = x3441 + x3444;
-Tbase TZ x3446 = x3440 + x3445;
-Tbase TZ x3447 = x3439 + x3446;
-Tbase TZ x3448 = x3438 + x3447;
-Tbase TZ x3449 = x3437 + x3448;
-Tbase TZ x3450 = x3436 + x3449;
-Tbase TZ x3451 = x3435 + x3450;
-Tbase TZ x3452 = x3434 + x3451;
-Tbase TZ x3453 = x3433 + x3452;
-Tbase TZ x3454 = 0x19;
-Tbase TZ x3455 = x3453 >>> x3454;
-Tbase TZ x3456 = 0x13;
-Tbase TZ x3457 = x3456 * x3455;
-Tbase TZ x3458 = 0x3ffffff;
-Tbase TZ x3459 = x3199 & x3458;
-Tbase TZ x3460 = x3457 + x3459;
-Tbase TZ x3461 = 0x1a;
-Tbase TZ x3462 = x3460 >>> x3461;
-Tbase TZ x3463 = 0x1ffffff;
-Tbase TZ x3464 = x3223 & x3463;
-Tbase TZ x3465 = x3462 + x3464;
-Tbase TZ x3466 = 0x1ffffff;
-Tbase TZ x3467 = x3453 & x3466;
-Tbase TZ x3468 = 0x3ffffff;
-Tbase TZ x3469 = x3431 & x3468;
-Tbase TZ x3470 = 0x1ffffff;
-Tbase TZ x3471 = x3397 & x3470;
-Tbase TZ x3472 = 0x3ffffff;
-Tbase TZ x3473 = x3373 & x3472;
-Tbase TZ x3474 = 0x1ffffff;
-Tbase TZ x3475 = x3339 & x3474;
-Tbase TZ x3476 = 0x3ffffff;
-Tbase TZ x3477 = x3315 & x3476;
-Tbase TZ x3478 = 0x1ffffff;
-Tbase TZ x3479 = x3281 & x3478;
-Tbase TZ x3480 = 0x19;
-Tbase TZ x3481 = x3465 >>> x3480;
-Tbase TZ x3482 = 0x3ffffff;
-Tbase TZ x3483 = x3257 & x3482;
-Tbase TZ x3484 = x3481 + x3483;
-Tbase TZ x3485 = 0x1ffffff;
-Tbase TZ x3486 = x3465 & x3485;
-Tbase TZ x3487 = 0x3ffffff;
-Tbase TZ x3488 = x3460 & x3487;
-(Return x2817, Return x2819, Return x2821, Return x2823,
-Return x2825, Return x2827, Return x2829, Return x2834,
-Return x2836, Return x2838,
-(Return x3467, Return x3469, Return x3471, Return x3473,
-Return x3475, Return x3477, Return x3479, Return x3484,
-Return x3486, Return x3488),
-(Return x1797, Return x1799, Return x1801, Return x1803,
-Return x1805, Return x1807, Return x1809, Return x1814,
-Return x1816, Return x1818),
-(Return x2497, Return x2499, Return x2501, Return x2503,
-Return x2505, Return x2507, Return x2509, Return x2514,
-Return x2516, Return x2518))
- : forall var : base_type -> Type,
- expr base_type op
- (TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> ...)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF25519_32Reflective/Reified/LadderStepJavaDisplay.v b/src/SpecificGen/GF25519_32Reflective/Reified/LadderStepJavaDisplay.v
deleted file mode 100644
index 60d6c0388..000000000
--- a/src/SpecificGen/GF25519_32Reflective/Reified/LadderStepJavaDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_32Reflective.Reified.LadderStep.
-Require Export Crypto.Reflection.Z.JavaNotations.
-
-Print rladderstepW.
diff --git a/src/SpecificGen/GF25519_32Reflective/Reified/Mul.v b/src/SpecificGen/GF25519_32Reflective/Reified/Mul.v
deleted file mode 100644
index 4cfa15372..000000000
--- a/src/SpecificGen/GF25519_32Reflective/Reified/Mul.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_32Reflective.CommonBinOp.
-
-Definition rmulZ_sig : rexpr_binop_sig mul. Proof. reify_sig. Defined.
-Definition rmulW := Eval vm_compute in rword_of_Z rmulZ_sig.
-Lemma rmulW_correct_and_bounded_gen : correct_and_bounded_genT rmulW rmulZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rmul_output_bounds := Eval vm_compute in compute_bounds rmulW ExprBinOp_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rmulW_correct_and_bounded
- := ExprBinOp_correct_and_bounded
- rmulW mul rmulZ_sig rmulW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Mul", compute_bounds_for_display rmulW ExprBinOp_bounds).
-Compute ("Mul overflows? ", sanity_compute rmulW ExprBinOp_bounds).
-Compute ("Mul overflows (error if it does)? ", sanity_check rmulW ExprBinOp_bounds).
diff --git a/src/SpecificGen/GF25519_32Reflective/Reified/MulDisplay.log b/src/SpecificGen/GF25519_32Reflective/Reified/MulDisplay.log
deleted file mode 100644
index 30f70a7a2..000000000
--- a/src/SpecificGen/GF25519_32Reflective/Reified/MulDisplay.log
+++ /dev/null
@@ -1,297 +0,0 @@
-rmulW =
-fun var : Syntax.base_type -> Type =>
-λ
-x x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17
- x18 : var Syntax.TZ,
-Tbase Syntax.TZ x19 = x8 * x18;
-Tbase Syntax.TZ x20 = x17 * 0x2;
-Tbase Syntax.TZ x21 = x * x20;
-Tbase Syntax.TZ x22 = x0 * x16;
-Tbase Syntax.TZ x23 = x15 * 0x2;
-Tbase Syntax.TZ x24 = x1 * x23;
-Tbase Syntax.TZ x25 = x2 * x14;
-Tbase Syntax.TZ x26 = x13 * 0x2;
-Tbase Syntax.TZ x27 = x3 * x26;
-Tbase Syntax.TZ x28 = x4 * x12;
-Tbase Syntax.TZ x29 = x11 * 0x2;
-Tbase Syntax.TZ x30 = x5 * x29;
-Tbase Syntax.TZ x31 = x6 * x10;
-Tbase Syntax.TZ x32 = x9 * 0x2;
-Tbase Syntax.TZ x33 = x7 * x32;
-Tbase Syntax.TZ x34 = x31 + x33;
-Tbase Syntax.TZ x35 = x30 + x34;
-Tbase Syntax.TZ x36 = x28 + x35;
-Tbase Syntax.TZ x37 = x27 + x36;
-Tbase Syntax.TZ x38 = x25 + x37;
-Tbase Syntax.TZ x39 = x24 + x38;
-Tbase Syntax.TZ x40 = x22 + x39;
-Tbase Syntax.TZ x41 = x21 + x40;
-Tbase Syntax.TZ x42 = 0x13 * x41;
-Tbase Syntax.TZ x43 = x19 + x42;
-Tbase Syntax.TZ x44 = x43 >> 0x1a;
-Tbase Syntax.TZ x45 = x7 * x18;
-Tbase Syntax.TZ x46 = x8 * x17;
-Tbase Syntax.TZ x47 = x45 + x46;
-Tbase Syntax.TZ x48 = x * x16;
-Tbase Syntax.TZ x49 = x0 * x15;
-Tbase Syntax.TZ x50 = x1 * x14;
-Tbase Syntax.TZ x51 = x2 * x13;
-Tbase Syntax.TZ x52 = x3 * x12;
-Tbase Syntax.TZ x53 = x4 * x11;
-Tbase Syntax.TZ x54 = x5 * x10;
-Tbase Syntax.TZ x55 = x6 * x9;
-Tbase Syntax.TZ x56 = x54 + x55;
-Tbase Syntax.TZ x57 = x53 + x56;
-Tbase Syntax.TZ x58 = x52 + x57;
-Tbase Syntax.TZ x59 = x51 + x58;
-Tbase Syntax.TZ x60 = x50 + x59;
-Tbase Syntax.TZ x61 = x49 + x60;
-Tbase Syntax.TZ x62 = x48 + x61;
-Tbase Syntax.TZ x63 = 0x13 * x62;
-Tbase Syntax.TZ x64 = x47 + x63;
-Tbase Syntax.TZ x65 = x44 + x64;
-Tbase Syntax.TZ x66 = x65 >> 0x19;
-Tbase Syntax.TZ x67 = x6 * x18;
-Tbase Syntax.TZ x68 = x17 * 0x2;
-Tbase Syntax.TZ x69 = x7 * x68;
-Tbase Syntax.TZ x70 = x8 * x16;
-Tbase Syntax.TZ x71 = x69 + x70;
-Tbase Syntax.TZ x72 = x67 + x71;
-Tbase Syntax.TZ x73 = x15 * 0x2;
-Tbase Syntax.TZ x74 = x * x73;
-Tbase Syntax.TZ x75 = x0 * x14;
-Tbase Syntax.TZ x76 = x13 * 0x2;
-Tbase Syntax.TZ x77 = x1 * x76;
-Tbase Syntax.TZ x78 = x2 * x12;
-Tbase Syntax.TZ x79 = x11 * 0x2;
-Tbase Syntax.TZ x80 = x3 * x79;
-Tbase Syntax.TZ x81 = x4 * x10;
-Tbase Syntax.TZ x82 = x9 * 0x2;
-Tbase Syntax.TZ x83 = x5 * x82;
-Tbase Syntax.TZ x84 = x81 + x83;
-Tbase Syntax.TZ x85 = x80 + x84;
-Tbase Syntax.TZ x86 = x78 + x85;
-Tbase Syntax.TZ x87 = x77 + x86;
-Tbase Syntax.TZ x88 = x75 + x87;
-Tbase Syntax.TZ x89 = x74 + x88;
-Tbase Syntax.TZ x90 = 0x13 * x89;
-Tbase Syntax.TZ x91 = x72 + x90;
-Tbase Syntax.TZ x92 = x66 + x91;
-Tbase Syntax.TZ x93 = x92 >> 0x1a;
-Tbase Syntax.TZ x94 = x5 * x18;
-Tbase Syntax.TZ x95 = x6 * x17;
-Tbase Syntax.TZ x96 = x7 * x16;
-Tbase Syntax.TZ x97 = x8 * x15;
-Tbase Syntax.TZ x98 = x96 + x97;
-Tbase Syntax.TZ x99 = x95 + x98;
-Tbase Syntax.TZ x100 = x94 + x99;
-Tbase Syntax.TZ x101 = x * x14;
-Tbase Syntax.TZ x102 = x0 * x13;
-Tbase Syntax.TZ x103 = x1 * x12;
-Tbase Syntax.TZ x104 = x2 * x11;
-Tbase Syntax.TZ x105 = x3 * x10;
-Tbase Syntax.TZ x106 = x4 * x9;
-Tbase Syntax.TZ x107 = x105 + x106;
-Tbase Syntax.TZ x108 = x104 + x107;
-Tbase Syntax.TZ x109 = x103 + x108;
-Tbase Syntax.TZ x110 = x102 + x109;
-Tbase Syntax.TZ x111 = x101 + x110;
-Tbase Syntax.TZ x112 = 0x13 * x111;
-Tbase Syntax.TZ x113 = x100 + x112;
-Tbase Syntax.TZ x114 = x93 + x113;
-Tbase Syntax.TZ x115 = x114 >> 0x19;
-Tbase Syntax.TZ x116 = x4 * x18;
-Tbase Syntax.TZ x117 = x17 * 0x2;
-Tbase Syntax.TZ x118 = x5 * x117;
-Tbase Syntax.TZ x119 = x6 * x16;
-Tbase Syntax.TZ x120 = x15 * 0x2;
-Tbase Syntax.TZ x121 = x7 * x120;
-Tbase Syntax.TZ x122 = x8 * x14;
-Tbase Syntax.TZ x123 = x121 + x122;
-Tbase Syntax.TZ x124 = x119 + x123;
-Tbase Syntax.TZ x125 = x118 + x124;
-Tbase Syntax.TZ x126 = x116 + x125;
-Tbase Syntax.TZ x127 = x13 * 0x2;
-Tbase Syntax.TZ x128 = x * x127;
-Tbase Syntax.TZ x129 = x0 * x12;
-Tbase Syntax.TZ x130 = x11 * 0x2;
-Tbase Syntax.TZ x131 = x1 * x130;
-Tbase Syntax.TZ x132 = x2 * x10;
-Tbase Syntax.TZ x133 = x9 * 0x2;
-Tbase Syntax.TZ x134 = x3 * x133;
-Tbase Syntax.TZ x135 = x132 + x134;
-Tbase Syntax.TZ x136 = x131 + x135;
-Tbase Syntax.TZ x137 = x129 + x136;
-Tbase Syntax.TZ x138 = x128 + x137;
-Tbase Syntax.TZ x139 = 0x13 * x138;
-Tbase Syntax.TZ x140 = x126 + x139;
-Tbase Syntax.TZ x141 = x115 + x140;
-Tbase Syntax.TZ x142 = x141 >> 0x1a;
-Tbase Syntax.TZ x143 = x3 * x18;
-Tbase Syntax.TZ x144 = x4 * x17;
-Tbase Syntax.TZ x145 = x5 * x16;
-Tbase Syntax.TZ x146 = x6 * x15;
-Tbase Syntax.TZ x147 = x7 * x14;
-Tbase Syntax.TZ x148 = x8 * x13;
-Tbase Syntax.TZ x149 = x147 + x148;
-Tbase Syntax.TZ x150 = x146 + x149;
-Tbase Syntax.TZ x151 = x145 + x150;
-Tbase Syntax.TZ x152 = x144 + x151;
-Tbase Syntax.TZ x153 = x143 + x152;
-Tbase Syntax.TZ x154 = x * x12;
-Tbase Syntax.TZ x155 = x0 * x11;
-Tbase Syntax.TZ x156 = x1 * x10;
-Tbase Syntax.TZ x157 = x2 * x9;
-Tbase Syntax.TZ x158 = x156 + x157;
-Tbase Syntax.TZ x159 = x155 + x158;
-Tbase Syntax.TZ x160 = x154 + x159;
-Tbase Syntax.TZ x161 = 0x13 * x160;
-Tbase Syntax.TZ x162 = x153 + x161;
-Tbase Syntax.TZ x163 = x142 + x162;
-Tbase Syntax.TZ x164 = x163 >> 0x19;
-Tbase Syntax.TZ x165 = x2 * x18;
-Tbase Syntax.TZ x166 = x17 * 0x2;
-Tbase Syntax.TZ x167 = x3 * x166;
-Tbase Syntax.TZ x168 = x4 * x16;
-Tbase Syntax.TZ x169 = x15 * 0x2;
-Tbase Syntax.TZ x170 = x5 * x169;
-Tbase Syntax.TZ x171 = x6 * x14;
-Tbase Syntax.TZ x172 = x13 * 0x2;
-Tbase Syntax.TZ x173 = x7 * x172;
-Tbase Syntax.TZ x174 = x8 * x12;
-Tbase Syntax.TZ x175 = x173 + x174;
-Tbase Syntax.TZ x176 = x171 + x175;
-Tbase Syntax.TZ x177 = x170 + x176;
-Tbase Syntax.TZ x178 = x168 + x177;
-Tbase Syntax.TZ x179 = x167 + x178;
-Tbase Syntax.TZ x180 = x165 + x179;
-Tbase Syntax.TZ x181 = x11 * 0x2;
-Tbase Syntax.TZ x182 = x * x181;
-Tbase Syntax.TZ x183 = x0 * x10;
-Tbase Syntax.TZ x184 = x9 * 0x2;
-Tbase Syntax.TZ x185 = x1 * x184;
-Tbase Syntax.TZ x186 = x183 + x185;
-Tbase Syntax.TZ x187 = x182 + x186;
-Tbase Syntax.TZ x188 = 0x13 * x187;
-Tbase Syntax.TZ x189 = x180 + x188;
-Tbase Syntax.TZ x190 = x164 + x189;
-Tbase Syntax.TZ x191 = x190 >> 0x1a;
-Tbase Syntax.TZ x192 = x1 * x18;
-Tbase Syntax.TZ x193 = x2 * x17;
-Tbase Syntax.TZ x194 = x3 * x16;
-Tbase Syntax.TZ x195 = x4 * x15;
-Tbase Syntax.TZ x196 = x5 * x14;
-Tbase Syntax.TZ x197 = x6 * x13;
-Tbase Syntax.TZ x198 = x7 * x12;
-Tbase Syntax.TZ x199 = x8 * x11;
-Tbase Syntax.TZ x200 = x198 + x199;
-Tbase Syntax.TZ x201 = x197 + x200;
-Tbase Syntax.TZ x202 = x196 + x201;
-Tbase Syntax.TZ x203 = x195 + x202;
-Tbase Syntax.TZ x204 = x194 + x203;
-Tbase Syntax.TZ x205 = x193 + x204;
-Tbase Syntax.TZ x206 = x192 + x205;
-Tbase Syntax.TZ x207 = x * x10;
-Tbase Syntax.TZ x208 = x0 * x9;
-Tbase Syntax.TZ x209 = x207 + x208;
-Tbase Syntax.TZ x210 = 0x13 * x209;
-Tbase Syntax.TZ x211 = x206 + x210;
-Tbase Syntax.TZ x212 = x191 + x211;
-Tbase Syntax.TZ x213 = x212 >> 0x19;
-Tbase Syntax.TZ x214 = x0 * x18;
-Tbase Syntax.TZ x215 = x17 * 0x2;
-Tbase Syntax.TZ x216 = x1 * x215;
-Tbase Syntax.TZ x217 = x2 * x16;
-Tbase Syntax.TZ x218 = x15 * 0x2;
-Tbase Syntax.TZ x219 = x3 * x218;
-Tbase Syntax.TZ x220 = x4 * x14;
-Tbase Syntax.TZ x221 = x13 * 0x2;
-Tbase Syntax.TZ x222 = x5 * x221;
-Tbase Syntax.TZ x223 = x6 * x12;
-Tbase Syntax.TZ x224 = x11 * 0x2;
-Tbase Syntax.TZ x225 = x7 * x224;
-Tbase Syntax.TZ x226 = x8 * x10;
-Tbase Syntax.TZ x227 = x225 + x226;
-Tbase Syntax.TZ x228 = x223 + x227;
-Tbase Syntax.TZ x229 = x222 + x228;
-Tbase Syntax.TZ x230 = x220 + x229;
-Tbase Syntax.TZ x231 = x219 + x230;
-Tbase Syntax.TZ x232 = x217 + x231;
-Tbase Syntax.TZ x233 = x216 + x232;
-Tbase Syntax.TZ x234 = x214 + x233;
-Tbase Syntax.TZ x235 = x9 * 0x2;
-Tbase Syntax.TZ x236 = x * x235;
-Tbase Syntax.TZ x237 = 0x13 * x236;
-Tbase Syntax.TZ x238 = x234 + x237;
-Tbase Syntax.TZ x239 = x213 + x238;
-Tbase Syntax.TZ x240 = x239 >> 0x1a;
-Tbase Syntax.TZ x241 = x * x18;
-Tbase Syntax.TZ x242 = x0 * x17;
-Tbase Syntax.TZ x243 = x1 * x16;
-Tbase Syntax.TZ x244 = x2 * x15;
-Tbase Syntax.TZ x245 = x3 * x14;
-Tbase Syntax.TZ x246 = x4 * x13;
-Tbase Syntax.TZ x247 = x5 * x12;
-Tbase Syntax.TZ x248 = x6 * x11;
-Tbase Syntax.TZ x249 = x7 * x10;
-Tbase Syntax.TZ x250 = x8 * x9;
-Tbase Syntax.TZ x251 = x249 + x250;
-Tbase Syntax.TZ x252 = x248 + x251;
-Tbase Syntax.TZ x253 = x247 + x252;
-Tbase Syntax.TZ x254 = x246 + x253;
-Tbase Syntax.TZ x255 = x245 + x254;
-Tbase Syntax.TZ x256 = x244 + x255;
-Tbase Syntax.TZ x257 = x243 + x256;
-Tbase Syntax.TZ x258 = x242 + x257;
-Tbase Syntax.TZ x259 = x241 + x258;
-Tbase Syntax.TZ x260 = x240 + x259;
-Tbase Syntax.TZ x261 = x260 >> 0x19;
-Tbase Syntax.TZ x262 = 0x13 * x261;
-Tbase Syntax.TZ x263 = x43 & 0x3ffffff;
-Tbase Syntax.TZ x264 = x262 + x263;
-Tbase Syntax.TZ x265 = x264 >> 0x1a;
-Tbase Syntax.TZ x266 = x65 & 0x1ffffff;
-Tbase Syntax.TZ x267 = x265 + x266;
-Tbase Syntax.TZ x268 = x260 & 0x1ffffff;
-Tbase Syntax.TZ x269 = x239 & 0x3ffffff;
-Tbase Syntax.TZ x270 = x212 & 0x1ffffff;
-Tbase Syntax.TZ x271 = x190 & 0x3ffffff;
-Tbase Syntax.TZ x272 = x163 & 0x1ffffff;
-Tbase Syntax.TZ x273 = x141 & 0x3ffffff;
-Tbase Syntax.TZ x274 = x114 & 0x1ffffff;
-Tbase Syntax.TZ x275 = x267 >> 0x19;
-Tbase Syntax.TZ x276 = x92 & 0x3ffffff;
-Tbase Syntax.TZ x277 = x275 + x276;
-Tbase Syntax.TZ x278 = x267 & 0x1ffffff;
-Tbase Syntax.TZ x279 = x264 & 0x3ffffff;
-(Return x268, Return x269, Return x270, Return x271,
-Return x272, Return x273, Return x274, Return x277,
-Return x278, Return x279)
- : forall var : Syntax.base_type -> Type,
- expr Syntax.base_type Syntax.op
- (Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF25519_32Reflective/Reified/MulDisplay.v b/src/SpecificGen/GF25519_32Reflective/Reified/MulDisplay.v
deleted file mode 100644
index d8ee19fd4..000000000
--- a/src/SpecificGen/GF25519_32Reflective/Reified/MulDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_32Reflective.Reified.Mul.
-Require Export Crypto.Reflection.Z.CNotations.
-
-Print rmulW.
diff --git a/src/SpecificGen/GF25519_32Reflective/Reified/MulJavaDisplay.log b/src/SpecificGen/GF25519_32Reflective/Reified/MulJavaDisplay.log
deleted file mode 100644
index d0d6c01b1..000000000
--- a/src/SpecificGen/GF25519_32Reflective/Reified/MulJavaDisplay.log
+++ /dev/null
@@ -1,297 +0,0 @@
-rmulW =
-fun var : Syntax.base_type -> Type =>
-λ
-x x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17
- x18 : var Syntax.TZ,
-Tbase Syntax.TZ x19 = x8 * x18;
-Tbase Syntax.TZ x20 = x17 * 0x2;
-Tbase Syntax.TZ x21 = x * x20;
-Tbase Syntax.TZ x22 = x0 * x16;
-Tbase Syntax.TZ x23 = x15 * 0x2;
-Tbase Syntax.TZ x24 = x1 * x23;
-Tbase Syntax.TZ x25 = x2 * x14;
-Tbase Syntax.TZ x26 = x13 * 0x2;
-Tbase Syntax.TZ x27 = x3 * x26;
-Tbase Syntax.TZ x28 = x4 * x12;
-Tbase Syntax.TZ x29 = x11 * 0x2;
-Tbase Syntax.TZ x30 = x5 * x29;
-Tbase Syntax.TZ x31 = x6 * x10;
-Tbase Syntax.TZ x32 = x9 * 0x2;
-Tbase Syntax.TZ x33 = x7 * x32;
-Tbase Syntax.TZ x34 = x31 + x33;
-Tbase Syntax.TZ x35 = x30 + x34;
-Tbase Syntax.TZ x36 = x28 + x35;
-Tbase Syntax.TZ x37 = x27 + x36;
-Tbase Syntax.TZ x38 = x25 + x37;
-Tbase Syntax.TZ x39 = x24 + x38;
-Tbase Syntax.TZ x40 = x22 + x39;
-Tbase Syntax.TZ x41 = x21 + x40;
-Tbase Syntax.TZ x42 = 0x13 * x41;
-Tbase Syntax.TZ x43 = x19 + x42;
-Tbase Syntax.TZ x44 = x43 >>> 0x1a;
-Tbase Syntax.TZ x45 = x7 * x18;
-Tbase Syntax.TZ x46 = x8 * x17;
-Tbase Syntax.TZ x47 = x45 + x46;
-Tbase Syntax.TZ x48 = x * x16;
-Tbase Syntax.TZ x49 = x0 * x15;
-Tbase Syntax.TZ x50 = x1 * x14;
-Tbase Syntax.TZ x51 = x2 * x13;
-Tbase Syntax.TZ x52 = x3 * x12;
-Tbase Syntax.TZ x53 = x4 * x11;
-Tbase Syntax.TZ x54 = x5 * x10;
-Tbase Syntax.TZ x55 = x6 * x9;
-Tbase Syntax.TZ x56 = x54 + x55;
-Tbase Syntax.TZ x57 = x53 + x56;
-Tbase Syntax.TZ x58 = x52 + x57;
-Tbase Syntax.TZ x59 = x51 + x58;
-Tbase Syntax.TZ x60 = x50 + x59;
-Tbase Syntax.TZ x61 = x49 + x60;
-Tbase Syntax.TZ x62 = x48 + x61;
-Tbase Syntax.TZ x63 = 0x13 * x62;
-Tbase Syntax.TZ x64 = x47 + x63;
-Tbase Syntax.TZ x65 = x44 + x64;
-Tbase Syntax.TZ x66 = x65 >>> 0x19;
-Tbase Syntax.TZ x67 = x6 * x18;
-Tbase Syntax.TZ x68 = x17 * 0x2;
-Tbase Syntax.TZ x69 = x7 * x68;
-Tbase Syntax.TZ x70 = x8 * x16;
-Tbase Syntax.TZ x71 = x69 + x70;
-Tbase Syntax.TZ x72 = x67 + x71;
-Tbase Syntax.TZ x73 = x15 * 0x2;
-Tbase Syntax.TZ x74 = x * x73;
-Tbase Syntax.TZ x75 = x0 * x14;
-Tbase Syntax.TZ x76 = x13 * 0x2;
-Tbase Syntax.TZ x77 = x1 * x76;
-Tbase Syntax.TZ x78 = x2 * x12;
-Tbase Syntax.TZ x79 = x11 * 0x2;
-Tbase Syntax.TZ x80 = x3 * x79;
-Tbase Syntax.TZ x81 = x4 * x10;
-Tbase Syntax.TZ x82 = x9 * 0x2;
-Tbase Syntax.TZ x83 = x5 * x82;
-Tbase Syntax.TZ x84 = x81 + x83;
-Tbase Syntax.TZ x85 = x80 + x84;
-Tbase Syntax.TZ x86 = x78 + x85;
-Tbase Syntax.TZ x87 = x77 + x86;
-Tbase Syntax.TZ x88 = x75 + x87;
-Tbase Syntax.TZ x89 = x74 + x88;
-Tbase Syntax.TZ x90 = 0x13 * x89;
-Tbase Syntax.TZ x91 = x72 + x90;
-Tbase Syntax.TZ x92 = x66 + x91;
-Tbase Syntax.TZ x93 = x92 >>> 0x1a;
-Tbase Syntax.TZ x94 = x5 * x18;
-Tbase Syntax.TZ x95 = x6 * x17;
-Tbase Syntax.TZ x96 = x7 * x16;
-Tbase Syntax.TZ x97 = x8 * x15;
-Tbase Syntax.TZ x98 = x96 + x97;
-Tbase Syntax.TZ x99 = x95 + x98;
-Tbase Syntax.TZ x100 = x94 + x99;
-Tbase Syntax.TZ x101 = x * x14;
-Tbase Syntax.TZ x102 = x0 * x13;
-Tbase Syntax.TZ x103 = x1 * x12;
-Tbase Syntax.TZ x104 = x2 * x11;
-Tbase Syntax.TZ x105 = x3 * x10;
-Tbase Syntax.TZ x106 = x4 * x9;
-Tbase Syntax.TZ x107 = x105 + x106;
-Tbase Syntax.TZ x108 = x104 + x107;
-Tbase Syntax.TZ x109 = x103 + x108;
-Tbase Syntax.TZ x110 = x102 + x109;
-Tbase Syntax.TZ x111 = x101 + x110;
-Tbase Syntax.TZ x112 = 0x13 * x111;
-Tbase Syntax.TZ x113 = x100 + x112;
-Tbase Syntax.TZ x114 = x93 + x113;
-Tbase Syntax.TZ x115 = x114 >>> 0x19;
-Tbase Syntax.TZ x116 = x4 * x18;
-Tbase Syntax.TZ x117 = x17 * 0x2;
-Tbase Syntax.TZ x118 = x5 * x117;
-Tbase Syntax.TZ x119 = x6 * x16;
-Tbase Syntax.TZ x120 = x15 * 0x2;
-Tbase Syntax.TZ x121 = x7 * x120;
-Tbase Syntax.TZ x122 = x8 * x14;
-Tbase Syntax.TZ x123 = x121 + x122;
-Tbase Syntax.TZ x124 = x119 + x123;
-Tbase Syntax.TZ x125 = x118 + x124;
-Tbase Syntax.TZ x126 = x116 + x125;
-Tbase Syntax.TZ x127 = x13 * 0x2;
-Tbase Syntax.TZ x128 = x * x127;
-Tbase Syntax.TZ x129 = x0 * x12;
-Tbase Syntax.TZ x130 = x11 * 0x2;
-Tbase Syntax.TZ x131 = x1 * x130;
-Tbase Syntax.TZ x132 = x2 * x10;
-Tbase Syntax.TZ x133 = x9 * 0x2;
-Tbase Syntax.TZ x134 = x3 * x133;
-Tbase Syntax.TZ x135 = x132 + x134;
-Tbase Syntax.TZ x136 = x131 + x135;
-Tbase Syntax.TZ x137 = x129 + x136;
-Tbase Syntax.TZ x138 = x128 + x137;
-Tbase Syntax.TZ x139 = 0x13 * x138;
-Tbase Syntax.TZ x140 = x126 + x139;
-Tbase Syntax.TZ x141 = x115 + x140;
-Tbase Syntax.TZ x142 = x141 >>> 0x1a;
-Tbase Syntax.TZ x143 = x3 * x18;
-Tbase Syntax.TZ x144 = x4 * x17;
-Tbase Syntax.TZ x145 = x5 * x16;
-Tbase Syntax.TZ x146 = x6 * x15;
-Tbase Syntax.TZ x147 = x7 * x14;
-Tbase Syntax.TZ x148 = x8 * x13;
-Tbase Syntax.TZ x149 = x147 + x148;
-Tbase Syntax.TZ x150 = x146 + x149;
-Tbase Syntax.TZ x151 = x145 + x150;
-Tbase Syntax.TZ x152 = x144 + x151;
-Tbase Syntax.TZ x153 = x143 + x152;
-Tbase Syntax.TZ x154 = x * x12;
-Tbase Syntax.TZ x155 = x0 * x11;
-Tbase Syntax.TZ x156 = x1 * x10;
-Tbase Syntax.TZ x157 = x2 * x9;
-Tbase Syntax.TZ x158 = x156 + x157;
-Tbase Syntax.TZ x159 = x155 + x158;
-Tbase Syntax.TZ x160 = x154 + x159;
-Tbase Syntax.TZ x161 = 0x13 * x160;
-Tbase Syntax.TZ x162 = x153 + x161;
-Tbase Syntax.TZ x163 = x142 + x162;
-Tbase Syntax.TZ x164 = x163 >>> 0x19;
-Tbase Syntax.TZ x165 = x2 * x18;
-Tbase Syntax.TZ x166 = x17 * 0x2;
-Tbase Syntax.TZ x167 = x3 * x166;
-Tbase Syntax.TZ x168 = x4 * x16;
-Tbase Syntax.TZ x169 = x15 * 0x2;
-Tbase Syntax.TZ x170 = x5 * x169;
-Tbase Syntax.TZ x171 = x6 * x14;
-Tbase Syntax.TZ x172 = x13 * 0x2;
-Tbase Syntax.TZ x173 = x7 * x172;
-Tbase Syntax.TZ x174 = x8 * x12;
-Tbase Syntax.TZ x175 = x173 + x174;
-Tbase Syntax.TZ x176 = x171 + x175;
-Tbase Syntax.TZ x177 = x170 + x176;
-Tbase Syntax.TZ x178 = x168 + x177;
-Tbase Syntax.TZ x179 = x167 + x178;
-Tbase Syntax.TZ x180 = x165 + x179;
-Tbase Syntax.TZ x181 = x11 * 0x2;
-Tbase Syntax.TZ x182 = x * x181;
-Tbase Syntax.TZ x183 = x0 * x10;
-Tbase Syntax.TZ x184 = x9 * 0x2;
-Tbase Syntax.TZ x185 = x1 * x184;
-Tbase Syntax.TZ x186 = x183 + x185;
-Tbase Syntax.TZ x187 = x182 + x186;
-Tbase Syntax.TZ x188 = 0x13 * x187;
-Tbase Syntax.TZ x189 = x180 + x188;
-Tbase Syntax.TZ x190 = x164 + x189;
-Tbase Syntax.TZ x191 = x190 >>> 0x1a;
-Tbase Syntax.TZ x192 = x1 * x18;
-Tbase Syntax.TZ x193 = x2 * x17;
-Tbase Syntax.TZ x194 = x3 * x16;
-Tbase Syntax.TZ x195 = x4 * x15;
-Tbase Syntax.TZ x196 = x5 * x14;
-Tbase Syntax.TZ x197 = x6 * x13;
-Tbase Syntax.TZ x198 = x7 * x12;
-Tbase Syntax.TZ x199 = x8 * x11;
-Tbase Syntax.TZ x200 = x198 + x199;
-Tbase Syntax.TZ x201 = x197 + x200;
-Tbase Syntax.TZ x202 = x196 + x201;
-Tbase Syntax.TZ x203 = x195 + x202;
-Tbase Syntax.TZ x204 = x194 + x203;
-Tbase Syntax.TZ x205 = x193 + x204;
-Tbase Syntax.TZ x206 = x192 + x205;
-Tbase Syntax.TZ x207 = x * x10;
-Tbase Syntax.TZ x208 = x0 * x9;
-Tbase Syntax.TZ x209 = x207 + x208;
-Tbase Syntax.TZ x210 = 0x13 * x209;
-Tbase Syntax.TZ x211 = x206 + x210;
-Tbase Syntax.TZ x212 = x191 + x211;
-Tbase Syntax.TZ x213 = x212 >>> 0x19;
-Tbase Syntax.TZ x214 = x0 * x18;
-Tbase Syntax.TZ x215 = x17 * 0x2;
-Tbase Syntax.TZ x216 = x1 * x215;
-Tbase Syntax.TZ x217 = x2 * x16;
-Tbase Syntax.TZ x218 = x15 * 0x2;
-Tbase Syntax.TZ x219 = x3 * x218;
-Tbase Syntax.TZ x220 = x4 * x14;
-Tbase Syntax.TZ x221 = x13 * 0x2;
-Tbase Syntax.TZ x222 = x5 * x221;
-Tbase Syntax.TZ x223 = x6 * x12;
-Tbase Syntax.TZ x224 = x11 * 0x2;
-Tbase Syntax.TZ x225 = x7 * x224;
-Tbase Syntax.TZ x226 = x8 * x10;
-Tbase Syntax.TZ x227 = x225 + x226;
-Tbase Syntax.TZ x228 = x223 + x227;
-Tbase Syntax.TZ x229 = x222 + x228;
-Tbase Syntax.TZ x230 = x220 + x229;
-Tbase Syntax.TZ x231 = x219 + x230;
-Tbase Syntax.TZ x232 = x217 + x231;
-Tbase Syntax.TZ x233 = x216 + x232;
-Tbase Syntax.TZ x234 = x214 + x233;
-Tbase Syntax.TZ x235 = x9 * 0x2;
-Tbase Syntax.TZ x236 = x * x235;
-Tbase Syntax.TZ x237 = 0x13 * x236;
-Tbase Syntax.TZ x238 = x234 + x237;
-Tbase Syntax.TZ x239 = x213 + x238;
-Tbase Syntax.TZ x240 = x239 >>> 0x1a;
-Tbase Syntax.TZ x241 = x * x18;
-Tbase Syntax.TZ x242 = x0 * x17;
-Tbase Syntax.TZ x243 = x1 * x16;
-Tbase Syntax.TZ x244 = x2 * x15;
-Tbase Syntax.TZ x245 = x3 * x14;
-Tbase Syntax.TZ x246 = x4 * x13;
-Tbase Syntax.TZ x247 = x5 * x12;
-Tbase Syntax.TZ x248 = x6 * x11;
-Tbase Syntax.TZ x249 = x7 * x10;
-Tbase Syntax.TZ x250 = x8 * x9;
-Tbase Syntax.TZ x251 = x249 + x250;
-Tbase Syntax.TZ x252 = x248 + x251;
-Tbase Syntax.TZ x253 = x247 + x252;
-Tbase Syntax.TZ x254 = x246 + x253;
-Tbase Syntax.TZ x255 = x245 + x254;
-Tbase Syntax.TZ x256 = x244 + x255;
-Tbase Syntax.TZ x257 = x243 + x256;
-Tbase Syntax.TZ x258 = x242 + x257;
-Tbase Syntax.TZ x259 = x241 + x258;
-Tbase Syntax.TZ x260 = x240 + x259;
-Tbase Syntax.TZ x261 = x260 >>> 0x19;
-Tbase Syntax.TZ x262 = 0x13 * x261;
-Tbase Syntax.TZ x263 = x43 & 0x3ffffff;
-Tbase Syntax.TZ x264 = x262 + x263;
-Tbase Syntax.TZ x265 = x264 >>> 0x1a;
-Tbase Syntax.TZ x266 = x65 & 0x1ffffff;
-Tbase Syntax.TZ x267 = x265 + x266;
-Tbase Syntax.TZ x268 = x260 & 0x1ffffff;
-Tbase Syntax.TZ x269 = x239 & 0x3ffffff;
-Tbase Syntax.TZ x270 = x212 & 0x1ffffff;
-Tbase Syntax.TZ x271 = x190 & 0x3ffffff;
-Tbase Syntax.TZ x272 = x163 & 0x1ffffff;
-Tbase Syntax.TZ x273 = x141 & 0x3ffffff;
-Tbase Syntax.TZ x274 = x114 & 0x1ffffff;
-Tbase Syntax.TZ x275 = x267 >>> 0x19;
-Tbase Syntax.TZ x276 = x92 & 0x3ffffff;
-Tbase Syntax.TZ x277 = x275 + x276;
-Tbase Syntax.TZ x278 = x267 & 0x1ffffff;
-Tbase Syntax.TZ x279 = x264 & 0x3ffffff;
-(Return x268, Return x269, Return x270, Return x271,
-Return x272, Return x273, Return x274, Return x277,
-Return x278, Return x279)
- : forall var : Syntax.base_type -> Type,
- expr Syntax.base_type Syntax.op
- (Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF25519_32Reflective/Reified/MulJavaDisplay.v b/src/SpecificGen/GF25519_32Reflective/Reified/MulJavaDisplay.v
deleted file mode 100644
index 8600068c6..000000000
--- a/src/SpecificGen/GF25519_32Reflective/Reified/MulJavaDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_32Reflective.Reified.Mul.
-Require Export Crypto.Reflection.Z.JavaNotations.
-
-Print rmulW.
diff --git a/src/SpecificGen/GF25519_32Reflective/Reified/Opp.v b/src/SpecificGen/GF25519_32Reflective/Reified/Opp.v
deleted file mode 100644
index c105233ba..000000000
--- a/src/SpecificGen/GF25519_32Reflective/Reified/Opp.v
+++ /dev/null
@@ -1,12 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_32Reflective.CommonUnOp.
-
-Definition roppZ_sig : rexpr_unop_sig opp. Proof. reify_sig. Defined.
-Definition roppW := Eval vm_compute in rword_of_Z roppZ_sig.
-Lemma roppW_correct_and_bounded_gen : correct_and_bounded_genT roppW roppZ_sig.
-Proof. rexpr_correct. Qed.
-Definition ropp_output_bounds := Eval vm_compute in compute_bounds roppW ExprUnOp_bounds.
-
-Local Open Scope string_scope.
-Compute ("Opp", compute_bounds_for_display roppW ExprUnOp_bounds).
-Compute ("Opp overflows? ", sanity_compute roppW ExprUnOp_bounds).
-Compute ("Opp overflows (error if it does)? ", sanity_check roppW ExprUnOp_bounds).
diff --git a/src/SpecificGen/GF25519_32Reflective/Reified/Pack.v b/src/SpecificGen/GF25519_32Reflective/Reified/Pack.v
deleted file mode 100644
index 9f32e104a..000000000
--- a/src/SpecificGen/GF25519_32Reflective/Reified/Pack.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_32Reflective.CommonUnOpFEToWire.
-
-Definition rpackZ_sig : rexpr_unop_FEToWire_sig pack. Proof. reify_sig. Defined.
-Definition rpackW := Eval vm_compute in rword_of_Z rpackZ_sig.
-Lemma rpackW_correct_and_bounded_gen : correct_and_bounded_genT rpackW rpackZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rpack_output_bounds := Eval vm_compute in compute_bounds rpackW ExprUnOpFEToWire_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rpackW_correct_and_bounded
- := ExprUnOpFEToWire_correct_and_bounded
- rpackW pack rpackZ_sig rpackW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Pack", compute_bounds_for_display rpackW ExprUnOpFEToWire_bounds).
-Compute ("Pack overflows? ", sanity_compute rpackW ExprUnOpFEToWire_bounds).
-Compute ("Pack overflows (error if it does)? ", sanity_check rpackW ExprUnOpFEToWire_bounds).
diff --git a/src/SpecificGen/GF25519_32Reflective/Reified/PreFreeze.v b/src/SpecificGen/GF25519_32Reflective/Reified/PreFreeze.v
deleted file mode 100644
index 8cdacd63f..000000000
--- a/src/SpecificGen/GF25519_32Reflective/Reified/PreFreeze.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_32Reflective.CommonUnOp.
-
-Definition rprefreezeZ_sig : rexpr_unop_sig prefreeze. Proof. reify_sig. Defined.
-Definition rprefreezeW := Eval vm_compute in rword_of_Z rprefreezeZ_sig.
-Lemma rprefreezeW_correct_and_bounded_gen : correct_and_bounded_genT rprefreezeW rprefreezeZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rprefreeze_output_bounds := Eval vm_compute in compute_bounds rprefreezeW ExprUnOp_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rprefreezeW_correct_and_bounded
- := ExprUnOp_correct_and_bounded
- rprefreezeW prefreeze rprefreezeZ_sig rprefreezeW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("PreFreeze", compute_bounds_for_display rprefreezeW ExprUnOp_bounds).
-Compute ("PreFreeze overflows? ", sanity_compute rprefreezeW ExprUnOp_bounds).
-Compute ("PreFreeze overflows (error if it does)? ", sanity_check rprefreezeW ExprUnOp_bounds).
diff --git a/src/SpecificGen/GF25519_32Reflective/Reified/Sub.v b/src/SpecificGen/GF25519_32Reflective/Reified/Sub.v
deleted file mode 100644
index 12881bf22..000000000
--- a/src/SpecificGen/GF25519_32Reflective/Reified/Sub.v
+++ /dev/null
@@ -1,12 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_32Reflective.CommonBinOp.
-
-Definition rsubZ_sig : rexpr_binop_sig sub. Proof. reify_sig. Defined.
-Definition rsubW := Eval vm_compute in rword_of_Z rsubZ_sig.
-Lemma rsubW_correct_and_bounded_gen : correct_and_bounded_genT rsubW rsubZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rsub_output_bounds := Eval vm_compute in compute_bounds rsubW ExprBinOp_bounds.
-
-Local Open Scope string_scope.
-Compute ("Sub", compute_bounds_for_display rsubW ExprBinOp_bounds).
-Compute ("Sub overflows? ", sanity_compute rsubW ExprBinOp_bounds).
-Compute ("Sub overflows (error if it does)? ", sanity_check rsubW ExprBinOp_bounds).
diff --git a/src/SpecificGen/GF25519_32Reflective/Reified/Unpack.v b/src/SpecificGen/GF25519_32Reflective/Reified/Unpack.v
deleted file mode 100644
index 04433583d..000000000
--- a/src/SpecificGen/GF25519_32Reflective/Reified/Unpack.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_32Reflective.CommonUnOpWireToFE.
-
-Definition runpackZ_sig : rexpr_unop_WireToFE_sig unpack. Proof. reify_sig. Defined.
-Definition runpackW := Eval vm_compute in rword_of_Z runpackZ_sig.
-Lemma runpackW_correct_and_bounded_gen : correct_and_bounded_genT runpackW runpackZ_sig.
-Proof. rexpr_correct. Qed.
-Definition runpack_output_bounds := Eval vm_compute in compute_bounds runpackW ExprUnOpWireToFE_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition runpackW_correct_and_bounded
- := ExprUnOpWireToFE_correct_and_bounded
- runpackW unpack runpackZ_sig runpackW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Unpack", compute_bounds_for_display runpackW ExprUnOpWireToFE_bounds).
-Compute ("Unpack overflows? ", sanity_compute runpackW ExprUnOpWireToFE_bounds).
-Compute ("Unpack overflows (error if it does)? ", sanity_check runpackW ExprUnOpWireToFE_bounds).
diff --git a/src/SpecificGen/GF25519_32ReflectiveAddCoordinates.v b/src/SpecificGen/GF25519_32ReflectiveAddCoordinates.v
deleted file mode 100644
index c2a9414f4..000000000
--- a/src/SpecificGen/GF25519_32ReflectiveAddCoordinates.v
+++ /dev/null
@@ -1,77 +0,0 @@
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParams.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParamProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemOpt.
-Require Export Crypto.SpecificGen.GF25519_32.
-Require Import Crypto.SpecificGen.GF25519_32BoundedCommon.
-Require Import Crypto.Reflection.Reify.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.Map.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Crypto.Reflection.Z.Interpretations64.Relations.
-Require Import Crypto.Reflection.Z.Interpretations64.RelationsCombinations.
-Require Import Crypto.Reflection.Z.Reify.
-Require Import Crypto.Reflection.Z.Syntax.
-Require Import Crypto.SpecificGen.GF25519_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF25519_32Reflective.Reified.AddCoordinates.
-Require Import Bedrock.Word Crypto.Util.WordUtil.
-Require Import Coq.Lists.List Crypto.Util.ListUtil.
-Require Import Crypto.Tactics.VerdiTactics.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Notations.
-Require Import Crypto.Util.Bool.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Algebra.
-Import ListNotations.
-Require Import Coq.ZArith.ZArith Coq.ZArith.Zpower Coq.ZArith.ZArith Coq.ZArith.Znumtheory.
-Local Open Scope Z.
-
-Time Definition radd_coordinates : Expr _ := Eval vm_compute in radd_coordinatesW.
-
-Declare Reduction asm_interp_add_coordinates
- := cbv beta iota delta
- [id
- interp_bexpr interp_uexpr interp_uexpr_FEToWire interp_uexpr_FEToZ interp_uexpr_WireToFE interp_9_4expr
- radd_coordinates
- curry_binop_fe25519_32W curry_unop_fe25519_32W curry_unop_wire_digitsW curry_9op_fe25519_32W
- WordW.interp_op WordW.interp_base_type
- Z.interp_op Z.interp_base_type
- Z.Syntax.interp_op Z.Syntax.interp_base_type
- mapf_interp_flat_type WordW.interp_base_type word64ize
- Interp interp interp_flat_type interpf interpf_step interp_flat_type fst snd].
-Ltac asm_interp_add_coordinates
- := cbv beta iota delta
- [id
- interp_bexpr interp_uexpr interp_uexpr_FEToWire interp_uexpr_FEToZ interp_uexpr_WireToFE interp_9_4expr
- radd_coordinates
- curry_binop_fe25519_32W curry_unop_fe25519_32W curry_unop_wire_digitsW curry_9op_fe25519_32W
- WordW.interp_op WordW.interp_base_type
- Z.interp_op Z.interp_base_type
- Z.Syntax.interp_op Z.Syntax.interp_base_type
- mapf_interp_flat_type WordW.interp_base_type word64ize
- Interp interp interp_flat_type interpf interp_flat_type fst snd].
-
-(*
-Time Definition interp_radd_coordinates : SpecificGen.GF25519_32BoundedCommon.fe25519_32W
- -> SpecificGen.GF25519_32BoundedCommon.fe25519_32W
- -> SpecificGen.GF25519_32BoundedCommon.fe25519_32W
- -> SpecificGen.GF25519_32BoundedCommon.fe25519_32W
- -> SpecificGen.GF25519_32BoundedCommon.fe25519_32W
- -> SpecificGen.GF25519_32BoundedCommon.fe25519_32W
- -> SpecificGen.GF25519_32BoundedCommon.fe25519_32W
- -> SpecificGen.GF25519_32BoundedCommon.fe25519_32W
- -> SpecificGen.GF25519_32BoundedCommon.fe25519_32W
- -> Tuple.tuple SpecificGen.GF25519_32BoundedCommon.fe25519_32W 4
- := Eval asm_interp_add_coordinates in interp_9_4expr radd_coordinates.
-(*Print interp_radd_coordinates.*)
-Time Definition interp_radd_coordinates_correct : interp_radd_coordinates = interp_9_4expr radd_coordinates := eq_refl.
-
-Lemma radd_coordinates_correct_and_bounded : op9_4_correct_and_bounded radd_coordinates add_coordinates.
-Proof. exact_no_check radd_coordinatesW_correct_and_bounded. Time Qed.
-*)
diff --git a/src/SpecificGen/GF25519_64.v b/src/SpecificGen/GF25519_64.v
deleted file mode 100644
index 6aa576fa4..000000000
--- a/src/SpecificGen/GF25519_64.v
+++ /dev/null
@@ -1,782 +0,0 @@
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParams.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParamProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemOpt.
-Require Import Coq.Lists.List Crypto.Util.ListUtil.
-Require Import Crypto.Tactics.VerdiTactics.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Tower.
-Require Import Crypto.Util.Notations.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Algebra.
-Import ListNotations.
-Require Import Coq.ZArith.ZArith Coq.ZArith.Zpower Coq.ZArith.ZArith Coq.ZArith.Znumtheory.
-Local Open Scope Z.
-
-(* BEGIN precomputation. *)
-
-Definition modulus : Z := Eval compute in 2^255 - 19.
-Lemma prime_modulus : prime modulus. Admitted.
-Definition int_width := Eval compute in (2 * 64)%Z.
-Definition freeze_input_bound := 64%Z.
-
-Instance params25519_64 : PseudoMersenneBaseParams modulus.
- construct_params prime_modulus 5%nat 255.
-Defined.
-
-Definition length_fe25519_64 := Eval compute in length limb_widths.
-Definition fe25519_64 := Eval compute in (tuple Z length_fe25519_64).
-
-Definition mul2modulus : fe25519_64 :=
- Eval compute in (from_list_default 0%Z (length limb_widths) (construct_mul2modulus params25519_64)).
-
-Instance subCoeff : SubtractionCoefficient.
- apply Build_SubtractionCoefficient with (coeff := mul2modulus).
- vm_decide.
-Defined.
-
-Instance carryChain : CarryChain limb_widths.
- apply Build_CarryChain with (carry_chain := (rev [0;1;2;3;4;0;1])%nat).
- intros.
- repeat (destruct H as [|H]; [subst; vm_compute; repeat constructor | ]).
- contradiction H.
-Defined.
-
-Definition freezePreconditions : FreezePreconditions freeze_input_bound int_width.
-Proof.
- constructor; compute_preconditions.
-Defined.
-
-(* Wire format for [pack] and [unpack] *)
-Definition wire_widths := Eval compute in (repeat 64 3 ++ 63 :: nil).
-
-Definition wire_digits := Eval compute in (tuple Z (length wire_widths)).
-
-Lemma wire_widths_nonneg : forall w, In w wire_widths -> 0 <= w.
-Proof.
- intros.
- repeat (destruct H as [|H]; [subst; vm_compute; congruence | ]).
- contradiction H.
-Qed.
-
-Lemma bits_eq : sum_firstn limb_widths (length limb_widths) = sum_firstn wire_widths (length wire_widths).
-Proof.
- reflexivity.
-Qed.
-
-Lemma modulus_gt_2 : 2 < modulus. Proof. cbv; congruence. Qed.
-
-(* Temporarily, we'll use addition chains equivalent to double-and-add. This is pending
- finding the real, more optimal chains from previous work. *)
-Fixpoint pow2Chain'' p (pow2_index acc_index : nat) chain_acc : list (nat * nat) :=
- match p with
- | xI p' => pow2Chain'' p' 1 0
- (chain_acc ++ (pow2_index, pow2_index) :: (0%nat, S acc_index) :: nil)
- | xO p' => pow2Chain'' p' 0 (S acc_index)
- (chain_acc ++ (pow2_index, pow2_index)::nil)
- | xH => (chain_acc ++ (pow2_index, pow2_index) :: (0%nat, S acc_index) :: nil)
- end.
-
-Fixpoint pow2Chain' p index :=
- match p with
- | xI p' => pow2Chain'' p' 0 0 (repeat (0,0)%nat index)
- | xO p' => pow2Chain' p' (S index)
- | xH => repeat (0,0)%nat index
- end.
-
-Definition pow2_chain p :=
- match p with
- | xH => nil
- | _ => pow2Chain' p 0
- end.
-
-Definition invChain := Eval compute in pow2_chain (Z.to_pos (modulus - 2)).
-
-Instance inv_ec : ExponentiationChain (modulus - 2).
- apply Build_ExponentiationChain with (chain := invChain).
- reflexivity.
-Defined.
-
-(* Note : use caution copying square root code to other primes. The (modulus / 8 + 1) chains are
- for primes that are 5 mod 8; if the prime is 3 mod 4 then use (modulus / 4 + 1). *)
-Definition sqrtChain := Eval compute in pow2_chain (Z.to_pos (modulus / 8 + 1)).
-
-Instance sqrt_ec : ExponentiationChain (modulus / 8 + 1).
- apply Build_ExponentiationChain with (chain := sqrtChain).
- reflexivity.
-Defined.
-
-Arguments chain {_ _ _} _.
-
-(* END precomputation *)
-
-(* Precompute constants *)
-Definition k_ := Eval compute in k.
-Definition k_subst : k = k_ := eq_refl k_.
-
-Definition c_ := Eval compute in c.
-Definition c_subst : c = c_ := eq_refl c_.
-
-Definition one_ := Eval compute in one.
-Definition one_subst : one = one_ := eq_refl one_.
-
-Definition zero_ := Eval compute in zero.
-Definition zero_subst : zero = zero_ := eq_refl zero_.
-
-Definition modulus_digits_ := Eval compute in ModularBaseSystemList.modulus_digits.
-Definition modulus_digits_subst : ModularBaseSystemList.modulus_digits = modulus_digits_ := eq_refl modulus_digits_.
-
-Local Opaque Z.shiftr Z.shiftl Z.land Z.mul Z.add Z.sub Z.lor Let_In Z.eqb Z.ltb Z.leb ModularBaseSystemListZOperations.neg ModularBaseSystemListZOperations.cmovl ModularBaseSystemListZOperations.cmovne.
-
-Definition app_n2 {T} (f : wire_digits) (P : wire_digits -> T) : T.
-Proof.
- cbv [wire_digits] in *.
- set (f0 := f).
- repeat (let g := fresh "g" in destruct f as [f g]).
- apply P.
- apply f0.
-Defined.
-
-Definition app_n2_correct {T} f (P : wire_digits -> T) : app_n2 f P = P f.
-Proof.
- intros.
- cbv [wire_digits] in *.
- repeat match goal with [p : (_*Z)%type |- _ ] => destruct p end.
- reflexivity.
-Qed.
-
-Definition app_n {T} (f : fe25519_64) (P : fe25519_64 -> T) : T.
-Proof.
- cbv [fe25519_64] in *.
- set (f0 := f).
- repeat (let g := fresh "g" in destruct f as [f g]).
- apply P.
- apply f0.
-Defined.
-
-Definition app_n_correct {T} f (P : fe25519_64 -> T) : app_n f P = P f.
-Proof.
- intros.
- cbv [fe25519_64] in *.
- repeat match goal with [p : (_*Z)%type |- _ ] => destruct p end.
- reflexivity.
-Qed.
-
-Definition appify2 {T} (op : fe25519_64 -> fe25519_64 -> T) (f g : fe25519_64) :=
- app_n f (fun f0 => (app_n g (fun g0 => op f0 g0))).
-
-Lemma appify2_correct : forall {T} op f g, @appify2 T op f g = op f g.
-Proof.
- intros. cbv [appify2].
- etransitivity; apply app_n_correct.
-Qed.
-
-Definition appify9 {T} (op : fe25519_64 -> fe25519_64 -> fe25519_64 -> fe25519_64 -> fe25519_64 -> fe25519_64 -> fe25519_64 -> fe25519_64 -> fe25519_64 -> T) (x0 x1 x2 x3 x4 x5 x6 x7 x8 : fe25519_64) :=
- app_n x0 (fun x0' =>
- app_n x1 (fun x1' =>
- app_n x2 (fun x2' =>
- app_n x3 (fun x3' =>
- app_n x4 (fun x4' =>
- app_n x5 (fun x5' =>
- app_n x6 (fun x6' =>
- app_n x7 (fun x7' =>
- app_n x8 (fun x8' =>
- op x0' x1' x2' x3' x4' x5' x6' x7' x8'))))))))).
-
-Lemma appify9_correct : forall {T} op x0 x1 x2 x3 x4 x5 x6 x7 x8,
- @appify9 T op x0 x1 x2 x3 x4 x5 x6 x7 x8 = op x0 x1 x2 x3 x4 x5 x6 x7 x8.
-Proof.
- intros. cbv [appify9].
- repeat (etransitivity; [ apply app_n_correct | ]); reflexivity.
-Qed.
-
-Definition uncurry_unop_fe25519_64 {T} (op : fe25519_64 -> T)
- := Eval compute in Tuple.uncurry (n:=length_fe25519_64) op.
-Definition curry_unop_fe25519_64 {T} op : fe25519_64 -> T
- := Eval compute in fun f => app_n f (Tuple.curry (n:=length_fe25519_64) op).
-
-Fixpoint uncurry_n_op_fe25519_64 {T} n
- : forall (op : Tower.tower_nd fe25519_64 T n),
- Tower.tower_nd Z T (n * length_fe25519_64)
- := match n
- return (forall (op : Tower.tower_nd fe25519_64 T n),
- Tower.tower_nd Z T (n * length_fe25519_64))
- with
- | O => fun x => x
- | S n' => fun f => uncurry_unop_fe25519_64 (fun x => @uncurry_n_op_fe25519_64 _ n' (f x))
- end.
-
-Definition uncurry_binop_fe25519_64 {T} (op : fe25519_64 -> fe25519_64 -> T)
- := Eval compute in uncurry_n_op_fe25519_64 2 op.
-Definition curry_binop_fe25519_64 {T} op : fe25519_64 -> fe25519_64 -> T
- := Eval compute in appify2 (fun f => curry_unop_fe25519_64 (curry_unop_fe25519_64 op f)).
-
-Definition uncurry_unop_wire_digits {T} (op : wire_digits -> T)
- := Eval compute in Tuple.uncurry (n:=length wire_widths) op.
-Definition curry_unop_wire_digits {T} op : wire_digits -> T
- := Eval compute in fun f => app_n2 f (Tuple.curry (n:=length wire_widths) op).
-
-Definition uncurry_9op_fe25519_64 {T} (op : fe25519_64 -> fe25519_64 -> fe25519_64 -> fe25519_64 -> fe25519_64 -> fe25519_64 -> fe25519_64 -> fe25519_64 -> fe25519_64 -> T)
- := Eval compute in uncurry_n_op_fe25519_64 9 op.
-Definition curry_9op_fe25519_64 {T} op : fe25519_64 -> fe25519_64 -> fe25519_64 -> fe25519_64 -> fe25519_64 -> fe25519_64 -> fe25519_64 -> fe25519_64 -> fe25519_64 -> T
- := Eval compute in
- appify9 (fun x0 x1 x2 x3 x4 x5 x6 x7 x8
- => curry_unop_fe25519_64 (curry_unop_fe25519_64 (curry_unop_fe25519_64 (curry_unop_fe25519_64 (curry_unop_fe25519_64 (curry_unop_fe25519_64 (curry_unop_fe25519_64 (curry_unop_fe25519_64 (curry_unop_fe25519_64 op x0) x1) x2) x3) x4) x5) x6) x7) x8).
-
-Definition add_sig (f g : fe25519_64) :
- { fg : fe25519_64 | fg = add_opt f g}.
-Proof.
- eexists.
- rewrite <-(@appify2_correct fe25519_64).
- cbv.
- reflexivity.
-Defined.
-
-Definition add (f g : fe25519_64) : fe25519_64 :=
- Eval cbv beta iota delta [proj1_sig add_sig] in
- proj1_sig (add_sig f g).
-
-Definition add_correct (f g : fe25519_64)
- : add f g = add_opt f g :=
- Eval cbv beta iota delta [proj1_sig add_sig] in
- proj2_sig (add_sig f g).
-
-Definition carry_add_sig (f g : fe25519_64) :
- { fg : fe25519_64 | fg = carry_add_opt f g}.
-Proof.
- eexists.
- rewrite <-(@appify2_correct fe25519_64).
- cbv.
- autorewrite with zsimplify_fast zsimplify_Z_to_pos; cbv.
- autorewrite with zsimplify_Z_to_pos; cbv.
- reflexivity.
-Defined.
-
-Definition carry_add (f g : fe25519_64) : fe25519_64 :=
- Eval cbv beta iota delta [proj1_sig carry_add_sig] in
- proj1_sig (carry_add_sig f g).
-
-Definition carry_add_correct (f g : fe25519_64)
- : carry_add f g = carry_add_opt f g :=
- Eval cbv beta iota delta [proj1_sig carry_add_sig] in
- proj2_sig (carry_add_sig f g).
-
-Definition sub_sig (f g : fe25519_64) :
- { fg : fe25519_64 | fg = sub_opt f g}.
-Proof.
- eexists.
- rewrite <-(@appify2_correct fe25519_64).
- cbv.
- reflexivity.
-Defined.
-
-Definition sub (f g : fe25519_64) : fe25519_64 :=
- Eval cbv beta iota delta [proj1_sig sub_sig] in
- proj1_sig (sub_sig f g).
-
-Definition sub_correct (f g : fe25519_64)
- : sub f g = sub_opt f g :=
- Eval cbv beta iota delta [proj1_sig sub_sig] in
- proj2_sig (sub_sig f g).
-
-Definition carry_sub_sig (f g : fe25519_64) :
- { fg : fe25519_64 | fg = carry_sub_opt f g}.
-Proof.
- eexists.
- rewrite <-(@appify2_correct fe25519_64).
- cbv.
- autorewrite with zsimplify_fast zsimplify_Z_to_pos; cbv.
- autorewrite with zsimplify_Z_to_pos; cbv.
- reflexivity.
-Defined.
-
-Definition carry_sub (f g : fe25519_64) : fe25519_64 :=
- Eval cbv beta iota delta [proj1_sig carry_sub_sig] in
- proj1_sig (carry_sub_sig f g).
-
-Definition carry_sub_correct (f g : fe25519_64)
- : carry_sub f g = carry_sub_opt f g :=
- Eval cbv beta iota delta [proj1_sig carry_sub_sig] in
- proj2_sig (carry_sub_sig f g).
-
-(* For multiplication, we add another layer of definition so that we can
- rewrite under the [let] binders. *)
-Definition mul_simpl_sig (f g : fe25519_64) :
- { fg : fe25519_64 | fg = carry_mul_opt k_ c_ f g}.
-Proof.
- cbv [fe25519_64] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv. (* N.B. The slow part of this is computing with [Z_div_opt].
- It would be much faster if we could take advantage of
- the form of [base_from_limb_widths] when doing
- division, so we could do subtraction instead. *)
- autorewrite with zsimplify_fast.
- reflexivity.
-Defined.
-
-Definition mul_simpl (f g : fe25519_64) : fe25519_64 :=
- Eval cbv beta iota delta [proj1_sig mul_simpl_sig] in
- let '(f0, f1, f2, f3, f4) := f in
- let '(g0, g1, g2, g3, g4) := g in
- proj1_sig (mul_simpl_sig (f0, f1, f2, f3, f4)
- (g0, g1, g2, g3, g4)).
-
-Definition mul_simpl_correct (f g : fe25519_64)
- : mul_simpl f g = carry_mul_opt k_ c_ f g.
-Proof.
- pose proof (proj2_sig (mul_simpl_sig f g)).
- cbv [fe25519_64] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Qed.
-
-Definition mul_sig (f g : fe25519_64) :
- { fg : fe25519_64 | fg = carry_mul_opt k_ c_ f g}.
-Proof.
- eexists.
- rewrite <-mul_simpl_correct.
- rewrite <-(@appify2_correct fe25519_64).
- cbv.
- autorewrite with zsimplify_fast zsimplify_Z_to_pos; cbv.
- autorewrite with zsimplify_Z_to_pos; cbv.
- reflexivity.
-Defined.
-
-Definition mul (f g : fe25519_64) : fe25519_64 :=
- Eval cbv beta iota delta [proj1_sig mul_sig] in
- proj1_sig (mul_sig f g).
-
-Definition mul_correct (f g : fe25519_64)
- : mul f g = carry_mul_opt k_ c_ f g :=
- Eval cbv beta iota delta [proj1_sig add_sig] in
- proj2_sig (mul_sig f g).
-
-Definition opp_sig (f : fe25519_64) :
- { g : fe25519_64 | g = opp_opt f }.
-Proof.
- eexists.
- cbv [opp_opt].
- rewrite <-sub_correct.
- rewrite zero_subst.
- cbv [sub].
- reflexivity.
-Defined.
-
-Definition opp (f : fe25519_64) : fe25519_64
- := Eval cbv beta iota delta [proj1_sig opp_sig] in proj1_sig (opp_sig f).
-
-Definition opp_correct (f : fe25519_64)
- : opp f = opp_opt f
- := Eval cbv beta iota delta [proj2_sig add_sig] in proj2_sig (opp_sig f).
-
-Definition carry_opp_sig (f : fe25519_64) :
- { g : fe25519_64 | g = carry_opp_opt f }.
-Proof.
- eexists.
- cbv [carry_opp_opt].
- rewrite <-carry_sub_correct.
- rewrite zero_subst.
- cbv [carry_sub].
- reflexivity.
-Defined.
-
-Definition carry_opp (f : fe25519_64) : fe25519_64
- := Eval cbv beta iota delta [proj1_sig carry_opp_sig] in proj1_sig (carry_opp_sig f).
-
-Definition carry_opp_correct (f : fe25519_64)
- : carry_opp f = carry_opp_opt f
- := Eval cbv beta iota delta [proj2_sig add_sig] in proj2_sig (carry_opp_sig f).
-
-Definition pow (f : fe25519_64) chain := fold_chain_opt one_ mul chain [f].
-
-Lemma pow_correct (f : fe25519_64) : forall chain, pow f chain = pow_opt k_ c_ one_ f chain.
-Proof.
- cbv [pow pow_opt]; intros.
- rewrite !fold_chain_opt_correct.
- apply Proper_fold_chain; try reflexivity.
- intros; subst; apply mul_correct.
-Qed.
-
-(* Now that we have [pow], we can compute sqrt of -1 for use
- in sqrt function (this is not needed unless the prime is
- 5 mod 8) *)
-Local Transparent Z.shiftr Z.shiftl Z.land Z.mul Z.add Z.sub Z.lor Let_In Z.eqb Z.ltb andb.
-
-Definition sqrt_m1 := Eval vm_compute in (pow (encode (F.of_Z _ 2)) (pow2_chain (Z.to_pos ((modulus - 1) / 4)))).
-
-Lemma sqrt_m1_correct : rep (mul sqrt_m1 sqrt_m1) (F.opp 1%F).
-Proof.
- cbv [rep].
- apply F.eq_to_Z_iff.
- vm_compute.
- reflexivity.
-Qed.
-
-Local Opaque Z.shiftr Z.shiftl Z.land Z.mul Z.add Z.sub Z.lor Let_In Z.eqb Z.ltb andb.
-
-Definition inv_sig (f : fe25519_64) :
- { g : fe25519_64 | g = inv_opt k_ c_ one_ f }.
-Proof.
- eexists; cbv [inv_opt].
- rewrite <-pow_correct.
- cbv - [mul].
- reflexivity.
-Defined.
-
-Definition inv (f : fe25519_64) : fe25519_64
- := Eval cbv beta iota delta [proj1_sig inv_sig] in proj1_sig (inv_sig f).
-
-Definition inv_correct (f : fe25519_64)
- : inv f = inv_opt k_ c_ one_ f
- := Eval cbv beta iota delta [proj2_sig inv_sig] in proj2_sig (inv_sig f).
-
-Definition mbs_field := modular_base_system_field modulus_gt_2.
-
-Import Morphisms.
-
-Local Existing Instance prime_modulus.
-
-Lemma field_and_homomorphisms
- : @field fe25519_64 eq zero_ one_ opp add sub mul inv div
- /\ @Ring.is_homomorphism
- (F modulus) Logic.eq F.one F.add F.mul
- fe25519_64 eq one_ add mul encode
- /\ @Ring.is_homomorphism
- fe25519_64 eq one_ add mul
- (F modulus) Logic.eq F.one F.add F.mul
- decode.
-Proof.
- eapply @Field.field_and_homomorphism_from_redundant_representation.
- { exact (F.field_modulo _). }
- { apply encode_rep. }
- { reflexivity. }
- { reflexivity. }
- { reflexivity. }
- { intros; rewrite opp_correct, opp_opt_correct; apply opp_rep; reflexivity. }
- { intros; rewrite add_correct, add_opt_correct; apply add_rep; reflexivity. }
- { intros; rewrite sub_correct, sub_opt_correct; apply sub_rep; reflexivity. }
- { intros; rewrite mul_correct, carry_mul_opt_correct by reflexivity; apply carry_mul_rep; reflexivity. }
- { intros; rewrite inv_correct, inv_opt_correct by reflexivity; apply inv_rep; reflexivity. }
- { intros; apply encode_rep. }
-Qed.
-
-Definition field25519_64 : @field fe25519_64 eq zero_ one_ opp add sub mul inv div := proj1 field_and_homomorphisms.
-
-Lemma carry_field_and_homomorphisms
- : @field fe25519_64 eq zero_ one_ carry_opp carry_add carry_sub mul inv div
- /\ @Ring.is_homomorphism
- (F modulus) Logic.eq F.one F.add F.mul
- fe25519_64 eq one_ carry_add mul encode
- /\ @Ring.is_homomorphism
- fe25519_64 eq one_ carry_add mul
- (F modulus) Logic.eq F.one F.add F.mul
- decode.
-Proof.
- eapply @Field.field_and_homomorphism_from_redundant_representation.
- { exact (F.field_modulo _). }
- { apply encode_rep. }
- { reflexivity. }
- { reflexivity. }
- { reflexivity. }
- { intros; rewrite carry_opp_correct, carry_opp_opt_correct, carry_opp_rep; apply opp_rep; reflexivity. }
- { intros; rewrite carry_add_correct, carry_add_opt_correct, carry_add_rep; apply add_rep; reflexivity. }
- { intros; rewrite carry_sub_correct, carry_sub_opt_correct, carry_sub_rep; apply sub_rep; reflexivity. }
- { intros; rewrite mul_correct, carry_mul_opt_correct by reflexivity; apply carry_mul_rep; reflexivity. }
- { intros; rewrite inv_correct, inv_opt_correct by reflexivity; apply inv_rep; reflexivity. }
- { intros; apply encode_rep. }
-Qed.
-
-Definition carry_field25519_64 : @field fe25519_64 eq zero_ one_ carry_opp carry_add carry_sub mul inv div := proj1 carry_field_and_homomorphisms.
-
-Lemma homomorphism_F25519_64_encode
- : @Ring.is_homomorphism (F modulus) Logic.eq F.one F.add F.mul fe25519_64 eq one add mul encode.
-Proof. apply field_and_homomorphisms. Qed.
-
-Lemma homomorphism_F25519_64_decode
- : @Ring.is_homomorphism fe25519_64 eq one add mul (F modulus) Logic.eq F.one F.add F.mul decode.
-Proof. apply field_and_homomorphisms. Qed.
-
-
-Lemma homomorphism_carry_F25519_64_encode
- : @Ring.is_homomorphism (F modulus) Logic.eq F.one F.add F.mul fe25519_64 eq one carry_add mul encode.
-Proof. apply carry_field_and_homomorphisms. Qed.
-
-Lemma homomorphism_carry_F25519_64_decode
- : @Ring.is_homomorphism fe25519_64 eq one carry_add mul (F modulus) Logic.eq F.one F.add F.mul decode.
-Proof. apply carry_field_and_homomorphisms. Qed.
-
-Definition ge_modulus_sig (f : fe25519_64) :
- { b : Z | b = ge_modulus_opt (to_list 5 f) }.
-Proof.
- cbv [fe25519_64] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists; cbv [ge_modulus_opt].
- rewrite !modulus_digits_subst.
- cbv.
- reflexivity.
-Defined.
-
-Definition ge_modulus (f : fe25519_64) : Z :=
- Eval cbv beta iota delta [proj1_sig ge_modulus_sig] in
- let '(f0, f1, f2, f3, f4) := f in
- proj1_sig (ge_modulus_sig (f0, f1, f2, f3, f4)).
-
-Definition ge_modulus_correct (f : fe25519_64) :
- ge_modulus f = ge_modulus_opt (to_list 5 f).
-Proof.
- pose proof (proj2_sig (ge_modulus_sig f)).
- cbv [fe25519_64] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Defined.
-
-Definition prefreeze_sig (f : fe25519_64) :
- { f' : fe25519_64 | f' = from_list_default 0 5 (carry_full_3_opt c_ (to_list 5 f)) }.
-Proof.
- cbv [fe25519_64] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv - [from_list_default].
- (* TODO(jgross,jadep): use Reflective linearization here? *)
- repeat (
- set_evars; rewrite app_Let_In_nd; subst_evars;
- eapply Proper_Let_In_nd_changebody; [reflexivity|intro]).
- cbv [from_list_default from_list_default'].
- reflexivity.
-Defined.
-
-Definition prefreeze (f : fe25519_64) : fe25519_64 :=
- Eval cbv beta iota delta [proj1_sig prefreeze_sig] in
- let '(f0, f1, f2, f3, f4) := f in
- proj1_sig (prefreeze_sig (f0, f1, f2, f3, f4)).
-
-Definition prefreeze_correct (f : fe25519_64)
- : prefreeze f = from_list_default 0 5 (carry_full_3_opt c_ (to_list 5 f)).
-Proof.
- pose proof (proj2_sig (prefreeze_sig f)).
- cbv [fe25519_64] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Defined.
-
-Definition postfreeze_sig (f : fe25519_64) :
- { f' : fe25519_64 | f' = from_list_default 0 5 (conditional_subtract_modulus_opt (int_width := int_width) (to_list 5 f)) }.
-Proof.
- cbv [fe25519_64] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists; cbv [freeze_opt int_width].
- cbv [to_list to_list'].
- cbv [conditional_subtract_modulus_opt].
- rewrite !modulus_digits_subst.
- cbv - [from_list_default].
- (* TODO(jgross,jadep): use Reflective linearization here? *)
- repeat (
- set_evars; rewrite app_Let_In_nd; subst_evars;
- eapply Proper_Let_In_nd_changebody; [reflexivity|intro]).
- cbv [from_list_default from_list_default'].
- reflexivity.
-Defined.
-
-Definition postfreeze (f : fe25519_64) : fe25519_64 :=
- Eval cbv beta iota delta [proj1_sig postfreeze_sig] in
- let '(f0, f1, f2, f3, f4) := f in
- proj1_sig (postfreeze_sig (f0, f1, f2, f3, f4)).
-
-Definition postfreeze_correct (f : fe25519_64)
- : postfreeze f = from_list_default 0 5 (conditional_subtract_modulus_opt (int_width := int_width) (to_list 5 f)).
-Proof.
- pose proof (proj2_sig (postfreeze_sig f)).
- cbv [fe25519_64] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Defined.
-
-Definition freeze (f : fe25519_64) : fe25519_64 :=
- dlet x := prefreeze f in
- postfreeze x.
-
-Local Transparent Let_In.
-Definition freeze_correct (f : fe25519_64)
- : freeze f = from_list_default 0 5 (freeze_opt (int_width := int_width) c_ (to_list 5 f)).
-Proof.
- cbv [freeze_opt freeze Let_In].
- rewrite prefreeze_correct.
- rewrite postfreeze_correct.
- match goal with
- |- appcontext [to_list _ (from_list_default _ ?n ?xs)] =>
- assert (length xs = n) as pf; [ | rewrite from_list_default_eq with (pf0 := pf) ] end.
- { rewrite carry_full_3_opt_correct; repeat rewrite ModularBaseSystemListProofs.length_carry_full; auto using length_to_list. }
- rewrite to_list_from_list.
- reflexivity.
-Qed.
-Local Opaque Let_In.
-
-Definition fieldwiseb_sig (f g : fe25519_64) :
- { b | b = @fieldwiseb Z Z 5 Z.eqb f g }.
-Proof.
- cbv [fe25519_64] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv.
- reflexivity.
-Defined.
-
-Definition fieldwiseb (f g : fe25519_64) : bool
- := Eval cbv beta iota delta [proj1_sig fieldwiseb_sig] in
- let '(f0, f1, f2, f3, f4) := f in
- let '(g0, g1, g2, g3, g4) := g in
- proj1_sig (fieldwiseb_sig (f0, f1, f2, f3, f4)
- (g0, g1, g2, g3, g4)).
-
-Lemma fieldwiseb_correct (f g : fe25519_64)
- : fieldwiseb f g = @Tuple.fieldwiseb Z Z 5 Z.eqb f g.
-Proof.
- set (f' := f); set (g' := g).
- hnf in f, g; destruct_head' prod.
- exact (proj2_sig (fieldwiseb_sig f' g')).
-Qed.
-
-Definition eqb_sig (f g : fe25519_64) :
- { b | b = eqb int_width f g }.
-Proof.
- cbv [eqb].
- cbv [fe25519_64] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv [ModularBaseSystem.freeze int_width].
- rewrite <-!from_list_default_eq with (d := 0).
- rewrite <-!(freeze_opt_correct c_) by auto using length_to_list.
- rewrite <-!freeze_correct.
- rewrite <-fieldwiseb_correct.
- reflexivity.
-Defined.
-
-Definition eqb (f g : fe25519_64) : bool
- := Eval cbv beta iota delta [proj1_sig eqb_sig] in
- let '(f0, f1, f2, f3, f4) := f in
- let '(g0, g1, g2, g3, g4) := g in
- proj1_sig (eqb_sig (f0, f1, f2, f3, f4)
- (g0, g1, g2, g3, g4)).
-
-Lemma eqb_correct (f g : fe25519_64)
- : eqb f g = ModularBaseSystem.eqb int_width f g.
-Proof.
- set (f' := f); set (g' := g).
- hnf in f, g; destruct_head' prod.
- exact (proj2_sig (eqb_sig f' g')).
-Qed.
-
-Definition sqrt_sig (powx powx_squared f : fe25519_64) :
- { f' : fe25519_64 | f' = sqrt_5mod8_opt (int_width := int_width) k_ c_ sqrt_m1 powx powx_squared f}.
-Proof.
- eexists.
- cbv [sqrt_5mod8_opt int_width].
- apply Proper_Let_In_nd_changebody; [reflexivity|intro].
- set_evars. rewrite <-!mul_correct, <-eqb_correct. subst_evars.
- reflexivity.
-Defined.
-
-Definition sqrt (powx powx_squared f : fe25519_64) : fe25519_64
- := Eval cbv beta iota delta [proj1_sig sqrt_sig] in proj1_sig (sqrt_sig powx powx_squared f).
-
-Definition sqrt_correct (powx powx_squared f : fe25519_64)
- : sqrt powx powx_squared f = sqrt_5mod8_opt k_ c_ sqrt_m1 powx powx_squared f
- := Eval cbv beta iota delta [proj2_sig sqrt_sig] in proj2_sig (sqrt_sig powx powx_squared f).
-
-Definition pack_simpl_sig (f : fe25519_64) :
- { f' | f' = pack_opt params25519_64 wire_widths_nonneg bits_eq f }.
-Proof.
- cbv [fe25519_64] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv [pack_opt].
- repeat (rewrite <-convert'_opt_correct;
- cbv - [from_list_default_opt Conversion.convert']).
- repeat progress rewrite ?Z.shiftl_0_r, ?Z.shiftr_0_r, ?Z.land_0_l, ?Z.lor_0_l, ?Z.land_same_r.
- cbv [from_list_default_opt].
- reflexivity.
-Defined.
-
-Definition pack_simpl (f : fe25519_64) :=
- Eval cbv beta iota delta [proj1_sig pack_simpl_sig] in
- let '(f0, f1, f2, f3, f4) := f in
- proj1_sig (pack_simpl_sig (f0, f1, f2, f3, f4)).
-
-Definition pack_simpl_correct (f : fe25519_64)
- : pack_simpl f = pack_opt params25519_64 wire_widths_nonneg bits_eq f.
-Proof.
- pose proof (proj2_sig (pack_simpl_sig f)).
- cbv [fe25519_64] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Qed.
-
-Definition pack_sig (f : fe25519_64) :
- { f' | f' = pack_opt params25519_64 wire_widths_nonneg bits_eq f }.
-Proof.
- eexists.
- rewrite <-pack_simpl_correct.
- rewrite <-(@app_n_correct wire_digits).
- cbv.
- reflexivity.
-Defined.
-
-Definition pack (f : fe25519_64) : wire_digits :=
- Eval cbv beta iota delta [proj1_sig pack_sig] in proj1_sig (pack_sig f).
-
-Definition pack_correct (f : fe25519_64)
- : pack f = pack_opt params25519_64 wire_widths_nonneg bits_eq f
- := Eval cbv beta iota delta [proj2_sig pack_sig] in proj2_sig (pack_sig f).
-
-Definition unpack_simpl_sig (f : wire_digits) :
- { f' | f' = unpack_opt params25519_64 wire_widths_nonneg bits_eq f }.
-Proof.
- cbv [wire_digits] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv [unpack_opt].
- repeat (
- rewrite <-convert'_opt_correct;
- cbv - [from_list_default_opt Conversion.convert']).
- repeat progress rewrite ?Z.shiftl_0_r, ?Z.shiftr_0_r, ?Z.land_0_l, ?Z.lor_0_l, ?Z.land_same_r.
- cbv [from_list_default_opt].
- reflexivity.
-Defined.
-
-Definition unpack_simpl (f : wire_digits) : fe25519_64 :=
- Eval cbv beta iota delta [proj1_sig unpack_simpl_sig] in
- let '(f0, f1, f2, f3) := f in
- proj1_sig (unpack_simpl_sig (f0, f1, f2, f3)).
-
-Definition unpack_simpl_correct (f : wire_digits)
- : unpack_simpl f = unpack_opt params25519_64 wire_widths_nonneg bits_eq f.
-Proof.
- pose proof (proj2_sig (unpack_simpl_sig f)).
- cbv [wire_digits] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Qed.
-
-Definition unpack_sig (f : wire_digits) :
- { f' | f' = unpack_opt params25519_64 wire_widths_nonneg bits_eq f }.
-Proof.
- eexists.
- rewrite <-unpack_simpl_correct.
- rewrite <-(@app_n2_correct fe25519_64).
- cbv.
- reflexivity.
-Defined.
-
-Definition unpack (f : wire_digits) : fe25519_64 :=
- Eval cbv beta iota delta [proj1_sig unpack_sig] in proj1_sig (unpack_sig f).
-
-Definition unpack_correct (f : wire_digits)
- : unpack f = unpack_opt params25519_64 wire_widths_nonneg bits_eq f
- := Eval cbv beta iota delta [proj2_sig pack_sig] in proj2_sig (unpack_sig f).
diff --git a/src/SpecificGen/GF25519_64Bounded.v b/src/SpecificGen/GF25519_64Bounded.v
deleted file mode 100644
index e602af2e5..000000000
--- a/src/SpecificGen/GF25519_64Bounded.v
+++ /dev/null
@@ -1,521 +0,0 @@
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParams.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParamProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemOpt.
-Require Import Crypto.SpecificGen.GF25519_64.
-Require Import Crypto.SpecificGen.GF25519_64BoundedCommon.
-Require Import Crypto.SpecificGen.GF25519_64Reflective.
-Require Import Bedrock.Word Crypto.Util.WordUtil.
-Require Import Coq.Lists.List Crypto.Util.ListUtil.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemWord.
-Require Import Crypto.Tactics.VerdiTactics.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Notations.
-Require Import Crypto.Util.Bool.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Algebra.
-Import ListNotations.
-Require Import Coq.ZArith.ZArith Coq.ZArith.Zpower Coq.ZArith.ZArith Coq.ZArith.Znumtheory.
-Local Open Scope Z.
-
-
-Local Ltac cbv_tuple_map :=
- cbv [Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list' HList.hlistP HList.hlistP'].
-
-Local Ltac post_bounded_t :=
- (* much pain and hackery to work around [Defined] taking forever *)
- cbv_tuple_map;
- let blem' := fresh "blem'" in
- let is_bounded_lem := fresh "is_bounded_lem" in
- intros is_bounded_lem blem';
- apply blem'; repeat apply conj; apply is_bounded_lem.
-Local Ltac bounded_t opW blem :=
- generalize blem; generalize is_bounded_proj1_fe25519_64; post_bounded_t.
-Local Ltac bounded_wire_digits_t opW blem :=
- generalize blem; generalize is_bounded_proj1_wire_digits; post_bounded_t.
-
-Local Ltac define_binop f g opW blem :=
- refine (exist_fe25519_64W (opW (proj1_fe25519_64W f, proj1_fe25519_64W g)) _);
- abstract bounded_t opW blem.
-Local Ltac define_unop f opW blem :=
- refine (exist_fe25519_64W (opW (proj1_fe25519_64W f)) _);
- abstract bounded_t opW blem.
-Local Ltac define_unop_FEToZ f opW :=
- refine (opW (proj1_fe25519_64W f)).
-Local Ltac define_unop_FEToWire f opW blem :=
- refine (exist_wire_digitsW (opW (proj1_fe25519_64W f)) _);
- abstract bounded_t opW blem.
-Local Ltac define_unop_WireToFE f opW blem :=
- refine (exist_fe25519_64W (opW (proj1_wire_digitsW f)) _);
- abstract bounded_wire_digits_t opW blem.
-
-Local Opaque Let_In.
-Local Opaque Z.add Z.sub Z.mul Z.shiftl Z.shiftr Z.land Z.lor Z.eqb NToWord128.
-Local Arguments interp_radd / _.
-Local Arguments interp_rsub / _.
-Local Arguments interp_rmul / _.
-Local Arguments interp_ropp / _.
-Local Arguments interp_rprefreeze / _.
-Local Arguments interp_rge_modulus / _.
-Local Arguments interp_rpack / _.
-Local Arguments interp_runpack / _.
-Definition addW (f : fe25519_64W * fe25519_64W) : fe25519_64W := Eval simpl in interp_radd f.
-Definition subW (f : fe25519_64W * fe25519_64W) : fe25519_64W := Eval simpl in interp_rsub f.
-Definition mulW (f : fe25519_64W * fe25519_64W) : fe25519_64W := Eval simpl in interp_rmul f.
-Definition oppW (f : fe25519_64W) : fe25519_64W := Eval simpl in interp_ropp f.
-Definition prefreezeW (f : fe25519_64W) : fe25519_64W := Eval simpl in interp_rprefreeze f.
-Definition ge_modulusW (f : fe25519_64W) : word128 := Eval simpl in interp_rge_modulus f.
-Definition packW (f : fe25519_64W) : wire_digitsW := Eval simpl in interp_rpack f.
-Definition unpackW (f : wire_digitsW) : fe25519_64W := Eval simpl in interp_runpack f.
-
-Definition modulusW :=
- Eval cbv - [ZToWord128] in (Tuple.map ZToWord128 (Tuple.from_list_default 0%Z length_fe25519_64 GF25519_64.modulus_digits_)).
-
-Definition postfreeze : GF25519_64.fe25519_64 -> GF25519_64.fe25519_64 :=
- GF25519_64.postfreeze.
-
-Lemma freeze_prepost_freeze : forall x, postfreeze (prefreeze x) = GF25519_64.freeze x.
-Proof. reflexivity. Qed.
-
-Definition postfreezeW : fe25519_64W -> fe25519_64W :=
- (conditional_subtract_modulusW
- (num_limbs := length_fe25519_64)
- modulusW
- ge_modulusW
- (Interpretations128.WordW.neg GF25519_64.int_width)
- ).
-
-Definition freezeW (f : fe25519_64W) : fe25519_64W := Eval cbv beta delta [prefreezeW postfreezeW] in postfreezeW (prefreezeW f).
-
-Local Transparent Let_In.
-(* Wrapper to allow extracted code to not unfold [mulW] *)
-Definition mulW_noinline := mulW.
-Definition powW (f : fe25519_64W) chain := fold_chain_opt (proj1_fe25519_64W one) (fun f g => mulW_noinline (f, g)) chain [f].
-Definition invW (f : fe25519_64W) : fe25519_64W
- := Eval cbv -[Let_In fe25519_64W mulW_noinline] in powW f (chain inv_ec).
-
-Local Ltac port_correct_and_bounded pre_rewrite opW interp_rop rop_cb :=
- change opW with (interp_rop);
- rewrite pre_rewrite;
- intros; apply rop_cb; assumption.
-
-Lemma addW_correct_and_bounded : ibinop_correct_and_bounded addW (Curry.curry2 carry_add).
-Proof. port_correct_and_bounded interp_radd_correct addW interp_radd radd_correct_and_bounded. Qed.
-Lemma subW_correct_and_bounded : ibinop_correct_and_bounded subW (Curry.curry2 carry_sub).
-Proof. port_correct_and_bounded interp_rsub_correct subW interp_rsub rsub_correct_and_bounded. Qed.
-Lemma mulW_correct_and_bounded : ibinop_correct_and_bounded mulW (Curry.curry2 mul).
-Proof. port_correct_and_bounded interp_rmul_correct mulW interp_rmul rmul_correct_and_bounded. Qed.
-Lemma oppW_correct_and_bounded : iunop_correct_and_bounded oppW carry_opp.
-Proof. port_correct_and_bounded interp_ropp_correct oppW interp_ropp ropp_correct_and_bounded. Qed.
-Lemma prefreezeW_correct_and_bounded : iunop_correct_and_bounded prefreezeW prefreeze.
-Proof. port_correct_and_bounded interp_rprefreeze_correct prefreezeW interp_rprefreeze rprefreeze_correct_and_bounded. Qed.
-Lemma ge_modulusW_correct : iunop_FEToZ_correct ge_modulusW ge_modulus.
-Proof. port_correct_and_bounded interp_rge_modulus_correct ge_modulusW interp_rge_modulus rge_modulus_correct_and_bounded. Qed.
-Lemma packW_correct_and_bounded : iunop_FEToWire_correct_and_bounded packW pack.
-Proof. port_correct_and_bounded interp_rpack_correct packW interp_rpack rpack_correct_and_bounded. Qed.
-Lemma unpackW_correct_and_bounded : iunop_WireToFE_correct_and_bounded unpackW unpack.
-Proof. port_correct_and_bounded interp_runpack_correct unpackW interp_runpack runpack_correct_and_bounded. Qed.
-
-Ltac lower_bound_minus_ge_modulus :=
- apply Z.le_0_sub;
- cbv [ge_modulus Let_In ModularBaseSystemListZOperations.cmovl ModularBaseSystemListZOperations.cmovne ModularBaseSystemListZOperations.neg];
- repeat break_if; Z.ltb_to_lt; subst; try omega;
- rewrite ?Z.land_0_l; auto;
- change Interpretations128.WordW.wordWToZ with word128ToZ;
- etransitivity; try apply Z.land_upper_bound_r; instantiate; try omega;
- apply Z.ones_nonneg; instantiate; vm_compute; discriminate.
-
-Ltac upper_bound_minus_ge_modulus :=
- (apply Z.log2_lt_pow2_alt; [ vm_compute; reflexivity | ]);
- eapply Z.le_lt_trans; [ apply Z.le_sub_nonneg; apply Z.land_nonneg; right; omega | ];
- eapply Z.le_lt_trans; [ eassumption | ];
- instantiate; vm_compute; reflexivity.
-
-Lemma postfreezeW_correct_and_bounded : iunop_correct_and_bounded postfreezeW postfreeze.
-Proof.
- intros x H.
- pose proof (ge_modulusW_correct x H) as Hgm.
- destruct_head_hnf' prod.
- unfold_is_bounded_in H.
- destruct_head' and.
- Z.ltb_to_lt.
- cbv [postfreezeW].
- cbv [conditional_subtract_modulusW Interpretations128.WordW.neg].
- change word128ToZ with Interpretations128.WordW.wordWToZ in *.
- rewrite Hgm.
-
- cbv [modulusW Tuple.map].
- cbv [on_tuple List.map to_list to_list' from_list from_list'
- HList.hlistP HList.hlistP'
- Tuple.map2 on_tuple2 ListUtil.map2 fe25519_64WToZ length_fe25519_64].
- cbv [postfreeze GF25519_64.postfreeze].
- cbv [Let_In].
-
- split.
- { match goal with
- |- (_,word128ToZ (_ ^- (Interpretations128.WordW.ZToWordW ?x) ^& _)) = (_,_ - (?y &' _)) => assert (x = y) as Hxy by reflexivity; repeat rewrite <-Hxy; clear Hxy end.
-
- change ZToWord128 with Interpretations128.WordW.ZToWordW in *.
- preunfold_is_bounded.
- rewrite !Interpretations128.WordW.wordWToZ_sub;
- rewrite !Interpretations128.WordW.wordWToZ_land;
- rewrite !Interpretations128.WordW.wordWToZ_ZToWordW;
- try match goal with
- | |- 0 <= ModularBaseSystemListZOperations.neg _ _ < 2 ^ _ => apply ModularBaseSystemListZOperationsProofs.neg_range; omega
- | |- 0 <= _ < 2 ^ Z.of_nat _ => vm_compute; split; [refine (fun x => match x with eq_refl => I end) | reflexivity]
- | |- 0 <= _ &' _ => apply Z.land_nonneg; right; omega
- | |- (_,_) = (_,_) => reflexivity
- end;
- try solve [
- (apply Z.log2_lt_pow2_alt; [ vm_compute; reflexivity | ]);
- eapply Z.le_lt_trans; try apply Z.land_upper_bound_r; try apply ModularBaseSystemListZOperationsProofs.neg_range; instantiate; try match goal with |- ?G => not has_evar G; vm_compute; discriminate end; reflexivity];
- match goal with
- | |- 0 <= _ - _ => lower_bound_minus_ge_modulus
- | |- Z.log2 (_ - _) < _ => upper_bound_minus_ge_modulus
- end. }
-
-
- change ZToWord128 with Interpretations128.WordW.ZToWordW in *;
- preunfold_is_bounded.
- rewrite !Interpretations128.WordW.wordWToZ_sub;
- rewrite !Interpretations128.WordW.wordWToZ_land;
- rewrite !Interpretations128.WordW.wordWToZ_ZToWordW;
- repeat match goal with |- _ /\ _ => split; Z.ltb_to_lt end;
- Z.ltb_to_lt; unfold_is_bounded; Z.ltb_to_lt;
- try match goal with
- | |- 0 <= ModularBaseSystemListZOperations.neg _ _ < 2 ^ _ => apply ModularBaseSystemListZOperationsProofs.neg_range; omega
- | |- 0 <= _ < 2 ^ Z.of_nat _ => vm_compute; split; [refine (fun x => match x with eq_refl => I end) | reflexivity]
- | |- 0 <= _ &' _ => apply Z.land_nonneg; right; omega
- end;
- try solve [
- (apply Z.log2_lt_pow2_alt; [ vm_compute; reflexivity | ]);
- eapply Z.le_lt_trans; try apply Z.land_upper_bound_r; try apply ModularBaseSystemListZOperationsProofs.neg_range; instantiate; try match goal with |- ?G => not has_evar G; vm_compute; discriminate end; reflexivity];
- try match goal with
- | |- 0 <= _ - _ => lower_bound_minus_ge_modulus
- | |- Z.log2 (_ - _) < _ => upper_bound_minus_ge_modulus
- | |- _ - _ <= _ => etransitivity; [ apply Z.le_sub_nonneg; apply Z.land_nonneg; right; omega | instantiate; assumption ]
- | |- 0 <= ModularBaseSystemListZOperations.neg _ _ =>
- apply ModularBaseSystemListZOperationsProofs.neg_range; vm_compute; discriminate
- | |- ModularBaseSystemListZOperations.neg _ _ < _ =>
- apply ModularBaseSystemListZOperationsProofs.neg_range; vm_compute; discriminate
- | |- _ => vm_compute; (discriminate || reflexivity)
- end.
-Qed.
-
-Lemma freezeW_correct_and_bounded : iunop_correct_and_bounded freezeW freeze.
-Proof.
- intros f H; rewrite <- freeze_prepost_freeze.
- change (freezeW f) with (postfreezeW (prefreezeW f)).
- destruct (prefreezeW_correct_and_bounded f H) as [H0 H1].
- destruct (postfreezeW_correct_and_bounded _ H1) as [H0' H1'].
- split; [ | assumption ].
- rewrite H0', H0; reflexivity.
-Qed.
-
-Lemma powW_correct_and_bounded chain : iunop_correct_and_bounded (fun x => powW x chain) (fun x => pow x chain).
-Proof.
- cbv [powW pow].
- intro x; intros; apply (fold_chain_opt_gen fe25519_64WToZ is_bounded [x]).
- { reflexivity. }
- { reflexivity. }
- { intros; pose proof (fun k0 k1 X Y => proj1 (mulW_correct_and_bounded (k0, k1) (conj X Y))) as H'.
- cbv [Curry.curry2 Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list'] in H'.
- rewrite <- H' by assumption.
- apply mulW_correct_and_bounded; split; assumption. }
- { intros; rewrite (fun X Y => proj1 (mulW_correct_and_bounded (_, _) (conj X Y))) by assumption; reflexivity. }
- { intros [|?]; autorewrite with simpl_nth_default;
- (assumption || reflexivity). }
-Qed.
-
-Lemma invW_correct_and_bounded : iunop_correct_and_bounded invW inv.
-Proof.
- intro f.
- assert (H : forall f, invW f = powW f (chain inv_ec))
- by abstract (cbv -[Let_In fe25519_64W mulW_noinline]; reflexivity).
- rewrite H.
- rewrite inv_correct.
- cbv [inv_opt].
- rewrite <- pow_correct.
- apply powW_correct_and_bounded.
-Qed.
-
-Definition fieldwisebW_sig (f g : fe25519_64W)
- : { b | b = GF25519_64.fieldwiseb (fe25519_64WToZ f) (fe25519_64WToZ g) }.
-Proof.
- hnf in f, g; destruct_head' prod.
- eexists.
- cbv [GF25519_64.fieldwiseb fe25519_64WToZ].
- rewrite ?word128eqb_Zeqb.
- reflexivity.
-Defined.
-
-Definition fieldwisebW (f g : fe25519_64W) : bool :=
- Eval cbv [proj1_sig fieldwisebW_sig appify2 app_fe25519_64W] in
- appify2 (fun f g => proj1_sig (fieldwisebW_sig f g)) f g.
-
-Lemma fieldwisebW_correct f g
- : fieldwisebW f g = GF25519_64.fieldwiseb (fe25519_64WToZ f) (fe25519_64WToZ g).
-Proof.
- set (f' := f); set (g' := g).
- hnf in f, g; destruct_head' prod.
- exact (proj2_sig (fieldwisebW_sig f' g')).
-Qed.
-
-Local Arguments freezeW : simpl never.
-Local Arguments fe25519_64WToZ !_ / .
-Local Opaque freezeW.
-
-Definition eqbW_sig (f g : fe25519_64W)
- : { b | is_bounded (fe25519_64WToZ f) = true
- -> is_bounded (fe25519_64WToZ g) = true
- -> b = GF25519_64.eqb (fe25519_64WToZ f) (fe25519_64WToZ g) }.
-Proof.
- pose proof (fun pf => proj1 (freezeW_correct_and_bounded f pf)) as frf.
- pose proof (fun pf => proj1 (freezeW_correct_and_bounded g pf)) as frg.
- hnf in f, g; destruct_head' prod.
- eexists.
- unfold GF25519_64.eqb.
- simpl @fe25519_64WToZ in *; cbv beta iota.
- intros.
- cbv [Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list' fe25519_64WToZ] in *.
- rewrite <- frf, <- frg by assumption.
- etransitivity; [ eapply fieldwisebW_correct | ].
- cbv [fe25519_64WToZ].
- reflexivity.
-Defined.
-
-Definition eqbW (f g : fe25519_64W) : bool :=
- Eval cbv [proj1_sig eqbW_sig appify2 app_fe25519_64W] in
- appify2 (fun f g => proj1_sig (eqbW_sig f g)) f g.
-
-Lemma eqbW_correct f g
- : is_bounded (fe25519_64WToZ f) = true
- -> is_bounded (fe25519_64WToZ g) = true
- -> eqbW f g = GF25519_64.eqb (fe25519_64WToZ f) (fe25519_64WToZ g).
-Proof.
- set (f' := f); set (g' := g).
- hnf in f, g; destruct_head' prod.
- exact (proj2_sig (eqbW_sig f' g')).
-Qed.
-
-Definition sqrt_m1W' : fe25519_64W :=
- Eval vm_compute in fe25519_64ZToW sqrt_m1.
-Definition sqrt_m1W := Eval cbv [sqrt_m1W' fe25519_64W_word128ize word128ize andb opt.word128ToZ opt.word128ize opt.Zleb Z.compare CompOpp Pos.compare Pos.compare_cont] in fe25519_64W_word128ize sqrt_m1W'.
-
-Definition GF25519_64sqrt (x : GF25519_64.fe25519_64) : GF25519_64.fe25519_64.
-Proof.
- lazymatch (eval cbv delta [GF25519_64.sqrt] in GF25519_64.sqrt) with
- | (fun powf powf_squared f => dlet a := powf in _)
- => exact (dlet powx := powW (fe25519_64ZToW x) (chain GF25519_64.sqrt_ec) in
- GF25519_64.sqrt (fe25519_64WToZ powx) (fe25519_64WToZ (mulW_noinline (powx, powx))) x)
- | (fun f => pow f _)
- => exact (GF25519_64.sqrt x)
- end.
-Defined.
-
-Definition sqrtW_sig
- : { sqrtW | iunop_correct_and_bounded sqrtW GF25519_64sqrt }.
-Proof.
- eexists.
- unfold GF25519_64sqrt, GF25519_64.sqrt.
- intros.
- rewrite ?fe25519_64ZToW_WToZ.
- split.
- { etransitivity.
- Focus 2. {
- lazymatch goal with
- | [ |- _ = pow _ _ ]
- => apply powW_correct_and_bounded; assumption
- | [ |- _ = (dlet powx := _ in _) ]
- => apply Proper_Let_In_nd_changebody_eq; intros;
- set_evars;
- match goal with (* unfold the first dlet ... in, but only if it's binding a var *)
- | [ |- ?x = dlet y := fe25519_64WToZ ?z in ?f ]
- => is_var z; change (x = match fe25519_64WToZ z with y => f end)
- end;
- change sqrt_m1 with (fe25519_64WToZ sqrt_m1W);
- pose proof (fun X Y => proj1 (mulW_correct_and_bounded (sqrt_m1W, a) (conj X Y))) as correctness;
- let cbv_in_all _ := (cbv [fe25519_64WToZ Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list' fe25519_64WToZ Curry.curry2 HList.hlistP HList.hlistP'] in *; idtac) in
- cbv_in_all ();
- let solver _ := (repeat match goal with
- | _ => progress subst
- | _ => progress unfold fst, snd
- | _ => progress cbv_in_all ()
- | [ |- ?x /\ ?x ] => cut x; [ intro; split; assumption | ]
- | [ |- is_bounded ?op = true ]
- => let H := fresh in
- lazymatch op with
- | context[mulW (_, _)] => pose proof mulW_correct_and_bounded as H
- | context[mulW_noinline (_, _)] => pose proof mulW_correct_and_bounded as H
- | context[powW _ _] => pose proof powW_correct_and_bounded as H
- | context[sqrt_m1W] => vm_compute; reflexivity
- | _ => assumption
- end;
- cbv_in_all ();
- apply H
- end) in
- rewrite <- correctness by solver (); clear correctness;
- let lem := fresh in
- pose proof eqbW_correct as lem; cbv_in_all (); rewrite <- lem by solver (); clear lem;
- pose proof (pull_bool_if fe25519_64WToZ) as lem; cbv_in_all (); rewrite lem by solver (); clear lem;
- subst_evars; reflexivity
- end.
- } Unfocus.
- assert (Hfold : forall x, fe25519_64WToZ x = fe25519_64WToZ x) by reflexivity.
- unfold fe25519_64WToZ at 2 in Hfold.
- etransitivity.
- Focus 2. {
- apply Proper_Let_In_nd_changebody; [ reflexivity | intro ].
- apply Hfold.
- } Unfocus.
- clear Hfold.
- lazymatch goal with
- | [ |- context G[dlet x := ?v in fe25519_64WToZ (@?f x)] ]
- => let G' := context G[fe25519_64WToZ (dlet x := v in f x)] in
- cut G'; cbv beta;
- [ cbv [Let_In]; exact (fun x => x) | apply f_equal ]
- | _ => idtac
- end;
- reflexivity.
- }
-
- { cbv [Let_In HList.hlistP HList.hlistP'];
- try break_if;
- repeat lazymatch goal with
- | [ |- is_bounded (?WToZ (powW _ _)) = true ]
- => apply powW_correct_and_bounded; assumption
- | [ |- is_bounded (snd (?WToZ (_, powW _ _))) = true ]
- => generalize powW_correct_and_bounded;
- cbv [snd Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list' HList.hlistP HList.hlistP'];
- let H := fresh in intro H; apply H; assumption
- | [ |- is_bounded (?WToZ (mulW (_, _))) = true ]
- => apply mulW_correct_and_bounded; split; [ vm_compute; reflexivity | ]
- end.
- }
-Defined.
-
-Definition sqrtW (f : fe25519_64W) : fe25519_64W :=
- Eval cbv [proj1_sig sqrtW_sig app_fe25519_64W] in
- app_fe25519_64W f (proj1_sig sqrtW_sig).
-
-Lemma sqrtW_correct_and_bounded : iunop_correct_and_bounded sqrtW GF25519_64sqrt.
-Proof.
- intro f.
- set (f' := f).
- hnf in f; destruct_head' prod.
- assert (H : sqrtW f' = proj1_sig sqrtW_sig f')
- by (subst f'; cbv beta iota delta [proj1_sig sqrtW_sig sqrtW]; reflexivity).
- rewrite H.
- exact (proj2_sig sqrtW_sig f').
-Qed.
-
-
-
-Definition add (f g : fe25519_64) : fe25519_64.
-Proof. define_binop f g addW addW_correct_and_bounded. Defined.
-Definition sub (f g : fe25519_64) : fe25519_64.
-Proof. define_binop f g subW subW_correct_and_bounded. Defined.
-Definition mul (f g : fe25519_64) : fe25519_64.
-Proof. define_binop f g mulW mulW_correct_and_bounded. Defined.
-Definition opp (f : fe25519_64) : fe25519_64.
-Proof. define_unop f oppW oppW_correct_and_bounded. Defined.
-Definition freeze (f : fe25519_64) : fe25519_64.
-Proof. define_unop f freezeW freezeW_correct_and_bounded. Defined.
-Definition ge_modulus (f : fe25519_64) : word128.
-Proof. define_unop_FEToZ f ge_modulusW. Defined.
-Definition pack (f : fe25519_64) : wire_digits.
-Proof. define_unop_FEToWire f packW packW_correct_and_bounded. Defined.
-Definition unpack (f : wire_digits) : fe25519_64.
-Proof. define_unop_WireToFE f unpackW unpackW_correct_and_bounded. Defined.
-
-Definition pow (f : fe25519_64) (chain : list (nat * nat)) : fe25519_64.
-Proof. define_unop f (fun x => powW x chain) powW_correct_and_bounded. Defined.
-Definition inv (f : fe25519_64) : fe25519_64.
-Proof. define_unop f invW (fun x p => proj2 (invW_correct_and_bounded x p)). Defined.
-Definition sqrt (f : fe25519_64) : fe25519_64.
-Proof. define_unop f sqrtW sqrtW_correct_and_bounded. Defined.
-
-Local Ltac op_correct_t op opW_correct_and_bounded :=
- cbv [op];
- lazymatch goal with
- | [ |- context[proj1_fe25519_64 (exist_fe25519_64W _ _)] ]
- => rewrite proj1_fe25519_64_exist_fe25519_64W
- | [ |- context[proj1_wire_digits (exist_wire_digitsW _ _)] ]
- => rewrite proj1_wire_digits_exist_wire_digitsW
- | _ => idtac
- end;
- generalize opW_correct_and_bounded;
- cbv_tuple_map;
- cbv [fst snd];
- let H := fresh in
- intro H; apply H;
- repeat match goal with |- and _ _ => apply conj end;
- lazymatch goal with
- | [ |- is_bounded _ = true ]
- => apply is_bounded_proj1_fe25519_64
- | [ |- wire_digits_is_bounded _ = true ]
- => apply is_bounded_proj1_wire_digits
- end.
-
-Lemma add_correct (f g : fe25519_64) : proj1_fe25519_64 (add f g) = carry_add (proj1_fe25519_64 f) (proj1_fe25519_64 g).
-Proof. op_correct_t add addW_correct_and_bounded. Qed.
-Lemma sub_correct (f g : fe25519_64) : proj1_fe25519_64 (sub f g) = carry_sub (proj1_fe25519_64 f) (proj1_fe25519_64 g).
-Proof. op_correct_t sub subW_correct_and_bounded. Qed.
-Lemma mul_correct (f g : fe25519_64) : proj1_fe25519_64 (mul f g) = GF25519_64.mul (proj1_fe25519_64 f) (proj1_fe25519_64 g).
-Proof. op_correct_t mul mulW_correct_and_bounded. Qed.
-Lemma opp_correct (f : fe25519_64) : proj1_fe25519_64 (opp f) = carry_opp (proj1_fe25519_64 f).
-Proof. op_correct_t opp oppW_correct_and_bounded. Qed.
-Lemma freeze_correct (f : fe25519_64) : proj1_fe25519_64 (freeze f) = GF25519_64.freeze (proj1_fe25519_64 f).
-Proof. op_correct_t freeze freezeW_correct_and_bounded. Qed.
-Lemma ge_modulus_correct (f : fe25519_64) : word128ToZ (ge_modulus f) = GF25519_64.ge_modulus (proj1_fe25519_64 f).
-Proof. op_correct_t ge_modulus ge_modulusW_correct. Qed.
-Lemma pack_correct (f : fe25519_64) : proj1_wire_digits (pack f) = GF25519_64.pack (proj1_fe25519_64 f).
-Proof. op_correct_t pack packW_correct_and_bounded. Qed.
-Lemma unpack_correct (f : wire_digits) : proj1_fe25519_64 (unpack f) = GF25519_64.unpack (proj1_wire_digits f).
-Proof. op_correct_t unpack unpackW_correct_and_bounded. Qed.
-Lemma pow_correct (f : fe25519_64) chain : proj1_fe25519_64 (pow f chain) = GF25519_64.pow (proj1_fe25519_64 f) chain.
-Proof. op_correct_t pow (powW_correct_and_bounded chain). Qed.
-Lemma inv_correct (f : fe25519_64) : proj1_fe25519_64 (inv f) = GF25519_64.inv (proj1_fe25519_64 f).
-Proof. op_correct_t inv (fun x p => proj1 (invW_correct_and_bounded x p)). Qed.
-Lemma sqrt_correct (f : fe25519_64) : proj1_fe25519_64 (sqrt f) = GF25519_64sqrt (proj1_fe25519_64 f).
-Proof. op_correct_t sqrt sqrtW_correct_and_bounded. Qed.
-
-Import Morphisms.
-
-Local Existing Instance prime_modulus.
-
-Lemma field25519_64_and_homomorphisms
- : @field fe25519_64 eq zero one opp add sub mul inv div
- /\ @Ring.is_homomorphism (F _) (@Logic.eq _) 1%F F.add F.mul fe25519_64 eq one add mul encode
- /\ @Ring.is_homomorphism fe25519_64 eq one add mul (F _) (@Logic.eq _) 1%F F.add F.mul decode.
-Proof.
- eapply @Field.field_and_homomorphism_from_redundant_representation.
- { exact (F.field_modulo _). }
- { cbv [decode encode]; intros; rewrite !proj1_fe25519_64_exist_fe25519_64; apply encode_rep. }
- { reflexivity. }
- { reflexivity. }
- { reflexivity. }
- { cbv [decode encode]; intros; rewrite opp_correct, carry_opp_correct, carry_opp_opt_correct, carry_opp_rep; apply opp_rep; reflexivity. }
- { cbv [decode encode]; intros; rewrite add_correct, carry_add_correct, carry_add_opt_correct, carry_add_rep; apply add_rep; reflexivity. }
- { cbv [decode encode]; intros; rewrite sub_correct, carry_sub_correct, carry_sub_opt_correct, carry_sub_rep; apply sub_rep; reflexivity. }
- { cbv [decode encode]; intros; rewrite mul_correct, GF25519_64.mul_correct, carry_mul_opt_correct by reflexivity; apply carry_mul_rep; reflexivity. }
- { cbv [decode encode]; intros; rewrite inv_correct, GF25519_64.inv_correct, inv_opt_correct by reflexivity; apply inv_rep; reflexivity. }
- { cbv [decode encode div]; intros; rewrite !proj1_fe25519_64_exist_fe25519_64; apply encode_rep. }
-Qed.
-
-Global Instance field25519_64 : @field fe25519_64 eq zero one opp add sub mul inv div := proj1 field25519_64_and_homomorphisms.
-
-Local Opaque proj1_fe25519_64 exist_fe25519_64 proj1_fe25519_64W exist_fe25519_64W.
-Global Instance homomorphism_F25519_64_encode
- : @Ring.is_homomorphism (F modulus) Logic.eq F.one F.add F.mul fe25519_64 eq one add mul encode.
-Proof. apply field25519_64_and_homomorphisms. Qed.
-
-Global Instance homomorphism_F25519_64_decode
- : @Ring.is_homomorphism fe25519_64 eq one add mul (F modulus) Logic.eq F.one F.add F.mul decode.
-Proof. apply field25519_64_and_homomorphisms. Qed.
diff --git a/src/SpecificGen/GF25519_64BoundedAddCoordinates.v b/src/SpecificGen/GF25519_64BoundedAddCoordinates.v
deleted file mode 100644
index 711af3078..000000000
--- a/src/SpecificGen/GF25519_64BoundedAddCoordinates.v
+++ /dev/null
@@ -1,78 +0,0 @@
-Require Import Coq.ZArith.ZArith.
-Require Import Crypto.SpecificGen.GF25519_64.
-Require Import Crypto.SpecificGen.GF25519_64BoundedCommon.
-Require Import Crypto.SpecificGen.GF25519_64ReflectiveAddCoordinates.
-Require Import Crypto.Util.LetIn.
-Local Open Scope Z.
-
-Local Ltac bounded_t opW blem :=
- apply blem; apply is_bounded_proj1_fe25519_64.
-
-Local Ltac define_binop f g opW blem :=
- refine (exist_fe25519_64W (opW (proj1_fe25519_64W f) (proj1_fe25519_64W g)) _);
- abstract bounded_t opW blem.
-
-Local Opaque Let_In.
-Local Opaque Z.add Z.sub Z.mul Z.shiftl Z.shiftr Z.land Z.lor Z.eqb NToWord128.
-(*Local Arguments interp_radd_coordinates / _ _ _ _ _ _ _ _ _.
-Definition add_coordinatesW (x0 x1 x2 x3 x4 x5 x6 x7 x8 : fe25519_64W) : Tuple.tuple fe25519_64W 4
- := Eval simpl in interp_radd_coordinates x0 x1 x2 x3 x4 x5 x6 x7 x8.
-
-Local Ltac port_correct_and_bounded pre_rewrite opW interp_rop rop_cb :=
- change opW with (interp_rop);
- rewrite pre_rewrite;
- intros; apply rop_cb; assumption.
-
-Lemma add_coordinatesW_correct_and_bounded : i9top_correct_and_bounded 4 add_coordinatesW Reified.AddCoordinates.add_coordinates.
-Proof. port_correct_and_bounded interp_radd_coordinates_correct add_coordinatesW interp_radd_coordinates radd_coordinates_correct_and_bounded. Qed.
-
-Local Ltac define_9_4op x0 x1 x2 x3 x4 x5 x6 x7 x8 opW blem :=
- refine (let ts := opW (proj1_fe25519_64W x0)
- (proj1_fe25519_64W x1)
- (proj1_fe25519_64W x2)
- (proj1_fe25519_64W x3)
- (proj1_fe25519_64W x4)
- (proj1_fe25519_64W x5)
- (proj1_fe25519_64W x6)
- (proj1_fe25519_64W x7)
- (proj1_fe25519_64W x8) in
- HList.mapt exist_fe25519_64W (ts:=ts) _);
- abstract (
- rewrite <- (HList.hlist_map (F:=fun x => is_bounded x = true) (f:=fe25519_64WToZ));
- apply add_coordinatesW_correct_and_bounded; apply is_bounded_proj1_fe25519_64
- ).
-Definition add_coordinates (x0 x1 x2 x3 x4 x5 x6 x7 x8 : fe25519_64) : Tuple.tuple fe25519_64 4.
-Proof. define_9_4op x0 x1 x2 x3 x4 x5 x6 x7 x8 add_coordinatesW add_coordinatesW_correct_and_bounded. Defined.
-
-Local Ltac op_correct_t op opW_correct_and_bounded :=
- cbv [op];
- rewrite ?HList.map_mapt;
- lazymatch goal with
- | [ |- context[proj1_fe25519_64 (exist_fe25519_64W _ _)] ]
- => rewrite proj1_fe25519_64_exist_fe25519_64W || setoid_rewrite proj1_fe25519_64_exist_fe25519_64W
- | [ |- context[proj1_wire_digits (exist_wire_digitsW _ _)] ]
- => rewrite proj1_wire_digits_exist_wire_digitsW
- | _ => idtac
- end;
- rewrite <- ?HList.map_is_mapt;
- apply opW_correct_and_bounded;
- lazymatch goal with
- | [ |- is_bounded _ = true ]
- => apply is_bounded_proj1_fe25519_64
- | [ |- wire_digits_is_bounded _ = true ]
- => apply is_bounded_proj1_wire_digits
- end.
-
-Lemma add_coordinates_correct (x0 x1 x2 x3 x4 x5 x6 x7 x8 : fe25519_64)
- : Tuple.map (n:=4) proj1_fe25519_64 (add_coordinates x0 x1 x2 x3 x4 x5 x6 x7 x8)
- = Reified.AddCoordinates.add_coordinates (proj1_fe25519_64 x0)
- (proj1_fe25519_64 x1)
- (proj1_fe25519_64 x2)
- (proj1_fe25519_64 x3)
- (proj1_fe25519_64 x4)
- (proj1_fe25519_64 x5)
- (proj1_fe25519_64 x6)
- (proj1_fe25519_64 x7)
- (proj1_fe25519_64 x8).
-Proof. op_correct_t add_coordinates add_coordinatesW_correct_and_bounded. Qed.
-*)
diff --git a/src/SpecificGen/GF25519_64BoundedCommon.v b/src/SpecificGen/GF25519_64BoundedCommon.v
deleted file mode 100644
index 1c91f4d88..000000000
--- a/src/SpecificGen/GF25519_64BoundedCommon.v
+++ /dev/null
@@ -1,819 +0,0 @@
-Require Import Coq.Classes.Morphisms.
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParams.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParamProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemOpt.
-Require Import Crypto.SpecificGen.GF25519_64.
-Require Import Bedrock.Word Crypto.Util.WordUtil.
-Require Import Coq.Lists.List Crypto.Util.ListUtil.
-Require Import Crypto.Tactics.VerdiTactics.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Notations.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Util.HList.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Algebra.
-Import ListNotations.
-Require Import Coq.ZArith.ZArith Coq.ZArith.Zpower Coq.ZArith.ZArith Coq.ZArith.Znumtheory.
-Local Open Scope Z.
-
-(* BEGIN common curve-specific definitions *)
-Definition bit_width : nat := Eval compute in Z.to_nat (GF25519_64.int_width).
-Local Notation b_of exp := (0, 2^exp + 2^(exp-3))%Z (only parsing). (* max is [(0, 2^(exp+2) + 2^exp + 2^(exp-1) + 2^(exp-3) + 2^(exp-4) + 2^(exp-5) + 2^(exp-6) + 2^(exp-10) + 2^(exp-12) + 2^(exp-13) + 2^(exp-14) + 2^(exp-15) + 2^(exp-17) + 2^(exp-23) + 2^(exp-24))%Z] *)
-Definition bounds_exp : tuple Z length_fe25519_64
- := Eval compute in
- Tuple.from_list length_fe25519_64 limb_widths eq_refl.
-Definition bounds : tuple (Z * Z) length_fe25519_64
- := Eval compute in
- Tuple.map (fun e => b_of e) bounds_exp.
-Definition wire_digit_bounds_exp : tuple Z (length wire_widths)
- := Eval compute in Tuple.from_list _ wire_widths eq_refl.
-Definition wire_digit_bounds : tuple (Z * Z) (length wire_widths)
- := Eval compute in Tuple.map (fun e => (0,2^e-1)%Z) wire_digit_bounds_exp.
-(* END common curve-specific definitions *)
-
-(* BEGIN aliases for word extraction *)
-Definition word128 := Word.word bit_width.
-Coercion word128ToZ (x : word128) : Z := Z.of_N (wordToN x).
-Coercion ZToWord128 (x : Z) : word128 := NToWord _ (Z.to_N x).
-Definition NToWord128 : N -> word128 := NToWord _.
-Definition word128ize (x : word128) : word128
- := Eval cbv [wordToN N.succ_double N.double] in NToWord128 (wordToN x).
-Definition w128eqb (x y : word128) := weqb x y.
-
-Global Arguments NToWord128 : simpl never.
-Arguments word128 : simpl never.
-Arguments bit_width : simpl never.
-Global Opaque word128.
-Global Opaque bit_width.
-
-(* END aliases for word extraction *)
-
-(* BEGIN basic types *)
-Module Type WordIsBounded.
- Parameter is_boundedT : forall (lower upper : Z), word128 -> bool.
- Parameter Build_is_boundedT : forall {lower upper} {proj_word : word128},
- andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z = true -> is_boundedT lower upper proj_word = true.
- Parameter project_is_boundedT : forall {lower upper} {proj_word : word128},
- is_boundedT lower upper proj_word = true -> andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z = true.
-End WordIsBounded.
-
-Module Import WordIsBoundedDefault : WordIsBounded.
- Definition is_boundedT : forall (lower upper : Z), word128 -> bool
- := fun lower upper proj_word => andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z.
- Definition Build_is_boundedT {lower upper} {proj_word : word128}
- : andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z = true -> is_boundedT lower upper proj_word = true
- := fun x => x.
- Definition project_is_boundedT {lower upper} {proj_word : word128}
- : is_boundedT lower upper proj_word = true -> andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z = true
- := fun x => x.
-End WordIsBoundedDefault.
-
-Definition bounded_word (lower upper : Z)
- := { proj_word : word128 | is_boundedT lower upper proj_word = true }.
-Local Notation word_of exp := (bounded_word (fst (b_of exp)) (snd (b_of exp))).
-Local Notation unbounded_word sz := (bounded_word 0 (2^sz-1)%Z).
-
-Local Opaque word128.
-Definition fe25519_64W := Eval cbv (*-[word128]*) in (tuple word128 length_fe25519_64).
-Definition wire_digitsW := Eval cbv (*-[word128]*) in (tuple word128 (length wire_widths)).
-Definition fe25519_64 :=
- Eval cbv -[bounded_word Z.pow Z.sub Z.add] in
- hlist (fun e => word_of e) bounds_exp.
-Definition wire_digits :=
- Eval cbv -[bounded_word Z.pow Z.sub Z.add] in
- hlist (fun e => unbounded_word e) wire_digit_bounds_exp.
-
-Definition is_bounded_gen {n} (x : tuple Z n) (bounds : tuple (Z * Z) n) : bool
- := let res := Tuple.map2
- (fun bounds v =>
- let '(lower, upper) := bounds in
- (lower <=? v) && (v <=? upper))%bool%Z
- bounds x in
- List.fold_right andb true (Tuple.to_list _ res).
-
-Definition is_bounded (x : SpecificGen.GF25519_64.fe25519_64) : bool
- := is_bounded_gen (n:=length_fe25519_64) x bounds.
-
-Definition wire_digits_is_bounded (x : SpecificGen.GF25519_64.wire_digits) : bool
- := is_bounded_gen (n:=length wire_widths) x wire_digit_bounds.
-
-(* END basic types *)
-
-Section generic_destructuring.
- Fixpoint app_on' A n : forall T (f : tuple' A n) (P : forall x : tuple' A n, T x), T f
- := match n return forall T (f : tuple' A n) (P : forall x : tuple' A n, T x), T f with
- | O => fun T v P => P v
- | S n' => fun T v P => let '(v, x) := v in app_on' A n' _ v (fun v => P (v, x))
- end.
- Definition app_on {A n} : forall {T} (f : tuple A n) (P : forall x : tuple A n, T x), T f
- := match n return forall T (f : tuple A n) (P : forall x : tuple A n, T x), T f with
- | O => fun T v P => P v
- | S n' => @app_on' A n'
- end.
- Lemma app_on'_correct {A n T} f (P : forall x : tuple' A n, T x) : app_on' A n T f P = P f.
- Proof.
- induction n; simpl in *; destruct_head' prod; [ reflexivity | exact (IHn _ _ (fun t => P (t, _))) ].
- Qed.
- Lemma app_on_correct {A n T} f (P : forall x : tuple A n, T x) : app_on f P = P f.
- Proof. destruct n; [ reflexivity | apply app_on'_correct ]. Qed.
-
- Fixpoint app_on_h' A F n : forall ts T (f : @hlist' A n F ts) (P : forall x : @hlist' A n F ts, T x), T f
- := match n return forall ts T (f : @hlist' A n F ts) (P : forall x : @hlist' A n F ts, T x), T f with
- | O => fun ts T v P => P v
- | S n' => fun ts T v P => let '(v, x) := v in app_on_h' A F n' _ _ v (fun v => P (v, x))
- end.
- Definition app_on_h {A F n} : forall ts T (f : @hlist A n F ts) (P : forall x : @hlist A n F ts, T x), T f
- := match n return forall ts T (f : @hlist A n F ts) (P : forall x : @hlist A n F ts, T x), T f with
- | O => fun ts T v P => P v
- | S n' => @app_on_h' A F n'
- end.
- Lemma app_on_h'_correct {A F n ts T} f P : @app_on_h' A F n ts T f P = P f.
- Proof.
- induction n; simpl in *; destruct_head' prod; [ reflexivity | exact (IHn _ _ _ (fun h => P (h, f))) ].
- Qed.
- Lemma app_on_h_correct {A} F {n} ts {T} f P : @app_on_h A F n ts T f P = P f.
- Proof. destruct n; [ reflexivity | apply app_on_h'_correct ]. Qed.
-
- Definition app_wire_digitsW_dep {A T} (P : forall x : tuple A (length wire_widths), T x)
- : forall (f : tuple A (length wire_widths)), T f
- := Eval compute in fun f => @app_on A (length wire_widths) T f P.
- Definition app_wire_digitsW {A T} (f : tuple A (length wire_widths)) (P : tuple A (length wire_widths) -> T)
- := Eval compute in @app_wire_digitsW_dep A (fun _ => T) P f.
- Definition app_fe25519_64W_dep {A T} (P : forall x : tuple A length_fe25519_64, T x)
- : forall (f : tuple A length_fe25519_64), T f
- := Eval compute in fun f => @app_on A length_fe25519_64 T f P.
- Definition app_fe25519_64W {A T} (f : tuple A length_fe25519_64) (P : tuple A length_fe25519_64 -> T)
- := Eval compute in @app_fe25519_64W_dep A (fun _ => T) P f.
- Definition app_fe25519_64_dep {T} (P : forall x : fe25519_64, T x)
- : forall f : fe25519_64, T f
- := Eval compute in fun f => @app_on_h _ (fun e => word_of e) length_fe25519_64 bounds_exp T f P.
- Definition app_fe25519_64 {T} (f : fe25519_64) (P : hlist (fun e => word_of e) bounds_exp -> T)
- := Eval compute in @app_fe25519_64_dep (fun _ => T) P f.
- Definition app_wire_digits_dep {T} (P : forall x : wire_digits, T x)
- : forall f : wire_digits, T f
- := Eval compute in fun f => @app_on_h _ (fun e => unbounded_word e) (length wire_widths) wire_digit_bounds_exp T f P.
- Definition app_wire_digits {T} (f : wire_digits) (P : hlist (fun e => unbounded_word e) wire_digit_bounds_exp -> T)
- := Eval compute in @app_wire_digits_dep (fun _ => T) P f.
-
- Definition app_wire_digitsW_dep_correct {A T} f P : @app_wire_digitsW_dep A T P f = P f
- := app_on_correct f P.
- Definition app_wire_digitsW_correct {A T} f P : @app_wire_digitsW A T f P = P f
- := @app_wire_digitsW_dep_correct A (fun _ => T) f P.
- Definition app_fe25519_64W_dep_correct {A T} f P : @app_fe25519_64W_dep A T P f = P f
- := app_on_correct f P.
- Definition app_fe25519_64W_correct {A T} f P : @app_fe25519_64W A T f P = P f
- := @app_fe25519_64W_dep_correct A (fun _ => T) f P.
- Definition app_fe25519_64_dep_correct {T} f P : @app_fe25519_64_dep T P f = P f
- := app_on_h_correct (fun e => word_of e) bounds_exp f P.
- Definition app_fe25519_64_correct {T} f P : @app_fe25519_64 T f P = P f
- := @app_fe25519_64_dep_correct (fun _ => T) f P.
- Definition app_wire_digits_dep_correct {T} f P : @app_wire_digits_dep T P f = P f
- := app_on_h_correct (fun e => unbounded_word e) wire_digit_bounds_exp f P.
- Definition app_wire_digits_correct {T} f P : @app_wire_digits T f P = P f
- := @app_wire_digits_dep_correct (fun _ => T) f P.
-
- Definition appify2 {T} (op : fe25519_64W -> fe25519_64W -> T) (f g : fe25519_64W) :=
- app_fe25519_64W f (fun f0 => (app_fe25519_64W g (fun g0 => op f0 g0))).
-
- Lemma appify2_correct : forall {T} op f g, @appify2 T op f g = op f g.
- Proof.
- intros. cbv [appify2].
- etransitivity; apply app_fe25519_64W_correct.
- Qed.
-
- Definition appify9 {T} (op : fe25519_64W -> fe25519_64W -> fe25519_64W -> fe25519_64W -> fe25519_64W -> fe25519_64W -> fe25519_64W -> fe25519_64W -> fe25519_64W -> T) (x0 x1 x2 x3 x4 x5 x6 x7 x8 : fe25519_64W) :=
- app_fe25519_64W x0 (fun x0' =>
- app_fe25519_64W x1 (fun x1' =>
- app_fe25519_64W x2 (fun x2' =>
- app_fe25519_64W x3 (fun x3' =>
- app_fe25519_64W x4 (fun x4' =>
- app_fe25519_64W x5 (fun x5' =>
- app_fe25519_64W x6 (fun x6' =>
- app_fe25519_64W x7 (fun x7' =>
- app_fe25519_64W x8 (fun x8' =>
- op x0' x1' x2' x3' x4' x5' x6' x7' x8'))))))))).
-
- Lemma appify9_correct : forall {T} op x0 x1 x2 x3 x4 x5 x6 x7 x8,
- @appify9 T op x0 x1 x2 x3 x4 x5 x6 x7 x8 = op x0 x1 x2 x3 x4 x5 x6 x7 x8.
- Proof.
- intros. cbv [appify9].
- repeat (etransitivity; [ apply app_fe25519_64W_correct | ]); reflexivity.
- Qed.
-End generic_destructuring.
-
-Definition eta_fe25519_64W_sig (x : fe25519_64W) : { v : fe25519_64W | v = x }.
-Proof.
- eexists; symmetry.
- repeat (etransitivity; [ apply surjective_pairing | apply f_equal2 ]); reflexivity.
-Defined.
-Definition eta_fe25519_64W (x : fe25519_64W) : fe25519_64W
- := Eval cbv [proj1_sig eta_fe25519_64W_sig] in proj1_sig (eta_fe25519_64W_sig x).
-Definition eta_wire_digitsW_sig (x : wire_digitsW) : { v : wire_digitsW | v = x }.
-Proof.
- eexists; symmetry.
- repeat (etransitivity; [ apply surjective_pairing | apply f_equal2 ]); reflexivity.
-Defined.
-Definition eta_wire_digitsW (x : wire_digitsW) : wire_digitsW
- := Eval cbv [proj1_sig eta_wire_digitsW_sig] in proj1_sig (eta_wire_digitsW_sig x).
-
-Local Transparent word128.
-Lemma word128ize_id x : word128ize x = x.
-Proof. apply NToWord_wordToN. Qed.
-Local Opaque word128.
-
-Lemma word128eqb_Zeqb x y : (word128ToZ x =? word128ToZ y)%Z = w128eqb x y.
-Proof. apply wordeqb_Zeqb. Qed.
-
-Local Arguments Z.pow_pos !_ !_ / .
-Lemma word128ToZ_ZToWord128 x : 0 <= x < 2^Z.of_nat bit_width -> word128ToZ (ZToWord128 x) = x.
-Proof.
- intros; unfold word128ToZ, ZToWord128.
- rewrite wordToN_NToWord_idempotent, Z2N.id
- by (omega || apply N2Z.inj_lt; rewrite <- ?(N_nat_Z (Npow2 _)), ?Npow2_nat, ?Zpow_pow2, ?N2Z.id, ?Z2N.id, ?Z2Nat.id by omega; omega).
- reflexivity.
-Qed.
-Lemma ZToWord128_word128ToZ x : ZToWord128 (word128ToZ x) = x.
-Proof.
- intros; unfold word128ToZ, ZToWord128.
- rewrite N2Z.id, NToWord_wordToN; reflexivity.
-Qed.
-
-(* BEGIN precomputation. *)
-
-Definition proj_word {lower upper} (v : bounded_word lower upper) := Eval cbv [proj1_sig] in proj1_sig v.
-Definition word_bounded {lower upper} (v : bounded_word lower upper)
- : andb (lower <=? proj_word v)%Z (proj_word v <=? upper)%Z = true
- := project_is_boundedT (proj2_sig v).
-Definition Build_bounded_word' {lower upper} proj_word word_bounded : bounded_word lower upper
- := exist _ proj_word (Build_is_boundedT word_bounded).
-Arguments proj_word {_ _} _.
-Arguments word_bounded {_ _} _.
-Arguments Build_bounded_word' {_ _} _ _.
-Definition Build_bounded_word {lower upper} (proj_word : word128) (word_bounded : andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z = true)
- : bounded_word lower upper
- := Build_bounded_word'
- proj_word
- (match andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z as b return b = true -> b = true with
- | true => fun _ => eq_refl
- | false => fun x => x
- end word_bounded).
-Lemma word_to_unbounded_helper {x e : nat} : (x < pow2 e)%nat -> (Z.of_nat e <= Z.of_nat bit_width)%Z -> ((0 <=? word128ToZ (ZToWord128 (Z.of_nat x))) && (word128ToZ (ZToWord128 (Z.of_nat x)) <=? 2 ^ (Z.of_nat e) - 1))%bool = true.
-Proof.
- rewrite pow2_id; intro H; apply Nat2Z.inj_lt in H; revert H.
- rewrite Z.pow_Zpow; simpl Z.of_nat.
- intros H H'.
- assert (2^Z.of_nat e <= 2^Z.of_nat bit_width) by auto with zarith.
- rewrite ?word128ToZ_ZToWord128 by omega.
- match goal with
- | [ |- context[andb ?x ?y] ]
- => destruct x eqn:?, y eqn:?; try reflexivity; Z.ltb_to_lt
- end;
- intros; omega.
-Qed.
-Definition word_to_unbounded_word {sz} (x : word sz) : (Z.of_nat sz <=? Z.of_nat bit_width)%Z = true -> unbounded_word (Z.of_nat sz).
-Proof.
- refine (fun pf => Build_bounded_word (Z.of_N (wordToN x)) _).
- abstract (rewrite wordToN_nat, nat_N_Z; Z.ltb_to_lt; apply (word_to_unbounded_helper (wordToNat_bound x)); simpl; omega).
-Defined.
-Definition word32_to_unbounded_word (x : word 32) : unbounded_word 32.
-Proof. apply (word_to_unbounded_word x); reflexivity. Defined.
-Definition word31_to_unbounded_word (x : word 31) : unbounded_word 31.
-Proof. apply (word_to_unbounded_word x); reflexivity. Defined.
-
-Local Opaque word128.
-Declare Reduction app_tuple_map := cbv [app_wire_digitsW app_fe25519_64W app_fe25519_64 HList.mapt HList.mapt' Tuple.map on_tuple List.map List.app length_fe25519_64 List.length wire_widths Tuple.from_list Tuple.from_list' Tuple.to_list Tuple.to_list' fst snd].
-Definition fe25519_64WToZ (x : fe25519_64W) : SpecificGen.GF25519_64.fe25519_64
- := Eval app_tuple_map in
- app_fe25519_64W x (Tuple.map (fun v : word128 => v : Z)).
-Definition fe25519_64ZToW (x : SpecificGen.GF25519_64.fe25519_64) : fe25519_64W
- := Eval app_tuple_map in
- app_fe25519_64W x (Tuple.map (fun v : Z => v : word128)).
-Definition wire_digitsWToZ (x : wire_digitsW) : SpecificGen.GF25519_64.wire_digits
- := Eval app_tuple_map in
- app_wire_digitsW x (Tuple.map (fun v : word128 => v : Z)).
-Definition wire_digitsZToW (x : SpecificGen.GF25519_64.wire_digits) : wire_digitsW
- := Eval app_tuple_map in
- app_wire_digitsW x (Tuple.map (fun v : Z => v : word128)).
-Definition fe25519_64W_word128ize (x : fe25519_64W) : fe25519_64W
- := Eval app_tuple_map in
- app_fe25519_64W x (Tuple.map word128ize).
-Definition wire_digitsW_word128ize (x : wire_digitsW) : wire_digitsW
- := Eval app_tuple_map in
- app_wire_digitsW x (Tuple.map word128ize).
-
-(** TODO: Turn this into a lemma to speed up proofs *)
-Ltac unfold_is_bounded_in' H :=
- lazymatch type of H with
- | andb _ _ = true
- => apply andb_prop in H;
- let H1 := fresh in
- let H2 := fresh in
- destruct H as [H1 H2];
- unfold_is_bounded_in' H1;
- unfold_is_bounded_in' H2
- | _ => idtac
- end.
-Ltac preunfold_is_bounded_in H :=
- unfold is_bounded, wire_digits_is_bounded, is_bounded_gen, fe25519_64WToZ, wire_digitsWToZ in H;
- cbv [to_list length bounds wire_digit_bounds from_list from_list' map2 on_tuple2 to_list' ListUtil.map2 Tuple.map List.map fold_right List.rev List.app length_fe25519_64 List.length wire_widths HList.hlistP HList.hlistP' Tuple.on_tuple] in H.
-Ltac unfold_is_bounded_in H :=
- preunfold_is_bounded_in H;
- unfold_is_bounded_in' H.
-
-Ltac preunfold_is_bounded :=
- unfold is_bounded, wire_digits_is_bounded, is_bounded_gen, fe25519_64WToZ, wire_digitsWToZ;
- cbv [to_list length bounds wire_digit_bounds from_list from_list' map2 on_tuple2 to_list' ListUtil.map2 Tuple.map List.map fold_right List.rev List.app length_fe25519_64 List.length wire_widths HList.hlistP HList.hlistP' Tuple.on_tuple].
-
-Ltac unfold_is_bounded :=
- preunfold_is_bounded;
- repeat match goal with
- | [ |- andb _ _ = true ] => apply andb_true_intro
- | [ |- and _ _ ] => split
- end.
-
-Local Transparent bit_width.
-Definition Pow2_128 := Eval compute in 2^Z.of_nat bit_width.
-Definition unfold_Pow2_128 : 2^Z.of_nat bit_width = Pow2_128 := eq_refl.
-Local Opaque bit_width.
-
-Local Ltac prove_lt_bit_width :=
- rewrite unfold_Pow2_128; cbv [Pow2_128]; omega.
-
-Lemma fe25519_64ZToW_WToZ (x : fe25519_64W) : fe25519_64ZToW (fe25519_64WToZ x) = x.
-Proof.
- hnf in x; destruct_head' prod; cbv [fe25519_64WToZ fe25519_64ZToW].
- rewrite !ZToWord128_word128ToZ; reflexivity.
-Qed.
-
-Lemma fe25519_64WToZ_ZToW x : is_bounded x = true -> fe25519_64WToZ (fe25519_64ZToW x) = x.
-Proof.
- hnf in x; destruct_head' prod; cbv [fe25519_64WToZ fe25519_64ZToW].
- intro H.
- unfold_is_bounded_in H; destruct_head' and.
- Z.ltb_to_lt.
- rewrite !word128ToZ_ZToWord128 by prove_lt_bit_width.
- reflexivity.
-Qed.
-
-Lemma fe25519_64W_word128ize_id x : fe25519_64W_word128ize x = x.
-Proof.
- hnf in x; destruct_head' prod.
- cbv [fe25519_64W_word128ize];
- repeat apply f_equal2; apply word128ize_id.
-Qed.
-Lemma wire_digitsW_word128ize_id x : wire_digitsW_word128ize x = x.
-Proof.
- hnf in x; destruct_head' prod.
- cbv [wire_digitsW_word128ize];
- repeat apply f_equal2; apply word128ize_id.
-Qed.
-
-Definition uncurry_unop_fe25519_64W {T} (op : fe25519_64W -> T)
- := Eval cbv (*-[word128]*) in Tuple.uncurry (n:=length_fe25519_64) op.
-Definition curry_unop_fe25519_64W {T} op : fe25519_64W -> T
- := Eval cbv (*-[word128]*) in fun f => app_fe25519_64W f (Tuple.curry (n:=length_fe25519_64) op).
-Definition uncurry_binop_fe25519_64W {T} (op : fe25519_64W -> fe25519_64W -> T)
- := Eval cbv (*-[word128]*) in uncurry_unop_fe25519_64W (fun f => uncurry_unop_fe25519_64W (op f)).
-Definition curry_binop_fe25519_64W {T} op : fe25519_64W -> fe25519_64W -> T
- := Eval cbv (*-[word128]*) in appify2 (fun f => curry_unop_fe25519_64W (curry_unop_fe25519_64W op f)).
-
-Definition uncurry_unop_wire_digitsW {T} (op : wire_digitsW -> T)
- := Eval cbv (*-[word128]*) in Tuple.uncurry (n:=length wire_widths) op.
-Definition curry_unop_wire_digitsW {T} op : wire_digitsW -> T
- := Eval cbv (*-[word128]*) in fun f => app_wire_digitsW f (Tuple.curry (n:=length wire_widths) op).
-
-Definition uncurry_9op_fe25519_64W {T} (op : fe25519_64W -> fe25519_64W -> fe25519_64W -> fe25519_64W -> fe25519_64W -> fe25519_64W -> fe25519_64W -> fe25519_64W -> fe25519_64W -> T)
- := Eval cbv (*-[word128]*) in
- uncurry_unop_fe25519_64W (fun x0 =>
- uncurry_unop_fe25519_64W (fun x1 =>
- uncurry_unop_fe25519_64W (fun x2 =>
- uncurry_unop_fe25519_64W (fun x3 =>
- uncurry_unop_fe25519_64W (fun x4 =>
- uncurry_unop_fe25519_64W (fun x5 =>
- uncurry_unop_fe25519_64W (fun x6 =>
- uncurry_unop_fe25519_64W (fun x7 =>
- uncurry_unop_fe25519_64W (fun x8 =>
- op x0 x1 x2 x3 x4 x5 x6 x7 x8))))))))).
-Definition curry_9op_fe25519_64W {T} op : fe25519_64W -> fe25519_64W -> fe25519_64W -> fe25519_64W -> fe25519_64W -> fe25519_64W -> fe25519_64W -> fe25519_64W -> fe25519_64W -> T
- := Eval cbv (*-[word128]*) in
- appify9 (fun x0 x1 x2 x3 x4 x5 x6 x7 x8
- => curry_unop_fe25519_64W (curry_unop_fe25519_64W (curry_unop_fe25519_64W (curry_unop_fe25519_64W (curry_unop_fe25519_64W (curry_unop_fe25519_64W (curry_unop_fe25519_64W (curry_unop_fe25519_64W (curry_unop_fe25519_64W op x0) x1) x2) x3) x4) x5) x6) x7) x8).
-
-Definition proj1_fe25519_64W (x : fe25519_64) : fe25519_64W
- := Eval app_tuple_map in
- app_fe25519_64 x (HList.mapt (fun _ => (@proj_word _ _))).
-Coercion proj1_fe25519_64 (x : fe25519_64) : SpecificGen.GF25519_64.fe25519_64
- := fe25519_64WToZ (proj1_fe25519_64W x).
-
-Lemma is_bounded_proj1_fe25519_64 (x : fe25519_64) : is_bounded (proj1_fe25519_64 x) = true.
-Proof.
- revert x; refine (app_fe25519_64_dep _); intro x.
- hnf in x; destruct_head' prod; destruct_head' bounded_word.
- cbv [is_bounded proj1_fe25519_64 proj1_fe25519_64W fe25519_64WToZ to_list length bounds from_list from_list' map2 on_tuple2 to_list' ListUtil.map2 List.map List.rev List.app proj_word length_fe25519_64 is_bounded_gen].
- apply fold_right_andb_true_iff_fold_right_and_True.
- cbv [fold_right List.map].
- cbv beta in *.
- repeat split; auto using project_is_boundedT.
-Qed.
-
-Definition proj1_wire_digitsW (x : wire_digits) : wire_digitsW
- := app_wire_digits x (HList.mapt (fun _ => proj_word)).
-Coercion proj1_wire_digits (x : wire_digits) : SpecificGen.GF25519_64.wire_digits
- := wire_digitsWToZ (proj1_wire_digitsW x).
-
-Lemma is_bounded_proj1_wire_digits (x : wire_digits) : wire_digits_is_bounded (proj1_wire_digits x) = true.
-Proof.
- revert x; refine (app_wire_digits_dep _); intro x.
- hnf in x; destruct_head' prod; destruct_head' bounded_word.
- cbv [wire_digits_is_bounded proj1_wire_digits proj1_wire_digitsW wire_digitsWToZ to_list length wire_digit_bounds from_list from_list' map2 on_tuple2 to_list' ListUtil.map2 List.map List.rev List.app proj_word is_bounded_gen wire_widths HList.mapt HList.mapt' app_wire_digits fst snd].
- apply fold_right_andb_true_iff_fold_right_and_True.
- cbv [fold_right List.map].
- cbv beta in *.
- repeat split; auto using project_is_boundedT.
-Qed.
-
-Local Ltac make_exist_W' x app_W_dep :=
- let H := fresh in
- revert x; refine (@app_W_dep _ _ _); intros x H;
- let x' := fresh in
- set (x' := x);
- cbv [tuple tuple' length_fe25519_64 List.length wire_widths] in x;
- destruct_head' prod;
- let rec do_refine v H :=
- first [ let v' := (eval cbv [snd fst] in (snd v)) in
- refine (_, Build_bounded_word v' _);
- [ do_refine (fst v) (proj2 H) | subst x'; abstract exact (proj1 H) ]
- | let v' := (eval cbv [snd fst] in v) in
- refine (Build_bounded_word v' _); subst x'; abstract exact (proj1 H) ] in
- let H' := constr:(proj1 (@fold_right_andb_true_iff_fold_right_and_True _) H) in
- let T := type of H' in
- let T := (eval cbv [id
- List.fold_right List.map List.length List.app ListUtil.map2 List.rev
- Tuple.to_list Tuple.to_list' Tuple.from_list Tuple.from_list' Tuple.map2 Tuple.on_tuple2
- fe25519_64 bounds fe25519_64WToZ length_fe25519_64
- wire_digits wire_digit_bounds wire_digitsWToZ wire_widths] in T) in
- let H' := constr:(H' : T) in
- let v := (eval unfold x' in x') in
- do_refine v H'.
-Local Ltac make_exist'' x exist_W ZToW :=
- let H := fresh in
- intro H; apply (exist_W (ZToW x));
- abstract (
- hnf in x; destruct_head' prod;
- let H' := fresh in
- pose proof H as H';
- unfold_is_bounded_in H;
- destruct_head' and; simpl in *;
- Z.ltb_to_lt;
- rewrite ?word128ToZ_ZToWord128 by prove_lt_bit_width;
- assumption
- ).
-Local Ltac make_exist' x app_W_dep exist'' exist_W ZToW :=
- let H := fresh in
- revert x; refine (@app_W_dep _ _ _); intros x H;
- let x' := fresh in
- set (x' := x) in *;
- cbv [tuple tuple' length_fe25519_64 List.length wire_widths] in x;
- destruct_head' prod;
- let rec do_refine v :=
- first [ let v' := (eval cbv [exist_W ZToW exist'' proj_word Build_bounded_word Build_bounded_word' snd fst] in (proj_word v)) in
- refine (Build_bounded_word v' _); subst x'; abstract exact (word_bounded v)
- | let v' := (eval cbv [exist_W ZToW exist'' proj_word Build_bounded_word Build_bounded_word' snd fst] in (proj_word (snd v))) in
- refine (_, Build_bounded_word v' _);
- [ do_refine (fst v) | subst x'; abstract exact (word_bounded (snd v)) ] ] in
- let v := (eval unfold x' in (exist'' x' H)) in
- do_refine v.
-
-Definition exist_fe25519_64W' (x : fe25519_64W) : is_bounded (fe25519_64WToZ x) = true -> fe25519_64.
-Proof. make_exist_W' x (@app_fe25519_64W_dep). Defined.
-Definition exist_fe25519_64W (x : fe25519_64W) : is_bounded (fe25519_64WToZ x) = true -> fe25519_64
- := Eval cbv [app_fe25519_64W_dep exist_fe25519_64W' fe25519_64ZToW] in exist_fe25519_64W' x.
-Definition exist_fe25519_64'' (x : SpecificGen.GF25519_64.fe25519_64) : is_bounded x = true -> fe25519_64.
-Proof. make_exist'' x exist_fe25519_64W fe25519_64ZToW. Defined.
-Definition exist_fe25519_64' (x : SpecificGen.GF25519_64.fe25519_64) : is_bounded x = true -> fe25519_64.
-Proof. make_exist' x (@app_fe25519_64W_dep) exist_fe25519_64'' exist_fe25519_64W fe25519_64ZToW. Defined.
-Definition exist_fe25519_64 (x : SpecificGen.GF25519_64.fe25519_64) : is_bounded x = true -> fe25519_64
- := Eval cbv [exist_fe25519_64' exist_fe25519_64W exist_fe25519_64' app_fe25519_64 app_fe25519_64W_dep] in
- exist_fe25519_64' x.
-
-Lemma proj1_fe25519_64_exist_fe25519_64W x pf : proj1_fe25519_64 (exist_fe25519_64W x pf) = fe25519_64WToZ x.
-Proof. now hnf in x; destruct_head' prod. Qed.
-Lemma proj1_fe25519_64W_exist_fe25519_64 x pf : proj1_fe25519_64W (exist_fe25519_64 x pf) = fe25519_64ZToW x.
-Proof. now hnf in x; destruct_head' prod. Qed.
-Lemma proj1_fe25519_64_exist_fe25519_64 x pf : proj1_fe25519_64 (exist_fe25519_64 x pf) = x.
-Proof.
- hnf in x; destruct_head' prod.
- cbv [proj1_fe25519_64 exist_fe25519_64 proj1_fe25519_64W fe25519_64WToZ proj_word Build_bounded_word Build_bounded_word'].
- unfold_is_bounded_in pf.
- destruct_head' and.
- Z.ltb_to_lt.
- rewrite ?word128ToZ_ZToWord128 by prove_lt_bit_width.
- reflexivity.
-Qed.
-
-Definition exist_wire_digitsW' (x : wire_digitsW)
- : wire_digits_is_bounded (wire_digitsWToZ x) = true -> wire_digits.
-Proof. make_exist_W' x (@app_wire_digitsW_dep). Defined.
-Definition exist_wire_digitsW (x : wire_digitsW)
- : wire_digits_is_bounded (wire_digitsWToZ x) = true -> wire_digits
- := Eval cbv [app_wire_digitsW_dep exist_wire_digitsW' wire_digitsZToW] in exist_wire_digitsW' x.
-Definition exist_wire_digits'' (x : SpecificGen.GF25519_64.wire_digits)
- : wire_digits_is_bounded x = true -> wire_digits.
-Proof. make_exist'' x exist_wire_digitsW wire_digitsZToW. Defined.
-Definition exist_wire_digits' (x : SpecificGen.GF25519_64.wire_digits)
- : wire_digits_is_bounded x = true -> wire_digits.
-Proof. make_exist' x (@app_wire_digitsW_dep) exist_wire_digits'' exist_wire_digitsW wire_digitsZToW. Defined.
-Definition exist_wire_digits (x : SpecificGen.GF25519_64.wire_digits)
- : wire_digits_is_bounded x = true -> wire_digits
- := Eval cbv [exist_wire_digits' exist_wire_digitsW exist_wire_digits' app_wire_digits app_wire_digitsW_dep] in
- exist_wire_digits' x.
-
-Lemma proj1_wire_digits_exist_wire_digitsW x pf : proj1_wire_digits (exist_wire_digitsW x pf) = wire_digitsWToZ x.
-Proof. now hnf in x; destruct_head' prod. Qed.
-Lemma proj1_wire_digitsW_exist_wire_digits x pf : proj1_wire_digitsW (exist_wire_digits x pf) = wire_digitsZToW x.
-Proof. now hnf in x; destruct_head' prod. Qed.
-Lemma proj1_wire_digits_exist_wire_digits x pf : proj1_wire_digits (exist_wire_digits x pf) = x.
-Proof.
- hnf in x; destruct_head' prod.
- cbv [proj1_wire_digits exist_wire_digits proj1_wire_digitsW wire_digitsWToZ proj_word Build_bounded_word Build_bounded_word' app_wire_digits HList.mapt HList.mapt' length wire_widths fst snd].
- unfold_is_bounded_in pf.
- destruct_head' and.
- Z.ltb_to_lt.
- rewrite ?word128ToZ_ZToWord128 by prove_lt_bit_width.
- reflexivity.
-Qed.
-
-Module opt.
- Definition word128ToZ := Eval vm_compute in word128ToZ.
- Definition word128ToN := Eval vm_compute in @wordToN bit_width.
- Definition NToWord128 := Eval vm_compute in NToWord128.
- Definition bit_width := Eval vm_compute in bit_width.
- Definition Zleb := Eval cbv [Z.leb] in Z.leb.
- Definition andb := Eval vm_compute in andb.
- Definition word128ize := Eval vm_compute in word128ize.
-End opt.
-
-Local Transparent bit_width.
-Local Ltac do_change lem :=
- match lem with
- | context L[andb (?x <=? ?y)%Z (?y <=? ?z)]
- => let x' := (eval vm_compute in x) in
- let z' := (eval vm_compute in z) in
- lazymatch y with
- | word128ToZ (word128ize ?v)
- => let y' := constr:(opt.word128ToZ (opt.word128ize v)) in
- let L' := context L[andb (opt.Zleb x' y') (opt.Zleb y' z')] in
- do_change L'
- end
- | _ => lem
- end.
-Definition fe25519_64_word128ize (x : fe25519_64) : fe25519_64.
-Proof.
- set (x' := x).
- hnf in x; destruct_head' prod.
- let lem := constr:(exist_fe25519_64W (fe25519_64W_word128ize (proj1_fe25519_64W x'))) in
- let lem := (eval cbv [proj1_fe25519_64W x' fe25519_64W_word128ize proj_word exist_fe25519_64W Build_bounded_word' Build_bounded_word] in lem) in
- let lem := do_change lem in
- refine (lem _);
- change (is_bounded (fe25519_64WToZ (fe25519_64W_word128ize (proj1_fe25519_64W x'))) = true);
- abstract (rewrite fe25519_64W_word128ize_id; apply is_bounded_proj1_fe25519_64).
-Defined.
-Definition wire_digits_word128ize (x : wire_digits) : wire_digits.
-Proof.
- set (x' := x).
- hnf in x; destruct_head' prod.
- let lem := constr:(exist_wire_digitsW (wire_digitsW_word128ize (proj1_wire_digitsW x'))) in
- let lem := (eval cbv [proj1_wire_digitsW x' wire_digitsW_word128ize proj_word exist_wire_digitsW Build_bounded_word Build_bounded_word'] in lem) in
- let lem := do_change lem in
- let lem := (eval cbv [word128ize opt.word128ize andb Z.leb Z.compare CompOpp Pos.compare] in lem) in
- refine (lem _);
- change (wire_digits_is_bounded (wire_digitsWToZ (wire_digitsW_word128ize (proj1_wire_digitsW x'))) = true);
- abstract (rewrite wire_digitsW_word128ize_id; apply is_bounded_proj1_wire_digits).
-Defined.
-
-Lemma is_bounded_to_nth_default x (H : is_bounded x = true)
- : forall n : nat,
- (n < length limb_widths)%nat
- -> (0 <= nth_default 0 (Tuple.to_list length_fe25519_64 x) n <=
- snd (b_of (nth_default (-1) limb_widths n)))%Z.
-Proof.
- hnf in x; destruct_head' prod.
- unfold_is_bounded_in H; destruct_head' and.
- Z.ltb_to_lt.
- unfold nth_default; simpl.
- intros.
- repeat match goal with
- | [ |- context[nth_error _ ?x] ]
- => is_var x; destruct x; simpl
- end;
- omega.
-Qed.
-
-(* END precomputation *)
-
-(* Precompute constants *)
-
-Definition one' := Eval vm_compute in exist_fe25519_64 SpecificGen.GF25519_64.one_ eq_refl.
-Definition one := Eval cbv [one' fe25519_64_word128ize word128ize andb opt.word128ToZ opt.word128ize opt.Zleb Z.compare CompOpp Pos.compare Pos.compare_cont] in fe25519_64_word128ize one'.
-
-Definition zero' := Eval vm_compute in exist_fe25519_64 SpecificGen.GF25519_64.zero_ eq_refl.
-Definition zero := Eval cbv [zero' fe25519_64_word128ize word128ize andb opt.word128ToZ opt.word128ize opt.Zleb Z.compare CompOpp Pos.compare Pos.compare_cont] in fe25519_64_word128ize zero'.
-
-Lemma fold_chain_opt_gen {A B} (F : A -> B) is_bounded ls id' op' id op chain
- (Hid_bounded : is_bounded (F id') = true)
- (Hid : id = F id')
- (Hop_bounded : forall x y, is_bounded (F x) = true
- -> is_bounded (F y) = true
- -> is_bounded (op (F x) (F y)) = true)
- (Hop : forall x y, is_bounded (F x) = true
- -> is_bounded (F y) = true
- -> op (F x) (F y) = F (op' x y))
- (Hls_bounded : forall n, is_bounded (F (nth_default id' ls n)) = true)
- : F (fold_chain_opt id' op' chain ls)
- = fold_chain_opt id op chain (List.map F ls)
- /\ is_bounded (F (fold_chain_opt id' op' chain ls)) = true.
-Proof.
- rewrite !fold_chain_opt_correct.
- revert dependent ls; induction chain as [|x xs IHxs]; intros.
- { pose proof (Hls_bounded 0%nat).
- destruct ls; simpl; split; trivial; congruence. }
- { destruct x; simpl; unfold Let_In; simpl.
- rewrite (fun ls pf => proj1 (IHxs ls pf)) at 1; simpl.
- { do 2 f_equal.
- rewrite <- Hop, Hid by auto.
- rewrite !map_nth_default_always.
- split; try reflexivity.
- apply (IHxs (_::_)).
- intros [|?]; autorewrite with simpl_nth_default; auto.
- rewrite <- Hop; auto. }
- { intros [|?]; simpl;
- autorewrite with simpl_nth_default; auto.
- rewrite <- Hop; auto. } }
-Qed.
-
-Lemma encode_bounded x : is_bounded (encode x) = true.
-Proof.
- pose proof (bounded_encode x).
- generalize dependent (encode x).
- intro t; compute in t; intros.
- destruct_head' prod.
- unfold Pow2Base.bounded in H.
- cbv [nth_default Tuple.to_list Tuple.to_list' List.length limb_widths params25519_64] in H.
- repeat match type of H with
- | context[nth_error (cons _ _) _]
- => let H' := fresh in
- pose proof (H O) as H'; specialize (fun i => H (S i)); simpl @nth_error in H, H';
- cbv beta iota in H'
- end.
- clear H.
- simpl in *.
- cbv [Z.pow_pos Z.mul Pos.mul Pos.iter nth_default nth_error value] in *.
- unfold is_bounded.
- apply fold_right_andb_true_iff_fold_right_and_True.
- cbv [is_bounded proj1_fe25519_64 to_list length bounds from_list from_list' map2 on_tuple2 to_list' ListUtil.map2 List.map List.rev List.app proj_word fold_right length_fe25519_64].
- repeat split; rewrite !Bool.andb_true_iff, !Z.leb_le; omega.
-Qed.
-
-Definition encode (x : F modulus) : fe25519_64
- := exist_fe25519_64 (encode x) (encode_bounded x).
-
-Definition decode (x : fe25519_64) : F modulus
- := ModularBaseSystem.decode (proj1_fe25519_64 x).
-
-Lemma proj1_fe25519_64_encode x
- : proj1_fe25519_64 (encode x) = ModularBaseSystem.encode x.
-Proof.
- cbv [encode].
- generalize (encode_bounded x); generalize (ModularBaseSystem.encode x).
- intros y pf; intros; hnf in y; destruct_head_hnf' prod.
- cbv [proj1_fe25519_64 exist_fe25519_64 proj1_fe25519_64W Build_bounded_word Build_bounded_word' fe25519_64WToZ proj_word].
- unfold_is_bounded_in pf.
- destruct_head' and.
- Z.ltb_to_lt.
- rewrite ?word128ToZ_ZToWord128 by prove_lt_bit_width.
- reflexivity.
-Qed.
-
-Lemma decode_exist_fe25519_64 x pf
- : decode (exist_fe25519_64 x pf) = ModularBaseSystem.decode x.
-Proof.
- hnf in x; destruct_head' prod.
- cbv [decode proj1_fe25519_64 exist_fe25519_64 proj1_fe25519_64W Build_bounded_word Build_bounded_word' fe25519_64WToZ proj_word].
- unfold_is_bounded_in pf.
- destruct_head' and.
- Z.ltb_to_lt.
- rewrite ?word128ToZ_ZToWord128 by prove_lt_bit_width.
- reflexivity.
-Qed.
-
-Definition div (f g : fe25519_64) : fe25519_64
- := exist_fe25519_64 (div (proj1_fe25519_64 f) (proj1_fe25519_64 g)) (encode_bounded _).
-
-Definition eq (f g : fe25519_64) : Prop := eq (proj1_fe25519_64 f) (proj1_fe25519_64 g).
-
-
-Notation in_op_correct_and_bounded k irop op
- := (((Tuple.map (n:=k) fe25519_64WToZ irop = op)
- /\ HList.hlistP (fun v => is_bounded v = true) (Tuple.map (n:=k) fe25519_64WToZ irop))%type)
- (only parsing).
-
-(*Fixpoint inm_op_correct_and_bounded' (count_in count_out : nat)
- : forall (irop : Tower.tower_nd fe25519_64W (Tuple.tuple fe25519_64W count_out) count_in)
- (op : Tower.tower_nd GF25519_64.fe25519_64 (Tuple.tuple GF25519_64.fe25519_64 count_out) count_in)
- (cont : Prop -> Prop),
- Prop
- := match count_in return
- forall (irop : Tower.tower_nd fe25519_64W (Tuple.tuple fe25519_64W count_out) count_in)
- (op : Tower.tower_nd GF25519_64.fe25519_64 (Tuple.tuple GF25519_64.fe25519_64 count_out) count_in)
- (cont : Prop -> Prop),
- Prop
- with
- | O => fun irop op cont => cont (in_op_correct_and_bounded count_out irop op)
- | S n => fun irop op cont
- => forall x : fe25519_64W,
- @inm_op_correct_and_bounded'
- n count_out (irop x) (op (fe25519_64WToZ x))
- (fun P => cont (is_bounded (fe25519_64WToZ x) = true -> P))
- end.
-Definition inm_op_correct_and_bounded count_in count_out irop op
- := Eval cbv [inm_op_correct_and_bounded' Tower.tower_nd Tuple.tuple Tuple.tuple' HList.hlistP HList.hlistP'] in
- inm_op_correct_and_bounded' count_in count_out irop op (fun P => P).
-Fixpoint inm_op_correct_and_bounded_prefix' (count_in count_out : nat)
- : forall (irop : Tower.tower_nd fe25519_64W (Tuple.tuple fe25519_64W count_out) count_in)
- (op : Tower.tower_nd GF25519_64.fe25519_64 (Tuple.tuple GF25519_64.fe25519_64 count_out) count_in),
- Prop
- := match count_in return
- forall (irop : Tower.tower_nd fe25519_64W (Tuple.tuple fe25519_64W count_out) count_in)
- (op : Tower.tower_nd GF25519_64.fe25519_64 (Tuple.tuple GF25519_64.fe25519_64 count_out) count_in),
- Prop
- with
- | O => fun irop op => in_op_correct_and_bounded count_out irop op
- | S n => fun irop op
- => forall x : fe25519_64W,
- is_bounded (fe25519_64WToZ x) = true
- -> @inm_op_correct_and_bounded_prefix'
- n count_out (irop x) (op (fe25519_64WToZ x))
- end.
-Definition inm_op_correct_and_bounded_prefix count_in count_out irop op
- := inm_op_correct_and_bounded_prefix' count_in count_out irop op.
-
-Lemma inm_op_correct_and_bounded_iff_prefix' count_in count_out irop op
- (cont : Prop -> Prop)
- (cont_forall : forall T (P : T -> Prop), cont (forall x : T, P x) <-> forall x : T, cont (P x))
- : inm_op_correct_and_bounded' count_in count_out irop op cont <-> cont (inm_op_correct_and_bounded_prefix' count_in count_out irop op).
-Proof.
- revert dependent cont; induction count_in as [|count_in IHcount_in]; intros.
- { reflexivity. }
- { simpl.
- rewrite cont_forall.
- split; intros H' x; specialize (H' x);
- specialize (IHcount_in (irop x) (op (fe25519_64WToZ x)) (fun P => cont (is_bounded (fe25519_64WToZ x) = true -> P)));
- cbv beta in *;
- [ erewrite <- IHcount_in; [ assumption | .. ]
- | erewrite -> IHcount_in; [ assumption | .. ] ];
- clear IHcount_in.
- { intros; repeat setoid_rewrite cont_forall; split; eauto. }
- { intros; repeat setoid_rewrite cont_forall; split; eauto. } }
-Qed.
-
-Lemma inm_op_correct_and_bounded_iff_prefix count_in count_out irop op
- : inm_op_correct_and_bounded count_in count_out irop op <-> inm_op_correct_and_bounded_prefix count_in count_out irop op.
-Proof.
- apply (inm_op_correct_and_bounded_iff_prefix' count_in count_out irop op (fun P => P)).
- reflexivity.
-Qed.
-
-Definition inm_op_correct_and_bounded1 count_in irop op
- := Eval cbv [inm_op_correct_and_bounded Tuple.map Tuple.to_list Tuple.to_list' Tuple.from_list Tuple.from_list' Tuple.on_tuple List.map] in
- inm_op_correct_and_bounded count_in 1 irop op.*)
-Notation inm_op_correct_and_bounded n m irop op
- := ((forall x,
- HList.hlistP (fun v => is_bounded v = true) (Tuple.map (n:=n%nat%type) fe25519_64WToZ x)
- -> in_op_correct_and_bounded m (irop x) (op (Tuple.map (n:=n) fe25519_64WToZ x))))
- (only parsing).
-Notation ibinop_correct_and_bounded irop op := (inm_op_correct_and_bounded 2 1 irop op) (only parsing).
-Notation iunop_correct_and_bounded irop op := (inm_op_correct_and_bounded 1 1 irop op) (only parsing).
-Notation iunop_FEToZ_correct irop op
- := (forall x,
- is_bounded (fe25519_64WToZ x) = true
- -> word128ToZ (irop x) = op (fe25519_64WToZ x)) (only parsing).
-Notation iunop_FEToWire_correct_and_bounded irop op
- := (forall x,
- is_bounded (fe25519_64WToZ x) = true
- -> wire_digitsWToZ (irop x) = op (fe25519_64WToZ x)
- /\ wire_digits_is_bounded (wire_digitsWToZ (irop x)) = true) (only parsing).
-Notation iunop_WireToFE_correct_and_bounded irop op
- := (forall x,
- wire_digits_is_bounded (wire_digitsWToZ x) = true
- -> fe25519_64WToZ (irop x) = op (wire_digitsWToZ x)
- /\ is_bounded (fe25519_64WToZ (irop x)) = true) (only parsing).
-Notation i9top_correct_and_bounded k irop op := (inm_op_correct_and_bounded 9 k irop op) (only parsing).
-
-Notation prefreeze := GF25519_64.prefreeze.
diff --git a/src/SpecificGen/GF25519_64BoundedExtendedAddCoordinates.v b/src/SpecificGen/GF25519_64BoundedExtendedAddCoordinates.v
deleted file mode 100644
index b7d07d9c2..000000000
--- a/src/SpecificGen/GF25519_64BoundedExtendedAddCoordinates.v
+++ /dev/null
@@ -1,68 +0,0 @@
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.SpecificGen.GF25519_64Bounded.
-Require Import Crypto.SpecificGen.GF25519_64ExtendedAddCoordinates.
-Require Import Crypto.SpecificGen.GF25519_64BoundedAddCoordinates.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-(*
-Lemma fieldwise_eq_extended_add_coordinates_full' twice_d P10 P11 P12 P13 P20 P21 P22 P23
- : Tuple.fieldwise
- (n:=4) GF25519_64BoundedCommon.eq
- (@GF25519_64BoundedAddCoordinates.add_coordinates
- twice_d P10 P11 P12 P13 P20 P21 P22 P23)
- (@ExtendedCoordinates.Extended.add_coordinates
- GF25519_64BoundedCommon.fe25519_64
- GF25519_64Bounded.add GF25519_64Bounded.sub GF25519_64Bounded.mul twice_d
- (P10, P11, P12, P13) (P20, P21, P22, P23)).
-Proof.
- unfold GF25519_64BoundedCommon.eq.
- apply -> (fieldwise_map_iff (n:=4) eq GF25519_64BoundedCommon.proj1_fe25519_64 GF25519_64BoundedCommon.proj1_fe25519_64).
- rewrite add_coordinates_correct.
- cbv [AddCoordinates.add_coordinates].
- setoid_rewrite <- fieldwise_eq_edwards_extended_add_coordinates_carry_nocarry.
- unfold edwards_extended_carry_add_coordinates.
- match goal with |- ?R ?x ?y => rewrite <- (Tuple.map_id (n:=4) x) end.
- apply <- (fieldwise_map_iff (n:=4) eq (fun x => x) GF25519_64BoundedCommon.proj1_fe25519_64).
- apply ExtendedCoordinates.Extended.add_coordinates_respectful_hetero;
- intros;
- repeat match goal with
- | [ |- context[add _ _] ]
- => rewrite add_correct
- | [ |- context[sub _ _] ]
- => rewrite sub_correct
- | [ |- context[mul _ _] ]
- => rewrite mul_correct
- | _ => progress unfold Tuple.fieldwise, Tuple.fieldwise', fst, snd, eq in *
- | [ |- and _ _ ] => split
- | [ |- ?x = ?x ] => reflexivity
- | _ => progress rewrite_strat topdown hints edwards_extended_add_coordinates_correct
- | _ => congruence
- end.
-Qed.
-
-Definition add_coordinates' twice_d P1 P2
- := let '(P10, P11, P12, P13) := P1 in
- let '(P20, P21, P22, P23) := P2 in
- @GF25519_64BoundedAddCoordinates.add_coordinates
- twice_d P10 P11 P12 P13 P20 P21 P22 P23.
-
-Definition add_coordinates twice_d P1 P2
- := Eval cbv beta iota delta [GF25519_64BoundedAddCoordinates.add_coordinates HList.mapt HList.mapt'] in
- let '(P10, P11, P12, P13) := P1 in
- let '(P20, P21, P22, P23) := P2 in
- @GF25519_64BoundedAddCoordinates.add_coordinates
- twice_d P10 P11 P12 P13 P20 P21 P22 P23.
-
-Lemma add_coordinates_correct_full twice_d P1 P2
- : Tuple.fieldwise
- GF25519_64BoundedCommon.eq
- (add_coordinates twice_d P1 P2)
- (@ExtendedCoordinates.Extended.add_coordinates
- GF25519_64BoundedCommon.fe25519_64
- GF25519_64Bounded.add GF25519_64Bounded.sub GF25519_64Bounded.mul twice_d P1 P2).
-Proof.
- destruct_head' prod.
- rewrite <- fieldwise_eq_extended_add_coordinates_full'; reflexivity.
-Qed.
-*)
diff --git a/src/SpecificGen/GF25519_64ExtendedAddCoordinates.v b/src/SpecificGen/GF25519_64ExtendedAddCoordinates.v
deleted file mode 100644
index cac451900..000000000
--- a/src/SpecificGen/GF25519_64ExtendedAddCoordinates.v
+++ /dev/null
@@ -1,81 +0,0 @@
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.Algebra.
-Require Import Crypto.Util.Relations.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Tactics.
-
-Require Import Crypto.SpecificGen.GF25519_64.
-Require Import Crypto.CompleteEdwardsCurve.ExtendedCoordinates.
-
-Definition edwards_extended_add_coordinates td P Q :=
- (@ExtendedCoordinates.Extended.add_coordinates _ add sub mul td P Q).
-Definition edwards_extended_carry_add_coordinates td P Q :=
- (@ExtendedCoordinates.Extended.add_coordinates _ carry_add carry_sub mul td P Q).
-
-Create HintDb edwards_extended_add_coordinates_correct discriminated.
-Local Existing Instance field25519_64.
-Hint Rewrite
- (Ring.homomorphism_mul(is_homomorphism:=homomorphism_F25519_64_decode))
- (Ring.homomorphism_add(H1 :=homomorphism_F25519_64_decode))
- (Ring.homomorphism_sub(H1 :=homomorphism_F25519_64_decode))
- : edwards_extended_add_coordinates_correct.
-Lemma edwards_extended_add_coordinates_correct td P Q :
- Tuple.map (n:=4) decode (edwards_extended_add_coordinates td P Q)
- = (@ExtendedCoordinates.Extended.add_coordinates _ F.add F.sub F.mul (decode td) (Tuple.map (n:=4) decode P) (Tuple.map (n:=4) decode Q)).
-Proof.
- change (edwards_extended_add_coordinates td P Q)
- with (@ExtendedCoordinates.Extended.add_coordinates _ add sub mul td P Q).
- destruct_head' prod.
- simpl.
- (*rewrite_strat topdown hints edwards_extended_add_coordinates_correct.*) (* loops on Coq 8.4 *)
- repeat (rewrite ?(Ring.homomorphism_mul(is_homomorphism:=homomorphism_F25519_64_decode)),
- ?(Ring.homomorphism_add(H1 :=homomorphism_F25519_64_decode)),
- ?(Ring.homomorphism_sub(H1 :=homomorphism_F25519_64_decode))).
- reflexivity.
-Qed.
-Local Existing Instance carry_field25519_64.
-Hint Rewrite
- (Ring.homomorphism_mul(is_homomorphism:=homomorphism_carry_F25519_64_decode))
- (Ring.homomorphism_add(H1 :=homomorphism_carry_F25519_64_decode))
- (Ring.homomorphism_sub(H1 :=homomorphism_carry_F25519_64_decode))
- : edwards_extended_add_coordinates_correct.
-Lemma edwards_extended_carry_add_coordinates_correct td P Q :
- Tuple.map (n:=4) decode (edwards_extended_carry_add_coordinates td P Q)
- = (@ExtendedCoordinates.Extended.add_coordinates _ F.add F.sub F.mul (decode td) (Tuple.map (n:=4) decode P) (Tuple.map (n:=4) decode Q)).
-Proof.
- change (edwards_extended_carry_add_coordinates td P Q)
- with (@ExtendedCoordinates.Extended.add_coordinates _ carry_add carry_sub mul td P Q).
- destruct_head' prod.
- simpl.
- (*rewrite_strat topdown hints edwards_extended_add_coordinates_correct.*) (* loops on Coq 8.4 *)
- (* This is an annoying replacement for rewrite_strat loopiness *)
- generalize (Ring.homomorphism_mul(is_homomorphism:=homomorphism_carry_F25519_64_decode)).
- generalize (Ring.homomorphism_add(H1 :=homomorphism_carry_F25519_64_decode)).
- generalize (Ring.homomorphism_sub(H1 :=homomorphism_carry_F25519_64_decode)).
- generalize mul; generalize carry_sub; generalize carry_add.
- intros carry_add' carry_sub' mul'.
- intros H0 H1 H2.
- repeat rewrite ?H2, ?H1, ?H0.
- reflexivity.
-Qed.
-
-Lemma fieldwise_eq_edwards_extended_add_coordinates_carry_nocarry td P Q :
- Tuple.fieldwise
- (n:=4) eq
- (edwards_extended_carry_add_coordinates td P Q)
- (edwards_extended_add_coordinates td P Q).
-Proof.
- pose proof (edwards_extended_carry_add_coordinates_correct td P Q) as H0.
- pose proof (edwards_extended_add_coordinates_correct td P Q) as H1.
- rewrite <- H0 in H1; clear H0.
- assert (Tuple.fieldwise
- (fun x y => x = y)
- (Tuple.map (n:=4) decode (edwards_extended_carry_add_coordinates td P Q))
- (Tuple.map (n:=4) decode (edwards_extended_add_coordinates td P Q)))
- by (rewrite H1; reflexivity).
- clear H1.
- destruct (edwards_extended_carry_add_coordinates td P Q), (edwards_extended_add_coordinates td P Q).
- destruct_head' prod; simpl; unfold eq; trivial.
-Qed.
diff --git a/src/SpecificGen/GF25519_64Reflective.v b/src/SpecificGen/GF25519_64Reflective.v
deleted file mode 100644
index 142c1e6ae..000000000
--- a/src/SpecificGen/GF25519_64Reflective.v
+++ /dev/null
@@ -1,118 +0,0 @@
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParams.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParamProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemOpt.
-Require Export Crypto.SpecificGen.GF25519_64.
-Require Import Crypto.SpecificGen.GF25519_64BoundedCommon.
-Require Import Crypto.Reflection.Reify.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.Map.
-Require Import Crypto.Reflection.Z.Interpretations128.
-Require Crypto.Reflection.Z.Interpretations128.Relations.
-Require Import Crypto.Reflection.Z.Interpretations128.RelationsCombinations.
-Require Import Crypto.Reflection.Z.Reify.
-Require Import Crypto.Reflection.Z.Syntax.
-Require Import Crypto.SpecificGen.GF25519_64Reflective.Common.
-Require Import Crypto.SpecificGen.GF25519_64Reflective.Reified.
-Require Import Bedrock.Word Crypto.Util.WordUtil.
-Require Import Coq.Lists.List Crypto.Util.ListUtil.
-Require Import Crypto.Tactics.VerdiTactics.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Notations.
-Require Import Crypto.Util.Bool.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Algebra.
-Import ListNotations.
-Require Import Coq.ZArith.ZArith Coq.ZArith.Zpower Coq.ZArith.ZArith Coq.ZArith.Znumtheory.
-Local Open Scope Z.
-
-Definition radd : ExprBinOp := Eval vm_compute in rcarry_addW.
-Definition rsub : ExprBinOp := Eval vm_compute in rcarry_subW.
-Definition rmul : ExprBinOp := Eval vm_compute in rmulW.
-Definition ropp : ExprUnOp := Eval vm_compute in rcarry_oppW.
-Definition rprefreeze : ExprUnOp := Eval vm_compute in rprefreezeW.
-Definition rge_modulus : ExprUnOpFEToZ := Eval vm_compute in rge_modulusW.
-Definition rpack : ExprUnOpFEToWire := Eval vm_compute in rpackW.
-Definition runpack : ExprUnOpWireToFE := Eval vm_compute in runpackW.
-
-Declare Reduction asm_interp
- := cbv beta iota delta
- [id
- interp_bexpr interp_uexpr interp_uexpr_FEToWire interp_uexpr_FEToZ interp_uexpr_WireToFE interp_9_4expr
- Eta.interp_flat_type_eta Eta.interp_flat_type_eta_gen
- radd rsub rmul ropp rprefreeze rge_modulus rpack runpack
- curry_binop_fe25519_64W curry_unop_fe25519_64W curry_unop_wire_digitsW curry_9op_fe25519_64W
- WordW.interp_op WordW.interp_base_type
- Z.interp_op Z.interp_base_type
- Z.Syntax.interp_op Z.Syntax.interp_base_type
- mapf_interp_flat_type WordW.interp_base_type word128ize
- Interp interp interp_flat_type interpf interpf_step interp_flat_type fst snd].
-Ltac asm_interp
- := cbv beta iota delta
- [id
- interp_bexpr interp_uexpr interp_uexpr_FEToWire interp_uexpr_FEToZ interp_uexpr_WireToFE interp_9_4expr
- Eta.interp_flat_type_eta Eta.interp_flat_type_eta_gen
- radd rsub rmul ropp rprefreeze rge_modulus rpack runpack
- curry_binop_fe25519_64W curry_unop_fe25519_64W curry_unop_wire_digitsW curry_9op_fe25519_64W
- WordW.interp_op WordW.interp_base_type
- Z.interp_op Z.interp_base_type
- Z.Syntax.interp_op Z.Syntax.interp_base_type
- mapf_interp_flat_type WordW.interp_base_type word128ize
- Interp interp interp_flat_type interpf interp_flat_type fst snd].
-
-
-Definition interp_radd : SpecificGen.GF25519_64BoundedCommon.fe25519_64W * SpecificGen.GF25519_64BoundedCommon.fe25519_64W -> SpecificGen.GF25519_64BoundedCommon.fe25519_64W
- := Eval asm_interp in interp_bexpr radd.
-(*Print interp_radd.*)
-Definition interp_radd_correct : interp_radd = interp_bexpr radd := eq_refl.
-Definition interp_rsub : SpecificGen.GF25519_64BoundedCommon.fe25519_64W * SpecificGen.GF25519_64BoundedCommon.fe25519_64W -> SpecificGen.GF25519_64BoundedCommon.fe25519_64W
- := Eval asm_interp in interp_bexpr rsub.
-(*Print interp_rsub.*)
-Definition interp_rsub_correct : interp_rsub = interp_bexpr rsub := eq_refl.
-Definition interp_rmul : SpecificGen.GF25519_64BoundedCommon.fe25519_64W * SpecificGen.GF25519_64BoundedCommon.fe25519_64W -> SpecificGen.GF25519_64BoundedCommon.fe25519_64W
- := Eval asm_interp in interp_bexpr rmul.
-(*Print interp_rmul.*)
-Definition interp_rmul_correct : interp_rmul = interp_bexpr rmul := eq_refl.
-Definition interp_ropp : SpecificGen.GF25519_64BoundedCommon.fe25519_64W -> SpecificGen.GF25519_64BoundedCommon.fe25519_64W
- := Eval asm_interp in interp_uexpr ropp.
-(*Print interp_ropp.*)
-Definition interp_ropp_correct : interp_ropp = interp_uexpr ropp := eq_refl.
-Definition interp_rprefreeze : SpecificGen.GF25519_64BoundedCommon.fe25519_64W -> SpecificGen.GF25519_64BoundedCommon.fe25519_64W
- := Eval asm_interp in interp_uexpr rprefreeze.
-(*Print interp_rprefreeze.*)
-Definition interp_rprefreeze_correct : interp_rprefreeze = interp_uexpr rprefreeze := eq_refl.
-
-Definition interp_rge_modulus : SpecificGen.GF25519_64BoundedCommon.fe25519_64W -> SpecificGen.GF25519_64BoundedCommon.word128
- := Eval asm_interp in interp_uexpr_FEToZ rge_modulus.
-Definition interp_rge_modulus_correct : interp_rge_modulus = interp_uexpr_FEToZ rge_modulus := eq_refl.
-
-Definition interp_rpack : SpecificGen.GF25519_64BoundedCommon.fe25519_64W -> SpecificGen.GF25519_64BoundedCommon.wire_digitsW
- := Eval asm_interp in interp_uexpr_FEToWire rpack.
-Definition interp_rpack_correct : interp_rpack = interp_uexpr_FEToWire rpack := eq_refl.
-
-Definition interp_runpack : SpecificGen.GF25519_64BoundedCommon.wire_digitsW -> SpecificGen.GF25519_64BoundedCommon.fe25519_64W
- := Eval asm_interp in interp_uexpr_WireToFE runpack.
-Definition interp_runpack_correct : interp_runpack = interp_uexpr_WireToFE runpack := eq_refl.
-
-Lemma radd_correct_and_bounded : binop_correct_and_bounded radd carry_add.
-Proof. exact rcarry_addW_correct_and_bounded. Qed.
-Lemma rsub_correct_and_bounded : binop_correct_and_bounded rsub carry_sub.
-Proof. exact rcarry_subW_correct_and_bounded. Qed.
-Lemma rmul_correct_and_bounded : binop_correct_and_bounded rmul mul.
-Proof. exact rmulW_correct_and_bounded. Qed.
-Lemma ropp_correct_and_bounded : unop_correct_and_bounded ropp carry_opp.
-Proof. exact rcarry_oppW_correct_and_bounded. Qed.
-Lemma rprefreeze_correct_and_bounded : unop_correct_and_bounded rprefreeze prefreeze.
-Proof. exact rprefreezeW_correct_and_bounded. Qed.
-Lemma rge_modulus_correct_and_bounded : unop_FEToZ_correct rge_modulus ge_modulus.
-Proof. exact rge_modulusW_correct_and_bounded. Qed.
-Lemma rpack_correct_and_bounded : unop_FEToWire_correct_and_bounded rpack pack.
-Proof. exact rpackW_correct_and_bounded. Qed.
-Lemma runpack_correct_and_bounded : unop_WireToFE_correct_and_bounded runpack unpack.
-Proof. exact runpackW_correct_and_bounded. Qed.
diff --git a/src/SpecificGen/GF25519_64Reflective/Common.v b/src/SpecificGen/GF25519_64Reflective/Common.v
deleted file mode 100644
index edb0c5fb1..000000000
--- a/src/SpecificGen/GF25519_64Reflective/Common.v
+++ /dev/null
@@ -1,668 +0,0 @@
-Require Export Coq.ZArith.ZArith.
-Require Export Coq.Strings.String.
-Require Export Crypto.SpecificGen.GF25519_64.
-Require Export Crypto.SpecificGen.GF25519_64BoundedCommon.
-Require Import Crypto.Reflection.Reify.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Reflection.Wf.
-Require Import Crypto.Reflection.ExprInversion.
-Require Import Crypto.Reflection.Tuple.
-Require Import Crypto.Reflection.Relations.
-Require Import Crypto.Reflection.Eta.
-Require Import Crypto.Reflection.Z.Interpretations128.
-Require Crypto.Reflection.Z.Interpretations128.Relations.
-Require Import Crypto.Reflection.Z.Interpretations128.RelationsCombinations.
-Require Import Crypto.Reflection.Z.Reify.
-Require Export Crypto.Reflection.Z.Syntax.
-Require Import Crypto.Reflection.Z.Syntax.Equality.
-Require Import Crypto.Reflection.InterpWfRel.
-Require Import Crypto.Reflection.WfReflective.
-Require Import Crypto.Util.Curry.
-Require Import Crypto.Util.Tower.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.ListUtil.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.Prod.
-Require Import Crypto.Util.Notations.
-
-Notation Expr := (Expr base_type op).
-
-Local Ltac make_type_from' T :=
- let T := (eval compute in T) in
- let rT := reify_type T in
- exact rT.
-Local Ltac make_type_from uncurried_op :=
- let T := (type of uncurried_op) in
- make_type_from' T.
-
-Definition fe25519_64T : flat_type base_type.
-Proof.
- let T := (eval compute in GF25519_64.fe25519_64) in
- let T := reify_flat_type T in
- exact T.
-Defined.
-Definition Expr_n_OpT (count_out : nat) : flat_type base_type
- := Eval cbv [Syntax.tuple Syntax.tuple' fe25519_64T] in
- Syntax.tuple fe25519_64T count_out.
-Definition Expr_nm_OpT (count_in count_out : nat) : type base_type
- := Eval cbv [Syntax.tuple Syntax.tuple' fe25519_64T Expr_n_OpT] in
- Arrow (Syntax.tuple fe25519_64T count_in) (Expr_n_OpT count_out).
-Definition ExprBinOpT : type base_type := Eval compute in Expr_nm_OpT 2 1.
-Definition ExprUnOpT : type base_type := Eval compute in Expr_nm_OpT 1 1.
-Definition ExprUnOpFEToZT : type base_type.
-Proof. make_type_from ge_modulus. Defined.
-Definition ExprUnOpWireToFET : type base_type.
-Proof. make_type_from unpack. Defined.
-Definition ExprUnOpFEToWireT : type base_type.
-Proof. make_type_from pack. Defined.
-Definition Expr4OpT : type base_type := Eval compute in Expr_nm_OpT 4 1.
-Definition Expr9_4OpT : type base_type := Eval compute in Expr_nm_OpT 9 4.
-Definition ExprArgT : flat_type base_type
- := Eval compute in domain ExprUnOpT.
-Definition ExprArgWireT : flat_type base_type
- := Eval compute in domain ExprUnOpWireToFET.
-Definition ExprZ : Type := Expr (Arrow Unit (Tbase TZ)).
-Definition ExprUnOpFEToZ : Type := Expr ExprUnOpFEToZT.
-Definition ExprUnOpWireToFE : Type := Expr ExprUnOpWireToFET.
-Definition ExprUnOpFEToWire : Type := Expr ExprUnOpFEToWireT.
-Definition Expr_nm_Op count_in count_out : Type := Expr (Expr_nm_OpT count_in count_out).
-Definition ExprBinOp : Type := Expr ExprBinOpT.
-Definition ExprUnOp : Type := Expr ExprUnOpT.
-Definition Expr4Op : Type := Expr Expr4OpT.
-Definition Expr9_4Op : Type := Expr Expr9_4OpT.
-Definition ExprArg : Type := Expr (Arrow Unit ExprArgT).
-Definition ExprArgWire : Type := Expr (Arrow Unit ExprArgWireT).
-Definition expr_nm_Op count_in count_out var : Type
- := expr base_type op (var:=var) (Expr_nm_OpT count_in count_out).
-Definition exprBinOp var : Type := expr base_type op (var:=var) ExprBinOpT.
-Definition exprUnOp var : Type := expr base_type op (var:=var) ExprUnOpT.
-Definition expr4Op var : Type := expr base_type op (var:=var) Expr4OpT.
-Definition expr9_4Op var : Type := expr base_type op (var:=var) Expr9_4OpT.
-Definition exprZ var : Type := expr base_type op (var:=var) (Arrow Unit (Tbase TZ)).
-Definition exprUnOpFEToZ var : Type := expr base_type op (var:=var) ExprUnOpFEToZT.
-Definition exprUnOpWireToFE var : Type := expr base_type op (var:=var) ExprUnOpWireToFET.
-Definition exprUnOpFEToWire var : Type := expr base_type op (var:=var) ExprUnOpFEToWireT.
-Definition exprArg var : Type := expr base_type op (var:=var) (Arrow Unit ExprArgT).
-Definition exprArgWire var : Type := expr base_type op (var:=var) (Arrow Unit ExprArgWireT).
-
-Definition make_bound (x : Z * Z) : ZBounds.t
- := Some {| Bounds.lower := fst x ; Bounds.upper := snd x |}.
-
-Fixpoint Expr_nm_Op_bounds count_in count_out {struct count_in} : interp_flat_type ZBounds.interp_base_type (domain (Expr_nm_OpT count_in count_out))
- := match count_in return interp_flat_type _ (domain (Expr_nm_OpT count_in count_out)) with
- | 0 => tt
- | S n
- => let b := (Tuple.map make_bound bounds) in
- let bs := Expr_nm_Op_bounds n count_out in
- match n return interp_flat_type _ (domain (Expr_nm_OpT n _)) -> interp_flat_type _ (domain (Expr_nm_OpT (S n) _)) with
- | 0 => fun _ => b
- | S n' => fun bs => (bs, b)
- end bs
- end.
-Definition ExprBinOp_bounds : interp_flat_type ZBounds.interp_base_type (domain ExprBinOpT)
- := Eval compute in Expr_nm_Op_bounds 2 1.
-Definition ExprUnOp_bounds : interp_flat_type ZBounds.interp_base_type (domain ExprUnOpT)
- := Eval compute in Expr_nm_Op_bounds 1 1.
-Definition ExprUnOpFEToZ_bounds : interp_flat_type ZBounds.interp_base_type (domain ExprUnOpFEToZT)
- := Eval compute in Expr_nm_Op_bounds 1 1.
-Definition ExprUnOpFEToWire_bounds : interp_flat_type ZBounds.interp_base_type (domain ExprUnOpFEToWireT)
- := Eval compute in Expr_nm_Op_bounds 1 1.
-Definition Expr4Op_bounds : interp_flat_type ZBounds.interp_base_type (domain Expr4OpT)
- := Eval compute in Expr_nm_Op_bounds 4 1.
-Definition Expr9Op_bounds : interp_flat_type ZBounds.interp_base_type (domain Expr9_4OpT)
- := Eval compute in Expr_nm_Op_bounds 9 4.
-Definition ExprUnOpWireToFE_bounds : interp_flat_type ZBounds.interp_base_type (domain ExprUnOpWireToFET)
- := Tuple.map make_bound wire_digit_bounds.
-
-Definition interp_bexpr : ExprBinOp -> SpecificGen.GF25519_64BoundedCommon.fe25519_64W * SpecificGen.GF25519_64BoundedCommon.fe25519_64W -> SpecificGen.GF25519_64BoundedCommon.fe25519_64W
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-Definition interp_uexpr : ExprUnOp -> SpecificGen.GF25519_64BoundedCommon.fe25519_64W -> SpecificGen.GF25519_64BoundedCommon.fe25519_64W
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-Definition interp_uexpr_FEToZ : ExprUnOpFEToZ -> SpecificGen.GF25519_64BoundedCommon.fe25519_64W -> SpecificGen.GF25519_64BoundedCommon.word128
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-Definition interp_uexpr_FEToWire : ExprUnOpFEToWire -> SpecificGen.GF25519_64BoundedCommon.fe25519_64W -> SpecificGen.GF25519_64BoundedCommon.wire_digitsW
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-Definition interp_uexpr_WireToFE : ExprUnOpWireToFE -> SpecificGen.GF25519_64BoundedCommon.wire_digitsW -> SpecificGen.GF25519_64BoundedCommon.fe25519_64W
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-Definition interp_9_4expr : Expr9_4Op
- -> Tuple.tuple SpecificGen.GF25519_64BoundedCommon.fe25519_64W 9
- -> Tuple.tuple SpecificGen.GF25519_64BoundedCommon.fe25519_64W 4
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-
-Notation binop_correct_and_bounded rop op
- := (ibinop_correct_and_bounded (interp_bexpr rop) (curry2 op)) (only parsing).
-Notation unop_correct_and_bounded rop op
- := (iunop_correct_and_bounded (interp_uexpr rop) op) (only parsing).
-Notation unop_FEToZ_correct rop op
- := (iunop_FEToZ_correct (interp_uexpr_FEToZ rop) op) (only parsing).
-Notation unop_FEToWire_correct_and_bounded rop op
- := (iunop_FEToWire_correct_and_bounded (interp_uexpr_FEToWire rop) op) (only parsing).
-Notation unop_WireToFE_correct_and_bounded rop op
- := (iunop_WireToFE_correct_and_bounded (interp_uexpr_WireToFE rop) op) (only parsing).
-Notation op9_4_correct_and_bounded rop op
- := (i9top_correct_and_bounded 4 (interp_9_4expr rop) op) (only parsing).
-
-Ltac rexpr_cbv :=
- lazymatch goal with
- | [ |- { rexpr | forall x, Interp _ (t:=?T) rexpr x = ?uncurry ?oper x } ]
- => let operf := head oper in
- let uncurryf := head uncurry in
- try cbv delta [T]; try cbv delta [oper];
- try cbv beta iota delta [uncurryf]
- | [ |- { rexpr | forall x, Interp _ (t:=?T) rexpr x = ?oper x } ]
- => let operf := head oper in
- try cbv delta [T]; try cbv delta [oper]
- end;
- cbv beta iota delta [interp_flat_type interp_base_type zero_ GF25519_64.fe25519_64 GF25519_64.wire_digits].
-
-Ltac reify_sig :=
- rexpr_cbv; eexists; Reify_rhs; reflexivity.
-
-Local Notation rexpr_sig T uncurried_op :=
- { rexprZ
- | forall x, Interp interp_op (t:=T) rexprZ x = uncurried_op x }
- (only parsing).
-
-Notation rexpr_binop_sig op := (rexpr_sig ExprBinOpT (curry2 op)) (only parsing).
-Notation rexpr_unop_sig op := (rexpr_sig ExprUnOpT op) (only parsing).
-Notation rexpr_unop_FEToZ_sig op := (rexpr_sig ExprUnOpFEToZT op) (only parsing).
-Notation rexpr_unop_FEToWire_sig op := (rexpr_sig ExprUnOpFEToWireT op) (only parsing).
-Notation rexpr_unop_WireToFE_sig op := (rexpr_sig ExprUnOpWireToFET op) (only parsing).
-Notation rexpr_9_4op_sig op := (rexpr_sig Expr9_4OpT op) (only parsing).
-
-Notation correct_and_bounded_genT ropW'v ropZ_sigv
- := (let ropW' := ropW'v in
- let ropZ_sig := ropZ_sigv in
- ropW' = proj1_sig ropZ_sig
- /\ interp_type_rel_pointwise Relations.related_Z (Interp (@BoundedWordW.interp_op) ropW') (Interp (@Z.interp_op) ropW')
- /\ interp_type_rel_pointwise Relations.related_bounds (Interp (@BoundedWordW.interp_op) ropW') (Interp (@ZBounds.interp_op) ropW')
- /\ interp_type_rel_pointwise Relations.related_wordW (Interp (@BoundedWordW.interp_op) ropW') (Interp (@WordW.interp_op) ropW'))
- (only parsing).
-
-Ltac app_tuples x y :=
- let tx := type of x in
- lazymatch (eval hnf in tx) with
- | prod _ _ => let xs := app_tuples (snd x) y in
- constr:((fst x, xs))
- | _ => constr:((x, y))
- end.
-
-Local Arguments Tuple.map2 : simpl never.
-Local Arguments Tuple.map : simpl never.
-(*
-Fixpoint args_to_bounded_helperT {n}
- (v : Tuple.tuple' WordW.wordW n)
- (bounds : Tuple.tuple' (Z * Z) n)
- (pf : List.fold_right
- andb true
- (Tuple.to_list
- _
- (Tuple.map2
- (n:=S n)
- (fun bounds v =>
- let '(lower, upper) := bounds in ((lower <=? v)%Z && (v <=? upper)%Z)%bool)
- bounds
- (Tuple.map (n:=S n) WordW.wordWToZ v))) = true)
- (res : Type)
- {struct n}
- : Type.
-Proof.
- refine (match n return (forall (v : Tuple.tuple' _ n) (bounds : Tuple.tuple' _ n),
- List.fold_right
- _ _ (Tuple.to_list
- _
- (Tuple.map2 (n:=S n) _ bounds (Tuple.map (n:=S n) _ v))) = true
- -> Type)
- with
- | 0 => fun v' bounds' pf0 => forall pf1 : (0 <= fst bounds' /\ Z.log2 (snd bounds') < Z.of_nat WordW.bit_width)%Z, res
- | S n' => fun v' bounds' pf0 => let t := _ in
- forall pf1 : (0 <= fst (snd bounds') /\ Z.log2 (snd (snd bounds')) < Z.of_nat WordW.bit_width)%Z, @args_to_bounded_helperT n' (fst v') (fst bounds') t res
- end v bounds pf).
- { clear -pf0.
- abstract (
- destruct v', bounds'; simpl @fst;
- rewrite Tuple.map_S in pf0;
- simpl in pf0;
- rewrite Tuple.map2_S in pf0;
- simpl @List.fold_right in *;
- rewrite Bool.andb_true_iff in pf0; tauto
- ). }
-Defined.
-
-Fixpoint args_to_bounded_helper {n} res
- {struct n}
- : forall v bounds pf, (Tuple.tuple' BoundedWordW.BoundedWord n -> res) -> @args_to_bounded_helperT n v bounds pf res.
-Proof.
- refine match n return (forall v bounds pf, (Tuple.tuple' BoundedWordW.BoundedWord n -> res) -> @args_to_bounded_helperT n v bounds pf res) with
- | 0 => fun v bounds pf f pf' => f {| BoundedWord.lower := fst bounds ; BoundedWord.value := v ; BoundedWord.upper := snd bounds |}
- | S n'
- => fun v bounds pf f pf'
- => @args_to_bounded_helper
- n' res (fst v) (fst bounds) _
- (fun ts => f (ts, {| BoundedWord.lower := fst (snd bounds) ; BoundedWord.value := snd v ; BoundedWord.upper := snd (snd bounds) |}))
- end.
- { clear -pf pf'.
- unfold Tuple.map2, Tuple.map in pf; simpl in *.
- abstract (
- destruct bounds;
- simpl in *;
- rewrite !Bool.andb_true_iff in pf;
- destruct_head' and;
- Z.ltb_to_lt; auto
- ). }
- { simpl in *.
- clear -pf pf'.
- abstract (
- destruct bounds as [? [? ?] ], v; simpl in *;
- rewrite Tuple.map_S in pf; simpl in pf; rewrite Tuple.map2_S in pf;
- simpl in pf;
- rewrite !Bool.andb_true_iff in pf;
- destruct_head' and;
- Z.ltb_to_lt; auto
- ). }
-Defined.
-*)
-
-Definition assoc_right''
- := Eval cbv [Tuple.assoc_right' Tuple.rsnoc' fst snd] in @Tuple.assoc_right'.
-(*
-Definition args_to_bounded {n} v bounds pf
- := Eval cbv [args_to_bounded_helper assoc_right''] in
- @args_to_bounded_helper n _ v bounds pf (@assoc_right'' _ _).
-*)
-Local Ltac get_len T :=
- match (eval hnf in T) with
- | prod ?A ?B
- => let a := get_len A in
- let b := get_len B in
- (eval compute in (a + b)%nat)
- | _ => constr:(1%nat)
- end.
-
-Ltac assoc_right_tuple x so_far :=
- let t := type of x in
- lazymatch (eval hnf in t) with
- | prod _ _ => let so_far := assoc_right_tuple (snd x) so_far in
- assoc_right_tuple (fst x) so_far
- | _ => lazymatch so_far with
- | @None => x
- | _ => constr:((x, so_far))
- end
- end.
-
-(*
-Local Ltac make_args x :=
- let x' := fresh "x'" in
- compute in x |- *;
- let t := match type of x with @expr _ _ _ (Tflat ?t) => t end in
- let t' := match goal with |- @expr _ _ _ (Tflat ?t) => t end in
- refine (LetIn (invert_Return x) _);
- let x'' := fresh "x''" in
- intro x'';
- let xv := assoc_right_tuple x'' (@None) in
- refine (SmartVarf (xv : interp_flat_type _ t')).
-
-Local Ltac args_to_bounded x H :=
- let x' := fresh in
- set (x' := x);
- compute in x;
- let len := (let T := type of x in get_len T) in
- destruct_head' prod;
- let c := constr:(args_to_bounded (n:=pred len) x' _ H) in
- let bounds := lazymatch c with args_to_bounded _ ?bounds _ => bounds end in
- let c := (eval cbv [domain ExprUnOpT interp_flat_type args_to_bounded bounds pred fst snd] in c) in
- apply c; compute; clear;
- try abstract (
- repeat split;
- solve [ reflexivity
- | refine (fun v => match v with eq_refl => I end) ]
- ).
- *)
-
-Section gen.
- Definition bounds_are_good_gen
- {n : nat} (bounds : Tuple.tuple (Z * Z) n)
- := let res :=
- Tuple.map (fun bs => let '(lower, upper) := bs in ((0 <=? lower)%Z && (Z.log2 upper <? Z.of_nat WordW.bit_width)%Z)%bool) bounds
- in
- List.fold_right andb true (Tuple.to_list n res).
- Definition unop_args_to_bounded'
- (bs : Z * Z)
- (Hbs : bounds_are_good_gen (n:=1) bs = true)
- (x : word128)
- (H : is_bounded_gen (Tuple.map (fun v : word128 => (v : Z)) (n:=1) x) bs = true)
- : BoundedWordW.BoundedWord.
- Proof.
- refine {| BoundedWord.lower := fst bs ; BoundedWord.value := x ; BoundedWord.upper := snd bs |}.
- unfold bounds_are_good_gen, is_bounded_gen, Tuple.map, Tuple.map2 in *; simpl in *.
- abstract (
- destruct bs; Bool.split_andb; Z.ltb_to_lt; simpl;
- repeat apply conj; assumption
- ).
- Defined.
- Fixpoint n_op_args_to_bounded'
- n
- : forall (bs : Tuple.tuple' (Z * Z) n)
- (Hbs : bounds_are_good_gen (n:=S n) bs = true)
- (x : Tuple.tuple' word128 n)
- (H : is_bounded_gen (Tuple.eta_tuple (Tuple.map (n:=S n) (fun v : word128 => v : Z)) x) bs = true),
- interp_flat_type (fun _ => BoundedWordW.BoundedWord) (Syntax.tuple' (Tbase TZ) n).
- Proof.
- destruct n as [|n']; simpl in *.
- { exact unop_args_to_bounded'. }
- { refine (fun bs Hbs x H
- => (@n_op_args_to_bounded' n' (fst bs) _ (fst x) _,
- @unop_args_to_bounded' (snd bs) _ (snd x) _));
- clear n_op_args_to_bounded';
- simpl in *;
- [ clear x H | clear Hbs | clear x H | clear Hbs ];
- unfold bounds_are_good_gen, is_bounded_gen in *;
- abstract (
- repeat first [ progress simpl in *
- | assumption
- | reflexivity
- | progress Bool.split_andb
- | progress destruct_head prod
- | match goal with
- | [ H : _ |- _ ] => progress rewrite ?Tuple.map_S, ?Tuple.map2_S, ?Tuple.strip_eta_tuple'_dep in H
- end
- | progress rewrite ?Tuple.map_S, ?Tuple.map2_S, ?Tuple.strip_eta_tuple'_dep
- | progress break_match_hyps
- | rewrite Bool.andb_true_iff; apply conj
- | unfold Tuple.map, Tuple.map2; simpl; rewrite Bool.andb_true_iff; apply conj ]
- ). }
- Defined.
-
- Definition n_op_args_to_bounded
- n
- : forall (bs : Tuple.tuple (Z * Z) n)
- (Hbs : bounds_are_good_gen bs = true)
- (x : Tuple.tuple word128 n)
- (H : is_bounded_gen (Tuple.eta_tuple (Tuple.map (fun v : word128 => v : Z)) x) bs = true),
- interp_flat_type (fun _ => BoundedWordW.BoundedWord) (Syntax.tuple (Tbase TZ) n)
- := match n with
- | 0 => fun _ _ _ _ => tt
- | S n' => @n_op_args_to_bounded' n'
- end.
-
- Fixpoint nm_op_args_to_bounded' n m
- (bs : Tuple.tuple (Z * Z) m)
- (Hbs : bounds_are_good_gen bs = true)
- : forall (x : interp_flat_type (fun _ => Tuple.tuple word128 m) (Syntax.tuple' (Tbase TZ) n))
- (H : SmartVarfPropMap (fun _ x => is_bounded_gen (Tuple.eta_tuple (Tuple.map (fun v : word128 => v : Z)) x) bs = true)
- x),
- interp_flat_type (fun _ => BoundedWordW.BoundedWord) (Syntax.tuple' (Syntax.tuple (Tbase TZ) m) n)
- := match n with
- | 0 => @n_op_args_to_bounded m bs Hbs
- | S n' => fun x H
- => (@nm_op_args_to_bounded' n' m bs Hbs (fst x) (proj1 H),
- @n_op_args_to_bounded m bs Hbs (snd x) (proj2 H))
- end.
- Definition nm_op_args_to_bounded n m
- (bs : Tuple.tuple (Z * Z) m)
- (Hbs : bounds_are_good_gen bs = true)
- : forall (x : interp_flat_type (fun _ => Tuple.tuple word128 m) (Syntax.tuple (Tbase TZ) n))
- (H : SmartVarfPropMap (fun _ x => is_bounded_gen (Tuple.eta_tuple (Tuple.map (fun v : word128 => v : Z)) x) bs = true)
- x),
- interp_flat_type (fun _ => BoundedWordW.BoundedWord) (Syntax.tuple (Syntax.tuple (Tbase TZ) m) n)
- := match n with
- | 0 => fun _ _ => tt
- | S n' => @nm_op_args_to_bounded' n' m bs Hbs
- end.
-End gen.
-
-Local Ltac get_inner_len T :=
- lazymatch T with
- | (?T * _)%type => get_inner_len T
- | ?T => get_len T
- end.
-Local Ltac get_outer_len T :=
- lazymatch T with
- | (?A * ?B)%type => let a := get_outer_len A in
- let b := get_outer_len B in
- (eval compute in (a + b)%nat)
- | ?T => constr:(1%nat)
- end.
-Local Ltac args_to_bounded x H :=
- let t := type of x in
- let m := get_inner_len t in
- let n := get_outer_len t in
- let H := constr:(fun Hbs => @nm_op_args_to_bounded n m _ Hbs x H) in
- let H := (eval cbv beta in (H eq_refl)) in
- exact H.
-
-Definition binop_args_to_bounded (x : fe25519_64W * fe25519_64W)
- (H : is_bounded (fe25519_64WToZ (fst x)) = true)
- (H' : is_bounded (fe25519_64WToZ (snd x)) = true)
- : interp_flat_type (fun _ => BoundedWordW.BoundedWord) (domain ExprBinOpT).
-Proof. args_to_bounded x (conj H H'). Defined.
-Definition unop_args_to_bounded (x : fe25519_64W) (H : is_bounded (fe25519_64WToZ x) = true)
- : interp_flat_type (fun _ => BoundedWordW.BoundedWord) (domain ExprUnOpT).
-Proof. args_to_bounded x H. Defined.
-Definition unopWireToFE_args_to_bounded (x : wire_digitsW) (H : wire_digits_is_bounded (wire_digitsWToZ x) = true)
- : interp_flat_type (fun _ => BoundedWordW.BoundedWord) (domain ExprUnOpWireToFET).
-Proof. args_to_bounded x H. Defined.
-Definition op9_args_to_bounded (x : fe25519_64W * fe25519_64W * fe25519_64W * fe25519_64W * fe25519_64W * fe25519_64W * fe25519_64W * fe25519_64W * fe25519_64W)
- (H0 : is_bounded (fe25519_64WToZ (fst (fst (fst (fst (fst (fst (fst (fst x))))))))) = true)
- (H1 : is_bounded (fe25519_64WToZ (snd (fst (fst (fst (fst (fst (fst (fst x))))))))) = true)
- (H2 : is_bounded (fe25519_64WToZ (snd (fst (fst (fst (fst (fst (fst x)))))))) = true)
- (H3 : is_bounded (fe25519_64WToZ (snd (fst (fst (fst (fst (fst x))))))) = true)
- (H4 : is_bounded (fe25519_64WToZ (snd (fst (fst (fst (fst x)))))) = true)
- (H5 : is_bounded (fe25519_64WToZ (snd (fst (fst (fst x))))) = true)
- (H6 : is_bounded (fe25519_64WToZ (snd (fst (fst x)))) = true)
- (H7 : is_bounded (fe25519_64WToZ (snd (fst x))) = true)
- (H8 : is_bounded (fe25519_64WToZ (snd x)) = true)
- : interp_flat_type (fun _ => BoundedWordW.BoundedWord) (domain Expr9_4OpT).
-Proof. args_to_bounded x (conj (conj (conj (conj (conj (conj (conj (conj H0 H1) H2) H3) H4) H5) H6) H7) H8). Defined.
-Local Ltac make_bounds_prop' bounds bounds' :=
- first [ refine (andb _ _);
- [ destruct bounds' as [bounds' _], bounds as [bounds _]
- | destruct bounds' as [_ bounds'], bounds as [_ bounds] ];
- try make_bounds_prop' bounds bounds'
- | exact (match bounds' with
- | Some bounds' => let (l, u) := bounds in
- let (l', u') := bounds' in
- ((l' <=? l) && (u <=? u'))%Z%bool
- | None => false
- end) ].
-Local Ltac make_bounds_prop bounds orig_bounds :=
- let bounds' := fresh "bounds'" in
- pose orig_bounds as bounds';
- make_bounds_prop' bounds bounds'.
-Definition unop_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain ExprUnOpT)) : bool.
-Proof. make_bounds_prop bounds ExprUnOp_bounds. Defined.
-Definition binop_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain ExprBinOpT)) : bool.
-Proof. make_bounds_prop bounds ExprUnOp_bounds. Defined.
-Definition unopFEToWire_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain ExprUnOpFEToWireT)) : bool.
-Proof. make_bounds_prop bounds ExprUnOpWireToFE_bounds. Defined.
-Definition unopWireToFE_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain ExprUnOpWireToFET)) : bool.
-Proof. make_bounds_prop bounds ExprUnOp_bounds. Defined.
-(* TODO FIXME(jgross?, andreser?): Is every function returning a single Z a boolean function? *)
-Definition unopFEToZ_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain ExprUnOpFEToZT)) : bool.
-Proof.
- refine (let (l, u) := bounds in ((0 <=? l) && (u <=? 1))%Z%bool).
-Defined.
-Definition op9_4_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain Expr9_4OpT)) : bool.
-Proof. make_bounds_prop bounds Expr4Op_bounds. Defined.
-(*Definition ApplyUnOp {var} (f : exprUnOp var) : exprArg var -> exprArg var
- := fun x
- => LetIn (invert_Return (unop_make_args x))
- (fun k => invert_Return (Apply length_fe25519_64 f k)).
-Definition ApplyBinOp {var} (f : exprBinOp var) : exprArg var -> exprArg var -> exprArg var
- := fun x y
- => LetIn (invert_Return (unop_make_args x))
- (fun x'
- => LetIn (invert_Return (unop_make_args y))
- (fun y'
- => invert_Return (Apply length_fe25519_64
- (Apply length_fe25519_64
- f x') y'))).
-Definition ApplyUnOpFEToWire {var} (f : exprUnOpFEToWire var) : exprArg var -> exprArgWire var
- := fun x
- => LetIn (invert_Return (unop_make_args x))
- (fun k => invert_Return (Apply length_fe25519_64 f k)).
-Definition ApplyUnOpWireToFE {var} (f : exprUnOpWireToFE var) : exprArgWire var -> exprArg var
- := fun x
- => LetIn (invert_Return (unop_wire_make_args x))
- (fun k => invert_Return (Apply (List.length wire_widths) f k)).
-Definition ApplyUnOpFEToZ {var} (f : exprUnOpFEToZ var) : exprArg var -> exprZ var
- := fun x
- => LetIn (invert_Return (unop_make_args x))
- (fun k => invert_Return (Apply length_fe25519_64 f k)).
-*)
-
-(* FIXME TODO(jgross): This is a horrible tactic. We should unify the
- various kinds of correct and boundedness, and abstract in Gallina
- rather than Ltac *)
-Ltac t_correct_and_bounded ropZ_sig Hbounds H0 H1 args :=
- let Heq := fresh "Heq" in
- let Hbounds0 := fresh "Hbounds0" in
- let Hbounds1 := fresh "Hbounds1" in
- let Hbounds2 := fresh "Hbounds2" in
- pose proof (proj2_sig ropZ_sig) as Heq;
- cbv [interp_bexpr interp_uexpr interp_uexpr_FEToWire interp_uexpr_FEToZ interp_uexpr_WireToFE interp_9_4expr
- interp_flat_type_eta interp_flat_type_eta_gen
- curry_binop_fe25519_64W curry_unop_fe25519_64W curry_unop_wire_digitsW curry_9op_fe25519_64W
- curry_binop_fe25519_64 curry_unop_fe25519_64 curry_unop_wire_digits curry_9op_fe25519_64
- uncurry_binop_fe25519_64W uncurry_unop_fe25519_64W uncurry_unop_wire_digitsW uncurry_9op_fe25519_64W
- uncurry_binop_fe25519_64 uncurry_unop_fe25519_64 uncurry_unop_wire_digits uncurry_9op_fe25519_64
- ExprBinOpT ExprUnOpFEToWireT ExprUnOpT ExprUnOpFEToZT ExprUnOpWireToFET Expr9_4OpT Expr4OpT] in *;
- cbv zeta in *;
- simpl @fe25519_64WToZ; simpl @wire_digitsWToZ;
- rewrite <- Heq; clear Heq;
- destruct Hbounds as [Heq Hbounds];
- change interp_op with (@Z.interp_op) in *;
- change interp_base_type with (@Z.interp_base_type) in *;
- change word128 with WordW.wordW in *;
- rewrite <- Heq; clear Heq;
- destruct Hbounds as [ Hbounds0 [Hbounds1 Hbounds2] ];
- pose proof (fun pf => Relations.uncurry_interp_type_rel_pointwise_proj_from_option2 WordW.to_Z pf Hbounds2 Hbounds0) as Hbounds_left;
- pose proof (fun pf => Relations.uncurry_interp_type_rel_pointwise_proj1_from_option2 Relations.related_wordW_boundsi' pf Hbounds1 Hbounds2) as Hbounds_right;
- specialize_by repeat first [ progress intros
- | progress unfold RelationClasses.Reflexive
- | reflexivity
- | assumption
- | progress destruct_head' base_type
- | progress destruct_head' BoundedWordW.BoundedWord
- | progress destruct_head' and
- | progress repeat apply conj ];
- specialize (Hbounds_left args H0);
- specialize (Hbounds_right args H0);
- cbv beta in *;
- lazymatch type of Hbounds_right with
- | match ?e with _ => _ end
- => lazymatch type of H1 with
- | match ?e' with _ => _ end
- => change e' with e in H1; destruct e eqn:?; [ | exfalso; assumption ]
- end
- end;
- repeat match goal with x := _ |- _ => subst x end;
- cbv [id
- binop_args_to_bounded unop_args_to_bounded unopWireToFE_args_to_bounded op9_args_to_bounded
- Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list
- Relations.proj_eq_rel SmartVarfMap interp_flat_type smart_interp_flat_map domain fst snd BoundedWordW.to_wordW' BoundedWordW.boundedWordToWordW BoundedWord.value Relations.related_wordW_boundsi' Relations.related'_wordW_bounds Bounds.upper Bounds.lower codomain WordW.to_Z nm_op_args_to_bounded nm_op_args_to_bounded' n_op_args_to_bounded n_op_args_to_bounded' unop_args_to_bounded' Relations.interp_flat_type_rel_pointwise Relations.interp_flat_type_rel_pointwise_gen_Prop] in Hbounds_left, Hbounds_right;
- simpl @interp_flat_type in *;
- (let v := (eval unfold WordW.interp_base_type in (WordW.interp_base_type TZ)) in
- change (WordW.interp_base_type TZ) with v in *);
- cbv beta iota zeta in *;
- lazymatch goal with
- | [ |- fe25519_64WToZ ?x = _ /\ _ ]
- => generalize dependent x; intros
- | [ |- wire_digitsWToZ ?x = _ /\ _ ]
- => generalize dependent x; intros
- | [ |- (Tuple.map fe25519_64WToZ ?x = _) /\ _ ]
- => generalize dependent x; intros
- | [ |- ((Tuple.map fe25519_64WToZ ?x = _) * _)%type ]
- => generalize dependent x; intros
- | [ |- _ = _ ]
- => exact Hbounds_left
- end;
- cbv [interp_type interp_type_gen interp_type_gen_hetero interp_flat_type WordW.interp_base_type codomain] in *;
- destruct_head' prod;
- change word128ToZ with WordW.wordWToZ in *;
- (split; [ exact Hbounds_left | ]);
- cbv [interp_flat_type] in *;
- cbv [fst snd
- Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list Tuple.from_list'
- make_bound
- Datatypes.length wire_widths wire_digit_bounds PseudoMersenneBaseParams.limb_widths bounds
- binop_bounds_good unop_bounds_good unopFEToWire_bounds_good unopWireToFE_bounds_good unopFEToZ_bounds_good op9_4_bounds_good
- ExprUnOp_bounds ExprBinOp_bounds ExprUnOpFEToWire_bounds ExprUnOpFEToZ_bounds ExprUnOpWireToFE_bounds Expr9Op_bounds Expr4Op_bounds] in H1;
- destruct_head' ZBounds.bounds;
- unfold_is_bounded_in H1;
- simpl @fe25519_64WToZ; simpl @wire_digitsWToZ;
- destruct_head' and;
- Z.ltb_to_lt;
- change WordW.wordWToZ with word128ToZ in *;
- cbv [Tuple.map HList.hlist Tuple.on_tuple Tuple.from_list Tuple.from_list' Tuple.to_list Tuple.to_list' List.map HList.hlist' fst snd fe25519_64WToZ HList.hlistP HList.hlistP'];
- cbv [WordW.bit_width BitSize128.bit_width Z.of_nat Pos.of_succ_nat Pos.succ] in *;
- repeat split; unfold_is_bounded;
- Z.ltb_to_lt;
- try omega; try reflexivity.
-
-Ltac rexpr_correct :=
- let ropW' := fresh in
- let ropZ_sig := fresh in
- intros ropW' ropZ_sig;
- let wf_ropW := fresh "wf_ropW" in
- assert (wf_ropW : Wf ropW') by (subst ropW' ropZ_sig; reflect_Wf base_type_eq_semidec_is_dec op_beq_bl);
- cbv zeta; repeat apply conj;
- [ vm_compute; reflexivity
- | apply @InterpWf;
- [ | apply wf_ropW ].. ];
- auto with interp_related.
-
-Notation rword_of_Z rexprZ_sig := (proj1_sig rexprZ_sig) (only parsing).
-
-Notation compute_bounds opW bounds
- := (Interp (@ZBounds.interp_op) opW bounds)
- (only parsing).
-
-Notation rexpr_wfT e := (Wf.Wf e) (only parsing).
-
-Ltac prove_rexpr_wfT
- := reflect_Wf Equality.base_type_eq_semidec_is_dec Equality.op_beq_bl.
-
-Module Export PrettyPrinting.
- (* We add [enlargen] to force [bounds_on] to be in [Type] in 8.4 and
- 8.5/8.6. Because [Set] is special and things break if
- [bounds_on] ends up in [Set] for reasons jgross hasn't bothered
- to debug. *)
- Inductive bounds_on := overflow | in_range (lower upper : Z) | enlargen (_ : Set).
-
- Inductive result := yes | no | borked.
-
- Definition ZBounds_to_bounds_on
- := fun (t : base_type) (x : ZBounds.interp_base_type t)
- => match x with
- | Some {| Bounds.lower := l ; Bounds.upper := u |}
- => in_range l u
- | None
- => overflow
- end.
-
- Fixpoint does_it_overflow {t} : interp_flat_type (fun t : base_type => bounds_on) t -> result
- := match t return interp_flat_type _ t -> result with
- | Tbase _ => fun v => match v with
- | overflow => yes
- | in_range _ _ => no
- | enlargen _ => borked
- end
- | Unit => fun _ => no
- | Prod x y => fun v => match @does_it_overflow _ (fst v), @does_it_overflow _ (snd v) with
- | no, no => no
- | yes, no | no, yes | yes, yes => yes
- | borked, _ | _, borked => borked
- end
- end.
-
- (** This gives a slightly easier to read version of the bounds *)
- Notation compute_bounds_for_display opW bounds
- := (SmartVarfMap ZBounds_to_bounds_on (compute_bounds opW bounds)) (only parsing).
- Notation sanity_compute opW bounds
- := (does_it_overflow (SmartVarfMap ZBounds_to_bounds_on (compute_bounds opW bounds))) (only parsing).
- Notation sanity_check opW bounds
- := (eq_refl (sanity_compute opW bounds) <: no = no) (only parsing).
-End PrettyPrinting.
diff --git a/src/SpecificGen/GF25519_64Reflective/Common9_4Op.v b/src/SpecificGen/GF25519_64Reflective/Common9_4Op.v
deleted file mode 100644
index a1443cefa..000000000
--- a/src/SpecificGen/GF25519_64Reflective/Common9_4Op.v
+++ /dev/null
@@ -1,102 +0,0 @@
-Require Export Crypto.SpecificGen.GF25519_64Reflective.Common.
-Require Import Crypto.SpecificGen.GF25519_64BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations128.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Local Notation eta_and x := (let (a, b) := x in a, let (a, b) := x in b) (only parsing).
-Lemma Expr9_4Op_correct_and_bounded
- ropW op (ropZ_sig : rexpr_9_4op_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall x012345678
- (x012345678
- := (eta_fe25519_64W (fst (fst (fst (fst (fst (fst (fst (fst x012345678)))))))),
- eta_fe25519_64W (snd (fst (fst (fst (fst (fst (fst (fst x012345678)))))))),
- eta_fe25519_64W (snd (fst (fst (fst (fst (fst (fst x012345678))))))),
- eta_fe25519_64W (snd (fst (fst (fst (fst (fst x012345678)))))),
- eta_fe25519_64W (snd (fst (fst (fst (fst x012345678))))),
- eta_fe25519_64W (snd (fst (fst (fst x012345678)))),
- eta_fe25519_64W (snd (fst (fst x012345678))),
- eta_fe25519_64W (snd (fst x012345678)),
- eta_fe25519_64W (snd x012345678)))
- (Hx012345678
- : is_bounded (fe25519_64WToZ (fst (fst (fst (fst (fst (fst (fst (fst x012345678))))))))) = true
- /\ is_bounded (fe25519_64WToZ (snd (fst (fst (fst (fst (fst (fst (fst x012345678))))))))) = true
- /\ is_bounded (fe25519_64WToZ (snd (fst (fst (fst (fst (fst (fst x012345678)))))))) = true
- /\ is_bounded (fe25519_64WToZ (snd (fst (fst (fst (fst (fst x012345678))))))) = true
- /\ is_bounded (fe25519_64WToZ (snd (fst (fst (fst (fst x012345678)))))) = true
- /\ is_bounded (fe25519_64WToZ (snd (fst (fst (fst x012345678))))) = true
- /\ is_bounded (fe25519_64WToZ (snd (fst (fst x012345678)))) = true
- /\ is_bounded (fe25519_64WToZ (snd (fst x012345678))) = true
- /\ is_bounded (fe25519_64WToZ (snd x012345678)) = true),
- let (Hx0, Hx12345678) := (eta_and Hx012345678) in
- let (Hx1, Hx2345678) := (eta_and Hx12345678) in
- let (Hx2, Hx345678) := (eta_and Hx2345678) in
- let (Hx3, Hx45678) := (eta_and Hx345678) in
- let (Hx4, Hx5678) := (eta_and Hx45678) in
- let (Hx5, Hx678) := (eta_and Hx5678) in
- let (Hx6, Hx78) := (eta_and Hx678) in
- let (Hx7, Hx8) := (eta_and Hx78) in
- let args := op9_args_to_bounded x012345678 Hx0 Hx1 Hx2 Hx3 Hx4 Hx5 Hx6 Hx7 Hx8 in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall x012345678
- (x012345678
- := (eta_fe25519_64W (fst (fst (fst (fst (fst (fst (fst (fst x012345678)))))))),
- eta_fe25519_64W (snd (fst (fst (fst (fst (fst (fst (fst x012345678)))))))),
- eta_fe25519_64W (snd (fst (fst (fst (fst (fst (fst x012345678))))))),
- eta_fe25519_64W (snd (fst (fst (fst (fst (fst x012345678)))))),
- eta_fe25519_64W (snd (fst (fst (fst (fst x012345678))))),
- eta_fe25519_64W (snd (fst (fst (fst x012345678)))),
- eta_fe25519_64W (snd (fst (fst x012345678))),
- eta_fe25519_64W (snd (fst x012345678)),
- eta_fe25519_64W (snd x012345678)))
- (Hx012345678
- : is_bounded (fe25519_64WToZ (fst (fst (fst (fst (fst (fst (fst (fst x012345678))))))))) = true
- /\ is_bounded (fe25519_64WToZ (snd (fst (fst (fst (fst (fst (fst (fst x012345678))))))))) = true
- /\ is_bounded (fe25519_64WToZ (snd (fst (fst (fst (fst (fst (fst x012345678)))))))) = true
- /\ is_bounded (fe25519_64WToZ (snd (fst (fst (fst (fst (fst x012345678))))))) = true
- /\ is_bounded (fe25519_64WToZ (snd (fst (fst (fst (fst x012345678)))))) = true
- /\ is_bounded (fe25519_64WToZ (snd (fst (fst (fst x012345678))))) = true
- /\ is_bounded (fe25519_64WToZ (snd (fst (fst x012345678)))) = true
- /\ is_bounded (fe25519_64WToZ (snd (fst x012345678))) = true
- /\ is_bounded (fe25519_64WToZ (snd x012345678)) = true),
- let (Hx0, Hx12345678) := (eta_and Hx012345678) in
- let (Hx1, Hx2345678) := (eta_and Hx12345678) in
- let (Hx2, Hx345678) := (eta_and Hx2345678) in
- let (Hx3, Hx45678) := (eta_and Hx345678) in
- let (Hx4, Hx5678) := (eta_and Hx45678) in
- let (Hx5, Hx678) := (eta_and Hx5678) in
- let (Hx6, Hx78) := (eta_and Hx678) in
- let (Hx7, Hx8) := (eta_and Hx78) in
- let args := op9_args_to_bounded x012345678 Hx0 Hx1 Hx2 Hx3 Hx4 Hx5 Hx6 Hx7 Hx8 in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => op9_4_bounds_good bounds = true
- | None => False
- end)
- : op9_4_correct_and_bounded ropW op.
-Proof.
- intros xs Hxs.
- pose xs as xs'.
- compute in xs.
- destruct_head' prod.
- cbv [Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' fst snd List.map Tuple.from_list Tuple.from_list' HList.hlistP HList.hlistP'] in Hxs.
- pose Hxs as Hxs'.
- destruct Hxs as [ [ [ [ [ [ [ [ Hx0 Hx1 ] Hx2 ] Hx3 ] Hx4 ] Hx5 ] Hx6 ] Hx7 ] Hx8 ].
- specialize (H0 xs'
- (conj Hx0 (conj Hx1 (conj Hx2 (conj Hx3 (conj Hx4 (conj Hx5 (conj Hx6 (conj Hx7 Hx8))))))))).
- specialize (H1 xs'
- (conj Hx0 (conj Hx1 (conj Hx2 (conj Hx3 (conj Hx4 (conj Hx5 (conj Hx6 (conj Hx7 Hx8))))))))).
- Time let args := constr:(op9_args_to_bounded xs' Hx0 Hx1 Hx2 Hx3 Hx4 Hx5 Hx6 Hx7 Hx8) in
- admit; t_correct_and_bounded ropZ_sig Hbounds H0 H1 args. (* On 8.6beta1, with ~2 GB RAM, Finished transaction in 46.56 secs (46.372u,0.14s) (successful) *)
-Admitted. (*Time Qed. (* On 8.6beta1, with ~4.3 GB RAM, Finished transaction in 67.652 secs (66.932u,0.128s) (successful) *)*)
diff --git a/src/SpecificGen/GF25519_64Reflective/CommonBinOp.v b/src/SpecificGen/GF25519_64Reflective/CommonBinOp.v
deleted file mode 100644
index 9f26d8521..000000000
--- a/src/SpecificGen/GF25519_64Reflective/CommonBinOp.v
+++ /dev/null
@@ -1,50 +0,0 @@
-Require Export Crypto.SpecificGen.GF25519_64Reflective.Common.
-Require Import Crypto.SpecificGen.GF25519_64BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations128.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Lemma ExprBinOp_correct_and_bounded
- ropW op (ropZ_sig : rexpr_binop_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall xy
- (xy := (eta_fe25519_64W (fst xy), eta_fe25519_64W (snd xy)))
- (Hxy : is_bounded (fe25519_64WToZ (fst xy)) = true
- /\ is_bounded (fe25519_64WToZ (snd xy)) = true),
- let Hx := let (Hx, Hy) := Hxy in Hx in
- let Hy := let (Hx, Hy) := Hxy in Hy in
- let args := binop_args_to_bounded xy Hx Hy in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall xy
- (xy := (eta_fe25519_64W (fst xy), eta_fe25519_64W (snd xy)))
- (Hxy : is_bounded (fe25519_64WToZ (fst xy)) = true
- /\ is_bounded (fe25519_64WToZ (snd xy)) = true),
- let Hx := let (Hx, Hy) := Hxy in Hx in
- let Hy := let (Hx, Hy) := Hxy in Hy in
- let args := binop_args_to_bounded (fst xy, snd xy) Hx Hy in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => binop_bounds_good bounds = true
- | None => False
- end)
- : binop_correct_and_bounded ropW op.
-Proof.
- intros xy HxHy.
- pose xy as xy'.
- compute in xy; destruct_head' prod.
- specialize (H0 xy' HxHy).
- specialize (H1 xy' HxHy).
- destruct HxHy as [Hx Hy].
- let args := constr:(binop_args_to_bounded xy' Hx Hy) in
- t_correct_and_bounded ropZ_sig Hbounds H0 H1 args.
-Qed.
diff --git a/src/SpecificGen/GF25519_64Reflective/CommonUnOp.v b/src/SpecificGen/GF25519_64Reflective/CommonUnOp.v
deleted file mode 100644
index aa26e495a..000000000
--- a/src/SpecificGen/GF25519_64Reflective/CommonUnOp.v
+++ /dev/null
@@ -1,43 +0,0 @@
-Require Export Crypto.SpecificGen.GF25519_64Reflective.Common.
-Require Import Crypto.SpecificGen.GF25519_64BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations128.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Lemma ExprUnOp_correct_and_bounded
- ropW op (ropZ_sig : rexpr_unop_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall x
- (x := eta_fe25519_64W x)
- (Hx : is_bounded (fe25519_64WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall x
- (x := eta_fe25519_64W x)
- (Hx : is_bounded (fe25519_64WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => unop_bounds_good bounds = true
- | None => False
- end)
- : unop_correct_and_bounded ropW op.
-Proof.
- intros x Hx.
- pose x as x'.
- hnf in x; destruct_head' prod.
- specialize (H0 x' Hx).
- specialize (H1 x' Hx).
- let args := constr:(unop_args_to_bounded x' Hx) in
- t_correct_and_bounded ropZ_sig Hbounds H0 H1 args.
-Qed.
diff --git a/src/SpecificGen/GF25519_64Reflective/CommonUnOpFEToWire.v b/src/SpecificGen/GF25519_64Reflective/CommonUnOpFEToWire.v
deleted file mode 100644
index f1f30d64c..000000000
--- a/src/SpecificGen/GF25519_64Reflective/CommonUnOpFEToWire.v
+++ /dev/null
@@ -1,43 +0,0 @@
-Require Export Crypto.SpecificGen.GF25519_64Reflective.Common.
-Require Import Crypto.SpecificGen.GF25519_64BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations128.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Lemma ExprUnOpFEToWire_correct_and_bounded
- ropW op (ropZ_sig : rexpr_unop_FEToWire_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall x
- (x := eta_fe25519_64W x)
- (Hx : is_bounded (fe25519_64WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall x
- (x := eta_fe25519_64W x)
- (Hx : is_bounded (fe25519_64WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => unopFEToWire_bounds_good bounds = true
- | None => False
- end)
- : unop_FEToWire_correct_and_bounded ropW op.
-Proof.
- intros x Hx.
- pose x as x'.
- hnf in x; destruct_head' prod.
- specialize (H0 x' Hx).
- specialize (H1 x' Hx).
- let args := constr:(unop_args_to_bounded x' Hx) in
- t_correct_and_bounded ropZ_sig Hbounds H0 H1 args.
-Qed.
diff --git a/src/SpecificGen/GF25519_64Reflective/CommonUnOpFEToZ.v b/src/SpecificGen/GF25519_64Reflective/CommonUnOpFEToZ.v
deleted file mode 100644
index 48a5b9610..000000000
--- a/src/SpecificGen/GF25519_64Reflective/CommonUnOpFEToZ.v
+++ /dev/null
@@ -1,43 +0,0 @@
-Require Export Crypto.SpecificGen.GF25519_64Reflective.Common.
-Require Import Crypto.SpecificGen.GF25519_64BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations128.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Lemma ExprUnOpFEToZ_correct_and_bounded
- ropW op (ropZ_sig : rexpr_unop_FEToZ_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall x
- (x := eta_fe25519_64W x)
- (Hx : is_bounded (fe25519_64WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall x
- (x := eta_fe25519_64W x)
- (Hx : is_bounded (fe25519_64WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => unopFEToZ_bounds_good bounds = true
- | None => False
- end)
- : unop_FEToZ_correct ropW op.
-Proof.
- intros x Hx.
- pose x as x'.
- hnf in x; destruct_head' prod.
- specialize (H0 x' Hx).
- specialize (H1 x' Hx).
- let args := constr:(unop_args_to_bounded x' Hx) in
- t_correct_and_bounded ropZ_sig Hbounds H0 H1 args.
-Qed.
diff --git a/src/SpecificGen/GF25519_64Reflective/CommonUnOpWireToFE.v b/src/SpecificGen/GF25519_64Reflective/CommonUnOpWireToFE.v
deleted file mode 100644
index 3e7112480..000000000
--- a/src/SpecificGen/GF25519_64Reflective/CommonUnOpWireToFE.v
+++ /dev/null
@@ -1,43 +0,0 @@
-Require Export Crypto.SpecificGen.GF25519_64Reflective.Common.
-Require Import Crypto.SpecificGen.GF25519_64BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations128.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Lemma ExprUnOpWireToFE_correct_and_bounded
- ropW op (ropZ_sig : rexpr_unop_WireToFE_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall x
- (x := eta_wire_digitsW x)
- (Hx : wire_digits_is_bounded (wire_digitsWToZ x) = true),
- let args := unopWireToFE_args_to_bounded x Hx in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall x
- (x := eta_wire_digitsW x)
- (Hx : wire_digits_is_bounded (wire_digitsWToZ x) = true),
- let args := unopWireToFE_args_to_bounded x Hx in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => unopWireToFE_bounds_good bounds = true
- | None => False
- end)
- : unop_WireToFE_correct_and_bounded ropW op.
-Proof.
- intros x Hx.
- pose x as x'.
- hnf in x; destruct_head' prod.
- specialize (H0 x' Hx).
- specialize (H1 x' Hx).
- let args := constr:(unopWireToFE_args_to_bounded x' Hx) in
- t_correct_and_bounded ropZ_sig Hbounds H0 H1 args.
-Qed.
diff --git a/src/SpecificGen/GF25519_64Reflective/Reified.v b/src/SpecificGen/GF25519_64Reflective/Reified.v
deleted file mode 100644
index a5236884e..000000000
--- a/src/SpecificGen/GF25519_64Reflective/Reified.v
+++ /dev/null
@@ -1,13 +0,0 @@
-(** We split the reification up into separate files, one operation per
- file, so that it can run in parallel. *)
-Require Export Crypto.SpecificGen.GF25519_64Reflective.Reified.Add.
-Require Export Crypto.SpecificGen.GF25519_64Reflective.Reified.CarryAdd.
-Require Export Crypto.SpecificGen.GF25519_64Reflective.Reified.Sub.
-Require Export Crypto.SpecificGen.GF25519_64Reflective.Reified.CarrySub.
-Require Export Crypto.SpecificGen.GF25519_64Reflective.Reified.Mul.
-Require Export Crypto.SpecificGen.GF25519_64Reflective.Reified.Opp.
-Require Export Crypto.SpecificGen.GF25519_64Reflective.Reified.CarryOpp.
-Require Export Crypto.SpecificGen.GF25519_64Reflective.Reified.PreFreeze.
-Require Export Crypto.SpecificGen.GF25519_64Reflective.Reified.GeModulus.
-Require Export Crypto.SpecificGen.GF25519_64Reflective.Reified.Pack.
-Require Export Crypto.SpecificGen.GF25519_64Reflective.Reified.Unpack.
diff --git a/src/SpecificGen/GF25519_64Reflective/Reified/Add.v b/src/SpecificGen/GF25519_64Reflective/Reified/Add.v
deleted file mode 100644
index 1adf81d96..000000000
--- a/src/SpecificGen/GF25519_64Reflective/Reified/Add.v
+++ /dev/null
@@ -1,12 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_64Reflective.CommonBinOp.
-
-Definition raddZ_sig : rexpr_binop_sig add. Proof. reify_sig. Defined.
-Definition raddW := Eval vm_compute in rword_of_Z raddZ_sig.
-Lemma raddW_correct_and_bounded_gen : correct_and_bounded_genT raddW raddZ_sig.
-Proof. rexpr_correct. Qed.
-Definition radd_output_bounds := Eval vm_compute in compute_bounds raddW ExprBinOp_bounds.
-
-Local Open Scope string_scope.
-Compute ("Add", compute_bounds_for_display raddW ExprBinOp_bounds).
-Compute ("Add overflows? ", sanity_compute raddW ExprBinOp_bounds).
-Compute ("Add overflows (error if it does)? ", sanity_check raddW ExprBinOp_bounds).
diff --git a/src/SpecificGen/GF25519_64Reflective/Reified/AddCoordinates.v b/src/SpecificGen/GF25519_64Reflective/Reified/AddCoordinates.v
deleted file mode 100644
index 3fe4fbeef..000000000
--- a/src/SpecificGen/GF25519_64Reflective/Reified/AddCoordinates.v
+++ /dev/null
@@ -1,183 +0,0 @@
-Require Export Coq.ZArith.ZArith.
-Require Export Coq.Strings.String.
-Require Export Crypto.SpecificGen.GF25519_64.
-Require Export Crypto.SpecificGen.GF25519_64BoundedCommon.
-Require Import Crypto.Reflection.Reify.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Reflection.ExprInversion.
-Require Import Crypto.Reflection.Relations.
-Require Import Crypto.Reflection.Linearize.
-Require Import Crypto.Reflection.Z.Interpretations128.
-Require Crypto.Reflection.Z.Interpretations128.Relations.
-Require Import Crypto.Reflection.Z.Interpretations128.RelationsCombinations.
-Require Import Crypto.Reflection.Z.Reify.
-Require Export Crypto.Reflection.Z.Syntax.
-Require Import Crypto.Reflection.InterpWfRel.
-Require Import Crypto.Reflection.LinearizeInterp.
-Require Import Crypto.Reflection.WfReflective.
-Require Import Crypto.Reflection.Eta.
-Require Import Crypto.Reflection.EtaInterp.
-Require Import Crypto.CompleteEdwardsCurve.ExtendedCoordinates.
-Require Import Crypto.SpecificGen.GF25519_64Reflective.Common.
-Require Import Crypto.SpecificGen.GF25519_64Reflective.Reified.Add.
-Require Import Crypto.SpecificGen.GF25519_64Reflective.Reified.Sub.
-Require Import Crypto.SpecificGen.GF25519_64Reflective.Reified.Mul.
-Require Import Crypto.SpecificGen.GF25519_64Reflective.Common9_4Op.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.HList.
-Require Import Crypto.Util.Tower.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.Notations.
-Require Import Bedrock.Word.
-
-Definition radd_coordinatesZ' var twice_d P1 P2
- := @Extended.add_coordinates_gen
- _
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig raddZ_sig var)))
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig rsubZ_sig var)))
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig rmulZ_sig var)))
- twice_d _
- (fun x y z w => (x, y, z, w)%expr)
- (fun v f => LetIn v
- (fun k => f (SmartVarf k)))
- P1 P2.
-
-Local Notation eta x := (fst x, snd x).
-
-Definition radd_coordinatesZ'' : Syntax.Expr _ _ _
- := Linearize
- (ExprEta
- (fun var
- => Abs (fun twice_d_P1_P2 : interp_flat_type _ (_ * ((_ * _ * _ * _) * (_ * _ * _ * _)))
- => let '(twice_d, ((P10, P11, P12, P13), (P20, P21, P22, P23)))
- := twice_d_P1_P2 in
- radd_coordinatesZ'
- var (SmartVarf twice_d)
- (SmartVarf P10, SmartVarf P11, SmartVarf P12, SmartVarf P13)
- (SmartVarf P20, SmartVarf P21, SmartVarf P22, SmartVarf P23)))).
-
-Definition add_coordinates
- := fun twice_d P10 P11 P12 P13 P20 P21 P22 P23
- => @Extended.add_coordinates
- _ add sub mul
- twice_d (P10, P11, P12, P13) (P20, P21, P22, P23).
-
-Definition uncurried_add_coordinates
- := fun twice_d_P1_P2
- => let twice_d := fst twice_d_P1_P2 in
- let (P1, P2) := eta (snd twice_d_P1_P2) in
- @Extended.add_coordinates
- _ add sub mul
- twice_d P1 P2.
-
-Local Notation rexpr_sigPf T uncurried_op rexprZ x :=
- (Interp interp_op (t:=T) rexprZ x = uncurried_op x)
- (only parsing).
-Local Notation rexpr_sigP T uncurried_op rexprZ :=
- (forall x, rexpr_sigPf T uncurried_op rexprZ x)
- (only parsing).
-Local Notation rexpr_sig T uncurried_op :=
- { rexprZ | rexpr_sigP T uncurried_op rexprZ }
- (only parsing).
-
-Local Ltac fold_interpf' :=
- let k := (eval unfold interpf, interpf_step in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- change k with k'; clearbody k'; subst k'.
-
-Local Ltac fold_interpf :=
- let k := (eval unfold interpf in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- change k with k'; clearbody k'; subst k';
- fold_interpf'.
-
-Local Ltac repeat_step_interpf :=
- let k := (eval unfold interpf in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- repeat (unfold k'; change k with k'; unfold interpf_step);
- clearbody k'; subst k'.
-
-Lemma radd_coordinatesZ_sigP' : rexpr_sigP _ uncurried_add_coordinates radd_coordinatesZ''.
-Proof.
- cbv [radd_coordinatesZ''].
- intro x; rewrite InterpLinearize, InterpExprEta.
- cbv [domain interp_flat_type] in x.
- destruct x as [twice_d [ [ [ [P10_ P11_] P12_] P13_] [ [ [P20_ P21_] P22_] P23_] ] ].
- repeat match goal with
- | [ H : prod _ _ |- _ ] => let H0 := fresh H in let H1 := fresh H in destruct H as [H0 H1]
- end.
- cbv [invert_Abs domain codomain Interp interp SmartVarf smart_interp_flat_map fst snd].
- cbv [radd_coordinatesZ' add_coordinates Extended.add_coordinates_gen uncurried_add_coordinates SmartVarf smart_interp_flat_map]; simpl @fst; simpl @snd.
- repeat match goal with
- | [ |- appcontext[@proj1_sig ?A ?B ?v] ]
- => let k := fresh "f" in
- let k' := fresh "f" in
- let H := fresh in
- set (k := v);
- set (k' := @proj1_sig A B k);
- pose proof (proj2_sig k) as H;
- change (proj1_sig k) with k' in H;
- clearbody k'; clear k;
- cbv beta in *
- end.
- cbv [Interp Curry.curry2] in *.
- unfold interpf, interpf_step; fold_interpf.
- cbv beta iota delta [Extended.add_coordinates interp_flat_type interp_base_type GF25519_64.fe25519_64].
- Time
- abstract (
- repeat match goal with
- | [ |- (dlet x := ?y in @?z x) = (let x' := ?y' in @?z' x') ]
- => refine ((fun pf0 pf1 => @Proper_Let_In_nd_changebody _ _ Logic.eq _ y y' pf0 z z' pf1)
- (_ : y = y')
- (_ : forall x, z x = z' x));
- cbv beta; intros;
- [ cbv [Let_In] | ]
- end;
- repeat match goal with
- | _ => rewrite !interpf_invert_Abs
- | _ => rewrite_hyp !*
- | [ |- ?x = ?x ] => reflexivity
- | _ => rewrite <- !surjective_pairing
- end
- ).
-Time Defined.
-Lemma radd_coordinatesZ_sigP : rexpr_sigP _ uncurried_add_coordinates radd_coordinatesZ''.
-Proof.
- exact radd_coordinatesZ_sigP'.
-Qed.
-Definition radd_coordinatesZ_sig
- := exist (fun v => rexpr_sigP _ _ v) radd_coordinatesZ'' radd_coordinatesZ_sigP.
-
-Definition radd_coordinates_input_bounds
- := (ExprUnOp_bounds, ((ExprUnOp_bounds, ExprUnOp_bounds, ExprUnOp_bounds, ExprUnOp_bounds),
- (ExprUnOp_bounds, ExprUnOp_bounds, ExprUnOp_bounds, ExprUnOp_bounds))).
-
-Time Definition radd_coordinatesW := Eval vm_compute in rword_of_Z radd_coordinatesZ_sig.
-Lemma radd_coordinatesW_correct_and_bounded_gen : correct_and_bounded_genT radd_coordinatesW radd_coordinatesZ_sig.
-Proof. Time rexpr_correct. Time Qed.
-Definition radd_coordinates_output_bounds := Eval vm_compute in compute_bounds radd_coordinatesW radd_coordinates_input_bounds.
-
-Local Obligation Tactic := intros; vm_compute; constructor.
-
-(*
-Program Definition radd_coordinatesW_correct_and_bounded
- := Expr9_4Op_correct_and_bounded
- radd_coordinatesW uncurried_add_coordinates radd_coordinatesZ_sig radd_coordinatesW_correct_and_bounded_gen
- _ _.
- *)
-
-Local Open Scope string_scope.
-Compute ("Add_Coordinates", compute_bounds_for_display radd_coordinatesW radd_coordinates_input_bounds).
-Compute ("Add_Coordinates overflows? ", sanity_compute radd_coordinatesW radd_coordinates_input_bounds).
-Compute ("Add_Coordinates overflows (error if it does)? ", sanity_check radd_coordinatesW radd_coordinates_input_bounds).
diff --git a/src/SpecificGen/GF25519_64Reflective/Reified/AddDisplay.log b/src/SpecificGen/GF25519_64Reflective/Reified/AddDisplay.log
deleted file mode 100644
index c1012d128..000000000
--- a/src/SpecificGen/GF25519_64Reflective/Reified/AddDisplay.log
+++ /dev/null
@@ -1,25 +0,0 @@
-raddW =
-fun var : Syntax.base_type -> Type =>
-λ x x0 x1 x2 x3 x4 x5 x6 x7 x8 : var Syntax.TZ,
-Tbase Syntax.TZ x9 = x + x4;
-Tbase Syntax.TZ x10 = x0 + x5;
-Tbase Syntax.TZ x11 = x1 + x6;
-Tbase Syntax.TZ x12 = x2 + x7;
-Tbase Syntax.TZ x13 = x3 + x8;
-(Return x9, Return x10, Return x11, Return x12, Return x13)
- : forall var : Syntax.base_type -> Type,
- expr Syntax.base_type Syntax.op
- (Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF25519_64Reflective/Reified/AddDisplay.v b/src/SpecificGen/GF25519_64Reflective/Reified/AddDisplay.v
deleted file mode 100644
index 8ebe500fd..000000000
--- a/src/SpecificGen/GF25519_64Reflective/Reified/AddDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_64Reflective.Reified.Add.
-Require Export Crypto.Reflection.Z.CNotations.
-
-Print raddW.
diff --git a/src/SpecificGen/GF25519_64Reflective/Reified/AddJavaDisplay.log b/src/SpecificGen/GF25519_64Reflective/Reified/AddJavaDisplay.log
deleted file mode 100644
index c1012d128..000000000
--- a/src/SpecificGen/GF25519_64Reflective/Reified/AddJavaDisplay.log
+++ /dev/null
@@ -1,25 +0,0 @@
-raddW =
-fun var : Syntax.base_type -> Type =>
-λ x x0 x1 x2 x3 x4 x5 x6 x7 x8 : var Syntax.TZ,
-Tbase Syntax.TZ x9 = x + x4;
-Tbase Syntax.TZ x10 = x0 + x5;
-Tbase Syntax.TZ x11 = x1 + x6;
-Tbase Syntax.TZ x12 = x2 + x7;
-Tbase Syntax.TZ x13 = x3 + x8;
-(Return x9, Return x10, Return x11, Return x12, Return x13)
- : forall var : Syntax.base_type -> Type,
- expr Syntax.base_type Syntax.op
- (Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF25519_64Reflective/Reified/AddJavaDisplay.v b/src/SpecificGen/GF25519_64Reflective/Reified/AddJavaDisplay.v
deleted file mode 100644
index 675d9b7fa..000000000
--- a/src/SpecificGen/GF25519_64Reflective/Reified/AddJavaDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_64Reflective.Reified.Add.
-Require Export Crypto.Reflection.Z.JavaNotations.
-
-Print raddW.
diff --git a/src/SpecificGen/GF25519_64Reflective/Reified/CarryAdd.v b/src/SpecificGen/GF25519_64Reflective/Reified/CarryAdd.v
deleted file mode 100644
index 3a6871acc..000000000
--- a/src/SpecificGen/GF25519_64Reflective/Reified/CarryAdd.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_64Reflective.CommonBinOp.
-
-Definition rcarry_addZ_sig : rexpr_binop_sig carry_add. Proof. reify_sig. Defined.
-Definition rcarry_addW := Eval vm_compute in rword_of_Z rcarry_addZ_sig.
-Lemma rcarry_addW_correct_and_bounded_gen : correct_and_bounded_genT rcarry_addW rcarry_addZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rcarry_add_output_bounds := Eval vm_compute in compute_bounds rcarry_addW ExprBinOp_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rcarry_addW_correct_and_bounded
- := ExprBinOp_correct_and_bounded
- rcarry_addW carry_add rcarry_addZ_sig rcarry_addW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Carry_Add", compute_bounds_for_display rcarry_addW ExprBinOp_bounds).
-Compute ("Carry_Add overflows? ", sanity_compute rcarry_addW ExprBinOp_bounds).
-Compute ("Carry_Add overflows (error if it does)? ", sanity_check rcarry_addW ExprBinOp_bounds).
diff --git a/src/SpecificGen/GF25519_64Reflective/Reified/CarryOpp.v b/src/SpecificGen/GF25519_64Reflective/Reified/CarryOpp.v
deleted file mode 100644
index bd584ff2e..000000000
--- a/src/SpecificGen/GF25519_64Reflective/Reified/CarryOpp.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_64Reflective.CommonUnOp.
-
-Definition rcarry_oppZ_sig : rexpr_unop_sig carry_opp. Proof. reify_sig. Defined.
-Definition rcarry_oppW := Eval vm_compute in rword_of_Z rcarry_oppZ_sig.
-Lemma rcarry_oppW_correct_and_bounded_gen : correct_and_bounded_genT rcarry_oppW rcarry_oppZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rcarry_opp_output_bounds := Eval vm_compute in compute_bounds rcarry_oppW ExprUnOp_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rcarry_oppW_correct_and_bounded
- := ExprUnOp_correct_and_bounded
- rcarry_oppW carry_opp rcarry_oppZ_sig rcarry_oppW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Carry_Opp", compute_bounds_for_display rcarry_oppW ExprUnOp_bounds).
-Compute ("Carry_Opp overflows? ", sanity_compute rcarry_oppW ExprUnOp_bounds).
-Compute ("Carry_Opp overflows (error if it does)? ", sanity_check rcarry_oppW ExprUnOp_bounds).
diff --git a/src/SpecificGen/GF25519_64Reflective/Reified/CarrySub.v b/src/SpecificGen/GF25519_64Reflective/Reified/CarrySub.v
deleted file mode 100644
index 5b7bda4e9..000000000
--- a/src/SpecificGen/GF25519_64Reflective/Reified/CarrySub.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_64Reflective.CommonBinOp.
-
-Definition rcarry_subZ_sig : rexpr_binop_sig carry_sub. Proof. reify_sig. Defined.
-Definition rcarry_subW := Eval vm_compute in rword_of_Z rcarry_subZ_sig.
-Lemma rcarry_subW_correct_and_bounded_gen : correct_and_bounded_genT rcarry_subW rcarry_subZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rcarry_sub_output_bounds := Eval vm_compute in compute_bounds rcarry_subW ExprBinOp_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rcarry_subW_correct_and_bounded
- := ExprBinOp_correct_and_bounded
- rcarry_subW carry_sub rcarry_subZ_sig rcarry_subW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Carry_Sub", compute_bounds_for_display rcarry_subW ExprBinOp_bounds).
-Compute ("Carry_Sub overflows? ", sanity_compute rcarry_subW ExprBinOp_bounds).
-Compute ("Carry_Sub overflows (error if it does)? ", sanity_check rcarry_subW ExprBinOp_bounds).
diff --git a/src/SpecificGen/GF25519_64Reflective/Reified/GeModulus.v b/src/SpecificGen/GF25519_64Reflective/Reified/GeModulus.v
deleted file mode 100644
index e755a2238..000000000
--- a/src/SpecificGen/GF25519_64Reflective/Reified/GeModulus.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_64Reflective.CommonUnOpFEToZ.
-
-Definition rge_modulusZ_sig : rexpr_unop_FEToZ_sig ge_modulus. Proof. reify_sig. Defined.
-Definition rge_modulusW := Eval vm_compute in rword_of_Z rge_modulusZ_sig.
-Lemma rge_modulusW_correct_and_bounded_gen : correct_and_bounded_genT rge_modulusW rge_modulusZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rge_modulus_output_bounds := Eval vm_compute in compute_bounds rge_modulusW ExprUnOpFEToZ_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rge_modulusW_correct_and_bounded
- := ExprUnOpFEToZ_correct_and_bounded
- rge_modulusW ge_modulus rge_modulusZ_sig rge_modulusW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Ge_Modulus", compute_bounds_for_display rge_modulusW ExprUnOpFEToZ_bounds).
-Compute ("Ge_Modulus overflows? ", sanity_compute rge_modulusW ExprUnOpFEToZ_bounds).
-Compute ("Ge_Modulus overflows (error if it does)? ", sanity_check rge_modulusW ExprUnOpFEToZ_bounds).
diff --git a/src/SpecificGen/GF25519_64Reflective/Reified/LadderStep.v b/src/SpecificGen/GF25519_64Reflective/Reified/LadderStep.v
deleted file mode 100644
index f3d2204b0..000000000
--- a/src/SpecificGen/GF25519_64Reflective/Reified/LadderStep.v
+++ /dev/null
@@ -1,189 +0,0 @@
-Require Export Coq.ZArith.ZArith.
-Require Export Coq.Strings.String.
-Require Export Crypto.SpecificGen.GF25519_64.
-Require Export Crypto.SpecificGen.GF25519_64BoundedCommon.
-Require Import Crypto.Reflection.Reify.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Reflection.Relations.
-Require Import Crypto.Reflection.ExprInversion.
-Require Import Crypto.Reflection.Linearize.
-Require Import Crypto.Reflection.Eta.
-Require Import Crypto.Reflection.EtaInterp.
-Require Import Crypto.Reflection.Z.Interpretations128.
-Require Crypto.Reflection.Z.Interpretations128.Relations.
-Require Import Crypto.Reflection.Z.Interpretations128.RelationsCombinations.
-Require Import Crypto.Reflection.Z.Reify.
-Require Export Crypto.Reflection.Z.Syntax.
-Require Import Crypto.Reflection.InterpWfRel.
-Require Import Crypto.Reflection.LinearizeInterp.
-Require Import Crypto.Reflection.WfReflective.
-Require Import Crypto.Spec.MxDH.
-Require Import Crypto.SpecificGen.GF25519_64Reflective.Common.
-Require Import Crypto.SpecificGen.GF25519_64Reflective.Reified.Add.
-Require Import Crypto.SpecificGen.GF25519_64Reflective.Reified.Sub.
-Require Import Crypto.SpecificGen.GF25519_64Reflective.Reified.Mul.
-Require Import Crypto.SpecificGen.GF25519_64Reflective.Common9_4Op.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.HList.
-Require Import Crypto.Util.Tower.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.Notations.
-Require Import Bedrock.Word.
-
-Definition rladderstepZ' var (T:=_) (a24 x0 : T) P1 P2
- := @MxDH.ladderstep_gen
- _
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig raddZ_sig var)))
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig rsubZ_sig var)))
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig rmulZ_sig var)))
- a24
- _
- (fun x y z w => (x, y, z, w)%expr)
- (fun v f => LetIn v
- (fun k => f (SmartVarf k)))
- x0
- P1 P2.
-
-Definition rladderstepZ'' : Syntax.Expr _ _ _
- := Linearize
- (ExprEta
- (fun var
- => Abs (fun a24_x0_P1_P2 : interp_flat_type _ (_ * _ * ((_ * _) * (_ * _)))
- => let '(a24, x0, ((P10, P11), (P20, P21)))
- := a24_x0_P1_P2 in
- rladderstepZ'
- var (SmartVarf a24) (SmartVarf x0)
- (SmartVarf P10, SmartVarf P11)
- (SmartVarf P20, SmartVarf P21)))).
-
-Local Notation eta x := (fst x, snd x).
-
-Definition ladderstep_other_assoc {F Fadd Fsub Fmul} a24 (X1:F) (P1 P2:F*F) : F*F*F*F :=
- Eval cbv beta delta [MxDH.ladderstep_gen] in
- @MxDH.ladderstep_gen
- F Fadd Fsub Fmul a24
- (F*F*F*F)
- (fun X3 Y3 Z3 T3 => (X3, Y3, Z3, T3))
- (fun x f => dlet y := x in f y)
- X1 P1 P2.
-
-Definition uncurried_ladderstep
- := fun (a24_x0_P1_P2 : _ * _ * ((_ * _) * (_ * _)))
- => let a24 := fst (fst a24_x0_P1_P2) in
- let x0 := snd (fst a24_x0_P1_P2) in
- let '(P1, P2) := eta (snd a24_x0_P1_P2) in
- let '((P10, P11), (P20, P21)) := (eta P1, eta P2) in
- @ladderstep_other_assoc
- _ add sub mul
- a24 x0 (P10, P11) (P20, P21).
-
-Local Notation rexpr_sigPf T uncurried_op rexprZ x :=
- (Interp interp_op (t:=T) rexprZ x = uncurried_op x)
- (only parsing).
-Local Notation rexpr_sigP T uncurried_op rexprZ :=
- (forall x, rexpr_sigPf T uncurried_op rexprZ x)
- (only parsing).
-Local Notation rexpr_sig T uncurried_op :=
- { rexprZ | rexpr_sigP T uncurried_op rexprZ }
- (only parsing).
-
-Local Ltac fold_interpf' :=
- let k := (eval unfold interpf, interpf_step in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- change k with k'; clearbody k'; subst k'.
-
-Local Ltac fold_interpf :=
- let k := (eval unfold interpf in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- change k with k'; clearbody k'; subst k';
- fold_interpf'.
-
-Local Ltac repeat_step_interpf :=
- let k := (eval unfold interpf in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- repeat (unfold interpf_step at 1; change k with k' at 1);
- clearbody k'; subst k'.
-
-Lemma rladderstepZ_sigP' : rexpr_sigP _ uncurried_ladderstep rladderstepZ''.
-Proof.
- cbv [rladderstepZ''].
- intro x; rewrite InterpLinearize, InterpExprEta.
- cbv [domain interp_flat_type interp_base_type] in x.
- destruct_head' prod.
- cbv [invert_Abs domain codomain Interp interp SmartVarf smart_interp_flat_map fst snd].
- cbv [rladderstepZ' MxDH.ladderstep_gen uncurried_ladderstep SmartVarf smart_interp_flat_map]; simpl @fst; simpl @snd.
- repeat match goal with
- | [ |- appcontext[@proj1_sig ?A ?B ?v] ]
- => let k := fresh "f" in
- let k' := fresh "f" in
- let H := fresh in
- set (k := v);
- set (k' := @proj1_sig A B k);
- pose proof (proj2_sig k) as H;
- change (proj1_sig k) with k' in H;
- clearbody k'; clear k;
- cbv beta in *
- end.
- cbv [Interp Curry.curry2] in *.
- unfold interpf, interpf_step; fold_interpf.
- cbv [ladderstep_other_assoc interp_flat_type GF25519_64.fe25519_64].
- Time
- abstract (
- repeat match goal with
- | [ |- (dlet x := ?y in @?z x) = (dlet x' := ?y' in @?z' x') ]
- => refine ((fun pf0 pf1 => @Proper_Let_In_nd_changebody _ _ Logic.eq _ y y' pf0 z z' pf1)
- (_ : y = y')
- (_ : forall x, z x = z' x));
- cbv beta; intros;
- [ cbv [Let_In Common.ExprBinOpT] | ]
- end;
- repeat match goal with
- | _ => rewrite !interpf_invert_Abs
- | _ => rewrite_hyp !*
- | _ => progress cbv [interp_base_type]
- | [ |- ?x = ?x ] => reflexivity
- | _ => rewrite <- !surjective_pairing
- end
- ).
-Time Defined.
-Lemma rladderstepZ_sigP : rexpr_sigP _ uncurried_ladderstep rladderstepZ''.
-Proof.
- exact rladderstepZ_sigP'.
-Qed.
-Definition rladderstepZ_sig
- := exist (fun v => rexpr_sigP _ _ v) rladderstepZ'' rladderstepZ_sigP.
-
-Definition rladderstep_input_bounds
- := (ExprUnOp_bounds, ExprUnOp_bounds,
- ((ExprUnOp_bounds, ExprUnOp_bounds),
- (ExprUnOp_bounds, ExprUnOp_bounds))).
-
-Time Definition rladderstepW := Eval vm_compute in rword_of_Z rladderstepZ_sig.
-Lemma rladderstepW_correct_and_bounded_gen : correct_and_bounded_genT rladderstepW rladderstepZ_sig.
-Proof. Time rexpr_correct. Time Qed.
-Definition rladderstep_output_bounds := Eval vm_compute in compute_bounds rladderstepW rladderstep_input_bounds.
-
-Local Obligation Tactic := intros; vm_compute; constructor.
-
-(*
-Program Definition rladderstepW_correct_and_bounded
- := Expr9_4Op_correct_and_bounded
- rladderstepW uncurried_ladderstep rladderstepZ_sig rladderstepW_correct_and_bounded_gen
- _ _.
- *)
-
-Local Open Scope string_scope.
-Compute ("Ladderstep", compute_bounds_for_display rladderstepW rladderstep_input_bounds).
-Compute ("Ladderstep overflows? ", sanity_compute rladderstepW rladderstep_input_bounds).
-Compute ("Ladderstep overflows (error if it does)? ", sanity_check rladderstepW rladderstep_input_bounds).
diff --git a/src/SpecificGen/GF25519_64Reflective/Reified/LadderStepDisplay.log b/src/SpecificGen/GF25519_64Reflective/Reified/LadderStepDisplay.log
deleted file mode 100644
index d826efaab..000000000
--- a/src/SpecificGen/GF25519_64Reflective/Reified/LadderStepDisplay.log
+++ /dev/null
@@ -1,1050 +0,0 @@
-rladderstepW =
-fun var : base_type -> Type =>
-λ
-_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25
- x26 x27 x28 x29 x30 x31 x32 x33 x34 x35 x36 x37 x38 x39 x40 x41 x42
- x43 : var TZ,
-Tbase TZ x44 = x24 + x29;
-Tbase TZ x45 = x25 + x30;
-Tbase TZ x46 = x26 + x31;
-Tbase TZ x47 = x27 + x32;
-Tbase TZ x48 = x28 + x33;
-Tbase TZ x49 = x48 * x48;
-Tbase TZ x50 = x44 * x47;
-Tbase TZ x51 = x45 * x46;
-Tbase TZ x52 = x46 * x45;
-Tbase TZ x53 = x47 * x44;
-Tbase TZ x54 = x52 + x53;
-Tbase TZ x55 = x51 + x54;
-Tbase TZ x56 = x50 + x55;
-Tbase TZ x57 = 0x13;
-Tbase TZ x58 = x57 * x56;
-Tbase TZ x59 = x49 + x58;
-Tbase TZ x60 = 0x33;
-Tbase TZ x61 = x59 >> x60;
-Tbase TZ x62 = x47 * x48;
-Tbase TZ x63 = x48 * x47;
-Tbase TZ x64 = x62 + x63;
-Tbase TZ x65 = x44 * x46;
-Tbase TZ x66 = x45 * x45;
-Tbase TZ x67 = x46 * x44;
-Tbase TZ x68 = x66 + x67;
-Tbase TZ x69 = x65 + x68;
-Tbase TZ x70 = 0x13;
-Tbase TZ x71 = x70 * x69;
-Tbase TZ x72 = x64 + x71;
-Tbase TZ x73 = x61 + x72;
-Tbase TZ x74 = 0x33;
-Tbase TZ x75 = x73 >> x74;
-Tbase TZ x76 = x46 * x48;
-Tbase TZ x77 = x47 * x47;
-Tbase TZ x78 = x48 * x46;
-Tbase TZ x79 = x77 + x78;
-Tbase TZ x80 = x76 + x79;
-Tbase TZ x81 = x44 * x45;
-Tbase TZ x82 = x45 * x44;
-Tbase TZ x83 = x81 + x82;
-Tbase TZ x84 = 0x13;
-Tbase TZ x85 = x84 * x83;
-Tbase TZ x86 = x80 + x85;
-Tbase TZ x87 = x75 + x86;
-Tbase TZ x88 = 0x33;
-Tbase TZ x89 = x87 >> x88;
-Tbase TZ x90 = x45 * x48;
-Tbase TZ x91 = x46 * x47;
-Tbase TZ x92 = x47 * x46;
-Tbase TZ x93 = x48 * x45;
-Tbase TZ x94 = x92 + x93;
-Tbase TZ x95 = x91 + x94;
-Tbase TZ x96 = x90 + x95;
-Tbase TZ x97 = x44 * x44;
-Tbase TZ x98 = 0x13;
-Tbase TZ x99 = x98 * x97;
-Tbase TZ x100 = x96 + x99;
-Tbase TZ x101 = x89 + x100;
-Tbase TZ x102 = 0x33;
-Tbase TZ x103 = x101 >> x102;
-Tbase TZ x104 = x44 * x48;
-Tbase TZ x105 = x45 * x47;
-Tbase TZ x106 = x46 * x46;
-Tbase TZ x107 = x47 * x45;
-Tbase TZ x108 = x48 * x44;
-Tbase TZ x109 = x107 + x108;
-Tbase TZ x110 = x106 + x109;
-Tbase TZ x111 = x105 + x110;
-Tbase TZ x112 = x104 + x111;
-Tbase TZ x113 = x103 + x112;
-Tbase TZ x114 = 0x33;
-Tbase TZ x115 = x113 >> x114;
-Tbase TZ x116 = 0x13;
-Tbase TZ x117 = x116 * x115;
-Tbase TZ x118 = 0x7ffffffffffff;
-Tbase TZ x119 = x59 & x118;
-Tbase TZ x120 = x117 + x119;
-Tbase TZ x121 = 0x33;
-Tbase TZ x122 = x120 >> x121;
-Tbase TZ x123 = 0x7ffffffffffff;
-Tbase TZ x124 = x73 & x123;
-Tbase TZ x125 = x122 + x124;
-Tbase TZ x126 = 0x7ffffffffffff;
-Tbase TZ x127 = x113 & x126;
-Tbase TZ x128 = 0x7ffffffffffff;
-Tbase TZ x129 = x101 & x128;
-Tbase TZ x130 = 0x33;
-Tbase TZ x131 = x125 >> x130;
-Tbase TZ x132 = 0x7ffffffffffff;
-Tbase TZ x133 = x87 & x132;
-Tbase TZ x134 = x131 + x133;
-Tbase TZ x135 = 0x7ffffffffffff;
-Tbase TZ x136 = x125 & x135;
-Tbase TZ x137 = 0x7ffffffffffff;
-Tbase TZ x138 = x120 & x137;
-Tbase TZ x139 = 0xffffffffffffe;
-Tbase TZ x140 = x139 + x24;
-Tbase TZ x141 = x140 - x29;
-Tbase TZ x142 = 0xffffffffffffe;
-Tbase TZ x143 = x142 + x25;
-Tbase TZ x144 = x143 - x30;
-Tbase TZ x145 = 0xffffffffffffe;
-Tbase TZ x146 = x145 + x26;
-Tbase TZ x147 = x146 - x31;
-Tbase TZ x148 = 0xffffffffffffe;
-Tbase TZ x149 = x148 + x27;
-Tbase TZ x150 = x149 - x32;
-Tbase TZ x151 = 0xfffffffffffda;
-Tbase TZ x152 = x151 + x28;
-Tbase TZ x153 = x152 - x33;
-Tbase TZ x154 = x153 * x153;
-Tbase TZ x155 = x141 * x150;
-Tbase TZ x156 = x144 * x147;
-Tbase TZ x157 = x147 * x144;
-Tbase TZ x158 = x150 * x141;
-Tbase TZ x159 = x157 + x158;
-Tbase TZ x160 = x156 + x159;
-Tbase TZ x161 = x155 + x160;
-Tbase TZ x162 = 0x13;
-Tbase TZ x163 = x162 * x161;
-Tbase TZ x164 = x154 + x163;
-Tbase TZ x165 = 0x33;
-Tbase TZ x166 = x164 >> x165;
-Tbase TZ x167 = x150 * x153;
-Tbase TZ x168 = x153 * x150;
-Tbase TZ x169 = x167 + x168;
-Tbase TZ x170 = x141 * x147;
-Tbase TZ x171 = x144 * x144;
-Tbase TZ x172 = x147 * x141;
-Tbase TZ x173 = x171 + x172;
-Tbase TZ x174 = x170 + x173;
-Tbase TZ x175 = 0x13;
-Tbase TZ x176 = x175 * x174;
-Tbase TZ x177 = x169 + x176;
-Tbase TZ x178 = x166 + x177;
-Tbase TZ x179 = 0x33;
-Tbase TZ x180 = x178 >> x179;
-Tbase TZ x181 = x147 * x153;
-Tbase TZ x182 = x150 * x150;
-Tbase TZ x183 = x153 * x147;
-Tbase TZ x184 = x182 + x183;
-Tbase TZ x185 = x181 + x184;
-Tbase TZ x186 = x141 * x144;
-Tbase TZ x187 = x144 * x141;
-Tbase TZ x188 = x186 + x187;
-Tbase TZ x189 = 0x13;
-Tbase TZ x190 = x189 * x188;
-Tbase TZ x191 = x185 + x190;
-Tbase TZ x192 = x180 + x191;
-Tbase TZ x193 = 0x33;
-Tbase TZ x194 = x192 >> x193;
-Tbase TZ x195 = x144 * x153;
-Tbase TZ x196 = x147 * x150;
-Tbase TZ x197 = x150 * x147;
-Tbase TZ x198 = x153 * x144;
-Tbase TZ x199 = x197 + x198;
-Tbase TZ x200 = x196 + x199;
-Tbase TZ x201 = x195 + x200;
-Tbase TZ x202 = x141 * x141;
-Tbase TZ x203 = 0x13;
-Tbase TZ x204 = x203 * x202;
-Tbase TZ x205 = x201 + x204;
-Tbase TZ x206 = x194 + x205;
-Tbase TZ x207 = 0x33;
-Tbase TZ x208 = x206 >> x207;
-Tbase TZ x209 = x141 * x153;
-Tbase TZ x210 = x144 * x150;
-Tbase TZ x211 = x147 * x147;
-Tbase TZ x212 = x150 * x144;
-Tbase TZ x213 = x153 * x141;
-Tbase TZ x214 = x212 + x213;
-Tbase TZ x215 = x211 + x214;
-Tbase TZ x216 = x210 + x215;
-Tbase TZ x217 = x209 + x216;
-Tbase TZ x218 = x208 + x217;
-Tbase TZ x219 = 0x33;
-Tbase TZ x220 = x218 >> x219;
-Tbase TZ x221 = 0x13;
-Tbase TZ x222 = x221 * x220;
-Tbase TZ x223 = 0x7ffffffffffff;
-Tbase TZ x224 = x164 & x223;
-Tbase TZ x225 = x222 + x224;
-Tbase TZ x226 = 0x33;
-Tbase TZ x227 = x225 >> x226;
-Tbase TZ x228 = 0x7ffffffffffff;
-Tbase TZ x229 = x178 & x228;
-Tbase TZ x230 = x227 + x229;
-Tbase TZ x231 = 0x7ffffffffffff;
-Tbase TZ x232 = x218 & x231;
-Tbase TZ x233 = 0x7ffffffffffff;
-Tbase TZ x234 = x206 & x233;
-Tbase TZ x235 = 0x33;
-Tbase TZ x236 = x230 >> x235;
-Tbase TZ x237 = 0x7ffffffffffff;
-Tbase TZ x238 = x192 & x237;
-Tbase TZ x239 = x236 + x238;
-Tbase TZ x240 = 0x7ffffffffffff;
-Tbase TZ x241 = x230 & x240;
-Tbase TZ x242 = 0x7ffffffffffff;
-Tbase TZ x243 = x225 & x242;
-Tbase TZ x244 = 0xffffffffffffe;
-Tbase TZ x245 = x244 + x127;
-Tbase TZ x246 = x245 - x232;
-Tbase TZ x247 = 0xffffffffffffe;
-Tbase TZ x248 = x247 + x129;
-Tbase TZ x249 = x248 - x234;
-Tbase TZ x250 = 0xffffffffffffe;
-Tbase TZ x251 = x250 + x134;
-Tbase TZ x252 = x251 - x239;
-Tbase TZ x253 = 0xffffffffffffe;
-Tbase TZ x254 = x253 + x136;
-Tbase TZ x255 = x254 - x241;
-Tbase TZ x256 = 0xfffffffffffda;
-Tbase TZ x257 = x256 + x138;
-Tbase TZ x258 = x257 - x243;
-Tbase TZ x259 = x34 + x39;
-Tbase TZ x260 = x35 + x40;
-Tbase TZ x261 = x36 + x41;
-Tbase TZ x262 = x37 + x42;
-Tbase TZ x263 = x38 + x43;
-Tbase TZ x264 = 0xffffffffffffe;
-Tbase TZ x265 = x264 + x34;
-Tbase TZ x266 = x265 - x39;
-Tbase TZ x267 = 0xffffffffffffe;
-Tbase TZ x268 = x267 + x35;
-Tbase TZ x269 = x268 - x40;
-Tbase TZ x270 = 0xffffffffffffe;
-Tbase TZ x271 = x270 + x36;
-Tbase TZ x272 = x271 - x41;
-Tbase TZ x273 = 0xffffffffffffe;
-Tbase TZ x274 = x273 + x37;
-Tbase TZ x275 = x274 - x42;
-Tbase TZ x276 = 0xfffffffffffda;
-Tbase TZ x277 = x276 + x38;
-Tbase TZ x278 = x277 - x43;
-Tbase TZ x279 = x278 * x48;
-Tbase TZ x280 = x266 * x47;
-Tbase TZ x281 = x269 * x46;
-Tbase TZ x282 = x272 * x45;
-Tbase TZ x283 = x275 * x44;
-Tbase TZ x284 = x282 + x283;
-Tbase TZ x285 = x281 + x284;
-Tbase TZ x286 = x280 + x285;
-Tbase TZ x287 = 0x13;
-Tbase TZ x288 = x287 * x286;
-Tbase TZ x289 = x279 + x288;
-Tbase TZ x290 = 0x33;
-Tbase TZ x291 = x289 >> x290;
-Tbase TZ x292 = x275 * x48;
-Tbase TZ x293 = x278 * x47;
-Tbase TZ x294 = x292 + x293;
-Tbase TZ x295 = x266 * x46;
-Tbase TZ x296 = x269 * x45;
-Tbase TZ x297 = x272 * x44;
-Tbase TZ x298 = x296 + x297;
-Tbase TZ x299 = x295 + x298;
-Tbase TZ x300 = 0x13;
-Tbase TZ x301 = x300 * x299;
-Tbase TZ x302 = x294 + x301;
-Tbase TZ x303 = x291 + x302;
-Tbase TZ x304 = 0x33;
-Tbase TZ x305 = x303 >> x304;
-Tbase TZ x306 = x272 * x48;
-Tbase TZ x307 = x275 * x47;
-Tbase TZ x308 = x278 * x46;
-Tbase TZ x309 = x307 + x308;
-Tbase TZ x310 = x306 + x309;
-Tbase TZ x311 = x266 * x45;
-Tbase TZ x312 = x269 * x44;
-Tbase TZ x313 = x311 + x312;
-Tbase TZ x314 = 0x13;
-Tbase TZ x315 = x314 * x313;
-Tbase TZ x316 = x310 + x315;
-Tbase TZ x317 = x305 + x316;
-Tbase TZ x318 = 0x33;
-Tbase TZ x319 = x317 >> x318;
-Tbase TZ x320 = x269 * x48;
-Tbase TZ x321 = x272 * x47;
-Tbase TZ x322 = x275 * x46;
-Tbase TZ x323 = x278 * x45;
-Tbase TZ x324 = x322 + x323;
-Tbase TZ x325 = x321 + x324;
-Tbase TZ x326 = x320 + x325;
-Tbase TZ x327 = x266 * x44;
-Tbase TZ x328 = 0x13;
-Tbase TZ x329 = x328 * x327;
-Tbase TZ x330 = x326 + x329;
-Tbase TZ x331 = x319 + x330;
-Tbase TZ x332 = 0x33;
-Tbase TZ x333 = x331 >> x332;
-Tbase TZ x334 = x266 * x48;
-Tbase TZ x335 = x269 * x47;
-Tbase TZ x336 = x272 * x46;
-Tbase TZ x337 = x275 * x45;
-Tbase TZ x338 = x278 * x44;
-Tbase TZ x339 = x337 + x338;
-Tbase TZ x340 = x336 + x339;
-Tbase TZ x341 = x335 + x340;
-Tbase TZ x342 = x334 + x341;
-Tbase TZ x343 = x333 + x342;
-Tbase TZ x344 = 0x33;
-Tbase TZ x345 = x343 >> x344;
-Tbase TZ x346 = 0x13;
-Tbase TZ x347 = x346 * x345;
-Tbase TZ x348 = 0x7ffffffffffff;
-Tbase TZ x349 = x289 & x348;
-Tbase TZ x350 = x347 + x349;
-Tbase TZ x351 = 0x33;
-Tbase TZ x352 = x350 >> x351;
-Tbase TZ x353 = 0x7ffffffffffff;
-Tbase TZ x354 = x303 & x353;
-Tbase TZ x355 = x352 + x354;
-Tbase TZ x356 = 0x7ffffffffffff;
-Tbase TZ x357 = x343 & x356;
-Tbase TZ x358 = 0x7ffffffffffff;
-Tbase TZ x359 = x331 & x358;
-Tbase TZ x360 = 0x33;
-Tbase TZ x361 = x355 >> x360;
-Tbase TZ x362 = 0x7ffffffffffff;
-Tbase TZ x363 = x317 & x362;
-Tbase TZ x364 = x361 + x363;
-Tbase TZ x365 = 0x7ffffffffffff;
-Tbase TZ x366 = x355 & x365;
-Tbase TZ x367 = 0x7ffffffffffff;
-Tbase TZ x368 = x350 & x367;
-Tbase TZ x369 = x263 * x153;
-Tbase TZ x370 = x259 * x150;
-Tbase TZ x371 = x260 * x147;
-Tbase TZ x372 = x261 * x144;
-Tbase TZ x373 = x262 * x141;
-Tbase TZ x374 = x372 + x373;
-Tbase TZ x375 = x371 + x374;
-Tbase TZ x376 = x370 + x375;
-Tbase TZ x377 = 0x13;
-Tbase TZ x378 = x377 * x376;
-Tbase TZ x379 = x369 + x378;
-Tbase TZ x380 = 0x33;
-Tbase TZ x381 = x379 >> x380;
-Tbase TZ x382 = x262 * x153;
-Tbase TZ x383 = x263 * x150;
-Tbase TZ x384 = x382 + x383;
-Tbase TZ x385 = x259 * x147;
-Tbase TZ x386 = x260 * x144;
-Tbase TZ x387 = x261 * x141;
-Tbase TZ x388 = x386 + x387;
-Tbase TZ x389 = x385 + x388;
-Tbase TZ x390 = 0x13;
-Tbase TZ x391 = x390 * x389;
-Tbase TZ x392 = x384 + x391;
-Tbase TZ x393 = x381 + x392;
-Tbase TZ x394 = 0x33;
-Tbase TZ x395 = x393 >> x394;
-Tbase TZ x396 = x261 * x153;
-Tbase TZ x397 = x262 * x150;
-Tbase TZ x398 = x263 * x147;
-Tbase TZ x399 = x397 + x398;
-Tbase TZ x400 = x396 + x399;
-Tbase TZ x401 = x259 * x144;
-Tbase TZ x402 = x260 * x141;
-Tbase TZ x403 = x401 + x402;
-Tbase TZ x404 = 0x13;
-Tbase TZ x405 = x404 * x403;
-Tbase TZ x406 = x400 + x405;
-Tbase TZ x407 = x395 + x406;
-Tbase TZ x408 = 0x33;
-Tbase TZ x409 = x407 >> x408;
-Tbase TZ x410 = x260 * x153;
-Tbase TZ x411 = x261 * x150;
-Tbase TZ x412 = x262 * x147;
-Tbase TZ x413 = x263 * x144;
-Tbase TZ x414 = x412 + x413;
-Tbase TZ x415 = x411 + x414;
-Tbase TZ x416 = x410 + x415;
-Tbase TZ x417 = x259 * x141;
-Tbase TZ x418 = 0x13;
-Tbase TZ x419 = x418 * x417;
-Tbase TZ x420 = x416 + x419;
-Tbase TZ x421 = x409 + x420;
-Tbase TZ x422 = 0x33;
-Tbase TZ x423 = x421 >> x422;
-Tbase TZ x424 = x259 * x153;
-Tbase TZ x425 = x260 * x150;
-Tbase TZ x426 = x261 * x147;
-Tbase TZ x427 = x262 * x144;
-Tbase TZ x428 = x263 * x141;
-Tbase TZ x429 = x427 + x428;
-Tbase TZ x430 = x426 + x429;
-Tbase TZ x431 = x425 + x430;
-Tbase TZ x432 = x424 + x431;
-Tbase TZ x433 = x423 + x432;
-Tbase TZ x434 = 0x33;
-Tbase TZ x435 = x433 >> x434;
-Tbase TZ x436 = 0x13;
-Tbase TZ x437 = x436 * x435;
-Tbase TZ x438 = 0x7ffffffffffff;
-Tbase TZ x439 = x379 & x438;
-Tbase TZ x440 = x437 + x439;
-Tbase TZ x441 = 0x33;
-Tbase TZ x442 = x440 >> x441;
-Tbase TZ x443 = 0x7ffffffffffff;
-Tbase TZ x444 = x393 & x443;
-Tbase TZ x445 = x442 + x444;
-Tbase TZ x446 = 0x7ffffffffffff;
-Tbase TZ x447 = x433 & x446;
-Tbase TZ x448 = 0x7ffffffffffff;
-Tbase TZ x449 = x421 & x448;
-Tbase TZ x450 = 0x33;
-Tbase TZ x451 = x445 >> x450;
-Tbase TZ x452 = 0x7ffffffffffff;
-Tbase TZ x453 = x407 & x452;
-Tbase TZ x454 = x451 + x453;
-Tbase TZ x455 = 0x7ffffffffffff;
-Tbase TZ x456 = x445 & x455;
-Tbase TZ x457 = 0x7ffffffffffff;
-Tbase TZ x458 = x440 & x457;
-Tbase TZ x459 = x357 + x447;
-Tbase TZ x460 = x359 + x449;
-Tbase TZ x461 = x364 + x454;
-Tbase TZ x462 = x366 + x456;
-Tbase TZ x463 = x368 + x458;
-Tbase TZ x464 = x357 + x447;
-Tbase TZ x465 = x359 + x449;
-Tbase TZ x466 = x364 + x454;
-Tbase TZ x467 = x366 + x456;
-Tbase TZ x468 = x368 + x458;
-Tbase TZ x469 = x463 * x468;
-Tbase TZ x470 = x459 * x467;
-Tbase TZ x471 = x460 * x466;
-Tbase TZ x472 = x461 * x465;
-Tbase TZ x473 = x462 * x464;
-Tbase TZ x474 = x472 + x473;
-Tbase TZ x475 = x471 + x474;
-Tbase TZ x476 = x470 + x475;
-Tbase TZ x477 = 0x13;
-Tbase TZ x478 = x477 * x476;
-Tbase TZ x479 = x469 + x478;
-Tbase TZ x480 = 0x33;
-Tbase TZ x481 = x479 >> x480;
-Tbase TZ x482 = x462 * x468;
-Tbase TZ x483 = x463 * x467;
-Tbase TZ x484 = x482 + x483;
-Tbase TZ x485 = x459 * x466;
-Tbase TZ x486 = x460 * x465;
-Tbase TZ x487 = x461 * x464;
-Tbase TZ x488 = x486 + x487;
-Tbase TZ x489 = x485 + x488;
-Tbase TZ x490 = 0x13;
-Tbase TZ x491 = x490 * x489;
-Tbase TZ x492 = x484 + x491;
-Tbase TZ x493 = x481 + x492;
-Tbase TZ x494 = 0x33;
-Tbase TZ x495 = x493 >> x494;
-Tbase TZ x496 = x461 * x468;
-Tbase TZ x497 = x462 * x467;
-Tbase TZ x498 = x463 * x466;
-Tbase TZ x499 = x497 + x498;
-Tbase TZ x500 = x496 + x499;
-Tbase TZ x501 = x459 * x465;
-Tbase TZ x502 = x460 * x464;
-Tbase TZ x503 = x501 + x502;
-Tbase TZ x504 = 0x13;
-Tbase TZ x505 = x504 * x503;
-Tbase TZ x506 = x500 + x505;
-Tbase TZ x507 = x495 + x506;
-Tbase TZ x508 = 0x33;
-Tbase TZ x509 = x507 >> x508;
-Tbase TZ x510 = x460 * x468;
-Tbase TZ x511 = x461 * x467;
-Tbase TZ x512 = x462 * x466;
-Tbase TZ x513 = x463 * x465;
-Tbase TZ x514 = x512 + x513;
-Tbase TZ x515 = x511 + x514;
-Tbase TZ x516 = x510 + x515;
-Tbase TZ x517 = x459 * x464;
-Tbase TZ x518 = 0x13;
-Tbase TZ x519 = x518 * x517;
-Tbase TZ x520 = x516 + x519;
-Tbase TZ x521 = x509 + x520;
-Tbase TZ x522 = 0x33;
-Tbase TZ x523 = x521 >> x522;
-Tbase TZ x524 = x459 * x468;
-Tbase TZ x525 = x460 * x467;
-Tbase TZ x526 = x461 * x466;
-Tbase TZ x527 = x462 * x465;
-Tbase TZ x528 = x463 * x464;
-Tbase TZ x529 = x527 + x528;
-Tbase TZ x530 = x526 + x529;
-Tbase TZ x531 = x525 + x530;
-Tbase TZ x532 = x524 + x531;
-Tbase TZ x533 = x523 + x532;
-Tbase TZ x534 = 0x33;
-Tbase TZ x535 = x533 >> x534;
-Tbase TZ x536 = 0x13;
-Tbase TZ x537 = x536 * x535;
-Tbase TZ x538 = 0x7ffffffffffff;
-Tbase TZ x539 = x479 & x538;
-Tbase TZ x540 = x537 + x539;
-Tbase TZ x541 = 0x33;
-Tbase TZ x542 = x540 >> x541;
-Tbase TZ x543 = 0x7ffffffffffff;
-Tbase TZ x544 = x493 & x543;
-Tbase TZ x545 = x542 + x544;
-Tbase TZ x546 = 0x7ffffffffffff;
-Tbase TZ x547 = x533 & x546;
-Tbase TZ x548 = 0x7ffffffffffff;
-Tbase TZ x549 = x521 & x548;
-Tbase TZ x550 = 0x33;
-Tbase TZ x551 = x545 >> x550;
-Tbase TZ x552 = 0x7ffffffffffff;
-Tbase TZ x553 = x507 & x552;
-Tbase TZ x554 = x551 + x553;
-Tbase TZ x555 = 0x7ffffffffffff;
-Tbase TZ x556 = x545 & x555;
-Tbase TZ x557 = 0x7ffffffffffff;
-Tbase TZ x558 = x540 & x557;
-Tbase TZ x559 = 0xffffffffffffe;
-Tbase TZ x560 = x559 + x357;
-Tbase TZ x561 = x560 - x447;
-Tbase TZ x562 = 0xffffffffffffe;
-Tbase TZ x563 = x562 + x359;
-Tbase TZ x564 = x563 - x449;
-Tbase TZ x565 = 0xffffffffffffe;
-Tbase TZ x566 = x565 + x364;
-Tbase TZ x567 = x566 - x454;
-Tbase TZ x568 = 0xffffffffffffe;
-Tbase TZ x569 = x568 + x366;
-Tbase TZ x570 = x569 - x456;
-Tbase TZ x571 = 0xfffffffffffda;
-Tbase TZ x572 = x571 + x368;
-Tbase TZ x573 = x572 - x458;
-Tbase TZ x574 = 0xffffffffffffe;
-Tbase TZ x575 = x574 + x357;
-Tbase TZ x576 = x575 - x447;
-Tbase TZ x577 = 0xffffffffffffe;
-Tbase TZ x578 = x577 + x359;
-Tbase TZ x579 = x578 - x449;
-Tbase TZ x580 = 0xffffffffffffe;
-Tbase TZ x581 = x580 + x364;
-Tbase TZ x582 = x581 - x454;
-Tbase TZ x583 = 0xffffffffffffe;
-Tbase TZ x584 = x583 + x366;
-Tbase TZ x585 = x584 - x456;
-Tbase TZ x586 = 0xfffffffffffda;
-Tbase TZ x587 = x586 + x368;
-Tbase TZ x588 = x587 - x458;
-Tbase TZ x589 = x573 * x588;
-Tbase TZ x590 = x561 * x585;
-Tbase TZ x591 = x564 * x582;
-Tbase TZ x592 = x567 * x579;
-Tbase TZ x593 = x570 * x576;
-Tbase TZ x594 = x592 + x593;
-Tbase TZ x595 = x591 + x594;
-Tbase TZ x596 = x590 + x595;
-Tbase TZ x597 = 0x13;
-Tbase TZ x598 = x597 * x596;
-Tbase TZ x599 = x589 + x598;
-Tbase TZ x600 = 0x33;
-Tbase TZ x601 = x599 >> x600;
-Tbase TZ x602 = x570 * x588;
-Tbase TZ x603 = x573 * x585;
-Tbase TZ x604 = x602 + x603;
-Tbase TZ x605 = x561 * x582;
-Tbase TZ x606 = x564 * x579;
-Tbase TZ x607 = x567 * x576;
-Tbase TZ x608 = x606 + x607;
-Tbase TZ x609 = x605 + x608;
-Tbase TZ x610 = 0x13;
-Tbase TZ x611 = x610 * x609;
-Tbase TZ x612 = x604 + x611;
-Tbase TZ x613 = x601 + x612;
-Tbase TZ x614 = 0x33;
-Tbase TZ x615 = x613 >> x614;
-Tbase TZ x616 = x567 * x588;
-Tbase TZ x617 = x570 * x585;
-Tbase TZ x618 = x573 * x582;
-Tbase TZ x619 = x617 + x618;
-Tbase TZ x620 = x616 + x619;
-Tbase TZ x621 = x561 * x579;
-Tbase TZ x622 = x564 * x576;
-Tbase TZ x623 = x621 + x622;
-Tbase TZ x624 = 0x13;
-Tbase TZ x625 = x624 * x623;
-Tbase TZ x626 = x620 + x625;
-Tbase TZ x627 = x615 + x626;
-Tbase TZ x628 = 0x33;
-Tbase TZ x629 = x627 >> x628;
-Tbase TZ x630 = x564 * x588;
-Tbase TZ x631 = x567 * x585;
-Tbase TZ x632 = x570 * x582;
-Tbase TZ x633 = x573 * x579;
-Tbase TZ x634 = x632 + x633;
-Tbase TZ x635 = x631 + x634;
-Tbase TZ x636 = x630 + x635;
-Tbase TZ x637 = x561 * x576;
-Tbase TZ x638 = 0x13;
-Tbase TZ x639 = x638 * x637;
-Tbase TZ x640 = x636 + x639;
-Tbase TZ x641 = x629 + x640;
-Tbase TZ x642 = 0x33;
-Tbase TZ x643 = x641 >> x642;
-Tbase TZ x644 = x561 * x588;
-Tbase TZ x645 = x564 * x585;
-Tbase TZ x646 = x567 * x582;
-Tbase TZ x647 = x570 * x579;
-Tbase TZ x648 = x573 * x576;
-Tbase TZ x649 = x647 + x648;
-Tbase TZ x650 = x646 + x649;
-Tbase TZ x651 = x645 + x650;
-Tbase TZ x652 = x644 + x651;
-Tbase TZ x653 = x643 + x652;
-Tbase TZ x654 = 0x33;
-Tbase TZ x655 = x653 >> x654;
-Tbase TZ x656 = 0x13;
-Tbase TZ x657 = x656 * x655;
-Tbase TZ x658 = 0x7ffffffffffff;
-Tbase TZ x659 = x599 & x658;
-Tbase TZ x660 = x657 + x659;
-Tbase TZ x661 = 0x33;
-Tbase TZ x662 = x660 >> x661;
-Tbase TZ x663 = 0x7ffffffffffff;
-Tbase TZ x664 = x613 & x663;
-Tbase TZ x665 = x662 + x664;
-Tbase TZ x666 = 0x7ffffffffffff;
-Tbase TZ x667 = x653 & x666;
-Tbase TZ x668 = 0x7ffffffffffff;
-Tbase TZ x669 = x641 & x668;
-Tbase TZ x670 = 0x33;
-Tbase TZ x671 = x665 >> x670;
-Tbase TZ x672 = 0x7ffffffffffff;
-Tbase TZ x673 = x627 & x672;
-Tbase TZ x674 = x671 + x673;
-Tbase TZ x675 = 0x7ffffffffffff;
-Tbase TZ x676 = x665 & x675;
-Tbase TZ x677 = 0x7ffffffffffff;
-Tbase TZ x678 = x660 & x677;
-Tbase TZ x679 = x23 * x678;
-Tbase TZ x680 = x19 * x676;
-Tbase TZ x681 = x20 * x674;
-Tbase TZ x682 = x21 * x669;
-Tbase TZ x683 = x22 * x667;
-Tbase TZ x684 = x682 + x683;
-Tbase TZ x685 = x681 + x684;
-Tbase TZ x686 = x680 + x685;
-Tbase TZ x687 = 0x13;
-Tbase TZ x688 = x687 * x686;
-Tbase TZ x689 = x679 + x688;
-Tbase TZ x690 = 0x33;
-Tbase TZ x691 = x689 >> x690;
-Tbase TZ x692 = x22 * x678;
-Tbase TZ x693 = x23 * x676;
-Tbase TZ x694 = x692 + x693;
-Tbase TZ x695 = x19 * x674;
-Tbase TZ x696 = x20 * x669;
-Tbase TZ x697 = x21 * x667;
-Tbase TZ x698 = x696 + x697;
-Tbase TZ x699 = x695 + x698;
-Tbase TZ x700 = 0x13;
-Tbase TZ x701 = x700 * x699;
-Tbase TZ x702 = x694 + x701;
-Tbase TZ x703 = x691 + x702;
-Tbase TZ x704 = 0x33;
-Tbase TZ x705 = x703 >> x704;
-Tbase TZ x706 = x21 * x678;
-Tbase TZ x707 = x22 * x676;
-Tbase TZ x708 = x23 * x674;
-Tbase TZ x709 = x707 + x708;
-Tbase TZ x710 = x706 + x709;
-Tbase TZ x711 = x19 * x669;
-Tbase TZ x712 = x20 * x667;
-Tbase TZ x713 = x711 + x712;
-Tbase TZ x714 = 0x13;
-Tbase TZ x715 = x714 * x713;
-Tbase TZ x716 = x710 + x715;
-Tbase TZ x717 = x705 + x716;
-Tbase TZ x718 = 0x33;
-Tbase TZ x719 = x717 >> x718;
-Tbase TZ x720 = x20 * x678;
-Tbase TZ x721 = x21 * x676;
-Tbase TZ x722 = x22 * x674;
-Tbase TZ x723 = x23 * x669;
-Tbase TZ x724 = x722 + x723;
-Tbase TZ x725 = x721 + x724;
-Tbase TZ x726 = x720 + x725;
-Tbase TZ x727 = x19 * x667;
-Tbase TZ x728 = 0x13;
-Tbase TZ x729 = x728 * x727;
-Tbase TZ x730 = x726 + x729;
-Tbase TZ x731 = x719 + x730;
-Tbase TZ x732 = 0x33;
-Tbase TZ x733 = x731 >> x732;
-Tbase TZ x734 = x19 * x678;
-Tbase TZ x735 = x20 * x676;
-Tbase TZ x736 = x21 * x674;
-Tbase TZ x737 = x22 * x669;
-Tbase TZ x738 = x23 * x667;
-Tbase TZ x739 = x737 + x738;
-Tbase TZ x740 = x736 + x739;
-Tbase TZ x741 = x735 + x740;
-Tbase TZ x742 = x734 + x741;
-Tbase TZ x743 = x733 + x742;
-Tbase TZ x744 = 0x33;
-Tbase TZ x745 = x743 >> x744;
-Tbase TZ x746 = 0x13;
-Tbase TZ x747 = x746 * x745;
-Tbase TZ x748 = 0x7ffffffffffff;
-Tbase TZ x749 = x689 & x748;
-Tbase TZ x750 = x747 + x749;
-Tbase TZ x751 = 0x33;
-Tbase TZ x752 = x750 >> x751;
-Tbase TZ x753 = 0x7ffffffffffff;
-Tbase TZ x754 = x703 & x753;
-Tbase TZ x755 = x752 + x754;
-Tbase TZ x756 = 0x7ffffffffffff;
-Tbase TZ x757 = x743 & x756;
-Tbase TZ x758 = 0x7ffffffffffff;
-Tbase TZ x759 = x731 & x758;
-Tbase TZ x760 = 0x33;
-Tbase TZ x761 = x755 >> x760;
-Tbase TZ x762 = 0x7ffffffffffff;
-Tbase TZ x763 = x717 & x762;
-Tbase TZ x764 = x761 + x763;
-Tbase TZ x765 = 0x7ffffffffffff;
-Tbase TZ x766 = x755 & x765;
-Tbase TZ x767 = 0x7ffffffffffff;
-Tbase TZ x768 = x750 & x767;
-Tbase TZ x769 = x138 * x243;
-Tbase TZ x770 = x127 * x241;
-Tbase TZ x771 = x129 * x239;
-Tbase TZ x772 = x134 * x234;
-Tbase TZ x773 = x136 * x232;
-Tbase TZ x774 = x772 + x773;
-Tbase TZ x775 = x771 + x774;
-Tbase TZ x776 = x770 + x775;
-Tbase TZ x777 = 0x13;
-Tbase TZ x778 = x777 * x776;
-Tbase TZ x779 = x769 + x778;
-Tbase TZ x780 = 0x33;
-Tbase TZ x781 = x779 >> x780;
-Tbase TZ x782 = x136 * x243;
-Tbase TZ x783 = x138 * x241;
-Tbase TZ x784 = x782 + x783;
-Tbase TZ x785 = x127 * x239;
-Tbase TZ x786 = x129 * x234;
-Tbase TZ x787 = x134 * x232;
-Tbase TZ x788 = x786 + x787;
-Tbase TZ x789 = x785 + x788;
-Tbase TZ x790 = 0x13;
-Tbase TZ x791 = x790 * x789;
-Tbase TZ x792 = x784 + x791;
-Tbase TZ x793 = x781 + x792;
-Tbase TZ x794 = 0x33;
-Tbase TZ x795 = x793 >> x794;
-Tbase TZ x796 = x134 * x243;
-Tbase TZ x797 = x136 * x241;
-Tbase TZ x798 = x138 * x239;
-Tbase TZ x799 = x797 + x798;
-Tbase TZ x800 = x796 + x799;
-Tbase TZ x801 = x127 * x234;
-Tbase TZ x802 = x129 * x232;
-Tbase TZ x803 = x801 + x802;
-Tbase TZ x804 = 0x13;
-Tbase TZ x805 = x804 * x803;
-Tbase TZ x806 = x800 + x805;
-Tbase TZ x807 = x795 + x806;
-Tbase TZ x808 = 0x33;
-Tbase TZ x809 = x807 >> x808;
-Tbase TZ x810 = x129 * x243;
-Tbase TZ x811 = x134 * x241;
-Tbase TZ x812 = x136 * x239;
-Tbase TZ x813 = x138 * x234;
-Tbase TZ x814 = x812 + x813;
-Tbase TZ x815 = x811 + x814;
-Tbase TZ x816 = x810 + x815;
-Tbase TZ x817 = x127 * x232;
-Tbase TZ x818 = 0x13;
-Tbase TZ x819 = x818 * x817;
-Tbase TZ x820 = x816 + x819;
-Tbase TZ x821 = x809 + x820;
-Tbase TZ x822 = 0x33;
-Tbase TZ x823 = x821 >> x822;
-Tbase TZ x824 = x127 * x243;
-Tbase TZ x825 = x129 * x241;
-Tbase TZ x826 = x134 * x239;
-Tbase TZ x827 = x136 * x234;
-Tbase TZ x828 = x138 * x232;
-Tbase TZ x829 = x827 + x828;
-Tbase TZ x830 = x826 + x829;
-Tbase TZ x831 = x825 + x830;
-Tbase TZ x832 = x824 + x831;
-Tbase TZ x833 = x823 + x832;
-Tbase TZ x834 = 0x33;
-Tbase TZ x835 = x833 >> x834;
-Tbase TZ x836 = 0x13;
-Tbase TZ x837 = x836 * x835;
-Tbase TZ x838 = 0x7ffffffffffff;
-Tbase TZ x839 = x779 & x838;
-Tbase TZ x840 = x837 + x839;
-Tbase TZ x841 = 0x33;
-Tbase TZ x842 = x840 >> x841;
-Tbase TZ x843 = 0x7ffffffffffff;
-Tbase TZ x844 = x793 & x843;
-Tbase TZ x845 = x842 + x844;
-Tbase TZ x846 = 0x7ffffffffffff;
-Tbase TZ x847 = x833 & x846;
-Tbase TZ x848 = 0x7ffffffffffff;
-Tbase TZ x849 = x821 & x848;
-Tbase TZ x850 = 0x33;
-Tbase TZ x851 = x845 >> x850;
-Tbase TZ x852 = 0x7ffffffffffff;
-Tbase TZ x853 = x807 & x852;
-Tbase TZ x854 = x851 + x853;
-Tbase TZ x855 = 0x7ffffffffffff;
-Tbase TZ x856 = x845 & x855;
-Tbase TZ x857 = 0x7ffffffffffff;
-Tbase TZ x858 = x840 & x857;
-Tbase TZ x859 = x18 * x258;
-Tbase TZ x860 = x14 * x255;
-Tbase TZ x861 = x15 * x252;
-Tbase TZ x862 = x16 * x249;
-Tbase TZ x863 = x17 * x246;
-Tbase TZ x864 = x862 + x863;
-Tbase TZ x865 = x861 + x864;
-Tbase TZ x866 = x860 + x865;
-Tbase TZ x867 = 0x13;
-Tbase TZ x868 = x867 * x866;
-Tbase TZ x869 = x859 + x868;
-Tbase TZ x870 = 0x33;
-Tbase TZ x871 = x869 >> x870;
-Tbase TZ x872 = x17 * x258;
-Tbase TZ x873 = x18 * x255;
-Tbase TZ x874 = x872 + x873;
-Tbase TZ x875 = x14 * x252;
-Tbase TZ x876 = x15 * x249;
-Tbase TZ x877 = x16 * x246;
-Tbase TZ x878 = x876 + x877;
-Tbase TZ x879 = x875 + x878;
-Tbase TZ x880 = 0x13;
-Tbase TZ x881 = x880 * x879;
-Tbase TZ x882 = x874 + x881;
-Tbase TZ x883 = x871 + x882;
-Tbase TZ x884 = 0x33;
-Tbase TZ x885 = x883 >> x884;
-Tbase TZ x886 = x16 * x258;
-Tbase TZ x887 = x17 * x255;
-Tbase TZ x888 = x18 * x252;
-Tbase TZ x889 = x887 + x888;
-Tbase TZ x890 = x886 + x889;
-Tbase TZ x891 = x14 * x249;
-Tbase TZ x892 = x15 * x246;
-Tbase TZ x893 = x891 + x892;
-Tbase TZ x894 = 0x13;
-Tbase TZ x895 = x894 * x893;
-Tbase TZ x896 = x890 + x895;
-Tbase TZ x897 = x885 + x896;
-Tbase TZ x898 = 0x33;
-Tbase TZ x899 = x897 >> x898;
-Tbase TZ x900 = x15 * x258;
-Tbase TZ x901 = x16 * x255;
-Tbase TZ x902 = x17 * x252;
-Tbase TZ x903 = x18 * x249;
-Tbase TZ x904 = x902 + x903;
-Tbase TZ x905 = x901 + x904;
-Tbase TZ x906 = x900 + x905;
-Tbase TZ x907 = x14 * x246;
-Tbase TZ x908 = 0x13;
-Tbase TZ x909 = x908 * x907;
-Tbase TZ x910 = x906 + x909;
-Tbase TZ x911 = x899 + x910;
-Tbase TZ x912 = 0x33;
-Tbase TZ x913 = x911 >> x912;
-Tbase TZ x914 = x14 * x258;
-Tbase TZ x915 = x15 * x255;
-Tbase TZ x916 = x16 * x252;
-Tbase TZ x917 = x17 * x249;
-Tbase TZ x918 = x18 * x246;
-Tbase TZ x919 = x917 + x918;
-Tbase TZ x920 = x916 + x919;
-Tbase TZ x921 = x915 + x920;
-Tbase TZ x922 = x914 + x921;
-Tbase TZ x923 = x913 + x922;
-Tbase TZ x924 = 0x33;
-Tbase TZ x925 = x923 >> x924;
-Tbase TZ x926 = 0x13;
-Tbase TZ x927 = x926 * x925;
-Tbase TZ x928 = 0x7ffffffffffff;
-Tbase TZ x929 = x869 & x928;
-Tbase TZ x930 = x927 + x929;
-Tbase TZ x931 = 0x33;
-Tbase TZ x932 = x930 >> x931;
-Tbase TZ x933 = 0x7ffffffffffff;
-Tbase TZ x934 = x883 & x933;
-Tbase TZ x935 = x932 + x934;
-Tbase TZ x936 = 0x7ffffffffffff;
-Tbase TZ x937 = x923 & x936;
-Tbase TZ x938 = 0x7ffffffffffff;
-Tbase TZ x939 = x911 & x938;
-Tbase TZ x940 = 0x33;
-Tbase TZ x941 = x935 >> x940;
-Tbase TZ x942 = 0x7ffffffffffff;
-Tbase TZ x943 = x897 & x942;
-Tbase TZ x944 = x941 + x943;
-Tbase TZ x945 = 0x7ffffffffffff;
-Tbase TZ x946 = x935 & x945;
-Tbase TZ x947 = 0x7ffffffffffff;
-Tbase TZ x948 = x930 & x947;
-Tbase TZ x949 = x127 + x937;
-Tbase TZ x950 = x129 + x939;
-Tbase TZ x951 = x134 + x944;
-Tbase TZ x952 = x136 + x946;
-Tbase TZ x953 = x138 + x948;
-Tbase TZ x954 = x258 * x953;
-Tbase TZ x955 = x246 * x952;
-Tbase TZ x956 = x249 * x951;
-Tbase TZ x957 = x252 * x950;
-Tbase TZ x958 = x255 * x949;
-Tbase TZ x959 = x957 + x958;
-Tbase TZ x960 = x956 + x959;
-Tbase TZ x961 = x955 + x960;
-Tbase TZ x962 = 0x13;
-Tbase TZ x963 = x962 * x961;
-Tbase TZ x964 = x954 + x963;
-Tbase TZ x965 = 0x33;
-Tbase TZ x966 = x964 >> x965;
-Tbase TZ x967 = x255 * x953;
-Tbase TZ x968 = x258 * x952;
-Tbase TZ x969 = x967 + x968;
-Tbase TZ x970 = x246 * x951;
-Tbase TZ x971 = x249 * x950;
-Tbase TZ x972 = x252 * x949;
-Tbase TZ x973 = x971 + x972;
-Tbase TZ x974 = x970 + x973;
-Tbase TZ x975 = 0x13;
-Tbase TZ x976 = x975 * x974;
-Tbase TZ x977 = x969 + x976;
-Tbase TZ x978 = x966 + x977;
-Tbase TZ x979 = 0x33;
-Tbase TZ x980 = x978 >> x979;
-Tbase TZ x981 = x252 * x953;
-Tbase TZ x982 = x255 * x952;
-Tbase TZ x983 = x258 * x951;
-Tbase TZ x984 = x982 + x983;
-Tbase TZ x985 = x981 + x984;
-Tbase TZ x986 = x246 * x950;
-Tbase TZ x987 = x249 * x949;
-Tbase TZ x988 = x986 + x987;
-Tbase TZ x989 = 0x13;
-Tbase TZ x990 = x989 * x988;
-Tbase TZ x991 = x985 + x990;
-Tbase TZ x992 = x980 + x991;
-Tbase TZ x993 = 0x33;
-Tbase TZ x994 = x992 >> x993;
-Tbase TZ x995 = x249 * x953;
-Tbase TZ x996 = x252 * x952;
-Tbase TZ x997 = x255 * x951;
-Tbase TZ x998 = x258 * x950;
-Tbase TZ x999 = x997 + x998;
-Tbase TZ x1000 = x996 + x999;
-Tbase TZ x1001 = x995 + x1000;
-Tbase TZ x1002 = x246 * x949;
-Tbase TZ x1003 = 0x13;
-Tbase TZ x1004 = x1003 * x1002;
-Tbase TZ x1005 = x1001 + x1004;
-Tbase TZ x1006 = x994 + x1005;
-Tbase TZ x1007 = 0x33;
-Tbase TZ x1008 = x1006 >> x1007;
-Tbase TZ x1009 = x246 * x953;
-Tbase TZ x1010 = x249 * x952;
-Tbase TZ x1011 = x252 * x951;
-Tbase TZ x1012 = x255 * x950;
-Tbase TZ x1013 = x258 * x949;
-Tbase TZ x1014 = x1012 + x1013;
-Tbase TZ x1015 = x1011 + x1014;
-Tbase TZ x1016 = x1010 + x1015;
-Tbase TZ x1017 = x1009 + x1016;
-Tbase TZ x1018 = x1008 + x1017;
-Tbase TZ x1019 = 0x33;
-Tbase TZ x1020 = x1018 >> x1019;
-Tbase TZ x1021 = 0x13;
-Tbase TZ x1022 = x1021 * x1020;
-Tbase TZ x1023 = 0x7ffffffffffff;
-Tbase TZ x1024 = x964 & x1023;
-Tbase TZ x1025 = x1022 + x1024;
-Tbase TZ x1026 = 0x33;
-Tbase TZ x1027 = x1025 >> x1026;
-Tbase TZ x1028 = 0x7ffffffffffff;
-Tbase TZ x1029 = x978 & x1028;
-Tbase TZ x1030 = x1027 + x1029;
-Tbase TZ x1031 = 0x7ffffffffffff;
-Tbase TZ x1032 = x1018 & x1031;
-Tbase TZ x1033 = 0x7ffffffffffff;
-Tbase TZ x1034 = x1006 & x1033;
-Tbase TZ x1035 = 0x33;
-Tbase TZ x1036 = x1030 >> x1035;
-Tbase TZ x1037 = 0x7ffffffffffff;
-Tbase TZ x1038 = x992 & x1037;
-Tbase TZ x1039 = x1036 + x1038;
-Tbase TZ x1040 = 0x7ffffffffffff;
-Tbase TZ x1041 = x1030 & x1040;
-Tbase TZ x1042 = 0x7ffffffffffff;
-Tbase TZ x1043 = x1025 & x1042;
-(Return x847, Return x849, Return x854, Return x856,
-Return x858,
-(Return x1032, Return x1034, Return x1039, Return x1041, Return x1043),
-(Return x547, Return x549, Return x554, Return x556, Return x558),
-(Return x757, Return x759, Return x764, Return x766, Return x768))
- : forall var : base_type -> Type,
- expr base_type op
- (TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> ...)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF25519_64Reflective/Reified/LadderStepDisplay.v b/src/SpecificGen/GF25519_64Reflective/Reified/LadderStepDisplay.v
deleted file mode 100644
index 209d0eedb..000000000
--- a/src/SpecificGen/GF25519_64Reflective/Reified/LadderStepDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_64Reflective.Reified.LadderStep.
-Require Export Crypto.Reflection.Z.CNotations.
-
-Print rladderstepW.
diff --git a/src/SpecificGen/GF25519_64Reflective/Reified/LadderStepJavaDisplay.log b/src/SpecificGen/GF25519_64Reflective/Reified/LadderStepJavaDisplay.log
deleted file mode 100644
index 86c86f426..000000000
--- a/src/SpecificGen/GF25519_64Reflective/Reified/LadderStepJavaDisplay.log
+++ /dev/null
@@ -1,1050 +0,0 @@
-rladderstepW =
-fun var : base_type -> Type =>
-λ
-_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25
- x26 x27 x28 x29 x30 x31 x32 x33 x34 x35 x36 x37 x38 x39 x40 x41 x42
- x43 : var TZ,
-Tbase TZ x44 = x24 + x29;
-Tbase TZ x45 = x25 + x30;
-Tbase TZ x46 = x26 + x31;
-Tbase TZ x47 = x27 + x32;
-Tbase TZ x48 = x28 + x33;
-Tbase TZ x49 = x48 * x48;
-Tbase TZ x50 = x44 * x47;
-Tbase TZ x51 = x45 * x46;
-Tbase TZ x52 = x46 * x45;
-Tbase TZ x53 = x47 * x44;
-Tbase TZ x54 = x52 + x53;
-Tbase TZ x55 = x51 + x54;
-Tbase TZ x56 = x50 + x55;
-Tbase TZ x57 = 0x13;
-Tbase TZ x58 = x57 * x56;
-Tbase TZ x59 = x49 + x58;
-Tbase TZ x60 = 0x33;
-Tbase TZ x61 = x59 >>> x60;
-Tbase TZ x62 = x47 * x48;
-Tbase TZ x63 = x48 * x47;
-Tbase TZ x64 = x62 + x63;
-Tbase TZ x65 = x44 * x46;
-Tbase TZ x66 = x45 * x45;
-Tbase TZ x67 = x46 * x44;
-Tbase TZ x68 = x66 + x67;
-Tbase TZ x69 = x65 + x68;
-Tbase TZ x70 = 0x13;
-Tbase TZ x71 = x70 * x69;
-Tbase TZ x72 = x64 + x71;
-Tbase TZ x73 = x61 + x72;
-Tbase TZ x74 = 0x33;
-Tbase TZ x75 = x73 >>> x74;
-Tbase TZ x76 = x46 * x48;
-Tbase TZ x77 = x47 * x47;
-Tbase TZ x78 = x48 * x46;
-Tbase TZ x79 = x77 + x78;
-Tbase TZ x80 = x76 + x79;
-Tbase TZ x81 = x44 * x45;
-Tbase TZ x82 = x45 * x44;
-Tbase TZ x83 = x81 + x82;
-Tbase TZ x84 = 0x13;
-Tbase TZ x85 = x84 * x83;
-Tbase TZ x86 = x80 + x85;
-Tbase TZ x87 = x75 + x86;
-Tbase TZ x88 = 0x33;
-Tbase TZ x89 = x87 >>> x88;
-Tbase TZ x90 = x45 * x48;
-Tbase TZ x91 = x46 * x47;
-Tbase TZ x92 = x47 * x46;
-Tbase TZ x93 = x48 * x45;
-Tbase TZ x94 = x92 + x93;
-Tbase TZ x95 = x91 + x94;
-Tbase TZ x96 = x90 + x95;
-Tbase TZ x97 = x44 * x44;
-Tbase TZ x98 = 0x13;
-Tbase TZ x99 = x98 * x97;
-Tbase TZ x100 = x96 + x99;
-Tbase TZ x101 = x89 + x100;
-Tbase TZ x102 = 0x33;
-Tbase TZ x103 = x101 >>> x102;
-Tbase TZ x104 = x44 * x48;
-Tbase TZ x105 = x45 * x47;
-Tbase TZ x106 = x46 * x46;
-Tbase TZ x107 = x47 * x45;
-Tbase TZ x108 = x48 * x44;
-Tbase TZ x109 = x107 + x108;
-Tbase TZ x110 = x106 + x109;
-Tbase TZ x111 = x105 + x110;
-Tbase TZ x112 = x104 + x111;
-Tbase TZ x113 = x103 + x112;
-Tbase TZ x114 = 0x33;
-Tbase TZ x115 = x113 >>> x114;
-Tbase TZ x116 = 0x13;
-Tbase TZ x117 = x116 * x115;
-Tbase TZ x118 = 0x7ffffffffffff;
-Tbase TZ x119 = x59 & x118;
-Tbase TZ x120 = x117 + x119;
-Tbase TZ x121 = 0x33;
-Tbase TZ x122 = x120 >>> x121;
-Tbase TZ x123 = 0x7ffffffffffff;
-Tbase TZ x124 = x73 & x123;
-Tbase TZ x125 = x122 + x124;
-Tbase TZ x126 = 0x7ffffffffffff;
-Tbase TZ x127 = x113 & x126;
-Tbase TZ x128 = 0x7ffffffffffff;
-Tbase TZ x129 = x101 & x128;
-Tbase TZ x130 = 0x33;
-Tbase TZ x131 = x125 >>> x130;
-Tbase TZ x132 = 0x7ffffffffffff;
-Tbase TZ x133 = x87 & x132;
-Tbase TZ x134 = x131 + x133;
-Tbase TZ x135 = 0x7ffffffffffff;
-Tbase TZ x136 = x125 & x135;
-Tbase TZ x137 = 0x7ffffffffffff;
-Tbase TZ x138 = x120 & x137;
-Tbase TZ x139 = 0xffffffffffffe;
-Tbase TZ x140 = x139 + x24;
-Tbase TZ x141 = x140 - x29;
-Tbase TZ x142 = 0xffffffffffffe;
-Tbase TZ x143 = x142 + x25;
-Tbase TZ x144 = x143 - x30;
-Tbase TZ x145 = 0xffffffffffffe;
-Tbase TZ x146 = x145 + x26;
-Tbase TZ x147 = x146 - x31;
-Tbase TZ x148 = 0xffffffffffffe;
-Tbase TZ x149 = x148 + x27;
-Tbase TZ x150 = x149 - x32;
-Tbase TZ x151 = 0xfffffffffffda;
-Tbase TZ x152 = x151 + x28;
-Tbase TZ x153 = x152 - x33;
-Tbase TZ x154 = x153 * x153;
-Tbase TZ x155 = x141 * x150;
-Tbase TZ x156 = x144 * x147;
-Tbase TZ x157 = x147 * x144;
-Tbase TZ x158 = x150 * x141;
-Tbase TZ x159 = x157 + x158;
-Tbase TZ x160 = x156 + x159;
-Tbase TZ x161 = x155 + x160;
-Tbase TZ x162 = 0x13;
-Tbase TZ x163 = x162 * x161;
-Tbase TZ x164 = x154 + x163;
-Tbase TZ x165 = 0x33;
-Tbase TZ x166 = x164 >>> x165;
-Tbase TZ x167 = x150 * x153;
-Tbase TZ x168 = x153 * x150;
-Tbase TZ x169 = x167 + x168;
-Tbase TZ x170 = x141 * x147;
-Tbase TZ x171 = x144 * x144;
-Tbase TZ x172 = x147 * x141;
-Tbase TZ x173 = x171 + x172;
-Tbase TZ x174 = x170 + x173;
-Tbase TZ x175 = 0x13;
-Tbase TZ x176 = x175 * x174;
-Tbase TZ x177 = x169 + x176;
-Tbase TZ x178 = x166 + x177;
-Tbase TZ x179 = 0x33;
-Tbase TZ x180 = x178 >>> x179;
-Tbase TZ x181 = x147 * x153;
-Tbase TZ x182 = x150 * x150;
-Tbase TZ x183 = x153 * x147;
-Tbase TZ x184 = x182 + x183;
-Tbase TZ x185 = x181 + x184;
-Tbase TZ x186 = x141 * x144;
-Tbase TZ x187 = x144 * x141;
-Tbase TZ x188 = x186 + x187;
-Tbase TZ x189 = 0x13;
-Tbase TZ x190 = x189 * x188;
-Tbase TZ x191 = x185 + x190;
-Tbase TZ x192 = x180 + x191;
-Tbase TZ x193 = 0x33;
-Tbase TZ x194 = x192 >>> x193;
-Tbase TZ x195 = x144 * x153;
-Tbase TZ x196 = x147 * x150;
-Tbase TZ x197 = x150 * x147;
-Tbase TZ x198 = x153 * x144;
-Tbase TZ x199 = x197 + x198;
-Tbase TZ x200 = x196 + x199;
-Tbase TZ x201 = x195 + x200;
-Tbase TZ x202 = x141 * x141;
-Tbase TZ x203 = 0x13;
-Tbase TZ x204 = x203 * x202;
-Tbase TZ x205 = x201 + x204;
-Tbase TZ x206 = x194 + x205;
-Tbase TZ x207 = 0x33;
-Tbase TZ x208 = x206 >>> x207;
-Tbase TZ x209 = x141 * x153;
-Tbase TZ x210 = x144 * x150;
-Tbase TZ x211 = x147 * x147;
-Tbase TZ x212 = x150 * x144;
-Tbase TZ x213 = x153 * x141;
-Tbase TZ x214 = x212 + x213;
-Tbase TZ x215 = x211 + x214;
-Tbase TZ x216 = x210 + x215;
-Tbase TZ x217 = x209 + x216;
-Tbase TZ x218 = x208 + x217;
-Tbase TZ x219 = 0x33;
-Tbase TZ x220 = x218 >>> x219;
-Tbase TZ x221 = 0x13;
-Tbase TZ x222 = x221 * x220;
-Tbase TZ x223 = 0x7ffffffffffff;
-Tbase TZ x224 = x164 & x223;
-Tbase TZ x225 = x222 + x224;
-Tbase TZ x226 = 0x33;
-Tbase TZ x227 = x225 >>> x226;
-Tbase TZ x228 = 0x7ffffffffffff;
-Tbase TZ x229 = x178 & x228;
-Tbase TZ x230 = x227 + x229;
-Tbase TZ x231 = 0x7ffffffffffff;
-Tbase TZ x232 = x218 & x231;
-Tbase TZ x233 = 0x7ffffffffffff;
-Tbase TZ x234 = x206 & x233;
-Tbase TZ x235 = 0x33;
-Tbase TZ x236 = x230 >>> x235;
-Tbase TZ x237 = 0x7ffffffffffff;
-Tbase TZ x238 = x192 & x237;
-Tbase TZ x239 = x236 + x238;
-Tbase TZ x240 = 0x7ffffffffffff;
-Tbase TZ x241 = x230 & x240;
-Tbase TZ x242 = 0x7ffffffffffff;
-Tbase TZ x243 = x225 & x242;
-Tbase TZ x244 = 0xffffffffffffe;
-Tbase TZ x245 = x244 + x127;
-Tbase TZ x246 = x245 - x232;
-Tbase TZ x247 = 0xffffffffffffe;
-Tbase TZ x248 = x247 + x129;
-Tbase TZ x249 = x248 - x234;
-Tbase TZ x250 = 0xffffffffffffe;
-Tbase TZ x251 = x250 + x134;
-Tbase TZ x252 = x251 - x239;
-Tbase TZ x253 = 0xffffffffffffe;
-Tbase TZ x254 = x253 + x136;
-Tbase TZ x255 = x254 - x241;
-Tbase TZ x256 = 0xfffffffffffda;
-Tbase TZ x257 = x256 + x138;
-Tbase TZ x258 = x257 - x243;
-Tbase TZ x259 = x34 + x39;
-Tbase TZ x260 = x35 + x40;
-Tbase TZ x261 = x36 + x41;
-Tbase TZ x262 = x37 + x42;
-Tbase TZ x263 = x38 + x43;
-Tbase TZ x264 = 0xffffffffffffe;
-Tbase TZ x265 = x264 + x34;
-Tbase TZ x266 = x265 - x39;
-Tbase TZ x267 = 0xffffffffffffe;
-Tbase TZ x268 = x267 + x35;
-Tbase TZ x269 = x268 - x40;
-Tbase TZ x270 = 0xffffffffffffe;
-Tbase TZ x271 = x270 + x36;
-Tbase TZ x272 = x271 - x41;
-Tbase TZ x273 = 0xffffffffffffe;
-Tbase TZ x274 = x273 + x37;
-Tbase TZ x275 = x274 - x42;
-Tbase TZ x276 = 0xfffffffffffda;
-Tbase TZ x277 = x276 + x38;
-Tbase TZ x278 = x277 - x43;
-Tbase TZ x279 = x278 * x48;
-Tbase TZ x280 = x266 * x47;
-Tbase TZ x281 = x269 * x46;
-Tbase TZ x282 = x272 * x45;
-Tbase TZ x283 = x275 * x44;
-Tbase TZ x284 = x282 + x283;
-Tbase TZ x285 = x281 + x284;
-Tbase TZ x286 = x280 + x285;
-Tbase TZ x287 = 0x13;
-Tbase TZ x288 = x287 * x286;
-Tbase TZ x289 = x279 + x288;
-Tbase TZ x290 = 0x33;
-Tbase TZ x291 = x289 >>> x290;
-Tbase TZ x292 = x275 * x48;
-Tbase TZ x293 = x278 * x47;
-Tbase TZ x294 = x292 + x293;
-Tbase TZ x295 = x266 * x46;
-Tbase TZ x296 = x269 * x45;
-Tbase TZ x297 = x272 * x44;
-Tbase TZ x298 = x296 + x297;
-Tbase TZ x299 = x295 + x298;
-Tbase TZ x300 = 0x13;
-Tbase TZ x301 = x300 * x299;
-Tbase TZ x302 = x294 + x301;
-Tbase TZ x303 = x291 + x302;
-Tbase TZ x304 = 0x33;
-Tbase TZ x305 = x303 >>> x304;
-Tbase TZ x306 = x272 * x48;
-Tbase TZ x307 = x275 * x47;
-Tbase TZ x308 = x278 * x46;
-Tbase TZ x309 = x307 + x308;
-Tbase TZ x310 = x306 + x309;
-Tbase TZ x311 = x266 * x45;
-Tbase TZ x312 = x269 * x44;
-Tbase TZ x313 = x311 + x312;
-Tbase TZ x314 = 0x13;
-Tbase TZ x315 = x314 * x313;
-Tbase TZ x316 = x310 + x315;
-Tbase TZ x317 = x305 + x316;
-Tbase TZ x318 = 0x33;
-Tbase TZ x319 = x317 >>> x318;
-Tbase TZ x320 = x269 * x48;
-Tbase TZ x321 = x272 * x47;
-Tbase TZ x322 = x275 * x46;
-Tbase TZ x323 = x278 * x45;
-Tbase TZ x324 = x322 + x323;
-Tbase TZ x325 = x321 + x324;
-Tbase TZ x326 = x320 + x325;
-Tbase TZ x327 = x266 * x44;
-Tbase TZ x328 = 0x13;
-Tbase TZ x329 = x328 * x327;
-Tbase TZ x330 = x326 + x329;
-Tbase TZ x331 = x319 + x330;
-Tbase TZ x332 = 0x33;
-Tbase TZ x333 = x331 >>> x332;
-Tbase TZ x334 = x266 * x48;
-Tbase TZ x335 = x269 * x47;
-Tbase TZ x336 = x272 * x46;
-Tbase TZ x337 = x275 * x45;
-Tbase TZ x338 = x278 * x44;
-Tbase TZ x339 = x337 + x338;
-Tbase TZ x340 = x336 + x339;
-Tbase TZ x341 = x335 + x340;
-Tbase TZ x342 = x334 + x341;
-Tbase TZ x343 = x333 + x342;
-Tbase TZ x344 = 0x33;
-Tbase TZ x345 = x343 >>> x344;
-Tbase TZ x346 = 0x13;
-Tbase TZ x347 = x346 * x345;
-Tbase TZ x348 = 0x7ffffffffffff;
-Tbase TZ x349 = x289 & x348;
-Tbase TZ x350 = x347 + x349;
-Tbase TZ x351 = 0x33;
-Tbase TZ x352 = x350 >>> x351;
-Tbase TZ x353 = 0x7ffffffffffff;
-Tbase TZ x354 = x303 & x353;
-Tbase TZ x355 = x352 + x354;
-Tbase TZ x356 = 0x7ffffffffffff;
-Tbase TZ x357 = x343 & x356;
-Tbase TZ x358 = 0x7ffffffffffff;
-Tbase TZ x359 = x331 & x358;
-Tbase TZ x360 = 0x33;
-Tbase TZ x361 = x355 >>> x360;
-Tbase TZ x362 = 0x7ffffffffffff;
-Tbase TZ x363 = x317 & x362;
-Tbase TZ x364 = x361 + x363;
-Tbase TZ x365 = 0x7ffffffffffff;
-Tbase TZ x366 = x355 & x365;
-Tbase TZ x367 = 0x7ffffffffffff;
-Tbase TZ x368 = x350 & x367;
-Tbase TZ x369 = x263 * x153;
-Tbase TZ x370 = x259 * x150;
-Tbase TZ x371 = x260 * x147;
-Tbase TZ x372 = x261 * x144;
-Tbase TZ x373 = x262 * x141;
-Tbase TZ x374 = x372 + x373;
-Tbase TZ x375 = x371 + x374;
-Tbase TZ x376 = x370 + x375;
-Tbase TZ x377 = 0x13;
-Tbase TZ x378 = x377 * x376;
-Tbase TZ x379 = x369 + x378;
-Tbase TZ x380 = 0x33;
-Tbase TZ x381 = x379 >>> x380;
-Tbase TZ x382 = x262 * x153;
-Tbase TZ x383 = x263 * x150;
-Tbase TZ x384 = x382 + x383;
-Tbase TZ x385 = x259 * x147;
-Tbase TZ x386 = x260 * x144;
-Tbase TZ x387 = x261 * x141;
-Tbase TZ x388 = x386 + x387;
-Tbase TZ x389 = x385 + x388;
-Tbase TZ x390 = 0x13;
-Tbase TZ x391 = x390 * x389;
-Tbase TZ x392 = x384 + x391;
-Tbase TZ x393 = x381 + x392;
-Tbase TZ x394 = 0x33;
-Tbase TZ x395 = x393 >>> x394;
-Tbase TZ x396 = x261 * x153;
-Tbase TZ x397 = x262 * x150;
-Tbase TZ x398 = x263 * x147;
-Tbase TZ x399 = x397 + x398;
-Tbase TZ x400 = x396 + x399;
-Tbase TZ x401 = x259 * x144;
-Tbase TZ x402 = x260 * x141;
-Tbase TZ x403 = x401 + x402;
-Tbase TZ x404 = 0x13;
-Tbase TZ x405 = x404 * x403;
-Tbase TZ x406 = x400 + x405;
-Tbase TZ x407 = x395 + x406;
-Tbase TZ x408 = 0x33;
-Tbase TZ x409 = x407 >>> x408;
-Tbase TZ x410 = x260 * x153;
-Tbase TZ x411 = x261 * x150;
-Tbase TZ x412 = x262 * x147;
-Tbase TZ x413 = x263 * x144;
-Tbase TZ x414 = x412 + x413;
-Tbase TZ x415 = x411 + x414;
-Tbase TZ x416 = x410 + x415;
-Tbase TZ x417 = x259 * x141;
-Tbase TZ x418 = 0x13;
-Tbase TZ x419 = x418 * x417;
-Tbase TZ x420 = x416 + x419;
-Tbase TZ x421 = x409 + x420;
-Tbase TZ x422 = 0x33;
-Tbase TZ x423 = x421 >>> x422;
-Tbase TZ x424 = x259 * x153;
-Tbase TZ x425 = x260 * x150;
-Tbase TZ x426 = x261 * x147;
-Tbase TZ x427 = x262 * x144;
-Tbase TZ x428 = x263 * x141;
-Tbase TZ x429 = x427 + x428;
-Tbase TZ x430 = x426 + x429;
-Tbase TZ x431 = x425 + x430;
-Tbase TZ x432 = x424 + x431;
-Tbase TZ x433 = x423 + x432;
-Tbase TZ x434 = 0x33;
-Tbase TZ x435 = x433 >>> x434;
-Tbase TZ x436 = 0x13;
-Tbase TZ x437 = x436 * x435;
-Tbase TZ x438 = 0x7ffffffffffff;
-Tbase TZ x439 = x379 & x438;
-Tbase TZ x440 = x437 + x439;
-Tbase TZ x441 = 0x33;
-Tbase TZ x442 = x440 >>> x441;
-Tbase TZ x443 = 0x7ffffffffffff;
-Tbase TZ x444 = x393 & x443;
-Tbase TZ x445 = x442 + x444;
-Tbase TZ x446 = 0x7ffffffffffff;
-Tbase TZ x447 = x433 & x446;
-Tbase TZ x448 = 0x7ffffffffffff;
-Tbase TZ x449 = x421 & x448;
-Tbase TZ x450 = 0x33;
-Tbase TZ x451 = x445 >>> x450;
-Tbase TZ x452 = 0x7ffffffffffff;
-Tbase TZ x453 = x407 & x452;
-Tbase TZ x454 = x451 + x453;
-Tbase TZ x455 = 0x7ffffffffffff;
-Tbase TZ x456 = x445 & x455;
-Tbase TZ x457 = 0x7ffffffffffff;
-Tbase TZ x458 = x440 & x457;
-Tbase TZ x459 = x357 + x447;
-Tbase TZ x460 = x359 + x449;
-Tbase TZ x461 = x364 + x454;
-Tbase TZ x462 = x366 + x456;
-Tbase TZ x463 = x368 + x458;
-Tbase TZ x464 = x357 + x447;
-Tbase TZ x465 = x359 + x449;
-Tbase TZ x466 = x364 + x454;
-Tbase TZ x467 = x366 + x456;
-Tbase TZ x468 = x368 + x458;
-Tbase TZ x469 = x463 * x468;
-Tbase TZ x470 = x459 * x467;
-Tbase TZ x471 = x460 * x466;
-Tbase TZ x472 = x461 * x465;
-Tbase TZ x473 = x462 * x464;
-Tbase TZ x474 = x472 + x473;
-Tbase TZ x475 = x471 + x474;
-Tbase TZ x476 = x470 + x475;
-Tbase TZ x477 = 0x13;
-Tbase TZ x478 = x477 * x476;
-Tbase TZ x479 = x469 + x478;
-Tbase TZ x480 = 0x33;
-Tbase TZ x481 = x479 >>> x480;
-Tbase TZ x482 = x462 * x468;
-Tbase TZ x483 = x463 * x467;
-Tbase TZ x484 = x482 + x483;
-Tbase TZ x485 = x459 * x466;
-Tbase TZ x486 = x460 * x465;
-Tbase TZ x487 = x461 * x464;
-Tbase TZ x488 = x486 + x487;
-Tbase TZ x489 = x485 + x488;
-Tbase TZ x490 = 0x13;
-Tbase TZ x491 = x490 * x489;
-Tbase TZ x492 = x484 + x491;
-Tbase TZ x493 = x481 + x492;
-Tbase TZ x494 = 0x33;
-Tbase TZ x495 = x493 >>> x494;
-Tbase TZ x496 = x461 * x468;
-Tbase TZ x497 = x462 * x467;
-Tbase TZ x498 = x463 * x466;
-Tbase TZ x499 = x497 + x498;
-Tbase TZ x500 = x496 + x499;
-Tbase TZ x501 = x459 * x465;
-Tbase TZ x502 = x460 * x464;
-Tbase TZ x503 = x501 + x502;
-Tbase TZ x504 = 0x13;
-Tbase TZ x505 = x504 * x503;
-Tbase TZ x506 = x500 + x505;
-Tbase TZ x507 = x495 + x506;
-Tbase TZ x508 = 0x33;
-Tbase TZ x509 = x507 >>> x508;
-Tbase TZ x510 = x460 * x468;
-Tbase TZ x511 = x461 * x467;
-Tbase TZ x512 = x462 * x466;
-Tbase TZ x513 = x463 * x465;
-Tbase TZ x514 = x512 + x513;
-Tbase TZ x515 = x511 + x514;
-Tbase TZ x516 = x510 + x515;
-Tbase TZ x517 = x459 * x464;
-Tbase TZ x518 = 0x13;
-Tbase TZ x519 = x518 * x517;
-Tbase TZ x520 = x516 + x519;
-Tbase TZ x521 = x509 + x520;
-Tbase TZ x522 = 0x33;
-Tbase TZ x523 = x521 >>> x522;
-Tbase TZ x524 = x459 * x468;
-Tbase TZ x525 = x460 * x467;
-Tbase TZ x526 = x461 * x466;
-Tbase TZ x527 = x462 * x465;
-Tbase TZ x528 = x463 * x464;
-Tbase TZ x529 = x527 + x528;
-Tbase TZ x530 = x526 + x529;
-Tbase TZ x531 = x525 + x530;
-Tbase TZ x532 = x524 + x531;
-Tbase TZ x533 = x523 + x532;
-Tbase TZ x534 = 0x33;
-Tbase TZ x535 = x533 >>> x534;
-Tbase TZ x536 = 0x13;
-Tbase TZ x537 = x536 * x535;
-Tbase TZ x538 = 0x7ffffffffffff;
-Tbase TZ x539 = x479 & x538;
-Tbase TZ x540 = x537 + x539;
-Tbase TZ x541 = 0x33;
-Tbase TZ x542 = x540 >>> x541;
-Tbase TZ x543 = 0x7ffffffffffff;
-Tbase TZ x544 = x493 & x543;
-Tbase TZ x545 = x542 + x544;
-Tbase TZ x546 = 0x7ffffffffffff;
-Tbase TZ x547 = x533 & x546;
-Tbase TZ x548 = 0x7ffffffffffff;
-Tbase TZ x549 = x521 & x548;
-Tbase TZ x550 = 0x33;
-Tbase TZ x551 = x545 >>> x550;
-Tbase TZ x552 = 0x7ffffffffffff;
-Tbase TZ x553 = x507 & x552;
-Tbase TZ x554 = x551 + x553;
-Tbase TZ x555 = 0x7ffffffffffff;
-Tbase TZ x556 = x545 & x555;
-Tbase TZ x557 = 0x7ffffffffffff;
-Tbase TZ x558 = x540 & x557;
-Tbase TZ x559 = 0xffffffffffffe;
-Tbase TZ x560 = x559 + x357;
-Tbase TZ x561 = x560 - x447;
-Tbase TZ x562 = 0xffffffffffffe;
-Tbase TZ x563 = x562 + x359;
-Tbase TZ x564 = x563 - x449;
-Tbase TZ x565 = 0xffffffffffffe;
-Tbase TZ x566 = x565 + x364;
-Tbase TZ x567 = x566 - x454;
-Tbase TZ x568 = 0xffffffffffffe;
-Tbase TZ x569 = x568 + x366;
-Tbase TZ x570 = x569 - x456;
-Tbase TZ x571 = 0xfffffffffffda;
-Tbase TZ x572 = x571 + x368;
-Tbase TZ x573 = x572 - x458;
-Tbase TZ x574 = 0xffffffffffffe;
-Tbase TZ x575 = x574 + x357;
-Tbase TZ x576 = x575 - x447;
-Tbase TZ x577 = 0xffffffffffffe;
-Tbase TZ x578 = x577 + x359;
-Tbase TZ x579 = x578 - x449;
-Tbase TZ x580 = 0xffffffffffffe;
-Tbase TZ x581 = x580 + x364;
-Tbase TZ x582 = x581 - x454;
-Tbase TZ x583 = 0xffffffffffffe;
-Tbase TZ x584 = x583 + x366;
-Tbase TZ x585 = x584 - x456;
-Tbase TZ x586 = 0xfffffffffffda;
-Tbase TZ x587 = x586 + x368;
-Tbase TZ x588 = x587 - x458;
-Tbase TZ x589 = x573 * x588;
-Tbase TZ x590 = x561 * x585;
-Tbase TZ x591 = x564 * x582;
-Tbase TZ x592 = x567 * x579;
-Tbase TZ x593 = x570 * x576;
-Tbase TZ x594 = x592 + x593;
-Tbase TZ x595 = x591 + x594;
-Tbase TZ x596 = x590 + x595;
-Tbase TZ x597 = 0x13;
-Tbase TZ x598 = x597 * x596;
-Tbase TZ x599 = x589 + x598;
-Tbase TZ x600 = 0x33;
-Tbase TZ x601 = x599 >>> x600;
-Tbase TZ x602 = x570 * x588;
-Tbase TZ x603 = x573 * x585;
-Tbase TZ x604 = x602 + x603;
-Tbase TZ x605 = x561 * x582;
-Tbase TZ x606 = x564 * x579;
-Tbase TZ x607 = x567 * x576;
-Tbase TZ x608 = x606 + x607;
-Tbase TZ x609 = x605 + x608;
-Tbase TZ x610 = 0x13;
-Tbase TZ x611 = x610 * x609;
-Tbase TZ x612 = x604 + x611;
-Tbase TZ x613 = x601 + x612;
-Tbase TZ x614 = 0x33;
-Tbase TZ x615 = x613 >>> x614;
-Tbase TZ x616 = x567 * x588;
-Tbase TZ x617 = x570 * x585;
-Tbase TZ x618 = x573 * x582;
-Tbase TZ x619 = x617 + x618;
-Tbase TZ x620 = x616 + x619;
-Tbase TZ x621 = x561 * x579;
-Tbase TZ x622 = x564 * x576;
-Tbase TZ x623 = x621 + x622;
-Tbase TZ x624 = 0x13;
-Tbase TZ x625 = x624 * x623;
-Tbase TZ x626 = x620 + x625;
-Tbase TZ x627 = x615 + x626;
-Tbase TZ x628 = 0x33;
-Tbase TZ x629 = x627 >>> x628;
-Tbase TZ x630 = x564 * x588;
-Tbase TZ x631 = x567 * x585;
-Tbase TZ x632 = x570 * x582;
-Tbase TZ x633 = x573 * x579;
-Tbase TZ x634 = x632 + x633;
-Tbase TZ x635 = x631 + x634;
-Tbase TZ x636 = x630 + x635;
-Tbase TZ x637 = x561 * x576;
-Tbase TZ x638 = 0x13;
-Tbase TZ x639 = x638 * x637;
-Tbase TZ x640 = x636 + x639;
-Tbase TZ x641 = x629 + x640;
-Tbase TZ x642 = 0x33;
-Tbase TZ x643 = x641 >>> x642;
-Tbase TZ x644 = x561 * x588;
-Tbase TZ x645 = x564 * x585;
-Tbase TZ x646 = x567 * x582;
-Tbase TZ x647 = x570 * x579;
-Tbase TZ x648 = x573 * x576;
-Tbase TZ x649 = x647 + x648;
-Tbase TZ x650 = x646 + x649;
-Tbase TZ x651 = x645 + x650;
-Tbase TZ x652 = x644 + x651;
-Tbase TZ x653 = x643 + x652;
-Tbase TZ x654 = 0x33;
-Tbase TZ x655 = x653 >>> x654;
-Tbase TZ x656 = 0x13;
-Tbase TZ x657 = x656 * x655;
-Tbase TZ x658 = 0x7ffffffffffff;
-Tbase TZ x659 = x599 & x658;
-Tbase TZ x660 = x657 + x659;
-Tbase TZ x661 = 0x33;
-Tbase TZ x662 = x660 >>> x661;
-Tbase TZ x663 = 0x7ffffffffffff;
-Tbase TZ x664 = x613 & x663;
-Tbase TZ x665 = x662 + x664;
-Tbase TZ x666 = 0x7ffffffffffff;
-Tbase TZ x667 = x653 & x666;
-Tbase TZ x668 = 0x7ffffffffffff;
-Tbase TZ x669 = x641 & x668;
-Tbase TZ x670 = 0x33;
-Tbase TZ x671 = x665 >>> x670;
-Tbase TZ x672 = 0x7ffffffffffff;
-Tbase TZ x673 = x627 & x672;
-Tbase TZ x674 = x671 + x673;
-Tbase TZ x675 = 0x7ffffffffffff;
-Tbase TZ x676 = x665 & x675;
-Tbase TZ x677 = 0x7ffffffffffff;
-Tbase TZ x678 = x660 & x677;
-Tbase TZ x679 = x23 * x678;
-Tbase TZ x680 = x19 * x676;
-Tbase TZ x681 = x20 * x674;
-Tbase TZ x682 = x21 * x669;
-Tbase TZ x683 = x22 * x667;
-Tbase TZ x684 = x682 + x683;
-Tbase TZ x685 = x681 + x684;
-Tbase TZ x686 = x680 + x685;
-Tbase TZ x687 = 0x13;
-Tbase TZ x688 = x687 * x686;
-Tbase TZ x689 = x679 + x688;
-Tbase TZ x690 = 0x33;
-Tbase TZ x691 = x689 >>> x690;
-Tbase TZ x692 = x22 * x678;
-Tbase TZ x693 = x23 * x676;
-Tbase TZ x694 = x692 + x693;
-Tbase TZ x695 = x19 * x674;
-Tbase TZ x696 = x20 * x669;
-Tbase TZ x697 = x21 * x667;
-Tbase TZ x698 = x696 + x697;
-Tbase TZ x699 = x695 + x698;
-Tbase TZ x700 = 0x13;
-Tbase TZ x701 = x700 * x699;
-Tbase TZ x702 = x694 + x701;
-Tbase TZ x703 = x691 + x702;
-Tbase TZ x704 = 0x33;
-Tbase TZ x705 = x703 >>> x704;
-Tbase TZ x706 = x21 * x678;
-Tbase TZ x707 = x22 * x676;
-Tbase TZ x708 = x23 * x674;
-Tbase TZ x709 = x707 + x708;
-Tbase TZ x710 = x706 + x709;
-Tbase TZ x711 = x19 * x669;
-Tbase TZ x712 = x20 * x667;
-Tbase TZ x713 = x711 + x712;
-Tbase TZ x714 = 0x13;
-Tbase TZ x715 = x714 * x713;
-Tbase TZ x716 = x710 + x715;
-Tbase TZ x717 = x705 + x716;
-Tbase TZ x718 = 0x33;
-Tbase TZ x719 = x717 >>> x718;
-Tbase TZ x720 = x20 * x678;
-Tbase TZ x721 = x21 * x676;
-Tbase TZ x722 = x22 * x674;
-Tbase TZ x723 = x23 * x669;
-Tbase TZ x724 = x722 + x723;
-Tbase TZ x725 = x721 + x724;
-Tbase TZ x726 = x720 + x725;
-Tbase TZ x727 = x19 * x667;
-Tbase TZ x728 = 0x13;
-Tbase TZ x729 = x728 * x727;
-Tbase TZ x730 = x726 + x729;
-Tbase TZ x731 = x719 + x730;
-Tbase TZ x732 = 0x33;
-Tbase TZ x733 = x731 >>> x732;
-Tbase TZ x734 = x19 * x678;
-Tbase TZ x735 = x20 * x676;
-Tbase TZ x736 = x21 * x674;
-Tbase TZ x737 = x22 * x669;
-Tbase TZ x738 = x23 * x667;
-Tbase TZ x739 = x737 + x738;
-Tbase TZ x740 = x736 + x739;
-Tbase TZ x741 = x735 + x740;
-Tbase TZ x742 = x734 + x741;
-Tbase TZ x743 = x733 + x742;
-Tbase TZ x744 = 0x33;
-Tbase TZ x745 = x743 >>> x744;
-Tbase TZ x746 = 0x13;
-Tbase TZ x747 = x746 * x745;
-Tbase TZ x748 = 0x7ffffffffffff;
-Tbase TZ x749 = x689 & x748;
-Tbase TZ x750 = x747 + x749;
-Tbase TZ x751 = 0x33;
-Tbase TZ x752 = x750 >>> x751;
-Tbase TZ x753 = 0x7ffffffffffff;
-Tbase TZ x754 = x703 & x753;
-Tbase TZ x755 = x752 + x754;
-Tbase TZ x756 = 0x7ffffffffffff;
-Tbase TZ x757 = x743 & x756;
-Tbase TZ x758 = 0x7ffffffffffff;
-Tbase TZ x759 = x731 & x758;
-Tbase TZ x760 = 0x33;
-Tbase TZ x761 = x755 >>> x760;
-Tbase TZ x762 = 0x7ffffffffffff;
-Tbase TZ x763 = x717 & x762;
-Tbase TZ x764 = x761 + x763;
-Tbase TZ x765 = 0x7ffffffffffff;
-Tbase TZ x766 = x755 & x765;
-Tbase TZ x767 = 0x7ffffffffffff;
-Tbase TZ x768 = x750 & x767;
-Tbase TZ x769 = x138 * x243;
-Tbase TZ x770 = x127 * x241;
-Tbase TZ x771 = x129 * x239;
-Tbase TZ x772 = x134 * x234;
-Tbase TZ x773 = x136 * x232;
-Tbase TZ x774 = x772 + x773;
-Tbase TZ x775 = x771 + x774;
-Tbase TZ x776 = x770 + x775;
-Tbase TZ x777 = 0x13;
-Tbase TZ x778 = x777 * x776;
-Tbase TZ x779 = x769 + x778;
-Tbase TZ x780 = 0x33;
-Tbase TZ x781 = x779 >>> x780;
-Tbase TZ x782 = x136 * x243;
-Tbase TZ x783 = x138 * x241;
-Tbase TZ x784 = x782 + x783;
-Tbase TZ x785 = x127 * x239;
-Tbase TZ x786 = x129 * x234;
-Tbase TZ x787 = x134 * x232;
-Tbase TZ x788 = x786 + x787;
-Tbase TZ x789 = x785 + x788;
-Tbase TZ x790 = 0x13;
-Tbase TZ x791 = x790 * x789;
-Tbase TZ x792 = x784 + x791;
-Tbase TZ x793 = x781 + x792;
-Tbase TZ x794 = 0x33;
-Tbase TZ x795 = x793 >>> x794;
-Tbase TZ x796 = x134 * x243;
-Tbase TZ x797 = x136 * x241;
-Tbase TZ x798 = x138 * x239;
-Tbase TZ x799 = x797 + x798;
-Tbase TZ x800 = x796 + x799;
-Tbase TZ x801 = x127 * x234;
-Tbase TZ x802 = x129 * x232;
-Tbase TZ x803 = x801 + x802;
-Tbase TZ x804 = 0x13;
-Tbase TZ x805 = x804 * x803;
-Tbase TZ x806 = x800 + x805;
-Tbase TZ x807 = x795 + x806;
-Tbase TZ x808 = 0x33;
-Tbase TZ x809 = x807 >>> x808;
-Tbase TZ x810 = x129 * x243;
-Tbase TZ x811 = x134 * x241;
-Tbase TZ x812 = x136 * x239;
-Tbase TZ x813 = x138 * x234;
-Tbase TZ x814 = x812 + x813;
-Tbase TZ x815 = x811 + x814;
-Tbase TZ x816 = x810 + x815;
-Tbase TZ x817 = x127 * x232;
-Tbase TZ x818 = 0x13;
-Tbase TZ x819 = x818 * x817;
-Tbase TZ x820 = x816 + x819;
-Tbase TZ x821 = x809 + x820;
-Tbase TZ x822 = 0x33;
-Tbase TZ x823 = x821 >>> x822;
-Tbase TZ x824 = x127 * x243;
-Tbase TZ x825 = x129 * x241;
-Tbase TZ x826 = x134 * x239;
-Tbase TZ x827 = x136 * x234;
-Tbase TZ x828 = x138 * x232;
-Tbase TZ x829 = x827 + x828;
-Tbase TZ x830 = x826 + x829;
-Tbase TZ x831 = x825 + x830;
-Tbase TZ x832 = x824 + x831;
-Tbase TZ x833 = x823 + x832;
-Tbase TZ x834 = 0x33;
-Tbase TZ x835 = x833 >>> x834;
-Tbase TZ x836 = 0x13;
-Tbase TZ x837 = x836 * x835;
-Tbase TZ x838 = 0x7ffffffffffff;
-Tbase TZ x839 = x779 & x838;
-Tbase TZ x840 = x837 + x839;
-Tbase TZ x841 = 0x33;
-Tbase TZ x842 = x840 >>> x841;
-Tbase TZ x843 = 0x7ffffffffffff;
-Tbase TZ x844 = x793 & x843;
-Tbase TZ x845 = x842 + x844;
-Tbase TZ x846 = 0x7ffffffffffff;
-Tbase TZ x847 = x833 & x846;
-Tbase TZ x848 = 0x7ffffffffffff;
-Tbase TZ x849 = x821 & x848;
-Tbase TZ x850 = 0x33;
-Tbase TZ x851 = x845 >>> x850;
-Tbase TZ x852 = 0x7ffffffffffff;
-Tbase TZ x853 = x807 & x852;
-Tbase TZ x854 = x851 + x853;
-Tbase TZ x855 = 0x7ffffffffffff;
-Tbase TZ x856 = x845 & x855;
-Tbase TZ x857 = 0x7ffffffffffff;
-Tbase TZ x858 = x840 & x857;
-Tbase TZ x859 = x18 * x258;
-Tbase TZ x860 = x14 * x255;
-Tbase TZ x861 = x15 * x252;
-Tbase TZ x862 = x16 * x249;
-Tbase TZ x863 = x17 * x246;
-Tbase TZ x864 = x862 + x863;
-Tbase TZ x865 = x861 + x864;
-Tbase TZ x866 = x860 + x865;
-Tbase TZ x867 = 0x13;
-Tbase TZ x868 = x867 * x866;
-Tbase TZ x869 = x859 + x868;
-Tbase TZ x870 = 0x33;
-Tbase TZ x871 = x869 >>> x870;
-Tbase TZ x872 = x17 * x258;
-Tbase TZ x873 = x18 * x255;
-Tbase TZ x874 = x872 + x873;
-Tbase TZ x875 = x14 * x252;
-Tbase TZ x876 = x15 * x249;
-Tbase TZ x877 = x16 * x246;
-Tbase TZ x878 = x876 + x877;
-Tbase TZ x879 = x875 + x878;
-Tbase TZ x880 = 0x13;
-Tbase TZ x881 = x880 * x879;
-Tbase TZ x882 = x874 + x881;
-Tbase TZ x883 = x871 + x882;
-Tbase TZ x884 = 0x33;
-Tbase TZ x885 = x883 >>> x884;
-Tbase TZ x886 = x16 * x258;
-Tbase TZ x887 = x17 * x255;
-Tbase TZ x888 = x18 * x252;
-Tbase TZ x889 = x887 + x888;
-Tbase TZ x890 = x886 + x889;
-Tbase TZ x891 = x14 * x249;
-Tbase TZ x892 = x15 * x246;
-Tbase TZ x893 = x891 + x892;
-Tbase TZ x894 = 0x13;
-Tbase TZ x895 = x894 * x893;
-Tbase TZ x896 = x890 + x895;
-Tbase TZ x897 = x885 + x896;
-Tbase TZ x898 = 0x33;
-Tbase TZ x899 = x897 >>> x898;
-Tbase TZ x900 = x15 * x258;
-Tbase TZ x901 = x16 * x255;
-Tbase TZ x902 = x17 * x252;
-Tbase TZ x903 = x18 * x249;
-Tbase TZ x904 = x902 + x903;
-Tbase TZ x905 = x901 + x904;
-Tbase TZ x906 = x900 + x905;
-Tbase TZ x907 = x14 * x246;
-Tbase TZ x908 = 0x13;
-Tbase TZ x909 = x908 * x907;
-Tbase TZ x910 = x906 + x909;
-Tbase TZ x911 = x899 + x910;
-Tbase TZ x912 = 0x33;
-Tbase TZ x913 = x911 >>> x912;
-Tbase TZ x914 = x14 * x258;
-Tbase TZ x915 = x15 * x255;
-Tbase TZ x916 = x16 * x252;
-Tbase TZ x917 = x17 * x249;
-Tbase TZ x918 = x18 * x246;
-Tbase TZ x919 = x917 + x918;
-Tbase TZ x920 = x916 + x919;
-Tbase TZ x921 = x915 + x920;
-Tbase TZ x922 = x914 + x921;
-Tbase TZ x923 = x913 + x922;
-Tbase TZ x924 = 0x33;
-Tbase TZ x925 = x923 >>> x924;
-Tbase TZ x926 = 0x13;
-Tbase TZ x927 = x926 * x925;
-Tbase TZ x928 = 0x7ffffffffffff;
-Tbase TZ x929 = x869 & x928;
-Tbase TZ x930 = x927 + x929;
-Tbase TZ x931 = 0x33;
-Tbase TZ x932 = x930 >>> x931;
-Tbase TZ x933 = 0x7ffffffffffff;
-Tbase TZ x934 = x883 & x933;
-Tbase TZ x935 = x932 + x934;
-Tbase TZ x936 = 0x7ffffffffffff;
-Tbase TZ x937 = x923 & x936;
-Tbase TZ x938 = 0x7ffffffffffff;
-Tbase TZ x939 = x911 & x938;
-Tbase TZ x940 = 0x33;
-Tbase TZ x941 = x935 >>> x940;
-Tbase TZ x942 = 0x7ffffffffffff;
-Tbase TZ x943 = x897 & x942;
-Tbase TZ x944 = x941 + x943;
-Tbase TZ x945 = 0x7ffffffffffff;
-Tbase TZ x946 = x935 & x945;
-Tbase TZ x947 = 0x7ffffffffffff;
-Tbase TZ x948 = x930 & x947;
-Tbase TZ x949 = x127 + x937;
-Tbase TZ x950 = x129 + x939;
-Tbase TZ x951 = x134 + x944;
-Tbase TZ x952 = x136 + x946;
-Tbase TZ x953 = x138 + x948;
-Tbase TZ x954 = x258 * x953;
-Tbase TZ x955 = x246 * x952;
-Tbase TZ x956 = x249 * x951;
-Tbase TZ x957 = x252 * x950;
-Tbase TZ x958 = x255 * x949;
-Tbase TZ x959 = x957 + x958;
-Tbase TZ x960 = x956 + x959;
-Tbase TZ x961 = x955 + x960;
-Tbase TZ x962 = 0x13;
-Tbase TZ x963 = x962 * x961;
-Tbase TZ x964 = x954 + x963;
-Tbase TZ x965 = 0x33;
-Tbase TZ x966 = x964 >>> x965;
-Tbase TZ x967 = x255 * x953;
-Tbase TZ x968 = x258 * x952;
-Tbase TZ x969 = x967 + x968;
-Tbase TZ x970 = x246 * x951;
-Tbase TZ x971 = x249 * x950;
-Tbase TZ x972 = x252 * x949;
-Tbase TZ x973 = x971 + x972;
-Tbase TZ x974 = x970 + x973;
-Tbase TZ x975 = 0x13;
-Tbase TZ x976 = x975 * x974;
-Tbase TZ x977 = x969 + x976;
-Tbase TZ x978 = x966 + x977;
-Tbase TZ x979 = 0x33;
-Tbase TZ x980 = x978 >>> x979;
-Tbase TZ x981 = x252 * x953;
-Tbase TZ x982 = x255 * x952;
-Tbase TZ x983 = x258 * x951;
-Tbase TZ x984 = x982 + x983;
-Tbase TZ x985 = x981 + x984;
-Tbase TZ x986 = x246 * x950;
-Tbase TZ x987 = x249 * x949;
-Tbase TZ x988 = x986 + x987;
-Tbase TZ x989 = 0x13;
-Tbase TZ x990 = x989 * x988;
-Tbase TZ x991 = x985 + x990;
-Tbase TZ x992 = x980 + x991;
-Tbase TZ x993 = 0x33;
-Tbase TZ x994 = x992 >>> x993;
-Tbase TZ x995 = x249 * x953;
-Tbase TZ x996 = x252 * x952;
-Tbase TZ x997 = x255 * x951;
-Tbase TZ x998 = x258 * x950;
-Tbase TZ x999 = x997 + x998;
-Tbase TZ x1000 = x996 + x999;
-Tbase TZ x1001 = x995 + x1000;
-Tbase TZ x1002 = x246 * x949;
-Tbase TZ x1003 = 0x13;
-Tbase TZ x1004 = x1003 * x1002;
-Tbase TZ x1005 = x1001 + x1004;
-Tbase TZ x1006 = x994 + x1005;
-Tbase TZ x1007 = 0x33;
-Tbase TZ x1008 = x1006 >>> x1007;
-Tbase TZ x1009 = x246 * x953;
-Tbase TZ x1010 = x249 * x952;
-Tbase TZ x1011 = x252 * x951;
-Tbase TZ x1012 = x255 * x950;
-Tbase TZ x1013 = x258 * x949;
-Tbase TZ x1014 = x1012 + x1013;
-Tbase TZ x1015 = x1011 + x1014;
-Tbase TZ x1016 = x1010 + x1015;
-Tbase TZ x1017 = x1009 + x1016;
-Tbase TZ x1018 = x1008 + x1017;
-Tbase TZ x1019 = 0x33;
-Tbase TZ x1020 = x1018 >>> x1019;
-Tbase TZ x1021 = 0x13;
-Tbase TZ x1022 = x1021 * x1020;
-Tbase TZ x1023 = 0x7ffffffffffff;
-Tbase TZ x1024 = x964 & x1023;
-Tbase TZ x1025 = x1022 + x1024;
-Tbase TZ x1026 = 0x33;
-Tbase TZ x1027 = x1025 >>> x1026;
-Tbase TZ x1028 = 0x7ffffffffffff;
-Tbase TZ x1029 = x978 & x1028;
-Tbase TZ x1030 = x1027 + x1029;
-Tbase TZ x1031 = 0x7ffffffffffff;
-Tbase TZ x1032 = x1018 & x1031;
-Tbase TZ x1033 = 0x7ffffffffffff;
-Tbase TZ x1034 = x1006 & x1033;
-Tbase TZ x1035 = 0x33;
-Tbase TZ x1036 = x1030 >>> x1035;
-Tbase TZ x1037 = 0x7ffffffffffff;
-Tbase TZ x1038 = x992 & x1037;
-Tbase TZ x1039 = x1036 + x1038;
-Tbase TZ x1040 = 0x7ffffffffffff;
-Tbase TZ x1041 = x1030 & x1040;
-Tbase TZ x1042 = 0x7ffffffffffff;
-Tbase TZ x1043 = x1025 & x1042;
-(Return x847, Return x849, Return x854, Return x856,
-Return x858,
-(Return x1032, Return x1034, Return x1039, Return x1041, Return x1043),
-(Return x547, Return x549, Return x554, Return x556, Return x558),
-(Return x757, Return x759, Return x764, Return x766, Return x768))
- : forall var : base_type -> Type,
- expr base_type op
- (TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> ...)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF25519_64Reflective/Reified/LadderStepJavaDisplay.v b/src/SpecificGen/GF25519_64Reflective/Reified/LadderStepJavaDisplay.v
deleted file mode 100644
index b9f31f4ac..000000000
--- a/src/SpecificGen/GF25519_64Reflective/Reified/LadderStepJavaDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_64Reflective.Reified.LadderStep.
-Require Export Crypto.Reflection.Z.JavaNotations.
-
-Print rladderstepW.
diff --git a/src/SpecificGen/GF25519_64Reflective/Reified/Mul.v b/src/SpecificGen/GF25519_64Reflective/Reified/Mul.v
deleted file mode 100644
index ba589a18d..000000000
--- a/src/SpecificGen/GF25519_64Reflective/Reified/Mul.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_64Reflective.CommonBinOp.
-
-Definition rmulZ_sig : rexpr_binop_sig mul. Proof. reify_sig. Defined.
-Definition rmulW := Eval vm_compute in rword_of_Z rmulZ_sig.
-Lemma rmulW_correct_and_bounded_gen : correct_and_bounded_genT rmulW rmulZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rmul_output_bounds := Eval vm_compute in compute_bounds rmulW ExprBinOp_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rmulW_correct_and_bounded
- := ExprBinOp_correct_and_bounded
- rmulW mul rmulZ_sig rmulW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Mul", compute_bounds_for_display rmulW ExprBinOp_bounds).
-Compute ("Mul overflows? ", sanity_compute rmulW ExprBinOp_bounds).
-Compute ("Mul overflows (error if it does)? ", sanity_check rmulW ExprBinOp_bounds).
diff --git a/src/SpecificGen/GF25519_64Reflective/Reified/MulDisplay.log b/src/SpecificGen/GF25519_64Reflective/Reified/MulDisplay.log
deleted file mode 100644
index 47536ebbf..000000000
--- a/src/SpecificGen/GF25519_64Reflective/Reified/MulDisplay.log
+++ /dev/null
@@ -1,91 +0,0 @@
-rmulW =
-fun var : Syntax.base_type -> Type =>
-λ x x0 x1 x2 x3 x4 x5 x6 x7 x8 : var Syntax.TZ,
-Tbase Syntax.TZ x9 = x3 * x8;
-Tbase Syntax.TZ x10 = x * x7;
-Tbase Syntax.TZ x11 = x0 * x6;
-Tbase Syntax.TZ x12 = x1 * x5;
-Tbase Syntax.TZ x13 = x2 * x4;
-Tbase Syntax.TZ x14 = x12 + x13;
-Tbase Syntax.TZ x15 = x11 + x14;
-Tbase Syntax.TZ x16 = x10 + x15;
-Tbase Syntax.TZ x17 = 0x13 * x16;
-Tbase Syntax.TZ x18 = x9 + x17;
-Tbase Syntax.TZ x19 = x18 >> 0x33;
-Tbase Syntax.TZ x20 = x2 * x8;
-Tbase Syntax.TZ x21 = x3 * x7;
-Tbase Syntax.TZ x22 = x20 + x21;
-Tbase Syntax.TZ x23 = x * x6;
-Tbase Syntax.TZ x24 = x0 * x5;
-Tbase Syntax.TZ x25 = x1 * x4;
-Tbase Syntax.TZ x26 = x24 + x25;
-Tbase Syntax.TZ x27 = x23 + x26;
-Tbase Syntax.TZ x28 = 0x13 * x27;
-Tbase Syntax.TZ x29 = x22 + x28;
-Tbase Syntax.TZ x30 = x19 + x29;
-Tbase Syntax.TZ x31 = x30 >> 0x33;
-Tbase Syntax.TZ x32 = x1 * x8;
-Tbase Syntax.TZ x33 = x2 * x7;
-Tbase Syntax.TZ x34 = x3 * x6;
-Tbase Syntax.TZ x35 = x33 + x34;
-Tbase Syntax.TZ x36 = x32 + x35;
-Tbase Syntax.TZ x37 = x * x5;
-Tbase Syntax.TZ x38 = x0 * x4;
-Tbase Syntax.TZ x39 = x37 + x38;
-Tbase Syntax.TZ x40 = 0x13 * x39;
-Tbase Syntax.TZ x41 = x36 + x40;
-Tbase Syntax.TZ x42 = x31 + x41;
-Tbase Syntax.TZ x43 = x42 >> 0x33;
-Tbase Syntax.TZ x44 = x0 * x8;
-Tbase Syntax.TZ x45 = x1 * x7;
-Tbase Syntax.TZ x46 = x2 * x6;
-Tbase Syntax.TZ x47 = x3 * x5;
-Tbase Syntax.TZ x48 = x46 + x47;
-Tbase Syntax.TZ x49 = x45 + x48;
-Tbase Syntax.TZ x50 = x44 + x49;
-Tbase Syntax.TZ x51 = x * x4;
-Tbase Syntax.TZ x52 = 0x13 * x51;
-Tbase Syntax.TZ x53 = x50 + x52;
-Tbase Syntax.TZ x54 = x43 + x53;
-Tbase Syntax.TZ x55 = x54 >> 0x33;
-Tbase Syntax.TZ x56 = x * x8;
-Tbase Syntax.TZ x57 = x0 * x7;
-Tbase Syntax.TZ x58 = x1 * x6;
-Tbase Syntax.TZ x59 = x2 * x5;
-Tbase Syntax.TZ x60 = x3 * x4;
-Tbase Syntax.TZ x61 = x59 + x60;
-Tbase Syntax.TZ x62 = x58 + x61;
-Tbase Syntax.TZ x63 = x57 + x62;
-Tbase Syntax.TZ x64 = x56 + x63;
-Tbase Syntax.TZ x65 = x55 + x64;
-Tbase Syntax.TZ x66 = x65 >> 0x33;
-Tbase Syntax.TZ x67 = 0x13 * x66;
-Tbase Syntax.TZ x68 = x18 & 0x7ffffffffffff;
-Tbase Syntax.TZ x69 = x67 + x68;
-Tbase Syntax.TZ x70 = x69 >> 0x33;
-Tbase Syntax.TZ x71 = x30 & 0x7ffffffffffff;
-Tbase Syntax.TZ x72 = x70 + x71;
-Tbase Syntax.TZ x73 = x65 & 0x7ffffffffffff;
-Tbase Syntax.TZ x74 = x54 & 0x7ffffffffffff;
-Tbase Syntax.TZ x75 = x72 >> 0x33;
-Tbase Syntax.TZ x76 = x42 & 0x7ffffffffffff;
-Tbase Syntax.TZ x77 = x75 + x76;
-Tbase Syntax.TZ x78 = x72 & 0x7ffffffffffff;
-Tbase Syntax.TZ x79 = x69 & 0x7ffffffffffff;
-(Return x73, Return x74, Return x77, Return x78, Return x79)
- : forall var : Syntax.base_type -> Type,
- expr Syntax.base_type Syntax.op
- (Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF25519_64Reflective/Reified/MulDisplay.v b/src/SpecificGen/GF25519_64Reflective/Reified/MulDisplay.v
deleted file mode 100644
index 3e3e7e878..000000000
--- a/src/SpecificGen/GF25519_64Reflective/Reified/MulDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_64Reflective.Reified.Mul.
-Require Export Crypto.Reflection.Z.CNotations.
-
-Print rmulW.
diff --git a/src/SpecificGen/GF25519_64Reflective/Reified/MulJavaDisplay.log b/src/SpecificGen/GF25519_64Reflective/Reified/MulJavaDisplay.log
deleted file mode 100644
index 9e5e4069a..000000000
--- a/src/SpecificGen/GF25519_64Reflective/Reified/MulJavaDisplay.log
+++ /dev/null
@@ -1,91 +0,0 @@
-rmulW =
-fun var : Syntax.base_type -> Type =>
-λ x x0 x1 x2 x3 x4 x5 x6 x7 x8 : var Syntax.TZ,
-Tbase Syntax.TZ x9 = x3 * x8;
-Tbase Syntax.TZ x10 = x * x7;
-Tbase Syntax.TZ x11 = x0 * x6;
-Tbase Syntax.TZ x12 = x1 * x5;
-Tbase Syntax.TZ x13 = x2 * x4;
-Tbase Syntax.TZ x14 = x12 + x13;
-Tbase Syntax.TZ x15 = x11 + x14;
-Tbase Syntax.TZ x16 = x10 + x15;
-Tbase Syntax.TZ x17 = 0x13 * x16;
-Tbase Syntax.TZ x18 = x9 + x17;
-Tbase Syntax.TZ x19 = x18 >>> 0x33;
-Tbase Syntax.TZ x20 = x2 * x8;
-Tbase Syntax.TZ x21 = x3 * x7;
-Tbase Syntax.TZ x22 = x20 + x21;
-Tbase Syntax.TZ x23 = x * x6;
-Tbase Syntax.TZ x24 = x0 * x5;
-Tbase Syntax.TZ x25 = x1 * x4;
-Tbase Syntax.TZ x26 = x24 + x25;
-Tbase Syntax.TZ x27 = x23 + x26;
-Tbase Syntax.TZ x28 = 0x13 * x27;
-Tbase Syntax.TZ x29 = x22 + x28;
-Tbase Syntax.TZ x30 = x19 + x29;
-Tbase Syntax.TZ x31 = x30 >>> 0x33;
-Tbase Syntax.TZ x32 = x1 * x8;
-Tbase Syntax.TZ x33 = x2 * x7;
-Tbase Syntax.TZ x34 = x3 * x6;
-Tbase Syntax.TZ x35 = x33 + x34;
-Tbase Syntax.TZ x36 = x32 + x35;
-Tbase Syntax.TZ x37 = x * x5;
-Tbase Syntax.TZ x38 = x0 * x4;
-Tbase Syntax.TZ x39 = x37 + x38;
-Tbase Syntax.TZ x40 = 0x13 * x39;
-Tbase Syntax.TZ x41 = x36 + x40;
-Tbase Syntax.TZ x42 = x31 + x41;
-Tbase Syntax.TZ x43 = x42 >>> 0x33;
-Tbase Syntax.TZ x44 = x0 * x8;
-Tbase Syntax.TZ x45 = x1 * x7;
-Tbase Syntax.TZ x46 = x2 * x6;
-Tbase Syntax.TZ x47 = x3 * x5;
-Tbase Syntax.TZ x48 = x46 + x47;
-Tbase Syntax.TZ x49 = x45 + x48;
-Tbase Syntax.TZ x50 = x44 + x49;
-Tbase Syntax.TZ x51 = x * x4;
-Tbase Syntax.TZ x52 = 0x13 * x51;
-Tbase Syntax.TZ x53 = x50 + x52;
-Tbase Syntax.TZ x54 = x43 + x53;
-Tbase Syntax.TZ x55 = x54 >>> 0x33;
-Tbase Syntax.TZ x56 = x * x8;
-Tbase Syntax.TZ x57 = x0 * x7;
-Tbase Syntax.TZ x58 = x1 * x6;
-Tbase Syntax.TZ x59 = x2 * x5;
-Tbase Syntax.TZ x60 = x3 * x4;
-Tbase Syntax.TZ x61 = x59 + x60;
-Tbase Syntax.TZ x62 = x58 + x61;
-Tbase Syntax.TZ x63 = x57 + x62;
-Tbase Syntax.TZ x64 = x56 + x63;
-Tbase Syntax.TZ x65 = x55 + x64;
-Tbase Syntax.TZ x66 = x65 >>> 0x33;
-Tbase Syntax.TZ x67 = 0x13 * x66;
-Tbase Syntax.TZ x68 = x18 & 0x7ffffffffffff;
-Tbase Syntax.TZ x69 = x67 + x68;
-Tbase Syntax.TZ x70 = x69 >>> 0x33;
-Tbase Syntax.TZ x71 = x30 & 0x7ffffffffffff;
-Tbase Syntax.TZ x72 = x70 + x71;
-Tbase Syntax.TZ x73 = x65 & 0x7ffffffffffff;
-Tbase Syntax.TZ x74 = x54 & 0x7ffffffffffff;
-Tbase Syntax.TZ x75 = x72 >>> 0x33;
-Tbase Syntax.TZ x76 = x42 & 0x7ffffffffffff;
-Tbase Syntax.TZ x77 = x75 + x76;
-Tbase Syntax.TZ x78 = x72 & 0x7ffffffffffff;
-Tbase Syntax.TZ x79 = x69 & 0x7ffffffffffff;
-(Return x73, Return x74, Return x77, Return x78, Return x79)
- : forall var : Syntax.base_type -> Type,
- expr Syntax.base_type Syntax.op
- (Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF25519_64Reflective/Reified/MulJavaDisplay.v b/src/SpecificGen/GF25519_64Reflective/Reified/MulJavaDisplay.v
deleted file mode 100644
index 19253200b..000000000
--- a/src/SpecificGen/GF25519_64Reflective/Reified/MulJavaDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_64Reflective.Reified.Mul.
-Require Export Crypto.Reflection.Z.JavaNotations.
-
-Print rmulW.
diff --git a/src/SpecificGen/GF25519_64Reflective/Reified/Opp.v b/src/SpecificGen/GF25519_64Reflective/Reified/Opp.v
deleted file mode 100644
index 6170329d5..000000000
--- a/src/SpecificGen/GF25519_64Reflective/Reified/Opp.v
+++ /dev/null
@@ -1,12 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_64Reflective.CommonUnOp.
-
-Definition roppZ_sig : rexpr_unop_sig opp. Proof. reify_sig. Defined.
-Definition roppW := Eval vm_compute in rword_of_Z roppZ_sig.
-Lemma roppW_correct_and_bounded_gen : correct_and_bounded_genT roppW roppZ_sig.
-Proof. rexpr_correct. Qed.
-Definition ropp_output_bounds := Eval vm_compute in compute_bounds roppW ExprUnOp_bounds.
-
-Local Open Scope string_scope.
-Compute ("Opp", compute_bounds_for_display roppW ExprUnOp_bounds).
-Compute ("Opp overflows? ", sanity_compute roppW ExprUnOp_bounds).
-Compute ("Opp overflows (error if it does)? ", sanity_check roppW ExprUnOp_bounds).
diff --git a/src/SpecificGen/GF25519_64Reflective/Reified/Pack.v b/src/SpecificGen/GF25519_64Reflective/Reified/Pack.v
deleted file mode 100644
index c73b348ab..000000000
--- a/src/SpecificGen/GF25519_64Reflective/Reified/Pack.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_64Reflective.CommonUnOpFEToWire.
-
-Definition rpackZ_sig : rexpr_unop_FEToWire_sig pack. Proof. reify_sig. Defined.
-Definition rpackW := Eval vm_compute in rword_of_Z rpackZ_sig.
-Lemma rpackW_correct_and_bounded_gen : correct_and_bounded_genT rpackW rpackZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rpack_output_bounds := Eval vm_compute in compute_bounds rpackW ExprUnOpFEToWire_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rpackW_correct_and_bounded
- := ExprUnOpFEToWire_correct_and_bounded
- rpackW pack rpackZ_sig rpackW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Pack", compute_bounds_for_display rpackW ExprUnOpFEToWire_bounds).
-Compute ("Pack overflows? ", sanity_compute rpackW ExprUnOpFEToWire_bounds).
-Compute ("Pack overflows (error if it does)? ", sanity_check rpackW ExprUnOpFEToWire_bounds).
diff --git a/src/SpecificGen/GF25519_64Reflective/Reified/PreFreeze.v b/src/SpecificGen/GF25519_64Reflective/Reified/PreFreeze.v
deleted file mode 100644
index 610060dfc..000000000
--- a/src/SpecificGen/GF25519_64Reflective/Reified/PreFreeze.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_64Reflective.CommonUnOp.
-
-Definition rprefreezeZ_sig : rexpr_unop_sig prefreeze. Proof. reify_sig. Defined.
-Definition rprefreezeW := Eval vm_compute in rword_of_Z rprefreezeZ_sig.
-Lemma rprefreezeW_correct_and_bounded_gen : correct_and_bounded_genT rprefreezeW rprefreezeZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rprefreeze_output_bounds := Eval vm_compute in compute_bounds rprefreezeW ExprUnOp_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rprefreezeW_correct_and_bounded
- := ExprUnOp_correct_and_bounded
- rprefreezeW prefreeze rprefreezeZ_sig rprefreezeW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("PreFreeze", compute_bounds_for_display rprefreezeW ExprUnOp_bounds).
-Compute ("PreFreeze overflows? ", sanity_compute rprefreezeW ExprUnOp_bounds).
-Compute ("PreFreeze overflows (error if it does)? ", sanity_check rprefreezeW ExprUnOp_bounds).
diff --git a/src/SpecificGen/GF25519_64Reflective/Reified/Sub.v b/src/SpecificGen/GF25519_64Reflective/Reified/Sub.v
deleted file mode 100644
index a0deda793..000000000
--- a/src/SpecificGen/GF25519_64Reflective/Reified/Sub.v
+++ /dev/null
@@ -1,12 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_64Reflective.CommonBinOp.
-
-Definition rsubZ_sig : rexpr_binop_sig sub. Proof. reify_sig. Defined.
-Definition rsubW := Eval vm_compute in rword_of_Z rsubZ_sig.
-Lemma rsubW_correct_and_bounded_gen : correct_and_bounded_genT rsubW rsubZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rsub_output_bounds := Eval vm_compute in compute_bounds rsubW ExprBinOp_bounds.
-
-Local Open Scope string_scope.
-Compute ("Sub", compute_bounds_for_display rsubW ExprBinOp_bounds).
-Compute ("Sub overflows? ", sanity_compute rsubW ExprBinOp_bounds).
-Compute ("Sub overflows (error if it does)? ", sanity_check rsubW ExprBinOp_bounds).
diff --git a/src/SpecificGen/GF25519_64Reflective/Reified/Unpack.v b/src/SpecificGen/GF25519_64Reflective/Reified/Unpack.v
deleted file mode 100644
index 2e1a40f31..000000000
--- a/src/SpecificGen/GF25519_64Reflective/Reified/Unpack.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF25519_64Reflective.CommonUnOpWireToFE.
-
-Definition runpackZ_sig : rexpr_unop_WireToFE_sig unpack. Proof. reify_sig. Defined.
-Definition runpackW := Eval vm_compute in rword_of_Z runpackZ_sig.
-Lemma runpackW_correct_and_bounded_gen : correct_and_bounded_genT runpackW runpackZ_sig.
-Proof. rexpr_correct. Qed.
-Definition runpack_output_bounds := Eval vm_compute in compute_bounds runpackW ExprUnOpWireToFE_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition runpackW_correct_and_bounded
- := ExprUnOpWireToFE_correct_and_bounded
- runpackW unpack runpackZ_sig runpackW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Unpack", compute_bounds_for_display runpackW ExprUnOpWireToFE_bounds).
-Compute ("Unpack overflows? ", sanity_compute runpackW ExprUnOpWireToFE_bounds).
-Compute ("Unpack overflows (error if it does)? ", sanity_check runpackW ExprUnOpWireToFE_bounds).
diff --git a/src/SpecificGen/GF25519_64ReflectiveAddCoordinates.v b/src/SpecificGen/GF25519_64ReflectiveAddCoordinates.v
deleted file mode 100644
index d4a05dec1..000000000
--- a/src/SpecificGen/GF25519_64ReflectiveAddCoordinates.v
+++ /dev/null
@@ -1,77 +0,0 @@
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParams.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParamProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemOpt.
-Require Export Crypto.SpecificGen.GF25519_64.
-Require Import Crypto.SpecificGen.GF25519_64BoundedCommon.
-Require Import Crypto.Reflection.Reify.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.Map.
-Require Import Crypto.Reflection.Z.Interpretations128.
-Require Crypto.Reflection.Z.Interpretations128.Relations.
-Require Import Crypto.Reflection.Z.Interpretations128.RelationsCombinations.
-Require Import Crypto.Reflection.Z.Reify.
-Require Import Crypto.Reflection.Z.Syntax.
-Require Import Crypto.SpecificGen.GF25519_64Reflective.Common.
-Require Import Crypto.SpecificGen.GF25519_64Reflective.Reified.AddCoordinates.
-Require Import Bedrock.Word Crypto.Util.WordUtil.
-Require Import Coq.Lists.List Crypto.Util.ListUtil.
-Require Import Crypto.Tactics.VerdiTactics.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Notations.
-Require Import Crypto.Util.Bool.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Algebra.
-Import ListNotations.
-Require Import Coq.ZArith.ZArith Coq.ZArith.Zpower Coq.ZArith.ZArith Coq.ZArith.Znumtheory.
-Local Open Scope Z.
-
-Time Definition radd_coordinates : Expr _ := Eval vm_compute in radd_coordinatesW.
-
-Declare Reduction asm_interp_add_coordinates
- := cbv beta iota delta
- [id
- interp_bexpr interp_uexpr interp_uexpr_FEToWire interp_uexpr_FEToZ interp_uexpr_WireToFE interp_9_4expr
- radd_coordinates
- curry_binop_fe25519_64W curry_unop_fe25519_64W curry_unop_wire_digitsW curry_9op_fe25519_64W
- WordW.interp_op WordW.interp_base_type
- Z.interp_op Z.interp_base_type
- Z.Syntax.interp_op Z.Syntax.interp_base_type
- mapf_interp_flat_type WordW.interp_base_type word128ize
- Interp interp interp_flat_type interpf interpf_step interp_flat_type fst snd].
-Ltac asm_interp_add_coordinates
- := cbv beta iota delta
- [id
- interp_bexpr interp_uexpr interp_uexpr_FEToWire interp_uexpr_FEToZ interp_uexpr_WireToFE interp_9_4expr
- radd_coordinates
- curry_binop_fe25519_64W curry_unop_fe25519_64W curry_unop_wire_digitsW curry_9op_fe25519_64W
- WordW.interp_op WordW.interp_base_type
- Z.interp_op Z.interp_base_type
- Z.Syntax.interp_op Z.Syntax.interp_base_type
- mapf_interp_flat_type WordW.interp_base_type word128ize
- Interp interp interp_flat_type interpf interp_flat_type fst snd].
-
-(*
-Time Definition interp_radd_coordinates : SpecificGen.GF25519_64BoundedCommon.fe25519_64W
- -> SpecificGen.GF25519_64BoundedCommon.fe25519_64W
- -> SpecificGen.GF25519_64BoundedCommon.fe25519_64W
- -> SpecificGen.GF25519_64BoundedCommon.fe25519_64W
- -> SpecificGen.GF25519_64BoundedCommon.fe25519_64W
- -> SpecificGen.GF25519_64BoundedCommon.fe25519_64W
- -> SpecificGen.GF25519_64BoundedCommon.fe25519_64W
- -> SpecificGen.GF25519_64BoundedCommon.fe25519_64W
- -> SpecificGen.GF25519_64BoundedCommon.fe25519_64W
- -> Tuple.tuple SpecificGen.GF25519_64BoundedCommon.fe25519_64W 4
- := Eval asm_interp_add_coordinates in interp_9_4expr radd_coordinates.
-(*Print interp_radd_coordinates.*)
-Time Definition interp_radd_coordinates_correct : interp_radd_coordinates = interp_9_4expr radd_coordinates := eq_refl.
-
-Lemma radd_coordinates_correct_and_bounded : op9_4_correct_and_bounded radd_coordinates add_coordinates.
-Proof. exact_no_check radd_coordinatesW_correct_and_bounded. Time Qed.
-*)
diff --git a/src/SpecificGen/GF41417_32.v b/src/SpecificGen/GF41417_32.v
deleted file mode 100644
index 6899f940e..000000000
--- a/src/SpecificGen/GF41417_32.v
+++ /dev/null
@@ -1,773 +0,0 @@
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParams.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParamProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemOpt.
-Require Import Coq.Lists.List Crypto.Util.ListUtil.
-Require Import Crypto.Tactics.VerdiTactics.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Tower.
-Require Import Crypto.Util.Notations.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Algebra.
-Import ListNotations.
-Require Import Coq.ZArith.ZArith Coq.ZArith.Zpower Coq.ZArith.ZArith Coq.ZArith.Znumtheory.
-Local Open Scope Z.
-
-(* BEGIN precomputation. *)
-
-Definition modulus : Z := Eval compute in 2^414 - 17.
-Lemma prime_modulus : prime modulus. Admitted.
-Definition int_width := Eval compute in (2 * 32)%Z.
-Definition freeze_input_bound := 32%Z.
-
-Instance params41417_32 : PseudoMersenneBaseParams modulus.
- construct_params prime_modulus 18%nat 414.
-Defined.
-
-Definition length_fe41417_32 := Eval compute in length limb_widths.
-Definition fe41417_32 := Eval compute in (tuple Z length_fe41417_32).
-
-Definition mul2modulus : fe41417_32 :=
- Eval compute in (from_list_default 0%Z (length limb_widths) (construct_mul2modulus params41417_32)).
-
-Instance subCoeff : SubtractionCoefficient.
- apply Build_SubtractionCoefficient with (coeff := mul2modulus).
- vm_decide.
-Defined.
-
-Instance carryChain : CarryChain limb_widths.
- apply Build_CarryChain with (carry_chain := (rev [0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;0;1])%nat).
- intros.
- repeat (destruct H as [|H]; [subst; vm_compute; repeat constructor | ]).
- contradiction H.
-Defined.
-
-Definition freezePreconditions : FreezePreconditions freeze_input_bound int_width.
-Proof.
- constructor; compute_preconditions.
-Defined.
-
-(* Wire format for [pack] and [unpack] *)
-Definition wire_widths := Eval compute in (repeat 32 12 ++ 30 :: nil).
-
-Definition wire_digits := Eval compute in (tuple Z (length wire_widths)).
-
-Lemma wire_widths_nonneg : forall w, In w wire_widths -> 0 <= w.
-Proof.
- intros.
- repeat (destruct H as [|H]; [subst; vm_compute; congruence | ]).
- contradiction H.
-Qed.
-
-Lemma bits_eq : sum_firstn limb_widths (length limb_widths) = sum_firstn wire_widths (length wire_widths).
-Proof.
- reflexivity.
-Qed.
-
-Lemma modulus_gt_2 : 2 < modulus. Proof. cbv; congruence. Qed.
-
-(* Temporarily, we'll use addition chains equivalent to double-and-add. This is pending
- finding the real, more optimal chains from previous work. *)
-Fixpoint pow2Chain'' p (pow2_index acc_index : nat) chain_acc : list (nat * nat) :=
- match p with
- | xI p' => pow2Chain'' p' 1 0
- (chain_acc ++ (pow2_index, pow2_index) :: (0%nat, S acc_index) :: nil)
- | xO p' => pow2Chain'' p' 0 (S acc_index)
- (chain_acc ++ (pow2_index, pow2_index)::nil)
- | xH => (chain_acc ++ (pow2_index, pow2_index) :: (0%nat, S acc_index) :: nil)
- end.
-
-Fixpoint pow2Chain' p index :=
- match p with
- | xI p' => pow2Chain'' p' 0 0 (repeat (0,0)%nat index)
- | xO p' => pow2Chain' p' (S index)
- | xH => repeat (0,0)%nat index
- end.
-
-Definition pow2_chain p :=
- match p with
- | xH => nil
- | _ => pow2Chain' p 0
- end.
-
-Definition invChain := Eval compute in pow2_chain (Z.to_pos (modulus - 2)).
-
-Instance inv_ec : ExponentiationChain (modulus - 2).
- apply Build_ExponentiationChain with (chain := invChain).
- reflexivity.
-Defined.
-
-(* Note : use caution copying square root code to other primes. The (modulus / 8 + 1) chains are
- for primes that are 5 mod 8; if the prime is 3 mod 4 then use (modulus / 4 + 1). *)
-Definition sqrtChain := Eval compute in pow2_chain (Z.to_pos (modulus / 4 + 1)).
-
-Instance sqrt_ec : ExponentiationChain (modulus / 4 + 1).
- apply Build_ExponentiationChain with (chain := sqrtChain).
- reflexivity.
-Defined.
-
-Arguments chain {_ _ _} _.
-
-(* END precomputation *)
-
-(* Precompute constants *)
-Definition k_ := Eval compute in k.
-Definition k_subst : k = k_ := eq_refl k_.
-
-Definition c_ := Eval compute in c.
-Definition c_subst : c = c_ := eq_refl c_.
-
-Definition one_ := Eval compute in one.
-Definition one_subst : one = one_ := eq_refl one_.
-
-Definition zero_ := Eval compute in zero.
-Definition zero_subst : zero = zero_ := eq_refl zero_.
-
-Definition modulus_digits_ := Eval compute in ModularBaseSystemList.modulus_digits.
-Definition modulus_digits_subst : ModularBaseSystemList.modulus_digits = modulus_digits_ := eq_refl modulus_digits_.
-
-Local Opaque Z.shiftr Z.shiftl Z.land Z.mul Z.add Z.sub Z.lor Let_In Z.eqb Z.ltb Z.leb ModularBaseSystemListZOperations.neg ModularBaseSystemListZOperations.cmovl ModularBaseSystemListZOperations.cmovne.
-
-Definition app_n2 {T} (f : wire_digits) (P : wire_digits -> T) : T.
-Proof.
- cbv [wire_digits] in *.
- set (f0 := f).
- repeat (let g := fresh "g" in destruct f as [f g]).
- apply P.
- apply f0.
-Defined.
-
-Definition app_n2_correct {T} f (P : wire_digits -> T) : app_n2 f P = P f.
-Proof.
- intros.
- cbv [wire_digits] in *.
- repeat match goal with [p : (_*Z)%type |- _ ] => destruct p end.
- reflexivity.
-Qed.
-
-Definition app_n {T} (f : fe41417_32) (P : fe41417_32 -> T) : T.
-Proof.
- cbv [fe41417_32] in *.
- set (f0 := f).
- repeat (let g := fresh "g" in destruct f as [f g]).
- apply P.
- apply f0.
-Defined.
-
-Definition app_n_correct {T} f (P : fe41417_32 -> T) : app_n f P = P f.
-Proof.
- intros.
- cbv [fe41417_32] in *.
- repeat match goal with [p : (_*Z)%type |- _ ] => destruct p end.
- reflexivity.
-Qed.
-
-Definition appify2 {T} (op : fe41417_32 -> fe41417_32 -> T) (f g : fe41417_32) :=
- app_n f (fun f0 => (app_n g (fun g0 => op f0 g0))).
-
-Lemma appify2_correct : forall {T} op f g, @appify2 T op f g = op f g.
-Proof.
- intros. cbv [appify2].
- etransitivity; apply app_n_correct.
-Qed.
-
-Definition appify9 {T} (op : fe41417_32 -> fe41417_32 -> fe41417_32 -> fe41417_32 -> fe41417_32 -> fe41417_32 -> fe41417_32 -> fe41417_32 -> fe41417_32 -> T) (x0 x1 x2 x3 x4 x5 x6 x7 x8 : fe41417_32) :=
- app_n x0 (fun x0' =>
- app_n x1 (fun x1' =>
- app_n x2 (fun x2' =>
- app_n x3 (fun x3' =>
- app_n x4 (fun x4' =>
- app_n x5 (fun x5' =>
- app_n x6 (fun x6' =>
- app_n x7 (fun x7' =>
- app_n x8 (fun x8' =>
- op x0' x1' x2' x3' x4' x5' x6' x7' x8'))))))))).
-
-Lemma appify9_correct : forall {T} op x0 x1 x2 x3 x4 x5 x6 x7 x8,
- @appify9 T op x0 x1 x2 x3 x4 x5 x6 x7 x8 = op x0 x1 x2 x3 x4 x5 x6 x7 x8.
-Proof.
- intros. cbv [appify9].
- repeat (etransitivity; [ apply app_n_correct | ]); reflexivity.
-Qed.
-
-Definition uncurry_unop_fe41417_32 {T} (op : fe41417_32 -> T)
- := Eval compute in Tuple.uncurry (n:=length_fe41417_32) op.
-Definition curry_unop_fe41417_32 {T} op : fe41417_32 -> T
- := Eval compute in fun f => app_n f (Tuple.curry (n:=length_fe41417_32) op).
-
-Fixpoint uncurry_n_op_fe41417_32 {T} n
- : forall (op : Tower.tower_nd fe41417_32 T n),
- Tower.tower_nd Z T (n * length_fe41417_32)
- := match n
- return (forall (op : Tower.tower_nd fe41417_32 T n),
- Tower.tower_nd Z T (n * length_fe41417_32))
- with
- | O => fun x => x
- | S n' => fun f => uncurry_unop_fe41417_32 (fun x => @uncurry_n_op_fe41417_32 _ n' (f x))
- end.
-
-Definition uncurry_binop_fe41417_32 {T} (op : fe41417_32 -> fe41417_32 -> T)
- := Eval compute in uncurry_n_op_fe41417_32 2 op.
-Definition curry_binop_fe41417_32 {T} op : fe41417_32 -> fe41417_32 -> T
- := Eval compute in appify2 (fun f => curry_unop_fe41417_32 (curry_unop_fe41417_32 op f)).
-
-Definition uncurry_unop_wire_digits {T} (op : wire_digits -> T)
- := Eval compute in Tuple.uncurry (n:=length wire_widths) op.
-Definition curry_unop_wire_digits {T} op : wire_digits -> T
- := Eval compute in fun f => app_n2 f (Tuple.curry (n:=length wire_widths) op).
-
-Definition uncurry_9op_fe41417_32 {T} (op : fe41417_32 -> fe41417_32 -> fe41417_32 -> fe41417_32 -> fe41417_32 -> fe41417_32 -> fe41417_32 -> fe41417_32 -> fe41417_32 -> T)
- := Eval compute in uncurry_n_op_fe41417_32 9 op.
-Definition curry_9op_fe41417_32 {T} op : fe41417_32 -> fe41417_32 -> fe41417_32 -> fe41417_32 -> fe41417_32 -> fe41417_32 -> fe41417_32 -> fe41417_32 -> fe41417_32 -> T
- := Eval compute in
- appify9 (fun x0 x1 x2 x3 x4 x5 x6 x7 x8
- => curry_unop_fe41417_32 (curry_unop_fe41417_32 (curry_unop_fe41417_32 (curry_unop_fe41417_32 (curry_unop_fe41417_32 (curry_unop_fe41417_32 (curry_unop_fe41417_32 (curry_unop_fe41417_32 (curry_unop_fe41417_32 op x0) x1) x2) x3) x4) x5) x6) x7) x8).
-
-Definition add_sig (f g : fe41417_32) :
- { fg : fe41417_32 | fg = add_opt f g}.
-Proof.
- eexists.
- rewrite <-(@appify2_correct fe41417_32).
- cbv.
- reflexivity.
-Defined.
-
-Definition add (f g : fe41417_32) : fe41417_32 :=
- Eval cbv beta iota delta [proj1_sig add_sig] in
- proj1_sig (add_sig f g).
-
-Definition add_correct (f g : fe41417_32)
- : add f g = add_opt f g :=
- Eval cbv beta iota delta [proj1_sig add_sig] in
- proj2_sig (add_sig f g).
-
-Definition carry_add_sig (f g : fe41417_32) :
- { fg : fe41417_32 | fg = carry_add_opt f g}.
-Proof.
- eexists.
- rewrite <-(@appify2_correct fe41417_32).
- cbv.
- autorewrite with zsimplify_fast zsimplify_Z_to_pos; cbv.
- autorewrite with zsimplify_Z_to_pos; cbv.
- reflexivity.
-Defined.
-
-Definition carry_add (f g : fe41417_32) : fe41417_32 :=
- Eval cbv beta iota delta [proj1_sig carry_add_sig] in
- proj1_sig (carry_add_sig f g).
-
-Definition carry_add_correct (f g : fe41417_32)
- : carry_add f g = carry_add_opt f g :=
- Eval cbv beta iota delta [proj1_sig carry_add_sig] in
- proj2_sig (carry_add_sig f g).
-
-Definition sub_sig (f g : fe41417_32) :
- { fg : fe41417_32 | fg = sub_opt f g}.
-Proof.
- eexists.
- rewrite <-(@appify2_correct fe41417_32).
- cbv.
- reflexivity.
-Defined.
-
-Definition sub (f g : fe41417_32) : fe41417_32 :=
- Eval cbv beta iota delta [proj1_sig sub_sig] in
- proj1_sig (sub_sig f g).
-
-Definition sub_correct (f g : fe41417_32)
- : sub f g = sub_opt f g :=
- Eval cbv beta iota delta [proj1_sig sub_sig] in
- proj2_sig (sub_sig f g).
-
-Definition carry_sub_sig (f g : fe41417_32) :
- { fg : fe41417_32 | fg = carry_sub_opt f g}.
-Proof.
- eexists.
- rewrite <-(@appify2_correct fe41417_32).
- cbv.
- autorewrite with zsimplify_fast zsimplify_Z_to_pos; cbv.
- autorewrite with zsimplify_Z_to_pos; cbv.
- reflexivity.
-Defined.
-
-Definition carry_sub (f g : fe41417_32) : fe41417_32 :=
- Eval cbv beta iota delta [proj1_sig carry_sub_sig] in
- proj1_sig (carry_sub_sig f g).
-
-Definition carry_sub_correct (f g : fe41417_32)
- : carry_sub f g = carry_sub_opt f g :=
- Eval cbv beta iota delta [proj1_sig carry_sub_sig] in
- proj2_sig (carry_sub_sig f g).
-
-(* For multiplication, we add another layer of definition so that we can
- rewrite under the [let] binders. *)
-Definition mul_simpl_sig (f g : fe41417_32) :
- { fg : fe41417_32 | fg = carry_mul_opt k_ c_ f g}.
-Proof.
- cbv [fe41417_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv. (* N.B. The slow part of this is computing with [Z_div_opt].
- It would be much faster if we could take advantage of
- the form of [base_from_limb_widths] when doing
- division, so we could do subtraction instead. *)
- autorewrite with zsimplify_fast.
- reflexivity.
-Defined.
-
-Definition mul_simpl (f g : fe41417_32) : fe41417_32 :=
- Eval cbv beta iota delta [proj1_sig mul_simpl_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17) := f in
- let '(g0, g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12, g13, g14, g15, g16, g17) := g in
- proj1_sig (mul_simpl_sig (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17)
- (g0, g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12, g13, g14, g15, g16, g17)).
-
-Definition mul_simpl_correct (f g : fe41417_32)
- : mul_simpl f g = carry_mul_opt k_ c_ f g.
-Proof.
- pose proof (proj2_sig (mul_simpl_sig f g)).
- cbv [fe41417_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Qed.
-
-Definition mul_sig (f g : fe41417_32) :
- { fg : fe41417_32 | fg = carry_mul_opt k_ c_ f g}.
-Proof.
- eexists.
- rewrite <-mul_simpl_correct.
- rewrite <-(@appify2_correct fe41417_32).
- cbv.
- autorewrite with zsimplify_fast zsimplify_Z_to_pos; cbv.
- autorewrite with zsimplify_Z_to_pos; cbv.
- reflexivity.
-Defined.
-
-Definition mul (f g : fe41417_32) : fe41417_32 :=
- Eval cbv beta iota delta [proj1_sig mul_sig] in
- proj1_sig (mul_sig f g).
-
-Definition mul_correct (f g : fe41417_32)
- : mul f g = carry_mul_opt k_ c_ f g :=
- Eval cbv beta iota delta [proj1_sig add_sig] in
- proj2_sig (mul_sig f g).
-
-Definition opp_sig (f : fe41417_32) :
- { g : fe41417_32 | g = opp_opt f }.
-Proof.
- eexists.
- cbv [opp_opt].
- rewrite <-sub_correct.
- rewrite zero_subst.
- cbv [sub].
- reflexivity.
-Defined.
-
-Definition opp (f : fe41417_32) : fe41417_32
- := Eval cbv beta iota delta [proj1_sig opp_sig] in proj1_sig (opp_sig f).
-
-Definition opp_correct (f : fe41417_32)
- : opp f = opp_opt f
- := Eval cbv beta iota delta [proj2_sig add_sig] in proj2_sig (opp_sig f).
-
-Definition carry_opp_sig (f : fe41417_32) :
- { g : fe41417_32 | g = carry_opp_opt f }.
-Proof.
- eexists.
- cbv [carry_opp_opt].
- rewrite <-carry_sub_correct.
- rewrite zero_subst.
- cbv [carry_sub].
- reflexivity.
-Defined.
-
-Definition carry_opp (f : fe41417_32) : fe41417_32
- := Eval cbv beta iota delta [proj1_sig carry_opp_sig] in proj1_sig (carry_opp_sig f).
-
-Definition carry_opp_correct (f : fe41417_32)
- : carry_opp f = carry_opp_opt f
- := Eval cbv beta iota delta [proj2_sig add_sig] in proj2_sig (carry_opp_sig f).
-
-Definition pow (f : fe41417_32) chain := fold_chain_opt one_ mul chain [f].
-
-Lemma pow_correct (f : fe41417_32) : forall chain, pow f chain = pow_opt k_ c_ one_ f chain.
-Proof.
- cbv [pow pow_opt]; intros.
- rewrite !fold_chain_opt_correct.
- apply Proper_fold_chain; try reflexivity.
- intros; subst; apply mul_correct.
-Qed.
-
-(* Now that we have [pow], we can compute sqrt of -1 for use
- in sqrt function (this is not needed unless the prime is
- 5 mod 8) *)
-Local Transparent Z.shiftr Z.shiftl Z.land Z.mul Z.add Z.sub Z.lor Let_In Z.eqb Z.ltb andb.
-
-Definition sqrt_m1 := Eval vm_compute in (pow (encode (F.of_Z _ 2)) (pow2_chain (Z.to_pos ((modulus - 1) / 4)))).
-
-Local Opaque Z.shiftr Z.shiftl Z.land Z.mul Z.add Z.sub Z.lor Let_In Z.eqb Z.ltb andb.
-
-Definition inv_sig (f : fe41417_32) :
- { g : fe41417_32 | g = inv_opt k_ c_ one_ f }.
-Proof.
- eexists; cbv [inv_opt].
- rewrite <-pow_correct.
- cbv - [mul].
- reflexivity.
-Defined.
-
-Definition inv (f : fe41417_32) : fe41417_32
- := Eval cbv beta iota delta [proj1_sig inv_sig] in proj1_sig (inv_sig f).
-
-Definition inv_correct (f : fe41417_32)
- : inv f = inv_opt k_ c_ one_ f
- := Eval cbv beta iota delta [proj2_sig inv_sig] in proj2_sig (inv_sig f).
-
-Definition mbs_field := modular_base_system_field modulus_gt_2.
-
-Import Morphisms.
-
-Local Existing Instance prime_modulus.
-
-Lemma field_and_homomorphisms
- : @field fe41417_32 eq zero_ one_ opp add sub mul inv div
- /\ @Ring.is_homomorphism
- (F modulus) Logic.eq F.one F.add F.mul
- fe41417_32 eq one_ add mul encode
- /\ @Ring.is_homomorphism
- fe41417_32 eq one_ add mul
- (F modulus) Logic.eq F.one F.add F.mul
- decode.
-Proof.
- eapply @Field.field_and_homomorphism_from_redundant_representation.
- { exact (F.field_modulo _). }
- { apply encode_rep. }
- { reflexivity. }
- { reflexivity. }
- { reflexivity. }
- { intros; rewrite opp_correct, opp_opt_correct; apply opp_rep; reflexivity. }
- { intros; rewrite add_correct, add_opt_correct; apply add_rep; reflexivity. }
- { intros; rewrite sub_correct, sub_opt_correct; apply sub_rep; reflexivity. }
- { intros; rewrite mul_correct, carry_mul_opt_correct by reflexivity; apply carry_mul_rep; reflexivity. }
- { intros; rewrite inv_correct, inv_opt_correct by reflexivity; apply inv_rep; reflexivity. }
- { intros; apply encode_rep. }
-Qed.
-
-Definition field41417_32 : @field fe41417_32 eq zero_ one_ opp add sub mul inv div := proj1 field_and_homomorphisms.
-
-Lemma carry_field_and_homomorphisms
- : @field fe41417_32 eq zero_ one_ carry_opp carry_add carry_sub mul inv div
- /\ @Ring.is_homomorphism
- (F modulus) Logic.eq F.one F.add F.mul
- fe41417_32 eq one_ carry_add mul encode
- /\ @Ring.is_homomorphism
- fe41417_32 eq one_ carry_add mul
- (F modulus) Logic.eq F.one F.add F.mul
- decode.
-Proof.
- eapply @Field.field_and_homomorphism_from_redundant_representation.
- { exact (F.field_modulo _). }
- { apply encode_rep. }
- { reflexivity. }
- { reflexivity. }
- { reflexivity. }
- { intros; rewrite carry_opp_correct, carry_opp_opt_correct, carry_opp_rep; apply opp_rep; reflexivity. }
- { intros; rewrite carry_add_correct, carry_add_opt_correct, carry_add_rep; apply add_rep; reflexivity. }
- { intros; rewrite carry_sub_correct, carry_sub_opt_correct, carry_sub_rep; apply sub_rep; reflexivity. }
- { intros; rewrite mul_correct, carry_mul_opt_correct by reflexivity; apply carry_mul_rep; reflexivity. }
- { intros; rewrite inv_correct, inv_opt_correct by reflexivity; apply inv_rep; reflexivity. }
- { intros; apply encode_rep. }
-Qed.
-
-Definition carry_field41417_32 : @field fe41417_32 eq zero_ one_ carry_opp carry_add carry_sub mul inv div := proj1 carry_field_and_homomorphisms.
-
-Lemma homomorphism_F41417_32_encode
- : @Ring.is_homomorphism (F modulus) Logic.eq F.one F.add F.mul fe41417_32 eq one add mul encode.
-Proof. apply field_and_homomorphisms. Qed.
-
-Lemma homomorphism_F41417_32_decode
- : @Ring.is_homomorphism fe41417_32 eq one add mul (F modulus) Logic.eq F.one F.add F.mul decode.
-Proof. apply field_and_homomorphisms. Qed.
-
-
-Lemma homomorphism_carry_F41417_32_encode
- : @Ring.is_homomorphism (F modulus) Logic.eq F.one F.add F.mul fe41417_32 eq one carry_add mul encode.
-Proof. apply carry_field_and_homomorphisms. Qed.
-
-Lemma homomorphism_carry_F41417_32_decode
- : @Ring.is_homomorphism fe41417_32 eq one carry_add mul (F modulus) Logic.eq F.one F.add F.mul decode.
-Proof. apply carry_field_and_homomorphisms. Qed.
-
-Definition ge_modulus_sig (f : fe41417_32) :
- { b : Z | b = ge_modulus_opt (to_list 18 f) }.
-Proof.
- cbv [fe41417_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists; cbv [ge_modulus_opt].
- rewrite !modulus_digits_subst.
- cbv.
- reflexivity.
-Defined.
-
-Definition ge_modulus (f : fe41417_32) : Z :=
- Eval cbv beta iota delta [proj1_sig ge_modulus_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17) := f in
- proj1_sig (ge_modulus_sig (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17)).
-
-Definition ge_modulus_correct (f : fe41417_32) :
- ge_modulus f = ge_modulus_opt (to_list 18 f).
-Proof.
- pose proof (proj2_sig (ge_modulus_sig f)).
- cbv [fe41417_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Defined.
-
-Definition prefreeze_sig (f : fe41417_32) :
- { f' : fe41417_32 | f' = from_list_default 0 18 (carry_full_3_opt c_ (to_list 18 f)) }.
-Proof.
- cbv [fe41417_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv - [from_list_default].
- (* TODO(jgross,jadep): use Reflective linearization here? *)
- repeat (
- set_evars; rewrite app_Let_In_nd; subst_evars;
- eapply Proper_Let_In_nd_changebody; [reflexivity|intro]).
- cbv [from_list_default from_list_default'].
- reflexivity.
-Defined.
-
-Definition prefreeze (f : fe41417_32) : fe41417_32 :=
- Eval cbv beta iota delta [proj1_sig prefreeze_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17) := f in
- proj1_sig (prefreeze_sig (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17)).
-
-Definition prefreeze_correct (f : fe41417_32)
- : prefreeze f = from_list_default 0 18 (carry_full_3_opt c_ (to_list 18 f)).
-Proof.
- pose proof (proj2_sig (prefreeze_sig f)).
- cbv [fe41417_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Defined.
-
-Definition postfreeze_sig (f : fe41417_32) :
- { f' : fe41417_32 | f' = from_list_default 0 18 (conditional_subtract_modulus_opt (int_width := int_width) (to_list 18 f)) }.
-Proof.
- cbv [fe41417_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists; cbv [freeze_opt int_width].
- cbv [to_list to_list'].
- cbv [conditional_subtract_modulus_opt].
- rewrite !modulus_digits_subst.
- cbv - [from_list_default].
- (* TODO(jgross,jadep): use Reflective linearization here? *)
- repeat (
- set_evars; rewrite app_Let_In_nd; subst_evars;
- eapply Proper_Let_In_nd_changebody; [reflexivity|intro]).
- cbv [from_list_default from_list_default'].
- reflexivity.
-Defined.
-
-Definition postfreeze (f : fe41417_32) : fe41417_32 :=
- Eval cbv beta iota delta [proj1_sig postfreeze_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17) := f in
- proj1_sig (postfreeze_sig (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17)).
-
-Definition postfreeze_correct (f : fe41417_32)
- : postfreeze f = from_list_default 0 18 (conditional_subtract_modulus_opt (int_width := int_width) (to_list 18 f)).
-Proof.
- pose proof (proj2_sig (postfreeze_sig f)).
- cbv [fe41417_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Defined.
-
-Definition freeze (f : fe41417_32) : fe41417_32 :=
- dlet x := prefreeze f in
- postfreeze x.
-
-Local Transparent Let_In.
-Definition freeze_correct (f : fe41417_32)
- : freeze f = from_list_default 0 18 (freeze_opt (int_width := int_width) c_ (to_list 18 f)).
-Proof.
- cbv [freeze_opt freeze Let_In].
- rewrite prefreeze_correct.
- rewrite postfreeze_correct.
- match goal with
- |- appcontext [to_list _ (from_list_default _ ?n ?xs)] =>
- assert (length xs = n) as pf; [ | rewrite from_list_default_eq with (pf0 := pf) ] end.
- { rewrite carry_full_3_opt_correct; repeat rewrite ModularBaseSystemListProofs.length_carry_full; auto using length_to_list. }
- rewrite to_list_from_list.
- reflexivity.
-Qed.
-Local Opaque Let_In.
-
-Definition fieldwiseb_sig (f g : fe41417_32) :
- { b | b = @fieldwiseb Z Z 18 Z.eqb f g }.
-Proof.
- cbv [fe41417_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv.
- reflexivity.
-Defined.
-
-Definition fieldwiseb (f g : fe41417_32) : bool
- := Eval cbv beta iota delta [proj1_sig fieldwiseb_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17) := f in
- let '(g0, g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12, g13, g14, g15, g16, g17) := g in
- proj1_sig (fieldwiseb_sig (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17)
- (g0, g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12, g13, g14, g15, g16, g17)).
-
-Lemma fieldwiseb_correct (f g : fe41417_32)
- : fieldwiseb f g = @Tuple.fieldwiseb Z Z 18 Z.eqb f g.
-Proof.
- set (f' := f); set (g' := g).
- hnf in f, g; destruct_head' prod.
- exact (proj2_sig (fieldwiseb_sig f' g')).
-Qed.
-
-Definition eqb_sig (f g : fe41417_32) :
- { b | b = eqb int_width f g }.
-Proof.
- cbv [eqb].
- cbv [fe41417_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv [ModularBaseSystem.freeze int_width].
- rewrite <-!from_list_default_eq with (d := 0).
- rewrite <-!(freeze_opt_correct c_) by auto using length_to_list.
- rewrite <-!freeze_correct.
- rewrite <-fieldwiseb_correct.
- reflexivity.
-Defined.
-
-Definition eqb (f g : fe41417_32) : bool
- := Eval cbv beta iota delta [proj1_sig eqb_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17) := f in
- let '(g0, g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12, g13, g14, g15, g16, g17) := g in
- proj1_sig (eqb_sig (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17)
- (g0, g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12, g13, g14, g15, g16, g17)).
-
-Lemma eqb_correct (f g : fe41417_32)
- : eqb f g = ModularBaseSystem.eqb int_width f g.
-Proof.
- set (f' := f); set (g' := g).
- hnf in f, g; destruct_head' prod.
- exact (proj2_sig (eqb_sig f' g')).
-Qed.
-
-Definition sqrt_sig (f : fe41417_32) :
- { f' : fe41417_32 | f' = sqrt_3mod4_opt k_ c_ one_ f}.
-Proof.
- eexists.
- cbv [sqrt_3mod4_opt int_width].
- rewrite <- pow_correct.
- reflexivity.
-Defined.
-
-Definition sqrt (f : fe41417_32) : fe41417_32
- := Eval cbv beta iota delta [proj1_sig sqrt_sig] in proj1_sig (sqrt_sig f).
-
-Definition sqrt_correct (f : fe41417_32)
- : sqrt f = sqrt_3mod4_opt k_ c_ one_ f
- := Eval cbv beta iota delta [proj2_sig sqrt_sig] in proj2_sig (sqrt_sig f).
-
-Definition pack_simpl_sig (f : fe41417_32) :
- { f' | f' = pack_opt params41417_32 wire_widths_nonneg bits_eq f }.
-Proof.
- cbv [fe41417_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv [pack_opt].
- repeat (rewrite <-convert'_opt_correct;
- cbv - [from_list_default_opt Conversion.convert']).
- repeat progress rewrite ?Z.shiftl_0_r, ?Z.shiftr_0_r, ?Z.land_0_l, ?Z.lor_0_l, ?Z.land_same_r.
- cbv [from_list_default_opt].
- reflexivity.
-Defined.
-
-Definition pack_simpl (f : fe41417_32) :=
- Eval cbv beta iota delta [proj1_sig pack_simpl_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17) := f in
- proj1_sig (pack_simpl_sig (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17)).
-
-Definition pack_simpl_correct (f : fe41417_32)
- : pack_simpl f = pack_opt params41417_32 wire_widths_nonneg bits_eq f.
-Proof.
- pose proof (proj2_sig (pack_simpl_sig f)).
- cbv [fe41417_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Qed.
-
-Definition pack_sig (f : fe41417_32) :
- { f' | f' = pack_opt params41417_32 wire_widths_nonneg bits_eq f }.
-Proof.
- eexists.
- rewrite <-pack_simpl_correct.
- rewrite <-(@app_n_correct wire_digits).
- cbv.
- reflexivity.
-Defined.
-
-Definition pack (f : fe41417_32) : wire_digits :=
- Eval cbv beta iota delta [proj1_sig pack_sig] in proj1_sig (pack_sig f).
-
-Definition pack_correct (f : fe41417_32)
- : pack f = pack_opt params41417_32 wire_widths_nonneg bits_eq f
- := Eval cbv beta iota delta [proj2_sig pack_sig] in proj2_sig (pack_sig f).
-
-Definition unpack_simpl_sig (f : wire_digits) :
- { f' | f' = unpack_opt params41417_32 wire_widths_nonneg bits_eq f }.
-Proof.
- cbv [wire_digits] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv [unpack_opt].
- repeat (
- rewrite <-convert'_opt_correct;
- cbv - [from_list_default_opt Conversion.convert']).
- repeat progress rewrite ?Z.shiftl_0_r, ?Z.shiftr_0_r, ?Z.land_0_l, ?Z.lor_0_l, ?Z.land_same_r.
- cbv [from_list_default_opt].
- reflexivity.
-Defined.
-
-Definition unpack_simpl (f : wire_digits) : fe41417_32 :=
- Eval cbv beta iota delta [proj1_sig unpack_simpl_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12) := f in
- proj1_sig (unpack_simpl_sig (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12)).
-
-Definition unpack_simpl_correct (f : wire_digits)
- : unpack_simpl f = unpack_opt params41417_32 wire_widths_nonneg bits_eq f.
-Proof.
- pose proof (proj2_sig (unpack_simpl_sig f)).
- cbv [wire_digits] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Qed.
-
-Definition unpack_sig (f : wire_digits) :
- { f' | f' = unpack_opt params41417_32 wire_widths_nonneg bits_eq f }.
-Proof.
- eexists.
- rewrite <-unpack_simpl_correct.
- rewrite <-(@app_n2_correct fe41417_32).
- cbv.
- reflexivity.
-Defined.
-
-Definition unpack (f : wire_digits) : fe41417_32 :=
- Eval cbv beta iota delta [proj1_sig unpack_sig] in proj1_sig (unpack_sig f).
-
-Definition unpack_correct (f : wire_digits)
- : unpack f = unpack_opt params41417_32 wire_widths_nonneg bits_eq f
- := Eval cbv beta iota delta [proj2_sig pack_sig] in proj2_sig (unpack_sig f).
diff --git a/src/SpecificGen/GF41417_32Bounded.v b/src/SpecificGen/GF41417_32Bounded.v
deleted file mode 100644
index 4748ee6ff..000000000
--- a/src/SpecificGen/GF41417_32Bounded.v
+++ /dev/null
@@ -1,521 +0,0 @@
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParams.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParamProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemOpt.
-Require Import Crypto.SpecificGen.GF41417_32.
-Require Import Crypto.SpecificGen.GF41417_32BoundedCommon.
-Require Import Crypto.SpecificGen.GF41417_32Reflective.
-Require Import Bedrock.Word Crypto.Util.WordUtil.
-Require Import Coq.Lists.List Crypto.Util.ListUtil.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemWord.
-Require Import Crypto.Tactics.VerdiTactics.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Notations.
-Require Import Crypto.Util.Bool.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Algebra.
-Import ListNotations.
-Require Import Coq.ZArith.ZArith Coq.ZArith.Zpower Coq.ZArith.ZArith Coq.ZArith.Znumtheory.
-Local Open Scope Z.
-
-
-Local Ltac cbv_tuple_map :=
- cbv [Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list' HList.hlistP HList.hlistP'].
-
-Local Ltac post_bounded_t :=
- (* much pain and hackery to work around [Defined] taking forever *)
- cbv_tuple_map;
- let blem' := fresh "blem'" in
- let is_bounded_lem := fresh "is_bounded_lem" in
- intros is_bounded_lem blem';
- apply blem'; repeat apply conj; apply is_bounded_lem.
-Local Ltac bounded_t opW blem :=
- generalize blem; generalize is_bounded_proj1_fe41417_32; post_bounded_t.
-Local Ltac bounded_wire_digits_t opW blem :=
- generalize blem; generalize is_bounded_proj1_wire_digits; post_bounded_t.
-
-Local Ltac define_binop f g opW blem :=
- refine (exist_fe41417_32W (opW (proj1_fe41417_32W f, proj1_fe41417_32W g)) _);
- abstract bounded_t opW blem.
-Local Ltac define_unop f opW blem :=
- refine (exist_fe41417_32W (opW (proj1_fe41417_32W f)) _);
- abstract bounded_t opW blem.
-Local Ltac define_unop_FEToZ f opW :=
- refine (opW (proj1_fe41417_32W f)).
-Local Ltac define_unop_FEToWire f opW blem :=
- refine (exist_wire_digitsW (opW (proj1_fe41417_32W f)) _);
- abstract bounded_t opW blem.
-Local Ltac define_unop_WireToFE f opW blem :=
- refine (exist_fe41417_32W (opW (proj1_wire_digitsW f)) _);
- abstract bounded_wire_digits_t opW blem.
-
-Local Opaque Let_In.
-Local Opaque Z.add Z.sub Z.mul Z.shiftl Z.shiftr Z.land Z.lor Z.eqb NToWord64.
-Local Arguments interp_radd / _.
-Local Arguments interp_rsub / _.
-Local Arguments interp_rmul / _.
-Local Arguments interp_ropp / _.
-Local Arguments interp_rprefreeze / _.
-Local Arguments interp_rge_modulus / _.
-Local Arguments interp_rpack / _.
-Local Arguments interp_runpack / _.
-Definition addW (f : fe41417_32W * fe41417_32W) : fe41417_32W := Eval simpl in interp_radd f.
-Definition subW (f : fe41417_32W * fe41417_32W) : fe41417_32W := Eval simpl in interp_rsub f.
-Definition mulW (f : fe41417_32W * fe41417_32W) : fe41417_32W := Eval simpl in interp_rmul f.
-Definition oppW (f : fe41417_32W) : fe41417_32W := Eval simpl in interp_ropp f.
-Definition prefreezeW (f : fe41417_32W) : fe41417_32W := Eval simpl in interp_rprefreeze f.
-Definition ge_modulusW (f : fe41417_32W) : word64 := Eval simpl in interp_rge_modulus f.
-Definition packW (f : fe41417_32W) : wire_digitsW := Eval simpl in interp_rpack f.
-Definition unpackW (f : wire_digitsW) : fe41417_32W := Eval simpl in interp_runpack f.
-
-Definition modulusW :=
- Eval cbv - [ZToWord64] in (Tuple.map ZToWord64 (Tuple.from_list_default 0%Z length_fe41417_32 GF41417_32.modulus_digits_)).
-
-Definition postfreeze : GF41417_32.fe41417_32 -> GF41417_32.fe41417_32 :=
- GF41417_32.postfreeze.
-
-Lemma freeze_prepost_freeze : forall x, postfreeze (prefreeze x) = GF41417_32.freeze x.
-Proof. reflexivity. Qed.
-
-Definition postfreezeW : fe41417_32W -> fe41417_32W :=
- (conditional_subtract_modulusW
- (num_limbs := length_fe41417_32)
- modulusW
- ge_modulusW
- (Interpretations64.WordW.neg GF41417_32.int_width)
- ).
-
-Definition freezeW (f : fe41417_32W) : fe41417_32W := Eval cbv beta delta [prefreezeW postfreezeW] in postfreezeW (prefreezeW f).
-
-Local Transparent Let_In.
-(* Wrapper to allow extracted code to not unfold [mulW] *)
-Definition mulW_noinline := mulW.
-Definition powW (f : fe41417_32W) chain := fold_chain_opt (proj1_fe41417_32W one) (fun f g => mulW_noinline (f, g)) chain [f].
-Definition invW (f : fe41417_32W) : fe41417_32W
- := Eval cbv -[Let_In fe41417_32W mulW_noinline] in powW f (chain inv_ec).
-
-Local Ltac port_correct_and_bounded pre_rewrite opW interp_rop rop_cb :=
- change opW with (interp_rop);
- rewrite pre_rewrite;
- intros; apply rop_cb; assumption.
-
-Lemma addW_correct_and_bounded : ibinop_correct_and_bounded addW (Curry.curry2 carry_add).
-Proof. port_correct_and_bounded interp_radd_correct addW interp_radd radd_correct_and_bounded. Qed.
-Lemma subW_correct_and_bounded : ibinop_correct_and_bounded subW (Curry.curry2 carry_sub).
-Proof. port_correct_and_bounded interp_rsub_correct subW interp_rsub rsub_correct_and_bounded. Qed.
-Lemma mulW_correct_and_bounded : ibinop_correct_and_bounded mulW (Curry.curry2 mul).
-Proof. port_correct_and_bounded interp_rmul_correct mulW interp_rmul rmul_correct_and_bounded. Qed.
-Lemma oppW_correct_and_bounded : iunop_correct_and_bounded oppW carry_opp.
-Proof. port_correct_and_bounded interp_ropp_correct oppW interp_ropp ropp_correct_and_bounded. Qed.
-Lemma prefreezeW_correct_and_bounded : iunop_correct_and_bounded prefreezeW prefreeze.
-Proof. port_correct_and_bounded interp_rprefreeze_correct prefreezeW interp_rprefreeze rprefreeze_correct_and_bounded. Qed.
-Lemma ge_modulusW_correct : iunop_FEToZ_correct ge_modulusW ge_modulus.
-Proof. port_correct_and_bounded interp_rge_modulus_correct ge_modulusW interp_rge_modulus rge_modulus_correct_and_bounded. Qed.
-Lemma packW_correct_and_bounded : iunop_FEToWire_correct_and_bounded packW pack.
-Proof. port_correct_and_bounded interp_rpack_correct packW interp_rpack rpack_correct_and_bounded. Qed.
-Lemma unpackW_correct_and_bounded : iunop_WireToFE_correct_and_bounded unpackW unpack.
-Proof. port_correct_and_bounded interp_runpack_correct unpackW interp_runpack runpack_correct_and_bounded. Qed.
-
-Ltac lower_bound_minus_ge_modulus :=
- apply Z.le_0_sub;
- cbv [ge_modulus Let_In ModularBaseSystemListZOperations.cmovl ModularBaseSystemListZOperations.cmovne ModularBaseSystemListZOperations.neg];
- repeat break_if; Z.ltb_to_lt; subst; try omega;
- rewrite ?Z.land_0_l; auto;
- change Interpretations64.WordW.wordWToZ with word64ToZ;
- etransitivity; try apply Z.land_upper_bound_r; instantiate; try omega;
- apply Z.ones_nonneg; instantiate; vm_compute; discriminate.
-
-Ltac upper_bound_minus_ge_modulus :=
- (apply Z.log2_lt_pow2_alt; [ vm_compute; reflexivity | ]);
- eapply Z.le_lt_trans; [ apply Z.le_sub_nonneg; apply Z.land_nonneg; right; omega | ];
- eapply Z.le_lt_trans; [ eassumption | ];
- instantiate; vm_compute; reflexivity.
-
-Lemma postfreezeW_correct_and_bounded : iunop_correct_and_bounded postfreezeW postfreeze.
-Proof.
- intros x H.
- pose proof (ge_modulusW_correct x H) as Hgm.
- destruct_head_hnf' prod.
- unfold_is_bounded_in H.
- destruct_head' and.
- Z.ltb_to_lt.
- cbv [postfreezeW].
- cbv [conditional_subtract_modulusW Interpretations64.WordW.neg].
- change word64ToZ with Interpretations64.WordW.wordWToZ in *.
- rewrite Hgm.
-
- cbv [modulusW Tuple.map].
- cbv [on_tuple List.map to_list to_list' from_list from_list'
- HList.hlistP HList.hlistP'
- Tuple.map2 on_tuple2 ListUtil.map2 fe41417_32WToZ length_fe41417_32].
- cbv [postfreeze GF41417_32.postfreeze].
- cbv [Let_In].
-
- split.
- { match goal with
- |- (_,word64ToZ (_ ^- (Interpretations64.WordW.ZToWordW ?x) ^& _)) = (_,_ - (?y &' _)) => assert (x = y) as Hxy by reflexivity; repeat rewrite <-Hxy; clear Hxy end.
-
- change ZToWord64 with Interpretations64.WordW.ZToWordW in *.
- preunfold_is_bounded.
- rewrite !Interpretations64.WordW.wordWToZ_sub;
- rewrite !Interpretations64.WordW.wordWToZ_land;
- rewrite !Interpretations64.WordW.wordWToZ_ZToWordW;
- try match goal with
- | |- 0 <= ModularBaseSystemListZOperations.neg _ _ < 2 ^ _ => apply ModularBaseSystemListZOperationsProofs.neg_range; omega
- | |- 0 <= _ < 2 ^ Z.of_nat _ => vm_compute; split; [refine (fun x => match x with eq_refl => I end) | reflexivity]
- | |- 0 <= _ &' _ => apply Z.land_nonneg; right; omega
- | |- (_,_) = (_,_) => reflexivity
- end;
- try solve [
- (apply Z.log2_lt_pow2_alt; [ vm_compute; reflexivity | ]);
- eapply Z.le_lt_trans; try apply Z.land_upper_bound_r; try apply ModularBaseSystemListZOperationsProofs.neg_range; instantiate; try match goal with |- ?G => not has_evar G; vm_compute; discriminate end; reflexivity];
- match goal with
- | |- 0 <= _ - _ => lower_bound_minus_ge_modulus
- | |- Z.log2 (_ - _) < _ => upper_bound_minus_ge_modulus
- end. }
-
-
- change ZToWord64 with Interpretations64.WordW.ZToWordW in *;
- preunfold_is_bounded.
- rewrite !Interpretations64.WordW.wordWToZ_sub;
- rewrite !Interpretations64.WordW.wordWToZ_land;
- rewrite !Interpretations64.WordW.wordWToZ_ZToWordW;
- repeat match goal with |- _ /\ _ => split; Z.ltb_to_lt end;
- Z.ltb_to_lt; unfold_is_bounded; Z.ltb_to_lt;
- try match goal with
- | |- 0 <= ModularBaseSystemListZOperations.neg _ _ < 2 ^ _ => apply ModularBaseSystemListZOperationsProofs.neg_range; omega
- | |- 0 <= _ < 2 ^ Z.of_nat _ => vm_compute; split; [refine (fun x => match x with eq_refl => I end) | reflexivity]
- | |- 0 <= _ &' _ => apply Z.land_nonneg; right; omega
- end;
- try solve [
- (apply Z.log2_lt_pow2_alt; [ vm_compute; reflexivity | ]);
- eapply Z.le_lt_trans; try apply Z.land_upper_bound_r; try apply ModularBaseSystemListZOperationsProofs.neg_range; instantiate; try match goal with |- ?G => not has_evar G; vm_compute; discriminate end; reflexivity];
- try match goal with
- | |- 0 <= _ - _ => lower_bound_minus_ge_modulus
- | |- Z.log2 (_ - _) < _ => upper_bound_minus_ge_modulus
- | |- _ - _ <= _ => etransitivity; [ apply Z.le_sub_nonneg; apply Z.land_nonneg; right; omega | instantiate; assumption ]
- | |- 0 <= ModularBaseSystemListZOperations.neg _ _ =>
- apply ModularBaseSystemListZOperationsProofs.neg_range; vm_compute; discriminate
- | |- ModularBaseSystemListZOperations.neg _ _ < _ =>
- apply ModularBaseSystemListZOperationsProofs.neg_range; vm_compute; discriminate
- | |- _ => vm_compute; (discriminate || reflexivity)
- end.
-Qed.
-
-Lemma freezeW_correct_and_bounded : iunop_correct_and_bounded freezeW freeze.
-Proof.
- intros f H; rewrite <- freeze_prepost_freeze.
- change (freezeW f) with (postfreezeW (prefreezeW f)).
- destruct (prefreezeW_correct_and_bounded f H) as [H0 H1].
- destruct (postfreezeW_correct_and_bounded _ H1) as [H0' H1'].
- split; [ | assumption ].
- rewrite H0', H0; reflexivity.
-Qed.
-
-Lemma powW_correct_and_bounded chain : iunop_correct_and_bounded (fun x => powW x chain) (fun x => pow x chain).
-Proof.
- cbv [powW pow].
- intro x; intros; apply (fold_chain_opt_gen fe41417_32WToZ is_bounded [x]).
- { reflexivity. }
- { reflexivity. }
- { intros; pose proof (fun k0 k1 X Y => proj1 (mulW_correct_and_bounded (k0, k1) (conj X Y))) as H'.
- cbv [Curry.curry2 Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list'] in H'.
- rewrite <- H' by assumption.
- apply mulW_correct_and_bounded; split; assumption. }
- { intros; rewrite (fun X Y => proj1 (mulW_correct_and_bounded (_, _) (conj X Y))) by assumption; reflexivity. }
- { intros [|?]; autorewrite with simpl_nth_default;
- (assumption || reflexivity). }
-Qed.
-
-Lemma invW_correct_and_bounded : iunop_correct_and_bounded invW inv.
-Proof.
- intro f.
- assert (H : forall f, invW f = powW f (chain inv_ec))
- by abstract (cbv -[Let_In fe41417_32W mulW_noinline]; reflexivity).
- rewrite H.
- rewrite inv_correct.
- cbv [inv_opt].
- rewrite <- pow_correct.
- apply powW_correct_and_bounded.
-Qed.
-
-Definition fieldwisebW_sig (f g : fe41417_32W)
- : { b | b = GF41417_32.fieldwiseb (fe41417_32WToZ f) (fe41417_32WToZ g) }.
-Proof.
- hnf in f, g; destruct_head' prod.
- eexists.
- cbv [GF41417_32.fieldwiseb fe41417_32WToZ].
- rewrite ?word64eqb_Zeqb.
- reflexivity.
-Defined.
-
-Definition fieldwisebW (f g : fe41417_32W) : bool :=
- Eval cbv [proj1_sig fieldwisebW_sig appify2 app_fe41417_32W] in
- appify2 (fun f g => proj1_sig (fieldwisebW_sig f g)) f g.
-
-Lemma fieldwisebW_correct f g
- : fieldwisebW f g = GF41417_32.fieldwiseb (fe41417_32WToZ f) (fe41417_32WToZ g).
-Proof.
- set (f' := f); set (g' := g).
- hnf in f, g; destruct_head' prod.
- exact (proj2_sig (fieldwisebW_sig f' g')).
-Qed.
-
-Local Arguments freezeW : simpl never.
-Local Arguments fe41417_32WToZ !_ / .
-Local Opaque freezeW.
-
-Definition eqbW_sig (f g : fe41417_32W)
- : { b | is_bounded (fe41417_32WToZ f) = true
- -> is_bounded (fe41417_32WToZ g) = true
- -> b = GF41417_32.eqb (fe41417_32WToZ f) (fe41417_32WToZ g) }.
-Proof.
- pose proof (fun pf => proj1 (freezeW_correct_and_bounded f pf)) as frf.
- pose proof (fun pf => proj1 (freezeW_correct_and_bounded g pf)) as frg.
- hnf in f, g; destruct_head' prod.
- eexists.
- unfold GF41417_32.eqb.
- simpl @fe41417_32WToZ in *; cbv beta iota.
- intros.
- cbv [Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list' fe41417_32WToZ] in *.
- rewrite <- frf, <- frg by assumption.
- etransitivity; [ eapply fieldwisebW_correct | ].
- cbv [fe41417_32WToZ].
- reflexivity.
-Defined.
-
-Definition eqbW (f g : fe41417_32W) : bool :=
- Eval cbv [proj1_sig eqbW_sig appify2 app_fe41417_32W] in
- appify2 (fun f g => proj1_sig (eqbW_sig f g)) f g.
-
-Lemma eqbW_correct f g
- : is_bounded (fe41417_32WToZ f) = true
- -> is_bounded (fe41417_32WToZ g) = true
- -> eqbW f g = GF41417_32.eqb (fe41417_32WToZ f) (fe41417_32WToZ g).
-Proof.
- set (f' := f); set (g' := g).
- hnf in f, g; destruct_head' prod.
- exact (proj2_sig (eqbW_sig f' g')).
-Qed.
-
-Definition sqrt_m1W' : fe41417_32W :=
- Eval vm_compute in fe41417_32ZToW sqrt_m1.
-Definition sqrt_m1W := Eval cbv [sqrt_m1W' fe41417_32W_word64ize word64ize andb opt.word64ToZ opt.word64ize opt.Zleb Z.compare CompOpp Pos.compare Pos.compare_cont] in fe41417_32W_word64ize sqrt_m1W'.
-
-Definition GF41417_32sqrt (x : GF41417_32.fe41417_32) : GF41417_32.fe41417_32.
-Proof.
- lazymatch (eval cbv delta [GF41417_32.sqrt] in GF41417_32.sqrt) with
- | (fun powf powf_squared f => dlet a := powf in _)
- => exact (dlet powx := powW (fe41417_32ZToW x) (chain GF41417_32.sqrt_ec) in
- GF41417_32.sqrt (fe41417_32WToZ powx) (fe41417_32WToZ (mulW_noinline (powx, powx))) x)
- | (fun f => pow f _)
- => exact (GF41417_32.sqrt x)
- end.
-Defined.
-
-Definition sqrtW_sig
- : { sqrtW | iunop_correct_and_bounded sqrtW GF41417_32sqrt }.
-Proof.
- eexists.
- unfold GF41417_32sqrt, GF41417_32.sqrt.
- intros.
- rewrite ?fe41417_32ZToW_WToZ.
- split.
- { etransitivity.
- Focus 2. {
- lazymatch goal with
- | [ |- _ = pow _ _ ]
- => apply powW_correct_and_bounded; assumption
- | [ |- _ = (dlet powx := _ in _) ]
- => apply Proper_Let_In_nd_changebody_eq; intros;
- set_evars;
- match goal with (* unfold the first dlet ... in, but only if it's binding a var *)
- | [ |- ?x = dlet y := fe41417_32WToZ ?z in ?f ]
- => is_var z; change (x = match fe41417_32WToZ z with y => f end)
- end;
- change sqrt_m1 with (fe41417_32WToZ sqrt_m1W);
- pose proof (fun X Y => proj1 (mulW_correct_and_bounded (sqrt_m1W, a) (conj X Y))) as correctness;
- let cbv_in_all _ := (cbv [fe41417_32WToZ Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list' fe41417_32WToZ Curry.curry2 HList.hlistP HList.hlistP'] in *; idtac) in
- cbv_in_all ();
- let solver _ := (repeat match goal with
- | _ => progress subst
- | _ => progress unfold fst, snd
- | _ => progress cbv_in_all ()
- | [ |- ?x /\ ?x ] => cut x; [ intro; split; assumption | ]
- | [ |- is_bounded ?op = true ]
- => let H := fresh in
- lazymatch op with
- | context[mulW (_, _)] => pose proof mulW_correct_and_bounded as H
- | context[mulW_noinline (_, _)] => pose proof mulW_correct_and_bounded as H
- | context[powW _ _] => pose proof powW_correct_and_bounded as H
- | context[sqrt_m1W] => vm_compute; reflexivity
- | _ => assumption
- end;
- cbv_in_all ();
- apply H
- end) in
- rewrite <- correctness by solver (); clear correctness;
- let lem := fresh in
- pose proof eqbW_correct as lem; cbv_in_all (); rewrite <- lem by solver (); clear lem;
- pose proof (pull_bool_if fe41417_32WToZ) as lem; cbv_in_all (); rewrite lem by solver (); clear lem;
- subst_evars; reflexivity
- end.
- } Unfocus.
- assert (Hfold : forall x, fe41417_32WToZ x = fe41417_32WToZ x) by reflexivity.
- unfold fe41417_32WToZ at 2 in Hfold.
- etransitivity.
- Focus 2. {
- apply Proper_Let_In_nd_changebody; [ reflexivity | intro ].
- apply Hfold.
- } Unfocus.
- clear Hfold.
- lazymatch goal with
- | [ |- context G[dlet x := ?v in fe41417_32WToZ (@?f x)] ]
- => let G' := context G[fe41417_32WToZ (dlet x := v in f x)] in
- cut G'; cbv beta;
- [ cbv [Let_In]; exact (fun x => x) | apply f_equal ]
- | _ => idtac
- end;
- reflexivity.
- }
-
- { cbv [Let_In HList.hlistP HList.hlistP'];
- try break_if;
- repeat lazymatch goal with
- | [ |- is_bounded (?WToZ (powW _ _)) = true ]
- => apply powW_correct_and_bounded; assumption
- | [ |- is_bounded (snd (?WToZ (_, powW _ _))) = true ]
- => generalize powW_correct_and_bounded;
- cbv [snd Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list' HList.hlistP HList.hlistP'];
- let H := fresh in intro H; apply H; assumption
- | [ |- is_bounded (?WToZ (mulW (_, _))) = true ]
- => apply mulW_correct_and_bounded; split; [ vm_compute; reflexivity | ]
- end.
- }
-Defined.
-
-Definition sqrtW (f : fe41417_32W) : fe41417_32W :=
- Eval cbv [proj1_sig sqrtW_sig app_fe41417_32W] in
- app_fe41417_32W f (proj1_sig sqrtW_sig).
-
-Lemma sqrtW_correct_and_bounded : iunop_correct_and_bounded sqrtW GF41417_32sqrt.
-Proof.
- intro f.
- set (f' := f).
- hnf in f; destruct_head' prod.
- assert (H : sqrtW f' = proj1_sig sqrtW_sig f')
- by (subst f'; cbv beta iota delta [proj1_sig sqrtW_sig sqrtW]; reflexivity).
- rewrite H.
- exact (proj2_sig sqrtW_sig f').
-Qed.
-
-
-
-Definition add (f g : fe41417_32) : fe41417_32.
-Proof. define_binop f g addW addW_correct_and_bounded. Defined.
-Definition sub (f g : fe41417_32) : fe41417_32.
-Proof. define_binop f g subW subW_correct_and_bounded. Defined.
-Definition mul (f g : fe41417_32) : fe41417_32.
-Proof. define_binop f g mulW mulW_correct_and_bounded. Defined.
-Definition opp (f : fe41417_32) : fe41417_32.
-Proof. define_unop f oppW oppW_correct_and_bounded. Defined.
-Definition freeze (f : fe41417_32) : fe41417_32.
-Proof. define_unop f freezeW freezeW_correct_and_bounded. Defined.
-Definition ge_modulus (f : fe41417_32) : word64.
-Proof. define_unop_FEToZ f ge_modulusW. Defined.
-Definition pack (f : fe41417_32) : wire_digits.
-Proof. define_unop_FEToWire f packW packW_correct_and_bounded. Defined.
-Definition unpack (f : wire_digits) : fe41417_32.
-Proof. define_unop_WireToFE f unpackW unpackW_correct_and_bounded. Defined.
-
-Definition pow (f : fe41417_32) (chain : list (nat * nat)) : fe41417_32.
-Proof. define_unop f (fun x => powW x chain) powW_correct_and_bounded. Defined.
-Definition inv (f : fe41417_32) : fe41417_32.
-Proof. define_unop f invW (fun x p => proj2 (invW_correct_and_bounded x p)). Defined.
-Definition sqrt (f : fe41417_32) : fe41417_32.
-Proof. define_unop f sqrtW sqrtW_correct_and_bounded. Defined.
-
-Local Ltac op_correct_t op opW_correct_and_bounded :=
- cbv [op];
- lazymatch goal with
- | [ |- context[proj1_fe41417_32 (exist_fe41417_32W _ _)] ]
- => rewrite proj1_fe41417_32_exist_fe41417_32W
- | [ |- context[proj1_wire_digits (exist_wire_digitsW _ _)] ]
- => rewrite proj1_wire_digits_exist_wire_digitsW
- | _ => idtac
- end;
- generalize opW_correct_and_bounded;
- cbv_tuple_map;
- cbv [fst snd];
- let H := fresh in
- intro H; apply H;
- repeat match goal with |- and _ _ => apply conj end;
- lazymatch goal with
- | [ |- is_bounded _ = true ]
- => apply is_bounded_proj1_fe41417_32
- | [ |- wire_digits_is_bounded _ = true ]
- => apply is_bounded_proj1_wire_digits
- end.
-
-Lemma add_correct (f g : fe41417_32) : proj1_fe41417_32 (add f g) = carry_add (proj1_fe41417_32 f) (proj1_fe41417_32 g).
-Proof. op_correct_t add addW_correct_and_bounded. Qed.
-Lemma sub_correct (f g : fe41417_32) : proj1_fe41417_32 (sub f g) = carry_sub (proj1_fe41417_32 f) (proj1_fe41417_32 g).
-Proof. op_correct_t sub subW_correct_and_bounded. Qed.
-Lemma mul_correct (f g : fe41417_32) : proj1_fe41417_32 (mul f g) = GF41417_32.mul (proj1_fe41417_32 f) (proj1_fe41417_32 g).
-Proof. op_correct_t mul mulW_correct_and_bounded. Qed.
-Lemma opp_correct (f : fe41417_32) : proj1_fe41417_32 (opp f) = carry_opp (proj1_fe41417_32 f).
-Proof. op_correct_t opp oppW_correct_and_bounded. Qed.
-Lemma freeze_correct (f : fe41417_32) : proj1_fe41417_32 (freeze f) = GF41417_32.freeze (proj1_fe41417_32 f).
-Proof. op_correct_t freeze freezeW_correct_and_bounded. Qed.
-Lemma ge_modulus_correct (f : fe41417_32) : word64ToZ (ge_modulus f) = GF41417_32.ge_modulus (proj1_fe41417_32 f).
-Proof. op_correct_t ge_modulus ge_modulusW_correct. Qed.
-Lemma pack_correct (f : fe41417_32) : proj1_wire_digits (pack f) = GF41417_32.pack (proj1_fe41417_32 f).
-Proof. op_correct_t pack packW_correct_and_bounded. Qed.
-Lemma unpack_correct (f : wire_digits) : proj1_fe41417_32 (unpack f) = GF41417_32.unpack (proj1_wire_digits f).
-Proof. op_correct_t unpack unpackW_correct_and_bounded. Qed.
-Lemma pow_correct (f : fe41417_32) chain : proj1_fe41417_32 (pow f chain) = GF41417_32.pow (proj1_fe41417_32 f) chain.
-Proof. op_correct_t pow (powW_correct_and_bounded chain). Qed.
-Lemma inv_correct (f : fe41417_32) : proj1_fe41417_32 (inv f) = GF41417_32.inv (proj1_fe41417_32 f).
-Proof. op_correct_t inv (fun x p => proj1 (invW_correct_and_bounded x p)). Qed.
-Lemma sqrt_correct (f : fe41417_32) : proj1_fe41417_32 (sqrt f) = GF41417_32sqrt (proj1_fe41417_32 f).
-Proof. op_correct_t sqrt sqrtW_correct_and_bounded. Qed.
-
-Import Morphisms.
-
-Local Existing Instance prime_modulus.
-
-Lemma field41417_32_and_homomorphisms
- : @field fe41417_32 eq zero one opp add sub mul inv div
- /\ @Ring.is_homomorphism (F _) (@Logic.eq _) 1%F F.add F.mul fe41417_32 eq one add mul encode
- /\ @Ring.is_homomorphism fe41417_32 eq one add mul (F _) (@Logic.eq _) 1%F F.add F.mul decode.
-Proof.
- eapply @Field.field_and_homomorphism_from_redundant_representation.
- { exact (F.field_modulo _). }
- { cbv [decode encode]; intros; rewrite !proj1_fe41417_32_exist_fe41417_32; apply encode_rep. }
- { reflexivity. }
- { reflexivity. }
- { reflexivity. }
- { cbv [decode encode]; intros; rewrite opp_correct, carry_opp_correct, carry_opp_opt_correct, carry_opp_rep; apply opp_rep; reflexivity. }
- { cbv [decode encode]; intros; rewrite add_correct, carry_add_correct, carry_add_opt_correct, carry_add_rep; apply add_rep; reflexivity. }
- { cbv [decode encode]; intros; rewrite sub_correct, carry_sub_correct, carry_sub_opt_correct, carry_sub_rep; apply sub_rep; reflexivity. }
- { cbv [decode encode]; intros; rewrite mul_correct, GF41417_32.mul_correct, carry_mul_opt_correct by reflexivity; apply carry_mul_rep; reflexivity. }
- { cbv [decode encode]; intros; rewrite inv_correct, GF41417_32.inv_correct, inv_opt_correct by reflexivity; apply inv_rep; reflexivity. }
- { cbv [decode encode div]; intros; rewrite !proj1_fe41417_32_exist_fe41417_32; apply encode_rep. }
-Qed.
-
-Global Instance field41417_32 : @field fe41417_32 eq zero one opp add sub mul inv div := proj1 field41417_32_and_homomorphisms.
-
-Local Opaque proj1_fe41417_32 exist_fe41417_32 proj1_fe41417_32W exist_fe41417_32W.
-Global Instance homomorphism_F41417_32_encode
- : @Ring.is_homomorphism (F modulus) Logic.eq F.one F.add F.mul fe41417_32 eq one add mul encode.
-Proof. apply field41417_32_and_homomorphisms. Qed.
-
-Global Instance homomorphism_F41417_32_decode
- : @Ring.is_homomorphism fe41417_32 eq one add mul (F modulus) Logic.eq F.one F.add F.mul decode.
-Proof. apply field41417_32_and_homomorphisms. Qed.
diff --git a/src/SpecificGen/GF41417_32BoundedAddCoordinates.v b/src/SpecificGen/GF41417_32BoundedAddCoordinates.v
deleted file mode 100644
index b4f6ba5a8..000000000
--- a/src/SpecificGen/GF41417_32BoundedAddCoordinates.v
+++ /dev/null
@@ -1,78 +0,0 @@
-Require Import Coq.ZArith.ZArith.
-Require Import Crypto.SpecificGen.GF41417_32.
-Require Import Crypto.SpecificGen.GF41417_32BoundedCommon.
-Require Import Crypto.SpecificGen.GF41417_32ReflectiveAddCoordinates.
-Require Import Crypto.Util.LetIn.
-Local Open Scope Z.
-
-Local Ltac bounded_t opW blem :=
- apply blem; apply is_bounded_proj1_fe41417_32.
-
-Local Ltac define_binop f g opW blem :=
- refine (exist_fe41417_32W (opW (proj1_fe41417_32W f) (proj1_fe41417_32W g)) _);
- abstract bounded_t opW blem.
-
-Local Opaque Let_In.
-Local Opaque Z.add Z.sub Z.mul Z.shiftl Z.shiftr Z.land Z.lor Z.eqb NToWord64.
-(*Local Arguments interp_radd_coordinates / _ _ _ _ _ _ _ _ _.
-Definition add_coordinatesW (x0 x1 x2 x3 x4 x5 x6 x7 x8 : fe41417_32W) : Tuple.tuple fe41417_32W 4
- := Eval simpl in interp_radd_coordinates x0 x1 x2 x3 x4 x5 x6 x7 x8.
-
-Local Ltac port_correct_and_bounded pre_rewrite opW interp_rop rop_cb :=
- change opW with (interp_rop);
- rewrite pre_rewrite;
- intros; apply rop_cb; assumption.
-
-Lemma add_coordinatesW_correct_and_bounded : i9top_correct_and_bounded 4 add_coordinatesW Reified.AddCoordinates.add_coordinates.
-Proof. port_correct_and_bounded interp_radd_coordinates_correct add_coordinatesW interp_radd_coordinates radd_coordinates_correct_and_bounded. Qed.
-
-Local Ltac define_9_4op x0 x1 x2 x3 x4 x5 x6 x7 x8 opW blem :=
- refine (let ts := opW (proj1_fe41417_32W x0)
- (proj1_fe41417_32W x1)
- (proj1_fe41417_32W x2)
- (proj1_fe41417_32W x3)
- (proj1_fe41417_32W x4)
- (proj1_fe41417_32W x5)
- (proj1_fe41417_32W x6)
- (proj1_fe41417_32W x7)
- (proj1_fe41417_32W x8) in
- HList.mapt exist_fe41417_32W (ts:=ts) _);
- abstract (
- rewrite <- (HList.hlist_map (F:=fun x => is_bounded x = true) (f:=fe41417_32WToZ));
- apply add_coordinatesW_correct_and_bounded; apply is_bounded_proj1_fe41417_32
- ).
-Definition add_coordinates (x0 x1 x2 x3 x4 x5 x6 x7 x8 : fe41417_32) : Tuple.tuple fe41417_32 4.
-Proof. define_9_4op x0 x1 x2 x3 x4 x5 x6 x7 x8 add_coordinatesW add_coordinatesW_correct_and_bounded. Defined.
-
-Local Ltac op_correct_t op opW_correct_and_bounded :=
- cbv [op];
- rewrite ?HList.map_mapt;
- lazymatch goal with
- | [ |- context[proj1_fe41417_32 (exist_fe41417_32W _ _)] ]
- => rewrite proj1_fe41417_32_exist_fe41417_32W || setoid_rewrite proj1_fe41417_32_exist_fe41417_32W
- | [ |- context[proj1_wire_digits (exist_wire_digitsW _ _)] ]
- => rewrite proj1_wire_digits_exist_wire_digitsW
- | _ => idtac
- end;
- rewrite <- ?HList.map_is_mapt;
- apply opW_correct_and_bounded;
- lazymatch goal with
- | [ |- is_bounded _ = true ]
- => apply is_bounded_proj1_fe41417_32
- | [ |- wire_digits_is_bounded _ = true ]
- => apply is_bounded_proj1_wire_digits
- end.
-
-Lemma add_coordinates_correct (x0 x1 x2 x3 x4 x5 x6 x7 x8 : fe41417_32)
- : Tuple.map (n:=4) proj1_fe41417_32 (add_coordinates x0 x1 x2 x3 x4 x5 x6 x7 x8)
- = Reified.AddCoordinates.add_coordinates (proj1_fe41417_32 x0)
- (proj1_fe41417_32 x1)
- (proj1_fe41417_32 x2)
- (proj1_fe41417_32 x3)
- (proj1_fe41417_32 x4)
- (proj1_fe41417_32 x5)
- (proj1_fe41417_32 x6)
- (proj1_fe41417_32 x7)
- (proj1_fe41417_32 x8).
-Proof. op_correct_t add_coordinates add_coordinatesW_correct_and_bounded. Qed.
-*)
diff --git a/src/SpecificGen/GF41417_32BoundedCommon.v b/src/SpecificGen/GF41417_32BoundedCommon.v
deleted file mode 100644
index 6705d924b..000000000
--- a/src/SpecificGen/GF41417_32BoundedCommon.v
+++ /dev/null
@@ -1,819 +0,0 @@
-Require Import Coq.Classes.Morphisms.
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParams.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParamProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemOpt.
-Require Import Crypto.SpecificGen.GF41417_32.
-Require Import Bedrock.Word Crypto.Util.WordUtil.
-Require Import Coq.Lists.List Crypto.Util.ListUtil.
-Require Import Crypto.Tactics.VerdiTactics.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Notations.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Util.HList.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Algebra.
-Import ListNotations.
-Require Import Coq.ZArith.ZArith Coq.ZArith.Zpower Coq.ZArith.ZArith Coq.ZArith.Znumtheory.
-Local Open Scope Z.
-
-(* BEGIN common curve-specific definitions *)
-Definition bit_width : nat := Eval compute in Z.to_nat (GF41417_32.int_width).
-Local Notation b_of exp := (0, 2^exp + 2^(exp-3))%Z (only parsing). (* max is [(0, 2^(exp+2) + 2^exp + 2^(exp-1) + 2^(exp-3) + 2^(exp-4) + 2^(exp-5) + 2^(exp-6) + 2^(exp-10) + 2^(exp-12) + 2^(exp-13) + 2^(exp-14) + 2^(exp-15) + 2^(exp-17) + 2^(exp-23) + 2^(exp-24))%Z] *)
-Definition bounds_exp : tuple Z length_fe41417_32
- := Eval compute in
- Tuple.from_list length_fe41417_32 limb_widths eq_refl.
-Definition bounds : tuple (Z * Z) length_fe41417_32
- := Eval compute in
- Tuple.map (fun e => b_of e) bounds_exp.
-Definition wire_digit_bounds_exp : tuple Z (length wire_widths)
- := Eval compute in Tuple.from_list _ wire_widths eq_refl.
-Definition wire_digit_bounds : tuple (Z * Z) (length wire_widths)
- := Eval compute in Tuple.map (fun e => (0,2^e-1)%Z) wire_digit_bounds_exp.
-(* END common curve-specific definitions *)
-
-(* BEGIN aliases for word extraction *)
-Definition word64 := Word.word bit_width.
-Coercion word64ToZ (x : word64) : Z := Z.of_N (wordToN x).
-Coercion ZToWord64 (x : Z) : word64 := NToWord _ (Z.to_N x).
-Definition NToWord64 : N -> word64 := NToWord _.
-Definition word64ize (x : word64) : word64
- := Eval cbv [wordToN N.succ_double N.double] in NToWord64 (wordToN x).
-Definition w64eqb (x y : word64) := weqb x y.
-
-Global Arguments NToWord64 : simpl never.
-Arguments word64 : simpl never.
-Arguments bit_width : simpl never.
-Global Opaque word64.
-Global Opaque bit_width.
-
-(* END aliases for word extraction *)
-
-(* BEGIN basic types *)
-Module Type WordIsBounded.
- Parameter is_boundedT : forall (lower upper : Z), word64 -> bool.
- Parameter Build_is_boundedT : forall {lower upper} {proj_word : word64},
- andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z = true -> is_boundedT lower upper proj_word = true.
- Parameter project_is_boundedT : forall {lower upper} {proj_word : word64},
- is_boundedT lower upper proj_word = true -> andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z = true.
-End WordIsBounded.
-
-Module Import WordIsBoundedDefault : WordIsBounded.
- Definition is_boundedT : forall (lower upper : Z), word64 -> bool
- := fun lower upper proj_word => andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z.
- Definition Build_is_boundedT {lower upper} {proj_word : word64}
- : andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z = true -> is_boundedT lower upper proj_word = true
- := fun x => x.
- Definition project_is_boundedT {lower upper} {proj_word : word64}
- : is_boundedT lower upper proj_word = true -> andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z = true
- := fun x => x.
-End WordIsBoundedDefault.
-
-Definition bounded_word (lower upper : Z)
- := { proj_word : word64 | is_boundedT lower upper proj_word = true }.
-Local Notation word_of exp := (bounded_word (fst (b_of exp)) (snd (b_of exp))).
-Local Notation unbounded_word sz := (bounded_word 0 (2^sz-1)%Z).
-
-Local Opaque word64.
-Definition fe41417_32W := Eval cbv (*-[word64]*) in (tuple word64 length_fe41417_32).
-Definition wire_digitsW := Eval cbv (*-[word64]*) in (tuple word64 (length wire_widths)).
-Definition fe41417_32 :=
- Eval cbv -[bounded_word Z.pow Z.sub Z.add] in
- hlist (fun e => word_of e) bounds_exp.
-Definition wire_digits :=
- Eval cbv -[bounded_word Z.pow Z.sub Z.add] in
- hlist (fun e => unbounded_word e) wire_digit_bounds_exp.
-
-Definition is_bounded_gen {n} (x : tuple Z n) (bounds : tuple (Z * Z) n) : bool
- := let res := Tuple.map2
- (fun bounds v =>
- let '(lower, upper) := bounds in
- (lower <=? v) && (v <=? upper))%bool%Z
- bounds x in
- List.fold_right andb true (Tuple.to_list _ res).
-
-Definition is_bounded (x : SpecificGen.GF41417_32.fe41417_32) : bool
- := is_bounded_gen (n:=length_fe41417_32) x bounds.
-
-Definition wire_digits_is_bounded (x : SpecificGen.GF41417_32.wire_digits) : bool
- := is_bounded_gen (n:=length wire_widths) x wire_digit_bounds.
-
-(* END basic types *)
-
-Section generic_destructuring.
- Fixpoint app_on' A n : forall T (f : tuple' A n) (P : forall x : tuple' A n, T x), T f
- := match n return forall T (f : tuple' A n) (P : forall x : tuple' A n, T x), T f with
- | O => fun T v P => P v
- | S n' => fun T v P => let '(v, x) := v in app_on' A n' _ v (fun v => P (v, x))
- end.
- Definition app_on {A n} : forall {T} (f : tuple A n) (P : forall x : tuple A n, T x), T f
- := match n return forall T (f : tuple A n) (P : forall x : tuple A n, T x), T f with
- | O => fun T v P => P v
- | S n' => @app_on' A n'
- end.
- Lemma app_on'_correct {A n T} f (P : forall x : tuple' A n, T x) : app_on' A n T f P = P f.
- Proof.
- induction n; simpl in *; destruct_head' prod; [ reflexivity | exact (IHn _ _ (fun t => P (t, _))) ].
- Qed.
- Lemma app_on_correct {A n T} f (P : forall x : tuple A n, T x) : app_on f P = P f.
- Proof. destruct n; [ reflexivity | apply app_on'_correct ]. Qed.
-
- Fixpoint app_on_h' A F n : forall ts T (f : @hlist' A n F ts) (P : forall x : @hlist' A n F ts, T x), T f
- := match n return forall ts T (f : @hlist' A n F ts) (P : forall x : @hlist' A n F ts, T x), T f with
- | O => fun ts T v P => P v
- | S n' => fun ts T v P => let '(v, x) := v in app_on_h' A F n' _ _ v (fun v => P (v, x))
- end.
- Definition app_on_h {A F n} : forall ts T (f : @hlist A n F ts) (P : forall x : @hlist A n F ts, T x), T f
- := match n return forall ts T (f : @hlist A n F ts) (P : forall x : @hlist A n F ts, T x), T f with
- | O => fun ts T v P => P v
- | S n' => @app_on_h' A F n'
- end.
- Lemma app_on_h'_correct {A F n ts T} f P : @app_on_h' A F n ts T f P = P f.
- Proof.
- induction n; simpl in *; destruct_head' prod; [ reflexivity | exact (IHn _ _ _ (fun h => P (h, f))) ].
- Qed.
- Lemma app_on_h_correct {A} F {n} ts {T} f P : @app_on_h A F n ts T f P = P f.
- Proof. destruct n; [ reflexivity | apply app_on_h'_correct ]. Qed.
-
- Definition app_wire_digitsW_dep {A T} (P : forall x : tuple A (length wire_widths), T x)
- : forall (f : tuple A (length wire_widths)), T f
- := Eval compute in fun f => @app_on A (length wire_widths) T f P.
- Definition app_wire_digitsW {A T} (f : tuple A (length wire_widths)) (P : tuple A (length wire_widths) -> T)
- := Eval compute in @app_wire_digitsW_dep A (fun _ => T) P f.
- Definition app_fe41417_32W_dep {A T} (P : forall x : tuple A length_fe41417_32, T x)
- : forall (f : tuple A length_fe41417_32), T f
- := Eval compute in fun f => @app_on A length_fe41417_32 T f P.
- Definition app_fe41417_32W {A T} (f : tuple A length_fe41417_32) (P : tuple A length_fe41417_32 -> T)
- := Eval compute in @app_fe41417_32W_dep A (fun _ => T) P f.
- Definition app_fe41417_32_dep {T} (P : forall x : fe41417_32, T x)
- : forall f : fe41417_32, T f
- := Eval compute in fun f => @app_on_h _ (fun e => word_of e) length_fe41417_32 bounds_exp T f P.
- Definition app_fe41417_32 {T} (f : fe41417_32) (P : hlist (fun e => word_of e) bounds_exp -> T)
- := Eval compute in @app_fe41417_32_dep (fun _ => T) P f.
- Definition app_wire_digits_dep {T} (P : forall x : wire_digits, T x)
- : forall f : wire_digits, T f
- := Eval compute in fun f => @app_on_h _ (fun e => unbounded_word e) (length wire_widths) wire_digit_bounds_exp T f P.
- Definition app_wire_digits {T} (f : wire_digits) (P : hlist (fun e => unbounded_word e) wire_digit_bounds_exp -> T)
- := Eval compute in @app_wire_digits_dep (fun _ => T) P f.
-
- Definition app_wire_digitsW_dep_correct {A T} f P : @app_wire_digitsW_dep A T P f = P f
- := app_on_correct f P.
- Definition app_wire_digitsW_correct {A T} f P : @app_wire_digitsW A T f P = P f
- := @app_wire_digitsW_dep_correct A (fun _ => T) f P.
- Definition app_fe41417_32W_dep_correct {A T} f P : @app_fe41417_32W_dep A T P f = P f
- := app_on_correct f P.
- Definition app_fe41417_32W_correct {A T} f P : @app_fe41417_32W A T f P = P f
- := @app_fe41417_32W_dep_correct A (fun _ => T) f P.
- Definition app_fe41417_32_dep_correct {T} f P : @app_fe41417_32_dep T P f = P f
- := app_on_h_correct (fun e => word_of e) bounds_exp f P.
- Definition app_fe41417_32_correct {T} f P : @app_fe41417_32 T f P = P f
- := @app_fe41417_32_dep_correct (fun _ => T) f P.
- Definition app_wire_digits_dep_correct {T} f P : @app_wire_digits_dep T P f = P f
- := app_on_h_correct (fun e => unbounded_word e) wire_digit_bounds_exp f P.
- Definition app_wire_digits_correct {T} f P : @app_wire_digits T f P = P f
- := @app_wire_digits_dep_correct (fun _ => T) f P.
-
- Definition appify2 {T} (op : fe41417_32W -> fe41417_32W -> T) (f g : fe41417_32W) :=
- app_fe41417_32W f (fun f0 => (app_fe41417_32W g (fun g0 => op f0 g0))).
-
- Lemma appify2_correct : forall {T} op f g, @appify2 T op f g = op f g.
- Proof.
- intros. cbv [appify2].
- etransitivity; apply app_fe41417_32W_correct.
- Qed.
-
- Definition appify9 {T} (op : fe41417_32W -> fe41417_32W -> fe41417_32W -> fe41417_32W -> fe41417_32W -> fe41417_32W -> fe41417_32W -> fe41417_32W -> fe41417_32W -> T) (x0 x1 x2 x3 x4 x5 x6 x7 x8 : fe41417_32W) :=
- app_fe41417_32W x0 (fun x0' =>
- app_fe41417_32W x1 (fun x1' =>
- app_fe41417_32W x2 (fun x2' =>
- app_fe41417_32W x3 (fun x3' =>
- app_fe41417_32W x4 (fun x4' =>
- app_fe41417_32W x5 (fun x5' =>
- app_fe41417_32W x6 (fun x6' =>
- app_fe41417_32W x7 (fun x7' =>
- app_fe41417_32W x8 (fun x8' =>
- op x0' x1' x2' x3' x4' x5' x6' x7' x8'))))))))).
-
- Lemma appify9_correct : forall {T} op x0 x1 x2 x3 x4 x5 x6 x7 x8,
- @appify9 T op x0 x1 x2 x3 x4 x5 x6 x7 x8 = op x0 x1 x2 x3 x4 x5 x6 x7 x8.
- Proof.
- intros. cbv [appify9].
- repeat (etransitivity; [ apply app_fe41417_32W_correct | ]); reflexivity.
- Qed.
-End generic_destructuring.
-
-Definition eta_fe41417_32W_sig (x : fe41417_32W) : { v : fe41417_32W | v = x }.
-Proof.
- eexists; symmetry.
- repeat (etransitivity; [ apply surjective_pairing | apply f_equal2 ]); reflexivity.
-Defined.
-Definition eta_fe41417_32W (x : fe41417_32W) : fe41417_32W
- := Eval cbv [proj1_sig eta_fe41417_32W_sig] in proj1_sig (eta_fe41417_32W_sig x).
-Definition eta_wire_digitsW_sig (x : wire_digitsW) : { v : wire_digitsW | v = x }.
-Proof.
- eexists; symmetry.
- repeat (etransitivity; [ apply surjective_pairing | apply f_equal2 ]); reflexivity.
-Defined.
-Definition eta_wire_digitsW (x : wire_digitsW) : wire_digitsW
- := Eval cbv [proj1_sig eta_wire_digitsW_sig] in proj1_sig (eta_wire_digitsW_sig x).
-
-Local Transparent word64.
-Lemma word64ize_id x : word64ize x = x.
-Proof. apply NToWord_wordToN. Qed.
-Local Opaque word64.
-
-Lemma word64eqb_Zeqb x y : (word64ToZ x =? word64ToZ y)%Z = w64eqb x y.
-Proof. apply wordeqb_Zeqb. Qed.
-
-Local Arguments Z.pow_pos !_ !_ / .
-Lemma word64ToZ_ZToWord64 x : 0 <= x < 2^Z.of_nat bit_width -> word64ToZ (ZToWord64 x) = x.
-Proof.
- intros; unfold word64ToZ, ZToWord64.
- rewrite wordToN_NToWord_idempotent, Z2N.id
- by (omega || apply N2Z.inj_lt; rewrite <- ?(N_nat_Z (Npow2 _)), ?Npow2_nat, ?Zpow_pow2, ?N2Z.id, ?Z2N.id, ?Z2Nat.id by omega; omega).
- reflexivity.
-Qed.
-Lemma ZToWord64_word64ToZ x : ZToWord64 (word64ToZ x) = x.
-Proof.
- intros; unfold word64ToZ, ZToWord64.
- rewrite N2Z.id, NToWord_wordToN; reflexivity.
-Qed.
-
-(* BEGIN precomputation. *)
-
-Definition proj_word {lower upper} (v : bounded_word lower upper) := Eval cbv [proj1_sig] in proj1_sig v.
-Definition word_bounded {lower upper} (v : bounded_word lower upper)
- : andb (lower <=? proj_word v)%Z (proj_word v <=? upper)%Z = true
- := project_is_boundedT (proj2_sig v).
-Definition Build_bounded_word' {lower upper} proj_word word_bounded : bounded_word lower upper
- := exist _ proj_word (Build_is_boundedT word_bounded).
-Arguments proj_word {_ _} _.
-Arguments word_bounded {_ _} _.
-Arguments Build_bounded_word' {_ _} _ _.
-Definition Build_bounded_word {lower upper} (proj_word : word64) (word_bounded : andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z = true)
- : bounded_word lower upper
- := Build_bounded_word'
- proj_word
- (match andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z as b return b = true -> b = true with
- | true => fun _ => eq_refl
- | false => fun x => x
- end word_bounded).
-Lemma word_to_unbounded_helper {x e : nat} : (x < pow2 e)%nat -> (Z.of_nat e <= Z.of_nat bit_width)%Z -> ((0 <=? word64ToZ (ZToWord64 (Z.of_nat x))) && (word64ToZ (ZToWord64 (Z.of_nat x)) <=? 2 ^ (Z.of_nat e) - 1))%bool = true.
-Proof.
- rewrite pow2_id; intro H; apply Nat2Z.inj_lt in H; revert H.
- rewrite Z.pow_Zpow; simpl Z.of_nat.
- intros H H'.
- assert (2^Z.of_nat e <= 2^Z.of_nat bit_width) by auto with zarith.
- rewrite ?word64ToZ_ZToWord64 by omega.
- match goal with
- | [ |- context[andb ?x ?y] ]
- => destruct x eqn:?, y eqn:?; try reflexivity; Z.ltb_to_lt
- end;
- intros; omega.
-Qed.
-Definition word_to_unbounded_word {sz} (x : word sz) : (Z.of_nat sz <=? Z.of_nat bit_width)%Z = true -> unbounded_word (Z.of_nat sz).
-Proof.
- refine (fun pf => Build_bounded_word (Z.of_N (wordToN x)) _).
- abstract (rewrite wordToN_nat, nat_N_Z; Z.ltb_to_lt; apply (word_to_unbounded_helper (wordToNat_bound x)); simpl; omega).
-Defined.
-Definition word32_to_unbounded_word (x : word 32) : unbounded_word 32.
-Proof. apply (word_to_unbounded_word x); reflexivity. Defined.
-Definition word31_to_unbounded_word (x : word 31) : unbounded_word 31.
-Proof. apply (word_to_unbounded_word x); reflexivity. Defined.
-
-Local Opaque word64.
-Declare Reduction app_tuple_map := cbv [app_wire_digitsW app_fe41417_32W app_fe41417_32 HList.mapt HList.mapt' Tuple.map on_tuple List.map List.app length_fe41417_32 List.length wire_widths Tuple.from_list Tuple.from_list' Tuple.to_list Tuple.to_list' fst snd].
-Definition fe41417_32WToZ (x : fe41417_32W) : SpecificGen.GF41417_32.fe41417_32
- := Eval app_tuple_map in
- app_fe41417_32W x (Tuple.map (fun v : word64 => v : Z)).
-Definition fe41417_32ZToW (x : SpecificGen.GF41417_32.fe41417_32) : fe41417_32W
- := Eval app_tuple_map in
- app_fe41417_32W x (Tuple.map (fun v : Z => v : word64)).
-Definition wire_digitsWToZ (x : wire_digitsW) : SpecificGen.GF41417_32.wire_digits
- := Eval app_tuple_map in
- app_wire_digitsW x (Tuple.map (fun v : word64 => v : Z)).
-Definition wire_digitsZToW (x : SpecificGen.GF41417_32.wire_digits) : wire_digitsW
- := Eval app_tuple_map in
- app_wire_digitsW x (Tuple.map (fun v : Z => v : word64)).
-Definition fe41417_32W_word64ize (x : fe41417_32W) : fe41417_32W
- := Eval app_tuple_map in
- app_fe41417_32W x (Tuple.map word64ize).
-Definition wire_digitsW_word64ize (x : wire_digitsW) : wire_digitsW
- := Eval app_tuple_map in
- app_wire_digitsW x (Tuple.map word64ize).
-
-(** TODO: Turn this into a lemma to speed up proofs *)
-Ltac unfold_is_bounded_in' H :=
- lazymatch type of H with
- | andb _ _ = true
- => apply andb_prop in H;
- let H1 := fresh in
- let H2 := fresh in
- destruct H as [H1 H2];
- unfold_is_bounded_in' H1;
- unfold_is_bounded_in' H2
- | _ => idtac
- end.
-Ltac preunfold_is_bounded_in H :=
- unfold is_bounded, wire_digits_is_bounded, is_bounded_gen, fe41417_32WToZ, wire_digitsWToZ in H;
- cbv [to_list length bounds wire_digit_bounds from_list from_list' map2 on_tuple2 to_list' ListUtil.map2 Tuple.map List.map fold_right List.rev List.app length_fe41417_32 List.length wire_widths HList.hlistP HList.hlistP' Tuple.on_tuple] in H.
-Ltac unfold_is_bounded_in H :=
- preunfold_is_bounded_in H;
- unfold_is_bounded_in' H.
-
-Ltac preunfold_is_bounded :=
- unfold is_bounded, wire_digits_is_bounded, is_bounded_gen, fe41417_32WToZ, wire_digitsWToZ;
- cbv [to_list length bounds wire_digit_bounds from_list from_list' map2 on_tuple2 to_list' ListUtil.map2 Tuple.map List.map fold_right List.rev List.app length_fe41417_32 List.length wire_widths HList.hlistP HList.hlistP' Tuple.on_tuple].
-
-Ltac unfold_is_bounded :=
- preunfold_is_bounded;
- repeat match goal with
- | [ |- andb _ _ = true ] => apply andb_true_intro
- | [ |- and _ _ ] => split
- end.
-
-Local Transparent bit_width.
-Definition Pow2_64 := Eval compute in 2^Z.of_nat bit_width.
-Definition unfold_Pow2_64 : 2^Z.of_nat bit_width = Pow2_64 := eq_refl.
-Local Opaque bit_width.
-
-Local Ltac prove_lt_bit_width :=
- rewrite unfold_Pow2_64; cbv [Pow2_64]; omega.
-
-Lemma fe41417_32ZToW_WToZ (x : fe41417_32W) : fe41417_32ZToW (fe41417_32WToZ x) = x.
-Proof.
- hnf in x; destruct_head' prod; cbv [fe41417_32WToZ fe41417_32ZToW].
- rewrite !ZToWord64_word64ToZ; reflexivity.
-Qed.
-
-Lemma fe41417_32WToZ_ZToW x : is_bounded x = true -> fe41417_32WToZ (fe41417_32ZToW x) = x.
-Proof.
- hnf in x; destruct_head' prod; cbv [fe41417_32WToZ fe41417_32ZToW].
- intro H.
- unfold_is_bounded_in H; destruct_head' and.
- Z.ltb_to_lt.
- rewrite !word64ToZ_ZToWord64 by prove_lt_bit_width.
- reflexivity.
-Qed.
-
-Lemma fe41417_32W_word64ize_id x : fe41417_32W_word64ize x = x.
-Proof.
- hnf in x; destruct_head' prod.
- cbv [fe41417_32W_word64ize];
- repeat apply f_equal2; apply word64ize_id.
-Qed.
-Lemma wire_digitsW_word64ize_id x : wire_digitsW_word64ize x = x.
-Proof.
- hnf in x; destruct_head' prod.
- cbv [wire_digitsW_word64ize];
- repeat apply f_equal2; apply word64ize_id.
-Qed.
-
-Definition uncurry_unop_fe41417_32W {T} (op : fe41417_32W -> T)
- := Eval cbv (*-[word64]*) in Tuple.uncurry (n:=length_fe41417_32) op.
-Definition curry_unop_fe41417_32W {T} op : fe41417_32W -> T
- := Eval cbv (*-[word64]*) in fun f => app_fe41417_32W f (Tuple.curry (n:=length_fe41417_32) op).
-Definition uncurry_binop_fe41417_32W {T} (op : fe41417_32W -> fe41417_32W -> T)
- := Eval cbv (*-[word64]*) in uncurry_unop_fe41417_32W (fun f => uncurry_unop_fe41417_32W (op f)).
-Definition curry_binop_fe41417_32W {T} op : fe41417_32W -> fe41417_32W -> T
- := Eval cbv (*-[word64]*) in appify2 (fun f => curry_unop_fe41417_32W (curry_unop_fe41417_32W op f)).
-
-Definition uncurry_unop_wire_digitsW {T} (op : wire_digitsW -> T)
- := Eval cbv (*-[word64]*) in Tuple.uncurry (n:=length wire_widths) op.
-Definition curry_unop_wire_digitsW {T} op : wire_digitsW -> T
- := Eval cbv (*-[word64]*) in fun f => app_wire_digitsW f (Tuple.curry (n:=length wire_widths) op).
-
-Definition uncurry_9op_fe41417_32W {T} (op : fe41417_32W -> fe41417_32W -> fe41417_32W -> fe41417_32W -> fe41417_32W -> fe41417_32W -> fe41417_32W -> fe41417_32W -> fe41417_32W -> T)
- := Eval cbv (*-[word64]*) in
- uncurry_unop_fe41417_32W (fun x0 =>
- uncurry_unop_fe41417_32W (fun x1 =>
- uncurry_unop_fe41417_32W (fun x2 =>
- uncurry_unop_fe41417_32W (fun x3 =>
- uncurry_unop_fe41417_32W (fun x4 =>
- uncurry_unop_fe41417_32W (fun x5 =>
- uncurry_unop_fe41417_32W (fun x6 =>
- uncurry_unop_fe41417_32W (fun x7 =>
- uncurry_unop_fe41417_32W (fun x8 =>
- op x0 x1 x2 x3 x4 x5 x6 x7 x8))))))))).
-Definition curry_9op_fe41417_32W {T} op : fe41417_32W -> fe41417_32W -> fe41417_32W -> fe41417_32W -> fe41417_32W -> fe41417_32W -> fe41417_32W -> fe41417_32W -> fe41417_32W -> T
- := Eval cbv (*-[word64]*) in
- appify9 (fun x0 x1 x2 x3 x4 x5 x6 x7 x8
- => curry_unop_fe41417_32W (curry_unop_fe41417_32W (curry_unop_fe41417_32W (curry_unop_fe41417_32W (curry_unop_fe41417_32W (curry_unop_fe41417_32W (curry_unop_fe41417_32W (curry_unop_fe41417_32W (curry_unop_fe41417_32W op x0) x1) x2) x3) x4) x5) x6) x7) x8).
-
-Definition proj1_fe41417_32W (x : fe41417_32) : fe41417_32W
- := Eval app_tuple_map in
- app_fe41417_32 x (HList.mapt (fun _ => (@proj_word _ _))).
-Coercion proj1_fe41417_32 (x : fe41417_32) : SpecificGen.GF41417_32.fe41417_32
- := fe41417_32WToZ (proj1_fe41417_32W x).
-
-Lemma is_bounded_proj1_fe41417_32 (x : fe41417_32) : is_bounded (proj1_fe41417_32 x) = true.
-Proof.
- revert x; refine (app_fe41417_32_dep _); intro x.
- hnf in x; destruct_head' prod; destruct_head' bounded_word.
- cbv [is_bounded proj1_fe41417_32 proj1_fe41417_32W fe41417_32WToZ to_list length bounds from_list from_list' map2 on_tuple2 to_list' ListUtil.map2 List.map List.rev List.app proj_word length_fe41417_32 is_bounded_gen].
- apply fold_right_andb_true_iff_fold_right_and_True.
- cbv [fold_right List.map].
- cbv beta in *.
- repeat split; auto using project_is_boundedT.
-Qed.
-
-Definition proj1_wire_digitsW (x : wire_digits) : wire_digitsW
- := app_wire_digits x (HList.mapt (fun _ => proj_word)).
-Coercion proj1_wire_digits (x : wire_digits) : SpecificGen.GF41417_32.wire_digits
- := wire_digitsWToZ (proj1_wire_digitsW x).
-
-Lemma is_bounded_proj1_wire_digits (x : wire_digits) : wire_digits_is_bounded (proj1_wire_digits x) = true.
-Proof.
- revert x; refine (app_wire_digits_dep _); intro x.
- hnf in x; destruct_head' prod; destruct_head' bounded_word.
- cbv [wire_digits_is_bounded proj1_wire_digits proj1_wire_digitsW wire_digitsWToZ to_list length wire_digit_bounds from_list from_list' map2 on_tuple2 to_list' ListUtil.map2 List.map List.rev List.app proj_word is_bounded_gen wire_widths HList.mapt HList.mapt' app_wire_digits fst snd].
- apply fold_right_andb_true_iff_fold_right_and_True.
- cbv [fold_right List.map].
- cbv beta in *.
- repeat split; auto using project_is_boundedT.
-Qed.
-
-Local Ltac make_exist_W' x app_W_dep :=
- let H := fresh in
- revert x; refine (@app_W_dep _ _ _); intros x H;
- let x' := fresh in
- set (x' := x);
- cbv [tuple tuple' length_fe41417_32 List.length wire_widths] in x;
- destruct_head' prod;
- let rec do_refine v H :=
- first [ let v' := (eval cbv [snd fst] in (snd v)) in
- refine (_, Build_bounded_word v' _);
- [ do_refine (fst v) (proj2 H) | subst x'; abstract exact (proj1 H) ]
- | let v' := (eval cbv [snd fst] in v) in
- refine (Build_bounded_word v' _); subst x'; abstract exact (proj1 H) ] in
- let H' := constr:(proj1 (@fold_right_andb_true_iff_fold_right_and_True _) H) in
- let T := type of H' in
- let T := (eval cbv [id
- List.fold_right List.map List.length List.app ListUtil.map2 List.rev
- Tuple.to_list Tuple.to_list' Tuple.from_list Tuple.from_list' Tuple.map2 Tuple.on_tuple2
- fe41417_32 bounds fe41417_32WToZ length_fe41417_32
- wire_digits wire_digit_bounds wire_digitsWToZ wire_widths] in T) in
- let H' := constr:(H' : T) in
- let v := (eval unfold x' in x') in
- do_refine v H'.
-Local Ltac make_exist'' x exist_W ZToW :=
- let H := fresh in
- intro H; apply (exist_W (ZToW x));
- abstract (
- hnf in x; destruct_head' prod;
- let H' := fresh in
- pose proof H as H';
- unfold_is_bounded_in H;
- destruct_head' and; simpl in *;
- Z.ltb_to_lt;
- rewrite ?word64ToZ_ZToWord64 by prove_lt_bit_width;
- assumption
- ).
-Local Ltac make_exist' x app_W_dep exist'' exist_W ZToW :=
- let H := fresh in
- revert x; refine (@app_W_dep _ _ _); intros x H;
- let x' := fresh in
- set (x' := x) in *;
- cbv [tuple tuple' length_fe41417_32 List.length wire_widths] in x;
- destruct_head' prod;
- let rec do_refine v :=
- first [ let v' := (eval cbv [exist_W ZToW exist'' proj_word Build_bounded_word Build_bounded_word' snd fst] in (proj_word v)) in
- refine (Build_bounded_word v' _); subst x'; abstract exact (word_bounded v)
- | let v' := (eval cbv [exist_W ZToW exist'' proj_word Build_bounded_word Build_bounded_word' snd fst] in (proj_word (snd v))) in
- refine (_, Build_bounded_word v' _);
- [ do_refine (fst v) | subst x'; abstract exact (word_bounded (snd v)) ] ] in
- let v := (eval unfold x' in (exist'' x' H)) in
- do_refine v.
-
-Definition exist_fe41417_32W' (x : fe41417_32W) : is_bounded (fe41417_32WToZ x) = true -> fe41417_32.
-Proof. make_exist_W' x (@app_fe41417_32W_dep). Defined.
-Definition exist_fe41417_32W (x : fe41417_32W) : is_bounded (fe41417_32WToZ x) = true -> fe41417_32
- := Eval cbv [app_fe41417_32W_dep exist_fe41417_32W' fe41417_32ZToW] in exist_fe41417_32W' x.
-Definition exist_fe41417_32'' (x : SpecificGen.GF41417_32.fe41417_32) : is_bounded x = true -> fe41417_32.
-Proof. make_exist'' x exist_fe41417_32W fe41417_32ZToW. Defined.
-Definition exist_fe41417_32' (x : SpecificGen.GF41417_32.fe41417_32) : is_bounded x = true -> fe41417_32.
-Proof. make_exist' x (@app_fe41417_32W_dep) exist_fe41417_32'' exist_fe41417_32W fe41417_32ZToW. Defined.
-Definition exist_fe41417_32 (x : SpecificGen.GF41417_32.fe41417_32) : is_bounded x = true -> fe41417_32
- := Eval cbv [exist_fe41417_32' exist_fe41417_32W exist_fe41417_32' app_fe41417_32 app_fe41417_32W_dep] in
- exist_fe41417_32' x.
-
-Lemma proj1_fe41417_32_exist_fe41417_32W x pf : proj1_fe41417_32 (exist_fe41417_32W x pf) = fe41417_32WToZ x.
-Proof. now hnf in x; destruct_head' prod. Qed.
-Lemma proj1_fe41417_32W_exist_fe41417_32 x pf : proj1_fe41417_32W (exist_fe41417_32 x pf) = fe41417_32ZToW x.
-Proof. now hnf in x; destruct_head' prod. Qed.
-Lemma proj1_fe41417_32_exist_fe41417_32 x pf : proj1_fe41417_32 (exist_fe41417_32 x pf) = x.
-Proof.
- hnf in x; destruct_head' prod.
- cbv [proj1_fe41417_32 exist_fe41417_32 proj1_fe41417_32W fe41417_32WToZ proj_word Build_bounded_word Build_bounded_word'].
- unfold_is_bounded_in pf.
- destruct_head' and.
- Z.ltb_to_lt.
- rewrite ?word64ToZ_ZToWord64 by prove_lt_bit_width.
- reflexivity.
-Qed.
-
-Definition exist_wire_digitsW' (x : wire_digitsW)
- : wire_digits_is_bounded (wire_digitsWToZ x) = true -> wire_digits.
-Proof. make_exist_W' x (@app_wire_digitsW_dep). Defined.
-Definition exist_wire_digitsW (x : wire_digitsW)
- : wire_digits_is_bounded (wire_digitsWToZ x) = true -> wire_digits
- := Eval cbv [app_wire_digitsW_dep exist_wire_digitsW' wire_digitsZToW] in exist_wire_digitsW' x.
-Definition exist_wire_digits'' (x : SpecificGen.GF41417_32.wire_digits)
- : wire_digits_is_bounded x = true -> wire_digits.
-Proof. make_exist'' x exist_wire_digitsW wire_digitsZToW. Defined.
-Definition exist_wire_digits' (x : SpecificGen.GF41417_32.wire_digits)
- : wire_digits_is_bounded x = true -> wire_digits.
-Proof. make_exist' x (@app_wire_digitsW_dep) exist_wire_digits'' exist_wire_digitsW wire_digitsZToW. Defined.
-Definition exist_wire_digits (x : SpecificGen.GF41417_32.wire_digits)
- : wire_digits_is_bounded x = true -> wire_digits
- := Eval cbv [exist_wire_digits' exist_wire_digitsW exist_wire_digits' app_wire_digits app_wire_digitsW_dep] in
- exist_wire_digits' x.
-
-Lemma proj1_wire_digits_exist_wire_digitsW x pf : proj1_wire_digits (exist_wire_digitsW x pf) = wire_digitsWToZ x.
-Proof. now hnf in x; destruct_head' prod. Qed.
-Lemma proj1_wire_digitsW_exist_wire_digits x pf : proj1_wire_digitsW (exist_wire_digits x pf) = wire_digitsZToW x.
-Proof. now hnf in x; destruct_head' prod. Qed.
-Lemma proj1_wire_digits_exist_wire_digits x pf : proj1_wire_digits (exist_wire_digits x pf) = x.
-Proof.
- hnf in x; destruct_head' prod.
- cbv [proj1_wire_digits exist_wire_digits proj1_wire_digitsW wire_digitsWToZ proj_word Build_bounded_word Build_bounded_word' app_wire_digits HList.mapt HList.mapt' length wire_widths fst snd].
- unfold_is_bounded_in pf.
- destruct_head' and.
- Z.ltb_to_lt.
- rewrite ?word64ToZ_ZToWord64 by prove_lt_bit_width.
- reflexivity.
-Qed.
-
-Module opt.
- Definition word64ToZ := Eval vm_compute in word64ToZ.
- Definition word64ToN := Eval vm_compute in @wordToN bit_width.
- Definition NToWord64 := Eval vm_compute in NToWord64.
- Definition bit_width := Eval vm_compute in bit_width.
- Definition Zleb := Eval cbv [Z.leb] in Z.leb.
- Definition andb := Eval vm_compute in andb.
- Definition word64ize := Eval vm_compute in word64ize.
-End opt.
-
-Local Transparent bit_width.
-Local Ltac do_change lem :=
- match lem with
- | context L[andb (?x <=? ?y)%Z (?y <=? ?z)]
- => let x' := (eval vm_compute in x) in
- let z' := (eval vm_compute in z) in
- lazymatch y with
- | word64ToZ (word64ize ?v)
- => let y' := constr:(opt.word64ToZ (opt.word64ize v)) in
- let L' := context L[andb (opt.Zleb x' y') (opt.Zleb y' z')] in
- do_change L'
- end
- | _ => lem
- end.
-Definition fe41417_32_word64ize (x : fe41417_32) : fe41417_32.
-Proof.
- set (x' := x).
- hnf in x; destruct_head' prod.
- let lem := constr:(exist_fe41417_32W (fe41417_32W_word64ize (proj1_fe41417_32W x'))) in
- let lem := (eval cbv [proj1_fe41417_32W x' fe41417_32W_word64ize proj_word exist_fe41417_32W Build_bounded_word' Build_bounded_word] in lem) in
- let lem := do_change lem in
- refine (lem _);
- change (is_bounded (fe41417_32WToZ (fe41417_32W_word64ize (proj1_fe41417_32W x'))) = true);
- abstract (rewrite fe41417_32W_word64ize_id; apply is_bounded_proj1_fe41417_32).
-Defined.
-Definition wire_digits_word64ize (x : wire_digits) : wire_digits.
-Proof.
- set (x' := x).
- hnf in x; destruct_head' prod.
- let lem := constr:(exist_wire_digitsW (wire_digitsW_word64ize (proj1_wire_digitsW x'))) in
- let lem := (eval cbv [proj1_wire_digitsW x' wire_digitsW_word64ize proj_word exist_wire_digitsW Build_bounded_word Build_bounded_word'] in lem) in
- let lem := do_change lem in
- let lem := (eval cbv [word64ize opt.word64ize andb Z.leb Z.compare CompOpp Pos.compare] in lem) in
- refine (lem _);
- change (wire_digits_is_bounded (wire_digitsWToZ (wire_digitsW_word64ize (proj1_wire_digitsW x'))) = true);
- abstract (rewrite wire_digitsW_word64ize_id; apply is_bounded_proj1_wire_digits).
-Defined.
-
-Lemma is_bounded_to_nth_default x (H : is_bounded x = true)
- : forall n : nat,
- (n < length limb_widths)%nat
- -> (0 <= nth_default 0 (Tuple.to_list length_fe41417_32 x) n <=
- snd (b_of (nth_default (-1) limb_widths n)))%Z.
-Proof.
- hnf in x; destruct_head' prod.
- unfold_is_bounded_in H; destruct_head' and.
- Z.ltb_to_lt.
- unfold nth_default; simpl.
- intros.
- repeat match goal with
- | [ |- context[nth_error _ ?x] ]
- => is_var x; destruct x; simpl
- end;
- omega.
-Qed.
-
-(* END precomputation *)
-
-(* Precompute constants *)
-
-Definition one' := Eval vm_compute in exist_fe41417_32 SpecificGen.GF41417_32.one_ eq_refl.
-Definition one := Eval cbv [one' fe41417_32_word64ize word64ize andb opt.word64ToZ opt.word64ize opt.Zleb Z.compare CompOpp Pos.compare Pos.compare_cont] in fe41417_32_word64ize one'.
-
-Definition zero' := Eval vm_compute in exist_fe41417_32 SpecificGen.GF41417_32.zero_ eq_refl.
-Definition zero := Eval cbv [zero' fe41417_32_word64ize word64ize andb opt.word64ToZ opt.word64ize opt.Zleb Z.compare CompOpp Pos.compare Pos.compare_cont] in fe41417_32_word64ize zero'.
-
-Lemma fold_chain_opt_gen {A B} (F : A -> B) is_bounded ls id' op' id op chain
- (Hid_bounded : is_bounded (F id') = true)
- (Hid : id = F id')
- (Hop_bounded : forall x y, is_bounded (F x) = true
- -> is_bounded (F y) = true
- -> is_bounded (op (F x) (F y)) = true)
- (Hop : forall x y, is_bounded (F x) = true
- -> is_bounded (F y) = true
- -> op (F x) (F y) = F (op' x y))
- (Hls_bounded : forall n, is_bounded (F (nth_default id' ls n)) = true)
- : F (fold_chain_opt id' op' chain ls)
- = fold_chain_opt id op chain (List.map F ls)
- /\ is_bounded (F (fold_chain_opt id' op' chain ls)) = true.
-Proof.
- rewrite !fold_chain_opt_correct.
- revert dependent ls; induction chain as [|x xs IHxs]; intros.
- { pose proof (Hls_bounded 0%nat).
- destruct ls; simpl; split; trivial; congruence. }
- { destruct x; simpl; unfold Let_In; simpl.
- rewrite (fun ls pf => proj1 (IHxs ls pf)) at 1; simpl.
- { do 2 f_equal.
- rewrite <- Hop, Hid by auto.
- rewrite !map_nth_default_always.
- split; try reflexivity.
- apply (IHxs (_::_)).
- intros [|?]; autorewrite with simpl_nth_default; auto.
- rewrite <- Hop; auto. }
- { intros [|?]; simpl;
- autorewrite with simpl_nth_default; auto.
- rewrite <- Hop; auto. } }
-Qed.
-
-Lemma encode_bounded x : is_bounded (encode x) = true.
-Proof.
- pose proof (bounded_encode x).
- generalize dependent (encode x).
- intro t; compute in t; intros.
- destruct_head' prod.
- unfold Pow2Base.bounded in H.
- cbv [nth_default Tuple.to_list Tuple.to_list' List.length limb_widths params41417_32] in H.
- repeat match type of H with
- | context[nth_error (cons _ _) _]
- => let H' := fresh in
- pose proof (H O) as H'; specialize (fun i => H (S i)); simpl @nth_error in H, H';
- cbv beta iota in H'
- end.
- clear H.
- simpl in *.
- cbv [Z.pow_pos Z.mul Pos.mul Pos.iter nth_default nth_error value] in *.
- unfold is_bounded.
- apply fold_right_andb_true_iff_fold_right_and_True.
- cbv [is_bounded proj1_fe41417_32 to_list length bounds from_list from_list' map2 on_tuple2 to_list' ListUtil.map2 List.map List.rev List.app proj_word fold_right length_fe41417_32].
- repeat split; rewrite !Bool.andb_true_iff, !Z.leb_le; omega.
-Qed.
-
-Definition encode (x : F modulus) : fe41417_32
- := exist_fe41417_32 (encode x) (encode_bounded x).
-
-Definition decode (x : fe41417_32) : F modulus
- := ModularBaseSystem.decode (proj1_fe41417_32 x).
-
-Lemma proj1_fe41417_32_encode x
- : proj1_fe41417_32 (encode x) = ModularBaseSystem.encode x.
-Proof.
- cbv [encode].
- generalize (encode_bounded x); generalize (ModularBaseSystem.encode x).
- intros y pf; intros; hnf in y; destruct_head_hnf' prod.
- cbv [proj1_fe41417_32 exist_fe41417_32 proj1_fe41417_32W Build_bounded_word Build_bounded_word' fe41417_32WToZ proj_word].
- unfold_is_bounded_in pf.
- destruct_head' and.
- Z.ltb_to_lt.
- rewrite ?word64ToZ_ZToWord64 by prove_lt_bit_width.
- reflexivity.
-Qed.
-
-Lemma decode_exist_fe41417_32 x pf
- : decode (exist_fe41417_32 x pf) = ModularBaseSystem.decode x.
-Proof.
- hnf in x; destruct_head' prod.
- cbv [decode proj1_fe41417_32 exist_fe41417_32 proj1_fe41417_32W Build_bounded_word Build_bounded_word' fe41417_32WToZ proj_word].
- unfold_is_bounded_in pf.
- destruct_head' and.
- Z.ltb_to_lt.
- rewrite ?word64ToZ_ZToWord64 by prove_lt_bit_width.
- reflexivity.
-Qed.
-
-Definition div (f g : fe41417_32) : fe41417_32
- := exist_fe41417_32 (div (proj1_fe41417_32 f) (proj1_fe41417_32 g)) (encode_bounded _).
-
-Definition eq (f g : fe41417_32) : Prop := eq (proj1_fe41417_32 f) (proj1_fe41417_32 g).
-
-
-Notation in_op_correct_and_bounded k irop op
- := (((Tuple.map (n:=k) fe41417_32WToZ irop = op)
- /\ HList.hlistP (fun v => is_bounded v = true) (Tuple.map (n:=k) fe41417_32WToZ irop))%type)
- (only parsing).
-
-(*Fixpoint inm_op_correct_and_bounded' (count_in count_out : nat)
- : forall (irop : Tower.tower_nd fe41417_32W (Tuple.tuple fe41417_32W count_out) count_in)
- (op : Tower.tower_nd GF41417_32.fe41417_32 (Tuple.tuple GF41417_32.fe41417_32 count_out) count_in)
- (cont : Prop -> Prop),
- Prop
- := match count_in return
- forall (irop : Tower.tower_nd fe41417_32W (Tuple.tuple fe41417_32W count_out) count_in)
- (op : Tower.tower_nd GF41417_32.fe41417_32 (Tuple.tuple GF41417_32.fe41417_32 count_out) count_in)
- (cont : Prop -> Prop),
- Prop
- with
- | O => fun irop op cont => cont (in_op_correct_and_bounded count_out irop op)
- | S n => fun irop op cont
- => forall x : fe41417_32W,
- @inm_op_correct_and_bounded'
- n count_out (irop x) (op (fe41417_32WToZ x))
- (fun P => cont (is_bounded (fe41417_32WToZ x) = true -> P))
- end.
-Definition inm_op_correct_and_bounded count_in count_out irop op
- := Eval cbv [inm_op_correct_and_bounded' Tower.tower_nd Tuple.tuple Tuple.tuple' HList.hlistP HList.hlistP'] in
- inm_op_correct_and_bounded' count_in count_out irop op (fun P => P).
-Fixpoint inm_op_correct_and_bounded_prefix' (count_in count_out : nat)
- : forall (irop : Tower.tower_nd fe41417_32W (Tuple.tuple fe41417_32W count_out) count_in)
- (op : Tower.tower_nd GF41417_32.fe41417_32 (Tuple.tuple GF41417_32.fe41417_32 count_out) count_in),
- Prop
- := match count_in return
- forall (irop : Tower.tower_nd fe41417_32W (Tuple.tuple fe41417_32W count_out) count_in)
- (op : Tower.tower_nd GF41417_32.fe41417_32 (Tuple.tuple GF41417_32.fe41417_32 count_out) count_in),
- Prop
- with
- | O => fun irop op => in_op_correct_and_bounded count_out irop op
- | S n => fun irop op
- => forall x : fe41417_32W,
- is_bounded (fe41417_32WToZ x) = true
- -> @inm_op_correct_and_bounded_prefix'
- n count_out (irop x) (op (fe41417_32WToZ x))
- end.
-Definition inm_op_correct_and_bounded_prefix count_in count_out irop op
- := inm_op_correct_and_bounded_prefix' count_in count_out irop op.
-
-Lemma inm_op_correct_and_bounded_iff_prefix' count_in count_out irop op
- (cont : Prop -> Prop)
- (cont_forall : forall T (P : T -> Prop), cont (forall x : T, P x) <-> forall x : T, cont (P x))
- : inm_op_correct_and_bounded' count_in count_out irop op cont <-> cont (inm_op_correct_and_bounded_prefix' count_in count_out irop op).
-Proof.
- revert dependent cont; induction count_in as [|count_in IHcount_in]; intros.
- { reflexivity. }
- { simpl.
- rewrite cont_forall.
- split; intros H' x; specialize (H' x);
- specialize (IHcount_in (irop x) (op (fe41417_32WToZ x)) (fun P => cont (is_bounded (fe41417_32WToZ x) = true -> P)));
- cbv beta in *;
- [ erewrite <- IHcount_in; [ assumption | .. ]
- | erewrite -> IHcount_in; [ assumption | .. ] ];
- clear IHcount_in.
- { intros; repeat setoid_rewrite cont_forall; split; eauto. }
- { intros; repeat setoid_rewrite cont_forall; split; eauto. } }
-Qed.
-
-Lemma inm_op_correct_and_bounded_iff_prefix count_in count_out irop op
- : inm_op_correct_and_bounded count_in count_out irop op <-> inm_op_correct_and_bounded_prefix count_in count_out irop op.
-Proof.
- apply (inm_op_correct_and_bounded_iff_prefix' count_in count_out irop op (fun P => P)).
- reflexivity.
-Qed.
-
-Definition inm_op_correct_and_bounded1 count_in irop op
- := Eval cbv [inm_op_correct_and_bounded Tuple.map Tuple.to_list Tuple.to_list' Tuple.from_list Tuple.from_list' Tuple.on_tuple List.map] in
- inm_op_correct_and_bounded count_in 1 irop op.*)
-Notation inm_op_correct_and_bounded n m irop op
- := ((forall x,
- HList.hlistP (fun v => is_bounded v = true) (Tuple.map (n:=n%nat%type) fe41417_32WToZ x)
- -> in_op_correct_and_bounded m (irop x) (op (Tuple.map (n:=n) fe41417_32WToZ x))))
- (only parsing).
-Notation ibinop_correct_and_bounded irop op := (inm_op_correct_and_bounded 2 1 irop op) (only parsing).
-Notation iunop_correct_and_bounded irop op := (inm_op_correct_and_bounded 1 1 irop op) (only parsing).
-Notation iunop_FEToZ_correct irop op
- := (forall x,
- is_bounded (fe41417_32WToZ x) = true
- -> word64ToZ (irop x) = op (fe41417_32WToZ x)) (only parsing).
-Notation iunop_FEToWire_correct_and_bounded irop op
- := (forall x,
- is_bounded (fe41417_32WToZ x) = true
- -> wire_digitsWToZ (irop x) = op (fe41417_32WToZ x)
- /\ wire_digits_is_bounded (wire_digitsWToZ (irop x)) = true) (only parsing).
-Notation iunop_WireToFE_correct_and_bounded irop op
- := (forall x,
- wire_digits_is_bounded (wire_digitsWToZ x) = true
- -> fe41417_32WToZ (irop x) = op (wire_digitsWToZ x)
- /\ is_bounded (fe41417_32WToZ (irop x)) = true) (only parsing).
-Notation i9top_correct_and_bounded k irop op := (inm_op_correct_and_bounded 9 k irop op) (only parsing).
-
-Notation prefreeze := GF41417_32.prefreeze.
diff --git a/src/SpecificGen/GF41417_32BoundedExtendedAddCoordinates.v b/src/SpecificGen/GF41417_32BoundedExtendedAddCoordinates.v
deleted file mode 100644
index 94bc097cf..000000000
--- a/src/SpecificGen/GF41417_32BoundedExtendedAddCoordinates.v
+++ /dev/null
@@ -1,68 +0,0 @@
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.SpecificGen.GF41417_32Bounded.
-Require Import Crypto.SpecificGen.GF41417_32ExtendedAddCoordinates.
-Require Import Crypto.SpecificGen.GF41417_32BoundedAddCoordinates.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-(*
-Lemma fieldwise_eq_extended_add_coordinates_full' twice_d P10 P11 P12 P13 P20 P21 P22 P23
- : Tuple.fieldwise
- (n:=4) GF41417_32BoundedCommon.eq
- (@GF41417_32BoundedAddCoordinates.add_coordinates
- twice_d P10 P11 P12 P13 P20 P21 P22 P23)
- (@ExtendedCoordinates.Extended.add_coordinates
- GF41417_32BoundedCommon.fe41417_32
- GF41417_32Bounded.add GF41417_32Bounded.sub GF41417_32Bounded.mul twice_d
- (P10, P11, P12, P13) (P20, P21, P22, P23)).
-Proof.
- unfold GF41417_32BoundedCommon.eq.
- apply -> (fieldwise_map_iff (n:=4) eq GF41417_32BoundedCommon.proj1_fe41417_32 GF41417_32BoundedCommon.proj1_fe41417_32).
- rewrite add_coordinates_correct.
- cbv [AddCoordinates.add_coordinates].
- setoid_rewrite <- fieldwise_eq_edwards_extended_add_coordinates_carry_nocarry.
- unfold edwards_extended_carry_add_coordinates.
- match goal with |- ?R ?x ?y => rewrite <- (Tuple.map_id (n:=4) x) end.
- apply <- (fieldwise_map_iff (n:=4) eq (fun x => x) GF41417_32BoundedCommon.proj1_fe41417_32).
- apply ExtendedCoordinates.Extended.add_coordinates_respectful_hetero;
- intros;
- repeat match goal with
- | [ |- context[add _ _] ]
- => rewrite add_correct
- | [ |- context[sub _ _] ]
- => rewrite sub_correct
- | [ |- context[mul _ _] ]
- => rewrite mul_correct
- | _ => progress unfold Tuple.fieldwise, Tuple.fieldwise', fst, snd, eq in *
- | [ |- and _ _ ] => split
- | [ |- ?x = ?x ] => reflexivity
- | _ => progress rewrite_strat topdown hints edwards_extended_add_coordinates_correct
- | _ => congruence
- end.
-Qed.
-
-Definition add_coordinates' twice_d P1 P2
- := let '(P10, P11, P12, P13) := P1 in
- let '(P20, P21, P22, P23) := P2 in
- @GF41417_32BoundedAddCoordinates.add_coordinates
- twice_d P10 P11 P12 P13 P20 P21 P22 P23.
-
-Definition add_coordinates twice_d P1 P2
- := Eval cbv beta iota delta [GF41417_32BoundedAddCoordinates.add_coordinates HList.mapt HList.mapt'] in
- let '(P10, P11, P12, P13) := P1 in
- let '(P20, P21, P22, P23) := P2 in
- @GF41417_32BoundedAddCoordinates.add_coordinates
- twice_d P10 P11 P12 P13 P20 P21 P22 P23.
-
-Lemma add_coordinates_correct_full twice_d P1 P2
- : Tuple.fieldwise
- GF41417_32BoundedCommon.eq
- (add_coordinates twice_d P1 P2)
- (@ExtendedCoordinates.Extended.add_coordinates
- GF41417_32BoundedCommon.fe41417_32
- GF41417_32Bounded.add GF41417_32Bounded.sub GF41417_32Bounded.mul twice_d P1 P2).
-Proof.
- destruct_head' prod.
- rewrite <- fieldwise_eq_extended_add_coordinates_full'; reflexivity.
-Qed.
-*)
diff --git a/src/SpecificGen/GF41417_32ExtendedAddCoordinates.v b/src/SpecificGen/GF41417_32ExtendedAddCoordinates.v
deleted file mode 100644
index dab7f93e0..000000000
--- a/src/SpecificGen/GF41417_32ExtendedAddCoordinates.v
+++ /dev/null
@@ -1,81 +0,0 @@
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.Algebra.
-Require Import Crypto.Util.Relations.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Tactics.
-
-Require Import Crypto.SpecificGen.GF41417_32.
-Require Import Crypto.CompleteEdwardsCurve.ExtendedCoordinates.
-
-Definition edwards_extended_add_coordinates td P Q :=
- (@ExtendedCoordinates.Extended.add_coordinates _ add sub mul td P Q).
-Definition edwards_extended_carry_add_coordinates td P Q :=
- (@ExtendedCoordinates.Extended.add_coordinates _ carry_add carry_sub mul td P Q).
-
-Create HintDb edwards_extended_add_coordinates_correct discriminated.
-Local Existing Instance field41417_32.
-Hint Rewrite
- (Ring.homomorphism_mul(is_homomorphism:=homomorphism_F41417_32_decode))
- (Ring.homomorphism_add(H1 :=homomorphism_F41417_32_decode))
- (Ring.homomorphism_sub(H1 :=homomorphism_F41417_32_decode))
- : edwards_extended_add_coordinates_correct.
-Lemma edwards_extended_add_coordinates_correct td P Q :
- Tuple.map (n:=4) decode (edwards_extended_add_coordinates td P Q)
- = (@ExtendedCoordinates.Extended.add_coordinates _ F.add F.sub F.mul (decode td) (Tuple.map (n:=4) decode P) (Tuple.map (n:=4) decode Q)).
-Proof.
- change (edwards_extended_add_coordinates td P Q)
- with (@ExtendedCoordinates.Extended.add_coordinates _ add sub mul td P Q).
- destruct_head' prod.
- simpl.
- (*rewrite_strat topdown hints edwards_extended_add_coordinates_correct.*) (* loops on Coq 8.4 *)
- repeat (rewrite ?(Ring.homomorphism_mul(is_homomorphism:=homomorphism_F41417_32_decode)),
- ?(Ring.homomorphism_add(H1 :=homomorphism_F41417_32_decode)),
- ?(Ring.homomorphism_sub(H1 :=homomorphism_F41417_32_decode))).
- reflexivity.
-Qed.
-Local Existing Instance carry_field41417_32.
-Hint Rewrite
- (Ring.homomorphism_mul(is_homomorphism:=homomorphism_carry_F41417_32_decode))
- (Ring.homomorphism_add(H1 :=homomorphism_carry_F41417_32_decode))
- (Ring.homomorphism_sub(H1 :=homomorphism_carry_F41417_32_decode))
- : edwards_extended_add_coordinates_correct.
-Lemma edwards_extended_carry_add_coordinates_correct td P Q :
- Tuple.map (n:=4) decode (edwards_extended_carry_add_coordinates td P Q)
- = (@ExtendedCoordinates.Extended.add_coordinates _ F.add F.sub F.mul (decode td) (Tuple.map (n:=4) decode P) (Tuple.map (n:=4) decode Q)).
-Proof.
- change (edwards_extended_carry_add_coordinates td P Q)
- with (@ExtendedCoordinates.Extended.add_coordinates _ carry_add carry_sub mul td P Q).
- destruct_head' prod.
- simpl.
- (*rewrite_strat topdown hints edwards_extended_add_coordinates_correct.*) (* loops on Coq 8.4 *)
- (* This is an annoying replacement for rewrite_strat loopiness *)
- generalize (Ring.homomorphism_mul(is_homomorphism:=homomorphism_carry_F41417_32_decode)).
- generalize (Ring.homomorphism_add(H1 :=homomorphism_carry_F41417_32_decode)).
- generalize (Ring.homomorphism_sub(H1 :=homomorphism_carry_F41417_32_decode)).
- generalize mul; generalize carry_sub; generalize carry_add.
- intros carry_add' carry_sub' mul'.
- intros H0 H1 H2.
- repeat rewrite ?H2, ?H1, ?H0.
- reflexivity.
-Qed.
-
-Lemma fieldwise_eq_edwards_extended_add_coordinates_carry_nocarry td P Q :
- Tuple.fieldwise
- (n:=4) eq
- (edwards_extended_carry_add_coordinates td P Q)
- (edwards_extended_add_coordinates td P Q).
-Proof.
- pose proof (edwards_extended_carry_add_coordinates_correct td P Q) as H0.
- pose proof (edwards_extended_add_coordinates_correct td P Q) as H1.
- rewrite <- H0 in H1; clear H0.
- assert (Tuple.fieldwise
- (fun x y => x = y)
- (Tuple.map (n:=4) decode (edwards_extended_carry_add_coordinates td P Q))
- (Tuple.map (n:=4) decode (edwards_extended_add_coordinates td P Q)))
- by (rewrite H1; reflexivity).
- clear H1.
- destruct (edwards_extended_carry_add_coordinates td P Q), (edwards_extended_add_coordinates td P Q).
- destruct_head' prod; simpl; unfold eq; trivial.
-Qed.
diff --git a/src/SpecificGen/GF41417_32Reflective.v b/src/SpecificGen/GF41417_32Reflective.v
deleted file mode 100644
index 404111062..000000000
--- a/src/SpecificGen/GF41417_32Reflective.v
+++ /dev/null
@@ -1,118 +0,0 @@
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParams.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParamProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemOpt.
-Require Export Crypto.SpecificGen.GF41417_32.
-Require Import Crypto.SpecificGen.GF41417_32BoundedCommon.
-Require Import Crypto.Reflection.Reify.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.Map.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Crypto.Reflection.Z.Interpretations64.Relations.
-Require Import Crypto.Reflection.Z.Interpretations64.RelationsCombinations.
-Require Import Crypto.Reflection.Z.Reify.
-Require Import Crypto.Reflection.Z.Syntax.
-Require Import Crypto.SpecificGen.GF41417_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF41417_32Reflective.Reified.
-Require Import Bedrock.Word Crypto.Util.WordUtil.
-Require Import Coq.Lists.List Crypto.Util.ListUtil.
-Require Import Crypto.Tactics.VerdiTactics.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Notations.
-Require Import Crypto.Util.Bool.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Algebra.
-Import ListNotations.
-Require Import Coq.ZArith.ZArith Coq.ZArith.Zpower Coq.ZArith.ZArith Coq.ZArith.Znumtheory.
-Local Open Scope Z.
-
-Definition radd : ExprBinOp := Eval vm_compute in rcarry_addW.
-Definition rsub : ExprBinOp := Eval vm_compute in rcarry_subW.
-Definition rmul : ExprBinOp := Eval vm_compute in rmulW.
-Definition ropp : ExprUnOp := Eval vm_compute in rcarry_oppW.
-Definition rprefreeze : ExprUnOp := Eval vm_compute in rprefreezeW.
-Definition rge_modulus : ExprUnOpFEToZ := Eval vm_compute in rge_modulusW.
-Definition rpack : ExprUnOpFEToWire := Eval vm_compute in rpackW.
-Definition runpack : ExprUnOpWireToFE := Eval vm_compute in runpackW.
-
-Declare Reduction asm_interp
- := cbv beta iota delta
- [id
- interp_bexpr interp_uexpr interp_uexpr_FEToWire interp_uexpr_FEToZ interp_uexpr_WireToFE interp_9_4expr
- Eta.interp_flat_type_eta Eta.interp_flat_type_eta_gen
- radd rsub rmul ropp rprefreeze rge_modulus rpack runpack
- curry_binop_fe41417_32W curry_unop_fe41417_32W curry_unop_wire_digitsW curry_9op_fe41417_32W
- WordW.interp_op WordW.interp_base_type
- Z.interp_op Z.interp_base_type
- Z.Syntax.interp_op Z.Syntax.interp_base_type
- mapf_interp_flat_type WordW.interp_base_type word64ize
- Interp interp interp_flat_type interpf interpf_step interp_flat_type fst snd].
-Ltac asm_interp
- := cbv beta iota delta
- [id
- interp_bexpr interp_uexpr interp_uexpr_FEToWire interp_uexpr_FEToZ interp_uexpr_WireToFE interp_9_4expr
- Eta.interp_flat_type_eta Eta.interp_flat_type_eta_gen
- radd rsub rmul ropp rprefreeze rge_modulus rpack runpack
- curry_binop_fe41417_32W curry_unop_fe41417_32W curry_unop_wire_digitsW curry_9op_fe41417_32W
- WordW.interp_op WordW.interp_base_type
- Z.interp_op Z.interp_base_type
- Z.Syntax.interp_op Z.Syntax.interp_base_type
- mapf_interp_flat_type WordW.interp_base_type word64ize
- Interp interp interp_flat_type interpf interp_flat_type fst snd].
-
-
-Definition interp_radd : SpecificGen.GF41417_32BoundedCommon.fe41417_32W * SpecificGen.GF41417_32BoundedCommon.fe41417_32W -> SpecificGen.GF41417_32BoundedCommon.fe41417_32W
- := Eval asm_interp in interp_bexpr radd.
-(*Print interp_radd.*)
-Definition interp_radd_correct : interp_radd = interp_bexpr radd := eq_refl.
-Definition interp_rsub : SpecificGen.GF41417_32BoundedCommon.fe41417_32W * SpecificGen.GF41417_32BoundedCommon.fe41417_32W -> SpecificGen.GF41417_32BoundedCommon.fe41417_32W
- := Eval asm_interp in interp_bexpr rsub.
-(*Print interp_rsub.*)
-Definition interp_rsub_correct : interp_rsub = interp_bexpr rsub := eq_refl.
-Definition interp_rmul : SpecificGen.GF41417_32BoundedCommon.fe41417_32W * SpecificGen.GF41417_32BoundedCommon.fe41417_32W -> SpecificGen.GF41417_32BoundedCommon.fe41417_32W
- := Eval asm_interp in interp_bexpr rmul.
-(*Print interp_rmul.*)
-Definition interp_rmul_correct : interp_rmul = interp_bexpr rmul := eq_refl.
-Definition interp_ropp : SpecificGen.GF41417_32BoundedCommon.fe41417_32W -> SpecificGen.GF41417_32BoundedCommon.fe41417_32W
- := Eval asm_interp in interp_uexpr ropp.
-(*Print interp_ropp.*)
-Definition interp_ropp_correct : interp_ropp = interp_uexpr ropp := eq_refl.
-Definition interp_rprefreeze : SpecificGen.GF41417_32BoundedCommon.fe41417_32W -> SpecificGen.GF41417_32BoundedCommon.fe41417_32W
- := Eval asm_interp in interp_uexpr rprefreeze.
-(*Print interp_rprefreeze.*)
-Definition interp_rprefreeze_correct : interp_rprefreeze = interp_uexpr rprefreeze := eq_refl.
-
-Definition interp_rge_modulus : SpecificGen.GF41417_32BoundedCommon.fe41417_32W -> SpecificGen.GF41417_32BoundedCommon.word64
- := Eval asm_interp in interp_uexpr_FEToZ rge_modulus.
-Definition interp_rge_modulus_correct : interp_rge_modulus = interp_uexpr_FEToZ rge_modulus := eq_refl.
-
-Definition interp_rpack : SpecificGen.GF41417_32BoundedCommon.fe41417_32W -> SpecificGen.GF41417_32BoundedCommon.wire_digitsW
- := Eval asm_interp in interp_uexpr_FEToWire rpack.
-Definition interp_rpack_correct : interp_rpack = interp_uexpr_FEToWire rpack := eq_refl.
-
-Definition interp_runpack : SpecificGen.GF41417_32BoundedCommon.wire_digitsW -> SpecificGen.GF41417_32BoundedCommon.fe41417_32W
- := Eval asm_interp in interp_uexpr_WireToFE runpack.
-Definition interp_runpack_correct : interp_runpack = interp_uexpr_WireToFE runpack := eq_refl.
-
-Lemma radd_correct_and_bounded : binop_correct_and_bounded radd carry_add.
-Proof. exact rcarry_addW_correct_and_bounded. Qed.
-Lemma rsub_correct_and_bounded : binop_correct_and_bounded rsub carry_sub.
-Proof. exact rcarry_subW_correct_and_bounded. Qed.
-Lemma rmul_correct_and_bounded : binop_correct_and_bounded rmul mul.
-Proof. exact rmulW_correct_and_bounded. Qed.
-Lemma ropp_correct_and_bounded : unop_correct_and_bounded ropp carry_opp.
-Proof. exact rcarry_oppW_correct_and_bounded. Qed.
-Lemma rprefreeze_correct_and_bounded : unop_correct_and_bounded rprefreeze prefreeze.
-Proof. exact rprefreezeW_correct_and_bounded. Qed.
-Lemma rge_modulus_correct_and_bounded : unop_FEToZ_correct rge_modulus ge_modulus.
-Proof. exact rge_modulusW_correct_and_bounded. Qed.
-Lemma rpack_correct_and_bounded : unop_FEToWire_correct_and_bounded rpack pack.
-Proof. exact rpackW_correct_and_bounded. Qed.
-Lemma runpack_correct_and_bounded : unop_WireToFE_correct_and_bounded runpack unpack.
-Proof. exact runpackW_correct_and_bounded. Qed.
diff --git a/src/SpecificGen/GF41417_32Reflective/Common.v b/src/SpecificGen/GF41417_32Reflective/Common.v
deleted file mode 100644
index 75ce71bca..000000000
--- a/src/SpecificGen/GF41417_32Reflective/Common.v
+++ /dev/null
@@ -1,668 +0,0 @@
-Require Export Coq.ZArith.ZArith.
-Require Export Coq.Strings.String.
-Require Export Crypto.SpecificGen.GF41417_32.
-Require Export Crypto.SpecificGen.GF41417_32BoundedCommon.
-Require Import Crypto.Reflection.Reify.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Reflection.Wf.
-Require Import Crypto.Reflection.ExprInversion.
-Require Import Crypto.Reflection.Tuple.
-Require Import Crypto.Reflection.Relations.
-Require Import Crypto.Reflection.Eta.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Crypto.Reflection.Z.Interpretations64.Relations.
-Require Import Crypto.Reflection.Z.Interpretations64.RelationsCombinations.
-Require Import Crypto.Reflection.Z.Reify.
-Require Export Crypto.Reflection.Z.Syntax.
-Require Import Crypto.Reflection.Z.Syntax.Equality.
-Require Import Crypto.Reflection.InterpWfRel.
-Require Import Crypto.Reflection.WfReflective.
-Require Import Crypto.Util.Curry.
-Require Import Crypto.Util.Tower.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.ListUtil.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.Prod.
-Require Import Crypto.Util.Notations.
-
-Notation Expr := (Expr base_type op).
-
-Local Ltac make_type_from' T :=
- let T := (eval compute in T) in
- let rT := reify_type T in
- exact rT.
-Local Ltac make_type_from uncurried_op :=
- let T := (type of uncurried_op) in
- make_type_from' T.
-
-Definition fe41417_32T : flat_type base_type.
-Proof.
- let T := (eval compute in GF41417_32.fe41417_32) in
- let T := reify_flat_type T in
- exact T.
-Defined.
-Definition Expr_n_OpT (count_out : nat) : flat_type base_type
- := Eval cbv [Syntax.tuple Syntax.tuple' fe41417_32T] in
- Syntax.tuple fe41417_32T count_out.
-Definition Expr_nm_OpT (count_in count_out : nat) : type base_type
- := Eval cbv [Syntax.tuple Syntax.tuple' fe41417_32T Expr_n_OpT] in
- Arrow (Syntax.tuple fe41417_32T count_in) (Expr_n_OpT count_out).
-Definition ExprBinOpT : type base_type := Eval compute in Expr_nm_OpT 2 1.
-Definition ExprUnOpT : type base_type := Eval compute in Expr_nm_OpT 1 1.
-Definition ExprUnOpFEToZT : type base_type.
-Proof. make_type_from ge_modulus. Defined.
-Definition ExprUnOpWireToFET : type base_type.
-Proof. make_type_from unpack. Defined.
-Definition ExprUnOpFEToWireT : type base_type.
-Proof. make_type_from pack. Defined.
-Definition Expr4OpT : type base_type := Eval compute in Expr_nm_OpT 4 1.
-Definition Expr9_4OpT : type base_type := Eval compute in Expr_nm_OpT 9 4.
-Definition ExprArgT : flat_type base_type
- := Eval compute in domain ExprUnOpT.
-Definition ExprArgWireT : flat_type base_type
- := Eval compute in domain ExprUnOpWireToFET.
-Definition ExprZ : Type := Expr (Arrow Unit (Tbase TZ)).
-Definition ExprUnOpFEToZ : Type := Expr ExprUnOpFEToZT.
-Definition ExprUnOpWireToFE : Type := Expr ExprUnOpWireToFET.
-Definition ExprUnOpFEToWire : Type := Expr ExprUnOpFEToWireT.
-Definition Expr_nm_Op count_in count_out : Type := Expr (Expr_nm_OpT count_in count_out).
-Definition ExprBinOp : Type := Expr ExprBinOpT.
-Definition ExprUnOp : Type := Expr ExprUnOpT.
-Definition Expr4Op : Type := Expr Expr4OpT.
-Definition Expr9_4Op : Type := Expr Expr9_4OpT.
-Definition ExprArg : Type := Expr (Arrow Unit ExprArgT).
-Definition ExprArgWire : Type := Expr (Arrow Unit ExprArgWireT).
-Definition expr_nm_Op count_in count_out var : Type
- := expr base_type op (var:=var) (Expr_nm_OpT count_in count_out).
-Definition exprBinOp var : Type := expr base_type op (var:=var) ExprBinOpT.
-Definition exprUnOp var : Type := expr base_type op (var:=var) ExprUnOpT.
-Definition expr4Op var : Type := expr base_type op (var:=var) Expr4OpT.
-Definition expr9_4Op var : Type := expr base_type op (var:=var) Expr9_4OpT.
-Definition exprZ var : Type := expr base_type op (var:=var) (Arrow Unit (Tbase TZ)).
-Definition exprUnOpFEToZ var : Type := expr base_type op (var:=var) ExprUnOpFEToZT.
-Definition exprUnOpWireToFE var : Type := expr base_type op (var:=var) ExprUnOpWireToFET.
-Definition exprUnOpFEToWire var : Type := expr base_type op (var:=var) ExprUnOpFEToWireT.
-Definition exprArg var : Type := expr base_type op (var:=var) (Arrow Unit ExprArgT).
-Definition exprArgWire var : Type := expr base_type op (var:=var) (Arrow Unit ExprArgWireT).
-
-Definition make_bound (x : Z * Z) : ZBounds.t
- := Some {| Bounds.lower := fst x ; Bounds.upper := snd x |}.
-
-Fixpoint Expr_nm_Op_bounds count_in count_out {struct count_in} : interp_flat_type ZBounds.interp_base_type (domain (Expr_nm_OpT count_in count_out))
- := match count_in return interp_flat_type _ (domain (Expr_nm_OpT count_in count_out)) with
- | 0 => tt
- | S n
- => let b := (Tuple.map make_bound bounds) in
- let bs := Expr_nm_Op_bounds n count_out in
- match n return interp_flat_type _ (domain (Expr_nm_OpT n _)) -> interp_flat_type _ (domain (Expr_nm_OpT (S n) _)) with
- | 0 => fun _ => b
- | S n' => fun bs => (bs, b)
- end bs
- end.
-Definition ExprBinOp_bounds : interp_flat_type ZBounds.interp_base_type (domain ExprBinOpT)
- := Eval compute in Expr_nm_Op_bounds 2 1.
-Definition ExprUnOp_bounds : interp_flat_type ZBounds.interp_base_type (domain ExprUnOpT)
- := Eval compute in Expr_nm_Op_bounds 1 1.
-Definition ExprUnOpFEToZ_bounds : interp_flat_type ZBounds.interp_base_type (domain ExprUnOpFEToZT)
- := Eval compute in Expr_nm_Op_bounds 1 1.
-Definition ExprUnOpFEToWire_bounds : interp_flat_type ZBounds.interp_base_type (domain ExprUnOpFEToWireT)
- := Eval compute in Expr_nm_Op_bounds 1 1.
-Definition Expr4Op_bounds : interp_flat_type ZBounds.interp_base_type (domain Expr4OpT)
- := Eval compute in Expr_nm_Op_bounds 4 1.
-Definition Expr9Op_bounds : interp_flat_type ZBounds.interp_base_type (domain Expr9_4OpT)
- := Eval compute in Expr_nm_Op_bounds 9 4.
-Definition ExprUnOpWireToFE_bounds : interp_flat_type ZBounds.interp_base_type (domain ExprUnOpWireToFET)
- := Tuple.map make_bound wire_digit_bounds.
-
-Definition interp_bexpr : ExprBinOp -> SpecificGen.GF41417_32BoundedCommon.fe41417_32W * SpecificGen.GF41417_32BoundedCommon.fe41417_32W -> SpecificGen.GF41417_32BoundedCommon.fe41417_32W
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-Definition interp_uexpr : ExprUnOp -> SpecificGen.GF41417_32BoundedCommon.fe41417_32W -> SpecificGen.GF41417_32BoundedCommon.fe41417_32W
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-Definition interp_uexpr_FEToZ : ExprUnOpFEToZ -> SpecificGen.GF41417_32BoundedCommon.fe41417_32W -> SpecificGen.GF41417_32BoundedCommon.word64
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-Definition interp_uexpr_FEToWire : ExprUnOpFEToWire -> SpecificGen.GF41417_32BoundedCommon.fe41417_32W -> SpecificGen.GF41417_32BoundedCommon.wire_digitsW
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-Definition interp_uexpr_WireToFE : ExprUnOpWireToFE -> SpecificGen.GF41417_32BoundedCommon.wire_digitsW -> SpecificGen.GF41417_32BoundedCommon.fe41417_32W
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-Definition interp_9_4expr : Expr9_4Op
- -> Tuple.tuple SpecificGen.GF41417_32BoundedCommon.fe41417_32W 9
- -> Tuple.tuple SpecificGen.GF41417_32BoundedCommon.fe41417_32W 4
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-
-Notation binop_correct_and_bounded rop op
- := (ibinop_correct_and_bounded (interp_bexpr rop) (curry2 op)) (only parsing).
-Notation unop_correct_and_bounded rop op
- := (iunop_correct_and_bounded (interp_uexpr rop) op) (only parsing).
-Notation unop_FEToZ_correct rop op
- := (iunop_FEToZ_correct (interp_uexpr_FEToZ rop) op) (only parsing).
-Notation unop_FEToWire_correct_and_bounded rop op
- := (iunop_FEToWire_correct_and_bounded (interp_uexpr_FEToWire rop) op) (only parsing).
-Notation unop_WireToFE_correct_and_bounded rop op
- := (iunop_WireToFE_correct_and_bounded (interp_uexpr_WireToFE rop) op) (only parsing).
-Notation op9_4_correct_and_bounded rop op
- := (i9top_correct_and_bounded 4 (interp_9_4expr rop) op) (only parsing).
-
-Ltac rexpr_cbv :=
- lazymatch goal with
- | [ |- { rexpr | forall x, Interp _ (t:=?T) rexpr x = ?uncurry ?oper x } ]
- => let operf := head oper in
- let uncurryf := head uncurry in
- try cbv delta [T]; try cbv delta [oper];
- try cbv beta iota delta [uncurryf]
- | [ |- { rexpr | forall x, Interp _ (t:=?T) rexpr x = ?oper x } ]
- => let operf := head oper in
- try cbv delta [T]; try cbv delta [oper]
- end;
- cbv beta iota delta [interp_flat_type interp_base_type zero_ GF41417_32.fe41417_32 GF41417_32.wire_digits].
-
-Ltac reify_sig :=
- rexpr_cbv; eexists; Reify_rhs; reflexivity.
-
-Local Notation rexpr_sig T uncurried_op :=
- { rexprZ
- | forall x, Interp interp_op (t:=T) rexprZ x = uncurried_op x }
- (only parsing).
-
-Notation rexpr_binop_sig op := (rexpr_sig ExprBinOpT (curry2 op)) (only parsing).
-Notation rexpr_unop_sig op := (rexpr_sig ExprUnOpT op) (only parsing).
-Notation rexpr_unop_FEToZ_sig op := (rexpr_sig ExprUnOpFEToZT op) (only parsing).
-Notation rexpr_unop_FEToWire_sig op := (rexpr_sig ExprUnOpFEToWireT op) (only parsing).
-Notation rexpr_unop_WireToFE_sig op := (rexpr_sig ExprUnOpWireToFET op) (only parsing).
-Notation rexpr_9_4op_sig op := (rexpr_sig Expr9_4OpT op) (only parsing).
-
-Notation correct_and_bounded_genT ropW'v ropZ_sigv
- := (let ropW' := ropW'v in
- let ropZ_sig := ropZ_sigv in
- ropW' = proj1_sig ropZ_sig
- /\ interp_type_rel_pointwise Relations.related_Z (Interp (@BoundedWordW.interp_op) ropW') (Interp (@Z.interp_op) ropW')
- /\ interp_type_rel_pointwise Relations.related_bounds (Interp (@BoundedWordW.interp_op) ropW') (Interp (@ZBounds.interp_op) ropW')
- /\ interp_type_rel_pointwise Relations.related_wordW (Interp (@BoundedWordW.interp_op) ropW') (Interp (@WordW.interp_op) ropW'))
- (only parsing).
-
-Ltac app_tuples x y :=
- let tx := type of x in
- lazymatch (eval hnf in tx) with
- | prod _ _ => let xs := app_tuples (snd x) y in
- constr:((fst x, xs))
- | _ => constr:((x, y))
- end.
-
-Local Arguments Tuple.map2 : simpl never.
-Local Arguments Tuple.map : simpl never.
-(*
-Fixpoint args_to_bounded_helperT {n}
- (v : Tuple.tuple' WordW.wordW n)
- (bounds : Tuple.tuple' (Z * Z) n)
- (pf : List.fold_right
- andb true
- (Tuple.to_list
- _
- (Tuple.map2
- (n:=S n)
- (fun bounds v =>
- let '(lower, upper) := bounds in ((lower <=? v)%Z && (v <=? upper)%Z)%bool)
- bounds
- (Tuple.map (n:=S n) WordW.wordWToZ v))) = true)
- (res : Type)
- {struct n}
- : Type.
-Proof.
- refine (match n return (forall (v : Tuple.tuple' _ n) (bounds : Tuple.tuple' _ n),
- List.fold_right
- _ _ (Tuple.to_list
- _
- (Tuple.map2 (n:=S n) _ bounds (Tuple.map (n:=S n) _ v))) = true
- -> Type)
- with
- | 0 => fun v' bounds' pf0 => forall pf1 : (0 <= fst bounds' /\ Z.log2 (snd bounds') < Z.of_nat WordW.bit_width)%Z, res
- | S n' => fun v' bounds' pf0 => let t := _ in
- forall pf1 : (0 <= fst (snd bounds') /\ Z.log2 (snd (snd bounds')) < Z.of_nat WordW.bit_width)%Z, @args_to_bounded_helperT n' (fst v') (fst bounds') t res
- end v bounds pf).
- { clear -pf0.
- abstract (
- destruct v', bounds'; simpl @fst;
- rewrite Tuple.map_S in pf0;
- simpl in pf0;
- rewrite Tuple.map2_S in pf0;
- simpl @List.fold_right in *;
- rewrite Bool.andb_true_iff in pf0; tauto
- ). }
-Defined.
-
-Fixpoint args_to_bounded_helper {n} res
- {struct n}
- : forall v bounds pf, (Tuple.tuple' BoundedWordW.BoundedWord n -> res) -> @args_to_bounded_helperT n v bounds pf res.
-Proof.
- refine match n return (forall v bounds pf, (Tuple.tuple' BoundedWordW.BoundedWord n -> res) -> @args_to_bounded_helperT n v bounds pf res) with
- | 0 => fun v bounds pf f pf' => f {| BoundedWord.lower := fst bounds ; BoundedWord.value := v ; BoundedWord.upper := snd bounds |}
- | S n'
- => fun v bounds pf f pf'
- => @args_to_bounded_helper
- n' res (fst v) (fst bounds) _
- (fun ts => f (ts, {| BoundedWord.lower := fst (snd bounds) ; BoundedWord.value := snd v ; BoundedWord.upper := snd (snd bounds) |}))
- end.
- { clear -pf pf'.
- unfold Tuple.map2, Tuple.map in pf; simpl in *.
- abstract (
- destruct bounds;
- simpl in *;
- rewrite !Bool.andb_true_iff in pf;
- destruct_head' and;
- Z.ltb_to_lt; auto
- ). }
- { simpl in *.
- clear -pf pf'.
- abstract (
- destruct bounds as [? [? ?] ], v; simpl in *;
- rewrite Tuple.map_S in pf; simpl in pf; rewrite Tuple.map2_S in pf;
- simpl in pf;
- rewrite !Bool.andb_true_iff in pf;
- destruct_head' and;
- Z.ltb_to_lt; auto
- ). }
-Defined.
-*)
-
-Definition assoc_right''
- := Eval cbv [Tuple.assoc_right' Tuple.rsnoc' fst snd] in @Tuple.assoc_right'.
-(*
-Definition args_to_bounded {n} v bounds pf
- := Eval cbv [args_to_bounded_helper assoc_right''] in
- @args_to_bounded_helper n _ v bounds pf (@assoc_right'' _ _).
-*)
-Local Ltac get_len T :=
- match (eval hnf in T) with
- | prod ?A ?B
- => let a := get_len A in
- let b := get_len B in
- (eval compute in (a + b)%nat)
- | _ => constr:(1%nat)
- end.
-
-Ltac assoc_right_tuple x so_far :=
- let t := type of x in
- lazymatch (eval hnf in t) with
- | prod _ _ => let so_far := assoc_right_tuple (snd x) so_far in
- assoc_right_tuple (fst x) so_far
- | _ => lazymatch so_far with
- | @None => x
- | _ => constr:((x, so_far))
- end
- end.
-
-(*
-Local Ltac make_args x :=
- let x' := fresh "x'" in
- compute in x |- *;
- let t := match type of x with @expr _ _ _ (Tflat ?t) => t end in
- let t' := match goal with |- @expr _ _ _ (Tflat ?t) => t end in
- refine (LetIn (invert_Return x) _);
- let x'' := fresh "x''" in
- intro x'';
- let xv := assoc_right_tuple x'' (@None) in
- refine (SmartVarf (xv : interp_flat_type _ t')).
-
-Local Ltac args_to_bounded x H :=
- let x' := fresh in
- set (x' := x);
- compute in x;
- let len := (let T := type of x in get_len T) in
- destruct_head' prod;
- let c := constr:(args_to_bounded (n:=pred len) x' _ H) in
- let bounds := lazymatch c with args_to_bounded _ ?bounds _ => bounds end in
- let c := (eval cbv [domain ExprUnOpT interp_flat_type args_to_bounded bounds pred fst snd] in c) in
- apply c; compute; clear;
- try abstract (
- repeat split;
- solve [ reflexivity
- | refine (fun v => match v with eq_refl => I end) ]
- ).
- *)
-
-Section gen.
- Definition bounds_are_good_gen
- {n : nat} (bounds : Tuple.tuple (Z * Z) n)
- := let res :=
- Tuple.map (fun bs => let '(lower, upper) := bs in ((0 <=? lower)%Z && (Z.log2 upper <? Z.of_nat WordW.bit_width)%Z)%bool) bounds
- in
- List.fold_right andb true (Tuple.to_list n res).
- Definition unop_args_to_bounded'
- (bs : Z * Z)
- (Hbs : bounds_are_good_gen (n:=1) bs = true)
- (x : word64)
- (H : is_bounded_gen (Tuple.map (fun v : word64 => (v : Z)) (n:=1) x) bs = true)
- : BoundedWordW.BoundedWord.
- Proof.
- refine {| BoundedWord.lower := fst bs ; BoundedWord.value := x ; BoundedWord.upper := snd bs |}.
- unfold bounds_are_good_gen, is_bounded_gen, Tuple.map, Tuple.map2 in *; simpl in *.
- abstract (
- destruct bs; Bool.split_andb; Z.ltb_to_lt; simpl;
- repeat apply conj; assumption
- ).
- Defined.
- Fixpoint n_op_args_to_bounded'
- n
- : forall (bs : Tuple.tuple' (Z * Z) n)
- (Hbs : bounds_are_good_gen (n:=S n) bs = true)
- (x : Tuple.tuple' word64 n)
- (H : is_bounded_gen (Tuple.eta_tuple (Tuple.map (n:=S n) (fun v : word64 => v : Z)) x) bs = true),
- interp_flat_type (fun _ => BoundedWordW.BoundedWord) (Syntax.tuple' (Tbase TZ) n).
- Proof.
- destruct n as [|n']; simpl in *.
- { exact unop_args_to_bounded'. }
- { refine (fun bs Hbs x H
- => (@n_op_args_to_bounded' n' (fst bs) _ (fst x) _,
- @unop_args_to_bounded' (snd bs) _ (snd x) _));
- clear n_op_args_to_bounded';
- simpl in *;
- [ clear x H | clear Hbs | clear x H | clear Hbs ];
- unfold bounds_are_good_gen, is_bounded_gen in *;
- abstract (
- repeat first [ progress simpl in *
- | assumption
- | reflexivity
- | progress Bool.split_andb
- | progress destruct_head prod
- | match goal with
- | [ H : _ |- _ ] => progress rewrite ?Tuple.map_S, ?Tuple.map2_S, ?Tuple.strip_eta_tuple'_dep in H
- end
- | progress rewrite ?Tuple.map_S, ?Tuple.map2_S, ?Tuple.strip_eta_tuple'_dep
- | progress break_match_hyps
- | rewrite Bool.andb_true_iff; apply conj
- | unfold Tuple.map, Tuple.map2; simpl; rewrite Bool.andb_true_iff; apply conj ]
- ). }
- Defined.
-
- Definition n_op_args_to_bounded
- n
- : forall (bs : Tuple.tuple (Z * Z) n)
- (Hbs : bounds_are_good_gen bs = true)
- (x : Tuple.tuple word64 n)
- (H : is_bounded_gen (Tuple.eta_tuple (Tuple.map (fun v : word64 => v : Z)) x) bs = true),
- interp_flat_type (fun _ => BoundedWordW.BoundedWord) (Syntax.tuple (Tbase TZ) n)
- := match n with
- | 0 => fun _ _ _ _ => tt
- | S n' => @n_op_args_to_bounded' n'
- end.
-
- Fixpoint nm_op_args_to_bounded' n m
- (bs : Tuple.tuple (Z * Z) m)
- (Hbs : bounds_are_good_gen bs = true)
- : forall (x : interp_flat_type (fun _ => Tuple.tuple word64 m) (Syntax.tuple' (Tbase TZ) n))
- (H : SmartVarfPropMap (fun _ x => is_bounded_gen (Tuple.eta_tuple (Tuple.map (fun v : word64 => v : Z)) x) bs = true)
- x),
- interp_flat_type (fun _ => BoundedWordW.BoundedWord) (Syntax.tuple' (Syntax.tuple (Tbase TZ) m) n)
- := match n with
- | 0 => @n_op_args_to_bounded m bs Hbs
- | S n' => fun x H
- => (@nm_op_args_to_bounded' n' m bs Hbs (fst x) (proj1 H),
- @n_op_args_to_bounded m bs Hbs (snd x) (proj2 H))
- end.
- Definition nm_op_args_to_bounded n m
- (bs : Tuple.tuple (Z * Z) m)
- (Hbs : bounds_are_good_gen bs = true)
- : forall (x : interp_flat_type (fun _ => Tuple.tuple word64 m) (Syntax.tuple (Tbase TZ) n))
- (H : SmartVarfPropMap (fun _ x => is_bounded_gen (Tuple.eta_tuple (Tuple.map (fun v : word64 => v : Z)) x) bs = true)
- x),
- interp_flat_type (fun _ => BoundedWordW.BoundedWord) (Syntax.tuple (Syntax.tuple (Tbase TZ) m) n)
- := match n with
- | 0 => fun _ _ => tt
- | S n' => @nm_op_args_to_bounded' n' m bs Hbs
- end.
-End gen.
-
-Local Ltac get_inner_len T :=
- lazymatch T with
- | (?T * _)%type => get_inner_len T
- | ?T => get_len T
- end.
-Local Ltac get_outer_len T :=
- lazymatch T with
- | (?A * ?B)%type => let a := get_outer_len A in
- let b := get_outer_len B in
- (eval compute in (a + b)%nat)
- | ?T => constr:(1%nat)
- end.
-Local Ltac args_to_bounded x H :=
- let t := type of x in
- let m := get_inner_len t in
- let n := get_outer_len t in
- let H := constr:(fun Hbs => @nm_op_args_to_bounded n m _ Hbs x H) in
- let H := (eval cbv beta in (H eq_refl)) in
- exact H.
-
-Definition binop_args_to_bounded (x : fe41417_32W * fe41417_32W)
- (H : is_bounded (fe41417_32WToZ (fst x)) = true)
- (H' : is_bounded (fe41417_32WToZ (snd x)) = true)
- : interp_flat_type (fun _ => BoundedWordW.BoundedWord) (domain ExprBinOpT).
-Proof. args_to_bounded x (conj H H'). Defined.
-Definition unop_args_to_bounded (x : fe41417_32W) (H : is_bounded (fe41417_32WToZ x) = true)
- : interp_flat_type (fun _ => BoundedWordW.BoundedWord) (domain ExprUnOpT).
-Proof. args_to_bounded x H. Defined.
-Definition unopWireToFE_args_to_bounded (x : wire_digitsW) (H : wire_digits_is_bounded (wire_digitsWToZ x) = true)
- : interp_flat_type (fun _ => BoundedWordW.BoundedWord) (domain ExprUnOpWireToFET).
-Proof. args_to_bounded x H. Defined.
-Definition op9_args_to_bounded (x : fe41417_32W * fe41417_32W * fe41417_32W * fe41417_32W * fe41417_32W * fe41417_32W * fe41417_32W * fe41417_32W * fe41417_32W)
- (H0 : is_bounded (fe41417_32WToZ (fst (fst (fst (fst (fst (fst (fst (fst x))))))))) = true)
- (H1 : is_bounded (fe41417_32WToZ (snd (fst (fst (fst (fst (fst (fst (fst x))))))))) = true)
- (H2 : is_bounded (fe41417_32WToZ (snd (fst (fst (fst (fst (fst (fst x)))))))) = true)
- (H3 : is_bounded (fe41417_32WToZ (snd (fst (fst (fst (fst (fst x))))))) = true)
- (H4 : is_bounded (fe41417_32WToZ (snd (fst (fst (fst (fst x)))))) = true)
- (H5 : is_bounded (fe41417_32WToZ (snd (fst (fst (fst x))))) = true)
- (H6 : is_bounded (fe41417_32WToZ (snd (fst (fst x)))) = true)
- (H7 : is_bounded (fe41417_32WToZ (snd (fst x))) = true)
- (H8 : is_bounded (fe41417_32WToZ (snd x)) = true)
- : interp_flat_type (fun _ => BoundedWordW.BoundedWord) (domain Expr9_4OpT).
-Proof. args_to_bounded x (conj (conj (conj (conj (conj (conj (conj (conj H0 H1) H2) H3) H4) H5) H6) H7) H8). Defined.
-Local Ltac make_bounds_prop' bounds bounds' :=
- first [ refine (andb _ _);
- [ destruct bounds' as [bounds' _], bounds as [bounds _]
- | destruct bounds' as [_ bounds'], bounds as [_ bounds] ];
- try make_bounds_prop' bounds bounds'
- | exact (match bounds' with
- | Some bounds' => let (l, u) := bounds in
- let (l', u') := bounds' in
- ((l' <=? l) && (u <=? u'))%Z%bool
- | None => false
- end) ].
-Local Ltac make_bounds_prop bounds orig_bounds :=
- let bounds' := fresh "bounds'" in
- pose orig_bounds as bounds';
- make_bounds_prop' bounds bounds'.
-Definition unop_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain ExprUnOpT)) : bool.
-Proof. make_bounds_prop bounds ExprUnOp_bounds. Defined.
-Definition binop_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain ExprBinOpT)) : bool.
-Proof. make_bounds_prop bounds ExprUnOp_bounds. Defined.
-Definition unopFEToWire_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain ExprUnOpFEToWireT)) : bool.
-Proof. make_bounds_prop bounds ExprUnOpWireToFE_bounds. Defined.
-Definition unopWireToFE_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain ExprUnOpWireToFET)) : bool.
-Proof. make_bounds_prop bounds ExprUnOp_bounds. Defined.
-(* TODO FIXME(jgross?, andreser?): Is every function returning a single Z a boolean function? *)
-Definition unopFEToZ_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain ExprUnOpFEToZT)) : bool.
-Proof.
- refine (let (l, u) := bounds in ((0 <=? l) && (u <=? 1))%Z%bool).
-Defined.
-Definition op9_4_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain Expr9_4OpT)) : bool.
-Proof. make_bounds_prop bounds Expr4Op_bounds. Defined.
-(*Definition ApplyUnOp {var} (f : exprUnOp var) : exprArg var -> exprArg var
- := fun x
- => LetIn (invert_Return (unop_make_args x))
- (fun k => invert_Return (Apply length_fe41417_32 f k)).
-Definition ApplyBinOp {var} (f : exprBinOp var) : exprArg var -> exprArg var -> exprArg var
- := fun x y
- => LetIn (invert_Return (unop_make_args x))
- (fun x'
- => LetIn (invert_Return (unop_make_args y))
- (fun y'
- => invert_Return (Apply length_fe41417_32
- (Apply length_fe41417_32
- f x') y'))).
-Definition ApplyUnOpFEToWire {var} (f : exprUnOpFEToWire var) : exprArg var -> exprArgWire var
- := fun x
- => LetIn (invert_Return (unop_make_args x))
- (fun k => invert_Return (Apply length_fe41417_32 f k)).
-Definition ApplyUnOpWireToFE {var} (f : exprUnOpWireToFE var) : exprArgWire var -> exprArg var
- := fun x
- => LetIn (invert_Return (unop_wire_make_args x))
- (fun k => invert_Return (Apply (List.length wire_widths) f k)).
-Definition ApplyUnOpFEToZ {var} (f : exprUnOpFEToZ var) : exprArg var -> exprZ var
- := fun x
- => LetIn (invert_Return (unop_make_args x))
- (fun k => invert_Return (Apply length_fe41417_32 f k)).
-*)
-
-(* FIXME TODO(jgross): This is a horrible tactic. We should unify the
- various kinds of correct and boundedness, and abstract in Gallina
- rather than Ltac *)
-Ltac t_correct_and_bounded ropZ_sig Hbounds H0 H1 args :=
- let Heq := fresh "Heq" in
- let Hbounds0 := fresh "Hbounds0" in
- let Hbounds1 := fresh "Hbounds1" in
- let Hbounds2 := fresh "Hbounds2" in
- pose proof (proj2_sig ropZ_sig) as Heq;
- cbv [interp_bexpr interp_uexpr interp_uexpr_FEToWire interp_uexpr_FEToZ interp_uexpr_WireToFE interp_9_4expr
- interp_flat_type_eta interp_flat_type_eta_gen
- curry_binop_fe41417_32W curry_unop_fe41417_32W curry_unop_wire_digitsW curry_9op_fe41417_32W
- curry_binop_fe41417_32 curry_unop_fe41417_32 curry_unop_wire_digits curry_9op_fe41417_32
- uncurry_binop_fe41417_32W uncurry_unop_fe41417_32W uncurry_unop_wire_digitsW uncurry_9op_fe41417_32W
- uncurry_binop_fe41417_32 uncurry_unop_fe41417_32 uncurry_unop_wire_digits uncurry_9op_fe41417_32
- ExprBinOpT ExprUnOpFEToWireT ExprUnOpT ExprUnOpFEToZT ExprUnOpWireToFET Expr9_4OpT Expr4OpT] in *;
- cbv zeta in *;
- simpl @fe41417_32WToZ; simpl @wire_digitsWToZ;
- rewrite <- Heq; clear Heq;
- destruct Hbounds as [Heq Hbounds];
- change interp_op with (@Z.interp_op) in *;
- change interp_base_type with (@Z.interp_base_type) in *;
- change word64 with WordW.wordW in *;
- rewrite <- Heq; clear Heq;
- destruct Hbounds as [ Hbounds0 [Hbounds1 Hbounds2] ];
- pose proof (fun pf => Relations.uncurry_interp_type_rel_pointwise_proj_from_option2 WordW.to_Z pf Hbounds2 Hbounds0) as Hbounds_left;
- pose proof (fun pf => Relations.uncurry_interp_type_rel_pointwise_proj1_from_option2 Relations.related_wordW_boundsi' pf Hbounds1 Hbounds2) as Hbounds_right;
- specialize_by repeat first [ progress intros
- | progress unfold RelationClasses.Reflexive
- | reflexivity
- | assumption
- | progress destruct_head' base_type
- | progress destruct_head' BoundedWordW.BoundedWord
- | progress destruct_head' and
- | progress repeat apply conj ];
- specialize (Hbounds_left args H0);
- specialize (Hbounds_right args H0);
- cbv beta in *;
- lazymatch type of Hbounds_right with
- | match ?e with _ => _ end
- => lazymatch type of H1 with
- | match ?e' with _ => _ end
- => change e' with e in H1; destruct e eqn:?; [ | exfalso; assumption ]
- end
- end;
- repeat match goal with x := _ |- _ => subst x end;
- cbv [id
- binop_args_to_bounded unop_args_to_bounded unopWireToFE_args_to_bounded op9_args_to_bounded
- Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list
- Relations.proj_eq_rel SmartVarfMap interp_flat_type smart_interp_flat_map domain fst snd BoundedWordW.to_wordW' BoundedWordW.boundedWordToWordW BoundedWord.value Relations.related_wordW_boundsi' Relations.related'_wordW_bounds Bounds.upper Bounds.lower codomain WordW.to_Z nm_op_args_to_bounded nm_op_args_to_bounded' n_op_args_to_bounded n_op_args_to_bounded' unop_args_to_bounded' Relations.interp_flat_type_rel_pointwise Relations.interp_flat_type_rel_pointwise_gen_Prop] in Hbounds_left, Hbounds_right;
- simpl @interp_flat_type in *;
- (let v := (eval unfold WordW.interp_base_type in (WordW.interp_base_type TZ)) in
- change (WordW.interp_base_type TZ) with v in *);
- cbv beta iota zeta in *;
- lazymatch goal with
- | [ |- fe41417_32WToZ ?x = _ /\ _ ]
- => generalize dependent x; intros
- | [ |- wire_digitsWToZ ?x = _ /\ _ ]
- => generalize dependent x; intros
- | [ |- (Tuple.map fe41417_32WToZ ?x = _) /\ _ ]
- => generalize dependent x; intros
- | [ |- ((Tuple.map fe41417_32WToZ ?x = _) * _)%type ]
- => generalize dependent x; intros
- | [ |- _ = _ ]
- => exact Hbounds_left
- end;
- cbv [interp_type interp_type_gen interp_type_gen_hetero interp_flat_type WordW.interp_base_type codomain] in *;
- destruct_head' prod;
- change word64ToZ with WordW.wordWToZ in *;
- (split; [ exact Hbounds_left | ]);
- cbv [interp_flat_type] in *;
- cbv [fst snd
- Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list Tuple.from_list'
- make_bound
- Datatypes.length wire_widths wire_digit_bounds PseudoMersenneBaseParams.limb_widths bounds
- binop_bounds_good unop_bounds_good unopFEToWire_bounds_good unopWireToFE_bounds_good unopFEToZ_bounds_good op9_4_bounds_good
- ExprUnOp_bounds ExprBinOp_bounds ExprUnOpFEToWire_bounds ExprUnOpFEToZ_bounds ExprUnOpWireToFE_bounds Expr9Op_bounds Expr4Op_bounds] in H1;
- destruct_head' ZBounds.bounds;
- unfold_is_bounded_in H1;
- simpl @fe41417_32WToZ; simpl @wire_digitsWToZ;
- destruct_head' and;
- Z.ltb_to_lt;
- change WordW.wordWToZ with word64ToZ in *;
- cbv [Tuple.map HList.hlist Tuple.on_tuple Tuple.from_list Tuple.from_list' Tuple.to_list Tuple.to_list' List.map HList.hlist' fst snd fe41417_32WToZ HList.hlistP HList.hlistP'];
- cbv [WordW.bit_width BitSize64.bit_width Z.of_nat Pos.of_succ_nat Pos.succ] in *;
- repeat split; unfold_is_bounded;
- Z.ltb_to_lt;
- try omega; try reflexivity.
-
-Ltac rexpr_correct :=
- let ropW' := fresh in
- let ropZ_sig := fresh in
- intros ropW' ropZ_sig;
- let wf_ropW := fresh "wf_ropW" in
- assert (wf_ropW : Wf ropW') by (subst ropW' ropZ_sig; reflect_Wf base_type_eq_semidec_is_dec op_beq_bl);
- cbv zeta; repeat apply conj;
- [ vm_compute; reflexivity
- | apply @InterpWf;
- [ | apply wf_ropW ].. ];
- auto with interp_related.
-
-Notation rword_of_Z rexprZ_sig := (proj1_sig rexprZ_sig) (only parsing).
-
-Notation compute_bounds opW bounds
- := (Interp (@ZBounds.interp_op) opW bounds)
- (only parsing).
-
-Notation rexpr_wfT e := (Wf.Wf e) (only parsing).
-
-Ltac prove_rexpr_wfT
- := reflect_Wf Equality.base_type_eq_semidec_is_dec Equality.op_beq_bl.
-
-Module Export PrettyPrinting.
- (* We add [enlargen] to force [bounds_on] to be in [Type] in 8.4 and
- 8.5/8.6. Because [Set] is special and things break if
- [bounds_on] ends up in [Set] for reasons jgross hasn't bothered
- to debug. *)
- Inductive bounds_on := overflow | in_range (lower upper : Z) | enlargen (_ : Set).
-
- Inductive result := yes | no | borked.
-
- Definition ZBounds_to_bounds_on
- := fun (t : base_type) (x : ZBounds.interp_base_type t)
- => match x with
- | Some {| Bounds.lower := l ; Bounds.upper := u |}
- => in_range l u
- | None
- => overflow
- end.
-
- Fixpoint does_it_overflow {t} : interp_flat_type (fun t : base_type => bounds_on) t -> result
- := match t return interp_flat_type _ t -> result with
- | Tbase _ => fun v => match v with
- | overflow => yes
- | in_range _ _ => no
- | enlargen _ => borked
- end
- | Unit => fun _ => no
- | Prod x y => fun v => match @does_it_overflow _ (fst v), @does_it_overflow _ (snd v) with
- | no, no => no
- | yes, no | no, yes | yes, yes => yes
- | borked, _ | _, borked => borked
- end
- end.
-
- (** This gives a slightly easier to read version of the bounds *)
- Notation compute_bounds_for_display opW bounds
- := (SmartVarfMap ZBounds_to_bounds_on (compute_bounds opW bounds)) (only parsing).
- Notation sanity_compute opW bounds
- := (does_it_overflow (SmartVarfMap ZBounds_to_bounds_on (compute_bounds opW bounds))) (only parsing).
- Notation sanity_check opW bounds
- := (eq_refl (sanity_compute opW bounds) <: no = no) (only parsing).
-End PrettyPrinting.
diff --git a/src/SpecificGen/GF41417_32Reflective/Common9_4Op.v b/src/SpecificGen/GF41417_32Reflective/Common9_4Op.v
deleted file mode 100644
index 0e7336d2e..000000000
--- a/src/SpecificGen/GF41417_32Reflective/Common9_4Op.v
+++ /dev/null
@@ -1,102 +0,0 @@
-Require Export Crypto.SpecificGen.GF41417_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF41417_32BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Local Notation eta_and x := (let (a, b) := x in a, let (a, b) := x in b) (only parsing).
-Lemma Expr9_4Op_correct_and_bounded
- ropW op (ropZ_sig : rexpr_9_4op_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall x012345678
- (x012345678
- := (eta_fe41417_32W (fst (fst (fst (fst (fst (fst (fst (fst x012345678)))))))),
- eta_fe41417_32W (snd (fst (fst (fst (fst (fst (fst (fst x012345678)))))))),
- eta_fe41417_32W (snd (fst (fst (fst (fst (fst (fst x012345678))))))),
- eta_fe41417_32W (snd (fst (fst (fst (fst (fst x012345678)))))),
- eta_fe41417_32W (snd (fst (fst (fst (fst x012345678))))),
- eta_fe41417_32W (snd (fst (fst (fst x012345678)))),
- eta_fe41417_32W (snd (fst (fst x012345678))),
- eta_fe41417_32W (snd (fst x012345678)),
- eta_fe41417_32W (snd x012345678)))
- (Hx012345678
- : is_bounded (fe41417_32WToZ (fst (fst (fst (fst (fst (fst (fst (fst x012345678))))))))) = true
- /\ is_bounded (fe41417_32WToZ (snd (fst (fst (fst (fst (fst (fst (fst x012345678))))))))) = true
- /\ is_bounded (fe41417_32WToZ (snd (fst (fst (fst (fst (fst (fst x012345678)))))))) = true
- /\ is_bounded (fe41417_32WToZ (snd (fst (fst (fst (fst (fst x012345678))))))) = true
- /\ is_bounded (fe41417_32WToZ (snd (fst (fst (fst (fst x012345678)))))) = true
- /\ is_bounded (fe41417_32WToZ (snd (fst (fst (fst x012345678))))) = true
- /\ is_bounded (fe41417_32WToZ (snd (fst (fst x012345678)))) = true
- /\ is_bounded (fe41417_32WToZ (snd (fst x012345678))) = true
- /\ is_bounded (fe41417_32WToZ (snd x012345678)) = true),
- let (Hx0, Hx12345678) := (eta_and Hx012345678) in
- let (Hx1, Hx2345678) := (eta_and Hx12345678) in
- let (Hx2, Hx345678) := (eta_and Hx2345678) in
- let (Hx3, Hx45678) := (eta_and Hx345678) in
- let (Hx4, Hx5678) := (eta_and Hx45678) in
- let (Hx5, Hx678) := (eta_and Hx5678) in
- let (Hx6, Hx78) := (eta_and Hx678) in
- let (Hx7, Hx8) := (eta_and Hx78) in
- let args := op9_args_to_bounded x012345678 Hx0 Hx1 Hx2 Hx3 Hx4 Hx5 Hx6 Hx7 Hx8 in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall x012345678
- (x012345678
- := (eta_fe41417_32W (fst (fst (fst (fst (fst (fst (fst (fst x012345678)))))))),
- eta_fe41417_32W (snd (fst (fst (fst (fst (fst (fst (fst x012345678)))))))),
- eta_fe41417_32W (snd (fst (fst (fst (fst (fst (fst x012345678))))))),
- eta_fe41417_32W (snd (fst (fst (fst (fst (fst x012345678)))))),
- eta_fe41417_32W (snd (fst (fst (fst (fst x012345678))))),
- eta_fe41417_32W (snd (fst (fst (fst x012345678)))),
- eta_fe41417_32W (snd (fst (fst x012345678))),
- eta_fe41417_32W (snd (fst x012345678)),
- eta_fe41417_32W (snd x012345678)))
- (Hx012345678
- : is_bounded (fe41417_32WToZ (fst (fst (fst (fst (fst (fst (fst (fst x012345678))))))))) = true
- /\ is_bounded (fe41417_32WToZ (snd (fst (fst (fst (fst (fst (fst (fst x012345678))))))))) = true
- /\ is_bounded (fe41417_32WToZ (snd (fst (fst (fst (fst (fst (fst x012345678)))))))) = true
- /\ is_bounded (fe41417_32WToZ (snd (fst (fst (fst (fst (fst x012345678))))))) = true
- /\ is_bounded (fe41417_32WToZ (snd (fst (fst (fst (fst x012345678)))))) = true
- /\ is_bounded (fe41417_32WToZ (snd (fst (fst (fst x012345678))))) = true
- /\ is_bounded (fe41417_32WToZ (snd (fst (fst x012345678)))) = true
- /\ is_bounded (fe41417_32WToZ (snd (fst x012345678))) = true
- /\ is_bounded (fe41417_32WToZ (snd x012345678)) = true),
- let (Hx0, Hx12345678) := (eta_and Hx012345678) in
- let (Hx1, Hx2345678) := (eta_and Hx12345678) in
- let (Hx2, Hx345678) := (eta_and Hx2345678) in
- let (Hx3, Hx45678) := (eta_and Hx345678) in
- let (Hx4, Hx5678) := (eta_and Hx45678) in
- let (Hx5, Hx678) := (eta_and Hx5678) in
- let (Hx6, Hx78) := (eta_and Hx678) in
- let (Hx7, Hx8) := (eta_and Hx78) in
- let args := op9_args_to_bounded x012345678 Hx0 Hx1 Hx2 Hx3 Hx4 Hx5 Hx6 Hx7 Hx8 in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => op9_4_bounds_good bounds = true
- | None => False
- end)
- : op9_4_correct_and_bounded ropW op.
-Proof.
- intros xs Hxs.
- pose xs as xs'.
- compute in xs.
- destruct_head' prod.
- cbv [Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' fst snd List.map Tuple.from_list Tuple.from_list' HList.hlistP HList.hlistP'] in Hxs.
- pose Hxs as Hxs'.
- destruct Hxs as [ [ [ [ [ [ [ [ Hx0 Hx1 ] Hx2 ] Hx3 ] Hx4 ] Hx5 ] Hx6 ] Hx7 ] Hx8 ].
- specialize (H0 xs'
- (conj Hx0 (conj Hx1 (conj Hx2 (conj Hx3 (conj Hx4 (conj Hx5 (conj Hx6 (conj Hx7 Hx8))))))))).
- specialize (H1 xs'
- (conj Hx0 (conj Hx1 (conj Hx2 (conj Hx3 (conj Hx4 (conj Hx5 (conj Hx6 (conj Hx7 Hx8))))))))).
- Time let args := constr:(op9_args_to_bounded xs' Hx0 Hx1 Hx2 Hx3 Hx4 Hx5 Hx6 Hx7 Hx8) in
- admit; t_correct_and_bounded ropZ_sig Hbounds H0 H1 args. (* On 8.6beta1, with ~2 GB RAM, Finished transaction in 46.56 secs (46.372u,0.14s) (successful) *)
-Admitted. (*Time Qed. (* On 8.6beta1, with ~4.3 GB RAM, Finished transaction in 67.652 secs (66.932u,0.64s) (successful) *)*)
diff --git a/src/SpecificGen/GF41417_32Reflective/CommonBinOp.v b/src/SpecificGen/GF41417_32Reflective/CommonBinOp.v
deleted file mode 100644
index 9cf8f3bf6..000000000
--- a/src/SpecificGen/GF41417_32Reflective/CommonBinOp.v
+++ /dev/null
@@ -1,50 +0,0 @@
-Require Export Crypto.SpecificGen.GF41417_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF41417_32BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Lemma ExprBinOp_correct_and_bounded
- ropW op (ropZ_sig : rexpr_binop_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall xy
- (xy := (eta_fe41417_32W (fst xy), eta_fe41417_32W (snd xy)))
- (Hxy : is_bounded (fe41417_32WToZ (fst xy)) = true
- /\ is_bounded (fe41417_32WToZ (snd xy)) = true),
- let Hx := let (Hx, Hy) := Hxy in Hx in
- let Hy := let (Hx, Hy) := Hxy in Hy in
- let args := binop_args_to_bounded xy Hx Hy in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall xy
- (xy := (eta_fe41417_32W (fst xy), eta_fe41417_32W (snd xy)))
- (Hxy : is_bounded (fe41417_32WToZ (fst xy)) = true
- /\ is_bounded (fe41417_32WToZ (snd xy)) = true),
- let Hx := let (Hx, Hy) := Hxy in Hx in
- let Hy := let (Hx, Hy) := Hxy in Hy in
- let args := binop_args_to_bounded (fst xy, snd xy) Hx Hy in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => binop_bounds_good bounds = true
- | None => False
- end)
- : binop_correct_and_bounded ropW op.
-Proof.
- intros xy HxHy.
- pose xy as xy'.
- compute in xy; destruct_head' prod.
- specialize (H0 xy' HxHy).
- specialize (H1 xy' HxHy).
- destruct HxHy as [Hx Hy].
- let args := constr:(binop_args_to_bounded xy' Hx Hy) in
- t_correct_and_bounded ropZ_sig Hbounds H0 H1 args.
-Qed.
diff --git a/src/SpecificGen/GF41417_32Reflective/CommonUnOp.v b/src/SpecificGen/GF41417_32Reflective/CommonUnOp.v
deleted file mode 100644
index 5c369d730..000000000
--- a/src/SpecificGen/GF41417_32Reflective/CommonUnOp.v
+++ /dev/null
@@ -1,43 +0,0 @@
-Require Export Crypto.SpecificGen.GF41417_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF41417_32BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Lemma ExprUnOp_correct_and_bounded
- ropW op (ropZ_sig : rexpr_unop_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall x
- (x := eta_fe41417_32W x)
- (Hx : is_bounded (fe41417_32WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall x
- (x := eta_fe41417_32W x)
- (Hx : is_bounded (fe41417_32WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => unop_bounds_good bounds = true
- | None => False
- end)
- : unop_correct_and_bounded ropW op.
-Proof.
- intros x Hx.
- pose x as x'.
- hnf in x; destruct_head' prod.
- specialize (H0 x' Hx).
- specialize (H1 x' Hx).
- let args := constr:(unop_args_to_bounded x' Hx) in
- t_correct_and_bounded ropZ_sig Hbounds H0 H1 args.
-Qed.
diff --git a/src/SpecificGen/GF41417_32Reflective/CommonUnOpFEToWire.v b/src/SpecificGen/GF41417_32Reflective/CommonUnOpFEToWire.v
deleted file mode 100644
index 312d4439e..000000000
--- a/src/SpecificGen/GF41417_32Reflective/CommonUnOpFEToWire.v
+++ /dev/null
@@ -1,43 +0,0 @@
-Require Export Crypto.SpecificGen.GF41417_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF41417_32BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Lemma ExprUnOpFEToWire_correct_and_bounded
- ropW op (ropZ_sig : rexpr_unop_FEToWire_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall x
- (x := eta_fe41417_32W x)
- (Hx : is_bounded (fe41417_32WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall x
- (x := eta_fe41417_32W x)
- (Hx : is_bounded (fe41417_32WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => unopFEToWire_bounds_good bounds = true
- | None => False
- end)
- : unop_FEToWire_correct_and_bounded ropW op.
-Proof.
- intros x Hx.
- pose x as x'.
- hnf in x; destruct_head' prod.
- specialize (H0 x' Hx).
- specialize (H1 x' Hx).
- let args := constr:(unop_args_to_bounded x' Hx) in
- t_correct_and_bounded ropZ_sig Hbounds H0 H1 args.
-Qed.
diff --git a/src/SpecificGen/GF41417_32Reflective/CommonUnOpFEToZ.v b/src/SpecificGen/GF41417_32Reflective/CommonUnOpFEToZ.v
deleted file mode 100644
index 76fcf7e88..000000000
--- a/src/SpecificGen/GF41417_32Reflective/CommonUnOpFEToZ.v
+++ /dev/null
@@ -1,43 +0,0 @@
-Require Export Crypto.SpecificGen.GF41417_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF41417_32BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Lemma ExprUnOpFEToZ_correct_and_bounded
- ropW op (ropZ_sig : rexpr_unop_FEToZ_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall x
- (x := eta_fe41417_32W x)
- (Hx : is_bounded (fe41417_32WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall x
- (x := eta_fe41417_32W x)
- (Hx : is_bounded (fe41417_32WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => unopFEToZ_bounds_good bounds = true
- | None => False
- end)
- : unop_FEToZ_correct ropW op.
-Proof.
- intros x Hx.
- pose x as x'.
- hnf in x; destruct_head' prod.
- specialize (H0 x' Hx).
- specialize (H1 x' Hx).
- let args := constr:(unop_args_to_bounded x' Hx) in
- t_correct_and_bounded ropZ_sig Hbounds H0 H1 args.
-Qed.
diff --git a/src/SpecificGen/GF41417_32Reflective/CommonUnOpWireToFE.v b/src/SpecificGen/GF41417_32Reflective/CommonUnOpWireToFE.v
deleted file mode 100644
index 553a9583d..000000000
--- a/src/SpecificGen/GF41417_32Reflective/CommonUnOpWireToFE.v
+++ /dev/null
@@ -1,43 +0,0 @@
-Require Export Crypto.SpecificGen.GF41417_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF41417_32BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Lemma ExprUnOpWireToFE_correct_and_bounded
- ropW op (ropZ_sig : rexpr_unop_WireToFE_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall x
- (x := eta_wire_digitsW x)
- (Hx : wire_digits_is_bounded (wire_digitsWToZ x) = true),
- let args := unopWireToFE_args_to_bounded x Hx in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall x
- (x := eta_wire_digitsW x)
- (Hx : wire_digits_is_bounded (wire_digitsWToZ x) = true),
- let args := unopWireToFE_args_to_bounded x Hx in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => unopWireToFE_bounds_good bounds = true
- | None => False
- end)
- : unop_WireToFE_correct_and_bounded ropW op.
-Proof.
- intros x Hx.
- pose x as x'.
- hnf in x; destruct_head' prod.
- specialize (H0 x' Hx).
- specialize (H1 x' Hx).
- let args := constr:(unopWireToFE_args_to_bounded x' Hx) in
- t_correct_and_bounded ropZ_sig Hbounds H0 H1 args.
-Qed.
diff --git a/src/SpecificGen/GF41417_32Reflective/Reified.v b/src/SpecificGen/GF41417_32Reflective/Reified.v
deleted file mode 100644
index ad8291b55..000000000
--- a/src/SpecificGen/GF41417_32Reflective/Reified.v
+++ /dev/null
@@ -1,13 +0,0 @@
-(** We split the reification up into separate files, one operation per
- file, so that it can run in parallel. *)
-Require Export Crypto.SpecificGen.GF41417_32Reflective.Reified.Add.
-Require Export Crypto.SpecificGen.GF41417_32Reflective.Reified.CarryAdd.
-Require Export Crypto.SpecificGen.GF41417_32Reflective.Reified.Sub.
-Require Export Crypto.SpecificGen.GF41417_32Reflective.Reified.CarrySub.
-Require Export Crypto.SpecificGen.GF41417_32Reflective.Reified.Mul.
-Require Export Crypto.SpecificGen.GF41417_32Reflective.Reified.Opp.
-Require Export Crypto.SpecificGen.GF41417_32Reflective.Reified.CarryOpp.
-Require Export Crypto.SpecificGen.GF41417_32Reflective.Reified.PreFreeze.
-Require Export Crypto.SpecificGen.GF41417_32Reflective.Reified.GeModulus.
-Require Export Crypto.SpecificGen.GF41417_32Reflective.Reified.Pack.
-Require Export Crypto.SpecificGen.GF41417_32Reflective.Reified.Unpack.
diff --git a/src/SpecificGen/GF41417_32Reflective/Reified/Add.v b/src/SpecificGen/GF41417_32Reflective/Reified/Add.v
deleted file mode 100644
index ee249b9b1..000000000
--- a/src/SpecificGen/GF41417_32Reflective/Reified/Add.v
+++ /dev/null
@@ -1,12 +0,0 @@
-Require Import Crypto.SpecificGen.GF41417_32Reflective.CommonBinOp.
-
-Definition raddZ_sig : rexpr_binop_sig add. Proof. reify_sig. Defined.
-Definition raddW := Eval vm_compute in rword_of_Z raddZ_sig.
-Lemma raddW_correct_and_bounded_gen : correct_and_bounded_genT raddW raddZ_sig.
-Proof. rexpr_correct. Qed.
-Definition radd_output_bounds := Eval vm_compute in compute_bounds raddW ExprBinOp_bounds.
-
-Local Open Scope string_scope.
-Compute ("Add", compute_bounds_for_display raddW ExprBinOp_bounds).
-Compute ("Add overflows? ", sanity_compute raddW ExprBinOp_bounds).
-Compute ("Add overflows (error if it does)? ", sanity_check raddW ExprBinOp_bounds).
diff --git a/src/SpecificGen/GF41417_32Reflective/Reified/AddCoordinates.v b/src/SpecificGen/GF41417_32Reflective/Reified/AddCoordinates.v
deleted file mode 100644
index 362d69158..000000000
--- a/src/SpecificGen/GF41417_32Reflective/Reified/AddCoordinates.v
+++ /dev/null
@@ -1,183 +0,0 @@
-Require Export Coq.ZArith.ZArith.
-Require Export Coq.Strings.String.
-Require Export Crypto.SpecificGen.GF41417_32.
-Require Export Crypto.SpecificGen.GF41417_32BoundedCommon.
-Require Import Crypto.Reflection.Reify.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Reflection.ExprInversion.
-Require Import Crypto.Reflection.Relations.
-Require Import Crypto.Reflection.Linearize.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Crypto.Reflection.Z.Interpretations64.Relations.
-Require Import Crypto.Reflection.Z.Interpretations64.RelationsCombinations.
-Require Import Crypto.Reflection.Z.Reify.
-Require Export Crypto.Reflection.Z.Syntax.
-Require Import Crypto.Reflection.InterpWfRel.
-Require Import Crypto.Reflection.LinearizeInterp.
-Require Import Crypto.Reflection.WfReflective.
-Require Import Crypto.Reflection.Eta.
-Require Import Crypto.Reflection.EtaInterp.
-Require Import Crypto.CompleteEdwardsCurve.ExtendedCoordinates.
-Require Import Crypto.SpecificGen.GF41417_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF41417_32Reflective.Reified.Add.
-Require Import Crypto.SpecificGen.GF41417_32Reflective.Reified.Sub.
-Require Import Crypto.SpecificGen.GF41417_32Reflective.Reified.Mul.
-Require Import Crypto.SpecificGen.GF41417_32Reflective.Common9_4Op.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.HList.
-Require Import Crypto.Util.Tower.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.Notations.
-Require Import Bedrock.Word.
-
-Definition radd_coordinatesZ' var twice_d P1 P2
- := @Extended.add_coordinates_gen
- _
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig raddZ_sig var)))
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig rsubZ_sig var)))
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig rmulZ_sig var)))
- twice_d _
- (fun x y z w => (x, y, z, w)%expr)
- (fun v f => LetIn v
- (fun k => f (SmartVarf k)))
- P1 P2.
-
-Local Notation eta x := (fst x, snd x).
-
-Definition radd_coordinatesZ'' : Syntax.Expr _ _ _
- := Linearize
- (ExprEta
- (fun var
- => Abs (fun twice_d_P1_P2 : interp_flat_type _ (_ * ((_ * _ * _ * _) * (_ * _ * _ * _)))
- => let '(twice_d, ((P10, P11, P12, P13), (P20, P21, P22, P23)))
- := twice_d_P1_P2 in
- radd_coordinatesZ'
- var (SmartVarf twice_d)
- (SmartVarf P10, SmartVarf P11, SmartVarf P12, SmartVarf P13)
- (SmartVarf P20, SmartVarf P21, SmartVarf P22, SmartVarf P23)))).
-
-Definition add_coordinates
- := fun twice_d P10 P11 P12 P13 P20 P21 P22 P23
- => @Extended.add_coordinates
- _ add sub mul
- twice_d (P10, P11, P12, P13) (P20, P21, P22, P23).
-
-Definition uncurried_add_coordinates
- := fun twice_d_P1_P2
- => let twice_d := fst twice_d_P1_P2 in
- let (P1, P2) := eta (snd twice_d_P1_P2) in
- @Extended.add_coordinates
- _ add sub mul
- twice_d P1 P2.
-
-Local Notation rexpr_sigPf T uncurried_op rexprZ x :=
- (Interp interp_op (t:=T) rexprZ x = uncurried_op x)
- (only parsing).
-Local Notation rexpr_sigP T uncurried_op rexprZ :=
- (forall x, rexpr_sigPf T uncurried_op rexprZ x)
- (only parsing).
-Local Notation rexpr_sig T uncurried_op :=
- { rexprZ | rexpr_sigP T uncurried_op rexprZ }
- (only parsing).
-
-Local Ltac fold_interpf' :=
- let k := (eval unfold interpf, interpf_step in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- change k with k'; clearbody k'; subst k'.
-
-Local Ltac fold_interpf :=
- let k := (eval unfold interpf in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- change k with k'; clearbody k'; subst k';
- fold_interpf'.
-
-Local Ltac repeat_step_interpf :=
- let k := (eval unfold interpf in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- repeat (unfold k'; change k with k'; unfold interpf_step);
- clearbody k'; subst k'.
-
-Lemma radd_coordinatesZ_sigP' : rexpr_sigP _ uncurried_add_coordinates radd_coordinatesZ''.
-Proof.
- cbv [radd_coordinatesZ''].
- intro x; rewrite InterpLinearize, InterpExprEta.
- cbv [domain interp_flat_type] in x.
- destruct x as [twice_d [ [ [ [P10_ P11_] P12_] P13_] [ [ [P20_ P21_] P22_] P23_] ] ].
- repeat match goal with
- | [ H : prod _ _ |- _ ] => let H0 := fresh H in let H1 := fresh H in destruct H as [H0 H1]
- end.
- cbv [invert_Abs domain codomain Interp interp SmartVarf smart_interp_flat_map fst snd].
- cbv [radd_coordinatesZ' add_coordinates Extended.add_coordinates_gen uncurried_add_coordinates SmartVarf smart_interp_flat_map]; simpl @fst; simpl @snd.
- repeat match goal with
- | [ |- appcontext[@proj1_sig ?A ?B ?v] ]
- => let k := fresh "f" in
- let k' := fresh "f" in
- let H := fresh in
- set (k := v);
- set (k' := @proj1_sig A B k);
- pose proof (proj2_sig k) as H;
- change (proj1_sig k) with k' in H;
- clearbody k'; clear k;
- cbv beta in *
- end.
- cbv [Interp Curry.curry2] in *.
- unfold interpf, interpf_step; fold_interpf.
- cbv beta iota delta [Extended.add_coordinates interp_flat_type interp_base_type GF41417_32.fe41417_32].
- Time
- abstract (
- repeat match goal with
- | [ |- (dlet x := ?y in @?z x) = (let x' := ?y' in @?z' x') ]
- => refine ((fun pf0 pf1 => @Proper_Let_In_nd_changebody _ _ Logic.eq _ y y' pf0 z z' pf1)
- (_ : y = y')
- (_ : forall x, z x = z' x));
- cbv beta; intros;
- [ cbv [Let_In] | ]
- end;
- repeat match goal with
- | _ => rewrite !interpf_invert_Abs
- | _ => rewrite_hyp !*
- | [ |- ?x = ?x ] => reflexivity
- | _ => rewrite <- !surjective_pairing
- end
- ).
-Time Defined.
-Lemma radd_coordinatesZ_sigP : rexpr_sigP _ uncurried_add_coordinates radd_coordinatesZ''.
-Proof.
- exact radd_coordinatesZ_sigP'.
-Qed.
-Definition radd_coordinatesZ_sig
- := exist (fun v => rexpr_sigP _ _ v) radd_coordinatesZ'' radd_coordinatesZ_sigP.
-
-Definition radd_coordinates_input_bounds
- := (ExprUnOp_bounds, ((ExprUnOp_bounds, ExprUnOp_bounds, ExprUnOp_bounds, ExprUnOp_bounds),
- (ExprUnOp_bounds, ExprUnOp_bounds, ExprUnOp_bounds, ExprUnOp_bounds))).
-
-Time Definition radd_coordinatesW := Eval vm_compute in rword_of_Z radd_coordinatesZ_sig.
-Lemma radd_coordinatesW_correct_and_bounded_gen : correct_and_bounded_genT radd_coordinatesW radd_coordinatesZ_sig.
-Proof. Time rexpr_correct. Time Qed.
-Definition radd_coordinates_output_bounds := Eval vm_compute in compute_bounds radd_coordinatesW radd_coordinates_input_bounds.
-
-Local Obligation Tactic := intros; vm_compute; constructor.
-
-(*
-Program Definition radd_coordinatesW_correct_and_bounded
- := Expr9_4Op_correct_and_bounded
- radd_coordinatesW uncurried_add_coordinates radd_coordinatesZ_sig radd_coordinatesW_correct_and_bounded_gen
- _ _.
- *)
-
-Local Open Scope string_scope.
-Compute ("Add_Coordinates", compute_bounds_for_display radd_coordinatesW radd_coordinates_input_bounds).
-Compute ("Add_Coordinates overflows? ", sanity_compute radd_coordinatesW radd_coordinates_input_bounds).
-Compute ("Add_Coordinates overflows (error if it does)? ", sanity_check radd_coordinatesW radd_coordinates_input_bounds).
diff --git a/src/SpecificGen/GF41417_32Reflective/Reified/AddDisplay.log b/src/SpecificGen/GF41417_32Reflective/Reified/AddDisplay.log
deleted file mode 100644
index 49066ae98..000000000
--- a/src/SpecificGen/GF41417_32Reflective/Reified/AddDisplay.log
+++ /dev/null
@@ -1,71 +0,0 @@
-raddW =
-fun var : Syntax.base_type -> Type =>
-λ
-x x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20
- x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31 x32 x33 x34 :
- var Syntax.TZ,
-Tbase Syntax.TZ x35 = x + x17;
-Tbase Syntax.TZ x36 = x0 + x18;
-Tbase Syntax.TZ x37 = x1 + x19;
-Tbase Syntax.TZ x38 = x2 + x20;
-Tbase Syntax.TZ x39 = x3 + x21;
-Tbase Syntax.TZ x40 = x4 + x22;
-Tbase Syntax.TZ x41 = x5 + x23;
-Tbase Syntax.TZ x42 = x6 + x24;
-Tbase Syntax.TZ x43 = x7 + x25;
-Tbase Syntax.TZ x44 = x8 + x26;
-Tbase Syntax.TZ x45 = x9 + x27;
-Tbase Syntax.TZ x46 = x10 + x28;
-Tbase Syntax.TZ x47 = x11 + x29;
-Tbase Syntax.TZ x48 = x12 + x30;
-Tbase Syntax.TZ x49 = x13 + x31;
-Tbase Syntax.TZ x50 = x14 + x32;
-Tbase Syntax.TZ x51 = x15 + x33;
-Tbase Syntax.TZ x52 = x16 + x34;
-(Return x35, Return x36, Return x37, Return x38, Return x39,
-Return x40, Return x41, Return x42, Return x43, Return x44,
-Return x45, Return x46, Return x47, Return x48, Return x49,
-Return x50, Return x51, Return x52)
- : forall var : Syntax.base_type -> Type,
- expr Syntax.base_type Syntax.op
- (Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- ... * ... * Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF41417_32Reflective/Reified/AddDisplay.v b/src/SpecificGen/GF41417_32Reflective/Reified/AddDisplay.v
deleted file mode 100644
index fa19e88c0..000000000
--- a/src/SpecificGen/GF41417_32Reflective/Reified/AddDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF41417_32Reflective.Reified.Add.
-Require Export Crypto.Reflection.Z.CNotations.
-
-Print raddW.
diff --git a/src/SpecificGen/GF41417_32Reflective/Reified/AddJavaDisplay.log b/src/SpecificGen/GF41417_32Reflective/Reified/AddJavaDisplay.log
deleted file mode 100644
index 49066ae98..000000000
--- a/src/SpecificGen/GF41417_32Reflective/Reified/AddJavaDisplay.log
+++ /dev/null
@@ -1,71 +0,0 @@
-raddW =
-fun var : Syntax.base_type -> Type =>
-λ
-x x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20
- x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31 x32 x33 x34 :
- var Syntax.TZ,
-Tbase Syntax.TZ x35 = x + x17;
-Tbase Syntax.TZ x36 = x0 + x18;
-Tbase Syntax.TZ x37 = x1 + x19;
-Tbase Syntax.TZ x38 = x2 + x20;
-Tbase Syntax.TZ x39 = x3 + x21;
-Tbase Syntax.TZ x40 = x4 + x22;
-Tbase Syntax.TZ x41 = x5 + x23;
-Tbase Syntax.TZ x42 = x6 + x24;
-Tbase Syntax.TZ x43 = x7 + x25;
-Tbase Syntax.TZ x44 = x8 + x26;
-Tbase Syntax.TZ x45 = x9 + x27;
-Tbase Syntax.TZ x46 = x10 + x28;
-Tbase Syntax.TZ x47 = x11 + x29;
-Tbase Syntax.TZ x48 = x12 + x30;
-Tbase Syntax.TZ x49 = x13 + x31;
-Tbase Syntax.TZ x50 = x14 + x32;
-Tbase Syntax.TZ x51 = x15 + x33;
-Tbase Syntax.TZ x52 = x16 + x34;
-(Return x35, Return x36, Return x37, Return x38, Return x39,
-Return x40, Return x41, Return x42, Return x43, Return x44,
-Return x45, Return x46, Return x47, Return x48, Return x49,
-Return x50, Return x51, Return x52)
- : forall var : Syntax.base_type -> Type,
- expr Syntax.base_type Syntax.op
- (Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- ... * ... * Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF41417_32Reflective/Reified/AddJavaDisplay.v b/src/SpecificGen/GF41417_32Reflective/Reified/AddJavaDisplay.v
deleted file mode 100644
index 57b1e5e15..000000000
--- a/src/SpecificGen/GF41417_32Reflective/Reified/AddJavaDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF41417_32Reflective.Reified.Add.
-Require Export Crypto.Reflection.Z.JavaNotations.
-
-Print raddW.
diff --git a/src/SpecificGen/GF41417_32Reflective/Reified/CarryAdd.v b/src/SpecificGen/GF41417_32Reflective/Reified/CarryAdd.v
deleted file mode 100644
index db3d447ea..000000000
--- a/src/SpecificGen/GF41417_32Reflective/Reified/CarryAdd.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF41417_32Reflective.CommonBinOp.
-
-Definition rcarry_addZ_sig : rexpr_binop_sig carry_add. Proof. reify_sig. Defined.
-Definition rcarry_addW := Eval vm_compute in rword_of_Z rcarry_addZ_sig.
-Lemma rcarry_addW_correct_and_bounded_gen : correct_and_bounded_genT rcarry_addW rcarry_addZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rcarry_add_output_bounds := Eval vm_compute in compute_bounds rcarry_addW ExprBinOp_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rcarry_addW_correct_and_bounded
- := ExprBinOp_correct_and_bounded
- rcarry_addW carry_add rcarry_addZ_sig rcarry_addW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Carry_Add", compute_bounds_for_display rcarry_addW ExprBinOp_bounds).
-Compute ("Carry_Add overflows? ", sanity_compute rcarry_addW ExprBinOp_bounds).
-Compute ("Carry_Add overflows (error if it does)? ", sanity_check rcarry_addW ExprBinOp_bounds).
diff --git a/src/SpecificGen/GF41417_32Reflective/Reified/CarryOpp.v b/src/SpecificGen/GF41417_32Reflective/Reified/CarryOpp.v
deleted file mode 100644
index 9ba6183b9..000000000
--- a/src/SpecificGen/GF41417_32Reflective/Reified/CarryOpp.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF41417_32Reflective.CommonUnOp.
-
-Definition rcarry_oppZ_sig : rexpr_unop_sig carry_opp. Proof. reify_sig. Defined.
-Definition rcarry_oppW := Eval vm_compute in rword_of_Z rcarry_oppZ_sig.
-Lemma rcarry_oppW_correct_and_bounded_gen : correct_and_bounded_genT rcarry_oppW rcarry_oppZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rcarry_opp_output_bounds := Eval vm_compute in compute_bounds rcarry_oppW ExprUnOp_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rcarry_oppW_correct_and_bounded
- := ExprUnOp_correct_and_bounded
- rcarry_oppW carry_opp rcarry_oppZ_sig rcarry_oppW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Carry_Opp", compute_bounds_for_display rcarry_oppW ExprUnOp_bounds).
-Compute ("Carry_Opp overflows? ", sanity_compute rcarry_oppW ExprUnOp_bounds).
-Compute ("Carry_Opp overflows (error if it does)? ", sanity_check rcarry_oppW ExprUnOp_bounds).
diff --git a/src/SpecificGen/GF41417_32Reflective/Reified/CarrySub.v b/src/SpecificGen/GF41417_32Reflective/Reified/CarrySub.v
deleted file mode 100644
index ccd18a264..000000000
--- a/src/SpecificGen/GF41417_32Reflective/Reified/CarrySub.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF41417_32Reflective.CommonBinOp.
-
-Definition rcarry_subZ_sig : rexpr_binop_sig carry_sub. Proof. reify_sig. Defined.
-Definition rcarry_subW := Eval vm_compute in rword_of_Z rcarry_subZ_sig.
-Lemma rcarry_subW_correct_and_bounded_gen : correct_and_bounded_genT rcarry_subW rcarry_subZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rcarry_sub_output_bounds := Eval vm_compute in compute_bounds rcarry_subW ExprBinOp_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rcarry_subW_correct_and_bounded
- := ExprBinOp_correct_and_bounded
- rcarry_subW carry_sub rcarry_subZ_sig rcarry_subW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Carry_Sub", compute_bounds_for_display rcarry_subW ExprBinOp_bounds).
-Compute ("Carry_Sub overflows? ", sanity_compute rcarry_subW ExprBinOp_bounds).
-Compute ("Carry_Sub overflows (error if it does)? ", sanity_check rcarry_subW ExprBinOp_bounds).
diff --git a/src/SpecificGen/GF41417_32Reflective/Reified/GeModulus.v b/src/SpecificGen/GF41417_32Reflective/Reified/GeModulus.v
deleted file mode 100644
index e1985d4c1..000000000
--- a/src/SpecificGen/GF41417_32Reflective/Reified/GeModulus.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF41417_32Reflective.CommonUnOpFEToZ.
-
-Definition rge_modulusZ_sig : rexpr_unop_FEToZ_sig ge_modulus. Proof. reify_sig. Defined.
-Definition rge_modulusW := Eval vm_compute in rword_of_Z rge_modulusZ_sig.
-Lemma rge_modulusW_correct_and_bounded_gen : correct_and_bounded_genT rge_modulusW rge_modulusZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rge_modulus_output_bounds := Eval vm_compute in compute_bounds rge_modulusW ExprUnOpFEToZ_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rge_modulusW_correct_and_bounded
- := ExprUnOpFEToZ_correct_and_bounded
- rge_modulusW ge_modulus rge_modulusZ_sig rge_modulusW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Ge_Modulus", compute_bounds_for_display rge_modulusW ExprUnOpFEToZ_bounds).
-Compute ("Ge_Modulus overflows? ", sanity_compute rge_modulusW ExprUnOpFEToZ_bounds).
-Compute ("Ge_Modulus overflows (error if it does)? ", sanity_check rge_modulusW ExprUnOpFEToZ_bounds).
diff --git a/src/SpecificGen/GF41417_32Reflective/Reified/LadderStep.v b/src/SpecificGen/GF41417_32Reflective/Reified/LadderStep.v
deleted file mode 100644
index 80e929103..000000000
--- a/src/SpecificGen/GF41417_32Reflective/Reified/LadderStep.v
+++ /dev/null
@@ -1,189 +0,0 @@
-Require Export Coq.ZArith.ZArith.
-Require Export Coq.Strings.String.
-Require Export Crypto.SpecificGen.GF41417_32.
-Require Export Crypto.SpecificGen.GF41417_32BoundedCommon.
-Require Import Crypto.Reflection.Reify.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Reflection.Relations.
-Require Import Crypto.Reflection.ExprInversion.
-Require Import Crypto.Reflection.Linearize.
-Require Import Crypto.Reflection.Eta.
-Require Import Crypto.Reflection.EtaInterp.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Crypto.Reflection.Z.Interpretations64.Relations.
-Require Import Crypto.Reflection.Z.Interpretations64.RelationsCombinations.
-Require Import Crypto.Reflection.Z.Reify.
-Require Export Crypto.Reflection.Z.Syntax.
-Require Import Crypto.Reflection.InterpWfRel.
-Require Import Crypto.Reflection.LinearizeInterp.
-Require Import Crypto.Reflection.WfReflective.
-Require Import Crypto.Spec.MxDH.
-Require Import Crypto.SpecificGen.GF41417_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF41417_32Reflective.Reified.Add.
-Require Import Crypto.SpecificGen.GF41417_32Reflective.Reified.Sub.
-Require Import Crypto.SpecificGen.GF41417_32Reflective.Reified.Mul.
-Require Import Crypto.SpecificGen.GF41417_32Reflective.Common9_4Op.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.HList.
-Require Import Crypto.Util.Tower.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.Notations.
-Require Import Bedrock.Word.
-
-Definition rladderstepZ' var (T:=_) (a24 x0 : T) P1 P2
- := @MxDH.ladderstep_gen
- _
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig raddZ_sig var)))
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig rsubZ_sig var)))
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig rmulZ_sig var)))
- a24
- _
- (fun x y z w => (x, y, z, w)%expr)
- (fun v f => LetIn v
- (fun k => f (SmartVarf k)))
- x0
- P1 P2.
-
-Definition rladderstepZ'' : Syntax.Expr _ _ _
- := Linearize
- (ExprEta
- (fun var
- => Abs (fun a24_x0_P1_P2 : interp_flat_type _ (_ * _ * ((_ * _) * (_ * _)))
- => let '(a24, x0, ((P10, P11), (P20, P21)))
- := a24_x0_P1_P2 in
- rladderstepZ'
- var (SmartVarf a24) (SmartVarf x0)
- (SmartVarf P10, SmartVarf P11)
- (SmartVarf P20, SmartVarf P21)))).
-
-Local Notation eta x := (fst x, snd x).
-
-Definition ladderstep_other_assoc {F Fadd Fsub Fmul} a24 (X1:F) (P1 P2:F*F) : F*F*F*F :=
- Eval cbv beta delta [MxDH.ladderstep_gen] in
- @MxDH.ladderstep_gen
- F Fadd Fsub Fmul a24
- (F*F*F*F)
- (fun X3 Y3 Z3 T3 => (X3, Y3, Z3, T3))
- (fun x f => dlet y := x in f y)
- X1 P1 P2.
-
-Definition uncurried_ladderstep
- := fun (a24_x0_P1_P2 : _ * _ * ((_ * _) * (_ * _)))
- => let a24 := fst (fst a24_x0_P1_P2) in
- let x0 := snd (fst a24_x0_P1_P2) in
- let '(P1, P2) := eta (snd a24_x0_P1_P2) in
- let '((P10, P11), (P20, P21)) := (eta P1, eta P2) in
- @ladderstep_other_assoc
- _ add sub mul
- a24 x0 (P10, P11) (P20, P21).
-
-Local Notation rexpr_sigPf T uncurried_op rexprZ x :=
- (Interp interp_op (t:=T) rexprZ x = uncurried_op x)
- (only parsing).
-Local Notation rexpr_sigP T uncurried_op rexprZ :=
- (forall x, rexpr_sigPf T uncurried_op rexprZ x)
- (only parsing).
-Local Notation rexpr_sig T uncurried_op :=
- { rexprZ | rexpr_sigP T uncurried_op rexprZ }
- (only parsing).
-
-Local Ltac fold_interpf' :=
- let k := (eval unfold interpf, interpf_step in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- change k with k'; clearbody k'; subst k'.
-
-Local Ltac fold_interpf :=
- let k := (eval unfold interpf in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- change k with k'; clearbody k'; subst k';
- fold_interpf'.
-
-Local Ltac repeat_step_interpf :=
- let k := (eval unfold interpf in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- repeat (unfold interpf_step at 1; change k with k' at 1);
- clearbody k'; subst k'.
-
-Lemma rladderstepZ_sigP' : rexpr_sigP _ uncurried_ladderstep rladderstepZ''.
-Proof.
- cbv [rladderstepZ''].
- intro x; rewrite InterpLinearize, InterpExprEta.
- cbv [domain interp_flat_type interp_base_type] in x.
- destruct_head' prod.
- cbv [invert_Abs domain codomain Interp interp SmartVarf smart_interp_flat_map fst snd].
- cbv [rladderstepZ' MxDH.ladderstep_gen uncurried_ladderstep SmartVarf smart_interp_flat_map]; simpl @fst; simpl @snd.
- repeat match goal with
- | [ |- appcontext[@proj1_sig ?A ?B ?v] ]
- => let k := fresh "f" in
- let k' := fresh "f" in
- let H := fresh in
- set (k := v);
- set (k' := @proj1_sig A B k);
- pose proof (proj2_sig k) as H;
- change (proj1_sig k) with k' in H;
- clearbody k'; clear k;
- cbv beta in *
- end.
- cbv [Interp Curry.curry2] in *.
- unfold interpf, interpf_step; fold_interpf.
- cbv [ladderstep_other_assoc interp_flat_type GF41417_32.fe41417_32].
- Time
- abstract (
- repeat match goal with
- | [ |- (dlet x := ?y in @?z x) = (dlet x' := ?y' in @?z' x') ]
- => refine ((fun pf0 pf1 => @Proper_Let_In_nd_changebody _ _ Logic.eq _ y y' pf0 z z' pf1)
- (_ : y = y')
- (_ : forall x, z x = z' x));
- cbv beta; intros;
- [ cbv [Let_In Common.ExprBinOpT] | ]
- end;
- repeat match goal with
- | _ => rewrite !interpf_invert_Abs
- | _ => rewrite_hyp !*
- | _ => progress cbv [interp_base_type]
- | [ |- ?x = ?x ] => reflexivity
- | _ => rewrite <- !surjective_pairing
- end
- ).
-Time Defined.
-Lemma rladderstepZ_sigP : rexpr_sigP _ uncurried_ladderstep rladderstepZ''.
-Proof.
- exact rladderstepZ_sigP'.
-Qed.
-Definition rladderstepZ_sig
- := exist (fun v => rexpr_sigP _ _ v) rladderstepZ'' rladderstepZ_sigP.
-
-Definition rladderstep_input_bounds
- := (ExprUnOp_bounds, ExprUnOp_bounds,
- ((ExprUnOp_bounds, ExprUnOp_bounds),
- (ExprUnOp_bounds, ExprUnOp_bounds))).
-
-Time Definition rladderstepW := Eval vm_compute in rword_of_Z rladderstepZ_sig.
-Lemma rladderstepW_correct_and_bounded_gen : correct_and_bounded_genT rladderstepW rladderstepZ_sig.
-Proof. Time rexpr_correct. Time Qed.
-Definition rladderstep_output_bounds := Eval vm_compute in compute_bounds rladderstepW rladderstep_input_bounds.
-
-Local Obligation Tactic := intros; vm_compute; constructor.
-
-(*
-Program Definition rladderstepW_correct_and_bounded
- := Expr9_4Op_correct_and_bounded
- rladderstepW uncurried_ladderstep rladderstepZ_sig rladderstepW_correct_and_bounded_gen
- _ _.
- *)
-
-Local Open Scope string_scope.
-Compute ("Ladderstep", compute_bounds_for_display rladderstepW rladderstep_input_bounds).
-Compute ("Ladderstep overflows? ", sanity_compute rladderstepW rladderstep_input_bounds).
-Compute ("Ladderstep overflows (error if it does)? ", sanity_check rladderstepW rladderstep_input_bounds).
diff --git a/src/SpecificGen/GF41417_32Reflective/Reified/LadderStepDisplay.log b/src/SpecificGen/GF41417_32Reflective/Reified/LadderStepDisplay.log
deleted file mode 100644
index d90416368..000000000
--- a/src/SpecificGen/GF41417_32Reflective/Reified/LadderStepDisplay.log
+++ /dev/null
@@ -1,8091 +0,0 @@
-rladderstepW =
-fun var : base_type -> Type =>
-λ
-_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ x53 x54 x55 x56 x57 x58 x59 x60 x61 x62 x63
- x64 x65 x66 x67 x68 x69 x70 x71 x72 x73 x74 x75 x76 x77 x78 x79 x80 x81 x82
- x83 x84 x85 x86 x87 x88 x89 x90 x91 x92 x93 x94 x95 x96 x97 x98 x99 x100
- x101 x102 x103 x104 x105 x106 x107 x108 x109 x110 x111 x112 x113 x114 x115
- x116 x117 x118 x119 x120 x121 x122 x123 x124 x125 x126 x127 x128 x129 x130
- x131 x132 x133 x134 x135 x136 x137 x138 x139 x140 x141 x142 x143 x144 x145
- x146 x147 x148 x149 x150 x151 x152 x153 x154 x155 x156 x157 x158 x159
- x160 : var TZ,
-Tbase TZ x161 = x89 + x107;
-Tbase TZ x162 = x90 + x108;
-Tbase TZ x163 = x91 + x109;
-Tbase TZ x164 = x92 + x110;
-Tbase TZ x165 = x93 + x111;
-Tbase TZ x166 = x94 + x112;
-Tbase TZ x167 = x95 + x113;
-Tbase TZ x168 = x96 + x114;
-Tbase TZ x169 = x97 + x115;
-Tbase TZ x170 = x98 + x116;
-Tbase TZ x171 = x99 + x117;
-Tbase TZ x172 = x100 + x118;
-Tbase TZ x173 = x101 + x119;
-Tbase TZ x174 = x102 + x120;
-Tbase TZ x175 = x103 + x121;
-Tbase TZ x176 = x104 + x122;
-Tbase TZ x177 = x105 + x123;
-Tbase TZ x178 = x106 + x124;
-Tbase TZ x179 = x178 * x178;
-Tbase TZ x180 = x161 * x177;
-Tbase TZ x181 = x162 * x176;
-Tbase TZ x182 = x163 * x175;
-Tbase TZ x183 = x164 * x174;
-Tbase TZ x184 = x165 * x173;
-Tbase TZ x185 = x166 * x172;
-Tbase TZ x186 = x167 * x171;
-Tbase TZ x187 = x168 * x170;
-Tbase TZ x188 = x169 * x169;
-Tbase TZ x189 = x170 * x168;
-Tbase TZ x190 = x171 * x167;
-Tbase TZ x191 = x172 * x166;
-Tbase TZ x192 = x173 * x165;
-Tbase TZ x193 = x174 * x164;
-Tbase TZ x194 = x175 * x163;
-Tbase TZ x195 = x176 * x162;
-Tbase TZ x196 = x177 * x161;
-Tbase TZ x197 = x195 + x196;
-Tbase TZ x198 = x194 + x197;
-Tbase TZ x199 = x193 + x198;
-Tbase TZ x200 = x192 + x199;
-Tbase TZ x201 = x191 + x200;
-Tbase TZ x202 = x190 + x201;
-Tbase TZ x203 = x189 + x202;
-Tbase TZ x204 = x188 + x203;
-Tbase TZ x205 = x187 + x204;
-Tbase TZ x206 = x186 + x205;
-Tbase TZ x207 = x185 + x206;
-Tbase TZ x208 = x184 + x207;
-Tbase TZ x209 = x183 + x208;
-Tbase TZ x210 = x182 + x209;
-Tbase TZ x211 = x181 + x210;
-Tbase TZ x212 = x180 + x211;
-Tbase TZ x213 = 0x11;
-Tbase TZ x214 = x213 * x212;
-Tbase TZ x215 = x179 + x214;
-Tbase TZ x216 = 0x17;
-Tbase TZ x217 = x215 >> x216;
-Tbase TZ x218 = x177 * x178;
-Tbase TZ x219 = x178 * x177;
-Tbase TZ x220 = x218 + x219;
-Tbase TZ x221 = x161 * x176;
-Tbase TZ x222 = x162 * x175;
-Tbase TZ x223 = x163 * x174;
-Tbase TZ x224 = x164 * x173;
-Tbase TZ x225 = x165 * x172;
-Tbase TZ x226 = x166 * x171;
-Tbase TZ x227 = x167 * x170;
-Tbase TZ x228 = x168 * x169;
-Tbase TZ x229 = x169 * x168;
-Tbase TZ x230 = x170 * x167;
-Tbase TZ x231 = x171 * x166;
-Tbase TZ x232 = x172 * x165;
-Tbase TZ x233 = x173 * x164;
-Tbase TZ x234 = x174 * x163;
-Tbase TZ x235 = x175 * x162;
-Tbase TZ x236 = x176 * x161;
-Tbase TZ x237 = x235 + x236;
-Tbase TZ x238 = x234 + x237;
-Tbase TZ x239 = x233 + x238;
-Tbase TZ x240 = x232 + x239;
-Tbase TZ x241 = x231 + x240;
-Tbase TZ x242 = x230 + x241;
-Tbase TZ x243 = x229 + x242;
-Tbase TZ x244 = x228 + x243;
-Tbase TZ x245 = x227 + x244;
-Tbase TZ x246 = x226 + x245;
-Tbase TZ x247 = x225 + x246;
-Tbase TZ x248 = x224 + x247;
-Tbase TZ x249 = x223 + x248;
-Tbase TZ x250 = x222 + x249;
-Tbase TZ x251 = x221 + x250;
-Tbase TZ x252 = 0x11;
-Tbase TZ x253 = x252 * x251;
-Tbase TZ x254 = x220 + x253;
-Tbase TZ x255 = x217 + x254;
-Tbase TZ x256 = 0x17;
-Tbase TZ x257 = x255 >> x256;
-Tbase TZ x258 = x176 * x178;
-Tbase TZ x259 = x177 * x177;
-Tbase TZ x260 = x178 * x176;
-Tbase TZ x261 = x259 + x260;
-Tbase TZ x262 = x258 + x261;
-Tbase TZ x263 = x161 * x175;
-Tbase TZ x264 = x162 * x174;
-Tbase TZ x265 = x163 * x173;
-Tbase TZ x266 = x164 * x172;
-Tbase TZ x267 = x165 * x171;
-Tbase TZ x268 = x166 * x170;
-Tbase TZ x269 = x167 * x169;
-Tbase TZ x270 = x168 * x168;
-Tbase TZ x271 = x169 * x167;
-Tbase TZ x272 = x170 * x166;
-Tbase TZ x273 = x171 * x165;
-Tbase TZ x274 = x172 * x164;
-Tbase TZ x275 = x173 * x163;
-Tbase TZ x276 = x174 * x162;
-Tbase TZ x277 = x175 * x161;
-Tbase TZ x278 = x276 + x277;
-Tbase TZ x279 = x275 + x278;
-Tbase TZ x280 = x274 + x279;
-Tbase TZ x281 = x273 + x280;
-Tbase TZ x282 = x272 + x281;
-Tbase TZ x283 = x271 + x282;
-Tbase TZ x284 = x270 + x283;
-Tbase TZ x285 = x269 + x284;
-Tbase TZ x286 = x268 + x285;
-Tbase TZ x287 = x267 + x286;
-Tbase TZ x288 = x266 + x287;
-Tbase TZ x289 = x265 + x288;
-Tbase TZ x290 = x264 + x289;
-Tbase TZ x291 = x263 + x290;
-Tbase TZ x292 = 0x11;
-Tbase TZ x293 = x292 * x291;
-Tbase TZ x294 = x262 + x293;
-Tbase TZ x295 = x257 + x294;
-Tbase TZ x296 = 0x17;
-Tbase TZ x297 = x295 >> x296;
-Tbase TZ x298 = x175 * x178;
-Tbase TZ x299 = x176 * x177;
-Tbase TZ x300 = x177 * x176;
-Tbase TZ x301 = x178 * x175;
-Tbase TZ x302 = x300 + x301;
-Tbase TZ x303 = x299 + x302;
-Tbase TZ x304 = x298 + x303;
-Tbase TZ x305 = x161 * x174;
-Tbase TZ x306 = x162 * x173;
-Tbase TZ x307 = x163 * x172;
-Tbase TZ x308 = x164 * x171;
-Tbase TZ x309 = x165 * x170;
-Tbase TZ x310 = x166 * x169;
-Tbase TZ x311 = x167 * x168;
-Tbase TZ x312 = x168 * x167;
-Tbase TZ x313 = x169 * x166;
-Tbase TZ x314 = x170 * x165;
-Tbase TZ x315 = x171 * x164;
-Tbase TZ x316 = x172 * x163;
-Tbase TZ x317 = x173 * x162;
-Tbase TZ x318 = x174 * x161;
-Tbase TZ x319 = x317 + x318;
-Tbase TZ x320 = x316 + x319;
-Tbase TZ x321 = x315 + x320;
-Tbase TZ x322 = x314 + x321;
-Tbase TZ x323 = x313 + x322;
-Tbase TZ x324 = x312 + x323;
-Tbase TZ x325 = x311 + x324;
-Tbase TZ x326 = x310 + x325;
-Tbase TZ x327 = x309 + x326;
-Tbase TZ x328 = x308 + x327;
-Tbase TZ x329 = x307 + x328;
-Tbase TZ x330 = x306 + x329;
-Tbase TZ x331 = x305 + x330;
-Tbase TZ x332 = 0x11;
-Tbase TZ x333 = x332 * x331;
-Tbase TZ x334 = x304 + x333;
-Tbase TZ x335 = x297 + x334;
-Tbase TZ x336 = 0x17;
-Tbase TZ x337 = x335 >> x336;
-Tbase TZ x338 = x174 * x178;
-Tbase TZ x339 = x175 * x177;
-Tbase TZ x340 = x176 * x176;
-Tbase TZ x341 = x177 * x175;
-Tbase TZ x342 = x178 * x174;
-Tbase TZ x343 = x341 + x342;
-Tbase TZ x344 = x340 + x343;
-Tbase TZ x345 = x339 + x344;
-Tbase TZ x346 = x338 + x345;
-Tbase TZ x347 = x161 * x173;
-Tbase TZ x348 = x162 * x172;
-Tbase TZ x349 = x163 * x171;
-Tbase TZ x350 = x164 * x170;
-Tbase TZ x351 = x165 * x169;
-Tbase TZ x352 = x166 * x168;
-Tbase TZ x353 = x167 * x167;
-Tbase TZ x354 = x168 * x166;
-Tbase TZ x355 = x169 * x165;
-Tbase TZ x356 = x170 * x164;
-Tbase TZ x357 = x171 * x163;
-Tbase TZ x358 = x172 * x162;
-Tbase TZ x359 = x173 * x161;
-Tbase TZ x360 = x358 + x359;
-Tbase TZ x361 = x357 + x360;
-Tbase TZ x362 = x356 + x361;
-Tbase TZ x363 = x355 + x362;
-Tbase TZ x364 = x354 + x363;
-Tbase TZ x365 = x353 + x364;
-Tbase TZ x366 = x352 + x365;
-Tbase TZ x367 = x351 + x366;
-Tbase TZ x368 = x350 + x367;
-Tbase TZ x369 = x349 + x368;
-Tbase TZ x370 = x348 + x369;
-Tbase TZ x371 = x347 + x370;
-Tbase TZ x372 = 0x11;
-Tbase TZ x373 = x372 * x371;
-Tbase TZ x374 = x346 + x373;
-Tbase TZ x375 = x337 + x374;
-Tbase TZ x376 = 0x17;
-Tbase TZ x377 = x375 >> x376;
-Tbase TZ x378 = x173 * x178;
-Tbase TZ x379 = x174 * x177;
-Tbase TZ x380 = x175 * x176;
-Tbase TZ x381 = x176 * x175;
-Tbase TZ x382 = x177 * x174;
-Tbase TZ x383 = x178 * x173;
-Tbase TZ x384 = x382 + x383;
-Tbase TZ x385 = x381 + x384;
-Tbase TZ x386 = x380 + x385;
-Tbase TZ x387 = x379 + x386;
-Tbase TZ x388 = x378 + x387;
-Tbase TZ x389 = x161 * x172;
-Tbase TZ x390 = x162 * x171;
-Tbase TZ x391 = x163 * x170;
-Tbase TZ x392 = x164 * x169;
-Tbase TZ x393 = x165 * x168;
-Tbase TZ x394 = x166 * x167;
-Tbase TZ x395 = x167 * x166;
-Tbase TZ x396 = x168 * x165;
-Tbase TZ x397 = x169 * x164;
-Tbase TZ x398 = x170 * x163;
-Tbase TZ x399 = x171 * x162;
-Tbase TZ x400 = x172 * x161;
-Tbase TZ x401 = x399 + x400;
-Tbase TZ x402 = x398 + x401;
-Tbase TZ x403 = x397 + x402;
-Tbase TZ x404 = x396 + x403;
-Tbase TZ x405 = x395 + x404;
-Tbase TZ x406 = x394 + x405;
-Tbase TZ x407 = x393 + x406;
-Tbase TZ x408 = x392 + x407;
-Tbase TZ x409 = x391 + x408;
-Tbase TZ x410 = x390 + x409;
-Tbase TZ x411 = x389 + x410;
-Tbase TZ x412 = 0x11;
-Tbase TZ x413 = x412 * x411;
-Tbase TZ x414 = x388 + x413;
-Tbase TZ x415 = x377 + x414;
-Tbase TZ x416 = 0x17;
-Tbase TZ x417 = x415 >> x416;
-Tbase TZ x418 = x172 * x178;
-Tbase TZ x419 = x173 * x177;
-Tbase TZ x420 = x174 * x176;
-Tbase TZ x421 = x175 * x175;
-Tbase TZ x422 = x176 * x174;
-Tbase TZ x423 = x177 * x173;
-Tbase TZ x424 = x178 * x172;
-Tbase TZ x425 = x423 + x424;
-Tbase TZ x426 = x422 + x425;
-Tbase TZ x427 = x421 + x426;
-Tbase TZ x428 = x420 + x427;
-Tbase TZ x429 = x419 + x428;
-Tbase TZ x430 = x418 + x429;
-Tbase TZ x431 = x161 * x171;
-Tbase TZ x432 = x162 * x170;
-Tbase TZ x433 = x163 * x169;
-Tbase TZ x434 = x164 * x168;
-Tbase TZ x435 = x165 * x167;
-Tbase TZ x436 = x166 * x166;
-Tbase TZ x437 = x167 * x165;
-Tbase TZ x438 = x168 * x164;
-Tbase TZ x439 = x169 * x163;
-Tbase TZ x440 = x170 * x162;
-Tbase TZ x441 = x171 * x161;
-Tbase TZ x442 = x440 + x441;
-Tbase TZ x443 = x439 + x442;
-Tbase TZ x444 = x438 + x443;
-Tbase TZ x445 = x437 + x444;
-Tbase TZ x446 = x436 + x445;
-Tbase TZ x447 = x435 + x446;
-Tbase TZ x448 = x434 + x447;
-Tbase TZ x449 = x433 + x448;
-Tbase TZ x450 = x432 + x449;
-Tbase TZ x451 = x431 + x450;
-Tbase TZ x452 = 0x11;
-Tbase TZ x453 = x452 * x451;
-Tbase TZ x454 = x430 + x453;
-Tbase TZ x455 = x417 + x454;
-Tbase TZ x456 = 0x17;
-Tbase TZ x457 = x455 >> x456;
-Tbase TZ x458 = x171 * x178;
-Tbase TZ x459 = x172 * x177;
-Tbase TZ x460 = x173 * x176;
-Tbase TZ x461 = x174 * x175;
-Tbase TZ x462 = x175 * x174;
-Tbase TZ x463 = x176 * x173;
-Tbase TZ x464 = x177 * x172;
-Tbase TZ x465 = x178 * x171;
-Tbase TZ x466 = x464 + x465;
-Tbase TZ x467 = x463 + x466;
-Tbase TZ x468 = x462 + x467;
-Tbase TZ x469 = x461 + x468;
-Tbase TZ x470 = x460 + x469;
-Tbase TZ x471 = x459 + x470;
-Tbase TZ x472 = x458 + x471;
-Tbase TZ x473 = x161 * x170;
-Tbase TZ x474 = x162 * x169;
-Tbase TZ x475 = x163 * x168;
-Tbase TZ x476 = x164 * x167;
-Tbase TZ x477 = x165 * x166;
-Tbase TZ x478 = x166 * x165;
-Tbase TZ x479 = x167 * x164;
-Tbase TZ x480 = x168 * x163;
-Tbase TZ x481 = x169 * x162;
-Tbase TZ x482 = x170 * x161;
-Tbase TZ x483 = x481 + x482;
-Tbase TZ x484 = x480 + x483;
-Tbase TZ x485 = x479 + x484;
-Tbase TZ x486 = x478 + x485;
-Tbase TZ x487 = x477 + x486;
-Tbase TZ x488 = x476 + x487;
-Tbase TZ x489 = x475 + x488;
-Tbase TZ x490 = x474 + x489;
-Tbase TZ x491 = x473 + x490;
-Tbase TZ x492 = 0x11;
-Tbase TZ x493 = x492 * x491;
-Tbase TZ x494 = x472 + x493;
-Tbase TZ x495 = x457 + x494;
-Tbase TZ x496 = 0x17;
-Tbase TZ x497 = x495 >> x496;
-Tbase TZ x498 = x170 * x178;
-Tbase TZ x499 = x171 * x177;
-Tbase TZ x500 = x172 * x176;
-Tbase TZ x501 = x173 * x175;
-Tbase TZ x502 = x174 * x174;
-Tbase TZ x503 = x175 * x173;
-Tbase TZ x504 = x176 * x172;
-Tbase TZ x505 = x177 * x171;
-Tbase TZ x506 = x178 * x170;
-Tbase TZ x507 = x505 + x506;
-Tbase TZ x508 = x504 + x507;
-Tbase TZ x509 = x503 + x508;
-Tbase TZ x510 = x502 + x509;
-Tbase TZ x511 = x501 + x510;
-Tbase TZ x512 = x500 + x511;
-Tbase TZ x513 = x499 + x512;
-Tbase TZ x514 = x498 + x513;
-Tbase TZ x515 = x161 * x169;
-Tbase TZ x516 = x162 * x168;
-Tbase TZ x517 = x163 * x167;
-Tbase TZ x518 = x164 * x166;
-Tbase TZ x519 = x165 * x165;
-Tbase TZ x520 = x166 * x164;
-Tbase TZ x521 = x167 * x163;
-Tbase TZ x522 = x168 * x162;
-Tbase TZ x523 = x169 * x161;
-Tbase TZ x524 = x522 + x523;
-Tbase TZ x525 = x521 + x524;
-Tbase TZ x526 = x520 + x525;
-Tbase TZ x527 = x519 + x526;
-Tbase TZ x528 = x518 + x527;
-Tbase TZ x529 = x517 + x528;
-Tbase TZ x530 = x516 + x529;
-Tbase TZ x531 = x515 + x530;
-Tbase TZ x532 = 0x11;
-Tbase TZ x533 = x532 * x531;
-Tbase TZ x534 = x514 + x533;
-Tbase TZ x535 = x497 + x534;
-Tbase TZ x536 = 0x17;
-Tbase TZ x537 = x535 >> x536;
-Tbase TZ x538 = x169 * x178;
-Tbase TZ x539 = x170 * x177;
-Tbase TZ x540 = x171 * x176;
-Tbase TZ x541 = x172 * x175;
-Tbase TZ x542 = x173 * x174;
-Tbase TZ x543 = x174 * x173;
-Tbase TZ x544 = x175 * x172;
-Tbase TZ x545 = x176 * x171;
-Tbase TZ x546 = x177 * x170;
-Tbase TZ x547 = x178 * x169;
-Tbase TZ x548 = x546 + x547;
-Tbase TZ x549 = x545 + x548;
-Tbase TZ x550 = x544 + x549;
-Tbase TZ x551 = x543 + x550;
-Tbase TZ x552 = x542 + x551;
-Tbase TZ x553 = x541 + x552;
-Tbase TZ x554 = x540 + x553;
-Tbase TZ x555 = x539 + x554;
-Tbase TZ x556 = x538 + x555;
-Tbase TZ x557 = x161 * x168;
-Tbase TZ x558 = x162 * x167;
-Tbase TZ x559 = x163 * x166;
-Tbase TZ x560 = x164 * x165;
-Tbase TZ x561 = x165 * x164;
-Tbase TZ x562 = x166 * x163;
-Tbase TZ x563 = x167 * x162;
-Tbase TZ x564 = x168 * x161;
-Tbase TZ x565 = x563 + x564;
-Tbase TZ x566 = x562 + x565;
-Tbase TZ x567 = x561 + x566;
-Tbase TZ x568 = x560 + x567;
-Tbase TZ x569 = x559 + x568;
-Tbase TZ x570 = x558 + x569;
-Tbase TZ x571 = x557 + x570;
-Tbase TZ x572 = 0x11;
-Tbase TZ x573 = x572 * x571;
-Tbase TZ x574 = x556 + x573;
-Tbase TZ x575 = x537 + x574;
-Tbase TZ x576 = 0x17;
-Tbase TZ x577 = x575 >> x576;
-Tbase TZ x578 = x168 * x178;
-Tbase TZ x579 = x169 * x177;
-Tbase TZ x580 = x170 * x176;
-Tbase TZ x581 = x171 * x175;
-Tbase TZ x582 = x172 * x174;
-Tbase TZ x583 = x173 * x173;
-Tbase TZ x584 = x174 * x172;
-Tbase TZ x585 = x175 * x171;
-Tbase TZ x586 = x176 * x170;
-Tbase TZ x587 = x177 * x169;
-Tbase TZ x588 = x178 * x168;
-Tbase TZ x589 = x587 + x588;
-Tbase TZ x590 = x586 + x589;
-Tbase TZ x591 = x585 + x590;
-Tbase TZ x592 = x584 + x591;
-Tbase TZ x593 = x583 + x592;
-Tbase TZ x594 = x582 + x593;
-Tbase TZ x595 = x581 + x594;
-Tbase TZ x596 = x580 + x595;
-Tbase TZ x597 = x579 + x596;
-Tbase TZ x598 = x578 + x597;
-Tbase TZ x599 = x161 * x167;
-Tbase TZ x600 = x162 * x166;
-Tbase TZ x601 = x163 * x165;
-Tbase TZ x602 = x164 * x164;
-Tbase TZ x603 = x165 * x163;
-Tbase TZ x604 = x166 * x162;
-Tbase TZ x605 = x167 * x161;
-Tbase TZ x606 = x604 + x605;
-Tbase TZ x607 = x603 + x606;
-Tbase TZ x608 = x602 + x607;
-Tbase TZ x609 = x601 + x608;
-Tbase TZ x610 = x600 + x609;
-Tbase TZ x611 = x599 + x610;
-Tbase TZ x612 = 0x11;
-Tbase TZ x613 = x612 * x611;
-Tbase TZ x614 = x598 + x613;
-Tbase TZ x615 = x577 + x614;
-Tbase TZ x616 = 0x17;
-Tbase TZ x617 = x615 >> x616;
-Tbase TZ x618 = x167 * x178;
-Tbase TZ x619 = x168 * x177;
-Tbase TZ x620 = x169 * x176;
-Tbase TZ x621 = x170 * x175;
-Tbase TZ x622 = x171 * x174;
-Tbase TZ x623 = x172 * x173;
-Tbase TZ x624 = x173 * x172;
-Tbase TZ x625 = x174 * x171;
-Tbase TZ x626 = x175 * x170;
-Tbase TZ x627 = x176 * x169;
-Tbase TZ x628 = x177 * x168;
-Tbase TZ x629 = x178 * x167;
-Tbase TZ x630 = x628 + x629;
-Tbase TZ x631 = x627 + x630;
-Tbase TZ x632 = x626 + x631;
-Tbase TZ x633 = x625 + x632;
-Tbase TZ x634 = x624 + x633;
-Tbase TZ x635 = x623 + x634;
-Tbase TZ x636 = x622 + x635;
-Tbase TZ x637 = x621 + x636;
-Tbase TZ x638 = x620 + x637;
-Tbase TZ x639 = x619 + x638;
-Tbase TZ x640 = x618 + x639;
-Tbase TZ x641 = x161 * x166;
-Tbase TZ x642 = x162 * x165;
-Tbase TZ x643 = x163 * x164;
-Tbase TZ x644 = x164 * x163;
-Tbase TZ x645 = x165 * x162;
-Tbase TZ x646 = x166 * x161;
-Tbase TZ x647 = x645 + x646;
-Tbase TZ x648 = x644 + x647;
-Tbase TZ x649 = x643 + x648;
-Tbase TZ x650 = x642 + x649;
-Tbase TZ x651 = x641 + x650;
-Tbase TZ x652 = 0x11;
-Tbase TZ x653 = x652 * x651;
-Tbase TZ x654 = x640 + x653;
-Tbase TZ x655 = x617 + x654;
-Tbase TZ x656 = 0x17;
-Tbase TZ x657 = x655 >> x656;
-Tbase TZ x658 = x166 * x178;
-Tbase TZ x659 = x167 * x177;
-Tbase TZ x660 = x168 * x176;
-Tbase TZ x661 = x169 * x175;
-Tbase TZ x662 = x170 * x174;
-Tbase TZ x663 = x171 * x173;
-Tbase TZ x664 = x172 * x172;
-Tbase TZ x665 = x173 * x171;
-Tbase TZ x666 = x174 * x170;
-Tbase TZ x667 = x175 * x169;
-Tbase TZ x668 = x176 * x168;
-Tbase TZ x669 = x177 * x167;
-Tbase TZ x670 = x178 * x166;
-Tbase TZ x671 = x669 + x670;
-Tbase TZ x672 = x668 + x671;
-Tbase TZ x673 = x667 + x672;
-Tbase TZ x674 = x666 + x673;
-Tbase TZ x675 = x665 + x674;
-Tbase TZ x676 = x664 + x675;
-Tbase TZ x677 = x663 + x676;
-Tbase TZ x678 = x662 + x677;
-Tbase TZ x679 = x661 + x678;
-Tbase TZ x680 = x660 + x679;
-Tbase TZ x681 = x659 + x680;
-Tbase TZ x682 = x658 + x681;
-Tbase TZ x683 = x161 * x165;
-Tbase TZ x684 = x162 * x164;
-Tbase TZ x685 = x163 * x163;
-Tbase TZ x686 = x164 * x162;
-Tbase TZ x687 = x165 * x161;
-Tbase TZ x688 = x686 + x687;
-Tbase TZ x689 = x685 + x688;
-Tbase TZ x690 = x684 + x689;
-Tbase TZ x691 = x683 + x690;
-Tbase TZ x692 = 0x11;
-Tbase TZ x693 = x692 * x691;
-Tbase TZ x694 = x682 + x693;
-Tbase TZ x695 = x657 + x694;
-Tbase TZ x696 = 0x17;
-Tbase TZ x697 = x695 >> x696;
-Tbase TZ x698 = x165 * x178;
-Tbase TZ x699 = x166 * x177;
-Tbase TZ x700 = x167 * x176;
-Tbase TZ x701 = x168 * x175;
-Tbase TZ x702 = x169 * x174;
-Tbase TZ x703 = x170 * x173;
-Tbase TZ x704 = x171 * x172;
-Tbase TZ x705 = x172 * x171;
-Tbase TZ x706 = x173 * x170;
-Tbase TZ x707 = x174 * x169;
-Tbase TZ x708 = x175 * x168;
-Tbase TZ x709 = x176 * x167;
-Tbase TZ x710 = x177 * x166;
-Tbase TZ x711 = x178 * x165;
-Tbase TZ x712 = x710 + x711;
-Tbase TZ x713 = x709 + x712;
-Tbase TZ x714 = x708 + x713;
-Tbase TZ x715 = x707 + x714;
-Tbase TZ x716 = x706 + x715;
-Tbase TZ x717 = x705 + x716;
-Tbase TZ x718 = x704 + x717;
-Tbase TZ x719 = x703 + x718;
-Tbase TZ x720 = x702 + x719;
-Tbase TZ x721 = x701 + x720;
-Tbase TZ x722 = x700 + x721;
-Tbase TZ x723 = x699 + x722;
-Tbase TZ x724 = x698 + x723;
-Tbase TZ x725 = x161 * x164;
-Tbase TZ x726 = x162 * x163;
-Tbase TZ x727 = x163 * x162;
-Tbase TZ x728 = x164 * x161;
-Tbase TZ x729 = x727 + x728;
-Tbase TZ x730 = x726 + x729;
-Tbase TZ x731 = x725 + x730;
-Tbase TZ x732 = 0x11;
-Tbase TZ x733 = x732 * x731;
-Tbase TZ x734 = x724 + x733;
-Tbase TZ x735 = x697 + x734;
-Tbase TZ x736 = 0x17;
-Tbase TZ x737 = x735 >> x736;
-Tbase TZ x738 = x164 * x178;
-Tbase TZ x739 = x165 * x177;
-Tbase TZ x740 = x166 * x176;
-Tbase TZ x741 = x167 * x175;
-Tbase TZ x742 = x168 * x174;
-Tbase TZ x743 = x169 * x173;
-Tbase TZ x744 = x170 * x172;
-Tbase TZ x745 = x171 * x171;
-Tbase TZ x746 = x172 * x170;
-Tbase TZ x747 = x173 * x169;
-Tbase TZ x748 = x174 * x168;
-Tbase TZ x749 = x175 * x167;
-Tbase TZ x750 = x176 * x166;
-Tbase TZ x751 = x177 * x165;
-Tbase TZ x752 = x178 * x164;
-Tbase TZ x753 = x751 + x752;
-Tbase TZ x754 = x750 + x753;
-Tbase TZ x755 = x749 + x754;
-Tbase TZ x756 = x748 + x755;
-Tbase TZ x757 = x747 + x756;
-Tbase TZ x758 = x746 + x757;
-Tbase TZ x759 = x745 + x758;
-Tbase TZ x760 = x744 + x759;
-Tbase TZ x761 = x743 + x760;
-Tbase TZ x762 = x742 + x761;
-Tbase TZ x763 = x741 + x762;
-Tbase TZ x764 = x740 + x763;
-Tbase TZ x765 = x739 + x764;
-Tbase TZ x766 = x738 + x765;
-Tbase TZ x767 = x161 * x163;
-Tbase TZ x768 = x162 * x162;
-Tbase TZ x769 = x163 * x161;
-Tbase TZ x770 = x768 + x769;
-Tbase TZ x771 = x767 + x770;
-Tbase TZ x772 = 0x11;
-Tbase TZ x773 = x772 * x771;
-Tbase TZ x774 = x766 + x773;
-Tbase TZ x775 = x737 + x774;
-Tbase TZ x776 = 0x17;
-Tbase TZ x777 = x775 >> x776;
-Tbase TZ x778 = x163 * x178;
-Tbase TZ x779 = x164 * x177;
-Tbase TZ x780 = x165 * x176;
-Tbase TZ x781 = x166 * x175;
-Tbase TZ x782 = x167 * x174;
-Tbase TZ x783 = x168 * x173;
-Tbase TZ x784 = x169 * x172;
-Tbase TZ x785 = x170 * x171;
-Tbase TZ x786 = x171 * x170;
-Tbase TZ x787 = x172 * x169;
-Tbase TZ x788 = x173 * x168;
-Tbase TZ x789 = x174 * x167;
-Tbase TZ x790 = x175 * x166;
-Tbase TZ x791 = x176 * x165;
-Tbase TZ x792 = x177 * x164;
-Tbase TZ x793 = x178 * x163;
-Tbase TZ x794 = x792 + x793;
-Tbase TZ x795 = x791 + x794;
-Tbase TZ x796 = x790 + x795;
-Tbase TZ x797 = x789 + x796;
-Tbase TZ x798 = x788 + x797;
-Tbase TZ x799 = x787 + x798;
-Tbase TZ x800 = x786 + x799;
-Tbase TZ x801 = x785 + x800;
-Tbase TZ x802 = x784 + x801;
-Tbase TZ x803 = x783 + x802;
-Tbase TZ x804 = x782 + x803;
-Tbase TZ x805 = x781 + x804;
-Tbase TZ x806 = x780 + x805;
-Tbase TZ x807 = x779 + x806;
-Tbase TZ x808 = x778 + x807;
-Tbase TZ x809 = x161 * x162;
-Tbase TZ x810 = x162 * x161;
-Tbase TZ x811 = x809 + x810;
-Tbase TZ x812 = 0x11;
-Tbase TZ x813 = x812 * x811;
-Tbase TZ x814 = x808 + x813;
-Tbase TZ x815 = x777 + x814;
-Tbase TZ x816 = 0x17;
-Tbase TZ x817 = x815 >> x816;
-Tbase TZ x818 = x162 * x178;
-Tbase TZ x819 = x163 * x177;
-Tbase TZ x820 = x164 * x176;
-Tbase TZ x821 = x165 * x175;
-Tbase TZ x822 = x166 * x174;
-Tbase TZ x823 = x167 * x173;
-Tbase TZ x824 = x168 * x172;
-Tbase TZ x825 = x169 * x171;
-Tbase TZ x826 = x170 * x170;
-Tbase TZ x827 = x171 * x169;
-Tbase TZ x828 = x172 * x168;
-Tbase TZ x829 = x173 * x167;
-Tbase TZ x830 = x174 * x166;
-Tbase TZ x831 = x175 * x165;
-Tbase TZ x832 = x176 * x164;
-Tbase TZ x833 = x177 * x163;
-Tbase TZ x834 = x178 * x162;
-Tbase TZ x835 = x833 + x834;
-Tbase TZ x836 = x832 + x835;
-Tbase TZ x837 = x831 + x836;
-Tbase TZ x838 = x830 + x837;
-Tbase TZ x839 = x829 + x838;
-Tbase TZ x840 = x828 + x839;
-Tbase TZ x841 = x827 + x840;
-Tbase TZ x842 = x826 + x841;
-Tbase TZ x843 = x825 + x842;
-Tbase TZ x844 = x824 + x843;
-Tbase TZ x845 = x823 + x844;
-Tbase TZ x846 = x822 + x845;
-Tbase TZ x847 = x821 + x846;
-Tbase TZ x848 = x820 + x847;
-Tbase TZ x849 = x819 + x848;
-Tbase TZ x850 = x818 + x849;
-Tbase TZ x851 = x161 * x161;
-Tbase TZ x852 = 0x11;
-Tbase TZ x853 = x852 * x851;
-Tbase TZ x854 = x850 + x853;
-Tbase TZ x855 = x817 + x854;
-Tbase TZ x856 = 0x17;
-Tbase TZ x857 = x855 >> x856;
-Tbase TZ x858 = x161 * x178;
-Tbase TZ x859 = x162 * x177;
-Tbase TZ x860 = x163 * x176;
-Tbase TZ x861 = x164 * x175;
-Tbase TZ x862 = x165 * x174;
-Tbase TZ x863 = x166 * x173;
-Tbase TZ x864 = x167 * x172;
-Tbase TZ x865 = x168 * x171;
-Tbase TZ x866 = x169 * x170;
-Tbase TZ x867 = x170 * x169;
-Tbase TZ x868 = x171 * x168;
-Tbase TZ x869 = x172 * x167;
-Tbase TZ x870 = x173 * x166;
-Tbase TZ x871 = x174 * x165;
-Tbase TZ x872 = x175 * x164;
-Tbase TZ x873 = x176 * x163;
-Tbase TZ x874 = x177 * x162;
-Tbase TZ x875 = x178 * x161;
-Tbase TZ x876 = x874 + x875;
-Tbase TZ x877 = x873 + x876;
-Tbase TZ x878 = x872 + x877;
-Tbase TZ x879 = x871 + x878;
-Tbase TZ x880 = x870 + x879;
-Tbase TZ x881 = x869 + x880;
-Tbase TZ x882 = x868 + x881;
-Tbase TZ x883 = x867 + x882;
-Tbase TZ x884 = x866 + x883;
-Tbase TZ x885 = x865 + x884;
-Tbase TZ x886 = x864 + x885;
-Tbase TZ x887 = x863 + x886;
-Tbase TZ x888 = x862 + x887;
-Tbase TZ x889 = x861 + x888;
-Tbase TZ x890 = x860 + x889;
-Tbase TZ x891 = x859 + x890;
-Tbase TZ x892 = x858 + x891;
-Tbase TZ x893 = x857 + x892;
-Tbase TZ x894 = 0x17;
-Tbase TZ x895 = x893 >> x894;
-Tbase TZ x896 = 0x11;
-Tbase TZ x897 = x896 * x895;
-Tbase TZ x898 = 0x7fffff;
-Tbase TZ x899 = x215 & x898;
-Tbase TZ x900 = x897 + x899;
-Tbase TZ x901 = 0x17;
-Tbase TZ x902 = x900 >> x901;
-Tbase TZ x903 = 0x7fffff;
-Tbase TZ x904 = x255 & x903;
-Tbase TZ x905 = x902 + x904;
-Tbase TZ x906 = 0x7fffff;
-Tbase TZ x907 = x893 & x906;
-Tbase TZ x908 = 0x7fffff;
-Tbase TZ x909 = x855 & x908;
-Tbase TZ x910 = 0x7fffff;
-Tbase TZ x911 = x815 & x910;
-Tbase TZ x912 = 0x7fffff;
-Tbase TZ x913 = x775 & x912;
-Tbase TZ x914 = 0x7fffff;
-Tbase TZ x915 = x735 & x914;
-Tbase TZ x916 = 0x7fffff;
-Tbase TZ x917 = x695 & x916;
-Tbase TZ x918 = 0x7fffff;
-Tbase TZ x919 = x655 & x918;
-Tbase TZ x920 = 0x7fffff;
-Tbase TZ x921 = x615 & x920;
-Tbase TZ x922 = 0x7fffff;
-Tbase TZ x923 = x575 & x922;
-Tbase TZ x924 = 0x7fffff;
-Tbase TZ x925 = x535 & x924;
-Tbase TZ x926 = 0x7fffff;
-Tbase TZ x927 = x495 & x926;
-Tbase TZ x928 = 0x7fffff;
-Tbase TZ x929 = x455 & x928;
-Tbase TZ x930 = 0x7fffff;
-Tbase TZ x931 = x415 & x930;
-Tbase TZ x932 = 0x7fffff;
-Tbase TZ x933 = x375 & x932;
-Tbase TZ x934 = 0x7fffff;
-Tbase TZ x935 = x335 & x934;
-Tbase TZ x936 = 0x17;
-Tbase TZ x937 = x905 >> x936;
-Tbase TZ x938 = 0x7fffff;
-Tbase TZ x939 = x295 & x938;
-Tbase TZ x940 = x937 + x939;
-Tbase TZ x941 = 0x7fffff;
-Tbase TZ x942 = x905 & x941;
-Tbase TZ x943 = 0x7fffff;
-Tbase TZ x944 = x900 & x943;
-Tbase TZ x945 = Const 16777214;
-Tbase TZ x946 = x945 + x89;
-Tbase TZ x947 = x946 - x107;
-Tbase TZ x948 = Const 16777214;
-Tbase TZ x949 = x948 + x90;
-Tbase TZ x950 = x949 - x108;
-Tbase TZ x951 = Const 16777214;
-Tbase TZ x952 = x951 + x91;
-Tbase TZ x953 = x952 - x109;
-Tbase TZ x954 = Const 16777214;
-Tbase TZ x955 = x954 + x92;
-Tbase TZ x956 = x955 - x110;
-Tbase TZ x957 = Const 16777214;
-Tbase TZ x958 = x957 + x93;
-Tbase TZ x959 = x958 - x111;
-Tbase TZ x960 = Const 16777214;
-Tbase TZ x961 = x960 + x94;
-Tbase TZ x962 = x961 - x112;
-Tbase TZ x963 = Const 16777214;
-Tbase TZ x964 = x963 + x95;
-Tbase TZ x965 = x964 - x113;
-Tbase TZ x966 = Const 16777214;
-Tbase TZ x967 = x966 + x96;
-Tbase TZ x968 = x967 - x114;
-Tbase TZ x969 = Const 16777214;
-Tbase TZ x970 = x969 + x97;
-Tbase TZ x971 = x970 - x115;
-Tbase TZ x972 = Const 16777214;
-Tbase TZ x973 = x972 + x98;
-Tbase TZ x974 = x973 - x116;
-Tbase TZ x975 = Const 16777214;
-Tbase TZ x976 = x975 + x99;
-Tbase TZ x977 = x976 - x117;
-Tbase TZ x978 = Const 16777214;
-Tbase TZ x979 = x978 + x100;
-Tbase TZ x980 = x979 - x118;
-Tbase TZ x981 = Const 16777214;
-Tbase TZ x982 = x981 + x101;
-Tbase TZ x983 = x982 - x119;
-Tbase TZ x984 = Const 16777214;
-Tbase TZ x985 = x984 + x102;
-Tbase TZ x986 = x985 - x120;
-Tbase TZ x987 = Const 16777214;
-Tbase TZ x988 = x987 + x103;
-Tbase TZ x989 = x988 - x121;
-Tbase TZ x990 = Const 16777214;
-Tbase TZ x991 = x990 + x104;
-Tbase TZ x992 = x991 - x122;
-Tbase TZ x993 = Const 16777214;
-Tbase TZ x994 = x993 + x105;
-Tbase TZ x995 = x994 - x123;
-Tbase TZ x996 = Const 16777182;
-Tbase TZ x997 = x996 + x106;
-Tbase TZ x998 = x997 - x124;
-Tbase TZ x999 = x998 * x998;
-Tbase TZ x1000 = x947 * x995;
-Tbase TZ x1001 = x950 * x992;
-Tbase TZ x1002 = x953 * x989;
-Tbase TZ x1003 = x956 * x986;
-Tbase TZ x1004 = x959 * x983;
-Tbase TZ x1005 = x962 * x980;
-Tbase TZ x1006 = x965 * x977;
-Tbase TZ x1007 = x968 * x974;
-Tbase TZ x1008 = x971 * x971;
-Tbase TZ x1009 = x974 * x968;
-Tbase TZ x1010 = x977 * x965;
-Tbase TZ x1011 = x980 * x962;
-Tbase TZ x1012 = x983 * x959;
-Tbase TZ x1013 = x986 * x956;
-Tbase TZ x1014 = x989 * x953;
-Tbase TZ x1015 = x992 * x950;
-Tbase TZ x1016 = x995 * x947;
-Tbase TZ x1017 = x1015 + x1016;
-Tbase TZ x1018 = x1014 + x1017;
-Tbase TZ x1019 = x1013 + x1018;
-Tbase TZ x1020 = x1012 + x1019;
-Tbase TZ x1021 = x1011 + x1020;
-Tbase TZ x1022 = x1010 + x1021;
-Tbase TZ x1023 = x1009 + x1022;
-Tbase TZ x1024 = x1008 + x1023;
-Tbase TZ x1025 = x1007 + x1024;
-Tbase TZ x1026 = x1006 + x1025;
-Tbase TZ x1027 = x1005 + x1026;
-Tbase TZ x1028 = x1004 + x1027;
-Tbase TZ x1029 = x1003 + x1028;
-Tbase TZ x1030 = x1002 + x1029;
-Tbase TZ x1031 = x1001 + x1030;
-Tbase TZ x1032 = x1000 + x1031;
-Tbase TZ x1033 = 0x11;
-Tbase TZ x1034 = x1033 * x1032;
-Tbase TZ x1035 = x999 + x1034;
-Tbase TZ x1036 = 0x17;
-Tbase TZ x1037 = x1035 >> x1036;
-Tbase TZ x1038 = x995 * x998;
-Tbase TZ x1039 = x998 * x995;
-Tbase TZ x1040 = x1038 + x1039;
-Tbase TZ x1041 = x947 * x992;
-Tbase TZ x1042 = x950 * x989;
-Tbase TZ x1043 = x953 * x986;
-Tbase TZ x1044 = x956 * x983;
-Tbase TZ x1045 = x959 * x980;
-Tbase TZ x1046 = x962 * x977;
-Tbase TZ x1047 = x965 * x974;
-Tbase TZ x1048 = x968 * x971;
-Tbase TZ x1049 = x971 * x968;
-Tbase TZ x1050 = x974 * x965;
-Tbase TZ x1051 = x977 * x962;
-Tbase TZ x1052 = x980 * x959;
-Tbase TZ x1053 = x983 * x956;
-Tbase TZ x1054 = x986 * x953;
-Tbase TZ x1055 = x989 * x950;
-Tbase TZ x1056 = x992 * x947;
-Tbase TZ x1057 = x1055 + x1056;
-Tbase TZ x1058 = x1054 + x1057;
-Tbase TZ x1059 = x1053 + x1058;
-Tbase TZ x1060 = x1052 + x1059;
-Tbase TZ x1061 = x1051 + x1060;
-Tbase TZ x1062 = x1050 + x1061;
-Tbase TZ x1063 = x1049 + x1062;
-Tbase TZ x1064 = x1048 + x1063;
-Tbase TZ x1065 = x1047 + x1064;
-Tbase TZ x1066 = x1046 + x1065;
-Tbase TZ x1067 = x1045 + x1066;
-Tbase TZ x1068 = x1044 + x1067;
-Tbase TZ x1069 = x1043 + x1068;
-Tbase TZ x1070 = x1042 + x1069;
-Tbase TZ x1071 = x1041 + x1070;
-Tbase TZ x1072 = 0x11;
-Tbase TZ x1073 = x1072 * x1071;
-Tbase TZ x1074 = x1040 + x1073;
-Tbase TZ x1075 = x1037 + x1074;
-Tbase TZ x1076 = 0x17;
-Tbase TZ x1077 = x1075 >> x1076;
-Tbase TZ x1078 = x992 * x998;
-Tbase TZ x1079 = x995 * x995;
-Tbase TZ x1080 = x998 * x992;
-Tbase TZ x1081 = x1079 + x1080;
-Tbase TZ x1082 = x1078 + x1081;
-Tbase TZ x1083 = x947 * x989;
-Tbase TZ x1084 = x950 * x986;
-Tbase TZ x1085 = x953 * x983;
-Tbase TZ x1086 = x956 * x980;
-Tbase TZ x1087 = x959 * x977;
-Tbase TZ x1088 = x962 * x974;
-Tbase TZ x1089 = x965 * x971;
-Tbase TZ x1090 = x968 * x968;
-Tbase TZ x1091 = x971 * x965;
-Tbase TZ x1092 = x974 * x962;
-Tbase TZ x1093 = x977 * x959;
-Tbase TZ x1094 = x980 * x956;
-Tbase TZ x1095 = x983 * x953;
-Tbase TZ x1096 = x986 * x950;
-Tbase TZ x1097 = x989 * x947;
-Tbase TZ x1098 = x1096 + x1097;
-Tbase TZ x1099 = x1095 + x1098;
-Tbase TZ x1100 = x1094 + x1099;
-Tbase TZ x1101 = x1093 + x1100;
-Tbase TZ x1102 = x1092 + x1101;
-Tbase TZ x1103 = x1091 + x1102;
-Tbase TZ x1104 = x1090 + x1103;
-Tbase TZ x1105 = x1089 + x1104;
-Tbase TZ x1106 = x1088 + x1105;
-Tbase TZ x1107 = x1087 + x1106;
-Tbase TZ x1108 = x1086 + x1107;
-Tbase TZ x1109 = x1085 + x1108;
-Tbase TZ x1110 = x1084 + x1109;
-Tbase TZ x1111 = x1083 + x1110;
-Tbase TZ x1112 = 0x11;
-Tbase TZ x1113 = x1112 * x1111;
-Tbase TZ x1114 = x1082 + x1113;
-Tbase TZ x1115 = x1077 + x1114;
-Tbase TZ x1116 = 0x17;
-Tbase TZ x1117 = x1115 >> x1116;
-Tbase TZ x1118 = x989 * x998;
-Tbase TZ x1119 = x992 * x995;
-Tbase TZ x1120 = x995 * x992;
-Tbase TZ x1121 = x998 * x989;
-Tbase TZ x1122 = x1120 + x1121;
-Tbase TZ x1123 = x1119 + x1122;
-Tbase TZ x1124 = x1118 + x1123;
-Tbase TZ x1125 = x947 * x986;
-Tbase TZ x1126 = x950 * x983;
-Tbase TZ x1127 = x953 * x980;
-Tbase TZ x1128 = x956 * x977;
-Tbase TZ x1129 = x959 * x974;
-Tbase TZ x1130 = x962 * x971;
-Tbase TZ x1131 = x965 * x968;
-Tbase TZ x1132 = x968 * x965;
-Tbase TZ x1133 = x971 * x962;
-Tbase TZ x1134 = x974 * x959;
-Tbase TZ x1135 = x977 * x956;
-Tbase TZ x1136 = x980 * x953;
-Tbase TZ x1137 = x983 * x950;
-Tbase TZ x1138 = x986 * x947;
-Tbase TZ x1139 = x1137 + x1138;
-Tbase TZ x1140 = x1136 + x1139;
-Tbase TZ x1141 = x1135 + x1140;
-Tbase TZ x1142 = x1134 + x1141;
-Tbase TZ x1143 = x1133 + x1142;
-Tbase TZ x1144 = x1132 + x1143;
-Tbase TZ x1145 = x1131 + x1144;
-Tbase TZ x1146 = x1130 + x1145;
-Tbase TZ x1147 = x1129 + x1146;
-Tbase TZ x1148 = x1128 + x1147;
-Tbase TZ x1149 = x1127 + x1148;
-Tbase TZ x1150 = x1126 + x1149;
-Tbase TZ x1151 = x1125 + x1150;
-Tbase TZ x1152 = 0x11;
-Tbase TZ x1153 = x1152 * x1151;
-Tbase TZ x1154 = x1124 + x1153;
-Tbase TZ x1155 = x1117 + x1154;
-Tbase TZ x1156 = 0x17;
-Tbase TZ x1157 = x1155 >> x1156;
-Tbase TZ x1158 = x986 * x998;
-Tbase TZ x1159 = x989 * x995;
-Tbase TZ x1160 = x992 * x992;
-Tbase TZ x1161 = x995 * x989;
-Tbase TZ x1162 = x998 * x986;
-Tbase TZ x1163 = x1161 + x1162;
-Tbase TZ x1164 = x1160 + x1163;
-Tbase TZ x1165 = x1159 + x1164;
-Tbase TZ x1166 = x1158 + x1165;
-Tbase TZ x1167 = x947 * x983;
-Tbase TZ x1168 = x950 * x980;
-Tbase TZ x1169 = x953 * x977;
-Tbase TZ x1170 = x956 * x974;
-Tbase TZ x1171 = x959 * x971;
-Tbase TZ x1172 = x962 * x968;
-Tbase TZ x1173 = x965 * x965;
-Tbase TZ x1174 = x968 * x962;
-Tbase TZ x1175 = x971 * x959;
-Tbase TZ x1176 = x974 * x956;
-Tbase TZ x1177 = x977 * x953;
-Tbase TZ x1178 = x980 * x950;
-Tbase TZ x1179 = x983 * x947;
-Tbase TZ x1180 = x1178 + x1179;
-Tbase TZ x1181 = x1177 + x1180;
-Tbase TZ x1182 = x1176 + x1181;
-Tbase TZ x1183 = x1175 + x1182;
-Tbase TZ x1184 = x1174 + x1183;
-Tbase TZ x1185 = x1173 + x1184;
-Tbase TZ x1186 = x1172 + x1185;
-Tbase TZ x1187 = x1171 + x1186;
-Tbase TZ x1188 = x1170 + x1187;
-Tbase TZ x1189 = x1169 + x1188;
-Tbase TZ x1190 = x1168 + x1189;
-Tbase TZ x1191 = x1167 + x1190;
-Tbase TZ x1192 = 0x11;
-Tbase TZ x1193 = x1192 * x1191;
-Tbase TZ x1194 = x1166 + x1193;
-Tbase TZ x1195 = x1157 + x1194;
-Tbase TZ x1196 = 0x17;
-Tbase TZ x1197 = x1195 >> x1196;
-Tbase TZ x1198 = x983 * x998;
-Tbase TZ x1199 = x986 * x995;
-Tbase TZ x1200 = x989 * x992;
-Tbase TZ x1201 = x992 * x989;
-Tbase TZ x1202 = x995 * x986;
-Tbase TZ x1203 = x998 * x983;
-Tbase TZ x1204 = x1202 + x1203;
-Tbase TZ x1205 = x1201 + x1204;
-Tbase TZ x1206 = x1200 + x1205;
-Tbase TZ x1207 = x1199 + x1206;
-Tbase TZ x1208 = x1198 + x1207;
-Tbase TZ x1209 = x947 * x980;
-Tbase TZ x1210 = x950 * x977;
-Tbase TZ x1211 = x953 * x974;
-Tbase TZ x1212 = x956 * x971;
-Tbase TZ x1213 = x959 * x968;
-Tbase TZ x1214 = x962 * x965;
-Tbase TZ x1215 = x965 * x962;
-Tbase TZ x1216 = x968 * x959;
-Tbase TZ x1217 = x971 * x956;
-Tbase TZ x1218 = x974 * x953;
-Tbase TZ x1219 = x977 * x950;
-Tbase TZ x1220 = x980 * x947;
-Tbase TZ x1221 = x1219 + x1220;
-Tbase TZ x1222 = x1218 + x1221;
-Tbase TZ x1223 = x1217 + x1222;
-Tbase TZ x1224 = x1216 + x1223;
-Tbase TZ x1225 = x1215 + x1224;
-Tbase TZ x1226 = x1214 + x1225;
-Tbase TZ x1227 = x1213 + x1226;
-Tbase TZ x1228 = x1212 + x1227;
-Tbase TZ x1229 = x1211 + x1228;
-Tbase TZ x1230 = x1210 + x1229;
-Tbase TZ x1231 = x1209 + x1230;
-Tbase TZ x1232 = 0x11;
-Tbase TZ x1233 = x1232 * x1231;
-Tbase TZ x1234 = x1208 + x1233;
-Tbase TZ x1235 = x1197 + x1234;
-Tbase TZ x1236 = 0x17;
-Tbase TZ x1237 = x1235 >> x1236;
-Tbase TZ x1238 = x980 * x998;
-Tbase TZ x1239 = x983 * x995;
-Tbase TZ x1240 = x986 * x992;
-Tbase TZ x1241 = x989 * x989;
-Tbase TZ x1242 = x992 * x986;
-Tbase TZ x1243 = x995 * x983;
-Tbase TZ x1244 = x998 * x980;
-Tbase TZ x1245 = x1243 + x1244;
-Tbase TZ x1246 = x1242 + x1245;
-Tbase TZ x1247 = x1241 + x1246;
-Tbase TZ x1248 = x1240 + x1247;
-Tbase TZ x1249 = x1239 + x1248;
-Tbase TZ x1250 = x1238 + x1249;
-Tbase TZ x1251 = x947 * x977;
-Tbase TZ x1252 = x950 * x974;
-Tbase TZ x1253 = x953 * x971;
-Tbase TZ x1254 = x956 * x968;
-Tbase TZ x1255 = x959 * x965;
-Tbase TZ x1256 = x962 * x962;
-Tbase TZ x1257 = x965 * x959;
-Tbase TZ x1258 = x968 * x956;
-Tbase TZ x1259 = x971 * x953;
-Tbase TZ x1260 = x974 * x950;
-Tbase TZ x1261 = x977 * x947;
-Tbase TZ x1262 = x1260 + x1261;
-Tbase TZ x1263 = x1259 + x1262;
-Tbase TZ x1264 = x1258 + x1263;
-Tbase TZ x1265 = x1257 + x1264;
-Tbase TZ x1266 = x1256 + x1265;
-Tbase TZ x1267 = x1255 + x1266;
-Tbase TZ x1268 = x1254 + x1267;
-Tbase TZ x1269 = x1253 + x1268;
-Tbase TZ x1270 = x1252 + x1269;
-Tbase TZ x1271 = x1251 + x1270;
-Tbase TZ x1272 = 0x11;
-Tbase TZ x1273 = x1272 * x1271;
-Tbase TZ x1274 = x1250 + x1273;
-Tbase TZ x1275 = x1237 + x1274;
-Tbase TZ x1276 = 0x17;
-Tbase TZ x1277 = x1275 >> x1276;
-Tbase TZ x1278 = x977 * x998;
-Tbase TZ x1279 = x980 * x995;
-Tbase TZ x1280 = x983 * x992;
-Tbase TZ x1281 = x986 * x989;
-Tbase TZ x1282 = x989 * x986;
-Tbase TZ x1283 = x992 * x983;
-Tbase TZ x1284 = x995 * x980;
-Tbase TZ x1285 = x998 * x977;
-Tbase TZ x1286 = x1284 + x1285;
-Tbase TZ x1287 = x1283 + x1286;
-Tbase TZ x1288 = x1282 + x1287;
-Tbase TZ x1289 = x1281 + x1288;
-Tbase TZ x1290 = x1280 + x1289;
-Tbase TZ x1291 = x1279 + x1290;
-Tbase TZ x1292 = x1278 + x1291;
-Tbase TZ x1293 = x947 * x974;
-Tbase TZ x1294 = x950 * x971;
-Tbase TZ x1295 = x953 * x968;
-Tbase TZ x1296 = x956 * x965;
-Tbase TZ x1297 = x959 * x962;
-Tbase TZ x1298 = x962 * x959;
-Tbase TZ x1299 = x965 * x956;
-Tbase TZ x1300 = x968 * x953;
-Tbase TZ x1301 = x971 * x950;
-Tbase TZ x1302 = x974 * x947;
-Tbase TZ x1303 = x1301 + x1302;
-Tbase TZ x1304 = x1300 + x1303;
-Tbase TZ x1305 = x1299 + x1304;
-Tbase TZ x1306 = x1298 + x1305;
-Tbase TZ x1307 = x1297 + x1306;
-Tbase TZ x1308 = x1296 + x1307;
-Tbase TZ x1309 = x1295 + x1308;
-Tbase TZ x1310 = x1294 + x1309;
-Tbase TZ x1311 = x1293 + x1310;
-Tbase TZ x1312 = 0x11;
-Tbase TZ x1313 = x1312 * x1311;
-Tbase TZ x1314 = x1292 + x1313;
-Tbase TZ x1315 = x1277 + x1314;
-Tbase TZ x1316 = 0x17;
-Tbase TZ x1317 = x1315 >> x1316;
-Tbase TZ x1318 = x974 * x998;
-Tbase TZ x1319 = x977 * x995;
-Tbase TZ x1320 = x980 * x992;
-Tbase TZ x1321 = x983 * x989;
-Tbase TZ x1322 = x986 * x986;
-Tbase TZ x1323 = x989 * x983;
-Tbase TZ x1324 = x992 * x980;
-Tbase TZ x1325 = x995 * x977;
-Tbase TZ x1326 = x998 * x974;
-Tbase TZ x1327 = x1325 + x1326;
-Tbase TZ x1328 = x1324 + x1327;
-Tbase TZ x1329 = x1323 + x1328;
-Tbase TZ x1330 = x1322 + x1329;
-Tbase TZ x1331 = x1321 + x1330;
-Tbase TZ x1332 = x1320 + x1331;
-Tbase TZ x1333 = x1319 + x1332;
-Tbase TZ x1334 = x1318 + x1333;
-Tbase TZ x1335 = x947 * x971;
-Tbase TZ x1336 = x950 * x968;
-Tbase TZ x1337 = x953 * x965;
-Tbase TZ x1338 = x956 * x962;
-Tbase TZ x1339 = x959 * x959;
-Tbase TZ x1340 = x962 * x956;
-Tbase TZ x1341 = x965 * x953;
-Tbase TZ x1342 = x968 * x950;
-Tbase TZ x1343 = x971 * x947;
-Tbase TZ x1344 = x1342 + x1343;
-Tbase TZ x1345 = x1341 + x1344;
-Tbase TZ x1346 = x1340 + x1345;
-Tbase TZ x1347 = x1339 + x1346;
-Tbase TZ x1348 = x1338 + x1347;
-Tbase TZ x1349 = x1337 + x1348;
-Tbase TZ x1350 = x1336 + x1349;
-Tbase TZ x1351 = x1335 + x1350;
-Tbase TZ x1352 = 0x11;
-Tbase TZ x1353 = x1352 * x1351;
-Tbase TZ x1354 = x1334 + x1353;
-Tbase TZ x1355 = x1317 + x1354;
-Tbase TZ x1356 = 0x17;
-Tbase TZ x1357 = x1355 >> x1356;
-Tbase TZ x1358 = x971 * x998;
-Tbase TZ x1359 = x974 * x995;
-Tbase TZ x1360 = x977 * x992;
-Tbase TZ x1361 = x980 * x989;
-Tbase TZ x1362 = x983 * x986;
-Tbase TZ x1363 = x986 * x983;
-Tbase TZ x1364 = x989 * x980;
-Tbase TZ x1365 = x992 * x977;
-Tbase TZ x1366 = x995 * x974;
-Tbase TZ x1367 = x998 * x971;
-Tbase TZ x1368 = x1366 + x1367;
-Tbase TZ x1369 = x1365 + x1368;
-Tbase TZ x1370 = x1364 + x1369;
-Tbase TZ x1371 = x1363 + x1370;
-Tbase TZ x1372 = x1362 + x1371;
-Tbase TZ x1373 = x1361 + x1372;
-Tbase TZ x1374 = x1360 + x1373;
-Tbase TZ x1375 = x1359 + x1374;
-Tbase TZ x1376 = x1358 + x1375;
-Tbase TZ x1377 = x947 * x968;
-Tbase TZ x1378 = x950 * x965;
-Tbase TZ x1379 = x953 * x962;
-Tbase TZ x1380 = x956 * x959;
-Tbase TZ x1381 = x959 * x956;
-Tbase TZ x1382 = x962 * x953;
-Tbase TZ x1383 = x965 * x950;
-Tbase TZ x1384 = x968 * x947;
-Tbase TZ x1385 = x1383 + x1384;
-Tbase TZ x1386 = x1382 + x1385;
-Tbase TZ x1387 = x1381 + x1386;
-Tbase TZ x1388 = x1380 + x1387;
-Tbase TZ x1389 = x1379 + x1388;
-Tbase TZ x1390 = x1378 + x1389;
-Tbase TZ x1391 = x1377 + x1390;
-Tbase TZ x1392 = 0x11;
-Tbase TZ x1393 = x1392 * x1391;
-Tbase TZ x1394 = x1376 + x1393;
-Tbase TZ x1395 = x1357 + x1394;
-Tbase TZ x1396 = 0x17;
-Tbase TZ x1397 = x1395 >> x1396;
-Tbase TZ x1398 = x968 * x998;
-Tbase TZ x1399 = x971 * x995;
-Tbase TZ x1400 = x974 * x992;
-Tbase TZ x1401 = x977 * x989;
-Tbase TZ x1402 = x980 * x986;
-Tbase TZ x1403 = x983 * x983;
-Tbase TZ x1404 = x986 * x980;
-Tbase TZ x1405 = x989 * x977;
-Tbase TZ x1406 = x992 * x974;
-Tbase TZ x1407 = x995 * x971;
-Tbase TZ x1408 = x998 * x968;
-Tbase TZ x1409 = x1407 + x1408;
-Tbase TZ x1410 = x1406 + x1409;
-Tbase TZ x1411 = x1405 + x1410;
-Tbase TZ x1412 = x1404 + x1411;
-Tbase TZ x1413 = x1403 + x1412;
-Tbase TZ x1414 = x1402 + x1413;
-Tbase TZ x1415 = x1401 + x1414;
-Tbase TZ x1416 = x1400 + x1415;
-Tbase TZ x1417 = x1399 + x1416;
-Tbase TZ x1418 = x1398 + x1417;
-Tbase TZ x1419 = x947 * x965;
-Tbase TZ x1420 = x950 * x962;
-Tbase TZ x1421 = x953 * x959;
-Tbase TZ x1422 = x956 * x956;
-Tbase TZ x1423 = x959 * x953;
-Tbase TZ x1424 = x962 * x950;
-Tbase TZ x1425 = x965 * x947;
-Tbase TZ x1426 = x1424 + x1425;
-Tbase TZ x1427 = x1423 + x1426;
-Tbase TZ x1428 = x1422 + x1427;
-Tbase TZ x1429 = x1421 + x1428;
-Tbase TZ x1430 = x1420 + x1429;
-Tbase TZ x1431 = x1419 + x1430;
-Tbase TZ x1432 = 0x11;
-Tbase TZ x1433 = x1432 * x1431;
-Tbase TZ x1434 = x1418 + x1433;
-Tbase TZ x1435 = x1397 + x1434;
-Tbase TZ x1436 = 0x17;
-Tbase TZ x1437 = x1435 >> x1436;
-Tbase TZ x1438 = x965 * x998;
-Tbase TZ x1439 = x968 * x995;
-Tbase TZ x1440 = x971 * x992;
-Tbase TZ x1441 = x974 * x989;
-Tbase TZ x1442 = x977 * x986;
-Tbase TZ x1443 = x980 * x983;
-Tbase TZ x1444 = x983 * x980;
-Tbase TZ x1445 = x986 * x977;
-Tbase TZ x1446 = x989 * x974;
-Tbase TZ x1447 = x992 * x971;
-Tbase TZ x1448 = x995 * x968;
-Tbase TZ x1449 = x998 * x965;
-Tbase TZ x1450 = x1448 + x1449;
-Tbase TZ x1451 = x1447 + x1450;
-Tbase TZ x1452 = x1446 + x1451;
-Tbase TZ x1453 = x1445 + x1452;
-Tbase TZ x1454 = x1444 + x1453;
-Tbase TZ x1455 = x1443 + x1454;
-Tbase TZ x1456 = x1442 + x1455;
-Tbase TZ x1457 = x1441 + x1456;
-Tbase TZ x1458 = x1440 + x1457;
-Tbase TZ x1459 = x1439 + x1458;
-Tbase TZ x1460 = x1438 + x1459;
-Tbase TZ x1461 = x947 * x962;
-Tbase TZ x1462 = x950 * x959;
-Tbase TZ x1463 = x953 * x956;
-Tbase TZ x1464 = x956 * x953;
-Tbase TZ x1465 = x959 * x950;
-Tbase TZ x1466 = x962 * x947;
-Tbase TZ x1467 = x1465 + x1466;
-Tbase TZ x1468 = x1464 + x1467;
-Tbase TZ x1469 = x1463 + x1468;
-Tbase TZ x1470 = x1462 + x1469;
-Tbase TZ x1471 = x1461 + x1470;
-Tbase TZ x1472 = 0x11;
-Tbase TZ x1473 = x1472 * x1471;
-Tbase TZ x1474 = x1460 + x1473;
-Tbase TZ x1475 = x1437 + x1474;
-Tbase TZ x1476 = 0x17;
-Tbase TZ x1477 = x1475 >> x1476;
-Tbase TZ x1478 = x962 * x998;
-Tbase TZ x1479 = x965 * x995;
-Tbase TZ x1480 = x968 * x992;
-Tbase TZ x1481 = x971 * x989;
-Tbase TZ x1482 = x974 * x986;
-Tbase TZ x1483 = x977 * x983;
-Tbase TZ x1484 = x980 * x980;
-Tbase TZ x1485 = x983 * x977;
-Tbase TZ x1486 = x986 * x974;
-Tbase TZ x1487 = x989 * x971;
-Tbase TZ x1488 = x992 * x968;
-Tbase TZ x1489 = x995 * x965;
-Tbase TZ x1490 = x998 * x962;
-Tbase TZ x1491 = x1489 + x1490;
-Tbase TZ x1492 = x1488 + x1491;
-Tbase TZ x1493 = x1487 + x1492;
-Tbase TZ x1494 = x1486 + x1493;
-Tbase TZ x1495 = x1485 + x1494;
-Tbase TZ x1496 = x1484 + x1495;
-Tbase TZ x1497 = x1483 + x1496;
-Tbase TZ x1498 = x1482 + x1497;
-Tbase TZ x1499 = x1481 + x1498;
-Tbase TZ x1500 = x1480 + x1499;
-Tbase TZ x1501 = x1479 + x1500;
-Tbase TZ x1502 = x1478 + x1501;
-Tbase TZ x1503 = x947 * x959;
-Tbase TZ x1504 = x950 * x956;
-Tbase TZ x1505 = x953 * x953;
-Tbase TZ x1506 = x956 * x950;
-Tbase TZ x1507 = x959 * x947;
-Tbase TZ x1508 = x1506 + x1507;
-Tbase TZ x1509 = x1505 + x1508;
-Tbase TZ x1510 = x1504 + x1509;
-Tbase TZ x1511 = x1503 + x1510;
-Tbase TZ x1512 = 0x11;
-Tbase TZ x1513 = x1512 * x1511;
-Tbase TZ x1514 = x1502 + x1513;
-Tbase TZ x1515 = x1477 + x1514;
-Tbase TZ x1516 = 0x17;
-Tbase TZ x1517 = x1515 >> x1516;
-Tbase TZ x1518 = x959 * x998;
-Tbase TZ x1519 = x962 * x995;
-Tbase TZ x1520 = x965 * x992;
-Tbase TZ x1521 = x968 * x989;
-Tbase TZ x1522 = x971 * x986;
-Tbase TZ x1523 = x974 * x983;
-Tbase TZ x1524 = x977 * x980;
-Tbase TZ x1525 = x980 * x977;
-Tbase TZ x1526 = x983 * x974;
-Tbase TZ x1527 = x986 * x971;
-Tbase TZ x1528 = x989 * x968;
-Tbase TZ x1529 = x992 * x965;
-Tbase TZ x1530 = x995 * x962;
-Tbase TZ x1531 = x998 * x959;
-Tbase TZ x1532 = x1530 + x1531;
-Tbase TZ x1533 = x1529 + x1532;
-Tbase TZ x1534 = x1528 + x1533;
-Tbase TZ x1535 = x1527 + x1534;
-Tbase TZ x1536 = x1526 + x1535;
-Tbase TZ x1537 = x1525 + x1536;
-Tbase TZ x1538 = x1524 + x1537;
-Tbase TZ x1539 = x1523 + x1538;
-Tbase TZ x1540 = x1522 + x1539;
-Tbase TZ x1541 = x1521 + x1540;
-Tbase TZ x1542 = x1520 + x1541;
-Tbase TZ x1543 = x1519 + x1542;
-Tbase TZ x1544 = x1518 + x1543;
-Tbase TZ x1545 = x947 * x956;
-Tbase TZ x1546 = x950 * x953;
-Tbase TZ x1547 = x953 * x950;
-Tbase TZ x1548 = x956 * x947;
-Tbase TZ x1549 = x1547 + x1548;
-Tbase TZ x1550 = x1546 + x1549;
-Tbase TZ x1551 = x1545 + x1550;
-Tbase TZ x1552 = 0x11;
-Tbase TZ x1553 = x1552 * x1551;
-Tbase TZ x1554 = x1544 + x1553;
-Tbase TZ x1555 = x1517 + x1554;
-Tbase TZ x1556 = 0x17;
-Tbase TZ x1557 = x1555 >> x1556;
-Tbase TZ x1558 = x956 * x998;
-Tbase TZ x1559 = x959 * x995;
-Tbase TZ x1560 = x962 * x992;
-Tbase TZ x1561 = x965 * x989;
-Tbase TZ x1562 = x968 * x986;
-Tbase TZ x1563 = x971 * x983;
-Tbase TZ x1564 = x974 * x980;
-Tbase TZ x1565 = x977 * x977;
-Tbase TZ x1566 = x980 * x974;
-Tbase TZ x1567 = x983 * x971;
-Tbase TZ x1568 = x986 * x968;
-Tbase TZ x1569 = x989 * x965;
-Tbase TZ x1570 = x992 * x962;
-Tbase TZ x1571 = x995 * x959;
-Tbase TZ x1572 = x998 * x956;
-Tbase TZ x1573 = x1571 + x1572;
-Tbase TZ x1574 = x1570 + x1573;
-Tbase TZ x1575 = x1569 + x1574;
-Tbase TZ x1576 = x1568 + x1575;
-Tbase TZ x1577 = x1567 + x1576;
-Tbase TZ x1578 = x1566 + x1577;
-Tbase TZ x1579 = x1565 + x1578;
-Tbase TZ x1580 = x1564 + x1579;
-Tbase TZ x1581 = x1563 + x1580;
-Tbase TZ x1582 = x1562 + x1581;
-Tbase TZ x1583 = x1561 + x1582;
-Tbase TZ x1584 = x1560 + x1583;
-Tbase TZ x1585 = x1559 + x1584;
-Tbase TZ x1586 = x1558 + x1585;
-Tbase TZ x1587 = x947 * x953;
-Tbase TZ x1588 = x950 * x950;
-Tbase TZ x1589 = x953 * x947;
-Tbase TZ x1590 = x1588 + x1589;
-Tbase TZ x1591 = x1587 + x1590;
-Tbase TZ x1592 = 0x11;
-Tbase TZ x1593 = x1592 * x1591;
-Tbase TZ x1594 = x1586 + x1593;
-Tbase TZ x1595 = x1557 + x1594;
-Tbase TZ x1596 = 0x17;
-Tbase TZ x1597 = x1595 >> x1596;
-Tbase TZ x1598 = x953 * x998;
-Tbase TZ x1599 = x956 * x995;
-Tbase TZ x1600 = x959 * x992;
-Tbase TZ x1601 = x962 * x989;
-Tbase TZ x1602 = x965 * x986;
-Tbase TZ x1603 = x968 * x983;
-Tbase TZ x1604 = x971 * x980;
-Tbase TZ x1605 = x974 * x977;
-Tbase TZ x1606 = x977 * x974;
-Tbase TZ x1607 = x980 * x971;
-Tbase TZ x1608 = x983 * x968;
-Tbase TZ x1609 = x986 * x965;
-Tbase TZ x1610 = x989 * x962;
-Tbase TZ x1611 = x992 * x959;
-Tbase TZ x1612 = x995 * x956;
-Tbase TZ x1613 = x998 * x953;
-Tbase TZ x1614 = x1612 + x1613;
-Tbase TZ x1615 = x1611 + x1614;
-Tbase TZ x1616 = x1610 + x1615;
-Tbase TZ x1617 = x1609 + x1616;
-Tbase TZ x1618 = x1608 + x1617;
-Tbase TZ x1619 = x1607 + x1618;
-Tbase TZ x1620 = x1606 + x1619;
-Tbase TZ x1621 = x1605 + x1620;
-Tbase TZ x1622 = x1604 + x1621;
-Tbase TZ x1623 = x1603 + x1622;
-Tbase TZ x1624 = x1602 + x1623;
-Tbase TZ x1625 = x1601 + x1624;
-Tbase TZ x1626 = x1600 + x1625;
-Tbase TZ x1627 = x1599 + x1626;
-Tbase TZ x1628 = x1598 + x1627;
-Tbase TZ x1629 = x947 * x950;
-Tbase TZ x1630 = x950 * x947;
-Tbase TZ x1631 = x1629 + x1630;
-Tbase TZ x1632 = 0x11;
-Tbase TZ x1633 = x1632 * x1631;
-Tbase TZ x1634 = x1628 + x1633;
-Tbase TZ x1635 = x1597 + x1634;
-Tbase TZ x1636 = 0x17;
-Tbase TZ x1637 = x1635 >> x1636;
-Tbase TZ x1638 = x950 * x998;
-Tbase TZ x1639 = x953 * x995;
-Tbase TZ x1640 = x956 * x992;
-Tbase TZ x1641 = x959 * x989;
-Tbase TZ x1642 = x962 * x986;
-Tbase TZ x1643 = x965 * x983;
-Tbase TZ x1644 = x968 * x980;
-Tbase TZ x1645 = x971 * x977;
-Tbase TZ x1646 = x974 * x974;
-Tbase TZ x1647 = x977 * x971;
-Tbase TZ x1648 = x980 * x968;
-Tbase TZ x1649 = x983 * x965;
-Tbase TZ x1650 = x986 * x962;
-Tbase TZ x1651 = x989 * x959;
-Tbase TZ x1652 = x992 * x956;
-Tbase TZ x1653 = x995 * x953;
-Tbase TZ x1654 = x998 * x950;
-Tbase TZ x1655 = x1653 + x1654;
-Tbase TZ x1656 = x1652 + x1655;
-Tbase TZ x1657 = x1651 + x1656;
-Tbase TZ x1658 = x1650 + x1657;
-Tbase TZ x1659 = x1649 + x1658;
-Tbase TZ x1660 = x1648 + x1659;
-Tbase TZ x1661 = x1647 + x1660;
-Tbase TZ x1662 = x1646 + x1661;
-Tbase TZ x1663 = x1645 + x1662;
-Tbase TZ x1664 = x1644 + x1663;
-Tbase TZ x1665 = x1643 + x1664;
-Tbase TZ x1666 = x1642 + x1665;
-Tbase TZ x1667 = x1641 + x1666;
-Tbase TZ x1668 = x1640 + x1667;
-Tbase TZ x1669 = x1639 + x1668;
-Tbase TZ x1670 = x1638 + x1669;
-Tbase TZ x1671 = x947 * x947;
-Tbase TZ x1672 = 0x11;
-Tbase TZ x1673 = x1672 * x1671;
-Tbase TZ x1674 = x1670 + x1673;
-Tbase TZ x1675 = x1637 + x1674;
-Tbase TZ x1676 = 0x17;
-Tbase TZ x1677 = x1675 >> x1676;
-Tbase TZ x1678 = x947 * x998;
-Tbase TZ x1679 = x950 * x995;
-Tbase TZ x1680 = x953 * x992;
-Tbase TZ x1681 = x956 * x989;
-Tbase TZ x1682 = x959 * x986;
-Tbase TZ x1683 = x962 * x983;
-Tbase TZ x1684 = x965 * x980;
-Tbase TZ x1685 = x968 * x977;
-Tbase TZ x1686 = x971 * x974;
-Tbase TZ x1687 = x974 * x971;
-Tbase TZ x1688 = x977 * x968;
-Tbase TZ x1689 = x980 * x965;
-Tbase TZ x1690 = x983 * x962;
-Tbase TZ x1691 = x986 * x959;
-Tbase TZ x1692 = x989 * x956;
-Tbase TZ x1693 = x992 * x953;
-Tbase TZ x1694 = x995 * x950;
-Tbase TZ x1695 = x998 * x947;
-Tbase TZ x1696 = x1694 + x1695;
-Tbase TZ x1697 = x1693 + x1696;
-Tbase TZ x1698 = x1692 + x1697;
-Tbase TZ x1699 = x1691 + x1698;
-Tbase TZ x1700 = x1690 + x1699;
-Tbase TZ x1701 = x1689 + x1700;
-Tbase TZ x1702 = x1688 + x1701;
-Tbase TZ x1703 = x1687 + x1702;
-Tbase TZ x1704 = x1686 + x1703;
-Tbase TZ x1705 = x1685 + x1704;
-Tbase TZ x1706 = x1684 + x1705;
-Tbase TZ x1707 = x1683 + x1706;
-Tbase TZ x1708 = x1682 + x1707;
-Tbase TZ x1709 = x1681 + x1708;
-Tbase TZ x1710 = x1680 + x1709;
-Tbase TZ x1711 = x1679 + x1710;
-Tbase TZ x1712 = x1678 + x1711;
-Tbase TZ x1713 = x1677 + x1712;
-Tbase TZ x1714 = 0x17;
-Tbase TZ x1715 = x1713 >> x1714;
-Tbase TZ x1716 = 0x11;
-Tbase TZ x1717 = x1716 * x1715;
-Tbase TZ x1718 = 0x7fffff;
-Tbase TZ x1719 = x1035 & x1718;
-Tbase TZ x1720 = x1717 + x1719;
-Tbase TZ x1721 = 0x17;
-Tbase TZ x1722 = x1720 >> x1721;
-Tbase TZ x1723 = 0x7fffff;
-Tbase TZ x1724 = x1075 & x1723;
-Tbase TZ x1725 = x1722 + x1724;
-Tbase TZ x1726 = 0x7fffff;
-Tbase TZ x1727 = x1713 & x1726;
-Tbase TZ x1728 = 0x7fffff;
-Tbase TZ x1729 = x1675 & x1728;
-Tbase TZ x1730 = 0x7fffff;
-Tbase TZ x1731 = x1635 & x1730;
-Tbase TZ x1732 = 0x7fffff;
-Tbase TZ x1733 = x1595 & x1732;
-Tbase TZ x1734 = 0x7fffff;
-Tbase TZ x1735 = x1555 & x1734;
-Tbase TZ x1736 = 0x7fffff;
-Tbase TZ x1737 = x1515 & x1736;
-Tbase TZ x1738 = 0x7fffff;
-Tbase TZ x1739 = x1475 & x1738;
-Tbase TZ x1740 = 0x7fffff;
-Tbase TZ x1741 = x1435 & x1740;
-Tbase TZ x1742 = 0x7fffff;
-Tbase TZ x1743 = x1395 & x1742;
-Tbase TZ x1744 = 0x7fffff;
-Tbase TZ x1745 = x1355 & x1744;
-Tbase TZ x1746 = 0x7fffff;
-Tbase TZ x1747 = x1315 & x1746;
-Tbase TZ x1748 = 0x7fffff;
-Tbase TZ x1749 = x1275 & x1748;
-Tbase TZ x1750 = 0x7fffff;
-Tbase TZ x1751 = x1235 & x1750;
-Tbase TZ x1752 = 0x7fffff;
-Tbase TZ x1753 = x1195 & x1752;
-Tbase TZ x1754 = 0x7fffff;
-Tbase TZ x1755 = x1155 & x1754;
-Tbase TZ x1756 = 0x17;
-Tbase TZ x1757 = x1725 >> x1756;
-Tbase TZ x1758 = 0x7fffff;
-Tbase TZ x1759 = x1115 & x1758;
-Tbase TZ x1760 = x1757 + x1759;
-Tbase TZ x1761 = 0x7fffff;
-Tbase TZ x1762 = x1725 & x1761;
-Tbase TZ x1763 = 0x7fffff;
-Tbase TZ x1764 = x1720 & x1763;
-Tbase TZ x1765 = Const 16777214;
-Tbase TZ x1766 = x1765 + x907;
-Tbase TZ x1767 = x1766 - x1727;
-Tbase TZ x1768 = Const 16777214;
-Tbase TZ x1769 = x1768 + x909;
-Tbase TZ x1770 = x1769 - x1729;
-Tbase TZ x1771 = Const 16777214;
-Tbase TZ x1772 = x1771 + x911;
-Tbase TZ x1773 = x1772 - x1731;
-Tbase TZ x1774 = Const 16777214;
-Tbase TZ x1775 = x1774 + x913;
-Tbase TZ x1776 = x1775 - x1733;
-Tbase TZ x1777 = Const 16777214;
-Tbase TZ x1778 = x1777 + x915;
-Tbase TZ x1779 = x1778 - x1735;
-Tbase TZ x1780 = Const 16777214;
-Tbase TZ x1781 = x1780 + x917;
-Tbase TZ x1782 = x1781 - x1737;
-Tbase TZ x1783 = Const 16777214;
-Tbase TZ x1784 = x1783 + x919;
-Tbase TZ x1785 = x1784 - x1739;
-Tbase TZ x1786 = Const 16777214;
-Tbase TZ x1787 = x1786 + x921;
-Tbase TZ x1788 = x1787 - x1741;
-Tbase TZ x1789 = Const 16777214;
-Tbase TZ x1790 = x1789 + x923;
-Tbase TZ x1791 = x1790 - x1743;
-Tbase TZ x1792 = Const 16777214;
-Tbase TZ x1793 = x1792 + x925;
-Tbase TZ x1794 = x1793 - x1745;
-Tbase TZ x1795 = Const 16777214;
-Tbase TZ x1796 = x1795 + x927;
-Tbase TZ x1797 = x1796 - x1747;
-Tbase TZ x1798 = Const 16777214;
-Tbase TZ x1799 = x1798 + x929;
-Tbase TZ x1800 = x1799 - x1749;
-Tbase TZ x1801 = Const 16777214;
-Tbase TZ x1802 = x1801 + x931;
-Tbase TZ x1803 = x1802 - x1751;
-Tbase TZ x1804 = Const 16777214;
-Tbase TZ x1805 = x1804 + x933;
-Tbase TZ x1806 = x1805 - x1753;
-Tbase TZ x1807 = Const 16777214;
-Tbase TZ x1808 = x1807 + x935;
-Tbase TZ x1809 = x1808 - x1755;
-Tbase TZ x1810 = Const 16777214;
-Tbase TZ x1811 = x1810 + x940;
-Tbase TZ x1812 = x1811 - x1760;
-Tbase TZ x1813 = Const 16777214;
-Tbase TZ x1814 = x1813 + x942;
-Tbase TZ x1815 = x1814 - x1762;
-Tbase TZ x1816 = Const 16777182;
-Tbase TZ x1817 = x1816 + x944;
-Tbase TZ x1818 = x1817 - x1764;
-Tbase TZ x1819 = x125 + x143;
-Tbase TZ x1820 = x126 + x144;
-Tbase TZ x1821 = x127 + x145;
-Tbase TZ x1822 = x128 + x146;
-Tbase TZ x1823 = x129 + x147;
-Tbase TZ x1824 = x130 + x148;
-Tbase TZ x1825 = x131 + x149;
-Tbase TZ x1826 = x132 + x150;
-Tbase TZ x1827 = x133 + x151;
-Tbase TZ x1828 = x134 + x152;
-Tbase TZ x1829 = x135 + x153;
-Tbase TZ x1830 = x136 + x154;
-Tbase TZ x1831 = x137 + x155;
-Tbase TZ x1832 = x138 + x156;
-Tbase TZ x1833 = x139 + x157;
-Tbase TZ x1834 = x140 + x158;
-Tbase TZ x1835 = x141 + x159;
-Tbase TZ x1836 = x142 + x160;
-Tbase TZ x1837 = Const 16777214;
-Tbase TZ x1838 = x1837 + x125;
-Tbase TZ x1839 = x1838 - x143;
-Tbase TZ x1840 = Const 16777214;
-Tbase TZ x1841 = x1840 + x126;
-Tbase TZ x1842 = x1841 - x144;
-Tbase TZ x1843 = Const 16777214;
-Tbase TZ x1844 = x1843 + x127;
-Tbase TZ x1845 = x1844 - x145;
-Tbase TZ x1846 = Const 16777214;
-Tbase TZ x1847 = x1846 + x128;
-Tbase TZ x1848 = x1847 - x146;
-Tbase TZ x1849 = Const 16777214;
-Tbase TZ x1850 = x1849 + x129;
-Tbase TZ x1851 = x1850 - x147;
-Tbase TZ x1852 = Const 16777214;
-Tbase TZ x1853 = x1852 + x130;
-Tbase TZ x1854 = x1853 - x148;
-Tbase TZ x1855 = Const 16777214;
-Tbase TZ x1856 = x1855 + x131;
-Tbase TZ x1857 = x1856 - x149;
-Tbase TZ x1858 = Const 16777214;
-Tbase TZ x1859 = x1858 + x132;
-Tbase TZ x1860 = x1859 - x150;
-Tbase TZ x1861 = Const 16777214;
-Tbase TZ x1862 = x1861 + x133;
-Tbase TZ x1863 = x1862 - x151;
-Tbase TZ x1864 = Const 16777214;
-Tbase TZ x1865 = x1864 + x134;
-Tbase TZ x1866 = x1865 - x152;
-Tbase TZ x1867 = Const 16777214;
-Tbase TZ x1868 = x1867 + x135;
-Tbase TZ x1869 = x1868 - x153;
-Tbase TZ x1870 = Const 16777214;
-Tbase TZ x1871 = x1870 + x136;
-Tbase TZ x1872 = x1871 - x154;
-Tbase TZ x1873 = Const 16777214;
-Tbase TZ x1874 = x1873 + x137;
-Tbase TZ x1875 = x1874 - x155;
-Tbase TZ x1876 = Const 16777214;
-Tbase TZ x1877 = x1876 + x138;
-Tbase TZ x1878 = x1877 - x156;
-Tbase TZ x1879 = Const 16777214;
-Tbase TZ x1880 = x1879 + x139;
-Tbase TZ x1881 = x1880 - x157;
-Tbase TZ x1882 = Const 16777214;
-Tbase TZ x1883 = x1882 + x140;
-Tbase TZ x1884 = x1883 - x158;
-Tbase TZ x1885 = Const 16777214;
-Tbase TZ x1886 = x1885 + x141;
-Tbase TZ x1887 = x1886 - x159;
-Tbase TZ x1888 = Const 16777182;
-Tbase TZ x1889 = x1888 + x142;
-Tbase TZ x1890 = x1889 - x160;
-Tbase TZ x1891 = x1890 * x178;
-Tbase TZ x1892 = x1839 * x177;
-Tbase TZ x1893 = x1842 * x176;
-Tbase TZ x1894 = x1845 * x175;
-Tbase TZ x1895 = x1848 * x174;
-Tbase TZ x1896 = x1851 * x173;
-Tbase TZ x1897 = x1854 * x172;
-Tbase TZ x1898 = x1857 * x171;
-Tbase TZ x1899 = x1860 * x170;
-Tbase TZ x1900 = x1863 * x169;
-Tbase TZ x1901 = x1866 * x168;
-Tbase TZ x1902 = x1869 * x167;
-Tbase TZ x1903 = x1872 * x166;
-Tbase TZ x1904 = x1875 * x165;
-Tbase TZ x1905 = x1878 * x164;
-Tbase TZ x1906 = x1881 * x163;
-Tbase TZ x1907 = x1884 * x162;
-Tbase TZ x1908 = x1887 * x161;
-Tbase TZ x1909 = x1907 + x1908;
-Tbase TZ x1910 = x1906 + x1909;
-Tbase TZ x1911 = x1905 + x1910;
-Tbase TZ x1912 = x1904 + x1911;
-Tbase TZ x1913 = x1903 + x1912;
-Tbase TZ x1914 = x1902 + x1913;
-Tbase TZ x1915 = x1901 + x1914;
-Tbase TZ x1916 = x1900 + x1915;
-Tbase TZ x1917 = x1899 + x1916;
-Tbase TZ x1918 = x1898 + x1917;
-Tbase TZ x1919 = x1897 + x1918;
-Tbase TZ x1920 = x1896 + x1919;
-Tbase TZ x1921 = x1895 + x1920;
-Tbase TZ x1922 = x1894 + x1921;
-Tbase TZ x1923 = x1893 + x1922;
-Tbase TZ x1924 = x1892 + x1923;
-Tbase TZ x1925 = 0x11;
-Tbase TZ x1926 = x1925 * x1924;
-Tbase TZ x1927 = x1891 + x1926;
-Tbase TZ x1928 = 0x17;
-Tbase TZ x1929 = x1927 >> x1928;
-Tbase TZ x1930 = x1887 * x178;
-Tbase TZ x1931 = x1890 * x177;
-Tbase TZ x1932 = x1930 + x1931;
-Tbase TZ x1933 = x1839 * x176;
-Tbase TZ x1934 = x1842 * x175;
-Tbase TZ x1935 = x1845 * x174;
-Tbase TZ x1936 = x1848 * x173;
-Tbase TZ x1937 = x1851 * x172;
-Tbase TZ x1938 = x1854 * x171;
-Tbase TZ x1939 = x1857 * x170;
-Tbase TZ x1940 = x1860 * x169;
-Tbase TZ x1941 = x1863 * x168;
-Tbase TZ x1942 = x1866 * x167;
-Tbase TZ x1943 = x1869 * x166;
-Tbase TZ x1944 = x1872 * x165;
-Tbase TZ x1945 = x1875 * x164;
-Tbase TZ x1946 = x1878 * x163;
-Tbase TZ x1947 = x1881 * x162;
-Tbase TZ x1948 = x1884 * x161;
-Tbase TZ x1949 = x1947 + x1948;
-Tbase TZ x1950 = x1946 + x1949;
-Tbase TZ x1951 = x1945 + x1950;
-Tbase TZ x1952 = x1944 + x1951;
-Tbase TZ x1953 = x1943 + x1952;
-Tbase TZ x1954 = x1942 + x1953;
-Tbase TZ x1955 = x1941 + x1954;
-Tbase TZ x1956 = x1940 + x1955;
-Tbase TZ x1957 = x1939 + x1956;
-Tbase TZ x1958 = x1938 + x1957;
-Tbase TZ x1959 = x1937 + x1958;
-Tbase TZ x1960 = x1936 + x1959;
-Tbase TZ x1961 = x1935 + x1960;
-Tbase TZ x1962 = x1934 + x1961;
-Tbase TZ x1963 = x1933 + x1962;
-Tbase TZ x1964 = 0x11;
-Tbase TZ x1965 = x1964 * x1963;
-Tbase TZ x1966 = x1932 + x1965;
-Tbase TZ x1967 = x1929 + x1966;
-Tbase TZ x1968 = 0x17;
-Tbase TZ x1969 = x1967 >> x1968;
-Tbase TZ x1970 = x1884 * x178;
-Tbase TZ x1971 = x1887 * x177;
-Tbase TZ x1972 = x1890 * x176;
-Tbase TZ x1973 = x1971 + x1972;
-Tbase TZ x1974 = x1970 + x1973;
-Tbase TZ x1975 = x1839 * x175;
-Tbase TZ x1976 = x1842 * x174;
-Tbase TZ x1977 = x1845 * x173;
-Tbase TZ x1978 = x1848 * x172;
-Tbase TZ x1979 = x1851 * x171;
-Tbase TZ x1980 = x1854 * x170;
-Tbase TZ x1981 = x1857 * x169;
-Tbase TZ x1982 = x1860 * x168;
-Tbase TZ x1983 = x1863 * x167;
-Tbase TZ x1984 = x1866 * x166;
-Tbase TZ x1985 = x1869 * x165;
-Tbase TZ x1986 = x1872 * x164;
-Tbase TZ x1987 = x1875 * x163;
-Tbase TZ x1988 = x1878 * x162;
-Tbase TZ x1989 = x1881 * x161;
-Tbase TZ x1990 = x1988 + x1989;
-Tbase TZ x1991 = x1987 + x1990;
-Tbase TZ x1992 = x1986 + x1991;
-Tbase TZ x1993 = x1985 + x1992;
-Tbase TZ x1994 = x1984 + x1993;
-Tbase TZ x1995 = x1983 + x1994;
-Tbase TZ x1996 = x1982 + x1995;
-Tbase TZ x1997 = x1981 + x1996;
-Tbase TZ x1998 = x1980 + x1997;
-Tbase TZ x1999 = x1979 + x1998;
-Tbase TZ x2000 = x1978 + x1999;
-Tbase TZ x2001 = x1977 + x2000;
-Tbase TZ x2002 = x1976 + x2001;
-Tbase TZ x2003 = x1975 + x2002;
-Tbase TZ x2004 = 0x11;
-Tbase TZ x2005 = x2004 * x2003;
-Tbase TZ x2006 = x1974 + x2005;
-Tbase TZ x2007 = x1969 + x2006;
-Tbase TZ x2008 = 0x17;
-Tbase TZ x2009 = x2007 >> x2008;
-Tbase TZ x2010 = x1881 * x178;
-Tbase TZ x2011 = x1884 * x177;
-Tbase TZ x2012 = x1887 * x176;
-Tbase TZ x2013 = x1890 * x175;
-Tbase TZ x2014 = x2012 + x2013;
-Tbase TZ x2015 = x2011 + x2014;
-Tbase TZ x2016 = x2010 + x2015;
-Tbase TZ x2017 = x1839 * x174;
-Tbase TZ x2018 = x1842 * x173;
-Tbase TZ x2019 = x1845 * x172;
-Tbase TZ x2020 = x1848 * x171;
-Tbase TZ x2021 = x1851 * x170;
-Tbase TZ x2022 = x1854 * x169;
-Tbase TZ x2023 = x1857 * x168;
-Tbase TZ x2024 = x1860 * x167;
-Tbase TZ x2025 = x1863 * x166;
-Tbase TZ x2026 = x1866 * x165;
-Tbase TZ x2027 = x1869 * x164;
-Tbase TZ x2028 = x1872 * x163;
-Tbase TZ x2029 = x1875 * x162;
-Tbase TZ x2030 = x1878 * x161;
-Tbase TZ x2031 = x2029 + x2030;
-Tbase TZ x2032 = x2028 + x2031;
-Tbase TZ x2033 = x2027 + x2032;
-Tbase TZ x2034 = x2026 + x2033;
-Tbase TZ x2035 = x2025 + x2034;
-Tbase TZ x2036 = x2024 + x2035;
-Tbase TZ x2037 = x2023 + x2036;
-Tbase TZ x2038 = x2022 + x2037;
-Tbase TZ x2039 = x2021 + x2038;
-Tbase TZ x2040 = x2020 + x2039;
-Tbase TZ x2041 = x2019 + x2040;
-Tbase TZ x2042 = x2018 + x2041;
-Tbase TZ x2043 = x2017 + x2042;
-Tbase TZ x2044 = 0x11;
-Tbase TZ x2045 = x2044 * x2043;
-Tbase TZ x2046 = x2016 + x2045;
-Tbase TZ x2047 = x2009 + x2046;
-Tbase TZ x2048 = 0x17;
-Tbase TZ x2049 = x2047 >> x2048;
-Tbase TZ x2050 = x1878 * x178;
-Tbase TZ x2051 = x1881 * x177;
-Tbase TZ x2052 = x1884 * x176;
-Tbase TZ x2053 = x1887 * x175;
-Tbase TZ x2054 = x1890 * x174;
-Tbase TZ x2055 = x2053 + x2054;
-Tbase TZ x2056 = x2052 + x2055;
-Tbase TZ x2057 = x2051 + x2056;
-Tbase TZ x2058 = x2050 + x2057;
-Tbase TZ x2059 = x1839 * x173;
-Tbase TZ x2060 = x1842 * x172;
-Tbase TZ x2061 = x1845 * x171;
-Tbase TZ x2062 = x1848 * x170;
-Tbase TZ x2063 = x1851 * x169;
-Tbase TZ x2064 = x1854 * x168;
-Tbase TZ x2065 = x1857 * x167;
-Tbase TZ x2066 = x1860 * x166;
-Tbase TZ x2067 = x1863 * x165;
-Tbase TZ x2068 = x1866 * x164;
-Tbase TZ x2069 = x1869 * x163;
-Tbase TZ x2070 = x1872 * x162;
-Tbase TZ x2071 = x1875 * x161;
-Tbase TZ x2072 = x2070 + x2071;
-Tbase TZ x2073 = x2069 + x2072;
-Tbase TZ x2074 = x2068 + x2073;
-Tbase TZ x2075 = x2067 + x2074;
-Tbase TZ x2076 = x2066 + x2075;
-Tbase TZ x2077 = x2065 + x2076;
-Tbase TZ x2078 = x2064 + x2077;
-Tbase TZ x2079 = x2063 + x2078;
-Tbase TZ x2080 = x2062 + x2079;
-Tbase TZ x2081 = x2061 + x2080;
-Tbase TZ x2082 = x2060 + x2081;
-Tbase TZ x2083 = x2059 + x2082;
-Tbase TZ x2084 = 0x11;
-Tbase TZ x2085 = x2084 * x2083;
-Tbase TZ x2086 = x2058 + x2085;
-Tbase TZ x2087 = x2049 + x2086;
-Tbase TZ x2088 = 0x17;
-Tbase TZ x2089 = x2087 >> x2088;
-Tbase TZ x2090 = x1875 * x178;
-Tbase TZ x2091 = x1878 * x177;
-Tbase TZ x2092 = x1881 * x176;
-Tbase TZ x2093 = x1884 * x175;
-Tbase TZ x2094 = x1887 * x174;
-Tbase TZ x2095 = x1890 * x173;
-Tbase TZ x2096 = x2094 + x2095;
-Tbase TZ x2097 = x2093 + x2096;
-Tbase TZ x2098 = x2092 + x2097;
-Tbase TZ x2099 = x2091 + x2098;
-Tbase TZ x2100 = x2090 + x2099;
-Tbase TZ x2101 = x1839 * x172;
-Tbase TZ x2102 = x1842 * x171;
-Tbase TZ x2103 = x1845 * x170;
-Tbase TZ x2104 = x1848 * x169;
-Tbase TZ x2105 = x1851 * x168;
-Tbase TZ x2106 = x1854 * x167;
-Tbase TZ x2107 = x1857 * x166;
-Tbase TZ x2108 = x1860 * x165;
-Tbase TZ x2109 = x1863 * x164;
-Tbase TZ x2110 = x1866 * x163;
-Tbase TZ x2111 = x1869 * x162;
-Tbase TZ x2112 = x1872 * x161;
-Tbase TZ x2113 = x2111 + x2112;
-Tbase TZ x2114 = x2110 + x2113;
-Tbase TZ x2115 = x2109 + x2114;
-Tbase TZ x2116 = x2108 + x2115;
-Tbase TZ x2117 = x2107 + x2116;
-Tbase TZ x2118 = x2106 + x2117;
-Tbase TZ x2119 = x2105 + x2118;
-Tbase TZ x2120 = x2104 + x2119;
-Tbase TZ x2121 = x2103 + x2120;
-Tbase TZ x2122 = x2102 + x2121;
-Tbase TZ x2123 = x2101 + x2122;
-Tbase TZ x2124 = 0x11;
-Tbase TZ x2125 = x2124 * x2123;
-Tbase TZ x2126 = x2100 + x2125;
-Tbase TZ x2127 = x2089 + x2126;
-Tbase TZ x2128 = 0x17;
-Tbase TZ x2129 = x2127 >> x2128;
-Tbase TZ x2130 = x1872 * x178;
-Tbase TZ x2131 = x1875 * x177;
-Tbase TZ x2132 = x1878 * x176;
-Tbase TZ x2133 = x1881 * x175;
-Tbase TZ x2134 = x1884 * x174;
-Tbase TZ x2135 = x1887 * x173;
-Tbase TZ x2136 = x1890 * x172;
-Tbase TZ x2137 = x2135 + x2136;
-Tbase TZ x2138 = x2134 + x2137;
-Tbase TZ x2139 = x2133 + x2138;
-Tbase TZ x2140 = x2132 + x2139;
-Tbase TZ x2141 = x2131 + x2140;
-Tbase TZ x2142 = x2130 + x2141;
-Tbase TZ x2143 = x1839 * x171;
-Tbase TZ x2144 = x1842 * x170;
-Tbase TZ x2145 = x1845 * x169;
-Tbase TZ x2146 = x1848 * x168;
-Tbase TZ x2147 = x1851 * x167;
-Tbase TZ x2148 = x1854 * x166;
-Tbase TZ x2149 = x1857 * x165;
-Tbase TZ x2150 = x1860 * x164;
-Tbase TZ x2151 = x1863 * x163;
-Tbase TZ x2152 = x1866 * x162;
-Tbase TZ x2153 = x1869 * x161;
-Tbase TZ x2154 = x2152 + x2153;
-Tbase TZ x2155 = x2151 + x2154;
-Tbase TZ x2156 = x2150 + x2155;
-Tbase TZ x2157 = x2149 + x2156;
-Tbase TZ x2158 = x2148 + x2157;
-Tbase TZ x2159 = x2147 + x2158;
-Tbase TZ x2160 = x2146 + x2159;
-Tbase TZ x2161 = x2145 + x2160;
-Tbase TZ x2162 = x2144 + x2161;
-Tbase TZ x2163 = x2143 + x2162;
-Tbase TZ x2164 = 0x11;
-Tbase TZ x2165 = x2164 * x2163;
-Tbase TZ x2166 = x2142 + x2165;
-Tbase TZ x2167 = x2129 + x2166;
-Tbase TZ x2168 = 0x17;
-Tbase TZ x2169 = x2167 >> x2168;
-Tbase TZ x2170 = x1869 * x178;
-Tbase TZ x2171 = x1872 * x177;
-Tbase TZ x2172 = x1875 * x176;
-Tbase TZ x2173 = x1878 * x175;
-Tbase TZ x2174 = x1881 * x174;
-Tbase TZ x2175 = x1884 * x173;
-Tbase TZ x2176 = x1887 * x172;
-Tbase TZ x2177 = x1890 * x171;
-Tbase TZ x2178 = x2176 + x2177;
-Tbase TZ x2179 = x2175 + x2178;
-Tbase TZ x2180 = x2174 + x2179;
-Tbase TZ x2181 = x2173 + x2180;
-Tbase TZ x2182 = x2172 + x2181;
-Tbase TZ x2183 = x2171 + x2182;
-Tbase TZ x2184 = x2170 + x2183;
-Tbase TZ x2185 = x1839 * x170;
-Tbase TZ x2186 = x1842 * x169;
-Tbase TZ x2187 = x1845 * x168;
-Tbase TZ x2188 = x1848 * x167;
-Tbase TZ x2189 = x1851 * x166;
-Tbase TZ x2190 = x1854 * x165;
-Tbase TZ x2191 = x1857 * x164;
-Tbase TZ x2192 = x1860 * x163;
-Tbase TZ x2193 = x1863 * x162;
-Tbase TZ x2194 = x1866 * x161;
-Tbase TZ x2195 = x2193 + x2194;
-Tbase TZ x2196 = x2192 + x2195;
-Tbase TZ x2197 = x2191 + x2196;
-Tbase TZ x2198 = x2190 + x2197;
-Tbase TZ x2199 = x2189 + x2198;
-Tbase TZ x2200 = x2188 + x2199;
-Tbase TZ x2201 = x2187 + x2200;
-Tbase TZ x2202 = x2186 + x2201;
-Tbase TZ x2203 = x2185 + x2202;
-Tbase TZ x2204 = 0x11;
-Tbase TZ x2205 = x2204 * x2203;
-Tbase TZ x2206 = x2184 + x2205;
-Tbase TZ x2207 = x2169 + x2206;
-Tbase TZ x2208 = 0x17;
-Tbase TZ x2209 = x2207 >> x2208;
-Tbase TZ x2210 = x1866 * x178;
-Tbase TZ x2211 = x1869 * x177;
-Tbase TZ x2212 = x1872 * x176;
-Tbase TZ x2213 = x1875 * x175;
-Tbase TZ x2214 = x1878 * x174;
-Tbase TZ x2215 = x1881 * x173;
-Tbase TZ x2216 = x1884 * x172;
-Tbase TZ x2217 = x1887 * x171;
-Tbase TZ x2218 = x1890 * x170;
-Tbase TZ x2219 = x2217 + x2218;
-Tbase TZ x2220 = x2216 + x2219;
-Tbase TZ x2221 = x2215 + x2220;
-Tbase TZ x2222 = x2214 + x2221;
-Tbase TZ x2223 = x2213 + x2222;
-Tbase TZ x2224 = x2212 + x2223;
-Tbase TZ x2225 = x2211 + x2224;
-Tbase TZ x2226 = x2210 + x2225;
-Tbase TZ x2227 = x1839 * x169;
-Tbase TZ x2228 = x1842 * x168;
-Tbase TZ x2229 = x1845 * x167;
-Tbase TZ x2230 = x1848 * x166;
-Tbase TZ x2231 = x1851 * x165;
-Tbase TZ x2232 = x1854 * x164;
-Tbase TZ x2233 = x1857 * x163;
-Tbase TZ x2234 = x1860 * x162;
-Tbase TZ x2235 = x1863 * x161;
-Tbase TZ x2236 = x2234 + x2235;
-Tbase TZ x2237 = x2233 + x2236;
-Tbase TZ x2238 = x2232 + x2237;
-Tbase TZ x2239 = x2231 + x2238;
-Tbase TZ x2240 = x2230 + x2239;
-Tbase TZ x2241 = x2229 + x2240;
-Tbase TZ x2242 = x2228 + x2241;
-Tbase TZ x2243 = x2227 + x2242;
-Tbase TZ x2244 = 0x11;
-Tbase TZ x2245 = x2244 * x2243;
-Tbase TZ x2246 = x2226 + x2245;
-Tbase TZ x2247 = x2209 + x2246;
-Tbase TZ x2248 = 0x17;
-Tbase TZ x2249 = x2247 >> x2248;
-Tbase TZ x2250 = x1863 * x178;
-Tbase TZ x2251 = x1866 * x177;
-Tbase TZ x2252 = x1869 * x176;
-Tbase TZ x2253 = x1872 * x175;
-Tbase TZ x2254 = x1875 * x174;
-Tbase TZ x2255 = x1878 * x173;
-Tbase TZ x2256 = x1881 * x172;
-Tbase TZ x2257 = x1884 * x171;
-Tbase TZ x2258 = x1887 * x170;
-Tbase TZ x2259 = x1890 * x169;
-Tbase TZ x2260 = x2258 + x2259;
-Tbase TZ x2261 = x2257 + x2260;
-Tbase TZ x2262 = x2256 + x2261;
-Tbase TZ x2263 = x2255 + x2262;
-Tbase TZ x2264 = x2254 + x2263;
-Tbase TZ x2265 = x2253 + x2264;
-Tbase TZ x2266 = x2252 + x2265;
-Tbase TZ x2267 = x2251 + x2266;
-Tbase TZ x2268 = x2250 + x2267;
-Tbase TZ x2269 = x1839 * x168;
-Tbase TZ x2270 = x1842 * x167;
-Tbase TZ x2271 = x1845 * x166;
-Tbase TZ x2272 = x1848 * x165;
-Tbase TZ x2273 = x1851 * x164;
-Tbase TZ x2274 = x1854 * x163;
-Tbase TZ x2275 = x1857 * x162;
-Tbase TZ x2276 = x1860 * x161;
-Tbase TZ x2277 = x2275 + x2276;
-Tbase TZ x2278 = x2274 + x2277;
-Tbase TZ x2279 = x2273 + x2278;
-Tbase TZ x2280 = x2272 + x2279;
-Tbase TZ x2281 = x2271 + x2280;
-Tbase TZ x2282 = x2270 + x2281;
-Tbase TZ x2283 = x2269 + x2282;
-Tbase TZ x2284 = 0x11;
-Tbase TZ x2285 = x2284 * x2283;
-Tbase TZ x2286 = x2268 + x2285;
-Tbase TZ x2287 = x2249 + x2286;
-Tbase TZ x2288 = 0x17;
-Tbase TZ x2289 = x2287 >> x2288;
-Tbase TZ x2290 = x1860 * x178;
-Tbase TZ x2291 = x1863 * x177;
-Tbase TZ x2292 = x1866 * x176;
-Tbase TZ x2293 = x1869 * x175;
-Tbase TZ x2294 = x1872 * x174;
-Tbase TZ x2295 = x1875 * x173;
-Tbase TZ x2296 = x1878 * x172;
-Tbase TZ x2297 = x1881 * x171;
-Tbase TZ x2298 = x1884 * x170;
-Tbase TZ x2299 = x1887 * x169;
-Tbase TZ x2300 = x1890 * x168;
-Tbase TZ x2301 = x2299 + x2300;
-Tbase TZ x2302 = x2298 + x2301;
-Tbase TZ x2303 = x2297 + x2302;
-Tbase TZ x2304 = x2296 + x2303;
-Tbase TZ x2305 = x2295 + x2304;
-Tbase TZ x2306 = x2294 + x2305;
-Tbase TZ x2307 = x2293 + x2306;
-Tbase TZ x2308 = x2292 + x2307;
-Tbase TZ x2309 = x2291 + x2308;
-Tbase TZ x2310 = x2290 + x2309;
-Tbase TZ x2311 = x1839 * x167;
-Tbase TZ x2312 = x1842 * x166;
-Tbase TZ x2313 = x1845 * x165;
-Tbase TZ x2314 = x1848 * x164;
-Tbase TZ x2315 = x1851 * x163;
-Tbase TZ x2316 = x1854 * x162;
-Tbase TZ x2317 = x1857 * x161;
-Tbase TZ x2318 = x2316 + x2317;
-Tbase TZ x2319 = x2315 + x2318;
-Tbase TZ x2320 = x2314 + x2319;
-Tbase TZ x2321 = x2313 + x2320;
-Tbase TZ x2322 = x2312 + x2321;
-Tbase TZ x2323 = x2311 + x2322;
-Tbase TZ x2324 = 0x11;
-Tbase TZ x2325 = x2324 * x2323;
-Tbase TZ x2326 = x2310 + x2325;
-Tbase TZ x2327 = x2289 + x2326;
-Tbase TZ x2328 = 0x17;
-Tbase TZ x2329 = x2327 >> x2328;
-Tbase TZ x2330 = x1857 * x178;
-Tbase TZ x2331 = x1860 * x177;
-Tbase TZ x2332 = x1863 * x176;
-Tbase TZ x2333 = x1866 * x175;
-Tbase TZ x2334 = x1869 * x174;
-Tbase TZ x2335 = x1872 * x173;
-Tbase TZ x2336 = x1875 * x172;
-Tbase TZ x2337 = x1878 * x171;
-Tbase TZ x2338 = x1881 * x170;
-Tbase TZ x2339 = x1884 * x169;
-Tbase TZ x2340 = x1887 * x168;
-Tbase TZ x2341 = x1890 * x167;
-Tbase TZ x2342 = x2340 + x2341;
-Tbase TZ x2343 = x2339 + x2342;
-Tbase TZ x2344 = x2338 + x2343;
-Tbase TZ x2345 = x2337 + x2344;
-Tbase TZ x2346 = x2336 + x2345;
-Tbase TZ x2347 = x2335 + x2346;
-Tbase TZ x2348 = x2334 + x2347;
-Tbase TZ x2349 = x2333 + x2348;
-Tbase TZ x2350 = x2332 + x2349;
-Tbase TZ x2351 = x2331 + x2350;
-Tbase TZ x2352 = x2330 + x2351;
-Tbase TZ x2353 = x1839 * x166;
-Tbase TZ x2354 = x1842 * x165;
-Tbase TZ x2355 = x1845 * x164;
-Tbase TZ x2356 = x1848 * x163;
-Tbase TZ x2357 = x1851 * x162;
-Tbase TZ x2358 = x1854 * x161;
-Tbase TZ x2359 = x2357 + x2358;
-Tbase TZ x2360 = x2356 + x2359;
-Tbase TZ x2361 = x2355 + x2360;
-Tbase TZ x2362 = x2354 + x2361;
-Tbase TZ x2363 = x2353 + x2362;
-Tbase TZ x2364 = 0x11;
-Tbase TZ x2365 = x2364 * x2363;
-Tbase TZ x2366 = x2352 + x2365;
-Tbase TZ x2367 = x2329 + x2366;
-Tbase TZ x2368 = 0x17;
-Tbase TZ x2369 = x2367 >> x2368;
-Tbase TZ x2370 = x1854 * x178;
-Tbase TZ x2371 = x1857 * x177;
-Tbase TZ x2372 = x1860 * x176;
-Tbase TZ x2373 = x1863 * x175;
-Tbase TZ x2374 = x1866 * x174;
-Tbase TZ x2375 = x1869 * x173;
-Tbase TZ x2376 = x1872 * x172;
-Tbase TZ x2377 = x1875 * x171;
-Tbase TZ x2378 = x1878 * x170;
-Tbase TZ x2379 = x1881 * x169;
-Tbase TZ x2380 = x1884 * x168;
-Tbase TZ x2381 = x1887 * x167;
-Tbase TZ x2382 = x1890 * x166;
-Tbase TZ x2383 = x2381 + x2382;
-Tbase TZ x2384 = x2380 + x2383;
-Tbase TZ x2385 = x2379 + x2384;
-Tbase TZ x2386 = x2378 + x2385;
-Tbase TZ x2387 = x2377 + x2386;
-Tbase TZ x2388 = x2376 + x2387;
-Tbase TZ x2389 = x2375 + x2388;
-Tbase TZ x2390 = x2374 + x2389;
-Tbase TZ x2391 = x2373 + x2390;
-Tbase TZ x2392 = x2372 + x2391;
-Tbase TZ x2393 = x2371 + x2392;
-Tbase TZ x2394 = x2370 + x2393;
-Tbase TZ x2395 = x1839 * x165;
-Tbase TZ x2396 = x1842 * x164;
-Tbase TZ x2397 = x1845 * x163;
-Tbase TZ x2398 = x1848 * x162;
-Tbase TZ x2399 = x1851 * x161;
-Tbase TZ x2400 = x2398 + x2399;
-Tbase TZ x2401 = x2397 + x2400;
-Tbase TZ x2402 = x2396 + x2401;
-Tbase TZ x2403 = x2395 + x2402;
-Tbase TZ x2404 = 0x11;
-Tbase TZ x2405 = x2404 * x2403;
-Tbase TZ x2406 = x2394 + x2405;
-Tbase TZ x2407 = x2369 + x2406;
-Tbase TZ x2408 = 0x17;
-Tbase TZ x2409 = x2407 >> x2408;
-Tbase TZ x2410 = x1851 * x178;
-Tbase TZ x2411 = x1854 * x177;
-Tbase TZ x2412 = x1857 * x176;
-Tbase TZ x2413 = x1860 * x175;
-Tbase TZ x2414 = x1863 * x174;
-Tbase TZ x2415 = x1866 * x173;
-Tbase TZ x2416 = x1869 * x172;
-Tbase TZ x2417 = x1872 * x171;
-Tbase TZ x2418 = x1875 * x170;
-Tbase TZ x2419 = x1878 * x169;
-Tbase TZ x2420 = x1881 * x168;
-Tbase TZ x2421 = x1884 * x167;
-Tbase TZ x2422 = x1887 * x166;
-Tbase TZ x2423 = x1890 * x165;
-Tbase TZ x2424 = x2422 + x2423;
-Tbase TZ x2425 = x2421 + x2424;
-Tbase TZ x2426 = x2420 + x2425;
-Tbase TZ x2427 = x2419 + x2426;
-Tbase TZ x2428 = x2418 + x2427;
-Tbase TZ x2429 = x2417 + x2428;
-Tbase TZ x2430 = x2416 + x2429;
-Tbase TZ x2431 = x2415 + x2430;
-Tbase TZ x2432 = x2414 + x2431;
-Tbase TZ x2433 = x2413 + x2432;
-Tbase TZ x2434 = x2412 + x2433;
-Tbase TZ x2435 = x2411 + x2434;
-Tbase TZ x2436 = x2410 + x2435;
-Tbase TZ x2437 = x1839 * x164;
-Tbase TZ x2438 = x1842 * x163;
-Tbase TZ x2439 = x1845 * x162;
-Tbase TZ x2440 = x1848 * x161;
-Tbase TZ x2441 = x2439 + x2440;
-Tbase TZ x2442 = x2438 + x2441;
-Tbase TZ x2443 = x2437 + x2442;
-Tbase TZ x2444 = 0x11;
-Tbase TZ x2445 = x2444 * x2443;
-Tbase TZ x2446 = x2436 + x2445;
-Tbase TZ x2447 = x2409 + x2446;
-Tbase TZ x2448 = 0x17;
-Tbase TZ x2449 = x2447 >> x2448;
-Tbase TZ x2450 = x1848 * x178;
-Tbase TZ x2451 = x1851 * x177;
-Tbase TZ x2452 = x1854 * x176;
-Tbase TZ x2453 = x1857 * x175;
-Tbase TZ x2454 = x1860 * x174;
-Tbase TZ x2455 = x1863 * x173;
-Tbase TZ x2456 = x1866 * x172;
-Tbase TZ x2457 = x1869 * x171;
-Tbase TZ x2458 = x1872 * x170;
-Tbase TZ x2459 = x1875 * x169;
-Tbase TZ x2460 = x1878 * x168;
-Tbase TZ x2461 = x1881 * x167;
-Tbase TZ x2462 = x1884 * x166;
-Tbase TZ x2463 = x1887 * x165;
-Tbase TZ x2464 = x1890 * x164;
-Tbase TZ x2465 = x2463 + x2464;
-Tbase TZ x2466 = x2462 + x2465;
-Tbase TZ x2467 = x2461 + x2466;
-Tbase TZ x2468 = x2460 + x2467;
-Tbase TZ x2469 = x2459 + x2468;
-Tbase TZ x2470 = x2458 + x2469;
-Tbase TZ x2471 = x2457 + x2470;
-Tbase TZ x2472 = x2456 + x2471;
-Tbase TZ x2473 = x2455 + x2472;
-Tbase TZ x2474 = x2454 + x2473;
-Tbase TZ x2475 = x2453 + x2474;
-Tbase TZ x2476 = x2452 + x2475;
-Tbase TZ x2477 = x2451 + x2476;
-Tbase TZ x2478 = x2450 + x2477;
-Tbase TZ x2479 = x1839 * x163;
-Tbase TZ x2480 = x1842 * x162;
-Tbase TZ x2481 = x1845 * x161;
-Tbase TZ x2482 = x2480 + x2481;
-Tbase TZ x2483 = x2479 + x2482;
-Tbase TZ x2484 = 0x11;
-Tbase TZ x2485 = x2484 * x2483;
-Tbase TZ x2486 = x2478 + x2485;
-Tbase TZ x2487 = x2449 + x2486;
-Tbase TZ x2488 = 0x17;
-Tbase TZ x2489 = x2487 >> x2488;
-Tbase TZ x2490 = x1845 * x178;
-Tbase TZ x2491 = x1848 * x177;
-Tbase TZ x2492 = x1851 * x176;
-Tbase TZ x2493 = x1854 * x175;
-Tbase TZ x2494 = x1857 * x174;
-Tbase TZ x2495 = x1860 * x173;
-Tbase TZ x2496 = x1863 * x172;
-Tbase TZ x2497 = x1866 * x171;
-Tbase TZ x2498 = x1869 * x170;
-Tbase TZ x2499 = x1872 * x169;
-Tbase TZ x2500 = x1875 * x168;
-Tbase TZ x2501 = x1878 * x167;
-Tbase TZ x2502 = x1881 * x166;
-Tbase TZ x2503 = x1884 * x165;
-Tbase TZ x2504 = x1887 * x164;
-Tbase TZ x2505 = x1890 * x163;
-Tbase TZ x2506 = x2504 + x2505;
-Tbase TZ x2507 = x2503 + x2506;
-Tbase TZ x2508 = x2502 + x2507;
-Tbase TZ x2509 = x2501 + x2508;
-Tbase TZ x2510 = x2500 + x2509;
-Tbase TZ x2511 = x2499 + x2510;
-Tbase TZ x2512 = x2498 + x2511;
-Tbase TZ x2513 = x2497 + x2512;
-Tbase TZ x2514 = x2496 + x2513;
-Tbase TZ x2515 = x2495 + x2514;
-Tbase TZ x2516 = x2494 + x2515;
-Tbase TZ x2517 = x2493 + x2516;
-Tbase TZ x2518 = x2492 + x2517;
-Tbase TZ x2519 = x2491 + x2518;
-Tbase TZ x2520 = x2490 + x2519;
-Tbase TZ x2521 = x1839 * x162;
-Tbase TZ x2522 = x1842 * x161;
-Tbase TZ x2523 = x2521 + x2522;
-Tbase TZ x2524 = 0x11;
-Tbase TZ x2525 = x2524 * x2523;
-Tbase TZ x2526 = x2520 + x2525;
-Tbase TZ x2527 = x2489 + x2526;
-Tbase TZ x2528 = 0x17;
-Tbase TZ x2529 = x2527 >> x2528;
-Tbase TZ x2530 = x1842 * x178;
-Tbase TZ x2531 = x1845 * x177;
-Tbase TZ x2532 = x1848 * x176;
-Tbase TZ x2533 = x1851 * x175;
-Tbase TZ x2534 = x1854 * x174;
-Tbase TZ x2535 = x1857 * x173;
-Tbase TZ x2536 = x1860 * x172;
-Tbase TZ x2537 = x1863 * x171;
-Tbase TZ x2538 = x1866 * x170;
-Tbase TZ x2539 = x1869 * x169;
-Tbase TZ x2540 = x1872 * x168;
-Tbase TZ x2541 = x1875 * x167;
-Tbase TZ x2542 = x1878 * x166;
-Tbase TZ x2543 = x1881 * x165;
-Tbase TZ x2544 = x1884 * x164;
-Tbase TZ x2545 = x1887 * x163;
-Tbase TZ x2546 = x1890 * x162;
-Tbase TZ x2547 = x2545 + x2546;
-Tbase TZ x2548 = x2544 + x2547;
-Tbase TZ x2549 = x2543 + x2548;
-Tbase TZ x2550 = x2542 + x2549;
-Tbase TZ x2551 = x2541 + x2550;
-Tbase TZ x2552 = x2540 + x2551;
-Tbase TZ x2553 = x2539 + x2552;
-Tbase TZ x2554 = x2538 + x2553;
-Tbase TZ x2555 = x2537 + x2554;
-Tbase TZ x2556 = x2536 + x2555;
-Tbase TZ x2557 = x2535 + x2556;
-Tbase TZ x2558 = x2534 + x2557;
-Tbase TZ x2559 = x2533 + x2558;
-Tbase TZ x2560 = x2532 + x2559;
-Tbase TZ x2561 = x2531 + x2560;
-Tbase TZ x2562 = x2530 + x2561;
-Tbase TZ x2563 = x1839 * x161;
-Tbase TZ x2564 = 0x11;
-Tbase TZ x2565 = x2564 * x2563;
-Tbase TZ x2566 = x2562 + x2565;
-Tbase TZ x2567 = x2529 + x2566;
-Tbase TZ x2568 = 0x17;
-Tbase TZ x2569 = x2567 >> x2568;
-Tbase TZ x2570 = x1839 * x178;
-Tbase TZ x2571 = x1842 * x177;
-Tbase TZ x2572 = x1845 * x176;
-Tbase TZ x2573 = x1848 * x175;
-Tbase TZ x2574 = x1851 * x174;
-Tbase TZ x2575 = x1854 * x173;
-Tbase TZ x2576 = x1857 * x172;
-Tbase TZ x2577 = x1860 * x171;
-Tbase TZ x2578 = x1863 * x170;
-Tbase TZ x2579 = x1866 * x169;
-Tbase TZ x2580 = x1869 * x168;
-Tbase TZ x2581 = x1872 * x167;
-Tbase TZ x2582 = x1875 * x166;
-Tbase TZ x2583 = x1878 * x165;
-Tbase TZ x2584 = x1881 * x164;
-Tbase TZ x2585 = x1884 * x163;
-Tbase TZ x2586 = x1887 * x162;
-Tbase TZ x2587 = x1890 * x161;
-Tbase TZ x2588 = x2586 + x2587;
-Tbase TZ x2589 = x2585 + x2588;
-Tbase TZ x2590 = x2584 + x2589;
-Tbase TZ x2591 = x2583 + x2590;
-Tbase TZ x2592 = x2582 + x2591;
-Tbase TZ x2593 = x2581 + x2592;
-Tbase TZ x2594 = x2580 + x2593;
-Tbase TZ x2595 = x2579 + x2594;
-Tbase TZ x2596 = x2578 + x2595;
-Tbase TZ x2597 = x2577 + x2596;
-Tbase TZ x2598 = x2576 + x2597;
-Tbase TZ x2599 = x2575 + x2598;
-Tbase TZ x2600 = x2574 + x2599;
-Tbase TZ x2601 = x2573 + x2600;
-Tbase TZ x2602 = x2572 + x2601;
-Tbase TZ x2603 = x2571 + x2602;
-Tbase TZ x2604 = x2570 + x2603;
-Tbase TZ x2605 = x2569 + x2604;
-Tbase TZ x2606 = 0x17;
-Tbase TZ x2607 = x2605 >> x2606;
-Tbase TZ x2608 = 0x11;
-Tbase TZ x2609 = x2608 * x2607;
-Tbase TZ x2610 = 0x7fffff;
-Tbase TZ x2611 = x1927 & x2610;
-Tbase TZ x2612 = x2609 + x2611;
-Tbase TZ x2613 = 0x17;
-Tbase TZ x2614 = x2612 >> x2613;
-Tbase TZ x2615 = 0x7fffff;
-Tbase TZ x2616 = x1967 & x2615;
-Tbase TZ x2617 = x2614 + x2616;
-Tbase TZ x2618 = 0x7fffff;
-Tbase TZ x2619 = x2605 & x2618;
-Tbase TZ x2620 = 0x7fffff;
-Tbase TZ x2621 = x2567 & x2620;
-Tbase TZ x2622 = 0x7fffff;
-Tbase TZ x2623 = x2527 & x2622;
-Tbase TZ x2624 = 0x7fffff;
-Tbase TZ x2625 = x2487 & x2624;
-Tbase TZ x2626 = 0x7fffff;
-Tbase TZ x2627 = x2447 & x2626;
-Tbase TZ x2628 = 0x7fffff;
-Tbase TZ x2629 = x2407 & x2628;
-Tbase TZ x2630 = 0x7fffff;
-Tbase TZ x2631 = x2367 & x2630;
-Tbase TZ x2632 = 0x7fffff;
-Tbase TZ x2633 = x2327 & x2632;
-Tbase TZ x2634 = 0x7fffff;
-Tbase TZ x2635 = x2287 & x2634;
-Tbase TZ x2636 = 0x7fffff;
-Tbase TZ x2637 = x2247 & x2636;
-Tbase TZ x2638 = 0x7fffff;
-Tbase TZ x2639 = x2207 & x2638;
-Tbase TZ x2640 = 0x7fffff;
-Tbase TZ x2641 = x2167 & x2640;
-Tbase TZ x2642 = 0x7fffff;
-Tbase TZ x2643 = x2127 & x2642;
-Tbase TZ x2644 = 0x7fffff;
-Tbase TZ x2645 = x2087 & x2644;
-Tbase TZ x2646 = 0x7fffff;
-Tbase TZ x2647 = x2047 & x2646;
-Tbase TZ x2648 = 0x17;
-Tbase TZ x2649 = x2617 >> x2648;
-Tbase TZ x2650 = 0x7fffff;
-Tbase TZ x2651 = x2007 & x2650;
-Tbase TZ x2652 = x2649 + x2651;
-Tbase TZ x2653 = 0x7fffff;
-Tbase TZ x2654 = x2617 & x2653;
-Tbase TZ x2655 = 0x7fffff;
-Tbase TZ x2656 = x2612 & x2655;
-Tbase TZ x2657 = x1836 * x998;
-Tbase TZ x2658 = x1819 * x995;
-Tbase TZ x2659 = x1820 * x992;
-Tbase TZ x2660 = x1821 * x989;
-Tbase TZ x2661 = x1822 * x986;
-Tbase TZ x2662 = x1823 * x983;
-Tbase TZ x2663 = x1824 * x980;
-Tbase TZ x2664 = x1825 * x977;
-Tbase TZ x2665 = x1826 * x974;
-Tbase TZ x2666 = x1827 * x971;
-Tbase TZ x2667 = x1828 * x968;
-Tbase TZ x2668 = x1829 * x965;
-Tbase TZ x2669 = x1830 * x962;
-Tbase TZ x2670 = x1831 * x959;
-Tbase TZ x2671 = x1832 * x956;
-Tbase TZ x2672 = x1833 * x953;
-Tbase TZ x2673 = x1834 * x950;
-Tbase TZ x2674 = x1835 * x947;
-Tbase TZ x2675 = x2673 + x2674;
-Tbase TZ x2676 = x2672 + x2675;
-Tbase TZ x2677 = x2671 + x2676;
-Tbase TZ x2678 = x2670 + x2677;
-Tbase TZ x2679 = x2669 + x2678;
-Tbase TZ x2680 = x2668 + x2679;
-Tbase TZ x2681 = x2667 + x2680;
-Tbase TZ x2682 = x2666 + x2681;
-Tbase TZ x2683 = x2665 + x2682;
-Tbase TZ x2684 = x2664 + x2683;
-Tbase TZ x2685 = x2663 + x2684;
-Tbase TZ x2686 = x2662 + x2685;
-Tbase TZ x2687 = x2661 + x2686;
-Tbase TZ x2688 = x2660 + x2687;
-Tbase TZ x2689 = x2659 + x2688;
-Tbase TZ x2690 = x2658 + x2689;
-Tbase TZ x2691 = 0x11;
-Tbase TZ x2692 = x2691 * x2690;
-Tbase TZ x2693 = x2657 + x2692;
-Tbase TZ x2694 = 0x17;
-Tbase TZ x2695 = x2693 >> x2694;
-Tbase TZ x2696 = x1835 * x998;
-Tbase TZ x2697 = x1836 * x995;
-Tbase TZ x2698 = x2696 + x2697;
-Tbase TZ x2699 = x1819 * x992;
-Tbase TZ x2700 = x1820 * x989;
-Tbase TZ x2701 = x1821 * x986;
-Tbase TZ x2702 = x1822 * x983;
-Tbase TZ x2703 = x1823 * x980;
-Tbase TZ x2704 = x1824 * x977;
-Tbase TZ x2705 = x1825 * x974;
-Tbase TZ x2706 = x1826 * x971;
-Tbase TZ x2707 = x1827 * x968;
-Tbase TZ x2708 = x1828 * x965;
-Tbase TZ x2709 = x1829 * x962;
-Tbase TZ x2710 = x1830 * x959;
-Tbase TZ x2711 = x1831 * x956;
-Tbase TZ x2712 = x1832 * x953;
-Tbase TZ x2713 = x1833 * x950;
-Tbase TZ x2714 = x1834 * x947;
-Tbase TZ x2715 = x2713 + x2714;
-Tbase TZ x2716 = x2712 + x2715;
-Tbase TZ x2717 = x2711 + x2716;
-Tbase TZ x2718 = x2710 + x2717;
-Tbase TZ x2719 = x2709 + x2718;
-Tbase TZ x2720 = x2708 + x2719;
-Tbase TZ x2721 = x2707 + x2720;
-Tbase TZ x2722 = x2706 + x2721;
-Tbase TZ x2723 = x2705 + x2722;
-Tbase TZ x2724 = x2704 + x2723;
-Tbase TZ x2725 = x2703 + x2724;
-Tbase TZ x2726 = x2702 + x2725;
-Tbase TZ x2727 = x2701 + x2726;
-Tbase TZ x2728 = x2700 + x2727;
-Tbase TZ x2729 = x2699 + x2728;
-Tbase TZ x2730 = 0x11;
-Tbase TZ x2731 = x2730 * x2729;
-Tbase TZ x2732 = x2698 + x2731;
-Tbase TZ x2733 = x2695 + x2732;
-Tbase TZ x2734 = 0x17;
-Tbase TZ x2735 = x2733 >> x2734;
-Tbase TZ x2736 = x1834 * x998;
-Tbase TZ x2737 = x1835 * x995;
-Tbase TZ x2738 = x1836 * x992;
-Tbase TZ x2739 = x2737 + x2738;
-Tbase TZ x2740 = x2736 + x2739;
-Tbase TZ x2741 = x1819 * x989;
-Tbase TZ x2742 = x1820 * x986;
-Tbase TZ x2743 = x1821 * x983;
-Tbase TZ x2744 = x1822 * x980;
-Tbase TZ x2745 = x1823 * x977;
-Tbase TZ x2746 = x1824 * x974;
-Tbase TZ x2747 = x1825 * x971;
-Tbase TZ x2748 = x1826 * x968;
-Tbase TZ x2749 = x1827 * x965;
-Tbase TZ x2750 = x1828 * x962;
-Tbase TZ x2751 = x1829 * x959;
-Tbase TZ x2752 = x1830 * x956;
-Tbase TZ x2753 = x1831 * x953;
-Tbase TZ x2754 = x1832 * x950;
-Tbase TZ x2755 = x1833 * x947;
-Tbase TZ x2756 = x2754 + x2755;
-Tbase TZ x2757 = x2753 + x2756;
-Tbase TZ x2758 = x2752 + x2757;
-Tbase TZ x2759 = x2751 + x2758;
-Tbase TZ x2760 = x2750 + x2759;
-Tbase TZ x2761 = x2749 + x2760;
-Tbase TZ x2762 = x2748 + x2761;
-Tbase TZ x2763 = x2747 + x2762;
-Tbase TZ x2764 = x2746 + x2763;
-Tbase TZ x2765 = x2745 + x2764;
-Tbase TZ x2766 = x2744 + x2765;
-Tbase TZ x2767 = x2743 + x2766;
-Tbase TZ x2768 = x2742 + x2767;
-Tbase TZ x2769 = x2741 + x2768;
-Tbase TZ x2770 = 0x11;
-Tbase TZ x2771 = x2770 * x2769;
-Tbase TZ x2772 = x2740 + x2771;
-Tbase TZ x2773 = x2735 + x2772;
-Tbase TZ x2774 = 0x17;
-Tbase TZ x2775 = x2773 >> x2774;
-Tbase TZ x2776 = x1833 * x998;
-Tbase TZ x2777 = x1834 * x995;
-Tbase TZ x2778 = x1835 * x992;
-Tbase TZ x2779 = x1836 * x989;
-Tbase TZ x2780 = x2778 + x2779;
-Tbase TZ x2781 = x2777 + x2780;
-Tbase TZ x2782 = x2776 + x2781;
-Tbase TZ x2783 = x1819 * x986;
-Tbase TZ x2784 = x1820 * x983;
-Tbase TZ x2785 = x1821 * x980;
-Tbase TZ x2786 = x1822 * x977;
-Tbase TZ x2787 = x1823 * x974;
-Tbase TZ x2788 = x1824 * x971;
-Tbase TZ x2789 = x1825 * x968;
-Tbase TZ x2790 = x1826 * x965;
-Tbase TZ x2791 = x1827 * x962;
-Tbase TZ x2792 = x1828 * x959;
-Tbase TZ x2793 = x1829 * x956;
-Tbase TZ x2794 = x1830 * x953;
-Tbase TZ x2795 = x1831 * x950;
-Tbase TZ x2796 = x1832 * x947;
-Tbase TZ x2797 = x2795 + x2796;
-Tbase TZ x2798 = x2794 + x2797;
-Tbase TZ x2799 = x2793 + x2798;
-Tbase TZ x2800 = x2792 + x2799;
-Tbase TZ x2801 = x2791 + x2800;
-Tbase TZ x2802 = x2790 + x2801;
-Tbase TZ x2803 = x2789 + x2802;
-Tbase TZ x2804 = x2788 + x2803;
-Tbase TZ x2805 = x2787 + x2804;
-Tbase TZ x2806 = x2786 + x2805;
-Tbase TZ x2807 = x2785 + x2806;
-Tbase TZ x2808 = x2784 + x2807;
-Tbase TZ x2809 = x2783 + x2808;
-Tbase TZ x2810 = 0x11;
-Tbase TZ x2811 = x2810 * x2809;
-Tbase TZ x2812 = x2782 + x2811;
-Tbase TZ x2813 = x2775 + x2812;
-Tbase TZ x2814 = 0x17;
-Tbase TZ x2815 = x2813 >> x2814;
-Tbase TZ x2816 = x1832 * x998;
-Tbase TZ x2817 = x1833 * x995;
-Tbase TZ x2818 = x1834 * x992;
-Tbase TZ x2819 = x1835 * x989;
-Tbase TZ x2820 = x1836 * x986;
-Tbase TZ x2821 = x2819 + x2820;
-Tbase TZ x2822 = x2818 + x2821;
-Tbase TZ x2823 = x2817 + x2822;
-Tbase TZ x2824 = x2816 + x2823;
-Tbase TZ x2825 = x1819 * x983;
-Tbase TZ x2826 = x1820 * x980;
-Tbase TZ x2827 = x1821 * x977;
-Tbase TZ x2828 = x1822 * x974;
-Tbase TZ x2829 = x1823 * x971;
-Tbase TZ x2830 = x1824 * x968;
-Tbase TZ x2831 = x1825 * x965;
-Tbase TZ x2832 = x1826 * x962;
-Tbase TZ x2833 = x1827 * x959;
-Tbase TZ x2834 = x1828 * x956;
-Tbase TZ x2835 = x1829 * x953;
-Tbase TZ x2836 = x1830 * x950;
-Tbase TZ x2837 = x1831 * x947;
-Tbase TZ x2838 = x2836 + x2837;
-Tbase TZ x2839 = x2835 + x2838;
-Tbase TZ x2840 = x2834 + x2839;
-Tbase TZ x2841 = x2833 + x2840;
-Tbase TZ x2842 = x2832 + x2841;
-Tbase TZ x2843 = x2831 + x2842;
-Tbase TZ x2844 = x2830 + x2843;
-Tbase TZ x2845 = x2829 + x2844;
-Tbase TZ x2846 = x2828 + x2845;
-Tbase TZ x2847 = x2827 + x2846;
-Tbase TZ x2848 = x2826 + x2847;
-Tbase TZ x2849 = x2825 + x2848;
-Tbase TZ x2850 = 0x11;
-Tbase TZ x2851 = x2850 * x2849;
-Tbase TZ x2852 = x2824 + x2851;
-Tbase TZ x2853 = x2815 + x2852;
-Tbase TZ x2854 = 0x17;
-Tbase TZ x2855 = x2853 >> x2854;
-Tbase TZ x2856 = x1831 * x998;
-Tbase TZ x2857 = x1832 * x995;
-Tbase TZ x2858 = x1833 * x992;
-Tbase TZ x2859 = x1834 * x989;
-Tbase TZ x2860 = x1835 * x986;
-Tbase TZ x2861 = x1836 * x983;
-Tbase TZ x2862 = x2860 + x2861;
-Tbase TZ x2863 = x2859 + x2862;
-Tbase TZ x2864 = x2858 + x2863;
-Tbase TZ x2865 = x2857 + x2864;
-Tbase TZ x2866 = x2856 + x2865;
-Tbase TZ x2867 = x1819 * x980;
-Tbase TZ x2868 = x1820 * x977;
-Tbase TZ x2869 = x1821 * x974;
-Tbase TZ x2870 = x1822 * x971;
-Tbase TZ x2871 = x1823 * x968;
-Tbase TZ x2872 = x1824 * x965;
-Tbase TZ x2873 = x1825 * x962;
-Tbase TZ x2874 = x1826 * x959;
-Tbase TZ x2875 = x1827 * x956;
-Tbase TZ x2876 = x1828 * x953;
-Tbase TZ x2877 = x1829 * x950;
-Tbase TZ x2878 = x1830 * x947;
-Tbase TZ x2879 = x2877 + x2878;
-Tbase TZ x2880 = x2876 + x2879;
-Tbase TZ x2881 = x2875 + x2880;
-Tbase TZ x2882 = x2874 + x2881;
-Tbase TZ x2883 = x2873 + x2882;
-Tbase TZ x2884 = x2872 + x2883;
-Tbase TZ x2885 = x2871 + x2884;
-Tbase TZ x2886 = x2870 + x2885;
-Tbase TZ x2887 = x2869 + x2886;
-Tbase TZ x2888 = x2868 + x2887;
-Tbase TZ x2889 = x2867 + x2888;
-Tbase TZ x2890 = 0x11;
-Tbase TZ x2891 = x2890 * x2889;
-Tbase TZ x2892 = x2866 + x2891;
-Tbase TZ x2893 = x2855 + x2892;
-Tbase TZ x2894 = 0x17;
-Tbase TZ x2895 = x2893 >> x2894;
-Tbase TZ x2896 = x1830 * x998;
-Tbase TZ x2897 = x1831 * x995;
-Tbase TZ x2898 = x1832 * x992;
-Tbase TZ x2899 = x1833 * x989;
-Tbase TZ x2900 = x1834 * x986;
-Tbase TZ x2901 = x1835 * x983;
-Tbase TZ x2902 = x1836 * x980;
-Tbase TZ x2903 = x2901 + x2902;
-Tbase TZ x2904 = x2900 + x2903;
-Tbase TZ x2905 = x2899 + x2904;
-Tbase TZ x2906 = x2898 + x2905;
-Tbase TZ x2907 = x2897 + x2906;
-Tbase TZ x2908 = x2896 + x2907;
-Tbase TZ x2909 = x1819 * x977;
-Tbase TZ x2910 = x1820 * x974;
-Tbase TZ x2911 = x1821 * x971;
-Tbase TZ x2912 = x1822 * x968;
-Tbase TZ x2913 = x1823 * x965;
-Tbase TZ x2914 = x1824 * x962;
-Tbase TZ x2915 = x1825 * x959;
-Tbase TZ x2916 = x1826 * x956;
-Tbase TZ x2917 = x1827 * x953;
-Tbase TZ x2918 = x1828 * x950;
-Tbase TZ x2919 = x1829 * x947;
-Tbase TZ x2920 = x2918 + x2919;
-Tbase TZ x2921 = x2917 + x2920;
-Tbase TZ x2922 = x2916 + x2921;
-Tbase TZ x2923 = x2915 + x2922;
-Tbase TZ x2924 = x2914 + x2923;
-Tbase TZ x2925 = x2913 + x2924;
-Tbase TZ x2926 = x2912 + x2925;
-Tbase TZ x2927 = x2911 + x2926;
-Tbase TZ x2928 = x2910 + x2927;
-Tbase TZ x2929 = x2909 + x2928;
-Tbase TZ x2930 = 0x11;
-Tbase TZ x2931 = x2930 * x2929;
-Tbase TZ x2932 = x2908 + x2931;
-Tbase TZ x2933 = x2895 + x2932;
-Tbase TZ x2934 = 0x17;
-Tbase TZ x2935 = x2933 >> x2934;
-Tbase TZ x2936 = x1829 * x998;
-Tbase TZ x2937 = x1830 * x995;
-Tbase TZ x2938 = x1831 * x992;
-Tbase TZ x2939 = x1832 * x989;
-Tbase TZ x2940 = x1833 * x986;
-Tbase TZ x2941 = x1834 * x983;
-Tbase TZ x2942 = x1835 * x980;
-Tbase TZ x2943 = x1836 * x977;
-Tbase TZ x2944 = x2942 + x2943;
-Tbase TZ x2945 = x2941 + x2944;
-Tbase TZ x2946 = x2940 + x2945;
-Tbase TZ x2947 = x2939 + x2946;
-Tbase TZ x2948 = x2938 + x2947;
-Tbase TZ x2949 = x2937 + x2948;
-Tbase TZ x2950 = x2936 + x2949;
-Tbase TZ x2951 = x1819 * x974;
-Tbase TZ x2952 = x1820 * x971;
-Tbase TZ x2953 = x1821 * x968;
-Tbase TZ x2954 = x1822 * x965;
-Tbase TZ x2955 = x1823 * x962;
-Tbase TZ x2956 = x1824 * x959;
-Tbase TZ x2957 = x1825 * x956;
-Tbase TZ x2958 = x1826 * x953;
-Tbase TZ x2959 = x1827 * x950;
-Tbase TZ x2960 = x1828 * x947;
-Tbase TZ x2961 = x2959 + x2960;
-Tbase TZ x2962 = x2958 + x2961;
-Tbase TZ x2963 = x2957 + x2962;
-Tbase TZ x2964 = x2956 + x2963;
-Tbase TZ x2965 = x2955 + x2964;
-Tbase TZ x2966 = x2954 + x2965;
-Tbase TZ x2967 = x2953 + x2966;
-Tbase TZ x2968 = x2952 + x2967;
-Tbase TZ x2969 = x2951 + x2968;
-Tbase TZ x2970 = 0x11;
-Tbase TZ x2971 = x2970 * x2969;
-Tbase TZ x2972 = x2950 + x2971;
-Tbase TZ x2973 = x2935 + x2972;
-Tbase TZ x2974 = 0x17;
-Tbase TZ x2975 = x2973 >> x2974;
-Tbase TZ x2976 = x1828 * x998;
-Tbase TZ x2977 = x1829 * x995;
-Tbase TZ x2978 = x1830 * x992;
-Tbase TZ x2979 = x1831 * x989;
-Tbase TZ x2980 = x1832 * x986;
-Tbase TZ x2981 = x1833 * x983;
-Tbase TZ x2982 = x1834 * x980;
-Tbase TZ x2983 = x1835 * x977;
-Tbase TZ x2984 = x1836 * x974;
-Tbase TZ x2985 = x2983 + x2984;
-Tbase TZ x2986 = x2982 + x2985;
-Tbase TZ x2987 = x2981 + x2986;
-Tbase TZ x2988 = x2980 + x2987;
-Tbase TZ x2989 = x2979 + x2988;
-Tbase TZ x2990 = x2978 + x2989;
-Tbase TZ x2991 = x2977 + x2990;
-Tbase TZ x2992 = x2976 + x2991;
-Tbase TZ x2993 = x1819 * x971;
-Tbase TZ x2994 = x1820 * x968;
-Tbase TZ x2995 = x1821 * x965;
-Tbase TZ x2996 = x1822 * x962;
-Tbase TZ x2997 = x1823 * x959;
-Tbase TZ x2998 = x1824 * x956;
-Tbase TZ x2999 = x1825 * x953;
-Tbase TZ x3000 = x1826 * x950;
-Tbase TZ x3001 = x1827 * x947;
-Tbase TZ x3002 = x3000 + x3001;
-Tbase TZ x3003 = x2999 + x3002;
-Tbase TZ x3004 = x2998 + x3003;
-Tbase TZ x3005 = x2997 + x3004;
-Tbase TZ x3006 = x2996 + x3005;
-Tbase TZ x3007 = x2995 + x3006;
-Tbase TZ x3008 = x2994 + x3007;
-Tbase TZ x3009 = x2993 + x3008;
-Tbase TZ x3010 = 0x11;
-Tbase TZ x3011 = x3010 * x3009;
-Tbase TZ x3012 = x2992 + x3011;
-Tbase TZ x3013 = x2975 + x3012;
-Tbase TZ x3014 = 0x17;
-Tbase TZ x3015 = x3013 >> x3014;
-Tbase TZ x3016 = x1827 * x998;
-Tbase TZ x3017 = x1828 * x995;
-Tbase TZ x3018 = x1829 * x992;
-Tbase TZ x3019 = x1830 * x989;
-Tbase TZ x3020 = x1831 * x986;
-Tbase TZ x3021 = x1832 * x983;
-Tbase TZ x3022 = x1833 * x980;
-Tbase TZ x3023 = x1834 * x977;
-Tbase TZ x3024 = x1835 * x974;
-Tbase TZ x3025 = x1836 * x971;
-Tbase TZ x3026 = x3024 + x3025;
-Tbase TZ x3027 = x3023 + x3026;
-Tbase TZ x3028 = x3022 + x3027;
-Tbase TZ x3029 = x3021 + x3028;
-Tbase TZ x3030 = x3020 + x3029;
-Tbase TZ x3031 = x3019 + x3030;
-Tbase TZ x3032 = x3018 + x3031;
-Tbase TZ x3033 = x3017 + x3032;
-Tbase TZ x3034 = x3016 + x3033;
-Tbase TZ x3035 = x1819 * x968;
-Tbase TZ x3036 = x1820 * x965;
-Tbase TZ x3037 = x1821 * x962;
-Tbase TZ x3038 = x1822 * x959;
-Tbase TZ x3039 = x1823 * x956;
-Tbase TZ x3040 = x1824 * x953;
-Tbase TZ x3041 = x1825 * x950;
-Tbase TZ x3042 = x1826 * x947;
-Tbase TZ x3043 = x3041 + x3042;
-Tbase TZ x3044 = x3040 + x3043;
-Tbase TZ x3045 = x3039 + x3044;
-Tbase TZ x3046 = x3038 + x3045;
-Tbase TZ x3047 = x3037 + x3046;
-Tbase TZ x3048 = x3036 + x3047;
-Tbase TZ x3049 = x3035 + x3048;
-Tbase TZ x3050 = 0x11;
-Tbase TZ x3051 = x3050 * x3049;
-Tbase TZ x3052 = x3034 + x3051;
-Tbase TZ x3053 = x3015 + x3052;
-Tbase TZ x3054 = 0x17;
-Tbase TZ x3055 = x3053 >> x3054;
-Tbase TZ x3056 = x1826 * x998;
-Tbase TZ x3057 = x1827 * x995;
-Tbase TZ x3058 = x1828 * x992;
-Tbase TZ x3059 = x1829 * x989;
-Tbase TZ x3060 = x1830 * x986;
-Tbase TZ x3061 = x1831 * x983;
-Tbase TZ x3062 = x1832 * x980;
-Tbase TZ x3063 = x1833 * x977;
-Tbase TZ x3064 = x1834 * x974;
-Tbase TZ x3065 = x1835 * x971;
-Tbase TZ x3066 = x1836 * x968;
-Tbase TZ x3067 = x3065 + x3066;
-Tbase TZ x3068 = x3064 + x3067;
-Tbase TZ x3069 = x3063 + x3068;
-Tbase TZ x3070 = x3062 + x3069;
-Tbase TZ x3071 = x3061 + x3070;
-Tbase TZ x3072 = x3060 + x3071;
-Tbase TZ x3073 = x3059 + x3072;
-Tbase TZ x3074 = x3058 + x3073;
-Tbase TZ x3075 = x3057 + x3074;
-Tbase TZ x3076 = x3056 + x3075;
-Tbase TZ x3077 = x1819 * x965;
-Tbase TZ x3078 = x1820 * x962;
-Tbase TZ x3079 = x1821 * x959;
-Tbase TZ x3080 = x1822 * x956;
-Tbase TZ x3081 = x1823 * x953;
-Tbase TZ x3082 = x1824 * x950;
-Tbase TZ x3083 = x1825 * x947;
-Tbase TZ x3084 = x3082 + x3083;
-Tbase TZ x3085 = x3081 + x3084;
-Tbase TZ x3086 = x3080 + x3085;
-Tbase TZ x3087 = x3079 + x3086;
-Tbase TZ x3088 = x3078 + x3087;
-Tbase TZ x3089 = x3077 + x3088;
-Tbase TZ x3090 = 0x11;
-Tbase TZ x3091 = x3090 * x3089;
-Tbase TZ x3092 = x3076 + x3091;
-Tbase TZ x3093 = x3055 + x3092;
-Tbase TZ x3094 = 0x17;
-Tbase TZ x3095 = x3093 >> x3094;
-Tbase TZ x3096 = x1825 * x998;
-Tbase TZ x3097 = x1826 * x995;
-Tbase TZ x3098 = x1827 * x992;
-Tbase TZ x3099 = x1828 * x989;
-Tbase TZ x3100 = x1829 * x986;
-Tbase TZ x3101 = x1830 * x983;
-Tbase TZ x3102 = x1831 * x980;
-Tbase TZ x3103 = x1832 * x977;
-Tbase TZ x3104 = x1833 * x974;
-Tbase TZ x3105 = x1834 * x971;
-Tbase TZ x3106 = x1835 * x968;
-Tbase TZ x3107 = x1836 * x965;
-Tbase TZ x3108 = x3106 + x3107;
-Tbase TZ x3109 = x3105 + x3108;
-Tbase TZ x3110 = x3104 + x3109;
-Tbase TZ x3111 = x3103 + x3110;
-Tbase TZ x3112 = x3102 + x3111;
-Tbase TZ x3113 = x3101 + x3112;
-Tbase TZ x3114 = x3100 + x3113;
-Tbase TZ x3115 = x3099 + x3114;
-Tbase TZ x3116 = x3098 + x3115;
-Tbase TZ x3117 = x3097 + x3116;
-Tbase TZ x3118 = x3096 + x3117;
-Tbase TZ x3119 = x1819 * x962;
-Tbase TZ x3120 = x1820 * x959;
-Tbase TZ x3121 = x1821 * x956;
-Tbase TZ x3122 = x1822 * x953;
-Tbase TZ x3123 = x1823 * x950;
-Tbase TZ x3124 = x1824 * x947;
-Tbase TZ x3125 = x3123 + x3124;
-Tbase TZ x3126 = x3122 + x3125;
-Tbase TZ x3127 = x3121 + x3126;
-Tbase TZ x3128 = x3120 + x3127;
-Tbase TZ x3129 = x3119 + x3128;
-Tbase TZ x3130 = 0x11;
-Tbase TZ x3131 = x3130 * x3129;
-Tbase TZ x3132 = x3118 + x3131;
-Tbase TZ x3133 = x3095 + x3132;
-Tbase TZ x3134 = 0x17;
-Tbase TZ x3135 = x3133 >> x3134;
-Tbase TZ x3136 = x1824 * x998;
-Tbase TZ x3137 = x1825 * x995;
-Tbase TZ x3138 = x1826 * x992;
-Tbase TZ x3139 = x1827 * x989;
-Tbase TZ x3140 = x1828 * x986;
-Tbase TZ x3141 = x1829 * x983;
-Tbase TZ x3142 = x1830 * x980;
-Tbase TZ x3143 = x1831 * x977;
-Tbase TZ x3144 = x1832 * x974;
-Tbase TZ x3145 = x1833 * x971;
-Tbase TZ x3146 = x1834 * x968;
-Tbase TZ x3147 = x1835 * x965;
-Tbase TZ x3148 = x1836 * x962;
-Tbase TZ x3149 = x3147 + x3148;
-Tbase TZ x3150 = x3146 + x3149;
-Tbase TZ x3151 = x3145 + x3150;
-Tbase TZ x3152 = x3144 + x3151;
-Tbase TZ x3153 = x3143 + x3152;
-Tbase TZ x3154 = x3142 + x3153;
-Tbase TZ x3155 = x3141 + x3154;
-Tbase TZ x3156 = x3140 + x3155;
-Tbase TZ x3157 = x3139 + x3156;
-Tbase TZ x3158 = x3138 + x3157;
-Tbase TZ x3159 = x3137 + x3158;
-Tbase TZ x3160 = x3136 + x3159;
-Tbase TZ x3161 = x1819 * x959;
-Tbase TZ x3162 = x1820 * x956;
-Tbase TZ x3163 = x1821 * x953;
-Tbase TZ x3164 = x1822 * x950;
-Tbase TZ x3165 = x1823 * x947;
-Tbase TZ x3166 = x3164 + x3165;
-Tbase TZ x3167 = x3163 + x3166;
-Tbase TZ x3168 = x3162 + x3167;
-Tbase TZ x3169 = x3161 + x3168;
-Tbase TZ x3170 = 0x11;
-Tbase TZ x3171 = x3170 * x3169;
-Tbase TZ x3172 = x3160 + x3171;
-Tbase TZ x3173 = x3135 + x3172;
-Tbase TZ x3174 = 0x17;
-Tbase TZ x3175 = x3173 >> x3174;
-Tbase TZ x3176 = x1823 * x998;
-Tbase TZ x3177 = x1824 * x995;
-Tbase TZ x3178 = x1825 * x992;
-Tbase TZ x3179 = x1826 * x989;
-Tbase TZ x3180 = x1827 * x986;
-Tbase TZ x3181 = x1828 * x983;
-Tbase TZ x3182 = x1829 * x980;
-Tbase TZ x3183 = x1830 * x977;
-Tbase TZ x3184 = x1831 * x974;
-Tbase TZ x3185 = x1832 * x971;
-Tbase TZ x3186 = x1833 * x968;
-Tbase TZ x3187 = x1834 * x965;
-Tbase TZ x3188 = x1835 * x962;
-Tbase TZ x3189 = x1836 * x959;
-Tbase TZ x3190 = x3188 + x3189;
-Tbase TZ x3191 = x3187 + x3190;
-Tbase TZ x3192 = x3186 + x3191;
-Tbase TZ x3193 = x3185 + x3192;
-Tbase TZ x3194 = x3184 + x3193;
-Tbase TZ x3195 = x3183 + x3194;
-Tbase TZ x3196 = x3182 + x3195;
-Tbase TZ x3197 = x3181 + x3196;
-Tbase TZ x3198 = x3180 + x3197;
-Tbase TZ x3199 = x3179 + x3198;
-Tbase TZ x3200 = x3178 + x3199;
-Tbase TZ x3201 = x3177 + x3200;
-Tbase TZ x3202 = x3176 + x3201;
-Tbase TZ x3203 = x1819 * x956;
-Tbase TZ x3204 = x1820 * x953;
-Tbase TZ x3205 = x1821 * x950;
-Tbase TZ x3206 = x1822 * x947;
-Tbase TZ x3207 = x3205 + x3206;
-Tbase TZ x3208 = x3204 + x3207;
-Tbase TZ x3209 = x3203 + x3208;
-Tbase TZ x3210 = 0x11;
-Tbase TZ x3211 = x3210 * x3209;
-Tbase TZ x3212 = x3202 + x3211;
-Tbase TZ x3213 = x3175 + x3212;
-Tbase TZ x3214 = 0x17;
-Tbase TZ x3215 = x3213 >> x3214;
-Tbase TZ x3216 = x1822 * x998;
-Tbase TZ x3217 = x1823 * x995;
-Tbase TZ x3218 = x1824 * x992;
-Tbase TZ x3219 = x1825 * x989;
-Tbase TZ x3220 = x1826 * x986;
-Tbase TZ x3221 = x1827 * x983;
-Tbase TZ x3222 = x1828 * x980;
-Tbase TZ x3223 = x1829 * x977;
-Tbase TZ x3224 = x1830 * x974;
-Tbase TZ x3225 = x1831 * x971;
-Tbase TZ x3226 = x1832 * x968;
-Tbase TZ x3227 = x1833 * x965;
-Tbase TZ x3228 = x1834 * x962;
-Tbase TZ x3229 = x1835 * x959;
-Tbase TZ x3230 = x1836 * x956;
-Tbase TZ x3231 = x3229 + x3230;
-Tbase TZ x3232 = x3228 + x3231;
-Tbase TZ x3233 = x3227 + x3232;
-Tbase TZ x3234 = x3226 + x3233;
-Tbase TZ x3235 = x3225 + x3234;
-Tbase TZ x3236 = x3224 + x3235;
-Tbase TZ x3237 = x3223 + x3236;
-Tbase TZ x3238 = x3222 + x3237;
-Tbase TZ x3239 = x3221 + x3238;
-Tbase TZ x3240 = x3220 + x3239;
-Tbase TZ x3241 = x3219 + x3240;
-Tbase TZ x3242 = x3218 + x3241;
-Tbase TZ x3243 = x3217 + x3242;
-Tbase TZ x3244 = x3216 + x3243;
-Tbase TZ x3245 = x1819 * x953;
-Tbase TZ x3246 = x1820 * x950;
-Tbase TZ x3247 = x1821 * x947;
-Tbase TZ x3248 = x3246 + x3247;
-Tbase TZ x3249 = x3245 + x3248;
-Tbase TZ x3250 = 0x11;
-Tbase TZ x3251 = x3250 * x3249;
-Tbase TZ x3252 = x3244 + x3251;
-Tbase TZ x3253 = x3215 + x3252;
-Tbase TZ x3254 = 0x17;
-Tbase TZ x3255 = x3253 >> x3254;
-Tbase TZ x3256 = x1821 * x998;
-Tbase TZ x3257 = x1822 * x995;
-Tbase TZ x3258 = x1823 * x992;
-Tbase TZ x3259 = x1824 * x989;
-Tbase TZ x3260 = x1825 * x986;
-Tbase TZ x3261 = x1826 * x983;
-Tbase TZ x3262 = x1827 * x980;
-Tbase TZ x3263 = x1828 * x977;
-Tbase TZ x3264 = x1829 * x974;
-Tbase TZ x3265 = x1830 * x971;
-Tbase TZ x3266 = x1831 * x968;
-Tbase TZ x3267 = x1832 * x965;
-Tbase TZ x3268 = x1833 * x962;
-Tbase TZ x3269 = x1834 * x959;
-Tbase TZ x3270 = x1835 * x956;
-Tbase TZ x3271 = x1836 * x953;
-Tbase TZ x3272 = x3270 + x3271;
-Tbase TZ x3273 = x3269 + x3272;
-Tbase TZ x3274 = x3268 + x3273;
-Tbase TZ x3275 = x3267 + x3274;
-Tbase TZ x3276 = x3266 + x3275;
-Tbase TZ x3277 = x3265 + x3276;
-Tbase TZ x3278 = x3264 + x3277;
-Tbase TZ x3279 = x3263 + x3278;
-Tbase TZ x3280 = x3262 + x3279;
-Tbase TZ x3281 = x3261 + x3280;
-Tbase TZ x3282 = x3260 + x3281;
-Tbase TZ x3283 = x3259 + x3282;
-Tbase TZ x3284 = x3258 + x3283;
-Tbase TZ x3285 = x3257 + x3284;
-Tbase TZ x3286 = x3256 + x3285;
-Tbase TZ x3287 = x1819 * x950;
-Tbase TZ x3288 = x1820 * x947;
-Tbase TZ x3289 = x3287 + x3288;
-Tbase TZ x3290 = 0x11;
-Tbase TZ x3291 = x3290 * x3289;
-Tbase TZ x3292 = x3286 + x3291;
-Tbase TZ x3293 = x3255 + x3292;
-Tbase TZ x3294 = 0x17;
-Tbase TZ x3295 = x3293 >> x3294;
-Tbase TZ x3296 = x1820 * x998;
-Tbase TZ x3297 = x1821 * x995;
-Tbase TZ x3298 = x1822 * x992;
-Tbase TZ x3299 = x1823 * x989;
-Tbase TZ x3300 = x1824 * x986;
-Tbase TZ x3301 = x1825 * x983;
-Tbase TZ x3302 = x1826 * x980;
-Tbase TZ x3303 = x1827 * x977;
-Tbase TZ x3304 = x1828 * x974;
-Tbase TZ x3305 = x1829 * x971;
-Tbase TZ x3306 = x1830 * x968;
-Tbase TZ x3307 = x1831 * x965;
-Tbase TZ x3308 = x1832 * x962;
-Tbase TZ x3309 = x1833 * x959;
-Tbase TZ x3310 = x1834 * x956;
-Tbase TZ x3311 = x1835 * x953;
-Tbase TZ x3312 = x1836 * x950;
-Tbase TZ x3313 = x3311 + x3312;
-Tbase TZ x3314 = x3310 + x3313;
-Tbase TZ x3315 = x3309 + x3314;
-Tbase TZ x3316 = x3308 + x3315;
-Tbase TZ x3317 = x3307 + x3316;
-Tbase TZ x3318 = x3306 + x3317;
-Tbase TZ x3319 = x3305 + x3318;
-Tbase TZ x3320 = x3304 + x3319;
-Tbase TZ x3321 = x3303 + x3320;
-Tbase TZ x3322 = x3302 + x3321;
-Tbase TZ x3323 = x3301 + x3322;
-Tbase TZ x3324 = x3300 + x3323;
-Tbase TZ x3325 = x3299 + x3324;
-Tbase TZ x3326 = x3298 + x3325;
-Tbase TZ x3327 = x3297 + x3326;
-Tbase TZ x3328 = x3296 + x3327;
-Tbase TZ x3329 = x1819 * x947;
-Tbase TZ x3330 = 0x11;
-Tbase TZ x3331 = x3330 * x3329;
-Tbase TZ x3332 = x3328 + x3331;
-Tbase TZ x3333 = x3295 + x3332;
-Tbase TZ x3334 = 0x17;
-Tbase TZ x3335 = x3333 >> x3334;
-Tbase TZ x3336 = x1819 * x998;
-Tbase TZ x3337 = x1820 * x995;
-Tbase TZ x3338 = x1821 * x992;
-Tbase TZ x3339 = x1822 * x989;
-Tbase TZ x3340 = x1823 * x986;
-Tbase TZ x3341 = x1824 * x983;
-Tbase TZ x3342 = x1825 * x980;
-Tbase TZ x3343 = x1826 * x977;
-Tbase TZ x3344 = x1827 * x974;
-Tbase TZ x3345 = x1828 * x971;
-Tbase TZ x3346 = x1829 * x968;
-Tbase TZ x3347 = x1830 * x965;
-Tbase TZ x3348 = x1831 * x962;
-Tbase TZ x3349 = x1832 * x959;
-Tbase TZ x3350 = x1833 * x956;
-Tbase TZ x3351 = x1834 * x953;
-Tbase TZ x3352 = x1835 * x950;
-Tbase TZ x3353 = x1836 * x947;
-Tbase TZ x3354 = x3352 + x3353;
-Tbase TZ x3355 = x3351 + x3354;
-Tbase TZ x3356 = x3350 + x3355;
-Tbase TZ x3357 = x3349 + x3356;
-Tbase TZ x3358 = x3348 + x3357;
-Tbase TZ x3359 = x3347 + x3358;
-Tbase TZ x3360 = x3346 + x3359;
-Tbase TZ x3361 = x3345 + x3360;
-Tbase TZ x3362 = x3344 + x3361;
-Tbase TZ x3363 = x3343 + x3362;
-Tbase TZ x3364 = x3342 + x3363;
-Tbase TZ x3365 = x3341 + x3364;
-Tbase TZ x3366 = x3340 + x3365;
-Tbase TZ x3367 = x3339 + x3366;
-Tbase TZ x3368 = x3338 + x3367;
-Tbase TZ x3369 = x3337 + x3368;
-Tbase TZ x3370 = x3336 + x3369;
-Tbase TZ x3371 = x3335 + x3370;
-Tbase TZ x3372 = 0x17;
-Tbase TZ x3373 = x3371 >> x3372;
-Tbase TZ x3374 = 0x11;
-Tbase TZ x3375 = x3374 * x3373;
-Tbase TZ x3376 = 0x7fffff;
-Tbase TZ x3377 = x2693 & x3376;
-Tbase TZ x3378 = x3375 + x3377;
-Tbase TZ x3379 = 0x17;
-Tbase TZ x3380 = x3378 >> x3379;
-Tbase TZ x3381 = 0x7fffff;
-Tbase TZ x3382 = x2733 & x3381;
-Tbase TZ x3383 = x3380 + x3382;
-Tbase TZ x3384 = 0x7fffff;
-Tbase TZ x3385 = x3371 & x3384;
-Tbase TZ x3386 = 0x7fffff;
-Tbase TZ x3387 = x3333 & x3386;
-Tbase TZ x3388 = 0x7fffff;
-Tbase TZ x3389 = x3293 & x3388;
-Tbase TZ x3390 = 0x7fffff;
-Tbase TZ x3391 = x3253 & x3390;
-Tbase TZ x3392 = 0x7fffff;
-Tbase TZ x3393 = x3213 & x3392;
-Tbase TZ x3394 = 0x7fffff;
-Tbase TZ x3395 = x3173 & x3394;
-Tbase TZ x3396 = 0x7fffff;
-Tbase TZ x3397 = x3133 & x3396;
-Tbase TZ x3398 = 0x7fffff;
-Tbase TZ x3399 = x3093 & x3398;
-Tbase TZ x3400 = 0x7fffff;
-Tbase TZ x3401 = x3053 & x3400;
-Tbase TZ x3402 = 0x7fffff;
-Tbase TZ x3403 = x3013 & x3402;
-Tbase TZ x3404 = 0x7fffff;
-Tbase TZ x3405 = x2973 & x3404;
-Tbase TZ x3406 = 0x7fffff;
-Tbase TZ x3407 = x2933 & x3406;
-Tbase TZ x3408 = 0x7fffff;
-Tbase TZ x3409 = x2893 & x3408;
-Tbase TZ x3410 = 0x7fffff;
-Tbase TZ x3411 = x2853 & x3410;
-Tbase TZ x3412 = 0x7fffff;
-Tbase TZ x3413 = x2813 & x3412;
-Tbase TZ x3414 = 0x17;
-Tbase TZ x3415 = x3383 >> x3414;
-Tbase TZ x3416 = 0x7fffff;
-Tbase TZ x3417 = x2773 & x3416;
-Tbase TZ x3418 = x3415 + x3417;
-Tbase TZ x3419 = 0x7fffff;
-Tbase TZ x3420 = x3383 & x3419;
-Tbase TZ x3421 = 0x7fffff;
-Tbase TZ x3422 = x3378 & x3421;
-Tbase TZ x3423 = x2619 + x3385;
-Tbase TZ x3424 = x2621 + x3387;
-Tbase TZ x3425 = x2623 + x3389;
-Tbase TZ x3426 = x2625 + x3391;
-Tbase TZ x3427 = x2627 + x3393;
-Tbase TZ x3428 = x2629 + x3395;
-Tbase TZ x3429 = x2631 + x3397;
-Tbase TZ x3430 = x2633 + x3399;
-Tbase TZ x3431 = x2635 + x3401;
-Tbase TZ x3432 = x2637 + x3403;
-Tbase TZ x3433 = x2639 + x3405;
-Tbase TZ x3434 = x2641 + x3407;
-Tbase TZ x3435 = x2643 + x3409;
-Tbase TZ x3436 = x2645 + x3411;
-Tbase TZ x3437 = x2647 + x3413;
-Tbase TZ x3438 = x2652 + x3418;
-Tbase TZ x3439 = x2654 + x3420;
-Tbase TZ x3440 = x2656 + x3422;
-Tbase TZ x3441 = x2619 + x3385;
-Tbase TZ x3442 = x2621 + x3387;
-Tbase TZ x3443 = x2623 + x3389;
-Tbase TZ x3444 = x2625 + x3391;
-Tbase TZ x3445 = x2627 + x3393;
-Tbase TZ x3446 = x2629 + x3395;
-Tbase TZ x3447 = x2631 + x3397;
-Tbase TZ x3448 = x2633 + x3399;
-Tbase TZ x3449 = x2635 + x3401;
-Tbase TZ x3450 = x2637 + x3403;
-Tbase TZ x3451 = x2639 + x3405;
-Tbase TZ x3452 = x2641 + x3407;
-Tbase TZ x3453 = x2643 + x3409;
-Tbase TZ x3454 = x2645 + x3411;
-Tbase TZ x3455 = x2647 + x3413;
-Tbase TZ x3456 = x2652 + x3418;
-Tbase TZ x3457 = x2654 + x3420;
-Tbase TZ x3458 = x2656 + x3422;
-Tbase TZ x3459 = x3440 * x3458;
-Tbase TZ x3460 = x3423 * x3457;
-Tbase TZ x3461 = x3424 * x3456;
-Tbase TZ x3462 = x3425 * x3455;
-Tbase TZ x3463 = x3426 * x3454;
-Tbase TZ x3464 = x3427 * x3453;
-Tbase TZ x3465 = x3428 * x3452;
-Tbase TZ x3466 = x3429 * x3451;
-Tbase TZ x3467 = x3430 * x3450;
-Tbase TZ x3468 = x3431 * x3449;
-Tbase TZ x3469 = x3432 * x3448;
-Tbase TZ x3470 = x3433 * x3447;
-Tbase TZ x3471 = x3434 * x3446;
-Tbase TZ x3472 = x3435 * x3445;
-Tbase TZ x3473 = x3436 * x3444;
-Tbase TZ x3474 = x3437 * x3443;
-Tbase TZ x3475 = x3438 * x3442;
-Tbase TZ x3476 = x3439 * x3441;
-Tbase TZ x3477 = x3475 + x3476;
-Tbase TZ x3478 = x3474 + x3477;
-Tbase TZ x3479 = x3473 + x3478;
-Tbase TZ x3480 = x3472 + x3479;
-Tbase TZ x3481 = x3471 + x3480;
-Tbase TZ x3482 = x3470 + x3481;
-Tbase TZ x3483 = x3469 + x3482;
-Tbase TZ x3484 = x3468 + x3483;
-Tbase TZ x3485 = x3467 + x3484;
-Tbase TZ x3486 = x3466 + x3485;
-Tbase TZ x3487 = x3465 + x3486;
-Tbase TZ x3488 = x3464 + x3487;
-Tbase TZ x3489 = x3463 + x3488;
-Tbase TZ x3490 = x3462 + x3489;
-Tbase TZ x3491 = x3461 + x3490;
-Tbase TZ x3492 = x3460 + x3491;
-Tbase TZ x3493 = 0x11;
-Tbase TZ x3494 = x3493 * x3492;
-Tbase TZ x3495 = x3459 + x3494;
-Tbase TZ x3496 = 0x17;
-Tbase TZ x3497 = x3495 >> x3496;
-Tbase TZ x3498 = x3439 * x3458;
-Tbase TZ x3499 = x3440 * x3457;
-Tbase TZ x3500 = x3498 + x3499;
-Tbase TZ x3501 = x3423 * x3456;
-Tbase TZ x3502 = x3424 * x3455;
-Tbase TZ x3503 = x3425 * x3454;
-Tbase TZ x3504 = x3426 * x3453;
-Tbase TZ x3505 = x3427 * x3452;
-Tbase TZ x3506 = x3428 * x3451;
-Tbase TZ x3507 = x3429 * x3450;
-Tbase TZ x3508 = x3430 * x3449;
-Tbase TZ x3509 = x3431 * x3448;
-Tbase TZ x3510 = x3432 * x3447;
-Tbase TZ x3511 = x3433 * x3446;
-Tbase TZ x3512 = x3434 * x3445;
-Tbase TZ x3513 = x3435 * x3444;
-Tbase TZ x3514 = x3436 * x3443;
-Tbase TZ x3515 = x3437 * x3442;
-Tbase TZ x3516 = x3438 * x3441;
-Tbase TZ x3517 = x3515 + x3516;
-Tbase TZ x3518 = x3514 + x3517;
-Tbase TZ x3519 = x3513 + x3518;
-Tbase TZ x3520 = x3512 + x3519;
-Tbase TZ x3521 = x3511 + x3520;
-Tbase TZ x3522 = x3510 + x3521;
-Tbase TZ x3523 = x3509 + x3522;
-Tbase TZ x3524 = x3508 + x3523;
-Tbase TZ x3525 = x3507 + x3524;
-Tbase TZ x3526 = x3506 + x3525;
-Tbase TZ x3527 = x3505 + x3526;
-Tbase TZ x3528 = x3504 + x3527;
-Tbase TZ x3529 = x3503 + x3528;
-Tbase TZ x3530 = x3502 + x3529;
-Tbase TZ x3531 = x3501 + x3530;
-Tbase TZ x3532 = 0x11;
-Tbase TZ x3533 = x3532 * x3531;
-Tbase TZ x3534 = x3500 + x3533;
-Tbase TZ x3535 = x3497 + x3534;
-Tbase TZ x3536 = 0x17;
-Tbase TZ x3537 = x3535 >> x3536;
-Tbase TZ x3538 = x3438 * x3458;
-Tbase TZ x3539 = x3439 * x3457;
-Tbase TZ x3540 = x3440 * x3456;
-Tbase TZ x3541 = x3539 + x3540;
-Tbase TZ x3542 = x3538 + x3541;
-Tbase TZ x3543 = x3423 * x3455;
-Tbase TZ x3544 = x3424 * x3454;
-Tbase TZ x3545 = x3425 * x3453;
-Tbase TZ x3546 = x3426 * x3452;
-Tbase TZ x3547 = x3427 * x3451;
-Tbase TZ x3548 = x3428 * x3450;
-Tbase TZ x3549 = x3429 * x3449;
-Tbase TZ x3550 = x3430 * x3448;
-Tbase TZ x3551 = x3431 * x3447;
-Tbase TZ x3552 = x3432 * x3446;
-Tbase TZ x3553 = x3433 * x3445;
-Tbase TZ x3554 = x3434 * x3444;
-Tbase TZ x3555 = x3435 * x3443;
-Tbase TZ x3556 = x3436 * x3442;
-Tbase TZ x3557 = x3437 * x3441;
-Tbase TZ x3558 = x3556 + x3557;
-Tbase TZ x3559 = x3555 + x3558;
-Tbase TZ x3560 = x3554 + x3559;
-Tbase TZ x3561 = x3553 + x3560;
-Tbase TZ x3562 = x3552 + x3561;
-Tbase TZ x3563 = x3551 + x3562;
-Tbase TZ x3564 = x3550 + x3563;
-Tbase TZ x3565 = x3549 + x3564;
-Tbase TZ x3566 = x3548 + x3565;
-Tbase TZ x3567 = x3547 + x3566;
-Tbase TZ x3568 = x3546 + x3567;
-Tbase TZ x3569 = x3545 + x3568;
-Tbase TZ x3570 = x3544 + x3569;
-Tbase TZ x3571 = x3543 + x3570;
-Tbase TZ x3572 = 0x11;
-Tbase TZ x3573 = x3572 * x3571;
-Tbase TZ x3574 = x3542 + x3573;
-Tbase TZ x3575 = x3537 + x3574;
-Tbase TZ x3576 = 0x17;
-Tbase TZ x3577 = x3575 >> x3576;
-Tbase TZ x3578 = x3437 * x3458;
-Tbase TZ x3579 = x3438 * x3457;
-Tbase TZ x3580 = x3439 * x3456;
-Tbase TZ x3581 = x3440 * x3455;
-Tbase TZ x3582 = x3580 + x3581;
-Tbase TZ x3583 = x3579 + x3582;
-Tbase TZ x3584 = x3578 + x3583;
-Tbase TZ x3585 = x3423 * x3454;
-Tbase TZ x3586 = x3424 * x3453;
-Tbase TZ x3587 = x3425 * x3452;
-Tbase TZ x3588 = x3426 * x3451;
-Tbase TZ x3589 = x3427 * x3450;
-Tbase TZ x3590 = x3428 * x3449;
-Tbase TZ x3591 = x3429 * x3448;
-Tbase TZ x3592 = x3430 * x3447;
-Tbase TZ x3593 = x3431 * x3446;
-Tbase TZ x3594 = x3432 * x3445;
-Tbase TZ x3595 = x3433 * x3444;
-Tbase TZ x3596 = x3434 * x3443;
-Tbase TZ x3597 = x3435 * x3442;
-Tbase TZ x3598 = x3436 * x3441;
-Tbase TZ x3599 = x3597 + x3598;
-Tbase TZ x3600 = x3596 + x3599;
-Tbase TZ x3601 = x3595 + x3600;
-Tbase TZ x3602 = x3594 + x3601;
-Tbase TZ x3603 = x3593 + x3602;
-Tbase TZ x3604 = x3592 + x3603;
-Tbase TZ x3605 = x3591 + x3604;
-Tbase TZ x3606 = x3590 + x3605;
-Tbase TZ x3607 = x3589 + x3606;
-Tbase TZ x3608 = x3588 + x3607;
-Tbase TZ x3609 = x3587 + x3608;
-Tbase TZ x3610 = x3586 + x3609;
-Tbase TZ x3611 = x3585 + x3610;
-Tbase TZ x3612 = 0x11;
-Tbase TZ x3613 = x3612 * x3611;
-Tbase TZ x3614 = x3584 + x3613;
-Tbase TZ x3615 = x3577 + x3614;
-Tbase TZ x3616 = 0x17;
-Tbase TZ x3617 = x3615 >> x3616;
-Tbase TZ x3618 = x3436 * x3458;
-Tbase TZ x3619 = x3437 * x3457;
-Tbase TZ x3620 = x3438 * x3456;
-Tbase TZ x3621 = x3439 * x3455;
-Tbase TZ x3622 = x3440 * x3454;
-Tbase TZ x3623 = x3621 + x3622;
-Tbase TZ x3624 = x3620 + x3623;
-Tbase TZ x3625 = x3619 + x3624;
-Tbase TZ x3626 = x3618 + x3625;
-Tbase TZ x3627 = x3423 * x3453;
-Tbase TZ x3628 = x3424 * x3452;
-Tbase TZ x3629 = x3425 * x3451;
-Tbase TZ x3630 = x3426 * x3450;
-Tbase TZ x3631 = x3427 * x3449;
-Tbase TZ x3632 = x3428 * x3448;
-Tbase TZ x3633 = x3429 * x3447;
-Tbase TZ x3634 = x3430 * x3446;
-Tbase TZ x3635 = x3431 * x3445;
-Tbase TZ x3636 = x3432 * x3444;
-Tbase TZ x3637 = x3433 * x3443;
-Tbase TZ x3638 = x3434 * x3442;
-Tbase TZ x3639 = x3435 * x3441;
-Tbase TZ x3640 = x3638 + x3639;
-Tbase TZ x3641 = x3637 + x3640;
-Tbase TZ x3642 = x3636 + x3641;
-Tbase TZ x3643 = x3635 + x3642;
-Tbase TZ x3644 = x3634 + x3643;
-Tbase TZ x3645 = x3633 + x3644;
-Tbase TZ x3646 = x3632 + x3645;
-Tbase TZ x3647 = x3631 + x3646;
-Tbase TZ x3648 = x3630 + x3647;
-Tbase TZ x3649 = x3629 + x3648;
-Tbase TZ x3650 = x3628 + x3649;
-Tbase TZ x3651 = x3627 + x3650;
-Tbase TZ x3652 = 0x11;
-Tbase TZ x3653 = x3652 * x3651;
-Tbase TZ x3654 = x3626 + x3653;
-Tbase TZ x3655 = x3617 + x3654;
-Tbase TZ x3656 = 0x17;
-Tbase TZ x3657 = x3655 >> x3656;
-Tbase TZ x3658 = x3435 * x3458;
-Tbase TZ x3659 = x3436 * x3457;
-Tbase TZ x3660 = x3437 * x3456;
-Tbase TZ x3661 = x3438 * x3455;
-Tbase TZ x3662 = x3439 * x3454;
-Tbase TZ x3663 = x3440 * x3453;
-Tbase TZ x3664 = x3662 + x3663;
-Tbase TZ x3665 = x3661 + x3664;
-Tbase TZ x3666 = x3660 + x3665;
-Tbase TZ x3667 = x3659 + x3666;
-Tbase TZ x3668 = x3658 + x3667;
-Tbase TZ x3669 = x3423 * x3452;
-Tbase TZ x3670 = x3424 * x3451;
-Tbase TZ x3671 = x3425 * x3450;
-Tbase TZ x3672 = x3426 * x3449;
-Tbase TZ x3673 = x3427 * x3448;
-Tbase TZ x3674 = x3428 * x3447;
-Tbase TZ x3675 = x3429 * x3446;
-Tbase TZ x3676 = x3430 * x3445;
-Tbase TZ x3677 = x3431 * x3444;
-Tbase TZ x3678 = x3432 * x3443;
-Tbase TZ x3679 = x3433 * x3442;
-Tbase TZ x3680 = x3434 * x3441;
-Tbase TZ x3681 = x3679 + x3680;
-Tbase TZ x3682 = x3678 + x3681;
-Tbase TZ x3683 = x3677 + x3682;
-Tbase TZ x3684 = x3676 + x3683;
-Tbase TZ x3685 = x3675 + x3684;
-Tbase TZ x3686 = x3674 + x3685;
-Tbase TZ x3687 = x3673 + x3686;
-Tbase TZ x3688 = x3672 + x3687;
-Tbase TZ x3689 = x3671 + x3688;
-Tbase TZ x3690 = x3670 + x3689;
-Tbase TZ x3691 = x3669 + x3690;
-Tbase TZ x3692 = 0x11;
-Tbase TZ x3693 = x3692 * x3691;
-Tbase TZ x3694 = x3668 + x3693;
-Tbase TZ x3695 = x3657 + x3694;
-Tbase TZ x3696 = 0x17;
-Tbase TZ x3697 = x3695 >> x3696;
-Tbase TZ x3698 = x3434 * x3458;
-Tbase TZ x3699 = x3435 * x3457;
-Tbase TZ x3700 = x3436 * x3456;
-Tbase TZ x3701 = x3437 * x3455;
-Tbase TZ x3702 = x3438 * x3454;
-Tbase TZ x3703 = x3439 * x3453;
-Tbase TZ x3704 = x3440 * x3452;
-Tbase TZ x3705 = x3703 + x3704;
-Tbase TZ x3706 = x3702 + x3705;
-Tbase TZ x3707 = x3701 + x3706;
-Tbase TZ x3708 = x3700 + x3707;
-Tbase TZ x3709 = x3699 + x3708;
-Tbase TZ x3710 = x3698 + x3709;
-Tbase TZ x3711 = x3423 * x3451;
-Tbase TZ x3712 = x3424 * x3450;
-Tbase TZ x3713 = x3425 * x3449;
-Tbase TZ x3714 = x3426 * x3448;
-Tbase TZ x3715 = x3427 * x3447;
-Tbase TZ x3716 = x3428 * x3446;
-Tbase TZ x3717 = x3429 * x3445;
-Tbase TZ x3718 = x3430 * x3444;
-Tbase TZ x3719 = x3431 * x3443;
-Tbase TZ x3720 = x3432 * x3442;
-Tbase TZ x3721 = x3433 * x3441;
-Tbase TZ x3722 = x3720 + x3721;
-Tbase TZ x3723 = x3719 + x3722;
-Tbase TZ x3724 = x3718 + x3723;
-Tbase TZ x3725 = x3717 + x3724;
-Tbase TZ x3726 = x3716 + x3725;
-Tbase TZ x3727 = x3715 + x3726;
-Tbase TZ x3728 = x3714 + x3727;
-Tbase TZ x3729 = x3713 + x3728;
-Tbase TZ x3730 = x3712 + x3729;
-Tbase TZ x3731 = x3711 + x3730;
-Tbase TZ x3732 = 0x11;
-Tbase TZ x3733 = x3732 * x3731;
-Tbase TZ x3734 = x3710 + x3733;
-Tbase TZ x3735 = x3697 + x3734;
-Tbase TZ x3736 = 0x17;
-Tbase TZ x3737 = x3735 >> x3736;
-Tbase TZ x3738 = x3433 * x3458;
-Tbase TZ x3739 = x3434 * x3457;
-Tbase TZ x3740 = x3435 * x3456;
-Tbase TZ x3741 = x3436 * x3455;
-Tbase TZ x3742 = x3437 * x3454;
-Tbase TZ x3743 = x3438 * x3453;
-Tbase TZ x3744 = x3439 * x3452;
-Tbase TZ x3745 = x3440 * x3451;
-Tbase TZ x3746 = x3744 + x3745;
-Tbase TZ x3747 = x3743 + x3746;
-Tbase TZ x3748 = x3742 + x3747;
-Tbase TZ x3749 = x3741 + x3748;
-Tbase TZ x3750 = x3740 + x3749;
-Tbase TZ x3751 = x3739 + x3750;
-Tbase TZ x3752 = x3738 + x3751;
-Tbase TZ x3753 = x3423 * x3450;
-Tbase TZ x3754 = x3424 * x3449;
-Tbase TZ x3755 = x3425 * x3448;
-Tbase TZ x3756 = x3426 * x3447;
-Tbase TZ x3757 = x3427 * x3446;
-Tbase TZ x3758 = x3428 * x3445;
-Tbase TZ x3759 = x3429 * x3444;
-Tbase TZ x3760 = x3430 * x3443;
-Tbase TZ x3761 = x3431 * x3442;
-Tbase TZ x3762 = x3432 * x3441;
-Tbase TZ x3763 = x3761 + x3762;
-Tbase TZ x3764 = x3760 + x3763;
-Tbase TZ x3765 = x3759 + x3764;
-Tbase TZ x3766 = x3758 + x3765;
-Tbase TZ x3767 = x3757 + x3766;
-Tbase TZ x3768 = x3756 + x3767;
-Tbase TZ x3769 = x3755 + x3768;
-Tbase TZ x3770 = x3754 + x3769;
-Tbase TZ x3771 = x3753 + x3770;
-Tbase TZ x3772 = 0x11;
-Tbase TZ x3773 = x3772 * x3771;
-Tbase TZ x3774 = x3752 + x3773;
-Tbase TZ x3775 = x3737 + x3774;
-Tbase TZ x3776 = 0x17;
-Tbase TZ x3777 = x3775 >> x3776;
-Tbase TZ x3778 = x3432 * x3458;
-Tbase TZ x3779 = x3433 * x3457;
-Tbase TZ x3780 = x3434 * x3456;
-Tbase TZ x3781 = x3435 * x3455;
-Tbase TZ x3782 = x3436 * x3454;
-Tbase TZ x3783 = x3437 * x3453;
-Tbase TZ x3784 = x3438 * x3452;
-Tbase TZ x3785 = x3439 * x3451;
-Tbase TZ x3786 = x3440 * x3450;
-Tbase TZ x3787 = x3785 + x3786;
-Tbase TZ x3788 = x3784 + x3787;
-Tbase TZ x3789 = x3783 + x3788;
-Tbase TZ x3790 = x3782 + x3789;
-Tbase TZ x3791 = x3781 + x3790;
-Tbase TZ x3792 = x3780 + x3791;
-Tbase TZ x3793 = x3779 + x3792;
-Tbase TZ x3794 = x3778 + x3793;
-Tbase TZ x3795 = x3423 * x3449;
-Tbase TZ x3796 = x3424 * x3448;
-Tbase TZ x3797 = x3425 * x3447;
-Tbase TZ x3798 = x3426 * x3446;
-Tbase TZ x3799 = x3427 * x3445;
-Tbase TZ x3800 = x3428 * x3444;
-Tbase TZ x3801 = x3429 * x3443;
-Tbase TZ x3802 = x3430 * x3442;
-Tbase TZ x3803 = x3431 * x3441;
-Tbase TZ x3804 = x3802 + x3803;
-Tbase TZ x3805 = x3801 + x3804;
-Tbase TZ x3806 = x3800 + x3805;
-Tbase TZ x3807 = x3799 + x3806;
-Tbase TZ x3808 = x3798 + x3807;
-Tbase TZ x3809 = x3797 + x3808;
-Tbase TZ x3810 = x3796 + x3809;
-Tbase TZ x3811 = x3795 + x3810;
-Tbase TZ x3812 = 0x11;
-Tbase TZ x3813 = x3812 * x3811;
-Tbase TZ x3814 = x3794 + x3813;
-Tbase TZ x3815 = x3777 + x3814;
-Tbase TZ x3816 = 0x17;
-Tbase TZ x3817 = x3815 >> x3816;
-Tbase TZ x3818 = x3431 * x3458;
-Tbase TZ x3819 = x3432 * x3457;
-Tbase TZ x3820 = x3433 * x3456;
-Tbase TZ x3821 = x3434 * x3455;
-Tbase TZ x3822 = x3435 * x3454;
-Tbase TZ x3823 = x3436 * x3453;
-Tbase TZ x3824 = x3437 * x3452;
-Tbase TZ x3825 = x3438 * x3451;
-Tbase TZ x3826 = x3439 * x3450;
-Tbase TZ x3827 = x3440 * x3449;
-Tbase TZ x3828 = x3826 + x3827;
-Tbase TZ x3829 = x3825 + x3828;
-Tbase TZ x3830 = x3824 + x3829;
-Tbase TZ x3831 = x3823 + x3830;
-Tbase TZ x3832 = x3822 + x3831;
-Tbase TZ x3833 = x3821 + x3832;
-Tbase TZ x3834 = x3820 + x3833;
-Tbase TZ x3835 = x3819 + x3834;
-Tbase TZ x3836 = x3818 + x3835;
-Tbase TZ x3837 = x3423 * x3448;
-Tbase TZ x3838 = x3424 * x3447;
-Tbase TZ x3839 = x3425 * x3446;
-Tbase TZ x3840 = x3426 * x3445;
-Tbase TZ x3841 = x3427 * x3444;
-Tbase TZ x3842 = x3428 * x3443;
-Tbase TZ x3843 = x3429 * x3442;
-Tbase TZ x3844 = x3430 * x3441;
-Tbase TZ x3845 = x3843 + x3844;
-Tbase TZ x3846 = x3842 + x3845;
-Tbase TZ x3847 = x3841 + x3846;
-Tbase TZ x3848 = x3840 + x3847;
-Tbase TZ x3849 = x3839 + x3848;
-Tbase TZ x3850 = x3838 + x3849;
-Tbase TZ x3851 = x3837 + x3850;
-Tbase TZ x3852 = 0x11;
-Tbase TZ x3853 = x3852 * x3851;
-Tbase TZ x3854 = x3836 + x3853;
-Tbase TZ x3855 = x3817 + x3854;
-Tbase TZ x3856 = 0x17;
-Tbase TZ x3857 = x3855 >> x3856;
-Tbase TZ x3858 = x3430 * x3458;
-Tbase TZ x3859 = x3431 * x3457;
-Tbase TZ x3860 = x3432 * x3456;
-Tbase TZ x3861 = x3433 * x3455;
-Tbase TZ x3862 = x3434 * x3454;
-Tbase TZ x3863 = x3435 * x3453;
-Tbase TZ x3864 = x3436 * x3452;
-Tbase TZ x3865 = x3437 * x3451;
-Tbase TZ x3866 = x3438 * x3450;
-Tbase TZ x3867 = x3439 * x3449;
-Tbase TZ x3868 = x3440 * x3448;
-Tbase TZ x3869 = x3867 + x3868;
-Tbase TZ x3870 = x3866 + x3869;
-Tbase TZ x3871 = x3865 + x3870;
-Tbase TZ x3872 = x3864 + x3871;
-Tbase TZ x3873 = x3863 + x3872;
-Tbase TZ x3874 = x3862 + x3873;
-Tbase TZ x3875 = x3861 + x3874;
-Tbase TZ x3876 = x3860 + x3875;
-Tbase TZ x3877 = x3859 + x3876;
-Tbase TZ x3878 = x3858 + x3877;
-Tbase TZ x3879 = x3423 * x3447;
-Tbase TZ x3880 = x3424 * x3446;
-Tbase TZ x3881 = x3425 * x3445;
-Tbase TZ x3882 = x3426 * x3444;
-Tbase TZ x3883 = x3427 * x3443;
-Tbase TZ x3884 = x3428 * x3442;
-Tbase TZ x3885 = x3429 * x3441;
-Tbase TZ x3886 = x3884 + x3885;
-Tbase TZ x3887 = x3883 + x3886;
-Tbase TZ x3888 = x3882 + x3887;
-Tbase TZ x3889 = x3881 + x3888;
-Tbase TZ x3890 = x3880 + x3889;
-Tbase TZ x3891 = x3879 + x3890;
-Tbase TZ x3892 = 0x11;
-Tbase TZ x3893 = x3892 * x3891;
-Tbase TZ x3894 = x3878 + x3893;
-Tbase TZ x3895 = x3857 + x3894;
-Tbase TZ x3896 = 0x17;
-Tbase TZ x3897 = x3895 >> x3896;
-Tbase TZ x3898 = x3429 * x3458;
-Tbase TZ x3899 = x3430 * x3457;
-Tbase TZ x3900 = x3431 * x3456;
-Tbase TZ x3901 = x3432 * x3455;
-Tbase TZ x3902 = x3433 * x3454;
-Tbase TZ x3903 = x3434 * x3453;
-Tbase TZ x3904 = x3435 * x3452;
-Tbase TZ x3905 = x3436 * x3451;
-Tbase TZ x3906 = x3437 * x3450;
-Tbase TZ x3907 = x3438 * x3449;
-Tbase TZ x3908 = x3439 * x3448;
-Tbase TZ x3909 = x3440 * x3447;
-Tbase TZ x3910 = x3908 + x3909;
-Tbase TZ x3911 = x3907 + x3910;
-Tbase TZ x3912 = x3906 + x3911;
-Tbase TZ x3913 = x3905 + x3912;
-Tbase TZ x3914 = x3904 + x3913;
-Tbase TZ x3915 = x3903 + x3914;
-Tbase TZ x3916 = x3902 + x3915;
-Tbase TZ x3917 = x3901 + x3916;
-Tbase TZ x3918 = x3900 + x3917;
-Tbase TZ x3919 = x3899 + x3918;
-Tbase TZ x3920 = x3898 + x3919;
-Tbase TZ x3921 = x3423 * x3446;
-Tbase TZ x3922 = x3424 * x3445;
-Tbase TZ x3923 = x3425 * x3444;
-Tbase TZ x3924 = x3426 * x3443;
-Tbase TZ x3925 = x3427 * x3442;
-Tbase TZ x3926 = x3428 * x3441;
-Tbase TZ x3927 = x3925 + x3926;
-Tbase TZ x3928 = x3924 + x3927;
-Tbase TZ x3929 = x3923 + x3928;
-Tbase TZ x3930 = x3922 + x3929;
-Tbase TZ x3931 = x3921 + x3930;
-Tbase TZ x3932 = 0x11;
-Tbase TZ x3933 = x3932 * x3931;
-Tbase TZ x3934 = x3920 + x3933;
-Tbase TZ x3935 = x3897 + x3934;
-Tbase TZ x3936 = 0x17;
-Tbase TZ x3937 = x3935 >> x3936;
-Tbase TZ x3938 = x3428 * x3458;
-Tbase TZ x3939 = x3429 * x3457;
-Tbase TZ x3940 = x3430 * x3456;
-Tbase TZ x3941 = x3431 * x3455;
-Tbase TZ x3942 = x3432 * x3454;
-Tbase TZ x3943 = x3433 * x3453;
-Tbase TZ x3944 = x3434 * x3452;
-Tbase TZ x3945 = x3435 * x3451;
-Tbase TZ x3946 = x3436 * x3450;
-Tbase TZ x3947 = x3437 * x3449;
-Tbase TZ x3948 = x3438 * x3448;
-Tbase TZ x3949 = x3439 * x3447;
-Tbase TZ x3950 = x3440 * x3446;
-Tbase TZ x3951 = x3949 + x3950;
-Tbase TZ x3952 = x3948 + x3951;
-Tbase TZ x3953 = x3947 + x3952;
-Tbase TZ x3954 = x3946 + x3953;
-Tbase TZ x3955 = x3945 + x3954;
-Tbase TZ x3956 = x3944 + x3955;
-Tbase TZ x3957 = x3943 + x3956;
-Tbase TZ x3958 = x3942 + x3957;
-Tbase TZ x3959 = x3941 + x3958;
-Tbase TZ x3960 = x3940 + x3959;
-Tbase TZ x3961 = x3939 + x3960;
-Tbase TZ x3962 = x3938 + x3961;
-Tbase TZ x3963 = x3423 * x3445;
-Tbase TZ x3964 = x3424 * x3444;
-Tbase TZ x3965 = x3425 * x3443;
-Tbase TZ x3966 = x3426 * x3442;
-Tbase TZ x3967 = x3427 * x3441;
-Tbase TZ x3968 = x3966 + x3967;
-Tbase TZ x3969 = x3965 + x3968;
-Tbase TZ x3970 = x3964 + x3969;
-Tbase TZ x3971 = x3963 + x3970;
-Tbase TZ x3972 = 0x11;
-Tbase TZ x3973 = x3972 * x3971;
-Tbase TZ x3974 = x3962 + x3973;
-Tbase TZ x3975 = x3937 + x3974;
-Tbase TZ x3976 = 0x17;
-Tbase TZ x3977 = x3975 >> x3976;
-Tbase TZ x3978 = x3427 * x3458;
-Tbase TZ x3979 = x3428 * x3457;
-Tbase TZ x3980 = x3429 * x3456;
-Tbase TZ x3981 = x3430 * x3455;
-Tbase TZ x3982 = x3431 * x3454;
-Tbase TZ x3983 = x3432 * x3453;
-Tbase TZ x3984 = x3433 * x3452;
-Tbase TZ x3985 = x3434 * x3451;
-Tbase TZ x3986 = x3435 * x3450;
-Tbase TZ x3987 = x3436 * x3449;
-Tbase TZ x3988 = x3437 * x3448;
-Tbase TZ x3989 = x3438 * x3447;
-Tbase TZ x3990 = x3439 * x3446;
-Tbase TZ x3991 = x3440 * x3445;
-Tbase TZ x3992 = x3990 + x3991;
-Tbase TZ x3993 = x3989 + x3992;
-Tbase TZ x3994 = x3988 + x3993;
-Tbase TZ x3995 = x3987 + x3994;
-Tbase TZ x3996 = x3986 + x3995;
-Tbase TZ x3997 = x3985 + x3996;
-Tbase TZ x3998 = x3984 + x3997;
-Tbase TZ x3999 = x3983 + x3998;
-Tbase TZ x4000 = x3982 + x3999;
-Tbase TZ x4001 = x3981 + x4000;
-Tbase TZ x4002 = x3980 + x4001;
-Tbase TZ x4003 = x3979 + x4002;
-Tbase TZ x4004 = x3978 + x4003;
-Tbase TZ x4005 = x3423 * x3444;
-Tbase TZ x4006 = x3424 * x3443;
-Tbase TZ x4007 = x3425 * x3442;
-Tbase TZ x4008 = x3426 * x3441;
-Tbase TZ x4009 = x4007 + x4008;
-Tbase TZ x4010 = x4006 + x4009;
-Tbase TZ x4011 = x4005 + x4010;
-Tbase TZ x4012 = 0x11;
-Tbase TZ x4013 = x4012 * x4011;
-Tbase TZ x4014 = x4004 + x4013;
-Tbase TZ x4015 = x3977 + x4014;
-Tbase TZ x4016 = 0x17;
-Tbase TZ x4017 = x4015 >> x4016;
-Tbase TZ x4018 = x3426 * x3458;
-Tbase TZ x4019 = x3427 * x3457;
-Tbase TZ x4020 = x3428 * x3456;
-Tbase TZ x4021 = x3429 * x3455;
-Tbase TZ x4022 = x3430 * x3454;
-Tbase TZ x4023 = x3431 * x3453;
-Tbase TZ x4024 = x3432 * x3452;
-Tbase TZ x4025 = x3433 * x3451;
-Tbase TZ x4026 = x3434 * x3450;
-Tbase TZ x4027 = x3435 * x3449;
-Tbase TZ x4028 = x3436 * x3448;
-Tbase TZ x4029 = x3437 * x3447;
-Tbase TZ x4030 = x3438 * x3446;
-Tbase TZ x4031 = x3439 * x3445;
-Tbase TZ x4032 = x3440 * x3444;
-Tbase TZ x4033 = x4031 + x4032;
-Tbase TZ x4034 = x4030 + x4033;
-Tbase TZ x4035 = x4029 + x4034;
-Tbase TZ x4036 = x4028 + x4035;
-Tbase TZ x4037 = x4027 + x4036;
-Tbase TZ x4038 = x4026 + x4037;
-Tbase TZ x4039 = x4025 + x4038;
-Tbase TZ x4040 = x4024 + x4039;
-Tbase TZ x4041 = x4023 + x4040;
-Tbase TZ x4042 = x4022 + x4041;
-Tbase TZ x4043 = x4021 + x4042;
-Tbase TZ x4044 = x4020 + x4043;
-Tbase TZ x4045 = x4019 + x4044;
-Tbase TZ x4046 = x4018 + x4045;
-Tbase TZ x4047 = x3423 * x3443;
-Tbase TZ x4048 = x3424 * x3442;
-Tbase TZ x4049 = x3425 * x3441;
-Tbase TZ x4050 = x4048 + x4049;
-Tbase TZ x4051 = x4047 + x4050;
-Tbase TZ x4052 = 0x11;
-Tbase TZ x4053 = x4052 * x4051;
-Tbase TZ x4054 = x4046 + x4053;
-Tbase TZ x4055 = x4017 + x4054;
-Tbase TZ x4056 = 0x17;
-Tbase TZ x4057 = x4055 >> x4056;
-Tbase TZ x4058 = x3425 * x3458;
-Tbase TZ x4059 = x3426 * x3457;
-Tbase TZ x4060 = x3427 * x3456;
-Tbase TZ x4061 = x3428 * x3455;
-Tbase TZ x4062 = x3429 * x3454;
-Tbase TZ x4063 = x3430 * x3453;
-Tbase TZ x4064 = x3431 * x3452;
-Tbase TZ x4065 = x3432 * x3451;
-Tbase TZ x4066 = x3433 * x3450;
-Tbase TZ x4067 = x3434 * x3449;
-Tbase TZ x4068 = x3435 * x3448;
-Tbase TZ x4069 = x3436 * x3447;
-Tbase TZ x4070 = x3437 * x3446;
-Tbase TZ x4071 = x3438 * x3445;
-Tbase TZ x4072 = x3439 * x3444;
-Tbase TZ x4073 = x3440 * x3443;
-Tbase TZ x4074 = x4072 + x4073;
-Tbase TZ x4075 = x4071 + x4074;
-Tbase TZ x4076 = x4070 + x4075;
-Tbase TZ x4077 = x4069 + x4076;
-Tbase TZ x4078 = x4068 + x4077;
-Tbase TZ x4079 = x4067 + x4078;
-Tbase TZ x4080 = x4066 + x4079;
-Tbase TZ x4081 = x4065 + x4080;
-Tbase TZ x4082 = x4064 + x4081;
-Tbase TZ x4083 = x4063 + x4082;
-Tbase TZ x4084 = x4062 + x4083;
-Tbase TZ x4085 = x4061 + x4084;
-Tbase TZ x4086 = x4060 + x4085;
-Tbase TZ x4087 = x4059 + x4086;
-Tbase TZ x4088 = x4058 + x4087;
-Tbase TZ x4089 = x3423 * x3442;
-Tbase TZ x4090 = x3424 * x3441;
-Tbase TZ x4091 = x4089 + x4090;
-Tbase TZ x4092 = 0x11;
-Tbase TZ x4093 = x4092 * x4091;
-Tbase TZ x4094 = x4088 + x4093;
-Tbase TZ x4095 = x4057 + x4094;
-Tbase TZ x4096 = 0x17;
-Tbase TZ x4097 = x4095 >> x4096;
-Tbase TZ x4098 = x3424 * x3458;
-Tbase TZ x4099 = x3425 * x3457;
-Tbase TZ x4100 = x3426 * x3456;
-Tbase TZ x4101 = x3427 * x3455;
-Tbase TZ x4102 = x3428 * x3454;
-Tbase TZ x4103 = x3429 * x3453;
-Tbase TZ x4104 = x3430 * x3452;
-Tbase TZ x4105 = x3431 * x3451;
-Tbase TZ x4106 = x3432 * x3450;
-Tbase TZ x4107 = x3433 * x3449;
-Tbase TZ x4108 = x3434 * x3448;
-Tbase TZ x4109 = x3435 * x3447;
-Tbase TZ x4110 = x3436 * x3446;
-Tbase TZ x4111 = x3437 * x3445;
-Tbase TZ x4112 = x3438 * x3444;
-Tbase TZ x4113 = x3439 * x3443;
-Tbase TZ x4114 = x3440 * x3442;
-Tbase TZ x4115 = x4113 + x4114;
-Tbase TZ x4116 = x4112 + x4115;
-Tbase TZ x4117 = x4111 + x4116;
-Tbase TZ x4118 = x4110 + x4117;
-Tbase TZ x4119 = x4109 + x4118;
-Tbase TZ x4120 = x4108 + x4119;
-Tbase TZ x4121 = x4107 + x4120;
-Tbase TZ x4122 = x4106 + x4121;
-Tbase TZ x4123 = x4105 + x4122;
-Tbase TZ x4124 = x4104 + x4123;
-Tbase TZ x4125 = x4103 + x4124;
-Tbase TZ x4126 = x4102 + x4125;
-Tbase TZ x4127 = x4101 + x4126;
-Tbase TZ x4128 = x4100 + x4127;
-Tbase TZ x4129 = x4099 + x4128;
-Tbase TZ x4130 = x4098 + x4129;
-Tbase TZ x4131 = x3423 * x3441;
-Tbase TZ x4132 = 0x11;
-Tbase TZ x4133 = x4132 * x4131;
-Tbase TZ x4134 = x4130 + x4133;
-Tbase TZ x4135 = x4097 + x4134;
-Tbase TZ x4136 = 0x17;
-Tbase TZ x4137 = x4135 >> x4136;
-Tbase TZ x4138 = x3423 * x3458;
-Tbase TZ x4139 = x3424 * x3457;
-Tbase TZ x4140 = x3425 * x3456;
-Tbase TZ x4141 = x3426 * x3455;
-Tbase TZ x4142 = x3427 * x3454;
-Tbase TZ x4143 = x3428 * x3453;
-Tbase TZ x4144 = x3429 * x3452;
-Tbase TZ x4145 = x3430 * x3451;
-Tbase TZ x4146 = x3431 * x3450;
-Tbase TZ x4147 = x3432 * x3449;
-Tbase TZ x4148 = x3433 * x3448;
-Tbase TZ x4149 = x3434 * x3447;
-Tbase TZ x4150 = x3435 * x3446;
-Tbase TZ x4151 = x3436 * x3445;
-Tbase TZ x4152 = x3437 * x3444;
-Tbase TZ x4153 = x3438 * x3443;
-Tbase TZ x4154 = x3439 * x3442;
-Tbase TZ x4155 = x3440 * x3441;
-Tbase TZ x4156 = x4154 + x4155;
-Tbase TZ x4157 = x4153 + x4156;
-Tbase TZ x4158 = x4152 + x4157;
-Tbase TZ x4159 = x4151 + x4158;
-Tbase TZ x4160 = x4150 + x4159;
-Tbase TZ x4161 = x4149 + x4160;
-Tbase TZ x4162 = x4148 + x4161;
-Tbase TZ x4163 = x4147 + x4162;
-Tbase TZ x4164 = x4146 + x4163;
-Tbase TZ x4165 = x4145 + x4164;
-Tbase TZ x4166 = x4144 + x4165;
-Tbase TZ x4167 = x4143 + x4166;
-Tbase TZ x4168 = x4142 + x4167;
-Tbase TZ x4169 = x4141 + x4168;
-Tbase TZ x4170 = x4140 + x4169;
-Tbase TZ x4171 = x4139 + x4170;
-Tbase TZ x4172 = x4138 + x4171;
-Tbase TZ x4173 = x4137 + x4172;
-Tbase TZ x4174 = 0x17;
-Tbase TZ x4175 = x4173 >> x4174;
-Tbase TZ x4176 = 0x11;
-Tbase TZ x4177 = x4176 * x4175;
-Tbase TZ x4178 = 0x7fffff;
-Tbase TZ x4179 = x3495 & x4178;
-Tbase TZ x4180 = x4177 + x4179;
-Tbase TZ x4181 = 0x17;
-Tbase TZ x4182 = x4180 >> x4181;
-Tbase TZ x4183 = 0x7fffff;
-Tbase TZ x4184 = x3535 & x4183;
-Tbase TZ x4185 = x4182 + x4184;
-Tbase TZ x4186 = 0x7fffff;
-Tbase TZ x4187 = x4173 & x4186;
-Tbase TZ x4188 = 0x7fffff;
-Tbase TZ x4189 = x4135 & x4188;
-Tbase TZ x4190 = 0x7fffff;
-Tbase TZ x4191 = x4095 & x4190;
-Tbase TZ x4192 = 0x7fffff;
-Tbase TZ x4193 = x4055 & x4192;
-Tbase TZ x4194 = 0x7fffff;
-Tbase TZ x4195 = x4015 & x4194;
-Tbase TZ x4196 = 0x7fffff;
-Tbase TZ x4197 = x3975 & x4196;
-Tbase TZ x4198 = 0x7fffff;
-Tbase TZ x4199 = x3935 & x4198;
-Tbase TZ x4200 = 0x7fffff;
-Tbase TZ x4201 = x3895 & x4200;
-Tbase TZ x4202 = 0x7fffff;
-Tbase TZ x4203 = x3855 & x4202;
-Tbase TZ x4204 = 0x7fffff;
-Tbase TZ x4205 = x3815 & x4204;
-Tbase TZ x4206 = 0x7fffff;
-Tbase TZ x4207 = x3775 & x4206;
-Tbase TZ x4208 = 0x7fffff;
-Tbase TZ x4209 = x3735 & x4208;
-Tbase TZ x4210 = 0x7fffff;
-Tbase TZ x4211 = x3695 & x4210;
-Tbase TZ x4212 = 0x7fffff;
-Tbase TZ x4213 = x3655 & x4212;
-Tbase TZ x4214 = 0x7fffff;
-Tbase TZ x4215 = x3615 & x4214;
-Tbase TZ x4216 = 0x17;
-Tbase TZ x4217 = x4185 >> x4216;
-Tbase TZ x4218 = 0x7fffff;
-Tbase TZ x4219 = x3575 & x4218;
-Tbase TZ x4220 = x4217 + x4219;
-Tbase TZ x4221 = 0x7fffff;
-Tbase TZ x4222 = x4185 & x4221;
-Tbase TZ x4223 = 0x7fffff;
-Tbase TZ x4224 = x4180 & x4223;
-Tbase TZ x4225 = Const 16777214;
-Tbase TZ x4226 = x4225 + x2619;
-Tbase TZ x4227 = x4226 - x3385;
-Tbase TZ x4228 = Const 16777214;
-Tbase TZ x4229 = x4228 + x2621;
-Tbase TZ x4230 = x4229 - x3387;
-Tbase TZ x4231 = Const 16777214;
-Tbase TZ x4232 = x4231 + x2623;
-Tbase TZ x4233 = x4232 - x3389;
-Tbase TZ x4234 = Const 16777214;
-Tbase TZ x4235 = x4234 + x2625;
-Tbase TZ x4236 = x4235 - x3391;
-Tbase TZ x4237 = Const 16777214;
-Tbase TZ x4238 = x4237 + x2627;
-Tbase TZ x4239 = x4238 - x3393;
-Tbase TZ x4240 = Const 16777214;
-Tbase TZ x4241 = x4240 + x2629;
-Tbase TZ x4242 = x4241 - x3395;
-Tbase TZ x4243 = Const 16777214;
-Tbase TZ x4244 = x4243 + x2631;
-Tbase TZ x4245 = x4244 - x3397;
-Tbase TZ x4246 = Const 16777214;
-Tbase TZ x4247 = x4246 + x2633;
-Tbase TZ x4248 = x4247 - x3399;
-Tbase TZ x4249 = Const 16777214;
-Tbase TZ x4250 = x4249 + x2635;
-Tbase TZ x4251 = x4250 - x3401;
-Tbase TZ x4252 = Const 16777214;
-Tbase TZ x4253 = x4252 + x2637;
-Tbase TZ x4254 = x4253 - x3403;
-Tbase TZ x4255 = Const 16777214;
-Tbase TZ x4256 = x4255 + x2639;
-Tbase TZ x4257 = x4256 - x3405;
-Tbase TZ x4258 = Const 16777214;
-Tbase TZ x4259 = x4258 + x2641;
-Tbase TZ x4260 = x4259 - x3407;
-Tbase TZ x4261 = Const 16777214;
-Tbase TZ x4262 = x4261 + x2643;
-Tbase TZ x4263 = x4262 - x3409;
-Tbase TZ x4264 = Const 16777214;
-Tbase TZ x4265 = x4264 + x2645;
-Tbase TZ x4266 = x4265 - x3411;
-Tbase TZ x4267 = Const 16777214;
-Tbase TZ x4268 = x4267 + x2647;
-Tbase TZ x4269 = x4268 - x3413;
-Tbase TZ x4270 = Const 16777214;
-Tbase TZ x4271 = x4270 + x2652;
-Tbase TZ x4272 = x4271 - x3418;
-Tbase TZ x4273 = Const 16777214;
-Tbase TZ x4274 = x4273 + x2654;
-Tbase TZ x4275 = x4274 - x3420;
-Tbase TZ x4276 = Const 16777182;
-Tbase TZ x4277 = x4276 + x2656;
-Tbase TZ x4278 = x4277 - x3422;
-Tbase TZ x4279 = Const 16777214;
-Tbase TZ x4280 = x4279 + x2619;
-Tbase TZ x4281 = x4280 - x3385;
-Tbase TZ x4282 = Const 16777214;
-Tbase TZ x4283 = x4282 + x2621;
-Tbase TZ x4284 = x4283 - x3387;
-Tbase TZ x4285 = Const 16777214;
-Tbase TZ x4286 = x4285 + x2623;
-Tbase TZ x4287 = x4286 - x3389;
-Tbase TZ x4288 = Const 16777214;
-Tbase TZ x4289 = x4288 + x2625;
-Tbase TZ x4290 = x4289 - x3391;
-Tbase TZ x4291 = Const 16777214;
-Tbase TZ x4292 = x4291 + x2627;
-Tbase TZ x4293 = x4292 - x3393;
-Tbase TZ x4294 = Const 16777214;
-Tbase TZ x4295 = x4294 + x2629;
-Tbase TZ x4296 = x4295 - x3395;
-Tbase TZ x4297 = Const 16777214;
-Tbase TZ x4298 = x4297 + x2631;
-Tbase TZ x4299 = x4298 - x3397;
-Tbase TZ x4300 = Const 16777214;
-Tbase TZ x4301 = x4300 + x2633;
-Tbase TZ x4302 = x4301 - x3399;
-Tbase TZ x4303 = Const 16777214;
-Tbase TZ x4304 = x4303 + x2635;
-Tbase TZ x4305 = x4304 - x3401;
-Tbase TZ x4306 = Const 16777214;
-Tbase TZ x4307 = x4306 + x2637;
-Tbase TZ x4308 = x4307 - x3403;
-Tbase TZ x4309 = Const 16777214;
-Tbase TZ x4310 = x4309 + x2639;
-Tbase TZ x4311 = x4310 - x3405;
-Tbase TZ x4312 = Const 16777214;
-Tbase TZ x4313 = x4312 + x2641;
-Tbase TZ x4314 = x4313 - x3407;
-Tbase TZ x4315 = Const 16777214;
-Tbase TZ x4316 = x4315 + x2643;
-Tbase TZ x4317 = x4316 - x3409;
-Tbase TZ x4318 = Const 16777214;
-Tbase TZ x4319 = x4318 + x2645;
-Tbase TZ x4320 = x4319 - x3411;
-Tbase TZ x4321 = Const 16777214;
-Tbase TZ x4322 = x4321 + x2647;
-Tbase TZ x4323 = x4322 - x3413;
-Tbase TZ x4324 = Const 16777214;
-Tbase TZ x4325 = x4324 + x2652;
-Tbase TZ x4326 = x4325 - x3418;
-Tbase TZ x4327 = Const 16777214;
-Tbase TZ x4328 = x4327 + x2654;
-Tbase TZ x4329 = x4328 - x3420;
-Tbase TZ x4330 = Const 16777182;
-Tbase TZ x4331 = x4330 + x2656;
-Tbase TZ x4332 = x4331 - x3422;
-Tbase TZ x4333 = x4278 * x4332;
-Tbase TZ x4334 = x4227 * x4329;
-Tbase TZ x4335 = x4230 * x4326;
-Tbase TZ x4336 = x4233 * x4323;
-Tbase TZ x4337 = x4236 * x4320;
-Tbase TZ x4338 = x4239 * x4317;
-Tbase TZ x4339 = x4242 * x4314;
-Tbase TZ x4340 = x4245 * x4311;
-Tbase TZ x4341 = x4248 * x4308;
-Tbase TZ x4342 = x4251 * x4305;
-Tbase TZ x4343 = x4254 * x4302;
-Tbase TZ x4344 = x4257 * x4299;
-Tbase TZ x4345 = x4260 * x4296;
-Tbase TZ x4346 = x4263 * x4293;
-Tbase TZ x4347 = x4266 * x4290;
-Tbase TZ x4348 = x4269 * x4287;
-Tbase TZ x4349 = x4272 * x4284;
-Tbase TZ x4350 = x4275 * x4281;
-Tbase TZ x4351 = x4349 + x4350;
-Tbase TZ x4352 = x4348 + x4351;
-Tbase TZ x4353 = x4347 + x4352;
-Tbase TZ x4354 = x4346 + x4353;
-Tbase TZ x4355 = x4345 + x4354;
-Tbase TZ x4356 = x4344 + x4355;
-Tbase TZ x4357 = x4343 + x4356;
-Tbase TZ x4358 = x4342 + x4357;
-Tbase TZ x4359 = x4341 + x4358;
-Tbase TZ x4360 = x4340 + x4359;
-Tbase TZ x4361 = x4339 + x4360;
-Tbase TZ x4362 = x4338 + x4361;
-Tbase TZ x4363 = x4337 + x4362;
-Tbase TZ x4364 = x4336 + x4363;
-Tbase TZ x4365 = x4335 + x4364;
-Tbase TZ x4366 = x4334 + x4365;
-Tbase TZ x4367 = 0x11;
-Tbase TZ x4368 = x4367 * x4366;
-Tbase TZ x4369 = x4333 + x4368;
-Tbase TZ x4370 = 0x17;
-Tbase TZ x4371 = x4369 >> x4370;
-Tbase TZ x4372 = x4275 * x4332;
-Tbase TZ x4373 = x4278 * x4329;
-Tbase TZ x4374 = x4372 + x4373;
-Tbase TZ x4375 = x4227 * x4326;
-Tbase TZ x4376 = x4230 * x4323;
-Tbase TZ x4377 = x4233 * x4320;
-Tbase TZ x4378 = x4236 * x4317;
-Tbase TZ x4379 = x4239 * x4314;
-Tbase TZ x4380 = x4242 * x4311;
-Tbase TZ x4381 = x4245 * x4308;
-Tbase TZ x4382 = x4248 * x4305;
-Tbase TZ x4383 = x4251 * x4302;
-Tbase TZ x4384 = x4254 * x4299;
-Tbase TZ x4385 = x4257 * x4296;
-Tbase TZ x4386 = x4260 * x4293;
-Tbase TZ x4387 = x4263 * x4290;
-Tbase TZ x4388 = x4266 * x4287;
-Tbase TZ x4389 = x4269 * x4284;
-Tbase TZ x4390 = x4272 * x4281;
-Tbase TZ x4391 = x4389 + x4390;
-Tbase TZ x4392 = x4388 + x4391;
-Tbase TZ x4393 = x4387 + x4392;
-Tbase TZ x4394 = x4386 + x4393;
-Tbase TZ x4395 = x4385 + x4394;
-Tbase TZ x4396 = x4384 + x4395;
-Tbase TZ x4397 = x4383 + x4396;
-Tbase TZ x4398 = x4382 + x4397;
-Tbase TZ x4399 = x4381 + x4398;
-Tbase TZ x4400 = x4380 + x4399;
-Tbase TZ x4401 = x4379 + x4400;
-Tbase TZ x4402 = x4378 + x4401;
-Tbase TZ x4403 = x4377 + x4402;
-Tbase TZ x4404 = x4376 + x4403;
-Tbase TZ x4405 = x4375 + x4404;
-Tbase TZ x4406 = 0x11;
-Tbase TZ x4407 = x4406 * x4405;
-Tbase TZ x4408 = x4374 + x4407;
-Tbase TZ x4409 = x4371 + x4408;
-Tbase TZ x4410 = 0x17;
-Tbase TZ x4411 = x4409 >> x4410;
-Tbase TZ x4412 = x4272 * x4332;
-Tbase TZ x4413 = x4275 * x4329;
-Tbase TZ x4414 = x4278 * x4326;
-Tbase TZ x4415 = x4413 + x4414;
-Tbase TZ x4416 = x4412 + x4415;
-Tbase TZ x4417 = x4227 * x4323;
-Tbase TZ x4418 = x4230 * x4320;
-Tbase TZ x4419 = x4233 * x4317;
-Tbase TZ x4420 = x4236 * x4314;
-Tbase TZ x4421 = x4239 * x4311;
-Tbase TZ x4422 = x4242 * x4308;
-Tbase TZ x4423 = x4245 * x4305;
-Tbase TZ x4424 = x4248 * x4302;
-Tbase TZ x4425 = x4251 * x4299;
-Tbase TZ x4426 = x4254 * x4296;
-Tbase TZ x4427 = x4257 * x4293;
-Tbase TZ x4428 = x4260 * x4290;
-Tbase TZ x4429 = x4263 * x4287;
-Tbase TZ x4430 = x4266 * x4284;
-Tbase TZ x4431 = x4269 * x4281;
-Tbase TZ x4432 = x4430 + x4431;
-Tbase TZ x4433 = x4429 + x4432;
-Tbase TZ x4434 = x4428 + x4433;
-Tbase TZ x4435 = x4427 + x4434;
-Tbase TZ x4436 = x4426 + x4435;
-Tbase TZ x4437 = x4425 + x4436;
-Tbase TZ x4438 = x4424 + x4437;
-Tbase TZ x4439 = x4423 + x4438;
-Tbase TZ x4440 = x4422 + x4439;
-Tbase TZ x4441 = x4421 + x4440;
-Tbase TZ x4442 = x4420 + x4441;
-Tbase TZ x4443 = x4419 + x4442;
-Tbase TZ x4444 = x4418 + x4443;
-Tbase TZ x4445 = x4417 + x4444;
-Tbase TZ x4446 = 0x11;
-Tbase TZ x4447 = x4446 * x4445;
-Tbase TZ x4448 = x4416 + x4447;
-Tbase TZ x4449 = x4411 + x4448;
-Tbase TZ x4450 = 0x17;
-Tbase TZ x4451 = x4449 >> x4450;
-Tbase TZ x4452 = x4269 * x4332;
-Tbase TZ x4453 = x4272 * x4329;
-Tbase TZ x4454 = x4275 * x4326;
-Tbase TZ x4455 = x4278 * x4323;
-Tbase TZ x4456 = x4454 + x4455;
-Tbase TZ x4457 = x4453 + x4456;
-Tbase TZ x4458 = x4452 + x4457;
-Tbase TZ x4459 = x4227 * x4320;
-Tbase TZ x4460 = x4230 * x4317;
-Tbase TZ x4461 = x4233 * x4314;
-Tbase TZ x4462 = x4236 * x4311;
-Tbase TZ x4463 = x4239 * x4308;
-Tbase TZ x4464 = x4242 * x4305;
-Tbase TZ x4465 = x4245 * x4302;
-Tbase TZ x4466 = x4248 * x4299;
-Tbase TZ x4467 = x4251 * x4296;
-Tbase TZ x4468 = x4254 * x4293;
-Tbase TZ x4469 = x4257 * x4290;
-Tbase TZ x4470 = x4260 * x4287;
-Tbase TZ x4471 = x4263 * x4284;
-Tbase TZ x4472 = x4266 * x4281;
-Tbase TZ x4473 = x4471 + x4472;
-Tbase TZ x4474 = x4470 + x4473;
-Tbase TZ x4475 = x4469 + x4474;
-Tbase TZ x4476 = x4468 + x4475;
-Tbase TZ x4477 = x4467 + x4476;
-Tbase TZ x4478 = x4466 + x4477;
-Tbase TZ x4479 = x4465 + x4478;
-Tbase TZ x4480 = x4464 + x4479;
-Tbase TZ x4481 = x4463 + x4480;
-Tbase TZ x4482 = x4462 + x4481;
-Tbase TZ x4483 = x4461 + x4482;
-Tbase TZ x4484 = x4460 + x4483;
-Tbase TZ x4485 = x4459 + x4484;
-Tbase TZ x4486 = 0x11;
-Tbase TZ x4487 = x4486 * x4485;
-Tbase TZ x4488 = x4458 + x4487;
-Tbase TZ x4489 = x4451 + x4488;
-Tbase TZ x4490 = 0x17;
-Tbase TZ x4491 = x4489 >> x4490;
-Tbase TZ x4492 = x4266 * x4332;
-Tbase TZ x4493 = x4269 * x4329;
-Tbase TZ x4494 = x4272 * x4326;
-Tbase TZ x4495 = x4275 * x4323;
-Tbase TZ x4496 = x4278 * x4320;
-Tbase TZ x4497 = x4495 + x4496;
-Tbase TZ x4498 = x4494 + x4497;
-Tbase TZ x4499 = x4493 + x4498;
-Tbase TZ x4500 = x4492 + x4499;
-Tbase TZ x4501 = x4227 * x4317;
-Tbase TZ x4502 = x4230 * x4314;
-Tbase TZ x4503 = x4233 * x4311;
-Tbase TZ x4504 = x4236 * x4308;
-Tbase TZ x4505 = x4239 * x4305;
-Tbase TZ x4506 = x4242 * x4302;
-Tbase TZ x4507 = x4245 * x4299;
-Tbase TZ x4508 = x4248 * x4296;
-Tbase TZ x4509 = x4251 * x4293;
-Tbase TZ x4510 = x4254 * x4290;
-Tbase TZ x4511 = x4257 * x4287;
-Tbase TZ x4512 = x4260 * x4284;
-Tbase TZ x4513 = x4263 * x4281;
-Tbase TZ x4514 = x4512 + x4513;
-Tbase TZ x4515 = x4511 + x4514;
-Tbase TZ x4516 = x4510 + x4515;
-Tbase TZ x4517 = x4509 + x4516;
-Tbase TZ x4518 = x4508 + x4517;
-Tbase TZ x4519 = x4507 + x4518;
-Tbase TZ x4520 = x4506 + x4519;
-Tbase TZ x4521 = x4505 + x4520;
-Tbase TZ x4522 = x4504 + x4521;
-Tbase TZ x4523 = x4503 + x4522;
-Tbase TZ x4524 = x4502 + x4523;
-Tbase TZ x4525 = x4501 + x4524;
-Tbase TZ x4526 = 0x11;
-Tbase TZ x4527 = x4526 * x4525;
-Tbase TZ x4528 = x4500 + x4527;
-Tbase TZ x4529 = x4491 + x4528;
-Tbase TZ x4530 = 0x17;
-Tbase TZ x4531 = x4529 >> x4530;
-Tbase TZ x4532 = x4263 * x4332;
-Tbase TZ x4533 = x4266 * x4329;
-Tbase TZ x4534 = x4269 * x4326;
-Tbase TZ x4535 = x4272 * x4323;
-Tbase TZ x4536 = x4275 * x4320;
-Tbase TZ x4537 = x4278 * x4317;
-Tbase TZ x4538 = x4536 + x4537;
-Tbase TZ x4539 = x4535 + x4538;
-Tbase TZ x4540 = x4534 + x4539;
-Tbase TZ x4541 = x4533 + x4540;
-Tbase TZ x4542 = x4532 + x4541;
-Tbase TZ x4543 = x4227 * x4314;
-Tbase TZ x4544 = x4230 * x4311;
-Tbase TZ x4545 = x4233 * x4308;
-Tbase TZ x4546 = x4236 * x4305;
-Tbase TZ x4547 = x4239 * x4302;
-Tbase TZ x4548 = x4242 * x4299;
-Tbase TZ x4549 = x4245 * x4296;
-Tbase TZ x4550 = x4248 * x4293;
-Tbase TZ x4551 = x4251 * x4290;
-Tbase TZ x4552 = x4254 * x4287;
-Tbase TZ x4553 = x4257 * x4284;
-Tbase TZ x4554 = x4260 * x4281;
-Tbase TZ x4555 = x4553 + x4554;
-Tbase TZ x4556 = x4552 + x4555;
-Tbase TZ x4557 = x4551 + x4556;
-Tbase TZ x4558 = x4550 + x4557;
-Tbase TZ x4559 = x4549 + x4558;
-Tbase TZ x4560 = x4548 + x4559;
-Tbase TZ x4561 = x4547 + x4560;
-Tbase TZ x4562 = x4546 + x4561;
-Tbase TZ x4563 = x4545 + x4562;
-Tbase TZ x4564 = x4544 + x4563;
-Tbase TZ x4565 = x4543 + x4564;
-Tbase TZ x4566 = 0x11;
-Tbase TZ x4567 = x4566 * x4565;
-Tbase TZ x4568 = x4542 + x4567;
-Tbase TZ x4569 = x4531 + x4568;
-Tbase TZ x4570 = 0x17;
-Tbase TZ x4571 = x4569 >> x4570;
-Tbase TZ x4572 = x4260 * x4332;
-Tbase TZ x4573 = x4263 * x4329;
-Tbase TZ x4574 = x4266 * x4326;
-Tbase TZ x4575 = x4269 * x4323;
-Tbase TZ x4576 = x4272 * x4320;
-Tbase TZ x4577 = x4275 * x4317;
-Tbase TZ x4578 = x4278 * x4314;
-Tbase TZ x4579 = x4577 + x4578;
-Tbase TZ x4580 = x4576 + x4579;
-Tbase TZ x4581 = x4575 + x4580;
-Tbase TZ x4582 = x4574 + x4581;
-Tbase TZ x4583 = x4573 + x4582;
-Tbase TZ x4584 = x4572 + x4583;
-Tbase TZ x4585 = x4227 * x4311;
-Tbase TZ x4586 = x4230 * x4308;
-Tbase TZ x4587 = x4233 * x4305;
-Tbase TZ x4588 = x4236 * x4302;
-Tbase TZ x4589 = x4239 * x4299;
-Tbase TZ x4590 = x4242 * x4296;
-Tbase TZ x4591 = x4245 * x4293;
-Tbase TZ x4592 = x4248 * x4290;
-Tbase TZ x4593 = x4251 * x4287;
-Tbase TZ x4594 = x4254 * x4284;
-Tbase TZ x4595 = x4257 * x4281;
-Tbase TZ x4596 = x4594 + x4595;
-Tbase TZ x4597 = x4593 + x4596;
-Tbase TZ x4598 = x4592 + x4597;
-Tbase TZ x4599 = x4591 + x4598;
-Tbase TZ x4600 = x4590 + x4599;
-Tbase TZ x4601 = x4589 + x4600;
-Tbase TZ x4602 = x4588 + x4601;
-Tbase TZ x4603 = x4587 + x4602;
-Tbase TZ x4604 = x4586 + x4603;
-Tbase TZ x4605 = x4585 + x4604;
-Tbase TZ x4606 = 0x11;
-Tbase TZ x4607 = x4606 * x4605;
-Tbase TZ x4608 = x4584 + x4607;
-Tbase TZ x4609 = x4571 + x4608;
-Tbase TZ x4610 = 0x17;
-Tbase TZ x4611 = x4609 >> x4610;
-Tbase TZ x4612 = x4257 * x4332;
-Tbase TZ x4613 = x4260 * x4329;
-Tbase TZ x4614 = x4263 * x4326;
-Tbase TZ x4615 = x4266 * x4323;
-Tbase TZ x4616 = x4269 * x4320;
-Tbase TZ x4617 = x4272 * x4317;
-Tbase TZ x4618 = x4275 * x4314;
-Tbase TZ x4619 = x4278 * x4311;
-Tbase TZ x4620 = x4618 + x4619;
-Tbase TZ x4621 = x4617 + x4620;
-Tbase TZ x4622 = x4616 + x4621;
-Tbase TZ x4623 = x4615 + x4622;
-Tbase TZ x4624 = x4614 + x4623;
-Tbase TZ x4625 = x4613 + x4624;
-Tbase TZ x4626 = x4612 + x4625;
-Tbase TZ x4627 = x4227 * x4308;
-Tbase TZ x4628 = x4230 * x4305;
-Tbase TZ x4629 = x4233 * x4302;
-Tbase TZ x4630 = x4236 * x4299;
-Tbase TZ x4631 = x4239 * x4296;
-Tbase TZ x4632 = x4242 * x4293;
-Tbase TZ x4633 = x4245 * x4290;
-Tbase TZ x4634 = x4248 * x4287;
-Tbase TZ x4635 = x4251 * x4284;
-Tbase TZ x4636 = x4254 * x4281;
-Tbase TZ x4637 = x4635 + x4636;
-Tbase TZ x4638 = x4634 + x4637;
-Tbase TZ x4639 = x4633 + x4638;
-Tbase TZ x4640 = x4632 + x4639;
-Tbase TZ x4641 = x4631 + x4640;
-Tbase TZ x4642 = x4630 + x4641;
-Tbase TZ x4643 = x4629 + x4642;
-Tbase TZ x4644 = x4628 + x4643;
-Tbase TZ x4645 = x4627 + x4644;
-Tbase TZ x4646 = 0x11;
-Tbase TZ x4647 = x4646 * x4645;
-Tbase TZ x4648 = x4626 + x4647;
-Tbase TZ x4649 = x4611 + x4648;
-Tbase TZ x4650 = 0x17;
-Tbase TZ x4651 = x4649 >> x4650;
-Tbase TZ x4652 = x4254 * x4332;
-Tbase TZ x4653 = x4257 * x4329;
-Tbase TZ x4654 = x4260 * x4326;
-Tbase TZ x4655 = x4263 * x4323;
-Tbase TZ x4656 = x4266 * x4320;
-Tbase TZ x4657 = x4269 * x4317;
-Tbase TZ x4658 = x4272 * x4314;
-Tbase TZ x4659 = x4275 * x4311;
-Tbase TZ x4660 = x4278 * x4308;
-Tbase TZ x4661 = x4659 + x4660;
-Tbase TZ x4662 = x4658 + x4661;
-Tbase TZ x4663 = x4657 + x4662;
-Tbase TZ x4664 = x4656 + x4663;
-Tbase TZ x4665 = x4655 + x4664;
-Tbase TZ x4666 = x4654 + x4665;
-Tbase TZ x4667 = x4653 + x4666;
-Tbase TZ x4668 = x4652 + x4667;
-Tbase TZ x4669 = x4227 * x4305;
-Tbase TZ x4670 = x4230 * x4302;
-Tbase TZ x4671 = x4233 * x4299;
-Tbase TZ x4672 = x4236 * x4296;
-Tbase TZ x4673 = x4239 * x4293;
-Tbase TZ x4674 = x4242 * x4290;
-Tbase TZ x4675 = x4245 * x4287;
-Tbase TZ x4676 = x4248 * x4284;
-Tbase TZ x4677 = x4251 * x4281;
-Tbase TZ x4678 = x4676 + x4677;
-Tbase TZ x4679 = x4675 + x4678;
-Tbase TZ x4680 = x4674 + x4679;
-Tbase TZ x4681 = x4673 + x4680;
-Tbase TZ x4682 = x4672 + x4681;
-Tbase TZ x4683 = x4671 + x4682;
-Tbase TZ x4684 = x4670 + x4683;
-Tbase TZ x4685 = x4669 + x4684;
-Tbase TZ x4686 = 0x11;
-Tbase TZ x4687 = x4686 * x4685;
-Tbase TZ x4688 = x4668 + x4687;
-Tbase TZ x4689 = x4651 + x4688;
-Tbase TZ x4690 = 0x17;
-Tbase TZ x4691 = x4689 >> x4690;
-Tbase TZ x4692 = x4251 * x4332;
-Tbase TZ x4693 = x4254 * x4329;
-Tbase TZ x4694 = x4257 * x4326;
-Tbase TZ x4695 = x4260 * x4323;
-Tbase TZ x4696 = x4263 * x4320;
-Tbase TZ x4697 = x4266 * x4317;
-Tbase TZ x4698 = x4269 * x4314;
-Tbase TZ x4699 = x4272 * x4311;
-Tbase TZ x4700 = x4275 * x4308;
-Tbase TZ x4701 = x4278 * x4305;
-Tbase TZ x4702 = x4700 + x4701;
-Tbase TZ x4703 = x4699 + x4702;
-Tbase TZ x4704 = x4698 + x4703;
-Tbase TZ x4705 = x4697 + x4704;
-Tbase TZ x4706 = x4696 + x4705;
-Tbase TZ x4707 = x4695 + x4706;
-Tbase TZ x4708 = x4694 + x4707;
-Tbase TZ x4709 = x4693 + x4708;
-Tbase TZ x4710 = x4692 + x4709;
-Tbase TZ x4711 = x4227 * x4302;
-Tbase TZ x4712 = x4230 * x4299;
-Tbase TZ x4713 = x4233 * x4296;
-Tbase TZ x4714 = x4236 * x4293;
-Tbase TZ x4715 = x4239 * x4290;
-Tbase TZ x4716 = x4242 * x4287;
-Tbase TZ x4717 = x4245 * x4284;
-Tbase TZ x4718 = x4248 * x4281;
-Tbase TZ x4719 = x4717 + x4718;
-Tbase TZ x4720 = x4716 + x4719;
-Tbase TZ x4721 = x4715 + x4720;
-Tbase TZ x4722 = x4714 + x4721;
-Tbase TZ x4723 = x4713 + x4722;
-Tbase TZ x4724 = x4712 + x4723;
-Tbase TZ x4725 = x4711 + x4724;
-Tbase TZ x4726 = 0x11;
-Tbase TZ x4727 = x4726 * x4725;
-Tbase TZ x4728 = x4710 + x4727;
-Tbase TZ x4729 = x4691 + x4728;
-Tbase TZ x4730 = 0x17;
-Tbase TZ x4731 = x4729 >> x4730;
-Tbase TZ x4732 = x4248 * x4332;
-Tbase TZ x4733 = x4251 * x4329;
-Tbase TZ x4734 = x4254 * x4326;
-Tbase TZ x4735 = x4257 * x4323;
-Tbase TZ x4736 = x4260 * x4320;
-Tbase TZ x4737 = x4263 * x4317;
-Tbase TZ x4738 = x4266 * x4314;
-Tbase TZ x4739 = x4269 * x4311;
-Tbase TZ x4740 = x4272 * x4308;
-Tbase TZ x4741 = x4275 * x4305;
-Tbase TZ x4742 = x4278 * x4302;
-Tbase TZ x4743 = x4741 + x4742;
-Tbase TZ x4744 = x4740 + x4743;
-Tbase TZ x4745 = x4739 + x4744;
-Tbase TZ x4746 = x4738 + x4745;
-Tbase TZ x4747 = x4737 + x4746;
-Tbase TZ x4748 = x4736 + x4747;
-Tbase TZ x4749 = x4735 + x4748;
-Tbase TZ x4750 = x4734 + x4749;
-Tbase TZ x4751 = x4733 + x4750;
-Tbase TZ x4752 = x4732 + x4751;
-Tbase TZ x4753 = x4227 * x4299;
-Tbase TZ x4754 = x4230 * x4296;
-Tbase TZ x4755 = x4233 * x4293;
-Tbase TZ x4756 = x4236 * x4290;
-Tbase TZ x4757 = x4239 * x4287;
-Tbase TZ x4758 = x4242 * x4284;
-Tbase TZ x4759 = x4245 * x4281;
-Tbase TZ x4760 = x4758 + x4759;
-Tbase TZ x4761 = x4757 + x4760;
-Tbase TZ x4762 = x4756 + x4761;
-Tbase TZ x4763 = x4755 + x4762;
-Tbase TZ x4764 = x4754 + x4763;
-Tbase TZ x4765 = x4753 + x4764;
-Tbase TZ x4766 = 0x11;
-Tbase TZ x4767 = x4766 * x4765;
-Tbase TZ x4768 = x4752 + x4767;
-Tbase TZ x4769 = x4731 + x4768;
-Tbase TZ x4770 = 0x17;
-Tbase TZ x4771 = x4769 >> x4770;
-Tbase TZ x4772 = x4245 * x4332;
-Tbase TZ x4773 = x4248 * x4329;
-Tbase TZ x4774 = x4251 * x4326;
-Tbase TZ x4775 = x4254 * x4323;
-Tbase TZ x4776 = x4257 * x4320;
-Tbase TZ x4777 = x4260 * x4317;
-Tbase TZ x4778 = x4263 * x4314;
-Tbase TZ x4779 = x4266 * x4311;
-Tbase TZ x4780 = x4269 * x4308;
-Tbase TZ x4781 = x4272 * x4305;
-Tbase TZ x4782 = x4275 * x4302;
-Tbase TZ x4783 = x4278 * x4299;
-Tbase TZ x4784 = x4782 + x4783;
-Tbase TZ x4785 = x4781 + x4784;
-Tbase TZ x4786 = x4780 + x4785;
-Tbase TZ x4787 = x4779 + x4786;
-Tbase TZ x4788 = x4778 + x4787;
-Tbase TZ x4789 = x4777 + x4788;
-Tbase TZ x4790 = x4776 + x4789;
-Tbase TZ x4791 = x4775 + x4790;
-Tbase TZ x4792 = x4774 + x4791;
-Tbase TZ x4793 = x4773 + x4792;
-Tbase TZ x4794 = x4772 + x4793;
-Tbase TZ x4795 = x4227 * x4296;
-Tbase TZ x4796 = x4230 * x4293;
-Tbase TZ x4797 = x4233 * x4290;
-Tbase TZ x4798 = x4236 * x4287;
-Tbase TZ x4799 = x4239 * x4284;
-Tbase TZ x4800 = x4242 * x4281;
-Tbase TZ x4801 = x4799 + x4800;
-Tbase TZ x4802 = x4798 + x4801;
-Tbase TZ x4803 = x4797 + x4802;
-Tbase TZ x4804 = x4796 + x4803;
-Tbase TZ x4805 = x4795 + x4804;
-Tbase TZ x4806 = 0x11;
-Tbase TZ x4807 = x4806 * x4805;
-Tbase TZ x4808 = x4794 + x4807;
-Tbase TZ x4809 = x4771 + x4808;
-Tbase TZ x4810 = 0x17;
-Tbase TZ x4811 = x4809 >> x4810;
-Tbase TZ x4812 = x4242 * x4332;
-Tbase TZ x4813 = x4245 * x4329;
-Tbase TZ x4814 = x4248 * x4326;
-Tbase TZ x4815 = x4251 * x4323;
-Tbase TZ x4816 = x4254 * x4320;
-Tbase TZ x4817 = x4257 * x4317;
-Tbase TZ x4818 = x4260 * x4314;
-Tbase TZ x4819 = x4263 * x4311;
-Tbase TZ x4820 = x4266 * x4308;
-Tbase TZ x4821 = x4269 * x4305;
-Tbase TZ x4822 = x4272 * x4302;
-Tbase TZ x4823 = x4275 * x4299;
-Tbase TZ x4824 = x4278 * x4296;
-Tbase TZ x4825 = x4823 + x4824;
-Tbase TZ x4826 = x4822 + x4825;
-Tbase TZ x4827 = x4821 + x4826;
-Tbase TZ x4828 = x4820 + x4827;
-Tbase TZ x4829 = x4819 + x4828;
-Tbase TZ x4830 = x4818 + x4829;
-Tbase TZ x4831 = x4817 + x4830;
-Tbase TZ x4832 = x4816 + x4831;
-Tbase TZ x4833 = x4815 + x4832;
-Tbase TZ x4834 = x4814 + x4833;
-Tbase TZ x4835 = x4813 + x4834;
-Tbase TZ x4836 = x4812 + x4835;
-Tbase TZ x4837 = x4227 * x4293;
-Tbase TZ x4838 = x4230 * x4290;
-Tbase TZ x4839 = x4233 * x4287;
-Tbase TZ x4840 = x4236 * x4284;
-Tbase TZ x4841 = x4239 * x4281;
-Tbase TZ x4842 = x4840 + x4841;
-Tbase TZ x4843 = x4839 + x4842;
-Tbase TZ x4844 = x4838 + x4843;
-Tbase TZ x4845 = x4837 + x4844;
-Tbase TZ x4846 = 0x11;
-Tbase TZ x4847 = x4846 * x4845;
-Tbase TZ x4848 = x4836 + x4847;
-Tbase TZ x4849 = x4811 + x4848;
-Tbase TZ x4850 = 0x17;
-Tbase TZ x4851 = x4849 >> x4850;
-Tbase TZ x4852 = x4239 * x4332;
-Tbase TZ x4853 = x4242 * x4329;
-Tbase TZ x4854 = x4245 * x4326;
-Tbase TZ x4855 = x4248 * x4323;
-Tbase TZ x4856 = x4251 * x4320;
-Tbase TZ x4857 = x4254 * x4317;
-Tbase TZ x4858 = x4257 * x4314;
-Tbase TZ x4859 = x4260 * x4311;
-Tbase TZ x4860 = x4263 * x4308;
-Tbase TZ x4861 = x4266 * x4305;
-Tbase TZ x4862 = x4269 * x4302;
-Tbase TZ x4863 = x4272 * x4299;
-Tbase TZ x4864 = x4275 * x4296;
-Tbase TZ x4865 = x4278 * x4293;
-Tbase TZ x4866 = x4864 + x4865;
-Tbase TZ x4867 = x4863 + x4866;
-Tbase TZ x4868 = x4862 + x4867;
-Tbase TZ x4869 = x4861 + x4868;
-Tbase TZ x4870 = x4860 + x4869;
-Tbase TZ x4871 = x4859 + x4870;
-Tbase TZ x4872 = x4858 + x4871;
-Tbase TZ x4873 = x4857 + x4872;
-Tbase TZ x4874 = x4856 + x4873;
-Tbase TZ x4875 = x4855 + x4874;
-Tbase TZ x4876 = x4854 + x4875;
-Tbase TZ x4877 = x4853 + x4876;
-Tbase TZ x4878 = x4852 + x4877;
-Tbase TZ x4879 = x4227 * x4290;
-Tbase TZ x4880 = x4230 * x4287;
-Tbase TZ x4881 = x4233 * x4284;
-Tbase TZ x4882 = x4236 * x4281;
-Tbase TZ x4883 = x4881 + x4882;
-Tbase TZ x4884 = x4880 + x4883;
-Tbase TZ x4885 = x4879 + x4884;
-Tbase TZ x4886 = 0x11;
-Tbase TZ x4887 = x4886 * x4885;
-Tbase TZ x4888 = x4878 + x4887;
-Tbase TZ x4889 = x4851 + x4888;
-Tbase TZ x4890 = 0x17;
-Tbase TZ x4891 = x4889 >> x4890;
-Tbase TZ x4892 = x4236 * x4332;
-Tbase TZ x4893 = x4239 * x4329;
-Tbase TZ x4894 = x4242 * x4326;
-Tbase TZ x4895 = x4245 * x4323;
-Tbase TZ x4896 = x4248 * x4320;
-Tbase TZ x4897 = x4251 * x4317;
-Tbase TZ x4898 = x4254 * x4314;
-Tbase TZ x4899 = x4257 * x4311;
-Tbase TZ x4900 = x4260 * x4308;
-Tbase TZ x4901 = x4263 * x4305;
-Tbase TZ x4902 = x4266 * x4302;
-Tbase TZ x4903 = x4269 * x4299;
-Tbase TZ x4904 = x4272 * x4296;
-Tbase TZ x4905 = x4275 * x4293;
-Tbase TZ x4906 = x4278 * x4290;
-Tbase TZ x4907 = x4905 + x4906;
-Tbase TZ x4908 = x4904 + x4907;
-Tbase TZ x4909 = x4903 + x4908;
-Tbase TZ x4910 = x4902 + x4909;
-Tbase TZ x4911 = x4901 + x4910;
-Tbase TZ x4912 = x4900 + x4911;
-Tbase TZ x4913 = x4899 + x4912;
-Tbase TZ x4914 = x4898 + x4913;
-Tbase TZ x4915 = x4897 + x4914;
-Tbase TZ x4916 = x4896 + x4915;
-Tbase TZ x4917 = x4895 + x4916;
-Tbase TZ x4918 = x4894 + x4917;
-Tbase TZ x4919 = x4893 + x4918;
-Tbase TZ x4920 = x4892 + x4919;
-Tbase TZ x4921 = x4227 * x4287;
-Tbase TZ x4922 = x4230 * x4284;
-Tbase TZ x4923 = x4233 * x4281;
-Tbase TZ x4924 = x4922 + x4923;
-Tbase TZ x4925 = x4921 + x4924;
-Tbase TZ x4926 = 0x11;
-Tbase TZ x4927 = x4926 * x4925;
-Tbase TZ x4928 = x4920 + x4927;
-Tbase TZ x4929 = x4891 + x4928;
-Tbase TZ x4930 = 0x17;
-Tbase TZ x4931 = x4929 >> x4930;
-Tbase TZ x4932 = x4233 * x4332;
-Tbase TZ x4933 = x4236 * x4329;
-Tbase TZ x4934 = x4239 * x4326;
-Tbase TZ x4935 = x4242 * x4323;
-Tbase TZ x4936 = x4245 * x4320;
-Tbase TZ x4937 = x4248 * x4317;
-Tbase TZ x4938 = x4251 * x4314;
-Tbase TZ x4939 = x4254 * x4311;
-Tbase TZ x4940 = x4257 * x4308;
-Tbase TZ x4941 = x4260 * x4305;
-Tbase TZ x4942 = x4263 * x4302;
-Tbase TZ x4943 = x4266 * x4299;
-Tbase TZ x4944 = x4269 * x4296;
-Tbase TZ x4945 = x4272 * x4293;
-Tbase TZ x4946 = x4275 * x4290;
-Tbase TZ x4947 = x4278 * x4287;
-Tbase TZ x4948 = x4946 + x4947;
-Tbase TZ x4949 = x4945 + x4948;
-Tbase TZ x4950 = x4944 + x4949;
-Tbase TZ x4951 = x4943 + x4950;
-Tbase TZ x4952 = x4942 + x4951;
-Tbase TZ x4953 = x4941 + x4952;
-Tbase TZ x4954 = x4940 + x4953;
-Tbase TZ x4955 = x4939 + x4954;
-Tbase TZ x4956 = x4938 + x4955;
-Tbase TZ x4957 = x4937 + x4956;
-Tbase TZ x4958 = x4936 + x4957;
-Tbase TZ x4959 = x4935 + x4958;
-Tbase TZ x4960 = x4934 + x4959;
-Tbase TZ x4961 = x4933 + x4960;
-Tbase TZ x4962 = x4932 + x4961;
-Tbase TZ x4963 = x4227 * x4284;
-Tbase TZ x4964 = x4230 * x4281;
-Tbase TZ x4965 = x4963 + x4964;
-Tbase TZ x4966 = 0x11;
-Tbase TZ x4967 = x4966 * x4965;
-Tbase TZ x4968 = x4962 + x4967;
-Tbase TZ x4969 = x4931 + x4968;
-Tbase TZ x4970 = 0x17;
-Tbase TZ x4971 = x4969 >> x4970;
-Tbase TZ x4972 = x4230 * x4332;
-Tbase TZ x4973 = x4233 * x4329;
-Tbase TZ x4974 = x4236 * x4326;
-Tbase TZ x4975 = x4239 * x4323;
-Tbase TZ x4976 = x4242 * x4320;
-Tbase TZ x4977 = x4245 * x4317;
-Tbase TZ x4978 = x4248 * x4314;
-Tbase TZ x4979 = x4251 * x4311;
-Tbase TZ x4980 = x4254 * x4308;
-Tbase TZ x4981 = x4257 * x4305;
-Tbase TZ x4982 = x4260 * x4302;
-Tbase TZ x4983 = x4263 * x4299;
-Tbase TZ x4984 = x4266 * x4296;
-Tbase TZ x4985 = x4269 * x4293;
-Tbase TZ x4986 = x4272 * x4290;
-Tbase TZ x4987 = x4275 * x4287;
-Tbase TZ x4988 = x4278 * x4284;
-Tbase TZ x4989 = x4987 + x4988;
-Tbase TZ x4990 = x4986 + x4989;
-Tbase TZ x4991 = x4985 + x4990;
-Tbase TZ x4992 = x4984 + x4991;
-Tbase TZ x4993 = x4983 + x4992;
-Tbase TZ x4994 = x4982 + x4993;
-Tbase TZ x4995 = x4981 + x4994;
-Tbase TZ x4996 = x4980 + x4995;
-Tbase TZ x4997 = x4979 + x4996;
-Tbase TZ x4998 = x4978 + x4997;
-Tbase TZ x4999 = x4977 + x4998;
-Tbase TZ x5000 = x4976 + x4999;
-Tbase TZ x5001 = x4975 + x5000;
-Tbase TZ x5002 = x4974 + x5001;
-Tbase TZ x5003 = x4973 + x5002;
-Tbase TZ x5004 = x4972 + x5003;
-Tbase TZ x5005 = x4227 * x4281;
-Tbase TZ x5006 = 0x11;
-Tbase TZ x5007 = x5006 * x5005;
-Tbase TZ x5008 = x5004 + x5007;
-Tbase TZ x5009 = x4971 + x5008;
-Tbase TZ x5010 = 0x17;
-Tbase TZ x5011 = x5009 >> x5010;
-Tbase TZ x5012 = x4227 * x4332;
-Tbase TZ x5013 = x4230 * x4329;
-Tbase TZ x5014 = x4233 * x4326;
-Tbase TZ x5015 = x4236 * x4323;
-Tbase TZ x5016 = x4239 * x4320;
-Tbase TZ x5017 = x4242 * x4317;
-Tbase TZ x5018 = x4245 * x4314;
-Tbase TZ x5019 = x4248 * x4311;
-Tbase TZ x5020 = x4251 * x4308;
-Tbase TZ x5021 = x4254 * x4305;
-Tbase TZ x5022 = x4257 * x4302;
-Tbase TZ x5023 = x4260 * x4299;
-Tbase TZ x5024 = x4263 * x4296;
-Tbase TZ x5025 = x4266 * x4293;
-Tbase TZ x5026 = x4269 * x4290;
-Tbase TZ x5027 = x4272 * x4287;
-Tbase TZ x5028 = x4275 * x4284;
-Tbase TZ x5029 = x4278 * x4281;
-Tbase TZ x5030 = x5028 + x5029;
-Tbase TZ x5031 = x5027 + x5030;
-Tbase TZ x5032 = x5026 + x5031;
-Tbase TZ x5033 = x5025 + x5032;
-Tbase TZ x5034 = x5024 + x5033;
-Tbase TZ x5035 = x5023 + x5034;
-Tbase TZ x5036 = x5022 + x5035;
-Tbase TZ x5037 = x5021 + x5036;
-Tbase TZ x5038 = x5020 + x5037;
-Tbase TZ x5039 = x5019 + x5038;
-Tbase TZ x5040 = x5018 + x5039;
-Tbase TZ x5041 = x5017 + x5040;
-Tbase TZ x5042 = x5016 + x5041;
-Tbase TZ x5043 = x5015 + x5042;
-Tbase TZ x5044 = x5014 + x5043;
-Tbase TZ x5045 = x5013 + x5044;
-Tbase TZ x5046 = x5012 + x5045;
-Tbase TZ x5047 = x5011 + x5046;
-Tbase TZ x5048 = 0x17;
-Tbase TZ x5049 = x5047 >> x5048;
-Tbase TZ x5050 = 0x11;
-Tbase TZ x5051 = x5050 * x5049;
-Tbase TZ x5052 = 0x7fffff;
-Tbase TZ x5053 = x4369 & x5052;
-Tbase TZ x5054 = x5051 + x5053;
-Tbase TZ x5055 = 0x17;
-Tbase TZ x5056 = x5054 >> x5055;
-Tbase TZ x5057 = 0x7fffff;
-Tbase TZ x5058 = x4409 & x5057;
-Tbase TZ x5059 = x5056 + x5058;
-Tbase TZ x5060 = 0x7fffff;
-Tbase TZ x5061 = x5047 & x5060;
-Tbase TZ x5062 = 0x7fffff;
-Tbase TZ x5063 = x5009 & x5062;
-Tbase TZ x5064 = 0x7fffff;
-Tbase TZ x5065 = x4969 & x5064;
-Tbase TZ x5066 = 0x7fffff;
-Tbase TZ x5067 = x4929 & x5066;
-Tbase TZ x5068 = 0x7fffff;
-Tbase TZ x5069 = x4889 & x5068;
-Tbase TZ x5070 = 0x7fffff;
-Tbase TZ x5071 = x4849 & x5070;
-Tbase TZ x5072 = 0x7fffff;
-Tbase TZ x5073 = x4809 & x5072;
-Tbase TZ x5074 = 0x7fffff;
-Tbase TZ x5075 = x4769 & x5074;
-Tbase TZ x5076 = 0x7fffff;
-Tbase TZ x5077 = x4729 & x5076;
-Tbase TZ x5078 = 0x7fffff;
-Tbase TZ x5079 = x4689 & x5078;
-Tbase TZ x5080 = 0x7fffff;
-Tbase TZ x5081 = x4649 & x5080;
-Tbase TZ x5082 = 0x7fffff;
-Tbase TZ x5083 = x4609 & x5082;
-Tbase TZ x5084 = 0x7fffff;
-Tbase TZ x5085 = x4569 & x5084;
-Tbase TZ x5086 = 0x7fffff;
-Tbase TZ x5087 = x4529 & x5086;
-Tbase TZ x5088 = 0x7fffff;
-Tbase TZ x5089 = x4489 & x5088;
-Tbase TZ x5090 = 0x17;
-Tbase TZ x5091 = x5059 >> x5090;
-Tbase TZ x5092 = 0x7fffff;
-Tbase TZ x5093 = x4449 & x5092;
-Tbase TZ x5094 = x5091 + x5093;
-Tbase TZ x5095 = 0x7fffff;
-Tbase TZ x5096 = x5059 & x5095;
-Tbase TZ x5097 = 0x7fffff;
-Tbase TZ x5098 = x5054 & x5097;
-Tbase TZ x5099 = x88 * x5098;
-Tbase TZ x5100 = x71 * x5096;
-Tbase TZ x5101 = x72 * x5094;
-Tbase TZ x5102 = x73 * x5089;
-Tbase TZ x5103 = x74 * x5087;
-Tbase TZ x5104 = x75 * x5085;
-Tbase TZ x5105 = x76 * x5083;
-Tbase TZ x5106 = x77 * x5081;
-Tbase TZ x5107 = x78 * x5079;
-Tbase TZ x5108 = x79 * x5077;
-Tbase TZ x5109 = x80 * x5075;
-Tbase TZ x5110 = x81 * x5073;
-Tbase TZ x5111 = x82 * x5071;
-Tbase TZ x5112 = x83 * x5069;
-Tbase TZ x5113 = x84 * x5067;
-Tbase TZ x5114 = x85 * x5065;
-Tbase TZ x5115 = x86 * x5063;
-Tbase TZ x5116 = x87 * x5061;
-Tbase TZ x5117 = x5115 + x5116;
-Tbase TZ x5118 = x5114 + x5117;
-Tbase TZ x5119 = x5113 + x5118;
-Tbase TZ x5120 = x5112 + x5119;
-Tbase TZ x5121 = x5111 + x5120;
-Tbase TZ x5122 = x5110 + x5121;
-Tbase TZ x5123 = x5109 + x5122;
-Tbase TZ x5124 = x5108 + x5123;
-Tbase TZ x5125 = x5107 + x5124;
-Tbase TZ x5126 = x5106 + x5125;
-Tbase TZ x5127 = x5105 + x5126;
-Tbase TZ x5128 = x5104 + x5127;
-Tbase TZ x5129 = x5103 + x5128;
-Tbase TZ x5130 = x5102 + x5129;
-Tbase TZ x5131 = x5101 + x5130;
-Tbase TZ x5132 = x5100 + x5131;
-Tbase TZ x5133 = 0x11;
-Tbase TZ x5134 = x5133 * x5132;
-Tbase TZ x5135 = x5099 + x5134;
-Tbase TZ x5136 = 0x17;
-Tbase TZ x5137 = x5135 >> x5136;
-Tbase TZ x5138 = x87 * x5098;
-Tbase TZ x5139 = x88 * x5096;
-Tbase TZ x5140 = x5138 + x5139;
-Tbase TZ x5141 = x71 * x5094;
-Tbase TZ x5142 = x72 * x5089;
-Tbase TZ x5143 = x73 * x5087;
-Tbase TZ x5144 = x74 * x5085;
-Tbase TZ x5145 = x75 * x5083;
-Tbase TZ x5146 = x76 * x5081;
-Tbase TZ x5147 = x77 * x5079;
-Tbase TZ x5148 = x78 * x5077;
-Tbase TZ x5149 = x79 * x5075;
-Tbase TZ x5150 = x80 * x5073;
-Tbase TZ x5151 = x81 * x5071;
-Tbase TZ x5152 = x82 * x5069;
-Tbase TZ x5153 = x83 * x5067;
-Tbase TZ x5154 = x84 * x5065;
-Tbase TZ x5155 = x85 * x5063;
-Tbase TZ x5156 = x86 * x5061;
-Tbase TZ x5157 = x5155 + x5156;
-Tbase TZ x5158 = x5154 + x5157;
-Tbase TZ x5159 = x5153 + x5158;
-Tbase TZ x5160 = x5152 + x5159;
-Tbase TZ x5161 = x5151 + x5160;
-Tbase TZ x5162 = x5150 + x5161;
-Tbase TZ x5163 = x5149 + x5162;
-Tbase TZ x5164 = x5148 + x5163;
-Tbase TZ x5165 = x5147 + x5164;
-Tbase TZ x5166 = x5146 + x5165;
-Tbase TZ x5167 = x5145 + x5166;
-Tbase TZ x5168 = x5144 + x5167;
-Tbase TZ x5169 = x5143 + x5168;
-Tbase TZ x5170 = x5142 + x5169;
-Tbase TZ x5171 = x5141 + x5170;
-Tbase TZ x5172 = 0x11;
-Tbase TZ x5173 = x5172 * x5171;
-Tbase TZ x5174 = x5140 + x5173;
-Tbase TZ x5175 = x5137 + x5174;
-Tbase TZ x5176 = 0x17;
-Tbase TZ x5177 = x5175 >> x5176;
-Tbase TZ x5178 = x86 * x5098;
-Tbase TZ x5179 = x87 * x5096;
-Tbase TZ x5180 = x88 * x5094;
-Tbase TZ x5181 = x5179 + x5180;
-Tbase TZ x5182 = x5178 + x5181;
-Tbase TZ x5183 = x71 * x5089;
-Tbase TZ x5184 = x72 * x5087;
-Tbase TZ x5185 = x73 * x5085;
-Tbase TZ x5186 = x74 * x5083;
-Tbase TZ x5187 = x75 * x5081;
-Tbase TZ x5188 = x76 * x5079;
-Tbase TZ x5189 = x77 * x5077;
-Tbase TZ x5190 = x78 * x5075;
-Tbase TZ x5191 = x79 * x5073;
-Tbase TZ x5192 = x80 * x5071;
-Tbase TZ x5193 = x81 * x5069;
-Tbase TZ x5194 = x82 * x5067;
-Tbase TZ x5195 = x83 * x5065;
-Tbase TZ x5196 = x84 * x5063;
-Tbase TZ x5197 = x85 * x5061;
-Tbase TZ x5198 = x5196 + x5197;
-Tbase TZ x5199 = x5195 + x5198;
-Tbase TZ x5200 = x5194 + x5199;
-Tbase TZ x5201 = x5193 + x5200;
-Tbase TZ x5202 = x5192 + x5201;
-Tbase TZ x5203 = x5191 + x5202;
-Tbase TZ x5204 = x5190 + x5203;
-Tbase TZ x5205 = x5189 + x5204;
-Tbase TZ x5206 = x5188 + x5205;
-Tbase TZ x5207 = x5187 + x5206;
-Tbase TZ x5208 = x5186 + x5207;
-Tbase TZ x5209 = x5185 + x5208;
-Tbase TZ x5210 = x5184 + x5209;
-Tbase TZ x5211 = x5183 + x5210;
-Tbase TZ x5212 = 0x11;
-Tbase TZ x5213 = x5212 * x5211;
-Tbase TZ x5214 = x5182 + x5213;
-Tbase TZ x5215 = x5177 + x5214;
-Tbase TZ x5216 = 0x17;
-Tbase TZ x5217 = x5215 >> x5216;
-Tbase TZ x5218 = x85 * x5098;
-Tbase TZ x5219 = x86 * x5096;
-Tbase TZ x5220 = x87 * x5094;
-Tbase TZ x5221 = x88 * x5089;
-Tbase TZ x5222 = x5220 + x5221;
-Tbase TZ x5223 = x5219 + x5222;
-Tbase TZ x5224 = x5218 + x5223;
-Tbase TZ x5225 = x71 * x5087;
-Tbase TZ x5226 = x72 * x5085;
-Tbase TZ x5227 = x73 * x5083;
-Tbase TZ x5228 = x74 * x5081;
-Tbase TZ x5229 = x75 * x5079;
-Tbase TZ x5230 = x76 * x5077;
-Tbase TZ x5231 = x77 * x5075;
-Tbase TZ x5232 = x78 * x5073;
-Tbase TZ x5233 = x79 * x5071;
-Tbase TZ x5234 = x80 * x5069;
-Tbase TZ x5235 = x81 * x5067;
-Tbase TZ x5236 = x82 * x5065;
-Tbase TZ x5237 = x83 * x5063;
-Tbase TZ x5238 = x84 * x5061;
-Tbase TZ x5239 = x5237 + x5238;
-Tbase TZ x5240 = x5236 + x5239;
-Tbase TZ x5241 = x5235 + x5240;
-Tbase TZ x5242 = x5234 + x5241;
-Tbase TZ x5243 = x5233 + x5242;
-Tbase TZ x5244 = x5232 + x5243;
-Tbase TZ x5245 = x5231 + x5244;
-Tbase TZ x5246 = x5230 + x5245;
-Tbase TZ x5247 = x5229 + x5246;
-Tbase TZ x5248 = x5228 + x5247;
-Tbase TZ x5249 = x5227 + x5248;
-Tbase TZ x5250 = x5226 + x5249;
-Tbase TZ x5251 = x5225 + x5250;
-Tbase TZ x5252 = 0x11;
-Tbase TZ x5253 = x5252 * x5251;
-Tbase TZ x5254 = x5224 + x5253;
-Tbase TZ x5255 = x5217 + x5254;
-Tbase TZ x5256 = 0x17;
-Tbase TZ x5257 = x5255 >> x5256;
-Tbase TZ x5258 = x84 * x5098;
-Tbase TZ x5259 = x85 * x5096;
-Tbase TZ x5260 = x86 * x5094;
-Tbase TZ x5261 = x87 * x5089;
-Tbase TZ x5262 = x88 * x5087;
-Tbase TZ x5263 = x5261 + x5262;
-Tbase TZ x5264 = x5260 + x5263;
-Tbase TZ x5265 = x5259 + x5264;
-Tbase TZ x5266 = x5258 + x5265;
-Tbase TZ x5267 = x71 * x5085;
-Tbase TZ x5268 = x72 * x5083;
-Tbase TZ x5269 = x73 * x5081;
-Tbase TZ x5270 = x74 * x5079;
-Tbase TZ x5271 = x75 * x5077;
-Tbase TZ x5272 = x76 * x5075;
-Tbase TZ x5273 = x77 * x5073;
-Tbase TZ x5274 = x78 * x5071;
-Tbase TZ x5275 = x79 * x5069;
-Tbase TZ x5276 = x80 * x5067;
-Tbase TZ x5277 = x81 * x5065;
-Tbase TZ x5278 = x82 * x5063;
-Tbase TZ x5279 = x83 * x5061;
-Tbase TZ x5280 = x5278 + x5279;
-Tbase TZ x5281 = x5277 + x5280;
-Tbase TZ x5282 = x5276 + x5281;
-Tbase TZ x5283 = x5275 + x5282;
-Tbase TZ x5284 = x5274 + x5283;
-Tbase TZ x5285 = x5273 + x5284;
-Tbase TZ x5286 = x5272 + x5285;
-Tbase TZ x5287 = x5271 + x5286;
-Tbase TZ x5288 = x5270 + x5287;
-Tbase TZ x5289 = x5269 + x5288;
-Tbase TZ x5290 = x5268 + x5289;
-Tbase TZ x5291 = x5267 + x5290;
-Tbase TZ x5292 = 0x11;
-Tbase TZ x5293 = x5292 * x5291;
-Tbase TZ x5294 = x5266 + x5293;
-Tbase TZ x5295 = x5257 + x5294;
-Tbase TZ x5296 = 0x17;
-Tbase TZ x5297 = x5295 >> x5296;
-Tbase TZ x5298 = x83 * x5098;
-Tbase TZ x5299 = x84 * x5096;
-Tbase TZ x5300 = x85 * x5094;
-Tbase TZ x5301 = x86 * x5089;
-Tbase TZ x5302 = x87 * x5087;
-Tbase TZ x5303 = x88 * x5085;
-Tbase TZ x5304 = x5302 + x5303;
-Tbase TZ x5305 = x5301 + x5304;
-Tbase TZ x5306 = x5300 + x5305;
-Tbase TZ x5307 = x5299 + x5306;
-Tbase TZ x5308 = x5298 + x5307;
-Tbase TZ x5309 = x71 * x5083;
-Tbase TZ x5310 = x72 * x5081;
-Tbase TZ x5311 = x73 * x5079;
-Tbase TZ x5312 = x74 * x5077;
-Tbase TZ x5313 = x75 * x5075;
-Tbase TZ x5314 = x76 * x5073;
-Tbase TZ x5315 = x77 * x5071;
-Tbase TZ x5316 = x78 * x5069;
-Tbase TZ x5317 = x79 * x5067;
-Tbase TZ x5318 = x80 * x5065;
-Tbase TZ x5319 = x81 * x5063;
-Tbase TZ x5320 = x82 * x5061;
-Tbase TZ x5321 = x5319 + x5320;
-Tbase TZ x5322 = x5318 + x5321;
-Tbase TZ x5323 = x5317 + x5322;
-Tbase TZ x5324 = x5316 + x5323;
-Tbase TZ x5325 = x5315 + x5324;
-Tbase TZ x5326 = x5314 + x5325;
-Tbase TZ x5327 = x5313 + x5326;
-Tbase TZ x5328 = x5312 + x5327;
-Tbase TZ x5329 = x5311 + x5328;
-Tbase TZ x5330 = x5310 + x5329;
-Tbase TZ x5331 = x5309 + x5330;
-Tbase TZ x5332 = 0x11;
-Tbase TZ x5333 = x5332 * x5331;
-Tbase TZ x5334 = x5308 + x5333;
-Tbase TZ x5335 = x5297 + x5334;
-Tbase TZ x5336 = 0x17;
-Tbase TZ x5337 = x5335 >> x5336;
-Tbase TZ x5338 = x82 * x5098;
-Tbase TZ x5339 = x83 * x5096;
-Tbase TZ x5340 = x84 * x5094;
-Tbase TZ x5341 = x85 * x5089;
-Tbase TZ x5342 = x86 * x5087;
-Tbase TZ x5343 = x87 * x5085;
-Tbase TZ x5344 = x88 * x5083;
-Tbase TZ x5345 = x5343 + x5344;
-Tbase TZ x5346 = x5342 + x5345;
-Tbase TZ x5347 = x5341 + x5346;
-Tbase TZ x5348 = x5340 + x5347;
-Tbase TZ x5349 = x5339 + x5348;
-Tbase TZ x5350 = x5338 + x5349;
-Tbase TZ x5351 = x71 * x5081;
-Tbase TZ x5352 = x72 * x5079;
-Tbase TZ x5353 = x73 * x5077;
-Tbase TZ x5354 = x74 * x5075;
-Tbase TZ x5355 = x75 * x5073;
-Tbase TZ x5356 = x76 * x5071;
-Tbase TZ x5357 = x77 * x5069;
-Tbase TZ x5358 = x78 * x5067;
-Tbase TZ x5359 = x79 * x5065;
-Tbase TZ x5360 = x80 * x5063;
-Tbase TZ x5361 = x81 * x5061;
-Tbase TZ x5362 = x5360 + x5361;
-Tbase TZ x5363 = x5359 + x5362;
-Tbase TZ x5364 = x5358 + x5363;
-Tbase TZ x5365 = x5357 + x5364;
-Tbase TZ x5366 = x5356 + x5365;
-Tbase TZ x5367 = x5355 + x5366;
-Tbase TZ x5368 = x5354 + x5367;
-Tbase TZ x5369 = x5353 + x5368;
-Tbase TZ x5370 = x5352 + x5369;
-Tbase TZ x5371 = x5351 + x5370;
-Tbase TZ x5372 = 0x11;
-Tbase TZ x5373 = x5372 * x5371;
-Tbase TZ x5374 = x5350 + x5373;
-Tbase TZ x5375 = x5337 + x5374;
-Tbase TZ x5376 = 0x17;
-Tbase TZ x5377 = x5375 >> x5376;
-Tbase TZ x5378 = x81 * x5098;
-Tbase TZ x5379 = x82 * x5096;
-Tbase TZ x5380 = x83 * x5094;
-Tbase TZ x5381 = x84 * x5089;
-Tbase TZ x5382 = x85 * x5087;
-Tbase TZ x5383 = x86 * x5085;
-Tbase TZ x5384 = x87 * x5083;
-Tbase TZ x5385 = x88 * x5081;
-Tbase TZ x5386 = x5384 + x5385;
-Tbase TZ x5387 = x5383 + x5386;
-Tbase TZ x5388 = x5382 + x5387;
-Tbase TZ x5389 = x5381 + x5388;
-Tbase TZ x5390 = x5380 + x5389;
-Tbase TZ x5391 = x5379 + x5390;
-Tbase TZ x5392 = x5378 + x5391;
-Tbase TZ x5393 = x71 * x5079;
-Tbase TZ x5394 = x72 * x5077;
-Tbase TZ x5395 = x73 * x5075;
-Tbase TZ x5396 = x74 * x5073;
-Tbase TZ x5397 = x75 * x5071;
-Tbase TZ x5398 = x76 * x5069;
-Tbase TZ x5399 = x77 * x5067;
-Tbase TZ x5400 = x78 * x5065;
-Tbase TZ x5401 = x79 * x5063;
-Tbase TZ x5402 = x80 * x5061;
-Tbase TZ x5403 = x5401 + x5402;
-Tbase TZ x5404 = x5400 + x5403;
-Tbase TZ x5405 = x5399 + x5404;
-Tbase TZ x5406 = x5398 + x5405;
-Tbase TZ x5407 = x5397 + x5406;
-Tbase TZ x5408 = x5396 + x5407;
-Tbase TZ x5409 = x5395 + x5408;
-Tbase TZ x5410 = x5394 + x5409;
-Tbase TZ x5411 = x5393 + x5410;
-Tbase TZ x5412 = 0x11;
-Tbase TZ x5413 = x5412 * x5411;
-Tbase TZ x5414 = x5392 + x5413;
-Tbase TZ x5415 = x5377 + x5414;
-Tbase TZ x5416 = 0x17;
-Tbase TZ x5417 = x5415 >> x5416;
-Tbase TZ x5418 = x80 * x5098;
-Tbase TZ x5419 = x81 * x5096;
-Tbase TZ x5420 = x82 * x5094;
-Tbase TZ x5421 = x83 * x5089;
-Tbase TZ x5422 = x84 * x5087;
-Tbase TZ x5423 = x85 * x5085;
-Tbase TZ x5424 = x86 * x5083;
-Tbase TZ x5425 = x87 * x5081;
-Tbase TZ x5426 = x88 * x5079;
-Tbase TZ x5427 = x5425 + x5426;
-Tbase TZ x5428 = x5424 + x5427;
-Tbase TZ x5429 = x5423 + x5428;
-Tbase TZ x5430 = x5422 + x5429;
-Tbase TZ x5431 = x5421 + x5430;
-Tbase TZ x5432 = x5420 + x5431;
-Tbase TZ x5433 = x5419 + x5432;
-Tbase TZ x5434 = x5418 + x5433;
-Tbase TZ x5435 = x71 * x5077;
-Tbase TZ x5436 = x72 * x5075;
-Tbase TZ x5437 = x73 * x5073;
-Tbase TZ x5438 = x74 * x5071;
-Tbase TZ x5439 = x75 * x5069;
-Tbase TZ x5440 = x76 * x5067;
-Tbase TZ x5441 = x77 * x5065;
-Tbase TZ x5442 = x78 * x5063;
-Tbase TZ x5443 = x79 * x5061;
-Tbase TZ x5444 = x5442 + x5443;
-Tbase TZ x5445 = x5441 + x5444;
-Tbase TZ x5446 = x5440 + x5445;
-Tbase TZ x5447 = x5439 + x5446;
-Tbase TZ x5448 = x5438 + x5447;
-Tbase TZ x5449 = x5437 + x5448;
-Tbase TZ x5450 = x5436 + x5449;
-Tbase TZ x5451 = x5435 + x5450;
-Tbase TZ x5452 = 0x11;
-Tbase TZ x5453 = x5452 * x5451;
-Tbase TZ x5454 = x5434 + x5453;
-Tbase TZ x5455 = x5417 + x5454;
-Tbase TZ x5456 = 0x17;
-Tbase TZ x5457 = x5455 >> x5456;
-Tbase TZ x5458 = x79 * x5098;
-Tbase TZ x5459 = x80 * x5096;
-Tbase TZ x5460 = x81 * x5094;
-Tbase TZ x5461 = x82 * x5089;
-Tbase TZ x5462 = x83 * x5087;
-Tbase TZ x5463 = x84 * x5085;
-Tbase TZ x5464 = x85 * x5083;
-Tbase TZ x5465 = x86 * x5081;
-Tbase TZ x5466 = x87 * x5079;
-Tbase TZ x5467 = x88 * x5077;
-Tbase TZ x5468 = x5466 + x5467;
-Tbase TZ x5469 = x5465 + x5468;
-Tbase TZ x5470 = x5464 + x5469;
-Tbase TZ x5471 = x5463 + x5470;
-Tbase TZ x5472 = x5462 + x5471;
-Tbase TZ x5473 = x5461 + x5472;
-Tbase TZ x5474 = x5460 + x5473;
-Tbase TZ x5475 = x5459 + x5474;
-Tbase TZ x5476 = x5458 + x5475;
-Tbase TZ x5477 = x71 * x5075;
-Tbase TZ x5478 = x72 * x5073;
-Tbase TZ x5479 = x73 * x5071;
-Tbase TZ x5480 = x74 * x5069;
-Tbase TZ x5481 = x75 * x5067;
-Tbase TZ x5482 = x76 * x5065;
-Tbase TZ x5483 = x77 * x5063;
-Tbase TZ x5484 = x78 * x5061;
-Tbase TZ x5485 = x5483 + x5484;
-Tbase TZ x5486 = x5482 + x5485;
-Tbase TZ x5487 = x5481 + x5486;
-Tbase TZ x5488 = x5480 + x5487;
-Tbase TZ x5489 = x5479 + x5488;
-Tbase TZ x5490 = x5478 + x5489;
-Tbase TZ x5491 = x5477 + x5490;
-Tbase TZ x5492 = 0x11;
-Tbase TZ x5493 = x5492 * x5491;
-Tbase TZ x5494 = x5476 + x5493;
-Tbase TZ x5495 = x5457 + x5494;
-Tbase TZ x5496 = 0x17;
-Tbase TZ x5497 = x5495 >> x5496;
-Tbase TZ x5498 = x78 * x5098;
-Tbase TZ x5499 = x79 * x5096;
-Tbase TZ x5500 = x80 * x5094;
-Tbase TZ x5501 = x81 * x5089;
-Tbase TZ x5502 = x82 * x5087;
-Tbase TZ x5503 = x83 * x5085;
-Tbase TZ x5504 = x84 * x5083;
-Tbase TZ x5505 = x85 * x5081;
-Tbase TZ x5506 = x86 * x5079;
-Tbase TZ x5507 = x87 * x5077;
-Tbase TZ x5508 = x88 * x5075;
-Tbase TZ x5509 = x5507 + x5508;
-Tbase TZ x5510 = x5506 + x5509;
-Tbase TZ x5511 = x5505 + x5510;
-Tbase TZ x5512 = x5504 + x5511;
-Tbase TZ x5513 = x5503 + x5512;
-Tbase TZ x5514 = x5502 + x5513;
-Tbase TZ x5515 = x5501 + x5514;
-Tbase TZ x5516 = x5500 + x5515;
-Tbase TZ x5517 = x5499 + x5516;
-Tbase TZ x5518 = x5498 + x5517;
-Tbase TZ x5519 = x71 * x5073;
-Tbase TZ x5520 = x72 * x5071;
-Tbase TZ x5521 = x73 * x5069;
-Tbase TZ x5522 = x74 * x5067;
-Tbase TZ x5523 = x75 * x5065;
-Tbase TZ x5524 = x76 * x5063;
-Tbase TZ x5525 = x77 * x5061;
-Tbase TZ x5526 = x5524 + x5525;
-Tbase TZ x5527 = x5523 + x5526;
-Tbase TZ x5528 = x5522 + x5527;
-Tbase TZ x5529 = x5521 + x5528;
-Tbase TZ x5530 = x5520 + x5529;
-Tbase TZ x5531 = x5519 + x5530;
-Tbase TZ x5532 = 0x11;
-Tbase TZ x5533 = x5532 * x5531;
-Tbase TZ x5534 = x5518 + x5533;
-Tbase TZ x5535 = x5497 + x5534;
-Tbase TZ x5536 = 0x17;
-Tbase TZ x5537 = x5535 >> x5536;
-Tbase TZ x5538 = x77 * x5098;
-Tbase TZ x5539 = x78 * x5096;
-Tbase TZ x5540 = x79 * x5094;
-Tbase TZ x5541 = x80 * x5089;
-Tbase TZ x5542 = x81 * x5087;
-Tbase TZ x5543 = x82 * x5085;
-Tbase TZ x5544 = x83 * x5083;
-Tbase TZ x5545 = x84 * x5081;
-Tbase TZ x5546 = x85 * x5079;
-Tbase TZ x5547 = x86 * x5077;
-Tbase TZ x5548 = x87 * x5075;
-Tbase TZ x5549 = x88 * x5073;
-Tbase TZ x5550 = x5548 + x5549;
-Tbase TZ x5551 = x5547 + x5550;
-Tbase TZ x5552 = x5546 + x5551;
-Tbase TZ x5553 = x5545 + x5552;
-Tbase TZ x5554 = x5544 + x5553;
-Tbase TZ x5555 = x5543 + x5554;
-Tbase TZ x5556 = x5542 + x5555;
-Tbase TZ x5557 = x5541 + x5556;
-Tbase TZ x5558 = x5540 + x5557;
-Tbase TZ x5559 = x5539 + x5558;
-Tbase TZ x5560 = x5538 + x5559;
-Tbase TZ x5561 = x71 * x5071;
-Tbase TZ x5562 = x72 * x5069;
-Tbase TZ x5563 = x73 * x5067;
-Tbase TZ x5564 = x74 * x5065;
-Tbase TZ x5565 = x75 * x5063;
-Tbase TZ x5566 = x76 * x5061;
-Tbase TZ x5567 = x5565 + x5566;
-Tbase TZ x5568 = x5564 + x5567;
-Tbase TZ x5569 = x5563 + x5568;
-Tbase TZ x5570 = x5562 + x5569;
-Tbase TZ x5571 = x5561 + x5570;
-Tbase TZ x5572 = 0x11;
-Tbase TZ x5573 = x5572 * x5571;
-Tbase TZ x5574 = x5560 + x5573;
-Tbase TZ x5575 = x5537 + x5574;
-Tbase TZ x5576 = 0x17;
-Tbase TZ x5577 = x5575 >> x5576;
-Tbase TZ x5578 = x76 * x5098;
-Tbase TZ x5579 = x77 * x5096;
-Tbase TZ x5580 = x78 * x5094;
-Tbase TZ x5581 = x79 * x5089;
-Tbase TZ x5582 = x80 * x5087;
-Tbase TZ x5583 = x81 * x5085;
-Tbase TZ x5584 = x82 * x5083;
-Tbase TZ x5585 = x83 * x5081;
-Tbase TZ x5586 = x84 * x5079;
-Tbase TZ x5587 = x85 * x5077;
-Tbase TZ x5588 = x86 * x5075;
-Tbase TZ x5589 = x87 * x5073;
-Tbase TZ x5590 = x88 * x5071;
-Tbase TZ x5591 = x5589 + x5590;
-Tbase TZ x5592 = x5588 + x5591;
-Tbase TZ x5593 = x5587 + x5592;
-Tbase TZ x5594 = x5586 + x5593;
-Tbase TZ x5595 = x5585 + x5594;
-Tbase TZ x5596 = x5584 + x5595;
-Tbase TZ x5597 = x5583 + x5596;
-Tbase TZ x5598 = x5582 + x5597;
-Tbase TZ x5599 = x5581 + x5598;
-Tbase TZ x5600 = x5580 + x5599;
-Tbase TZ x5601 = x5579 + x5600;
-Tbase TZ x5602 = x5578 + x5601;
-Tbase TZ x5603 = x71 * x5069;
-Tbase TZ x5604 = x72 * x5067;
-Tbase TZ x5605 = x73 * x5065;
-Tbase TZ x5606 = x74 * x5063;
-Tbase TZ x5607 = x75 * x5061;
-Tbase TZ x5608 = x5606 + x5607;
-Tbase TZ x5609 = x5605 + x5608;
-Tbase TZ x5610 = x5604 + x5609;
-Tbase TZ x5611 = x5603 + x5610;
-Tbase TZ x5612 = 0x11;
-Tbase TZ x5613 = x5612 * x5611;
-Tbase TZ x5614 = x5602 + x5613;
-Tbase TZ x5615 = x5577 + x5614;
-Tbase TZ x5616 = 0x17;
-Tbase TZ x5617 = x5615 >> x5616;
-Tbase TZ x5618 = x75 * x5098;
-Tbase TZ x5619 = x76 * x5096;
-Tbase TZ x5620 = x77 * x5094;
-Tbase TZ x5621 = x78 * x5089;
-Tbase TZ x5622 = x79 * x5087;
-Tbase TZ x5623 = x80 * x5085;
-Tbase TZ x5624 = x81 * x5083;
-Tbase TZ x5625 = x82 * x5081;
-Tbase TZ x5626 = x83 * x5079;
-Tbase TZ x5627 = x84 * x5077;
-Tbase TZ x5628 = x85 * x5075;
-Tbase TZ x5629 = x86 * x5073;
-Tbase TZ x5630 = x87 * x5071;
-Tbase TZ x5631 = x88 * x5069;
-Tbase TZ x5632 = x5630 + x5631;
-Tbase TZ x5633 = x5629 + x5632;
-Tbase TZ x5634 = x5628 + x5633;
-Tbase TZ x5635 = x5627 + x5634;
-Tbase TZ x5636 = x5626 + x5635;
-Tbase TZ x5637 = x5625 + x5636;
-Tbase TZ x5638 = x5624 + x5637;
-Tbase TZ x5639 = x5623 + x5638;
-Tbase TZ x5640 = x5622 + x5639;
-Tbase TZ x5641 = x5621 + x5640;
-Tbase TZ x5642 = x5620 + x5641;
-Tbase TZ x5643 = x5619 + x5642;
-Tbase TZ x5644 = x5618 + x5643;
-Tbase TZ x5645 = x71 * x5067;
-Tbase TZ x5646 = x72 * x5065;
-Tbase TZ x5647 = x73 * x5063;
-Tbase TZ x5648 = x74 * x5061;
-Tbase TZ x5649 = x5647 + x5648;
-Tbase TZ x5650 = x5646 + x5649;
-Tbase TZ x5651 = x5645 + x5650;
-Tbase TZ x5652 = 0x11;
-Tbase TZ x5653 = x5652 * x5651;
-Tbase TZ x5654 = x5644 + x5653;
-Tbase TZ x5655 = x5617 + x5654;
-Tbase TZ x5656 = 0x17;
-Tbase TZ x5657 = x5655 >> x5656;
-Tbase TZ x5658 = x74 * x5098;
-Tbase TZ x5659 = x75 * x5096;
-Tbase TZ x5660 = x76 * x5094;
-Tbase TZ x5661 = x77 * x5089;
-Tbase TZ x5662 = x78 * x5087;
-Tbase TZ x5663 = x79 * x5085;
-Tbase TZ x5664 = x80 * x5083;
-Tbase TZ x5665 = x81 * x5081;
-Tbase TZ x5666 = x82 * x5079;
-Tbase TZ x5667 = x83 * x5077;
-Tbase TZ x5668 = x84 * x5075;
-Tbase TZ x5669 = x85 * x5073;
-Tbase TZ x5670 = x86 * x5071;
-Tbase TZ x5671 = x87 * x5069;
-Tbase TZ x5672 = x88 * x5067;
-Tbase TZ x5673 = x5671 + x5672;
-Tbase TZ x5674 = x5670 + x5673;
-Tbase TZ x5675 = x5669 + x5674;
-Tbase TZ x5676 = x5668 + x5675;
-Tbase TZ x5677 = x5667 + x5676;
-Tbase TZ x5678 = x5666 + x5677;
-Tbase TZ x5679 = x5665 + x5678;
-Tbase TZ x5680 = x5664 + x5679;
-Tbase TZ x5681 = x5663 + x5680;
-Tbase TZ x5682 = x5662 + x5681;
-Tbase TZ x5683 = x5661 + x5682;
-Tbase TZ x5684 = x5660 + x5683;
-Tbase TZ x5685 = x5659 + x5684;
-Tbase TZ x5686 = x5658 + x5685;
-Tbase TZ x5687 = x71 * x5065;
-Tbase TZ x5688 = x72 * x5063;
-Tbase TZ x5689 = x73 * x5061;
-Tbase TZ x5690 = x5688 + x5689;
-Tbase TZ x5691 = x5687 + x5690;
-Tbase TZ x5692 = 0x11;
-Tbase TZ x5693 = x5692 * x5691;
-Tbase TZ x5694 = x5686 + x5693;
-Tbase TZ x5695 = x5657 + x5694;
-Tbase TZ x5696 = 0x17;
-Tbase TZ x5697 = x5695 >> x5696;
-Tbase TZ x5698 = x73 * x5098;
-Tbase TZ x5699 = x74 * x5096;
-Tbase TZ x5700 = x75 * x5094;
-Tbase TZ x5701 = x76 * x5089;
-Tbase TZ x5702 = x77 * x5087;
-Tbase TZ x5703 = x78 * x5085;
-Tbase TZ x5704 = x79 * x5083;
-Tbase TZ x5705 = x80 * x5081;
-Tbase TZ x5706 = x81 * x5079;
-Tbase TZ x5707 = x82 * x5077;
-Tbase TZ x5708 = x83 * x5075;
-Tbase TZ x5709 = x84 * x5073;
-Tbase TZ x5710 = x85 * x5071;
-Tbase TZ x5711 = x86 * x5069;
-Tbase TZ x5712 = x87 * x5067;
-Tbase TZ x5713 = x88 * x5065;
-Tbase TZ x5714 = x5712 + x5713;
-Tbase TZ x5715 = x5711 + x5714;
-Tbase TZ x5716 = x5710 + x5715;
-Tbase TZ x5717 = x5709 + x5716;
-Tbase TZ x5718 = x5708 + x5717;
-Tbase TZ x5719 = x5707 + x5718;
-Tbase TZ x5720 = x5706 + x5719;
-Tbase TZ x5721 = x5705 + x5720;
-Tbase TZ x5722 = x5704 + x5721;
-Tbase TZ x5723 = x5703 + x5722;
-Tbase TZ x5724 = x5702 + x5723;
-Tbase TZ x5725 = x5701 + x5724;
-Tbase TZ x5726 = x5700 + x5725;
-Tbase TZ x5727 = x5699 + x5726;
-Tbase TZ x5728 = x5698 + x5727;
-Tbase TZ x5729 = x71 * x5063;
-Tbase TZ x5730 = x72 * x5061;
-Tbase TZ x5731 = x5729 + x5730;
-Tbase TZ x5732 = 0x11;
-Tbase TZ x5733 = x5732 * x5731;
-Tbase TZ x5734 = x5728 + x5733;
-Tbase TZ x5735 = x5697 + x5734;
-Tbase TZ x5736 = 0x17;
-Tbase TZ x5737 = x5735 >> x5736;
-Tbase TZ x5738 = x72 * x5098;
-Tbase TZ x5739 = x73 * x5096;
-Tbase TZ x5740 = x74 * x5094;
-Tbase TZ x5741 = x75 * x5089;
-Tbase TZ x5742 = x76 * x5087;
-Tbase TZ x5743 = x77 * x5085;
-Tbase TZ x5744 = x78 * x5083;
-Tbase TZ x5745 = x79 * x5081;
-Tbase TZ x5746 = x80 * x5079;
-Tbase TZ x5747 = x81 * x5077;
-Tbase TZ x5748 = x82 * x5075;
-Tbase TZ x5749 = x83 * x5073;
-Tbase TZ x5750 = x84 * x5071;
-Tbase TZ x5751 = x85 * x5069;
-Tbase TZ x5752 = x86 * x5067;
-Tbase TZ x5753 = x87 * x5065;
-Tbase TZ x5754 = x88 * x5063;
-Tbase TZ x5755 = x5753 + x5754;
-Tbase TZ x5756 = x5752 + x5755;
-Tbase TZ x5757 = x5751 + x5756;
-Tbase TZ x5758 = x5750 + x5757;
-Tbase TZ x5759 = x5749 + x5758;
-Tbase TZ x5760 = x5748 + x5759;
-Tbase TZ x5761 = x5747 + x5760;
-Tbase TZ x5762 = x5746 + x5761;
-Tbase TZ x5763 = x5745 + x5762;
-Tbase TZ x5764 = x5744 + x5763;
-Tbase TZ x5765 = x5743 + x5764;
-Tbase TZ x5766 = x5742 + x5765;
-Tbase TZ x5767 = x5741 + x5766;
-Tbase TZ x5768 = x5740 + x5767;
-Tbase TZ x5769 = x5739 + x5768;
-Tbase TZ x5770 = x5738 + x5769;
-Tbase TZ x5771 = x71 * x5061;
-Tbase TZ x5772 = 0x11;
-Tbase TZ x5773 = x5772 * x5771;
-Tbase TZ x5774 = x5770 + x5773;
-Tbase TZ x5775 = x5737 + x5774;
-Tbase TZ x5776 = 0x17;
-Tbase TZ x5777 = x5775 >> x5776;
-Tbase TZ x5778 = x71 * x5098;
-Tbase TZ x5779 = x72 * x5096;
-Tbase TZ x5780 = x73 * x5094;
-Tbase TZ x5781 = x74 * x5089;
-Tbase TZ x5782 = x75 * x5087;
-Tbase TZ x5783 = x76 * x5085;
-Tbase TZ x5784 = x77 * x5083;
-Tbase TZ x5785 = x78 * x5081;
-Tbase TZ x5786 = x79 * x5079;
-Tbase TZ x5787 = x80 * x5077;
-Tbase TZ x5788 = x81 * x5075;
-Tbase TZ x5789 = x82 * x5073;
-Tbase TZ x5790 = x83 * x5071;
-Tbase TZ x5791 = x84 * x5069;
-Tbase TZ x5792 = x85 * x5067;
-Tbase TZ x5793 = x86 * x5065;
-Tbase TZ x5794 = x87 * x5063;
-Tbase TZ x5795 = x88 * x5061;
-Tbase TZ x5796 = x5794 + x5795;
-Tbase TZ x5797 = x5793 + x5796;
-Tbase TZ x5798 = x5792 + x5797;
-Tbase TZ x5799 = x5791 + x5798;
-Tbase TZ x5800 = x5790 + x5799;
-Tbase TZ x5801 = x5789 + x5800;
-Tbase TZ x5802 = x5788 + x5801;
-Tbase TZ x5803 = x5787 + x5802;
-Tbase TZ x5804 = x5786 + x5803;
-Tbase TZ x5805 = x5785 + x5804;
-Tbase TZ x5806 = x5784 + x5805;
-Tbase TZ x5807 = x5783 + x5806;
-Tbase TZ x5808 = x5782 + x5807;
-Tbase TZ x5809 = x5781 + x5808;
-Tbase TZ x5810 = x5780 + x5809;
-Tbase TZ x5811 = x5779 + x5810;
-Tbase TZ x5812 = x5778 + x5811;
-Tbase TZ x5813 = x5777 + x5812;
-Tbase TZ x5814 = 0x17;
-Tbase TZ x5815 = x5813 >> x5814;
-Tbase TZ x5816 = 0x11;
-Tbase TZ x5817 = x5816 * x5815;
-Tbase TZ x5818 = 0x7fffff;
-Tbase TZ x5819 = x5135 & x5818;
-Tbase TZ x5820 = x5817 + x5819;
-Tbase TZ x5821 = 0x17;
-Tbase TZ x5822 = x5820 >> x5821;
-Tbase TZ x5823 = 0x7fffff;
-Tbase TZ x5824 = x5175 & x5823;
-Tbase TZ x5825 = x5822 + x5824;
-Tbase TZ x5826 = 0x7fffff;
-Tbase TZ x5827 = x5813 & x5826;
-Tbase TZ x5828 = 0x7fffff;
-Tbase TZ x5829 = x5775 & x5828;
-Tbase TZ x5830 = 0x7fffff;
-Tbase TZ x5831 = x5735 & x5830;
-Tbase TZ x5832 = 0x7fffff;
-Tbase TZ x5833 = x5695 & x5832;
-Tbase TZ x5834 = 0x7fffff;
-Tbase TZ x5835 = x5655 & x5834;
-Tbase TZ x5836 = 0x7fffff;
-Tbase TZ x5837 = x5615 & x5836;
-Tbase TZ x5838 = 0x7fffff;
-Tbase TZ x5839 = x5575 & x5838;
-Tbase TZ x5840 = 0x7fffff;
-Tbase TZ x5841 = x5535 & x5840;
-Tbase TZ x5842 = 0x7fffff;
-Tbase TZ x5843 = x5495 & x5842;
-Tbase TZ x5844 = 0x7fffff;
-Tbase TZ x5845 = x5455 & x5844;
-Tbase TZ x5846 = 0x7fffff;
-Tbase TZ x5847 = x5415 & x5846;
-Tbase TZ x5848 = 0x7fffff;
-Tbase TZ x5849 = x5375 & x5848;
-Tbase TZ x5850 = 0x7fffff;
-Tbase TZ x5851 = x5335 & x5850;
-Tbase TZ x5852 = 0x7fffff;
-Tbase TZ x5853 = x5295 & x5852;
-Tbase TZ x5854 = 0x7fffff;
-Tbase TZ x5855 = x5255 & x5854;
-Tbase TZ x5856 = 0x17;
-Tbase TZ x5857 = x5825 >> x5856;
-Tbase TZ x5858 = 0x7fffff;
-Tbase TZ x5859 = x5215 & x5858;
-Tbase TZ x5860 = x5857 + x5859;
-Tbase TZ x5861 = 0x7fffff;
-Tbase TZ x5862 = x5825 & x5861;
-Tbase TZ x5863 = 0x7fffff;
-Tbase TZ x5864 = x5820 & x5863;
-Tbase TZ x5865 = x944 * x1764;
-Tbase TZ x5866 = x907 * x1762;
-Tbase TZ x5867 = x909 * x1760;
-Tbase TZ x5868 = x911 * x1755;
-Tbase TZ x5869 = x913 * x1753;
-Tbase TZ x5870 = x915 * x1751;
-Tbase TZ x5871 = x917 * x1749;
-Tbase TZ x5872 = x919 * x1747;
-Tbase TZ x5873 = x921 * x1745;
-Tbase TZ x5874 = x923 * x1743;
-Tbase TZ x5875 = x925 * x1741;
-Tbase TZ x5876 = x927 * x1739;
-Tbase TZ x5877 = x929 * x1737;
-Tbase TZ x5878 = x931 * x1735;
-Tbase TZ x5879 = x933 * x1733;
-Tbase TZ x5880 = x935 * x1731;
-Tbase TZ x5881 = x940 * x1729;
-Tbase TZ x5882 = x942 * x1727;
-Tbase TZ x5883 = x5881 + x5882;
-Tbase TZ x5884 = x5880 + x5883;
-Tbase TZ x5885 = x5879 + x5884;
-Tbase TZ x5886 = x5878 + x5885;
-Tbase TZ x5887 = x5877 + x5886;
-Tbase TZ x5888 = x5876 + x5887;
-Tbase TZ x5889 = x5875 + x5888;
-Tbase TZ x5890 = x5874 + x5889;
-Tbase TZ x5891 = x5873 + x5890;
-Tbase TZ x5892 = x5872 + x5891;
-Tbase TZ x5893 = x5871 + x5892;
-Tbase TZ x5894 = x5870 + x5893;
-Tbase TZ x5895 = x5869 + x5894;
-Tbase TZ x5896 = x5868 + x5895;
-Tbase TZ x5897 = x5867 + x5896;
-Tbase TZ x5898 = x5866 + x5897;
-Tbase TZ x5899 = 0x11;
-Tbase TZ x5900 = x5899 * x5898;
-Tbase TZ x5901 = x5865 + x5900;
-Tbase TZ x5902 = 0x17;
-Tbase TZ x5903 = x5901 >> x5902;
-Tbase TZ x5904 = x942 * x1764;
-Tbase TZ x5905 = x944 * x1762;
-Tbase TZ x5906 = x5904 + x5905;
-Tbase TZ x5907 = x907 * x1760;
-Tbase TZ x5908 = x909 * x1755;
-Tbase TZ x5909 = x911 * x1753;
-Tbase TZ x5910 = x913 * x1751;
-Tbase TZ x5911 = x915 * x1749;
-Tbase TZ x5912 = x917 * x1747;
-Tbase TZ x5913 = x919 * x1745;
-Tbase TZ x5914 = x921 * x1743;
-Tbase TZ x5915 = x923 * x1741;
-Tbase TZ x5916 = x925 * x1739;
-Tbase TZ x5917 = x927 * x1737;
-Tbase TZ x5918 = x929 * x1735;
-Tbase TZ x5919 = x931 * x1733;
-Tbase TZ x5920 = x933 * x1731;
-Tbase TZ x5921 = x935 * x1729;
-Tbase TZ x5922 = x940 * x1727;
-Tbase TZ x5923 = x5921 + x5922;
-Tbase TZ x5924 = x5920 + x5923;
-Tbase TZ x5925 = x5919 + x5924;
-Tbase TZ x5926 = x5918 + x5925;
-Tbase TZ x5927 = x5917 + x5926;
-Tbase TZ x5928 = x5916 + x5927;
-Tbase TZ x5929 = x5915 + x5928;
-Tbase TZ x5930 = x5914 + x5929;
-Tbase TZ x5931 = x5913 + x5930;
-Tbase TZ x5932 = x5912 + x5931;
-Tbase TZ x5933 = x5911 + x5932;
-Tbase TZ x5934 = x5910 + x5933;
-Tbase TZ x5935 = x5909 + x5934;
-Tbase TZ x5936 = x5908 + x5935;
-Tbase TZ x5937 = x5907 + x5936;
-Tbase TZ x5938 = 0x11;
-Tbase TZ x5939 = x5938 * x5937;
-Tbase TZ x5940 = x5906 + x5939;
-Tbase TZ x5941 = x5903 + x5940;
-Tbase TZ x5942 = 0x17;
-Tbase TZ x5943 = x5941 >> x5942;
-Tbase TZ x5944 = x940 * x1764;
-Tbase TZ x5945 = x942 * x1762;
-Tbase TZ x5946 = x944 * x1760;
-Tbase TZ x5947 = x5945 + x5946;
-Tbase TZ x5948 = x5944 + x5947;
-Tbase TZ x5949 = x907 * x1755;
-Tbase TZ x5950 = x909 * x1753;
-Tbase TZ x5951 = x911 * x1751;
-Tbase TZ x5952 = x913 * x1749;
-Tbase TZ x5953 = x915 * x1747;
-Tbase TZ x5954 = x917 * x1745;
-Tbase TZ x5955 = x919 * x1743;
-Tbase TZ x5956 = x921 * x1741;
-Tbase TZ x5957 = x923 * x1739;
-Tbase TZ x5958 = x925 * x1737;
-Tbase TZ x5959 = x927 * x1735;
-Tbase TZ x5960 = x929 * x1733;
-Tbase TZ x5961 = x931 * x1731;
-Tbase TZ x5962 = x933 * x1729;
-Tbase TZ x5963 = x935 * x1727;
-Tbase TZ x5964 = x5962 + x5963;
-Tbase TZ x5965 = x5961 + x5964;
-Tbase TZ x5966 = x5960 + x5965;
-Tbase TZ x5967 = x5959 + x5966;
-Tbase TZ x5968 = x5958 + x5967;
-Tbase TZ x5969 = x5957 + x5968;
-Tbase TZ x5970 = x5956 + x5969;
-Tbase TZ x5971 = x5955 + x5970;
-Tbase TZ x5972 = x5954 + x5971;
-Tbase TZ x5973 = x5953 + x5972;
-Tbase TZ x5974 = x5952 + x5973;
-Tbase TZ x5975 = x5951 + x5974;
-Tbase TZ x5976 = x5950 + x5975;
-Tbase TZ x5977 = x5949 + x5976;
-Tbase TZ x5978 = 0x11;
-Tbase TZ x5979 = x5978 * x5977;
-Tbase TZ x5980 = x5948 + x5979;
-Tbase TZ x5981 = x5943 + x5980;
-Tbase TZ x5982 = 0x17;
-Tbase TZ x5983 = x5981 >> x5982;
-Tbase TZ x5984 = x935 * x1764;
-Tbase TZ x5985 = x940 * x1762;
-Tbase TZ x5986 = x942 * x1760;
-Tbase TZ x5987 = x944 * x1755;
-Tbase TZ x5988 = x5986 + x5987;
-Tbase TZ x5989 = x5985 + x5988;
-Tbase TZ x5990 = x5984 + x5989;
-Tbase TZ x5991 = x907 * x1753;
-Tbase TZ x5992 = x909 * x1751;
-Tbase TZ x5993 = x911 * x1749;
-Tbase TZ x5994 = x913 * x1747;
-Tbase TZ x5995 = x915 * x1745;
-Tbase TZ x5996 = x917 * x1743;
-Tbase TZ x5997 = x919 * x1741;
-Tbase TZ x5998 = x921 * x1739;
-Tbase TZ x5999 = x923 * x1737;
-Tbase TZ x6000 = x925 * x1735;
-Tbase TZ x6001 = x927 * x1733;
-Tbase TZ x6002 = x929 * x1731;
-Tbase TZ x6003 = x931 * x1729;
-Tbase TZ x6004 = x933 * x1727;
-Tbase TZ x6005 = x6003 + x6004;
-Tbase TZ x6006 = x6002 + x6005;
-Tbase TZ x6007 = x6001 + x6006;
-Tbase TZ x6008 = x6000 + x6007;
-Tbase TZ x6009 = x5999 + x6008;
-Tbase TZ x6010 = x5998 + x6009;
-Tbase TZ x6011 = x5997 + x6010;
-Tbase TZ x6012 = x5996 + x6011;
-Tbase TZ x6013 = x5995 + x6012;
-Tbase TZ x6014 = x5994 + x6013;
-Tbase TZ x6015 = x5993 + x6014;
-Tbase TZ x6016 = x5992 + x6015;
-Tbase TZ x6017 = x5991 + x6016;
-Tbase TZ x6018 = 0x11;
-Tbase TZ x6019 = x6018 * x6017;
-Tbase TZ x6020 = x5990 + x6019;
-Tbase TZ x6021 = x5983 + x6020;
-Tbase TZ x6022 = 0x17;
-Tbase TZ x6023 = x6021 >> x6022;
-Tbase TZ x6024 = x933 * x1764;
-Tbase TZ x6025 = x935 * x1762;
-Tbase TZ x6026 = x940 * x1760;
-Tbase TZ x6027 = x942 * x1755;
-Tbase TZ x6028 = x944 * x1753;
-Tbase TZ x6029 = x6027 + x6028;
-Tbase TZ x6030 = x6026 + x6029;
-Tbase TZ x6031 = x6025 + x6030;
-Tbase TZ x6032 = x6024 + x6031;
-Tbase TZ x6033 = x907 * x1751;
-Tbase TZ x6034 = x909 * x1749;
-Tbase TZ x6035 = x911 * x1747;
-Tbase TZ x6036 = x913 * x1745;
-Tbase TZ x6037 = x915 * x1743;
-Tbase TZ x6038 = x917 * x1741;
-Tbase TZ x6039 = x919 * x1739;
-Tbase TZ x6040 = x921 * x1737;
-Tbase TZ x6041 = x923 * x1735;
-Tbase TZ x6042 = x925 * x1733;
-Tbase TZ x6043 = x927 * x1731;
-Tbase TZ x6044 = x929 * x1729;
-Tbase TZ x6045 = x931 * x1727;
-Tbase TZ x6046 = x6044 + x6045;
-Tbase TZ x6047 = x6043 + x6046;
-Tbase TZ x6048 = x6042 + x6047;
-Tbase TZ x6049 = x6041 + x6048;
-Tbase TZ x6050 = x6040 + x6049;
-Tbase TZ x6051 = x6039 + x6050;
-Tbase TZ x6052 = x6038 + x6051;
-Tbase TZ x6053 = x6037 + x6052;
-Tbase TZ x6054 = x6036 + x6053;
-Tbase TZ x6055 = x6035 + x6054;
-Tbase TZ x6056 = x6034 + x6055;
-Tbase TZ x6057 = x6033 + x6056;
-Tbase TZ x6058 = 0x11;
-Tbase TZ x6059 = x6058 * x6057;
-Tbase TZ x6060 = x6032 + x6059;
-Tbase TZ x6061 = x6023 + x6060;
-Tbase TZ x6062 = 0x17;
-Tbase TZ x6063 = x6061 >> x6062;
-Tbase TZ x6064 = x931 * x1764;
-Tbase TZ x6065 = x933 * x1762;
-Tbase TZ x6066 = x935 * x1760;
-Tbase TZ x6067 = x940 * x1755;
-Tbase TZ x6068 = x942 * x1753;
-Tbase TZ x6069 = x944 * x1751;
-Tbase TZ x6070 = x6068 + x6069;
-Tbase TZ x6071 = x6067 + x6070;
-Tbase TZ x6072 = x6066 + x6071;
-Tbase TZ x6073 = x6065 + x6072;
-Tbase TZ x6074 = x6064 + x6073;
-Tbase TZ x6075 = x907 * x1749;
-Tbase TZ x6076 = x909 * x1747;
-Tbase TZ x6077 = x911 * x1745;
-Tbase TZ x6078 = x913 * x1743;
-Tbase TZ x6079 = x915 * x1741;
-Tbase TZ x6080 = x917 * x1739;
-Tbase TZ x6081 = x919 * x1737;
-Tbase TZ x6082 = x921 * x1735;
-Tbase TZ x6083 = x923 * x1733;
-Tbase TZ x6084 = x925 * x1731;
-Tbase TZ x6085 = x927 * x1729;
-Tbase TZ x6086 = x929 * x1727;
-Tbase TZ x6087 = x6085 + x6086;
-Tbase TZ x6088 = x6084 + x6087;
-Tbase TZ x6089 = x6083 + x6088;
-Tbase TZ x6090 = x6082 + x6089;
-Tbase TZ x6091 = x6081 + x6090;
-Tbase TZ x6092 = x6080 + x6091;
-Tbase TZ x6093 = x6079 + x6092;
-Tbase TZ x6094 = x6078 + x6093;
-Tbase TZ x6095 = x6077 + x6094;
-Tbase TZ x6096 = x6076 + x6095;
-Tbase TZ x6097 = x6075 + x6096;
-Tbase TZ x6098 = 0x11;
-Tbase TZ x6099 = x6098 * x6097;
-Tbase TZ x6100 = x6074 + x6099;
-Tbase TZ x6101 = x6063 + x6100;
-Tbase TZ x6102 = 0x17;
-Tbase TZ x6103 = x6101 >> x6102;
-Tbase TZ x6104 = x929 * x1764;
-Tbase TZ x6105 = x931 * x1762;
-Tbase TZ x6106 = x933 * x1760;
-Tbase TZ x6107 = x935 * x1755;
-Tbase TZ x6108 = x940 * x1753;
-Tbase TZ x6109 = x942 * x1751;
-Tbase TZ x6110 = x944 * x1749;
-Tbase TZ x6111 = x6109 + x6110;
-Tbase TZ x6112 = x6108 + x6111;
-Tbase TZ x6113 = x6107 + x6112;
-Tbase TZ x6114 = x6106 + x6113;
-Tbase TZ x6115 = x6105 + x6114;
-Tbase TZ x6116 = x6104 + x6115;
-Tbase TZ x6117 = x907 * x1747;
-Tbase TZ x6118 = x909 * x1745;
-Tbase TZ x6119 = x911 * x1743;
-Tbase TZ x6120 = x913 * x1741;
-Tbase TZ x6121 = x915 * x1739;
-Tbase TZ x6122 = x917 * x1737;
-Tbase TZ x6123 = x919 * x1735;
-Tbase TZ x6124 = x921 * x1733;
-Tbase TZ x6125 = x923 * x1731;
-Tbase TZ x6126 = x925 * x1729;
-Tbase TZ x6127 = x927 * x1727;
-Tbase TZ x6128 = x6126 + x6127;
-Tbase TZ x6129 = x6125 + x6128;
-Tbase TZ x6130 = x6124 + x6129;
-Tbase TZ x6131 = x6123 + x6130;
-Tbase TZ x6132 = x6122 + x6131;
-Tbase TZ x6133 = x6121 + x6132;
-Tbase TZ x6134 = x6120 + x6133;
-Tbase TZ x6135 = x6119 + x6134;
-Tbase TZ x6136 = x6118 + x6135;
-Tbase TZ x6137 = x6117 + x6136;
-Tbase TZ x6138 = 0x11;
-Tbase TZ x6139 = x6138 * x6137;
-Tbase TZ x6140 = x6116 + x6139;
-Tbase TZ x6141 = x6103 + x6140;
-Tbase TZ x6142 = 0x17;
-Tbase TZ x6143 = x6141 >> x6142;
-Tbase TZ x6144 = x927 * x1764;
-Tbase TZ x6145 = x929 * x1762;
-Tbase TZ x6146 = x931 * x1760;
-Tbase TZ x6147 = x933 * x1755;
-Tbase TZ x6148 = x935 * x1753;
-Tbase TZ x6149 = x940 * x1751;
-Tbase TZ x6150 = x942 * x1749;
-Tbase TZ x6151 = x944 * x1747;
-Tbase TZ x6152 = x6150 + x6151;
-Tbase TZ x6153 = x6149 + x6152;
-Tbase TZ x6154 = x6148 + x6153;
-Tbase TZ x6155 = x6147 + x6154;
-Tbase TZ x6156 = x6146 + x6155;
-Tbase TZ x6157 = x6145 + x6156;
-Tbase TZ x6158 = x6144 + x6157;
-Tbase TZ x6159 = x907 * x1745;
-Tbase TZ x6160 = x909 * x1743;
-Tbase TZ x6161 = x911 * x1741;
-Tbase TZ x6162 = x913 * x1739;
-Tbase TZ x6163 = x915 * x1737;
-Tbase TZ x6164 = x917 * x1735;
-Tbase TZ x6165 = x919 * x1733;
-Tbase TZ x6166 = x921 * x1731;
-Tbase TZ x6167 = x923 * x1729;
-Tbase TZ x6168 = x925 * x1727;
-Tbase TZ x6169 = x6167 + x6168;
-Tbase TZ x6170 = x6166 + x6169;
-Tbase TZ x6171 = x6165 + x6170;
-Tbase TZ x6172 = x6164 + x6171;
-Tbase TZ x6173 = x6163 + x6172;
-Tbase TZ x6174 = x6162 + x6173;
-Tbase TZ x6175 = x6161 + x6174;
-Tbase TZ x6176 = x6160 + x6175;
-Tbase TZ x6177 = x6159 + x6176;
-Tbase TZ x6178 = 0x11;
-Tbase TZ x6179 = x6178 * x6177;
-Tbase TZ x6180 = x6158 + x6179;
-Tbase TZ x6181 = x6143 + x6180;
-Tbase TZ x6182 = 0x17;
-Tbase TZ x6183 = x6181 >> x6182;
-Tbase TZ x6184 = x925 * x1764;
-Tbase TZ x6185 = x927 * x1762;
-Tbase TZ x6186 = x929 * x1760;
-Tbase TZ x6187 = x931 * x1755;
-Tbase TZ x6188 = x933 * x1753;
-Tbase TZ x6189 = x935 * x1751;
-Tbase TZ x6190 = x940 * x1749;
-Tbase TZ x6191 = x942 * x1747;
-Tbase TZ x6192 = x944 * x1745;
-Tbase TZ x6193 = x6191 + x6192;
-Tbase TZ x6194 = x6190 + x6193;
-Tbase TZ x6195 = x6189 + x6194;
-Tbase TZ x6196 = x6188 + x6195;
-Tbase TZ x6197 = x6187 + x6196;
-Tbase TZ x6198 = x6186 + x6197;
-Tbase TZ x6199 = x6185 + x6198;
-Tbase TZ x6200 = x6184 + x6199;
-Tbase TZ x6201 = x907 * x1743;
-Tbase TZ x6202 = x909 * x1741;
-Tbase TZ x6203 = x911 * x1739;
-Tbase TZ x6204 = x913 * x1737;
-Tbase TZ x6205 = x915 * x1735;
-Tbase TZ x6206 = x917 * x1733;
-Tbase TZ x6207 = x919 * x1731;
-Tbase TZ x6208 = x921 * x1729;
-Tbase TZ x6209 = x923 * x1727;
-Tbase TZ x6210 = x6208 + x6209;
-Tbase TZ x6211 = x6207 + x6210;
-Tbase TZ x6212 = x6206 + x6211;
-Tbase TZ x6213 = x6205 + x6212;
-Tbase TZ x6214 = x6204 + x6213;
-Tbase TZ x6215 = x6203 + x6214;
-Tbase TZ x6216 = x6202 + x6215;
-Tbase TZ x6217 = x6201 + x6216;
-Tbase TZ x6218 = 0x11;
-Tbase TZ x6219 = x6218 * x6217;
-Tbase TZ x6220 = x6200 + x6219;
-Tbase TZ x6221 = x6183 + x6220;
-Tbase TZ x6222 = 0x17;
-Tbase TZ x6223 = x6221 >> x6222;
-Tbase TZ x6224 = x923 * x1764;
-Tbase TZ x6225 = x925 * x1762;
-Tbase TZ x6226 = x927 * x1760;
-Tbase TZ x6227 = x929 * x1755;
-Tbase TZ x6228 = x931 * x1753;
-Tbase TZ x6229 = x933 * x1751;
-Tbase TZ x6230 = x935 * x1749;
-Tbase TZ x6231 = x940 * x1747;
-Tbase TZ x6232 = x942 * x1745;
-Tbase TZ x6233 = x944 * x1743;
-Tbase TZ x6234 = x6232 + x6233;
-Tbase TZ x6235 = x6231 + x6234;
-Tbase TZ x6236 = x6230 + x6235;
-Tbase TZ x6237 = x6229 + x6236;
-Tbase TZ x6238 = x6228 + x6237;
-Tbase TZ x6239 = x6227 + x6238;
-Tbase TZ x6240 = x6226 + x6239;
-Tbase TZ x6241 = x6225 + x6240;
-Tbase TZ x6242 = x6224 + x6241;
-Tbase TZ x6243 = x907 * x1741;
-Tbase TZ x6244 = x909 * x1739;
-Tbase TZ x6245 = x911 * x1737;
-Tbase TZ x6246 = x913 * x1735;
-Tbase TZ x6247 = x915 * x1733;
-Tbase TZ x6248 = x917 * x1731;
-Tbase TZ x6249 = x919 * x1729;
-Tbase TZ x6250 = x921 * x1727;
-Tbase TZ x6251 = x6249 + x6250;
-Tbase TZ x6252 = x6248 + x6251;
-Tbase TZ x6253 = x6247 + x6252;
-Tbase TZ x6254 = x6246 + x6253;
-Tbase TZ x6255 = x6245 + x6254;
-Tbase TZ x6256 = x6244 + x6255;
-Tbase TZ x6257 = x6243 + x6256;
-Tbase TZ x6258 = 0x11;
-Tbase TZ x6259 = x6258 * x6257;
-Tbase TZ x6260 = x6242 + x6259;
-Tbase TZ x6261 = x6223 + x6260;
-Tbase TZ x6262 = 0x17;
-Tbase TZ x6263 = x6261 >> x6262;
-Tbase TZ x6264 = x921 * x1764;
-Tbase TZ x6265 = x923 * x1762;
-Tbase TZ x6266 = x925 * x1760;
-Tbase TZ x6267 = x927 * x1755;
-Tbase TZ x6268 = x929 * x1753;
-Tbase TZ x6269 = x931 * x1751;
-Tbase TZ x6270 = x933 * x1749;
-Tbase TZ x6271 = x935 * x1747;
-Tbase TZ x6272 = x940 * x1745;
-Tbase TZ x6273 = x942 * x1743;
-Tbase TZ x6274 = x944 * x1741;
-Tbase TZ x6275 = x6273 + x6274;
-Tbase TZ x6276 = x6272 + x6275;
-Tbase TZ x6277 = x6271 + x6276;
-Tbase TZ x6278 = x6270 + x6277;
-Tbase TZ x6279 = x6269 + x6278;
-Tbase TZ x6280 = x6268 + x6279;
-Tbase TZ x6281 = x6267 + x6280;
-Tbase TZ x6282 = x6266 + x6281;
-Tbase TZ x6283 = x6265 + x6282;
-Tbase TZ x6284 = x6264 + x6283;
-Tbase TZ x6285 = x907 * x1739;
-Tbase TZ x6286 = x909 * x1737;
-Tbase TZ x6287 = x911 * x1735;
-Tbase TZ x6288 = x913 * x1733;
-Tbase TZ x6289 = x915 * x1731;
-Tbase TZ x6290 = x917 * x1729;
-Tbase TZ x6291 = x919 * x1727;
-Tbase TZ x6292 = x6290 + x6291;
-Tbase TZ x6293 = x6289 + x6292;
-Tbase TZ x6294 = x6288 + x6293;
-Tbase TZ x6295 = x6287 + x6294;
-Tbase TZ x6296 = x6286 + x6295;
-Tbase TZ x6297 = x6285 + x6296;
-Tbase TZ x6298 = 0x11;
-Tbase TZ x6299 = x6298 * x6297;
-Tbase TZ x6300 = x6284 + x6299;
-Tbase TZ x6301 = x6263 + x6300;
-Tbase TZ x6302 = 0x17;
-Tbase TZ x6303 = x6301 >> x6302;
-Tbase TZ x6304 = x919 * x1764;
-Tbase TZ x6305 = x921 * x1762;
-Tbase TZ x6306 = x923 * x1760;
-Tbase TZ x6307 = x925 * x1755;
-Tbase TZ x6308 = x927 * x1753;
-Tbase TZ x6309 = x929 * x1751;
-Tbase TZ x6310 = x931 * x1749;
-Tbase TZ x6311 = x933 * x1747;
-Tbase TZ x6312 = x935 * x1745;
-Tbase TZ x6313 = x940 * x1743;
-Tbase TZ x6314 = x942 * x1741;
-Tbase TZ x6315 = x944 * x1739;
-Tbase TZ x6316 = x6314 + x6315;
-Tbase TZ x6317 = x6313 + x6316;
-Tbase TZ x6318 = x6312 + x6317;
-Tbase TZ x6319 = x6311 + x6318;
-Tbase TZ x6320 = x6310 + x6319;
-Tbase TZ x6321 = x6309 + x6320;
-Tbase TZ x6322 = x6308 + x6321;
-Tbase TZ x6323 = x6307 + x6322;
-Tbase TZ x6324 = x6306 + x6323;
-Tbase TZ x6325 = x6305 + x6324;
-Tbase TZ x6326 = x6304 + x6325;
-Tbase TZ x6327 = x907 * x1737;
-Tbase TZ x6328 = x909 * x1735;
-Tbase TZ x6329 = x911 * x1733;
-Tbase TZ x6330 = x913 * x1731;
-Tbase TZ x6331 = x915 * x1729;
-Tbase TZ x6332 = x917 * x1727;
-Tbase TZ x6333 = x6331 + x6332;
-Tbase TZ x6334 = x6330 + x6333;
-Tbase TZ x6335 = x6329 + x6334;
-Tbase TZ x6336 = x6328 + x6335;
-Tbase TZ x6337 = x6327 + x6336;
-Tbase TZ x6338 = 0x11;
-Tbase TZ x6339 = x6338 * x6337;
-Tbase TZ x6340 = x6326 + x6339;
-Tbase TZ x6341 = x6303 + x6340;
-Tbase TZ x6342 = 0x17;
-Tbase TZ x6343 = x6341 >> x6342;
-Tbase TZ x6344 = x917 * x1764;
-Tbase TZ x6345 = x919 * x1762;
-Tbase TZ x6346 = x921 * x1760;
-Tbase TZ x6347 = x923 * x1755;
-Tbase TZ x6348 = x925 * x1753;
-Tbase TZ x6349 = x927 * x1751;
-Tbase TZ x6350 = x929 * x1749;
-Tbase TZ x6351 = x931 * x1747;
-Tbase TZ x6352 = x933 * x1745;
-Tbase TZ x6353 = x935 * x1743;
-Tbase TZ x6354 = x940 * x1741;
-Tbase TZ x6355 = x942 * x1739;
-Tbase TZ x6356 = x944 * x1737;
-Tbase TZ x6357 = x6355 + x6356;
-Tbase TZ x6358 = x6354 + x6357;
-Tbase TZ x6359 = x6353 + x6358;
-Tbase TZ x6360 = x6352 + x6359;
-Tbase TZ x6361 = x6351 + x6360;
-Tbase TZ x6362 = x6350 + x6361;
-Tbase TZ x6363 = x6349 + x6362;
-Tbase TZ x6364 = x6348 + x6363;
-Tbase TZ x6365 = x6347 + x6364;
-Tbase TZ x6366 = x6346 + x6365;
-Tbase TZ x6367 = x6345 + x6366;
-Tbase TZ x6368 = x6344 + x6367;
-Tbase TZ x6369 = x907 * x1735;
-Tbase TZ x6370 = x909 * x1733;
-Tbase TZ x6371 = x911 * x1731;
-Tbase TZ x6372 = x913 * x1729;
-Tbase TZ x6373 = x915 * x1727;
-Tbase TZ x6374 = x6372 + x6373;
-Tbase TZ x6375 = x6371 + x6374;
-Tbase TZ x6376 = x6370 + x6375;
-Tbase TZ x6377 = x6369 + x6376;
-Tbase TZ x6378 = 0x11;
-Tbase TZ x6379 = x6378 * x6377;
-Tbase TZ x6380 = x6368 + x6379;
-Tbase TZ x6381 = x6343 + x6380;
-Tbase TZ x6382 = 0x17;
-Tbase TZ x6383 = x6381 >> x6382;
-Tbase TZ x6384 = x915 * x1764;
-Tbase TZ x6385 = x917 * x1762;
-Tbase TZ x6386 = x919 * x1760;
-Tbase TZ x6387 = x921 * x1755;
-Tbase TZ x6388 = x923 * x1753;
-Tbase TZ x6389 = x925 * x1751;
-Tbase TZ x6390 = x927 * x1749;
-Tbase TZ x6391 = x929 * x1747;
-Tbase TZ x6392 = x931 * x1745;
-Tbase TZ x6393 = x933 * x1743;
-Tbase TZ x6394 = x935 * x1741;
-Tbase TZ x6395 = x940 * x1739;
-Tbase TZ x6396 = x942 * x1737;
-Tbase TZ x6397 = x944 * x1735;
-Tbase TZ x6398 = x6396 + x6397;
-Tbase TZ x6399 = x6395 + x6398;
-Tbase TZ x6400 = x6394 + x6399;
-Tbase TZ x6401 = x6393 + x6400;
-Tbase TZ x6402 = x6392 + x6401;
-Tbase TZ x6403 = x6391 + x6402;
-Tbase TZ x6404 = x6390 + x6403;
-Tbase TZ x6405 = x6389 + x6404;
-Tbase TZ x6406 = x6388 + x6405;
-Tbase TZ x6407 = x6387 + x6406;
-Tbase TZ x6408 = x6386 + x6407;
-Tbase TZ x6409 = x6385 + x6408;
-Tbase TZ x6410 = x6384 + x6409;
-Tbase TZ x6411 = x907 * x1733;
-Tbase TZ x6412 = x909 * x1731;
-Tbase TZ x6413 = x911 * x1729;
-Tbase TZ x6414 = x913 * x1727;
-Tbase TZ x6415 = x6413 + x6414;
-Tbase TZ x6416 = x6412 + x6415;
-Tbase TZ x6417 = x6411 + x6416;
-Tbase TZ x6418 = 0x11;
-Tbase TZ x6419 = x6418 * x6417;
-Tbase TZ x6420 = x6410 + x6419;
-Tbase TZ x6421 = x6383 + x6420;
-Tbase TZ x6422 = 0x17;
-Tbase TZ x6423 = x6421 >> x6422;
-Tbase TZ x6424 = x913 * x1764;
-Tbase TZ x6425 = x915 * x1762;
-Tbase TZ x6426 = x917 * x1760;
-Tbase TZ x6427 = x919 * x1755;
-Tbase TZ x6428 = x921 * x1753;
-Tbase TZ x6429 = x923 * x1751;
-Tbase TZ x6430 = x925 * x1749;
-Tbase TZ x6431 = x927 * x1747;
-Tbase TZ x6432 = x929 * x1745;
-Tbase TZ x6433 = x931 * x1743;
-Tbase TZ x6434 = x933 * x1741;
-Tbase TZ x6435 = x935 * x1739;
-Tbase TZ x6436 = x940 * x1737;
-Tbase TZ x6437 = x942 * x1735;
-Tbase TZ x6438 = x944 * x1733;
-Tbase TZ x6439 = x6437 + x6438;
-Tbase TZ x6440 = x6436 + x6439;
-Tbase TZ x6441 = x6435 + x6440;
-Tbase TZ x6442 = x6434 + x6441;
-Tbase TZ x6443 = x6433 + x6442;
-Tbase TZ x6444 = x6432 + x6443;
-Tbase TZ x6445 = x6431 + x6444;
-Tbase TZ x6446 = x6430 + x6445;
-Tbase TZ x6447 = x6429 + x6446;
-Tbase TZ x6448 = x6428 + x6447;
-Tbase TZ x6449 = x6427 + x6448;
-Tbase TZ x6450 = x6426 + x6449;
-Tbase TZ x6451 = x6425 + x6450;
-Tbase TZ x6452 = x6424 + x6451;
-Tbase TZ x6453 = x907 * x1731;
-Tbase TZ x6454 = x909 * x1729;
-Tbase TZ x6455 = x911 * x1727;
-Tbase TZ x6456 = x6454 + x6455;
-Tbase TZ x6457 = x6453 + x6456;
-Tbase TZ x6458 = 0x11;
-Tbase TZ x6459 = x6458 * x6457;
-Tbase TZ x6460 = x6452 + x6459;
-Tbase TZ x6461 = x6423 + x6460;
-Tbase TZ x6462 = 0x17;
-Tbase TZ x6463 = x6461 >> x6462;
-Tbase TZ x6464 = x911 * x1764;
-Tbase TZ x6465 = x913 * x1762;
-Tbase TZ x6466 = x915 * x1760;
-Tbase TZ x6467 = x917 * x1755;
-Tbase TZ x6468 = x919 * x1753;
-Tbase TZ x6469 = x921 * x1751;
-Tbase TZ x6470 = x923 * x1749;
-Tbase TZ x6471 = x925 * x1747;
-Tbase TZ x6472 = x927 * x1745;
-Tbase TZ x6473 = x929 * x1743;
-Tbase TZ x6474 = x931 * x1741;
-Tbase TZ x6475 = x933 * x1739;
-Tbase TZ x6476 = x935 * x1737;
-Tbase TZ x6477 = x940 * x1735;
-Tbase TZ x6478 = x942 * x1733;
-Tbase TZ x6479 = x944 * x1731;
-Tbase TZ x6480 = x6478 + x6479;
-Tbase TZ x6481 = x6477 + x6480;
-Tbase TZ x6482 = x6476 + x6481;
-Tbase TZ x6483 = x6475 + x6482;
-Tbase TZ x6484 = x6474 + x6483;
-Tbase TZ x6485 = x6473 + x6484;
-Tbase TZ x6486 = x6472 + x6485;
-Tbase TZ x6487 = x6471 + x6486;
-Tbase TZ x6488 = x6470 + x6487;
-Tbase TZ x6489 = x6469 + x6488;
-Tbase TZ x6490 = x6468 + x6489;
-Tbase TZ x6491 = x6467 + x6490;
-Tbase TZ x6492 = x6466 + x6491;
-Tbase TZ x6493 = x6465 + x6492;
-Tbase TZ x6494 = x6464 + x6493;
-Tbase TZ x6495 = x907 * x1729;
-Tbase TZ x6496 = x909 * x1727;
-Tbase TZ x6497 = x6495 + x6496;
-Tbase TZ x6498 = 0x11;
-Tbase TZ x6499 = x6498 * x6497;
-Tbase TZ x6500 = x6494 + x6499;
-Tbase TZ x6501 = x6463 + x6500;
-Tbase TZ x6502 = 0x17;
-Tbase TZ x6503 = x6501 >> x6502;
-Tbase TZ x6504 = x909 * x1764;
-Tbase TZ x6505 = x911 * x1762;
-Tbase TZ x6506 = x913 * x1760;
-Tbase TZ x6507 = x915 * x1755;
-Tbase TZ x6508 = x917 * x1753;
-Tbase TZ x6509 = x919 * x1751;
-Tbase TZ x6510 = x921 * x1749;
-Tbase TZ x6511 = x923 * x1747;
-Tbase TZ x6512 = x925 * x1745;
-Tbase TZ x6513 = x927 * x1743;
-Tbase TZ x6514 = x929 * x1741;
-Tbase TZ x6515 = x931 * x1739;
-Tbase TZ x6516 = x933 * x1737;
-Tbase TZ x6517 = x935 * x1735;
-Tbase TZ x6518 = x940 * x1733;
-Tbase TZ x6519 = x942 * x1731;
-Tbase TZ x6520 = x944 * x1729;
-Tbase TZ x6521 = x6519 + x6520;
-Tbase TZ x6522 = x6518 + x6521;
-Tbase TZ x6523 = x6517 + x6522;
-Tbase TZ x6524 = x6516 + x6523;
-Tbase TZ x6525 = x6515 + x6524;
-Tbase TZ x6526 = x6514 + x6525;
-Tbase TZ x6527 = x6513 + x6526;
-Tbase TZ x6528 = x6512 + x6527;
-Tbase TZ x6529 = x6511 + x6528;
-Tbase TZ x6530 = x6510 + x6529;
-Tbase TZ x6531 = x6509 + x6530;
-Tbase TZ x6532 = x6508 + x6531;
-Tbase TZ x6533 = x6507 + x6532;
-Tbase TZ x6534 = x6506 + x6533;
-Tbase TZ x6535 = x6505 + x6534;
-Tbase TZ x6536 = x6504 + x6535;
-Tbase TZ x6537 = x907 * x1727;
-Tbase TZ x6538 = 0x11;
-Tbase TZ x6539 = x6538 * x6537;
-Tbase TZ x6540 = x6536 + x6539;
-Tbase TZ x6541 = x6503 + x6540;
-Tbase TZ x6542 = 0x17;
-Tbase TZ x6543 = x6541 >> x6542;
-Tbase TZ x6544 = x907 * x1764;
-Tbase TZ x6545 = x909 * x1762;
-Tbase TZ x6546 = x911 * x1760;
-Tbase TZ x6547 = x913 * x1755;
-Tbase TZ x6548 = x915 * x1753;
-Tbase TZ x6549 = x917 * x1751;
-Tbase TZ x6550 = x919 * x1749;
-Tbase TZ x6551 = x921 * x1747;
-Tbase TZ x6552 = x923 * x1745;
-Tbase TZ x6553 = x925 * x1743;
-Tbase TZ x6554 = x927 * x1741;
-Tbase TZ x6555 = x929 * x1739;
-Tbase TZ x6556 = x931 * x1737;
-Tbase TZ x6557 = x933 * x1735;
-Tbase TZ x6558 = x935 * x1733;
-Tbase TZ x6559 = x940 * x1731;
-Tbase TZ x6560 = x942 * x1729;
-Tbase TZ x6561 = x944 * x1727;
-Tbase TZ x6562 = x6560 + x6561;
-Tbase TZ x6563 = x6559 + x6562;
-Tbase TZ x6564 = x6558 + x6563;
-Tbase TZ x6565 = x6557 + x6564;
-Tbase TZ x6566 = x6556 + x6565;
-Tbase TZ x6567 = x6555 + x6566;
-Tbase TZ x6568 = x6554 + x6567;
-Tbase TZ x6569 = x6553 + x6568;
-Tbase TZ x6570 = x6552 + x6569;
-Tbase TZ x6571 = x6551 + x6570;
-Tbase TZ x6572 = x6550 + x6571;
-Tbase TZ x6573 = x6549 + x6572;
-Tbase TZ x6574 = x6548 + x6573;
-Tbase TZ x6575 = x6547 + x6574;
-Tbase TZ x6576 = x6546 + x6575;
-Tbase TZ x6577 = x6545 + x6576;
-Tbase TZ x6578 = x6544 + x6577;
-Tbase TZ x6579 = x6543 + x6578;
-Tbase TZ x6580 = 0x17;
-Tbase TZ x6581 = x6579 >> x6580;
-Tbase TZ x6582 = 0x11;
-Tbase TZ x6583 = x6582 * x6581;
-Tbase TZ x6584 = 0x7fffff;
-Tbase TZ x6585 = x5901 & x6584;
-Tbase TZ x6586 = x6583 + x6585;
-Tbase TZ x6587 = 0x17;
-Tbase TZ x6588 = x6586 >> x6587;
-Tbase TZ x6589 = 0x7fffff;
-Tbase TZ x6590 = x5941 & x6589;
-Tbase TZ x6591 = x6588 + x6590;
-Tbase TZ x6592 = 0x7fffff;
-Tbase TZ x6593 = x6579 & x6592;
-Tbase TZ x6594 = 0x7fffff;
-Tbase TZ x6595 = x6541 & x6594;
-Tbase TZ x6596 = 0x7fffff;
-Tbase TZ x6597 = x6501 & x6596;
-Tbase TZ x6598 = 0x7fffff;
-Tbase TZ x6599 = x6461 & x6598;
-Tbase TZ x6600 = 0x7fffff;
-Tbase TZ x6601 = x6421 & x6600;
-Tbase TZ x6602 = 0x7fffff;
-Tbase TZ x6603 = x6381 & x6602;
-Tbase TZ x6604 = 0x7fffff;
-Tbase TZ x6605 = x6341 & x6604;
-Tbase TZ x6606 = 0x7fffff;
-Tbase TZ x6607 = x6301 & x6606;
-Tbase TZ x6608 = 0x7fffff;
-Tbase TZ x6609 = x6261 & x6608;
-Tbase TZ x6610 = 0x7fffff;
-Tbase TZ x6611 = x6221 & x6610;
-Tbase TZ x6612 = 0x7fffff;
-Tbase TZ x6613 = x6181 & x6612;
-Tbase TZ x6614 = 0x7fffff;
-Tbase TZ x6615 = x6141 & x6614;
-Tbase TZ x6616 = 0x7fffff;
-Tbase TZ x6617 = x6101 & x6616;
-Tbase TZ x6618 = 0x7fffff;
-Tbase TZ x6619 = x6061 & x6618;
-Tbase TZ x6620 = 0x7fffff;
-Tbase TZ x6621 = x6021 & x6620;
-Tbase TZ x6622 = 0x17;
-Tbase TZ x6623 = x6591 >> x6622;
-Tbase TZ x6624 = 0x7fffff;
-Tbase TZ x6625 = x5981 & x6624;
-Tbase TZ x6626 = x6623 + x6625;
-Tbase TZ x6627 = 0x7fffff;
-Tbase TZ x6628 = x6591 & x6627;
-Tbase TZ x6629 = 0x7fffff;
-Tbase TZ x6630 = x6586 & x6629;
-Tbase TZ x6631 = x70 * x1818;
-Tbase TZ x6632 = x53 * x1815;
-Tbase TZ x6633 = x54 * x1812;
-Tbase TZ x6634 = x55 * x1809;
-Tbase TZ x6635 = x56 * x1806;
-Tbase TZ x6636 = x57 * x1803;
-Tbase TZ x6637 = x58 * x1800;
-Tbase TZ x6638 = x59 * x1797;
-Tbase TZ x6639 = x60 * x1794;
-Tbase TZ x6640 = x61 * x1791;
-Tbase TZ x6641 = x62 * x1788;
-Tbase TZ x6642 = x63 * x1785;
-Tbase TZ x6643 = x64 * x1782;
-Tbase TZ x6644 = x65 * x1779;
-Tbase TZ x6645 = x66 * x1776;
-Tbase TZ x6646 = x67 * x1773;
-Tbase TZ x6647 = x68 * x1770;
-Tbase TZ x6648 = x69 * x1767;
-Tbase TZ x6649 = x6647 + x6648;
-Tbase TZ x6650 = x6646 + x6649;
-Tbase TZ x6651 = x6645 + x6650;
-Tbase TZ x6652 = x6644 + x6651;
-Tbase TZ x6653 = x6643 + x6652;
-Tbase TZ x6654 = x6642 + x6653;
-Tbase TZ x6655 = x6641 + x6654;
-Tbase TZ x6656 = x6640 + x6655;
-Tbase TZ x6657 = x6639 + x6656;
-Tbase TZ x6658 = x6638 + x6657;
-Tbase TZ x6659 = x6637 + x6658;
-Tbase TZ x6660 = x6636 + x6659;
-Tbase TZ x6661 = x6635 + x6660;
-Tbase TZ x6662 = x6634 + x6661;
-Tbase TZ x6663 = x6633 + x6662;
-Tbase TZ x6664 = x6632 + x6663;
-Tbase TZ x6665 = 0x11;
-Tbase TZ x6666 = x6665 * x6664;
-Tbase TZ x6667 = x6631 + x6666;
-Tbase TZ x6668 = 0x17;
-Tbase TZ x6669 = x6667 >> x6668;
-Tbase TZ x6670 = x69 * x1818;
-Tbase TZ x6671 = x70 * x1815;
-Tbase TZ x6672 = x6670 + x6671;
-Tbase TZ x6673 = x53 * x1812;
-Tbase TZ x6674 = x54 * x1809;
-Tbase TZ x6675 = x55 * x1806;
-Tbase TZ x6676 = x56 * x1803;
-Tbase TZ x6677 = x57 * x1800;
-Tbase TZ x6678 = x58 * x1797;
-Tbase TZ x6679 = x59 * x1794;
-Tbase TZ x6680 = x60 * x1791;
-Tbase TZ x6681 = x61 * x1788;
-Tbase TZ x6682 = x62 * x1785;
-Tbase TZ x6683 = x63 * x1782;
-Tbase TZ x6684 = x64 * x1779;
-Tbase TZ x6685 = x65 * x1776;
-Tbase TZ x6686 = x66 * x1773;
-Tbase TZ x6687 = x67 * x1770;
-Tbase TZ x6688 = x68 * x1767;
-Tbase TZ x6689 = x6687 + x6688;
-Tbase TZ x6690 = x6686 + x6689;
-Tbase TZ x6691 = x6685 + x6690;
-Tbase TZ x6692 = x6684 + x6691;
-Tbase TZ x6693 = x6683 + x6692;
-Tbase TZ x6694 = x6682 + x6693;
-Tbase TZ x6695 = x6681 + x6694;
-Tbase TZ x6696 = x6680 + x6695;
-Tbase TZ x6697 = x6679 + x6696;
-Tbase TZ x6698 = x6678 + x6697;
-Tbase TZ x6699 = x6677 + x6698;
-Tbase TZ x6700 = x6676 + x6699;
-Tbase TZ x6701 = x6675 + x6700;
-Tbase TZ x6702 = x6674 + x6701;
-Tbase TZ x6703 = x6673 + x6702;
-Tbase TZ x6704 = 0x11;
-Tbase TZ x6705 = x6704 * x6703;
-Tbase TZ x6706 = x6672 + x6705;
-Tbase TZ x6707 = x6669 + x6706;
-Tbase TZ x6708 = 0x17;
-Tbase TZ x6709 = x6707 >> x6708;
-Tbase TZ x6710 = x68 * x1818;
-Tbase TZ x6711 = x69 * x1815;
-Tbase TZ x6712 = x70 * x1812;
-Tbase TZ x6713 = x6711 + x6712;
-Tbase TZ x6714 = x6710 + x6713;
-Tbase TZ x6715 = x53 * x1809;
-Tbase TZ x6716 = x54 * x1806;
-Tbase TZ x6717 = x55 * x1803;
-Tbase TZ x6718 = x56 * x1800;
-Tbase TZ x6719 = x57 * x1797;
-Tbase TZ x6720 = x58 * x1794;
-Tbase TZ x6721 = x59 * x1791;
-Tbase TZ x6722 = x60 * x1788;
-Tbase TZ x6723 = x61 * x1785;
-Tbase TZ x6724 = x62 * x1782;
-Tbase TZ x6725 = x63 * x1779;
-Tbase TZ x6726 = x64 * x1776;
-Tbase TZ x6727 = x65 * x1773;
-Tbase TZ x6728 = x66 * x1770;
-Tbase TZ x6729 = x67 * x1767;
-Tbase TZ x6730 = x6728 + x6729;
-Tbase TZ x6731 = x6727 + x6730;
-Tbase TZ x6732 = x6726 + x6731;
-Tbase TZ x6733 = x6725 + x6732;
-Tbase TZ x6734 = x6724 + x6733;
-Tbase TZ x6735 = x6723 + x6734;
-Tbase TZ x6736 = x6722 + x6735;
-Tbase TZ x6737 = x6721 + x6736;
-Tbase TZ x6738 = x6720 + x6737;
-Tbase TZ x6739 = x6719 + x6738;
-Tbase TZ x6740 = x6718 + x6739;
-Tbase TZ x6741 = x6717 + x6740;
-Tbase TZ x6742 = x6716 + x6741;
-Tbase TZ x6743 = x6715 + x6742;
-Tbase TZ x6744 = 0x11;
-Tbase TZ x6745 = x6744 * x6743;
-Tbase TZ x6746 = x6714 + x6745;
-Tbase TZ x6747 = x6709 + x6746;
-Tbase TZ x6748 = 0x17;
-Tbase TZ x6749 = x6747 >> x6748;
-Tbase TZ x6750 = x67 * x1818;
-Tbase TZ x6751 = x68 * x1815;
-Tbase TZ x6752 = x69 * x1812;
-Tbase TZ x6753 = x70 * x1809;
-Tbase TZ x6754 = x6752 + x6753;
-Tbase TZ x6755 = x6751 + x6754;
-Tbase TZ x6756 = x6750 + x6755;
-Tbase TZ x6757 = x53 * x1806;
-Tbase TZ x6758 = x54 * x1803;
-Tbase TZ x6759 = x55 * x1800;
-Tbase TZ x6760 = x56 * x1797;
-Tbase TZ x6761 = x57 * x1794;
-Tbase TZ x6762 = x58 * x1791;
-Tbase TZ x6763 = x59 * x1788;
-Tbase TZ x6764 = x60 * x1785;
-Tbase TZ x6765 = x61 * x1782;
-Tbase TZ x6766 = x62 * x1779;
-Tbase TZ x6767 = x63 * x1776;
-Tbase TZ x6768 = x64 * x1773;
-Tbase TZ x6769 = x65 * x1770;
-Tbase TZ x6770 = x66 * x1767;
-Tbase TZ x6771 = x6769 + x6770;
-Tbase TZ x6772 = x6768 + x6771;
-Tbase TZ x6773 = x6767 + x6772;
-Tbase TZ x6774 = x6766 + x6773;
-Tbase TZ x6775 = x6765 + x6774;
-Tbase TZ x6776 = x6764 + x6775;
-Tbase TZ x6777 = x6763 + x6776;
-Tbase TZ x6778 = x6762 + x6777;
-Tbase TZ x6779 = x6761 + x6778;
-Tbase TZ x6780 = x6760 + x6779;
-Tbase TZ x6781 = x6759 + x6780;
-Tbase TZ x6782 = x6758 + x6781;
-Tbase TZ x6783 = x6757 + x6782;
-Tbase TZ x6784 = 0x11;
-Tbase TZ x6785 = x6784 * x6783;
-Tbase TZ x6786 = x6756 + x6785;
-Tbase TZ x6787 = x6749 + x6786;
-Tbase TZ x6788 = 0x17;
-Tbase TZ x6789 = x6787 >> x6788;
-Tbase TZ x6790 = x66 * x1818;
-Tbase TZ x6791 = x67 * x1815;
-Tbase TZ x6792 = x68 * x1812;
-Tbase TZ x6793 = x69 * x1809;
-Tbase TZ x6794 = x70 * x1806;
-Tbase TZ x6795 = x6793 + x6794;
-Tbase TZ x6796 = x6792 + x6795;
-Tbase TZ x6797 = x6791 + x6796;
-Tbase TZ x6798 = x6790 + x6797;
-Tbase TZ x6799 = x53 * x1803;
-Tbase TZ x6800 = x54 * x1800;
-Tbase TZ x6801 = x55 * x1797;
-Tbase TZ x6802 = x56 * x1794;
-Tbase TZ x6803 = x57 * x1791;
-Tbase TZ x6804 = x58 * x1788;
-Tbase TZ x6805 = x59 * x1785;
-Tbase TZ x6806 = x60 * x1782;
-Tbase TZ x6807 = x61 * x1779;
-Tbase TZ x6808 = x62 * x1776;
-Tbase TZ x6809 = x63 * x1773;
-Tbase TZ x6810 = x64 * x1770;
-Tbase TZ x6811 = x65 * x1767;
-Tbase TZ x6812 = x6810 + x6811;
-Tbase TZ x6813 = x6809 + x6812;
-Tbase TZ x6814 = x6808 + x6813;
-Tbase TZ x6815 = x6807 + x6814;
-Tbase TZ x6816 = x6806 + x6815;
-Tbase TZ x6817 = x6805 + x6816;
-Tbase TZ x6818 = x6804 + x6817;
-Tbase TZ x6819 = x6803 + x6818;
-Tbase TZ x6820 = x6802 + x6819;
-Tbase TZ x6821 = x6801 + x6820;
-Tbase TZ x6822 = x6800 + x6821;
-Tbase TZ x6823 = x6799 + x6822;
-Tbase TZ x6824 = 0x11;
-Tbase TZ x6825 = x6824 * x6823;
-Tbase TZ x6826 = x6798 + x6825;
-Tbase TZ x6827 = x6789 + x6826;
-Tbase TZ x6828 = 0x17;
-Tbase TZ x6829 = x6827 >> x6828;
-Tbase TZ x6830 = x65 * x1818;
-Tbase TZ x6831 = x66 * x1815;
-Tbase TZ x6832 = x67 * x1812;
-Tbase TZ x6833 = x68 * x1809;
-Tbase TZ x6834 = x69 * x1806;
-Tbase TZ x6835 = x70 * x1803;
-Tbase TZ x6836 = x6834 + x6835;
-Tbase TZ x6837 = x6833 + x6836;
-Tbase TZ x6838 = x6832 + x6837;
-Tbase TZ x6839 = x6831 + x6838;
-Tbase TZ x6840 = x6830 + x6839;
-Tbase TZ x6841 = x53 * x1800;
-Tbase TZ x6842 = x54 * x1797;
-Tbase TZ x6843 = x55 * x1794;
-Tbase TZ x6844 = x56 * x1791;
-Tbase TZ x6845 = x57 * x1788;
-Tbase TZ x6846 = x58 * x1785;
-Tbase TZ x6847 = x59 * x1782;
-Tbase TZ x6848 = x60 * x1779;
-Tbase TZ x6849 = x61 * x1776;
-Tbase TZ x6850 = x62 * x1773;
-Tbase TZ x6851 = x63 * x1770;
-Tbase TZ x6852 = x64 * x1767;
-Tbase TZ x6853 = x6851 + x6852;
-Tbase TZ x6854 = x6850 + x6853;
-Tbase TZ x6855 = x6849 + x6854;
-Tbase TZ x6856 = x6848 + x6855;
-Tbase TZ x6857 = x6847 + x6856;
-Tbase TZ x6858 = x6846 + x6857;
-Tbase TZ x6859 = x6845 + x6858;
-Tbase TZ x6860 = x6844 + x6859;
-Tbase TZ x6861 = x6843 + x6860;
-Tbase TZ x6862 = x6842 + x6861;
-Tbase TZ x6863 = x6841 + x6862;
-Tbase TZ x6864 = 0x11;
-Tbase TZ x6865 = x6864 * x6863;
-Tbase TZ x6866 = x6840 + x6865;
-Tbase TZ x6867 = x6829 + x6866;
-Tbase TZ x6868 = 0x17;
-Tbase TZ x6869 = x6867 >> x6868;
-Tbase TZ x6870 = x64 * x1818;
-Tbase TZ x6871 = x65 * x1815;
-Tbase TZ x6872 = x66 * x1812;
-Tbase TZ x6873 = x67 * x1809;
-Tbase TZ x6874 = x68 * x1806;
-Tbase TZ x6875 = x69 * x1803;
-Tbase TZ x6876 = x70 * x1800;
-Tbase TZ x6877 = x6875 + x6876;
-Tbase TZ x6878 = x6874 + x6877;
-Tbase TZ x6879 = x6873 + x6878;
-Tbase TZ x6880 = x6872 + x6879;
-Tbase TZ x6881 = x6871 + x6880;
-Tbase TZ x6882 = x6870 + x6881;
-Tbase TZ x6883 = x53 * x1797;
-Tbase TZ x6884 = x54 * x1794;
-Tbase TZ x6885 = x55 * x1791;
-Tbase TZ x6886 = x56 * x1788;
-Tbase TZ x6887 = x57 * x1785;
-Tbase TZ x6888 = x58 * x1782;
-Tbase TZ x6889 = x59 * x1779;
-Tbase TZ x6890 = x60 * x1776;
-Tbase TZ x6891 = x61 * x1773;
-Tbase TZ x6892 = x62 * x1770;
-Tbase TZ x6893 = x63 * x1767;
-Tbase TZ x6894 = x6892 + x6893;
-Tbase TZ x6895 = x6891 + x6894;
-Tbase TZ x6896 = x6890 + x6895;
-Tbase TZ x6897 = x6889 + x6896;
-Tbase TZ x6898 = x6888 + x6897;
-Tbase TZ x6899 = x6887 + x6898;
-Tbase TZ x6900 = x6886 + x6899;
-Tbase TZ x6901 = x6885 + x6900;
-Tbase TZ x6902 = x6884 + x6901;
-Tbase TZ x6903 = x6883 + x6902;
-Tbase TZ x6904 = 0x11;
-Tbase TZ x6905 = x6904 * x6903;
-Tbase TZ x6906 = x6882 + x6905;
-Tbase TZ x6907 = x6869 + x6906;
-Tbase TZ x6908 = 0x17;
-Tbase TZ x6909 = x6907 >> x6908;
-Tbase TZ x6910 = x63 * x1818;
-Tbase TZ x6911 = x64 * x1815;
-Tbase TZ x6912 = x65 * x1812;
-Tbase TZ x6913 = x66 * x1809;
-Tbase TZ x6914 = x67 * x1806;
-Tbase TZ x6915 = x68 * x1803;
-Tbase TZ x6916 = x69 * x1800;
-Tbase TZ x6917 = x70 * x1797;
-Tbase TZ x6918 = x6916 + x6917;
-Tbase TZ x6919 = x6915 + x6918;
-Tbase TZ x6920 = x6914 + x6919;
-Tbase TZ x6921 = x6913 + x6920;
-Tbase TZ x6922 = x6912 + x6921;
-Tbase TZ x6923 = x6911 + x6922;
-Tbase TZ x6924 = x6910 + x6923;
-Tbase TZ x6925 = x53 * x1794;
-Tbase TZ x6926 = x54 * x1791;
-Tbase TZ x6927 = x55 * x1788;
-Tbase TZ x6928 = x56 * x1785;
-Tbase TZ x6929 = x57 * x1782;
-Tbase TZ x6930 = x58 * x1779;
-Tbase TZ x6931 = x59 * x1776;
-Tbase TZ x6932 = x60 * x1773;
-Tbase TZ x6933 = x61 * x1770;
-Tbase TZ x6934 = x62 * x1767;
-Tbase TZ x6935 = x6933 + x6934;
-Tbase TZ x6936 = x6932 + x6935;
-Tbase TZ x6937 = x6931 + x6936;
-Tbase TZ x6938 = x6930 + x6937;
-Tbase TZ x6939 = x6929 + x6938;
-Tbase TZ x6940 = x6928 + x6939;
-Tbase TZ x6941 = x6927 + x6940;
-Tbase TZ x6942 = x6926 + x6941;
-Tbase TZ x6943 = x6925 + x6942;
-Tbase TZ x6944 = 0x11;
-Tbase TZ x6945 = x6944 * x6943;
-Tbase TZ x6946 = x6924 + x6945;
-Tbase TZ x6947 = x6909 + x6946;
-Tbase TZ x6948 = 0x17;
-Tbase TZ x6949 = x6947 >> x6948;
-Tbase TZ x6950 = x62 * x1818;
-Tbase TZ x6951 = x63 * x1815;
-Tbase TZ x6952 = x64 * x1812;
-Tbase TZ x6953 = x65 * x1809;
-Tbase TZ x6954 = x66 * x1806;
-Tbase TZ x6955 = x67 * x1803;
-Tbase TZ x6956 = x68 * x1800;
-Tbase TZ x6957 = x69 * x1797;
-Tbase TZ x6958 = x70 * x1794;
-Tbase TZ x6959 = x6957 + x6958;
-Tbase TZ x6960 = x6956 + x6959;
-Tbase TZ x6961 = x6955 + x6960;
-Tbase TZ x6962 = x6954 + x6961;
-Tbase TZ x6963 = x6953 + x6962;
-Tbase TZ x6964 = x6952 + x6963;
-Tbase TZ x6965 = x6951 + x6964;
-Tbase TZ x6966 = x6950 + x6965;
-Tbase TZ x6967 = x53 * x1791;
-Tbase TZ x6968 = x54 * x1788;
-Tbase TZ x6969 = x55 * x1785;
-Tbase TZ x6970 = x56 * x1782;
-Tbase TZ x6971 = x57 * x1779;
-Tbase TZ x6972 = x58 * x1776;
-Tbase TZ x6973 = x59 * x1773;
-Tbase TZ x6974 = x60 * x1770;
-Tbase TZ x6975 = x61 * x1767;
-Tbase TZ x6976 = x6974 + x6975;
-Tbase TZ x6977 = x6973 + x6976;
-Tbase TZ x6978 = x6972 + x6977;
-Tbase TZ x6979 = x6971 + x6978;
-Tbase TZ x6980 = x6970 + x6979;
-Tbase TZ x6981 = x6969 + x6980;
-Tbase TZ x6982 = x6968 + x6981;
-Tbase TZ x6983 = x6967 + x6982;
-Tbase TZ x6984 = 0x11;
-Tbase TZ x6985 = x6984 * x6983;
-Tbase TZ x6986 = x6966 + x6985;
-Tbase TZ x6987 = x6949 + x6986;
-Tbase TZ x6988 = 0x17;
-Tbase TZ x6989 = x6987 >> x6988;
-Tbase TZ x6990 = x61 * x1818;
-Tbase TZ x6991 = x62 * x1815;
-Tbase TZ x6992 = x63 * x1812;
-Tbase TZ x6993 = x64 * x1809;
-Tbase TZ x6994 = x65 * x1806;
-Tbase TZ x6995 = x66 * x1803;
-Tbase TZ x6996 = x67 * x1800;
-Tbase TZ x6997 = x68 * x1797;
-Tbase TZ x6998 = x69 * x1794;
-Tbase TZ x6999 = x70 * x1791;
-Tbase TZ x7000 = x6998 + x6999;
-Tbase TZ x7001 = x6997 + x7000;
-Tbase TZ x7002 = x6996 + x7001;
-Tbase TZ x7003 = x6995 + x7002;
-Tbase TZ x7004 = x6994 + x7003;
-Tbase TZ x7005 = x6993 + x7004;
-Tbase TZ x7006 = x6992 + x7005;
-Tbase TZ x7007 = x6991 + x7006;
-Tbase TZ x7008 = x6990 + x7007;
-Tbase TZ x7009 = x53 * x1788;
-Tbase TZ x7010 = x54 * x1785;
-Tbase TZ x7011 = x55 * x1782;
-Tbase TZ x7012 = x56 * x1779;
-Tbase TZ x7013 = x57 * x1776;
-Tbase TZ x7014 = x58 * x1773;
-Tbase TZ x7015 = x59 * x1770;
-Tbase TZ x7016 = x60 * x1767;
-Tbase TZ x7017 = x7015 + x7016;
-Tbase TZ x7018 = x7014 + x7017;
-Tbase TZ x7019 = x7013 + x7018;
-Tbase TZ x7020 = x7012 + x7019;
-Tbase TZ x7021 = x7011 + x7020;
-Tbase TZ x7022 = x7010 + x7021;
-Tbase TZ x7023 = x7009 + x7022;
-Tbase TZ x7024 = 0x11;
-Tbase TZ x7025 = x7024 * x7023;
-Tbase TZ x7026 = x7008 + x7025;
-Tbase TZ x7027 = x6989 + x7026;
-Tbase TZ x7028 = 0x17;
-Tbase TZ x7029 = x7027 >> x7028;
-Tbase TZ x7030 = x60 * x1818;
-Tbase TZ x7031 = x61 * x1815;
-Tbase TZ x7032 = x62 * x1812;
-Tbase TZ x7033 = x63 * x1809;
-Tbase TZ x7034 = x64 * x1806;
-Tbase TZ x7035 = x65 * x1803;
-Tbase TZ x7036 = x66 * x1800;
-Tbase TZ x7037 = x67 * x1797;
-Tbase TZ x7038 = x68 * x1794;
-Tbase TZ x7039 = x69 * x1791;
-Tbase TZ x7040 = x70 * x1788;
-Tbase TZ x7041 = x7039 + x7040;
-Tbase TZ x7042 = x7038 + x7041;
-Tbase TZ x7043 = x7037 + x7042;
-Tbase TZ x7044 = x7036 + x7043;
-Tbase TZ x7045 = x7035 + x7044;
-Tbase TZ x7046 = x7034 + x7045;
-Tbase TZ x7047 = x7033 + x7046;
-Tbase TZ x7048 = x7032 + x7047;
-Tbase TZ x7049 = x7031 + x7048;
-Tbase TZ x7050 = x7030 + x7049;
-Tbase TZ x7051 = x53 * x1785;
-Tbase TZ x7052 = x54 * x1782;
-Tbase TZ x7053 = x55 * x1779;
-Tbase TZ x7054 = x56 * x1776;
-Tbase TZ x7055 = x57 * x1773;
-Tbase TZ x7056 = x58 * x1770;
-Tbase TZ x7057 = x59 * x1767;
-Tbase TZ x7058 = x7056 + x7057;
-Tbase TZ x7059 = x7055 + x7058;
-Tbase TZ x7060 = x7054 + x7059;
-Tbase TZ x7061 = x7053 + x7060;
-Tbase TZ x7062 = x7052 + x7061;
-Tbase TZ x7063 = x7051 + x7062;
-Tbase TZ x7064 = 0x11;
-Tbase TZ x7065 = x7064 * x7063;
-Tbase TZ x7066 = x7050 + x7065;
-Tbase TZ x7067 = x7029 + x7066;
-Tbase TZ x7068 = 0x17;
-Tbase TZ x7069 = x7067 >> x7068;
-Tbase TZ x7070 = x59 * x1818;
-Tbase TZ x7071 = x60 * x1815;
-Tbase TZ x7072 = x61 * x1812;
-Tbase TZ x7073 = x62 * x1809;
-Tbase TZ x7074 = x63 * x1806;
-Tbase TZ x7075 = x64 * x1803;
-Tbase TZ x7076 = x65 * x1800;
-Tbase TZ x7077 = x66 * x1797;
-Tbase TZ x7078 = x67 * x1794;
-Tbase TZ x7079 = x68 * x1791;
-Tbase TZ x7080 = x69 * x1788;
-Tbase TZ x7081 = x70 * x1785;
-Tbase TZ x7082 = x7080 + x7081;
-Tbase TZ x7083 = x7079 + x7082;
-Tbase TZ x7084 = x7078 + x7083;
-Tbase TZ x7085 = x7077 + x7084;
-Tbase TZ x7086 = x7076 + x7085;
-Tbase TZ x7087 = x7075 + x7086;
-Tbase TZ x7088 = x7074 + x7087;
-Tbase TZ x7089 = x7073 + x7088;
-Tbase TZ x7090 = x7072 + x7089;
-Tbase TZ x7091 = x7071 + x7090;
-Tbase TZ x7092 = x7070 + x7091;
-Tbase TZ x7093 = x53 * x1782;
-Tbase TZ x7094 = x54 * x1779;
-Tbase TZ x7095 = x55 * x1776;
-Tbase TZ x7096 = x56 * x1773;
-Tbase TZ x7097 = x57 * x1770;
-Tbase TZ x7098 = x58 * x1767;
-Tbase TZ x7099 = x7097 + x7098;
-Tbase TZ x7100 = x7096 + x7099;
-Tbase TZ x7101 = x7095 + x7100;
-Tbase TZ x7102 = x7094 + x7101;
-Tbase TZ x7103 = x7093 + x7102;
-Tbase TZ x7104 = 0x11;
-Tbase TZ x7105 = x7104 * x7103;
-Tbase TZ x7106 = x7092 + x7105;
-Tbase TZ x7107 = x7069 + x7106;
-Tbase TZ x7108 = 0x17;
-Tbase TZ x7109 = x7107 >> x7108;
-Tbase TZ x7110 = x58 * x1818;
-Tbase TZ x7111 = x59 * x1815;
-Tbase TZ x7112 = x60 * x1812;
-Tbase TZ x7113 = x61 * x1809;
-Tbase TZ x7114 = x62 * x1806;
-Tbase TZ x7115 = x63 * x1803;
-Tbase TZ x7116 = x64 * x1800;
-Tbase TZ x7117 = x65 * x1797;
-Tbase TZ x7118 = x66 * x1794;
-Tbase TZ x7119 = x67 * x1791;
-Tbase TZ x7120 = x68 * x1788;
-Tbase TZ x7121 = x69 * x1785;
-Tbase TZ x7122 = x70 * x1782;
-Tbase TZ x7123 = x7121 + x7122;
-Tbase TZ x7124 = x7120 + x7123;
-Tbase TZ x7125 = x7119 + x7124;
-Tbase TZ x7126 = x7118 + x7125;
-Tbase TZ x7127 = x7117 + x7126;
-Tbase TZ x7128 = x7116 + x7127;
-Tbase TZ x7129 = x7115 + x7128;
-Tbase TZ x7130 = x7114 + x7129;
-Tbase TZ x7131 = x7113 + x7130;
-Tbase TZ x7132 = x7112 + x7131;
-Tbase TZ x7133 = x7111 + x7132;
-Tbase TZ x7134 = x7110 + x7133;
-Tbase TZ x7135 = x53 * x1779;
-Tbase TZ x7136 = x54 * x1776;
-Tbase TZ x7137 = x55 * x1773;
-Tbase TZ x7138 = x56 * x1770;
-Tbase TZ x7139 = x57 * x1767;
-Tbase TZ x7140 = x7138 + x7139;
-Tbase TZ x7141 = x7137 + x7140;
-Tbase TZ x7142 = x7136 + x7141;
-Tbase TZ x7143 = x7135 + x7142;
-Tbase TZ x7144 = 0x11;
-Tbase TZ x7145 = x7144 * x7143;
-Tbase TZ x7146 = x7134 + x7145;
-Tbase TZ x7147 = x7109 + x7146;
-Tbase TZ x7148 = 0x17;
-Tbase TZ x7149 = x7147 >> x7148;
-Tbase TZ x7150 = x57 * x1818;
-Tbase TZ x7151 = x58 * x1815;
-Tbase TZ x7152 = x59 * x1812;
-Tbase TZ x7153 = x60 * x1809;
-Tbase TZ x7154 = x61 * x1806;
-Tbase TZ x7155 = x62 * x1803;
-Tbase TZ x7156 = x63 * x1800;
-Tbase TZ x7157 = x64 * x1797;
-Tbase TZ x7158 = x65 * x1794;
-Tbase TZ x7159 = x66 * x1791;
-Tbase TZ x7160 = x67 * x1788;
-Tbase TZ x7161 = x68 * x1785;
-Tbase TZ x7162 = x69 * x1782;
-Tbase TZ x7163 = x70 * x1779;
-Tbase TZ x7164 = x7162 + x7163;
-Tbase TZ x7165 = x7161 + x7164;
-Tbase TZ x7166 = x7160 + x7165;
-Tbase TZ x7167 = x7159 + x7166;
-Tbase TZ x7168 = x7158 + x7167;
-Tbase TZ x7169 = x7157 + x7168;
-Tbase TZ x7170 = x7156 + x7169;
-Tbase TZ x7171 = x7155 + x7170;
-Tbase TZ x7172 = x7154 + x7171;
-Tbase TZ x7173 = x7153 + x7172;
-Tbase TZ x7174 = x7152 + x7173;
-Tbase TZ x7175 = x7151 + x7174;
-Tbase TZ x7176 = x7150 + x7175;
-Tbase TZ x7177 = x53 * x1776;
-Tbase TZ x7178 = x54 * x1773;
-Tbase TZ x7179 = x55 * x1770;
-Tbase TZ x7180 = x56 * x1767;
-Tbase TZ x7181 = x7179 + x7180;
-Tbase TZ x7182 = x7178 + x7181;
-Tbase TZ x7183 = x7177 + x7182;
-Tbase TZ x7184 = 0x11;
-Tbase TZ x7185 = x7184 * x7183;
-Tbase TZ x7186 = x7176 + x7185;
-Tbase TZ x7187 = x7149 + x7186;
-Tbase TZ x7188 = 0x17;
-Tbase TZ x7189 = x7187 >> x7188;
-Tbase TZ x7190 = x56 * x1818;
-Tbase TZ x7191 = x57 * x1815;
-Tbase TZ x7192 = x58 * x1812;
-Tbase TZ x7193 = x59 * x1809;
-Tbase TZ x7194 = x60 * x1806;
-Tbase TZ x7195 = x61 * x1803;
-Tbase TZ x7196 = x62 * x1800;
-Tbase TZ x7197 = x63 * x1797;
-Tbase TZ x7198 = x64 * x1794;
-Tbase TZ x7199 = x65 * x1791;
-Tbase TZ x7200 = x66 * x1788;
-Tbase TZ x7201 = x67 * x1785;
-Tbase TZ x7202 = x68 * x1782;
-Tbase TZ x7203 = x69 * x1779;
-Tbase TZ x7204 = x70 * x1776;
-Tbase TZ x7205 = x7203 + x7204;
-Tbase TZ x7206 = x7202 + x7205;
-Tbase TZ x7207 = x7201 + x7206;
-Tbase TZ x7208 = x7200 + x7207;
-Tbase TZ x7209 = x7199 + x7208;
-Tbase TZ x7210 = x7198 + x7209;
-Tbase TZ x7211 = x7197 + x7210;
-Tbase TZ x7212 = x7196 + x7211;
-Tbase TZ x7213 = x7195 + x7212;
-Tbase TZ x7214 = x7194 + x7213;
-Tbase TZ x7215 = x7193 + x7214;
-Tbase TZ x7216 = x7192 + x7215;
-Tbase TZ x7217 = x7191 + x7216;
-Tbase TZ x7218 = x7190 + x7217;
-Tbase TZ x7219 = x53 * x1773;
-Tbase TZ x7220 = x54 * x1770;
-Tbase TZ x7221 = x55 * x1767;
-Tbase TZ x7222 = x7220 + x7221;
-Tbase TZ x7223 = x7219 + x7222;
-Tbase TZ x7224 = 0x11;
-Tbase TZ x7225 = x7224 * x7223;
-Tbase TZ x7226 = x7218 + x7225;
-Tbase TZ x7227 = x7189 + x7226;
-Tbase TZ x7228 = 0x17;
-Tbase TZ x7229 = x7227 >> x7228;
-Tbase TZ x7230 = x55 * x1818;
-Tbase TZ x7231 = x56 * x1815;
-Tbase TZ x7232 = x57 * x1812;
-Tbase TZ x7233 = x58 * x1809;
-Tbase TZ x7234 = x59 * x1806;
-Tbase TZ x7235 = x60 * x1803;
-Tbase TZ x7236 = x61 * x1800;
-Tbase TZ x7237 = x62 * x1797;
-Tbase TZ x7238 = x63 * x1794;
-Tbase TZ x7239 = x64 * x1791;
-Tbase TZ x7240 = x65 * x1788;
-Tbase TZ x7241 = x66 * x1785;
-Tbase TZ x7242 = x67 * x1782;
-Tbase TZ x7243 = x68 * x1779;
-Tbase TZ x7244 = x69 * x1776;
-Tbase TZ x7245 = x70 * x1773;
-Tbase TZ x7246 = x7244 + x7245;
-Tbase TZ x7247 = x7243 + x7246;
-Tbase TZ x7248 = x7242 + x7247;
-Tbase TZ x7249 = x7241 + x7248;
-Tbase TZ x7250 = x7240 + x7249;
-Tbase TZ x7251 = x7239 + x7250;
-Tbase TZ x7252 = x7238 + x7251;
-Tbase TZ x7253 = x7237 + x7252;
-Tbase TZ x7254 = x7236 + x7253;
-Tbase TZ x7255 = x7235 + x7254;
-Tbase TZ x7256 = x7234 + x7255;
-Tbase TZ x7257 = x7233 + x7256;
-Tbase TZ x7258 = x7232 + x7257;
-Tbase TZ x7259 = x7231 + x7258;
-Tbase TZ x7260 = x7230 + x7259;
-Tbase TZ x7261 = x53 * x1770;
-Tbase TZ x7262 = x54 * x1767;
-Tbase TZ x7263 = x7261 + x7262;
-Tbase TZ x7264 = 0x11;
-Tbase TZ x7265 = x7264 * x7263;
-Tbase TZ x7266 = x7260 + x7265;
-Tbase TZ x7267 = x7229 + x7266;
-Tbase TZ x7268 = 0x17;
-Tbase TZ x7269 = x7267 >> x7268;
-Tbase TZ x7270 = x54 * x1818;
-Tbase TZ x7271 = x55 * x1815;
-Tbase TZ x7272 = x56 * x1812;
-Tbase TZ x7273 = x57 * x1809;
-Tbase TZ x7274 = x58 * x1806;
-Tbase TZ x7275 = x59 * x1803;
-Tbase TZ x7276 = x60 * x1800;
-Tbase TZ x7277 = x61 * x1797;
-Tbase TZ x7278 = x62 * x1794;
-Tbase TZ x7279 = x63 * x1791;
-Tbase TZ x7280 = x64 * x1788;
-Tbase TZ x7281 = x65 * x1785;
-Tbase TZ x7282 = x66 * x1782;
-Tbase TZ x7283 = x67 * x1779;
-Tbase TZ x7284 = x68 * x1776;
-Tbase TZ x7285 = x69 * x1773;
-Tbase TZ x7286 = x70 * x1770;
-Tbase TZ x7287 = x7285 + x7286;
-Tbase TZ x7288 = x7284 + x7287;
-Tbase TZ x7289 = x7283 + x7288;
-Tbase TZ x7290 = x7282 + x7289;
-Tbase TZ x7291 = x7281 + x7290;
-Tbase TZ x7292 = x7280 + x7291;
-Tbase TZ x7293 = x7279 + x7292;
-Tbase TZ x7294 = x7278 + x7293;
-Tbase TZ x7295 = x7277 + x7294;
-Tbase TZ x7296 = x7276 + x7295;
-Tbase TZ x7297 = x7275 + x7296;
-Tbase TZ x7298 = x7274 + x7297;
-Tbase TZ x7299 = x7273 + x7298;
-Tbase TZ x7300 = x7272 + x7299;
-Tbase TZ x7301 = x7271 + x7300;
-Tbase TZ x7302 = x7270 + x7301;
-Tbase TZ x7303 = x53 * x1767;
-Tbase TZ x7304 = 0x11;
-Tbase TZ x7305 = x7304 * x7303;
-Tbase TZ x7306 = x7302 + x7305;
-Tbase TZ x7307 = x7269 + x7306;
-Tbase TZ x7308 = 0x17;
-Tbase TZ x7309 = x7307 >> x7308;
-Tbase TZ x7310 = x53 * x1818;
-Tbase TZ x7311 = x54 * x1815;
-Tbase TZ x7312 = x55 * x1812;
-Tbase TZ x7313 = x56 * x1809;
-Tbase TZ x7314 = x57 * x1806;
-Tbase TZ x7315 = x58 * x1803;
-Tbase TZ x7316 = x59 * x1800;
-Tbase TZ x7317 = x60 * x1797;
-Tbase TZ x7318 = x61 * x1794;
-Tbase TZ x7319 = x62 * x1791;
-Tbase TZ x7320 = x63 * x1788;
-Tbase TZ x7321 = x64 * x1785;
-Tbase TZ x7322 = x65 * x1782;
-Tbase TZ x7323 = x66 * x1779;
-Tbase TZ x7324 = x67 * x1776;
-Tbase TZ x7325 = x68 * x1773;
-Tbase TZ x7326 = x69 * x1770;
-Tbase TZ x7327 = x70 * x1767;
-Tbase TZ x7328 = x7326 + x7327;
-Tbase TZ x7329 = x7325 + x7328;
-Tbase TZ x7330 = x7324 + x7329;
-Tbase TZ x7331 = x7323 + x7330;
-Tbase TZ x7332 = x7322 + x7331;
-Tbase TZ x7333 = x7321 + x7332;
-Tbase TZ x7334 = x7320 + x7333;
-Tbase TZ x7335 = x7319 + x7334;
-Tbase TZ x7336 = x7318 + x7335;
-Tbase TZ x7337 = x7317 + x7336;
-Tbase TZ x7338 = x7316 + x7337;
-Tbase TZ x7339 = x7315 + x7338;
-Tbase TZ x7340 = x7314 + x7339;
-Tbase TZ x7341 = x7313 + x7340;
-Tbase TZ x7342 = x7312 + x7341;
-Tbase TZ x7343 = x7311 + x7342;
-Tbase TZ x7344 = x7310 + x7343;
-Tbase TZ x7345 = x7309 + x7344;
-Tbase TZ x7346 = 0x17;
-Tbase TZ x7347 = x7345 >> x7346;
-Tbase TZ x7348 = 0x11;
-Tbase TZ x7349 = x7348 * x7347;
-Tbase TZ x7350 = 0x7fffff;
-Tbase TZ x7351 = x6667 & x7350;
-Tbase TZ x7352 = x7349 + x7351;
-Tbase TZ x7353 = 0x17;
-Tbase TZ x7354 = x7352 >> x7353;
-Tbase TZ x7355 = 0x7fffff;
-Tbase TZ x7356 = x6707 & x7355;
-Tbase TZ x7357 = x7354 + x7356;
-Tbase TZ x7358 = 0x7fffff;
-Tbase TZ x7359 = x7345 & x7358;
-Tbase TZ x7360 = 0x7fffff;
-Tbase TZ x7361 = x7307 & x7360;
-Tbase TZ x7362 = 0x7fffff;
-Tbase TZ x7363 = x7267 & x7362;
-Tbase TZ x7364 = 0x7fffff;
-Tbase TZ x7365 = x7227 & x7364;
-Tbase TZ x7366 = 0x7fffff;
-Tbase TZ x7367 = x7187 & x7366;
-Tbase TZ x7368 = 0x7fffff;
-Tbase TZ x7369 = x7147 & x7368;
-Tbase TZ x7370 = 0x7fffff;
-Tbase TZ x7371 = x7107 & x7370;
-Tbase TZ x7372 = 0x7fffff;
-Tbase TZ x7373 = x7067 & x7372;
-Tbase TZ x7374 = 0x7fffff;
-Tbase TZ x7375 = x7027 & x7374;
-Tbase TZ x7376 = 0x7fffff;
-Tbase TZ x7377 = x6987 & x7376;
-Tbase TZ x7378 = 0x7fffff;
-Tbase TZ x7379 = x6947 & x7378;
-Tbase TZ x7380 = 0x7fffff;
-Tbase TZ x7381 = x6907 & x7380;
-Tbase TZ x7382 = 0x7fffff;
-Tbase TZ x7383 = x6867 & x7382;
-Tbase TZ x7384 = 0x7fffff;
-Tbase TZ x7385 = x6827 & x7384;
-Tbase TZ x7386 = 0x7fffff;
-Tbase TZ x7387 = x6787 & x7386;
-Tbase TZ x7388 = 0x17;
-Tbase TZ x7389 = x7357 >> x7388;
-Tbase TZ x7390 = 0x7fffff;
-Tbase TZ x7391 = x6747 & x7390;
-Tbase TZ x7392 = x7389 + x7391;
-Tbase TZ x7393 = 0x7fffff;
-Tbase TZ x7394 = x7357 & x7393;
-Tbase TZ x7395 = 0x7fffff;
-Tbase TZ x7396 = x7352 & x7395;
-Tbase TZ x7397 = x907 + x7359;
-Tbase TZ x7398 = x909 + x7361;
-Tbase TZ x7399 = x911 + x7363;
-Tbase TZ x7400 = x913 + x7365;
-Tbase TZ x7401 = x915 + x7367;
-Tbase TZ x7402 = x917 + x7369;
-Tbase TZ x7403 = x919 + x7371;
-Tbase TZ x7404 = x921 + x7373;
-Tbase TZ x7405 = x923 + x7375;
-Tbase TZ x7406 = x925 + x7377;
-Tbase TZ x7407 = x927 + x7379;
-Tbase TZ x7408 = x929 + x7381;
-Tbase TZ x7409 = x931 + x7383;
-Tbase TZ x7410 = x933 + x7385;
-Tbase TZ x7411 = x935 + x7387;
-Tbase TZ x7412 = x940 + x7392;
-Tbase TZ x7413 = x942 + x7394;
-Tbase TZ x7414 = x944 + x7396;
-Tbase TZ x7415 = x1818 * x7414;
-Tbase TZ x7416 = x1767 * x7413;
-Tbase TZ x7417 = x1770 * x7412;
-Tbase TZ x7418 = x1773 * x7411;
-Tbase TZ x7419 = x1776 * x7410;
-Tbase TZ x7420 = x1779 * x7409;
-Tbase TZ x7421 = x1782 * x7408;
-Tbase TZ x7422 = x1785 * x7407;
-Tbase TZ x7423 = x1788 * x7406;
-Tbase TZ x7424 = x1791 * x7405;
-Tbase TZ x7425 = x1794 * x7404;
-Tbase TZ x7426 = x1797 * x7403;
-Tbase TZ x7427 = x1800 * x7402;
-Tbase TZ x7428 = x1803 * x7401;
-Tbase TZ x7429 = x1806 * x7400;
-Tbase TZ x7430 = x1809 * x7399;
-Tbase TZ x7431 = x1812 * x7398;
-Tbase TZ x7432 = x1815 * x7397;
-Tbase TZ x7433 = x7431 + x7432;
-Tbase TZ x7434 = x7430 + x7433;
-Tbase TZ x7435 = x7429 + x7434;
-Tbase TZ x7436 = x7428 + x7435;
-Tbase TZ x7437 = x7427 + x7436;
-Tbase TZ x7438 = x7426 + x7437;
-Tbase TZ x7439 = x7425 + x7438;
-Tbase TZ x7440 = x7424 + x7439;
-Tbase TZ x7441 = x7423 + x7440;
-Tbase TZ x7442 = x7422 + x7441;
-Tbase TZ x7443 = x7421 + x7442;
-Tbase TZ x7444 = x7420 + x7443;
-Tbase TZ x7445 = x7419 + x7444;
-Tbase TZ x7446 = x7418 + x7445;
-Tbase TZ x7447 = x7417 + x7446;
-Tbase TZ x7448 = x7416 + x7447;
-Tbase TZ x7449 = 0x11;
-Tbase TZ x7450 = x7449 * x7448;
-Tbase TZ x7451 = x7415 + x7450;
-Tbase TZ x7452 = 0x17;
-Tbase TZ x7453 = x7451 >> x7452;
-Tbase TZ x7454 = x1815 * x7414;
-Tbase TZ x7455 = x1818 * x7413;
-Tbase TZ x7456 = x7454 + x7455;
-Tbase TZ x7457 = x1767 * x7412;
-Tbase TZ x7458 = x1770 * x7411;
-Tbase TZ x7459 = x1773 * x7410;
-Tbase TZ x7460 = x1776 * x7409;
-Tbase TZ x7461 = x1779 * x7408;
-Tbase TZ x7462 = x1782 * x7407;
-Tbase TZ x7463 = x1785 * x7406;
-Tbase TZ x7464 = x1788 * x7405;
-Tbase TZ x7465 = x1791 * x7404;
-Tbase TZ x7466 = x1794 * x7403;
-Tbase TZ x7467 = x1797 * x7402;
-Tbase TZ x7468 = x1800 * x7401;
-Tbase TZ x7469 = x1803 * x7400;
-Tbase TZ x7470 = x1806 * x7399;
-Tbase TZ x7471 = x1809 * x7398;
-Tbase TZ x7472 = x1812 * x7397;
-Tbase TZ x7473 = x7471 + x7472;
-Tbase TZ x7474 = x7470 + x7473;
-Tbase TZ x7475 = x7469 + x7474;
-Tbase TZ x7476 = x7468 + x7475;
-Tbase TZ x7477 = x7467 + x7476;
-Tbase TZ x7478 = x7466 + x7477;
-Tbase TZ x7479 = x7465 + x7478;
-Tbase TZ x7480 = x7464 + x7479;
-Tbase TZ x7481 = x7463 + x7480;
-Tbase TZ x7482 = x7462 + x7481;
-Tbase TZ x7483 = x7461 + x7482;
-Tbase TZ x7484 = x7460 + x7483;
-Tbase TZ x7485 = x7459 + x7484;
-Tbase TZ x7486 = x7458 + x7485;
-Tbase TZ x7487 = x7457 + x7486;
-Tbase TZ x7488 = 0x11;
-Tbase TZ x7489 = x7488 * x7487;
-Tbase TZ x7490 = x7456 + x7489;
-Tbase TZ x7491 = x7453 + x7490;
-Tbase TZ x7492 = 0x17;
-Tbase TZ x7493 = x7491 >> x7492;
-Tbase TZ x7494 = x1812 * x7414;
-Tbase TZ x7495 = x1815 * x7413;
-Tbase TZ x7496 = x1818 * x7412;
-Tbase TZ x7497 = x7495 + x7496;
-Tbase TZ x7498 = x7494 + x7497;
-Tbase TZ x7499 = x1767 * x7411;
-Tbase TZ x7500 = x1770 * x7410;
-Tbase TZ x7501 = x1773 * x7409;
-Tbase TZ x7502 = x1776 * x7408;
-Tbase TZ x7503 = x1779 * x7407;
-Tbase TZ x7504 = x1782 * x7406;
-Tbase TZ x7505 = x1785 * x7405;
-Tbase TZ x7506 = x1788 * x7404;
-Tbase TZ x7507 = x1791 * x7403;
-Tbase TZ x7508 = x1794 * x7402;
-Tbase TZ x7509 = x1797 * x7401;
-Tbase TZ x7510 = x1800 * x7400;
-Tbase TZ x7511 = x1803 * x7399;
-Tbase TZ x7512 = x1806 * x7398;
-Tbase TZ x7513 = x1809 * x7397;
-Tbase TZ x7514 = x7512 + x7513;
-Tbase TZ x7515 = x7511 + x7514;
-Tbase TZ x7516 = x7510 + x7515;
-Tbase TZ x7517 = x7509 + x7516;
-Tbase TZ x7518 = x7508 + x7517;
-Tbase TZ x7519 = x7507 + x7518;
-Tbase TZ x7520 = x7506 + x7519;
-Tbase TZ x7521 = x7505 + x7520;
-Tbase TZ x7522 = x7504 + x7521;
-Tbase TZ x7523 = x7503 + x7522;
-Tbase TZ x7524 = x7502 + x7523;
-Tbase TZ x7525 = x7501 + x7524;
-Tbase TZ x7526 = x7500 + x7525;
-Tbase TZ x7527 = x7499 + x7526;
-Tbase TZ x7528 = 0x11;
-Tbase TZ x7529 = x7528 * x7527;
-Tbase TZ x7530 = x7498 + x7529;
-Tbase TZ x7531 = x7493 + x7530;
-Tbase TZ x7532 = 0x17;
-Tbase TZ x7533 = x7531 >> x7532;
-Tbase TZ x7534 = x1809 * x7414;
-Tbase TZ x7535 = x1812 * x7413;
-Tbase TZ x7536 = x1815 * x7412;
-Tbase TZ x7537 = x1818 * x7411;
-Tbase TZ x7538 = x7536 + x7537;
-Tbase TZ x7539 = x7535 + x7538;
-Tbase TZ x7540 = x7534 + x7539;
-Tbase TZ x7541 = x1767 * x7410;
-Tbase TZ x7542 = x1770 * x7409;
-Tbase TZ x7543 = x1773 * x7408;
-Tbase TZ x7544 = x1776 * x7407;
-Tbase TZ x7545 = x1779 * x7406;
-Tbase TZ x7546 = x1782 * x7405;
-Tbase TZ x7547 = x1785 * x7404;
-Tbase TZ x7548 = x1788 * x7403;
-Tbase TZ x7549 = x1791 * x7402;
-Tbase TZ x7550 = x1794 * x7401;
-Tbase TZ x7551 = x1797 * x7400;
-Tbase TZ x7552 = x1800 * x7399;
-Tbase TZ x7553 = x1803 * x7398;
-Tbase TZ x7554 = x1806 * x7397;
-Tbase TZ x7555 = x7553 + x7554;
-Tbase TZ x7556 = x7552 + x7555;
-Tbase TZ x7557 = x7551 + x7556;
-Tbase TZ x7558 = x7550 + x7557;
-Tbase TZ x7559 = x7549 + x7558;
-Tbase TZ x7560 = x7548 + x7559;
-Tbase TZ x7561 = x7547 + x7560;
-Tbase TZ x7562 = x7546 + x7561;
-Tbase TZ x7563 = x7545 + x7562;
-Tbase TZ x7564 = x7544 + x7563;
-Tbase TZ x7565 = x7543 + x7564;
-Tbase TZ x7566 = x7542 + x7565;
-Tbase TZ x7567 = x7541 + x7566;
-Tbase TZ x7568 = 0x11;
-Tbase TZ x7569 = x7568 * x7567;
-Tbase TZ x7570 = x7540 + x7569;
-Tbase TZ x7571 = x7533 + x7570;
-Tbase TZ x7572 = 0x17;
-Tbase TZ x7573 = x7571 >> x7572;
-Tbase TZ x7574 = x1806 * x7414;
-Tbase TZ x7575 = x1809 * x7413;
-Tbase TZ x7576 = x1812 * x7412;
-Tbase TZ x7577 = x1815 * x7411;
-Tbase TZ x7578 = x1818 * x7410;
-Tbase TZ x7579 = x7577 + x7578;
-Tbase TZ x7580 = x7576 + x7579;
-Tbase TZ x7581 = x7575 + x7580;
-Tbase TZ x7582 = x7574 + x7581;
-Tbase TZ x7583 = x1767 * x7409;
-Tbase TZ x7584 = x1770 * x7408;
-Tbase TZ x7585 = x1773 * x7407;
-Tbase TZ x7586 = x1776 * x7406;
-Tbase TZ x7587 = x1779 * x7405;
-Tbase TZ x7588 = x1782 * x7404;
-Tbase TZ x7589 = x1785 * x7403;
-Tbase TZ x7590 = x1788 * x7402;
-Tbase TZ x7591 = x1791 * x7401;
-Tbase TZ x7592 = x1794 * x7400;
-Tbase TZ x7593 = x1797 * x7399;
-Tbase TZ x7594 = x1800 * x7398;
-Tbase TZ x7595 = x1803 * x7397;
-Tbase TZ x7596 = x7594 + x7595;
-Tbase TZ x7597 = x7593 + x7596;
-Tbase TZ x7598 = x7592 + x7597;
-Tbase TZ x7599 = x7591 + x7598;
-Tbase TZ x7600 = x7590 + x7599;
-Tbase TZ x7601 = x7589 + x7600;
-Tbase TZ x7602 = x7588 + x7601;
-Tbase TZ x7603 = x7587 + x7602;
-Tbase TZ x7604 = x7586 + x7603;
-Tbase TZ x7605 = x7585 + x7604;
-Tbase TZ x7606 = x7584 + x7605;
-Tbase TZ x7607 = x7583 + x7606;
-Tbase TZ x7608 = 0x11;
-Tbase TZ x7609 = x7608 * x7607;
-Tbase TZ x7610 = x7582 + x7609;
-Tbase TZ x7611 = x7573 + x7610;
-Tbase TZ x7612 = 0x17;
-Tbase TZ x7613 = x7611 >> x7612;
-Tbase TZ x7614 = x1803 * x7414;
-Tbase TZ x7615 = x1806 * x7413;
-Tbase TZ x7616 = x1809 * x7412;
-Tbase TZ x7617 = x1812 * x7411;
-Tbase TZ x7618 = x1815 * x7410;
-Tbase TZ x7619 = x1818 * x7409;
-Tbase TZ x7620 = x7618 + x7619;
-Tbase TZ x7621 = x7617 + x7620;
-Tbase TZ x7622 = x7616 + x7621;
-Tbase TZ x7623 = x7615 + x7622;
-Tbase TZ x7624 = x7614 + x7623;
-Tbase TZ x7625 = x1767 * x7408;
-Tbase TZ x7626 = x1770 * x7407;
-Tbase TZ x7627 = x1773 * x7406;
-Tbase TZ x7628 = x1776 * x7405;
-Tbase TZ x7629 = x1779 * x7404;
-Tbase TZ x7630 = x1782 * x7403;
-Tbase TZ x7631 = x1785 * x7402;
-Tbase TZ x7632 = x1788 * x7401;
-Tbase TZ x7633 = x1791 * x7400;
-Tbase TZ x7634 = x1794 * x7399;
-Tbase TZ x7635 = x1797 * x7398;
-Tbase TZ x7636 = x1800 * x7397;
-Tbase TZ x7637 = x7635 + x7636;
-Tbase TZ x7638 = x7634 + x7637;
-Tbase TZ x7639 = x7633 + x7638;
-Tbase TZ x7640 = x7632 + x7639;
-Tbase TZ x7641 = x7631 + x7640;
-Tbase TZ x7642 = x7630 + x7641;
-Tbase TZ x7643 = x7629 + x7642;
-Tbase TZ x7644 = x7628 + x7643;
-Tbase TZ x7645 = x7627 + x7644;
-Tbase TZ x7646 = x7626 + x7645;
-Tbase TZ x7647 = x7625 + x7646;
-Tbase TZ x7648 = 0x11;
-Tbase TZ x7649 = x7648 * x7647;
-Tbase TZ x7650 = x7624 + x7649;
-Tbase TZ x7651 = x7613 + x7650;
-Tbase TZ x7652 = 0x17;
-Tbase TZ x7653 = x7651 >> x7652;
-Tbase TZ x7654 = x1800 * x7414;
-Tbase TZ x7655 = x1803 * x7413;
-Tbase TZ x7656 = x1806 * x7412;
-Tbase TZ x7657 = x1809 * x7411;
-Tbase TZ x7658 = x1812 * x7410;
-Tbase TZ x7659 = x1815 * x7409;
-Tbase TZ x7660 = x1818 * x7408;
-Tbase TZ x7661 = x7659 + x7660;
-Tbase TZ x7662 = x7658 + x7661;
-Tbase TZ x7663 = x7657 + x7662;
-Tbase TZ x7664 = x7656 + x7663;
-Tbase TZ x7665 = x7655 + x7664;
-Tbase TZ x7666 = x7654 + x7665;
-Tbase TZ x7667 = x1767 * x7407;
-Tbase TZ x7668 = x1770 * x7406;
-Tbase TZ x7669 = x1773 * x7405;
-Tbase TZ x7670 = x1776 * x7404;
-Tbase TZ x7671 = x1779 * x7403;
-Tbase TZ x7672 = x1782 * x7402;
-Tbase TZ x7673 = x1785 * x7401;
-Tbase TZ x7674 = x1788 * x7400;
-Tbase TZ x7675 = x1791 * x7399;
-Tbase TZ x7676 = x1794 * x7398;
-Tbase TZ x7677 = x1797 * x7397;
-Tbase TZ x7678 = x7676 + x7677;
-Tbase TZ x7679 = x7675 + x7678;
-Tbase TZ x7680 = x7674 + x7679;
-Tbase TZ x7681 = x7673 + x7680;
-Tbase TZ x7682 = x7672 + x7681;
-Tbase TZ x7683 = x7671 + x7682;
-Tbase TZ x7684 = x7670 + x7683;
-Tbase TZ x7685 = x7669 + x7684;
-Tbase TZ x7686 = x7668 + x7685;
-Tbase TZ x7687 = x7667 + x7686;
-Tbase TZ x7688 = 0x11;
-Tbase TZ x7689 = x7688 * x7687;
-Tbase TZ x7690 = x7666 + x7689;
-Tbase TZ x7691 = x7653 + x7690;
-Tbase TZ x7692 = 0x17;
-Tbase TZ x7693 = x7691 >> x7692;
-Tbase TZ x7694 = x1797 * x7414;
-Tbase TZ x7695 = x1800 * x7413;
-Tbase TZ x7696 = x1803 * x7412;
-Tbase TZ x7697 = x1806 * x7411;
-Tbase TZ x7698 = x1809 * x7410;
-Tbase TZ x7699 = x1812 * x7409;
-Tbase TZ x7700 = x1815 * x7408;
-Tbase TZ x7701 = x1818 * x7407;
-Tbase TZ x7702 = x7700 + x7701;
-Tbase TZ x7703 = x7699 + x7702;
-Tbase TZ x7704 = x7698 + x7703;
-Tbase TZ x7705 = x7697 + x7704;
-Tbase TZ x7706 = x7696 + x7705;
-Tbase TZ x7707 = x7695 + x7706;
-Tbase TZ x7708 = x7694 + x7707;
-Tbase TZ x7709 = x1767 * x7406;
-Tbase TZ x7710 = x1770 * x7405;
-Tbase TZ x7711 = x1773 * x7404;
-Tbase TZ x7712 = x1776 * x7403;
-Tbase TZ x7713 = x1779 * x7402;
-Tbase TZ x7714 = x1782 * x7401;
-Tbase TZ x7715 = x1785 * x7400;
-Tbase TZ x7716 = x1788 * x7399;
-Tbase TZ x7717 = x1791 * x7398;
-Tbase TZ x7718 = x1794 * x7397;
-Tbase TZ x7719 = x7717 + x7718;
-Tbase TZ x7720 = x7716 + x7719;
-Tbase TZ x7721 = x7715 + x7720;
-Tbase TZ x7722 = x7714 + x7721;
-Tbase TZ x7723 = x7713 + x7722;
-Tbase TZ x7724 = x7712 + x7723;
-Tbase TZ x7725 = x7711 + x7724;
-Tbase TZ x7726 = x7710 + x7725;
-Tbase TZ x7727 = x7709 + x7726;
-Tbase TZ x7728 = 0x11;
-Tbase TZ x7729 = x7728 * x7727;
-Tbase TZ x7730 = x7708 + x7729;
-Tbase TZ x7731 = x7693 + x7730;
-Tbase TZ x7732 = 0x17;
-Tbase TZ x7733 = x7731 >> x7732;
-Tbase TZ x7734 = x1794 * x7414;
-Tbase TZ x7735 = x1797 * x7413;
-Tbase TZ x7736 = x1800 * x7412;
-Tbase TZ x7737 = x1803 * x7411;
-Tbase TZ x7738 = x1806 * x7410;
-Tbase TZ x7739 = x1809 * x7409;
-Tbase TZ x7740 = x1812 * x7408;
-Tbase TZ x7741 = x1815 * x7407;
-Tbase TZ x7742 = x1818 * x7406;
-Tbase TZ x7743 = x7741 + x7742;
-Tbase TZ x7744 = x7740 + x7743;
-Tbase TZ x7745 = x7739 + x7744;
-Tbase TZ x7746 = x7738 + x7745;
-Tbase TZ x7747 = x7737 + x7746;
-Tbase TZ x7748 = x7736 + x7747;
-Tbase TZ x7749 = x7735 + x7748;
-Tbase TZ x7750 = x7734 + x7749;
-Tbase TZ x7751 = x1767 * x7405;
-Tbase TZ x7752 = x1770 * x7404;
-Tbase TZ x7753 = x1773 * x7403;
-Tbase TZ x7754 = x1776 * x7402;
-Tbase TZ x7755 = x1779 * x7401;
-Tbase TZ x7756 = x1782 * x7400;
-Tbase TZ x7757 = x1785 * x7399;
-Tbase TZ x7758 = x1788 * x7398;
-Tbase TZ x7759 = x1791 * x7397;
-Tbase TZ x7760 = x7758 + x7759;
-Tbase TZ x7761 = x7757 + x7760;
-Tbase TZ x7762 = x7756 + x7761;
-Tbase TZ x7763 = x7755 + x7762;
-Tbase TZ x7764 = x7754 + x7763;
-Tbase TZ x7765 = x7753 + x7764;
-Tbase TZ x7766 = x7752 + x7765;
-Tbase TZ x7767 = x7751 + x7766;
-Tbase TZ x7768 = 0x11;
-Tbase TZ x7769 = x7768 * x7767;
-Tbase TZ x7770 = x7750 + x7769;
-Tbase TZ x7771 = x7733 + x7770;
-Tbase TZ x7772 = 0x17;
-Tbase TZ x7773 = x7771 >> x7772;
-Tbase TZ x7774 = x1791 * x7414;
-Tbase TZ x7775 = x1794 * x7413;
-Tbase TZ x7776 = x1797 * x7412;
-Tbase TZ x7777 = x1800 * x7411;
-Tbase TZ x7778 = x1803 * x7410;
-Tbase TZ x7779 = x1806 * x7409;
-Tbase TZ x7780 = x1809 * x7408;
-Tbase TZ x7781 = x1812 * x7407;
-Tbase TZ x7782 = x1815 * x7406;
-Tbase TZ x7783 = x1818 * x7405;
-Tbase TZ x7784 = x7782 + x7783;
-Tbase TZ x7785 = x7781 + x7784;
-Tbase TZ x7786 = x7780 + x7785;
-Tbase TZ x7787 = x7779 + x7786;
-Tbase TZ x7788 = x7778 + x7787;
-Tbase TZ x7789 = x7777 + x7788;
-Tbase TZ x7790 = x7776 + x7789;
-Tbase TZ x7791 = x7775 + x7790;
-Tbase TZ x7792 = x7774 + x7791;
-Tbase TZ x7793 = x1767 * x7404;
-Tbase TZ x7794 = x1770 * x7403;
-Tbase TZ x7795 = x1773 * x7402;
-Tbase TZ x7796 = x1776 * x7401;
-Tbase TZ x7797 = x1779 * x7400;
-Tbase TZ x7798 = x1782 * x7399;
-Tbase TZ x7799 = x1785 * x7398;
-Tbase TZ x7800 = x1788 * x7397;
-Tbase TZ x7801 = x7799 + x7800;
-Tbase TZ x7802 = x7798 + x7801;
-Tbase TZ x7803 = x7797 + x7802;
-Tbase TZ x7804 = x7796 + x7803;
-Tbase TZ x7805 = x7795 + x7804;
-Tbase TZ x7806 = x7794 + x7805;
-Tbase TZ x7807 = x7793 + x7806;
-Tbase TZ x7808 = 0x11;
-Tbase TZ x7809 = x7808 * x7807;
-Tbase TZ x7810 = x7792 + x7809;
-Tbase TZ x7811 = x7773 + x7810;
-Tbase TZ x7812 = 0x17;
-Tbase TZ x7813 = x7811 >> x7812;
-Tbase TZ x7814 = x1788 * x7414;
-Tbase TZ x7815 = x1791 * x7413;
-Tbase TZ x7816 = x1794 * x7412;
-Tbase TZ x7817 = x1797 * x7411;
-Tbase TZ x7818 = x1800 * x7410;
-Tbase TZ x7819 = x1803 * x7409;
-Tbase TZ x7820 = x1806 * x7408;
-Tbase TZ x7821 = x1809 * x7407;
-Tbase TZ x7822 = x1812 * x7406;
-Tbase TZ x7823 = x1815 * x7405;
-Tbase TZ x7824 = x1818 * x7404;
-Tbase TZ x7825 = x7823 + x7824;
-Tbase TZ x7826 = x7822 + x7825;
-Tbase TZ x7827 = x7821 + x7826;
-Tbase TZ x7828 = x7820 + x7827;
-Tbase TZ x7829 = x7819 + x7828;
-Tbase TZ x7830 = x7818 + x7829;
-Tbase TZ x7831 = x7817 + x7830;
-Tbase TZ x7832 = x7816 + x7831;
-Tbase TZ x7833 = x7815 + x7832;
-Tbase TZ x7834 = x7814 + x7833;
-Tbase TZ x7835 = x1767 * x7403;
-Tbase TZ x7836 = x1770 * x7402;
-Tbase TZ x7837 = x1773 * x7401;
-Tbase TZ x7838 = x1776 * x7400;
-Tbase TZ x7839 = x1779 * x7399;
-Tbase TZ x7840 = x1782 * x7398;
-Tbase TZ x7841 = x1785 * x7397;
-Tbase TZ x7842 = x7840 + x7841;
-Tbase TZ x7843 = x7839 + x7842;
-Tbase TZ x7844 = x7838 + x7843;
-Tbase TZ x7845 = x7837 + x7844;
-Tbase TZ x7846 = x7836 + x7845;
-Tbase TZ x7847 = x7835 + x7846;
-Tbase TZ x7848 = 0x11;
-Tbase TZ x7849 = x7848 * x7847;
-Tbase TZ x7850 = x7834 + x7849;
-Tbase TZ x7851 = x7813 + x7850;
-Tbase TZ x7852 = 0x17;
-Tbase TZ x7853 = x7851 >> x7852;
-Tbase TZ x7854 = x1785 * x7414;
-Tbase TZ x7855 = x1788 * x7413;
-Tbase TZ x7856 = x1791 * x7412;
-Tbase TZ x7857 = x1794 * x7411;
-Tbase TZ x7858 = x1797 * x7410;
-Tbase TZ x7859 = x1800 * x7409;
-Tbase TZ x7860 = x1803 * x7408;
-Tbase TZ x7861 = x1806 * x7407;
-Tbase TZ x7862 = x1809 * x7406;
-Tbase TZ x7863 = x1812 * x7405;
-Tbase TZ x7864 = x1815 * x7404;
-Tbase TZ x7865 = x1818 * x7403;
-Tbase TZ x7866 = x7864 + x7865;
-Tbase TZ x7867 = x7863 + x7866;
-Tbase TZ x7868 = x7862 + x7867;
-Tbase TZ x7869 = x7861 + x7868;
-Tbase TZ x7870 = x7860 + x7869;
-Tbase TZ x7871 = x7859 + x7870;
-Tbase TZ x7872 = x7858 + x7871;
-Tbase TZ x7873 = x7857 + x7872;
-Tbase TZ x7874 = x7856 + x7873;
-Tbase TZ x7875 = x7855 + x7874;
-Tbase TZ x7876 = x7854 + x7875;
-Tbase TZ x7877 = x1767 * x7402;
-Tbase TZ x7878 = x1770 * x7401;
-Tbase TZ x7879 = x1773 * x7400;
-Tbase TZ x7880 = x1776 * x7399;
-Tbase TZ x7881 = x1779 * x7398;
-Tbase TZ x7882 = x1782 * x7397;
-Tbase TZ x7883 = x7881 + x7882;
-Tbase TZ x7884 = x7880 + x7883;
-Tbase TZ x7885 = x7879 + x7884;
-Tbase TZ x7886 = x7878 + x7885;
-Tbase TZ x7887 = x7877 + x7886;
-Tbase TZ x7888 = 0x11;
-Tbase TZ x7889 = x7888 * x7887;
-Tbase TZ x7890 = x7876 + x7889;
-Tbase TZ x7891 = x7853 + x7890;
-Tbase TZ x7892 = 0x17;
-Tbase TZ x7893 = x7891 >> x7892;
-Tbase TZ x7894 = x1782 * x7414;
-Tbase TZ x7895 = x1785 * x7413;
-Tbase TZ x7896 = x1788 * x7412;
-Tbase TZ x7897 = x1791 * x7411;
-Tbase TZ x7898 = x1794 * x7410;
-Tbase TZ x7899 = x1797 * x7409;
-Tbase TZ x7900 = x1800 * x7408;
-Tbase TZ x7901 = x1803 * x7407;
-Tbase TZ x7902 = x1806 * x7406;
-Tbase TZ x7903 = x1809 * x7405;
-Tbase TZ x7904 = x1812 * x7404;
-Tbase TZ x7905 = x1815 * x7403;
-Tbase TZ x7906 = x1818 * x7402;
-Tbase TZ x7907 = x7905 + x7906;
-Tbase TZ x7908 = x7904 + x7907;
-Tbase TZ x7909 = x7903 + x7908;
-Tbase TZ x7910 = x7902 + x7909;
-Tbase TZ x7911 = x7901 + x7910;
-Tbase TZ x7912 = x7900 + x7911;
-Tbase TZ x7913 = x7899 + x7912;
-Tbase TZ x7914 = x7898 + x7913;
-Tbase TZ x7915 = x7897 + x7914;
-Tbase TZ x7916 = x7896 + x7915;
-Tbase TZ x7917 = x7895 + x7916;
-Tbase TZ x7918 = x7894 + x7917;
-Tbase TZ x7919 = x1767 * x7401;
-Tbase TZ x7920 = x1770 * x7400;
-Tbase TZ x7921 = x1773 * x7399;
-Tbase TZ x7922 = x1776 * x7398;
-Tbase TZ x7923 = x1779 * x7397;
-Tbase TZ x7924 = x7922 + x7923;
-Tbase TZ x7925 = x7921 + x7924;
-Tbase TZ x7926 = x7920 + x7925;
-Tbase TZ x7927 = x7919 + x7926;
-Tbase TZ x7928 = 0x11;
-Tbase TZ x7929 = x7928 * x7927;
-Tbase TZ x7930 = x7918 + x7929;
-Tbase TZ x7931 = x7893 + x7930;
-Tbase TZ x7932 = 0x17;
-Tbase TZ x7933 = x7931 >> x7932;
-Tbase TZ x7934 = x1779 * x7414;
-Tbase TZ x7935 = x1782 * x7413;
-Tbase TZ x7936 = x1785 * x7412;
-Tbase TZ x7937 = x1788 * x7411;
-Tbase TZ x7938 = x1791 * x7410;
-Tbase TZ x7939 = x1794 * x7409;
-Tbase TZ x7940 = x1797 * x7408;
-Tbase TZ x7941 = x1800 * x7407;
-Tbase TZ x7942 = x1803 * x7406;
-Tbase TZ x7943 = x1806 * x7405;
-Tbase TZ x7944 = x1809 * x7404;
-Tbase TZ x7945 = x1812 * x7403;
-Tbase TZ x7946 = x1815 * x7402;
-Tbase TZ x7947 = x1818 * x7401;
-Tbase TZ x7948 = x7946 + x7947;
-Tbase TZ x7949 = x7945 + x7948;
-Tbase TZ x7950 = x7944 + x7949;
-Tbase TZ x7951 = x7943 + x7950;
-Tbase TZ x7952 = x7942 + x7951;
-Tbase TZ x7953 = x7941 + x7952;
-Tbase TZ x7954 = x7940 + x7953;
-Tbase TZ x7955 = x7939 + x7954;
-Tbase TZ x7956 = x7938 + x7955;
-Tbase TZ x7957 = x7937 + x7956;
-Tbase TZ x7958 = x7936 + x7957;
-Tbase TZ x7959 = x7935 + x7958;
-Tbase TZ x7960 = x7934 + x7959;
-Tbase TZ x7961 = x1767 * x7400;
-Tbase TZ x7962 = x1770 * x7399;
-Tbase TZ x7963 = x1773 * x7398;
-Tbase TZ x7964 = x1776 * x7397;
-Tbase TZ x7965 = x7963 + x7964;
-Tbase TZ x7966 = x7962 + x7965;
-Tbase TZ x7967 = x7961 + x7966;
-Tbase TZ x7968 = 0x11;
-Tbase TZ x7969 = x7968 * x7967;
-Tbase TZ x7970 = x7960 + x7969;
-Tbase TZ x7971 = x7933 + x7970;
-Tbase TZ x7972 = 0x17;
-Tbase TZ x7973 = x7971 >> x7972;
-Tbase TZ x7974 = x1776 * x7414;
-Tbase TZ x7975 = x1779 * x7413;
-Tbase TZ x7976 = x1782 * x7412;
-Tbase TZ x7977 = x1785 * x7411;
-Tbase TZ x7978 = x1788 * x7410;
-Tbase TZ x7979 = x1791 * x7409;
-Tbase TZ x7980 = x1794 * x7408;
-Tbase TZ x7981 = x1797 * x7407;
-Tbase TZ x7982 = x1800 * x7406;
-Tbase TZ x7983 = x1803 * x7405;
-Tbase TZ x7984 = x1806 * x7404;
-Tbase TZ x7985 = x1809 * x7403;
-Tbase TZ x7986 = x1812 * x7402;
-Tbase TZ x7987 = x1815 * x7401;
-Tbase TZ x7988 = x1818 * x7400;
-Tbase TZ x7989 = x7987 + x7988;
-Tbase TZ x7990 = x7986 + x7989;
-Tbase TZ x7991 = x7985 + x7990;
-Tbase TZ x7992 = x7984 + x7991;
-Tbase TZ x7993 = x7983 + x7992;
-Tbase TZ x7994 = x7982 + x7993;
-Tbase TZ x7995 = x7981 + x7994;
-Tbase TZ x7996 = x7980 + x7995;
-Tbase TZ x7997 = x7979 + x7996;
-Tbase TZ x7998 = x7978 + x7997;
-Tbase TZ x7999 = x7977 + x7998;
-Tbase TZ x8000 = x7976 + x7999;
-Tbase TZ x8001 = x7975 + x8000;
-Tbase TZ x8002 = x7974 + x8001;
-Tbase TZ x8003 = x1767 * x7399;
-Tbase TZ x8004 = x1770 * x7398;
-Tbase TZ x8005 = x1773 * x7397;
-Tbase TZ x8006 = x8004 + x8005;
-Tbase TZ x8007 = x8003 + x8006;
-Tbase TZ x8008 = 0x11;
-Tbase TZ x8009 = x8008 * x8007;
-Tbase TZ x8010 = x8002 + x8009;
-Tbase TZ x8011 = x7973 + x8010;
-Tbase TZ x8012 = 0x17;
-Tbase TZ x8013 = x8011 >> x8012;
-Tbase TZ x8014 = x1773 * x7414;
-Tbase TZ x8015 = x1776 * x7413;
-Tbase TZ x8016 = x1779 * x7412;
-Tbase TZ x8017 = x1782 * x7411;
-Tbase TZ x8018 = x1785 * x7410;
-Tbase TZ x8019 = x1788 * x7409;
-Tbase TZ x8020 = x1791 * x7408;
-Tbase TZ x8021 = x1794 * x7407;
-Tbase TZ x8022 = x1797 * x7406;
-Tbase TZ x8023 = x1800 * x7405;
-Tbase TZ x8024 = x1803 * x7404;
-Tbase TZ x8025 = x1806 * x7403;
-Tbase TZ x8026 = x1809 * x7402;
-Tbase TZ x8027 = x1812 * x7401;
-Tbase TZ x8028 = x1815 * x7400;
-Tbase TZ x8029 = x1818 * x7399;
-Tbase TZ x8030 = x8028 + x8029;
-Tbase TZ x8031 = x8027 + x8030;
-Tbase TZ x8032 = x8026 + x8031;
-Tbase TZ x8033 = x8025 + x8032;
-Tbase TZ x8034 = x8024 + x8033;
-Tbase TZ x8035 = x8023 + x8034;
-Tbase TZ x8036 = x8022 + x8035;
-Tbase TZ x8037 = x8021 + x8036;
-Tbase TZ x8038 = x8020 + x8037;
-Tbase TZ x8039 = x8019 + x8038;
-Tbase TZ x8040 = x8018 + x8039;
-Tbase TZ x8041 = x8017 + x8040;
-Tbase TZ x8042 = x8016 + x8041;
-Tbase TZ x8043 = x8015 + x8042;
-Tbase TZ x8044 = x8014 + x8043;
-Tbase TZ x8045 = x1767 * x7398;
-Tbase TZ x8046 = x1770 * x7397;
-Tbase TZ x8047 = x8045 + x8046;
-Tbase TZ x8048 = 0x11;
-Tbase TZ x8049 = x8048 * x8047;
-Tbase TZ x8050 = x8044 + x8049;
-Tbase TZ x8051 = x8013 + x8050;
-Tbase TZ x8052 = 0x17;
-Tbase TZ x8053 = x8051 >> x8052;
-Tbase TZ x8054 = x1770 * x7414;
-Tbase TZ x8055 = x1773 * x7413;
-Tbase TZ x8056 = x1776 * x7412;
-Tbase TZ x8057 = x1779 * x7411;
-Tbase TZ x8058 = x1782 * x7410;
-Tbase TZ x8059 = x1785 * x7409;
-Tbase TZ x8060 = x1788 * x7408;
-Tbase TZ x8061 = x1791 * x7407;
-Tbase TZ x8062 = x1794 * x7406;
-Tbase TZ x8063 = x1797 * x7405;
-Tbase TZ x8064 = x1800 * x7404;
-Tbase TZ x8065 = x1803 * x7403;
-Tbase TZ x8066 = x1806 * x7402;
-Tbase TZ x8067 = x1809 * x7401;
-Tbase TZ x8068 = x1812 * x7400;
-Tbase TZ x8069 = x1815 * x7399;
-Tbase TZ x8070 = x1818 * x7398;
-Tbase TZ x8071 = x8069 + x8070;
-Tbase TZ x8072 = x8068 + x8071;
-Tbase TZ x8073 = x8067 + x8072;
-Tbase TZ x8074 = x8066 + x8073;
-Tbase TZ x8075 = x8065 + x8074;
-Tbase TZ x8076 = x8064 + x8075;
-Tbase TZ x8077 = x8063 + x8076;
-Tbase TZ x8078 = x8062 + x8077;
-Tbase TZ x8079 = x8061 + x8078;
-Tbase TZ x8080 = x8060 + x8079;
-Tbase TZ x8081 = x8059 + x8080;
-Tbase TZ x8082 = x8058 + x8081;
-Tbase TZ x8083 = x8057 + x8082;
-Tbase TZ x8084 = x8056 + x8083;
-Tbase TZ x8085 = x8055 + x8084;
-Tbase TZ x8086 = x8054 + x8085;
-Tbase TZ x8087 = x1767 * x7397;
-Tbase TZ x8088 = 0x11;
-Tbase TZ x8089 = x8088 * x8087;
-Tbase TZ x8090 = x8086 + x8089;
-Tbase TZ x8091 = x8053 + x8090;
-Tbase TZ x8092 = 0x17;
-Tbase TZ x8093 = x8091 >> x8092;
-Tbase TZ x8094 = x1767 * x7414;
-Tbase TZ x8095 = x1770 * x7413;
-Tbase TZ x8096 = x1773 * x7412;
-Tbase TZ x8097 = x1776 * x7411;
-Tbase TZ x8098 = x1779 * x7410;
-Tbase TZ x8099 = x1782 * x7409;
-Tbase TZ x8100 = x1785 * x7408;
-Tbase TZ x8101 = x1788 * x7407;
-Tbase TZ x8102 = x1791 * x7406;
-Tbase TZ x8103 = x1794 * x7405;
-Tbase TZ x8104 = x1797 * x7404;
-Tbase TZ x8105 = x1800 * x7403;
-Tbase TZ x8106 = x1803 * x7402;
-Tbase TZ x8107 = x1806 * x7401;
-Tbase TZ x8108 = x1809 * x7400;
-Tbase TZ x8109 = x1812 * x7399;
-Tbase TZ x8110 = x1815 * x7398;
-Tbase TZ x8111 = x1818 * x7397;
-Tbase TZ x8112 = x8110 + x8111;
-Tbase TZ x8113 = x8109 + x8112;
-Tbase TZ x8114 = x8108 + x8113;
-Tbase TZ x8115 = x8107 + x8114;
-Tbase TZ x8116 = x8106 + x8115;
-Tbase TZ x8117 = x8105 + x8116;
-Tbase TZ x8118 = x8104 + x8117;
-Tbase TZ x8119 = x8103 + x8118;
-Tbase TZ x8120 = x8102 + x8119;
-Tbase TZ x8121 = x8101 + x8120;
-Tbase TZ x8122 = x8100 + x8121;
-Tbase TZ x8123 = x8099 + x8122;
-Tbase TZ x8124 = x8098 + x8123;
-Tbase TZ x8125 = x8097 + x8124;
-Tbase TZ x8126 = x8096 + x8125;
-Tbase TZ x8127 = x8095 + x8126;
-Tbase TZ x8128 = x8094 + x8127;
-Tbase TZ x8129 = x8093 + x8128;
-Tbase TZ x8130 = 0x17;
-Tbase TZ x8131 = x8129 >> x8130;
-Tbase TZ x8132 = 0x11;
-Tbase TZ x8133 = x8132 * x8131;
-Tbase TZ x8134 = 0x7fffff;
-Tbase TZ x8135 = x7451 & x8134;
-Tbase TZ x8136 = x8133 + x8135;
-Tbase TZ x8137 = 0x17;
-Tbase TZ x8138 = x8136 >> x8137;
-Tbase TZ x8139 = 0x7fffff;
-Tbase TZ x8140 = x7491 & x8139;
-Tbase TZ x8141 = x8138 + x8140;
-Tbase TZ x8142 = 0x7fffff;
-Tbase TZ x8143 = x8129 & x8142;
-Tbase TZ x8144 = 0x7fffff;
-Tbase TZ x8145 = x8091 & x8144;
-Tbase TZ x8146 = 0x7fffff;
-Tbase TZ x8147 = x8051 & x8146;
-Tbase TZ x8148 = 0x7fffff;
-Tbase TZ x8149 = x8011 & x8148;
-Tbase TZ x8150 = 0x7fffff;
-Tbase TZ x8151 = x7971 & x8150;
-Tbase TZ x8152 = 0x7fffff;
-Tbase TZ x8153 = x7931 & x8152;
-Tbase TZ x8154 = 0x7fffff;
-Tbase TZ x8155 = x7891 & x8154;
-Tbase TZ x8156 = 0x7fffff;
-Tbase TZ x8157 = x7851 & x8156;
-Tbase TZ x8158 = 0x7fffff;
-Tbase TZ x8159 = x7811 & x8158;
-Tbase TZ x8160 = 0x7fffff;
-Tbase TZ x8161 = x7771 & x8160;
-Tbase TZ x8162 = 0x7fffff;
-Tbase TZ x8163 = x7731 & x8162;
-Tbase TZ x8164 = 0x7fffff;
-Tbase TZ x8165 = x7691 & x8164;
-Tbase TZ x8166 = 0x7fffff;
-Tbase TZ x8167 = x7651 & x8166;
-Tbase TZ x8168 = 0x7fffff;
-Tbase TZ x8169 = x7611 & x8168;
-Tbase TZ x8170 = 0x7fffff;
-Tbase TZ x8171 = x7571 & x8170;
-Tbase TZ x8172 = 0x17;
-Tbase TZ x8173 = x8141 >> x8172;
-Tbase TZ x8174 = 0x7fffff;
-Tbase TZ x8175 = x7531 & x8174;
-Tbase TZ x8176 = x8173 + x8175;
-Tbase TZ x8177 = 0x7fffff;
-Tbase TZ x8178 = x8141 & x8177;
-Tbase TZ x8179 = 0x7fffff;
-Tbase TZ x8180 = x8136 & x8179;
-(Return x6593, Return x6595, Return x6597, Return x6599,
-Return x6601, Return x6603, Return x6605, Return x6607,
-Return x6609, Return x6611, Return x6613, Return x6615,
-Return x6617, Return x6619, Return x6621, Return x6626,
-Return x6628, Return x6630,
-(Return x8143, Return x8145, Return x8147, Return x8149,
-Return x8151, Return x8153, Return x8155, Return x8157,
-Return x8159, Return x8161, Return x8163, Return x8165,
-Return x8167, Return x8169, Return x8171, Return x8176,
-Return x8178, Return x8180),
-(Return x4187, Return x4189, Return x4191, Return x4193,
-Return x4195, Return x4197, Return x4199, Return x4201,
-Return x4203, Return x4205, Return x4207, Return x4209,
-Return x4211, Return x4213, Return x4215, Return x4220,
-Return x4222, Return x4224),
-(Return x5827, Return x5829, Return x5831, Return x5833,
-Return x5835, Return x5837, Return x5839, Return x5841,
-Return x5843, Return x5845, Return x5847, Return x5849,
-Return x5851, Return x5853, Return x5855, Return x5860,
-Return x5862, Return x5864))
- : forall var : base_type -> Type,
- expr base_type op
- (TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> ...)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF41417_32Reflective/Reified/LadderStepDisplay.v b/src/SpecificGen/GF41417_32Reflective/Reified/LadderStepDisplay.v
deleted file mode 100644
index 4d4666dee..000000000
--- a/src/SpecificGen/GF41417_32Reflective/Reified/LadderStepDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF41417_32Reflective.Reified.LadderStep.
-Require Export Crypto.Reflection.Z.CNotations.
-
-Print rladderstepW.
diff --git a/src/SpecificGen/GF41417_32Reflective/Reified/LadderStepJavaDisplay.log b/src/SpecificGen/GF41417_32Reflective/Reified/LadderStepJavaDisplay.log
deleted file mode 100644
index b63c685b5..000000000
--- a/src/SpecificGen/GF41417_32Reflective/Reified/LadderStepJavaDisplay.log
+++ /dev/null
@@ -1,8091 +0,0 @@
-rladderstepW =
-fun var : base_type -> Type =>
-λ
-_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ x53 x54 x55 x56 x57 x58 x59 x60 x61 x62 x63
- x64 x65 x66 x67 x68 x69 x70 x71 x72 x73 x74 x75 x76 x77 x78 x79 x80 x81 x82
- x83 x84 x85 x86 x87 x88 x89 x90 x91 x92 x93 x94 x95 x96 x97 x98 x99 x100
- x101 x102 x103 x104 x105 x106 x107 x108 x109 x110 x111 x112 x113 x114 x115
- x116 x117 x118 x119 x120 x121 x122 x123 x124 x125 x126 x127 x128 x129 x130
- x131 x132 x133 x134 x135 x136 x137 x138 x139 x140 x141 x142 x143 x144 x145
- x146 x147 x148 x149 x150 x151 x152 x153 x154 x155 x156 x157 x158 x159
- x160 : var TZ,
-Tbase TZ x161 = x89 + x107;
-Tbase TZ x162 = x90 + x108;
-Tbase TZ x163 = x91 + x109;
-Tbase TZ x164 = x92 + x110;
-Tbase TZ x165 = x93 + x111;
-Tbase TZ x166 = x94 + x112;
-Tbase TZ x167 = x95 + x113;
-Tbase TZ x168 = x96 + x114;
-Tbase TZ x169 = x97 + x115;
-Tbase TZ x170 = x98 + x116;
-Tbase TZ x171 = x99 + x117;
-Tbase TZ x172 = x100 + x118;
-Tbase TZ x173 = x101 + x119;
-Tbase TZ x174 = x102 + x120;
-Tbase TZ x175 = x103 + x121;
-Tbase TZ x176 = x104 + x122;
-Tbase TZ x177 = x105 + x123;
-Tbase TZ x178 = x106 + x124;
-Tbase TZ x179 = x178 * x178;
-Tbase TZ x180 = x161 * x177;
-Tbase TZ x181 = x162 * x176;
-Tbase TZ x182 = x163 * x175;
-Tbase TZ x183 = x164 * x174;
-Tbase TZ x184 = x165 * x173;
-Tbase TZ x185 = x166 * x172;
-Tbase TZ x186 = x167 * x171;
-Tbase TZ x187 = x168 * x170;
-Tbase TZ x188 = x169 * x169;
-Tbase TZ x189 = x170 * x168;
-Tbase TZ x190 = x171 * x167;
-Tbase TZ x191 = x172 * x166;
-Tbase TZ x192 = x173 * x165;
-Tbase TZ x193 = x174 * x164;
-Tbase TZ x194 = x175 * x163;
-Tbase TZ x195 = x176 * x162;
-Tbase TZ x196 = x177 * x161;
-Tbase TZ x197 = x195 + x196;
-Tbase TZ x198 = x194 + x197;
-Tbase TZ x199 = x193 + x198;
-Tbase TZ x200 = x192 + x199;
-Tbase TZ x201 = x191 + x200;
-Tbase TZ x202 = x190 + x201;
-Tbase TZ x203 = x189 + x202;
-Tbase TZ x204 = x188 + x203;
-Tbase TZ x205 = x187 + x204;
-Tbase TZ x206 = x186 + x205;
-Tbase TZ x207 = x185 + x206;
-Tbase TZ x208 = x184 + x207;
-Tbase TZ x209 = x183 + x208;
-Tbase TZ x210 = x182 + x209;
-Tbase TZ x211 = x181 + x210;
-Tbase TZ x212 = x180 + x211;
-Tbase TZ x213 = 0x11;
-Tbase TZ x214 = x213 * x212;
-Tbase TZ x215 = x179 + x214;
-Tbase TZ x216 = 0x17;
-Tbase TZ x217 = x215 >>> x216;
-Tbase TZ x218 = x177 * x178;
-Tbase TZ x219 = x178 * x177;
-Tbase TZ x220 = x218 + x219;
-Tbase TZ x221 = x161 * x176;
-Tbase TZ x222 = x162 * x175;
-Tbase TZ x223 = x163 * x174;
-Tbase TZ x224 = x164 * x173;
-Tbase TZ x225 = x165 * x172;
-Tbase TZ x226 = x166 * x171;
-Tbase TZ x227 = x167 * x170;
-Tbase TZ x228 = x168 * x169;
-Tbase TZ x229 = x169 * x168;
-Tbase TZ x230 = x170 * x167;
-Tbase TZ x231 = x171 * x166;
-Tbase TZ x232 = x172 * x165;
-Tbase TZ x233 = x173 * x164;
-Tbase TZ x234 = x174 * x163;
-Tbase TZ x235 = x175 * x162;
-Tbase TZ x236 = x176 * x161;
-Tbase TZ x237 = x235 + x236;
-Tbase TZ x238 = x234 + x237;
-Tbase TZ x239 = x233 + x238;
-Tbase TZ x240 = x232 + x239;
-Tbase TZ x241 = x231 + x240;
-Tbase TZ x242 = x230 + x241;
-Tbase TZ x243 = x229 + x242;
-Tbase TZ x244 = x228 + x243;
-Tbase TZ x245 = x227 + x244;
-Tbase TZ x246 = x226 + x245;
-Tbase TZ x247 = x225 + x246;
-Tbase TZ x248 = x224 + x247;
-Tbase TZ x249 = x223 + x248;
-Tbase TZ x250 = x222 + x249;
-Tbase TZ x251 = x221 + x250;
-Tbase TZ x252 = 0x11;
-Tbase TZ x253 = x252 * x251;
-Tbase TZ x254 = x220 + x253;
-Tbase TZ x255 = x217 + x254;
-Tbase TZ x256 = 0x17;
-Tbase TZ x257 = x255 >>> x256;
-Tbase TZ x258 = x176 * x178;
-Tbase TZ x259 = x177 * x177;
-Tbase TZ x260 = x178 * x176;
-Tbase TZ x261 = x259 + x260;
-Tbase TZ x262 = x258 + x261;
-Tbase TZ x263 = x161 * x175;
-Tbase TZ x264 = x162 * x174;
-Tbase TZ x265 = x163 * x173;
-Tbase TZ x266 = x164 * x172;
-Tbase TZ x267 = x165 * x171;
-Tbase TZ x268 = x166 * x170;
-Tbase TZ x269 = x167 * x169;
-Tbase TZ x270 = x168 * x168;
-Tbase TZ x271 = x169 * x167;
-Tbase TZ x272 = x170 * x166;
-Tbase TZ x273 = x171 * x165;
-Tbase TZ x274 = x172 * x164;
-Tbase TZ x275 = x173 * x163;
-Tbase TZ x276 = x174 * x162;
-Tbase TZ x277 = x175 * x161;
-Tbase TZ x278 = x276 + x277;
-Tbase TZ x279 = x275 + x278;
-Tbase TZ x280 = x274 + x279;
-Tbase TZ x281 = x273 + x280;
-Tbase TZ x282 = x272 + x281;
-Tbase TZ x283 = x271 + x282;
-Tbase TZ x284 = x270 + x283;
-Tbase TZ x285 = x269 + x284;
-Tbase TZ x286 = x268 + x285;
-Tbase TZ x287 = x267 + x286;
-Tbase TZ x288 = x266 + x287;
-Tbase TZ x289 = x265 + x288;
-Tbase TZ x290 = x264 + x289;
-Tbase TZ x291 = x263 + x290;
-Tbase TZ x292 = 0x11;
-Tbase TZ x293 = x292 * x291;
-Tbase TZ x294 = x262 + x293;
-Tbase TZ x295 = x257 + x294;
-Tbase TZ x296 = 0x17;
-Tbase TZ x297 = x295 >>> x296;
-Tbase TZ x298 = x175 * x178;
-Tbase TZ x299 = x176 * x177;
-Tbase TZ x300 = x177 * x176;
-Tbase TZ x301 = x178 * x175;
-Tbase TZ x302 = x300 + x301;
-Tbase TZ x303 = x299 + x302;
-Tbase TZ x304 = x298 + x303;
-Tbase TZ x305 = x161 * x174;
-Tbase TZ x306 = x162 * x173;
-Tbase TZ x307 = x163 * x172;
-Tbase TZ x308 = x164 * x171;
-Tbase TZ x309 = x165 * x170;
-Tbase TZ x310 = x166 * x169;
-Tbase TZ x311 = x167 * x168;
-Tbase TZ x312 = x168 * x167;
-Tbase TZ x313 = x169 * x166;
-Tbase TZ x314 = x170 * x165;
-Tbase TZ x315 = x171 * x164;
-Tbase TZ x316 = x172 * x163;
-Tbase TZ x317 = x173 * x162;
-Tbase TZ x318 = x174 * x161;
-Tbase TZ x319 = x317 + x318;
-Tbase TZ x320 = x316 + x319;
-Tbase TZ x321 = x315 + x320;
-Tbase TZ x322 = x314 + x321;
-Tbase TZ x323 = x313 + x322;
-Tbase TZ x324 = x312 + x323;
-Tbase TZ x325 = x311 + x324;
-Tbase TZ x326 = x310 + x325;
-Tbase TZ x327 = x309 + x326;
-Tbase TZ x328 = x308 + x327;
-Tbase TZ x329 = x307 + x328;
-Tbase TZ x330 = x306 + x329;
-Tbase TZ x331 = x305 + x330;
-Tbase TZ x332 = 0x11;
-Tbase TZ x333 = x332 * x331;
-Tbase TZ x334 = x304 + x333;
-Tbase TZ x335 = x297 + x334;
-Tbase TZ x336 = 0x17;
-Tbase TZ x337 = x335 >>> x336;
-Tbase TZ x338 = x174 * x178;
-Tbase TZ x339 = x175 * x177;
-Tbase TZ x340 = x176 * x176;
-Tbase TZ x341 = x177 * x175;
-Tbase TZ x342 = x178 * x174;
-Tbase TZ x343 = x341 + x342;
-Tbase TZ x344 = x340 + x343;
-Tbase TZ x345 = x339 + x344;
-Tbase TZ x346 = x338 + x345;
-Tbase TZ x347 = x161 * x173;
-Tbase TZ x348 = x162 * x172;
-Tbase TZ x349 = x163 * x171;
-Tbase TZ x350 = x164 * x170;
-Tbase TZ x351 = x165 * x169;
-Tbase TZ x352 = x166 * x168;
-Tbase TZ x353 = x167 * x167;
-Tbase TZ x354 = x168 * x166;
-Tbase TZ x355 = x169 * x165;
-Tbase TZ x356 = x170 * x164;
-Tbase TZ x357 = x171 * x163;
-Tbase TZ x358 = x172 * x162;
-Tbase TZ x359 = x173 * x161;
-Tbase TZ x360 = x358 + x359;
-Tbase TZ x361 = x357 + x360;
-Tbase TZ x362 = x356 + x361;
-Tbase TZ x363 = x355 + x362;
-Tbase TZ x364 = x354 + x363;
-Tbase TZ x365 = x353 + x364;
-Tbase TZ x366 = x352 + x365;
-Tbase TZ x367 = x351 + x366;
-Tbase TZ x368 = x350 + x367;
-Tbase TZ x369 = x349 + x368;
-Tbase TZ x370 = x348 + x369;
-Tbase TZ x371 = x347 + x370;
-Tbase TZ x372 = 0x11;
-Tbase TZ x373 = x372 * x371;
-Tbase TZ x374 = x346 + x373;
-Tbase TZ x375 = x337 + x374;
-Tbase TZ x376 = 0x17;
-Tbase TZ x377 = x375 >>> x376;
-Tbase TZ x378 = x173 * x178;
-Tbase TZ x379 = x174 * x177;
-Tbase TZ x380 = x175 * x176;
-Tbase TZ x381 = x176 * x175;
-Tbase TZ x382 = x177 * x174;
-Tbase TZ x383 = x178 * x173;
-Tbase TZ x384 = x382 + x383;
-Tbase TZ x385 = x381 + x384;
-Tbase TZ x386 = x380 + x385;
-Tbase TZ x387 = x379 + x386;
-Tbase TZ x388 = x378 + x387;
-Tbase TZ x389 = x161 * x172;
-Tbase TZ x390 = x162 * x171;
-Tbase TZ x391 = x163 * x170;
-Tbase TZ x392 = x164 * x169;
-Tbase TZ x393 = x165 * x168;
-Tbase TZ x394 = x166 * x167;
-Tbase TZ x395 = x167 * x166;
-Tbase TZ x396 = x168 * x165;
-Tbase TZ x397 = x169 * x164;
-Tbase TZ x398 = x170 * x163;
-Tbase TZ x399 = x171 * x162;
-Tbase TZ x400 = x172 * x161;
-Tbase TZ x401 = x399 + x400;
-Tbase TZ x402 = x398 + x401;
-Tbase TZ x403 = x397 + x402;
-Tbase TZ x404 = x396 + x403;
-Tbase TZ x405 = x395 + x404;
-Tbase TZ x406 = x394 + x405;
-Tbase TZ x407 = x393 + x406;
-Tbase TZ x408 = x392 + x407;
-Tbase TZ x409 = x391 + x408;
-Tbase TZ x410 = x390 + x409;
-Tbase TZ x411 = x389 + x410;
-Tbase TZ x412 = 0x11;
-Tbase TZ x413 = x412 * x411;
-Tbase TZ x414 = x388 + x413;
-Tbase TZ x415 = x377 + x414;
-Tbase TZ x416 = 0x17;
-Tbase TZ x417 = x415 >>> x416;
-Tbase TZ x418 = x172 * x178;
-Tbase TZ x419 = x173 * x177;
-Tbase TZ x420 = x174 * x176;
-Tbase TZ x421 = x175 * x175;
-Tbase TZ x422 = x176 * x174;
-Tbase TZ x423 = x177 * x173;
-Tbase TZ x424 = x178 * x172;
-Tbase TZ x425 = x423 + x424;
-Tbase TZ x426 = x422 + x425;
-Tbase TZ x427 = x421 + x426;
-Tbase TZ x428 = x420 + x427;
-Tbase TZ x429 = x419 + x428;
-Tbase TZ x430 = x418 + x429;
-Tbase TZ x431 = x161 * x171;
-Tbase TZ x432 = x162 * x170;
-Tbase TZ x433 = x163 * x169;
-Tbase TZ x434 = x164 * x168;
-Tbase TZ x435 = x165 * x167;
-Tbase TZ x436 = x166 * x166;
-Tbase TZ x437 = x167 * x165;
-Tbase TZ x438 = x168 * x164;
-Tbase TZ x439 = x169 * x163;
-Tbase TZ x440 = x170 * x162;
-Tbase TZ x441 = x171 * x161;
-Tbase TZ x442 = x440 + x441;
-Tbase TZ x443 = x439 + x442;
-Tbase TZ x444 = x438 + x443;
-Tbase TZ x445 = x437 + x444;
-Tbase TZ x446 = x436 + x445;
-Tbase TZ x447 = x435 + x446;
-Tbase TZ x448 = x434 + x447;
-Tbase TZ x449 = x433 + x448;
-Tbase TZ x450 = x432 + x449;
-Tbase TZ x451 = x431 + x450;
-Tbase TZ x452 = 0x11;
-Tbase TZ x453 = x452 * x451;
-Tbase TZ x454 = x430 + x453;
-Tbase TZ x455 = x417 + x454;
-Tbase TZ x456 = 0x17;
-Tbase TZ x457 = x455 >>> x456;
-Tbase TZ x458 = x171 * x178;
-Tbase TZ x459 = x172 * x177;
-Tbase TZ x460 = x173 * x176;
-Tbase TZ x461 = x174 * x175;
-Tbase TZ x462 = x175 * x174;
-Tbase TZ x463 = x176 * x173;
-Tbase TZ x464 = x177 * x172;
-Tbase TZ x465 = x178 * x171;
-Tbase TZ x466 = x464 + x465;
-Tbase TZ x467 = x463 + x466;
-Tbase TZ x468 = x462 + x467;
-Tbase TZ x469 = x461 + x468;
-Tbase TZ x470 = x460 + x469;
-Tbase TZ x471 = x459 + x470;
-Tbase TZ x472 = x458 + x471;
-Tbase TZ x473 = x161 * x170;
-Tbase TZ x474 = x162 * x169;
-Tbase TZ x475 = x163 * x168;
-Tbase TZ x476 = x164 * x167;
-Tbase TZ x477 = x165 * x166;
-Tbase TZ x478 = x166 * x165;
-Tbase TZ x479 = x167 * x164;
-Tbase TZ x480 = x168 * x163;
-Tbase TZ x481 = x169 * x162;
-Tbase TZ x482 = x170 * x161;
-Tbase TZ x483 = x481 + x482;
-Tbase TZ x484 = x480 + x483;
-Tbase TZ x485 = x479 + x484;
-Tbase TZ x486 = x478 + x485;
-Tbase TZ x487 = x477 + x486;
-Tbase TZ x488 = x476 + x487;
-Tbase TZ x489 = x475 + x488;
-Tbase TZ x490 = x474 + x489;
-Tbase TZ x491 = x473 + x490;
-Tbase TZ x492 = 0x11;
-Tbase TZ x493 = x492 * x491;
-Tbase TZ x494 = x472 + x493;
-Tbase TZ x495 = x457 + x494;
-Tbase TZ x496 = 0x17;
-Tbase TZ x497 = x495 >>> x496;
-Tbase TZ x498 = x170 * x178;
-Tbase TZ x499 = x171 * x177;
-Tbase TZ x500 = x172 * x176;
-Tbase TZ x501 = x173 * x175;
-Tbase TZ x502 = x174 * x174;
-Tbase TZ x503 = x175 * x173;
-Tbase TZ x504 = x176 * x172;
-Tbase TZ x505 = x177 * x171;
-Tbase TZ x506 = x178 * x170;
-Tbase TZ x507 = x505 + x506;
-Tbase TZ x508 = x504 + x507;
-Tbase TZ x509 = x503 + x508;
-Tbase TZ x510 = x502 + x509;
-Tbase TZ x511 = x501 + x510;
-Tbase TZ x512 = x500 + x511;
-Tbase TZ x513 = x499 + x512;
-Tbase TZ x514 = x498 + x513;
-Tbase TZ x515 = x161 * x169;
-Tbase TZ x516 = x162 * x168;
-Tbase TZ x517 = x163 * x167;
-Tbase TZ x518 = x164 * x166;
-Tbase TZ x519 = x165 * x165;
-Tbase TZ x520 = x166 * x164;
-Tbase TZ x521 = x167 * x163;
-Tbase TZ x522 = x168 * x162;
-Tbase TZ x523 = x169 * x161;
-Tbase TZ x524 = x522 + x523;
-Tbase TZ x525 = x521 + x524;
-Tbase TZ x526 = x520 + x525;
-Tbase TZ x527 = x519 + x526;
-Tbase TZ x528 = x518 + x527;
-Tbase TZ x529 = x517 + x528;
-Tbase TZ x530 = x516 + x529;
-Tbase TZ x531 = x515 + x530;
-Tbase TZ x532 = 0x11;
-Tbase TZ x533 = x532 * x531;
-Tbase TZ x534 = x514 + x533;
-Tbase TZ x535 = x497 + x534;
-Tbase TZ x536 = 0x17;
-Tbase TZ x537 = x535 >>> x536;
-Tbase TZ x538 = x169 * x178;
-Tbase TZ x539 = x170 * x177;
-Tbase TZ x540 = x171 * x176;
-Tbase TZ x541 = x172 * x175;
-Tbase TZ x542 = x173 * x174;
-Tbase TZ x543 = x174 * x173;
-Tbase TZ x544 = x175 * x172;
-Tbase TZ x545 = x176 * x171;
-Tbase TZ x546 = x177 * x170;
-Tbase TZ x547 = x178 * x169;
-Tbase TZ x548 = x546 + x547;
-Tbase TZ x549 = x545 + x548;
-Tbase TZ x550 = x544 + x549;
-Tbase TZ x551 = x543 + x550;
-Tbase TZ x552 = x542 + x551;
-Tbase TZ x553 = x541 + x552;
-Tbase TZ x554 = x540 + x553;
-Tbase TZ x555 = x539 + x554;
-Tbase TZ x556 = x538 + x555;
-Tbase TZ x557 = x161 * x168;
-Tbase TZ x558 = x162 * x167;
-Tbase TZ x559 = x163 * x166;
-Tbase TZ x560 = x164 * x165;
-Tbase TZ x561 = x165 * x164;
-Tbase TZ x562 = x166 * x163;
-Tbase TZ x563 = x167 * x162;
-Tbase TZ x564 = x168 * x161;
-Tbase TZ x565 = x563 + x564;
-Tbase TZ x566 = x562 + x565;
-Tbase TZ x567 = x561 + x566;
-Tbase TZ x568 = x560 + x567;
-Tbase TZ x569 = x559 + x568;
-Tbase TZ x570 = x558 + x569;
-Tbase TZ x571 = x557 + x570;
-Tbase TZ x572 = 0x11;
-Tbase TZ x573 = x572 * x571;
-Tbase TZ x574 = x556 + x573;
-Tbase TZ x575 = x537 + x574;
-Tbase TZ x576 = 0x17;
-Tbase TZ x577 = x575 >>> x576;
-Tbase TZ x578 = x168 * x178;
-Tbase TZ x579 = x169 * x177;
-Tbase TZ x580 = x170 * x176;
-Tbase TZ x581 = x171 * x175;
-Tbase TZ x582 = x172 * x174;
-Tbase TZ x583 = x173 * x173;
-Tbase TZ x584 = x174 * x172;
-Tbase TZ x585 = x175 * x171;
-Tbase TZ x586 = x176 * x170;
-Tbase TZ x587 = x177 * x169;
-Tbase TZ x588 = x178 * x168;
-Tbase TZ x589 = x587 + x588;
-Tbase TZ x590 = x586 + x589;
-Tbase TZ x591 = x585 + x590;
-Tbase TZ x592 = x584 + x591;
-Tbase TZ x593 = x583 + x592;
-Tbase TZ x594 = x582 + x593;
-Tbase TZ x595 = x581 + x594;
-Tbase TZ x596 = x580 + x595;
-Tbase TZ x597 = x579 + x596;
-Tbase TZ x598 = x578 + x597;
-Tbase TZ x599 = x161 * x167;
-Tbase TZ x600 = x162 * x166;
-Tbase TZ x601 = x163 * x165;
-Tbase TZ x602 = x164 * x164;
-Tbase TZ x603 = x165 * x163;
-Tbase TZ x604 = x166 * x162;
-Tbase TZ x605 = x167 * x161;
-Tbase TZ x606 = x604 + x605;
-Tbase TZ x607 = x603 + x606;
-Tbase TZ x608 = x602 + x607;
-Tbase TZ x609 = x601 + x608;
-Tbase TZ x610 = x600 + x609;
-Tbase TZ x611 = x599 + x610;
-Tbase TZ x612 = 0x11;
-Tbase TZ x613 = x612 * x611;
-Tbase TZ x614 = x598 + x613;
-Tbase TZ x615 = x577 + x614;
-Tbase TZ x616 = 0x17;
-Tbase TZ x617 = x615 >>> x616;
-Tbase TZ x618 = x167 * x178;
-Tbase TZ x619 = x168 * x177;
-Tbase TZ x620 = x169 * x176;
-Tbase TZ x621 = x170 * x175;
-Tbase TZ x622 = x171 * x174;
-Tbase TZ x623 = x172 * x173;
-Tbase TZ x624 = x173 * x172;
-Tbase TZ x625 = x174 * x171;
-Tbase TZ x626 = x175 * x170;
-Tbase TZ x627 = x176 * x169;
-Tbase TZ x628 = x177 * x168;
-Tbase TZ x629 = x178 * x167;
-Tbase TZ x630 = x628 + x629;
-Tbase TZ x631 = x627 + x630;
-Tbase TZ x632 = x626 + x631;
-Tbase TZ x633 = x625 + x632;
-Tbase TZ x634 = x624 + x633;
-Tbase TZ x635 = x623 + x634;
-Tbase TZ x636 = x622 + x635;
-Tbase TZ x637 = x621 + x636;
-Tbase TZ x638 = x620 + x637;
-Tbase TZ x639 = x619 + x638;
-Tbase TZ x640 = x618 + x639;
-Tbase TZ x641 = x161 * x166;
-Tbase TZ x642 = x162 * x165;
-Tbase TZ x643 = x163 * x164;
-Tbase TZ x644 = x164 * x163;
-Tbase TZ x645 = x165 * x162;
-Tbase TZ x646 = x166 * x161;
-Tbase TZ x647 = x645 + x646;
-Tbase TZ x648 = x644 + x647;
-Tbase TZ x649 = x643 + x648;
-Tbase TZ x650 = x642 + x649;
-Tbase TZ x651 = x641 + x650;
-Tbase TZ x652 = 0x11;
-Tbase TZ x653 = x652 * x651;
-Tbase TZ x654 = x640 + x653;
-Tbase TZ x655 = x617 + x654;
-Tbase TZ x656 = 0x17;
-Tbase TZ x657 = x655 >>> x656;
-Tbase TZ x658 = x166 * x178;
-Tbase TZ x659 = x167 * x177;
-Tbase TZ x660 = x168 * x176;
-Tbase TZ x661 = x169 * x175;
-Tbase TZ x662 = x170 * x174;
-Tbase TZ x663 = x171 * x173;
-Tbase TZ x664 = x172 * x172;
-Tbase TZ x665 = x173 * x171;
-Tbase TZ x666 = x174 * x170;
-Tbase TZ x667 = x175 * x169;
-Tbase TZ x668 = x176 * x168;
-Tbase TZ x669 = x177 * x167;
-Tbase TZ x670 = x178 * x166;
-Tbase TZ x671 = x669 + x670;
-Tbase TZ x672 = x668 + x671;
-Tbase TZ x673 = x667 + x672;
-Tbase TZ x674 = x666 + x673;
-Tbase TZ x675 = x665 + x674;
-Tbase TZ x676 = x664 + x675;
-Tbase TZ x677 = x663 + x676;
-Tbase TZ x678 = x662 + x677;
-Tbase TZ x679 = x661 + x678;
-Tbase TZ x680 = x660 + x679;
-Tbase TZ x681 = x659 + x680;
-Tbase TZ x682 = x658 + x681;
-Tbase TZ x683 = x161 * x165;
-Tbase TZ x684 = x162 * x164;
-Tbase TZ x685 = x163 * x163;
-Tbase TZ x686 = x164 * x162;
-Tbase TZ x687 = x165 * x161;
-Tbase TZ x688 = x686 + x687;
-Tbase TZ x689 = x685 + x688;
-Tbase TZ x690 = x684 + x689;
-Tbase TZ x691 = x683 + x690;
-Tbase TZ x692 = 0x11;
-Tbase TZ x693 = x692 * x691;
-Tbase TZ x694 = x682 + x693;
-Tbase TZ x695 = x657 + x694;
-Tbase TZ x696 = 0x17;
-Tbase TZ x697 = x695 >>> x696;
-Tbase TZ x698 = x165 * x178;
-Tbase TZ x699 = x166 * x177;
-Tbase TZ x700 = x167 * x176;
-Tbase TZ x701 = x168 * x175;
-Tbase TZ x702 = x169 * x174;
-Tbase TZ x703 = x170 * x173;
-Tbase TZ x704 = x171 * x172;
-Tbase TZ x705 = x172 * x171;
-Tbase TZ x706 = x173 * x170;
-Tbase TZ x707 = x174 * x169;
-Tbase TZ x708 = x175 * x168;
-Tbase TZ x709 = x176 * x167;
-Tbase TZ x710 = x177 * x166;
-Tbase TZ x711 = x178 * x165;
-Tbase TZ x712 = x710 + x711;
-Tbase TZ x713 = x709 + x712;
-Tbase TZ x714 = x708 + x713;
-Tbase TZ x715 = x707 + x714;
-Tbase TZ x716 = x706 + x715;
-Tbase TZ x717 = x705 + x716;
-Tbase TZ x718 = x704 + x717;
-Tbase TZ x719 = x703 + x718;
-Tbase TZ x720 = x702 + x719;
-Tbase TZ x721 = x701 + x720;
-Tbase TZ x722 = x700 + x721;
-Tbase TZ x723 = x699 + x722;
-Tbase TZ x724 = x698 + x723;
-Tbase TZ x725 = x161 * x164;
-Tbase TZ x726 = x162 * x163;
-Tbase TZ x727 = x163 * x162;
-Tbase TZ x728 = x164 * x161;
-Tbase TZ x729 = x727 + x728;
-Tbase TZ x730 = x726 + x729;
-Tbase TZ x731 = x725 + x730;
-Tbase TZ x732 = 0x11;
-Tbase TZ x733 = x732 * x731;
-Tbase TZ x734 = x724 + x733;
-Tbase TZ x735 = x697 + x734;
-Tbase TZ x736 = 0x17;
-Tbase TZ x737 = x735 >>> x736;
-Tbase TZ x738 = x164 * x178;
-Tbase TZ x739 = x165 * x177;
-Tbase TZ x740 = x166 * x176;
-Tbase TZ x741 = x167 * x175;
-Tbase TZ x742 = x168 * x174;
-Tbase TZ x743 = x169 * x173;
-Tbase TZ x744 = x170 * x172;
-Tbase TZ x745 = x171 * x171;
-Tbase TZ x746 = x172 * x170;
-Tbase TZ x747 = x173 * x169;
-Tbase TZ x748 = x174 * x168;
-Tbase TZ x749 = x175 * x167;
-Tbase TZ x750 = x176 * x166;
-Tbase TZ x751 = x177 * x165;
-Tbase TZ x752 = x178 * x164;
-Tbase TZ x753 = x751 + x752;
-Tbase TZ x754 = x750 + x753;
-Tbase TZ x755 = x749 + x754;
-Tbase TZ x756 = x748 + x755;
-Tbase TZ x757 = x747 + x756;
-Tbase TZ x758 = x746 + x757;
-Tbase TZ x759 = x745 + x758;
-Tbase TZ x760 = x744 + x759;
-Tbase TZ x761 = x743 + x760;
-Tbase TZ x762 = x742 + x761;
-Tbase TZ x763 = x741 + x762;
-Tbase TZ x764 = x740 + x763;
-Tbase TZ x765 = x739 + x764;
-Tbase TZ x766 = x738 + x765;
-Tbase TZ x767 = x161 * x163;
-Tbase TZ x768 = x162 * x162;
-Tbase TZ x769 = x163 * x161;
-Tbase TZ x770 = x768 + x769;
-Tbase TZ x771 = x767 + x770;
-Tbase TZ x772 = 0x11;
-Tbase TZ x773 = x772 * x771;
-Tbase TZ x774 = x766 + x773;
-Tbase TZ x775 = x737 + x774;
-Tbase TZ x776 = 0x17;
-Tbase TZ x777 = x775 >>> x776;
-Tbase TZ x778 = x163 * x178;
-Tbase TZ x779 = x164 * x177;
-Tbase TZ x780 = x165 * x176;
-Tbase TZ x781 = x166 * x175;
-Tbase TZ x782 = x167 * x174;
-Tbase TZ x783 = x168 * x173;
-Tbase TZ x784 = x169 * x172;
-Tbase TZ x785 = x170 * x171;
-Tbase TZ x786 = x171 * x170;
-Tbase TZ x787 = x172 * x169;
-Tbase TZ x788 = x173 * x168;
-Tbase TZ x789 = x174 * x167;
-Tbase TZ x790 = x175 * x166;
-Tbase TZ x791 = x176 * x165;
-Tbase TZ x792 = x177 * x164;
-Tbase TZ x793 = x178 * x163;
-Tbase TZ x794 = x792 + x793;
-Tbase TZ x795 = x791 + x794;
-Tbase TZ x796 = x790 + x795;
-Tbase TZ x797 = x789 + x796;
-Tbase TZ x798 = x788 + x797;
-Tbase TZ x799 = x787 + x798;
-Tbase TZ x800 = x786 + x799;
-Tbase TZ x801 = x785 + x800;
-Tbase TZ x802 = x784 + x801;
-Tbase TZ x803 = x783 + x802;
-Tbase TZ x804 = x782 + x803;
-Tbase TZ x805 = x781 + x804;
-Tbase TZ x806 = x780 + x805;
-Tbase TZ x807 = x779 + x806;
-Tbase TZ x808 = x778 + x807;
-Tbase TZ x809 = x161 * x162;
-Tbase TZ x810 = x162 * x161;
-Tbase TZ x811 = x809 + x810;
-Tbase TZ x812 = 0x11;
-Tbase TZ x813 = x812 * x811;
-Tbase TZ x814 = x808 + x813;
-Tbase TZ x815 = x777 + x814;
-Tbase TZ x816 = 0x17;
-Tbase TZ x817 = x815 >>> x816;
-Tbase TZ x818 = x162 * x178;
-Tbase TZ x819 = x163 * x177;
-Tbase TZ x820 = x164 * x176;
-Tbase TZ x821 = x165 * x175;
-Tbase TZ x822 = x166 * x174;
-Tbase TZ x823 = x167 * x173;
-Tbase TZ x824 = x168 * x172;
-Tbase TZ x825 = x169 * x171;
-Tbase TZ x826 = x170 * x170;
-Tbase TZ x827 = x171 * x169;
-Tbase TZ x828 = x172 * x168;
-Tbase TZ x829 = x173 * x167;
-Tbase TZ x830 = x174 * x166;
-Tbase TZ x831 = x175 * x165;
-Tbase TZ x832 = x176 * x164;
-Tbase TZ x833 = x177 * x163;
-Tbase TZ x834 = x178 * x162;
-Tbase TZ x835 = x833 + x834;
-Tbase TZ x836 = x832 + x835;
-Tbase TZ x837 = x831 + x836;
-Tbase TZ x838 = x830 + x837;
-Tbase TZ x839 = x829 + x838;
-Tbase TZ x840 = x828 + x839;
-Tbase TZ x841 = x827 + x840;
-Tbase TZ x842 = x826 + x841;
-Tbase TZ x843 = x825 + x842;
-Tbase TZ x844 = x824 + x843;
-Tbase TZ x845 = x823 + x844;
-Tbase TZ x846 = x822 + x845;
-Tbase TZ x847 = x821 + x846;
-Tbase TZ x848 = x820 + x847;
-Tbase TZ x849 = x819 + x848;
-Tbase TZ x850 = x818 + x849;
-Tbase TZ x851 = x161 * x161;
-Tbase TZ x852 = 0x11;
-Tbase TZ x853 = x852 * x851;
-Tbase TZ x854 = x850 + x853;
-Tbase TZ x855 = x817 + x854;
-Tbase TZ x856 = 0x17;
-Tbase TZ x857 = x855 >>> x856;
-Tbase TZ x858 = x161 * x178;
-Tbase TZ x859 = x162 * x177;
-Tbase TZ x860 = x163 * x176;
-Tbase TZ x861 = x164 * x175;
-Tbase TZ x862 = x165 * x174;
-Tbase TZ x863 = x166 * x173;
-Tbase TZ x864 = x167 * x172;
-Tbase TZ x865 = x168 * x171;
-Tbase TZ x866 = x169 * x170;
-Tbase TZ x867 = x170 * x169;
-Tbase TZ x868 = x171 * x168;
-Tbase TZ x869 = x172 * x167;
-Tbase TZ x870 = x173 * x166;
-Tbase TZ x871 = x174 * x165;
-Tbase TZ x872 = x175 * x164;
-Tbase TZ x873 = x176 * x163;
-Tbase TZ x874 = x177 * x162;
-Tbase TZ x875 = x178 * x161;
-Tbase TZ x876 = x874 + x875;
-Tbase TZ x877 = x873 + x876;
-Tbase TZ x878 = x872 + x877;
-Tbase TZ x879 = x871 + x878;
-Tbase TZ x880 = x870 + x879;
-Tbase TZ x881 = x869 + x880;
-Tbase TZ x882 = x868 + x881;
-Tbase TZ x883 = x867 + x882;
-Tbase TZ x884 = x866 + x883;
-Tbase TZ x885 = x865 + x884;
-Tbase TZ x886 = x864 + x885;
-Tbase TZ x887 = x863 + x886;
-Tbase TZ x888 = x862 + x887;
-Tbase TZ x889 = x861 + x888;
-Tbase TZ x890 = x860 + x889;
-Tbase TZ x891 = x859 + x890;
-Tbase TZ x892 = x858 + x891;
-Tbase TZ x893 = x857 + x892;
-Tbase TZ x894 = 0x17;
-Tbase TZ x895 = x893 >>> x894;
-Tbase TZ x896 = 0x11;
-Tbase TZ x897 = x896 * x895;
-Tbase TZ x898 = 0x7fffff;
-Tbase TZ x899 = x215 & x898;
-Tbase TZ x900 = x897 + x899;
-Tbase TZ x901 = 0x17;
-Tbase TZ x902 = x900 >>> x901;
-Tbase TZ x903 = 0x7fffff;
-Tbase TZ x904 = x255 & x903;
-Tbase TZ x905 = x902 + x904;
-Tbase TZ x906 = 0x7fffff;
-Tbase TZ x907 = x893 & x906;
-Tbase TZ x908 = 0x7fffff;
-Tbase TZ x909 = x855 & x908;
-Tbase TZ x910 = 0x7fffff;
-Tbase TZ x911 = x815 & x910;
-Tbase TZ x912 = 0x7fffff;
-Tbase TZ x913 = x775 & x912;
-Tbase TZ x914 = 0x7fffff;
-Tbase TZ x915 = x735 & x914;
-Tbase TZ x916 = 0x7fffff;
-Tbase TZ x917 = x695 & x916;
-Tbase TZ x918 = 0x7fffff;
-Tbase TZ x919 = x655 & x918;
-Tbase TZ x920 = 0x7fffff;
-Tbase TZ x921 = x615 & x920;
-Tbase TZ x922 = 0x7fffff;
-Tbase TZ x923 = x575 & x922;
-Tbase TZ x924 = 0x7fffff;
-Tbase TZ x925 = x535 & x924;
-Tbase TZ x926 = 0x7fffff;
-Tbase TZ x927 = x495 & x926;
-Tbase TZ x928 = 0x7fffff;
-Tbase TZ x929 = x455 & x928;
-Tbase TZ x930 = 0x7fffff;
-Tbase TZ x931 = x415 & x930;
-Tbase TZ x932 = 0x7fffff;
-Tbase TZ x933 = x375 & x932;
-Tbase TZ x934 = 0x7fffff;
-Tbase TZ x935 = x335 & x934;
-Tbase TZ x936 = 0x17;
-Tbase TZ x937 = x905 >>> x936;
-Tbase TZ x938 = 0x7fffff;
-Tbase TZ x939 = x295 & x938;
-Tbase TZ x940 = x937 + x939;
-Tbase TZ x941 = 0x7fffff;
-Tbase TZ x942 = x905 & x941;
-Tbase TZ x943 = 0x7fffff;
-Tbase TZ x944 = x900 & x943;
-Tbase TZ x945 = Const 16777214;
-Tbase TZ x946 = x945 + x89;
-Tbase TZ x947 = x946 - x107;
-Tbase TZ x948 = Const 16777214;
-Tbase TZ x949 = x948 + x90;
-Tbase TZ x950 = x949 - x108;
-Tbase TZ x951 = Const 16777214;
-Tbase TZ x952 = x951 + x91;
-Tbase TZ x953 = x952 - x109;
-Tbase TZ x954 = Const 16777214;
-Tbase TZ x955 = x954 + x92;
-Tbase TZ x956 = x955 - x110;
-Tbase TZ x957 = Const 16777214;
-Tbase TZ x958 = x957 + x93;
-Tbase TZ x959 = x958 - x111;
-Tbase TZ x960 = Const 16777214;
-Tbase TZ x961 = x960 + x94;
-Tbase TZ x962 = x961 - x112;
-Tbase TZ x963 = Const 16777214;
-Tbase TZ x964 = x963 + x95;
-Tbase TZ x965 = x964 - x113;
-Tbase TZ x966 = Const 16777214;
-Tbase TZ x967 = x966 + x96;
-Tbase TZ x968 = x967 - x114;
-Tbase TZ x969 = Const 16777214;
-Tbase TZ x970 = x969 + x97;
-Tbase TZ x971 = x970 - x115;
-Tbase TZ x972 = Const 16777214;
-Tbase TZ x973 = x972 + x98;
-Tbase TZ x974 = x973 - x116;
-Tbase TZ x975 = Const 16777214;
-Tbase TZ x976 = x975 + x99;
-Tbase TZ x977 = x976 - x117;
-Tbase TZ x978 = Const 16777214;
-Tbase TZ x979 = x978 + x100;
-Tbase TZ x980 = x979 - x118;
-Tbase TZ x981 = Const 16777214;
-Tbase TZ x982 = x981 + x101;
-Tbase TZ x983 = x982 - x119;
-Tbase TZ x984 = Const 16777214;
-Tbase TZ x985 = x984 + x102;
-Tbase TZ x986 = x985 - x120;
-Tbase TZ x987 = Const 16777214;
-Tbase TZ x988 = x987 + x103;
-Tbase TZ x989 = x988 - x121;
-Tbase TZ x990 = Const 16777214;
-Tbase TZ x991 = x990 + x104;
-Tbase TZ x992 = x991 - x122;
-Tbase TZ x993 = Const 16777214;
-Tbase TZ x994 = x993 + x105;
-Tbase TZ x995 = x994 - x123;
-Tbase TZ x996 = Const 16777182;
-Tbase TZ x997 = x996 + x106;
-Tbase TZ x998 = x997 - x124;
-Tbase TZ x999 = x998 * x998;
-Tbase TZ x1000 = x947 * x995;
-Tbase TZ x1001 = x950 * x992;
-Tbase TZ x1002 = x953 * x989;
-Tbase TZ x1003 = x956 * x986;
-Tbase TZ x1004 = x959 * x983;
-Tbase TZ x1005 = x962 * x980;
-Tbase TZ x1006 = x965 * x977;
-Tbase TZ x1007 = x968 * x974;
-Tbase TZ x1008 = x971 * x971;
-Tbase TZ x1009 = x974 * x968;
-Tbase TZ x1010 = x977 * x965;
-Tbase TZ x1011 = x980 * x962;
-Tbase TZ x1012 = x983 * x959;
-Tbase TZ x1013 = x986 * x956;
-Tbase TZ x1014 = x989 * x953;
-Tbase TZ x1015 = x992 * x950;
-Tbase TZ x1016 = x995 * x947;
-Tbase TZ x1017 = x1015 + x1016;
-Tbase TZ x1018 = x1014 + x1017;
-Tbase TZ x1019 = x1013 + x1018;
-Tbase TZ x1020 = x1012 + x1019;
-Tbase TZ x1021 = x1011 + x1020;
-Tbase TZ x1022 = x1010 + x1021;
-Tbase TZ x1023 = x1009 + x1022;
-Tbase TZ x1024 = x1008 + x1023;
-Tbase TZ x1025 = x1007 + x1024;
-Tbase TZ x1026 = x1006 + x1025;
-Tbase TZ x1027 = x1005 + x1026;
-Tbase TZ x1028 = x1004 + x1027;
-Tbase TZ x1029 = x1003 + x1028;
-Tbase TZ x1030 = x1002 + x1029;
-Tbase TZ x1031 = x1001 + x1030;
-Tbase TZ x1032 = x1000 + x1031;
-Tbase TZ x1033 = 0x11;
-Tbase TZ x1034 = x1033 * x1032;
-Tbase TZ x1035 = x999 + x1034;
-Tbase TZ x1036 = 0x17;
-Tbase TZ x1037 = x1035 >>> x1036;
-Tbase TZ x1038 = x995 * x998;
-Tbase TZ x1039 = x998 * x995;
-Tbase TZ x1040 = x1038 + x1039;
-Tbase TZ x1041 = x947 * x992;
-Tbase TZ x1042 = x950 * x989;
-Tbase TZ x1043 = x953 * x986;
-Tbase TZ x1044 = x956 * x983;
-Tbase TZ x1045 = x959 * x980;
-Tbase TZ x1046 = x962 * x977;
-Tbase TZ x1047 = x965 * x974;
-Tbase TZ x1048 = x968 * x971;
-Tbase TZ x1049 = x971 * x968;
-Tbase TZ x1050 = x974 * x965;
-Tbase TZ x1051 = x977 * x962;
-Tbase TZ x1052 = x980 * x959;
-Tbase TZ x1053 = x983 * x956;
-Tbase TZ x1054 = x986 * x953;
-Tbase TZ x1055 = x989 * x950;
-Tbase TZ x1056 = x992 * x947;
-Tbase TZ x1057 = x1055 + x1056;
-Tbase TZ x1058 = x1054 + x1057;
-Tbase TZ x1059 = x1053 + x1058;
-Tbase TZ x1060 = x1052 + x1059;
-Tbase TZ x1061 = x1051 + x1060;
-Tbase TZ x1062 = x1050 + x1061;
-Tbase TZ x1063 = x1049 + x1062;
-Tbase TZ x1064 = x1048 + x1063;
-Tbase TZ x1065 = x1047 + x1064;
-Tbase TZ x1066 = x1046 + x1065;
-Tbase TZ x1067 = x1045 + x1066;
-Tbase TZ x1068 = x1044 + x1067;
-Tbase TZ x1069 = x1043 + x1068;
-Tbase TZ x1070 = x1042 + x1069;
-Tbase TZ x1071 = x1041 + x1070;
-Tbase TZ x1072 = 0x11;
-Tbase TZ x1073 = x1072 * x1071;
-Tbase TZ x1074 = x1040 + x1073;
-Tbase TZ x1075 = x1037 + x1074;
-Tbase TZ x1076 = 0x17;
-Tbase TZ x1077 = x1075 >>> x1076;
-Tbase TZ x1078 = x992 * x998;
-Tbase TZ x1079 = x995 * x995;
-Tbase TZ x1080 = x998 * x992;
-Tbase TZ x1081 = x1079 + x1080;
-Tbase TZ x1082 = x1078 + x1081;
-Tbase TZ x1083 = x947 * x989;
-Tbase TZ x1084 = x950 * x986;
-Tbase TZ x1085 = x953 * x983;
-Tbase TZ x1086 = x956 * x980;
-Tbase TZ x1087 = x959 * x977;
-Tbase TZ x1088 = x962 * x974;
-Tbase TZ x1089 = x965 * x971;
-Tbase TZ x1090 = x968 * x968;
-Tbase TZ x1091 = x971 * x965;
-Tbase TZ x1092 = x974 * x962;
-Tbase TZ x1093 = x977 * x959;
-Tbase TZ x1094 = x980 * x956;
-Tbase TZ x1095 = x983 * x953;
-Tbase TZ x1096 = x986 * x950;
-Tbase TZ x1097 = x989 * x947;
-Tbase TZ x1098 = x1096 + x1097;
-Tbase TZ x1099 = x1095 + x1098;
-Tbase TZ x1100 = x1094 + x1099;
-Tbase TZ x1101 = x1093 + x1100;
-Tbase TZ x1102 = x1092 + x1101;
-Tbase TZ x1103 = x1091 + x1102;
-Tbase TZ x1104 = x1090 + x1103;
-Tbase TZ x1105 = x1089 + x1104;
-Tbase TZ x1106 = x1088 + x1105;
-Tbase TZ x1107 = x1087 + x1106;
-Tbase TZ x1108 = x1086 + x1107;
-Tbase TZ x1109 = x1085 + x1108;
-Tbase TZ x1110 = x1084 + x1109;
-Tbase TZ x1111 = x1083 + x1110;
-Tbase TZ x1112 = 0x11;
-Tbase TZ x1113 = x1112 * x1111;
-Tbase TZ x1114 = x1082 + x1113;
-Tbase TZ x1115 = x1077 + x1114;
-Tbase TZ x1116 = 0x17;
-Tbase TZ x1117 = x1115 >>> x1116;
-Tbase TZ x1118 = x989 * x998;
-Tbase TZ x1119 = x992 * x995;
-Tbase TZ x1120 = x995 * x992;
-Tbase TZ x1121 = x998 * x989;
-Tbase TZ x1122 = x1120 + x1121;
-Tbase TZ x1123 = x1119 + x1122;
-Tbase TZ x1124 = x1118 + x1123;
-Tbase TZ x1125 = x947 * x986;
-Tbase TZ x1126 = x950 * x983;
-Tbase TZ x1127 = x953 * x980;
-Tbase TZ x1128 = x956 * x977;
-Tbase TZ x1129 = x959 * x974;
-Tbase TZ x1130 = x962 * x971;
-Tbase TZ x1131 = x965 * x968;
-Tbase TZ x1132 = x968 * x965;
-Tbase TZ x1133 = x971 * x962;
-Tbase TZ x1134 = x974 * x959;
-Tbase TZ x1135 = x977 * x956;
-Tbase TZ x1136 = x980 * x953;
-Tbase TZ x1137 = x983 * x950;
-Tbase TZ x1138 = x986 * x947;
-Tbase TZ x1139 = x1137 + x1138;
-Tbase TZ x1140 = x1136 + x1139;
-Tbase TZ x1141 = x1135 + x1140;
-Tbase TZ x1142 = x1134 + x1141;
-Tbase TZ x1143 = x1133 + x1142;
-Tbase TZ x1144 = x1132 + x1143;
-Tbase TZ x1145 = x1131 + x1144;
-Tbase TZ x1146 = x1130 + x1145;
-Tbase TZ x1147 = x1129 + x1146;
-Tbase TZ x1148 = x1128 + x1147;
-Tbase TZ x1149 = x1127 + x1148;
-Tbase TZ x1150 = x1126 + x1149;
-Tbase TZ x1151 = x1125 + x1150;
-Tbase TZ x1152 = 0x11;
-Tbase TZ x1153 = x1152 * x1151;
-Tbase TZ x1154 = x1124 + x1153;
-Tbase TZ x1155 = x1117 + x1154;
-Tbase TZ x1156 = 0x17;
-Tbase TZ x1157 = x1155 >>> x1156;
-Tbase TZ x1158 = x986 * x998;
-Tbase TZ x1159 = x989 * x995;
-Tbase TZ x1160 = x992 * x992;
-Tbase TZ x1161 = x995 * x989;
-Tbase TZ x1162 = x998 * x986;
-Tbase TZ x1163 = x1161 + x1162;
-Tbase TZ x1164 = x1160 + x1163;
-Tbase TZ x1165 = x1159 + x1164;
-Tbase TZ x1166 = x1158 + x1165;
-Tbase TZ x1167 = x947 * x983;
-Tbase TZ x1168 = x950 * x980;
-Tbase TZ x1169 = x953 * x977;
-Tbase TZ x1170 = x956 * x974;
-Tbase TZ x1171 = x959 * x971;
-Tbase TZ x1172 = x962 * x968;
-Tbase TZ x1173 = x965 * x965;
-Tbase TZ x1174 = x968 * x962;
-Tbase TZ x1175 = x971 * x959;
-Tbase TZ x1176 = x974 * x956;
-Tbase TZ x1177 = x977 * x953;
-Tbase TZ x1178 = x980 * x950;
-Tbase TZ x1179 = x983 * x947;
-Tbase TZ x1180 = x1178 + x1179;
-Tbase TZ x1181 = x1177 + x1180;
-Tbase TZ x1182 = x1176 + x1181;
-Tbase TZ x1183 = x1175 + x1182;
-Tbase TZ x1184 = x1174 + x1183;
-Tbase TZ x1185 = x1173 + x1184;
-Tbase TZ x1186 = x1172 + x1185;
-Tbase TZ x1187 = x1171 + x1186;
-Tbase TZ x1188 = x1170 + x1187;
-Tbase TZ x1189 = x1169 + x1188;
-Tbase TZ x1190 = x1168 + x1189;
-Tbase TZ x1191 = x1167 + x1190;
-Tbase TZ x1192 = 0x11;
-Tbase TZ x1193 = x1192 * x1191;
-Tbase TZ x1194 = x1166 + x1193;
-Tbase TZ x1195 = x1157 + x1194;
-Tbase TZ x1196 = 0x17;
-Tbase TZ x1197 = x1195 >>> x1196;
-Tbase TZ x1198 = x983 * x998;
-Tbase TZ x1199 = x986 * x995;
-Tbase TZ x1200 = x989 * x992;
-Tbase TZ x1201 = x992 * x989;
-Tbase TZ x1202 = x995 * x986;
-Tbase TZ x1203 = x998 * x983;
-Tbase TZ x1204 = x1202 + x1203;
-Tbase TZ x1205 = x1201 + x1204;
-Tbase TZ x1206 = x1200 + x1205;
-Tbase TZ x1207 = x1199 + x1206;
-Tbase TZ x1208 = x1198 + x1207;
-Tbase TZ x1209 = x947 * x980;
-Tbase TZ x1210 = x950 * x977;
-Tbase TZ x1211 = x953 * x974;
-Tbase TZ x1212 = x956 * x971;
-Tbase TZ x1213 = x959 * x968;
-Tbase TZ x1214 = x962 * x965;
-Tbase TZ x1215 = x965 * x962;
-Tbase TZ x1216 = x968 * x959;
-Tbase TZ x1217 = x971 * x956;
-Tbase TZ x1218 = x974 * x953;
-Tbase TZ x1219 = x977 * x950;
-Tbase TZ x1220 = x980 * x947;
-Tbase TZ x1221 = x1219 + x1220;
-Tbase TZ x1222 = x1218 + x1221;
-Tbase TZ x1223 = x1217 + x1222;
-Tbase TZ x1224 = x1216 + x1223;
-Tbase TZ x1225 = x1215 + x1224;
-Tbase TZ x1226 = x1214 + x1225;
-Tbase TZ x1227 = x1213 + x1226;
-Tbase TZ x1228 = x1212 + x1227;
-Tbase TZ x1229 = x1211 + x1228;
-Tbase TZ x1230 = x1210 + x1229;
-Tbase TZ x1231 = x1209 + x1230;
-Tbase TZ x1232 = 0x11;
-Tbase TZ x1233 = x1232 * x1231;
-Tbase TZ x1234 = x1208 + x1233;
-Tbase TZ x1235 = x1197 + x1234;
-Tbase TZ x1236 = 0x17;
-Tbase TZ x1237 = x1235 >>> x1236;
-Tbase TZ x1238 = x980 * x998;
-Tbase TZ x1239 = x983 * x995;
-Tbase TZ x1240 = x986 * x992;
-Tbase TZ x1241 = x989 * x989;
-Tbase TZ x1242 = x992 * x986;
-Tbase TZ x1243 = x995 * x983;
-Tbase TZ x1244 = x998 * x980;
-Tbase TZ x1245 = x1243 + x1244;
-Tbase TZ x1246 = x1242 + x1245;
-Tbase TZ x1247 = x1241 + x1246;
-Tbase TZ x1248 = x1240 + x1247;
-Tbase TZ x1249 = x1239 + x1248;
-Tbase TZ x1250 = x1238 + x1249;
-Tbase TZ x1251 = x947 * x977;
-Tbase TZ x1252 = x950 * x974;
-Tbase TZ x1253 = x953 * x971;
-Tbase TZ x1254 = x956 * x968;
-Tbase TZ x1255 = x959 * x965;
-Tbase TZ x1256 = x962 * x962;
-Tbase TZ x1257 = x965 * x959;
-Tbase TZ x1258 = x968 * x956;
-Tbase TZ x1259 = x971 * x953;
-Tbase TZ x1260 = x974 * x950;
-Tbase TZ x1261 = x977 * x947;
-Tbase TZ x1262 = x1260 + x1261;
-Tbase TZ x1263 = x1259 + x1262;
-Tbase TZ x1264 = x1258 + x1263;
-Tbase TZ x1265 = x1257 + x1264;
-Tbase TZ x1266 = x1256 + x1265;
-Tbase TZ x1267 = x1255 + x1266;
-Tbase TZ x1268 = x1254 + x1267;
-Tbase TZ x1269 = x1253 + x1268;
-Tbase TZ x1270 = x1252 + x1269;
-Tbase TZ x1271 = x1251 + x1270;
-Tbase TZ x1272 = 0x11;
-Tbase TZ x1273 = x1272 * x1271;
-Tbase TZ x1274 = x1250 + x1273;
-Tbase TZ x1275 = x1237 + x1274;
-Tbase TZ x1276 = 0x17;
-Tbase TZ x1277 = x1275 >>> x1276;
-Tbase TZ x1278 = x977 * x998;
-Tbase TZ x1279 = x980 * x995;
-Tbase TZ x1280 = x983 * x992;
-Tbase TZ x1281 = x986 * x989;
-Tbase TZ x1282 = x989 * x986;
-Tbase TZ x1283 = x992 * x983;
-Tbase TZ x1284 = x995 * x980;
-Tbase TZ x1285 = x998 * x977;
-Tbase TZ x1286 = x1284 + x1285;
-Tbase TZ x1287 = x1283 + x1286;
-Tbase TZ x1288 = x1282 + x1287;
-Tbase TZ x1289 = x1281 + x1288;
-Tbase TZ x1290 = x1280 + x1289;
-Tbase TZ x1291 = x1279 + x1290;
-Tbase TZ x1292 = x1278 + x1291;
-Tbase TZ x1293 = x947 * x974;
-Tbase TZ x1294 = x950 * x971;
-Tbase TZ x1295 = x953 * x968;
-Tbase TZ x1296 = x956 * x965;
-Tbase TZ x1297 = x959 * x962;
-Tbase TZ x1298 = x962 * x959;
-Tbase TZ x1299 = x965 * x956;
-Tbase TZ x1300 = x968 * x953;
-Tbase TZ x1301 = x971 * x950;
-Tbase TZ x1302 = x974 * x947;
-Tbase TZ x1303 = x1301 + x1302;
-Tbase TZ x1304 = x1300 + x1303;
-Tbase TZ x1305 = x1299 + x1304;
-Tbase TZ x1306 = x1298 + x1305;
-Tbase TZ x1307 = x1297 + x1306;
-Tbase TZ x1308 = x1296 + x1307;
-Tbase TZ x1309 = x1295 + x1308;
-Tbase TZ x1310 = x1294 + x1309;
-Tbase TZ x1311 = x1293 + x1310;
-Tbase TZ x1312 = 0x11;
-Tbase TZ x1313 = x1312 * x1311;
-Tbase TZ x1314 = x1292 + x1313;
-Tbase TZ x1315 = x1277 + x1314;
-Tbase TZ x1316 = 0x17;
-Tbase TZ x1317 = x1315 >>> x1316;
-Tbase TZ x1318 = x974 * x998;
-Tbase TZ x1319 = x977 * x995;
-Tbase TZ x1320 = x980 * x992;
-Tbase TZ x1321 = x983 * x989;
-Tbase TZ x1322 = x986 * x986;
-Tbase TZ x1323 = x989 * x983;
-Tbase TZ x1324 = x992 * x980;
-Tbase TZ x1325 = x995 * x977;
-Tbase TZ x1326 = x998 * x974;
-Tbase TZ x1327 = x1325 + x1326;
-Tbase TZ x1328 = x1324 + x1327;
-Tbase TZ x1329 = x1323 + x1328;
-Tbase TZ x1330 = x1322 + x1329;
-Tbase TZ x1331 = x1321 + x1330;
-Tbase TZ x1332 = x1320 + x1331;
-Tbase TZ x1333 = x1319 + x1332;
-Tbase TZ x1334 = x1318 + x1333;
-Tbase TZ x1335 = x947 * x971;
-Tbase TZ x1336 = x950 * x968;
-Tbase TZ x1337 = x953 * x965;
-Tbase TZ x1338 = x956 * x962;
-Tbase TZ x1339 = x959 * x959;
-Tbase TZ x1340 = x962 * x956;
-Tbase TZ x1341 = x965 * x953;
-Tbase TZ x1342 = x968 * x950;
-Tbase TZ x1343 = x971 * x947;
-Tbase TZ x1344 = x1342 + x1343;
-Tbase TZ x1345 = x1341 + x1344;
-Tbase TZ x1346 = x1340 + x1345;
-Tbase TZ x1347 = x1339 + x1346;
-Tbase TZ x1348 = x1338 + x1347;
-Tbase TZ x1349 = x1337 + x1348;
-Tbase TZ x1350 = x1336 + x1349;
-Tbase TZ x1351 = x1335 + x1350;
-Tbase TZ x1352 = 0x11;
-Tbase TZ x1353 = x1352 * x1351;
-Tbase TZ x1354 = x1334 + x1353;
-Tbase TZ x1355 = x1317 + x1354;
-Tbase TZ x1356 = 0x17;
-Tbase TZ x1357 = x1355 >>> x1356;
-Tbase TZ x1358 = x971 * x998;
-Tbase TZ x1359 = x974 * x995;
-Tbase TZ x1360 = x977 * x992;
-Tbase TZ x1361 = x980 * x989;
-Tbase TZ x1362 = x983 * x986;
-Tbase TZ x1363 = x986 * x983;
-Tbase TZ x1364 = x989 * x980;
-Tbase TZ x1365 = x992 * x977;
-Tbase TZ x1366 = x995 * x974;
-Tbase TZ x1367 = x998 * x971;
-Tbase TZ x1368 = x1366 + x1367;
-Tbase TZ x1369 = x1365 + x1368;
-Tbase TZ x1370 = x1364 + x1369;
-Tbase TZ x1371 = x1363 + x1370;
-Tbase TZ x1372 = x1362 + x1371;
-Tbase TZ x1373 = x1361 + x1372;
-Tbase TZ x1374 = x1360 + x1373;
-Tbase TZ x1375 = x1359 + x1374;
-Tbase TZ x1376 = x1358 + x1375;
-Tbase TZ x1377 = x947 * x968;
-Tbase TZ x1378 = x950 * x965;
-Tbase TZ x1379 = x953 * x962;
-Tbase TZ x1380 = x956 * x959;
-Tbase TZ x1381 = x959 * x956;
-Tbase TZ x1382 = x962 * x953;
-Tbase TZ x1383 = x965 * x950;
-Tbase TZ x1384 = x968 * x947;
-Tbase TZ x1385 = x1383 + x1384;
-Tbase TZ x1386 = x1382 + x1385;
-Tbase TZ x1387 = x1381 + x1386;
-Tbase TZ x1388 = x1380 + x1387;
-Tbase TZ x1389 = x1379 + x1388;
-Tbase TZ x1390 = x1378 + x1389;
-Tbase TZ x1391 = x1377 + x1390;
-Tbase TZ x1392 = 0x11;
-Tbase TZ x1393 = x1392 * x1391;
-Tbase TZ x1394 = x1376 + x1393;
-Tbase TZ x1395 = x1357 + x1394;
-Tbase TZ x1396 = 0x17;
-Tbase TZ x1397 = x1395 >>> x1396;
-Tbase TZ x1398 = x968 * x998;
-Tbase TZ x1399 = x971 * x995;
-Tbase TZ x1400 = x974 * x992;
-Tbase TZ x1401 = x977 * x989;
-Tbase TZ x1402 = x980 * x986;
-Tbase TZ x1403 = x983 * x983;
-Tbase TZ x1404 = x986 * x980;
-Tbase TZ x1405 = x989 * x977;
-Tbase TZ x1406 = x992 * x974;
-Tbase TZ x1407 = x995 * x971;
-Tbase TZ x1408 = x998 * x968;
-Tbase TZ x1409 = x1407 + x1408;
-Tbase TZ x1410 = x1406 + x1409;
-Tbase TZ x1411 = x1405 + x1410;
-Tbase TZ x1412 = x1404 + x1411;
-Tbase TZ x1413 = x1403 + x1412;
-Tbase TZ x1414 = x1402 + x1413;
-Tbase TZ x1415 = x1401 + x1414;
-Tbase TZ x1416 = x1400 + x1415;
-Tbase TZ x1417 = x1399 + x1416;
-Tbase TZ x1418 = x1398 + x1417;
-Tbase TZ x1419 = x947 * x965;
-Tbase TZ x1420 = x950 * x962;
-Tbase TZ x1421 = x953 * x959;
-Tbase TZ x1422 = x956 * x956;
-Tbase TZ x1423 = x959 * x953;
-Tbase TZ x1424 = x962 * x950;
-Tbase TZ x1425 = x965 * x947;
-Tbase TZ x1426 = x1424 + x1425;
-Tbase TZ x1427 = x1423 + x1426;
-Tbase TZ x1428 = x1422 + x1427;
-Tbase TZ x1429 = x1421 + x1428;
-Tbase TZ x1430 = x1420 + x1429;
-Tbase TZ x1431 = x1419 + x1430;
-Tbase TZ x1432 = 0x11;
-Tbase TZ x1433 = x1432 * x1431;
-Tbase TZ x1434 = x1418 + x1433;
-Tbase TZ x1435 = x1397 + x1434;
-Tbase TZ x1436 = 0x17;
-Tbase TZ x1437 = x1435 >>> x1436;
-Tbase TZ x1438 = x965 * x998;
-Tbase TZ x1439 = x968 * x995;
-Tbase TZ x1440 = x971 * x992;
-Tbase TZ x1441 = x974 * x989;
-Tbase TZ x1442 = x977 * x986;
-Tbase TZ x1443 = x980 * x983;
-Tbase TZ x1444 = x983 * x980;
-Tbase TZ x1445 = x986 * x977;
-Tbase TZ x1446 = x989 * x974;
-Tbase TZ x1447 = x992 * x971;
-Tbase TZ x1448 = x995 * x968;
-Tbase TZ x1449 = x998 * x965;
-Tbase TZ x1450 = x1448 + x1449;
-Tbase TZ x1451 = x1447 + x1450;
-Tbase TZ x1452 = x1446 + x1451;
-Tbase TZ x1453 = x1445 + x1452;
-Tbase TZ x1454 = x1444 + x1453;
-Tbase TZ x1455 = x1443 + x1454;
-Tbase TZ x1456 = x1442 + x1455;
-Tbase TZ x1457 = x1441 + x1456;
-Tbase TZ x1458 = x1440 + x1457;
-Tbase TZ x1459 = x1439 + x1458;
-Tbase TZ x1460 = x1438 + x1459;
-Tbase TZ x1461 = x947 * x962;
-Tbase TZ x1462 = x950 * x959;
-Tbase TZ x1463 = x953 * x956;
-Tbase TZ x1464 = x956 * x953;
-Tbase TZ x1465 = x959 * x950;
-Tbase TZ x1466 = x962 * x947;
-Tbase TZ x1467 = x1465 + x1466;
-Tbase TZ x1468 = x1464 + x1467;
-Tbase TZ x1469 = x1463 + x1468;
-Tbase TZ x1470 = x1462 + x1469;
-Tbase TZ x1471 = x1461 + x1470;
-Tbase TZ x1472 = 0x11;
-Tbase TZ x1473 = x1472 * x1471;
-Tbase TZ x1474 = x1460 + x1473;
-Tbase TZ x1475 = x1437 + x1474;
-Tbase TZ x1476 = 0x17;
-Tbase TZ x1477 = x1475 >>> x1476;
-Tbase TZ x1478 = x962 * x998;
-Tbase TZ x1479 = x965 * x995;
-Tbase TZ x1480 = x968 * x992;
-Tbase TZ x1481 = x971 * x989;
-Tbase TZ x1482 = x974 * x986;
-Tbase TZ x1483 = x977 * x983;
-Tbase TZ x1484 = x980 * x980;
-Tbase TZ x1485 = x983 * x977;
-Tbase TZ x1486 = x986 * x974;
-Tbase TZ x1487 = x989 * x971;
-Tbase TZ x1488 = x992 * x968;
-Tbase TZ x1489 = x995 * x965;
-Tbase TZ x1490 = x998 * x962;
-Tbase TZ x1491 = x1489 + x1490;
-Tbase TZ x1492 = x1488 + x1491;
-Tbase TZ x1493 = x1487 + x1492;
-Tbase TZ x1494 = x1486 + x1493;
-Tbase TZ x1495 = x1485 + x1494;
-Tbase TZ x1496 = x1484 + x1495;
-Tbase TZ x1497 = x1483 + x1496;
-Tbase TZ x1498 = x1482 + x1497;
-Tbase TZ x1499 = x1481 + x1498;
-Tbase TZ x1500 = x1480 + x1499;
-Tbase TZ x1501 = x1479 + x1500;
-Tbase TZ x1502 = x1478 + x1501;
-Tbase TZ x1503 = x947 * x959;
-Tbase TZ x1504 = x950 * x956;
-Tbase TZ x1505 = x953 * x953;
-Tbase TZ x1506 = x956 * x950;
-Tbase TZ x1507 = x959 * x947;
-Tbase TZ x1508 = x1506 + x1507;
-Tbase TZ x1509 = x1505 + x1508;
-Tbase TZ x1510 = x1504 + x1509;
-Tbase TZ x1511 = x1503 + x1510;
-Tbase TZ x1512 = 0x11;
-Tbase TZ x1513 = x1512 * x1511;
-Tbase TZ x1514 = x1502 + x1513;
-Tbase TZ x1515 = x1477 + x1514;
-Tbase TZ x1516 = 0x17;
-Tbase TZ x1517 = x1515 >>> x1516;
-Tbase TZ x1518 = x959 * x998;
-Tbase TZ x1519 = x962 * x995;
-Tbase TZ x1520 = x965 * x992;
-Tbase TZ x1521 = x968 * x989;
-Tbase TZ x1522 = x971 * x986;
-Tbase TZ x1523 = x974 * x983;
-Tbase TZ x1524 = x977 * x980;
-Tbase TZ x1525 = x980 * x977;
-Tbase TZ x1526 = x983 * x974;
-Tbase TZ x1527 = x986 * x971;
-Tbase TZ x1528 = x989 * x968;
-Tbase TZ x1529 = x992 * x965;
-Tbase TZ x1530 = x995 * x962;
-Tbase TZ x1531 = x998 * x959;
-Tbase TZ x1532 = x1530 + x1531;
-Tbase TZ x1533 = x1529 + x1532;
-Tbase TZ x1534 = x1528 + x1533;
-Tbase TZ x1535 = x1527 + x1534;
-Tbase TZ x1536 = x1526 + x1535;
-Tbase TZ x1537 = x1525 + x1536;
-Tbase TZ x1538 = x1524 + x1537;
-Tbase TZ x1539 = x1523 + x1538;
-Tbase TZ x1540 = x1522 + x1539;
-Tbase TZ x1541 = x1521 + x1540;
-Tbase TZ x1542 = x1520 + x1541;
-Tbase TZ x1543 = x1519 + x1542;
-Tbase TZ x1544 = x1518 + x1543;
-Tbase TZ x1545 = x947 * x956;
-Tbase TZ x1546 = x950 * x953;
-Tbase TZ x1547 = x953 * x950;
-Tbase TZ x1548 = x956 * x947;
-Tbase TZ x1549 = x1547 + x1548;
-Tbase TZ x1550 = x1546 + x1549;
-Tbase TZ x1551 = x1545 + x1550;
-Tbase TZ x1552 = 0x11;
-Tbase TZ x1553 = x1552 * x1551;
-Tbase TZ x1554 = x1544 + x1553;
-Tbase TZ x1555 = x1517 + x1554;
-Tbase TZ x1556 = 0x17;
-Tbase TZ x1557 = x1555 >>> x1556;
-Tbase TZ x1558 = x956 * x998;
-Tbase TZ x1559 = x959 * x995;
-Tbase TZ x1560 = x962 * x992;
-Tbase TZ x1561 = x965 * x989;
-Tbase TZ x1562 = x968 * x986;
-Tbase TZ x1563 = x971 * x983;
-Tbase TZ x1564 = x974 * x980;
-Tbase TZ x1565 = x977 * x977;
-Tbase TZ x1566 = x980 * x974;
-Tbase TZ x1567 = x983 * x971;
-Tbase TZ x1568 = x986 * x968;
-Tbase TZ x1569 = x989 * x965;
-Tbase TZ x1570 = x992 * x962;
-Tbase TZ x1571 = x995 * x959;
-Tbase TZ x1572 = x998 * x956;
-Tbase TZ x1573 = x1571 + x1572;
-Tbase TZ x1574 = x1570 + x1573;
-Tbase TZ x1575 = x1569 + x1574;
-Tbase TZ x1576 = x1568 + x1575;
-Tbase TZ x1577 = x1567 + x1576;
-Tbase TZ x1578 = x1566 + x1577;
-Tbase TZ x1579 = x1565 + x1578;
-Tbase TZ x1580 = x1564 + x1579;
-Tbase TZ x1581 = x1563 + x1580;
-Tbase TZ x1582 = x1562 + x1581;
-Tbase TZ x1583 = x1561 + x1582;
-Tbase TZ x1584 = x1560 + x1583;
-Tbase TZ x1585 = x1559 + x1584;
-Tbase TZ x1586 = x1558 + x1585;
-Tbase TZ x1587 = x947 * x953;
-Tbase TZ x1588 = x950 * x950;
-Tbase TZ x1589 = x953 * x947;
-Tbase TZ x1590 = x1588 + x1589;
-Tbase TZ x1591 = x1587 + x1590;
-Tbase TZ x1592 = 0x11;
-Tbase TZ x1593 = x1592 * x1591;
-Tbase TZ x1594 = x1586 + x1593;
-Tbase TZ x1595 = x1557 + x1594;
-Tbase TZ x1596 = 0x17;
-Tbase TZ x1597 = x1595 >>> x1596;
-Tbase TZ x1598 = x953 * x998;
-Tbase TZ x1599 = x956 * x995;
-Tbase TZ x1600 = x959 * x992;
-Tbase TZ x1601 = x962 * x989;
-Tbase TZ x1602 = x965 * x986;
-Tbase TZ x1603 = x968 * x983;
-Tbase TZ x1604 = x971 * x980;
-Tbase TZ x1605 = x974 * x977;
-Tbase TZ x1606 = x977 * x974;
-Tbase TZ x1607 = x980 * x971;
-Tbase TZ x1608 = x983 * x968;
-Tbase TZ x1609 = x986 * x965;
-Tbase TZ x1610 = x989 * x962;
-Tbase TZ x1611 = x992 * x959;
-Tbase TZ x1612 = x995 * x956;
-Tbase TZ x1613 = x998 * x953;
-Tbase TZ x1614 = x1612 + x1613;
-Tbase TZ x1615 = x1611 + x1614;
-Tbase TZ x1616 = x1610 + x1615;
-Tbase TZ x1617 = x1609 + x1616;
-Tbase TZ x1618 = x1608 + x1617;
-Tbase TZ x1619 = x1607 + x1618;
-Tbase TZ x1620 = x1606 + x1619;
-Tbase TZ x1621 = x1605 + x1620;
-Tbase TZ x1622 = x1604 + x1621;
-Tbase TZ x1623 = x1603 + x1622;
-Tbase TZ x1624 = x1602 + x1623;
-Tbase TZ x1625 = x1601 + x1624;
-Tbase TZ x1626 = x1600 + x1625;
-Tbase TZ x1627 = x1599 + x1626;
-Tbase TZ x1628 = x1598 + x1627;
-Tbase TZ x1629 = x947 * x950;
-Tbase TZ x1630 = x950 * x947;
-Tbase TZ x1631 = x1629 + x1630;
-Tbase TZ x1632 = 0x11;
-Tbase TZ x1633 = x1632 * x1631;
-Tbase TZ x1634 = x1628 + x1633;
-Tbase TZ x1635 = x1597 + x1634;
-Tbase TZ x1636 = 0x17;
-Tbase TZ x1637 = x1635 >>> x1636;
-Tbase TZ x1638 = x950 * x998;
-Tbase TZ x1639 = x953 * x995;
-Tbase TZ x1640 = x956 * x992;
-Tbase TZ x1641 = x959 * x989;
-Tbase TZ x1642 = x962 * x986;
-Tbase TZ x1643 = x965 * x983;
-Tbase TZ x1644 = x968 * x980;
-Tbase TZ x1645 = x971 * x977;
-Tbase TZ x1646 = x974 * x974;
-Tbase TZ x1647 = x977 * x971;
-Tbase TZ x1648 = x980 * x968;
-Tbase TZ x1649 = x983 * x965;
-Tbase TZ x1650 = x986 * x962;
-Tbase TZ x1651 = x989 * x959;
-Tbase TZ x1652 = x992 * x956;
-Tbase TZ x1653 = x995 * x953;
-Tbase TZ x1654 = x998 * x950;
-Tbase TZ x1655 = x1653 + x1654;
-Tbase TZ x1656 = x1652 + x1655;
-Tbase TZ x1657 = x1651 + x1656;
-Tbase TZ x1658 = x1650 + x1657;
-Tbase TZ x1659 = x1649 + x1658;
-Tbase TZ x1660 = x1648 + x1659;
-Tbase TZ x1661 = x1647 + x1660;
-Tbase TZ x1662 = x1646 + x1661;
-Tbase TZ x1663 = x1645 + x1662;
-Tbase TZ x1664 = x1644 + x1663;
-Tbase TZ x1665 = x1643 + x1664;
-Tbase TZ x1666 = x1642 + x1665;
-Tbase TZ x1667 = x1641 + x1666;
-Tbase TZ x1668 = x1640 + x1667;
-Tbase TZ x1669 = x1639 + x1668;
-Tbase TZ x1670 = x1638 + x1669;
-Tbase TZ x1671 = x947 * x947;
-Tbase TZ x1672 = 0x11;
-Tbase TZ x1673 = x1672 * x1671;
-Tbase TZ x1674 = x1670 + x1673;
-Tbase TZ x1675 = x1637 + x1674;
-Tbase TZ x1676 = 0x17;
-Tbase TZ x1677 = x1675 >>> x1676;
-Tbase TZ x1678 = x947 * x998;
-Tbase TZ x1679 = x950 * x995;
-Tbase TZ x1680 = x953 * x992;
-Tbase TZ x1681 = x956 * x989;
-Tbase TZ x1682 = x959 * x986;
-Tbase TZ x1683 = x962 * x983;
-Tbase TZ x1684 = x965 * x980;
-Tbase TZ x1685 = x968 * x977;
-Tbase TZ x1686 = x971 * x974;
-Tbase TZ x1687 = x974 * x971;
-Tbase TZ x1688 = x977 * x968;
-Tbase TZ x1689 = x980 * x965;
-Tbase TZ x1690 = x983 * x962;
-Tbase TZ x1691 = x986 * x959;
-Tbase TZ x1692 = x989 * x956;
-Tbase TZ x1693 = x992 * x953;
-Tbase TZ x1694 = x995 * x950;
-Tbase TZ x1695 = x998 * x947;
-Tbase TZ x1696 = x1694 + x1695;
-Tbase TZ x1697 = x1693 + x1696;
-Tbase TZ x1698 = x1692 + x1697;
-Tbase TZ x1699 = x1691 + x1698;
-Tbase TZ x1700 = x1690 + x1699;
-Tbase TZ x1701 = x1689 + x1700;
-Tbase TZ x1702 = x1688 + x1701;
-Tbase TZ x1703 = x1687 + x1702;
-Tbase TZ x1704 = x1686 + x1703;
-Tbase TZ x1705 = x1685 + x1704;
-Tbase TZ x1706 = x1684 + x1705;
-Tbase TZ x1707 = x1683 + x1706;
-Tbase TZ x1708 = x1682 + x1707;
-Tbase TZ x1709 = x1681 + x1708;
-Tbase TZ x1710 = x1680 + x1709;
-Tbase TZ x1711 = x1679 + x1710;
-Tbase TZ x1712 = x1678 + x1711;
-Tbase TZ x1713 = x1677 + x1712;
-Tbase TZ x1714 = 0x17;
-Tbase TZ x1715 = x1713 >>> x1714;
-Tbase TZ x1716 = 0x11;
-Tbase TZ x1717 = x1716 * x1715;
-Tbase TZ x1718 = 0x7fffff;
-Tbase TZ x1719 = x1035 & x1718;
-Tbase TZ x1720 = x1717 + x1719;
-Tbase TZ x1721 = 0x17;
-Tbase TZ x1722 = x1720 >>> x1721;
-Tbase TZ x1723 = 0x7fffff;
-Tbase TZ x1724 = x1075 & x1723;
-Tbase TZ x1725 = x1722 + x1724;
-Tbase TZ x1726 = 0x7fffff;
-Tbase TZ x1727 = x1713 & x1726;
-Tbase TZ x1728 = 0x7fffff;
-Tbase TZ x1729 = x1675 & x1728;
-Tbase TZ x1730 = 0x7fffff;
-Tbase TZ x1731 = x1635 & x1730;
-Tbase TZ x1732 = 0x7fffff;
-Tbase TZ x1733 = x1595 & x1732;
-Tbase TZ x1734 = 0x7fffff;
-Tbase TZ x1735 = x1555 & x1734;
-Tbase TZ x1736 = 0x7fffff;
-Tbase TZ x1737 = x1515 & x1736;
-Tbase TZ x1738 = 0x7fffff;
-Tbase TZ x1739 = x1475 & x1738;
-Tbase TZ x1740 = 0x7fffff;
-Tbase TZ x1741 = x1435 & x1740;
-Tbase TZ x1742 = 0x7fffff;
-Tbase TZ x1743 = x1395 & x1742;
-Tbase TZ x1744 = 0x7fffff;
-Tbase TZ x1745 = x1355 & x1744;
-Tbase TZ x1746 = 0x7fffff;
-Tbase TZ x1747 = x1315 & x1746;
-Tbase TZ x1748 = 0x7fffff;
-Tbase TZ x1749 = x1275 & x1748;
-Tbase TZ x1750 = 0x7fffff;
-Tbase TZ x1751 = x1235 & x1750;
-Tbase TZ x1752 = 0x7fffff;
-Tbase TZ x1753 = x1195 & x1752;
-Tbase TZ x1754 = 0x7fffff;
-Tbase TZ x1755 = x1155 & x1754;
-Tbase TZ x1756 = 0x17;
-Tbase TZ x1757 = x1725 >>> x1756;
-Tbase TZ x1758 = 0x7fffff;
-Tbase TZ x1759 = x1115 & x1758;
-Tbase TZ x1760 = x1757 + x1759;
-Tbase TZ x1761 = 0x7fffff;
-Tbase TZ x1762 = x1725 & x1761;
-Tbase TZ x1763 = 0x7fffff;
-Tbase TZ x1764 = x1720 & x1763;
-Tbase TZ x1765 = Const 16777214;
-Tbase TZ x1766 = x1765 + x907;
-Tbase TZ x1767 = x1766 - x1727;
-Tbase TZ x1768 = Const 16777214;
-Tbase TZ x1769 = x1768 + x909;
-Tbase TZ x1770 = x1769 - x1729;
-Tbase TZ x1771 = Const 16777214;
-Tbase TZ x1772 = x1771 + x911;
-Tbase TZ x1773 = x1772 - x1731;
-Tbase TZ x1774 = Const 16777214;
-Tbase TZ x1775 = x1774 + x913;
-Tbase TZ x1776 = x1775 - x1733;
-Tbase TZ x1777 = Const 16777214;
-Tbase TZ x1778 = x1777 + x915;
-Tbase TZ x1779 = x1778 - x1735;
-Tbase TZ x1780 = Const 16777214;
-Tbase TZ x1781 = x1780 + x917;
-Tbase TZ x1782 = x1781 - x1737;
-Tbase TZ x1783 = Const 16777214;
-Tbase TZ x1784 = x1783 + x919;
-Tbase TZ x1785 = x1784 - x1739;
-Tbase TZ x1786 = Const 16777214;
-Tbase TZ x1787 = x1786 + x921;
-Tbase TZ x1788 = x1787 - x1741;
-Tbase TZ x1789 = Const 16777214;
-Tbase TZ x1790 = x1789 + x923;
-Tbase TZ x1791 = x1790 - x1743;
-Tbase TZ x1792 = Const 16777214;
-Tbase TZ x1793 = x1792 + x925;
-Tbase TZ x1794 = x1793 - x1745;
-Tbase TZ x1795 = Const 16777214;
-Tbase TZ x1796 = x1795 + x927;
-Tbase TZ x1797 = x1796 - x1747;
-Tbase TZ x1798 = Const 16777214;
-Tbase TZ x1799 = x1798 + x929;
-Tbase TZ x1800 = x1799 - x1749;
-Tbase TZ x1801 = Const 16777214;
-Tbase TZ x1802 = x1801 + x931;
-Tbase TZ x1803 = x1802 - x1751;
-Tbase TZ x1804 = Const 16777214;
-Tbase TZ x1805 = x1804 + x933;
-Tbase TZ x1806 = x1805 - x1753;
-Tbase TZ x1807 = Const 16777214;
-Tbase TZ x1808 = x1807 + x935;
-Tbase TZ x1809 = x1808 - x1755;
-Tbase TZ x1810 = Const 16777214;
-Tbase TZ x1811 = x1810 + x940;
-Tbase TZ x1812 = x1811 - x1760;
-Tbase TZ x1813 = Const 16777214;
-Tbase TZ x1814 = x1813 + x942;
-Tbase TZ x1815 = x1814 - x1762;
-Tbase TZ x1816 = Const 16777182;
-Tbase TZ x1817 = x1816 + x944;
-Tbase TZ x1818 = x1817 - x1764;
-Tbase TZ x1819 = x125 + x143;
-Tbase TZ x1820 = x126 + x144;
-Tbase TZ x1821 = x127 + x145;
-Tbase TZ x1822 = x128 + x146;
-Tbase TZ x1823 = x129 + x147;
-Tbase TZ x1824 = x130 + x148;
-Tbase TZ x1825 = x131 + x149;
-Tbase TZ x1826 = x132 + x150;
-Tbase TZ x1827 = x133 + x151;
-Tbase TZ x1828 = x134 + x152;
-Tbase TZ x1829 = x135 + x153;
-Tbase TZ x1830 = x136 + x154;
-Tbase TZ x1831 = x137 + x155;
-Tbase TZ x1832 = x138 + x156;
-Tbase TZ x1833 = x139 + x157;
-Tbase TZ x1834 = x140 + x158;
-Tbase TZ x1835 = x141 + x159;
-Tbase TZ x1836 = x142 + x160;
-Tbase TZ x1837 = Const 16777214;
-Tbase TZ x1838 = x1837 + x125;
-Tbase TZ x1839 = x1838 - x143;
-Tbase TZ x1840 = Const 16777214;
-Tbase TZ x1841 = x1840 + x126;
-Tbase TZ x1842 = x1841 - x144;
-Tbase TZ x1843 = Const 16777214;
-Tbase TZ x1844 = x1843 + x127;
-Tbase TZ x1845 = x1844 - x145;
-Tbase TZ x1846 = Const 16777214;
-Tbase TZ x1847 = x1846 + x128;
-Tbase TZ x1848 = x1847 - x146;
-Tbase TZ x1849 = Const 16777214;
-Tbase TZ x1850 = x1849 + x129;
-Tbase TZ x1851 = x1850 - x147;
-Tbase TZ x1852 = Const 16777214;
-Tbase TZ x1853 = x1852 + x130;
-Tbase TZ x1854 = x1853 - x148;
-Tbase TZ x1855 = Const 16777214;
-Tbase TZ x1856 = x1855 + x131;
-Tbase TZ x1857 = x1856 - x149;
-Tbase TZ x1858 = Const 16777214;
-Tbase TZ x1859 = x1858 + x132;
-Tbase TZ x1860 = x1859 - x150;
-Tbase TZ x1861 = Const 16777214;
-Tbase TZ x1862 = x1861 + x133;
-Tbase TZ x1863 = x1862 - x151;
-Tbase TZ x1864 = Const 16777214;
-Tbase TZ x1865 = x1864 + x134;
-Tbase TZ x1866 = x1865 - x152;
-Tbase TZ x1867 = Const 16777214;
-Tbase TZ x1868 = x1867 + x135;
-Tbase TZ x1869 = x1868 - x153;
-Tbase TZ x1870 = Const 16777214;
-Tbase TZ x1871 = x1870 + x136;
-Tbase TZ x1872 = x1871 - x154;
-Tbase TZ x1873 = Const 16777214;
-Tbase TZ x1874 = x1873 + x137;
-Tbase TZ x1875 = x1874 - x155;
-Tbase TZ x1876 = Const 16777214;
-Tbase TZ x1877 = x1876 + x138;
-Tbase TZ x1878 = x1877 - x156;
-Tbase TZ x1879 = Const 16777214;
-Tbase TZ x1880 = x1879 + x139;
-Tbase TZ x1881 = x1880 - x157;
-Tbase TZ x1882 = Const 16777214;
-Tbase TZ x1883 = x1882 + x140;
-Tbase TZ x1884 = x1883 - x158;
-Tbase TZ x1885 = Const 16777214;
-Tbase TZ x1886 = x1885 + x141;
-Tbase TZ x1887 = x1886 - x159;
-Tbase TZ x1888 = Const 16777182;
-Tbase TZ x1889 = x1888 + x142;
-Tbase TZ x1890 = x1889 - x160;
-Tbase TZ x1891 = x1890 * x178;
-Tbase TZ x1892 = x1839 * x177;
-Tbase TZ x1893 = x1842 * x176;
-Tbase TZ x1894 = x1845 * x175;
-Tbase TZ x1895 = x1848 * x174;
-Tbase TZ x1896 = x1851 * x173;
-Tbase TZ x1897 = x1854 * x172;
-Tbase TZ x1898 = x1857 * x171;
-Tbase TZ x1899 = x1860 * x170;
-Tbase TZ x1900 = x1863 * x169;
-Tbase TZ x1901 = x1866 * x168;
-Tbase TZ x1902 = x1869 * x167;
-Tbase TZ x1903 = x1872 * x166;
-Tbase TZ x1904 = x1875 * x165;
-Tbase TZ x1905 = x1878 * x164;
-Tbase TZ x1906 = x1881 * x163;
-Tbase TZ x1907 = x1884 * x162;
-Tbase TZ x1908 = x1887 * x161;
-Tbase TZ x1909 = x1907 + x1908;
-Tbase TZ x1910 = x1906 + x1909;
-Tbase TZ x1911 = x1905 + x1910;
-Tbase TZ x1912 = x1904 + x1911;
-Tbase TZ x1913 = x1903 + x1912;
-Tbase TZ x1914 = x1902 + x1913;
-Tbase TZ x1915 = x1901 + x1914;
-Tbase TZ x1916 = x1900 + x1915;
-Tbase TZ x1917 = x1899 + x1916;
-Tbase TZ x1918 = x1898 + x1917;
-Tbase TZ x1919 = x1897 + x1918;
-Tbase TZ x1920 = x1896 + x1919;
-Tbase TZ x1921 = x1895 + x1920;
-Tbase TZ x1922 = x1894 + x1921;
-Tbase TZ x1923 = x1893 + x1922;
-Tbase TZ x1924 = x1892 + x1923;
-Tbase TZ x1925 = 0x11;
-Tbase TZ x1926 = x1925 * x1924;
-Tbase TZ x1927 = x1891 + x1926;
-Tbase TZ x1928 = 0x17;
-Tbase TZ x1929 = x1927 >>> x1928;
-Tbase TZ x1930 = x1887 * x178;
-Tbase TZ x1931 = x1890 * x177;
-Tbase TZ x1932 = x1930 + x1931;
-Tbase TZ x1933 = x1839 * x176;
-Tbase TZ x1934 = x1842 * x175;
-Tbase TZ x1935 = x1845 * x174;
-Tbase TZ x1936 = x1848 * x173;
-Tbase TZ x1937 = x1851 * x172;
-Tbase TZ x1938 = x1854 * x171;
-Tbase TZ x1939 = x1857 * x170;
-Tbase TZ x1940 = x1860 * x169;
-Tbase TZ x1941 = x1863 * x168;
-Tbase TZ x1942 = x1866 * x167;
-Tbase TZ x1943 = x1869 * x166;
-Tbase TZ x1944 = x1872 * x165;
-Tbase TZ x1945 = x1875 * x164;
-Tbase TZ x1946 = x1878 * x163;
-Tbase TZ x1947 = x1881 * x162;
-Tbase TZ x1948 = x1884 * x161;
-Tbase TZ x1949 = x1947 + x1948;
-Tbase TZ x1950 = x1946 + x1949;
-Tbase TZ x1951 = x1945 + x1950;
-Tbase TZ x1952 = x1944 + x1951;
-Tbase TZ x1953 = x1943 + x1952;
-Tbase TZ x1954 = x1942 + x1953;
-Tbase TZ x1955 = x1941 + x1954;
-Tbase TZ x1956 = x1940 + x1955;
-Tbase TZ x1957 = x1939 + x1956;
-Tbase TZ x1958 = x1938 + x1957;
-Tbase TZ x1959 = x1937 + x1958;
-Tbase TZ x1960 = x1936 + x1959;
-Tbase TZ x1961 = x1935 + x1960;
-Tbase TZ x1962 = x1934 + x1961;
-Tbase TZ x1963 = x1933 + x1962;
-Tbase TZ x1964 = 0x11;
-Tbase TZ x1965 = x1964 * x1963;
-Tbase TZ x1966 = x1932 + x1965;
-Tbase TZ x1967 = x1929 + x1966;
-Tbase TZ x1968 = 0x17;
-Tbase TZ x1969 = x1967 >>> x1968;
-Tbase TZ x1970 = x1884 * x178;
-Tbase TZ x1971 = x1887 * x177;
-Tbase TZ x1972 = x1890 * x176;
-Tbase TZ x1973 = x1971 + x1972;
-Tbase TZ x1974 = x1970 + x1973;
-Tbase TZ x1975 = x1839 * x175;
-Tbase TZ x1976 = x1842 * x174;
-Tbase TZ x1977 = x1845 * x173;
-Tbase TZ x1978 = x1848 * x172;
-Tbase TZ x1979 = x1851 * x171;
-Tbase TZ x1980 = x1854 * x170;
-Tbase TZ x1981 = x1857 * x169;
-Tbase TZ x1982 = x1860 * x168;
-Tbase TZ x1983 = x1863 * x167;
-Tbase TZ x1984 = x1866 * x166;
-Tbase TZ x1985 = x1869 * x165;
-Tbase TZ x1986 = x1872 * x164;
-Tbase TZ x1987 = x1875 * x163;
-Tbase TZ x1988 = x1878 * x162;
-Tbase TZ x1989 = x1881 * x161;
-Tbase TZ x1990 = x1988 + x1989;
-Tbase TZ x1991 = x1987 + x1990;
-Tbase TZ x1992 = x1986 + x1991;
-Tbase TZ x1993 = x1985 + x1992;
-Tbase TZ x1994 = x1984 + x1993;
-Tbase TZ x1995 = x1983 + x1994;
-Tbase TZ x1996 = x1982 + x1995;
-Tbase TZ x1997 = x1981 + x1996;
-Tbase TZ x1998 = x1980 + x1997;
-Tbase TZ x1999 = x1979 + x1998;
-Tbase TZ x2000 = x1978 + x1999;
-Tbase TZ x2001 = x1977 + x2000;
-Tbase TZ x2002 = x1976 + x2001;
-Tbase TZ x2003 = x1975 + x2002;
-Tbase TZ x2004 = 0x11;
-Tbase TZ x2005 = x2004 * x2003;
-Tbase TZ x2006 = x1974 + x2005;
-Tbase TZ x2007 = x1969 + x2006;
-Tbase TZ x2008 = 0x17;
-Tbase TZ x2009 = x2007 >>> x2008;
-Tbase TZ x2010 = x1881 * x178;
-Tbase TZ x2011 = x1884 * x177;
-Tbase TZ x2012 = x1887 * x176;
-Tbase TZ x2013 = x1890 * x175;
-Tbase TZ x2014 = x2012 + x2013;
-Tbase TZ x2015 = x2011 + x2014;
-Tbase TZ x2016 = x2010 + x2015;
-Tbase TZ x2017 = x1839 * x174;
-Tbase TZ x2018 = x1842 * x173;
-Tbase TZ x2019 = x1845 * x172;
-Tbase TZ x2020 = x1848 * x171;
-Tbase TZ x2021 = x1851 * x170;
-Tbase TZ x2022 = x1854 * x169;
-Tbase TZ x2023 = x1857 * x168;
-Tbase TZ x2024 = x1860 * x167;
-Tbase TZ x2025 = x1863 * x166;
-Tbase TZ x2026 = x1866 * x165;
-Tbase TZ x2027 = x1869 * x164;
-Tbase TZ x2028 = x1872 * x163;
-Tbase TZ x2029 = x1875 * x162;
-Tbase TZ x2030 = x1878 * x161;
-Tbase TZ x2031 = x2029 + x2030;
-Tbase TZ x2032 = x2028 + x2031;
-Tbase TZ x2033 = x2027 + x2032;
-Tbase TZ x2034 = x2026 + x2033;
-Tbase TZ x2035 = x2025 + x2034;
-Tbase TZ x2036 = x2024 + x2035;
-Tbase TZ x2037 = x2023 + x2036;
-Tbase TZ x2038 = x2022 + x2037;
-Tbase TZ x2039 = x2021 + x2038;
-Tbase TZ x2040 = x2020 + x2039;
-Tbase TZ x2041 = x2019 + x2040;
-Tbase TZ x2042 = x2018 + x2041;
-Tbase TZ x2043 = x2017 + x2042;
-Tbase TZ x2044 = 0x11;
-Tbase TZ x2045 = x2044 * x2043;
-Tbase TZ x2046 = x2016 + x2045;
-Tbase TZ x2047 = x2009 + x2046;
-Tbase TZ x2048 = 0x17;
-Tbase TZ x2049 = x2047 >>> x2048;
-Tbase TZ x2050 = x1878 * x178;
-Tbase TZ x2051 = x1881 * x177;
-Tbase TZ x2052 = x1884 * x176;
-Tbase TZ x2053 = x1887 * x175;
-Tbase TZ x2054 = x1890 * x174;
-Tbase TZ x2055 = x2053 + x2054;
-Tbase TZ x2056 = x2052 + x2055;
-Tbase TZ x2057 = x2051 + x2056;
-Tbase TZ x2058 = x2050 + x2057;
-Tbase TZ x2059 = x1839 * x173;
-Tbase TZ x2060 = x1842 * x172;
-Tbase TZ x2061 = x1845 * x171;
-Tbase TZ x2062 = x1848 * x170;
-Tbase TZ x2063 = x1851 * x169;
-Tbase TZ x2064 = x1854 * x168;
-Tbase TZ x2065 = x1857 * x167;
-Tbase TZ x2066 = x1860 * x166;
-Tbase TZ x2067 = x1863 * x165;
-Tbase TZ x2068 = x1866 * x164;
-Tbase TZ x2069 = x1869 * x163;
-Tbase TZ x2070 = x1872 * x162;
-Tbase TZ x2071 = x1875 * x161;
-Tbase TZ x2072 = x2070 + x2071;
-Tbase TZ x2073 = x2069 + x2072;
-Tbase TZ x2074 = x2068 + x2073;
-Tbase TZ x2075 = x2067 + x2074;
-Tbase TZ x2076 = x2066 + x2075;
-Tbase TZ x2077 = x2065 + x2076;
-Tbase TZ x2078 = x2064 + x2077;
-Tbase TZ x2079 = x2063 + x2078;
-Tbase TZ x2080 = x2062 + x2079;
-Tbase TZ x2081 = x2061 + x2080;
-Tbase TZ x2082 = x2060 + x2081;
-Tbase TZ x2083 = x2059 + x2082;
-Tbase TZ x2084 = 0x11;
-Tbase TZ x2085 = x2084 * x2083;
-Tbase TZ x2086 = x2058 + x2085;
-Tbase TZ x2087 = x2049 + x2086;
-Tbase TZ x2088 = 0x17;
-Tbase TZ x2089 = x2087 >>> x2088;
-Tbase TZ x2090 = x1875 * x178;
-Tbase TZ x2091 = x1878 * x177;
-Tbase TZ x2092 = x1881 * x176;
-Tbase TZ x2093 = x1884 * x175;
-Tbase TZ x2094 = x1887 * x174;
-Tbase TZ x2095 = x1890 * x173;
-Tbase TZ x2096 = x2094 + x2095;
-Tbase TZ x2097 = x2093 + x2096;
-Tbase TZ x2098 = x2092 + x2097;
-Tbase TZ x2099 = x2091 + x2098;
-Tbase TZ x2100 = x2090 + x2099;
-Tbase TZ x2101 = x1839 * x172;
-Tbase TZ x2102 = x1842 * x171;
-Tbase TZ x2103 = x1845 * x170;
-Tbase TZ x2104 = x1848 * x169;
-Tbase TZ x2105 = x1851 * x168;
-Tbase TZ x2106 = x1854 * x167;
-Tbase TZ x2107 = x1857 * x166;
-Tbase TZ x2108 = x1860 * x165;
-Tbase TZ x2109 = x1863 * x164;
-Tbase TZ x2110 = x1866 * x163;
-Tbase TZ x2111 = x1869 * x162;
-Tbase TZ x2112 = x1872 * x161;
-Tbase TZ x2113 = x2111 + x2112;
-Tbase TZ x2114 = x2110 + x2113;
-Tbase TZ x2115 = x2109 + x2114;
-Tbase TZ x2116 = x2108 + x2115;
-Tbase TZ x2117 = x2107 + x2116;
-Tbase TZ x2118 = x2106 + x2117;
-Tbase TZ x2119 = x2105 + x2118;
-Tbase TZ x2120 = x2104 + x2119;
-Tbase TZ x2121 = x2103 + x2120;
-Tbase TZ x2122 = x2102 + x2121;
-Tbase TZ x2123 = x2101 + x2122;
-Tbase TZ x2124 = 0x11;
-Tbase TZ x2125 = x2124 * x2123;
-Tbase TZ x2126 = x2100 + x2125;
-Tbase TZ x2127 = x2089 + x2126;
-Tbase TZ x2128 = 0x17;
-Tbase TZ x2129 = x2127 >>> x2128;
-Tbase TZ x2130 = x1872 * x178;
-Tbase TZ x2131 = x1875 * x177;
-Tbase TZ x2132 = x1878 * x176;
-Tbase TZ x2133 = x1881 * x175;
-Tbase TZ x2134 = x1884 * x174;
-Tbase TZ x2135 = x1887 * x173;
-Tbase TZ x2136 = x1890 * x172;
-Tbase TZ x2137 = x2135 + x2136;
-Tbase TZ x2138 = x2134 + x2137;
-Tbase TZ x2139 = x2133 + x2138;
-Tbase TZ x2140 = x2132 + x2139;
-Tbase TZ x2141 = x2131 + x2140;
-Tbase TZ x2142 = x2130 + x2141;
-Tbase TZ x2143 = x1839 * x171;
-Tbase TZ x2144 = x1842 * x170;
-Tbase TZ x2145 = x1845 * x169;
-Tbase TZ x2146 = x1848 * x168;
-Tbase TZ x2147 = x1851 * x167;
-Tbase TZ x2148 = x1854 * x166;
-Tbase TZ x2149 = x1857 * x165;
-Tbase TZ x2150 = x1860 * x164;
-Tbase TZ x2151 = x1863 * x163;
-Tbase TZ x2152 = x1866 * x162;
-Tbase TZ x2153 = x1869 * x161;
-Tbase TZ x2154 = x2152 + x2153;
-Tbase TZ x2155 = x2151 + x2154;
-Tbase TZ x2156 = x2150 + x2155;
-Tbase TZ x2157 = x2149 + x2156;
-Tbase TZ x2158 = x2148 + x2157;
-Tbase TZ x2159 = x2147 + x2158;
-Tbase TZ x2160 = x2146 + x2159;
-Tbase TZ x2161 = x2145 + x2160;
-Tbase TZ x2162 = x2144 + x2161;
-Tbase TZ x2163 = x2143 + x2162;
-Tbase TZ x2164 = 0x11;
-Tbase TZ x2165 = x2164 * x2163;
-Tbase TZ x2166 = x2142 + x2165;
-Tbase TZ x2167 = x2129 + x2166;
-Tbase TZ x2168 = 0x17;
-Tbase TZ x2169 = x2167 >>> x2168;
-Tbase TZ x2170 = x1869 * x178;
-Tbase TZ x2171 = x1872 * x177;
-Tbase TZ x2172 = x1875 * x176;
-Tbase TZ x2173 = x1878 * x175;
-Tbase TZ x2174 = x1881 * x174;
-Tbase TZ x2175 = x1884 * x173;
-Tbase TZ x2176 = x1887 * x172;
-Tbase TZ x2177 = x1890 * x171;
-Tbase TZ x2178 = x2176 + x2177;
-Tbase TZ x2179 = x2175 + x2178;
-Tbase TZ x2180 = x2174 + x2179;
-Tbase TZ x2181 = x2173 + x2180;
-Tbase TZ x2182 = x2172 + x2181;
-Tbase TZ x2183 = x2171 + x2182;
-Tbase TZ x2184 = x2170 + x2183;
-Tbase TZ x2185 = x1839 * x170;
-Tbase TZ x2186 = x1842 * x169;
-Tbase TZ x2187 = x1845 * x168;
-Tbase TZ x2188 = x1848 * x167;
-Tbase TZ x2189 = x1851 * x166;
-Tbase TZ x2190 = x1854 * x165;
-Tbase TZ x2191 = x1857 * x164;
-Tbase TZ x2192 = x1860 * x163;
-Tbase TZ x2193 = x1863 * x162;
-Tbase TZ x2194 = x1866 * x161;
-Tbase TZ x2195 = x2193 + x2194;
-Tbase TZ x2196 = x2192 + x2195;
-Tbase TZ x2197 = x2191 + x2196;
-Tbase TZ x2198 = x2190 + x2197;
-Tbase TZ x2199 = x2189 + x2198;
-Tbase TZ x2200 = x2188 + x2199;
-Tbase TZ x2201 = x2187 + x2200;
-Tbase TZ x2202 = x2186 + x2201;
-Tbase TZ x2203 = x2185 + x2202;
-Tbase TZ x2204 = 0x11;
-Tbase TZ x2205 = x2204 * x2203;
-Tbase TZ x2206 = x2184 + x2205;
-Tbase TZ x2207 = x2169 + x2206;
-Tbase TZ x2208 = 0x17;
-Tbase TZ x2209 = x2207 >>> x2208;
-Tbase TZ x2210 = x1866 * x178;
-Tbase TZ x2211 = x1869 * x177;
-Tbase TZ x2212 = x1872 * x176;
-Tbase TZ x2213 = x1875 * x175;
-Tbase TZ x2214 = x1878 * x174;
-Tbase TZ x2215 = x1881 * x173;
-Tbase TZ x2216 = x1884 * x172;
-Tbase TZ x2217 = x1887 * x171;
-Tbase TZ x2218 = x1890 * x170;
-Tbase TZ x2219 = x2217 + x2218;
-Tbase TZ x2220 = x2216 + x2219;
-Tbase TZ x2221 = x2215 + x2220;
-Tbase TZ x2222 = x2214 + x2221;
-Tbase TZ x2223 = x2213 + x2222;
-Tbase TZ x2224 = x2212 + x2223;
-Tbase TZ x2225 = x2211 + x2224;
-Tbase TZ x2226 = x2210 + x2225;
-Tbase TZ x2227 = x1839 * x169;
-Tbase TZ x2228 = x1842 * x168;
-Tbase TZ x2229 = x1845 * x167;
-Tbase TZ x2230 = x1848 * x166;
-Tbase TZ x2231 = x1851 * x165;
-Tbase TZ x2232 = x1854 * x164;
-Tbase TZ x2233 = x1857 * x163;
-Tbase TZ x2234 = x1860 * x162;
-Tbase TZ x2235 = x1863 * x161;
-Tbase TZ x2236 = x2234 + x2235;
-Tbase TZ x2237 = x2233 + x2236;
-Tbase TZ x2238 = x2232 + x2237;
-Tbase TZ x2239 = x2231 + x2238;
-Tbase TZ x2240 = x2230 + x2239;
-Tbase TZ x2241 = x2229 + x2240;
-Tbase TZ x2242 = x2228 + x2241;
-Tbase TZ x2243 = x2227 + x2242;
-Tbase TZ x2244 = 0x11;
-Tbase TZ x2245 = x2244 * x2243;
-Tbase TZ x2246 = x2226 + x2245;
-Tbase TZ x2247 = x2209 + x2246;
-Tbase TZ x2248 = 0x17;
-Tbase TZ x2249 = x2247 >>> x2248;
-Tbase TZ x2250 = x1863 * x178;
-Tbase TZ x2251 = x1866 * x177;
-Tbase TZ x2252 = x1869 * x176;
-Tbase TZ x2253 = x1872 * x175;
-Tbase TZ x2254 = x1875 * x174;
-Tbase TZ x2255 = x1878 * x173;
-Tbase TZ x2256 = x1881 * x172;
-Tbase TZ x2257 = x1884 * x171;
-Tbase TZ x2258 = x1887 * x170;
-Tbase TZ x2259 = x1890 * x169;
-Tbase TZ x2260 = x2258 + x2259;
-Tbase TZ x2261 = x2257 + x2260;
-Tbase TZ x2262 = x2256 + x2261;
-Tbase TZ x2263 = x2255 + x2262;
-Tbase TZ x2264 = x2254 + x2263;
-Tbase TZ x2265 = x2253 + x2264;
-Tbase TZ x2266 = x2252 + x2265;
-Tbase TZ x2267 = x2251 + x2266;
-Tbase TZ x2268 = x2250 + x2267;
-Tbase TZ x2269 = x1839 * x168;
-Tbase TZ x2270 = x1842 * x167;
-Tbase TZ x2271 = x1845 * x166;
-Tbase TZ x2272 = x1848 * x165;
-Tbase TZ x2273 = x1851 * x164;
-Tbase TZ x2274 = x1854 * x163;
-Tbase TZ x2275 = x1857 * x162;
-Tbase TZ x2276 = x1860 * x161;
-Tbase TZ x2277 = x2275 + x2276;
-Tbase TZ x2278 = x2274 + x2277;
-Tbase TZ x2279 = x2273 + x2278;
-Tbase TZ x2280 = x2272 + x2279;
-Tbase TZ x2281 = x2271 + x2280;
-Tbase TZ x2282 = x2270 + x2281;
-Tbase TZ x2283 = x2269 + x2282;
-Tbase TZ x2284 = 0x11;
-Tbase TZ x2285 = x2284 * x2283;
-Tbase TZ x2286 = x2268 + x2285;
-Tbase TZ x2287 = x2249 + x2286;
-Tbase TZ x2288 = 0x17;
-Tbase TZ x2289 = x2287 >>> x2288;
-Tbase TZ x2290 = x1860 * x178;
-Tbase TZ x2291 = x1863 * x177;
-Tbase TZ x2292 = x1866 * x176;
-Tbase TZ x2293 = x1869 * x175;
-Tbase TZ x2294 = x1872 * x174;
-Tbase TZ x2295 = x1875 * x173;
-Tbase TZ x2296 = x1878 * x172;
-Tbase TZ x2297 = x1881 * x171;
-Tbase TZ x2298 = x1884 * x170;
-Tbase TZ x2299 = x1887 * x169;
-Tbase TZ x2300 = x1890 * x168;
-Tbase TZ x2301 = x2299 + x2300;
-Tbase TZ x2302 = x2298 + x2301;
-Tbase TZ x2303 = x2297 + x2302;
-Tbase TZ x2304 = x2296 + x2303;
-Tbase TZ x2305 = x2295 + x2304;
-Tbase TZ x2306 = x2294 + x2305;
-Tbase TZ x2307 = x2293 + x2306;
-Tbase TZ x2308 = x2292 + x2307;
-Tbase TZ x2309 = x2291 + x2308;
-Tbase TZ x2310 = x2290 + x2309;
-Tbase TZ x2311 = x1839 * x167;
-Tbase TZ x2312 = x1842 * x166;
-Tbase TZ x2313 = x1845 * x165;
-Tbase TZ x2314 = x1848 * x164;
-Tbase TZ x2315 = x1851 * x163;
-Tbase TZ x2316 = x1854 * x162;
-Tbase TZ x2317 = x1857 * x161;
-Tbase TZ x2318 = x2316 + x2317;
-Tbase TZ x2319 = x2315 + x2318;
-Tbase TZ x2320 = x2314 + x2319;
-Tbase TZ x2321 = x2313 + x2320;
-Tbase TZ x2322 = x2312 + x2321;
-Tbase TZ x2323 = x2311 + x2322;
-Tbase TZ x2324 = 0x11;
-Tbase TZ x2325 = x2324 * x2323;
-Tbase TZ x2326 = x2310 + x2325;
-Tbase TZ x2327 = x2289 + x2326;
-Tbase TZ x2328 = 0x17;
-Tbase TZ x2329 = x2327 >>> x2328;
-Tbase TZ x2330 = x1857 * x178;
-Tbase TZ x2331 = x1860 * x177;
-Tbase TZ x2332 = x1863 * x176;
-Tbase TZ x2333 = x1866 * x175;
-Tbase TZ x2334 = x1869 * x174;
-Tbase TZ x2335 = x1872 * x173;
-Tbase TZ x2336 = x1875 * x172;
-Tbase TZ x2337 = x1878 * x171;
-Tbase TZ x2338 = x1881 * x170;
-Tbase TZ x2339 = x1884 * x169;
-Tbase TZ x2340 = x1887 * x168;
-Tbase TZ x2341 = x1890 * x167;
-Tbase TZ x2342 = x2340 + x2341;
-Tbase TZ x2343 = x2339 + x2342;
-Tbase TZ x2344 = x2338 + x2343;
-Tbase TZ x2345 = x2337 + x2344;
-Tbase TZ x2346 = x2336 + x2345;
-Tbase TZ x2347 = x2335 + x2346;
-Tbase TZ x2348 = x2334 + x2347;
-Tbase TZ x2349 = x2333 + x2348;
-Tbase TZ x2350 = x2332 + x2349;
-Tbase TZ x2351 = x2331 + x2350;
-Tbase TZ x2352 = x2330 + x2351;
-Tbase TZ x2353 = x1839 * x166;
-Tbase TZ x2354 = x1842 * x165;
-Tbase TZ x2355 = x1845 * x164;
-Tbase TZ x2356 = x1848 * x163;
-Tbase TZ x2357 = x1851 * x162;
-Tbase TZ x2358 = x1854 * x161;
-Tbase TZ x2359 = x2357 + x2358;
-Tbase TZ x2360 = x2356 + x2359;
-Tbase TZ x2361 = x2355 + x2360;
-Tbase TZ x2362 = x2354 + x2361;
-Tbase TZ x2363 = x2353 + x2362;
-Tbase TZ x2364 = 0x11;
-Tbase TZ x2365 = x2364 * x2363;
-Tbase TZ x2366 = x2352 + x2365;
-Tbase TZ x2367 = x2329 + x2366;
-Tbase TZ x2368 = 0x17;
-Tbase TZ x2369 = x2367 >>> x2368;
-Tbase TZ x2370 = x1854 * x178;
-Tbase TZ x2371 = x1857 * x177;
-Tbase TZ x2372 = x1860 * x176;
-Tbase TZ x2373 = x1863 * x175;
-Tbase TZ x2374 = x1866 * x174;
-Tbase TZ x2375 = x1869 * x173;
-Tbase TZ x2376 = x1872 * x172;
-Tbase TZ x2377 = x1875 * x171;
-Tbase TZ x2378 = x1878 * x170;
-Tbase TZ x2379 = x1881 * x169;
-Tbase TZ x2380 = x1884 * x168;
-Tbase TZ x2381 = x1887 * x167;
-Tbase TZ x2382 = x1890 * x166;
-Tbase TZ x2383 = x2381 + x2382;
-Tbase TZ x2384 = x2380 + x2383;
-Tbase TZ x2385 = x2379 + x2384;
-Tbase TZ x2386 = x2378 + x2385;
-Tbase TZ x2387 = x2377 + x2386;
-Tbase TZ x2388 = x2376 + x2387;
-Tbase TZ x2389 = x2375 + x2388;
-Tbase TZ x2390 = x2374 + x2389;
-Tbase TZ x2391 = x2373 + x2390;
-Tbase TZ x2392 = x2372 + x2391;
-Tbase TZ x2393 = x2371 + x2392;
-Tbase TZ x2394 = x2370 + x2393;
-Tbase TZ x2395 = x1839 * x165;
-Tbase TZ x2396 = x1842 * x164;
-Tbase TZ x2397 = x1845 * x163;
-Tbase TZ x2398 = x1848 * x162;
-Tbase TZ x2399 = x1851 * x161;
-Tbase TZ x2400 = x2398 + x2399;
-Tbase TZ x2401 = x2397 + x2400;
-Tbase TZ x2402 = x2396 + x2401;
-Tbase TZ x2403 = x2395 + x2402;
-Tbase TZ x2404 = 0x11;
-Tbase TZ x2405 = x2404 * x2403;
-Tbase TZ x2406 = x2394 + x2405;
-Tbase TZ x2407 = x2369 + x2406;
-Tbase TZ x2408 = 0x17;
-Tbase TZ x2409 = x2407 >>> x2408;
-Tbase TZ x2410 = x1851 * x178;
-Tbase TZ x2411 = x1854 * x177;
-Tbase TZ x2412 = x1857 * x176;
-Tbase TZ x2413 = x1860 * x175;
-Tbase TZ x2414 = x1863 * x174;
-Tbase TZ x2415 = x1866 * x173;
-Tbase TZ x2416 = x1869 * x172;
-Tbase TZ x2417 = x1872 * x171;
-Tbase TZ x2418 = x1875 * x170;
-Tbase TZ x2419 = x1878 * x169;
-Tbase TZ x2420 = x1881 * x168;
-Tbase TZ x2421 = x1884 * x167;
-Tbase TZ x2422 = x1887 * x166;
-Tbase TZ x2423 = x1890 * x165;
-Tbase TZ x2424 = x2422 + x2423;
-Tbase TZ x2425 = x2421 + x2424;
-Tbase TZ x2426 = x2420 + x2425;
-Tbase TZ x2427 = x2419 + x2426;
-Tbase TZ x2428 = x2418 + x2427;
-Tbase TZ x2429 = x2417 + x2428;
-Tbase TZ x2430 = x2416 + x2429;
-Tbase TZ x2431 = x2415 + x2430;
-Tbase TZ x2432 = x2414 + x2431;
-Tbase TZ x2433 = x2413 + x2432;
-Tbase TZ x2434 = x2412 + x2433;
-Tbase TZ x2435 = x2411 + x2434;
-Tbase TZ x2436 = x2410 + x2435;
-Tbase TZ x2437 = x1839 * x164;
-Tbase TZ x2438 = x1842 * x163;
-Tbase TZ x2439 = x1845 * x162;
-Tbase TZ x2440 = x1848 * x161;
-Tbase TZ x2441 = x2439 + x2440;
-Tbase TZ x2442 = x2438 + x2441;
-Tbase TZ x2443 = x2437 + x2442;
-Tbase TZ x2444 = 0x11;
-Tbase TZ x2445 = x2444 * x2443;
-Tbase TZ x2446 = x2436 + x2445;
-Tbase TZ x2447 = x2409 + x2446;
-Tbase TZ x2448 = 0x17;
-Tbase TZ x2449 = x2447 >>> x2448;
-Tbase TZ x2450 = x1848 * x178;
-Tbase TZ x2451 = x1851 * x177;
-Tbase TZ x2452 = x1854 * x176;
-Tbase TZ x2453 = x1857 * x175;
-Tbase TZ x2454 = x1860 * x174;
-Tbase TZ x2455 = x1863 * x173;
-Tbase TZ x2456 = x1866 * x172;
-Tbase TZ x2457 = x1869 * x171;
-Tbase TZ x2458 = x1872 * x170;
-Tbase TZ x2459 = x1875 * x169;
-Tbase TZ x2460 = x1878 * x168;
-Tbase TZ x2461 = x1881 * x167;
-Tbase TZ x2462 = x1884 * x166;
-Tbase TZ x2463 = x1887 * x165;
-Tbase TZ x2464 = x1890 * x164;
-Tbase TZ x2465 = x2463 + x2464;
-Tbase TZ x2466 = x2462 + x2465;
-Tbase TZ x2467 = x2461 + x2466;
-Tbase TZ x2468 = x2460 + x2467;
-Tbase TZ x2469 = x2459 + x2468;
-Tbase TZ x2470 = x2458 + x2469;
-Tbase TZ x2471 = x2457 + x2470;
-Tbase TZ x2472 = x2456 + x2471;
-Tbase TZ x2473 = x2455 + x2472;
-Tbase TZ x2474 = x2454 + x2473;
-Tbase TZ x2475 = x2453 + x2474;
-Tbase TZ x2476 = x2452 + x2475;
-Tbase TZ x2477 = x2451 + x2476;
-Tbase TZ x2478 = x2450 + x2477;
-Tbase TZ x2479 = x1839 * x163;
-Tbase TZ x2480 = x1842 * x162;
-Tbase TZ x2481 = x1845 * x161;
-Tbase TZ x2482 = x2480 + x2481;
-Tbase TZ x2483 = x2479 + x2482;
-Tbase TZ x2484 = 0x11;
-Tbase TZ x2485 = x2484 * x2483;
-Tbase TZ x2486 = x2478 + x2485;
-Tbase TZ x2487 = x2449 + x2486;
-Tbase TZ x2488 = 0x17;
-Tbase TZ x2489 = x2487 >>> x2488;
-Tbase TZ x2490 = x1845 * x178;
-Tbase TZ x2491 = x1848 * x177;
-Tbase TZ x2492 = x1851 * x176;
-Tbase TZ x2493 = x1854 * x175;
-Tbase TZ x2494 = x1857 * x174;
-Tbase TZ x2495 = x1860 * x173;
-Tbase TZ x2496 = x1863 * x172;
-Tbase TZ x2497 = x1866 * x171;
-Tbase TZ x2498 = x1869 * x170;
-Tbase TZ x2499 = x1872 * x169;
-Tbase TZ x2500 = x1875 * x168;
-Tbase TZ x2501 = x1878 * x167;
-Tbase TZ x2502 = x1881 * x166;
-Tbase TZ x2503 = x1884 * x165;
-Tbase TZ x2504 = x1887 * x164;
-Tbase TZ x2505 = x1890 * x163;
-Tbase TZ x2506 = x2504 + x2505;
-Tbase TZ x2507 = x2503 + x2506;
-Tbase TZ x2508 = x2502 + x2507;
-Tbase TZ x2509 = x2501 + x2508;
-Tbase TZ x2510 = x2500 + x2509;
-Tbase TZ x2511 = x2499 + x2510;
-Tbase TZ x2512 = x2498 + x2511;
-Tbase TZ x2513 = x2497 + x2512;
-Tbase TZ x2514 = x2496 + x2513;
-Tbase TZ x2515 = x2495 + x2514;
-Tbase TZ x2516 = x2494 + x2515;
-Tbase TZ x2517 = x2493 + x2516;
-Tbase TZ x2518 = x2492 + x2517;
-Tbase TZ x2519 = x2491 + x2518;
-Tbase TZ x2520 = x2490 + x2519;
-Tbase TZ x2521 = x1839 * x162;
-Tbase TZ x2522 = x1842 * x161;
-Tbase TZ x2523 = x2521 + x2522;
-Tbase TZ x2524 = 0x11;
-Tbase TZ x2525 = x2524 * x2523;
-Tbase TZ x2526 = x2520 + x2525;
-Tbase TZ x2527 = x2489 + x2526;
-Tbase TZ x2528 = 0x17;
-Tbase TZ x2529 = x2527 >>> x2528;
-Tbase TZ x2530 = x1842 * x178;
-Tbase TZ x2531 = x1845 * x177;
-Tbase TZ x2532 = x1848 * x176;
-Tbase TZ x2533 = x1851 * x175;
-Tbase TZ x2534 = x1854 * x174;
-Tbase TZ x2535 = x1857 * x173;
-Tbase TZ x2536 = x1860 * x172;
-Tbase TZ x2537 = x1863 * x171;
-Tbase TZ x2538 = x1866 * x170;
-Tbase TZ x2539 = x1869 * x169;
-Tbase TZ x2540 = x1872 * x168;
-Tbase TZ x2541 = x1875 * x167;
-Tbase TZ x2542 = x1878 * x166;
-Tbase TZ x2543 = x1881 * x165;
-Tbase TZ x2544 = x1884 * x164;
-Tbase TZ x2545 = x1887 * x163;
-Tbase TZ x2546 = x1890 * x162;
-Tbase TZ x2547 = x2545 + x2546;
-Tbase TZ x2548 = x2544 + x2547;
-Tbase TZ x2549 = x2543 + x2548;
-Tbase TZ x2550 = x2542 + x2549;
-Tbase TZ x2551 = x2541 + x2550;
-Tbase TZ x2552 = x2540 + x2551;
-Tbase TZ x2553 = x2539 + x2552;
-Tbase TZ x2554 = x2538 + x2553;
-Tbase TZ x2555 = x2537 + x2554;
-Tbase TZ x2556 = x2536 + x2555;
-Tbase TZ x2557 = x2535 + x2556;
-Tbase TZ x2558 = x2534 + x2557;
-Tbase TZ x2559 = x2533 + x2558;
-Tbase TZ x2560 = x2532 + x2559;
-Tbase TZ x2561 = x2531 + x2560;
-Tbase TZ x2562 = x2530 + x2561;
-Tbase TZ x2563 = x1839 * x161;
-Tbase TZ x2564 = 0x11;
-Tbase TZ x2565 = x2564 * x2563;
-Tbase TZ x2566 = x2562 + x2565;
-Tbase TZ x2567 = x2529 + x2566;
-Tbase TZ x2568 = 0x17;
-Tbase TZ x2569 = x2567 >>> x2568;
-Tbase TZ x2570 = x1839 * x178;
-Tbase TZ x2571 = x1842 * x177;
-Tbase TZ x2572 = x1845 * x176;
-Tbase TZ x2573 = x1848 * x175;
-Tbase TZ x2574 = x1851 * x174;
-Tbase TZ x2575 = x1854 * x173;
-Tbase TZ x2576 = x1857 * x172;
-Tbase TZ x2577 = x1860 * x171;
-Tbase TZ x2578 = x1863 * x170;
-Tbase TZ x2579 = x1866 * x169;
-Tbase TZ x2580 = x1869 * x168;
-Tbase TZ x2581 = x1872 * x167;
-Tbase TZ x2582 = x1875 * x166;
-Tbase TZ x2583 = x1878 * x165;
-Tbase TZ x2584 = x1881 * x164;
-Tbase TZ x2585 = x1884 * x163;
-Tbase TZ x2586 = x1887 * x162;
-Tbase TZ x2587 = x1890 * x161;
-Tbase TZ x2588 = x2586 + x2587;
-Tbase TZ x2589 = x2585 + x2588;
-Tbase TZ x2590 = x2584 + x2589;
-Tbase TZ x2591 = x2583 + x2590;
-Tbase TZ x2592 = x2582 + x2591;
-Tbase TZ x2593 = x2581 + x2592;
-Tbase TZ x2594 = x2580 + x2593;
-Tbase TZ x2595 = x2579 + x2594;
-Tbase TZ x2596 = x2578 + x2595;
-Tbase TZ x2597 = x2577 + x2596;
-Tbase TZ x2598 = x2576 + x2597;
-Tbase TZ x2599 = x2575 + x2598;
-Tbase TZ x2600 = x2574 + x2599;
-Tbase TZ x2601 = x2573 + x2600;
-Tbase TZ x2602 = x2572 + x2601;
-Tbase TZ x2603 = x2571 + x2602;
-Tbase TZ x2604 = x2570 + x2603;
-Tbase TZ x2605 = x2569 + x2604;
-Tbase TZ x2606 = 0x17;
-Tbase TZ x2607 = x2605 >>> x2606;
-Tbase TZ x2608 = 0x11;
-Tbase TZ x2609 = x2608 * x2607;
-Tbase TZ x2610 = 0x7fffff;
-Tbase TZ x2611 = x1927 & x2610;
-Tbase TZ x2612 = x2609 + x2611;
-Tbase TZ x2613 = 0x17;
-Tbase TZ x2614 = x2612 >>> x2613;
-Tbase TZ x2615 = 0x7fffff;
-Tbase TZ x2616 = x1967 & x2615;
-Tbase TZ x2617 = x2614 + x2616;
-Tbase TZ x2618 = 0x7fffff;
-Tbase TZ x2619 = x2605 & x2618;
-Tbase TZ x2620 = 0x7fffff;
-Tbase TZ x2621 = x2567 & x2620;
-Tbase TZ x2622 = 0x7fffff;
-Tbase TZ x2623 = x2527 & x2622;
-Tbase TZ x2624 = 0x7fffff;
-Tbase TZ x2625 = x2487 & x2624;
-Tbase TZ x2626 = 0x7fffff;
-Tbase TZ x2627 = x2447 & x2626;
-Tbase TZ x2628 = 0x7fffff;
-Tbase TZ x2629 = x2407 & x2628;
-Tbase TZ x2630 = 0x7fffff;
-Tbase TZ x2631 = x2367 & x2630;
-Tbase TZ x2632 = 0x7fffff;
-Tbase TZ x2633 = x2327 & x2632;
-Tbase TZ x2634 = 0x7fffff;
-Tbase TZ x2635 = x2287 & x2634;
-Tbase TZ x2636 = 0x7fffff;
-Tbase TZ x2637 = x2247 & x2636;
-Tbase TZ x2638 = 0x7fffff;
-Tbase TZ x2639 = x2207 & x2638;
-Tbase TZ x2640 = 0x7fffff;
-Tbase TZ x2641 = x2167 & x2640;
-Tbase TZ x2642 = 0x7fffff;
-Tbase TZ x2643 = x2127 & x2642;
-Tbase TZ x2644 = 0x7fffff;
-Tbase TZ x2645 = x2087 & x2644;
-Tbase TZ x2646 = 0x7fffff;
-Tbase TZ x2647 = x2047 & x2646;
-Tbase TZ x2648 = 0x17;
-Tbase TZ x2649 = x2617 >>> x2648;
-Tbase TZ x2650 = 0x7fffff;
-Tbase TZ x2651 = x2007 & x2650;
-Tbase TZ x2652 = x2649 + x2651;
-Tbase TZ x2653 = 0x7fffff;
-Tbase TZ x2654 = x2617 & x2653;
-Tbase TZ x2655 = 0x7fffff;
-Tbase TZ x2656 = x2612 & x2655;
-Tbase TZ x2657 = x1836 * x998;
-Tbase TZ x2658 = x1819 * x995;
-Tbase TZ x2659 = x1820 * x992;
-Tbase TZ x2660 = x1821 * x989;
-Tbase TZ x2661 = x1822 * x986;
-Tbase TZ x2662 = x1823 * x983;
-Tbase TZ x2663 = x1824 * x980;
-Tbase TZ x2664 = x1825 * x977;
-Tbase TZ x2665 = x1826 * x974;
-Tbase TZ x2666 = x1827 * x971;
-Tbase TZ x2667 = x1828 * x968;
-Tbase TZ x2668 = x1829 * x965;
-Tbase TZ x2669 = x1830 * x962;
-Tbase TZ x2670 = x1831 * x959;
-Tbase TZ x2671 = x1832 * x956;
-Tbase TZ x2672 = x1833 * x953;
-Tbase TZ x2673 = x1834 * x950;
-Tbase TZ x2674 = x1835 * x947;
-Tbase TZ x2675 = x2673 + x2674;
-Tbase TZ x2676 = x2672 + x2675;
-Tbase TZ x2677 = x2671 + x2676;
-Tbase TZ x2678 = x2670 + x2677;
-Tbase TZ x2679 = x2669 + x2678;
-Tbase TZ x2680 = x2668 + x2679;
-Tbase TZ x2681 = x2667 + x2680;
-Tbase TZ x2682 = x2666 + x2681;
-Tbase TZ x2683 = x2665 + x2682;
-Tbase TZ x2684 = x2664 + x2683;
-Tbase TZ x2685 = x2663 + x2684;
-Tbase TZ x2686 = x2662 + x2685;
-Tbase TZ x2687 = x2661 + x2686;
-Tbase TZ x2688 = x2660 + x2687;
-Tbase TZ x2689 = x2659 + x2688;
-Tbase TZ x2690 = x2658 + x2689;
-Tbase TZ x2691 = 0x11;
-Tbase TZ x2692 = x2691 * x2690;
-Tbase TZ x2693 = x2657 + x2692;
-Tbase TZ x2694 = 0x17;
-Tbase TZ x2695 = x2693 >>> x2694;
-Tbase TZ x2696 = x1835 * x998;
-Tbase TZ x2697 = x1836 * x995;
-Tbase TZ x2698 = x2696 + x2697;
-Tbase TZ x2699 = x1819 * x992;
-Tbase TZ x2700 = x1820 * x989;
-Tbase TZ x2701 = x1821 * x986;
-Tbase TZ x2702 = x1822 * x983;
-Tbase TZ x2703 = x1823 * x980;
-Tbase TZ x2704 = x1824 * x977;
-Tbase TZ x2705 = x1825 * x974;
-Tbase TZ x2706 = x1826 * x971;
-Tbase TZ x2707 = x1827 * x968;
-Tbase TZ x2708 = x1828 * x965;
-Tbase TZ x2709 = x1829 * x962;
-Tbase TZ x2710 = x1830 * x959;
-Tbase TZ x2711 = x1831 * x956;
-Tbase TZ x2712 = x1832 * x953;
-Tbase TZ x2713 = x1833 * x950;
-Tbase TZ x2714 = x1834 * x947;
-Tbase TZ x2715 = x2713 + x2714;
-Tbase TZ x2716 = x2712 + x2715;
-Tbase TZ x2717 = x2711 + x2716;
-Tbase TZ x2718 = x2710 + x2717;
-Tbase TZ x2719 = x2709 + x2718;
-Tbase TZ x2720 = x2708 + x2719;
-Tbase TZ x2721 = x2707 + x2720;
-Tbase TZ x2722 = x2706 + x2721;
-Tbase TZ x2723 = x2705 + x2722;
-Tbase TZ x2724 = x2704 + x2723;
-Tbase TZ x2725 = x2703 + x2724;
-Tbase TZ x2726 = x2702 + x2725;
-Tbase TZ x2727 = x2701 + x2726;
-Tbase TZ x2728 = x2700 + x2727;
-Tbase TZ x2729 = x2699 + x2728;
-Tbase TZ x2730 = 0x11;
-Tbase TZ x2731 = x2730 * x2729;
-Tbase TZ x2732 = x2698 + x2731;
-Tbase TZ x2733 = x2695 + x2732;
-Tbase TZ x2734 = 0x17;
-Tbase TZ x2735 = x2733 >>> x2734;
-Tbase TZ x2736 = x1834 * x998;
-Tbase TZ x2737 = x1835 * x995;
-Tbase TZ x2738 = x1836 * x992;
-Tbase TZ x2739 = x2737 + x2738;
-Tbase TZ x2740 = x2736 + x2739;
-Tbase TZ x2741 = x1819 * x989;
-Tbase TZ x2742 = x1820 * x986;
-Tbase TZ x2743 = x1821 * x983;
-Tbase TZ x2744 = x1822 * x980;
-Tbase TZ x2745 = x1823 * x977;
-Tbase TZ x2746 = x1824 * x974;
-Tbase TZ x2747 = x1825 * x971;
-Tbase TZ x2748 = x1826 * x968;
-Tbase TZ x2749 = x1827 * x965;
-Tbase TZ x2750 = x1828 * x962;
-Tbase TZ x2751 = x1829 * x959;
-Tbase TZ x2752 = x1830 * x956;
-Tbase TZ x2753 = x1831 * x953;
-Tbase TZ x2754 = x1832 * x950;
-Tbase TZ x2755 = x1833 * x947;
-Tbase TZ x2756 = x2754 + x2755;
-Tbase TZ x2757 = x2753 + x2756;
-Tbase TZ x2758 = x2752 + x2757;
-Tbase TZ x2759 = x2751 + x2758;
-Tbase TZ x2760 = x2750 + x2759;
-Tbase TZ x2761 = x2749 + x2760;
-Tbase TZ x2762 = x2748 + x2761;
-Tbase TZ x2763 = x2747 + x2762;
-Tbase TZ x2764 = x2746 + x2763;
-Tbase TZ x2765 = x2745 + x2764;
-Tbase TZ x2766 = x2744 + x2765;
-Tbase TZ x2767 = x2743 + x2766;
-Tbase TZ x2768 = x2742 + x2767;
-Tbase TZ x2769 = x2741 + x2768;
-Tbase TZ x2770 = 0x11;
-Tbase TZ x2771 = x2770 * x2769;
-Tbase TZ x2772 = x2740 + x2771;
-Tbase TZ x2773 = x2735 + x2772;
-Tbase TZ x2774 = 0x17;
-Tbase TZ x2775 = x2773 >>> x2774;
-Tbase TZ x2776 = x1833 * x998;
-Tbase TZ x2777 = x1834 * x995;
-Tbase TZ x2778 = x1835 * x992;
-Tbase TZ x2779 = x1836 * x989;
-Tbase TZ x2780 = x2778 + x2779;
-Tbase TZ x2781 = x2777 + x2780;
-Tbase TZ x2782 = x2776 + x2781;
-Tbase TZ x2783 = x1819 * x986;
-Tbase TZ x2784 = x1820 * x983;
-Tbase TZ x2785 = x1821 * x980;
-Tbase TZ x2786 = x1822 * x977;
-Tbase TZ x2787 = x1823 * x974;
-Tbase TZ x2788 = x1824 * x971;
-Tbase TZ x2789 = x1825 * x968;
-Tbase TZ x2790 = x1826 * x965;
-Tbase TZ x2791 = x1827 * x962;
-Tbase TZ x2792 = x1828 * x959;
-Tbase TZ x2793 = x1829 * x956;
-Tbase TZ x2794 = x1830 * x953;
-Tbase TZ x2795 = x1831 * x950;
-Tbase TZ x2796 = x1832 * x947;
-Tbase TZ x2797 = x2795 + x2796;
-Tbase TZ x2798 = x2794 + x2797;
-Tbase TZ x2799 = x2793 + x2798;
-Tbase TZ x2800 = x2792 + x2799;
-Tbase TZ x2801 = x2791 + x2800;
-Tbase TZ x2802 = x2790 + x2801;
-Tbase TZ x2803 = x2789 + x2802;
-Tbase TZ x2804 = x2788 + x2803;
-Tbase TZ x2805 = x2787 + x2804;
-Tbase TZ x2806 = x2786 + x2805;
-Tbase TZ x2807 = x2785 + x2806;
-Tbase TZ x2808 = x2784 + x2807;
-Tbase TZ x2809 = x2783 + x2808;
-Tbase TZ x2810 = 0x11;
-Tbase TZ x2811 = x2810 * x2809;
-Tbase TZ x2812 = x2782 + x2811;
-Tbase TZ x2813 = x2775 + x2812;
-Tbase TZ x2814 = 0x17;
-Tbase TZ x2815 = x2813 >>> x2814;
-Tbase TZ x2816 = x1832 * x998;
-Tbase TZ x2817 = x1833 * x995;
-Tbase TZ x2818 = x1834 * x992;
-Tbase TZ x2819 = x1835 * x989;
-Tbase TZ x2820 = x1836 * x986;
-Tbase TZ x2821 = x2819 + x2820;
-Tbase TZ x2822 = x2818 + x2821;
-Tbase TZ x2823 = x2817 + x2822;
-Tbase TZ x2824 = x2816 + x2823;
-Tbase TZ x2825 = x1819 * x983;
-Tbase TZ x2826 = x1820 * x980;
-Tbase TZ x2827 = x1821 * x977;
-Tbase TZ x2828 = x1822 * x974;
-Tbase TZ x2829 = x1823 * x971;
-Tbase TZ x2830 = x1824 * x968;
-Tbase TZ x2831 = x1825 * x965;
-Tbase TZ x2832 = x1826 * x962;
-Tbase TZ x2833 = x1827 * x959;
-Tbase TZ x2834 = x1828 * x956;
-Tbase TZ x2835 = x1829 * x953;
-Tbase TZ x2836 = x1830 * x950;
-Tbase TZ x2837 = x1831 * x947;
-Tbase TZ x2838 = x2836 + x2837;
-Tbase TZ x2839 = x2835 + x2838;
-Tbase TZ x2840 = x2834 + x2839;
-Tbase TZ x2841 = x2833 + x2840;
-Tbase TZ x2842 = x2832 + x2841;
-Tbase TZ x2843 = x2831 + x2842;
-Tbase TZ x2844 = x2830 + x2843;
-Tbase TZ x2845 = x2829 + x2844;
-Tbase TZ x2846 = x2828 + x2845;
-Tbase TZ x2847 = x2827 + x2846;
-Tbase TZ x2848 = x2826 + x2847;
-Tbase TZ x2849 = x2825 + x2848;
-Tbase TZ x2850 = 0x11;
-Tbase TZ x2851 = x2850 * x2849;
-Tbase TZ x2852 = x2824 + x2851;
-Tbase TZ x2853 = x2815 + x2852;
-Tbase TZ x2854 = 0x17;
-Tbase TZ x2855 = x2853 >>> x2854;
-Tbase TZ x2856 = x1831 * x998;
-Tbase TZ x2857 = x1832 * x995;
-Tbase TZ x2858 = x1833 * x992;
-Tbase TZ x2859 = x1834 * x989;
-Tbase TZ x2860 = x1835 * x986;
-Tbase TZ x2861 = x1836 * x983;
-Tbase TZ x2862 = x2860 + x2861;
-Tbase TZ x2863 = x2859 + x2862;
-Tbase TZ x2864 = x2858 + x2863;
-Tbase TZ x2865 = x2857 + x2864;
-Tbase TZ x2866 = x2856 + x2865;
-Tbase TZ x2867 = x1819 * x980;
-Tbase TZ x2868 = x1820 * x977;
-Tbase TZ x2869 = x1821 * x974;
-Tbase TZ x2870 = x1822 * x971;
-Tbase TZ x2871 = x1823 * x968;
-Tbase TZ x2872 = x1824 * x965;
-Tbase TZ x2873 = x1825 * x962;
-Tbase TZ x2874 = x1826 * x959;
-Tbase TZ x2875 = x1827 * x956;
-Tbase TZ x2876 = x1828 * x953;
-Tbase TZ x2877 = x1829 * x950;
-Tbase TZ x2878 = x1830 * x947;
-Tbase TZ x2879 = x2877 + x2878;
-Tbase TZ x2880 = x2876 + x2879;
-Tbase TZ x2881 = x2875 + x2880;
-Tbase TZ x2882 = x2874 + x2881;
-Tbase TZ x2883 = x2873 + x2882;
-Tbase TZ x2884 = x2872 + x2883;
-Tbase TZ x2885 = x2871 + x2884;
-Tbase TZ x2886 = x2870 + x2885;
-Tbase TZ x2887 = x2869 + x2886;
-Tbase TZ x2888 = x2868 + x2887;
-Tbase TZ x2889 = x2867 + x2888;
-Tbase TZ x2890 = 0x11;
-Tbase TZ x2891 = x2890 * x2889;
-Tbase TZ x2892 = x2866 + x2891;
-Tbase TZ x2893 = x2855 + x2892;
-Tbase TZ x2894 = 0x17;
-Tbase TZ x2895 = x2893 >>> x2894;
-Tbase TZ x2896 = x1830 * x998;
-Tbase TZ x2897 = x1831 * x995;
-Tbase TZ x2898 = x1832 * x992;
-Tbase TZ x2899 = x1833 * x989;
-Tbase TZ x2900 = x1834 * x986;
-Tbase TZ x2901 = x1835 * x983;
-Tbase TZ x2902 = x1836 * x980;
-Tbase TZ x2903 = x2901 + x2902;
-Tbase TZ x2904 = x2900 + x2903;
-Tbase TZ x2905 = x2899 + x2904;
-Tbase TZ x2906 = x2898 + x2905;
-Tbase TZ x2907 = x2897 + x2906;
-Tbase TZ x2908 = x2896 + x2907;
-Tbase TZ x2909 = x1819 * x977;
-Tbase TZ x2910 = x1820 * x974;
-Tbase TZ x2911 = x1821 * x971;
-Tbase TZ x2912 = x1822 * x968;
-Tbase TZ x2913 = x1823 * x965;
-Tbase TZ x2914 = x1824 * x962;
-Tbase TZ x2915 = x1825 * x959;
-Tbase TZ x2916 = x1826 * x956;
-Tbase TZ x2917 = x1827 * x953;
-Tbase TZ x2918 = x1828 * x950;
-Tbase TZ x2919 = x1829 * x947;
-Tbase TZ x2920 = x2918 + x2919;
-Tbase TZ x2921 = x2917 + x2920;
-Tbase TZ x2922 = x2916 + x2921;
-Tbase TZ x2923 = x2915 + x2922;
-Tbase TZ x2924 = x2914 + x2923;
-Tbase TZ x2925 = x2913 + x2924;
-Tbase TZ x2926 = x2912 + x2925;
-Tbase TZ x2927 = x2911 + x2926;
-Tbase TZ x2928 = x2910 + x2927;
-Tbase TZ x2929 = x2909 + x2928;
-Tbase TZ x2930 = 0x11;
-Tbase TZ x2931 = x2930 * x2929;
-Tbase TZ x2932 = x2908 + x2931;
-Tbase TZ x2933 = x2895 + x2932;
-Tbase TZ x2934 = 0x17;
-Tbase TZ x2935 = x2933 >>> x2934;
-Tbase TZ x2936 = x1829 * x998;
-Tbase TZ x2937 = x1830 * x995;
-Tbase TZ x2938 = x1831 * x992;
-Tbase TZ x2939 = x1832 * x989;
-Tbase TZ x2940 = x1833 * x986;
-Tbase TZ x2941 = x1834 * x983;
-Tbase TZ x2942 = x1835 * x980;
-Tbase TZ x2943 = x1836 * x977;
-Tbase TZ x2944 = x2942 + x2943;
-Tbase TZ x2945 = x2941 + x2944;
-Tbase TZ x2946 = x2940 + x2945;
-Tbase TZ x2947 = x2939 + x2946;
-Tbase TZ x2948 = x2938 + x2947;
-Tbase TZ x2949 = x2937 + x2948;
-Tbase TZ x2950 = x2936 + x2949;
-Tbase TZ x2951 = x1819 * x974;
-Tbase TZ x2952 = x1820 * x971;
-Tbase TZ x2953 = x1821 * x968;
-Tbase TZ x2954 = x1822 * x965;
-Tbase TZ x2955 = x1823 * x962;
-Tbase TZ x2956 = x1824 * x959;
-Tbase TZ x2957 = x1825 * x956;
-Tbase TZ x2958 = x1826 * x953;
-Tbase TZ x2959 = x1827 * x950;
-Tbase TZ x2960 = x1828 * x947;
-Tbase TZ x2961 = x2959 + x2960;
-Tbase TZ x2962 = x2958 + x2961;
-Tbase TZ x2963 = x2957 + x2962;
-Tbase TZ x2964 = x2956 + x2963;
-Tbase TZ x2965 = x2955 + x2964;
-Tbase TZ x2966 = x2954 + x2965;
-Tbase TZ x2967 = x2953 + x2966;
-Tbase TZ x2968 = x2952 + x2967;
-Tbase TZ x2969 = x2951 + x2968;
-Tbase TZ x2970 = 0x11;
-Tbase TZ x2971 = x2970 * x2969;
-Tbase TZ x2972 = x2950 + x2971;
-Tbase TZ x2973 = x2935 + x2972;
-Tbase TZ x2974 = 0x17;
-Tbase TZ x2975 = x2973 >>> x2974;
-Tbase TZ x2976 = x1828 * x998;
-Tbase TZ x2977 = x1829 * x995;
-Tbase TZ x2978 = x1830 * x992;
-Tbase TZ x2979 = x1831 * x989;
-Tbase TZ x2980 = x1832 * x986;
-Tbase TZ x2981 = x1833 * x983;
-Tbase TZ x2982 = x1834 * x980;
-Tbase TZ x2983 = x1835 * x977;
-Tbase TZ x2984 = x1836 * x974;
-Tbase TZ x2985 = x2983 + x2984;
-Tbase TZ x2986 = x2982 + x2985;
-Tbase TZ x2987 = x2981 + x2986;
-Tbase TZ x2988 = x2980 + x2987;
-Tbase TZ x2989 = x2979 + x2988;
-Tbase TZ x2990 = x2978 + x2989;
-Tbase TZ x2991 = x2977 + x2990;
-Tbase TZ x2992 = x2976 + x2991;
-Tbase TZ x2993 = x1819 * x971;
-Tbase TZ x2994 = x1820 * x968;
-Tbase TZ x2995 = x1821 * x965;
-Tbase TZ x2996 = x1822 * x962;
-Tbase TZ x2997 = x1823 * x959;
-Tbase TZ x2998 = x1824 * x956;
-Tbase TZ x2999 = x1825 * x953;
-Tbase TZ x3000 = x1826 * x950;
-Tbase TZ x3001 = x1827 * x947;
-Tbase TZ x3002 = x3000 + x3001;
-Tbase TZ x3003 = x2999 + x3002;
-Tbase TZ x3004 = x2998 + x3003;
-Tbase TZ x3005 = x2997 + x3004;
-Tbase TZ x3006 = x2996 + x3005;
-Tbase TZ x3007 = x2995 + x3006;
-Tbase TZ x3008 = x2994 + x3007;
-Tbase TZ x3009 = x2993 + x3008;
-Tbase TZ x3010 = 0x11;
-Tbase TZ x3011 = x3010 * x3009;
-Tbase TZ x3012 = x2992 + x3011;
-Tbase TZ x3013 = x2975 + x3012;
-Tbase TZ x3014 = 0x17;
-Tbase TZ x3015 = x3013 >>> x3014;
-Tbase TZ x3016 = x1827 * x998;
-Tbase TZ x3017 = x1828 * x995;
-Tbase TZ x3018 = x1829 * x992;
-Tbase TZ x3019 = x1830 * x989;
-Tbase TZ x3020 = x1831 * x986;
-Tbase TZ x3021 = x1832 * x983;
-Tbase TZ x3022 = x1833 * x980;
-Tbase TZ x3023 = x1834 * x977;
-Tbase TZ x3024 = x1835 * x974;
-Tbase TZ x3025 = x1836 * x971;
-Tbase TZ x3026 = x3024 + x3025;
-Tbase TZ x3027 = x3023 + x3026;
-Tbase TZ x3028 = x3022 + x3027;
-Tbase TZ x3029 = x3021 + x3028;
-Tbase TZ x3030 = x3020 + x3029;
-Tbase TZ x3031 = x3019 + x3030;
-Tbase TZ x3032 = x3018 + x3031;
-Tbase TZ x3033 = x3017 + x3032;
-Tbase TZ x3034 = x3016 + x3033;
-Tbase TZ x3035 = x1819 * x968;
-Tbase TZ x3036 = x1820 * x965;
-Tbase TZ x3037 = x1821 * x962;
-Tbase TZ x3038 = x1822 * x959;
-Tbase TZ x3039 = x1823 * x956;
-Tbase TZ x3040 = x1824 * x953;
-Tbase TZ x3041 = x1825 * x950;
-Tbase TZ x3042 = x1826 * x947;
-Tbase TZ x3043 = x3041 + x3042;
-Tbase TZ x3044 = x3040 + x3043;
-Tbase TZ x3045 = x3039 + x3044;
-Tbase TZ x3046 = x3038 + x3045;
-Tbase TZ x3047 = x3037 + x3046;
-Tbase TZ x3048 = x3036 + x3047;
-Tbase TZ x3049 = x3035 + x3048;
-Tbase TZ x3050 = 0x11;
-Tbase TZ x3051 = x3050 * x3049;
-Tbase TZ x3052 = x3034 + x3051;
-Tbase TZ x3053 = x3015 + x3052;
-Tbase TZ x3054 = 0x17;
-Tbase TZ x3055 = x3053 >>> x3054;
-Tbase TZ x3056 = x1826 * x998;
-Tbase TZ x3057 = x1827 * x995;
-Tbase TZ x3058 = x1828 * x992;
-Tbase TZ x3059 = x1829 * x989;
-Tbase TZ x3060 = x1830 * x986;
-Tbase TZ x3061 = x1831 * x983;
-Tbase TZ x3062 = x1832 * x980;
-Tbase TZ x3063 = x1833 * x977;
-Tbase TZ x3064 = x1834 * x974;
-Tbase TZ x3065 = x1835 * x971;
-Tbase TZ x3066 = x1836 * x968;
-Tbase TZ x3067 = x3065 + x3066;
-Tbase TZ x3068 = x3064 + x3067;
-Tbase TZ x3069 = x3063 + x3068;
-Tbase TZ x3070 = x3062 + x3069;
-Tbase TZ x3071 = x3061 + x3070;
-Tbase TZ x3072 = x3060 + x3071;
-Tbase TZ x3073 = x3059 + x3072;
-Tbase TZ x3074 = x3058 + x3073;
-Tbase TZ x3075 = x3057 + x3074;
-Tbase TZ x3076 = x3056 + x3075;
-Tbase TZ x3077 = x1819 * x965;
-Tbase TZ x3078 = x1820 * x962;
-Tbase TZ x3079 = x1821 * x959;
-Tbase TZ x3080 = x1822 * x956;
-Tbase TZ x3081 = x1823 * x953;
-Tbase TZ x3082 = x1824 * x950;
-Tbase TZ x3083 = x1825 * x947;
-Tbase TZ x3084 = x3082 + x3083;
-Tbase TZ x3085 = x3081 + x3084;
-Tbase TZ x3086 = x3080 + x3085;
-Tbase TZ x3087 = x3079 + x3086;
-Tbase TZ x3088 = x3078 + x3087;
-Tbase TZ x3089 = x3077 + x3088;
-Tbase TZ x3090 = 0x11;
-Tbase TZ x3091 = x3090 * x3089;
-Tbase TZ x3092 = x3076 + x3091;
-Tbase TZ x3093 = x3055 + x3092;
-Tbase TZ x3094 = 0x17;
-Tbase TZ x3095 = x3093 >>> x3094;
-Tbase TZ x3096 = x1825 * x998;
-Tbase TZ x3097 = x1826 * x995;
-Tbase TZ x3098 = x1827 * x992;
-Tbase TZ x3099 = x1828 * x989;
-Tbase TZ x3100 = x1829 * x986;
-Tbase TZ x3101 = x1830 * x983;
-Tbase TZ x3102 = x1831 * x980;
-Tbase TZ x3103 = x1832 * x977;
-Tbase TZ x3104 = x1833 * x974;
-Tbase TZ x3105 = x1834 * x971;
-Tbase TZ x3106 = x1835 * x968;
-Tbase TZ x3107 = x1836 * x965;
-Tbase TZ x3108 = x3106 + x3107;
-Tbase TZ x3109 = x3105 + x3108;
-Tbase TZ x3110 = x3104 + x3109;
-Tbase TZ x3111 = x3103 + x3110;
-Tbase TZ x3112 = x3102 + x3111;
-Tbase TZ x3113 = x3101 + x3112;
-Tbase TZ x3114 = x3100 + x3113;
-Tbase TZ x3115 = x3099 + x3114;
-Tbase TZ x3116 = x3098 + x3115;
-Tbase TZ x3117 = x3097 + x3116;
-Tbase TZ x3118 = x3096 + x3117;
-Tbase TZ x3119 = x1819 * x962;
-Tbase TZ x3120 = x1820 * x959;
-Tbase TZ x3121 = x1821 * x956;
-Tbase TZ x3122 = x1822 * x953;
-Tbase TZ x3123 = x1823 * x950;
-Tbase TZ x3124 = x1824 * x947;
-Tbase TZ x3125 = x3123 + x3124;
-Tbase TZ x3126 = x3122 + x3125;
-Tbase TZ x3127 = x3121 + x3126;
-Tbase TZ x3128 = x3120 + x3127;
-Tbase TZ x3129 = x3119 + x3128;
-Tbase TZ x3130 = 0x11;
-Tbase TZ x3131 = x3130 * x3129;
-Tbase TZ x3132 = x3118 + x3131;
-Tbase TZ x3133 = x3095 + x3132;
-Tbase TZ x3134 = 0x17;
-Tbase TZ x3135 = x3133 >>> x3134;
-Tbase TZ x3136 = x1824 * x998;
-Tbase TZ x3137 = x1825 * x995;
-Tbase TZ x3138 = x1826 * x992;
-Tbase TZ x3139 = x1827 * x989;
-Tbase TZ x3140 = x1828 * x986;
-Tbase TZ x3141 = x1829 * x983;
-Tbase TZ x3142 = x1830 * x980;
-Tbase TZ x3143 = x1831 * x977;
-Tbase TZ x3144 = x1832 * x974;
-Tbase TZ x3145 = x1833 * x971;
-Tbase TZ x3146 = x1834 * x968;
-Tbase TZ x3147 = x1835 * x965;
-Tbase TZ x3148 = x1836 * x962;
-Tbase TZ x3149 = x3147 + x3148;
-Tbase TZ x3150 = x3146 + x3149;
-Tbase TZ x3151 = x3145 + x3150;
-Tbase TZ x3152 = x3144 + x3151;
-Tbase TZ x3153 = x3143 + x3152;
-Tbase TZ x3154 = x3142 + x3153;
-Tbase TZ x3155 = x3141 + x3154;
-Tbase TZ x3156 = x3140 + x3155;
-Tbase TZ x3157 = x3139 + x3156;
-Tbase TZ x3158 = x3138 + x3157;
-Tbase TZ x3159 = x3137 + x3158;
-Tbase TZ x3160 = x3136 + x3159;
-Tbase TZ x3161 = x1819 * x959;
-Tbase TZ x3162 = x1820 * x956;
-Tbase TZ x3163 = x1821 * x953;
-Tbase TZ x3164 = x1822 * x950;
-Tbase TZ x3165 = x1823 * x947;
-Tbase TZ x3166 = x3164 + x3165;
-Tbase TZ x3167 = x3163 + x3166;
-Tbase TZ x3168 = x3162 + x3167;
-Tbase TZ x3169 = x3161 + x3168;
-Tbase TZ x3170 = 0x11;
-Tbase TZ x3171 = x3170 * x3169;
-Tbase TZ x3172 = x3160 + x3171;
-Tbase TZ x3173 = x3135 + x3172;
-Tbase TZ x3174 = 0x17;
-Tbase TZ x3175 = x3173 >>> x3174;
-Tbase TZ x3176 = x1823 * x998;
-Tbase TZ x3177 = x1824 * x995;
-Tbase TZ x3178 = x1825 * x992;
-Tbase TZ x3179 = x1826 * x989;
-Tbase TZ x3180 = x1827 * x986;
-Tbase TZ x3181 = x1828 * x983;
-Tbase TZ x3182 = x1829 * x980;
-Tbase TZ x3183 = x1830 * x977;
-Tbase TZ x3184 = x1831 * x974;
-Tbase TZ x3185 = x1832 * x971;
-Tbase TZ x3186 = x1833 * x968;
-Tbase TZ x3187 = x1834 * x965;
-Tbase TZ x3188 = x1835 * x962;
-Tbase TZ x3189 = x1836 * x959;
-Tbase TZ x3190 = x3188 + x3189;
-Tbase TZ x3191 = x3187 + x3190;
-Tbase TZ x3192 = x3186 + x3191;
-Tbase TZ x3193 = x3185 + x3192;
-Tbase TZ x3194 = x3184 + x3193;
-Tbase TZ x3195 = x3183 + x3194;
-Tbase TZ x3196 = x3182 + x3195;
-Tbase TZ x3197 = x3181 + x3196;
-Tbase TZ x3198 = x3180 + x3197;
-Tbase TZ x3199 = x3179 + x3198;
-Tbase TZ x3200 = x3178 + x3199;
-Tbase TZ x3201 = x3177 + x3200;
-Tbase TZ x3202 = x3176 + x3201;
-Tbase TZ x3203 = x1819 * x956;
-Tbase TZ x3204 = x1820 * x953;
-Tbase TZ x3205 = x1821 * x950;
-Tbase TZ x3206 = x1822 * x947;
-Tbase TZ x3207 = x3205 + x3206;
-Tbase TZ x3208 = x3204 + x3207;
-Tbase TZ x3209 = x3203 + x3208;
-Tbase TZ x3210 = 0x11;
-Tbase TZ x3211 = x3210 * x3209;
-Tbase TZ x3212 = x3202 + x3211;
-Tbase TZ x3213 = x3175 + x3212;
-Tbase TZ x3214 = 0x17;
-Tbase TZ x3215 = x3213 >>> x3214;
-Tbase TZ x3216 = x1822 * x998;
-Tbase TZ x3217 = x1823 * x995;
-Tbase TZ x3218 = x1824 * x992;
-Tbase TZ x3219 = x1825 * x989;
-Tbase TZ x3220 = x1826 * x986;
-Tbase TZ x3221 = x1827 * x983;
-Tbase TZ x3222 = x1828 * x980;
-Tbase TZ x3223 = x1829 * x977;
-Tbase TZ x3224 = x1830 * x974;
-Tbase TZ x3225 = x1831 * x971;
-Tbase TZ x3226 = x1832 * x968;
-Tbase TZ x3227 = x1833 * x965;
-Tbase TZ x3228 = x1834 * x962;
-Tbase TZ x3229 = x1835 * x959;
-Tbase TZ x3230 = x1836 * x956;
-Tbase TZ x3231 = x3229 + x3230;
-Tbase TZ x3232 = x3228 + x3231;
-Tbase TZ x3233 = x3227 + x3232;
-Tbase TZ x3234 = x3226 + x3233;
-Tbase TZ x3235 = x3225 + x3234;
-Tbase TZ x3236 = x3224 + x3235;
-Tbase TZ x3237 = x3223 + x3236;
-Tbase TZ x3238 = x3222 + x3237;
-Tbase TZ x3239 = x3221 + x3238;
-Tbase TZ x3240 = x3220 + x3239;
-Tbase TZ x3241 = x3219 + x3240;
-Tbase TZ x3242 = x3218 + x3241;
-Tbase TZ x3243 = x3217 + x3242;
-Tbase TZ x3244 = x3216 + x3243;
-Tbase TZ x3245 = x1819 * x953;
-Tbase TZ x3246 = x1820 * x950;
-Tbase TZ x3247 = x1821 * x947;
-Tbase TZ x3248 = x3246 + x3247;
-Tbase TZ x3249 = x3245 + x3248;
-Tbase TZ x3250 = 0x11;
-Tbase TZ x3251 = x3250 * x3249;
-Tbase TZ x3252 = x3244 + x3251;
-Tbase TZ x3253 = x3215 + x3252;
-Tbase TZ x3254 = 0x17;
-Tbase TZ x3255 = x3253 >>> x3254;
-Tbase TZ x3256 = x1821 * x998;
-Tbase TZ x3257 = x1822 * x995;
-Tbase TZ x3258 = x1823 * x992;
-Tbase TZ x3259 = x1824 * x989;
-Tbase TZ x3260 = x1825 * x986;
-Tbase TZ x3261 = x1826 * x983;
-Tbase TZ x3262 = x1827 * x980;
-Tbase TZ x3263 = x1828 * x977;
-Tbase TZ x3264 = x1829 * x974;
-Tbase TZ x3265 = x1830 * x971;
-Tbase TZ x3266 = x1831 * x968;
-Tbase TZ x3267 = x1832 * x965;
-Tbase TZ x3268 = x1833 * x962;
-Tbase TZ x3269 = x1834 * x959;
-Tbase TZ x3270 = x1835 * x956;
-Tbase TZ x3271 = x1836 * x953;
-Tbase TZ x3272 = x3270 + x3271;
-Tbase TZ x3273 = x3269 + x3272;
-Tbase TZ x3274 = x3268 + x3273;
-Tbase TZ x3275 = x3267 + x3274;
-Tbase TZ x3276 = x3266 + x3275;
-Tbase TZ x3277 = x3265 + x3276;
-Tbase TZ x3278 = x3264 + x3277;
-Tbase TZ x3279 = x3263 + x3278;
-Tbase TZ x3280 = x3262 + x3279;
-Tbase TZ x3281 = x3261 + x3280;
-Tbase TZ x3282 = x3260 + x3281;
-Tbase TZ x3283 = x3259 + x3282;
-Tbase TZ x3284 = x3258 + x3283;
-Tbase TZ x3285 = x3257 + x3284;
-Tbase TZ x3286 = x3256 + x3285;
-Tbase TZ x3287 = x1819 * x950;
-Tbase TZ x3288 = x1820 * x947;
-Tbase TZ x3289 = x3287 + x3288;
-Tbase TZ x3290 = 0x11;
-Tbase TZ x3291 = x3290 * x3289;
-Tbase TZ x3292 = x3286 + x3291;
-Tbase TZ x3293 = x3255 + x3292;
-Tbase TZ x3294 = 0x17;
-Tbase TZ x3295 = x3293 >>> x3294;
-Tbase TZ x3296 = x1820 * x998;
-Tbase TZ x3297 = x1821 * x995;
-Tbase TZ x3298 = x1822 * x992;
-Tbase TZ x3299 = x1823 * x989;
-Tbase TZ x3300 = x1824 * x986;
-Tbase TZ x3301 = x1825 * x983;
-Tbase TZ x3302 = x1826 * x980;
-Tbase TZ x3303 = x1827 * x977;
-Tbase TZ x3304 = x1828 * x974;
-Tbase TZ x3305 = x1829 * x971;
-Tbase TZ x3306 = x1830 * x968;
-Tbase TZ x3307 = x1831 * x965;
-Tbase TZ x3308 = x1832 * x962;
-Tbase TZ x3309 = x1833 * x959;
-Tbase TZ x3310 = x1834 * x956;
-Tbase TZ x3311 = x1835 * x953;
-Tbase TZ x3312 = x1836 * x950;
-Tbase TZ x3313 = x3311 + x3312;
-Tbase TZ x3314 = x3310 + x3313;
-Tbase TZ x3315 = x3309 + x3314;
-Tbase TZ x3316 = x3308 + x3315;
-Tbase TZ x3317 = x3307 + x3316;
-Tbase TZ x3318 = x3306 + x3317;
-Tbase TZ x3319 = x3305 + x3318;
-Tbase TZ x3320 = x3304 + x3319;
-Tbase TZ x3321 = x3303 + x3320;
-Tbase TZ x3322 = x3302 + x3321;
-Tbase TZ x3323 = x3301 + x3322;
-Tbase TZ x3324 = x3300 + x3323;
-Tbase TZ x3325 = x3299 + x3324;
-Tbase TZ x3326 = x3298 + x3325;
-Tbase TZ x3327 = x3297 + x3326;
-Tbase TZ x3328 = x3296 + x3327;
-Tbase TZ x3329 = x1819 * x947;
-Tbase TZ x3330 = 0x11;
-Tbase TZ x3331 = x3330 * x3329;
-Tbase TZ x3332 = x3328 + x3331;
-Tbase TZ x3333 = x3295 + x3332;
-Tbase TZ x3334 = 0x17;
-Tbase TZ x3335 = x3333 >>> x3334;
-Tbase TZ x3336 = x1819 * x998;
-Tbase TZ x3337 = x1820 * x995;
-Tbase TZ x3338 = x1821 * x992;
-Tbase TZ x3339 = x1822 * x989;
-Tbase TZ x3340 = x1823 * x986;
-Tbase TZ x3341 = x1824 * x983;
-Tbase TZ x3342 = x1825 * x980;
-Tbase TZ x3343 = x1826 * x977;
-Tbase TZ x3344 = x1827 * x974;
-Tbase TZ x3345 = x1828 * x971;
-Tbase TZ x3346 = x1829 * x968;
-Tbase TZ x3347 = x1830 * x965;
-Tbase TZ x3348 = x1831 * x962;
-Tbase TZ x3349 = x1832 * x959;
-Tbase TZ x3350 = x1833 * x956;
-Tbase TZ x3351 = x1834 * x953;
-Tbase TZ x3352 = x1835 * x950;
-Tbase TZ x3353 = x1836 * x947;
-Tbase TZ x3354 = x3352 + x3353;
-Tbase TZ x3355 = x3351 + x3354;
-Tbase TZ x3356 = x3350 + x3355;
-Tbase TZ x3357 = x3349 + x3356;
-Tbase TZ x3358 = x3348 + x3357;
-Tbase TZ x3359 = x3347 + x3358;
-Tbase TZ x3360 = x3346 + x3359;
-Tbase TZ x3361 = x3345 + x3360;
-Tbase TZ x3362 = x3344 + x3361;
-Tbase TZ x3363 = x3343 + x3362;
-Tbase TZ x3364 = x3342 + x3363;
-Tbase TZ x3365 = x3341 + x3364;
-Tbase TZ x3366 = x3340 + x3365;
-Tbase TZ x3367 = x3339 + x3366;
-Tbase TZ x3368 = x3338 + x3367;
-Tbase TZ x3369 = x3337 + x3368;
-Tbase TZ x3370 = x3336 + x3369;
-Tbase TZ x3371 = x3335 + x3370;
-Tbase TZ x3372 = 0x17;
-Tbase TZ x3373 = x3371 >>> x3372;
-Tbase TZ x3374 = 0x11;
-Tbase TZ x3375 = x3374 * x3373;
-Tbase TZ x3376 = 0x7fffff;
-Tbase TZ x3377 = x2693 & x3376;
-Tbase TZ x3378 = x3375 + x3377;
-Tbase TZ x3379 = 0x17;
-Tbase TZ x3380 = x3378 >>> x3379;
-Tbase TZ x3381 = 0x7fffff;
-Tbase TZ x3382 = x2733 & x3381;
-Tbase TZ x3383 = x3380 + x3382;
-Tbase TZ x3384 = 0x7fffff;
-Tbase TZ x3385 = x3371 & x3384;
-Tbase TZ x3386 = 0x7fffff;
-Tbase TZ x3387 = x3333 & x3386;
-Tbase TZ x3388 = 0x7fffff;
-Tbase TZ x3389 = x3293 & x3388;
-Tbase TZ x3390 = 0x7fffff;
-Tbase TZ x3391 = x3253 & x3390;
-Tbase TZ x3392 = 0x7fffff;
-Tbase TZ x3393 = x3213 & x3392;
-Tbase TZ x3394 = 0x7fffff;
-Tbase TZ x3395 = x3173 & x3394;
-Tbase TZ x3396 = 0x7fffff;
-Tbase TZ x3397 = x3133 & x3396;
-Tbase TZ x3398 = 0x7fffff;
-Tbase TZ x3399 = x3093 & x3398;
-Tbase TZ x3400 = 0x7fffff;
-Tbase TZ x3401 = x3053 & x3400;
-Tbase TZ x3402 = 0x7fffff;
-Tbase TZ x3403 = x3013 & x3402;
-Tbase TZ x3404 = 0x7fffff;
-Tbase TZ x3405 = x2973 & x3404;
-Tbase TZ x3406 = 0x7fffff;
-Tbase TZ x3407 = x2933 & x3406;
-Tbase TZ x3408 = 0x7fffff;
-Tbase TZ x3409 = x2893 & x3408;
-Tbase TZ x3410 = 0x7fffff;
-Tbase TZ x3411 = x2853 & x3410;
-Tbase TZ x3412 = 0x7fffff;
-Tbase TZ x3413 = x2813 & x3412;
-Tbase TZ x3414 = 0x17;
-Tbase TZ x3415 = x3383 >>> x3414;
-Tbase TZ x3416 = 0x7fffff;
-Tbase TZ x3417 = x2773 & x3416;
-Tbase TZ x3418 = x3415 + x3417;
-Tbase TZ x3419 = 0x7fffff;
-Tbase TZ x3420 = x3383 & x3419;
-Tbase TZ x3421 = 0x7fffff;
-Tbase TZ x3422 = x3378 & x3421;
-Tbase TZ x3423 = x2619 + x3385;
-Tbase TZ x3424 = x2621 + x3387;
-Tbase TZ x3425 = x2623 + x3389;
-Tbase TZ x3426 = x2625 + x3391;
-Tbase TZ x3427 = x2627 + x3393;
-Tbase TZ x3428 = x2629 + x3395;
-Tbase TZ x3429 = x2631 + x3397;
-Tbase TZ x3430 = x2633 + x3399;
-Tbase TZ x3431 = x2635 + x3401;
-Tbase TZ x3432 = x2637 + x3403;
-Tbase TZ x3433 = x2639 + x3405;
-Tbase TZ x3434 = x2641 + x3407;
-Tbase TZ x3435 = x2643 + x3409;
-Tbase TZ x3436 = x2645 + x3411;
-Tbase TZ x3437 = x2647 + x3413;
-Tbase TZ x3438 = x2652 + x3418;
-Tbase TZ x3439 = x2654 + x3420;
-Tbase TZ x3440 = x2656 + x3422;
-Tbase TZ x3441 = x2619 + x3385;
-Tbase TZ x3442 = x2621 + x3387;
-Tbase TZ x3443 = x2623 + x3389;
-Tbase TZ x3444 = x2625 + x3391;
-Tbase TZ x3445 = x2627 + x3393;
-Tbase TZ x3446 = x2629 + x3395;
-Tbase TZ x3447 = x2631 + x3397;
-Tbase TZ x3448 = x2633 + x3399;
-Tbase TZ x3449 = x2635 + x3401;
-Tbase TZ x3450 = x2637 + x3403;
-Tbase TZ x3451 = x2639 + x3405;
-Tbase TZ x3452 = x2641 + x3407;
-Tbase TZ x3453 = x2643 + x3409;
-Tbase TZ x3454 = x2645 + x3411;
-Tbase TZ x3455 = x2647 + x3413;
-Tbase TZ x3456 = x2652 + x3418;
-Tbase TZ x3457 = x2654 + x3420;
-Tbase TZ x3458 = x2656 + x3422;
-Tbase TZ x3459 = x3440 * x3458;
-Tbase TZ x3460 = x3423 * x3457;
-Tbase TZ x3461 = x3424 * x3456;
-Tbase TZ x3462 = x3425 * x3455;
-Tbase TZ x3463 = x3426 * x3454;
-Tbase TZ x3464 = x3427 * x3453;
-Tbase TZ x3465 = x3428 * x3452;
-Tbase TZ x3466 = x3429 * x3451;
-Tbase TZ x3467 = x3430 * x3450;
-Tbase TZ x3468 = x3431 * x3449;
-Tbase TZ x3469 = x3432 * x3448;
-Tbase TZ x3470 = x3433 * x3447;
-Tbase TZ x3471 = x3434 * x3446;
-Tbase TZ x3472 = x3435 * x3445;
-Tbase TZ x3473 = x3436 * x3444;
-Tbase TZ x3474 = x3437 * x3443;
-Tbase TZ x3475 = x3438 * x3442;
-Tbase TZ x3476 = x3439 * x3441;
-Tbase TZ x3477 = x3475 + x3476;
-Tbase TZ x3478 = x3474 + x3477;
-Tbase TZ x3479 = x3473 + x3478;
-Tbase TZ x3480 = x3472 + x3479;
-Tbase TZ x3481 = x3471 + x3480;
-Tbase TZ x3482 = x3470 + x3481;
-Tbase TZ x3483 = x3469 + x3482;
-Tbase TZ x3484 = x3468 + x3483;
-Tbase TZ x3485 = x3467 + x3484;
-Tbase TZ x3486 = x3466 + x3485;
-Tbase TZ x3487 = x3465 + x3486;
-Tbase TZ x3488 = x3464 + x3487;
-Tbase TZ x3489 = x3463 + x3488;
-Tbase TZ x3490 = x3462 + x3489;
-Tbase TZ x3491 = x3461 + x3490;
-Tbase TZ x3492 = x3460 + x3491;
-Tbase TZ x3493 = 0x11;
-Tbase TZ x3494 = x3493 * x3492;
-Tbase TZ x3495 = x3459 + x3494;
-Tbase TZ x3496 = 0x17;
-Tbase TZ x3497 = x3495 >>> x3496;
-Tbase TZ x3498 = x3439 * x3458;
-Tbase TZ x3499 = x3440 * x3457;
-Tbase TZ x3500 = x3498 + x3499;
-Tbase TZ x3501 = x3423 * x3456;
-Tbase TZ x3502 = x3424 * x3455;
-Tbase TZ x3503 = x3425 * x3454;
-Tbase TZ x3504 = x3426 * x3453;
-Tbase TZ x3505 = x3427 * x3452;
-Tbase TZ x3506 = x3428 * x3451;
-Tbase TZ x3507 = x3429 * x3450;
-Tbase TZ x3508 = x3430 * x3449;
-Tbase TZ x3509 = x3431 * x3448;
-Tbase TZ x3510 = x3432 * x3447;
-Tbase TZ x3511 = x3433 * x3446;
-Tbase TZ x3512 = x3434 * x3445;
-Tbase TZ x3513 = x3435 * x3444;
-Tbase TZ x3514 = x3436 * x3443;
-Tbase TZ x3515 = x3437 * x3442;
-Tbase TZ x3516 = x3438 * x3441;
-Tbase TZ x3517 = x3515 + x3516;
-Tbase TZ x3518 = x3514 + x3517;
-Tbase TZ x3519 = x3513 + x3518;
-Tbase TZ x3520 = x3512 + x3519;
-Tbase TZ x3521 = x3511 + x3520;
-Tbase TZ x3522 = x3510 + x3521;
-Tbase TZ x3523 = x3509 + x3522;
-Tbase TZ x3524 = x3508 + x3523;
-Tbase TZ x3525 = x3507 + x3524;
-Tbase TZ x3526 = x3506 + x3525;
-Tbase TZ x3527 = x3505 + x3526;
-Tbase TZ x3528 = x3504 + x3527;
-Tbase TZ x3529 = x3503 + x3528;
-Tbase TZ x3530 = x3502 + x3529;
-Tbase TZ x3531 = x3501 + x3530;
-Tbase TZ x3532 = 0x11;
-Tbase TZ x3533 = x3532 * x3531;
-Tbase TZ x3534 = x3500 + x3533;
-Tbase TZ x3535 = x3497 + x3534;
-Tbase TZ x3536 = 0x17;
-Tbase TZ x3537 = x3535 >>> x3536;
-Tbase TZ x3538 = x3438 * x3458;
-Tbase TZ x3539 = x3439 * x3457;
-Tbase TZ x3540 = x3440 * x3456;
-Tbase TZ x3541 = x3539 + x3540;
-Tbase TZ x3542 = x3538 + x3541;
-Tbase TZ x3543 = x3423 * x3455;
-Tbase TZ x3544 = x3424 * x3454;
-Tbase TZ x3545 = x3425 * x3453;
-Tbase TZ x3546 = x3426 * x3452;
-Tbase TZ x3547 = x3427 * x3451;
-Tbase TZ x3548 = x3428 * x3450;
-Tbase TZ x3549 = x3429 * x3449;
-Tbase TZ x3550 = x3430 * x3448;
-Tbase TZ x3551 = x3431 * x3447;
-Tbase TZ x3552 = x3432 * x3446;
-Tbase TZ x3553 = x3433 * x3445;
-Tbase TZ x3554 = x3434 * x3444;
-Tbase TZ x3555 = x3435 * x3443;
-Tbase TZ x3556 = x3436 * x3442;
-Tbase TZ x3557 = x3437 * x3441;
-Tbase TZ x3558 = x3556 + x3557;
-Tbase TZ x3559 = x3555 + x3558;
-Tbase TZ x3560 = x3554 + x3559;
-Tbase TZ x3561 = x3553 + x3560;
-Tbase TZ x3562 = x3552 + x3561;
-Tbase TZ x3563 = x3551 + x3562;
-Tbase TZ x3564 = x3550 + x3563;
-Tbase TZ x3565 = x3549 + x3564;
-Tbase TZ x3566 = x3548 + x3565;
-Tbase TZ x3567 = x3547 + x3566;
-Tbase TZ x3568 = x3546 + x3567;
-Tbase TZ x3569 = x3545 + x3568;
-Tbase TZ x3570 = x3544 + x3569;
-Tbase TZ x3571 = x3543 + x3570;
-Tbase TZ x3572 = 0x11;
-Tbase TZ x3573 = x3572 * x3571;
-Tbase TZ x3574 = x3542 + x3573;
-Tbase TZ x3575 = x3537 + x3574;
-Tbase TZ x3576 = 0x17;
-Tbase TZ x3577 = x3575 >>> x3576;
-Tbase TZ x3578 = x3437 * x3458;
-Tbase TZ x3579 = x3438 * x3457;
-Tbase TZ x3580 = x3439 * x3456;
-Tbase TZ x3581 = x3440 * x3455;
-Tbase TZ x3582 = x3580 + x3581;
-Tbase TZ x3583 = x3579 + x3582;
-Tbase TZ x3584 = x3578 + x3583;
-Tbase TZ x3585 = x3423 * x3454;
-Tbase TZ x3586 = x3424 * x3453;
-Tbase TZ x3587 = x3425 * x3452;
-Tbase TZ x3588 = x3426 * x3451;
-Tbase TZ x3589 = x3427 * x3450;
-Tbase TZ x3590 = x3428 * x3449;
-Tbase TZ x3591 = x3429 * x3448;
-Tbase TZ x3592 = x3430 * x3447;
-Tbase TZ x3593 = x3431 * x3446;
-Tbase TZ x3594 = x3432 * x3445;
-Tbase TZ x3595 = x3433 * x3444;
-Tbase TZ x3596 = x3434 * x3443;
-Tbase TZ x3597 = x3435 * x3442;
-Tbase TZ x3598 = x3436 * x3441;
-Tbase TZ x3599 = x3597 + x3598;
-Tbase TZ x3600 = x3596 + x3599;
-Tbase TZ x3601 = x3595 + x3600;
-Tbase TZ x3602 = x3594 + x3601;
-Tbase TZ x3603 = x3593 + x3602;
-Tbase TZ x3604 = x3592 + x3603;
-Tbase TZ x3605 = x3591 + x3604;
-Tbase TZ x3606 = x3590 + x3605;
-Tbase TZ x3607 = x3589 + x3606;
-Tbase TZ x3608 = x3588 + x3607;
-Tbase TZ x3609 = x3587 + x3608;
-Tbase TZ x3610 = x3586 + x3609;
-Tbase TZ x3611 = x3585 + x3610;
-Tbase TZ x3612 = 0x11;
-Tbase TZ x3613 = x3612 * x3611;
-Tbase TZ x3614 = x3584 + x3613;
-Tbase TZ x3615 = x3577 + x3614;
-Tbase TZ x3616 = 0x17;
-Tbase TZ x3617 = x3615 >>> x3616;
-Tbase TZ x3618 = x3436 * x3458;
-Tbase TZ x3619 = x3437 * x3457;
-Tbase TZ x3620 = x3438 * x3456;
-Tbase TZ x3621 = x3439 * x3455;
-Tbase TZ x3622 = x3440 * x3454;
-Tbase TZ x3623 = x3621 + x3622;
-Tbase TZ x3624 = x3620 + x3623;
-Tbase TZ x3625 = x3619 + x3624;
-Tbase TZ x3626 = x3618 + x3625;
-Tbase TZ x3627 = x3423 * x3453;
-Tbase TZ x3628 = x3424 * x3452;
-Tbase TZ x3629 = x3425 * x3451;
-Tbase TZ x3630 = x3426 * x3450;
-Tbase TZ x3631 = x3427 * x3449;
-Tbase TZ x3632 = x3428 * x3448;
-Tbase TZ x3633 = x3429 * x3447;
-Tbase TZ x3634 = x3430 * x3446;
-Tbase TZ x3635 = x3431 * x3445;
-Tbase TZ x3636 = x3432 * x3444;
-Tbase TZ x3637 = x3433 * x3443;
-Tbase TZ x3638 = x3434 * x3442;
-Tbase TZ x3639 = x3435 * x3441;
-Tbase TZ x3640 = x3638 + x3639;
-Tbase TZ x3641 = x3637 + x3640;
-Tbase TZ x3642 = x3636 + x3641;
-Tbase TZ x3643 = x3635 + x3642;
-Tbase TZ x3644 = x3634 + x3643;
-Tbase TZ x3645 = x3633 + x3644;
-Tbase TZ x3646 = x3632 + x3645;
-Tbase TZ x3647 = x3631 + x3646;
-Tbase TZ x3648 = x3630 + x3647;
-Tbase TZ x3649 = x3629 + x3648;
-Tbase TZ x3650 = x3628 + x3649;
-Tbase TZ x3651 = x3627 + x3650;
-Tbase TZ x3652 = 0x11;
-Tbase TZ x3653 = x3652 * x3651;
-Tbase TZ x3654 = x3626 + x3653;
-Tbase TZ x3655 = x3617 + x3654;
-Tbase TZ x3656 = 0x17;
-Tbase TZ x3657 = x3655 >>> x3656;
-Tbase TZ x3658 = x3435 * x3458;
-Tbase TZ x3659 = x3436 * x3457;
-Tbase TZ x3660 = x3437 * x3456;
-Tbase TZ x3661 = x3438 * x3455;
-Tbase TZ x3662 = x3439 * x3454;
-Tbase TZ x3663 = x3440 * x3453;
-Tbase TZ x3664 = x3662 + x3663;
-Tbase TZ x3665 = x3661 + x3664;
-Tbase TZ x3666 = x3660 + x3665;
-Tbase TZ x3667 = x3659 + x3666;
-Tbase TZ x3668 = x3658 + x3667;
-Tbase TZ x3669 = x3423 * x3452;
-Tbase TZ x3670 = x3424 * x3451;
-Tbase TZ x3671 = x3425 * x3450;
-Tbase TZ x3672 = x3426 * x3449;
-Tbase TZ x3673 = x3427 * x3448;
-Tbase TZ x3674 = x3428 * x3447;
-Tbase TZ x3675 = x3429 * x3446;
-Tbase TZ x3676 = x3430 * x3445;
-Tbase TZ x3677 = x3431 * x3444;
-Tbase TZ x3678 = x3432 * x3443;
-Tbase TZ x3679 = x3433 * x3442;
-Tbase TZ x3680 = x3434 * x3441;
-Tbase TZ x3681 = x3679 + x3680;
-Tbase TZ x3682 = x3678 + x3681;
-Tbase TZ x3683 = x3677 + x3682;
-Tbase TZ x3684 = x3676 + x3683;
-Tbase TZ x3685 = x3675 + x3684;
-Tbase TZ x3686 = x3674 + x3685;
-Tbase TZ x3687 = x3673 + x3686;
-Tbase TZ x3688 = x3672 + x3687;
-Tbase TZ x3689 = x3671 + x3688;
-Tbase TZ x3690 = x3670 + x3689;
-Tbase TZ x3691 = x3669 + x3690;
-Tbase TZ x3692 = 0x11;
-Tbase TZ x3693 = x3692 * x3691;
-Tbase TZ x3694 = x3668 + x3693;
-Tbase TZ x3695 = x3657 + x3694;
-Tbase TZ x3696 = 0x17;
-Tbase TZ x3697 = x3695 >>> x3696;
-Tbase TZ x3698 = x3434 * x3458;
-Tbase TZ x3699 = x3435 * x3457;
-Tbase TZ x3700 = x3436 * x3456;
-Tbase TZ x3701 = x3437 * x3455;
-Tbase TZ x3702 = x3438 * x3454;
-Tbase TZ x3703 = x3439 * x3453;
-Tbase TZ x3704 = x3440 * x3452;
-Tbase TZ x3705 = x3703 + x3704;
-Tbase TZ x3706 = x3702 + x3705;
-Tbase TZ x3707 = x3701 + x3706;
-Tbase TZ x3708 = x3700 + x3707;
-Tbase TZ x3709 = x3699 + x3708;
-Tbase TZ x3710 = x3698 + x3709;
-Tbase TZ x3711 = x3423 * x3451;
-Tbase TZ x3712 = x3424 * x3450;
-Tbase TZ x3713 = x3425 * x3449;
-Tbase TZ x3714 = x3426 * x3448;
-Tbase TZ x3715 = x3427 * x3447;
-Tbase TZ x3716 = x3428 * x3446;
-Tbase TZ x3717 = x3429 * x3445;
-Tbase TZ x3718 = x3430 * x3444;
-Tbase TZ x3719 = x3431 * x3443;
-Tbase TZ x3720 = x3432 * x3442;
-Tbase TZ x3721 = x3433 * x3441;
-Tbase TZ x3722 = x3720 + x3721;
-Tbase TZ x3723 = x3719 + x3722;
-Tbase TZ x3724 = x3718 + x3723;
-Tbase TZ x3725 = x3717 + x3724;
-Tbase TZ x3726 = x3716 + x3725;
-Tbase TZ x3727 = x3715 + x3726;
-Tbase TZ x3728 = x3714 + x3727;
-Tbase TZ x3729 = x3713 + x3728;
-Tbase TZ x3730 = x3712 + x3729;
-Tbase TZ x3731 = x3711 + x3730;
-Tbase TZ x3732 = 0x11;
-Tbase TZ x3733 = x3732 * x3731;
-Tbase TZ x3734 = x3710 + x3733;
-Tbase TZ x3735 = x3697 + x3734;
-Tbase TZ x3736 = 0x17;
-Tbase TZ x3737 = x3735 >>> x3736;
-Tbase TZ x3738 = x3433 * x3458;
-Tbase TZ x3739 = x3434 * x3457;
-Tbase TZ x3740 = x3435 * x3456;
-Tbase TZ x3741 = x3436 * x3455;
-Tbase TZ x3742 = x3437 * x3454;
-Tbase TZ x3743 = x3438 * x3453;
-Tbase TZ x3744 = x3439 * x3452;
-Tbase TZ x3745 = x3440 * x3451;
-Tbase TZ x3746 = x3744 + x3745;
-Tbase TZ x3747 = x3743 + x3746;
-Tbase TZ x3748 = x3742 + x3747;
-Tbase TZ x3749 = x3741 + x3748;
-Tbase TZ x3750 = x3740 + x3749;
-Tbase TZ x3751 = x3739 + x3750;
-Tbase TZ x3752 = x3738 + x3751;
-Tbase TZ x3753 = x3423 * x3450;
-Tbase TZ x3754 = x3424 * x3449;
-Tbase TZ x3755 = x3425 * x3448;
-Tbase TZ x3756 = x3426 * x3447;
-Tbase TZ x3757 = x3427 * x3446;
-Tbase TZ x3758 = x3428 * x3445;
-Tbase TZ x3759 = x3429 * x3444;
-Tbase TZ x3760 = x3430 * x3443;
-Tbase TZ x3761 = x3431 * x3442;
-Tbase TZ x3762 = x3432 * x3441;
-Tbase TZ x3763 = x3761 + x3762;
-Tbase TZ x3764 = x3760 + x3763;
-Tbase TZ x3765 = x3759 + x3764;
-Tbase TZ x3766 = x3758 + x3765;
-Tbase TZ x3767 = x3757 + x3766;
-Tbase TZ x3768 = x3756 + x3767;
-Tbase TZ x3769 = x3755 + x3768;
-Tbase TZ x3770 = x3754 + x3769;
-Tbase TZ x3771 = x3753 + x3770;
-Tbase TZ x3772 = 0x11;
-Tbase TZ x3773 = x3772 * x3771;
-Tbase TZ x3774 = x3752 + x3773;
-Tbase TZ x3775 = x3737 + x3774;
-Tbase TZ x3776 = 0x17;
-Tbase TZ x3777 = x3775 >>> x3776;
-Tbase TZ x3778 = x3432 * x3458;
-Tbase TZ x3779 = x3433 * x3457;
-Tbase TZ x3780 = x3434 * x3456;
-Tbase TZ x3781 = x3435 * x3455;
-Tbase TZ x3782 = x3436 * x3454;
-Tbase TZ x3783 = x3437 * x3453;
-Tbase TZ x3784 = x3438 * x3452;
-Tbase TZ x3785 = x3439 * x3451;
-Tbase TZ x3786 = x3440 * x3450;
-Tbase TZ x3787 = x3785 + x3786;
-Tbase TZ x3788 = x3784 + x3787;
-Tbase TZ x3789 = x3783 + x3788;
-Tbase TZ x3790 = x3782 + x3789;
-Tbase TZ x3791 = x3781 + x3790;
-Tbase TZ x3792 = x3780 + x3791;
-Tbase TZ x3793 = x3779 + x3792;
-Tbase TZ x3794 = x3778 + x3793;
-Tbase TZ x3795 = x3423 * x3449;
-Tbase TZ x3796 = x3424 * x3448;
-Tbase TZ x3797 = x3425 * x3447;
-Tbase TZ x3798 = x3426 * x3446;
-Tbase TZ x3799 = x3427 * x3445;
-Tbase TZ x3800 = x3428 * x3444;
-Tbase TZ x3801 = x3429 * x3443;
-Tbase TZ x3802 = x3430 * x3442;
-Tbase TZ x3803 = x3431 * x3441;
-Tbase TZ x3804 = x3802 + x3803;
-Tbase TZ x3805 = x3801 + x3804;
-Tbase TZ x3806 = x3800 + x3805;
-Tbase TZ x3807 = x3799 + x3806;
-Tbase TZ x3808 = x3798 + x3807;
-Tbase TZ x3809 = x3797 + x3808;
-Tbase TZ x3810 = x3796 + x3809;
-Tbase TZ x3811 = x3795 + x3810;
-Tbase TZ x3812 = 0x11;
-Tbase TZ x3813 = x3812 * x3811;
-Tbase TZ x3814 = x3794 + x3813;
-Tbase TZ x3815 = x3777 + x3814;
-Tbase TZ x3816 = 0x17;
-Tbase TZ x3817 = x3815 >>> x3816;
-Tbase TZ x3818 = x3431 * x3458;
-Tbase TZ x3819 = x3432 * x3457;
-Tbase TZ x3820 = x3433 * x3456;
-Tbase TZ x3821 = x3434 * x3455;
-Tbase TZ x3822 = x3435 * x3454;
-Tbase TZ x3823 = x3436 * x3453;
-Tbase TZ x3824 = x3437 * x3452;
-Tbase TZ x3825 = x3438 * x3451;
-Tbase TZ x3826 = x3439 * x3450;
-Tbase TZ x3827 = x3440 * x3449;
-Tbase TZ x3828 = x3826 + x3827;
-Tbase TZ x3829 = x3825 + x3828;
-Tbase TZ x3830 = x3824 + x3829;
-Tbase TZ x3831 = x3823 + x3830;
-Tbase TZ x3832 = x3822 + x3831;
-Tbase TZ x3833 = x3821 + x3832;
-Tbase TZ x3834 = x3820 + x3833;
-Tbase TZ x3835 = x3819 + x3834;
-Tbase TZ x3836 = x3818 + x3835;
-Tbase TZ x3837 = x3423 * x3448;
-Tbase TZ x3838 = x3424 * x3447;
-Tbase TZ x3839 = x3425 * x3446;
-Tbase TZ x3840 = x3426 * x3445;
-Tbase TZ x3841 = x3427 * x3444;
-Tbase TZ x3842 = x3428 * x3443;
-Tbase TZ x3843 = x3429 * x3442;
-Tbase TZ x3844 = x3430 * x3441;
-Tbase TZ x3845 = x3843 + x3844;
-Tbase TZ x3846 = x3842 + x3845;
-Tbase TZ x3847 = x3841 + x3846;
-Tbase TZ x3848 = x3840 + x3847;
-Tbase TZ x3849 = x3839 + x3848;
-Tbase TZ x3850 = x3838 + x3849;
-Tbase TZ x3851 = x3837 + x3850;
-Tbase TZ x3852 = 0x11;
-Tbase TZ x3853 = x3852 * x3851;
-Tbase TZ x3854 = x3836 + x3853;
-Tbase TZ x3855 = x3817 + x3854;
-Tbase TZ x3856 = 0x17;
-Tbase TZ x3857 = x3855 >>> x3856;
-Tbase TZ x3858 = x3430 * x3458;
-Tbase TZ x3859 = x3431 * x3457;
-Tbase TZ x3860 = x3432 * x3456;
-Tbase TZ x3861 = x3433 * x3455;
-Tbase TZ x3862 = x3434 * x3454;
-Tbase TZ x3863 = x3435 * x3453;
-Tbase TZ x3864 = x3436 * x3452;
-Tbase TZ x3865 = x3437 * x3451;
-Tbase TZ x3866 = x3438 * x3450;
-Tbase TZ x3867 = x3439 * x3449;
-Tbase TZ x3868 = x3440 * x3448;
-Tbase TZ x3869 = x3867 + x3868;
-Tbase TZ x3870 = x3866 + x3869;
-Tbase TZ x3871 = x3865 + x3870;
-Tbase TZ x3872 = x3864 + x3871;
-Tbase TZ x3873 = x3863 + x3872;
-Tbase TZ x3874 = x3862 + x3873;
-Tbase TZ x3875 = x3861 + x3874;
-Tbase TZ x3876 = x3860 + x3875;
-Tbase TZ x3877 = x3859 + x3876;
-Tbase TZ x3878 = x3858 + x3877;
-Tbase TZ x3879 = x3423 * x3447;
-Tbase TZ x3880 = x3424 * x3446;
-Tbase TZ x3881 = x3425 * x3445;
-Tbase TZ x3882 = x3426 * x3444;
-Tbase TZ x3883 = x3427 * x3443;
-Tbase TZ x3884 = x3428 * x3442;
-Tbase TZ x3885 = x3429 * x3441;
-Tbase TZ x3886 = x3884 + x3885;
-Tbase TZ x3887 = x3883 + x3886;
-Tbase TZ x3888 = x3882 + x3887;
-Tbase TZ x3889 = x3881 + x3888;
-Tbase TZ x3890 = x3880 + x3889;
-Tbase TZ x3891 = x3879 + x3890;
-Tbase TZ x3892 = 0x11;
-Tbase TZ x3893 = x3892 * x3891;
-Tbase TZ x3894 = x3878 + x3893;
-Tbase TZ x3895 = x3857 + x3894;
-Tbase TZ x3896 = 0x17;
-Tbase TZ x3897 = x3895 >>> x3896;
-Tbase TZ x3898 = x3429 * x3458;
-Tbase TZ x3899 = x3430 * x3457;
-Tbase TZ x3900 = x3431 * x3456;
-Tbase TZ x3901 = x3432 * x3455;
-Tbase TZ x3902 = x3433 * x3454;
-Tbase TZ x3903 = x3434 * x3453;
-Tbase TZ x3904 = x3435 * x3452;
-Tbase TZ x3905 = x3436 * x3451;
-Tbase TZ x3906 = x3437 * x3450;
-Tbase TZ x3907 = x3438 * x3449;
-Tbase TZ x3908 = x3439 * x3448;
-Tbase TZ x3909 = x3440 * x3447;
-Tbase TZ x3910 = x3908 + x3909;
-Tbase TZ x3911 = x3907 + x3910;
-Tbase TZ x3912 = x3906 + x3911;
-Tbase TZ x3913 = x3905 + x3912;
-Tbase TZ x3914 = x3904 + x3913;
-Tbase TZ x3915 = x3903 + x3914;
-Tbase TZ x3916 = x3902 + x3915;
-Tbase TZ x3917 = x3901 + x3916;
-Tbase TZ x3918 = x3900 + x3917;
-Tbase TZ x3919 = x3899 + x3918;
-Tbase TZ x3920 = x3898 + x3919;
-Tbase TZ x3921 = x3423 * x3446;
-Tbase TZ x3922 = x3424 * x3445;
-Tbase TZ x3923 = x3425 * x3444;
-Tbase TZ x3924 = x3426 * x3443;
-Tbase TZ x3925 = x3427 * x3442;
-Tbase TZ x3926 = x3428 * x3441;
-Tbase TZ x3927 = x3925 + x3926;
-Tbase TZ x3928 = x3924 + x3927;
-Tbase TZ x3929 = x3923 + x3928;
-Tbase TZ x3930 = x3922 + x3929;
-Tbase TZ x3931 = x3921 + x3930;
-Tbase TZ x3932 = 0x11;
-Tbase TZ x3933 = x3932 * x3931;
-Tbase TZ x3934 = x3920 + x3933;
-Tbase TZ x3935 = x3897 + x3934;
-Tbase TZ x3936 = 0x17;
-Tbase TZ x3937 = x3935 >>> x3936;
-Tbase TZ x3938 = x3428 * x3458;
-Tbase TZ x3939 = x3429 * x3457;
-Tbase TZ x3940 = x3430 * x3456;
-Tbase TZ x3941 = x3431 * x3455;
-Tbase TZ x3942 = x3432 * x3454;
-Tbase TZ x3943 = x3433 * x3453;
-Tbase TZ x3944 = x3434 * x3452;
-Tbase TZ x3945 = x3435 * x3451;
-Tbase TZ x3946 = x3436 * x3450;
-Tbase TZ x3947 = x3437 * x3449;
-Tbase TZ x3948 = x3438 * x3448;
-Tbase TZ x3949 = x3439 * x3447;
-Tbase TZ x3950 = x3440 * x3446;
-Tbase TZ x3951 = x3949 + x3950;
-Tbase TZ x3952 = x3948 + x3951;
-Tbase TZ x3953 = x3947 + x3952;
-Tbase TZ x3954 = x3946 + x3953;
-Tbase TZ x3955 = x3945 + x3954;
-Tbase TZ x3956 = x3944 + x3955;
-Tbase TZ x3957 = x3943 + x3956;
-Tbase TZ x3958 = x3942 + x3957;
-Tbase TZ x3959 = x3941 + x3958;
-Tbase TZ x3960 = x3940 + x3959;
-Tbase TZ x3961 = x3939 + x3960;
-Tbase TZ x3962 = x3938 + x3961;
-Tbase TZ x3963 = x3423 * x3445;
-Tbase TZ x3964 = x3424 * x3444;
-Tbase TZ x3965 = x3425 * x3443;
-Tbase TZ x3966 = x3426 * x3442;
-Tbase TZ x3967 = x3427 * x3441;
-Tbase TZ x3968 = x3966 + x3967;
-Tbase TZ x3969 = x3965 + x3968;
-Tbase TZ x3970 = x3964 + x3969;
-Tbase TZ x3971 = x3963 + x3970;
-Tbase TZ x3972 = 0x11;
-Tbase TZ x3973 = x3972 * x3971;
-Tbase TZ x3974 = x3962 + x3973;
-Tbase TZ x3975 = x3937 + x3974;
-Tbase TZ x3976 = 0x17;
-Tbase TZ x3977 = x3975 >>> x3976;
-Tbase TZ x3978 = x3427 * x3458;
-Tbase TZ x3979 = x3428 * x3457;
-Tbase TZ x3980 = x3429 * x3456;
-Tbase TZ x3981 = x3430 * x3455;
-Tbase TZ x3982 = x3431 * x3454;
-Tbase TZ x3983 = x3432 * x3453;
-Tbase TZ x3984 = x3433 * x3452;
-Tbase TZ x3985 = x3434 * x3451;
-Tbase TZ x3986 = x3435 * x3450;
-Tbase TZ x3987 = x3436 * x3449;
-Tbase TZ x3988 = x3437 * x3448;
-Tbase TZ x3989 = x3438 * x3447;
-Tbase TZ x3990 = x3439 * x3446;
-Tbase TZ x3991 = x3440 * x3445;
-Tbase TZ x3992 = x3990 + x3991;
-Tbase TZ x3993 = x3989 + x3992;
-Tbase TZ x3994 = x3988 + x3993;
-Tbase TZ x3995 = x3987 + x3994;
-Tbase TZ x3996 = x3986 + x3995;
-Tbase TZ x3997 = x3985 + x3996;
-Tbase TZ x3998 = x3984 + x3997;
-Tbase TZ x3999 = x3983 + x3998;
-Tbase TZ x4000 = x3982 + x3999;
-Tbase TZ x4001 = x3981 + x4000;
-Tbase TZ x4002 = x3980 + x4001;
-Tbase TZ x4003 = x3979 + x4002;
-Tbase TZ x4004 = x3978 + x4003;
-Tbase TZ x4005 = x3423 * x3444;
-Tbase TZ x4006 = x3424 * x3443;
-Tbase TZ x4007 = x3425 * x3442;
-Tbase TZ x4008 = x3426 * x3441;
-Tbase TZ x4009 = x4007 + x4008;
-Tbase TZ x4010 = x4006 + x4009;
-Tbase TZ x4011 = x4005 + x4010;
-Tbase TZ x4012 = 0x11;
-Tbase TZ x4013 = x4012 * x4011;
-Tbase TZ x4014 = x4004 + x4013;
-Tbase TZ x4015 = x3977 + x4014;
-Tbase TZ x4016 = 0x17;
-Tbase TZ x4017 = x4015 >>> x4016;
-Tbase TZ x4018 = x3426 * x3458;
-Tbase TZ x4019 = x3427 * x3457;
-Tbase TZ x4020 = x3428 * x3456;
-Tbase TZ x4021 = x3429 * x3455;
-Tbase TZ x4022 = x3430 * x3454;
-Tbase TZ x4023 = x3431 * x3453;
-Tbase TZ x4024 = x3432 * x3452;
-Tbase TZ x4025 = x3433 * x3451;
-Tbase TZ x4026 = x3434 * x3450;
-Tbase TZ x4027 = x3435 * x3449;
-Tbase TZ x4028 = x3436 * x3448;
-Tbase TZ x4029 = x3437 * x3447;
-Tbase TZ x4030 = x3438 * x3446;
-Tbase TZ x4031 = x3439 * x3445;
-Tbase TZ x4032 = x3440 * x3444;
-Tbase TZ x4033 = x4031 + x4032;
-Tbase TZ x4034 = x4030 + x4033;
-Tbase TZ x4035 = x4029 + x4034;
-Tbase TZ x4036 = x4028 + x4035;
-Tbase TZ x4037 = x4027 + x4036;
-Tbase TZ x4038 = x4026 + x4037;
-Tbase TZ x4039 = x4025 + x4038;
-Tbase TZ x4040 = x4024 + x4039;
-Tbase TZ x4041 = x4023 + x4040;
-Tbase TZ x4042 = x4022 + x4041;
-Tbase TZ x4043 = x4021 + x4042;
-Tbase TZ x4044 = x4020 + x4043;
-Tbase TZ x4045 = x4019 + x4044;
-Tbase TZ x4046 = x4018 + x4045;
-Tbase TZ x4047 = x3423 * x3443;
-Tbase TZ x4048 = x3424 * x3442;
-Tbase TZ x4049 = x3425 * x3441;
-Tbase TZ x4050 = x4048 + x4049;
-Tbase TZ x4051 = x4047 + x4050;
-Tbase TZ x4052 = 0x11;
-Tbase TZ x4053 = x4052 * x4051;
-Tbase TZ x4054 = x4046 + x4053;
-Tbase TZ x4055 = x4017 + x4054;
-Tbase TZ x4056 = 0x17;
-Tbase TZ x4057 = x4055 >>> x4056;
-Tbase TZ x4058 = x3425 * x3458;
-Tbase TZ x4059 = x3426 * x3457;
-Tbase TZ x4060 = x3427 * x3456;
-Tbase TZ x4061 = x3428 * x3455;
-Tbase TZ x4062 = x3429 * x3454;
-Tbase TZ x4063 = x3430 * x3453;
-Tbase TZ x4064 = x3431 * x3452;
-Tbase TZ x4065 = x3432 * x3451;
-Tbase TZ x4066 = x3433 * x3450;
-Tbase TZ x4067 = x3434 * x3449;
-Tbase TZ x4068 = x3435 * x3448;
-Tbase TZ x4069 = x3436 * x3447;
-Tbase TZ x4070 = x3437 * x3446;
-Tbase TZ x4071 = x3438 * x3445;
-Tbase TZ x4072 = x3439 * x3444;
-Tbase TZ x4073 = x3440 * x3443;
-Tbase TZ x4074 = x4072 + x4073;
-Tbase TZ x4075 = x4071 + x4074;
-Tbase TZ x4076 = x4070 + x4075;
-Tbase TZ x4077 = x4069 + x4076;
-Tbase TZ x4078 = x4068 + x4077;
-Tbase TZ x4079 = x4067 + x4078;
-Tbase TZ x4080 = x4066 + x4079;
-Tbase TZ x4081 = x4065 + x4080;
-Tbase TZ x4082 = x4064 + x4081;
-Tbase TZ x4083 = x4063 + x4082;
-Tbase TZ x4084 = x4062 + x4083;
-Tbase TZ x4085 = x4061 + x4084;
-Tbase TZ x4086 = x4060 + x4085;
-Tbase TZ x4087 = x4059 + x4086;
-Tbase TZ x4088 = x4058 + x4087;
-Tbase TZ x4089 = x3423 * x3442;
-Tbase TZ x4090 = x3424 * x3441;
-Tbase TZ x4091 = x4089 + x4090;
-Tbase TZ x4092 = 0x11;
-Tbase TZ x4093 = x4092 * x4091;
-Tbase TZ x4094 = x4088 + x4093;
-Tbase TZ x4095 = x4057 + x4094;
-Tbase TZ x4096 = 0x17;
-Tbase TZ x4097 = x4095 >>> x4096;
-Tbase TZ x4098 = x3424 * x3458;
-Tbase TZ x4099 = x3425 * x3457;
-Tbase TZ x4100 = x3426 * x3456;
-Tbase TZ x4101 = x3427 * x3455;
-Tbase TZ x4102 = x3428 * x3454;
-Tbase TZ x4103 = x3429 * x3453;
-Tbase TZ x4104 = x3430 * x3452;
-Tbase TZ x4105 = x3431 * x3451;
-Tbase TZ x4106 = x3432 * x3450;
-Tbase TZ x4107 = x3433 * x3449;
-Tbase TZ x4108 = x3434 * x3448;
-Tbase TZ x4109 = x3435 * x3447;
-Tbase TZ x4110 = x3436 * x3446;
-Tbase TZ x4111 = x3437 * x3445;
-Tbase TZ x4112 = x3438 * x3444;
-Tbase TZ x4113 = x3439 * x3443;
-Tbase TZ x4114 = x3440 * x3442;
-Tbase TZ x4115 = x4113 + x4114;
-Tbase TZ x4116 = x4112 + x4115;
-Tbase TZ x4117 = x4111 + x4116;
-Tbase TZ x4118 = x4110 + x4117;
-Tbase TZ x4119 = x4109 + x4118;
-Tbase TZ x4120 = x4108 + x4119;
-Tbase TZ x4121 = x4107 + x4120;
-Tbase TZ x4122 = x4106 + x4121;
-Tbase TZ x4123 = x4105 + x4122;
-Tbase TZ x4124 = x4104 + x4123;
-Tbase TZ x4125 = x4103 + x4124;
-Tbase TZ x4126 = x4102 + x4125;
-Tbase TZ x4127 = x4101 + x4126;
-Tbase TZ x4128 = x4100 + x4127;
-Tbase TZ x4129 = x4099 + x4128;
-Tbase TZ x4130 = x4098 + x4129;
-Tbase TZ x4131 = x3423 * x3441;
-Tbase TZ x4132 = 0x11;
-Tbase TZ x4133 = x4132 * x4131;
-Tbase TZ x4134 = x4130 + x4133;
-Tbase TZ x4135 = x4097 + x4134;
-Tbase TZ x4136 = 0x17;
-Tbase TZ x4137 = x4135 >>> x4136;
-Tbase TZ x4138 = x3423 * x3458;
-Tbase TZ x4139 = x3424 * x3457;
-Tbase TZ x4140 = x3425 * x3456;
-Tbase TZ x4141 = x3426 * x3455;
-Tbase TZ x4142 = x3427 * x3454;
-Tbase TZ x4143 = x3428 * x3453;
-Tbase TZ x4144 = x3429 * x3452;
-Tbase TZ x4145 = x3430 * x3451;
-Tbase TZ x4146 = x3431 * x3450;
-Tbase TZ x4147 = x3432 * x3449;
-Tbase TZ x4148 = x3433 * x3448;
-Tbase TZ x4149 = x3434 * x3447;
-Tbase TZ x4150 = x3435 * x3446;
-Tbase TZ x4151 = x3436 * x3445;
-Tbase TZ x4152 = x3437 * x3444;
-Tbase TZ x4153 = x3438 * x3443;
-Tbase TZ x4154 = x3439 * x3442;
-Tbase TZ x4155 = x3440 * x3441;
-Tbase TZ x4156 = x4154 + x4155;
-Tbase TZ x4157 = x4153 + x4156;
-Tbase TZ x4158 = x4152 + x4157;
-Tbase TZ x4159 = x4151 + x4158;
-Tbase TZ x4160 = x4150 + x4159;
-Tbase TZ x4161 = x4149 + x4160;
-Tbase TZ x4162 = x4148 + x4161;
-Tbase TZ x4163 = x4147 + x4162;
-Tbase TZ x4164 = x4146 + x4163;
-Tbase TZ x4165 = x4145 + x4164;
-Tbase TZ x4166 = x4144 + x4165;
-Tbase TZ x4167 = x4143 + x4166;
-Tbase TZ x4168 = x4142 + x4167;
-Tbase TZ x4169 = x4141 + x4168;
-Tbase TZ x4170 = x4140 + x4169;
-Tbase TZ x4171 = x4139 + x4170;
-Tbase TZ x4172 = x4138 + x4171;
-Tbase TZ x4173 = x4137 + x4172;
-Tbase TZ x4174 = 0x17;
-Tbase TZ x4175 = x4173 >>> x4174;
-Tbase TZ x4176 = 0x11;
-Tbase TZ x4177 = x4176 * x4175;
-Tbase TZ x4178 = 0x7fffff;
-Tbase TZ x4179 = x3495 & x4178;
-Tbase TZ x4180 = x4177 + x4179;
-Tbase TZ x4181 = 0x17;
-Tbase TZ x4182 = x4180 >>> x4181;
-Tbase TZ x4183 = 0x7fffff;
-Tbase TZ x4184 = x3535 & x4183;
-Tbase TZ x4185 = x4182 + x4184;
-Tbase TZ x4186 = 0x7fffff;
-Tbase TZ x4187 = x4173 & x4186;
-Tbase TZ x4188 = 0x7fffff;
-Tbase TZ x4189 = x4135 & x4188;
-Tbase TZ x4190 = 0x7fffff;
-Tbase TZ x4191 = x4095 & x4190;
-Tbase TZ x4192 = 0x7fffff;
-Tbase TZ x4193 = x4055 & x4192;
-Tbase TZ x4194 = 0x7fffff;
-Tbase TZ x4195 = x4015 & x4194;
-Tbase TZ x4196 = 0x7fffff;
-Tbase TZ x4197 = x3975 & x4196;
-Tbase TZ x4198 = 0x7fffff;
-Tbase TZ x4199 = x3935 & x4198;
-Tbase TZ x4200 = 0x7fffff;
-Tbase TZ x4201 = x3895 & x4200;
-Tbase TZ x4202 = 0x7fffff;
-Tbase TZ x4203 = x3855 & x4202;
-Tbase TZ x4204 = 0x7fffff;
-Tbase TZ x4205 = x3815 & x4204;
-Tbase TZ x4206 = 0x7fffff;
-Tbase TZ x4207 = x3775 & x4206;
-Tbase TZ x4208 = 0x7fffff;
-Tbase TZ x4209 = x3735 & x4208;
-Tbase TZ x4210 = 0x7fffff;
-Tbase TZ x4211 = x3695 & x4210;
-Tbase TZ x4212 = 0x7fffff;
-Tbase TZ x4213 = x3655 & x4212;
-Tbase TZ x4214 = 0x7fffff;
-Tbase TZ x4215 = x3615 & x4214;
-Tbase TZ x4216 = 0x17;
-Tbase TZ x4217 = x4185 >>> x4216;
-Tbase TZ x4218 = 0x7fffff;
-Tbase TZ x4219 = x3575 & x4218;
-Tbase TZ x4220 = x4217 + x4219;
-Tbase TZ x4221 = 0x7fffff;
-Tbase TZ x4222 = x4185 & x4221;
-Tbase TZ x4223 = 0x7fffff;
-Tbase TZ x4224 = x4180 & x4223;
-Tbase TZ x4225 = Const 16777214;
-Tbase TZ x4226 = x4225 + x2619;
-Tbase TZ x4227 = x4226 - x3385;
-Tbase TZ x4228 = Const 16777214;
-Tbase TZ x4229 = x4228 + x2621;
-Tbase TZ x4230 = x4229 - x3387;
-Tbase TZ x4231 = Const 16777214;
-Tbase TZ x4232 = x4231 + x2623;
-Tbase TZ x4233 = x4232 - x3389;
-Tbase TZ x4234 = Const 16777214;
-Tbase TZ x4235 = x4234 + x2625;
-Tbase TZ x4236 = x4235 - x3391;
-Tbase TZ x4237 = Const 16777214;
-Tbase TZ x4238 = x4237 + x2627;
-Tbase TZ x4239 = x4238 - x3393;
-Tbase TZ x4240 = Const 16777214;
-Tbase TZ x4241 = x4240 + x2629;
-Tbase TZ x4242 = x4241 - x3395;
-Tbase TZ x4243 = Const 16777214;
-Tbase TZ x4244 = x4243 + x2631;
-Tbase TZ x4245 = x4244 - x3397;
-Tbase TZ x4246 = Const 16777214;
-Tbase TZ x4247 = x4246 + x2633;
-Tbase TZ x4248 = x4247 - x3399;
-Tbase TZ x4249 = Const 16777214;
-Tbase TZ x4250 = x4249 + x2635;
-Tbase TZ x4251 = x4250 - x3401;
-Tbase TZ x4252 = Const 16777214;
-Tbase TZ x4253 = x4252 + x2637;
-Tbase TZ x4254 = x4253 - x3403;
-Tbase TZ x4255 = Const 16777214;
-Tbase TZ x4256 = x4255 + x2639;
-Tbase TZ x4257 = x4256 - x3405;
-Tbase TZ x4258 = Const 16777214;
-Tbase TZ x4259 = x4258 + x2641;
-Tbase TZ x4260 = x4259 - x3407;
-Tbase TZ x4261 = Const 16777214;
-Tbase TZ x4262 = x4261 + x2643;
-Tbase TZ x4263 = x4262 - x3409;
-Tbase TZ x4264 = Const 16777214;
-Tbase TZ x4265 = x4264 + x2645;
-Tbase TZ x4266 = x4265 - x3411;
-Tbase TZ x4267 = Const 16777214;
-Tbase TZ x4268 = x4267 + x2647;
-Tbase TZ x4269 = x4268 - x3413;
-Tbase TZ x4270 = Const 16777214;
-Tbase TZ x4271 = x4270 + x2652;
-Tbase TZ x4272 = x4271 - x3418;
-Tbase TZ x4273 = Const 16777214;
-Tbase TZ x4274 = x4273 + x2654;
-Tbase TZ x4275 = x4274 - x3420;
-Tbase TZ x4276 = Const 16777182;
-Tbase TZ x4277 = x4276 + x2656;
-Tbase TZ x4278 = x4277 - x3422;
-Tbase TZ x4279 = Const 16777214;
-Tbase TZ x4280 = x4279 + x2619;
-Tbase TZ x4281 = x4280 - x3385;
-Tbase TZ x4282 = Const 16777214;
-Tbase TZ x4283 = x4282 + x2621;
-Tbase TZ x4284 = x4283 - x3387;
-Tbase TZ x4285 = Const 16777214;
-Tbase TZ x4286 = x4285 + x2623;
-Tbase TZ x4287 = x4286 - x3389;
-Tbase TZ x4288 = Const 16777214;
-Tbase TZ x4289 = x4288 + x2625;
-Tbase TZ x4290 = x4289 - x3391;
-Tbase TZ x4291 = Const 16777214;
-Tbase TZ x4292 = x4291 + x2627;
-Tbase TZ x4293 = x4292 - x3393;
-Tbase TZ x4294 = Const 16777214;
-Tbase TZ x4295 = x4294 + x2629;
-Tbase TZ x4296 = x4295 - x3395;
-Tbase TZ x4297 = Const 16777214;
-Tbase TZ x4298 = x4297 + x2631;
-Tbase TZ x4299 = x4298 - x3397;
-Tbase TZ x4300 = Const 16777214;
-Tbase TZ x4301 = x4300 + x2633;
-Tbase TZ x4302 = x4301 - x3399;
-Tbase TZ x4303 = Const 16777214;
-Tbase TZ x4304 = x4303 + x2635;
-Tbase TZ x4305 = x4304 - x3401;
-Tbase TZ x4306 = Const 16777214;
-Tbase TZ x4307 = x4306 + x2637;
-Tbase TZ x4308 = x4307 - x3403;
-Tbase TZ x4309 = Const 16777214;
-Tbase TZ x4310 = x4309 + x2639;
-Tbase TZ x4311 = x4310 - x3405;
-Tbase TZ x4312 = Const 16777214;
-Tbase TZ x4313 = x4312 + x2641;
-Tbase TZ x4314 = x4313 - x3407;
-Tbase TZ x4315 = Const 16777214;
-Tbase TZ x4316 = x4315 + x2643;
-Tbase TZ x4317 = x4316 - x3409;
-Tbase TZ x4318 = Const 16777214;
-Tbase TZ x4319 = x4318 + x2645;
-Tbase TZ x4320 = x4319 - x3411;
-Tbase TZ x4321 = Const 16777214;
-Tbase TZ x4322 = x4321 + x2647;
-Tbase TZ x4323 = x4322 - x3413;
-Tbase TZ x4324 = Const 16777214;
-Tbase TZ x4325 = x4324 + x2652;
-Tbase TZ x4326 = x4325 - x3418;
-Tbase TZ x4327 = Const 16777214;
-Tbase TZ x4328 = x4327 + x2654;
-Tbase TZ x4329 = x4328 - x3420;
-Tbase TZ x4330 = Const 16777182;
-Tbase TZ x4331 = x4330 + x2656;
-Tbase TZ x4332 = x4331 - x3422;
-Tbase TZ x4333 = x4278 * x4332;
-Tbase TZ x4334 = x4227 * x4329;
-Tbase TZ x4335 = x4230 * x4326;
-Tbase TZ x4336 = x4233 * x4323;
-Tbase TZ x4337 = x4236 * x4320;
-Tbase TZ x4338 = x4239 * x4317;
-Tbase TZ x4339 = x4242 * x4314;
-Tbase TZ x4340 = x4245 * x4311;
-Tbase TZ x4341 = x4248 * x4308;
-Tbase TZ x4342 = x4251 * x4305;
-Tbase TZ x4343 = x4254 * x4302;
-Tbase TZ x4344 = x4257 * x4299;
-Tbase TZ x4345 = x4260 * x4296;
-Tbase TZ x4346 = x4263 * x4293;
-Tbase TZ x4347 = x4266 * x4290;
-Tbase TZ x4348 = x4269 * x4287;
-Tbase TZ x4349 = x4272 * x4284;
-Tbase TZ x4350 = x4275 * x4281;
-Tbase TZ x4351 = x4349 + x4350;
-Tbase TZ x4352 = x4348 + x4351;
-Tbase TZ x4353 = x4347 + x4352;
-Tbase TZ x4354 = x4346 + x4353;
-Tbase TZ x4355 = x4345 + x4354;
-Tbase TZ x4356 = x4344 + x4355;
-Tbase TZ x4357 = x4343 + x4356;
-Tbase TZ x4358 = x4342 + x4357;
-Tbase TZ x4359 = x4341 + x4358;
-Tbase TZ x4360 = x4340 + x4359;
-Tbase TZ x4361 = x4339 + x4360;
-Tbase TZ x4362 = x4338 + x4361;
-Tbase TZ x4363 = x4337 + x4362;
-Tbase TZ x4364 = x4336 + x4363;
-Tbase TZ x4365 = x4335 + x4364;
-Tbase TZ x4366 = x4334 + x4365;
-Tbase TZ x4367 = 0x11;
-Tbase TZ x4368 = x4367 * x4366;
-Tbase TZ x4369 = x4333 + x4368;
-Tbase TZ x4370 = 0x17;
-Tbase TZ x4371 = x4369 >>> x4370;
-Tbase TZ x4372 = x4275 * x4332;
-Tbase TZ x4373 = x4278 * x4329;
-Tbase TZ x4374 = x4372 + x4373;
-Tbase TZ x4375 = x4227 * x4326;
-Tbase TZ x4376 = x4230 * x4323;
-Tbase TZ x4377 = x4233 * x4320;
-Tbase TZ x4378 = x4236 * x4317;
-Tbase TZ x4379 = x4239 * x4314;
-Tbase TZ x4380 = x4242 * x4311;
-Tbase TZ x4381 = x4245 * x4308;
-Tbase TZ x4382 = x4248 * x4305;
-Tbase TZ x4383 = x4251 * x4302;
-Tbase TZ x4384 = x4254 * x4299;
-Tbase TZ x4385 = x4257 * x4296;
-Tbase TZ x4386 = x4260 * x4293;
-Tbase TZ x4387 = x4263 * x4290;
-Tbase TZ x4388 = x4266 * x4287;
-Tbase TZ x4389 = x4269 * x4284;
-Tbase TZ x4390 = x4272 * x4281;
-Tbase TZ x4391 = x4389 + x4390;
-Tbase TZ x4392 = x4388 + x4391;
-Tbase TZ x4393 = x4387 + x4392;
-Tbase TZ x4394 = x4386 + x4393;
-Tbase TZ x4395 = x4385 + x4394;
-Tbase TZ x4396 = x4384 + x4395;
-Tbase TZ x4397 = x4383 + x4396;
-Tbase TZ x4398 = x4382 + x4397;
-Tbase TZ x4399 = x4381 + x4398;
-Tbase TZ x4400 = x4380 + x4399;
-Tbase TZ x4401 = x4379 + x4400;
-Tbase TZ x4402 = x4378 + x4401;
-Tbase TZ x4403 = x4377 + x4402;
-Tbase TZ x4404 = x4376 + x4403;
-Tbase TZ x4405 = x4375 + x4404;
-Tbase TZ x4406 = 0x11;
-Tbase TZ x4407 = x4406 * x4405;
-Tbase TZ x4408 = x4374 + x4407;
-Tbase TZ x4409 = x4371 + x4408;
-Tbase TZ x4410 = 0x17;
-Tbase TZ x4411 = x4409 >>> x4410;
-Tbase TZ x4412 = x4272 * x4332;
-Tbase TZ x4413 = x4275 * x4329;
-Tbase TZ x4414 = x4278 * x4326;
-Tbase TZ x4415 = x4413 + x4414;
-Tbase TZ x4416 = x4412 + x4415;
-Tbase TZ x4417 = x4227 * x4323;
-Tbase TZ x4418 = x4230 * x4320;
-Tbase TZ x4419 = x4233 * x4317;
-Tbase TZ x4420 = x4236 * x4314;
-Tbase TZ x4421 = x4239 * x4311;
-Tbase TZ x4422 = x4242 * x4308;
-Tbase TZ x4423 = x4245 * x4305;
-Tbase TZ x4424 = x4248 * x4302;
-Tbase TZ x4425 = x4251 * x4299;
-Tbase TZ x4426 = x4254 * x4296;
-Tbase TZ x4427 = x4257 * x4293;
-Tbase TZ x4428 = x4260 * x4290;
-Tbase TZ x4429 = x4263 * x4287;
-Tbase TZ x4430 = x4266 * x4284;
-Tbase TZ x4431 = x4269 * x4281;
-Tbase TZ x4432 = x4430 + x4431;
-Tbase TZ x4433 = x4429 + x4432;
-Tbase TZ x4434 = x4428 + x4433;
-Tbase TZ x4435 = x4427 + x4434;
-Tbase TZ x4436 = x4426 + x4435;
-Tbase TZ x4437 = x4425 + x4436;
-Tbase TZ x4438 = x4424 + x4437;
-Tbase TZ x4439 = x4423 + x4438;
-Tbase TZ x4440 = x4422 + x4439;
-Tbase TZ x4441 = x4421 + x4440;
-Tbase TZ x4442 = x4420 + x4441;
-Tbase TZ x4443 = x4419 + x4442;
-Tbase TZ x4444 = x4418 + x4443;
-Tbase TZ x4445 = x4417 + x4444;
-Tbase TZ x4446 = 0x11;
-Tbase TZ x4447 = x4446 * x4445;
-Tbase TZ x4448 = x4416 + x4447;
-Tbase TZ x4449 = x4411 + x4448;
-Tbase TZ x4450 = 0x17;
-Tbase TZ x4451 = x4449 >>> x4450;
-Tbase TZ x4452 = x4269 * x4332;
-Tbase TZ x4453 = x4272 * x4329;
-Tbase TZ x4454 = x4275 * x4326;
-Tbase TZ x4455 = x4278 * x4323;
-Tbase TZ x4456 = x4454 + x4455;
-Tbase TZ x4457 = x4453 + x4456;
-Tbase TZ x4458 = x4452 + x4457;
-Tbase TZ x4459 = x4227 * x4320;
-Tbase TZ x4460 = x4230 * x4317;
-Tbase TZ x4461 = x4233 * x4314;
-Tbase TZ x4462 = x4236 * x4311;
-Tbase TZ x4463 = x4239 * x4308;
-Tbase TZ x4464 = x4242 * x4305;
-Tbase TZ x4465 = x4245 * x4302;
-Tbase TZ x4466 = x4248 * x4299;
-Tbase TZ x4467 = x4251 * x4296;
-Tbase TZ x4468 = x4254 * x4293;
-Tbase TZ x4469 = x4257 * x4290;
-Tbase TZ x4470 = x4260 * x4287;
-Tbase TZ x4471 = x4263 * x4284;
-Tbase TZ x4472 = x4266 * x4281;
-Tbase TZ x4473 = x4471 + x4472;
-Tbase TZ x4474 = x4470 + x4473;
-Tbase TZ x4475 = x4469 + x4474;
-Tbase TZ x4476 = x4468 + x4475;
-Tbase TZ x4477 = x4467 + x4476;
-Tbase TZ x4478 = x4466 + x4477;
-Tbase TZ x4479 = x4465 + x4478;
-Tbase TZ x4480 = x4464 + x4479;
-Tbase TZ x4481 = x4463 + x4480;
-Tbase TZ x4482 = x4462 + x4481;
-Tbase TZ x4483 = x4461 + x4482;
-Tbase TZ x4484 = x4460 + x4483;
-Tbase TZ x4485 = x4459 + x4484;
-Tbase TZ x4486 = 0x11;
-Tbase TZ x4487 = x4486 * x4485;
-Tbase TZ x4488 = x4458 + x4487;
-Tbase TZ x4489 = x4451 + x4488;
-Tbase TZ x4490 = 0x17;
-Tbase TZ x4491 = x4489 >>> x4490;
-Tbase TZ x4492 = x4266 * x4332;
-Tbase TZ x4493 = x4269 * x4329;
-Tbase TZ x4494 = x4272 * x4326;
-Tbase TZ x4495 = x4275 * x4323;
-Tbase TZ x4496 = x4278 * x4320;
-Tbase TZ x4497 = x4495 + x4496;
-Tbase TZ x4498 = x4494 + x4497;
-Tbase TZ x4499 = x4493 + x4498;
-Tbase TZ x4500 = x4492 + x4499;
-Tbase TZ x4501 = x4227 * x4317;
-Tbase TZ x4502 = x4230 * x4314;
-Tbase TZ x4503 = x4233 * x4311;
-Tbase TZ x4504 = x4236 * x4308;
-Tbase TZ x4505 = x4239 * x4305;
-Tbase TZ x4506 = x4242 * x4302;
-Tbase TZ x4507 = x4245 * x4299;
-Tbase TZ x4508 = x4248 * x4296;
-Tbase TZ x4509 = x4251 * x4293;
-Tbase TZ x4510 = x4254 * x4290;
-Tbase TZ x4511 = x4257 * x4287;
-Tbase TZ x4512 = x4260 * x4284;
-Tbase TZ x4513 = x4263 * x4281;
-Tbase TZ x4514 = x4512 + x4513;
-Tbase TZ x4515 = x4511 + x4514;
-Tbase TZ x4516 = x4510 + x4515;
-Tbase TZ x4517 = x4509 + x4516;
-Tbase TZ x4518 = x4508 + x4517;
-Tbase TZ x4519 = x4507 + x4518;
-Tbase TZ x4520 = x4506 + x4519;
-Tbase TZ x4521 = x4505 + x4520;
-Tbase TZ x4522 = x4504 + x4521;
-Tbase TZ x4523 = x4503 + x4522;
-Tbase TZ x4524 = x4502 + x4523;
-Tbase TZ x4525 = x4501 + x4524;
-Tbase TZ x4526 = 0x11;
-Tbase TZ x4527 = x4526 * x4525;
-Tbase TZ x4528 = x4500 + x4527;
-Tbase TZ x4529 = x4491 + x4528;
-Tbase TZ x4530 = 0x17;
-Tbase TZ x4531 = x4529 >>> x4530;
-Tbase TZ x4532 = x4263 * x4332;
-Tbase TZ x4533 = x4266 * x4329;
-Tbase TZ x4534 = x4269 * x4326;
-Tbase TZ x4535 = x4272 * x4323;
-Tbase TZ x4536 = x4275 * x4320;
-Tbase TZ x4537 = x4278 * x4317;
-Tbase TZ x4538 = x4536 + x4537;
-Tbase TZ x4539 = x4535 + x4538;
-Tbase TZ x4540 = x4534 + x4539;
-Tbase TZ x4541 = x4533 + x4540;
-Tbase TZ x4542 = x4532 + x4541;
-Tbase TZ x4543 = x4227 * x4314;
-Tbase TZ x4544 = x4230 * x4311;
-Tbase TZ x4545 = x4233 * x4308;
-Tbase TZ x4546 = x4236 * x4305;
-Tbase TZ x4547 = x4239 * x4302;
-Tbase TZ x4548 = x4242 * x4299;
-Tbase TZ x4549 = x4245 * x4296;
-Tbase TZ x4550 = x4248 * x4293;
-Tbase TZ x4551 = x4251 * x4290;
-Tbase TZ x4552 = x4254 * x4287;
-Tbase TZ x4553 = x4257 * x4284;
-Tbase TZ x4554 = x4260 * x4281;
-Tbase TZ x4555 = x4553 + x4554;
-Tbase TZ x4556 = x4552 + x4555;
-Tbase TZ x4557 = x4551 + x4556;
-Tbase TZ x4558 = x4550 + x4557;
-Tbase TZ x4559 = x4549 + x4558;
-Tbase TZ x4560 = x4548 + x4559;
-Tbase TZ x4561 = x4547 + x4560;
-Tbase TZ x4562 = x4546 + x4561;
-Tbase TZ x4563 = x4545 + x4562;
-Tbase TZ x4564 = x4544 + x4563;
-Tbase TZ x4565 = x4543 + x4564;
-Tbase TZ x4566 = 0x11;
-Tbase TZ x4567 = x4566 * x4565;
-Tbase TZ x4568 = x4542 + x4567;
-Tbase TZ x4569 = x4531 + x4568;
-Tbase TZ x4570 = 0x17;
-Tbase TZ x4571 = x4569 >>> x4570;
-Tbase TZ x4572 = x4260 * x4332;
-Tbase TZ x4573 = x4263 * x4329;
-Tbase TZ x4574 = x4266 * x4326;
-Tbase TZ x4575 = x4269 * x4323;
-Tbase TZ x4576 = x4272 * x4320;
-Tbase TZ x4577 = x4275 * x4317;
-Tbase TZ x4578 = x4278 * x4314;
-Tbase TZ x4579 = x4577 + x4578;
-Tbase TZ x4580 = x4576 + x4579;
-Tbase TZ x4581 = x4575 + x4580;
-Tbase TZ x4582 = x4574 + x4581;
-Tbase TZ x4583 = x4573 + x4582;
-Tbase TZ x4584 = x4572 + x4583;
-Tbase TZ x4585 = x4227 * x4311;
-Tbase TZ x4586 = x4230 * x4308;
-Tbase TZ x4587 = x4233 * x4305;
-Tbase TZ x4588 = x4236 * x4302;
-Tbase TZ x4589 = x4239 * x4299;
-Tbase TZ x4590 = x4242 * x4296;
-Tbase TZ x4591 = x4245 * x4293;
-Tbase TZ x4592 = x4248 * x4290;
-Tbase TZ x4593 = x4251 * x4287;
-Tbase TZ x4594 = x4254 * x4284;
-Tbase TZ x4595 = x4257 * x4281;
-Tbase TZ x4596 = x4594 + x4595;
-Tbase TZ x4597 = x4593 + x4596;
-Tbase TZ x4598 = x4592 + x4597;
-Tbase TZ x4599 = x4591 + x4598;
-Tbase TZ x4600 = x4590 + x4599;
-Tbase TZ x4601 = x4589 + x4600;
-Tbase TZ x4602 = x4588 + x4601;
-Tbase TZ x4603 = x4587 + x4602;
-Tbase TZ x4604 = x4586 + x4603;
-Tbase TZ x4605 = x4585 + x4604;
-Tbase TZ x4606 = 0x11;
-Tbase TZ x4607 = x4606 * x4605;
-Tbase TZ x4608 = x4584 + x4607;
-Tbase TZ x4609 = x4571 + x4608;
-Tbase TZ x4610 = 0x17;
-Tbase TZ x4611 = x4609 >>> x4610;
-Tbase TZ x4612 = x4257 * x4332;
-Tbase TZ x4613 = x4260 * x4329;
-Tbase TZ x4614 = x4263 * x4326;
-Tbase TZ x4615 = x4266 * x4323;
-Tbase TZ x4616 = x4269 * x4320;
-Tbase TZ x4617 = x4272 * x4317;
-Tbase TZ x4618 = x4275 * x4314;
-Tbase TZ x4619 = x4278 * x4311;
-Tbase TZ x4620 = x4618 + x4619;
-Tbase TZ x4621 = x4617 + x4620;
-Tbase TZ x4622 = x4616 + x4621;
-Tbase TZ x4623 = x4615 + x4622;
-Tbase TZ x4624 = x4614 + x4623;
-Tbase TZ x4625 = x4613 + x4624;
-Tbase TZ x4626 = x4612 + x4625;
-Tbase TZ x4627 = x4227 * x4308;
-Tbase TZ x4628 = x4230 * x4305;
-Tbase TZ x4629 = x4233 * x4302;
-Tbase TZ x4630 = x4236 * x4299;
-Tbase TZ x4631 = x4239 * x4296;
-Tbase TZ x4632 = x4242 * x4293;
-Tbase TZ x4633 = x4245 * x4290;
-Tbase TZ x4634 = x4248 * x4287;
-Tbase TZ x4635 = x4251 * x4284;
-Tbase TZ x4636 = x4254 * x4281;
-Tbase TZ x4637 = x4635 + x4636;
-Tbase TZ x4638 = x4634 + x4637;
-Tbase TZ x4639 = x4633 + x4638;
-Tbase TZ x4640 = x4632 + x4639;
-Tbase TZ x4641 = x4631 + x4640;
-Tbase TZ x4642 = x4630 + x4641;
-Tbase TZ x4643 = x4629 + x4642;
-Tbase TZ x4644 = x4628 + x4643;
-Tbase TZ x4645 = x4627 + x4644;
-Tbase TZ x4646 = 0x11;
-Tbase TZ x4647 = x4646 * x4645;
-Tbase TZ x4648 = x4626 + x4647;
-Tbase TZ x4649 = x4611 + x4648;
-Tbase TZ x4650 = 0x17;
-Tbase TZ x4651 = x4649 >>> x4650;
-Tbase TZ x4652 = x4254 * x4332;
-Tbase TZ x4653 = x4257 * x4329;
-Tbase TZ x4654 = x4260 * x4326;
-Tbase TZ x4655 = x4263 * x4323;
-Tbase TZ x4656 = x4266 * x4320;
-Tbase TZ x4657 = x4269 * x4317;
-Tbase TZ x4658 = x4272 * x4314;
-Tbase TZ x4659 = x4275 * x4311;
-Tbase TZ x4660 = x4278 * x4308;
-Tbase TZ x4661 = x4659 + x4660;
-Tbase TZ x4662 = x4658 + x4661;
-Tbase TZ x4663 = x4657 + x4662;
-Tbase TZ x4664 = x4656 + x4663;
-Tbase TZ x4665 = x4655 + x4664;
-Tbase TZ x4666 = x4654 + x4665;
-Tbase TZ x4667 = x4653 + x4666;
-Tbase TZ x4668 = x4652 + x4667;
-Tbase TZ x4669 = x4227 * x4305;
-Tbase TZ x4670 = x4230 * x4302;
-Tbase TZ x4671 = x4233 * x4299;
-Tbase TZ x4672 = x4236 * x4296;
-Tbase TZ x4673 = x4239 * x4293;
-Tbase TZ x4674 = x4242 * x4290;
-Tbase TZ x4675 = x4245 * x4287;
-Tbase TZ x4676 = x4248 * x4284;
-Tbase TZ x4677 = x4251 * x4281;
-Tbase TZ x4678 = x4676 + x4677;
-Tbase TZ x4679 = x4675 + x4678;
-Tbase TZ x4680 = x4674 + x4679;
-Tbase TZ x4681 = x4673 + x4680;
-Tbase TZ x4682 = x4672 + x4681;
-Tbase TZ x4683 = x4671 + x4682;
-Tbase TZ x4684 = x4670 + x4683;
-Tbase TZ x4685 = x4669 + x4684;
-Tbase TZ x4686 = 0x11;
-Tbase TZ x4687 = x4686 * x4685;
-Tbase TZ x4688 = x4668 + x4687;
-Tbase TZ x4689 = x4651 + x4688;
-Tbase TZ x4690 = 0x17;
-Tbase TZ x4691 = x4689 >>> x4690;
-Tbase TZ x4692 = x4251 * x4332;
-Tbase TZ x4693 = x4254 * x4329;
-Tbase TZ x4694 = x4257 * x4326;
-Tbase TZ x4695 = x4260 * x4323;
-Tbase TZ x4696 = x4263 * x4320;
-Tbase TZ x4697 = x4266 * x4317;
-Tbase TZ x4698 = x4269 * x4314;
-Tbase TZ x4699 = x4272 * x4311;
-Tbase TZ x4700 = x4275 * x4308;
-Tbase TZ x4701 = x4278 * x4305;
-Tbase TZ x4702 = x4700 + x4701;
-Tbase TZ x4703 = x4699 + x4702;
-Tbase TZ x4704 = x4698 + x4703;
-Tbase TZ x4705 = x4697 + x4704;
-Tbase TZ x4706 = x4696 + x4705;
-Tbase TZ x4707 = x4695 + x4706;
-Tbase TZ x4708 = x4694 + x4707;
-Tbase TZ x4709 = x4693 + x4708;
-Tbase TZ x4710 = x4692 + x4709;
-Tbase TZ x4711 = x4227 * x4302;
-Tbase TZ x4712 = x4230 * x4299;
-Tbase TZ x4713 = x4233 * x4296;
-Tbase TZ x4714 = x4236 * x4293;
-Tbase TZ x4715 = x4239 * x4290;
-Tbase TZ x4716 = x4242 * x4287;
-Tbase TZ x4717 = x4245 * x4284;
-Tbase TZ x4718 = x4248 * x4281;
-Tbase TZ x4719 = x4717 + x4718;
-Tbase TZ x4720 = x4716 + x4719;
-Tbase TZ x4721 = x4715 + x4720;
-Tbase TZ x4722 = x4714 + x4721;
-Tbase TZ x4723 = x4713 + x4722;
-Tbase TZ x4724 = x4712 + x4723;
-Tbase TZ x4725 = x4711 + x4724;
-Tbase TZ x4726 = 0x11;
-Tbase TZ x4727 = x4726 * x4725;
-Tbase TZ x4728 = x4710 + x4727;
-Tbase TZ x4729 = x4691 + x4728;
-Tbase TZ x4730 = 0x17;
-Tbase TZ x4731 = x4729 >>> x4730;
-Tbase TZ x4732 = x4248 * x4332;
-Tbase TZ x4733 = x4251 * x4329;
-Tbase TZ x4734 = x4254 * x4326;
-Tbase TZ x4735 = x4257 * x4323;
-Tbase TZ x4736 = x4260 * x4320;
-Tbase TZ x4737 = x4263 * x4317;
-Tbase TZ x4738 = x4266 * x4314;
-Tbase TZ x4739 = x4269 * x4311;
-Tbase TZ x4740 = x4272 * x4308;
-Tbase TZ x4741 = x4275 * x4305;
-Tbase TZ x4742 = x4278 * x4302;
-Tbase TZ x4743 = x4741 + x4742;
-Tbase TZ x4744 = x4740 + x4743;
-Tbase TZ x4745 = x4739 + x4744;
-Tbase TZ x4746 = x4738 + x4745;
-Tbase TZ x4747 = x4737 + x4746;
-Tbase TZ x4748 = x4736 + x4747;
-Tbase TZ x4749 = x4735 + x4748;
-Tbase TZ x4750 = x4734 + x4749;
-Tbase TZ x4751 = x4733 + x4750;
-Tbase TZ x4752 = x4732 + x4751;
-Tbase TZ x4753 = x4227 * x4299;
-Tbase TZ x4754 = x4230 * x4296;
-Tbase TZ x4755 = x4233 * x4293;
-Tbase TZ x4756 = x4236 * x4290;
-Tbase TZ x4757 = x4239 * x4287;
-Tbase TZ x4758 = x4242 * x4284;
-Tbase TZ x4759 = x4245 * x4281;
-Tbase TZ x4760 = x4758 + x4759;
-Tbase TZ x4761 = x4757 + x4760;
-Tbase TZ x4762 = x4756 + x4761;
-Tbase TZ x4763 = x4755 + x4762;
-Tbase TZ x4764 = x4754 + x4763;
-Tbase TZ x4765 = x4753 + x4764;
-Tbase TZ x4766 = 0x11;
-Tbase TZ x4767 = x4766 * x4765;
-Tbase TZ x4768 = x4752 + x4767;
-Tbase TZ x4769 = x4731 + x4768;
-Tbase TZ x4770 = 0x17;
-Tbase TZ x4771 = x4769 >>> x4770;
-Tbase TZ x4772 = x4245 * x4332;
-Tbase TZ x4773 = x4248 * x4329;
-Tbase TZ x4774 = x4251 * x4326;
-Tbase TZ x4775 = x4254 * x4323;
-Tbase TZ x4776 = x4257 * x4320;
-Tbase TZ x4777 = x4260 * x4317;
-Tbase TZ x4778 = x4263 * x4314;
-Tbase TZ x4779 = x4266 * x4311;
-Tbase TZ x4780 = x4269 * x4308;
-Tbase TZ x4781 = x4272 * x4305;
-Tbase TZ x4782 = x4275 * x4302;
-Tbase TZ x4783 = x4278 * x4299;
-Tbase TZ x4784 = x4782 + x4783;
-Tbase TZ x4785 = x4781 + x4784;
-Tbase TZ x4786 = x4780 + x4785;
-Tbase TZ x4787 = x4779 + x4786;
-Tbase TZ x4788 = x4778 + x4787;
-Tbase TZ x4789 = x4777 + x4788;
-Tbase TZ x4790 = x4776 + x4789;
-Tbase TZ x4791 = x4775 + x4790;
-Tbase TZ x4792 = x4774 + x4791;
-Tbase TZ x4793 = x4773 + x4792;
-Tbase TZ x4794 = x4772 + x4793;
-Tbase TZ x4795 = x4227 * x4296;
-Tbase TZ x4796 = x4230 * x4293;
-Tbase TZ x4797 = x4233 * x4290;
-Tbase TZ x4798 = x4236 * x4287;
-Tbase TZ x4799 = x4239 * x4284;
-Tbase TZ x4800 = x4242 * x4281;
-Tbase TZ x4801 = x4799 + x4800;
-Tbase TZ x4802 = x4798 + x4801;
-Tbase TZ x4803 = x4797 + x4802;
-Tbase TZ x4804 = x4796 + x4803;
-Tbase TZ x4805 = x4795 + x4804;
-Tbase TZ x4806 = 0x11;
-Tbase TZ x4807 = x4806 * x4805;
-Tbase TZ x4808 = x4794 + x4807;
-Tbase TZ x4809 = x4771 + x4808;
-Tbase TZ x4810 = 0x17;
-Tbase TZ x4811 = x4809 >>> x4810;
-Tbase TZ x4812 = x4242 * x4332;
-Tbase TZ x4813 = x4245 * x4329;
-Tbase TZ x4814 = x4248 * x4326;
-Tbase TZ x4815 = x4251 * x4323;
-Tbase TZ x4816 = x4254 * x4320;
-Tbase TZ x4817 = x4257 * x4317;
-Tbase TZ x4818 = x4260 * x4314;
-Tbase TZ x4819 = x4263 * x4311;
-Tbase TZ x4820 = x4266 * x4308;
-Tbase TZ x4821 = x4269 * x4305;
-Tbase TZ x4822 = x4272 * x4302;
-Tbase TZ x4823 = x4275 * x4299;
-Tbase TZ x4824 = x4278 * x4296;
-Tbase TZ x4825 = x4823 + x4824;
-Tbase TZ x4826 = x4822 + x4825;
-Tbase TZ x4827 = x4821 + x4826;
-Tbase TZ x4828 = x4820 + x4827;
-Tbase TZ x4829 = x4819 + x4828;
-Tbase TZ x4830 = x4818 + x4829;
-Tbase TZ x4831 = x4817 + x4830;
-Tbase TZ x4832 = x4816 + x4831;
-Tbase TZ x4833 = x4815 + x4832;
-Tbase TZ x4834 = x4814 + x4833;
-Tbase TZ x4835 = x4813 + x4834;
-Tbase TZ x4836 = x4812 + x4835;
-Tbase TZ x4837 = x4227 * x4293;
-Tbase TZ x4838 = x4230 * x4290;
-Tbase TZ x4839 = x4233 * x4287;
-Tbase TZ x4840 = x4236 * x4284;
-Tbase TZ x4841 = x4239 * x4281;
-Tbase TZ x4842 = x4840 + x4841;
-Tbase TZ x4843 = x4839 + x4842;
-Tbase TZ x4844 = x4838 + x4843;
-Tbase TZ x4845 = x4837 + x4844;
-Tbase TZ x4846 = 0x11;
-Tbase TZ x4847 = x4846 * x4845;
-Tbase TZ x4848 = x4836 + x4847;
-Tbase TZ x4849 = x4811 + x4848;
-Tbase TZ x4850 = 0x17;
-Tbase TZ x4851 = x4849 >>> x4850;
-Tbase TZ x4852 = x4239 * x4332;
-Tbase TZ x4853 = x4242 * x4329;
-Tbase TZ x4854 = x4245 * x4326;
-Tbase TZ x4855 = x4248 * x4323;
-Tbase TZ x4856 = x4251 * x4320;
-Tbase TZ x4857 = x4254 * x4317;
-Tbase TZ x4858 = x4257 * x4314;
-Tbase TZ x4859 = x4260 * x4311;
-Tbase TZ x4860 = x4263 * x4308;
-Tbase TZ x4861 = x4266 * x4305;
-Tbase TZ x4862 = x4269 * x4302;
-Tbase TZ x4863 = x4272 * x4299;
-Tbase TZ x4864 = x4275 * x4296;
-Tbase TZ x4865 = x4278 * x4293;
-Tbase TZ x4866 = x4864 + x4865;
-Tbase TZ x4867 = x4863 + x4866;
-Tbase TZ x4868 = x4862 + x4867;
-Tbase TZ x4869 = x4861 + x4868;
-Tbase TZ x4870 = x4860 + x4869;
-Tbase TZ x4871 = x4859 + x4870;
-Tbase TZ x4872 = x4858 + x4871;
-Tbase TZ x4873 = x4857 + x4872;
-Tbase TZ x4874 = x4856 + x4873;
-Tbase TZ x4875 = x4855 + x4874;
-Tbase TZ x4876 = x4854 + x4875;
-Tbase TZ x4877 = x4853 + x4876;
-Tbase TZ x4878 = x4852 + x4877;
-Tbase TZ x4879 = x4227 * x4290;
-Tbase TZ x4880 = x4230 * x4287;
-Tbase TZ x4881 = x4233 * x4284;
-Tbase TZ x4882 = x4236 * x4281;
-Tbase TZ x4883 = x4881 + x4882;
-Tbase TZ x4884 = x4880 + x4883;
-Tbase TZ x4885 = x4879 + x4884;
-Tbase TZ x4886 = 0x11;
-Tbase TZ x4887 = x4886 * x4885;
-Tbase TZ x4888 = x4878 + x4887;
-Tbase TZ x4889 = x4851 + x4888;
-Tbase TZ x4890 = 0x17;
-Tbase TZ x4891 = x4889 >>> x4890;
-Tbase TZ x4892 = x4236 * x4332;
-Tbase TZ x4893 = x4239 * x4329;
-Tbase TZ x4894 = x4242 * x4326;
-Tbase TZ x4895 = x4245 * x4323;
-Tbase TZ x4896 = x4248 * x4320;
-Tbase TZ x4897 = x4251 * x4317;
-Tbase TZ x4898 = x4254 * x4314;
-Tbase TZ x4899 = x4257 * x4311;
-Tbase TZ x4900 = x4260 * x4308;
-Tbase TZ x4901 = x4263 * x4305;
-Tbase TZ x4902 = x4266 * x4302;
-Tbase TZ x4903 = x4269 * x4299;
-Tbase TZ x4904 = x4272 * x4296;
-Tbase TZ x4905 = x4275 * x4293;
-Tbase TZ x4906 = x4278 * x4290;
-Tbase TZ x4907 = x4905 + x4906;
-Tbase TZ x4908 = x4904 + x4907;
-Tbase TZ x4909 = x4903 + x4908;
-Tbase TZ x4910 = x4902 + x4909;
-Tbase TZ x4911 = x4901 + x4910;
-Tbase TZ x4912 = x4900 + x4911;
-Tbase TZ x4913 = x4899 + x4912;
-Tbase TZ x4914 = x4898 + x4913;
-Tbase TZ x4915 = x4897 + x4914;
-Tbase TZ x4916 = x4896 + x4915;
-Tbase TZ x4917 = x4895 + x4916;
-Tbase TZ x4918 = x4894 + x4917;
-Tbase TZ x4919 = x4893 + x4918;
-Tbase TZ x4920 = x4892 + x4919;
-Tbase TZ x4921 = x4227 * x4287;
-Tbase TZ x4922 = x4230 * x4284;
-Tbase TZ x4923 = x4233 * x4281;
-Tbase TZ x4924 = x4922 + x4923;
-Tbase TZ x4925 = x4921 + x4924;
-Tbase TZ x4926 = 0x11;
-Tbase TZ x4927 = x4926 * x4925;
-Tbase TZ x4928 = x4920 + x4927;
-Tbase TZ x4929 = x4891 + x4928;
-Tbase TZ x4930 = 0x17;
-Tbase TZ x4931 = x4929 >>> x4930;
-Tbase TZ x4932 = x4233 * x4332;
-Tbase TZ x4933 = x4236 * x4329;
-Tbase TZ x4934 = x4239 * x4326;
-Tbase TZ x4935 = x4242 * x4323;
-Tbase TZ x4936 = x4245 * x4320;
-Tbase TZ x4937 = x4248 * x4317;
-Tbase TZ x4938 = x4251 * x4314;
-Tbase TZ x4939 = x4254 * x4311;
-Tbase TZ x4940 = x4257 * x4308;
-Tbase TZ x4941 = x4260 * x4305;
-Tbase TZ x4942 = x4263 * x4302;
-Tbase TZ x4943 = x4266 * x4299;
-Tbase TZ x4944 = x4269 * x4296;
-Tbase TZ x4945 = x4272 * x4293;
-Tbase TZ x4946 = x4275 * x4290;
-Tbase TZ x4947 = x4278 * x4287;
-Tbase TZ x4948 = x4946 + x4947;
-Tbase TZ x4949 = x4945 + x4948;
-Tbase TZ x4950 = x4944 + x4949;
-Tbase TZ x4951 = x4943 + x4950;
-Tbase TZ x4952 = x4942 + x4951;
-Tbase TZ x4953 = x4941 + x4952;
-Tbase TZ x4954 = x4940 + x4953;
-Tbase TZ x4955 = x4939 + x4954;
-Tbase TZ x4956 = x4938 + x4955;
-Tbase TZ x4957 = x4937 + x4956;
-Tbase TZ x4958 = x4936 + x4957;
-Tbase TZ x4959 = x4935 + x4958;
-Tbase TZ x4960 = x4934 + x4959;
-Tbase TZ x4961 = x4933 + x4960;
-Tbase TZ x4962 = x4932 + x4961;
-Tbase TZ x4963 = x4227 * x4284;
-Tbase TZ x4964 = x4230 * x4281;
-Tbase TZ x4965 = x4963 + x4964;
-Tbase TZ x4966 = 0x11;
-Tbase TZ x4967 = x4966 * x4965;
-Tbase TZ x4968 = x4962 + x4967;
-Tbase TZ x4969 = x4931 + x4968;
-Tbase TZ x4970 = 0x17;
-Tbase TZ x4971 = x4969 >>> x4970;
-Tbase TZ x4972 = x4230 * x4332;
-Tbase TZ x4973 = x4233 * x4329;
-Tbase TZ x4974 = x4236 * x4326;
-Tbase TZ x4975 = x4239 * x4323;
-Tbase TZ x4976 = x4242 * x4320;
-Tbase TZ x4977 = x4245 * x4317;
-Tbase TZ x4978 = x4248 * x4314;
-Tbase TZ x4979 = x4251 * x4311;
-Tbase TZ x4980 = x4254 * x4308;
-Tbase TZ x4981 = x4257 * x4305;
-Tbase TZ x4982 = x4260 * x4302;
-Tbase TZ x4983 = x4263 * x4299;
-Tbase TZ x4984 = x4266 * x4296;
-Tbase TZ x4985 = x4269 * x4293;
-Tbase TZ x4986 = x4272 * x4290;
-Tbase TZ x4987 = x4275 * x4287;
-Tbase TZ x4988 = x4278 * x4284;
-Tbase TZ x4989 = x4987 + x4988;
-Tbase TZ x4990 = x4986 + x4989;
-Tbase TZ x4991 = x4985 + x4990;
-Tbase TZ x4992 = x4984 + x4991;
-Tbase TZ x4993 = x4983 + x4992;
-Tbase TZ x4994 = x4982 + x4993;
-Tbase TZ x4995 = x4981 + x4994;
-Tbase TZ x4996 = x4980 + x4995;
-Tbase TZ x4997 = x4979 + x4996;
-Tbase TZ x4998 = x4978 + x4997;
-Tbase TZ x4999 = x4977 + x4998;
-Tbase TZ x5000 = x4976 + x4999;
-Tbase TZ x5001 = x4975 + x5000;
-Tbase TZ x5002 = x4974 + x5001;
-Tbase TZ x5003 = x4973 + x5002;
-Tbase TZ x5004 = x4972 + x5003;
-Tbase TZ x5005 = x4227 * x4281;
-Tbase TZ x5006 = 0x11;
-Tbase TZ x5007 = x5006 * x5005;
-Tbase TZ x5008 = x5004 + x5007;
-Tbase TZ x5009 = x4971 + x5008;
-Tbase TZ x5010 = 0x17;
-Tbase TZ x5011 = x5009 >>> x5010;
-Tbase TZ x5012 = x4227 * x4332;
-Tbase TZ x5013 = x4230 * x4329;
-Tbase TZ x5014 = x4233 * x4326;
-Tbase TZ x5015 = x4236 * x4323;
-Tbase TZ x5016 = x4239 * x4320;
-Tbase TZ x5017 = x4242 * x4317;
-Tbase TZ x5018 = x4245 * x4314;
-Tbase TZ x5019 = x4248 * x4311;
-Tbase TZ x5020 = x4251 * x4308;
-Tbase TZ x5021 = x4254 * x4305;
-Tbase TZ x5022 = x4257 * x4302;
-Tbase TZ x5023 = x4260 * x4299;
-Tbase TZ x5024 = x4263 * x4296;
-Tbase TZ x5025 = x4266 * x4293;
-Tbase TZ x5026 = x4269 * x4290;
-Tbase TZ x5027 = x4272 * x4287;
-Tbase TZ x5028 = x4275 * x4284;
-Tbase TZ x5029 = x4278 * x4281;
-Tbase TZ x5030 = x5028 + x5029;
-Tbase TZ x5031 = x5027 + x5030;
-Tbase TZ x5032 = x5026 + x5031;
-Tbase TZ x5033 = x5025 + x5032;
-Tbase TZ x5034 = x5024 + x5033;
-Tbase TZ x5035 = x5023 + x5034;
-Tbase TZ x5036 = x5022 + x5035;
-Tbase TZ x5037 = x5021 + x5036;
-Tbase TZ x5038 = x5020 + x5037;
-Tbase TZ x5039 = x5019 + x5038;
-Tbase TZ x5040 = x5018 + x5039;
-Tbase TZ x5041 = x5017 + x5040;
-Tbase TZ x5042 = x5016 + x5041;
-Tbase TZ x5043 = x5015 + x5042;
-Tbase TZ x5044 = x5014 + x5043;
-Tbase TZ x5045 = x5013 + x5044;
-Tbase TZ x5046 = x5012 + x5045;
-Tbase TZ x5047 = x5011 + x5046;
-Tbase TZ x5048 = 0x17;
-Tbase TZ x5049 = x5047 >>> x5048;
-Tbase TZ x5050 = 0x11;
-Tbase TZ x5051 = x5050 * x5049;
-Tbase TZ x5052 = 0x7fffff;
-Tbase TZ x5053 = x4369 & x5052;
-Tbase TZ x5054 = x5051 + x5053;
-Tbase TZ x5055 = 0x17;
-Tbase TZ x5056 = x5054 >>> x5055;
-Tbase TZ x5057 = 0x7fffff;
-Tbase TZ x5058 = x4409 & x5057;
-Tbase TZ x5059 = x5056 + x5058;
-Tbase TZ x5060 = 0x7fffff;
-Tbase TZ x5061 = x5047 & x5060;
-Tbase TZ x5062 = 0x7fffff;
-Tbase TZ x5063 = x5009 & x5062;
-Tbase TZ x5064 = 0x7fffff;
-Tbase TZ x5065 = x4969 & x5064;
-Tbase TZ x5066 = 0x7fffff;
-Tbase TZ x5067 = x4929 & x5066;
-Tbase TZ x5068 = 0x7fffff;
-Tbase TZ x5069 = x4889 & x5068;
-Tbase TZ x5070 = 0x7fffff;
-Tbase TZ x5071 = x4849 & x5070;
-Tbase TZ x5072 = 0x7fffff;
-Tbase TZ x5073 = x4809 & x5072;
-Tbase TZ x5074 = 0x7fffff;
-Tbase TZ x5075 = x4769 & x5074;
-Tbase TZ x5076 = 0x7fffff;
-Tbase TZ x5077 = x4729 & x5076;
-Tbase TZ x5078 = 0x7fffff;
-Tbase TZ x5079 = x4689 & x5078;
-Tbase TZ x5080 = 0x7fffff;
-Tbase TZ x5081 = x4649 & x5080;
-Tbase TZ x5082 = 0x7fffff;
-Tbase TZ x5083 = x4609 & x5082;
-Tbase TZ x5084 = 0x7fffff;
-Tbase TZ x5085 = x4569 & x5084;
-Tbase TZ x5086 = 0x7fffff;
-Tbase TZ x5087 = x4529 & x5086;
-Tbase TZ x5088 = 0x7fffff;
-Tbase TZ x5089 = x4489 & x5088;
-Tbase TZ x5090 = 0x17;
-Tbase TZ x5091 = x5059 >>> x5090;
-Tbase TZ x5092 = 0x7fffff;
-Tbase TZ x5093 = x4449 & x5092;
-Tbase TZ x5094 = x5091 + x5093;
-Tbase TZ x5095 = 0x7fffff;
-Tbase TZ x5096 = x5059 & x5095;
-Tbase TZ x5097 = 0x7fffff;
-Tbase TZ x5098 = x5054 & x5097;
-Tbase TZ x5099 = x88 * x5098;
-Tbase TZ x5100 = x71 * x5096;
-Tbase TZ x5101 = x72 * x5094;
-Tbase TZ x5102 = x73 * x5089;
-Tbase TZ x5103 = x74 * x5087;
-Tbase TZ x5104 = x75 * x5085;
-Tbase TZ x5105 = x76 * x5083;
-Tbase TZ x5106 = x77 * x5081;
-Tbase TZ x5107 = x78 * x5079;
-Tbase TZ x5108 = x79 * x5077;
-Tbase TZ x5109 = x80 * x5075;
-Tbase TZ x5110 = x81 * x5073;
-Tbase TZ x5111 = x82 * x5071;
-Tbase TZ x5112 = x83 * x5069;
-Tbase TZ x5113 = x84 * x5067;
-Tbase TZ x5114 = x85 * x5065;
-Tbase TZ x5115 = x86 * x5063;
-Tbase TZ x5116 = x87 * x5061;
-Tbase TZ x5117 = x5115 + x5116;
-Tbase TZ x5118 = x5114 + x5117;
-Tbase TZ x5119 = x5113 + x5118;
-Tbase TZ x5120 = x5112 + x5119;
-Tbase TZ x5121 = x5111 + x5120;
-Tbase TZ x5122 = x5110 + x5121;
-Tbase TZ x5123 = x5109 + x5122;
-Tbase TZ x5124 = x5108 + x5123;
-Tbase TZ x5125 = x5107 + x5124;
-Tbase TZ x5126 = x5106 + x5125;
-Tbase TZ x5127 = x5105 + x5126;
-Tbase TZ x5128 = x5104 + x5127;
-Tbase TZ x5129 = x5103 + x5128;
-Tbase TZ x5130 = x5102 + x5129;
-Tbase TZ x5131 = x5101 + x5130;
-Tbase TZ x5132 = x5100 + x5131;
-Tbase TZ x5133 = 0x11;
-Tbase TZ x5134 = x5133 * x5132;
-Tbase TZ x5135 = x5099 + x5134;
-Tbase TZ x5136 = 0x17;
-Tbase TZ x5137 = x5135 >>> x5136;
-Tbase TZ x5138 = x87 * x5098;
-Tbase TZ x5139 = x88 * x5096;
-Tbase TZ x5140 = x5138 + x5139;
-Tbase TZ x5141 = x71 * x5094;
-Tbase TZ x5142 = x72 * x5089;
-Tbase TZ x5143 = x73 * x5087;
-Tbase TZ x5144 = x74 * x5085;
-Tbase TZ x5145 = x75 * x5083;
-Tbase TZ x5146 = x76 * x5081;
-Tbase TZ x5147 = x77 * x5079;
-Tbase TZ x5148 = x78 * x5077;
-Tbase TZ x5149 = x79 * x5075;
-Tbase TZ x5150 = x80 * x5073;
-Tbase TZ x5151 = x81 * x5071;
-Tbase TZ x5152 = x82 * x5069;
-Tbase TZ x5153 = x83 * x5067;
-Tbase TZ x5154 = x84 * x5065;
-Tbase TZ x5155 = x85 * x5063;
-Tbase TZ x5156 = x86 * x5061;
-Tbase TZ x5157 = x5155 + x5156;
-Tbase TZ x5158 = x5154 + x5157;
-Tbase TZ x5159 = x5153 + x5158;
-Tbase TZ x5160 = x5152 + x5159;
-Tbase TZ x5161 = x5151 + x5160;
-Tbase TZ x5162 = x5150 + x5161;
-Tbase TZ x5163 = x5149 + x5162;
-Tbase TZ x5164 = x5148 + x5163;
-Tbase TZ x5165 = x5147 + x5164;
-Tbase TZ x5166 = x5146 + x5165;
-Tbase TZ x5167 = x5145 + x5166;
-Tbase TZ x5168 = x5144 + x5167;
-Tbase TZ x5169 = x5143 + x5168;
-Tbase TZ x5170 = x5142 + x5169;
-Tbase TZ x5171 = x5141 + x5170;
-Tbase TZ x5172 = 0x11;
-Tbase TZ x5173 = x5172 * x5171;
-Tbase TZ x5174 = x5140 + x5173;
-Tbase TZ x5175 = x5137 + x5174;
-Tbase TZ x5176 = 0x17;
-Tbase TZ x5177 = x5175 >>> x5176;
-Tbase TZ x5178 = x86 * x5098;
-Tbase TZ x5179 = x87 * x5096;
-Tbase TZ x5180 = x88 * x5094;
-Tbase TZ x5181 = x5179 + x5180;
-Tbase TZ x5182 = x5178 + x5181;
-Tbase TZ x5183 = x71 * x5089;
-Tbase TZ x5184 = x72 * x5087;
-Tbase TZ x5185 = x73 * x5085;
-Tbase TZ x5186 = x74 * x5083;
-Tbase TZ x5187 = x75 * x5081;
-Tbase TZ x5188 = x76 * x5079;
-Tbase TZ x5189 = x77 * x5077;
-Tbase TZ x5190 = x78 * x5075;
-Tbase TZ x5191 = x79 * x5073;
-Tbase TZ x5192 = x80 * x5071;
-Tbase TZ x5193 = x81 * x5069;
-Tbase TZ x5194 = x82 * x5067;
-Tbase TZ x5195 = x83 * x5065;
-Tbase TZ x5196 = x84 * x5063;
-Tbase TZ x5197 = x85 * x5061;
-Tbase TZ x5198 = x5196 + x5197;
-Tbase TZ x5199 = x5195 + x5198;
-Tbase TZ x5200 = x5194 + x5199;
-Tbase TZ x5201 = x5193 + x5200;
-Tbase TZ x5202 = x5192 + x5201;
-Tbase TZ x5203 = x5191 + x5202;
-Tbase TZ x5204 = x5190 + x5203;
-Tbase TZ x5205 = x5189 + x5204;
-Tbase TZ x5206 = x5188 + x5205;
-Tbase TZ x5207 = x5187 + x5206;
-Tbase TZ x5208 = x5186 + x5207;
-Tbase TZ x5209 = x5185 + x5208;
-Tbase TZ x5210 = x5184 + x5209;
-Tbase TZ x5211 = x5183 + x5210;
-Tbase TZ x5212 = 0x11;
-Tbase TZ x5213 = x5212 * x5211;
-Tbase TZ x5214 = x5182 + x5213;
-Tbase TZ x5215 = x5177 + x5214;
-Tbase TZ x5216 = 0x17;
-Tbase TZ x5217 = x5215 >>> x5216;
-Tbase TZ x5218 = x85 * x5098;
-Tbase TZ x5219 = x86 * x5096;
-Tbase TZ x5220 = x87 * x5094;
-Tbase TZ x5221 = x88 * x5089;
-Tbase TZ x5222 = x5220 + x5221;
-Tbase TZ x5223 = x5219 + x5222;
-Tbase TZ x5224 = x5218 + x5223;
-Tbase TZ x5225 = x71 * x5087;
-Tbase TZ x5226 = x72 * x5085;
-Tbase TZ x5227 = x73 * x5083;
-Tbase TZ x5228 = x74 * x5081;
-Tbase TZ x5229 = x75 * x5079;
-Tbase TZ x5230 = x76 * x5077;
-Tbase TZ x5231 = x77 * x5075;
-Tbase TZ x5232 = x78 * x5073;
-Tbase TZ x5233 = x79 * x5071;
-Tbase TZ x5234 = x80 * x5069;
-Tbase TZ x5235 = x81 * x5067;
-Tbase TZ x5236 = x82 * x5065;
-Tbase TZ x5237 = x83 * x5063;
-Tbase TZ x5238 = x84 * x5061;
-Tbase TZ x5239 = x5237 + x5238;
-Tbase TZ x5240 = x5236 + x5239;
-Tbase TZ x5241 = x5235 + x5240;
-Tbase TZ x5242 = x5234 + x5241;
-Tbase TZ x5243 = x5233 + x5242;
-Tbase TZ x5244 = x5232 + x5243;
-Tbase TZ x5245 = x5231 + x5244;
-Tbase TZ x5246 = x5230 + x5245;
-Tbase TZ x5247 = x5229 + x5246;
-Tbase TZ x5248 = x5228 + x5247;
-Tbase TZ x5249 = x5227 + x5248;
-Tbase TZ x5250 = x5226 + x5249;
-Tbase TZ x5251 = x5225 + x5250;
-Tbase TZ x5252 = 0x11;
-Tbase TZ x5253 = x5252 * x5251;
-Tbase TZ x5254 = x5224 + x5253;
-Tbase TZ x5255 = x5217 + x5254;
-Tbase TZ x5256 = 0x17;
-Tbase TZ x5257 = x5255 >>> x5256;
-Tbase TZ x5258 = x84 * x5098;
-Tbase TZ x5259 = x85 * x5096;
-Tbase TZ x5260 = x86 * x5094;
-Tbase TZ x5261 = x87 * x5089;
-Tbase TZ x5262 = x88 * x5087;
-Tbase TZ x5263 = x5261 + x5262;
-Tbase TZ x5264 = x5260 + x5263;
-Tbase TZ x5265 = x5259 + x5264;
-Tbase TZ x5266 = x5258 + x5265;
-Tbase TZ x5267 = x71 * x5085;
-Tbase TZ x5268 = x72 * x5083;
-Tbase TZ x5269 = x73 * x5081;
-Tbase TZ x5270 = x74 * x5079;
-Tbase TZ x5271 = x75 * x5077;
-Tbase TZ x5272 = x76 * x5075;
-Tbase TZ x5273 = x77 * x5073;
-Tbase TZ x5274 = x78 * x5071;
-Tbase TZ x5275 = x79 * x5069;
-Tbase TZ x5276 = x80 * x5067;
-Tbase TZ x5277 = x81 * x5065;
-Tbase TZ x5278 = x82 * x5063;
-Tbase TZ x5279 = x83 * x5061;
-Tbase TZ x5280 = x5278 + x5279;
-Tbase TZ x5281 = x5277 + x5280;
-Tbase TZ x5282 = x5276 + x5281;
-Tbase TZ x5283 = x5275 + x5282;
-Tbase TZ x5284 = x5274 + x5283;
-Tbase TZ x5285 = x5273 + x5284;
-Tbase TZ x5286 = x5272 + x5285;
-Tbase TZ x5287 = x5271 + x5286;
-Tbase TZ x5288 = x5270 + x5287;
-Tbase TZ x5289 = x5269 + x5288;
-Tbase TZ x5290 = x5268 + x5289;
-Tbase TZ x5291 = x5267 + x5290;
-Tbase TZ x5292 = 0x11;
-Tbase TZ x5293 = x5292 * x5291;
-Tbase TZ x5294 = x5266 + x5293;
-Tbase TZ x5295 = x5257 + x5294;
-Tbase TZ x5296 = 0x17;
-Tbase TZ x5297 = x5295 >>> x5296;
-Tbase TZ x5298 = x83 * x5098;
-Tbase TZ x5299 = x84 * x5096;
-Tbase TZ x5300 = x85 * x5094;
-Tbase TZ x5301 = x86 * x5089;
-Tbase TZ x5302 = x87 * x5087;
-Tbase TZ x5303 = x88 * x5085;
-Tbase TZ x5304 = x5302 + x5303;
-Tbase TZ x5305 = x5301 + x5304;
-Tbase TZ x5306 = x5300 + x5305;
-Tbase TZ x5307 = x5299 + x5306;
-Tbase TZ x5308 = x5298 + x5307;
-Tbase TZ x5309 = x71 * x5083;
-Tbase TZ x5310 = x72 * x5081;
-Tbase TZ x5311 = x73 * x5079;
-Tbase TZ x5312 = x74 * x5077;
-Tbase TZ x5313 = x75 * x5075;
-Tbase TZ x5314 = x76 * x5073;
-Tbase TZ x5315 = x77 * x5071;
-Tbase TZ x5316 = x78 * x5069;
-Tbase TZ x5317 = x79 * x5067;
-Tbase TZ x5318 = x80 * x5065;
-Tbase TZ x5319 = x81 * x5063;
-Tbase TZ x5320 = x82 * x5061;
-Tbase TZ x5321 = x5319 + x5320;
-Tbase TZ x5322 = x5318 + x5321;
-Tbase TZ x5323 = x5317 + x5322;
-Tbase TZ x5324 = x5316 + x5323;
-Tbase TZ x5325 = x5315 + x5324;
-Tbase TZ x5326 = x5314 + x5325;
-Tbase TZ x5327 = x5313 + x5326;
-Tbase TZ x5328 = x5312 + x5327;
-Tbase TZ x5329 = x5311 + x5328;
-Tbase TZ x5330 = x5310 + x5329;
-Tbase TZ x5331 = x5309 + x5330;
-Tbase TZ x5332 = 0x11;
-Tbase TZ x5333 = x5332 * x5331;
-Tbase TZ x5334 = x5308 + x5333;
-Tbase TZ x5335 = x5297 + x5334;
-Tbase TZ x5336 = 0x17;
-Tbase TZ x5337 = x5335 >>> x5336;
-Tbase TZ x5338 = x82 * x5098;
-Tbase TZ x5339 = x83 * x5096;
-Tbase TZ x5340 = x84 * x5094;
-Tbase TZ x5341 = x85 * x5089;
-Tbase TZ x5342 = x86 * x5087;
-Tbase TZ x5343 = x87 * x5085;
-Tbase TZ x5344 = x88 * x5083;
-Tbase TZ x5345 = x5343 + x5344;
-Tbase TZ x5346 = x5342 + x5345;
-Tbase TZ x5347 = x5341 + x5346;
-Tbase TZ x5348 = x5340 + x5347;
-Tbase TZ x5349 = x5339 + x5348;
-Tbase TZ x5350 = x5338 + x5349;
-Tbase TZ x5351 = x71 * x5081;
-Tbase TZ x5352 = x72 * x5079;
-Tbase TZ x5353 = x73 * x5077;
-Tbase TZ x5354 = x74 * x5075;
-Tbase TZ x5355 = x75 * x5073;
-Tbase TZ x5356 = x76 * x5071;
-Tbase TZ x5357 = x77 * x5069;
-Tbase TZ x5358 = x78 * x5067;
-Tbase TZ x5359 = x79 * x5065;
-Tbase TZ x5360 = x80 * x5063;
-Tbase TZ x5361 = x81 * x5061;
-Tbase TZ x5362 = x5360 + x5361;
-Tbase TZ x5363 = x5359 + x5362;
-Tbase TZ x5364 = x5358 + x5363;
-Tbase TZ x5365 = x5357 + x5364;
-Tbase TZ x5366 = x5356 + x5365;
-Tbase TZ x5367 = x5355 + x5366;
-Tbase TZ x5368 = x5354 + x5367;
-Tbase TZ x5369 = x5353 + x5368;
-Tbase TZ x5370 = x5352 + x5369;
-Tbase TZ x5371 = x5351 + x5370;
-Tbase TZ x5372 = 0x11;
-Tbase TZ x5373 = x5372 * x5371;
-Tbase TZ x5374 = x5350 + x5373;
-Tbase TZ x5375 = x5337 + x5374;
-Tbase TZ x5376 = 0x17;
-Tbase TZ x5377 = x5375 >>> x5376;
-Tbase TZ x5378 = x81 * x5098;
-Tbase TZ x5379 = x82 * x5096;
-Tbase TZ x5380 = x83 * x5094;
-Tbase TZ x5381 = x84 * x5089;
-Tbase TZ x5382 = x85 * x5087;
-Tbase TZ x5383 = x86 * x5085;
-Tbase TZ x5384 = x87 * x5083;
-Tbase TZ x5385 = x88 * x5081;
-Tbase TZ x5386 = x5384 + x5385;
-Tbase TZ x5387 = x5383 + x5386;
-Tbase TZ x5388 = x5382 + x5387;
-Tbase TZ x5389 = x5381 + x5388;
-Tbase TZ x5390 = x5380 + x5389;
-Tbase TZ x5391 = x5379 + x5390;
-Tbase TZ x5392 = x5378 + x5391;
-Tbase TZ x5393 = x71 * x5079;
-Tbase TZ x5394 = x72 * x5077;
-Tbase TZ x5395 = x73 * x5075;
-Tbase TZ x5396 = x74 * x5073;
-Tbase TZ x5397 = x75 * x5071;
-Tbase TZ x5398 = x76 * x5069;
-Tbase TZ x5399 = x77 * x5067;
-Tbase TZ x5400 = x78 * x5065;
-Tbase TZ x5401 = x79 * x5063;
-Tbase TZ x5402 = x80 * x5061;
-Tbase TZ x5403 = x5401 + x5402;
-Tbase TZ x5404 = x5400 + x5403;
-Tbase TZ x5405 = x5399 + x5404;
-Tbase TZ x5406 = x5398 + x5405;
-Tbase TZ x5407 = x5397 + x5406;
-Tbase TZ x5408 = x5396 + x5407;
-Tbase TZ x5409 = x5395 + x5408;
-Tbase TZ x5410 = x5394 + x5409;
-Tbase TZ x5411 = x5393 + x5410;
-Tbase TZ x5412 = 0x11;
-Tbase TZ x5413 = x5412 * x5411;
-Tbase TZ x5414 = x5392 + x5413;
-Tbase TZ x5415 = x5377 + x5414;
-Tbase TZ x5416 = 0x17;
-Tbase TZ x5417 = x5415 >>> x5416;
-Tbase TZ x5418 = x80 * x5098;
-Tbase TZ x5419 = x81 * x5096;
-Tbase TZ x5420 = x82 * x5094;
-Tbase TZ x5421 = x83 * x5089;
-Tbase TZ x5422 = x84 * x5087;
-Tbase TZ x5423 = x85 * x5085;
-Tbase TZ x5424 = x86 * x5083;
-Tbase TZ x5425 = x87 * x5081;
-Tbase TZ x5426 = x88 * x5079;
-Tbase TZ x5427 = x5425 + x5426;
-Tbase TZ x5428 = x5424 + x5427;
-Tbase TZ x5429 = x5423 + x5428;
-Tbase TZ x5430 = x5422 + x5429;
-Tbase TZ x5431 = x5421 + x5430;
-Tbase TZ x5432 = x5420 + x5431;
-Tbase TZ x5433 = x5419 + x5432;
-Tbase TZ x5434 = x5418 + x5433;
-Tbase TZ x5435 = x71 * x5077;
-Tbase TZ x5436 = x72 * x5075;
-Tbase TZ x5437 = x73 * x5073;
-Tbase TZ x5438 = x74 * x5071;
-Tbase TZ x5439 = x75 * x5069;
-Tbase TZ x5440 = x76 * x5067;
-Tbase TZ x5441 = x77 * x5065;
-Tbase TZ x5442 = x78 * x5063;
-Tbase TZ x5443 = x79 * x5061;
-Tbase TZ x5444 = x5442 + x5443;
-Tbase TZ x5445 = x5441 + x5444;
-Tbase TZ x5446 = x5440 + x5445;
-Tbase TZ x5447 = x5439 + x5446;
-Tbase TZ x5448 = x5438 + x5447;
-Tbase TZ x5449 = x5437 + x5448;
-Tbase TZ x5450 = x5436 + x5449;
-Tbase TZ x5451 = x5435 + x5450;
-Tbase TZ x5452 = 0x11;
-Tbase TZ x5453 = x5452 * x5451;
-Tbase TZ x5454 = x5434 + x5453;
-Tbase TZ x5455 = x5417 + x5454;
-Tbase TZ x5456 = 0x17;
-Tbase TZ x5457 = x5455 >>> x5456;
-Tbase TZ x5458 = x79 * x5098;
-Tbase TZ x5459 = x80 * x5096;
-Tbase TZ x5460 = x81 * x5094;
-Tbase TZ x5461 = x82 * x5089;
-Tbase TZ x5462 = x83 * x5087;
-Tbase TZ x5463 = x84 * x5085;
-Tbase TZ x5464 = x85 * x5083;
-Tbase TZ x5465 = x86 * x5081;
-Tbase TZ x5466 = x87 * x5079;
-Tbase TZ x5467 = x88 * x5077;
-Tbase TZ x5468 = x5466 + x5467;
-Tbase TZ x5469 = x5465 + x5468;
-Tbase TZ x5470 = x5464 + x5469;
-Tbase TZ x5471 = x5463 + x5470;
-Tbase TZ x5472 = x5462 + x5471;
-Tbase TZ x5473 = x5461 + x5472;
-Tbase TZ x5474 = x5460 + x5473;
-Tbase TZ x5475 = x5459 + x5474;
-Tbase TZ x5476 = x5458 + x5475;
-Tbase TZ x5477 = x71 * x5075;
-Tbase TZ x5478 = x72 * x5073;
-Tbase TZ x5479 = x73 * x5071;
-Tbase TZ x5480 = x74 * x5069;
-Tbase TZ x5481 = x75 * x5067;
-Tbase TZ x5482 = x76 * x5065;
-Tbase TZ x5483 = x77 * x5063;
-Tbase TZ x5484 = x78 * x5061;
-Tbase TZ x5485 = x5483 + x5484;
-Tbase TZ x5486 = x5482 + x5485;
-Tbase TZ x5487 = x5481 + x5486;
-Tbase TZ x5488 = x5480 + x5487;
-Tbase TZ x5489 = x5479 + x5488;
-Tbase TZ x5490 = x5478 + x5489;
-Tbase TZ x5491 = x5477 + x5490;
-Tbase TZ x5492 = 0x11;
-Tbase TZ x5493 = x5492 * x5491;
-Tbase TZ x5494 = x5476 + x5493;
-Tbase TZ x5495 = x5457 + x5494;
-Tbase TZ x5496 = 0x17;
-Tbase TZ x5497 = x5495 >>> x5496;
-Tbase TZ x5498 = x78 * x5098;
-Tbase TZ x5499 = x79 * x5096;
-Tbase TZ x5500 = x80 * x5094;
-Tbase TZ x5501 = x81 * x5089;
-Tbase TZ x5502 = x82 * x5087;
-Tbase TZ x5503 = x83 * x5085;
-Tbase TZ x5504 = x84 * x5083;
-Tbase TZ x5505 = x85 * x5081;
-Tbase TZ x5506 = x86 * x5079;
-Tbase TZ x5507 = x87 * x5077;
-Tbase TZ x5508 = x88 * x5075;
-Tbase TZ x5509 = x5507 + x5508;
-Tbase TZ x5510 = x5506 + x5509;
-Tbase TZ x5511 = x5505 + x5510;
-Tbase TZ x5512 = x5504 + x5511;
-Tbase TZ x5513 = x5503 + x5512;
-Tbase TZ x5514 = x5502 + x5513;
-Tbase TZ x5515 = x5501 + x5514;
-Tbase TZ x5516 = x5500 + x5515;
-Tbase TZ x5517 = x5499 + x5516;
-Tbase TZ x5518 = x5498 + x5517;
-Tbase TZ x5519 = x71 * x5073;
-Tbase TZ x5520 = x72 * x5071;
-Tbase TZ x5521 = x73 * x5069;
-Tbase TZ x5522 = x74 * x5067;
-Tbase TZ x5523 = x75 * x5065;
-Tbase TZ x5524 = x76 * x5063;
-Tbase TZ x5525 = x77 * x5061;
-Tbase TZ x5526 = x5524 + x5525;
-Tbase TZ x5527 = x5523 + x5526;
-Tbase TZ x5528 = x5522 + x5527;
-Tbase TZ x5529 = x5521 + x5528;
-Tbase TZ x5530 = x5520 + x5529;
-Tbase TZ x5531 = x5519 + x5530;
-Tbase TZ x5532 = 0x11;
-Tbase TZ x5533 = x5532 * x5531;
-Tbase TZ x5534 = x5518 + x5533;
-Tbase TZ x5535 = x5497 + x5534;
-Tbase TZ x5536 = 0x17;
-Tbase TZ x5537 = x5535 >>> x5536;
-Tbase TZ x5538 = x77 * x5098;
-Tbase TZ x5539 = x78 * x5096;
-Tbase TZ x5540 = x79 * x5094;
-Tbase TZ x5541 = x80 * x5089;
-Tbase TZ x5542 = x81 * x5087;
-Tbase TZ x5543 = x82 * x5085;
-Tbase TZ x5544 = x83 * x5083;
-Tbase TZ x5545 = x84 * x5081;
-Tbase TZ x5546 = x85 * x5079;
-Tbase TZ x5547 = x86 * x5077;
-Tbase TZ x5548 = x87 * x5075;
-Tbase TZ x5549 = x88 * x5073;
-Tbase TZ x5550 = x5548 + x5549;
-Tbase TZ x5551 = x5547 + x5550;
-Tbase TZ x5552 = x5546 + x5551;
-Tbase TZ x5553 = x5545 + x5552;
-Tbase TZ x5554 = x5544 + x5553;
-Tbase TZ x5555 = x5543 + x5554;
-Tbase TZ x5556 = x5542 + x5555;
-Tbase TZ x5557 = x5541 + x5556;
-Tbase TZ x5558 = x5540 + x5557;
-Tbase TZ x5559 = x5539 + x5558;
-Tbase TZ x5560 = x5538 + x5559;
-Tbase TZ x5561 = x71 * x5071;
-Tbase TZ x5562 = x72 * x5069;
-Tbase TZ x5563 = x73 * x5067;
-Tbase TZ x5564 = x74 * x5065;
-Tbase TZ x5565 = x75 * x5063;
-Tbase TZ x5566 = x76 * x5061;
-Tbase TZ x5567 = x5565 + x5566;
-Tbase TZ x5568 = x5564 + x5567;
-Tbase TZ x5569 = x5563 + x5568;
-Tbase TZ x5570 = x5562 + x5569;
-Tbase TZ x5571 = x5561 + x5570;
-Tbase TZ x5572 = 0x11;
-Tbase TZ x5573 = x5572 * x5571;
-Tbase TZ x5574 = x5560 + x5573;
-Tbase TZ x5575 = x5537 + x5574;
-Tbase TZ x5576 = 0x17;
-Tbase TZ x5577 = x5575 >>> x5576;
-Tbase TZ x5578 = x76 * x5098;
-Tbase TZ x5579 = x77 * x5096;
-Tbase TZ x5580 = x78 * x5094;
-Tbase TZ x5581 = x79 * x5089;
-Tbase TZ x5582 = x80 * x5087;
-Tbase TZ x5583 = x81 * x5085;
-Tbase TZ x5584 = x82 * x5083;
-Tbase TZ x5585 = x83 * x5081;
-Tbase TZ x5586 = x84 * x5079;
-Tbase TZ x5587 = x85 * x5077;
-Tbase TZ x5588 = x86 * x5075;
-Tbase TZ x5589 = x87 * x5073;
-Tbase TZ x5590 = x88 * x5071;
-Tbase TZ x5591 = x5589 + x5590;
-Tbase TZ x5592 = x5588 + x5591;
-Tbase TZ x5593 = x5587 + x5592;
-Tbase TZ x5594 = x5586 + x5593;
-Tbase TZ x5595 = x5585 + x5594;
-Tbase TZ x5596 = x5584 + x5595;
-Tbase TZ x5597 = x5583 + x5596;
-Tbase TZ x5598 = x5582 + x5597;
-Tbase TZ x5599 = x5581 + x5598;
-Tbase TZ x5600 = x5580 + x5599;
-Tbase TZ x5601 = x5579 + x5600;
-Tbase TZ x5602 = x5578 + x5601;
-Tbase TZ x5603 = x71 * x5069;
-Tbase TZ x5604 = x72 * x5067;
-Tbase TZ x5605 = x73 * x5065;
-Tbase TZ x5606 = x74 * x5063;
-Tbase TZ x5607 = x75 * x5061;
-Tbase TZ x5608 = x5606 + x5607;
-Tbase TZ x5609 = x5605 + x5608;
-Tbase TZ x5610 = x5604 + x5609;
-Tbase TZ x5611 = x5603 + x5610;
-Tbase TZ x5612 = 0x11;
-Tbase TZ x5613 = x5612 * x5611;
-Tbase TZ x5614 = x5602 + x5613;
-Tbase TZ x5615 = x5577 + x5614;
-Tbase TZ x5616 = 0x17;
-Tbase TZ x5617 = x5615 >>> x5616;
-Tbase TZ x5618 = x75 * x5098;
-Tbase TZ x5619 = x76 * x5096;
-Tbase TZ x5620 = x77 * x5094;
-Tbase TZ x5621 = x78 * x5089;
-Tbase TZ x5622 = x79 * x5087;
-Tbase TZ x5623 = x80 * x5085;
-Tbase TZ x5624 = x81 * x5083;
-Tbase TZ x5625 = x82 * x5081;
-Tbase TZ x5626 = x83 * x5079;
-Tbase TZ x5627 = x84 * x5077;
-Tbase TZ x5628 = x85 * x5075;
-Tbase TZ x5629 = x86 * x5073;
-Tbase TZ x5630 = x87 * x5071;
-Tbase TZ x5631 = x88 * x5069;
-Tbase TZ x5632 = x5630 + x5631;
-Tbase TZ x5633 = x5629 + x5632;
-Tbase TZ x5634 = x5628 + x5633;
-Tbase TZ x5635 = x5627 + x5634;
-Tbase TZ x5636 = x5626 + x5635;
-Tbase TZ x5637 = x5625 + x5636;
-Tbase TZ x5638 = x5624 + x5637;
-Tbase TZ x5639 = x5623 + x5638;
-Tbase TZ x5640 = x5622 + x5639;
-Tbase TZ x5641 = x5621 + x5640;
-Tbase TZ x5642 = x5620 + x5641;
-Tbase TZ x5643 = x5619 + x5642;
-Tbase TZ x5644 = x5618 + x5643;
-Tbase TZ x5645 = x71 * x5067;
-Tbase TZ x5646 = x72 * x5065;
-Tbase TZ x5647 = x73 * x5063;
-Tbase TZ x5648 = x74 * x5061;
-Tbase TZ x5649 = x5647 + x5648;
-Tbase TZ x5650 = x5646 + x5649;
-Tbase TZ x5651 = x5645 + x5650;
-Tbase TZ x5652 = 0x11;
-Tbase TZ x5653 = x5652 * x5651;
-Tbase TZ x5654 = x5644 + x5653;
-Tbase TZ x5655 = x5617 + x5654;
-Tbase TZ x5656 = 0x17;
-Tbase TZ x5657 = x5655 >>> x5656;
-Tbase TZ x5658 = x74 * x5098;
-Tbase TZ x5659 = x75 * x5096;
-Tbase TZ x5660 = x76 * x5094;
-Tbase TZ x5661 = x77 * x5089;
-Tbase TZ x5662 = x78 * x5087;
-Tbase TZ x5663 = x79 * x5085;
-Tbase TZ x5664 = x80 * x5083;
-Tbase TZ x5665 = x81 * x5081;
-Tbase TZ x5666 = x82 * x5079;
-Tbase TZ x5667 = x83 * x5077;
-Tbase TZ x5668 = x84 * x5075;
-Tbase TZ x5669 = x85 * x5073;
-Tbase TZ x5670 = x86 * x5071;
-Tbase TZ x5671 = x87 * x5069;
-Tbase TZ x5672 = x88 * x5067;
-Tbase TZ x5673 = x5671 + x5672;
-Tbase TZ x5674 = x5670 + x5673;
-Tbase TZ x5675 = x5669 + x5674;
-Tbase TZ x5676 = x5668 + x5675;
-Tbase TZ x5677 = x5667 + x5676;
-Tbase TZ x5678 = x5666 + x5677;
-Tbase TZ x5679 = x5665 + x5678;
-Tbase TZ x5680 = x5664 + x5679;
-Tbase TZ x5681 = x5663 + x5680;
-Tbase TZ x5682 = x5662 + x5681;
-Tbase TZ x5683 = x5661 + x5682;
-Tbase TZ x5684 = x5660 + x5683;
-Tbase TZ x5685 = x5659 + x5684;
-Tbase TZ x5686 = x5658 + x5685;
-Tbase TZ x5687 = x71 * x5065;
-Tbase TZ x5688 = x72 * x5063;
-Tbase TZ x5689 = x73 * x5061;
-Tbase TZ x5690 = x5688 + x5689;
-Tbase TZ x5691 = x5687 + x5690;
-Tbase TZ x5692 = 0x11;
-Tbase TZ x5693 = x5692 * x5691;
-Tbase TZ x5694 = x5686 + x5693;
-Tbase TZ x5695 = x5657 + x5694;
-Tbase TZ x5696 = 0x17;
-Tbase TZ x5697 = x5695 >>> x5696;
-Tbase TZ x5698 = x73 * x5098;
-Tbase TZ x5699 = x74 * x5096;
-Tbase TZ x5700 = x75 * x5094;
-Tbase TZ x5701 = x76 * x5089;
-Tbase TZ x5702 = x77 * x5087;
-Tbase TZ x5703 = x78 * x5085;
-Tbase TZ x5704 = x79 * x5083;
-Tbase TZ x5705 = x80 * x5081;
-Tbase TZ x5706 = x81 * x5079;
-Tbase TZ x5707 = x82 * x5077;
-Tbase TZ x5708 = x83 * x5075;
-Tbase TZ x5709 = x84 * x5073;
-Tbase TZ x5710 = x85 * x5071;
-Tbase TZ x5711 = x86 * x5069;
-Tbase TZ x5712 = x87 * x5067;
-Tbase TZ x5713 = x88 * x5065;
-Tbase TZ x5714 = x5712 + x5713;
-Tbase TZ x5715 = x5711 + x5714;
-Tbase TZ x5716 = x5710 + x5715;
-Tbase TZ x5717 = x5709 + x5716;
-Tbase TZ x5718 = x5708 + x5717;
-Tbase TZ x5719 = x5707 + x5718;
-Tbase TZ x5720 = x5706 + x5719;
-Tbase TZ x5721 = x5705 + x5720;
-Tbase TZ x5722 = x5704 + x5721;
-Tbase TZ x5723 = x5703 + x5722;
-Tbase TZ x5724 = x5702 + x5723;
-Tbase TZ x5725 = x5701 + x5724;
-Tbase TZ x5726 = x5700 + x5725;
-Tbase TZ x5727 = x5699 + x5726;
-Tbase TZ x5728 = x5698 + x5727;
-Tbase TZ x5729 = x71 * x5063;
-Tbase TZ x5730 = x72 * x5061;
-Tbase TZ x5731 = x5729 + x5730;
-Tbase TZ x5732 = 0x11;
-Tbase TZ x5733 = x5732 * x5731;
-Tbase TZ x5734 = x5728 + x5733;
-Tbase TZ x5735 = x5697 + x5734;
-Tbase TZ x5736 = 0x17;
-Tbase TZ x5737 = x5735 >>> x5736;
-Tbase TZ x5738 = x72 * x5098;
-Tbase TZ x5739 = x73 * x5096;
-Tbase TZ x5740 = x74 * x5094;
-Tbase TZ x5741 = x75 * x5089;
-Tbase TZ x5742 = x76 * x5087;
-Tbase TZ x5743 = x77 * x5085;
-Tbase TZ x5744 = x78 * x5083;
-Tbase TZ x5745 = x79 * x5081;
-Tbase TZ x5746 = x80 * x5079;
-Tbase TZ x5747 = x81 * x5077;
-Tbase TZ x5748 = x82 * x5075;
-Tbase TZ x5749 = x83 * x5073;
-Tbase TZ x5750 = x84 * x5071;
-Tbase TZ x5751 = x85 * x5069;
-Tbase TZ x5752 = x86 * x5067;
-Tbase TZ x5753 = x87 * x5065;
-Tbase TZ x5754 = x88 * x5063;
-Tbase TZ x5755 = x5753 + x5754;
-Tbase TZ x5756 = x5752 + x5755;
-Tbase TZ x5757 = x5751 + x5756;
-Tbase TZ x5758 = x5750 + x5757;
-Tbase TZ x5759 = x5749 + x5758;
-Tbase TZ x5760 = x5748 + x5759;
-Tbase TZ x5761 = x5747 + x5760;
-Tbase TZ x5762 = x5746 + x5761;
-Tbase TZ x5763 = x5745 + x5762;
-Tbase TZ x5764 = x5744 + x5763;
-Tbase TZ x5765 = x5743 + x5764;
-Tbase TZ x5766 = x5742 + x5765;
-Tbase TZ x5767 = x5741 + x5766;
-Tbase TZ x5768 = x5740 + x5767;
-Tbase TZ x5769 = x5739 + x5768;
-Tbase TZ x5770 = x5738 + x5769;
-Tbase TZ x5771 = x71 * x5061;
-Tbase TZ x5772 = 0x11;
-Tbase TZ x5773 = x5772 * x5771;
-Tbase TZ x5774 = x5770 + x5773;
-Tbase TZ x5775 = x5737 + x5774;
-Tbase TZ x5776 = 0x17;
-Tbase TZ x5777 = x5775 >>> x5776;
-Tbase TZ x5778 = x71 * x5098;
-Tbase TZ x5779 = x72 * x5096;
-Tbase TZ x5780 = x73 * x5094;
-Tbase TZ x5781 = x74 * x5089;
-Tbase TZ x5782 = x75 * x5087;
-Tbase TZ x5783 = x76 * x5085;
-Tbase TZ x5784 = x77 * x5083;
-Tbase TZ x5785 = x78 * x5081;
-Tbase TZ x5786 = x79 * x5079;
-Tbase TZ x5787 = x80 * x5077;
-Tbase TZ x5788 = x81 * x5075;
-Tbase TZ x5789 = x82 * x5073;
-Tbase TZ x5790 = x83 * x5071;
-Tbase TZ x5791 = x84 * x5069;
-Tbase TZ x5792 = x85 * x5067;
-Tbase TZ x5793 = x86 * x5065;
-Tbase TZ x5794 = x87 * x5063;
-Tbase TZ x5795 = x88 * x5061;
-Tbase TZ x5796 = x5794 + x5795;
-Tbase TZ x5797 = x5793 + x5796;
-Tbase TZ x5798 = x5792 + x5797;
-Tbase TZ x5799 = x5791 + x5798;
-Tbase TZ x5800 = x5790 + x5799;
-Tbase TZ x5801 = x5789 + x5800;
-Tbase TZ x5802 = x5788 + x5801;
-Tbase TZ x5803 = x5787 + x5802;
-Tbase TZ x5804 = x5786 + x5803;
-Tbase TZ x5805 = x5785 + x5804;
-Tbase TZ x5806 = x5784 + x5805;
-Tbase TZ x5807 = x5783 + x5806;
-Tbase TZ x5808 = x5782 + x5807;
-Tbase TZ x5809 = x5781 + x5808;
-Tbase TZ x5810 = x5780 + x5809;
-Tbase TZ x5811 = x5779 + x5810;
-Tbase TZ x5812 = x5778 + x5811;
-Tbase TZ x5813 = x5777 + x5812;
-Tbase TZ x5814 = 0x17;
-Tbase TZ x5815 = x5813 >>> x5814;
-Tbase TZ x5816 = 0x11;
-Tbase TZ x5817 = x5816 * x5815;
-Tbase TZ x5818 = 0x7fffff;
-Tbase TZ x5819 = x5135 & x5818;
-Tbase TZ x5820 = x5817 + x5819;
-Tbase TZ x5821 = 0x17;
-Tbase TZ x5822 = x5820 >>> x5821;
-Tbase TZ x5823 = 0x7fffff;
-Tbase TZ x5824 = x5175 & x5823;
-Tbase TZ x5825 = x5822 + x5824;
-Tbase TZ x5826 = 0x7fffff;
-Tbase TZ x5827 = x5813 & x5826;
-Tbase TZ x5828 = 0x7fffff;
-Tbase TZ x5829 = x5775 & x5828;
-Tbase TZ x5830 = 0x7fffff;
-Tbase TZ x5831 = x5735 & x5830;
-Tbase TZ x5832 = 0x7fffff;
-Tbase TZ x5833 = x5695 & x5832;
-Tbase TZ x5834 = 0x7fffff;
-Tbase TZ x5835 = x5655 & x5834;
-Tbase TZ x5836 = 0x7fffff;
-Tbase TZ x5837 = x5615 & x5836;
-Tbase TZ x5838 = 0x7fffff;
-Tbase TZ x5839 = x5575 & x5838;
-Tbase TZ x5840 = 0x7fffff;
-Tbase TZ x5841 = x5535 & x5840;
-Tbase TZ x5842 = 0x7fffff;
-Tbase TZ x5843 = x5495 & x5842;
-Tbase TZ x5844 = 0x7fffff;
-Tbase TZ x5845 = x5455 & x5844;
-Tbase TZ x5846 = 0x7fffff;
-Tbase TZ x5847 = x5415 & x5846;
-Tbase TZ x5848 = 0x7fffff;
-Tbase TZ x5849 = x5375 & x5848;
-Tbase TZ x5850 = 0x7fffff;
-Tbase TZ x5851 = x5335 & x5850;
-Tbase TZ x5852 = 0x7fffff;
-Tbase TZ x5853 = x5295 & x5852;
-Tbase TZ x5854 = 0x7fffff;
-Tbase TZ x5855 = x5255 & x5854;
-Tbase TZ x5856 = 0x17;
-Tbase TZ x5857 = x5825 >>> x5856;
-Tbase TZ x5858 = 0x7fffff;
-Tbase TZ x5859 = x5215 & x5858;
-Tbase TZ x5860 = x5857 + x5859;
-Tbase TZ x5861 = 0x7fffff;
-Tbase TZ x5862 = x5825 & x5861;
-Tbase TZ x5863 = 0x7fffff;
-Tbase TZ x5864 = x5820 & x5863;
-Tbase TZ x5865 = x944 * x1764;
-Tbase TZ x5866 = x907 * x1762;
-Tbase TZ x5867 = x909 * x1760;
-Tbase TZ x5868 = x911 * x1755;
-Tbase TZ x5869 = x913 * x1753;
-Tbase TZ x5870 = x915 * x1751;
-Tbase TZ x5871 = x917 * x1749;
-Tbase TZ x5872 = x919 * x1747;
-Tbase TZ x5873 = x921 * x1745;
-Tbase TZ x5874 = x923 * x1743;
-Tbase TZ x5875 = x925 * x1741;
-Tbase TZ x5876 = x927 * x1739;
-Tbase TZ x5877 = x929 * x1737;
-Tbase TZ x5878 = x931 * x1735;
-Tbase TZ x5879 = x933 * x1733;
-Tbase TZ x5880 = x935 * x1731;
-Tbase TZ x5881 = x940 * x1729;
-Tbase TZ x5882 = x942 * x1727;
-Tbase TZ x5883 = x5881 + x5882;
-Tbase TZ x5884 = x5880 + x5883;
-Tbase TZ x5885 = x5879 + x5884;
-Tbase TZ x5886 = x5878 + x5885;
-Tbase TZ x5887 = x5877 + x5886;
-Tbase TZ x5888 = x5876 + x5887;
-Tbase TZ x5889 = x5875 + x5888;
-Tbase TZ x5890 = x5874 + x5889;
-Tbase TZ x5891 = x5873 + x5890;
-Tbase TZ x5892 = x5872 + x5891;
-Tbase TZ x5893 = x5871 + x5892;
-Tbase TZ x5894 = x5870 + x5893;
-Tbase TZ x5895 = x5869 + x5894;
-Tbase TZ x5896 = x5868 + x5895;
-Tbase TZ x5897 = x5867 + x5896;
-Tbase TZ x5898 = x5866 + x5897;
-Tbase TZ x5899 = 0x11;
-Tbase TZ x5900 = x5899 * x5898;
-Tbase TZ x5901 = x5865 + x5900;
-Tbase TZ x5902 = 0x17;
-Tbase TZ x5903 = x5901 >>> x5902;
-Tbase TZ x5904 = x942 * x1764;
-Tbase TZ x5905 = x944 * x1762;
-Tbase TZ x5906 = x5904 + x5905;
-Tbase TZ x5907 = x907 * x1760;
-Tbase TZ x5908 = x909 * x1755;
-Tbase TZ x5909 = x911 * x1753;
-Tbase TZ x5910 = x913 * x1751;
-Tbase TZ x5911 = x915 * x1749;
-Tbase TZ x5912 = x917 * x1747;
-Tbase TZ x5913 = x919 * x1745;
-Tbase TZ x5914 = x921 * x1743;
-Tbase TZ x5915 = x923 * x1741;
-Tbase TZ x5916 = x925 * x1739;
-Tbase TZ x5917 = x927 * x1737;
-Tbase TZ x5918 = x929 * x1735;
-Tbase TZ x5919 = x931 * x1733;
-Tbase TZ x5920 = x933 * x1731;
-Tbase TZ x5921 = x935 * x1729;
-Tbase TZ x5922 = x940 * x1727;
-Tbase TZ x5923 = x5921 + x5922;
-Tbase TZ x5924 = x5920 + x5923;
-Tbase TZ x5925 = x5919 + x5924;
-Tbase TZ x5926 = x5918 + x5925;
-Tbase TZ x5927 = x5917 + x5926;
-Tbase TZ x5928 = x5916 + x5927;
-Tbase TZ x5929 = x5915 + x5928;
-Tbase TZ x5930 = x5914 + x5929;
-Tbase TZ x5931 = x5913 + x5930;
-Tbase TZ x5932 = x5912 + x5931;
-Tbase TZ x5933 = x5911 + x5932;
-Tbase TZ x5934 = x5910 + x5933;
-Tbase TZ x5935 = x5909 + x5934;
-Tbase TZ x5936 = x5908 + x5935;
-Tbase TZ x5937 = x5907 + x5936;
-Tbase TZ x5938 = 0x11;
-Tbase TZ x5939 = x5938 * x5937;
-Tbase TZ x5940 = x5906 + x5939;
-Tbase TZ x5941 = x5903 + x5940;
-Tbase TZ x5942 = 0x17;
-Tbase TZ x5943 = x5941 >>> x5942;
-Tbase TZ x5944 = x940 * x1764;
-Tbase TZ x5945 = x942 * x1762;
-Tbase TZ x5946 = x944 * x1760;
-Tbase TZ x5947 = x5945 + x5946;
-Tbase TZ x5948 = x5944 + x5947;
-Tbase TZ x5949 = x907 * x1755;
-Tbase TZ x5950 = x909 * x1753;
-Tbase TZ x5951 = x911 * x1751;
-Tbase TZ x5952 = x913 * x1749;
-Tbase TZ x5953 = x915 * x1747;
-Tbase TZ x5954 = x917 * x1745;
-Tbase TZ x5955 = x919 * x1743;
-Tbase TZ x5956 = x921 * x1741;
-Tbase TZ x5957 = x923 * x1739;
-Tbase TZ x5958 = x925 * x1737;
-Tbase TZ x5959 = x927 * x1735;
-Tbase TZ x5960 = x929 * x1733;
-Tbase TZ x5961 = x931 * x1731;
-Tbase TZ x5962 = x933 * x1729;
-Tbase TZ x5963 = x935 * x1727;
-Tbase TZ x5964 = x5962 + x5963;
-Tbase TZ x5965 = x5961 + x5964;
-Tbase TZ x5966 = x5960 + x5965;
-Tbase TZ x5967 = x5959 + x5966;
-Tbase TZ x5968 = x5958 + x5967;
-Tbase TZ x5969 = x5957 + x5968;
-Tbase TZ x5970 = x5956 + x5969;
-Tbase TZ x5971 = x5955 + x5970;
-Tbase TZ x5972 = x5954 + x5971;
-Tbase TZ x5973 = x5953 + x5972;
-Tbase TZ x5974 = x5952 + x5973;
-Tbase TZ x5975 = x5951 + x5974;
-Tbase TZ x5976 = x5950 + x5975;
-Tbase TZ x5977 = x5949 + x5976;
-Tbase TZ x5978 = 0x11;
-Tbase TZ x5979 = x5978 * x5977;
-Tbase TZ x5980 = x5948 + x5979;
-Tbase TZ x5981 = x5943 + x5980;
-Tbase TZ x5982 = 0x17;
-Tbase TZ x5983 = x5981 >>> x5982;
-Tbase TZ x5984 = x935 * x1764;
-Tbase TZ x5985 = x940 * x1762;
-Tbase TZ x5986 = x942 * x1760;
-Tbase TZ x5987 = x944 * x1755;
-Tbase TZ x5988 = x5986 + x5987;
-Tbase TZ x5989 = x5985 + x5988;
-Tbase TZ x5990 = x5984 + x5989;
-Tbase TZ x5991 = x907 * x1753;
-Tbase TZ x5992 = x909 * x1751;
-Tbase TZ x5993 = x911 * x1749;
-Tbase TZ x5994 = x913 * x1747;
-Tbase TZ x5995 = x915 * x1745;
-Tbase TZ x5996 = x917 * x1743;
-Tbase TZ x5997 = x919 * x1741;
-Tbase TZ x5998 = x921 * x1739;
-Tbase TZ x5999 = x923 * x1737;
-Tbase TZ x6000 = x925 * x1735;
-Tbase TZ x6001 = x927 * x1733;
-Tbase TZ x6002 = x929 * x1731;
-Tbase TZ x6003 = x931 * x1729;
-Tbase TZ x6004 = x933 * x1727;
-Tbase TZ x6005 = x6003 + x6004;
-Tbase TZ x6006 = x6002 + x6005;
-Tbase TZ x6007 = x6001 + x6006;
-Tbase TZ x6008 = x6000 + x6007;
-Tbase TZ x6009 = x5999 + x6008;
-Tbase TZ x6010 = x5998 + x6009;
-Tbase TZ x6011 = x5997 + x6010;
-Tbase TZ x6012 = x5996 + x6011;
-Tbase TZ x6013 = x5995 + x6012;
-Tbase TZ x6014 = x5994 + x6013;
-Tbase TZ x6015 = x5993 + x6014;
-Tbase TZ x6016 = x5992 + x6015;
-Tbase TZ x6017 = x5991 + x6016;
-Tbase TZ x6018 = 0x11;
-Tbase TZ x6019 = x6018 * x6017;
-Tbase TZ x6020 = x5990 + x6019;
-Tbase TZ x6021 = x5983 + x6020;
-Tbase TZ x6022 = 0x17;
-Tbase TZ x6023 = x6021 >>> x6022;
-Tbase TZ x6024 = x933 * x1764;
-Tbase TZ x6025 = x935 * x1762;
-Tbase TZ x6026 = x940 * x1760;
-Tbase TZ x6027 = x942 * x1755;
-Tbase TZ x6028 = x944 * x1753;
-Tbase TZ x6029 = x6027 + x6028;
-Tbase TZ x6030 = x6026 + x6029;
-Tbase TZ x6031 = x6025 + x6030;
-Tbase TZ x6032 = x6024 + x6031;
-Tbase TZ x6033 = x907 * x1751;
-Tbase TZ x6034 = x909 * x1749;
-Tbase TZ x6035 = x911 * x1747;
-Tbase TZ x6036 = x913 * x1745;
-Tbase TZ x6037 = x915 * x1743;
-Tbase TZ x6038 = x917 * x1741;
-Tbase TZ x6039 = x919 * x1739;
-Tbase TZ x6040 = x921 * x1737;
-Tbase TZ x6041 = x923 * x1735;
-Tbase TZ x6042 = x925 * x1733;
-Tbase TZ x6043 = x927 * x1731;
-Tbase TZ x6044 = x929 * x1729;
-Tbase TZ x6045 = x931 * x1727;
-Tbase TZ x6046 = x6044 + x6045;
-Tbase TZ x6047 = x6043 + x6046;
-Tbase TZ x6048 = x6042 + x6047;
-Tbase TZ x6049 = x6041 + x6048;
-Tbase TZ x6050 = x6040 + x6049;
-Tbase TZ x6051 = x6039 + x6050;
-Tbase TZ x6052 = x6038 + x6051;
-Tbase TZ x6053 = x6037 + x6052;
-Tbase TZ x6054 = x6036 + x6053;
-Tbase TZ x6055 = x6035 + x6054;
-Tbase TZ x6056 = x6034 + x6055;
-Tbase TZ x6057 = x6033 + x6056;
-Tbase TZ x6058 = 0x11;
-Tbase TZ x6059 = x6058 * x6057;
-Tbase TZ x6060 = x6032 + x6059;
-Tbase TZ x6061 = x6023 + x6060;
-Tbase TZ x6062 = 0x17;
-Tbase TZ x6063 = x6061 >>> x6062;
-Tbase TZ x6064 = x931 * x1764;
-Tbase TZ x6065 = x933 * x1762;
-Tbase TZ x6066 = x935 * x1760;
-Tbase TZ x6067 = x940 * x1755;
-Tbase TZ x6068 = x942 * x1753;
-Tbase TZ x6069 = x944 * x1751;
-Tbase TZ x6070 = x6068 + x6069;
-Tbase TZ x6071 = x6067 + x6070;
-Tbase TZ x6072 = x6066 + x6071;
-Tbase TZ x6073 = x6065 + x6072;
-Tbase TZ x6074 = x6064 + x6073;
-Tbase TZ x6075 = x907 * x1749;
-Tbase TZ x6076 = x909 * x1747;
-Tbase TZ x6077 = x911 * x1745;
-Tbase TZ x6078 = x913 * x1743;
-Tbase TZ x6079 = x915 * x1741;
-Tbase TZ x6080 = x917 * x1739;
-Tbase TZ x6081 = x919 * x1737;
-Tbase TZ x6082 = x921 * x1735;
-Tbase TZ x6083 = x923 * x1733;
-Tbase TZ x6084 = x925 * x1731;
-Tbase TZ x6085 = x927 * x1729;
-Tbase TZ x6086 = x929 * x1727;
-Tbase TZ x6087 = x6085 + x6086;
-Tbase TZ x6088 = x6084 + x6087;
-Tbase TZ x6089 = x6083 + x6088;
-Tbase TZ x6090 = x6082 + x6089;
-Tbase TZ x6091 = x6081 + x6090;
-Tbase TZ x6092 = x6080 + x6091;
-Tbase TZ x6093 = x6079 + x6092;
-Tbase TZ x6094 = x6078 + x6093;
-Tbase TZ x6095 = x6077 + x6094;
-Tbase TZ x6096 = x6076 + x6095;
-Tbase TZ x6097 = x6075 + x6096;
-Tbase TZ x6098 = 0x11;
-Tbase TZ x6099 = x6098 * x6097;
-Tbase TZ x6100 = x6074 + x6099;
-Tbase TZ x6101 = x6063 + x6100;
-Tbase TZ x6102 = 0x17;
-Tbase TZ x6103 = x6101 >>> x6102;
-Tbase TZ x6104 = x929 * x1764;
-Tbase TZ x6105 = x931 * x1762;
-Tbase TZ x6106 = x933 * x1760;
-Tbase TZ x6107 = x935 * x1755;
-Tbase TZ x6108 = x940 * x1753;
-Tbase TZ x6109 = x942 * x1751;
-Tbase TZ x6110 = x944 * x1749;
-Tbase TZ x6111 = x6109 + x6110;
-Tbase TZ x6112 = x6108 + x6111;
-Tbase TZ x6113 = x6107 + x6112;
-Tbase TZ x6114 = x6106 + x6113;
-Tbase TZ x6115 = x6105 + x6114;
-Tbase TZ x6116 = x6104 + x6115;
-Tbase TZ x6117 = x907 * x1747;
-Tbase TZ x6118 = x909 * x1745;
-Tbase TZ x6119 = x911 * x1743;
-Tbase TZ x6120 = x913 * x1741;
-Tbase TZ x6121 = x915 * x1739;
-Tbase TZ x6122 = x917 * x1737;
-Tbase TZ x6123 = x919 * x1735;
-Tbase TZ x6124 = x921 * x1733;
-Tbase TZ x6125 = x923 * x1731;
-Tbase TZ x6126 = x925 * x1729;
-Tbase TZ x6127 = x927 * x1727;
-Tbase TZ x6128 = x6126 + x6127;
-Tbase TZ x6129 = x6125 + x6128;
-Tbase TZ x6130 = x6124 + x6129;
-Tbase TZ x6131 = x6123 + x6130;
-Tbase TZ x6132 = x6122 + x6131;
-Tbase TZ x6133 = x6121 + x6132;
-Tbase TZ x6134 = x6120 + x6133;
-Tbase TZ x6135 = x6119 + x6134;
-Tbase TZ x6136 = x6118 + x6135;
-Tbase TZ x6137 = x6117 + x6136;
-Tbase TZ x6138 = 0x11;
-Tbase TZ x6139 = x6138 * x6137;
-Tbase TZ x6140 = x6116 + x6139;
-Tbase TZ x6141 = x6103 + x6140;
-Tbase TZ x6142 = 0x17;
-Tbase TZ x6143 = x6141 >>> x6142;
-Tbase TZ x6144 = x927 * x1764;
-Tbase TZ x6145 = x929 * x1762;
-Tbase TZ x6146 = x931 * x1760;
-Tbase TZ x6147 = x933 * x1755;
-Tbase TZ x6148 = x935 * x1753;
-Tbase TZ x6149 = x940 * x1751;
-Tbase TZ x6150 = x942 * x1749;
-Tbase TZ x6151 = x944 * x1747;
-Tbase TZ x6152 = x6150 + x6151;
-Tbase TZ x6153 = x6149 + x6152;
-Tbase TZ x6154 = x6148 + x6153;
-Tbase TZ x6155 = x6147 + x6154;
-Tbase TZ x6156 = x6146 + x6155;
-Tbase TZ x6157 = x6145 + x6156;
-Tbase TZ x6158 = x6144 + x6157;
-Tbase TZ x6159 = x907 * x1745;
-Tbase TZ x6160 = x909 * x1743;
-Tbase TZ x6161 = x911 * x1741;
-Tbase TZ x6162 = x913 * x1739;
-Tbase TZ x6163 = x915 * x1737;
-Tbase TZ x6164 = x917 * x1735;
-Tbase TZ x6165 = x919 * x1733;
-Tbase TZ x6166 = x921 * x1731;
-Tbase TZ x6167 = x923 * x1729;
-Tbase TZ x6168 = x925 * x1727;
-Tbase TZ x6169 = x6167 + x6168;
-Tbase TZ x6170 = x6166 + x6169;
-Tbase TZ x6171 = x6165 + x6170;
-Tbase TZ x6172 = x6164 + x6171;
-Tbase TZ x6173 = x6163 + x6172;
-Tbase TZ x6174 = x6162 + x6173;
-Tbase TZ x6175 = x6161 + x6174;
-Tbase TZ x6176 = x6160 + x6175;
-Tbase TZ x6177 = x6159 + x6176;
-Tbase TZ x6178 = 0x11;
-Tbase TZ x6179 = x6178 * x6177;
-Tbase TZ x6180 = x6158 + x6179;
-Tbase TZ x6181 = x6143 + x6180;
-Tbase TZ x6182 = 0x17;
-Tbase TZ x6183 = x6181 >>> x6182;
-Tbase TZ x6184 = x925 * x1764;
-Tbase TZ x6185 = x927 * x1762;
-Tbase TZ x6186 = x929 * x1760;
-Tbase TZ x6187 = x931 * x1755;
-Tbase TZ x6188 = x933 * x1753;
-Tbase TZ x6189 = x935 * x1751;
-Tbase TZ x6190 = x940 * x1749;
-Tbase TZ x6191 = x942 * x1747;
-Tbase TZ x6192 = x944 * x1745;
-Tbase TZ x6193 = x6191 + x6192;
-Tbase TZ x6194 = x6190 + x6193;
-Tbase TZ x6195 = x6189 + x6194;
-Tbase TZ x6196 = x6188 + x6195;
-Tbase TZ x6197 = x6187 + x6196;
-Tbase TZ x6198 = x6186 + x6197;
-Tbase TZ x6199 = x6185 + x6198;
-Tbase TZ x6200 = x6184 + x6199;
-Tbase TZ x6201 = x907 * x1743;
-Tbase TZ x6202 = x909 * x1741;
-Tbase TZ x6203 = x911 * x1739;
-Tbase TZ x6204 = x913 * x1737;
-Tbase TZ x6205 = x915 * x1735;
-Tbase TZ x6206 = x917 * x1733;
-Tbase TZ x6207 = x919 * x1731;
-Tbase TZ x6208 = x921 * x1729;
-Tbase TZ x6209 = x923 * x1727;
-Tbase TZ x6210 = x6208 + x6209;
-Tbase TZ x6211 = x6207 + x6210;
-Tbase TZ x6212 = x6206 + x6211;
-Tbase TZ x6213 = x6205 + x6212;
-Tbase TZ x6214 = x6204 + x6213;
-Tbase TZ x6215 = x6203 + x6214;
-Tbase TZ x6216 = x6202 + x6215;
-Tbase TZ x6217 = x6201 + x6216;
-Tbase TZ x6218 = 0x11;
-Tbase TZ x6219 = x6218 * x6217;
-Tbase TZ x6220 = x6200 + x6219;
-Tbase TZ x6221 = x6183 + x6220;
-Tbase TZ x6222 = 0x17;
-Tbase TZ x6223 = x6221 >>> x6222;
-Tbase TZ x6224 = x923 * x1764;
-Tbase TZ x6225 = x925 * x1762;
-Tbase TZ x6226 = x927 * x1760;
-Tbase TZ x6227 = x929 * x1755;
-Tbase TZ x6228 = x931 * x1753;
-Tbase TZ x6229 = x933 * x1751;
-Tbase TZ x6230 = x935 * x1749;
-Tbase TZ x6231 = x940 * x1747;
-Tbase TZ x6232 = x942 * x1745;
-Tbase TZ x6233 = x944 * x1743;
-Tbase TZ x6234 = x6232 + x6233;
-Tbase TZ x6235 = x6231 + x6234;
-Tbase TZ x6236 = x6230 + x6235;
-Tbase TZ x6237 = x6229 + x6236;
-Tbase TZ x6238 = x6228 + x6237;
-Tbase TZ x6239 = x6227 + x6238;
-Tbase TZ x6240 = x6226 + x6239;
-Tbase TZ x6241 = x6225 + x6240;
-Tbase TZ x6242 = x6224 + x6241;
-Tbase TZ x6243 = x907 * x1741;
-Tbase TZ x6244 = x909 * x1739;
-Tbase TZ x6245 = x911 * x1737;
-Tbase TZ x6246 = x913 * x1735;
-Tbase TZ x6247 = x915 * x1733;
-Tbase TZ x6248 = x917 * x1731;
-Tbase TZ x6249 = x919 * x1729;
-Tbase TZ x6250 = x921 * x1727;
-Tbase TZ x6251 = x6249 + x6250;
-Tbase TZ x6252 = x6248 + x6251;
-Tbase TZ x6253 = x6247 + x6252;
-Tbase TZ x6254 = x6246 + x6253;
-Tbase TZ x6255 = x6245 + x6254;
-Tbase TZ x6256 = x6244 + x6255;
-Tbase TZ x6257 = x6243 + x6256;
-Tbase TZ x6258 = 0x11;
-Tbase TZ x6259 = x6258 * x6257;
-Tbase TZ x6260 = x6242 + x6259;
-Tbase TZ x6261 = x6223 + x6260;
-Tbase TZ x6262 = 0x17;
-Tbase TZ x6263 = x6261 >>> x6262;
-Tbase TZ x6264 = x921 * x1764;
-Tbase TZ x6265 = x923 * x1762;
-Tbase TZ x6266 = x925 * x1760;
-Tbase TZ x6267 = x927 * x1755;
-Tbase TZ x6268 = x929 * x1753;
-Tbase TZ x6269 = x931 * x1751;
-Tbase TZ x6270 = x933 * x1749;
-Tbase TZ x6271 = x935 * x1747;
-Tbase TZ x6272 = x940 * x1745;
-Tbase TZ x6273 = x942 * x1743;
-Tbase TZ x6274 = x944 * x1741;
-Tbase TZ x6275 = x6273 + x6274;
-Tbase TZ x6276 = x6272 + x6275;
-Tbase TZ x6277 = x6271 + x6276;
-Tbase TZ x6278 = x6270 + x6277;
-Tbase TZ x6279 = x6269 + x6278;
-Tbase TZ x6280 = x6268 + x6279;
-Tbase TZ x6281 = x6267 + x6280;
-Tbase TZ x6282 = x6266 + x6281;
-Tbase TZ x6283 = x6265 + x6282;
-Tbase TZ x6284 = x6264 + x6283;
-Tbase TZ x6285 = x907 * x1739;
-Tbase TZ x6286 = x909 * x1737;
-Tbase TZ x6287 = x911 * x1735;
-Tbase TZ x6288 = x913 * x1733;
-Tbase TZ x6289 = x915 * x1731;
-Tbase TZ x6290 = x917 * x1729;
-Tbase TZ x6291 = x919 * x1727;
-Tbase TZ x6292 = x6290 + x6291;
-Tbase TZ x6293 = x6289 + x6292;
-Tbase TZ x6294 = x6288 + x6293;
-Tbase TZ x6295 = x6287 + x6294;
-Tbase TZ x6296 = x6286 + x6295;
-Tbase TZ x6297 = x6285 + x6296;
-Tbase TZ x6298 = 0x11;
-Tbase TZ x6299 = x6298 * x6297;
-Tbase TZ x6300 = x6284 + x6299;
-Tbase TZ x6301 = x6263 + x6300;
-Tbase TZ x6302 = 0x17;
-Tbase TZ x6303 = x6301 >>> x6302;
-Tbase TZ x6304 = x919 * x1764;
-Tbase TZ x6305 = x921 * x1762;
-Tbase TZ x6306 = x923 * x1760;
-Tbase TZ x6307 = x925 * x1755;
-Tbase TZ x6308 = x927 * x1753;
-Tbase TZ x6309 = x929 * x1751;
-Tbase TZ x6310 = x931 * x1749;
-Tbase TZ x6311 = x933 * x1747;
-Tbase TZ x6312 = x935 * x1745;
-Tbase TZ x6313 = x940 * x1743;
-Tbase TZ x6314 = x942 * x1741;
-Tbase TZ x6315 = x944 * x1739;
-Tbase TZ x6316 = x6314 + x6315;
-Tbase TZ x6317 = x6313 + x6316;
-Tbase TZ x6318 = x6312 + x6317;
-Tbase TZ x6319 = x6311 + x6318;
-Tbase TZ x6320 = x6310 + x6319;
-Tbase TZ x6321 = x6309 + x6320;
-Tbase TZ x6322 = x6308 + x6321;
-Tbase TZ x6323 = x6307 + x6322;
-Tbase TZ x6324 = x6306 + x6323;
-Tbase TZ x6325 = x6305 + x6324;
-Tbase TZ x6326 = x6304 + x6325;
-Tbase TZ x6327 = x907 * x1737;
-Tbase TZ x6328 = x909 * x1735;
-Tbase TZ x6329 = x911 * x1733;
-Tbase TZ x6330 = x913 * x1731;
-Tbase TZ x6331 = x915 * x1729;
-Tbase TZ x6332 = x917 * x1727;
-Tbase TZ x6333 = x6331 + x6332;
-Tbase TZ x6334 = x6330 + x6333;
-Tbase TZ x6335 = x6329 + x6334;
-Tbase TZ x6336 = x6328 + x6335;
-Tbase TZ x6337 = x6327 + x6336;
-Tbase TZ x6338 = 0x11;
-Tbase TZ x6339 = x6338 * x6337;
-Tbase TZ x6340 = x6326 + x6339;
-Tbase TZ x6341 = x6303 + x6340;
-Tbase TZ x6342 = 0x17;
-Tbase TZ x6343 = x6341 >>> x6342;
-Tbase TZ x6344 = x917 * x1764;
-Tbase TZ x6345 = x919 * x1762;
-Tbase TZ x6346 = x921 * x1760;
-Tbase TZ x6347 = x923 * x1755;
-Tbase TZ x6348 = x925 * x1753;
-Tbase TZ x6349 = x927 * x1751;
-Tbase TZ x6350 = x929 * x1749;
-Tbase TZ x6351 = x931 * x1747;
-Tbase TZ x6352 = x933 * x1745;
-Tbase TZ x6353 = x935 * x1743;
-Tbase TZ x6354 = x940 * x1741;
-Tbase TZ x6355 = x942 * x1739;
-Tbase TZ x6356 = x944 * x1737;
-Tbase TZ x6357 = x6355 + x6356;
-Tbase TZ x6358 = x6354 + x6357;
-Tbase TZ x6359 = x6353 + x6358;
-Tbase TZ x6360 = x6352 + x6359;
-Tbase TZ x6361 = x6351 + x6360;
-Tbase TZ x6362 = x6350 + x6361;
-Tbase TZ x6363 = x6349 + x6362;
-Tbase TZ x6364 = x6348 + x6363;
-Tbase TZ x6365 = x6347 + x6364;
-Tbase TZ x6366 = x6346 + x6365;
-Tbase TZ x6367 = x6345 + x6366;
-Tbase TZ x6368 = x6344 + x6367;
-Tbase TZ x6369 = x907 * x1735;
-Tbase TZ x6370 = x909 * x1733;
-Tbase TZ x6371 = x911 * x1731;
-Tbase TZ x6372 = x913 * x1729;
-Tbase TZ x6373 = x915 * x1727;
-Tbase TZ x6374 = x6372 + x6373;
-Tbase TZ x6375 = x6371 + x6374;
-Tbase TZ x6376 = x6370 + x6375;
-Tbase TZ x6377 = x6369 + x6376;
-Tbase TZ x6378 = 0x11;
-Tbase TZ x6379 = x6378 * x6377;
-Tbase TZ x6380 = x6368 + x6379;
-Tbase TZ x6381 = x6343 + x6380;
-Tbase TZ x6382 = 0x17;
-Tbase TZ x6383 = x6381 >>> x6382;
-Tbase TZ x6384 = x915 * x1764;
-Tbase TZ x6385 = x917 * x1762;
-Tbase TZ x6386 = x919 * x1760;
-Tbase TZ x6387 = x921 * x1755;
-Tbase TZ x6388 = x923 * x1753;
-Tbase TZ x6389 = x925 * x1751;
-Tbase TZ x6390 = x927 * x1749;
-Tbase TZ x6391 = x929 * x1747;
-Tbase TZ x6392 = x931 * x1745;
-Tbase TZ x6393 = x933 * x1743;
-Tbase TZ x6394 = x935 * x1741;
-Tbase TZ x6395 = x940 * x1739;
-Tbase TZ x6396 = x942 * x1737;
-Tbase TZ x6397 = x944 * x1735;
-Tbase TZ x6398 = x6396 + x6397;
-Tbase TZ x6399 = x6395 + x6398;
-Tbase TZ x6400 = x6394 + x6399;
-Tbase TZ x6401 = x6393 + x6400;
-Tbase TZ x6402 = x6392 + x6401;
-Tbase TZ x6403 = x6391 + x6402;
-Tbase TZ x6404 = x6390 + x6403;
-Tbase TZ x6405 = x6389 + x6404;
-Tbase TZ x6406 = x6388 + x6405;
-Tbase TZ x6407 = x6387 + x6406;
-Tbase TZ x6408 = x6386 + x6407;
-Tbase TZ x6409 = x6385 + x6408;
-Tbase TZ x6410 = x6384 + x6409;
-Tbase TZ x6411 = x907 * x1733;
-Tbase TZ x6412 = x909 * x1731;
-Tbase TZ x6413 = x911 * x1729;
-Tbase TZ x6414 = x913 * x1727;
-Tbase TZ x6415 = x6413 + x6414;
-Tbase TZ x6416 = x6412 + x6415;
-Tbase TZ x6417 = x6411 + x6416;
-Tbase TZ x6418 = 0x11;
-Tbase TZ x6419 = x6418 * x6417;
-Tbase TZ x6420 = x6410 + x6419;
-Tbase TZ x6421 = x6383 + x6420;
-Tbase TZ x6422 = 0x17;
-Tbase TZ x6423 = x6421 >>> x6422;
-Tbase TZ x6424 = x913 * x1764;
-Tbase TZ x6425 = x915 * x1762;
-Tbase TZ x6426 = x917 * x1760;
-Tbase TZ x6427 = x919 * x1755;
-Tbase TZ x6428 = x921 * x1753;
-Tbase TZ x6429 = x923 * x1751;
-Tbase TZ x6430 = x925 * x1749;
-Tbase TZ x6431 = x927 * x1747;
-Tbase TZ x6432 = x929 * x1745;
-Tbase TZ x6433 = x931 * x1743;
-Tbase TZ x6434 = x933 * x1741;
-Tbase TZ x6435 = x935 * x1739;
-Tbase TZ x6436 = x940 * x1737;
-Tbase TZ x6437 = x942 * x1735;
-Tbase TZ x6438 = x944 * x1733;
-Tbase TZ x6439 = x6437 + x6438;
-Tbase TZ x6440 = x6436 + x6439;
-Tbase TZ x6441 = x6435 + x6440;
-Tbase TZ x6442 = x6434 + x6441;
-Tbase TZ x6443 = x6433 + x6442;
-Tbase TZ x6444 = x6432 + x6443;
-Tbase TZ x6445 = x6431 + x6444;
-Tbase TZ x6446 = x6430 + x6445;
-Tbase TZ x6447 = x6429 + x6446;
-Tbase TZ x6448 = x6428 + x6447;
-Tbase TZ x6449 = x6427 + x6448;
-Tbase TZ x6450 = x6426 + x6449;
-Tbase TZ x6451 = x6425 + x6450;
-Tbase TZ x6452 = x6424 + x6451;
-Tbase TZ x6453 = x907 * x1731;
-Tbase TZ x6454 = x909 * x1729;
-Tbase TZ x6455 = x911 * x1727;
-Tbase TZ x6456 = x6454 + x6455;
-Tbase TZ x6457 = x6453 + x6456;
-Tbase TZ x6458 = 0x11;
-Tbase TZ x6459 = x6458 * x6457;
-Tbase TZ x6460 = x6452 + x6459;
-Tbase TZ x6461 = x6423 + x6460;
-Tbase TZ x6462 = 0x17;
-Tbase TZ x6463 = x6461 >>> x6462;
-Tbase TZ x6464 = x911 * x1764;
-Tbase TZ x6465 = x913 * x1762;
-Tbase TZ x6466 = x915 * x1760;
-Tbase TZ x6467 = x917 * x1755;
-Tbase TZ x6468 = x919 * x1753;
-Tbase TZ x6469 = x921 * x1751;
-Tbase TZ x6470 = x923 * x1749;
-Tbase TZ x6471 = x925 * x1747;
-Tbase TZ x6472 = x927 * x1745;
-Tbase TZ x6473 = x929 * x1743;
-Tbase TZ x6474 = x931 * x1741;
-Tbase TZ x6475 = x933 * x1739;
-Tbase TZ x6476 = x935 * x1737;
-Tbase TZ x6477 = x940 * x1735;
-Tbase TZ x6478 = x942 * x1733;
-Tbase TZ x6479 = x944 * x1731;
-Tbase TZ x6480 = x6478 + x6479;
-Tbase TZ x6481 = x6477 + x6480;
-Tbase TZ x6482 = x6476 + x6481;
-Tbase TZ x6483 = x6475 + x6482;
-Tbase TZ x6484 = x6474 + x6483;
-Tbase TZ x6485 = x6473 + x6484;
-Tbase TZ x6486 = x6472 + x6485;
-Tbase TZ x6487 = x6471 + x6486;
-Tbase TZ x6488 = x6470 + x6487;
-Tbase TZ x6489 = x6469 + x6488;
-Tbase TZ x6490 = x6468 + x6489;
-Tbase TZ x6491 = x6467 + x6490;
-Tbase TZ x6492 = x6466 + x6491;
-Tbase TZ x6493 = x6465 + x6492;
-Tbase TZ x6494 = x6464 + x6493;
-Tbase TZ x6495 = x907 * x1729;
-Tbase TZ x6496 = x909 * x1727;
-Tbase TZ x6497 = x6495 + x6496;
-Tbase TZ x6498 = 0x11;
-Tbase TZ x6499 = x6498 * x6497;
-Tbase TZ x6500 = x6494 + x6499;
-Tbase TZ x6501 = x6463 + x6500;
-Tbase TZ x6502 = 0x17;
-Tbase TZ x6503 = x6501 >>> x6502;
-Tbase TZ x6504 = x909 * x1764;
-Tbase TZ x6505 = x911 * x1762;
-Tbase TZ x6506 = x913 * x1760;
-Tbase TZ x6507 = x915 * x1755;
-Tbase TZ x6508 = x917 * x1753;
-Tbase TZ x6509 = x919 * x1751;
-Tbase TZ x6510 = x921 * x1749;
-Tbase TZ x6511 = x923 * x1747;
-Tbase TZ x6512 = x925 * x1745;
-Tbase TZ x6513 = x927 * x1743;
-Tbase TZ x6514 = x929 * x1741;
-Tbase TZ x6515 = x931 * x1739;
-Tbase TZ x6516 = x933 * x1737;
-Tbase TZ x6517 = x935 * x1735;
-Tbase TZ x6518 = x940 * x1733;
-Tbase TZ x6519 = x942 * x1731;
-Tbase TZ x6520 = x944 * x1729;
-Tbase TZ x6521 = x6519 + x6520;
-Tbase TZ x6522 = x6518 + x6521;
-Tbase TZ x6523 = x6517 + x6522;
-Tbase TZ x6524 = x6516 + x6523;
-Tbase TZ x6525 = x6515 + x6524;
-Tbase TZ x6526 = x6514 + x6525;
-Tbase TZ x6527 = x6513 + x6526;
-Tbase TZ x6528 = x6512 + x6527;
-Tbase TZ x6529 = x6511 + x6528;
-Tbase TZ x6530 = x6510 + x6529;
-Tbase TZ x6531 = x6509 + x6530;
-Tbase TZ x6532 = x6508 + x6531;
-Tbase TZ x6533 = x6507 + x6532;
-Tbase TZ x6534 = x6506 + x6533;
-Tbase TZ x6535 = x6505 + x6534;
-Tbase TZ x6536 = x6504 + x6535;
-Tbase TZ x6537 = x907 * x1727;
-Tbase TZ x6538 = 0x11;
-Tbase TZ x6539 = x6538 * x6537;
-Tbase TZ x6540 = x6536 + x6539;
-Tbase TZ x6541 = x6503 + x6540;
-Tbase TZ x6542 = 0x17;
-Tbase TZ x6543 = x6541 >>> x6542;
-Tbase TZ x6544 = x907 * x1764;
-Tbase TZ x6545 = x909 * x1762;
-Tbase TZ x6546 = x911 * x1760;
-Tbase TZ x6547 = x913 * x1755;
-Tbase TZ x6548 = x915 * x1753;
-Tbase TZ x6549 = x917 * x1751;
-Tbase TZ x6550 = x919 * x1749;
-Tbase TZ x6551 = x921 * x1747;
-Tbase TZ x6552 = x923 * x1745;
-Tbase TZ x6553 = x925 * x1743;
-Tbase TZ x6554 = x927 * x1741;
-Tbase TZ x6555 = x929 * x1739;
-Tbase TZ x6556 = x931 * x1737;
-Tbase TZ x6557 = x933 * x1735;
-Tbase TZ x6558 = x935 * x1733;
-Tbase TZ x6559 = x940 * x1731;
-Tbase TZ x6560 = x942 * x1729;
-Tbase TZ x6561 = x944 * x1727;
-Tbase TZ x6562 = x6560 + x6561;
-Tbase TZ x6563 = x6559 + x6562;
-Tbase TZ x6564 = x6558 + x6563;
-Tbase TZ x6565 = x6557 + x6564;
-Tbase TZ x6566 = x6556 + x6565;
-Tbase TZ x6567 = x6555 + x6566;
-Tbase TZ x6568 = x6554 + x6567;
-Tbase TZ x6569 = x6553 + x6568;
-Tbase TZ x6570 = x6552 + x6569;
-Tbase TZ x6571 = x6551 + x6570;
-Tbase TZ x6572 = x6550 + x6571;
-Tbase TZ x6573 = x6549 + x6572;
-Tbase TZ x6574 = x6548 + x6573;
-Tbase TZ x6575 = x6547 + x6574;
-Tbase TZ x6576 = x6546 + x6575;
-Tbase TZ x6577 = x6545 + x6576;
-Tbase TZ x6578 = x6544 + x6577;
-Tbase TZ x6579 = x6543 + x6578;
-Tbase TZ x6580 = 0x17;
-Tbase TZ x6581 = x6579 >>> x6580;
-Tbase TZ x6582 = 0x11;
-Tbase TZ x6583 = x6582 * x6581;
-Tbase TZ x6584 = 0x7fffff;
-Tbase TZ x6585 = x5901 & x6584;
-Tbase TZ x6586 = x6583 + x6585;
-Tbase TZ x6587 = 0x17;
-Tbase TZ x6588 = x6586 >>> x6587;
-Tbase TZ x6589 = 0x7fffff;
-Tbase TZ x6590 = x5941 & x6589;
-Tbase TZ x6591 = x6588 + x6590;
-Tbase TZ x6592 = 0x7fffff;
-Tbase TZ x6593 = x6579 & x6592;
-Tbase TZ x6594 = 0x7fffff;
-Tbase TZ x6595 = x6541 & x6594;
-Tbase TZ x6596 = 0x7fffff;
-Tbase TZ x6597 = x6501 & x6596;
-Tbase TZ x6598 = 0x7fffff;
-Tbase TZ x6599 = x6461 & x6598;
-Tbase TZ x6600 = 0x7fffff;
-Tbase TZ x6601 = x6421 & x6600;
-Tbase TZ x6602 = 0x7fffff;
-Tbase TZ x6603 = x6381 & x6602;
-Tbase TZ x6604 = 0x7fffff;
-Tbase TZ x6605 = x6341 & x6604;
-Tbase TZ x6606 = 0x7fffff;
-Tbase TZ x6607 = x6301 & x6606;
-Tbase TZ x6608 = 0x7fffff;
-Tbase TZ x6609 = x6261 & x6608;
-Tbase TZ x6610 = 0x7fffff;
-Tbase TZ x6611 = x6221 & x6610;
-Tbase TZ x6612 = 0x7fffff;
-Tbase TZ x6613 = x6181 & x6612;
-Tbase TZ x6614 = 0x7fffff;
-Tbase TZ x6615 = x6141 & x6614;
-Tbase TZ x6616 = 0x7fffff;
-Tbase TZ x6617 = x6101 & x6616;
-Tbase TZ x6618 = 0x7fffff;
-Tbase TZ x6619 = x6061 & x6618;
-Tbase TZ x6620 = 0x7fffff;
-Tbase TZ x6621 = x6021 & x6620;
-Tbase TZ x6622 = 0x17;
-Tbase TZ x6623 = x6591 >>> x6622;
-Tbase TZ x6624 = 0x7fffff;
-Tbase TZ x6625 = x5981 & x6624;
-Tbase TZ x6626 = x6623 + x6625;
-Tbase TZ x6627 = 0x7fffff;
-Tbase TZ x6628 = x6591 & x6627;
-Tbase TZ x6629 = 0x7fffff;
-Tbase TZ x6630 = x6586 & x6629;
-Tbase TZ x6631 = x70 * x1818;
-Tbase TZ x6632 = x53 * x1815;
-Tbase TZ x6633 = x54 * x1812;
-Tbase TZ x6634 = x55 * x1809;
-Tbase TZ x6635 = x56 * x1806;
-Tbase TZ x6636 = x57 * x1803;
-Tbase TZ x6637 = x58 * x1800;
-Tbase TZ x6638 = x59 * x1797;
-Tbase TZ x6639 = x60 * x1794;
-Tbase TZ x6640 = x61 * x1791;
-Tbase TZ x6641 = x62 * x1788;
-Tbase TZ x6642 = x63 * x1785;
-Tbase TZ x6643 = x64 * x1782;
-Tbase TZ x6644 = x65 * x1779;
-Tbase TZ x6645 = x66 * x1776;
-Tbase TZ x6646 = x67 * x1773;
-Tbase TZ x6647 = x68 * x1770;
-Tbase TZ x6648 = x69 * x1767;
-Tbase TZ x6649 = x6647 + x6648;
-Tbase TZ x6650 = x6646 + x6649;
-Tbase TZ x6651 = x6645 + x6650;
-Tbase TZ x6652 = x6644 + x6651;
-Tbase TZ x6653 = x6643 + x6652;
-Tbase TZ x6654 = x6642 + x6653;
-Tbase TZ x6655 = x6641 + x6654;
-Tbase TZ x6656 = x6640 + x6655;
-Tbase TZ x6657 = x6639 + x6656;
-Tbase TZ x6658 = x6638 + x6657;
-Tbase TZ x6659 = x6637 + x6658;
-Tbase TZ x6660 = x6636 + x6659;
-Tbase TZ x6661 = x6635 + x6660;
-Tbase TZ x6662 = x6634 + x6661;
-Tbase TZ x6663 = x6633 + x6662;
-Tbase TZ x6664 = x6632 + x6663;
-Tbase TZ x6665 = 0x11;
-Tbase TZ x6666 = x6665 * x6664;
-Tbase TZ x6667 = x6631 + x6666;
-Tbase TZ x6668 = 0x17;
-Tbase TZ x6669 = x6667 >>> x6668;
-Tbase TZ x6670 = x69 * x1818;
-Tbase TZ x6671 = x70 * x1815;
-Tbase TZ x6672 = x6670 + x6671;
-Tbase TZ x6673 = x53 * x1812;
-Tbase TZ x6674 = x54 * x1809;
-Tbase TZ x6675 = x55 * x1806;
-Tbase TZ x6676 = x56 * x1803;
-Tbase TZ x6677 = x57 * x1800;
-Tbase TZ x6678 = x58 * x1797;
-Tbase TZ x6679 = x59 * x1794;
-Tbase TZ x6680 = x60 * x1791;
-Tbase TZ x6681 = x61 * x1788;
-Tbase TZ x6682 = x62 * x1785;
-Tbase TZ x6683 = x63 * x1782;
-Tbase TZ x6684 = x64 * x1779;
-Tbase TZ x6685 = x65 * x1776;
-Tbase TZ x6686 = x66 * x1773;
-Tbase TZ x6687 = x67 * x1770;
-Tbase TZ x6688 = x68 * x1767;
-Tbase TZ x6689 = x6687 + x6688;
-Tbase TZ x6690 = x6686 + x6689;
-Tbase TZ x6691 = x6685 + x6690;
-Tbase TZ x6692 = x6684 + x6691;
-Tbase TZ x6693 = x6683 + x6692;
-Tbase TZ x6694 = x6682 + x6693;
-Tbase TZ x6695 = x6681 + x6694;
-Tbase TZ x6696 = x6680 + x6695;
-Tbase TZ x6697 = x6679 + x6696;
-Tbase TZ x6698 = x6678 + x6697;
-Tbase TZ x6699 = x6677 + x6698;
-Tbase TZ x6700 = x6676 + x6699;
-Tbase TZ x6701 = x6675 + x6700;
-Tbase TZ x6702 = x6674 + x6701;
-Tbase TZ x6703 = x6673 + x6702;
-Tbase TZ x6704 = 0x11;
-Tbase TZ x6705 = x6704 * x6703;
-Tbase TZ x6706 = x6672 + x6705;
-Tbase TZ x6707 = x6669 + x6706;
-Tbase TZ x6708 = 0x17;
-Tbase TZ x6709 = x6707 >>> x6708;
-Tbase TZ x6710 = x68 * x1818;
-Tbase TZ x6711 = x69 * x1815;
-Tbase TZ x6712 = x70 * x1812;
-Tbase TZ x6713 = x6711 + x6712;
-Tbase TZ x6714 = x6710 + x6713;
-Tbase TZ x6715 = x53 * x1809;
-Tbase TZ x6716 = x54 * x1806;
-Tbase TZ x6717 = x55 * x1803;
-Tbase TZ x6718 = x56 * x1800;
-Tbase TZ x6719 = x57 * x1797;
-Tbase TZ x6720 = x58 * x1794;
-Tbase TZ x6721 = x59 * x1791;
-Tbase TZ x6722 = x60 * x1788;
-Tbase TZ x6723 = x61 * x1785;
-Tbase TZ x6724 = x62 * x1782;
-Tbase TZ x6725 = x63 * x1779;
-Tbase TZ x6726 = x64 * x1776;
-Tbase TZ x6727 = x65 * x1773;
-Tbase TZ x6728 = x66 * x1770;
-Tbase TZ x6729 = x67 * x1767;
-Tbase TZ x6730 = x6728 + x6729;
-Tbase TZ x6731 = x6727 + x6730;
-Tbase TZ x6732 = x6726 + x6731;
-Tbase TZ x6733 = x6725 + x6732;
-Tbase TZ x6734 = x6724 + x6733;
-Tbase TZ x6735 = x6723 + x6734;
-Tbase TZ x6736 = x6722 + x6735;
-Tbase TZ x6737 = x6721 + x6736;
-Tbase TZ x6738 = x6720 + x6737;
-Tbase TZ x6739 = x6719 + x6738;
-Tbase TZ x6740 = x6718 + x6739;
-Tbase TZ x6741 = x6717 + x6740;
-Tbase TZ x6742 = x6716 + x6741;
-Tbase TZ x6743 = x6715 + x6742;
-Tbase TZ x6744 = 0x11;
-Tbase TZ x6745 = x6744 * x6743;
-Tbase TZ x6746 = x6714 + x6745;
-Tbase TZ x6747 = x6709 + x6746;
-Tbase TZ x6748 = 0x17;
-Tbase TZ x6749 = x6747 >>> x6748;
-Tbase TZ x6750 = x67 * x1818;
-Tbase TZ x6751 = x68 * x1815;
-Tbase TZ x6752 = x69 * x1812;
-Tbase TZ x6753 = x70 * x1809;
-Tbase TZ x6754 = x6752 + x6753;
-Tbase TZ x6755 = x6751 + x6754;
-Tbase TZ x6756 = x6750 + x6755;
-Tbase TZ x6757 = x53 * x1806;
-Tbase TZ x6758 = x54 * x1803;
-Tbase TZ x6759 = x55 * x1800;
-Tbase TZ x6760 = x56 * x1797;
-Tbase TZ x6761 = x57 * x1794;
-Tbase TZ x6762 = x58 * x1791;
-Tbase TZ x6763 = x59 * x1788;
-Tbase TZ x6764 = x60 * x1785;
-Tbase TZ x6765 = x61 * x1782;
-Tbase TZ x6766 = x62 * x1779;
-Tbase TZ x6767 = x63 * x1776;
-Tbase TZ x6768 = x64 * x1773;
-Tbase TZ x6769 = x65 * x1770;
-Tbase TZ x6770 = x66 * x1767;
-Tbase TZ x6771 = x6769 + x6770;
-Tbase TZ x6772 = x6768 + x6771;
-Tbase TZ x6773 = x6767 + x6772;
-Tbase TZ x6774 = x6766 + x6773;
-Tbase TZ x6775 = x6765 + x6774;
-Tbase TZ x6776 = x6764 + x6775;
-Tbase TZ x6777 = x6763 + x6776;
-Tbase TZ x6778 = x6762 + x6777;
-Tbase TZ x6779 = x6761 + x6778;
-Tbase TZ x6780 = x6760 + x6779;
-Tbase TZ x6781 = x6759 + x6780;
-Tbase TZ x6782 = x6758 + x6781;
-Tbase TZ x6783 = x6757 + x6782;
-Tbase TZ x6784 = 0x11;
-Tbase TZ x6785 = x6784 * x6783;
-Tbase TZ x6786 = x6756 + x6785;
-Tbase TZ x6787 = x6749 + x6786;
-Tbase TZ x6788 = 0x17;
-Tbase TZ x6789 = x6787 >>> x6788;
-Tbase TZ x6790 = x66 * x1818;
-Tbase TZ x6791 = x67 * x1815;
-Tbase TZ x6792 = x68 * x1812;
-Tbase TZ x6793 = x69 * x1809;
-Tbase TZ x6794 = x70 * x1806;
-Tbase TZ x6795 = x6793 + x6794;
-Tbase TZ x6796 = x6792 + x6795;
-Tbase TZ x6797 = x6791 + x6796;
-Tbase TZ x6798 = x6790 + x6797;
-Tbase TZ x6799 = x53 * x1803;
-Tbase TZ x6800 = x54 * x1800;
-Tbase TZ x6801 = x55 * x1797;
-Tbase TZ x6802 = x56 * x1794;
-Tbase TZ x6803 = x57 * x1791;
-Tbase TZ x6804 = x58 * x1788;
-Tbase TZ x6805 = x59 * x1785;
-Tbase TZ x6806 = x60 * x1782;
-Tbase TZ x6807 = x61 * x1779;
-Tbase TZ x6808 = x62 * x1776;
-Tbase TZ x6809 = x63 * x1773;
-Tbase TZ x6810 = x64 * x1770;
-Tbase TZ x6811 = x65 * x1767;
-Tbase TZ x6812 = x6810 + x6811;
-Tbase TZ x6813 = x6809 + x6812;
-Tbase TZ x6814 = x6808 + x6813;
-Tbase TZ x6815 = x6807 + x6814;
-Tbase TZ x6816 = x6806 + x6815;
-Tbase TZ x6817 = x6805 + x6816;
-Tbase TZ x6818 = x6804 + x6817;
-Tbase TZ x6819 = x6803 + x6818;
-Tbase TZ x6820 = x6802 + x6819;
-Tbase TZ x6821 = x6801 + x6820;
-Tbase TZ x6822 = x6800 + x6821;
-Tbase TZ x6823 = x6799 + x6822;
-Tbase TZ x6824 = 0x11;
-Tbase TZ x6825 = x6824 * x6823;
-Tbase TZ x6826 = x6798 + x6825;
-Tbase TZ x6827 = x6789 + x6826;
-Tbase TZ x6828 = 0x17;
-Tbase TZ x6829 = x6827 >>> x6828;
-Tbase TZ x6830 = x65 * x1818;
-Tbase TZ x6831 = x66 * x1815;
-Tbase TZ x6832 = x67 * x1812;
-Tbase TZ x6833 = x68 * x1809;
-Tbase TZ x6834 = x69 * x1806;
-Tbase TZ x6835 = x70 * x1803;
-Tbase TZ x6836 = x6834 + x6835;
-Tbase TZ x6837 = x6833 + x6836;
-Tbase TZ x6838 = x6832 + x6837;
-Tbase TZ x6839 = x6831 + x6838;
-Tbase TZ x6840 = x6830 + x6839;
-Tbase TZ x6841 = x53 * x1800;
-Tbase TZ x6842 = x54 * x1797;
-Tbase TZ x6843 = x55 * x1794;
-Tbase TZ x6844 = x56 * x1791;
-Tbase TZ x6845 = x57 * x1788;
-Tbase TZ x6846 = x58 * x1785;
-Tbase TZ x6847 = x59 * x1782;
-Tbase TZ x6848 = x60 * x1779;
-Tbase TZ x6849 = x61 * x1776;
-Tbase TZ x6850 = x62 * x1773;
-Tbase TZ x6851 = x63 * x1770;
-Tbase TZ x6852 = x64 * x1767;
-Tbase TZ x6853 = x6851 + x6852;
-Tbase TZ x6854 = x6850 + x6853;
-Tbase TZ x6855 = x6849 + x6854;
-Tbase TZ x6856 = x6848 + x6855;
-Tbase TZ x6857 = x6847 + x6856;
-Tbase TZ x6858 = x6846 + x6857;
-Tbase TZ x6859 = x6845 + x6858;
-Tbase TZ x6860 = x6844 + x6859;
-Tbase TZ x6861 = x6843 + x6860;
-Tbase TZ x6862 = x6842 + x6861;
-Tbase TZ x6863 = x6841 + x6862;
-Tbase TZ x6864 = 0x11;
-Tbase TZ x6865 = x6864 * x6863;
-Tbase TZ x6866 = x6840 + x6865;
-Tbase TZ x6867 = x6829 + x6866;
-Tbase TZ x6868 = 0x17;
-Tbase TZ x6869 = x6867 >>> x6868;
-Tbase TZ x6870 = x64 * x1818;
-Tbase TZ x6871 = x65 * x1815;
-Tbase TZ x6872 = x66 * x1812;
-Tbase TZ x6873 = x67 * x1809;
-Tbase TZ x6874 = x68 * x1806;
-Tbase TZ x6875 = x69 * x1803;
-Tbase TZ x6876 = x70 * x1800;
-Tbase TZ x6877 = x6875 + x6876;
-Tbase TZ x6878 = x6874 + x6877;
-Tbase TZ x6879 = x6873 + x6878;
-Tbase TZ x6880 = x6872 + x6879;
-Tbase TZ x6881 = x6871 + x6880;
-Tbase TZ x6882 = x6870 + x6881;
-Tbase TZ x6883 = x53 * x1797;
-Tbase TZ x6884 = x54 * x1794;
-Tbase TZ x6885 = x55 * x1791;
-Tbase TZ x6886 = x56 * x1788;
-Tbase TZ x6887 = x57 * x1785;
-Tbase TZ x6888 = x58 * x1782;
-Tbase TZ x6889 = x59 * x1779;
-Tbase TZ x6890 = x60 * x1776;
-Tbase TZ x6891 = x61 * x1773;
-Tbase TZ x6892 = x62 * x1770;
-Tbase TZ x6893 = x63 * x1767;
-Tbase TZ x6894 = x6892 + x6893;
-Tbase TZ x6895 = x6891 + x6894;
-Tbase TZ x6896 = x6890 + x6895;
-Tbase TZ x6897 = x6889 + x6896;
-Tbase TZ x6898 = x6888 + x6897;
-Tbase TZ x6899 = x6887 + x6898;
-Tbase TZ x6900 = x6886 + x6899;
-Tbase TZ x6901 = x6885 + x6900;
-Tbase TZ x6902 = x6884 + x6901;
-Tbase TZ x6903 = x6883 + x6902;
-Tbase TZ x6904 = 0x11;
-Tbase TZ x6905 = x6904 * x6903;
-Tbase TZ x6906 = x6882 + x6905;
-Tbase TZ x6907 = x6869 + x6906;
-Tbase TZ x6908 = 0x17;
-Tbase TZ x6909 = x6907 >>> x6908;
-Tbase TZ x6910 = x63 * x1818;
-Tbase TZ x6911 = x64 * x1815;
-Tbase TZ x6912 = x65 * x1812;
-Tbase TZ x6913 = x66 * x1809;
-Tbase TZ x6914 = x67 * x1806;
-Tbase TZ x6915 = x68 * x1803;
-Tbase TZ x6916 = x69 * x1800;
-Tbase TZ x6917 = x70 * x1797;
-Tbase TZ x6918 = x6916 + x6917;
-Tbase TZ x6919 = x6915 + x6918;
-Tbase TZ x6920 = x6914 + x6919;
-Tbase TZ x6921 = x6913 + x6920;
-Tbase TZ x6922 = x6912 + x6921;
-Tbase TZ x6923 = x6911 + x6922;
-Tbase TZ x6924 = x6910 + x6923;
-Tbase TZ x6925 = x53 * x1794;
-Tbase TZ x6926 = x54 * x1791;
-Tbase TZ x6927 = x55 * x1788;
-Tbase TZ x6928 = x56 * x1785;
-Tbase TZ x6929 = x57 * x1782;
-Tbase TZ x6930 = x58 * x1779;
-Tbase TZ x6931 = x59 * x1776;
-Tbase TZ x6932 = x60 * x1773;
-Tbase TZ x6933 = x61 * x1770;
-Tbase TZ x6934 = x62 * x1767;
-Tbase TZ x6935 = x6933 + x6934;
-Tbase TZ x6936 = x6932 + x6935;
-Tbase TZ x6937 = x6931 + x6936;
-Tbase TZ x6938 = x6930 + x6937;
-Tbase TZ x6939 = x6929 + x6938;
-Tbase TZ x6940 = x6928 + x6939;
-Tbase TZ x6941 = x6927 + x6940;
-Tbase TZ x6942 = x6926 + x6941;
-Tbase TZ x6943 = x6925 + x6942;
-Tbase TZ x6944 = 0x11;
-Tbase TZ x6945 = x6944 * x6943;
-Tbase TZ x6946 = x6924 + x6945;
-Tbase TZ x6947 = x6909 + x6946;
-Tbase TZ x6948 = 0x17;
-Tbase TZ x6949 = x6947 >>> x6948;
-Tbase TZ x6950 = x62 * x1818;
-Tbase TZ x6951 = x63 * x1815;
-Tbase TZ x6952 = x64 * x1812;
-Tbase TZ x6953 = x65 * x1809;
-Tbase TZ x6954 = x66 * x1806;
-Tbase TZ x6955 = x67 * x1803;
-Tbase TZ x6956 = x68 * x1800;
-Tbase TZ x6957 = x69 * x1797;
-Tbase TZ x6958 = x70 * x1794;
-Tbase TZ x6959 = x6957 + x6958;
-Tbase TZ x6960 = x6956 + x6959;
-Tbase TZ x6961 = x6955 + x6960;
-Tbase TZ x6962 = x6954 + x6961;
-Tbase TZ x6963 = x6953 + x6962;
-Tbase TZ x6964 = x6952 + x6963;
-Tbase TZ x6965 = x6951 + x6964;
-Tbase TZ x6966 = x6950 + x6965;
-Tbase TZ x6967 = x53 * x1791;
-Tbase TZ x6968 = x54 * x1788;
-Tbase TZ x6969 = x55 * x1785;
-Tbase TZ x6970 = x56 * x1782;
-Tbase TZ x6971 = x57 * x1779;
-Tbase TZ x6972 = x58 * x1776;
-Tbase TZ x6973 = x59 * x1773;
-Tbase TZ x6974 = x60 * x1770;
-Tbase TZ x6975 = x61 * x1767;
-Tbase TZ x6976 = x6974 + x6975;
-Tbase TZ x6977 = x6973 + x6976;
-Tbase TZ x6978 = x6972 + x6977;
-Tbase TZ x6979 = x6971 + x6978;
-Tbase TZ x6980 = x6970 + x6979;
-Tbase TZ x6981 = x6969 + x6980;
-Tbase TZ x6982 = x6968 + x6981;
-Tbase TZ x6983 = x6967 + x6982;
-Tbase TZ x6984 = 0x11;
-Tbase TZ x6985 = x6984 * x6983;
-Tbase TZ x6986 = x6966 + x6985;
-Tbase TZ x6987 = x6949 + x6986;
-Tbase TZ x6988 = 0x17;
-Tbase TZ x6989 = x6987 >>> x6988;
-Tbase TZ x6990 = x61 * x1818;
-Tbase TZ x6991 = x62 * x1815;
-Tbase TZ x6992 = x63 * x1812;
-Tbase TZ x6993 = x64 * x1809;
-Tbase TZ x6994 = x65 * x1806;
-Tbase TZ x6995 = x66 * x1803;
-Tbase TZ x6996 = x67 * x1800;
-Tbase TZ x6997 = x68 * x1797;
-Tbase TZ x6998 = x69 * x1794;
-Tbase TZ x6999 = x70 * x1791;
-Tbase TZ x7000 = x6998 + x6999;
-Tbase TZ x7001 = x6997 + x7000;
-Tbase TZ x7002 = x6996 + x7001;
-Tbase TZ x7003 = x6995 + x7002;
-Tbase TZ x7004 = x6994 + x7003;
-Tbase TZ x7005 = x6993 + x7004;
-Tbase TZ x7006 = x6992 + x7005;
-Tbase TZ x7007 = x6991 + x7006;
-Tbase TZ x7008 = x6990 + x7007;
-Tbase TZ x7009 = x53 * x1788;
-Tbase TZ x7010 = x54 * x1785;
-Tbase TZ x7011 = x55 * x1782;
-Tbase TZ x7012 = x56 * x1779;
-Tbase TZ x7013 = x57 * x1776;
-Tbase TZ x7014 = x58 * x1773;
-Tbase TZ x7015 = x59 * x1770;
-Tbase TZ x7016 = x60 * x1767;
-Tbase TZ x7017 = x7015 + x7016;
-Tbase TZ x7018 = x7014 + x7017;
-Tbase TZ x7019 = x7013 + x7018;
-Tbase TZ x7020 = x7012 + x7019;
-Tbase TZ x7021 = x7011 + x7020;
-Tbase TZ x7022 = x7010 + x7021;
-Tbase TZ x7023 = x7009 + x7022;
-Tbase TZ x7024 = 0x11;
-Tbase TZ x7025 = x7024 * x7023;
-Tbase TZ x7026 = x7008 + x7025;
-Tbase TZ x7027 = x6989 + x7026;
-Tbase TZ x7028 = 0x17;
-Tbase TZ x7029 = x7027 >>> x7028;
-Tbase TZ x7030 = x60 * x1818;
-Tbase TZ x7031 = x61 * x1815;
-Tbase TZ x7032 = x62 * x1812;
-Tbase TZ x7033 = x63 * x1809;
-Tbase TZ x7034 = x64 * x1806;
-Tbase TZ x7035 = x65 * x1803;
-Tbase TZ x7036 = x66 * x1800;
-Tbase TZ x7037 = x67 * x1797;
-Tbase TZ x7038 = x68 * x1794;
-Tbase TZ x7039 = x69 * x1791;
-Tbase TZ x7040 = x70 * x1788;
-Tbase TZ x7041 = x7039 + x7040;
-Tbase TZ x7042 = x7038 + x7041;
-Tbase TZ x7043 = x7037 + x7042;
-Tbase TZ x7044 = x7036 + x7043;
-Tbase TZ x7045 = x7035 + x7044;
-Tbase TZ x7046 = x7034 + x7045;
-Tbase TZ x7047 = x7033 + x7046;
-Tbase TZ x7048 = x7032 + x7047;
-Tbase TZ x7049 = x7031 + x7048;
-Tbase TZ x7050 = x7030 + x7049;
-Tbase TZ x7051 = x53 * x1785;
-Tbase TZ x7052 = x54 * x1782;
-Tbase TZ x7053 = x55 * x1779;
-Tbase TZ x7054 = x56 * x1776;
-Tbase TZ x7055 = x57 * x1773;
-Tbase TZ x7056 = x58 * x1770;
-Tbase TZ x7057 = x59 * x1767;
-Tbase TZ x7058 = x7056 + x7057;
-Tbase TZ x7059 = x7055 + x7058;
-Tbase TZ x7060 = x7054 + x7059;
-Tbase TZ x7061 = x7053 + x7060;
-Tbase TZ x7062 = x7052 + x7061;
-Tbase TZ x7063 = x7051 + x7062;
-Tbase TZ x7064 = 0x11;
-Tbase TZ x7065 = x7064 * x7063;
-Tbase TZ x7066 = x7050 + x7065;
-Tbase TZ x7067 = x7029 + x7066;
-Tbase TZ x7068 = 0x17;
-Tbase TZ x7069 = x7067 >>> x7068;
-Tbase TZ x7070 = x59 * x1818;
-Tbase TZ x7071 = x60 * x1815;
-Tbase TZ x7072 = x61 * x1812;
-Tbase TZ x7073 = x62 * x1809;
-Tbase TZ x7074 = x63 * x1806;
-Tbase TZ x7075 = x64 * x1803;
-Tbase TZ x7076 = x65 * x1800;
-Tbase TZ x7077 = x66 * x1797;
-Tbase TZ x7078 = x67 * x1794;
-Tbase TZ x7079 = x68 * x1791;
-Tbase TZ x7080 = x69 * x1788;
-Tbase TZ x7081 = x70 * x1785;
-Tbase TZ x7082 = x7080 + x7081;
-Tbase TZ x7083 = x7079 + x7082;
-Tbase TZ x7084 = x7078 + x7083;
-Tbase TZ x7085 = x7077 + x7084;
-Tbase TZ x7086 = x7076 + x7085;
-Tbase TZ x7087 = x7075 + x7086;
-Tbase TZ x7088 = x7074 + x7087;
-Tbase TZ x7089 = x7073 + x7088;
-Tbase TZ x7090 = x7072 + x7089;
-Tbase TZ x7091 = x7071 + x7090;
-Tbase TZ x7092 = x7070 + x7091;
-Tbase TZ x7093 = x53 * x1782;
-Tbase TZ x7094 = x54 * x1779;
-Tbase TZ x7095 = x55 * x1776;
-Tbase TZ x7096 = x56 * x1773;
-Tbase TZ x7097 = x57 * x1770;
-Tbase TZ x7098 = x58 * x1767;
-Tbase TZ x7099 = x7097 + x7098;
-Tbase TZ x7100 = x7096 + x7099;
-Tbase TZ x7101 = x7095 + x7100;
-Tbase TZ x7102 = x7094 + x7101;
-Tbase TZ x7103 = x7093 + x7102;
-Tbase TZ x7104 = 0x11;
-Tbase TZ x7105 = x7104 * x7103;
-Tbase TZ x7106 = x7092 + x7105;
-Tbase TZ x7107 = x7069 + x7106;
-Tbase TZ x7108 = 0x17;
-Tbase TZ x7109 = x7107 >>> x7108;
-Tbase TZ x7110 = x58 * x1818;
-Tbase TZ x7111 = x59 * x1815;
-Tbase TZ x7112 = x60 * x1812;
-Tbase TZ x7113 = x61 * x1809;
-Tbase TZ x7114 = x62 * x1806;
-Tbase TZ x7115 = x63 * x1803;
-Tbase TZ x7116 = x64 * x1800;
-Tbase TZ x7117 = x65 * x1797;
-Tbase TZ x7118 = x66 * x1794;
-Tbase TZ x7119 = x67 * x1791;
-Tbase TZ x7120 = x68 * x1788;
-Tbase TZ x7121 = x69 * x1785;
-Tbase TZ x7122 = x70 * x1782;
-Tbase TZ x7123 = x7121 + x7122;
-Tbase TZ x7124 = x7120 + x7123;
-Tbase TZ x7125 = x7119 + x7124;
-Tbase TZ x7126 = x7118 + x7125;
-Tbase TZ x7127 = x7117 + x7126;
-Tbase TZ x7128 = x7116 + x7127;
-Tbase TZ x7129 = x7115 + x7128;
-Tbase TZ x7130 = x7114 + x7129;
-Tbase TZ x7131 = x7113 + x7130;
-Tbase TZ x7132 = x7112 + x7131;
-Tbase TZ x7133 = x7111 + x7132;
-Tbase TZ x7134 = x7110 + x7133;
-Tbase TZ x7135 = x53 * x1779;
-Tbase TZ x7136 = x54 * x1776;
-Tbase TZ x7137 = x55 * x1773;
-Tbase TZ x7138 = x56 * x1770;
-Tbase TZ x7139 = x57 * x1767;
-Tbase TZ x7140 = x7138 + x7139;
-Tbase TZ x7141 = x7137 + x7140;
-Tbase TZ x7142 = x7136 + x7141;
-Tbase TZ x7143 = x7135 + x7142;
-Tbase TZ x7144 = 0x11;
-Tbase TZ x7145 = x7144 * x7143;
-Tbase TZ x7146 = x7134 + x7145;
-Tbase TZ x7147 = x7109 + x7146;
-Tbase TZ x7148 = 0x17;
-Tbase TZ x7149 = x7147 >>> x7148;
-Tbase TZ x7150 = x57 * x1818;
-Tbase TZ x7151 = x58 * x1815;
-Tbase TZ x7152 = x59 * x1812;
-Tbase TZ x7153 = x60 * x1809;
-Tbase TZ x7154 = x61 * x1806;
-Tbase TZ x7155 = x62 * x1803;
-Tbase TZ x7156 = x63 * x1800;
-Tbase TZ x7157 = x64 * x1797;
-Tbase TZ x7158 = x65 * x1794;
-Tbase TZ x7159 = x66 * x1791;
-Tbase TZ x7160 = x67 * x1788;
-Tbase TZ x7161 = x68 * x1785;
-Tbase TZ x7162 = x69 * x1782;
-Tbase TZ x7163 = x70 * x1779;
-Tbase TZ x7164 = x7162 + x7163;
-Tbase TZ x7165 = x7161 + x7164;
-Tbase TZ x7166 = x7160 + x7165;
-Tbase TZ x7167 = x7159 + x7166;
-Tbase TZ x7168 = x7158 + x7167;
-Tbase TZ x7169 = x7157 + x7168;
-Tbase TZ x7170 = x7156 + x7169;
-Tbase TZ x7171 = x7155 + x7170;
-Tbase TZ x7172 = x7154 + x7171;
-Tbase TZ x7173 = x7153 + x7172;
-Tbase TZ x7174 = x7152 + x7173;
-Tbase TZ x7175 = x7151 + x7174;
-Tbase TZ x7176 = x7150 + x7175;
-Tbase TZ x7177 = x53 * x1776;
-Tbase TZ x7178 = x54 * x1773;
-Tbase TZ x7179 = x55 * x1770;
-Tbase TZ x7180 = x56 * x1767;
-Tbase TZ x7181 = x7179 + x7180;
-Tbase TZ x7182 = x7178 + x7181;
-Tbase TZ x7183 = x7177 + x7182;
-Tbase TZ x7184 = 0x11;
-Tbase TZ x7185 = x7184 * x7183;
-Tbase TZ x7186 = x7176 + x7185;
-Tbase TZ x7187 = x7149 + x7186;
-Tbase TZ x7188 = 0x17;
-Tbase TZ x7189 = x7187 >>> x7188;
-Tbase TZ x7190 = x56 * x1818;
-Tbase TZ x7191 = x57 * x1815;
-Tbase TZ x7192 = x58 * x1812;
-Tbase TZ x7193 = x59 * x1809;
-Tbase TZ x7194 = x60 * x1806;
-Tbase TZ x7195 = x61 * x1803;
-Tbase TZ x7196 = x62 * x1800;
-Tbase TZ x7197 = x63 * x1797;
-Tbase TZ x7198 = x64 * x1794;
-Tbase TZ x7199 = x65 * x1791;
-Tbase TZ x7200 = x66 * x1788;
-Tbase TZ x7201 = x67 * x1785;
-Tbase TZ x7202 = x68 * x1782;
-Tbase TZ x7203 = x69 * x1779;
-Tbase TZ x7204 = x70 * x1776;
-Tbase TZ x7205 = x7203 + x7204;
-Tbase TZ x7206 = x7202 + x7205;
-Tbase TZ x7207 = x7201 + x7206;
-Tbase TZ x7208 = x7200 + x7207;
-Tbase TZ x7209 = x7199 + x7208;
-Tbase TZ x7210 = x7198 + x7209;
-Tbase TZ x7211 = x7197 + x7210;
-Tbase TZ x7212 = x7196 + x7211;
-Tbase TZ x7213 = x7195 + x7212;
-Tbase TZ x7214 = x7194 + x7213;
-Tbase TZ x7215 = x7193 + x7214;
-Tbase TZ x7216 = x7192 + x7215;
-Tbase TZ x7217 = x7191 + x7216;
-Tbase TZ x7218 = x7190 + x7217;
-Tbase TZ x7219 = x53 * x1773;
-Tbase TZ x7220 = x54 * x1770;
-Tbase TZ x7221 = x55 * x1767;
-Tbase TZ x7222 = x7220 + x7221;
-Tbase TZ x7223 = x7219 + x7222;
-Tbase TZ x7224 = 0x11;
-Tbase TZ x7225 = x7224 * x7223;
-Tbase TZ x7226 = x7218 + x7225;
-Tbase TZ x7227 = x7189 + x7226;
-Tbase TZ x7228 = 0x17;
-Tbase TZ x7229 = x7227 >>> x7228;
-Tbase TZ x7230 = x55 * x1818;
-Tbase TZ x7231 = x56 * x1815;
-Tbase TZ x7232 = x57 * x1812;
-Tbase TZ x7233 = x58 * x1809;
-Tbase TZ x7234 = x59 * x1806;
-Tbase TZ x7235 = x60 * x1803;
-Tbase TZ x7236 = x61 * x1800;
-Tbase TZ x7237 = x62 * x1797;
-Tbase TZ x7238 = x63 * x1794;
-Tbase TZ x7239 = x64 * x1791;
-Tbase TZ x7240 = x65 * x1788;
-Tbase TZ x7241 = x66 * x1785;
-Tbase TZ x7242 = x67 * x1782;
-Tbase TZ x7243 = x68 * x1779;
-Tbase TZ x7244 = x69 * x1776;
-Tbase TZ x7245 = x70 * x1773;
-Tbase TZ x7246 = x7244 + x7245;
-Tbase TZ x7247 = x7243 + x7246;
-Tbase TZ x7248 = x7242 + x7247;
-Tbase TZ x7249 = x7241 + x7248;
-Tbase TZ x7250 = x7240 + x7249;
-Tbase TZ x7251 = x7239 + x7250;
-Tbase TZ x7252 = x7238 + x7251;
-Tbase TZ x7253 = x7237 + x7252;
-Tbase TZ x7254 = x7236 + x7253;
-Tbase TZ x7255 = x7235 + x7254;
-Tbase TZ x7256 = x7234 + x7255;
-Tbase TZ x7257 = x7233 + x7256;
-Tbase TZ x7258 = x7232 + x7257;
-Tbase TZ x7259 = x7231 + x7258;
-Tbase TZ x7260 = x7230 + x7259;
-Tbase TZ x7261 = x53 * x1770;
-Tbase TZ x7262 = x54 * x1767;
-Tbase TZ x7263 = x7261 + x7262;
-Tbase TZ x7264 = 0x11;
-Tbase TZ x7265 = x7264 * x7263;
-Tbase TZ x7266 = x7260 + x7265;
-Tbase TZ x7267 = x7229 + x7266;
-Tbase TZ x7268 = 0x17;
-Tbase TZ x7269 = x7267 >>> x7268;
-Tbase TZ x7270 = x54 * x1818;
-Tbase TZ x7271 = x55 * x1815;
-Tbase TZ x7272 = x56 * x1812;
-Tbase TZ x7273 = x57 * x1809;
-Tbase TZ x7274 = x58 * x1806;
-Tbase TZ x7275 = x59 * x1803;
-Tbase TZ x7276 = x60 * x1800;
-Tbase TZ x7277 = x61 * x1797;
-Tbase TZ x7278 = x62 * x1794;
-Tbase TZ x7279 = x63 * x1791;
-Tbase TZ x7280 = x64 * x1788;
-Tbase TZ x7281 = x65 * x1785;
-Tbase TZ x7282 = x66 * x1782;
-Tbase TZ x7283 = x67 * x1779;
-Tbase TZ x7284 = x68 * x1776;
-Tbase TZ x7285 = x69 * x1773;
-Tbase TZ x7286 = x70 * x1770;
-Tbase TZ x7287 = x7285 + x7286;
-Tbase TZ x7288 = x7284 + x7287;
-Tbase TZ x7289 = x7283 + x7288;
-Tbase TZ x7290 = x7282 + x7289;
-Tbase TZ x7291 = x7281 + x7290;
-Tbase TZ x7292 = x7280 + x7291;
-Tbase TZ x7293 = x7279 + x7292;
-Tbase TZ x7294 = x7278 + x7293;
-Tbase TZ x7295 = x7277 + x7294;
-Tbase TZ x7296 = x7276 + x7295;
-Tbase TZ x7297 = x7275 + x7296;
-Tbase TZ x7298 = x7274 + x7297;
-Tbase TZ x7299 = x7273 + x7298;
-Tbase TZ x7300 = x7272 + x7299;
-Tbase TZ x7301 = x7271 + x7300;
-Tbase TZ x7302 = x7270 + x7301;
-Tbase TZ x7303 = x53 * x1767;
-Tbase TZ x7304 = 0x11;
-Tbase TZ x7305 = x7304 * x7303;
-Tbase TZ x7306 = x7302 + x7305;
-Tbase TZ x7307 = x7269 + x7306;
-Tbase TZ x7308 = 0x17;
-Tbase TZ x7309 = x7307 >>> x7308;
-Tbase TZ x7310 = x53 * x1818;
-Tbase TZ x7311 = x54 * x1815;
-Tbase TZ x7312 = x55 * x1812;
-Tbase TZ x7313 = x56 * x1809;
-Tbase TZ x7314 = x57 * x1806;
-Tbase TZ x7315 = x58 * x1803;
-Tbase TZ x7316 = x59 * x1800;
-Tbase TZ x7317 = x60 * x1797;
-Tbase TZ x7318 = x61 * x1794;
-Tbase TZ x7319 = x62 * x1791;
-Tbase TZ x7320 = x63 * x1788;
-Tbase TZ x7321 = x64 * x1785;
-Tbase TZ x7322 = x65 * x1782;
-Tbase TZ x7323 = x66 * x1779;
-Tbase TZ x7324 = x67 * x1776;
-Tbase TZ x7325 = x68 * x1773;
-Tbase TZ x7326 = x69 * x1770;
-Tbase TZ x7327 = x70 * x1767;
-Tbase TZ x7328 = x7326 + x7327;
-Tbase TZ x7329 = x7325 + x7328;
-Tbase TZ x7330 = x7324 + x7329;
-Tbase TZ x7331 = x7323 + x7330;
-Tbase TZ x7332 = x7322 + x7331;
-Tbase TZ x7333 = x7321 + x7332;
-Tbase TZ x7334 = x7320 + x7333;
-Tbase TZ x7335 = x7319 + x7334;
-Tbase TZ x7336 = x7318 + x7335;
-Tbase TZ x7337 = x7317 + x7336;
-Tbase TZ x7338 = x7316 + x7337;
-Tbase TZ x7339 = x7315 + x7338;
-Tbase TZ x7340 = x7314 + x7339;
-Tbase TZ x7341 = x7313 + x7340;
-Tbase TZ x7342 = x7312 + x7341;
-Tbase TZ x7343 = x7311 + x7342;
-Tbase TZ x7344 = x7310 + x7343;
-Tbase TZ x7345 = x7309 + x7344;
-Tbase TZ x7346 = 0x17;
-Tbase TZ x7347 = x7345 >>> x7346;
-Tbase TZ x7348 = 0x11;
-Tbase TZ x7349 = x7348 * x7347;
-Tbase TZ x7350 = 0x7fffff;
-Tbase TZ x7351 = x6667 & x7350;
-Tbase TZ x7352 = x7349 + x7351;
-Tbase TZ x7353 = 0x17;
-Tbase TZ x7354 = x7352 >>> x7353;
-Tbase TZ x7355 = 0x7fffff;
-Tbase TZ x7356 = x6707 & x7355;
-Tbase TZ x7357 = x7354 + x7356;
-Tbase TZ x7358 = 0x7fffff;
-Tbase TZ x7359 = x7345 & x7358;
-Tbase TZ x7360 = 0x7fffff;
-Tbase TZ x7361 = x7307 & x7360;
-Tbase TZ x7362 = 0x7fffff;
-Tbase TZ x7363 = x7267 & x7362;
-Tbase TZ x7364 = 0x7fffff;
-Tbase TZ x7365 = x7227 & x7364;
-Tbase TZ x7366 = 0x7fffff;
-Tbase TZ x7367 = x7187 & x7366;
-Tbase TZ x7368 = 0x7fffff;
-Tbase TZ x7369 = x7147 & x7368;
-Tbase TZ x7370 = 0x7fffff;
-Tbase TZ x7371 = x7107 & x7370;
-Tbase TZ x7372 = 0x7fffff;
-Tbase TZ x7373 = x7067 & x7372;
-Tbase TZ x7374 = 0x7fffff;
-Tbase TZ x7375 = x7027 & x7374;
-Tbase TZ x7376 = 0x7fffff;
-Tbase TZ x7377 = x6987 & x7376;
-Tbase TZ x7378 = 0x7fffff;
-Tbase TZ x7379 = x6947 & x7378;
-Tbase TZ x7380 = 0x7fffff;
-Tbase TZ x7381 = x6907 & x7380;
-Tbase TZ x7382 = 0x7fffff;
-Tbase TZ x7383 = x6867 & x7382;
-Tbase TZ x7384 = 0x7fffff;
-Tbase TZ x7385 = x6827 & x7384;
-Tbase TZ x7386 = 0x7fffff;
-Tbase TZ x7387 = x6787 & x7386;
-Tbase TZ x7388 = 0x17;
-Tbase TZ x7389 = x7357 >>> x7388;
-Tbase TZ x7390 = 0x7fffff;
-Tbase TZ x7391 = x6747 & x7390;
-Tbase TZ x7392 = x7389 + x7391;
-Tbase TZ x7393 = 0x7fffff;
-Tbase TZ x7394 = x7357 & x7393;
-Tbase TZ x7395 = 0x7fffff;
-Tbase TZ x7396 = x7352 & x7395;
-Tbase TZ x7397 = x907 + x7359;
-Tbase TZ x7398 = x909 + x7361;
-Tbase TZ x7399 = x911 + x7363;
-Tbase TZ x7400 = x913 + x7365;
-Tbase TZ x7401 = x915 + x7367;
-Tbase TZ x7402 = x917 + x7369;
-Tbase TZ x7403 = x919 + x7371;
-Tbase TZ x7404 = x921 + x7373;
-Tbase TZ x7405 = x923 + x7375;
-Tbase TZ x7406 = x925 + x7377;
-Tbase TZ x7407 = x927 + x7379;
-Tbase TZ x7408 = x929 + x7381;
-Tbase TZ x7409 = x931 + x7383;
-Tbase TZ x7410 = x933 + x7385;
-Tbase TZ x7411 = x935 + x7387;
-Tbase TZ x7412 = x940 + x7392;
-Tbase TZ x7413 = x942 + x7394;
-Tbase TZ x7414 = x944 + x7396;
-Tbase TZ x7415 = x1818 * x7414;
-Tbase TZ x7416 = x1767 * x7413;
-Tbase TZ x7417 = x1770 * x7412;
-Tbase TZ x7418 = x1773 * x7411;
-Tbase TZ x7419 = x1776 * x7410;
-Tbase TZ x7420 = x1779 * x7409;
-Tbase TZ x7421 = x1782 * x7408;
-Tbase TZ x7422 = x1785 * x7407;
-Tbase TZ x7423 = x1788 * x7406;
-Tbase TZ x7424 = x1791 * x7405;
-Tbase TZ x7425 = x1794 * x7404;
-Tbase TZ x7426 = x1797 * x7403;
-Tbase TZ x7427 = x1800 * x7402;
-Tbase TZ x7428 = x1803 * x7401;
-Tbase TZ x7429 = x1806 * x7400;
-Tbase TZ x7430 = x1809 * x7399;
-Tbase TZ x7431 = x1812 * x7398;
-Tbase TZ x7432 = x1815 * x7397;
-Tbase TZ x7433 = x7431 + x7432;
-Tbase TZ x7434 = x7430 + x7433;
-Tbase TZ x7435 = x7429 + x7434;
-Tbase TZ x7436 = x7428 + x7435;
-Tbase TZ x7437 = x7427 + x7436;
-Tbase TZ x7438 = x7426 + x7437;
-Tbase TZ x7439 = x7425 + x7438;
-Tbase TZ x7440 = x7424 + x7439;
-Tbase TZ x7441 = x7423 + x7440;
-Tbase TZ x7442 = x7422 + x7441;
-Tbase TZ x7443 = x7421 + x7442;
-Tbase TZ x7444 = x7420 + x7443;
-Tbase TZ x7445 = x7419 + x7444;
-Tbase TZ x7446 = x7418 + x7445;
-Tbase TZ x7447 = x7417 + x7446;
-Tbase TZ x7448 = x7416 + x7447;
-Tbase TZ x7449 = 0x11;
-Tbase TZ x7450 = x7449 * x7448;
-Tbase TZ x7451 = x7415 + x7450;
-Tbase TZ x7452 = 0x17;
-Tbase TZ x7453 = x7451 >>> x7452;
-Tbase TZ x7454 = x1815 * x7414;
-Tbase TZ x7455 = x1818 * x7413;
-Tbase TZ x7456 = x7454 + x7455;
-Tbase TZ x7457 = x1767 * x7412;
-Tbase TZ x7458 = x1770 * x7411;
-Tbase TZ x7459 = x1773 * x7410;
-Tbase TZ x7460 = x1776 * x7409;
-Tbase TZ x7461 = x1779 * x7408;
-Tbase TZ x7462 = x1782 * x7407;
-Tbase TZ x7463 = x1785 * x7406;
-Tbase TZ x7464 = x1788 * x7405;
-Tbase TZ x7465 = x1791 * x7404;
-Tbase TZ x7466 = x1794 * x7403;
-Tbase TZ x7467 = x1797 * x7402;
-Tbase TZ x7468 = x1800 * x7401;
-Tbase TZ x7469 = x1803 * x7400;
-Tbase TZ x7470 = x1806 * x7399;
-Tbase TZ x7471 = x1809 * x7398;
-Tbase TZ x7472 = x1812 * x7397;
-Tbase TZ x7473 = x7471 + x7472;
-Tbase TZ x7474 = x7470 + x7473;
-Tbase TZ x7475 = x7469 + x7474;
-Tbase TZ x7476 = x7468 + x7475;
-Tbase TZ x7477 = x7467 + x7476;
-Tbase TZ x7478 = x7466 + x7477;
-Tbase TZ x7479 = x7465 + x7478;
-Tbase TZ x7480 = x7464 + x7479;
-Tbase TZ x7481 = x7463 + x7480;
-Tbase TZ x7482 = x7462 + x7481;
-Tbase TZ x7483 = x7461 + x7482;
-Tbase TZ x7484 = x7460 + x7483;
-Tbase TZ x7485 = x7459 + x7484;
-Tbase TZ x7486 = x7458 + x7485;
-Tbase TZ x7487 = x7457 + x7486;
-Tbase TZ x7488 = 0x11;
-Tbase TZ x7489 = x7488 * x7487;
-Tbase TZ x7490 = x7456 + x7489;
-Tbase TZ x7491 = x7453 + x7490;
-Tbase TZ x7492 = 0x17;
-Tbase TZ x7493 = x7491 >>> x7492;
-Tbase TZ x7494 = x1812 * x7414;
-Tbase TZ x7495 = x1815 * x7413;
-Tbase TZ x7496 = x1818 * x7412;
-Tbase TZ x7497 = x7495 + x7496;
-Tbase TZ x7498 = x7494 + x7497;
-Tbase TZ x7499 = x1767 * x7411;
-Tbase TZ x7500 = x1770 * x7410;
-Tbase TZ x7501 = x1773 * x7409;
-Tbase TZ x7502 = x1776 * x7408;
-Tbase TZ x7503 = x1779 * x7407;
-Tbase TZ x7504 = x1782 * x7406;
-Tbase TZ x7505 = x1785 * x7405;
-Tbase TZ x7506 = x1788 * x7404;
-Tbase TZ x7507 = x1791 * x7403;
-Tbase TZ x7508 = x1794 * x7402;
-Tbase TZ x7509 = x1797 * x7401;
-Tbase TZ x7510 = x1800 * x7400;
-Tbase TZ x7511 = x1803 * x7399;
-Tbase TZ x7512 = x1806 * x7398;
-Tbase TZ x7513 = x1809 * x7397;
-Tbase TZ x7514 = x7512 + x7513;
-Tbase TZ x7515 = x7511 + x7514;
-Tbase TZ x7516 = x7510 + x7515;
-Tbase TZ x7517 = x7509 + x7516;
-Tbase TZ x7518 = x7508 + x7517;
-Tbase TZ x7519 = x7507 + x7518;
-Tbase TZ x7520 = x7506 + x7519;
-Tbase TZ x7521 = x7505 + x7520;
-Tbase TZ x7522 = x7504 + x7521;
-Tbase TZ x7523 = x7503 + x7522;
-Tbase TZ x7524 = x7502 + x7523;
-Tbase TZ x7525 = x7501 + x7524;
-Tbase TZ x7526 = x7500 + x7525;
-Tbase TZ x7527 = x7499 + x7526;
-Tbase TZ x7528 = 0x11;
-Tbase TZ x7529 = x7528 * x7527;
-Tbase TZ x7530 = x7498 + x7529;
-Tbase TZ x7531 = x7493 + x7530;
-Tbase TZ x7532 = 0x17;
-Tbase TZ x7533 = x7531 >>> x7532;
-Tbase TZ x7534 = x1809 * x7414;
-Tbase TZ x7535 = x1812 * x7413;
-Tbase TZ x7536 = x1815 * x7412;
-Tbase TZ x7537 = x1818 * x7411;
-Tbase TZ x7538 = x7536 + x7537;
-Tbase TZ x7539 = x7535 + x7538;
-Tbase TZ x7540 = x7534 + x7539;
-Tbase TZ x7541 = x1767 * x7410;
-Tbase TZ x7542 = x1770 * x7409;
-Tbase TZ x7543 = x1773 * x7408;
-Tbase TZ x7544 = x1776 * x7407;
-Tbase TZ x7545 = x1779 * x7406;
-Tbase TZ x7546 = x1782 * x7405;
-Tbase TZ x7547 = x1785 * x7404;
-Tbase TZ x7548 = x1788 * x7403;
-Tbase TZ x7549 = x1791 * x7402;
-Tbase TZ x7550 = x1794 * x7401;
-Tbase TZ x7551 = x1797 * x7400;
-Tbase TZ x7552 = x1800 * x7399;
-Tbase TZ x7553 = x1803 * x7398;
-Tbase TZ x7554 = x1806 * x7397;
-Tbase TZ x7555 = x7553 + x7554;
-Tbase TZ x7556 = x7552 + x7555;
-Tbase TZ x7557 = x7551 + x7556;
-Tbase TZ x7558 = x7550 + x7557;
-Tbase TZ x7559 = x7549 + x7558;
-Tbase TZ x7560 = x7548 + x7559;
-Tbase TZ x7561 = x7547 + x7560;
-Tbase TZ x7562 = x7546 + x7561;
-Tbase TZ x7563 = x7545 + x7562;
-Tbase TZ x7564 = x7544 + x7563;
-Tbase TZ x7565 = x7543 + x7564;
-Tbase TZ x7566 = x7542 + x7565;
-Tbase TZ x7567 = x7541 + x7566;
-Tbase TZ x7568 = 0x11;
-Tbase TZ x7569 = x7568 * x7567;
-Tbase TZ x7570 = x7540 + x7569;
-Tbase TZ x7571 = x7533 + x7570;
-Tbase TZ x7572 = 0x17;
-Tbase TZ x7573 = x7571 >>> x7572;
-Tbase TZ x7574 = x1806 * x7414;
-Tbase TZ x7575 = x1809 * x7413;
-Tbase TZ x7576 = x1812 * x7412;
-Tbase TZ x7577 = x1815 * x7411;
-Tbase TZ x7578 = x1818 * x7410;
-Tbase TZ x7579 = x7577 + x7578;
-Tbase TZ x7580 = x7576 + x7579;
-Tbase TZ x7581 = x7575 + x7580;
-Tbase TZ x7582 = x7574 + x7581;
-Tbase TZ x7583 = x1767 * x7409;
-Tbase TZ x7584 = x1770 * x7408;
-Tbase TZ x7585 = x1773 * x7407;
-Tbase TZ x7586 = x1776 * x7406;
-Tbase TZ x7587 = x1779 * x7405;
-Tbase TZ x7588 = x1782 * x7404;
-Tbase TZ x7589 = x1785 * x7403;
-Tbase TZ x7590 = x1788 * x7402;
-Tbase TZ x7591 = x1791 * x7401;
-Tbase TZ x7592 = x1794 * x7400;
-Tbase TZ x7593 = x1797 * x7399;
-Tbase TZ x7594 = x1800 * x7398;
-Tbase TZ x7595 = x1803 * x7397;
-Tbase TZ x7596 = x7594 + x7595;
-Tbase TZ x7597 = x7593 + x7596;
-Tbase TZ x7598 = x7592 + x7597;
-Tbase TZ x7599 = x7591 + x7598;
-Tbase TZ x7600 = x7590 + x7599;
-Tbase TZ x7601 = x7589 + x7600;
-Tbase TZ x7602 = x7588 + x7601;
-Tbase TZ x7603 = x7587 + x7602;
-Tbase TZ x7604 = x7586 + x7603;
-Tbase TZ x7605 = x7585 + x7604;
-Tbase TZ x7606 = x7584 + x7605;
-Tbase TZ x7607 = x7583 + x7606;
-Tbase TZ x7608 = 0x11;
-Tbase TZ x7609 = x7608 * x7607;
-Tbase TZ x7610 = x7582 + x7609;
-Tbase TZ x7611 = x7573 + x7610;
-Tbase TZ x7612 = 0x17;
-Tbase TZ x7613 = x7611 >>> x7612;
-Tbase TZ x7614 = x1803 * x7414;
-Tbase TZ x7615 = x1806 * x7413;
-Tbase TZ x7616 = x1809 * x7412;
-Tbase TZ x7617 = x1812 * x7411;
-Tbase TZ x7618 = x1815 * x7410;
-Tbase TZ x7619 = x1818 * x7409;
-Tbase TZ x7620 = x7618 + x7619;
-Tbase TZ x7621 = x7617 + x7620;
-Tbase TZ x7622 = x7616 + x7621;
-Tbase TZ x7623 = x7615 + x7622;
-Tbase TZ x7624 = x7614 + x7623;
-Tbase TZ x7625 = x1767 * x7408;
-Tbase TZ x7626 = x1770 * x7407;
-Tbase TZ x7627 = x1773 * x7406;
-Tbase TZ x7628 = x1776 * x7405;
-Tbase TZ x7629 = x1779 * x7404;
-Tbase TZ x7630 = x1782 * x7403;
-Tbase TZ x7631 = x1785 * x7402;
-Tbase TZ x7632 = x1788 * x7401;
-Tbase TZ x7633 = x1791 * x7400;
-Tbase TZ x7634 = x1794 * x7399;
-Tbase TZ x7635 = x1797 * x7398;
-Tbase TZ x7636 = x1800 * x7397;
-Tbase TZ x7637 = x7635 + x7636;
-Tbase TZ x7638 = x7634 + x7637;
-Tbase TZ x7639 = x7633 + x7638;
-Tbase TZ x7640 = x7632 + x7639;
-Tbase TZ x7641 = x7631 + x7640;
-Tbase TZ x7642 = x7630 + x7641;
-Tbase TZ x7643 = x7629 + x7642;
-Tbase TZ x7644 = x7628 + x7643;
-Tbase TZ x7645 = x7627 + x7644;
-Tbase TZ x7646 = x7626 + x7645;
-Tbase TZ x7647 = x7625 + x7646;
-Tbase TZ x7648 = 0x11;
-Tbase TZ x7649 = x7648 * x7647;
-Tbase TZ x7650 = x7624 + x7649;
-Tbase TZ x7651 = x7613 + x7650;
-Tbase TZ x7652 = 0x17;
-Tbase TZ x7653 = x7651 >>> x7652;
-Tbase TZ x7654 = x1800 * x7414;
-Tbase TZ x7655 = x1803 * x7413;
-Tbase TZ x7656 = x1806 * x7412;
-Tbase TZ x7657 = x1809 * x7411;
-Tbase TZ x7658 = x1812 * x7410;
-Tbase TZ x7659 = x1815 * x7409;
-Tbase TZ x7660 = x1818 * x7408;
-Tbase TZ x7661 = x7659 + x7660;
-Tbase TZ x7662 = x7658 + x7661;
-Tbase TZ x7663 = x7657 + x7662;
-Tbase TZ x7664 = x7656 + x7663;
-Tbase TZ x7665 = x7655 + x7664;
-Tbase TZ x7666 = x7654 + x7665;
-Tbase TZ x7667 = x1767 * x7407;
-Tbase TZ x7668 = x1770 * x7406;
-Tbase TZ x7669 = x1773 * x7405;
-Tbase TZ x7670 = x1776 * x7404;
-Tbase TZ x7671 = x1779 * x7403;
-Tbase TZ x7672 = x1782 * x7402;
-Tbase TZ x7673 = x1785 * x7401;
-Tbase TZ x7674 = x1788 * x7400;
-Tbase TZ x7675 = x1791 * x7399;
-Tbase TZ x7676 = x1794 * x7398;
-Tbase TZ x7677 = x1797 * x7397;
-Tbase TZ x7678 = x7676 + x7677;
-Tbase TZ x7679 = x7675 + x7678;
-Tbase TZ x7680 = x7674 + x7679;
-Tbase TZ x7681 = x7673 + x7680;
-Tbase TZ x7682 = x7672 + x7681;
-Tbase TZ x7683 = x7671 + x7682;
-Tbase TZ x7684 = x7670 + x7683;
-Tbase TZ x7685 = x7669 + x7684;
-Tbase TZ x7686 = x7668 + x7685;
-Tbase TZ x7687 = x7667 + x7686;
-Tbase TZ x7688 = 0x11;
-Tbase TZ x7689 = x7688 * x7687;
-Tbase TZ x7690 = x7666 + x7689;
-Tbase TZ x7691 = x7653 + x7690;
-Tbase TZ x7692 = 0x17;
-Tbase TZ x7693 = x7691 >>> x7692;
-Tbase TZ x7694 = x1797 * x7414;
-Tbase TZ x7695 = x1800 * x7413;
-Tbase TZ x7696 = x1803 * x7412;
-Tbase TZ x7697 = x1806 * x7411;
-Tbase TZ x7698 = x1809 * x7410;
-Tbase TZ x7699 = x1812 * x7409;
-Tbase TZ x7700 = x1815 * x7408;
-Tbase TZ x7701 = x1818 * x7407;
-Tbase TZ x7702 = x7700 + x7701;
-Tbase TZ x7703 = x7699 + x7702;
-Tbase TZ x7704 = x7698 + x7703;
-Tbase TZ x7705 = x7697 + x7704;
-Tbase TZ x7706 = x7696 + x7705;
-Tbase TZ x7707 = x7695 + x7706;
-Tbase TZ x7708 = x7694 + x7707;
-Tbase TZ x7709 = x1767 * x7406;
-Tbase TZ x7710 = x1770 * x7405;
-Tbase TZ x7711 = x1773 * x7404;
-Tbase TZ x7712 = x1776 * x7403;
-Tbase TZ x7713 = x1779 * x7402;
-Tbase TZ x7714 = x1782 * x7401;
-Tbase TZ x7715 = x1785 * x7400;
-Tbase TZ x7716 = x1788 * x7399;
-Tbase TZ x7717 = x1791 * x7398;
-Tbase TZ x7718 = x1794 * x7397;
-Tbase TZ x7719 = x7717 + x7718;
-Tbase TZ x7720 = x7716 + x7719;
-Tbase TZ x7721 = x7715 + x7720;
-Tbase TZ x7722 = x7714 + x7721;
-Tbase TZ x7723 = x7713 + x7722;
-Tbase TZ x7724 = x7712 + x7723;
-Tbase TZ x7725 = x7711 + x7724;
-Tbase TZ x7726 = x7710 + x7725;
-Tbase TZ x7727 = x7709 + x7726;
-Tbase TZ x7728 = 0x11;
-Tbase TZ x7729 = x7728 * x7727;
-Tbase TZ x7730 = x7708 + x7729;
-Tbase TZ x7731 = x7693 + x7730;
-Tbase TZ x7732 = 0x17;
-Tbase TZ x7733 = x7731 >>> x7732;
-Tbase TZ x7734 = x1794 * x7414;
-Tbase TZ x7735 = x1797 * x7413;
-Tbase TZ x7736 = x1800 * x7412;
-Tbase TZ x7737 = x1803 * x7411;
-Tbase TZ x7738 = x1806 * x7410;
-Tbase TZ x7739 = x1809 * x7409;
-Tbase TZ x7740 = x1812 * x7408;
-Tbase TZ x7741 = x1815 * x7407;
-Tbase TZ x7742 = x1818 * x7406;
-Tbase TZ x7743 = x7741 + x7742;
-Tbase TZ x7744 = x7740 + x7743;
-Tbase TZ x7745 = x7739 + x7744;
-Tbase TZ x7746 = x7738 + x7745;
-Tbase TZ x7747 = x7737 + x7746;
-Tbase TZ x7748 = x7736 + x7747;
-Tbase TZ x7749 = x7735 + x7748;
-Tbase TZ x7750 = x7734 + x7749;
-Tbase TZ x7751 = x1767 * x7405;
-Tbase TZ x7752 = x1770 * x7404;
-Tbase TZ x7753 = x1773 * x7403;
-Tbase TZ x7754 = x1776 * x7402;
-Tbase TZ x7755 = x1779 * x7401;
-Tbase TZ x7756 = x1782 * x7400;
-Tbase TZ x7757 = x1785 * x7399;
-Tbase TZ x7758 = x1788 * x7398;
-Tbase TZ x7759 = x1791 * x7397;
-Tbase TZ x7760 = x7758 + x7759;
-Tbase TZ x7761 = x7757 + x7760;
-Tbase TZ x7762 = x7756 + x7761;
-Tbase TZ x7763 = x7755 + x7762;
-Tbase TZ x7764 = x7754 + x7763;
-Tbase TZ x7765 = x7753 + x7764;
-Tbase TZ x7766 = x7752 + x7765;
-Tbase TZ x7767 = x7751 + x7766;
-Tbase TZ x7768 = 0x11;
-Tbase TZ x7769 = x7768 * x7767;
-Tbase TZ x7770 = x7750 + x7769;
-Tbase TZ x7771 = x7733 + x7770;
-Tbase TZ x7772 = 0x17;
-Tbase TZ x7773 = x7771 >>> x7772;
-Tbase TZ x7774 = x1791 * x7414;
-Tbase TZ x7775 = x1794 * x7413;
-Tbase TZ x7776 = x1797 * x7412;
-Tbase TZ x7777 = x1800 * x7411;
-Tbase TZ x7778 = x1803 * x7410;
-Tbase TZ x7779 = x1806 * x7409;
-Tbase TZ x7780 = x1809 * x7408;
-Tbase TZ x7781 = x1812 * x7407;
-Tbase TZ x7782 = x1815 * x7406;
-Tbase TZ x7783 = x1818 * x7405;
-Tbase TZ x7784 = x7782 + x7783;
-Tbase TZ x7785 = x7781 + x7784;
-Tbase TZ x7786 = x7780 + x7785;
-Tbase TZ x7787 = x7779 + x7786;
-Tbase TZ x7788 = x7778 + x7787;
-Tbase TZ x7789 = x7777 + x7788;
-Tbase TZ x7790 = x7776 + x7789;
-Tbase TZ x7791 = x7775 + x7790;
-Tbase TZ x7792 = x7774 + x7791;
-Tbase TZ x7793 = x1767 * x7404;
-Tbase TZ x7794 = x1770 * x7403;
-Tbase TZ x7795 = x1773 * x7402;
-Tbase TZ x7796 = x1776 * x7401;
-Tbase TZ x7797 = x1779 * x7400;
-Tbase TZ x7798 = x1782 * x7399;
-Tbase TZ x7799 = x1785 * x7398;
-Tbase TZ x7800 = x1788 * x7397;
-Tbase TZ x7801 = x7799 + x7800;
-Tbase TZ x7802 = x7798 + x7801;
-Tbase TZ x7803 = x7797 + x7802;
-Tbase TZ x7804 = x7796 + x7803;
-Tbase TZ x7805 = x7795 + x7804;
-Tbase TZ x7806 = x7794 + x7805;
-Tbase TZ x7807 = x7793 + x7806;
-Tbase TZ x7808 = 0x11;
-Tbase TZ x7809 = x7808 * x7807;
-Tbase TZ x7810 = x7792 + x7809;
-Tbase TZ x7811 = x7773 + x7810;
-Tbase TZ x7812 = 0x17;
-Tbase TZ x7813 = x7811 >>> x7812;
-Tbase TZ x7814 = x1788 * x7414;
-Tbase TZ x7815 = x1791 * x7413;
-Tbase TZ x7816 = x1794 * x7412;
-Tbase TZ x7817 = x1797 * x7411;
-Tbase TZ x7818 = x1800 * x7410;
-Tbase TZ x7819 = x1803 * x7409;
-Tbase TZ x7820 = x1806 * x7408;
-Tbase TZ x7821 = x1809 * x7407;
-Tbase TZ x7822 = x1812 * x7406;
-Tbase TZ x7823 = x1815 * x7405;
-Tbase TZ x7824 = x1818 * x7404;
-Tbase TZ x7825 = x7823 + x7824;
-Tbase TZ x7826 = x7822 + x7825;
-Tbase TZ x7827 = x7821 + x7826;
-Tbase TZ x7828 = x7820 + x7827;
-Tbase TZ x7829 = x7819 + x7828;
-Tbase TZ x7830 = x7818 + x7829;
-Tbase TZ x7831 = x7817 + x7830;
-Tbase TZ x7832 = x7816 + x7831;
-Tbase TZ x7833 = x7815 + x7832;
-Tbase TZ x7834 = x7814 + x7833;
-Tbase TZ x7835 = x1767 * x7403;
-Tbase TZ x7836 = x1770 * x7402;
-Tbase TZ x7837 = x1773 * x7401;
-Tbase TZ x7838 = x1776 * x7400;
-Tbase TZ x7839 = x1779 * x7399;
-Tbase TZ x7840 = x1782 * x7398;
-Tbase TZ x7841 = x1785 * x7397;
-Tbase TZ x7842 = x7840 + x7841;
-Tbase TZ x7843 = x7839 + x7842;
-Tbase TZ x7844 = x7838 + x7843;
-Tbase TZ x7845 = x7837 + x7844;
-Tbase TZ x7846 = x7836 + x7845;
-Tbase TZ x7847 = x7835 + x7846;
-Tbase TZ x7848 = 0x11;
-Tbase TZ x7849 = x7848 * x7847;
-Tbase TZ x7850 = x7834 + x7849;
-Tbase TZ x7851 = x7813 + x7850;
-Tbase TZ x7852 = 0x17;
-Tbase TZ x7853 = x7851 >>> x7852;
-Tbase TZ x7854 = x1785 * x7414;
-Tbase TZ x7855 = x1788 * x7413;
-Tbase TZ x7856 = x1791 * x7412;
-Tbase TZ x7857 = x1794 * x7411;
-Tbase TZ x7858 = x1797 * x7410;
-Tbase TZ x7859 = x1800 * x7409;
-Tbase TZ x7860 = x1803 * x7408;
-Tbase TZ x7861 = x1806 * x7407;
-Tbase TZ x7862 = x1809 * x7406;
-Tbase TZ x7863 = x1812 * x7405;
-Tbase TZ x7864 = x1815 * x7404;
-Tbase TZ x7865 = x1818 * x7403;
-Tbase TZ x7866 = x7864 + x7865;
-Tbase TZ x7867 = x7863 + x7866;
-Tbase TZ x7868 = x7862 + x7867;
-Tbase TZ x7869 = x7861 + x7868;
-Tbase TZ x7870 = x7860 + x7869;
-Tbase TZ x7871 = x7859 + x7870;
-Tbase TZ x7872 = x7858 + x7871;
-Tbase TZ x7873 = x7857 + x7872;
-Tbase TZ x7874 = x7856 + x7873;
-Tbase TZ x7875 = x7855 + x7874;
-Tbase TZ x7876 = x7854 + x7875;
-Tbase TZ x7877 = x1767 * x7402;
-Tbase TZ x7878 = x1770 * x7401;
-Tbase TZ x7879 = x1773 * x7400;
-Tbase TZ x7880 = x1776 * x7399;
-Tbase TZ x7881 = x1779 * x7398;
-Tbase TZ x7882 = x1782 * x7397;
-Tbase TZ x7883 = x7881 + x7882;
-Tbase TZ x7884 = x7880 + x7883;
-Tbase TZ x7885 = x7879 + x7884;
-Tbase TZ x7886 = x7878 + x7885;
-Tbase TZ x7887 = x7877 + x7886;
-Tbase TZ x7888 = 0x11;
-Tbase TZ x7889 = x7888 * x7887;
-Tbase TZ x7890 = x7876 + x7889;
-Tbase TZ x7891 = x7853 + x7890;
-Tbase TZ x7892 = 0x17;
-Tbase TZ x7893 = x7891 >>> x7892;
-Tbase TZ x7894 = x1782 * x7414;
-Tbase TZ x7895 = x1785 * x7413;
-Tbase TZ x7896 = x1788 * x7412;
-Tbase TZ x7897 = x1791 * x7411;
-Tbase TZ x7898 = x1794 * x7410;
-Tbase TZ x7899 = x1797 * x7409;
-Tbase TZ x7900 = x1800 * x7408;
-Tbase TZ x7901 = x1803 * x7407;
-Tbase TZ x7902 = x1806 * x7406;
-Tbase TZ x7903 = x1809 * x7405;
-Tbase TZ x7904 = x1812 * x7404;
-Tbase TZ x7905 = x1815 * x7403;
-Tbase TZ x7906 = x1818 * x7402;
-Tbase TZ x7907 = x7905 + x7906;
-Tbase TZ x7908 = x7904 + x7907;
-Tbase TZ x7909 = x7903 + x7908;
-Tbase TZ x7910 = x7902 + x7909;
-Tbase TZ x7911 = x7901 + x7910;
-Tbase TZ x7912 = x7900 + x7911;
-Tbase TZ x7913 = x7899 + x7912;
-Tbase TZ x7914 = x7898 + x7913;
-Tbase TZ x7915 = x7897 + x7914;
-Tbase TZ x7916 = x7896 + x7915;
-Tbase TZ x7917 = x7895 + x7916;
-Tbase TZ x7918 = x7894 + x7917;
-Tbase TZ x7919 = x1767 * x7401;
-Tbase TZ x7920 = x1770 * x7400;
-Tbase TZ x7921 = x1773 * x7399;
-Tbase TZ x7922 = x1776 * x7398;
-Tbase TZ x7923 = x1779 * x7397;
-Tbase TZ x7924 = x7922 + x7923;
-Tbase TZ x7925 = x7921 + x7924;
-Tbase TZ x7926 = x7920 + x7925;
-Tbase TZ x7927 = x7919 + x7926;
-Tbase TZ x7928 = 0x11;
-Tbase TZ x7929 = x7928 * x7927;
-Tbase TZ x7930 = x7918 + x7929;
-Tbase TZ x7931 = x7893 + x7930;
-Tbase TZ x7932 = 0x17;
-Tbase TZ x7933 = x7931 >>> x7932;
-Tbase TZ x7934 = x1779 * x7414;
-Tbase TZ x7935 = x1782 * x7413;
-Tbase TZ x7936 = x1785 * x7412;
-Tbase TZ x7937 = x1788 * x7411;
-Tbase TZ x7938 = x1791 * x7410;
-Tbase TZ x7939 = x1794 * x7409;
-Tbase TZ x7940 = x1797 * x7408;
-Tbase TZ x7941 = x1800 * x7407;
-Tbase TZ x7942 = x1803 * x7406;
-Tbase TZ x7943 = x1806 * x7405;
-Tbase TZ x7944 = x1809 * x7404;
-Tbase TZ x7945 = x1812 * x7403;
-Tbase TZ x7946 = x1815 * x7402;
-Tbase TZ x7947 = x1818 * x7401;
-Tbase TZ x7948 = x7946 + x7947;
-Tbase TZ x7949 = x7945 + x7948;
-Tbase TZ x7950 = x7944 + x7949;
-Tbase TZ x7951 = x7943 + x7950;
-Tbase TZ x7952 = x7942 + x7951;
-Tbase TZ x7953 = x7941 + x7952;
-Tbase TZ x7954 = x7940 + x7953;
-Tbase TZ x7955 = x7939 + x7954;
-Tbase TZ x7956 = x7938 + x7955;
-Tbase TZ x7957 = x7937 + x7956;
-Tbase TZ x7958 = x7936 + x7957;
-Tbase TZ x7959 = x7935 + x7958;
-Tbase TZ x7960 = x7934 + x7959;
-Tbase TZ x7961 = x1767 * x7400;
-Tbase TZ x7962 = x1770 * x7399;
-Tbase TZ x7963 = x1773 * x7398;
-Tbase TZ x7964 = x1776 * x7397;
-Tbase TZ x7965 = x7963 + x7964;
-Tbase TZ x7966 = x7962 + x7965;
-Tbase TZ x7967 = x7961 + x7966;
-Tbase TZ x7968 = 0x11;
-Tbase TZ x7969 = x7968 * x7967;
-Tbase TZ x7970 = x7960 + x7969;
-Tbase TZ x7971 = x7933 + x7970;
-Tbase TZ x7972 = 0x17;
-Tbase TZ x7973 = x7971 >>> x7972;
-Tbase TZ x7974 = x1776 * x7414;
-Tbase TZ x7975 = x1779 * x7413;
-Tbase TZ x7976 = x1782 * x7412;
-Tbase TZ x7977 = x1785 * x7411;
-Tbase TZ x7978 = x1788 * x7410;
-Tbase TZ x7979 = x1791 * x7409;
-Tbase TZ x7980 = x1794 * x7408;
-Tbase TZ x7981 = x1797 * x7407;
-Tbase TZ x7982 = x1800 * x7406;
-Tbase TZ x7983 = x1803 * x7405;
-Tbase TZ x7984 = x1806 * x7404;
-Tbase TZ x7985 = x1809 * x7403;
-Tbase TZ x7986 = x1812 * x7402;
-Tbase TZ x7987 = x1815 * x7401;
-Tbase TZ x7988 = x1818 * x7400;
-Tbase TZ x7989 = x7987 + x7988;
-Tbase TZ x7990 = x7986 + x7989;
-Tbase TZ x7991 = x7985 + x7990;
-Tbase TZ x7992 = x7984 + x7991;
-Tbase TZ x7993 = x7983 + x7992;
-Tbase TZ x7994 = x7982 + x7993;
-Tbase TZ x7995 = x7981 + x7994;
-Tbase TZ x7996 = x7980 + x7995;
-Tbase TZ x7997 = x7979 + x7996;
-Tbase TZ x7998 = x7978 + x7997;
-Tbase TZ x7999 = x7977 + x7998;
-Tbase TZ x8000 = x7976 + x7999;
-Tbase TZ x8001 = x7975 + x8000;
-Tbase TZ x8002 = x7974 + x8001;
-Tbase TZ x8003 = x1767 * x7399;
-Tbase TZ x8004 = x1770 * x7398;
-Tbase TZ x8005 = x1773 * x7397;
-Tbase TZ x8006 = x8004 + x8005;
-Tbase TZ x8007 = x8003 + x8006;
-Tbase TZ x8008 = 0x11;
-Tbase TZ x8009 = x8008 * x8007;
-Tbase TZ x8010 = x8002 + x8009;
-Tbase TZ x8011 = x7973 + x8010;
-Tbase TZ x8012 = 0x17;
-Tbase TZ x8013 = x8011 >>> x8012;
-Tbase TZ x8014 = x1773 * x7414;
-Tbase TZ x8015 = x1776 * x7413;
-Tbase TZ x8016 = x1779 * x7412;
-Tbase TZ x8017 = x1782 * x7411;
-Tbase TZ x8018 = x1785 * x7410;
-Tbase TZ x8019 = x1788 * x7409;
-Tbase TZ x8020 = x1791 * x7408;
-Tbase TZ x8021 = x1794 * x7407;
-Tbase TZ x8022 = x1797 * x7406;
-Tbase TZ x8023 = x1800 * x7405;
-Tbase TZ x8024 = x1803 * x7404;
-Tbase TZ x8025 = x1806 * x7403;
-Tbase TZ x8026 = x1809 * x7402;
-Tbase TZ x8027 = x1812 * x7401;
-Tbase TZ x8028 = x1815 * x7400;
-Tbase TZ x8029 = x1818 * x7399;
-Tbase TZ x8030 = x8028 + x8029;
-Tbase TZ x8031 = x8027 + x8030;
-Tbase TZ x8032 = x8026 + x8031;
-Tbase TZ x8033 = x8025 + x8032;
-Tbase TZ x8034 = x8024 + x8033;
-Tbase TZ x8035 = x8023 + x8034;
-Tbase TZ x8036 = x8022 + x8035;
-Tbase TZ x8037 = x8021 + x8036;
-Tbase TZ x8038 = x8020 + x8037;
-Tbase TZ x8039 = x8019 + x8038;
-Tbase TZ x8040 = x8018 + x8039;
-Tbase TZ x8041 = x8017 + x8040;
-Tbase TZ x8042 = x8016 + x8041;
-Tbase TZ x8043 = x8015 + x8042;
-Tbase TZ x8044 = x8014 + x8043;
-Tbase TZ x8045 = x1767 * x7398;
-Tbase TZ x8046 = x1770 * x7397;
-Tbase TZ x8047 = x8045 + x8046;
-Tbase TZ x8048 = 0x11;
-Tbase TZ x8049 = x8048 * x8047;
-Tbase TZ x8050 = x8044 + x8049;
-Tbase TZ x8051 = x8013 + x8050;
-Tbase TZ x8052 = 0x17;
-Tbase TZ x8053 = x8051 >>> x8052;
-Tbase TZ x8054 = x1770 * x7414;
-Tbase TZ x8055 = x1773 * x7413;
-Tbase TZ x8056 = x1776 * x7412;
-Tbase TZ x8057 = x1779 * x7411;
-Tbase TZ x8058 = x1782 * x7410;
-Tbase TZ x8059 = x1785 * x7409;
-Tbase TZ x8060 = x1788 * x7408;
-Tbase TZ x8061 = x1791 * x7407;
-Tbase TZ x8062 = x1794 * x7406;
-Tbase TZ x8063 = x1797 * x7405;
-Tbase TZ x8064 = x1800 * x7404;
-Tbase TZ x8065 = x1803 * x7403;
-Tbase TZ x8066 = x1806 * x7402;
-Tbase TZ x8067 = x1809 * x7401;
-Tbase TZ x8068 = x1812 * x7400;
-Tbase TZ x8069 = x1815 * x7399;
-Tbase TZ x8070 = x1818 * x7398;
-Tbase TZ x8071 = x8069 + x8070;
-Tbase TZ x8072 = x8068 + x8071;
-Tbase TZ x8073 = x8067 + x8072;
-Tbase TZ x8074 = x8066 + x8073;
-Tbase TZ x8075 = x8065 + x8074;
-Tbase TZ x8076 = x8064 + x8075;
-Tbase TZ x8077 = x8063 + x8076;
-Tbase TZ x8078 = x8062 + x8077;
-Tbase TZ x8079 = x8061 + x8078;
-Tbase TZ x8080 = x8060 + x8079;
-Tbase TZ x8081 = x8059 + x8080;
-Tbase TZ x8082 = x8058 + x8081;
-Tbase TZ x8083 = x8057 + x8082;
-Tbase TZ x8084 = x8056 + x8083;
-Tbase TZ x8085 = x8055 + x8084;
-Tbase TZ x8086 = x8054 + x8085;
-Tbase TZ x8087 = x1767 * x7397;
-Tbase TZ x8088 = 0x11;
-Tbase TZ x8089 = x8088 * x8087;
-Tbase TZ x8090 = x8086 + x8089;
-Tbase TZ x8091 = x8053 + x8090;
-Tbase TZ x8092 = 0x17;
-Tbase TZ x8093 = x8091 >>> x8092;
-Tbase TZ x8094 = x1767 * x7414;
-Tbase TZ x8095 = x1770 * x7413;
-Tbase TZ x8096 = x1773 * x7412;
-Tbase TZ x8097 = x1776 * x7411;
-Tbase TZ x8098 = x1779 * x7410;
-Tbase TZ x8099 = x1782 * x7409;
-Tbase TZ x8100 = x1785 * x7408;
-Tbase TZ x8101 = x1788 * x7407;
-Tbase TZ x8102 = x1791 * x7406;
-Tbase TZ x8103 = x1794 * x7405;
-Tbase TZ x8104 = x1797 * x7404;
-Tbase TZ x8105 = x1800 * x7403;
-Tbase TZ x8106 = x1803 * x7402;
-Tbase TZ x8107 = x1806 * x7401;
-Tbase TZ x8108 = x1809 * x7400;
-Tbase TZ x8109 = x1812 * x7399;
-Tbase TZ x8110 = x1815 * x7398;
-Tbase TZ x8111 = x1818 * x7397;
-Tbase TZ x8112 = x8110 + x8111;
-Tbase TZ x8113 = x8109 + x8112;
-Tbase TZ x8114 = x8108 + x8113;
-Tbase TZ x8115 = x8107 + x8114;
-Tbase TZ x8116 = x8106 + x8115;
-Tbase TZ x8117 = x8105 + x8116;
-Tbase TZ x8118 = x8104 + x8117;
-Tbase TZ x8119 = x8103 + x8118;
-Tbase TZ x8120 = x8102 + x8119;
-Tbase TZ x8121 = x8101 + x8120;
-Tbase TZ x8122 = x8100 + x8121;
-Tbase TZ x8123 = x8099 + x8122;
-Tbase TZ x8124 = x8098 + x8123;
-Tbase TZ x8125 = x8097 + x8124;
-Tbase TZ x8126 = x8096 + x8125;
-Tbase TZ x8127 = x8095 + x8126;
-Tbase TZ x8128 = x8094 + x8127;
-Tbase TZ x8129 = x8093 + x8128;
-Tbase TZ x8130 = 0x17;
-Tbase TZ x8131 = x8129 >>> x8130;
-Tbase TZ x8132 = 0x11;
-Tbase TZ x8133 = x8132 * x8131;
-Tbase TZ x8134 = 0x7fffff;
-Tbase TZ x8135 = x7451 & x8134;
-Tbase TZ x8136 = x8133 + x8135;
-Tbase TZ x8137 = 0x17;
-Tbase TZ x8138 = x8136 >>> x8137;
-Tbase TZ x8139 = 0x7fffff;
-Tbase TZ x8140 = x7491 & x8139;
-Tbase TZ x8141 = x8138 + x8140;
-Tbase TZ x8142 = 0x7fffff;
-Tbase TZ x8143 = x8129 & x8142;
-Tbase TZ x8144 = 0x7fffff;
-Tbase TZ x8145 = x8091 & x8144;
-Tbase TZ x8146 = 0x7fffff;
-Tbase TZ x8147 = x8051 & x8146;
-Tbase TZ x8148 = 0x7fffff;
-Tbase TZ x8149 = x8011 & x8148;
-Tbase TZ x8150 = 0x7fffff;
-Tbase TZ x8151 = x7971 & x8150;
-Tbase TZ x8152 = 0x7fffff;
-Tbase TZ x8153 = x7931 & x8152;
-Tbase TZ x8154 = 0x7fffff;
-Tbase TZ x8155 = x7891 & x8154;
-Tbase TZ x8156 = 0x7fffff;
-Tbase TZ x8157 = x7851 & x8156;
-Tbase TZ x8158 = 0x7fffff;
-Tbase TZ x8159 = x7811 & x8158;
-Tbase TZ x8160 = 0x7fffff;
-Tbase TZ x8161 = x7771 & x8160;
-Tbase TZ x8162 = 0x7fffff;
-Tbase TZ x8163 = x7731 & x8162;
-Tbase TZ x8164 = 0x7fffff;
-Tbase TZ x8165 = x7691 & x8164;
-Tbase TZ x8166 = 0x7fffff;
-Tbase TZ x8167 = x7651 & x8166;
-Tbase TZ x8168 = 0x7fffff;
-Tbase TZ x8169 = x7611 & x8168;
-Tbase TZ x8170 = 0x7fffff;
-Tbase TZ x8171 = x7571 & x8170;
-Tbase TZ x8172 = 0x17;
-Tbase TZ x8173 = x8141 >>> x8172;
-Tbase TZ x8174 = 0x7fffff;
-Tbase TZ x8175 = x7531 & x8174;
-Tbase TZ x8176 = x8173 + x8175;
-Tbase TZ x8177 = 0x7fffff;
-Tbase TZ x8178 = x8141 & x8177;
-Tbase TZ x8179 = 0x7fffff;
-Tbase TZ x8180 = x8136 & x8179;
-(Return x6593, Return x6595, Return x6597, Return x6599,
-Return x6601, Return x6603, Return x6605, Return x6607,
-Return x6609, Return x6611, Return x6613, Return x6615,
-Return x6617, Return x6619, Return x6621, Return x6626,
-Return x6628, Return x6630,
-(Return x8143, Return x8145, Return x8147, Return x8149,
-Return x8151, Return x8153, Return x8155, Return x8157,
-Return x8159, Return x8161, Return x8163, Return x8165,
-Return x8167, Return x8169, Return x8171, Return x8176,
-Return x8178, Return x8180),
-(Return x4187, Return x4189, Return x4191, Return x4193,
-Return x4195, Return x4197, Return x4199, Return x4201,
-Return x4203, Return x4205, Return x4207, Return x4209,
-Return x4211, Return x4213, Return x4215, Return x4220,
-Return x4222, Return x4224),
-(Return x5827, Return x5829, Return x5831, Return x5833,
-Return x5835, Return x5837, Return x5839, Return x5841,
-Return x5843, Return x5845, Return x5847, Return x5849,
-Return x5851, Return x5853, Return x5855, Return x5860,
-Return x5862, Return x5864))
- : forall var : base_type -> Type,
- expr base_type op
- (TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ ->
- TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> TZ -> ...)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF41417_32Reflective/Reified/LadderStepJavaDisplay.v b/src/SpecificGen/GF41417_32Reflective/Reified/LadderStepJavaDisplay.v
deleted file mode 100644
index bd85dba88..000000000
--- a/src/SpecificGen/GF41417_32Reflective/Reified/LadderStepJavaDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF41417_32Reflective.Reified.LadderStep.
-Require Export Crypto.Reflection.Z.JavaNotations.
-
-Print rladderstepW.
diff --git a/src/SpecificGen/GF41417_32Reflective/Reified/Mul.v b/src/SpecificGen/GF41417_32Reflective/Reified/Mul.v
deleted file mode 100644
index 3c3b38b85..000000000
--- a/src/SpecificGen/GF41417_32Reflective/Reified/Mul.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF41417_32Reflective.CommonBinOp.
-
-Definition rmulZ_sig : rexpr_binop_sig mul. Proof. reify_sig. Defined.
-Definition rmulW := Eval vm_compute in rword_of_Z rmulZ_sig.
-Lemma rmulW_correct_and_bounded_gen : correct_and_bounded_genT rmulW rmulZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rmul_output_bounds := Eval vm_compute in compute_bounds rmulW ExprBinOp_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rmulW_correct_and_bounded
- := ExprBinOp_correct_and_bounded
- rmulW mul rmulZ_sig rmulW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Mul", compute_bounds_for_display rmulW ExprBinOp_bounds).
-Compute ("Mul overflows? ", sanity_compute rmulW ExprBinOp_bounds).
-Compute ("Mul overflows (error if it does)? ", sanity_check rmulW ExprBinOp_bounds).
diff --git a/src/SpecificGen/GF41417_32Reflective/Reified/MulDisplay.log b/src/SpecificGen/GF41417_32Reflective/Reified/MulDisplay.log
deleted file mode 100644
index e2653a551..000000000
--- a/src/SpecificGen/GF41417_32Reflective/Reified/MulDisplay.log
+++ /dev/null
@@ -1,762 +0,0 @@
-rmulW =
-fun var : Syntax.base_type -> Type =>
-λ
-x x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20
- x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31 x32 x33 x34 :
- var Syntax.TZ,
-Tbase Syntax.TZ x35 = x16 * x34;
-Tbase Syntax.TZ x36 = x * x33;
-Tbase Syntax.TZ x37 = x0 * x32;
-Tbase Syntax.TZ x38 = x1 * x31;
-Tbase Syntax.TZ x39 = x2 * x30;
-Tbase Syntax.TZ x40 = x3 * x29;
-Tbase Syntax.TZ x41 = x4 * x28;
-Tbase Syntax.TZ x42 = x5 * x27;
-Tbase Syntax.TZ x43 = x6 * x26;
-Tbase Syntax.TZ x44 = x7 * x25;
-Tbase Syntax.TZ x45 = x8 * x24;
-Tbase Syntax.TZ x46 = x9 * x23;
-Tbase Syntax.TZ x47 = x10 * x22;
-Tbase Syntax.TZ x48 = x11 * x21;
-Tbase Syntax.TZ x49 = x12 * x20;
-Tbase Syntax.TZ x50 = x13 * x19;
-Tbase Syntax.TZ x51 = x14 * x18;
-Tbase Syntax.TZ x52 = x15 * x17;
-Tbase Syntax.TZ x53 = x51 + x52;
-Tbase Syntax.TZ x54 = x50 + x53;
-Tbase Syntax.TZ x55 = x49 + x54;
-Tbase Syntax.TZ x56 = x48 + x55;
-Tbase Syntax.TZ x57 = x47 + x56;
-Tbase Syntax.TZ x58 = x46 + x57;
-Tbase Syntax.TZ x59 = x45 + x58;
-Tbase Syntax.TZ x60 = x44 + x59;
-Tbase Syntax.TZ x61 = x43 + x60;
-Tbase Syntax.TZ x62 = x42 + x61;
-Tbase Syntax.TZ x63 = x41 + x62;
-Tbase Syntax.TZ x64 = x40 + x63;
-Tbase Syntax.TZ x65 = x39 + x64;
-Tbase Syntax.TZ x66 = x38 + x65;
-Tbase Syntax.TZ x67 = x37 + x66;
-Tbase Syntax.TZ x68 = x36 + x67;
-Tbase Syntax.TZ x69 = 0x11 * x68;
-Tbase Syntax.TZ x70 = x35 + x69;
-Tbase Syntax.TZ x71 = x70 >> 0x17;
-Tbase Syntax.TZ x72 = x15 * x34;
-Tbase Syntax.TZ x73 = x16 * x33;
-Tbase Syntax.TZ x74 = x72 + x73;
-Tbase Syntax.TZ x75 = x * x32;
-Tbase Syntax.TZ x76 = x0 * x31;
-Tbase Syntax.TZ x77 = x1 * x30;
-Tbase Syntax.TZ x78 = x2 * x29;
-Tbase Syntax.TZ x79 = x3 * x28;
-Tbase Syntax.TZ x80 = x4 * x27;
-Tbase Syntax.TZ x81 = x5 * x26;
-Tbase Syntax.TZ x82 = x6 * x25;
-Tbase Syntax.TZ x83 = x7 * x24;
-Tbase Syntax.TZ x84 = x8 * x23;
-Tbase Syntax.TZ x85 = x9 * x22;
-Tbase Syntax.TZ x86 = x10 * x21;
-Tbase Syntax.TZ x87 = x11 * x20;
-Tbase Syntax.TZ x88 = x12 * x19;
-Tbase Syntax.TZ x89 = x13 * x18;
-Tbase Syntax.TZ x90 = x14 * x17;
-Tbase Syntax.TZ x91 = x89 + x90;
-Tbase Syntax.TZ x92 = x88 + x91;
-Tbase Syntax.TZ x93 = x87 + x92;
-Tbase Syntax.TZ x94 = x86 + x93;
-Tbase Syntax.TZ x95 = x85 + x94;
-Tbase Syntax.TZ x96 = x84 + x95;
-Tbase Syntax.TZ x97 = x83 + x96;
-Tbase Syntax.TZ x98 = x82 + x97;
-Tbase Syntax.TZ x99 = x81 + x98;
-Tbase Syntax.TZ x100 = x80 + x99;
-Tbase Syntax.TZ x101 = x79 + x100;
-Tbase Syntax.TZ x102 = x78 + x101;
-Tbase Syntax.TZ x103 = x77 + x102;
-Tbase Syntax.TZ x104 = x76 + x103;
-Tbase Syntax.TZ x105 = x75 + x104;
-Tbase Syntax.TZ x106 = 0x11 * x105;
-Tbase Syntax.TZ x107 = x74 + x106;
-Tbase Syntax.TZ x108 = x71 + x107;
-Tbase Syntax.TZ x109 = x108 >> 0x17;
-Tbase Syntax.TZ x110 = x14 * x34;
-Tbase Syntax.TZ x111 = x15 * x33;
-Tbase Syntax.TZ x112 = x16 * x32;
-Tbase Syntax.TZ x113 = x111 + x112;
-Tbase Syntax.TZ x114 = x110 + x113;
-Tbase Syntax.TZ x115 = x * x31;
-Tbase Syntax.TZ x116 = x0 * x30;
-Tbase Syntax.TZ x117 = x1 * x29;
-Tbase Syntax.TZ x118 = x2 * x28;
-Tbase Syntax.TZ x119 = x3 * x27;
-Tbase Syntax.TZ x120 = x4 * x26;
-Tbase Syntax.TZ x121 = x5 * x25;
-Tbase Syntax.TZ x122 = x6 * x24;
-Tbase Syntax.TZ x123 = x7 * x23;
-Tbase Syntax.TZ x124 = x8 * x22;
-Tbase Syntax.TZ x125 = x9 * x21;
-Tbase Syntax.TZ x126 = x10 * x20;
-Tbase Syntax.TZ x127 = x11 * x19;
-Tbase Syntax.TZ x128 = x12 * x18;
-Tbase Syntax.TZ x129 = x13 * x17;
-Tbase Syntax.TZ x130 = x128 + x129;
-Tbase Syntax.TZ x131 = x127 + x130;
-Tbase Syntax.TZ x132 = x126 + x131;
-Tbase Syntax.TZ x133 = x125 + x132;
-Tbase Syntax.TZ x134 = x124 + x133;
-Tbase Syntax.TZ x135 = x123 + x134;
-Tbase Syntax.TZ x136 = x122 + x135;
-Tbase Syntax.TZ x137 = x121 + x136;
-Tbase Syntax.TZ x138 = x120 + x137;
-Tbase Syntax.TZ x139 = x119 + x138;
-Tbase Syntax.TZ x140 = x118 + x139;
-Tbase Syntax.TZ x141 = x117 + x140;
-Tbase Syntax.TZ x142 = x116 + x141;
-Tbase Syntax.TZ x143 = x115 + x142;
-Tbase Syntax.TZ x144 = 0x11 * x143;
-Tbase Syntax.TZ x145 = x114 + x144;
-Tbase Syntax.TZ x146 = x109 + x145;
-Tbase Syntax.TZ x147 = x146 >> 0x17;
-Tbase Syntax.TZ x148 = x13 * x34;
-Tbase Syntax.TZ x149 = x14 * x33;
-Tbase Syntax.TZ x150 = x15 * x32;
-Tbase Syntax.TZ x151 = x16 * x31;
-Tbase Syntax.TZ x152 = x150 + x151;
-Tbase Syntax.TZ x153 = x149 + x152;
-Tbase Syntax.TZ x154 = x148 + x153;
-Tbase Syntax.TZ x155 = x * x30;
-Tbase Syntax.TZ x156 = x0 * x29;
-Tbase Syntax.TZ x157 = x1 * x28;
-Tbase Syntax.TZ x158 = x2 * x27;
-Tbase Syntax.TZ x159 = x3 * x26;
-Tbase Syntax.TZ x160 = x4 * x25;
-Tbase Syntax.TZ x161 = x5 * x24;
-Tbase Syntax.TZ x162 = x6 * x23;
-Tbase Syntax.TZ x163 = x7 * x22;
-Tbase Syntax.TZ x164 = x8 * x21;
-Tbase Syntax.TZ x165 = x9 * x20;
-Tbase Syntax.TZ x166 = x10 * x19;
-Tbase Syntax.TZ x167 = x11 * x18;
-Tbase Syntax.TZ x168 = x12 * x17;
-Tbase Syntax.TZ x169 = x167 + x168;
-Tbase Syntax.TZ x170 = x166 + x169;
-Tbase Syntax.TZ x171 = x165 + x170;
-Tbase Syntax.TZ x172 = x164 + x171;
-Tbase Syntax.TZ x173 = x163 + x172;
-Tbase Syntax.TZ x174 = x162 + x173;
-Tbase Syntax.TZ x175 = x161 + x174;
-Tbase Syntax.TZ x176 = x160 + x175;
-Tbase Syntax.TZ x177 = x159 + x176;
-Tbase Syntax.TZ x178 = x158 + x177;
-Tbase Syntax.TZ x179 = x157 + x178;
-Tbase Syntax.TZ x180 = x156 + x179;
-Tbase Syntax.TZ x181 = x155 + x180;
-Tbase Syntax.TZ x182 = 0x11 * x181;
-Tbase Syntax.TZ x183 = x154 + x182;
-Tbase Syntax.TZ x184 = x147 + x183;
-Tbase Syntax.TZ x185 = x184 >> 0x17;
-Tbase Syntax.TZ x186 = x12 * x34;
-Tbase Syntax.TZ x187 = x13 * x33;
-Tbase Syntax.TZ x188 = x14 * x32;
-Tbase Syntax.TZ x189 = x15 * x31;
-Tbase Syntax.TZ x190 = x16 * x30;
-Tbase Syntax.TZ x191 = x189 + x190;
-Tbase Syntax.TZ x192 = x188 + x191;
-Tbase Syntax.TZ x193 = x187 + x192;
-Tbase Syntax.TZ x194 = x186 + x193;
-Tbase Syntax.TZ x195 = x * x29;
-Tbase Syntax.TZ x196 = x0 * x28;
-Tbase Syntax.TZ x197 = x1 * x27;
-Tbase Syntax.TZ x198 = x2 * x26;
-Tbase Syntax.TZ x199 = x3 * x25;
-Tbase Syntax.TZ x200 = x4 * x24;
-Tbase Syntax.TZ x201 = x5 * x23;
-Tbase Syntax.TZ x202 = x6 * x22;
-Tbase Syntax.TZ x203 = x7 * x21;
-Tbase Syntax.TZ x204 = x8 * x20;
-Tbase Syntax.TZ x205 = x9 * x19;
-Tbase Syntax.TZ x206 = x10 * x18;
-Tbase Syntax.TZ x207 = x11 * x17;
-Tbase Syntax.TZ x208 = x206 + x207;
-Tbase Syntax.TZ x209 = x205 + x208;
-Tbase Syntax.TZ x210 = x204 + x209;
-Tbase Syntax.TZ x211 = x203 + x210;
-Tbase Syntax.TZ x212 = x202 + x211;
-Tbase Syntax.TZ x213 = x201 + x212;
-Tbase Syntax.TZ x214 = x200 + x213;
-Tbase Syntax.TZ x215 = x199 + x214;
-Tbase Syntax.TZ x216 = x198 + x215;
-Tbase Syntax.TZ x217 = x197 + x216;
-Tbase Syntax.TZ x218 = x196 + x217;
-Tbase Syntax.TZ x219 = x195 + x218;
-Tbase Syntax.TZ x220 = 0x11 * x219;
-Tbase Syntax.TZ x221 = x194 + x220;
-Tbase Syntax.TZ x222 = x185 + x221;
-Tbase Syntax.TZ x223 = x222 >> 0x17;
-Tbase Syntax.TZ x224 = x11 * x34;
-Tbase Syntax.TZ x225 = x12 * x33;
-Tbase Syntax.TZ x226 = x13 * x32;
-Tbase Syntax.TZ x227 = x14 * x31;
-Tbase Syntax.TZ x228 = x15 * x30;
-Tbase Syntax.TZ x229 = x16 * x29;
-Tbase Syntax.TZ x230 = x228 + x229;
-Tbase Syntax.TZ x231 = x227 + x230;
-Tbase Syntax.TZ x232 = x226 + x231;
-Tbase Syntax.TZ x233 = x225 + x232;
-Tbase Syntax.TZ x234 = x224 + x233;
-Tbase Syntax.TZ x235 = x * x28;
-Tbase Syntax.TZ x236 = x0 * x27;
-Tbase Syntax.TZ x237 = x1 * x26;
-Tbase Syntax.TZ x238 = x2 * x25;
-Tbase Syntax.TZ x239 = x3 * x24;
-Tbase Syntax.TZ x240 = x4 * x23;
-Tbase Syntax.TZ x241 = x5 * x22;
-Tbase Syntax.TZ x242 = x6 * x21;
-Tbase Syntax.TZ x243 = x7 * x20;
-Tbase Syntax.TZ x244 = x8 * x19;
-Tbase Syntax.TZ x245 = x9 * x18;
-Tbase Syntax.TZ x246 = x10 * x17;
-Tbase Syntax.TZ x247 = x245 + x246;
-Tbase Syntax.TZ x248 = x244 + x247;
-Tbase Syntax.TZ x249 = x243 + x248;
-Tbase Syntax.TZ x250 = x242 + x249;
-Tbase Syntax.TZ x251 = x241 + x250;
-Tbase Syntax.TZ x252 = x240 + x251;
-Tbase Syntax.TZ x253 = x239 + x252;
-Tbase Syntax.TZ x254 = x238 + x253;
-Tbase Syntax.TZ x255 = x237 + x254;
-Tbase Syntax.TZ x256 = x236 + x255;
-Tbase Syntax.TZ x257 = x235 + x256;
-Tbase Syntax.TZ x258 = 0x11 * x257;
-Tbase Syntax.TZ x259 = x234 + x258;
-Tbase Syntax.TZ x260 = x223 + x259;
-Tbase Syntax.TZ x261 = x260 >> 0x17;
-Tbase Syntax.TZ x262 = x10 * x34;
-Tbase Syntax.TZ x263 = x11 * x33;
-Tbase Syntax.TZ x264 = x12 * x32;
-Tbase Syntax.TZ x265 = x13 * x31;
-Tbase Syntax.TZ x266 = x14 * x30;
-Tbase Syntax.TZ x267 = x15 * x29;
-Tbase Syntax.TZ x268 = x16 * x28;
-Tbase Syntax.TZ x269 = x267 + x268;
-Tbase Syntax.TZ x270 = x266 + x269;
-Tbase Syntax.TZ x271 = x265 + x270;
-Tbase Syntax.TZ x272 = x264 + x271;
-Tbase Syntax.TZ x273 = x263 + x272;
-Tbase Syntax.TZ x274 = x262 + x273;
-Tbase Syntax.TZ x275 = x * x27;
-Tbase Syntax.TZ x276 = x0 * x26;
-Tbase Syntax.TZ x277 = x1 * x25;
-Tbase Syntax.TZ x278 = x2 * x24;
-Tbase Syntax.TZ x279 = x3 * x23;
-Tbase Syntax.TZ x280 = x4 * x22;
-Tbase Syntax.TZ x281 = x5 * x21;
-Tbase Syntax.TZ x282 = x6 * x20;
-Tbase Syntax.TZ x283 = x7 * x19;
-Tbase Syntax.TZ x284 = x8 * x18;
-Tbase Syntax.TZ x285 = x9 * x17;
-Tbase Syntax.TZ x286 = x284 + x285;
-Tbase Syntax.TZ x287 = x283 + x286;
-Tbase Syntax.TZ x288 = x282 + x287;
-Tbase Syntax.TZ x289 = x281 + x288;
-Tbase Syntax.TZ x290 = x280 + x289;
-Tbase Syntax.TZ x291 = x279 + x290;
-Tbase Syntax.TZ x292 = x278 + x291;
-Tbase Syntax.TZ x293 = x277 + x292;
-Tbase Syntax.TZ x294 = x276 + x293;
-Tbase Syntax.TZ x295 = x275 + x294;
-Tbase Syntax.TZ x296 = 0x11 * x295;
-Tbase Syntax.TZ x297 = x274 + x296;
-Tbase Syntax.TZ x298 = x261 + x297;
-Tbase Syntax.TZ x299 = x298 >> 0x17;
-Tbase Syntax.TZ x300 = x9 * x34;
-Tbase Syntax.TZ x301 = x10 * x33;
-Tbase Syntax.TZ x302 = x11 * x32;
-Tbase Syntax.TZ x303 = x12 * x31;
-Tbase Syntax.TZ x304 = x13 * x30;
-Tbase Syntax.TZ x305 = x14 * x29;
-Tbase Syntax.TZ x306 = x15 * x28;
-Tbase Syntax.TZ x307 = x16 * x27;
-Tbase Syntax.TZ x308 = x306 + x307;
-Tbase Syntax.TZ x309 = x305 + x308;
-Tbase Syntax.TZ x310 = x304 + x309;
-Tbase Syntax.TZ x311 = x303 + x310;
-Tbase Syntax.TZ x312 = x302 + x311;
-Tbase Syntax.TZ x313 = x301 + x312;
-Tbase Syntax.TZ x314 = x300 + x313;
-Tbase Syntax.TZ x315 = x * x26;
-Tbase Syntax.TZ x316 = x0 * x25;
-Tbase Syntax.TZ x317 = x1 * x24;
-Tbase Syntax.TZ x318 = x2 * x23;
-Tbase Syntax.TZ x319 = x3 * x22;
-Tbase Syntax.TZ x320 = x4 * x21;
-Tbase Syntax.TZ x321 = x5 * x20;
-Tbase Syntax.TZ x322 = x6 * x19;
-Tbase Syntax.TZ x323 = x7 * x18;
-Tbase Syntax.TZ x324 = x8 * x17;
-Tbase Syntax.TZ x325 = x323 + x324;
-Tbase Syntax.TZ x326 = x322 + x325;
-Tbase Syntax.TZ x327 = x321 + x326;
-Tbase Syntax.TZ x328 = x320 + x327;
-Tbase Syntax.TZ x329 = x319 + x328;
-Tbase Syntax.TZ x330 = x318 + x329;
-Tbase Syntax.TZ x331 = x317 + x330;
-Tbase Syntax.TZ x332 = x316 + x331;
-Tbase Syntax.TZ x333 = x315 + x332;
-Tbase Syntax.TZ x334 = 0x11 * x333;
-Tbase Syntax.TZ x335 = x314 + x334;
-Tbase Syntax.TZ x336 = x299 + x335;
-Tbase Syntax.TZ x337 = x336 >> 0x17;
-Tbase Syntax.TZ x338 = x8 * x34;
-Tbase Syntax.TZ x339 = x9 * x33;
-Tbase Syntax.TZ x340 = x10 * x32;
-Tbase Syntax.TZ x341 = x11 * x31;
-Tbase Syntax.TZ x342 = x12 * x30;
-Tbase Syntax.TZ x343 = x13 * x29;
-Tbase Syntax.TZ x344 = x14 * x28;
-Tbase Syntax.TZ x345 = x15 * x27;
-Tbase Syntax.TZ x346 = x16 * x26;
-Tbase Syntax.TZ x347 = x345 + x346;
-Tbase Syntax.TZ x348 = x344 + x347;
-Tbase Syntax.TZ x349 = x343 + x348;
-Tbase Syntax.TZ x350 = x342 + x349;
-Tbase Syntax.TZ x351 = x341 + x350;
-Tbase Syntax.TZ x352 = x340 + x351;
-Tbase Syntax.TZ x353 = x339 + x352;
-Tbase Syntax.TZ x354 = x338 + x353;
-Tbase Syntax.TZ x355 = x * x25;
-Tbase Syntax.TZ x356 = x0 * x24;
-Tbase Syntax.TZ x357 = x1 * x23;
-Tbase Syntax.TZ x358 = x2 * x22;
-Tbase Syntax.TZ x359 = x3 * x21;
-Tbase Syntax.TZ x360 = x4 * x20;
-Tbase Syntax.TZ x361 = x5 * x19;
-Tbase Syntax.TZ x362 = x6 * x18;
-Tbase Syntax.TZ x363 = x7 * x17;
-Tbase Syntax.TZ x364 = x362 + x363;
-Tbase Syntax.TZ x365 = x361 + x364;
-Tbase Syntax.TZ x366 = x360 + x365;
-Tbase Syntax.TZ x367 = x359 + x366;
-Tbase Syntax.TZ x368 = x358 + x367;
-Tbase Syntax.TZ x369 = x357 + x368;
-Tbase Syntax.TZ x370 = x356 + x369;
-Tbase Syntax.TZ x371 = x355 + x370;
-Tbase Syntax.TZ x372 = 0x11 * x371;
-Tbase Syntax.TZ x373 = x354 + x372;
-Tbase Syntax.TZ x374 = x337 + x373;
-Tbase Syntax.TZ x375 = x374 >> 0x17;
-Tbase Syntax.TZ x376 = x7 * x34;
-Tbase Syntax.TZ x377 = x8 * x33;
-Tbase Syntax.TZ x378 = x9 * x32;
-Tbase Syntax.TZ x379 = x10 * x31;
-Tbase Syntax.TZ x380 = x11 * x30;
-Tbase Syntax.TZ x381 = x12 * x29;
-Tbase Syntax.TZ x382 = x13 * x28;
-Tbase Syntax.TZ x383 = x14 * x27;
-Tbase Syntax.TZ x384 = x15 * x26;
-Tbase Syntax.TZ x385 = x16 * x25;
-Tbase Syntax.TZ x386 = x384 + x385;
-Tbase Syntax.TZ x387 = x383 + x386;
-Tbase Syntax.TZ x388 = x382 + x387;
-Tbase Syntax.TZ x389 = x381 + x388;
-Tbase Syntax.TZ x390 = x380 + x389;
-Tbase Syntax.TZ x391 = x379 + x390;
-Tbase Syntax.TZ x392 = x378 + x391;
-Tbase Syntax.TZ x393 = x377 + x392;
-Tbase Syntax.TZ x394 = x376 + x393;
-Tbase Syntax.TZ x395 = x * x24;
-Tbase Syntax.TZ x396 = x0 * x23;
-Tbase Syntax.TZ x397 = x1 * x22;
-Tbase Syntax.TZ x398 = x2 * x21;
-Tbase Syntax.TZ x399 = x3 * x20;
-Tbase Syntax.TZ x400 = x4 * x19;
-Tbase Syntax.TZ x401 = x5 * x18;
-Tbase Syntax.TZ x402 = x6 * x17;
-Tbase Syntax.TZ x403 = x401 + x402;
-Tbase Syntax.TZ x404 = x400 + x403;
-Tbase Syntax.TZ x405 = x399 + x404;
-Tbase Syntax.TZ x406 = x398 + x405;
-Tbase Syntax.TZ x407 = x397 + x406;
-Tbase Syntax.TZ x408 = x396 + x407;
-Tbase Syntax.TZ x409 = x395 + x408;
-Tbase Syntax.TZ x410 = 0x11 * x409;
-Tbase Syntax.TZ x411 = x394 + x410;
-Tbase Syntax.TZ x412 = x375 + x411;
-Tbase Syntax.TZ x413 = x412 >> 0x17;
-Tbase Syntax.TZ x414 = x6 * x34;
-Tbase Syntax.TZ x415 = x7 * x33;
-Tbase Syntax.TZ x416 = x8 * x32;
-Tbase Syntax.TZ x417 = x9 * x31;
-Tbase Syntax.TZ x418 = x10 * x30;
-Tbase Syntax.TZ x419 = x11 * x29;
-Tbase Syntax.TZ x420 = x12 * x28;
-Tbase Syntax.TZ x421 = x13 * x27;
-Tbase Syntax.TZ x422 = x14 * x26;
-Tbase Syntax.TZ x423 = x15 * x25;
-Tbase Syntax.TZ x424 = x16 * x24;
-Tbase Syntax.TZ x425 = x423 + x424;
-Tbase Syntax.TZ x426 = x422 + x425;
-Tbase Syntax.TZ x427 = x421 + x426;
-Tbase Syntax.TZ x428 = x420 + x427;
-Tbase Syntax.TZ x429 = x419 + x428;
-Tbase Syntax.TZ x430 = x418 + x429;
-Tbase Syntax.TZ x431 = x417 + x430;
-Tbase Syntax.TZ x432 = x416 + x431;
-Tbase Syntax.TZ x433 = x415 + x432;
-Tbase Syntax.TZ x434 = x414 + x433;
-Tbase Syntax.TZ x435 = x * x23;
-Tbase Syntax.TZ x436 = x0 * x22;
-Tbase Syntax.TZ x437 = x1 * x21;
-Tbase Syntax.TZ x438 = x2 * x20;
-Tbase Syntax.TZ x439 = x3 * x19;
-Tbase Syntax.TZ x440 = x4 * x18;
-Tbase Syntax.TZ x441 = x5 * x17;
-Tbase Syntax.TZ x442 = x440 + x441;
-Tbase Syntax.TZ x443 = x439 + x442;
-Tbase Syntax.TZ x444 = x438 + x443;
-Tbase Syntax.TZ x445 = x437 + x444;
-Tbase Syntax.TZ x446 = x436 + x445;
-Tbase Syntax.TZ x447 = x435 + x446;
-Tbase Syntax.TZ x448 = 0x11 * x447;
-Tbase Syntax.TZ x449 = x434 + x448;
-Tbase Syntax.TZ x450 = x413 + x449;
-Tbase Syntax.TZ x451 = x450 >> 0x17;
-Tbase Syntax.TZ x452 = x5 * x34;
-Tbase Syntax.TZ x453 = x6 * x33;
-Tbase Syntax.TZ x454 = x7 * x32;
-Tbase Syntax.TZ x455 = x8 * x31;
-Tbase Syntax.TZ x456 = x9 * x30;
-Tbase Syntax.TZ x457 = x10 * x29;
-Tbase Syntax.TZ x458 = x11 * x28;
-Tbase Syntax.TZ x459 = x12 * x27;
-Tbase Syntax.TZ x460 = x13 * x26;
-Tbase Syntax.TZ x461 = x14 * x25;
-Tbase Syntax.TZ x462 = x15 * x24;
-Tbase Syntax.TZ x463 = x16 * x23;
-Tbase Syntax.TZ x464 = x462 + x463;
-Tbase Syntax.TZ x465 = x461 + x464;
-Tbase Syntax.TZ x466 = x460 + x465;
-Tbase Syntax.TZ x467 = x459 + x466;
-Tbase Syntax.TZ x468 = x458 + x467;
-Tbase Syntax.TZ x469 = x457 + x468;
-Tbase Syntax.TZ x470 = x456 + x469;
-Tbase Syntax.TZ x471 = x455 + x470;
-Tbase Syntax.TZ x472 = x454 + x471;
-Tbase Syntax.TZ x473 = x453 + x472;
-Tbase Syntax.TZ x474 = x452 + x473;
-Tbase Syntax.TZ x475 = x * x22;
-Tbase Syntax.TZ x476 = x0 * x21;
-Tbase Syntax.TZ x477 = x1 * x20;
-Tbase Syntax.TZ x478 = x2 * x19;
-Tbase Syntax.TZ x479 = x3 * x18;
-Tbase Syntax.TZ x480 = x4 * x17;
-Tbase Syntax.TZ x481 = x479 + x480;
-Tbase Syntax.TZ x482 = x478 + x481;
-Tbase Syntax.TZ x483 = x477 + x482;
-Tbase Syntax.TZ x484 = x476 + x483;
-Tbase Syntax.TZ x485 = x475 + x484;
-Tbase Syntax.TZ x486 = 0x11 * x485;
-Tbase Syntax.TZ x487 = x474 + x486;
-Tbase Syntax.TZ x488 = x451 + x487;
-Tbase Syntax.TZ x489 = x488 >> 0x17;
-Tbase Syntax.TZ x490 = x4 * x34;
-Tbase Syntax.TZ x491 = x5 * x33;
-Tbase Syntax.TZ x492 = x6 * x32;
-Tbase Syntax.TZ x493 = x7 * x31;
-Tbase Syntax.TZ x494 = x8 * x30;
-Tbase Syntax.TZ x495 = x9 * x29;
-Tbase Syntax.TZ x496 = x10 * x28;
-Tbase Syntax.TZ x497 = x11 * x27;
-Tbase Syntax.TZ x498 = x12 * x26;
-Tbase Syntax.TZ x499 = x13 * x25;
-Tbase Syntax.TZ x500 = x14 * x24;
-Tbase Syntax.TZ x501 = x15 * x23;
-Tbase Syntax.TZ x502 = x16 * x22;
-Tbase Syntax.TZ x503 = x501 + x502;
-Tbase Syntax.TZ x504 = x500 + x503;
-Tbase Syntax.TZ x505 = x499 + x504;
-Tbase Syntax.TZ x506 = x498 + x505;
-Tbase Syntax.TZ x507 = x497 + x506;
-Tbase Syntax.TZ x508 = x496 + x507;
-Tbase Syntax.TZ x509 = x495 + x508;
-Tbase Syntax.TZ x510 = x494 + x509;
-Tbase Syntax.TZ x511 = x493 + x510;
-Tbase Syntax.TZ x512 = x492 + x511;
-Tbase Syntax.TZ x513 = x491 + x512;
-Tbase Syntax.TZ x514 = x490 + x513;
-Tbase Syntax.TZ x515 = x * x21;
-Tbase Syntax.TZ x516 = x0 * x20;
-Tbase Syntax.TZ x517 = x1 * x19;
-Tbase Syntax.TZ x518 = x2 * x18;
-Tbase Syntax.TZ x519 = x3 * x17;
-Tbase Syntax.TZ x520 = x518 + x519;
-Tbase Syntax.TZ x521 = x517 + x520;
-Tbase Syntax.TZ x522 = x516 + x521;
-Tbase Syntax.TZ x523 = x515 + x522;
-Tbase Syntax.TZ x524 = 0x11 * x523;
-Tbase Syntax.TZ x525 = x514 + x524;
-Tbase Syntax.TZ x526 = x489 + x525;
-Tbase Syntax.TZ x527 = x526 >> 0x17;
-Tbase Syntax.TZ x528 = x3 * x34;
-Tbase Syntax.TZ x529 = x4 * x33;
-Tbase Syntax.TZ x530 = x5 * x32;
-Tbase Syntax.TZ x531 = x6 * x31;
-Tbase Syntax.TZ x532 = x7 * x30;
-Tbase Syntax.TZ x533 = x8 * x29;
-Tbase Syntax.TZ x534 = x9 * x28;
-Tbase Syntax.TZ x535 = x10 * x27;
-Tbase Syntax.TZ x536 = x11 * x26;
-Tbase Syntax.TZ x537 = x12 * x25;
-Tbase Syntax.TZ x538 = x13 * x24;
-Tbase Syntax.TZ x539 = x14 * x23;
-Tbase Syntax.TZ x540 = x15 * x22;
-Tbase Syntax.TZ x541 = x16 * x21;
-Tbase Syntax.TZ x542 = x540 + x541;
-Tbase Syntax.TZ x543 = x539 + x542;
-Tbase Syntax.TZ x544 = x538 + x543;
-Tbase Syntax.TZ x545 = x537 + x544;
-Tbase Syntax.TZ x546 = x536 + x545;
-Tbase Syntax.TZ x547 = x535 + x546;
-Tbase Syntax.TZ x548 = x534 + x547;
-Tbase Syntax.TZ x549 = x533 + x548;
-Tbase Syntax.TZ x550 = x532 + x549;
-Tbase Syntax.TZ x551 = x531 + x550;
-Tbase Syntax.TZ x552 = x530 + x551;
-Tbase Syntax.TZ x553 = x529 + x552;
-Tbase Syntax.TZ x554 = x528 + x553;
-Tbase Syntax.TZ x555 = x * x20;
-Tbase Syntax.TZ x556 = x0 * x19;
-Tbase Syntax.TZ x557 = x1 * x18;
-Tbase Syntax.TZ x558 = x2 * x17;
-Tbase Syntax.TZ x559 = x557 + x558;
-Tbase Syntax.TZ x560 = x556 + x559;
-Tbase Syntax.TZ x561 = x555 + x560;
-Tbase Syntax.TZ x562 = 0x11 * x561;
-Tbase Syntax.TZ x563 = x554 + x562;
-Tbase Syntax.TZ x564 = x527 + x563;
-Tbase Syntax.TZ x565 = x564 >> 0x17;
-Tbase Syntax.TZ x566 = x2 * x34;
-Tbase Syntax.TZ x567 = x3 * x33;
-Tbase Syntax.TZ x568 = x4 * x32;
-Tbase Syntax.TZ x569 = x5 * x31;
-Tbase Syntax.TZ x570 = x6 * x30;
-Tbase Syntax.TZ x571 = x7 * x29;
-Tbase Syntax.TZ x572 = x8 * x28;
-Tbase Syntax.TZ x573 = x9 * x27;
-Tbase Syntax.TZ x574 = x10 * x26;
-Tbase Syntax.TZ x575 = x11 * x25;
-Tbase Syntax.TZ x576 = x12 * x24;
-Tbase Syntax.TZ x577 = x13 * x23;
-Tbase Syntax.TZ x578 = x14 * x22;
-Tbase Syntax.TZ x579 = x15 * x21;
-Tbase Syntax.TZ x580 = x16 * x20;
-Tbase Syntax.TZ x581 = x579 + x580;
-Tbase Syntax.TZ x582 = x578 + x581;
-Tbase Syntax.TZ x583 = x577 + x582;
-Tbase Syntax.TZ x584 = x576 + x583;
-Tbase Syntax.TZ x585 = x575 + x584;
-Tbase Syntax.TZ x586 = x574 + x585;
-Tbase Syntax.TZ x587 = x573 + x586;
-Tbase Syntax.TZ x588 = x572 + x587;
-Tbase Syntax.TZ x589 = x571 + x588;
-Tbase Syntax.TZ x590 = x570 + x589;
-Tbase Syntax.TZ x591 = x569 + x590;
-Tbase Syntax.TZ x592 = x568 + x591;
-Tbase Syntax.TZ x593 = x567 + x592;
-Tbase Syntax.TZ x594 = x566 + x593;
-Tbase Syntax.TZ x595 = x * x19;
-Tbase Syntax.TZ x596 = x0 * x18;
-Tbase Syntax.TZ x597 = x1 * x17;
-Tbase Syntax.TZ x598 = x596 + x597;
-Tbase Syntax.TZ x599 = x595 + x598;
-Tbase Syntax.TZ x600 = 0x11 * x599;
-Tbase Syntax.TZ x601 = x594 + x600;
-Tbase Syntax.TZ x602 = x565 + x601;
-Tbase Syntax.TZ x603 = x602 >> 0x17;
-Tbase Syntax.TZ x604 = x1 * x34;
-Tbase Syntax.TZ x605 = x2 * x33;
-Tbase Syntax.TZ x606 = x3 * x32;
-Tbase Syntax.TZ x607 = x4 * x31;
-Tbase Syntax.TZ x608 = x5 * x30;
-Tbase Syntax.TZ x609 = x6 * x29;
-Tbase Syntax.TZ x610 = x7 * x28;
-Tbase Syntax.TZ x611 = x8 * x27;
-Tbase Syntax.TZ x612 = x9 * x26;
-Tbase Syntax.TZ x613 = x10 * x25;
-Tbase Syntax.TZ x614 = x11 * x24;
-Tbase Syntax.TZ x615 = x12 * x23;
-Tbase Syntax.TZ x616 = x13 * x22;
-Tbase Syntax.TZ x617 = x14 * x21;
-Tbase Syntax.TZ x618 = x15 * x20;
-Tbase Syntax.TZ x619 = x16 * x19;
-Tbase Syntax.TZ x620 = x618 + x619;
-Tbase Syntax.TZ x621 = x617 + x620;
-Tbase Syntax.TZ x622 = x616 + x621;
-Tbase Syntax.TZ x623 = x615 + x622;
-Tbase Syntax.TZ x624 = x614 + x623;
-Tbase Syntax.TZ x625 = x613 + x624;
-Tbase Syntax.TZ x626 = x612 + x625;
-Tbase Syntax.TZ x627 = x611 + x626;
-Tbase Syntax.TZ x628 = x610 + x627;
-Tbase Syntax.TZ x629 = x609 + x628;
-Tbase Syntax.TZ x630 = x608 + x629;
-Tbase Syntax.TZ x631 = x607 + x630;
-Tbase Syntax.TZ x632 = x606 + x631;
-Tbase Syntax.TZ x633 = x605 + x632;
-Tbase Syntax.TZ x634 = x604 + x633;
-Tbase Syntax.TZ x635 = x * x18;
-Tbase Syntax.TZ x636 = x0 * x17;
-Tbase Syntax.TZ x637 = x635 + x636;
-Tbase Syntax.TZ x638 = 0x11 * x637;
-Tbase Syntax.TZ x639 = x634 + x638;
-Tbase Syntax.TZ x640 = x603 + x639;
-Tbase Syntax.TZ x641 = x640 >> 0x17;
-Tbase Syntax.TZ x642 = x0 * x34;
-Tbase Syntax.TZ x643 = x1 * x33;
-Tbase Syntax.TZ x644 = x2 * x32;
-Tbase Syntax.TZ x645 = x3 * x31;
-Tbase Syntax.TZ x646 = x4 * x30;
-Tbase Syntax.TZ x647 = x5 * x29;
-Tbase Syntax.TZ x648 = x6 * x28;
-Tbase Syntax.TZ x649 = x7 * x27;
-Tbase Syntax.TZ x650 = x8 * x26;
-Tbase Syntax.TZ x651 = x9 * x25;
-Tbase Syntax.TZ x652 = x10 * x24;
-Tbase Syntax.TZ x653 = x11 * x23;
-Tbase Syntax.TZ x654 = x12 * x22;
-Tbase Syntax.TZ x655 = x13 * x21;
-Tbase Syntax.TZ x656 = x14 * x20;
-Tbase Syntax.TZ x657 = x15 * x19;
-Tbase Syntax.TZ x658 = x16 * x18;
-Tbase Syntax.TZ x659 = x657 + x658;
-Tbase Syntax.TZ x660 = x656 + x659;
-Tbase Syntax.TZ x661 = x655 + x660;
-Tbase Syntax.TZ x662 = x654 + x661;
-Tbase Syntax.TZ x663 = x653 + x662;
-Tbase Syntax.TZ x664 = x652 + x663;
-Tbase Syntax.TZ x665 = x651 + x664;
-Tbase Syntax.TZ x666 = x650 + x665;
-Tbase Syntax.TZ x667 = x649 + x666;
-Tbase Syntax.TZ x668 = x648 + x667;
-Tbase Syntax.TZ x669 = x647 + x668;
-Tbase Syntax.TZ x670 = x646 + x669;
-Tbase Syntax.TZ x671 = x645 + x670;
-Tbase Syntax.TZ x672 = x644 + x671;
-Tbase Syntax.TZ x673 = x643 + x672;
-Tbase Syntax.TZ x674 = x642 + x673;
-Tbase Syntax.TZ x675 = x * x17;
-Tbase Syntax.TZ x676 = 0x11 * x675;
-Tbase Syntax.TZ x677 = x674 + x676;
-Tbase Syntax.TZ x678 = x641 + x677;
-Tbase Syntax.TZ x679 = x678 >> 0x17;
-Tbase Syntax.TZ x680 = x * x34;
-Tbase Syntax.TZ x681 = x0 * x33;
-Tbase Syntax.TZ x682 = x1 * x32;
-Tbase Syntax.TZ x683 = x2 * x31;
-Tbase Syntax.TZ x684 = x3 * x30;
-Tbase Syntax.TZ x685 = x4 * x29;
-Tbase Syntax.TZ x686 = x5 * x28;
-Tbase Syntax.TZ x687 = x6 * x27;
-Tbase Syntax.TZ x688 = x7 * x26;
-Tbase Syntax.TZ x689 = x8 * x25;
-Tbase Syntax.TZ x690 = x9 * x24;
-Tbase Syntax.TZ x691 = x10 * x23;
-Tbase Syntax.TZ x692 = x11 * x22;
-Tbase Syntax.TZ x693 = x12 * x21;
-Tbase Syntax.TZ x694 = x13 * x20;
-Tbase Syntax.TZ x695 = x14 * x19;
-Tbase Syntax.TZ x696 = x15 * x18;
-Tbase Syntax.TZ x697 = x16 * x17;
-Tbase Syntax.TZ x698 = x696 + x697;
-Tbase Syntax.TZ x699 = x695 + x698;
-Tbase Syntax.TZ x700 = x694 + x699;
-Tbase Syntax.TZ x701 = x693 + x700;
-Tbase Syntax.TZ x702 = x692 + x701;
-Tbase Syntax.TZ x703 = x691 + x702;
-Tbase Syntax.TZ x704 = x690 + x703;
-Tbase Syntax.TZ x705 = x689 + x704;
-Tbase Syntax.TZ x706 = x688 + x705;
-Tbase Syntax.TZ x707 = x687 + x706;
-Tbase Syntax.TZ x708 = x686 + x707;
-Tbase Syntax.TZ x709 = x685 + x708;
-Tbase Syntax.TZ x710 = x684 + x709;
-Tbase Syntax.TZ x711 = x683 + x710;
-Tbase Syntax.TZ x712 = x682 + x711;
-Tbase Syntax.TZ x713 = x681 + x712;
-Tbase Syntax.TZ x714 = x680 + x713;
-Tbase Syntax.TZ x715 = x679 + x714;
-Tbase Syntax.TZ x716 = x715 >> 0x17;
-Tbase Syntax.TZ x717 = 0x11 * x716;
-Tbase Syntax.TZ x718 = x70 & 0x7fffff;
-Tbase Syntax.TZ x719 = x717 + x718;
-Tbase Syntax.TZ x720 = x719 >> 0x17;
-Tbase Syntax.TZ x721 = x108 & 0x7fffff;
-Tbase Syntax.TZ x722 = x720 + x721;
-Tbase Syntax.TZ x723 = x715 & 0x7fffff;
-Tbase Syntax.TZ x724 = x678 & 0x7fffff;
-Tbase Syntax.TZ x725 = x640 & 0x7fffff;
-Tbase Syntax.TZ x726 = x602 & 0x7fffff;
-Tbase Syntax.TZ x727 = x564 & 0x7fffff;
-Tbase Syntax.TZ x728 = x526 & 0x7fffff;
-Tbase Syntax.TZ x729 = x488 & 0x7fffff;
-Tbase Syntax.TZ x730 = x450 & 0x7fffff;
-Tbase Syntax.TZ x731 = x412 & 0x7fffff;
-Tbase Syntax.TZ x732 = x374 & 0x7fffff;
-Tbase Syntax.TZ x733 = x336 & 0x7fffff;
-Tbase Syntax.TZ x734 = x298 & 0x7fffff;
-Tbase Syntax.TZ x735 = x260 & 0x7fffff;
-Tbase Syntax.TZ x736 = x222 & 0x7fffff;
-Tbase Syntax.TZ x737 = x184 & 0x7fffff;
-Tbase Syntax.TZ x738 = x722 >> 0x17;
-Tbase Syntax.TZ x739 = x146 & 0x7fffff;
-Tbase Syntax.TZ x740 = x738 + x739;
-Tbase Syntax.TZ x741 = x722 & 0x7fffff;
-Tbase Syntax.TZ x742 = x719 & 0x7fffff;
-(Return x723, Return x724, Return x725, Return x726,
-Return x727, Return x728, Return x729, Return x730,
-Return x731, Return x732, Return x733, Return x734,
-Return x735, Return x736, Return x737, Return x740,
-Return x741, Return x742)
- : forall var : Syntax.base_type -> Type,
- expr Syntax.base_type Syntax.op
- (Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- ... * ... * Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF41417_32Reflective/Reified/MulDisplay.v b/src/SpecificGen/GF41417_32Reflective/Reified/MulDisplay.v
deleted file mode 100644
index 5f820de6c..000000000
--- a/src/SpecificGen/GF41417_32Reflective/Reified/MulDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF41417_32Reflective.Reified.Mul.
-Require Export Crypto.Reflection.Z.CNotations.
-
-Print rmulW.
diff --git a/src/SpecificGen/GF41417_32Reflective/Reified/MulJavaDisplay.log b/src/SpecificGen/GF41417_32Reflective/Reified/MulJavaDisplay.log
deleted file mode 100644
index c28a86f2d..000000000
--- a/src/SpecificGen/GF41417_32Reflective/Reified/MulJavaDisplay.log
+++ /dev/null
@@ -1,762 +0,0 @@
-rmulW =
-fun var : Syntax.base_type -> Type =>
-λ
-x x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20
- x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31 x32 x33 x34 :
- var Syntax.TZ,
-Tbase Syntax.TZ x35 = x16 * x34;
-Tbase Syntax.TZ x36 = x * x33;
-Tbase Syntax.TZ x37 = x0 * x32;
-Tbase Syntax.TZ x38 = x1 * x31;
-Tbase Syntax.TZ x39 = x2 * x30;
-Tbase Syntax.TZ x40 = x3 * x29;
-Tbase Syntax.TZ x41 = x4 * x28;
-Tbase Syntax.TZ x42 = x5 * x27;
-Tbase Syntax.TZ x43 = x6 * x26;
-Tbase Syntax.TZ x44 = x7 * x25;
-Tbase Syntax.TZ x45 = x8 * x24;
-Tbase Syntax.TZ x46 = x9 * x23;
-Tbase Syntax.TZ x47 = x10 * x22;
-Tbase Syntax.TZ x48 = x11 * x21;
-Tbase Syntax.TZ x49 = x12 * x20;
-Tbase Syntax.TZ x50 = x13 * x19;
-Tbase Syntax.TZ x51 = x14 * x18;
-Tbase Syntax.TZ x52 = x15 * x17;
-Tbase Syntax.TZ x53 = x51 + x52;
-Tbase Syntax.TZ x54 = x50 + x53;
-Tbase Syntax.TZ x55 = x49 + x54;
-Tbase Syntax.TZ x56 = x48 + x55;
-Tbase Syntax.TZ x57 = x47 + x56;
-Tbase Syntax.TZ x58 = x46 + x57;
-Tbase Syntax.TZ x59 = x45 + x58;
-Tbase Syntax.TZ x60 = x44 + x59;
-Tbase Syntax.TZ x61 = x43 + x60;
-Tbase Syntax.TZ x62 = x42 + x61;
-Tbase Syntax.TZ x63 = x41 + x62;
-Tbase Syntax.TZ x64 = x40 + x63;
-Tbase Syntax.TZ x65 = x39 + x64;
-Tbase Syntax.TZ x66 = x38 + x65;
-Tbase Syntax.TZ x67 = x37 + x66;
-Tbase Syntax.TZ x68 = x36 + x67;
-Tbase Syntax.TZ x69 = 0x11 * x68;
-Tbase Syntax.TZ x70 = x35 + x69;
-Tbase Syntax.TZ x71 = x70 >>> 0x17;
-Tbase Syntax.TZ x72 = x15 * x34;
-Tbase Syntax.TZ x73 = x16 * x33;
-Tbase Syntax.TZ x74 = x72 + x73;
-Tbase Syntax.TZ x75 = x * x32;
-Tbase Syntax.TZ x76 = x0 * x31;
-Tbase Syntax.TZ x77 = x1 * x30;
-Tbase Syntax.TZ x78 = x2 * x29;
-Tbase Syntax.TZ x79 = x3 * x28;
-Tbase Syntax.TZ x80 = x4 * x27;
-Tbase Syntax.TZ x81 = x5 * x26;
-Tbase Syntax.TZ x82 = x6 * x25;
-Tbase Syntax.TZ x83 = x7 * x24;
-Tbase Syntax.TZ x84 = x8 * x23;
-Tbase Syntax.TZ x85 = x9 * x22;
-Tbase Syntax.TZ x86 = x10 * x21;
-Tbase Syntax.TZ x87 = x11 * x20;
-Tbase Syntax.TZ x88 = x12 * x19;
-Tbase Syntax.TZ x89 = x13 * x18;
-Tbase Syntax.TZ x90 = x14 * x17;
-Tbase Syntax.TZ x91 = x89 + x90;
-Tbase Syntax.TZ x92 = x88 + x91;
-Tbase Syntax.TZ x93 = x87 + x92;
-Tbase Syntax.TZ x94 = x86 + x93;
-Tbase Syntax.TZ x95 = x85 + x94;
-Tbase Syntax.TZ x96 = x84 + x95;
-Tbase Syntax.TZ x97 = x83 + x96;
-Tbase Syntax.TZ x98 = x82 + x97;
-Tbase Syntax.TZ x99 = x81 + x98;
-Tbase Syntax.TZ x100 = x80 + x99;
-Tbase Syntax.TZ x101 = x79 + x100;
-Tbase Syntax.TZ x102 = x78 + x101;
-Tbase Syntax.TZ x103 = x77 + x102;
-Tbase Syntax.TZ x104 = x76 + x103;
-Tbase Syntax.TZ x105 = x75 + x104;
-Tbase Syntax.TZ x106 = 0x11 * x105;
-Tbase Syntax.TZ x107 = x74 + x106;
-Tbase Syntax.TZ x108 = x71 + x107;
-Tbase Syntax.TZ x109 = x108 >>> 0x17;
-Tbase Syntax.TZ x110 = x14 * x34;
-Tbase Syntax.TZ x111 = x15 * x33;
-Tbase Syntax.TZ x112 = x16 * x32;
-Tbase Syntax.TZ x113 = x111 + x112;
-Tbase Syntax.TZ x114 = x110 + x113;
-Tbase Syntax.TZ x115 = x * x31;
-Tbase Syntax.TZ x116 = x0 * x30;
-Tbase Syntax.TZ x117 = x1 * x29;
-Tbase Syntax.TZ x118 = x2 * x28;
-Tbase Syntax.TZ x119 = x3 * x27;
-Tbase Syntax.TZ x120 = x4 * x26;
-Tbase Syntax.TZ x121 = x5 * x25;
-Tbase Syntax.TZ x122 = x6 * x24;
-Tbase Syntax.TZ x123 = x7 * x23;
-Tbase Syntax.TZ x124 = x8 * x22;
-Tbase Syntax.TZ x125 = x9 * x21;
-Tbase Syntax.TZ x126 = x10 * x20;
-Tbase Syntax.TZ x127 = x11 * x19;
-Tbase Syntax.TZ x128 = x12 * x18;
-Tbase Syntax.TZ x129 = x13 * x17;
-Tbase Syntax.TZ x130 = x128 + x129;
-Tbase Syntax.TZ x131 = x127 + x130;
-Tbase Syntax.TZ x132 = x126 + x131;
-Tbase Syntax.TZ x133 = x125 + x132;
-Tbase Syntax.TZ x134 = x124 + x133;
-Tbase Syntax.TZ x135 = x123 + x134;
-Tbase Syntax.TZ x136 = x122 + x135;
-Tbase Syntax.TZ x137 = x121 + x136;
-Tbase Syntax.TZ x138 = x120 + x137;
-Tbase Syntax.TZ x139 = x119 + x138;
-Tbase Syntax.TZ x140 = x118 + x139;
-Tbase Syntax.TZ x141 = x117 + x140;
-Tbase Syntax.TZ x142 = x116 + x141;
-Tbase Syntax.TZ x143 = x115 + x142;
-Tbase Syntax.TZ x144 = 0x11 * x143;
-Tbase Syntax.TZ x145 = x114 + x144;
-Tbase Syntax.TZ x146 = x109 + x145;
-Tbase Syntax.TZ x147 = x146 >>> 0x17;
-Tbase Syntax.TZ x148 = x13 * x34;
-Tbase Syntax.TZ x149 = x14 * x33;
-Tbase Syntax.TZ x150 = x15 * x32;
-Tbase Syntax.TZ x151 = x16 * x31;
-Tbase Syntax.TZ x152 = x150 + x151;
-Tbase Syntax.TZ x153 = x149 + x152;
-Tbase Syntax.TZ x154 = x148 + x153;
-Tbase Syntax.TZ x155 = x * x30;
-Tbase Syntax.TZ x156 = x0 * x29;
-Tbase Syntax.TZ x157 = x1 * x28;
-Tbase Syntax.TZ x158 = x2 * x27;
-Tbase Syntax.TZ x159 = x3 * x26;
-Tbase Syntax.TZ x160 = x4 * x25;
-Tbase Syntax.TZ x161 = x5 * x24;
-Tbase Syntax.TZ x162 = x6 * x23;
-Tbase Syntax.TZ x163 = x7 * x22;
-Tbase Syntax.TZ x164 = x8 * x21;
-Tbase Syntax.TZ x165 = x9 * x20;
-Tbase Syntax.TZ x166 = x10 * x19;
-Tbase Syntax.TZ x167 = x11 * x18;
-Tbase Syntax.TZ x168 = x12 * x17;
-Tbase Syntax.TZ x169 = x167 + x168;
-Tbase Syntax.TZ x170 = x166 + x169;
-Tbase Syntax.TZ x171 = x165 + x170;
-Tbase Syntax.TZ x172 = x164 + x171;
-Tbase Syntax.TZ x173 = x163 + x172;
-Tbase Syntax.TZ x174 = x162 + x173;
-Tbase Syntax.TZ x175 = x161 + x174;
-Tbase Syntax.TZ x176 = x160 + x175;
-Tbase Syntax.TZ x177 = x159 + x176;
-Tbase Syntax.TZ x178 = x158 + x177;
-Tbase Syntax.TZ x179 = x157 + x178;
-Tbase Syntax.TZ x180 = x156 + x179;
-Tbase Syntax.TZ x181 = x155 + x180;
-Tbase Syntax.TZ x182 = 0x11 * x181;
-Tbase Syntax.TZ x183 = x154 + x182;
-Tbase Syntax.TZ x184 = x147 + x183;
-Tbase Syntax.TZ x185 = x184 >>> 0x17;
-Tbase Syntax.TZ x186 = x12 * x34;
-Tbase Syntax.TZ x187 = x13 * x33;
-Tbase Syntax.TZ x188 = x14 * x32;
-Tbase Syntax.TZ x189 = x15 * x31;
-Tbase Syntax.TZ x190 = x16 * x30;
-Tbase Syntax.TZ x191 = x189 + x190;
-Tbase Syntax.TZ x192 = x188 + x191;
-Tbase Syntax.TZ x193 = x187 + x192;
-Tbase Syntax.TZ x194 = x186 + x193;
-Tbase Syntax.TZ x195 = x * x29;
-Tbase Syntax.TZ x196 = x0 * x28;
-Tbase Syntax.TZ x197 = x1 * x27;
-Tbase Syntax.TZ x198 = x2 * x26;
-Tbase Syntax.TZ x199 = x3 * x25;
-Tbase Syntax.TZ x200 = x4 * x24;
-Tbase Syntax.TZ x201 = x5 * x23;
-Tbase Syntax.TZ x202 = x6 * x22;
-Tbase Syntax.TZ x203 = x7 * x21;
-Tbase Syntax.TZ x204 = x8 * x20;
-Tbase Syntax.TZ x205 = x9 * x19;
-Tbase Syntax.TZ x206 = x10 * x18;
-Tbase Syntax.TZ x207 = x11 * x17;
-Tbase Syntax.TZ x208 = x206 + x207;
-Tbase Syntax.TZ x209 = x205 + x208;
-Tbase Syntax.TZ x210 = x204 + x209;
-Tbase Syntax.TZ x211 = x203 + x210;
-Tbase Syntax.TZ x212 = x202 + x211;
-Tbase Syntax.TZ x213 = x201 + x212;
-Tbase Syntax.TZ x214 = x200 + x213;
-Tbase Syntax.TZ x215 = x199 + x214;
-Tbase Syntax.TZ x216 = x198 + x215;
-Tbase Syntax.TZ x217 = x197 + x216;
-Tbase Syntax.TZ x218 = x196 + x217;
-Tbase Syntax.TZ x219 = x195 + x218;
-Tbase Syntax.TZ x220 = 0x11 * x219;
-Tbase Syntax.TZ x221 = x194 + x220;
-Tbase Syntax.TZ x222 = x185 + x221;
-Tbase Syntax.TZ x223 = x222 >>> 0x17;
-Tbase Syntax.TZ x224 = x11 * x34;
-Tbase Syntax.TZ x225 = x12 * x33;
-Tbase Syntax.TZ x226 = x13 * x32;
-Tbase Syntax.TZ x227 = x14 * x31;
-Tbase Syntax.TZ x228 = x15 * x30;
-Tbase Syntax.TZ x229 = x16 * x29;
-Tbase Syntax.TZ x230 = x228 + x229;
-Tbase Syntax.TZ x231 = x227 + x230;
-Tbase Syntax.TZ x232 = x226 + x231;
-Tbase Syntax.TZ x233 = x225 + x232;
-Tbase Syntax.TZ x234 = x224 + x233;
-Tbase Syntax.TZ x235 = x * x28;
-Tbase Syntax.TZ x236 = x0 * x27;
-Tbase Syntax.TZ x237 = x1 * x26;
-Tbase Syntax.TZ x238 = x2 * x25;
-Tbase Syntax.TZ x239 = x3 * x24;
-Tbase Syntax.TZ x240 = x4 * x23;
-Tbase Syntax.TZ x241 = x5 * x22;
-Tbase Syntax.TZ x242 = x6 * x21;
-Tbase Syntax.TZ x243 = x7 * x20;
-Tbase Syntax.TZ x244 = x8 * x19;
-Tbase Syntax.TZ x245 = x9 * x18;
-Tbase Syntax.TZ x246 = x10 * x17;
-Tbase Syntax.TZ x247 = x245 + x246;
-Tbase Syntax.TZ x248 = x244 + x247;
-Tbase Syntax.TZ x249 = x243 + x248;
-Tbase Syntax.TZ x250 = x242 + x249;
-Tbase Syntax.TZ x251 = x241 + x250;
-Tbase Syntax.TZ x252 = x240 + x251;
-Tbase Syntax.TZ x253 = x239 + x252;
-Tbase Syntax.TZ x254 = x238 + x253;
-Tbase Syntax.TZ x255 = x237 + x254;
-Tbase Syntax.TZ x256 = x236 + x255;
-Tbase Syntax.TZ x257 = x235 + x256;
-Tbase Syntax.TZ x258 = 0x11 * x257;
-Tbase Syntax.TZ x259 = x234 + x258;
-Tbase Syntax.TZ x260 = x223 + x259;
-Tbase Syntax.TZ x261 = x260 >>> 0x17;
-Tbase Syntax.TZ x262 = x10 * x34;
-Tbase Syntax.TZ x263 = x11 * x33;
-Tbase Syntax.TZ x264 = x12 * x32;
-Tbase Syntax.TZ x265 = x13 * x31;
-Tbase Syntax.TZ x266 = x14 * x30;
-Tbase Syntax.TZ x267 = x15 * x29;
-Tbase Syntax.TZ x268 = x16 * x28;
-Tbase Syntax.TZ x269 = x267 + x268;
-Tbase Syntax.TZ x270 = x266 + x269;
-Tbase Syntax.TZ x271 = x265 + x270;
-Tbase Syntax.TZ x272 = x264 + x271;
-Tbase Syntax.TZ x273 = x263 + x272;
-Tbase Syntax.TZ x274 = x262 + x273;
-Tbase Syntax.TZ x275 = x * x27;
-Tbase Syntax.TZ x276 = x0 * x26;
-Tbase Syntax.TZ x277 = x1 * x25;
-Tbase Syntax.TZ x278 = x2 * x24;
-Tbase Syntax.TZ x279 = x3 * x23;
-Tbase Syntax.TZ x280 = x4 * x22;
-Tbase Syntax.TZ x281 = x5 * x21;
-Tbase Syntax.TZ x282 = x6 * x20;
-Tbase Syntax.TZ x283 = x7 * x19;
-Tbase Syntax.TZ x284 = x8 * x18;
-Tbase Syntax.TZ x285 = x9 * x17;
-Tbase Syntax.TZ x286 = x284 + x285;
-Tbase Syntax.TZ x287 = x283 + x286;
-Tbase Syntax.TZ x288 = x282 + x287;
-Tbase Syntax.TZ x289 = x281 + x288;
-Tbase Syntax.TZ x290 = x280 + x289;
-Tbase Syntax.TZ x291 = x279 + x290;
-Tbase Syntax.TZ x292 = x278 + x291;
-Tbase Syntax.TZ x293 = x277 + x292;
-Tbase Syntax.TZ x294 = x276 + x293;
-Tbase Syntax.TZ x295 = x275 + x294;
-Tbase Syntax.TZ x296 = 0x11 * x295;
-Tbase Syntax.TZ x297 = x274 + x296;
-Tbase Syntax.TZ x298 = x261 + x297;
-Tbase Syntax.TZ x299 = x298 >>> 0x17;
-Tbase Syntax.TZ x300 = x9 * x34;
-Tbase Syntax.TZ x301 = x10 * x33;
-Tbase Syntax.TZ x302 = x11 * x32;
-Tbase Syntax.TZ x303 = x12 * x31;
-Tbase Syntax.TZ x304 = x13 * x30;
-Tbase Syntax.TZ x305 = x14 * x29;
-Tbase Syntax.TZ x306 = x15 * x28;
-Tbase Syntax.TZ x307 = x16 * x27;
-Tbase Syntax.TZ x308 = x306 + x307;
-Tbase Syntax.TZ x309 = x305 + x308;
-Tbase Syntax.TZ x310 = x304 + x309;
-Tbase Syntax.TZ x311 = x303 + x310;
-Tbase Syntax.TZ x312 = x302 + x311;
-Tbase Syntax.TZ x313 = x301 + x312;
-Tbase Syntax.TZ x314 = x300 + x313;
-Tbase Syntax.TZ x315 = x * x26;
-Tbase Syntax.TZ x316 = x0 * x25;
-Tbase Syntax.TZ x317 = x1 * x24;
-Tbase Syntax.TZ x318 = x2 * x23;
-Tbase Syntax.TZ x319 = x3 * x22;
-Tbase Syntax.TZ x320 = x4 * x21;
-Tbase Syntax.TZ x321 = x5 * x20;
-Tbase Syntax.TZ x322 = x6 * x19;
-Tbase Syntax.TZ x323 = x7 * x18;
-Tbase Syntax.TZ x324 = x8 * x17;
-Tbase Syntax.TZ x325 = x323 + x324;
-Tbase Syntax.TZ x326 = x322 + x325;
-Tbase Syntax.TZ x327 = x321 + x326;
-Tbase Syntax.TZ x328 = x320 + x327;
-Tbase Syntax.TZ x329 = x319 + x328;
-Tbase Syntax.TZ x330 = x318 + x329;
-Tbase Syntax.TZ x331 = x317 + x330;
-Tbase Syntax.TZ x332 = x316 + x331;
-Tbase Syntax.TZ x333 = x315 + x332;
-Tbase Syntax.TZ x334 = 0x11 * x333;
-Tbase Syntax.TZ x335 = x314 + x334;
-Tbase Syntax.TZ x336 = x299 + x335;
-Tbase Syntax.TZ x337 = x336 >>> 0x17;
-Tbase Syntax.TZ x338 = x8 * x34;
-Tbase Syntax.TZ x339 = x9 * x33;
-Tbase Syntax.TZ x340 = x10 * x32;
-Tbase Syntax.TZ x341 = x11 * x31;
-Tbase Syntax.TZ x342 = x12 * x30;
-Tbase Syntax.TZ x343 = x13 * x29;
-Tbase Syntax.TZ x344 = x14 * x28;
-Tbase Syntax.TZ x345 = x15 * x27;
-Tbase Syntax.TZ x346 = x16 * x26;
-Tbase Syntax.TZ x347 = x345 + x346;
-Tbase Syntax.TZ x348 = x344 + x347;
-Tbase Syntax.TZ x349 = x343 + x348;
-Tbase Syntax.TZ x350 = x342 + x349;
-Tbase Syntax.TZ x351 = x341 + x350;
-Tbase Syntax.TZ x352 = x340 + x351;
-Tbase Syntax.TZ x353 = x339 + x352;
-Tbase Syntax.TZ x354 = x338 + x353;
-Tbase Syntax.TZ x355 = x * x25;
-Tbase Syntax.TZ x356 = x0 * x24;
-Tbase Syntax.TZ x357 = x1 * x23;
-Tbase Syntax.TZ x358 = x2 * x22;
-Tbase Syntax.TZ x359 = x3 * x21;
-Tbase Syntax.TZ x360 = x4 * x20;
-Tbase Syntax.TZ x361 = x5 * x19;
-Tbase Syntax.TZ x362 = x6 * x18;
-Tbase Syntax.TZ x363 = x7 * x17;
-Tbase Syntax.TZ x364 = x362 + x363;
-Tbase Syntax.TZ x365 = x361 + x364;
-Tbase Syntax.TZ x366 = x360 + x365;
-Tbase Syntax.TZ x367 = x359 + x366;
-Tbase Syntax.TZ x368 = x358 + x367;
-Tbase Syntax.TZ x369 = x357 + x368;
-Tbase Syntax.TZ x370 = x356 + x369;
-Tbase Syntax.TZ x371 = x355 + x370;
-Tbase Syntax.TZ x372 = 0x11 * x371;
-Tbase Syntax.TZ x373 = x354 + x372;
-Tbase Syntax.TZ x374 = x337 + x373;
-Tbase Syntax.TZ x375 = x374 >>> 0x17;
-Tbase Syntax.TZ x376 = x7 * x34;
-Tbase Syntax.TZ x377 = x8 * x33;
-Tbase Syntax.TZ x378 = x9 * x32;
-Tbase Syntax.TZ x379 = x10 * x31;
-Tbase Syntax.TZ x380 = x11 * x30;
-Tbase Syntax.TZ x381 = x12 * x29;
-Tbase Syntax.TZ x382 = x13 * x28;
-Tbase Syntax.TZ x383 = x14 * x27;
-Tbase Syntax.TZ x384 = x15 * x26;
-Tbase Syntax.TZ x385 = x16 * x25;
-Tbase Syntax.TZ x386 = x384 + x385;
-Tbase Syntax.TZ x387 = x383 + x386;
-Tbase Syntax.TZ x388 = x382 + x387;
-Tbase Syntax.TZ x389 = x381 + x388;
-Tbase Syntax.TZ x390 = x380 + x389;
-Tbase Syntax.TZ x391 = x379 + x390;
-Tbase Syntax.TZ x392 = x378 + x391;
-Tbase Syntax.TZ x393 = x377 + x392;
-Tbase Syntax.TZ x394 = x376 + x393;
-Tbase Syntax.TZ x395 = x * x24;
-Tbase Syntax.TZ x396 = x0 * x23;
-Tbase Syntax.TZ x397 = x1 * x22;
-Tbase Syntax.TZ x398 = x2 * x21;
-Tbase Syntax.TZ x399 = x3 * x20;
-Tbase Syntax.TZ x400 = x4 * x19;
-Tbase Syntax.TZ x401 = x5 * x18;
-Tbase Syntax.TZ x402 = x6 * x17;
-Tbase Syntax.TZ x403 = x401 + x402;
-Tbase Syntax.TZ x404 = x400 + x403;
-Tbase Syntax.TZ x405 = x399 + x404;
-Tbase Syntax.TZ x406 = x398 + x405;
-Tbase Syntax.TZ x407 = x397 + x406;
-Tbase Syntax.TZ x408 = x396 + x407;
-Tbase Syntax.TZ x409 = x395 + x408;
-Tbase Syntax.TZ x410 = 0x11 * x409;
-Tbase Syntax.TZ x411 = x394 + x410;
-Tbase Syntax.TZ x412 = x375 + x411;
-Tbase Syntax.TZ x413 = x412 >>> 0x17;
-Tbase Syntax.TZ x414 = x6 * x34;
-Tbase Syntax.TZ x415 = x7 * x33;
-Tbase Syntax.TZ x416 = x8 * x32;
-Tbase Syntax.TZ x417 = x9 * x31;
-Tbase Syntax.TZ x418 = x10 * x30;
-Tbase Syntax.TZ x419 = x11 * x29;
-Tbase Syntax.TZ x420 = x12 * x28;
-Tbase Syntax.TZ x421 = x13 * x27;
-Tbase Syntax.TZ x422 = x14 * x26;
-Tbase Syntax.TZ x423 = x15 * x25;
-Tbase Syntax.TZ x424 = x16 * x24;
-Tbase Syntax.TZ x425 = x423 + x424;
-Tbase Syntax.TZ x426 = x422 + x425;
-Tbase Syntax.TZ x427 = x421 + x426;
-Tbase Syntax.TZ x428 = x420 + x427;
-Tbase Syntax.TZ x429 = x419 + x428;
-Tbase Syntax.TZ x430 = x418 + x429;
-Tbase Syntax.TZ x431 = x417 + x430;
-Tbase Syntax.TZ x432 = x416 + x431;
-Tbase Syntax.TZ x433 = x415 + x432;
-Tbase Syntax.TZ x434 = x414 + x433;
-Tbase Syntax.TZ x435 = x * x23;
-Tbase Syntax.TZ x436 = x0 * x22;
-Tbase Syntax.TZ x437 = x1 * x21;
-Tbase Syntax.TZ x438 = x2 * x20;
-Tbase Syntax.TZ x439 = x3 * x19;
-Tbase Syntax.TZ x440 = x4 * x18;
-Tbase Syntax.TZ x441 = x5 * x17;
-Tbase Syntax.TZ x442 = x440 + x441;
-Tbase Syntax.TZ x443 = x439 + x442;
-Tbase Syntax.TZ x444 = x438 + x443;
-Tbase Syntax.TZ x445 = x437 + x444;
-Tbase Syntax.TZ x446 = x436 + x445;
-Tbase Syntax.TZ x447 = x435 + x446;
-Tbase Syntax.TZ x448 = 0x11 * x447;
-Tbase Syntax.TZ x449 = x434 + x448;
-Tbase Syntax.TZ x450 = x413 + x449;
-Tbase Syntax.TZ x451 = x450 >>> 0x17;
-Tbase Syntax.TZ x452 = x5 * x34;
-Tbase Syntax.TZ x453 = x6 * x33;
-Tbase Syntax.TZ x454 = x7 * x32;
-Tbase Syntax.TZ x455 = x8 * x31;
-Tbase Syntax.TZ x456 = x9 * x30;
-Tbase Syntax.TZ x457 = x10 * x29;
-Tbase Syntax.TZ x458 = x11 * x28;
-Tbase Syntax.TZ x459 = x12 * x27;
-Tbase Syntax.TZ x460 = x13 * x26;
-Tbase Syntax.TZ x461 = x14 * x25;
-Tbase Syntax.TZ x462 = x15 * x24;
-Tbase Syntax.TZ x463 = x16 * x23;
-Tbase Syntax.TZ x464 = x462 + x463;
-Tbase Syntax.TZ x465 = x461 + x464;
-Tbase Syntax.TZ x466 = x460 + x465;
-Tbase Syntax.TZ x467 = x459 + x466;
-Tbase Syntax.TZ x468 = x458 + x467;
-Tbase Syntax.TZ x469 = x457 + x468;
-Tbase Syntax.TZ x470 = x456 + x469;
-Tbase Syntax.TZ x471 = x455 + x470;
-Tbase Syntax.TZ x472 = x454 + x471;
-Tbase Syntax.TZ x473 = x453 + x472;
-Tbase Syntax.TZ x474 = x452 + x473;
-Tbase Syntax.TZ x475 = x * x22;
-Tbase Syntax.TZ x476 = x0 * x21;
-Tbase Syntax.TZ x477 = x1 * x20;
-Tbase Syntax.TZ x478 = x2 * x19;
-Tbase Syntax.TZ x479 = x3 * x18;
-Tbase Syntax.TZ x480 = x4 * x17;
-Tbase Syntax.TZ x481 = x479 + x480;
-Tbase Syntax.TZ x482 = x478 + x481;
-Tbase Syntax.TZ x483 = x477 + x482;
-Tbase Syntax.TZ x484 = x476 + x483;
-Tbase Syntax.TZ x485 = x475 + x484;
-Tbase Syntax.TZ x486 = 0x11 * x485;
-Tbase Syntax.TZ x487 = x474 + x486;
-Tbase Syntax.TZ x488 = x451 + x487;
-Tbase Syntax.TZ x489 = x488 >>> 0x17;
-Tbase Syntax.TZ x490 = x4 * x34;
-Tbase Syntax.TZ x491 = x5 * x33;
-Tbase Syntax.TZ x492 = x6 * x32;
-Tbase Syntax.TZ x493 = x7 * x31;
-Tbase Syntax.TZ x494 = x8 * x30;
-Tbase Syntax.TZ x495 = x9 * x29;
-Tbase Syntax.TZ x496 = x10 * x28;
-Tbase Syntax.TZ x497 = x11 * x27;
-Tbase Syntax.TZ x498 = x12 * x26;
-Tbase Syntax.TZ x499 = x13 * x25;
-Tbase Syntax.TZ x500 = x14 * x24;
-Tbase Syntax.TZ x501 = x15 * x23;
-Tbase Syntax.TZ x502 = x16 * x22;
-Tbase Syntax.TZ x503 = x501 + x502;
-Tbase Syntax.TZ x504 = x500 + x503;
-Tbase Syntax.TZ x505 = x499 + x504;
-Tbase Syntax.TZ x506 = x498 + x505;
-Tbase Syntax.TZ x507 = x497 + x506;
-Tbase Syntax.TZ x508 = x496 + x507;
-Tbase Syntax.TZ x509 = x495 + x508;
-Tbase Syntax.TZ x510 = x494 + x509;
-Tbase Syntax.TZ x511 = x493 + x510;
-Tbase Syntax.TZ x512 = x492 + x511;
-Tbase Syntax.TZ x513 = x491 + x512;
-Tbase Syntax.TZ x514 = x490 + x513;
-Tbase Syntax.TZ x515 = x * x21;
-Tbase Syntax.TZ x516 = x0 * x20;
-Tbase Syntax.TZ x517 = x1 * x19;
-Tbase Syntax.TZ x518 = x2 * x18;
-Tbase Syntax.TZ x519 = x3 * x17;
-Tbase Syntax.TZ x520 = x518 + x519;
-Tbase Syntax.TZ x521 = x517 + x520;
-Tbase Syntax.TZ x522 = x516 + x521;
-Tbase Syntax.TZ x523 = x515 + x522;
-Tbase Syntax.TZ x524 = 0x11 * x523;
-Tbase Syntax.TZ x525 = x514 + x524;
-Tbase Syntax.TZ x526 = x489 + x525;
-Tbase Syntax.TZ x527 = x526 >>> 0x17;
-Tbase Syntax.TZ x528 = x3 * x34;
-Tbase Syntax.TZ x529 = x4 * x33;
-Tbase Syntax.TZ x530 = x5 * x32;
-Tbase Syntax.TZ x531 = x6 * x31;
-Tbase Syntax.TZ x532 = x7 * x30;
-Tbase Syntax.TZ x533 = x8 * x29;
-Tbase Syntax.TZ x534 = x9 * x28;
-Tbase Syntax.TZ x535 = x10 * x27;
-Tbase Syntax.TZ x536 = x11 * x26;
-Tbase Syntax.TZ x537 = x12 * x25;
-Tbase Syntax.TZ x538 = x13 * x24;
-Tbase Syntax.TZ x539 = x14 * x23;
-Tbase Syntax.TZ x540 = x15 * x22;
-Tbase Syntax.TZ x541 = x16 * x21;
-Tbase Syntax.TZ x542 = x540 + x541;
-Tbase Syntax.TZ x543 = x539 + x542;
-Tbase Syntax.TZ x544 = x538 + x543;
-Tbase Syntax.TZ x545 = x537 + x544;
-Tbase Syntax.TZ x546 = x536 + x545;
-Tbase Syntax.TZ x547 = x535 + x546;
-Tbase Syntax.TZ x548 = x534 + x547;
-Tbase Syntax.TZ x549 = x533 + x548;
-Tbase Syntax.TZ x550 = x532 + x549;
-Tbase Syntax.TZ x551 = x531 + x550;
-Tbase Syntax.TZ x552 = x530 + x551;
-Tbase Syntax.TZ x553 = x529 + x552;
-Tbase Syntax.TZ x554 = x528 + x553;
-Tbase Syntax.TZ x555 = x * x20;
-Tbase Syntax.TZ x556 = x0 * x19;
-Tbase Syntax.TZ x557 = x1 * x18;
-Tbase Syntax.TZ x558 = x2 * x17;
-Tbase Syntax.TZ x559 = x557 + x558;
-Tbase Syntax.TZ x560 = x556 + x559;
-Tbase Syntax.TZ x561 = x555 + x560;
-Tbase Syntax.TZ x562 = 0x11 * x561;
-Tbase Syntax.TZ x563 = x554 + x562;
-Tbase Syntax.TZ x564 = x527 + x563;
-Tbase Syntax.TZ x565 = x564 >>> 0x17;
-Tbase Syntax.TZ x566 = x2 * x34;
-Tbase Syntax.TZ x567 = x3 * x33;
-Tbase Syntax.TZ x568 = x4 * x32;
-Tbase Syntax.TZ x569 = x5 * x31;
-Tbase Syntax.TZ x570 = x6 * x30;
-Tbase Syntax.TZ x571 = x7 * x29;
-Tbase Syntax.TZ x572 = x8 * x28;
-Tbase Syntax.TZ x573 = x9 * x27;
-Tbase Syntax.TZ x574 = x10 * x26;
-Tbase Syntax.TZ x575 = x11 * x25;
-Tbase Syntax.TZ x576 = x12 * x24;
-Tbase Syntax.TZ x577 = x13 * x23;
-Tbase Syntax.TZ x578 = x14 * x22;
-Tbase Syntax.TZ x579 = x15 * x21;
-Tbase Syntax.TZ x580 = x16 * x20;
-Tbase Syntax.TZ x581 = x579 + x580;
-Tbase Syntax.TZ x582 = x578 + x581;
-Tbase Syntax.TZ x583 = x577 + x582;
-Tbase Syntax.TZ x584 = x576 + x583;
-Tbase Syntax.TZ x585 = x575 + x584;
-Tbase Syntax.TZ x586 = x574 + x585;
-Tbase Syntax.TZ x587 = x573 + x586;
-Tbase Syntax.TZ x588 = x572 + x587;
-Tbase Syntax.TZ x589 = x571 + x588;
-Tbase Syntax.TZ x590 = x570 + x589;
-Tbase Syntax.TZ x591 = x569 + x590;
-Tbase Syntax.TZ x592 = x568 + x591;
-Tbase Syntax.TZ x593 = x567 + x592;
-Tbase Syntax.TZ x594 = x566 + x593;
-Tbase Syntax.TZ x595 = x * x19;
-Tbase Syntax.TZ x596 = x0 * x18;
-Tbase Syntax.TZ x597 = x1 * x17;
-Tbase Syntax.TZ x598 = x596 + x597;
-Tbase Syntax.TZ x599 = x595 + x598;
-Tbase Syntax.TZ x600 = 0x11 * x599;
-Tbase Syntax.TZ x601 = x594 + x600;
-Tbase Syntax.TZ x602 = x565 + x601;
-Tbase Syntax.TZ x603 = x602 >>> 0x17;
-Tbase Syntax.TZ x604 = x1 * x34;
-Tbase Syntax.TZ x605 = x2 * x33;
-Tbase Syntax.TZ x606 = x3 * x32;
-Tbase Syntax.TZ x607 = x4 * x31;
-Tbase Syntax.TZ x608 = x5 * x30;
-Tbase Syntax.TZ x609 = x6 * x29;
-Tbase Syntax.TZ x610 = x7 * x28;
-Tbase Syntax.TZ x611 = x8 * x27;
-Tbase Syntax.TZ x612 = x9 * x26;
-Tbase Syntax.TZ x613 = x10 * x25;
-Tbase Syntax.TZ x614 = x11 * x24;
-Tbase Syntax.TZ x615 = x12 * x23;
-Tbase Syntax.TZ x616 = x13 * x22;
-Tbase Syntax.TZ x617 = x14 * x21;
-Tbase Syntax.TZ x618 = x15 * x20;
-Tbase Syntax.TZ x619 = x16 * x19;
-Tbase Syntax.TZ x620 = x618 + x619;
-Tbase Syntax.TZ x621 = x617 + x620;
-Tbase Syntax.TZ x622 = x616 + x621;
-Tbase Syntax.TZ x623 = x615 + x622;
-Tbase Syntax.TZ x624 = x614 + x623;
-Tbase Syntax.TZ x625 = x613 + x624;
-Tbase Syntax.TZ x626 = x612 + x625;
-Tbase Syntax.TZ x627 = x611 + x626;
-Tbase Syntax.TZ x628 = x610 + x627;
-Tbase Syntax.TZ x629 = x609 + x628;
-Tbase Syntax.TZ x630 = x608 + x629;
-Tbase Syntax.TZ x631 = x607 + x630;
-Tbase Syntax.TZ x632 = x606 + x631;
-Tbase Syntax.TZ x633 = x605 + x632;
-Tbase Syntax.TZ x634 = x604 + x633;
-Tbase Syntax.TZ x635 = x * x18;
-Tbase Syntax.TZ x636 = x0 * x17;
-Tbase Syntax.TZ x637 = x635 + x636;
-Tbase Syntax.TZ x638 = 0x11 * x637;
-Tbase Syntax.TZ x639 = x634 + x638;
-Tbase Syntax.TZ x640 = x603 + x639;
-Tbase Syntax.TZ x641 = x640 >>> 0x17;
-Tbase Syntax.TZ x642 = x0 * x34;
-Tbase Syntax.TZ x643 = x1 * x33;
-Tbase Syntax.TZ x644 = x2 * x32;
-Tbase Syntax.TZ x645 = x3 * x31;
-Tbase Syntax.TZ x646 = x4 * x30;
-Tbase Syntax.TZ x647 = x5 * x29;
-Tbase Syntax.TZ x648 = x6 * x28;
-Tbase Syntax.TZ x649 = x7 * x27;
-Tbase Syntax.TZ x650 = x8 * x26;
-Tbase Syntax.TZ x651 = x9 * x25;
-Tbase Syntax.TZ x652 = x10 * x24;
-Tbase Syntax.TZ x653 = x11 * x23;
-Tbase Syntax.TZ x654 = x12 * x22;
-Tbase Syntax.TZ x655 = x13 * x21;
-Tbase Syntax.TZ x656 = x14 * x20;
-Tbase Syntax.TZ x657 = x15 * x19;
-Tbase Syntax.TZ x658 = x16 * x18;
-Tbase Syntax.TZ x659 = x657 + x658;
-Tbase Syntax.TZ x660 = x656 + x659;
-Tbase Syntax.TZ x661 = x655 + x660;
-Tbase Syntax.TZ x662 = x654 + x661;
-Tbase Syntax.TZ x663 = x653 + x662;
-Tbase Syntax.TZ x664 = x652 + x663;
-Tbase Syntax.TZ x665 = x651 + x664;
-Tbase Syntax.TZ x666 = x650 + x665;
-Tbase Syntax.TZ x667 = x649 + x666;
-Tbase Syntax.TZ x668 = x648 + x667;
-Tbase Syntax.TZ x669 = x647 + x668;
-Tbase Syntax.TZ x670 = x646 + x669;
-Tbase Syntax.TZ x671 = x645 + x670;
-Tbase Syntax.TZ x672 = x644 + x671;
-Tbase Syntax.TZ x673 = x643 + x672;
-Tbase Syntax.TZ x674 = x642 + x673;
-Tbase Syntax.TZ x675 = x * x17;
-Tbase Syntax.TZ x676 = 0x11 * x675;
-Tbase Syntax.TZ x677 = x674 + x676;
-Tbase Syntax.TZ x678 = x641 + x677;
-Tbase Syntax.TZ x679 = x678 >>> 0x17;
-Tbase Syntax.TZ x680 = x * x34;
-Tbase Syntax.TZ x681 = x0 * x33;
-Tbase Syntax.TZ x682 = x1 * x32;
-Tbase Syntax.TZ x683 = x2 * x31;
-Tbase Syntax.TZ x684 = x3 * x30;
-Tbase Syntax.TZ x685 = x4 * x29;
-Tbase Syntax.TZ x686 = x5 * x28;
-Tbase Syntax.TZ x687 = x6 * x27;
-Tbase Syntax.TZ x688 = x7 * x26;
-Tbase Syntax.TZ x689 = x8 * x25;
-Tbase Syntax.TZ x690 = x9 * x24;
-Tbase Syntax.TZ x691 = x10 * x23;
-Tbase Syntax.TZ x692 = x11 * x22;
-Tbase Syntax.TZ x693 = x12 * x21;
-Tbase Syntax.TZ x694 = x13 * x20;
-Tbase Syntax.TZ x695 = x14 * x19;
-Tbase Syntax.TZ x696 = x15 * x18;
-Tbase Syntax.TZ x697 = x16 * x17;
-Tbase Syntax.TZ x698 = x696 + x697;
-Tbase Syntax.TZ x699 = x695 + x698;
-Tbase Syntax.TZ x700 = x694 + x699;
-Tbase Syntax.TZ x701 = x693 + x700;
-Tbase Syntax.TZ x702 = x692 + x701;
-Tbase Syntax.TZ x703 = x691 + x702;
-Tbase Syntax.TZ x704 = x690 + x703;
-Tbase Syntax.TZ x705 = x689 + x704;
-Tbase Syntax.TZ x706 = x688 + x705;
-Tbase Syntax.TZ x707 = x687 + x706;
-Tbase Syntax.TZ x708 = x686 + x707;
-Tbase Syntax.TZ x709 = x685 + x708;
-Tbase Syntax.TZ x710 = x684 + x709;
-Tbase Syntax.TZ x711 = x683 + x710;
-Tbase Syntax.TZ x712 = x682 + x711;
-Tbase Syntax.TZ x713 = x681 + x712;
-Tbase Syntax.TZ x714 = x680 + x713;
-Tbase Syntax.TZ x715 = x679 + x714;
-Tbase Syntax.TZ x716 = x715 >>> 0x17;
-Tbase Syntax.TZ x717 = 0x11 * x716;
-Tbase Syntax.TZ x718 = x70 & 0x7fffff;
-Tbase Syntax.TZ x719 = x717 + x718;
-Tbase Syntax.TZ x720 = x719 >>> 0x17;
-Tbase Syntax.TZ x721 = x108 & 0x7fffff;
-Tbase Syntax.TZ x722 = x720 + x721;
-Tbase Syntax.TZ x723 = x715 & 0x7fffff;
-Tbase Syntax.TZ x724 = x678 & 0x7fffff;
-Tbase Syntax.TZ x725 = x640 & 0x7fffff;
-Tbase Syntax.TZ x726 = x602 & 0x7fffff;
-Tbase Syntax.TZ x727 = x564 & 0x7fffff;
-Tbase Syntax.TZ x728 = x526 & 0x7fffff;
-Tbase Syntax.TZ x729 = x488 & 0x7fffff;
-Tbase Syntax.TZ x730 = x450 & 0x7fffff;
-Tbase Syntax.TZ x731 = x412 & 0x7fffff;
-Tbase Syntax.TZ x732 = x374 & 0x7fffff;
-Tbase Syntax.TZ x733 = x336 & 0x7fffff;
-Tbase Syntax.TZ x734 = x298 & 0x7fffff;
-Tbase Syntax.TZ x735 = x260 & 0x7fffff;
-Tbase Syntax.TZ x736 = x222 & 0x7fffff;
-Tbase Syntax.TZ x737 = x184 & 0x7fffff;
-Tbase Syntax.TZ x738 = x722 >>> 0x17;
-Tbase Syntax.TZ x739 = x146 & 0x7fffff;
-Tbase Syntax.TZ x740 = x738 + x739;
-Tbase Syntax.TZ x741 = x722 & 0x7fffff;
-Tbase Syntax.TZ x742 = x719 & 0x7fffff;
-(Return x723, Return x724, Return x725, Return x726,
-Return x727, Return x728, Return x729, Return x730,
-Return x731, Return x732, Return x733, Return x734,
-Return x735, Return x736, Return x737, Return x740,
-Return x741, Return x742)
- : forall var : Syntax.base_type -> Type,
- expr Syntax.base_type Syntax.op
- (Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- ... * ... * Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ *
- Tbase Syntax.TZ)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF41417_32Reflective/Reified/MulJavaDisplay.v b/src/SpecificGen/GF41417_32Reflective/Reified/MulJavaDisplay.v
deleted file mode 100644
index c94de07bd..000000000
--- a/src/SpecificGen/GF41417_32Reflective/Reified/MulJavaDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF41417_32Reflective.Reified.Mul.
-Require Export Crypto.Reflection.Z.JavaNotations.
-
-Print rmulW.
diff --git a/src/SpecificGen/GF41417_32Reflective/Reified/Opp.v b/src/SpecificGen/GF41417_32Reflective/Reified/Opp.v
deleted file mode 100644
index 4672002ac..000000000
--- a/src/SpecificGen/GF41417_32Reflective/Reified/Opp.v
+++ /dev/null
@@ -1,12 +0,0 @@
-Require Import Crypto.SpecificGen.GF41417_32Reflective.CommonUnOp.
-
-Definition roppZ_sig : rexpr_unop_sig opp. Proof. reify_sig. Defined.
-Definition roppW := Eval vm_compute in rword_of_Z roppZ_sig.
-Lemma roppW_correct_and_bounded_gen : correct_and_bounded_genT roppW roppZ_sig.
-Proof. rexpr_correct. Qed.
-Definition ropp_output_bounds := Eval vm_compute in compute_bounds roppW ExprUnOp_bounds.
-
-Local Open Scope string_scope.
-Compute ("Opp", compute_bounds_for_display roppW ExprUnOp_bounds).
-Compute ("Opp overflows? ", sanity_compute roppW ExprUnOp_bounds).
-Compute ("Opp overflows (error if it does)? ", sanity_check roppW ExprUnOp_bounds).
diff --git a/src/SpecificGen/GF41417_32Reflective/Reified/Pack.v b/src/SpecificGen/GF41417_32Reflective/Reified/Pack.v
deleted file mode 100644
index d4fac5c2a..000000000
--- a/src/SpecificGen/GF41417_32Reflective/Reified/Pack.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF41417_32Reflective.CommonUnOpFEToWire.
-
-Definition rpackZ_sig : rexpr_unop_FEToWire_sig pack. Proof. reify_sig. Defined.
-Definition rpackW := Eval vm_compute in rword_of_Z rpackZ_sig.
-Lemma rpackW_correct_and_bounded_gen : correct_and_bounded_genT rpackW rpackZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rpack_output_bounds := Eval vm_compute in compute_bounds rpackW ExprUnOpFEToWire_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rpackW_correct_and_bounded
- := ExprUnOpFEToWire_correct_and_bounded
- rpackW pack rpackZ_sig rpackW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Pack", compute_bounds_for_display rpackW ExprUnOpFEToWire_bounds).
-Compute ("Pack overflows? ", sanity_compute rpackW ExprUnOpFEToWire_bounds).
-Compute ("Pack overflows (error if it does)? ", sanity_check rpackW ExprUnOpFEToWire_bounds).
diff --git a/src/SpecificGen/GF41417_32Reflective/Reified/PreFreeze.v b/src/SpecificGen/GF41417_32Reflective/Reified/PreFreeze.v
deleted file mode 100644
index ede666d32..000000000
--- a/src/SpecificGen/GF41417_32Reflective/Reified/PreFreeze.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF41417_32Reflective.CommonUnOp.
-
-Definition rprefreezeZ_sig : rexpr_unop_sig prefreeze. Proof. reify_sig. Defined.
-Definition rprefreezeW := Eval vm_compute in rword_of_Z rprefreezeZ_sig.
-Lemma rprefreezeW_correct_and_bounded_gen : correct_and_bounded_genT rprefreezeW rprefreezeZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rprefreeze_output_bounds := Eval vm_compute in compute_bounds rprefreezeW ExprUnOp_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rprefreezeW_correct_and_bounded
- := ExprUnOp_correct_and_bounded
- rprefreezeW prefreeze rprefreezeZ_sig rprefreezeW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("PreFreeze", compute_bounds_for_display rprefreezeW ExprUnOp_bounds).
-Compute ("PreFreeze overflows? ", sanity_compute rprefreezeW ExprUnOp_bounds).
-Compute ("PreFreeze overflows (error if it does)? ", sanity_check rprefreezeW ExprUnOp_bounds).
diff --git a/src/SpecificGen/GF41417_32Reflective/Reified/Sub.v b/src/SpecificGen/GF41417_32Reflective/Reified/Sub.v
deleted file mode 100644
index fd25f599d..000000000
--- a/src/SpecificGen/GF41417_32Reflective/Reified/Sub.v
+++ /dev/null
@@ -1,12 +0,0 @@
-Require Import Crypto.SpecificGen.GF41417_32Reflective.CommonBinOp.
-
-Definition rsubZ_sig : rexpr_binop_sig sub. Proof. reify_sig. Defined.
-Definition rsubW := Eval vm_compute in rword_of_Z rsubZ_sig.
-Lemma rsubW_correct_and_bounded_gen : correct_and_bounded_genT rsubW rsubZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rsub_output_bounds := Eval vm_compute in compute_bounds rsubW ExprBinOp_bounds.
-
-Local Open Scope string_scope.
-Compute ("Sub", compute_bounds_for_display rsubW ExprBinOp_bounds).
-Compute ("Sub overflows? ", sanity_compute rsubW ExprBinOp_bounds).
-Compute ("Sub overflows (error if it does)? ", sanity_check rsubW ExprBinOp_bounds).
diff --git a/src/SpecificGen/GF41417_32Reflective/Reified/Unpack.v b/src/SpecificGen/GF41417_32Reflective/Reified/Unpack.v
deleted file mode 100644
index f2f8881b7..000000000
--- a/src/SpecificGen/GF41417_32Reflective/Reified/Unpack.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF41417_32Reflective.CommonUnOpWireToFE.
-
-Definition runpackZ_sig : rexpr_unop_WireToFE_sig unpack. Proof. reify_sig. Defined.
-Definition runpackW := Eval vm_compute in rword_of_Z runpackZ_sig.
-Lemma runpackW_correct_and_bounded_gen : correct_and_bounded_genT runpackW runpackZ_sig.
-Proof. rexpr_correct. Qed.
-Definition runpack_output_bounds := Eval vm_compute in compute_bounds runpackW ExprUnOpWireToFE_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition runpackW_correct_and_bounded
- := ExprUnOpWireToFE_correct_and_bounded
- runpackW unpack runpackZ_sig runpackW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Unpack", compute_bounds_for_display runpackW ExprUnOpWireToFE_bounds).
-Compute ("Unpack overflows? ", sanity_compute runpackW ExprUnOpWireToFE_bounds).
-Compute ("Unpack overflows (error if it does)? ", sanity_check runpackW ExprUnOpWireToFE_bounds).
diff --git a/src/SpecificGen/GF41417_32ReflectiveAddCoordinates.v b/src/SpecificGen/GF41417_32ReflectiveAddCoordinates.v
deleted file mode 100644
index 54c260408..000000000
--- a/src/SpecificGen/GF41417_32ReflectiveAddCoordinates.v
+++ /dev/null
@@ -1,77 +0,0 @@
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParams.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParamProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemOpt.
-Require Export Crypto.SpecificGen.GF41417_32.
-Require Import Crypto.SpecificGen.GF41417_32BoundedCommon.
-Require Import Crypto.Reflection.Reify.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.Map.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Crypto.Reflection.Z.Interpretations64.Relations.
-Require Import Crypto.Reflection.Z.Interpretations64.RelationsCombinations.
-Require Import Crypto.Reflection.Z.Reify.
-Require Import Crypto.Reflection.Z.Syntax.
-Require Import Crypto.SpecificGen.GF41417_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF41417_32Reflective.Reified.AddCoordinates.
-Require Import Bedrock.Word Crypto.Util.WordUtil.
-Require Import Coq.Lists.List Crypto.Util.ListUtil.
-Require Import Crypto.Tactics.VerdiTactics.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Notations.
-Require Import Crypto.Util.Bool.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Algebra.
-Import ListNotations.
-Require Import Coq.ZArith.ZArith Coq.ZArith.Zpower Coq.ZArith.ZArith Coq.ZArith.Znumtheory.
-Local Open Scope Z.
-
-Time Definition radd_coordinates : Expr _ := Eval vm_compute in radd_coordinatesW.
-
-Declare Reduction asm_interp_add_coordinates
- := cbv beta iota delta
- [id
- interp_bexpr interp_uexpr interp_uexpr_FEToWire interp_uexpr_FEToZ interp_uexpr_WireToFE interp_9_4expr
- radd_coordinates
- curry_binop_fe41417_32W curry_unop_fe41417_32W curry_unop_wire_digitsW curry_9op_fe41417_32W
- WordW.interp_op WordW.interp_base_type
- Z.interp_op Z.interp_base_type
- Z.Syntax.interp_op Z.Syntax.interp_base_type
- mapf_interp_flat_type WordW.interp_base_type word64ize
- Interp interp interp_flat_type interpf interpf_step interp_flat_type fst snd].
-Ltac asm_interp_add_coordinates
- := cbv beta iota delta
- [id
- interp_bexpr interp_uexpr interp_uexpr_FEToWire interp_uexpr_FEToZ interp_uexpr_WireToFE interp_9_4expr
- radd_coordinates
- curry_binop_fe41417_32W curry_unop_fe41417_32W curry_unop_wire_digitsW curry_9op_fe41417_32W
- WordW.interp_op WordW.interp_base_type
- Z.interp_op Z.interp_base_type
- Z.Syntax.interp_op Z.Syntax.interp_base_type
- mapf_interp_flat_type WordW.interp_base_type word64ize
- Interp interp interp_flat_type interpf interp_flat_type fst snd].
-
-(*
-Time Definition interp_radd_coordinates : SpecificGen.GF41417_32BoundedCommon.fe41417_32W
- -> SpecificGen.GF41417_32BoundedCommon.fe41417_32W
- -> SpecificGen.GF41417_32BoundedCommon.fe41417_32W
- -> SpecificGen.GF41417_32BoundedCommon.fe41417_32W
- -> SpecificGen.GF41417_32BoundedCommon.fe41417_32W
- -> SpecificGen.GF41417_32BoundedCommon.fe41417_32W
- -> SpecificGen.GF41417_32BoundedCommon.fe41417_32W
- -> SpecificGen.GF41417_32BoundedCommon.fe41417_32W
- -> SpecificGen.GF41417_32BoundedCommon.fe41417_32W
- -> Tuple.tuple SpecificGen.GF41417_32BoundedCommon.fe41417_32W 4
- := Eval asm_interp_add_coordinates in interp_9_4expr radd_coordinates.
-(*Print interp_radd_coordinates.*)
-Time Definition interp_radd_coordinates_correct : interp_radd_coordinates = interp_9_4expr radd_coordinates := eq_refl.
-
-Lemma radd_coordinates_correct_and_bounded : op9_4_correct_and_bounded radd_coordinates add_coordinates.
-Proof. exact_no_check radd_coordinatesW_correct_and_bounded. Time Qed.
-*)
diff --git a/src/SpecificGen/GF5211_32.v b/src/SpecificGen/GF5211_32.v
deleted file mode 100644
index 6b9f360c8..000000000
--- a/src/SpecificGen/GF5211_32.v
+++ /dev/null
@@ -1,773 +0,0 @@
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParams.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParamProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemOpt.
-Require Import Coq.Lists.List Crypto.Util.ListUtil.
-Require Import Crypto.Tactics.VerdiTactics.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Tower.
-Require Import Crypto.Util.Notations.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Algebra.
-Import ListNotations.
-Require Import Coq.ZArith.ZArith Coq.ZArith.Zpower Coq.ZArith.ZArith Coq.ZArith.Znumtheory.
-Local Open Scope Z.
-
-(* BEGIN precomputation. *)
-
-Definition modulus : Z := Eval compute in 2^521 - 1.
-Lemma prime_modulus : prime modulus. Admitted.
-Definition int_width := Eval compute in (2 * 32)%Z.
-Definition freeze_input_bound := 32%Z.
-
-Instance params5211_32 : PseudoMersenneBaseParams modulus.
- construct_params prime_modulus 20%nat 521.
-Defined.
-
-Definition length_fe5211_32 := Eval compute in length limb_widths.
-Definition fe5211_32 := Eval compute in (tuple Z length_fe5211_32).
-
-Definition mul2modulus : fe5211_32 :=
- Eval compute in (from_list_default 0%Z (length limb_widths) (construct_mul2modulus params5211_32)).
-
-Instance subCoeff : SubtractionCoefficient.
- apply Build_SubtractionCoefficient with (coeff := mul2modulus).
- vm_decide.
-Defined.
-
-Instance carryChain : CarryChain limb_widths.
- apply Build_CarryChain with (carry_chain := (rev [0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;0;1])%nat).
- intros.
- repeat (destruct H as [|H]; [subst; vm_compute; repeat constructor | ]).
- contradiction H.
-Defined.
-
-Definition freezePreconditions : FreezePreconditions freeze_input_bound int_width.
-Proof.
- constructor; compute_preconditions.
-Defined.
-
-(* Wire format for [pack] and [unpack] *)
-Definition wire_widths := Eval compute in (repeat 32 16 ++ 9 :: nil).
-
-Definition wire_digits := Eval compute in (tuple Z (length wire_widths)).
-
-Lemma wire_widths_nonneg : forall w, In w wire_widths -> 0 <= w.
-Proof.
- intros.
- repeat (destruct H as [|H]; [subst; vm_compute; congruence | ]).
- contradiction H.
-Qed.
-
-Lemma bits_eq : sum_firstn limb_widths (length limb_widths) = sum_firstn wire_widths (length wire_widths).
-Proof.
- reflexivity.
-Qed.
-
-Lemma modulus_gt_2 : 2 < modulus. Proof. cbv; congruence. Qed.
-
-(* Temporarily, we'll use addition chains equivalent to double-and-add. This is pending
- finding the real, more optimal chains from previous work. *)
-Fixpoint pow2Chain'' p (pow2_index acc_index : nat) chain_acc : list (nat * nat) :=
- match p with
- | xI p' => pow2Chain'' p' 1 0
- (chain_acc ++ (pow2_index, pow2_index) :: (0%nat, S acc_index) :: nil)
- | xO p' => pow2Chain'' p' 0 (S acc_index)
- (chain_acc ++ (pow2_index, pow2_index)::nil)
- | xH => (chain_acc ++ (pow2_index, pow2_index) :: (0%nat, S acc_index) :: nil)
- end.
-
-Fixpoint pow2Chain' p index :=
- match p with
- | xI p' => pow2Chain'' p' 0 0 (repeat (0,0)%nat index)
- | xO p' => pow2Chain' p' (S index)
- | xH => repeat (0,0)%nat index
- end.
-
-Definition pow2_chain p :=
- match p with
- | xH => nil
- | _ => pow2Chain' p 0
- end.
-
-Definition invChain := Eval compute in pow2_chain (Z.to_pos (modulus - 2)).
-
-Instance inv_ec : ExponentiationChain (modulus - 2).
- apply Build_ExponentiationChain with (chain := invChain).
- reflexivity.
-Defined.
-
-(* Note : use caution copying square root code to other primes. The (modulus / 8 + 1) chains are
- for primes that are 5 mod 8; if the prime is 3 mod 4 then use (modulus / 4 + 1). *)
-Definition sqrtChain := Eval compute in pow2_chain (Z.to_pos (modulus / 4 + 1)).
-
-Instance sqrt_ec : ExponentiationChain (modulus / 4 + 1).
- apply Build_ExponentiationChain with (chain := sqrtChain).
- reflexivity.
-Defined.
-
-Arguments chain {_ _ _} _.
-
-(* END precomputation *)
-
-(* Precompute constants *)
-Definition k_ := Eval compute in k.
-Definition k_subst : k = k_ := eq_refl k_.
-
-Definition c_ := Eval compute in c.
-Definition c_subst : c = c_ := eq_refl c_.
-
-Definition one_ := Eval compute in one.
-Definition one_subst : one = one_ := eq_refl one_.
-
-Definition zero_ := Eval compute in zero.
-Definition zero_subst : zero = zero_ := eq_refl zero_.
-
-Definition modulus_digits_ := Eval compute in ModularBaseSystemList.modulus_digits.
-Definition modulus_digits_subst : ModularBaseSystemList.modulus_digits = modulus_digits_ := eq_refl modulus_digits_.
-
-Local Opaque Z.shiftr Z.shiftl Z.land Z.mul Z.add Z.sub Z.lor Let_In Z.eqb Z.ltb Z.leb ModularBaseSystemListZOperations.neg ModularBaseSystemListZOperations.cmovl ModularBaseSystemListZOperations.cmovne.
-
-Definition app_n2 {T} (f : wire_digits) (P : wire_digits -> T) : T.
-Proof.
- cbv [wire_digits] in *.
- set (f0 := f).
- repeat (let g := fresh "g" in destruct f as [f g]).
- apply P.
- apply f0.
-Defined.
-
-Definition app_n2_correct {T} f (P : wire_digits -> T) : app_n2 f P = P f.
-Proof.
- intros.
- cbv [wire_digits] in *.
- repeat match goal with [p : (_*Z)%type |- _ ] => destruct p end.
- reflexivity.
-Qed.
-
-Definition app_n {T} (f : fe5211_32) (P : fe5211_32 -> T) : T.
-Proof.
- cbv [fe5211_32] in *.
- set (f0 := f).
- repeat (let g := fresh "g" in destruct f as [f g]).
- apply P.
- apply f0.
-Defined.
-
-Definition app_n_correct {T} f (P : fe5211_32 -> T) : app_n f P = P f.
-Proof.
- intros.
- cbv [fe5211_32] in *.
- repeat match goal with [p : (_*Z)%type |- _ ] => destruct p end.
- reflexivity.
-Qed.
-
-Definition appify2 {T} (op : fe5211_32 -> fe5211_32 -> T) (f g : fe5211_32) :=
- app_n f (fun f0 => (app_n g (fun g0 => op f0 g0))).
-
-Lemma appify2_correct : forall {T} op f g, @appify2 T op f g = op f g.
-Proof.
- intros. cbv [appify2].
- etransitivity; apply app_n_correct.
-Qed.
-
-Definition appify9 {T} (op : fe5211_32 -> fe5211_32 -> fe5211_32 -> fe5211_32 -> fe5211_32 -> fe5211_32 -> fe5211_32 -> fe5211_32 -> fe5211_32 -> T) (x0 x1 x2 x3 x4 x5 x6 x7 x8 : fe5211_32) :=
- app_n x0 (fun x0' =>
- app_n x1 (fun x1' =>
- app_n x2 (fun x2' =>
- app_n x3 (fun x3' =>
- app_n x4 (fun x4' =>
- app_n x5 (fun x5' =>
- app_n x6 (fun x6' =>
- app_n x7 (fun x7' =>
- app_n x8 (fun x8' =>
- op x0' x1' x2' x3' x4' x5' x6' x7' x8'))))))))).
-
-Lemma appify9_correct : forall {T} op x0 x1 x2 x3 x4 x5 x6 x7 x8,
- @appify9 T op x0 x1 x2 x3 x4 x5 x6 x7 x8 = op x0 x1 x2 x3 x4 x5 x6 x7 x8.
-Proof.
- intros. cbv [appify9].
- repeat (etransitivity; [ apply app_n_correct | ]); reflexivity.
-Qed.
-
-Definition uncurry_unop_fe5211_32 {T} (op : fe5211_32 -> T)
- := Eval compute in Tuple.uncurry (n:=length_fe5211_32) op.
-Definition curry_unop_fe5211_32 {T} op : fe5211_32 -> T
- := Eval compute in fun f => app_n f (Tuple.curry (n:=length_fe5211_32) op).
-
-Fixpoint uncurry_n_op_fe5211_32 {T} n
- : forall (op : Tower.tower_nd fe5211_32 T n),
- Tower.tower_nd Z T (n * length_fe5211_32)
- := match n
- return (forall (op : Tower.tower_nd fe5211_32 T n),
- Tower.tower_nd Z T (n * length_fe5211_32))
- with
- | O => fun x => x
- | S n' => fun f => uncurry_unop_fe5211_32 (fun x => @uncurry_n_op_fe5211_32 _ n' (f x))
- end.
-
-Definition uncurry_binop_fe5211_32 {T} (op : fe5211_32 -> fe5211_32 -> T)
- := Eval compute in uncurry_n_op_fe5211_32 2 op.
-Definition curry_binop_fe5211_32 {T} op : fe5211_32 -> fe5211_32 -> T
- := Eval compute in appify2 (fun f => curry_unop_fe5211_32 (curry_unop_fe5211_32 op f)).
-
-Definition uncurry_unop_wire_digits {T} (op : wire_digits -> T)
- := Eval compute in Tuple.uncurry (n:=length wire_widths) op.
-Definition curry_unop_wire_digits {T} op : wire_digits -> T
- := Eval compute in fun f => app_n2 f (Tuple.curry (n:=length wire_widths) op).
-
-Definition uncurry_9op_fe5211_32 {T} (op : fe5211_32 -> fe5211_32 -> fe5211_32 -> fe5211_32 -> fe5211_32 -> fe5211_32 -> fe5211_32 -> fe5211_32 -> fe5211_32 -> T)
- := Eval compute in uncurry_n_op_fe5211_32 9 op.
-Definition curry_9op_fe5211_32 {T} op : fe5211_32 -> fe5211_32 -> fe5211_32 -> fe5211_32 -> fe5211_32 -> fe5211_32 -> fe5211_32 -> fe5211_32 -> fe5211_32 -> T
- := Eval compute in
- appify9 (fun x0 x1 x2 x3 x4 x5 x6 x7 x8
- => curry_unop_fe5211_32 (curry_unop_fe5211_32 (curry_unop_fe5211_32 (curry_unop_fe5211_32 (curry_unop_fe5211_32 (curry_unop_fe5211_32 (curry_unop_fe5211_32 (curry_unop_fe5211_32 (curry_unop_fe5211_32 op x0) x1) x2) x3) x4) x5) x6) x7) x8).
-
-Definition add_sig (f g : fe5211_32) :
- { fg : fe5211_32 | fg = add_opt f g}.
-Proof.
- eexists.
- rewrite <-(@appify2_correct fe5211_32).
- cbv.
- reflexivity.
-Defined.
-
-Definition add (f g : fe5211_32) : fe5211_32 :=
- Eval cbv beta iota delta [proj1_sig add_sig] in
- proj1_sig (add_sig f g).
-
-Definition add_correct (f g : fe5211_32)
- : add f g = add_opt f g :=
- Eval cbv beta iota delta [proj1_sig add_sig] in
- proj2_sig (add_sig f g).
-
-Definition carry_add_sig (f g : fe5211_32) :
- { fg : fe5211_32 | fg = carry_add_opt f g}.
-Proof.
- eexists.
- rewrite <-(@appify2_correct fe5211_32).
- cbv.
- autorewrite with zsimplify_fast zsimplify_Z_to_pos; cbv.
- autorewrite with zsimplify_Z_to_pos; cbv.
- reflexivity.
-Defined.
-
-Definition carry_add (f g : fe5211_32) : fe5211_32 :=
- Eval cbv beta iota delta [proj1_sig carry_add_sig] in
- proj1_sig (carry_add_sig f g).
-
-Definition carry_add_correct (f g : fe5211_32)
- : carry_add f g = carry_add_opt f g :=
- Eval cbv beta iota delta [proj1_sig carry_add_sig] in
- proj2_sig (carry_add_sig f g).
-
-Definition sub_sig (f g : fe5211_32) :
- { fg : fe5211_32 | fg = sub_opt f g}.
-Proof.
- eexists.
- rewrite <-(@appify2_correct fe5211_32).
- cbv.
- reflexivity.
-Defined.
-
-Definition sub (f g : fe5211_32) : fe5211_32 :=
- Eval cbv beta iota delta [proj1_sig sub_sig] in
- proj1_sig (sub_sig f g).
-
-Definition sub_correct (f g : fe5211_32)
- : sub f g = sub_opt f g :=
- Eval cbv beta iota delta [proj1_sig sub_sig] in
- proj2_sig (sub_sig f g).
-
-Definition carry_sub_sig (f g : fe5211_32) :
- { fg : fe5211_32 | fg = carry_sub_opt f g}.
-Proof.
- eexists.
- rewrite <-(@appify2_correct fe5211_32).
- cbv.
- autorewrite with zsimplify_fast zsimplify_Z_to_pos; cbv.
- autorewrite with zsimplify_Z_to_pos; cbv.
- reflexivity.
-Defined.
-
-Definition carry_sub (f g : fe5211_32) : fe5211_32 :=
- Eval cbv beta iota delta [proj1_sig carry_sub_sig] in
- proj1_sig (carry_sub_sig f g).
-
-Definition carry_sub_correct (f g : fe5211_32)
- : carry_sub f g = carry_sub_opt f g :=
- Eval cbv beta iota delta [proj1_sig carry_sub_sig] in
- proj2_sig (carry_sub_sig f g).
-
-(* For multiplication, we add another layer of definition so that we can
- rewrite under the [let] binders. *)
-Definition mul_simpl_sig (f g : fe5211_32) :
- { fg : fe5211_32 | fg = carry_mul_opt k_ c_ f g}.
-Proof.
- cbv [fe5211_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv. (* N.B. The slow part of this is computing with [Z_div_opt].
- It would be much faster if we could take advantage of
- the form of [base_from_limb_widths] when doing
- division, so we could do subtraction instead. *)
- autorewrite with zsimplify_fast.
- reflexivity.
-Defined.
-
-Definition mul_simpl (f g : fe5211_32) : fe5211_32 :=
- Eval cbv beta iota delta [proj1_sig mul_simpl_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19) := f in
- let '(g0, g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12, g13, g14, g15, g16, g17, g18, g19) := g in
- proj1_sig (mul_simpl_sig (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19)
- (g0, g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12, g13, g14, g15, g16, g17, g18, g19)).
-
-Definition mul_simpl_correct (f g : fe5211_32)
- : mul_simpl f g = carry_mul_opt k_ c_ f g.
-Proof.
- pose proof (proj2_sig (mul_simpl_sig f g)).
- cbv [fe5211_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Qed.
-
-Definition mul_sig (f g : fe5211_32) :
- { fg : fe5211_32 | fg = carry_mul_opt k_ c_ f g}.
-Proof.
- eexists.
- rewrite <-mul_simpl_correct.
- rewrite <-(@appify2_correct fe5211_32).
- cbv.
- autorewrite with zsimplify_fast zsimplify_Z_to_pos; cbv.
- autorewrite with zsimplify_Z_to_pos; cbv.
- reflexivity.
-Defined.
-
-Definition mul (f g : fe5211_32) : fe5211_32 :=
- Eval cbv beta iota delta [proj1_sig mul_sig] in
- proj1_sig (mul_sig f g).
-
-Definition mul_correct (f g : fe5211_32)
- : mul f g = carry_mul_opt k_ c_ f g :=
- Eval cbv beta iota delta [proj1_sig add_sig] in
- proj2_sig (mul_sig f g).
-
-Definition opp_sig (f : fe5211_32) :
- { g : fe5211_32 | g = opp_opt f }.
-Proof.
- eexists.
- cbv [opp_opt].
- rewrite <-sub_correct.
- rewrite zero_subst.
- cbv [sub].
- reflexivity.
-Defined.
-
-Definition opp (f : fe5211_32) : fe5211_32
- := Eval cbv beta iota delta [proj1_sig opp_sig] in proj1_sig (opp_sig f).
-
-Definition opp_correct (f : fe5211_32)
- : opp f = opp_opt f
- := Eval cbv beta iota delta [proj2_sig add_sig] in proj2_sig (opp_sig f).
-
-Definition carry_opp_sig (f : fe5211_32) :
- { g : fe5211_32 | g = carry_opp_opt f }.
-Proof.
- eexists.
- cbv [carry_opp_opt].
- rewrite <-carry_sub_correct.
- rewrite zero_subst.
- cbv [carry_sub].
- reflexivity.
-Defined.
-
-Definition carry_opp (f : fe5211_32) : fe5211_32
- := Eval cbv beta iota delta [proj1_sig carry_opp_sig] in proj1_sig (carry_opp_sig f).
-
-Definition carry_opp_correct (f : fe5211_32)
- : carry_opp f = carry_opp_opt f
- := Eval cbv beta iota delta [proj2_sig add_sig] in proj2_sig (carry_opp_sig f).
-
-Definition pow (f : fe5211_32) chain := fold_chain_opt one_ mul chain [f].
-
-Lemma pow_correct (f : fe5211_32) : forall chain, pow f chain = pow_opt k_ c_ one_ f chain.
-Proof.
- cbv [pow pow_opt]; intros.
- rewrite !fold_chain_opt_correct.
- apply Proper_fold_chain; try reflexivity.
- intros; subst; apply mul_correct.
-Qed.
-
-(* Now that we have [pow], we can compute sqrt of -1 for use
- in sqrt function (this is not needed unless the prime is
- 5 mod 8) *)
-Local Transparent Z.shiftr Z.shiftl Z.land Z.mul Z.add Z.sub Z.lor Let_In Z.eqb Z.ltb andb.
-
-Definition sqrt_m1 := Eval vm_compute in (pow (encode (F.of_Z _ 2)) (pow2_chain (Z.to_pos ((modulus - 1) / 4)))).
-
-Local Opaque Z.shiftr Z.shiftl Z.land Z.mul Z.add Z.sub Z.lor Let_In Z.eqb Z.ltb andb.
-
-Definition inv_sig (f : fe5211_32) :
- { g : fe5211_32 | g = inv_opt k_ c_ one_ f }.
-Proof.
- eexists; cbv [inv_opt].
- rewrite <-pow_correct.
- cbv - [mul].
- reflexivity.
-Defined.
-
-Definition inv (f : fe5211_32) : fe5211_32
- := Eval cbv beta iota delta [proj1_sig inv_sig] in proj1_sig (inv_sig f).
-
-Definition inv_correct (f : fe5211_32)
- : inv f = inv_opt k_ c_ one_ f
- := Eval cbv beta iota delta [proj2_sig inv_sig] in proj2_sig (inv_sig f).
-
-Definition mbs_field := modular_base_system_field modulus_gt_2.
-
-Import Morphisms.
-
-Local Existing Instance prime_modulus.
-
-Lemma field_and_homomorphisms
- : @field fe5211_32 eq zero_ one_ opp add sub mul inv div
- /\ @Ring.is_homomorphism
- (F modulus) Logic.eq F.one F.add F.mul
- fe5211_32 eq one_ add mul encode
- /\ @Ring.is_homomorphism
- fe5211_32 eq one_ add mul
- (F modulus) Logic.eq F.one F.add F.mul
- decode.
-Proof.
- eapply @Field.field_and_homomorphism_from_redundant_representation.
- { exact (F.field_modulo _). }
- { apply encode_rep. }
- { reflexivity. }
- { reflexivity. }
- { reflexivity. }
- { intros; rewrite opp_correct, opp_opt_correct; apply opp_rep; reflexivity. }
- { intros; rewrite add_correct, add_opt_correct; apply add_rep; reflexivity. }
- { intros; rewrite sub_correct, sub_opt_correct; apply sub_rep; reflexivity. }
- { intros; rewrite mul_correct, carry_mul_opt_correct by reflexivity; apply carry_mul_rep; reflexivity. }
- { intros; rewrite inv_correct, inv_opt_correct by reflexivity; apply inv_rep; reflexivity. }
- { intros; apply encode_rep. }
-Qed.
-
-Definition field5211_32 : @field fe5211_32 eq zero_ one_ opp add sub mul inv div := proj1 field_and_homomorphisms.
-
-Lemma carry_field_and_homomorphisms
- : @field fe5211_32 eq zero_ one_ carry_opp carry_add carry_sub mul inv div
- /\ @Ring.is_homomorphism
- (F modulus) Logic.eq F.one F.add F.mul
- fe5211_32 eq one_ carry_add mul encode
- /\ @Ring.is_homomorphism
- fe5211_32 eq one_ carry_add mul
- (F modulus) Logic.eq F.one F.add F.mul
- decode.
-Proof.
- eapply @Field.field_and_homomorphism_from_redundant_representation.
- { exact (F.field_modulo _). }
- { apply encode_rep. }
- { reflexivity. }
- { reflexivity. }
- { reflexivity. }
- { intros; rewrite carry_opp_correct, carry_opp_opt_correct, carry_opp_rep; apply opp_rep; reflexivity. }
- { intros; rewrite carry_add_correct, carry_add_opt_correct, carry_add_rep; apply add_rep; reflexivity. }
- { intros; rewrite carry_sub_correct, carry_sub_opt_correct, carry_sub_rep; apply sub_rep; reflexivity. }
- { intros; rewrite mul_correct, carry_mul_opt_correct by reflexivity; apply carry_mul_rep; reflexivity. }
- { intros; rewrite inv_correct, inv_opt_correct by reflexivity; apply inv_rep; reflexivity. }
- { intros; apply encode_rep. }
-Qed.
-
-Definition carry_field5211_32 : @field fe5211_32 eq zero_ one_ carry_opp carry_add carry_sub mul inv div := proj1 carry_field_and_homomorphisms.
-
-Lemma homomorphism_F5211_32_encode
- : @Ring.is_homomorphism (F modulus) Logic.eq F.one F.add F.mul fe5211_32 eq one add mul encode.
-Proof. apply field_and_homomorphisms. Qed.
-
-Lemma homomorphism_F5211_32_decode
- : @Ring.is_homomorphism fe5211_32 eq one add mul (F modulus) Logic.eq F.one F.add F.mul decode.
-Proof. apply field_and_homomorphisms. Qed.
-
-
-Lemma homomorphism_carry_F5211_32_encode
- : @Ring.is_homomorphism (F modulus) Logic.eq F.one F.add F.mul fe5211_32 eq one carry_add mul encode.
-Proof. apply carry_field_and_homomorphisms. Qed.
-
-Lemma homomorphism_carry_F5211_32_decode
- : @Ring.is_homomorphism fe5211_32 eq one carry_add mul (F modulus) Logic.eq F.one F.add F.mul decode.
-Proof. apply carry_field_and_homomorphisms. Qed.
-
-Definition ge_modulus_sig (f : fe5211_32) :
- { b : Z | b = ge_modulus_opt (to_list 20 f) }.
-Proof.
- cbv [fe5211_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists; cbv [ge_modulus_opt].
- rewrite !modulus_digits_subst.
- cbv.
- reflexivity.
-Defined.
-
-Definition ge_modulus (f : fe5211_32) : Z :=
- Eval cbv beta iota delta [proj1_sig ge_modulus_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19) := f in
- proj1_sig (ge_modulus_sig (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19)).
-
-Definition ge_modulus_correct (f : fe5211_32) :
- ge_modulus f = ge_modulus_opt (to_list 20 f).
-Proof.
- pose proof (proj2_sig (ge_modulus_sig f)).
- cbv [fe5211_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Defined.
-
-Definition prefreeze_sig (f : fe5211_32) :
- { f' : fe5211_32 | f' = from_list_default 0 20 (carry_full_3_opt c_ (to_list 20 f)) }.
-Proof.
- cbv [fe5211_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv - [from_list_default].
- (* TODO(jgross,jadep): use Reflective linearization here? *)
- repeat (
- set_evars; rewrite app_Let_In_nd; subst_evars;
- eapply Proper_Let_In_nd_changebody; [reflexivity|intro]).
- cbv [from_list_default from_list_default'].
- reflexivity.
-Defined.
-
-Definition prefreeze (f : fe5211_32) : fe5211_32 :=
- Eval cbv beta iota delta [proj1_sig prefreeze_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19) := f in
- proj1_sig (prefreeze_sig (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19)).
-
-Definition prefreeze_correct (f : fe5211_32)
- : prefreeze f = from_list_default 0 20 (carry_full_3_opt c_ (to_list 20 f)).
-Proof.
- pose proof (proj2_sig (prefreeze_sig f)).
- cbv [fe5211_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Defined.
-
-Definition postfreeze_sig (f : fe5211_32) :
- { f' : fe5211_32 | f' = from_list_default 0 20 (conditional_subtract_modulus_opt (int_width := int_width) (to_list 20 f)) }.
-Proof.
- cbv [fe5211_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists; cbv [freeze_opt int_width].
- cbv [to_list to_list'].
- cbv [conditional_subtract_modulus_opt].
- rewrite !modulus_digits_subst.
- cbv - [from_list_default].
- (* TODO(jgross,jadep): use Reflective linearization here? *)
- repeat (
- set_evars; rewrite app_Let_In_nd; subst_evars;
- eapply Proper_Let_In_nd_changebody; [reflexivity|intro]).
- cbv [from_list_default from_list_default'].
- reflexivity.
-Defined.
-
-Definition postfreeze (f : fe5211_32) : fe5211_32 :=
- Eval cbv beta iota delta [proj1_sig postfreeze_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19) := f in
- proj1_sig (postfreeze_sig (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19)).
-
-Definition postfreeze_correct (f : fe5211_32)
- : postfreeze f = from_list_default 0 20 (conditional_subtract_modulus_opt (int_width := int_width) (to_list 20 f)).
-Proof.
- pose proof (proj2_sig (postfreeze_sig f)).
- cbv [fe5211_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Defined.
-
-Definition freeze (f : fe5211_32) : fe5211_32 :=
- dlet x := prefreeze f in
- postfreeze x.
-
-Local Transparent Let_In.
-Definition freeze_correct (f : fe5211_32)
- : freeze f = from_list_default 0 20 (freeze_opt (int_width := int_width) c_ (to_list 20 f)).
-Proof.
- cbv [freeze_opt freeze Let_In].
- rewrite prefreeze_correct.
- rewrite postfreeze_correct.
- match goal with
- |- appcontext [to_list _ (from_list_default _ ?n ?xs)] =>
- assert (length xs = n) as pf; [ | rewrite from_list_default_eq with (pf0 := pf) ] end.
- { rewrite carry_full_3_opt_correct; repeat rewrite ModularBaseSystemListProofs.length_carry_full; auto using length_to_list. }
- rewrite to_list_from_list.
- reflexivity.
-Qed.
-Local Opaque Let_In.
-
-Definition fieldwiseb_sig (f g : fe5211_32) :
- { b | b = @fieldwiseb Z Z 20 Z.eqb f g }.
-Proof.
- cbv [fe5211_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv.
- reflexivity.
-Defined.
-
-Definition fieldwiseb (f g : fe5211_32) : bool
- := Eval cbv beta iota delta [proj1_sig fieldwiseb_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19) := f in
- let '(g0, g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12, g13, g14, g15, g16, g17, g18, g19) := g in
- proj1_sig (fieldwiseb_sig (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19)
- (g0, g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12, g13, g14, g15, g16, g17, g18, g19)).
-
-Lemma fieldwiseb_correct (f g : fe5211_32)
- : fieldwiseb f g = @Tuple.fieldwiseb Z Z 20 Z.eqb f g.
-Proof.
- set (f' := f); set (g' := g).
- hnf in f, g; destruct_head' prod.
- exact (proj2_sig (fieldwiseb_sig f' g')).
-Qed.
-
-Definition eqb_sig (f g : fe5211_32) :
- { b | b = eqb int_width f g }.
-Proof.
- cbv [eqb].
- cbv [fe5211_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv [ModularBaseSystem.freeze int_width].
- rewrite <-!from_list_default_eq with (d := 0).
- rewrite <-!(freeze_opt_correct c_) by auto using length_to_list.
- rewrite <-!freeze_correct.
- rewrite <-fieldwiseb_correct.
- reflexivity.
-Defined.
-
-Definition eqb (f g : fe5211_32) : bool
- := Eval cbv beta iota delta [proj1_sig eqb_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19) := f in
- let '(g0, g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12, g13, g14, g15, g16, g17, g18, g19) := g in
- proj1_sig (eqb_sig (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19)
- (g0, g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12, g13, g14, g15, g16, g17, g18, g19)).
-
-Lemma eqb_correct (f g : fe5211_32)
- : eqb f g = ModularBaseSystem.eqb int_width f g.
-Proof.
- set (f' := f); set (g' := g).
- hnf in f, g; destruct_head' prod.
- exact (proj2_sig (eqb_sig f' g')).
-Qed.
-
-Definition sqrt_sig (f : fe5211_32) :
- { f' : fe5211_32 | f' = sqrt_3mod4_opt k_ c_ one_ f}.
-Proof.
- eexists.
- cbv [sqrt_3mod4_opt int_width].
- rewrite <- pow_correct.
- reflexivity.
-Defined.
-
-Definition sqrt (f : fe5211_32) : fe5211_32
- := Eval cbv beta iota delta [proj1_sig sqrt_sig] in proj1_sig (sqrt_sig f).
-
-Definition sqrt_correct (f : fe5211_32)
- : sqrt f = sqrt_3mod4_opt k_ c_ one_ f
- := Eval cbv beta iota delta [proj2_sig sqrt_sig] in proj2_sig (sqrt_sig f).
-
-Definition pack_simpl_sig (f : fe5211_32) :
- { f' | f' = pack_opt params5211_32 wire_widths_nonneg bits_eq f }.
-Proof.
- cbv [fe5211_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv [pack_opt].
- repeat (rewrite <-convert'_opt_correct;
- cbv - [from_list_default_opt Conversion.convert']).
- repeat progress rewrite ?Z.shiftl_0_r, ?Z.shiftr_0_r, ?Z.land_0_l, ?Z.lor_0_l, ?Z.land_same_r.
- cbv [from_list_default_opt].
- reflexivity.
-Defined.
-
-Definition pack_simpl (f : fe5211_32) :=
- Eval cbv beta iota delta [proj1_sig pack_simpl_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19) := f in
- proj1_sig (pack_simpl_sig (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19)).
-
-Definition pack_simpl_correct (f : fe5211_32)
- : pack_simpl f = pack_opt params5211_32 wire_widths_nonneg bits_eq f.
-Proof.
- pose proof (proj2_sig (pack_simpl_sig f)).
- cbv [fe5211_32] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Qed.
-
-Definition pack_sig (f : fe5211_32) :
- { f' | f' = pack_opt params5211_32 wire_widths_nonneg bits_eq f }.
-Proof.
- eexists.
- rewrite <-pack_simpl_correct.
- rewrite <-(@app_n_correct wire_digits).
- cbv.
- reflexivity.
-Defined.
-
-Definition pack (f : fe5211_32) : wire_digits :=
- Eval cbv beta iota delta [proj1_sig pack_sig] in proj1_sig (pack_sig f).
-
-Definition pack_correct (f : fe5211_32)
- : pack f = pack_opt params5211_32 wire_widths_nonneg bits_eq f
- := Eval cbv beta iota delta [proj2_sig pack_sig] in proj2_sig (pack_sig f).
-
-Definition unpack_simpl_sig (f : wire_digits) :
- { f' | f' = unpack_opt params5211_32 wire_widths_nonneg bits_eq f }.
-Proof.
- cbv [wire_digits] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- eexists.
- cbv [unpack_opt].
- repeat (
- rewrite <-convert'_opt_correct;
- cbv - [from_list_default_opt Conversion.convert']).
- repeat progress rewrite ?Z.shiftl_0_r, ?Z.shiftr_0_r, ?Z.land_0_l, ?Z.lor_0_l, ?Z.land_same_r.
- cbv [from_list_default_opt].
- reflexivity.
-Defined.
-
-Definition unpack_simpl (f : wire_digits) : fe5211_32 :=
- Eval cbv beta iota delta [proj1_sig unpack_simpl_sig] in
- let '(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16) := f in
- proj1_sig (unpack_simpl_sig (f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16)).
-
-Definition unpack_simpl_correct (f : wire_digits)
- : unpack_simpl f = unpack_opt params5211_32 wire_widths_nonneg bits_eq f.
-Proof.
- pose proof (proj2_sig (unpack_simpl_sig f)).
- cbv [wire_digits] in *.
- repeat match goal with p : (_ * Z)%type |- _ => destruct p end.
- assumption.
-Qed.
-
-Definition unpack_sig (f : wire_digits) :
- { f' | f' = unpack_opt params5211_32 wire_widths_nonneg bits_eq f }.
-Proof.
- eexists.
- rewrite <-unpack_simpl_correct.
- rewrite <-(@app_n2_correct fe5211_32).
- cbv.
- reflexivity.
-Defined.
-
-Definition unpack (f : wire_digits) : fe5211_32 :=
- Eval cbv beta iota delta [proj1_sig unpack_sig] in proj1_sig (unpack_sig f).
-
-Definition unpack_correct (f : wire_digits)
- : unpack f = unpack_opt params5211_32 wire_widths_nonneg bits_eq f
- := Eval cbv beta iota delta [proj2_sig pack_sig] in proj2_sig (unpack_sig f).
diff --git a/src/SpecificGen/GF5211_32Bounded.v b/src/SpecificGen/GF5211_32Bounded.v
deleted file mode 100644
index 02ea3614f..000000000
--- a/src/SpecificGen/GF5211_32Bounded.v
+++ /dev/null
@@ -1,521 +0,0 @@
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParams.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParamProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemOpt.
-Require Import Crypto.SpecificGen.GF5211_32.
-Require Import Crypto.SpecificGen.GF5211_32BoundedCommon.
-Require Import Crypto.SpecificGen.GF5211_32Reflective.
-Require Import Bedrock.Word Crypto.Util.WordUtil.
-Require Import Coq.Lists.List Crypto.Util.ListUtil.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemWord.
-Require Import Crypto.Tactics.VerdiTactics.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Notations.
-Require Import Crypto.Util.Bool.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Algebra.
-Import ListNotations.
-Require Import Coq.ZArith.ZArith Coq.ZArith.Zpower Coq.ZArith.ZArith Coq.ZArith.Znumtheory.
-Local Open Scope Z.
-
-
-Local Ltac cbv_tuple_map :=
- cbv [Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list' HList.hlistP HList.hlistP'].
-
-Local Ltac post_bounded_t :=
- (* much pain and hackery to work around [Defined] taking forever *)
- cbv_tuple_map;
- let blem' := fresh "blem'" in
- let is_bounded_lem := fresh "is_bounded_lem" in
- intros is_bounded_lem blem';
- apply blem'; repeat apply conj; apply is_bounded_lem.
-Local Ltac bounded_t opW blem :=
- generalize blem; generalize is_bounded_proj1_fe5211_32; post_bounded_t.
-Local Ltac bounded_wire_digits_t opW blem :=
- generalize blem; generalize is_bounded_proj1_wire_digits; post_bounded_t.
-
-Local Ltac define_binop f g opW blem :=
- refine (exist_fe5211_32W (opW (proj1_fe5211_32W f, proj1_fe5211_32W g)) _);
- abstract bounded_t opW blem.
-Local Ltac define_unop f opW blem :=
- refine (exist_fe5211_32W (opW (proj1_fe5211_32W f)) _);
- abstract bounded_t opW blem.
-Local Ltac define_unop_FEToZ f opW :=
- refine (opW (proj1_fe5211_32W f)).
-Local Ltac define_unop_FEToWire f opW blem :=
- refine (exist_wire_digitsW (opW (proj1_fe5211_32W f)) _);
- abstract bounded_t opW blem.
-Local Ltac define_unop_WireToFE f opW blem :=
- refine (exist_fe5211_32W (opW (proj1_wire_digitsW f)) _);
- abstract bounded_wire_digits_t opW blem.
-
-Local Opaque Let_In.
-Local Opaque Z.add Z.sub Z.mul Z.shiftl Z.shiftr Z.land Z.lor Z.eqb NToWord64.
-Local Arguments interp_radd / _.
-Local Arguments interp_rsub / _.
-Local Arguments interp_rmul / _.
-Local Arguments interp_ropp / _.
-Local Arguments interp_rprefreeze / _.
-Local Arguments interp_rge_modulus / _.
-Local Arguments interp_rpack / _.
-Local Arguments interp_runpack / _.
-Definition addW (f : fe5211_32W * fe5211_32W) : fe5211_32W := Eval simpl in interp_radd f.
-Definition subW (f : fe5211_32W * fe5211_32W) : fe5211_32W := Eval simpl in interp_rsub f.
-Definition mulW (f : fe5211_32W * fe5211_32W) : fe5211_32W := Eval simpl in interp_rmul f.
-Definition oppW (f : fe5211_32W) : fe5211_32W := Eval simpl in interp_ropp f.
-Definition prefreezeW (f : fe5211_32W) : fe5211_32W := Eval simpl in interp_rprefreeze f.
-Definition ge_modulusW (f : fe5211_32W) : word64 := Eval simpl in interp_rge_modulus f.
-Definition packW (f : fe5211_32W) : wire_digitsW := Eval simpl in interp_rpack f.
-Definition unpackW (f : wire_digitsW) : fe5211_32W := Eval simpl in interp_runpack f.
-
-Definition modulusW :=
- Eval cbv - [ZToWord64] in (Tuple.map ZToWord64 (Tuple.from_list_default 0%Z length_fe5211_32 GF5211_32.modulus_digits_)).
-
-Definition postfreeze : GF5211_32.fe5211_32 -> GF5211_32.fe5211_32 :=
- GF5211_32.postfreeze.
-
-Lemma freeze_prepost_freeze : forall x, postfreeze (prefreeze x) = GF5211_32.freeze x.
-Proof. reflexivity. Qed.
-
-Definition postfreezeW : fe5211_32W -> fe5211_32W :=
- (conditional_subtract_modulusW
- (num_limbs := length_fe5211_32)
- modulusW
- ge_modulusW
- (Interpretations64.WordW.neg GF5211_32.int_width)
- ).
-
-Definition freezeW (f : fe5211_32W) : fe5211_32W := Eval cbv beta delta [prefreezeW postfreezeW] in postfreezeW (prefreezeW f).
-
-Local Transparent Let_In.
-(* Wrapper to allow extracted code to not unfold [mulW] *)
-Definition mulW_noinline := mulW.
-Definition powW (f : fe5211_32W) chain := fold_chain_opt (proj1_fe5211_32W one) (fun f g => mulW_noinline (f, g)) chain [f].
-Definition invW (f : fe5211_32W) : fe5211_32W
- := Eval cbv -[Let_In fe5211_32W mulW_noinline] in powW f (chain inv_ec).
-
-Local Ltac port_correct_and_bounded pre_rewrite opW interp_rop rop_cb :=
- change opW with (interp_rop);
- rewrite pre_rewrite;
- intros; apply rop_cb; assumption.
-
-Lemma addW_correct_and_bounded : ibinop_correct_and_bounded addW (Curry.curry2 carry_add).
-Proof. port_correct_and_bounded interp_radd_correct addW interp_radd radd_correct_and_bounded. Qed.
-Lemma subW_correct_and_bounded : ibinop_correct_and_bounded subW (Curry.curry2 carry_sub).
-Proof. port_correct_and_bounded interp_rsub_correct subW interp_rsub rsub_correct_and_bounded. Qed.
-Lemma mulW_correct_and_bounded : ibinop_correct_and_bounded mulW (Curry.curry2 mul).
-Proof. port_correct_and_bounded interp_rmul_correct mulW interp_rmul rmul_correct_and_bounded. Qed.
-Lemma oppW_correct_and_bounded : iunop_correct_and_bounded oppW carry_opp.
-Proof. port_correct_and_bounded interp_ropp_correct oppW interp_ropp ropp_correct_and_bounded. Qed.
-Lemma prefreezeW_correct_and_bounded : iunop_correct_and_bounded prefreezeW prefreeze.
-Proof. port_correct_and_bounded interp_rprefreeze_correct prefreezeW interp_rprefreeze rprefreeze_correct_and_bounded. Qed.
-Lemma ge_modulusW_correct : iunop_FEToZ_correct ge_modulusW ge_modulus.
-Proof. port_correct_and_bounded interp_rge_modulus_correct ge_modulusW interp_rge_modulus rge_modulus_correct_and_bounded. Qed.
-Lemma packW_correct_and_bounded : iunop_FEToWire_correct_and_bounded packW pack.
-Proof. port_correct_and_bounded interp_rpack_correct packW interp_rpack rpack_correct_and_bounded. Qed.
-Lemma unpackW_correct_and_bounded : iunop_WireToFE_correct_and_bounded unpackW unpack.
-Proof. port_correct_and_bounded interp_runpack_correct unpackW interp_runpack runpack_correct_and_bounded. Qed.
-
-Ltac lower_bound_minus_ge_modulus :=
- apply Z.le_0_sub;
- cbv [ge_modulus Let_In ModularBaseSystemListZOperations.cmovl ModularBaseSystemListZOperations.cmovne ModularBaseSystemListZOperations.neg];
- repeat break_if; Z.ltb_to_lt; subst; try omega;
- rewrite ?Z.land_0_l; auto;
- change Interpretations64.WordW.wordWToZ with word64ToZ;
- etransitivity; try apply Z.land_upper_bound_r; instantiate; try omega;
- apply Z.ones_nonneg; instantiate; vm_compute; discriminate.
-
-Ltac upper_bound_minus_ge_modulus :=
- (apply Z.log2_lt_pow2_alt; [ vm_compute; reflexivity | ]);
- eapply Z.le_lt_trans; [ apply Z.le_sub_nonneg; apply Z.land_nonneg; right; omega | ];
- eapply Z.le_lt_trans; [ eassumption | ];
- instantiate; vm_compute; reflexivity.
-
-Lemma postfreezeW_correct_and_bounded : iunop_correct_and_bounded postfreezeW postfreeze.
-Proof.
- intros x H.
- pose proof (ge_modulusW_correct x H) as Hgm.
- destruct_head_hnf' prod.
- unfold_is_bounded_in H.
- destruct_head' and.
- Z.ltb_to_lt.
- cbv [postfreezeW].
- cbv [conditional_subtract_modulusW Interpretations64.WordW.neg].
- change word64ToZ with Interpretations64.WordW.wordWToZ in *.
- rewrite Hgm.
-
- cbv [modulusW Tuple.map].
- cbv [on_tuple List.map to_list to_list' from_list from_list'
- HList.hlistP HList.hlistP'
- Tuple.map2 on_tuple2 ListUtil.map2 fe5211_32WToZ length_fe5211_32].
- cbv [postfreeze GF5211_32.postfreeze].
- cbv [Let_In].
-
- split.
- { match goal with
- |- (_,word64ToZ (_ ^- (Interpretations64.WordW.ZToWordW ?x) ^& _)) = (_,_ - (?y &' _)) => assert (x = y) as Hxy by reflexivity; repeat rewrite <-Hxy; clear Hxy end.
-
- change ZToWord64 with Interpretations64.WordW.ZToWordW in *.
- preunfold_is_bounded.
- rewrite !Interpretations64.WordW.wordWToZ_sub;
- rewrite !Interpretations64.WordW.wordWToZ_land;
- rewrite !Interpretations64.WordW.wordWToZ_ZToWordW;
- try match goal with
- | |- 0 <= ModularBaseSystemListZOperations.neg _ _ < 2 ^ _ => apply ModularBaseSystemListZOperationsProofs.neg_range; omega
- | |- 0 <= _ < 2 ^ Z.of_nat _ => vm_compute; split; [refine (fun x => match x with eq_refl => I end) | reflexivity]
- | |- 0 <= _ &' _ => apply Z.land_nonneg; right; omega
- | |- (_,_) = (_,_) => reflexivity
- end;
- try solve [
- (apply Z.log2_lt_pow2_alt; [ vm_compute; reflexivity | ]);
- eapply Z.le_lt_trans; try apply Z.land_upper_bound_r; try apply ModularBaseSystemListZOperationsProofs.neg_range; instantiate; try match goal with |- ?G => not has_evar G; vm_compute; discriminate end; reflexivity];
- match goal with
- | |- 0 <= _ - _ => lower_bound_minus_ge_modulus
- | |- Z.log2 (_ - _) < _ => upper_bound_minus_ge_modulus
- end. }
-
-
- change ZToWord64 with Interpretations64.WordW.ZToWordW in *;
- preunfold_is_bounded.
- rewrite !Interpretations64.WordW.wordWToZ_sub;
- rewrite !Interpretations64.WordW.wordWToZ_land;
- rewrite !Interpretations64.WordW.wordWToZ_ZToWordW;
- repeat match goal with |- _ /\ _ => split; Z.ltb_to_lt end;
- Z.ltb_to_lt; unfold_is_bounded; Z.ltb_to_lt;
- try match goal with
- | |- 0 <= ModularBaseSystemListZOperations.neg _ _ < 2 ^ _ => apply ModularBaseSystemListZOperationsProofs.neg_range; omega
- | |- 0 <= _ < 2 ^ Z.of_nat _ => vm_compute; split; [refine (fun x => match x with eq_refl => I end) | reflexivity]
- | |- 0 <= _ &' _ => apply Z.land_nonneg; right; omega
- end;
- try solve [
- (apply Z.log2_lt_pow2_alt; [ vm_compute; reflexivity | ]);
- eapply Z.le_lt_trans; try apply Z.land_upper_bound_r; try apply ModularBaseSystemListZOperationsProofs.neg_range; instantiate; try match goal with |- ?G => not has_evar G; vm_compute; discriminate end; reflexivity];
- try match goal with
- | |- 0 <= _ - _ => lower_bound_minus_ge_modulus
- | |- Z.log2 (_ - _) < _ => upper_bound_minus_ge_modulus
- | |- _ - _ <= _ => etransitivity; [ apply Z.le_sub_nonneg; apply Z.land_nonneg; right; omega | instantiate; assumption ]
- | |- 0 <= ModularBaseSystemListZOperations.neg _ _ =>
- apply ModularBaseSystemListZOperationsProofs.neg_range; vm_compute; discriminate
- | |- ModularBaseSystemListZOperations.neg _ _ < _ =>
- apply ModularBaseSystemListZOperationsProofs.neg_range; vm_compute; discriminate
- | |- _ => vm_compute; (discriminate || reflexivity)
- end.
-Qed.
-
-Lemma freezeW_correct_and_bounded : iunop_correct_and_bounded freezeW freeze.
-Proof.
- intros f H; rewrite <- freeze_prepost_freeze.
- change (freezeW f) with (postfreezeW (prefreezeW f)).
- destruct (prefreezeW_correct_and_bounded f H) as [H0 H1].
- destruct (postfreezeW_correct_and_bounded _ H1) as [H0' H1'].
- split; [ | assumption ].
- rewrite H0', H0; reflexivity.
-Qed.
-
-Lemma powW_correct_and_bounded chain : iunop_correct_and_bounded (fun x => powW x chain) (fun x => pow x chain).
-Proof.
- cbv [powW pow].
- intro x; intros; apply (fold_chain_opt_gen fe5211_32WToZ is_bounded [x]).
- { reflexivity. }
- { reflexivity. }
- { intros; pose proof (fun k0 k1 X Y => proj1 (mulW_correct_and_bounded (k0, k1) (conj X Y))) as H'.
- cbv [Curry.curry2 Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list'] in H'.
- rewrite <- H' by assumption.
- apply mulW_correct_and_bounded; split; assumption. }
- { intros; rewrite (fun X Y => proj1 (mulW_correct_and_bounded (_, _) (conj X Y))) by assumption; reflexivity. }
- { intros [|?]; autorewrite with simpl_nth_default;
- (assumption || reflexivity). }
-Qed.
-
-Lemma invW_correct_and_bounded : iunop_correct_and_bounded invW inv.
-Proof.
- intro f.
- assert (H : forall f, invW f = powW f (chain inv_ec))
- by abstract (cbv -[Let_In fe5211_32W mulW_noinline]; reflexivity).
- rewrite H.
- rewrite inv_correct.
- cbv [inv_opt].
- rewrite <- pow_correct.
- apply powW_correct_and_bounded.
-Qed.
-
-Definition fieldwisebW_sig (f g : fe5211_32W)
- : { b | b = GF5211_32.fieldwiseb (fe5211_32WToZ f) (fe5211_32WToZ g) }.
-Proof.
- hnf in f, g; destruct_head' prod.
- eexists.
- cbv [GF5211_32.fieldwiseb fe5211_32WToZ].
- rewrite ?word64eqb_Zeqb.
- reflexivity.
-Defined.
-
-Definition fieldwisebW (f g : fe5211_32W) : bool :=
- Eval cbv [proj1_sig fieldwisebW_sig appify2 app_fe5211_32W] in
- appify2 (fun f g => proj1_sig (fieldwisebW_sig f g)) f g.
-
-Lemma fieldwisebW_correct f g
- : fieldwisebW f g = GF5211_32.fieldwiseb (fe5211_32WToZ f) (fe5211_32WToZ g).
-Proof.
- set (f' := f); set (g' := g).
- hnf in f, g; destruct_head' prod.
- exact (proj2_sig (fieldwisebW_sig f' g')).
-Qed.
-
-Local Arguments freezeW : simpl never.
-Local Arguments fe5211_32WToZ !_ / .
-Local Opaque freezeW.
-
-Definition eqbW_sig (f g : fe5211_32W)
- : { b | is_bounded (fe5211_32WToZ f) = true
- -> is_bounded (fe5211_32WToZ g) = true
- -> b = GF5211_32.eqb (fe5211_32WToZ f) (fe5211_32WToZ g) }.
-Proof.
- pose proof (fun pf => proj1 (freezeW_correct_and_bounded f pf)) as frf.
- pose proof (fun pf => proj1 (freezeW_correct_and_bounded g pf)) as frg.
- hnf in f, g; destruct_head' prod.
- eexists.
- unfold GF5211_32.eqb.
- simpl @fe5211_32WToZ in *; cbv beta iota.
- intros.
- cbv [Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list' fe5211_32WToZ] in *.
- rewrite <- frf, <- frg by assumption.
- etransitivity; [ eapply fieldwisebW_correct | ].
- cbv [fe5211_32WToZ].
- reflexivity.
-Defined.
-
-Definition eqbW (f g : fe5211_32W) : bool :=
- Eval cbv [proj1_sig eqbW_sig appify2 app_fe5211_32W] in
- appify2 (fun f g => proj1_sig (eqbW_sig f g)) f g.
-
-Lemma eqbW_correct f g
- : is_bounded (fe5211_32WToZ f) = true
- -> is_bounded (fe5211_32WToZ g) = true
- -> eqbW f g = GF5211_32.eqb (fe5211_32WToZ f) (fe5211_32WToZ g).
-Proof.
- set (f' := f); set (g' := g).
- hnf in f, g; destruct_head' prod.
- exact (proj2_sig (eqbW_sig f' g')).
-Qed.
-
-Definition sqrt_m1W' : fe5211_32W :=
- Eval vm_compute in fe5211_32ZToW sqrt_m1.
-Definition sqrt_m1W := Eval cbv [sqrt_m1W' fe5211_32W_word64ize word64ize andb opt.word64ToZ opt.word64ize opt.Zleb Z.compare CompOpp Pos.compare Pos.compare_cont] in fe5211_32W_word64ize sqrt_m1W'.
-
-Definition GF5211_32sqrt (x : GF5211_32.fe5211_32) : GF5211_32.fe5211_32.
-Proof.
- lazymatch (eval cbv delta [GF5211_32.sqrt] in GF5211_32.sqrt) with
- | (fun powf powf_squared f => dlet a := powf in _)
- => exact (dlet powx := powW (fe5211_32ZToW x) (chain GF5211_32.sqrt_ec) in
- GF5211_32.sqrt (fe5211_32WToZ powx) (fe5211_32WToZ (mulW_noinline (powx, powx))) x)
- | (fun f => pow f _)
- => exact (GF5211_32.sqrt x)
- end.
-Defined.
-
-Definition sqrtW_sig
- : { sqrtW | iunop_correct_and_bounded sqrtW GF5211_32sqrt }.
-Proof.
- eexists.
- unfold GF5211_32sqrt, GF5211_32.sqrt.
- intros.
- rewrite ?fe5211_32ZToW_WToZ.
- split.
- { etransitivity.
- Focus 2. {
- lazymatch goal with
- | [ |- _ = pow _ _ ]
- => apply powW_correct_and_bounded; assumption
- | [ |- _ = (dlet powx := _ in _) ]
- => apply Proper_Let_In_nd_changebody_eq; intros;
- set_evars;
- match goal with (* unfold the first dlet ... in, but only if it's binding a var *)
- | [ |- ?x = dlet y := fe5211_32WToZ ?z in ?f ]
- => is_var z; change (x = match fe5211_32WToZ z with y => f end)
- end;
- change sqrt_m1 with (fe5211_32WToZ sqrt_m1W);
- pose proof (fun X Y => proj1 (mulW_correct_and_bounded (sqrt_m1W, a) (conj X Y))) as correctness;
- let cbv_in_all _ := (cbv [fe5211_32WToZ Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list' fe5211_32WToZ Curry.curry2 HList.hlistP HList.hlistP'] in *; idtac) in
- cbv_in_all ();
- let solver _ := (repeat match goal with
- | _ => progress subst
- | _ => progress unfold fst, snd
- | _ => progress cbv_in_all ()
- | [ |- ?x /\ ?x ] => cut x; [ intro; split; assumption | ]
- | [ |- is_bounded ?op = true ]
- => let H := fresh in
- lazymatch op with
- | context[mulW (_, _)] => pose proof mulW_correct_and_bounded as H
- | context[mulW_noinline (_, _)] => pose proof mulW_correct_and_bounded as H
- | context[powW _ _] => pose proof powW_correct_and_bounded as H
- | context[sqrt_m1W] => vm_compute; reflexivity
- | _ => assumption
- end;
- cbv_in_all ();
- apply H
- end) in
- rewrite <- correctness by solver (); clear correctness;
- let lem := fresh in
- pose proof eqbW_correct as lem; cbv_in_all (); rewrite <- lem by solver (); clear lem;
- pose proof (pull_bool_if fe5211_32WToZ) as lem; cbv_in_all (); rewrite lem by solver (); clear lem;
- subst_evars; reflexivity
- end.
- } Unfocus.
- assert (Hfold : forall x, fe5211_32WToZ x = fe5211_32WToZ x) by reflexivity.
- unfold fe5211_32WToZ at 2 in Hfold.
- etransitivity.
- Focus 2. {
- apply Proper_Let_In_nd_changebody; [ reflexivity | intro ].
- apply Hfold.
- } Unfocus.
- clear Hfold.
- lazymatch goal with
- | [ |- context G[dlet x := ?v in fe5211_32WToZ (@?f x)] ]
- => let G' := context G[fe5211_32WToZ (dlet x := v in f x)] in
- cut G'; cbv beta;
- [ cbv [Let_In]; exact (fun x => x) | apply f_equal ]
- | _ => idtac
- end;
- reflexivity.
- }
-
- { cbv [Let_In HList.hlistP HList.hlistP'];
- try break_if;
- repeat lazymatch goal with
- | [ |- is_bounded (?WToZ (powW _ _)) = true ]
- => apply powW_correct_and_bounded; assumption
- | [ |- is_bounded (snd (?WToZ (_, powW _ _))) = true ]
- => generalize powW_correct_and_bounded;
- cbv [snd Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list' HList.hlistP HList.hlistP'];
- let H := fresh in intro H; apply H; assumption
- | [ |- is_bounded (?WToZ (mulW (_, _))) = true ]
- => apply mulW_correct_and_bounded; split; [ vm_compute; reflexivity | ]
- end.
- }
-Defined.
-
-Definition sqrtW (f : fe5211_32W) : fe5211_32W :=
- Eval cbv [proj1_sig sqrtW_sig app_fe5211_32W] in
- app_fe5211_32W f (proj1_sig sqrtW_sig).
-
-Lemma sqrtW_correct_and_bounded : iunop_correct_and_bounded sqrtW GF5211_32sqrt.
-Proof.
- intro f.
- set (f' := f).
- hnf in f; destruct_head' prod.
- assert (H : sqrtW f' = proj1_sig sqrtW_sig f')
- by (subst f'; cbv beta iota delta [proj1_sig sqrtW_sig sqrtW]; reflexivity).
- rewrite H.
- exact (proj2_sig sqrtW_sig f').
-Qed.
-
-
-
-Definition add (f g : fe5211_32) : fe5211_32.
-Proof. define_binop f g addW addW_correct_and_bounded. Defined.
-Definition sub (f g : fe5211_32) : fe5211_32.
-Proof. define_binop f g subW subW_correct_and_bounded. Defined.
-Definition mul (f g : fe5211_32) : fe5211_32.
-Proof. define_binop f g mulW mulW_correct_and_bounded. Defined.
-Definition opp (f : fe5211_32) : fe5211_32.
-Proof. define_unop f oppW oppW_correct_and_bounded. Defined.
-Definition freeze (f : fe5211_32) : fe5211_32.
-Proof. define_unop f freezeW freezeW_correct_and_bounded. Defined.
-Definition ge_modulus (f : fe5211_32) : word64.
-Proof. define_unop_FEToZ f ge_modulusW. Defined.
-Definition pack (f : fe5211_32) : wire_digits.
-Proof. define_unop_FEToWire f packW packW_correct_and_bounded. Defined.
-Definition unpack (f : wire_digits) : fe5211_32.
-Proof. define_unop_WireToFE f unpackW unpackW_correct_and_bounded. Defined.
-
-Definition pow (f : fe5211_32) (chain : list (nat * nat)) : fe5211_32.
-Proof. define_unop f (fun x => powW x chain) powW_correct_and_bounded. Defined.
-Definition inv (f : fe5211_32) : fe5211_32.
-Proof. define_unop f invW (fun x p => proj2 (invW_correct_and_bounded x p)). Defined.
-Definition sqrt (f : fe5211_32) : fe5211_32.
-Proof. define_unop f sqrtW sqrtW_correct_and_bounded. Defined.
-
-Local Ltac op_correct_t op opW_correct_and_bounded :=
- cbv [op];
- lazymatch goal with
- | [ |- context[proj1_fe5211_32 (exist_fe5211_32W _ _)] ]
- => rewrite proj1_fe5211_32_exist_fe5211_32W
- | [ |- context[proj1_wire_digits (exist_wire_digitsW _ _)] ]
- => rewrite proj1_wire_digits_exist_wire_digitsW
- | _ => idtac
- end;
- generalize opW_correct_and_bounded;
- cbv_tuple_map;
- cbv [fst snd];
- let H := fresh in
- intro H; apply H;
- repeat match goal with |- and _ _ => apply conj end;
- lazymatch goal with
- | [ |- is_bounded _ = true ]
- => apply is_bounded_proj1_fe5211_32
- | [ |- wire_digits_is_bounded _ = true ]
- => apply is_bounded_proj1_wire_digits
- end.
-
-Lemma add_correct (f g : fe5211_32) : proj1_fe5211_32 (add f g) = carry_add (proj1_fe5211_32 f) (proj1_fe5211_32 g).
-Proof. op_correct_t add addW_correct_and_bounded. Qed.
-Lemma sub_correct (f g : fe5211_32) : proj1_fe5211_32 (sub f g) = carry_sub (proj1_fe5211_32 f) (proj1_fe5211_32 g).
-Proof. op_correct_t sub subW_correct_and_bounded. Qed.
-Lemma mul_correct (f g : fe5211_32) : proj1_fe5211_32 (mul f g) = GF5211_32.mul (proj1_fe5211_32 f) (proj1_fe5211_32 g).
-Proof. op_correct_t mul mulW_correct_and_bounded. Qed.
-Lemma opp_correct (f : fe5211_32) : proj1_fe5211_32 (opp f) = carry_opp (proj1_fe5211_32 f).
-Proof. op_correct_t opp oppW_correct_and_bounded. Qed.
-Lemma freeze_correct (f : fe5211_32) : proj1_fe5211_32 (freeze f) = GF5211_32.freeze (proj1_fe5211_32 f).
-Proof. op_correct_t freeze freezeW_correct_and_bounded. Qed.
-Lemma ge_modulus_correct (f : fe5211_32) : word64ToZ (ge_modulus f) = GF5211_32.ge_modulus (proj1_fe5211_32 f).
-Proof. op_correct_t ge_modulus ge_modulusW_correct. Qed.
-Lemma pack_correct (f : fe5211_32) : proj1_wire_digits (pack f) = GF5211_32.pack (proj1_fe5211_32 f).
-Proof. op_correct_t pack packW_correct_and_bounded. Qed.
-Lemma unpack_correct (f : wire_digits) : proj1_fe5211_32 (unpack f) = GF5211_32.unpack (proj1_wire_digits f).
-Proof. op_correct_t unpack unpackW_correct_and_bounded. Qed.
-Lemma pow_correct (f : fe5211_32) chain : proj1_fe5211_32 (pow f chain) = GF5211_32.pow (proj1_fe5211_32 f) chain.
-Proof. op_correct_t pow (powW_correct_and_bounded chain). Qed.
-Lemma inv_correct (f : fe5211_32) : proj1_fe5211_32 (inv f) = GF5211_32.inv (proj1_fe5211_32 f).
-Proof. op_correct_t inv (fun x p => proj1 (invW_correct_and_bounded x p)). Qed.
-Lemma sqrt_correct (f : fe5211_32) : proj1_fe5211_32 (sqrt f) = GF5211_32sqrt (proj1_fe5211_32 f).
-Proof. op_correct_t sqrt sqrtW_correct_and_bounded. Qed.
-
-Import Morphisms.
-
-Local Existing Instance prime_modulus.
-
-Lemma field5211_32_and_homomorphisms
- : @field fe5211_32 eq zero one opp add sub mul inv div
- /\ @Ring.is_homomorphism (F _) (@Logic.eq _) 1%F F.add F.mul fe5211_32 eq one add mul encode
- /\ @Ring.is_homomorphism fe5211_32 eq one add mul (F _) (@Logic.eq _) 1%F F.add F.mul decode.
-Proof.
- eapply @Field.field_and_homomorphism_from_redundant_representation.
- { exact (F.field_modulo _). }
- { cbv [decode encode]; intros; rewrite !proj1_fe5211_32_exist_fe5211_32; apply encode_rep. }
- { reflexivity. }
- { reflexivity. }
- { reflexivity. }
- { cbv [decode encode]; intros; rewrite opp_correct, carry_opp_correct, carry_opp_opt_correct, carry_opp_rep; apply opp_rep; reflexivity. }
- { cbv [decode encode]; intros; rewrite add_correct, carry_add_correct, carry_add_opt_correct, carry_add_rep; apply add_rep; reflexivity. }
- { cbv [decode encode]; intros; rewrite sub_correct, carry_sub_correct, carry_sub_opt_correct, carry_sub_rep; apply sub_rep; reflexivity. }
- { cbv [decode encode]; intros; rewrite mul_correct, GF5211_32.mul_correct, carry_mul_opt_correct by reflexivity; apply carry_mul_rep; reflexivity. }
- { cbv [decode encode]; intros; rewrite inv_correct, GF5211_32.inv_correct, inv_opt_correct by reflexivity; apply inv_rep; reflexivity. }
- { cbv [decode encode div]; intros; rewrite !proj1_fe5211_32_exist_fe5211_32; apply encode_rep. }
-Qed.
-
-Global Instance field5211_32 : @field fe5211_32 eq zero one opp add sub mul inv div := proj1 field5211_32_and_homomorphisms.
-
-Local Opaque proj1_fe5211_32 exist_fe5211_32 proj1_fe5211_32W exist_fe5211_32W.
-Global Instance homomorphism_F5211_32_encode
- : @Ring.is_homomorphism (F modulus) Logic.eq F.one F.add F.mul fe5211_32 eq one add mul encode.
-Proof. apply field5211_32_and_homomorphisms. Qed.
-
-Global Instance homomorphism_F5211_32_decode
- : @Ring.is_homomorphism fe5211_32 eq one add mul (F modulus) Logic.eq F.one F.add F.mul decode.
-Proof. apply field5211_32_and_homomorphisms. Qed.
diff --git a/src/SpecificGen/GF5211_32BoundedAddCoordinates.v b/src/SpecificGen/GF5211_32BoundedAddCoordinates.v
deleted file mode 100644
index 96dbea3de..000000000
--- a/src/SpecificGen/GF5211_32BoundedAddCoordinates.v
+++ /dev/null
@@ -1,78 +0,0 @@
-Require Import Coq.ZArith.ZArith.
-Require Import Crypto.SpecificGen.GF5211_32.
-Require Import Crypto.SpecificGen.GF5211_32BoundedCommon.
-Require Import Crypto.SpecificGen.GF5211_32ReflectiveAddCoordinates.
-Require Import Crypto.Util.LetIn.
-Local Open Scope Z.
-
-Local Ltac bounded_t opW blem :=
- apply blem; apply is_bounded_proj1_fe5211_32.
-
-Local Ltac define_binop f g opW blem :=
- refine (exist_fe5211_32W (opW (proj1_fe5211_32W f) (proj1_fe5211_32W g)) _);
- abstract bounded_t opW blem.
-
-Local Opaque Let_In.
-Local Opaque Z.add Z.sub Z.mul Z.shiftl Z.shiftr Z.land Z.lor Z.eqb NToWord64.
-(*Local Arguments interp_radd_coordinates / _ _ _ _ _ _ _ _ _.
-Definition add_coordinatesW (x0 x1 x2 x3 x4 x5 x6 x7 x8 : fe5211_32W) : Tuple.tuple fe5211_32W 4
- := Eval simpl in interp_radd_coordinates x0 x1 x2 x3 x4 x5 x6 x7 x8.
-
-Local Ltac port_correct_and_bounded pre_rewrite opW interp_rop rop_cb :=
- change opW with (interp_rop);
- rewrite pre_rewrite;
- intros; apply rop_cb; assumption.
-
-Lemma add_coordinatesW_correct_and_bounded : i9top_correct_and_bounded 4 add_coordinatesW Reified.AddCoordinates.add_coordinates.
-Proof. port_correct_and_bounded interp_radd_coordinates_correct add_coordinatesW interp_radd_coordinates radd_coordinates_correct_and_bounded. Qed.
-
-Local Ltac define_9_4op x0 x1 x2 x3 x4 x5 x6 x7 x8 opW blem :=
- refine (let ts := opW (proj1_fe5211_32W x0)
- (proj1_fe5211_32W x1)
- (proj1_fe5211_32W x2)
- (proj1_fe5211_32W x3)
- (proj1_fe5211_32W x4)
- (proj1_fe5211_32W x5)
- (proj1_fe5211_32W x6)
- (proj1_fe5211_32W x7)
- (proj1_fe5211_32W x8) in
- HList.mapt exist_fe5211_32W (ts:=ts) _);
- abstract (
- rewrite <- (HList.hlist_map (F:=fun x => is_bounded x = true) (f:=fe5211_32WToZ));
- apply add_coordinatesW_correct_and_bounded; apply is_bounded_proj1_fe5211_32
- ).
-Definition add_coordinates (x0 x1 x2 x3 x4 x5 x6 x7 x8 : fe5211_32) : Tuple.tuple fe5211_32 4.
-Proof. define_9_4op x0 x1 x2 x3 x4 x5 x6 x7 x8 add_coordinatesW add_coordinatesW_correct_and_bounded. Defined.
-
-Local Ltac op_correct_t op opW_correct_and_bounded :=
- cbv [op];
- rewrite ?HList.map_mapt;
- lazymatch goal with
- | [ |- context[proj1_fe5211_32 (exist_fe5211_32W _ _)] ]
- => rewrite proj1_fe5211_32_exist_fe5211_32W || setoid_rewrite proj1_fe5211_32_exist_fe5211_32W
- | [ |- context[proj1_wire_digits (exist_wire_digitsW _ _)] ]
- => rewrite proj1_wire_digits_exist_wire_digitsW
- | _ => idtac
- end;
- rewrite <- ?HList.map_is_mapt;
- apply opW_correct_and_bounded;
- lazymatch goal with
- | [ |- is_bounded _ = true ]
- => apply is_bounded_proj1_fe5211_32
- | [ |- wire_digits_is_bounded _ = true ]
- => apply is_bounded_proj1_wire_digits
- end.
-
-Lemma add_coordinates_correct (x0 x1 x2 x3 x4 x5 x6 x7 x8 : fe5211_32)
- : Tuple.map (n:=4) proj1_fe5211_32 (add_coordinates x0 x1 x2 x3 x4 x5 x6 x7 x8)
- = Reified.AddCoordinates.add_coordinates (proj1_fe5211_32 x0)
- (proj1_fe5211_32 x1)
- (proj1_fe5211_32 x2)
- (proj1_fe5211_32 x3)
- (proj1_fe5211_32 x4)
- (proj1_fe5211_32 x5)
- (proj1_fe5211_32 x6)
- (proj1_fe5211_32 x7)
- (proj1_fe5211_32 x8).
-Proof. op_correct_t add_coordinates add_coordinatesW_correct_and_bounded. Qed.
-*)
diff --git a/src/SpecificGen/GF5211_32BoundedCommon.v b/src/SpecificGen/GF5211_32BoundedCommon.v
deleted file mode 100644
index 2ecc4ed1c..000000000
--- a/src/SpecificGen/GF5211_32BoundedCommon.v
+++ /dev/null
@@ -1,819 +0,0 @@
-Require Import Coq.Classes.Morphisms.
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParams.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParamProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemOpt.
-Require Import Crypto.SpecificGen.GF5211_32.
-Require Import Bedrock.Word Crypto.Util.WordUtil.
-Require Import Coq.Lists.List Crypto.Util.ListUtil.
-Require Import Crypto.Tactics.VerdiTactics.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Notations.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Util.HList.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Algebra.
-Import ListNotations.
-Require Import Coq.ZArith.ZArith Coq.ZArith.Zpower Coq.ZArith.ZArith Coq.ZArith.Znumtheory.
-Local Open Scope Z.
-
-(* BEGIN common curve-specific definitions *)
-Definition bit_width : nat := Eval compute in Z.to_nat (GF5211_32.int_width).
-Local Notation b_of exp := (0, 2^exp + 2^(exp-3))%Z (only parsing). (* max is [(0, 2^(exp+2) + 2^exp + 2^(exp-1) + 2^(exp-3) + 2^(exp-4) + 2^(exp-5) + 2^(exp-6) + 2^(exp-10) + 2^(exp-12) + 2^(exp-13) + 2^(exp-14) + 2^(exp-15) + 2^(exp-17) + 2^(exp-23) + 2^(exp-24))%Z] *)
-Definition bounds_exp : tuple Z length_fe5211_32
- := Eval compute in
- Tuple.from_list length_fe5211_32 limb_widths eq_refl.
-Definition bounds : tuple (Z * Z) length_fe5211_32
- := Eval compute in
- Tuple.map (fun e => b_of e) bounds_exp.
-Definition wire_digit_bounds_exp : tuple Z (length wire_widths)
- := Eval compute in Tuple.from_list _ wire_widths eq_refl.
-Definition wire_digit_bounds : tuple (Z * Z) (length wire_widths)
- := Eval compute in Tuple.map (fun e => (0,2^e-1)%Z) wire_digit_bounds_exp.
-(* END common curve-specific definitions *)
-
-(* BEGIN aliases for word extraction *)
-Definition word64 := Word.word bit_width.
-Coercion word64ToZ (x : word64) : Z := Z.of_N (wordToN x).
-Coercion ZToWord64 (x : Z) : word64 := NToWord _ (Z.to_N x).
-Definition NToWord64 : N -> word64 := NToWord _.
-Definition word64ize (x : word64) : word64
- := Eval cbv [wordToN N.succ_double N.double] in NToWord64 (wordToN x).
-Definition w64eqb (x y : word64) := weqb x y.
-
-Global Arguments NToWord64 : simpl never.
-Arguments word64 : simpl never.
-Arguments bit_width : simpl never.
-Global Opaque word64.
-Global Opaque bit_width.
-
-(* END aliases for word extraction *)
-
-(* BEGIN basic types *)
-Module Type WordIsBounded.
- Parameter is_boundedT : forall (lower upper : Z), word64 -> bool.
- Parameter Build_is_boundedT : forall {lower upper} {proj_word : word64},
- andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z = true -> is_boundedT lower upper proj_word = true.
- Parameter project_is_boundedT : forall {lower upper} {proj_word : word64},
- is_boundedT lower upper proj_word = true -> andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z = true.
-End WordIsBounded.
-
-Module Import WordIsBoundedDefault : WordIsBounded.
- Definition is_boundedT : forall (lower upper : Z), word64 -> bool
- := fun lower upper proj_word => andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z.
- Definition Build_is_boundedT {lower upper} {proj_word : word64}
- : andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z = true -> is_boundedT lower upper proj_word = true
- := fun x => x.
- Definition project_is_boundedT {lower upper} {proj_word : word64}
- : is_boundedT lower upper proj_word = true -> andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z = true
- := fun x => x.
-End WordIsBoundedDefault.
-
-Definition bounded_word (lower upper : Z)
- := { proj_word : word64 | is_boundedT lower upper proj_word = true }.
-Local Notation word_of exp := (bounded_word (fst (b_of exp)) (snd (b_of exp))).
-Local Notation unbounded_word sz := (bounded_word 0 (2^sz-1)%Z).
-
-Local Opaque word64.
-Definition fe5211_32W := Eval cbv (*-[word64]*) in (tuple word64 length_fe5211_32).
-Definition wire_digitsW := Eval cbv (*-[word64]*) in (tuple word64 (length wire_widths)).
-Definition fe5211_32 :=
- Eval cbv -[bounded_word Z.pow Z.sub Z.add] in
- hlist (fun e => word_of e) bounds_exp.
-Definition wire_digits :=
- Eval cbv -[bounded_word Z.pow Z.sub Z.add] in
- hlist (fun e => unbounded_word e) wire_digit_bounds_exp.
-
-Definition is_bounded_gen {n} (x : tuple Z n) (bounds : tuple (Z * Z) n) : bool
- := let res := Tuple.map2
- (fun bounds v =>
- let '(lower, upper) := bounds in
- (lower <=? v) && (v <=? upper))%bool%Z
- bounds x in
- List.fold_right andb true (Tuple.to_list _ res).
-
-Definition is_bounded (x : SpecificGen.GF5211_32.fe5211_32) : bool
- := is_bounded_gen (n:=length_fe5211_32) x bounds.
-
-Definition wire_digits_is_bounded (x : SpecificGen.GF5211_32.wire_digits) : bool
- := is_bounded_gen (n:=length wire_widths) x wire_digit_bounds.
-
-(* END basic types *)
-
-Section generic_destructuring.
- Fixpoint app_on' A n : forall T (f : tuple' A n) (P : forall x : tuple' A n, T x), T f
- := match n return forall T (f : tuple' A n) (P : forall x : tuple' A n, T x), T f with
- | O => fun T v P => P v
- | S n' => fun T v P => let '(v, x) := v in app_on' A n' _ v (fun v => P (v, x))
- end.
- Definition app_on {A n} : forall {T} (f : tuple A n) (P : forall x : tuple A n, T x), T f
- := match n return forall T (f : tuple A n) (P : forall x : tuple A n, T x), T f with
- | O => fun T v P => P v
- | S n' => @app_on' A n'
- end.
- Lemma app_on'_correct {A n T} f (P : forall x : tuple' A n, T x) : app_on' A n T f P = P f.
- Proof.
- induction n; simpl in *; destruct_head' prod; [ reflexivity | exact (IHn _ _ (fun t => P (t, _))) ].
- Qed.
- Lemma app_on_correct {A n T} f (P : forall x : tuple A n, T x) : app_on f P = P f.
- Proof. destruct n; [ reflexivity | apply app_on'_correct ]. Qed.
-
- Fixpoint app_on_h' A F n : forall ts T (f : @hlist' A n F ts) (P : forall x : @hlist' A n F ts, T x), T f
- := match n return forall ts T (f : @hlist' A n F ts) (P : forall x : @hlist' A n F ts, T x), T f with
- | O => fun ts T v P => P v
- | S n' => fun ts T v P => let '(v, x) := v in app_on_h' A F n' _ _ v (fun v => P (v, x))
- end.
- Definition app_on_h {A F n} : forall ts T (f : @hlist A n F ts) (P : forall x : @hlist A n F ts, T x), T f
- := match n return forall ts T (f : @hlist A n F ts) (P : forall x : @hlist A n F ts, T x), T f with
- | O => fun ts T v P => P v
- | S n' => @app_on_h' A F n'
- end.
- Lemma app_on_h'_correct {A F n ts T} f P : @app_on_h' A F n ts T f P = P f.
- Proof.
- induction n; simpl in *; destruct_head' prod; [ reflexivity | exact (IHn _ _ _ (fun h => P (h, f))) ].
- Qed.
- Lemma app_on_h_correct {A} F {n} ts {T} f P : @app_on_h A F n ts T f P = P f.
- Proof. destruct n; [ reflexivity | apply app_on_h'_correct ]. Qed.
-
- Definition app_wire_digitsW_dep {A T} (P : forall x : tuple A (length wire_widths), T x)
- : forall (f : tuple A (length wire_widths)), T f
- := Eval compute in fun f => @app_on A (length wire_widths) T f P.
- Definition app_wire_digitsW {A T} (f : tuple A (length wire_widths)) (P : tuple A (length wire_widths) -> T)
- := Eval compute in @app_wire_digitsW_dep A (fun _ => T) P f.
- Definition app_fe5211_32W_dep {A T} (P : forall x : tuple A length_fe5211_32, T x)
- : forall (f : tuple A length_fe5211_32), T f
- := Eval compute in fun f => @app_on A length_fe5211_32 T f P.
- Definition app_fe5211_32W {A T} (f : tuple A length_fe5211_32) (P : tuple A length_fe5211_32 -> T)
- := Eval compute in @app_fe5211_32W_dep A (fun _ => T) P f.
- Definition app_fe5211_32_dep {T} (P : forall x : fe5211_32, T x)
- : forall f : fe5211_32, T f
- := Eval compute in fun f => @app_on_h _ (fun e => word_of e) length_fe5211_32 bounds_exp T f P.
- Definition app_fe5211_32 {T} (f : fe5211_32) (P : hlist (fun e => word_of e) bounds_exp -> T)
- := Eval compute in @app_fe5211_32_dep (fun _ => T) P f.
- Definition app_wire_digits_dep {T} (P : forall x : wire_digits, T x)
- : forall f : wire_digits, T f
- := Eval compute in fun f => @app_on_h _ (fun e => unbounded_word e) (length wire_widths) wire_digit_bounds_exp T f P.
- Definition app_wire_digits {T} (f : wire_digits) (P : hlist (fun e => unbounded_word e) wire_digit_bounds_exp -> T)
- := Eval compute in @app_wire_digits_dep (fun _ => T) P f.
-
- Definition app_wire_digitsW_dep_correct {A T} f P : @app_wire_digitsW_dep A T P f = P f
- := app_on_correct f P.
- Definition app_wire_digitsW_correct {A T} f P : @app_wire_digitsW A T f P = P f
- := @app_wire_digitsW_dep_correct A (fun _ => T) f P.
- Definition app_fe5211_32W_dep_correct {A T} f P : @app_fe5211_32W_dep A T P f = P f
- := app_on_correct f P.
- Definition app_fe5211_32W_correct {A T} f P : @app_fe5211_32W A T f P = P f
- := @app_fe5211_32W_dep_correct A (fun _ => T) f P.
- Definition app_fe5211_32_dep_correct {T} f P : @app_fe5211_32_dep T P f = P f
- := app_on_h_correct (fun e => word_of e) bounds_exp f P.
- Definition app_fe5211_32_correct {T} f P : @app_fe5211_32 T f P = P f
- := @app_fe5211_32_dep_correct (fun _ => T) f P.
- Definition app_wire_digits_dep_correct {T} f P : @app_wire_digits_dep T P f = P f
- := app_on_h_correct (fun e => unbounded_word e) wire_digit_bounds_exp f P.
- Definition app_wire_digits_correct {T} f P : @app_wire_digits T f P = P f
- := @app_wire_digits_dep_correct (fun _ => T) f P.
-
- Definition appify2 {T} (op : fe5211_32W -> fe5211_32W -> T) (f g : fe5211_32W) :=
- app_fe5211_32W f (fun f0 => (app_fe5211_32W g (fun g0 => op f0 g0))).
-
- Lemma appify2_correct : forall {T} op f g, @appify2 T op f g = op f g.
- Proof.
- intros. cbv [appify2].
- etransitivity; apply app_fe5211_32W_correct.
- Qed.
-
- Definition appify9 {T} (op : fe5211_32W -> fe5211_32W -> fe5211_32W -> fe5211_32W -> fe5211_32W -> fe5211_32W -> fe5211_32W -> fe5211_32W -> fe5211_32W -> T) (x0 x1 x2 x3 x4 x5 x6 x7 x8 : fe5211_32W) :=
- app_fe5211_32W x0 (fun x0' =>
- app_fe5211_32W x1 (fun x1' =>
- app_fe5211_32W x2 (fun x2' =>
- app_fe5211_32W x3 (fun x3' =>
- app_fe5211_32W x4 (fun x4' =>
- app_fe5211_32W x5 (fun x5' =>
- app_fe5211_32W x6 (fun x6' =>
- app_fe5211_32W x7 (fun x7' =>
- app_fe5211_32W x8 (fun x8' =>
- op x0' x1' x2' x3' x4' x5' x6' x7' x8'))))))))).
-
- Lemma appify9_correct : forall {T} op x0 x1 x2 x3 x4 x5 x6 x7 x8,
- @appify9 T op x0 x1 x2 x3 x4 x5 x6 x7 x8 = op x0 x1 x2 x3 x4 x5 x6 x7 x8.
- Proof.
- intros. cbv [appify9].
- repeat (etransitivity; [ apply app_fe5211_32W_correct | ]); reflexivity.
- Qed.
-End generic_destructuring.
-
-Definition eta_fe5211_32W_sig (x : fe5211_32W) : { v : fe5211_32W | v = x }.
-Proof.
- eexists; symmetry.
- repeat (etransitivity; [ apply surjective_pairing | apply f_equal2 ]); reflexivity.
-Defined.
-Definition eta_fe5211_32W (x : fe5211_32W) : fe5211_32W
- := Eval cbv [proj1_sig eta_fe5211_32W_sig] in proj1_sig (eta_fe5211_32W_sig x).
-Definition eta_wire_digitsW_sig (x : wire_digitsW) : { v : wire_digitsW | v = x }.
-Proof.
- eexists; symmetry.
- repeat (etransitivity; [ apply surjective_pairing | apply f_equal2 ]); reflexivity.
-Defined.
-Definition eta_wire_digitsW (x : wire_digitsW) : wire_digitsW
- := Eval cbv [proj1_sig eta_wire_digitsW_sig] in proj1_sig (eta_wire_digitsW_sig x).
-
-Local Transparent word64.
-Lemma word64ize_id x : word64ize x = x.
-Proof. apply NToWord_wordToN. Qed.
-Local Opaque word64.
-
-Lemma word64eqb_Zeqb x y : (word64ToZ x =? word64ToZ y)%Z = w64eqb x y.
-Proof. apply wordeqb_Zeqb. Qed.
-
-Local Arguments Z.pow_pos !_ !_ / .
-Lemma word64ToZ_ZToWord64 x : 0 <= x < 2^Z.of_nat bit_width -> word64ToZ (ZToWord64 x) = x.
-Proof.
- intros; unfold word64ToZ, ZToWord64.
- rewrite wordToN_NToWord_idempotent, Z2N.id
- by (omega || apply N2Z.inj_lt; rewrite <- ?(N_nat_Z (Npow2 _)), ?Npow2_nat, ?Zpow_pow2, ?N2Z.id, ?Z2N.id, ?Z2Nat.id by omega; omega).
- reflexivity.
-Qed.
-Lemma ZToWord64_word64ToZ x : ZToWord64 (word64ToZ x) = x.
-Proof.
- intros; unfold word64ToZ, ZToWord64.
- rewrite N2Z.id, NToWord_wordToN; reflexivity.
-Qed.
-
-(* BEGIN precomputation. *)
-
-Definition proj_word {lower upper} (v : bounded_word lower upper) := Eval cbv [proj1_sig] in proj1_sig v.
-Definition word_bounded {lower upper} (v : bounded_word lower upper)
- : andb (lower <=? proj_word v)%Z (proj_word v <=? upper)%Z = true
- := project_is_boundedT (proj2_sig v).
-Definition Build_bounded_word' {lower upper} proj_word word_bounded : bounded_word lower upper
- := exist _ proj_word (Build_is_boundedT word_bounded).
-Arguments proj_word {_ _} _.
-Arguments word_bounded {_ _} _.
-Arguments Build_bounded_word' {_ _} _ _.
-Definition Build_bounded_word {lower upper} (proj_word : word64) (word_bounded : andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z = true)
- : bounded_word lower upper
- := Build_bounded_word'
- proj_word
- (match andb (lower <=? proj_word)%Z (proj_word <=? upper)%Z as b return b = true -> b = true with
- | true => fun _ => eq_refl
- | false => fun x => x
- end word_bounded).
-Lemma word_to_unbounded_helper {x e : nat} : (x < pow2 e)%nat -> (Z.of_nat e <= Z.of_nat bit_width)%Z -> ((0 <=? word64ToZ (ZToWord64 (Z.of_nat x))) && (word64ToZ (ZToWord64 (Z.of_nat x)) <=? 2 ^ (Z.of_nat e) - 1))%bool = true.
-Proof.
- rewrite pow2_id; intro H; apply Nat2Z.inj_lt in H; revert H.
- rewrite Z.pow_Zpow; simpl Z.of_nat.
- intros H H'.
- assert (2^Z.of_nat e <= 2^Z.of_nat bit_width) by auto with zarith.
- rewrite ?word64ToZ_ZToWord64 by omega.
- match goal with
- | [ |- context[andb ?x ?y] ]
- => destruct x eqn:?, y eqn:?; try reflexivity; Z.ltb_to_lt
- end;
- intros; omega.
-Qed.
-Definition word_to_unbounded_word {sz} (x : word sz) : (Z.of_nat sz <=? Z.of_nat bit_width)%Z = true -> unbounded_word (Z.of_nat sz).
-Proof.
- refine (fun pf => Build_bounded_word (Z.of_N (wordToN x)) _).
- abstract (rewrite wordToN_nat, nat_N_Z; Z.ltb_to_lt; apply (word_to_unbounded_helper (wordToNat_bound x)); simpl; omega).
-Defined.
-Definition word32_to_unbounded_word (x : word 32) : unbounded_word 32.
-Proof. apply (word_to_unbounded_word x); reflexivity. Defined.
-Definition word31_to_unbounded_word (x : word 31) : unbounded_word 31.
-Proof. apply (word_to_unbounded_word x); reflexivity. Defined.
-
-Local Opaque word64.
-Declare Reduction app_tuple_map := cbv [app_wire_digitsW app_fe5211_32W app_fe5211_32 HList.mapt HList.mapt' Tuple.map on_tuple List.map List.app length_fe5211_32 List.length wire_widths Tuple.from_list Tuple.from_list' Tuple.to_list Tuple.to_list' fst snd].
-Definition fe5211_32WToZ (x : fe5211_32W) : SpecificGen.GF5211_32.fe5211_32
- := Eval app_tuple_map in
- app_fe5211_32W x (Tuple.map (fun v : word64 => v : Z)).
-Definition fe5211_32ZToW (x : SpecificGen.GF5211_32.fe5211_32) : fe5211_32W
- := Eval app_tuple_map in
- app_fe5211_32W x (Tuple.map (fun v : Z => v : word64)).
-Definition wire_digitsWToZ (x : wire_digitsW) : SpecificGen.GF5211_32.wire_digits
- := Eval app_tuple_map in
- app_wire_digitsW x (Tuple.map (fun v : word64 => v : Z)).
-Definition wire_digitsZToW (x : SpecificGen.GF5211_32.wire_digits) : wire_digitsW
- := Eval app_tuple_map in
- app_wire_digitsW x (Tuple.map (fun v : Z => v : word64)).
-Definition fe5211_32W_word64ize (x : fe5211_32W) : fe5211_32W
- := Eval app_tuple_map in
- app_fe5211_32W x (Tuple.map word64ize).
-Definition wire_digitsW_word64ize (x : wire_digitsW) : wire_digitsW
- := Eval app_tuple_map in
- app_wire_digitsW x (Tuple.map word64ize).
-
-(** TODO: Turn this into a lemma to speed up proofs *)
-Ltac unfold_is_bounded_in' H :=
- lazymatch type of H with
- | andb _ _ = true
- => apply andb_prop in H;
- let H1 := fresh in
- let H2 := fresh in
- destruct H as [H1 H2];
- unfold_is_bounded_in' H1;
- unfold_is_bounded_in' H2
- | _ => idtac
- end.
-Ltac preunfold_is_bounded_in H :=
- unfold is_bounded, wire_digits_is_bounded, is_bounded_gen, fe5211_32WToZ, wire_digitsWToZ in H;
- cbv [to_list length bounds wire_digit_bounds from_list from_list' map2 on_tuple2 to_list' ListUtil.map2 Tuple.map List.map fold_right List.rev List.app length_fe5211_32 List.length wire_widths HList.hlistP HList.hlistP' Tuple.on_tuple] in H.
-Ltac unfold_is_bounded_in H :=
- preunfold_is_bounded_in H;
- unfold_is_bounded_in' H.
-
-Ltac preunfold_is_bounded :=
- unfold is_bounded, wire_digits_is_bounded, is_bounded_gen, fe5211_32WToZ, wire_digitsWToZ;
- cbv [to_list length bounds wire_digit_bounds from_list from_list' map2 on_tuple2 to_list' ListUtil.map2 Tuple.map List.map fold_right List.rev List.app length_fe5211_32 List.length wire_widths HList.hlistP HList.hlistP' Tuple.on_tuple].
-
-Ltac unfold_is_bounded :=
- preunfold_is_bounded;
- repeat match goal with
- | [ |- andb _ _ = true ] => apply andb_true_intro
- | [ |- and _ _ ] => split
- end.
-
-Local Transparent bit_width.
-Definition Pow2_64 := Eval compute in 2^Z.of_nat bit_width.
-Definition unfold_Pow2_64 : 2^Z.of_nat bit_width = Pow2_64 := eq_refl.
-Local Opaque bit_width.
-
-Local Ltac prove_lt_bit_width :=
- rewrite unfold_Pow2_64; cbv [Pow2_64]; omega.
-
-Lemma fe5211_32ZToW_WToZ (x : fe5211_32W) : fe5211_32ZToW (fe5211_32WToZ x) = x.
-Proof.
- hnf in x; destruct_head' prod; cbv [fe5211_32WToZ fe5211_32ZToW].
- rewrite !ZToWord64_word64ToZ; reflexivity.
-Qed.
-
-Lemma fe5211_32WToZ_ZToW x : is_bounded x = true -> fe5211_32WToZ (fe5211_32ZToW x) = x.
-Proof.
- hnf in x; destruct_head' prod; cbv [fe5211_32WToZ fe5211_32ZToW].
- intro H.
- unfold_is_bounded_in H; destruct_head' and.
- Z.ltb_to_lt.
- rewrite !word64ToZ_ZToWord64 by prove_lt_bit_width.
- reflexivity.
-Qed.
-
-Lemma fe5211_32W_word64ize_id x : fe5211_32W_word64ize x = x.
-Proof.
- hnf in x; destruct_head' prod.
- cbv [fe5211_32W_word64ize];
- repeat apply f_equal2; apply word64ize_id.
-Qed.
-Lemma wire_digitsW_word64ize_id x : wire_digitsW_word64ize x = x.
-Proof.
- hnf in x; destruct_head' prod.
- cbv [wire_digitsW_word64ize];
- repeat apply f_equal2; apply word64ize_id.
-Qed.
-
-Definition uncurry_unop_fe5211_32W {T} (op : fe5211_32W -> T)
- := Eval cbv (*-[word64]*) in Tuple.uncurry (n:=length_fe5211_32) op.
-Definition curry_unop_fe5211_32W {T} op : fe5211_32W -> T
- := Eval cbv (*-[word64]*) in fun f => app_fe5211_32W f (Tuple.curry (n:=length_fe5211_32) op).
-Definition uncurry_binop_fe5211_32W {T} (op : fe5211_32W -> fe5211_32W -> T)
- := Eval cbv (*-[word64]*) in uncurry_unop_fe5211_32W (fun f => uncurry_unop_fe5211_32W (op f)).
-Definition curry_binop_fe5211_32W {T} op : fe5211_32W -> fe5211_32W -> T
- := Eval cbv (*-[word64]*) in appify2 (fun f => curry_unop_fe5211_32W (curry_unop_fe5211_32W op f)).
-
-Definition uncurry_unop_wire_digitsW {T} (op : wire_digitsW -> T)
- := Eval cbv (*-[word64]*) in Tuple.uncurry (n:=length wire_widths) op.
-Definition curry_unop_wire_digitsW {T} op : wire_digitsW -> T
- := Eval cbv (*-[word64]*) in fun f => app_wire_digitsW f (Tuple.curry (n:=length wire_widths) op).
-
-Definition uncurry_9op_fe5211_32W {T} (op : fe5211_32W -> fe5211_32W -> fe5211_32W -> fe5211_32W -> fe5211_32W -> fe5211_32W -> fe5211_32W -> fe5211_32W -> fe5211_32W -> T)
- := Eval cbv (*-[word64]*) in
- uncurry_unop_fe5211_32W (fun x0 =>
- uncurry_unop_fe5211_32W (fun x1 =>
- uncurry_unop_fe5211_32W (fun x2 =>
- uncurry_unop_fe5211_32W (fun x3 =>
- uncurry_unop_fe5211_32W (fun x4 =>
- uncurry_unop_fe5211_32W (fun x5 =>
- uncurry_unop_fe5211_32W (fun x6 =>
- uncurry_unop_fe5211_32W (fun x7 =>
- uncurry_unop_fe5211_32W (fun x8 =>
- op x0 x1 x2 x3 x4 x5 x6 x7 x8))))))))).
-Definition curry_9op_fe5211_32W {T} op : fe5211_32W -> fe5211_32W -> fe5211_32W -> fe5211_32W -> fe5211_32W -> fe5211_32W -> fe5211_32W -> fe5211_32W -> fe5211_32W -> T
- := Eval cbv (*-[word64]*) in
- appify9 (fun x0 x1 x2 x3 x4 x5 x6 x7 x8
- => curry_unop_fe5211_32W (curry_unop_fe5211_32W (curry_unop_fe5211_32W (curry_unop_fe5211_32W (curry_unop_fe5211_32W (curry_unop_fe5211_32W (curry_unop_fe5211_32W (curry_unop_fe5211_32W (curry_unop_fe5211_32W op x0) x1) x2) x3) x4) x5) x6) x7) x8).
-
-Definition proj1_fe5211_32W (x : fe5211_32) : fe5211_32W
- := Eval app_tuple_map in
- app_fe5211_32 x (HList.mapt (fun _ => (@proj_word _ _))).
-Coercion proj1_fe5211_32 (x : fe5211_32) : SpecificGen.GF5211_32.fe5211_32
- := fe5211_32WToZ (proj1_fe5211_32W x).
-
-Lemma is_bounded_proj1_fe5211_32 (x : fe5211_32) : is_bounded (proj1_fe5211_32 x) = true.
-Proof.
- revert x; refine (app_fe5211_32_dep _); intro x.
- hnf in x; destruct_head' prod; destruct_head' bounded_word.
- cbv [is_bounded proj1_fe5211_32 proj1_fe5211_32W fe5211_32WToZ to_list length bounds from_list from_list' map2 on_tuple2 to_list' ListUtil.map2 List.map List.rev List.app proj_word length_fe5211_32 is_bounded_gen].
- apply fold_right_andb_true_iff_fold_right_and_True.
- cbv [fold_right List.map].
- cbv beta in *.
- repeat split; auto using project_is_boundedT.
-Qed.
-
-Definition proj1_wire_digitsW (x : wire_digits) : wire_digitsW
- := app_wire_digits x (HList.mapt (fun _ => proj_word)).
-Coercion proj1_wire_digits (x : wire_digits) : SpecificGen.GF5211_32.wire_digits
- := wire_digitsWToZ (proj1_wire_digitsW x).
-
-Lemma is_bounded_proj1_wire_digits (x : wire_digits) : wire_digits_is_bounded (proj1_wire_digits x) = true.
-Proof.
- revert x; refine (app_wire_digits_dep _); intro x.
- hnf in x; destruct_head' prod; destruct_head' bounded_word.
- cbv [wire_digits_is_bounded proj1_wire_digits proj1_wire_digitsW wire_digitsWToZ to_list length wire_digit_bounds from_list from_list' map2 on_tuple2 to_list' ListUtil.map2 List.map List.rev List.app proj_word is_bounded_gen wire_widths HList.mapt HList.mapt' app_wire_digits fst snd].
- apply fold_right_andb_true_iff_fold_right_and_True.
- cbv [fold_right List.map].
- cbv beta in *.
- repeat split; auto using project_is_boundedT.
-Qed.
-
-Local Ltac make_exist_W' x app_W_dep :=
- let H := fresh in
- revert x; refine (@app_W_dep _ _ _); intros x H;
- let x' := fresh in
- set (x' := x);
- cbv [tuple tuple' length_fe5211_32 List.length wire_widths] in x;
- destruct_head' prod;
- let rec do_refine v H :=
- first [ let v' := (eval cbv [snd fst] in (snd v)) in
- refine (_, Build_bounded_word v' _);
- [ do_refine (fst v) (proj2 H) | subst x'; abstract exact (proj1 H) ]
- | let v' := (eval cbv [snd fst] in v) in
- refine (Build_bounded_word v' _); subst x'; abstract exact (proj1 H) ] in
- let H' := constr:(proj1 (@fold_right_andb_true_iff_fold_right_and_True _) H) in
- let T := type of H' in
- let T := (eval cbv [id
- List.fold_right List.map List.length List.app ListUtil.map2 List.rev
- Tuple.to_list Tuple.to_list' Tuple.from_list Tuple.from_list' Tuple.map2 Tuple.on_tuple2
- fe5211_32 bounds fe5211_32WToZ length_fe5211_32
- wire_digits wire_digit_bounds wire_digitsWToZ wire_widths] in T) in
- let H' := constr:(H' : T) in
- let v := (eval unfold x' in x') in
- do_refine v H'.
-Local Ltac make_exist'' x exist_W ZToW :=
- let H := fresh in
- intro H; apply (exist_W (ZToW x));
- abstract (
- hnf in x; destruct_head' prod;
- let H' := fresh in
- pose proof H as H';
- unfold_is_bounded_in H;
- destruct_head' and; simpl in *;
- Z.ltb_to_lt;
- rewrite ?word64ToZ_ZToWord64 by prove_lt_bit_width;
- assumption
- ).
-Local Ltac make_exist' x app_W_dep exist'' exist_W ZToW :=
- let H := fresh in
- revert x; refine (@app_W_dep _ _ _); intros x H;
- let x' := fresh in
- set (x' := x) in *;
- cbv [tuple tuple' length_fe5211_32 List.length wire_widths] in x;
- destruct_head' prod;
- let rec do_refine v :=
- first [ let v' := (eval cbv [exist_W ZToW exist'' proj_word Build_bounded_word Build_bounded_word' snd fst] in (proj_word v)) in
- refine (Build_bounded_word v' _); subst x'; abstract exact (word_bounded v)
- | let v' := (eval cbv [exist_W ZToW exist'' proj_word Build_bounded_word Build_bounded_word' snd fst] in (proj_word (snd v))) in
- refine (_, Build_bounded_word v' _);
- [ do_refine (fst v) | subst x'; abstract exact (word_bounded (snd v)) ] ] in
- let v := (eval unfold x' in (exist'' x' H)) in
- do_refine v.
-
-Definition exist_fe5211_32W' (x : fe5211_32W) : is_bounded (fe5211_32WToZ x) = true -> fe5211_32.
-Proof. make_exist_W' x (@app_fe5211_32W_dep). Defined.
-Definition exist_fe5211_32W (x : fe5211_32W) : is_bounded (fe5211_32WToZ x) = true -> fe5211_32
- := Eval cbv [app_fe5211_32W_dep exist_fe5211_32W' fe5211_32ZToW] in exist_fe5211_32W' x.
-Definition exist_fe5211_32'' (x : SpecificGen.GF5211_32.fe5211_32) : is_bounded x = true -> fe5211_32.
-Proof. make_exist'' x exist_fe5211_32W fe5211_32ZToW. Defined.
-Definition exist_fe5211_32' (x : SpecificGen.GF5211_32.fe5211_32) : is_bounded x = true -> fe5211_32.
-Proof. make_exist' x (@app_fe5211_32W_dep) exist_fe5211_32'' exist_fe5211_32W fe5211_32ZToW. Defined.
-Definition exist_fe5211_32 (x : SpecificGen.GF5211_32.fe5211_32) : is_bounded x = true -> fe5211_32
- := Eval cbv [exist_fe5211_32' exist_fe5211_32W exist_fe5211_32' app_fe5211_32 app_fe5211_32W_dep] in
- exist_fe5211_32' x.
-
-Lemma proj1_fe5211_32_exist_fe5211_32W x pf : proj1_fe5211_32 (exist_fe5211_32W x pf) = fe5211_32WToZ x.
-Proof. now hnf in x; destruct_head' prod. Qed.
-Lemma proj1_fe5211_32W_exist_fe5211_32 x pf : proj1_fe5211_32W (exist_fe5211_32 x pf) = fe5211_32ZToW x.
-Proof. now hnf in x; destruct_head' prod. Qed.
-Lemma proj1_fe5211_32_exist_fe5211_32 x pf : proj1_fe5211_32 (exist_fe5211_32 x pf) = x.
-Proof.
- hnf in x; destruct_head' prod.
- cbv [proj1_fe5211_32 exist_fe5211_32 proj1_fe5211_32W fe5211_32WToZ proj_word Build_bounded_word Build_bounded_word'].
- unfold_is_bounded_in pf.
- destruct_head' and.
- Z.ltb_to_lt.
- rewrite ?word64ToZ_ZToWord64 by prove_lt_bit_width.
- reflexivity.
-Qed.
-
-Definition exist_wire_digitsW' (x : wire_digitsW)
- : wire_digits_is_bounded (wire_digitsWToZ x) = true -> wire_digits.
-Proof. make_exist_W' x (@app_wire_digitsW_dep). Defined.
-Definition exist_wire_digitsW (x : wire_digitsW)
- : wire_digits_is_bounded (wire_digitsWToZ x) = true -> wire_digits
- := Eval cbv [app_wire_digitsW_dep exist_wire_digitsW' wire_digitsZToW] in exist_wire_digitsW' x.
-Definition exist_wire_digits'' (x : SpecificGen.GF5211_32.wire_digits)
- : wire_digits_is_bounded x = true -> wire_digits.
-Proof. make_exist'' x exist_wire_digitsW wire_digitsZToW. Defined.
-Definition exist_wire_digits' (x : SpecificGen.GF5211_32.wire_digits)
- : wire_digits_is_bounded x = true -> wire_digits.
-Proof. make_exist' x (@app_wire_digitsW_dep) exist_wire_digits'' exist_wire_digitsW wire_digitsZToW. Defined.
-Definition exist_wire_digits (x : SpecificGen.GF5211_32.wire_digits)
- : wire_digits_is_bounded x = true -> wire_digits
- := Eval cbv [exist_wire_digits' exist_wire_digitsW exist_wire_digits' app_wire_digits app_wire_digitsW_dep] in
- exist_wire_digits' x.
-
-Lemma proj1_wire_digits_exist_wire_digitsW x pf : proj1_wire_digits (exist_wire_digitsW x pf) = wire_digitsWToZ x.
-Proof. now hnf in x; destruct_head' prod. Qed.
-Lemma proj1_wire_digitsW_exist_wire_digits x pf : proj1_wire_digitsW (exist_wire_digits x pf) = wire_digitsZToW x.
-Proof. now hnf in x; destruct_head' prod. Qed.
-Lemma proj1_wire_digits_exist_wire_digits x pf : proj1_wire_digits (exist_wire_digits x pf) = x.
-Proof.
- hnf in x; destruct_head' prod.
- cbv [proj1_wire_digits exist_wire_digits proj1_wire_digitsW wire_digitsWToZ proj_word Build_bounded_word Build_bounded_word' app_wire_digits HList.mapt HList.mapt' length wire_widths fst snd].
- unfold_is_bounded_in pf.
- destruct_head' and.
- Z.ltb_to_lt.
- rewrite ?word64ToZ_ZToWord64 by prove_lt_bit_width.
- reflexivity.
-Qed.
-
-Module opt.
- Definition word64ToZ := Eval vm_compute in word64ToZ.
- Definition word64ToN := Eval vm_compute in @wordToN bit_width.
- Definition NToWord64 := Eval vm_compute in NToWord64.
- Definition bit_width := Eval vm_compute in bit_width.
- Definition Zleb := Eval cbv [Z.leb] in Z.leb.
- Definition andb := Eval vm_compute in andb.
- Definition word64ize := Eval vm_compute in word64ize.
-End opt.
-
-Local Transparent bit_width.
-Local Ltac do_change lem :=
- match lem with
- | context L[andb (?x <=? ?y)%Z (?y <=? ?z)]
- => let x' := (eval vm_compute in x) in
- let z' := (eval vm_compute in z) in
- lazymatch y with
- | word64ToZ (word64ize ?v)
- => let y' := constr:(opt.word64ToZ (opt.word64ize v)) in
- let L' := context L[andb (opt.Zleb x' y') (opt.Zleb y' z')] in
- do_change L'
- end
- | _ => lem
- end.
-Definition fe5211_32_word64ize (x : fe5211_32) : fe5211_32.
-Proof.
- set (x' := x).
- hnf in x; destruct_head' prod.
- let lem := constr:(exist_fe5211_32W (fe5211_32W_word64ize (proj1_fe5211_32W x'))) in
- let lem := (eval cbv [proj1_fe5211_32W x' fe5211_32W_word64ize proj_word exist_fe5211_32W Build_bounded_word' Build_bounded_word] in lem) in
- let lem := do_change lem in
- refine (lem _);
- change (is_bounded (fe5211_32WToZ (fe5211_32W_word64ize (proj1_fe5211_32W x'))) = true);
- abstract (rewrite fe5211_32W_word64ize_id; apply is_bounded_proj1_fe5211_32).
-Defined.
-Definition wire_digits_word64ize (x : wire_digits) : wire_digits.
-Proof.
- set (x' := x).
- hnf in x; destruct_head' prod.
- let lem := constr:(exist_wire_digitsW (wire_digitsW_word64ize (proj1_wire_digitsW x'))) in
- let lem := (eval cbv [proj1_wire_digitsW x' wire_digitsW_word64ize proj_word exist_wire_digitsW Build_bounded_word Build_bounded_word'] in lem) in
- let lem := do_change lem in
- let lem := (eval cbv [word64ize opt.word64ize andb Z.leb Z.compare CompOpp Pos.compare] in lem) in
- refine (lem _);
- change (wire_digits_is_bounded (wire_digitsWToZ (wire_digitsW_word64ize (proj1_wire_digitsW x'))) = true);
- abstract (rewrite wire_digitsW_word64ize_id; apply is_bounded_proj1_wire_digits).
-Defined.
-
-Lemma is_bounded_to_nth_default x (H : is_bounded x = true)
- : forall n : nat,
- (n < length limb_widths)%nat
- -> (0 <= nth_default 0 (Tuple.to_list length_fe5211_32 x) n <=
- snd (b_of (nth_default (-1) limb_widths n)))%Z.
-Proof.
- hnf in x; destruct_head' prod.
- unfold_is_bounded_in H; destruct_head' and.
- Z.ltb_to_lt.
- unfold nth_default; simpl.
- intros.
- repeat match goal with
- | [ |- context[nth_error _ ?x] ]
- => is_var x; destruct x; simpl
- end;
- omega.
-Qed.
-
-(* END precomputation *)
-
-(* Precompute constants *)
-
-Definition one' := Eval vm_compute in exist_fe5211_32 SpecificGen.GF5211_32.one_ eq_refl.
-Definition one := Eval cbv [one' fe5211_32_word64ize word64ize andb opt.word64ToZ opt.word64ize opt.Zleb Z.compare CompOpp Pos.compare Pos.compare_cont] in fe5211_32_word64ize one'.
-
-Definition zero' := Eval vm_compute in exist_fe5211_32 SpecificGen.GF5211_32.zero_ eq_refl.
-Definition zero := Eval cbv [zero' fe5211_32_word64ize word64ize andb opt.word64ToZ opt.word64ize opt.Zleb Z.compare CompOpp Pos.compare Pos.compare_cont] in fe5211_32_word64ize zero'.
-
-Lemma fold_chain_opt_gen {A B} (F : A -> B) is_bounded ls id' op' id op chain
- (Hid_bounded : is_bounded (F id') = true)
- (Hid : id = F id')
- (Hop_bounded : forall x y, is_bounded (F x) = true
- -> is_bounded (F y) = true
- -> is_bounded (op (F x) (F y)) = true)
- (Hop : forall x y, is_bounded (F x) = true
- -> is_bounded (F y) = true
- -> op (F x) (F y) = F (op' x y))
- (Hls_bounded : forall n, is_bounded (F (nth_default id' ls n)) = true)
- : F (fold_chain_opt id' op' chain ls)
- = fold_chain_opt id op chain (List.map F ls)
- /\ is_bounded (F (fold_chain_opt id' op' chain ls)) = true.
-Proof.
- rewrite !fold_chain_opt_correct.
- revert dependent ls; induction chain as [|x xs IHxs]; intros.
- { pose proof (Hls_bounded 0%nat).
- destruct ls; simpl; split; trivial; congruence. }
- { destruct x; simpl; unfold Let_In; simpl.
- rewrite (fun ls pf => proj1 (IHxs ls pf)) at 1; simpl.
- { do 2 f_equal.
- rewrite <- Hop, Hid by auto.
- rewrite !map_nth_default_always.
- split; try reflexivity.
- apply (IHxs (_::_)).
- intros [|?]; autorewrite with simpl_nth_default; auto.
- rewrite <- Hop; auto. }
- { intros [|?]; simpl;
- autorewrite with simpl_nth_default; auto.
- rewrite <- Hop; auto. } }
-Qed.
-
-Lemma encode_bounded x : is_bounded (encode x) = true.
-Proof.
- pose proof (bounded_encode x).
- generalize dependent (encode x).
- intro t; compute in t; intros.
- destruct_head' prod.
- unfold Pow2Base.bounded in H.
- cbv [nth_default Tuple.to_list Tuple.to_list' List.length limb_widths params5211_32] in H.
- repeat match type of H with
- | context[nth_error (cons _ _) _]
- => let H' := fresh in
- pose proof (H O) as H'; specialize (fun i => H (S i)); simpl @nth_error in H, H';
- cbv beta iota in H'
- end.
- clear H.
- simpl in *.
- cbv [Z.pow_pos Z.mul Pos.mul Pos.iter nth_default nth_error value] in *.
- unfold is_bounded.
- apply fold_right_andb_true_iff_fold_right_and_True.
- cbv [is_bounded proj1_fe5211_32 to_list length bounds from_list from_list' map2 on_tuple2 to_list' ListUtil.map2 List.map List.rev List.app proj_word fold_right length_fe5211_32].
- repeat split; rewrite !Bool.andb_true_iff, !Z.leb_le; omega.
-Qed.
-
-Definition encode (x : F modulus) : fe5211_32
- := exist_fe5211_32 (encode x) (encode_bounded x).
-
-Definition decode (x : fe5211_32) : F modulus
- := ModularBaseSystem.decode (proj1_fe5211_32 x).
-
-Lemma proj1_fe5211_32_encode x
- : proj1_fe5211_32 (encode x) = ModularBaseSystem.encode x.
-Proof.
- cbv [encode].
- generalize (encode_bounded x); generalize (ModularBaseSystem.encode x).
- intros y pf; intros; hnf in y; destruct_head_hnf' prod.
- cbv [proj1_fe5211_32 exist_fe5211_32 proj1_fe5211_32W Build_bounded_word Build_bounded_word' fe5211_32WToZ proj_word].
- unfold_is_bounded_in pf.
- destruct_head' and.
- Z.ltb_to_lt.
- rewrite ?word64ToZ_ZToWord64 by prove_lt_bit_width.
- reflexivity.
-Qed.
-
-Lemma decode_exist_fe5211_32 x pf
- : decode (exist_fe5211_32 x pf) = ModularBaseSystem.decode x.
-Proof.
- hnf in x; destruct_head' prod.
- cbv [decode proj1_fe5211_32 exist_fe5211_32 proj1_fe5211_32W Build_bounded_word Build_bounded_word' fe5211_32WToZ proj_word].
- unfold_is_bounded_in pf.
- destruct_head' and.
- Z.ltb_to_lt.
- rewrite ?word64ToZ_ZToWord64 by prove_lt_bit_width.
- reflexivity.
-Qed.
-
-Definition div (f g : fe5211_32) : fe5211_32
- := exist_fe5211_32 (div (proj1_fe5211_32 f) (proj1_fe5211_32 g)) (encode_bounded _).
-
-Definition eq (f g : fe5211_32) : Prop := eq (proj1_fe5211_32 f) (proj1_fe5211_32 g).
-
-
-Notation in_op_correct_and_bounded k irop op
- := (((Tuple.map (n:=k) fe5211_32WToZ irop = op)
- /\ HList.hlistP (fun v => is_bounded v = true) (Tuple.map (n:=k) fe5211_32WToZ irop))%type)
- (only parsing).
-
-(*Fixpoint inm_op_correct_and_bounded' (count_in count_out : nat)
- : forall (irop : Tower.tower_nd fe5211_32W (Tuple.tuple fe5211_32W count_out) count_in)
- (op : Tower.tower_nd GF5211_32.fe5211_32 (Tuple.tuple GF5211_32.fe5211_32 count_out) count_in)
- (cont : Prop -> Prop),
- Prop
- := match count_in return
- forall (irop : Tower.tower_nd fe5211_32W (Tuple.tuple fe5211_32W count_out) count_in)
- (op : Tower.tower_nd GF5211_32.fe5211_32 (Tuple.tuple GF5211_32.fe5211_32 count_out) count_in)
- (cont : Prop -> Prop),
- Prop
- with
- | O => fun irop op cont => cont (in_op_correct_and_bounded count_out irop op)
- | S n => fun irop op cont
- => forall x : fe5211_32W,
- @inm_op_correct_and_bounded'
- n count_out (irop x) (op (fe5211_32WToZ x))
- (fun P => cont (is_bounded (fe5211_32WToZ x) = true -> P))
- end.
-Definition inm_op_correct_and_bounded count_in count_out irop op
- := Eval cbv [inm_op_correct_and_bounded' Tower.tower_nd Tuple.tuple Tuple.tuple' HList.hlistP HList.hlistP'] in
- inm_op_correct_and_bounded' count_in count_out irop op (fun P => P).
-Fixpoint inm_op_correct_and_bounded_prefix' (count_in count_out : nat)
- : forall (irop : Tower.tower_nd fe5211_32W (Tuple.tuple fe5211_32W count_out) count_in)
- (op : Tower.tower_nd GF5211_32.fe5211_32 (Tuple.tuple GF5211_32.fe5211_32 count_out) count_in),
- Prop
- := match count_in return
- forall (irop : Tower.tower_nd fe5211_32W (Tuple.tuple fe5211_32W count_out) count_in)
- (op : Tower.tower_nd GF5211_32.fe5211_32 (Tuple.tuple GF5211_32.fe5211_32 count_out) count_in),
- Prop
- with
- | O => fun irop op => in_op_correct_and_bounded count_out irop op
- | S n => fun irop op
- => forall x : fe5211_32W,
- is_bounded (fe5211_32WToZ x) = true
- -> @inm_op_correct_and_bounded_prefix'
- n count_out (irop x) (op (fe5211_32WToZ x))
- end.
-Definition inm_op_correct_and_bounded_prefix count_in count_out irop op
- := inm_op_correct_and_bounded_prefix' count_in count_out irop op.
-
-Lemma inm_op_correct_and_bounded_iff_prefix' count_in count_out irop op
- (cont : Prop -> Prop)
- (cont_forall : forall T (P : T -> Prop), cont (forall x : T, P x) <-> forall x : T, cont (P x))
- : inm_op_correct_and_bounded' count_in count_out irop op cont <-> cont (inm_op_correct_and_bounded_prefix' count_in count_out irop op).
-Proof.
- revert dependent cont; induction count_in as [|count_in IHcount_in]; intros.
- { reflexivity. }
- { simpl.
- rewrite cont_forall.
- split; intros H' x; specialize (H' x);
- specialize (IHcount_in (irop x) (op (fe5211_32WToZ x)) (fun P => cont (is_bounded (fe5211_32WToZ x) = true -> P)));
- cbv beta in *;
- [ erewrite <- IHcount_in; [ assumption | .. ]
- | erewrite -> IHcount_in; [ assumption | .. ] ];
- clear IHcount_in.
- { intros; repeat setoid_rewrite cont_forall; split; eauto. }
- { intros; repeat setoid_rewrite cont_forall; split; eauto. } }
-Qed.
-
-Lemma inm_op_correct_and_bounded_iff_prefix count_in count_out irop op
- : inm_op_correct_and_bounded count_in count_out irop op <-> inm_op_correct_and_bounded_prefix count_in count_out irop op.
-Proof.
- apply (inm_op_correct_and_bounded_iff_prefix' count_in count_out irop op (fun P => P)).
- reflexivity.
-Qed.
-
-Definition inm_op_correct_and_bounded1 count_in irop op
- := Eval cbv [inm_op_correct_and_bounded Tuple.map Tuple.to_list Tuple.to_list' Tuple.from_list Tuple.from_list' Tuple.on_tuple List.map] in
- inm_op_correct_and_bounded count_in 1 irop op.*)
-Notation inm_op_correct_and_bounded n m irop op
- := ((forall x,
- HList.hlistP (fun v => is_bounded v = true) (Tuple.map (n:=n%nat%type) fe5211_32WToZ x)
- -> in_op_correct_and_bounded m (irop x) (op (Tuple.map (n:=n) fe5211_32WToZ x))))
- (only parsing).
-Notation ibinop_correct_and_bounded irop op := (inm_op_correct_and_bounded 2 1 irop op) (only parsing).
-Notation iunop_correct_and_bounded irop op := (inm_op_correct_and_bounded 1 1 irop op) (only parsing).
-Notation iunop_FEToZ_correct irop op
- := (forall x,
- is_bounded (fe5211_32WToZ x) = true
- -> word64ToZ (irop x) = op (fe5211_32WToZ x)) (only parsing).
-Notation iunop_FEToWire_correct_and_bounded irop op
- := (forall x,
- is_bounded (fe5211_32WToZ x) = true
- -> wire_digitsWToZ (irop x) = op (fe5211_32WToZ x)
- /\ wire_digits_is_bounded (wire_digitsWToZ (irop x)) = true) (only parsing).
-Notation iunop_WireToFE_correct_and_bounded irop op
- := (forall x,
- wire_digits_is_bounded (wire_digitsWToZ x) = true
- -> fe5211_32WToZ (irop x) = op (wire_digitsWToZ x)
- /\ is_bounded (fe5211_32WToZ (irop x)) = true) (only parsing).
-Notation i9top_correct_and_bounded k irop op := (inm_op_correct_and_bounded 9 k irop op) (only parsing).
-
-Notation prefreeze := GF5211_32.prefreeze.
diff --git a/src/SpecificGen/GF5211_32BoundedExtendedAddCoordinates.v b/src/SpecificGen/GF5211_32BoundedExtendedAddCoordinates.v
deleted file mode 100644
index 4fafe3a10..000000000
--- a/src/SpecificGen/GF5211_32BoundedExtendedAddCoordinates.v
+++ /dev/null
@@ -1,68 +0,0 @@
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.SpecificGen.GF5211_32Bounded.
-Require Import Crypto.SpecificGen.GF5211_32ExtendedAddCoordinates.
-Require Import Crypto.SpecificGen.GF5211_32BoundedAddCoordinates.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-(*
-Lemma fieldwise_eq_extended_add_coordinates_full' twice_d P10 P11 P12 P13 P20 P21 P22 P23
- : Tuple.fieldwise
- (n:=4) GF5211_32BoundedCommon.eq
- (@GF5211_32BoundedAddCoordinates.add_coordinates
- twice_d P10 P11 P12 P13 P20 P21 P22 P23)
- (@ExtendedCoordinates.Extended.add_coordinates
- GF5211_32BoundedCommon.fe5211_32
- GF5211_32Bounded.add GF5211_32Bounded.sub GF5211_32Bounded.mul twice_d
- (P10, P11, P12, P13) (P20, P21, P22, P23)).
-Proof.
- unfold GF5211_32BoundedCommon.eq.
- apply -> (fieldwise_map_iff (n:=4) eq GF5211_32BoundedCommon.proj1_fe5211_32 GF5211_32BoundedCommon.proj1_fe5211_32).
- rewrite add_coordinates_correct.
- cbv [AddCoordinates.add_coordinates].
- setoid_rewrite <- fieldwise_eq_edwards_extended_add_coordinates_carry_nocarry.
- unfold edwards_extended_carry_add_coordinates.
- match goal with |- ?R ?x ?y => rewrite <- (Tuple.map_id (n:=4) x) end.
- apply <- (fieldwise_map_iff (n:=4) eq (fun x => x) GF5211_32BoundedCommon.proj1_fe5211_32).
- apply ExtendedCoordinates.Extended.add_coordinates_respectful_hetero;
- intros;
- repeat match goal with
- | [ |- context[add _ _] ]
- => rewrite add_correct
- | [ |- context[sub _ _] ]
- => rewrite sub_correct
- | [ |- context[mul _ _] ]
- => rewrite mul_correct
- | _ => progress unfold Tuple.fieldwise, Tuple.fieldwise', fst, snd, eq in *
- | [ |- and _ _ ] => split
- | [ |- ?x = ?x ] => reflexivity
- | _ => progress rewrite_strat topdown hints edwards_extended_add_coordinates_correct
- | _ => congruence
- end.
-Qed.
-
-Definition add_coordinates' twice_d P1 P2
- := let '(P10, P11, P12, P13) := P1 in
- let '(P20, P21, P22, P23) := P2 in
- @GF5211_32BoundedAddCoordinates.add_coordinates
- twice_d P10 P11 P12 P13 P20 P21 P22 P23.
-
-Definition add_coordinates twice_d P1 P2
- := Eval cbv beta iota delta [GF5211_32BoundedAddCoordinates.add_coordinates HList.mapt HList.mapt'] in
- let '(P10, P11, P12, P13) := P1 in
- let '(P20, P21, P22, P23) := P2 in
- @GF5211_32BoundedAddCoordinates.add_coordinates
- twice_d P10 P11 P12 P13 P20 P21 P22 P23.
-
-Lemma add_coordinates_correct_full twice_d P1 P2
- : Tuple.fieldwise
- GF5211_32BoundedCommon.eq
- (add_coordinates twice_d P1 P2)
- (@ExtendedCoordinates.Extended.add_coordinates
- GF5211_32BoundedCommon.fe5211_32
- GF5211_32Bounded.add GF5211_32Bounded.sub GF5211_32Bounded.mul twice_d P1 P2).
-Proof.
- destruct_head' prod.
- rewrite <- fieldwise_eq_extended_add_coordinates_full'; reflexivity.
-Qed.
-*)
diff --git a/src/SpecificGen/GF5211_32ExtendedAddCoordinates.v b/src/SpecificGen/GF5211_32ExtendedAddCoordinates.v
deleted file mode 100644
index c01e4f2d1..000000000
--- a/src/SpecificGen/GF5211_32ExtendedAddCoordinates.v
+++ /dev/null
@@ -1,81 +0,0 @@
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.Algebra.
-Require Import Crypto.Util.Relations.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Tactics.
-
-Require Import Crypto.SpecificGen.GF5211_32.
-Require Import Crypto.CompleteEdwardsCurve.ExtendedCoordinates.
-
-Definition edwards_extended_add_coordinates td P Q :=
- (@ExtendedCoordinates.Extended.add_coordinates _ add sub mul td P Q).
-Definition edwards_extended_carry_add_coordinates td P Q :=
- (@ExtendedCoordinates.Extended.add_coordinates _ carry_add carry_sub mul td P Q).
-
-Create HintDb edwards_extended_add_coordinates_correct discriminated.
-Local Existing Instance field5211_32.
-Hint Rewrite
- (Ring.homomorphism_mul(is_homomorphism:=homomorphism_F5211_32_decode))
- (Ring.homomorphism_add(H1 :=homomorphism_F5211_32_decode))
- (Ring.homomorphism_sub(H1 :=homomorphism_F5211_32_decode))
- : edwards_extended_add_coordinates_correct.
-Lemma edwards_extended_add_coordinates_correct td P Q :
- Tuple.map (n:=4) decode (edwards_extended_add_coordinates td P Q)
- = (@ExtendedCoordinates.Extended.add_coordinates _ F.add F.sub F.mul (decode td) (Tuple.map (n:=4) decode P) (Tuple.map (n:=4) decode Q)).
-Proof.
- change (edwards_extended_add_coordinates td P Q)
- with (@ExtendedCoordinates.Extended.add_coordinates _ add sub mul td P Q).
- destruct_head' prod.
- simpl.
- (*rewrite_strat topdown hints edwards_extended_add_coordinates_correct.*) (* loops on Coq 8.4 *)
- repeat (rewrite ?(Ring.homomorphism_mul(is_homomorphism:=homomorphism_F5211_32_decode)),
- ?(Ring.homomorphism_add(H1 :=homomorphism_F5211_32_decode)),
- ?(Ring.homomorphism_sub(H1 :=homomorphism_F5211_32_decode))).
- reflexivity.
-Qed.
-Local Existing Instance carry_field5211_32.
-Hint Rewrite
- (Ring.homomorphism_mul(is_homomorphism:=homomorphism_carry_F5211_32_decode))
- (Ring.homomorphism_add(H1 :=homomorphism_carry_F5211_32_decode))
- (Ring.homomorphism_sub(H1 :=homomorphism_carry_F5211_32_decode))
- : edwards_extended_add_coordinates_correct.
-Lemma edwards_extended_carry_add_coordinates_correct td P Q :
- Tuple.map (n:=4) decode (edwards_extended_carry_add_coordinates td P Q)
- = (@ExtendedCoordinates.Extended.add_coordinates _ F.add F.sub F.mul (decode td) (Tuple.map (n:=4) decode P) (Tuple.map (n:=4) decode Q)).
-Proof.
- change (edwards_extended_carry_add_coordinates td P Q)
- with (@ExtendedCoordinates.Extended.add_coordinates _ carry_add carry_sub mul td P Q).
- destruct_head' prod.
- simpl.
- (*rewrite_strat topdown hints edwards_extended_add_coordinates_correct.*) (* loops on Coq 8.4 *)
- (* This is an annoying replacement for rewrite_strat loopiness *)
- generalize (Ring.homomorphism_mul(is_homomorphism:=homomorphism_carry_F5211_32_decode)).
- generalize (Ring.homomorphism_add(H1 :=homomorphism_carry_F5211_32_decode)).
- generalize (Ring.homomorphism_sub(H1 :=homomorphism_carry_F5211_32_decode)).
- generalize mul; generalize carry_sub; generalize carry_add.
- intros carry_add' carry_sub' mul'.
- intros H0 H1 H2.
- repeat rewrite ?H2, ?H1, ?H0.
- reflexivity.
-Qed.
-
-Lemma fieldwise_eq_edwards_extended_add_coordinates_carry_nocarry td P Q :
- Tuple.fieldwise
- (n:=4) eq
- (edwards_extended_carry_add_coordinates td P Q)
- (edwards_extended_add_coordinates td P Q).
-Proof.
- pose proof (edwards_extended_carry_add_coordinates_correct td P Q) as H0.
- pose proof (edwards_extended_add_coordinates_correct td P Q) as H1.
- rewrite <- H0 in H1; clear H0.
- assert (Tuple.fieldwise
- (fun x y => x = y)
- (Tuple.map (n:=4) decode (edwards_extended_carry_add_coordinates td P Q))
- (Tuple.map (n:=4) decode (edwards_extended_add_coordinates td P Q)))
- by (rewrite H1; reflexivity).
- clear H1.
- destruct (edwards_extended_carry_add_coordinates td P Q), (edwards_extended_add_coordinates td P Q).
- destruct_head' prod; simpl; unfold eq; trivial.
-Qed.
diff --git a/src/SpecificGen/GF5211_32Reflective.v b/src/SpecificGen/GF5211_32Reflective.v
deleted file mode 100644
index f6f70ffec..000000000
--- a/src/SpecificGen/GF5211_32Reflective.v
+++ /dev/null
@@ -1,118 +0,0 @@
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParams.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParamProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemOpt.
-Require Export Crypto.SpecificGen.GF5211_32.
-Require Import Crypto.SpecificGen.GF5211_32BoundedCommon.
-Require Import Crypto.Reflection.Reify.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.Map.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Crypto.Reflection.Z.Interpretations64.Relations.
-Require Import Crypto.Reflection.Z.Interpretations64.RelationsCombinations.
-Require Import Crypto.Reflection.Z.Reify.
-Require Import Crypto.Reflection.Z.Syntax.
-Require Import Crypto.SpecificGen.GF5211_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF5211_32Reflective.Reified.
-Require Import Bedrock.Word Crypto.Util.WordUtil.
-Require Import Coq.Lists.List Crypto.Util.ListUtil.
-Require Import Crypto.Tactics.VerdiTactics.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Notations.
-Require Import Crypto.Util.Bool.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Algebra.
-Import ListNotations.
-Require Import Coq.ZArith.ZArith Coq.ZArith.Zpower Coq.ZArith.ZArith Coq.ZArith.Znumtheory.
-Local Open Scope Z.
-
-Definition radd : ExprBinOp := Eval vm_compute in rcarry_addW.
-Definition rsub : ExprBinOp := Eval vm_compute in rcarry_subW.
-Definition rmul : ExprBinOp := Eval vm_compute in rmulW.
-Definition ropp : ExprUnOp := Eval vm_compute in rcarry_oppW.
-Definition rprefreeze : ExprUnOp := Eval vm_compute in rprefreezeW.
-Definition rge_modulus : ExprUnOpFEToZ := Eval vm_compute in rge_modulusW.
-Definition rpack : ExprUnOpFEToWire := Eval vm_compute in rpackW.
-Definition runpack : ExprUnOpWireToFE := Eval vm_compute in runpackW.
-
-Declare Reduction asm_interp
- := cbv beta iota delta
- [id
- interp_bexpr interp_uexpr interp_uexpr_FEToWire interp_uexpr_FEToZ interp_uexpr_WireToFE interp_9_4expr
- Eta.interp_flat_type_eta Eta.interp_flat_type_eta_gen
- radd rsub rmul ropp rprefreeze rge_modulus rpack runpack
- curry_binop_fe5211_32W curry_unop_fe5211_32W curry_unop_wire_digitsW curry_9op_fe5211_32W
- WordW.interp_op WordW.interp_base_type
- Z.interp_op Z.interp_base_type
- Z.Syntax.interp_op Z.Syntax.interp_base_type
- mapf_interp_flat_type WordW.interp_base_type word64ize
- Interp interp interp_flat_type interpf interpf_step interp_flat_type fst snd].
-Ltac asm_interp
- := cbv beta iota delta
- [id
- interp_bexpr interp_uexpr interp_uexpr_FEToWire interp_uexpr_FEToZ interp_uexpr_WireToFE interp_9_4expr
- Eta.interp_flat_type_eta Eta.interp_flat_type_eta_gen
- radd rsub rmul ropp rprefreeze rge_modulus rpack runpack
- curry_binop_fe5211_32W curry_unop_fe5211_32W curry_unop_wire_digitsW curry_9op_fe5211_32W
- WordW.interp_op WordW.interp_base_type
- Z.interp_op Z.interp_base_type
- Z.Syntax.interp_op Z.Syntax.interp_base_type
- mapf_interp_flat_type WordW.interp_base_type word64ize
- Interp interp interp_flat_type interpf interp_flat_type fst snd].
-
-
-Definition interp_radd : SpecificGen.GF5211_32BoundedCommon.fe5211_32W * SpecificGen.GF5211_32BoundedCommon.fe5211_32W -> SpecificGen.GF5211_32BoundedCommon.fe5211_32W
- := Eval asm_interp in interp_bexpr radd.
-(*Print interp_radd.*)
-Definition interp_radd_correct : interp_radd = interp_bexpr radd := eq_refl.
-Definition interp_rsub : SpecificGen.GF5211_32BoundedCommon.fe5211_32W * SpecificGen.GF5211_32BoundedCommon.fe5211_32W -> SpecificGen.GF5211_32BoundedCommon.fe5211_32W
- := Eval asm_interp in interp_bexpr rsub.
-(*Print interp_rsub.*)
-Definition interp_rsub_correct : interp_rsub = interp_bexpr rsub := eq_refl.
-Definition interp_rmul : SpecificGen.GF5211_32BoundedCommon.fe5211_32W * SpecificGen.GF5211_32BoundedCommon.fe5211_32W -> SpecificGen.GF5211_32BoundedCommon.fe5211_32W
- := Eval asm_interp in interp_bexpr rmul.
-(*Print interp_rmul.*)
-Definition interp_rmul_correct : interp_rmul = interp_bexpr rmul := eq_refl.
-Definition interp_ropp : SpecificGen.GF5211_32BoundedCommon.fe5211_32W -> SpecificGen.GF5211_32BoundedCommon.fe5211_32W
- := Eval asm_interp in interp_uexpr ropp.
-(*Print interp_ropp.*)
-Definition interp_ropp_correct : interp_ropp = interp_uexpr ropp := eq_refl.
-Definition interp_rprefreeze : SpecificGen.GF5211_32BoundedCommon.fe5211_32W -> SpecificGen.GF5211_32BoundedCommon.fe5211_32W
- := Eval asm_interp in interp_uexpr rprefreeze.
-(*Print interp_rprefreeze.*)
-Definition interp_rprefreeze_correct : interp_rprefreeze = interp_uexpr rprefreeze := eq_refl.
-
-Definition interp_rge_modulus : SpecificGen.GF5211_32BoundedCommon.fe5211_32W -> SpecificGen.GF5211_32BoundedCommon.word64
- := Eval asm_interp in interp_uexpr_FEToZ rge_modulus.
-Definition interp_rge_modulus_correct : interp_rge_modulus = interp_uexpr_FEToZ rge_modulus := eq_refl.
-
-Definition interp_rpack : SpecificGen.GF5211_32BoundedCommon.fe5211_32W -> SpecificGen.GF5211_32BoundedCommon.wire_digitsW
- := Eval asm_interp in interp_uexpr_FEToWire rpack.
-Definition interp_rpack_correct : interp_rpack = interp_uexpr_FEToWire rpack := eq_refl.
-
-Definition interp_runpack : SpecificGen.GF5211_32BoundedCommon.wire_digitsW -> SpecificGen.GF5211_32BoundedCommon.fe5211_32W
- := Eval asm_interp in interp_uexpr_WireToFE runpack.
-Definition interp_runpack_correct : interp_runpack = interp_uexpr_WireToFE runpack := eq_refl.
-
-Lemma radd_correct_and_bounded : binop_correct_and_bounded radd carry_add.
-Proof. exact rcarry_addW_correct_and_bounded. Qed.
-Lemma rsub_correct_and_bounded : binop_correct_and_bounded rsub carry_sub.
-Proof. exact rcarry_subW_correct_and_bounded. Qed.
-Lemma rmul_correct_and_bounded : binop_correct_and_bounded rmul mul.
-Proof. exact rmulW_correct_and_bounded. Qed.
-Lemma ropp_correct_and_bounded : unop_correct_and_bounded ropp carry_opp.
-Proof. exact rcarry_oppW_correct_and_bounded. Qed.
-Lemma rprefreeze_correct_and_bounded : unop_correct_and_bounded rprefreeze prefreeze.
-Proof. exact rprefreezeW_correct_and_bounded. Qed.
-Lemma rge_modulus_correct_and_bounded : unop_FEToZ_correct rge_modulus ge_modulus.
-Proof. exact rge_modulusW_correct_and_bounded. Qed.
-Lemma rpack_correct_and_bounded : unop_FEToWire_correct_and_bounded rpack pack.
-Proof. exact rpackW_correct_and_bounded. Qed.
-Lemma runpack_correct_and_bounded : unop_WireToFE_correct_and_bounded runpack unpack.
-Proof. exact runpackW_correct_and_bounded. Qed.
diff --git a/src/SpecificGen/GF5211_32Reflective/Common.v b/src/SpecificGen/GF5211_32Reflective/Common.v
deleted file mode 100644
index 176e20f08..000000000
--- a/src/SpecificGen/GF5211_32Reflective/Common.v
+++ /dev/null
@@ -1,668 +0,0 @@
-Require Export Coq.ZArith.ZArith.
-Require Export Coq.Strings.String.
-Require Export Crypto.SpecificGen.GF5211_32.
-Require Export Crypto.SpecificGen.GF5211_32BoundedCommon.
-Require Import Crypto.Reflection.Reify.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Reflection.Wf.
-Require Import Crypto.Reflection.ExprInversion.
-Require Import Crypto.Reflection.Tuple.
-Require Import Crypto.Reflection.Relations.
-Require Import Crypto.Reflection.Eta.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Crypto.Reflection.Z.Interpretations64.Relations.
-Require Import Crypto.Reflection.Z.Interpretations64.RelationsCombinations.
-Require Import Crypto.Reflection.Z.Reify.
-Require Export Crypto.Reflection.Z.Syntax.
-Require Import Crypto.Reflection.Z.Syntax.Equality.
-Require Import Crypto.Reflection.InterpWfRel.
-Require Import Crypto.Reflection.WfReflective.
-Require Import Crypto.Util.Curry.
-Require Import Crypto.Util.Tower.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.ListUtil.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.Prod.
-Require Import Crypto.Util.Notations.
-
-Notation Expr := (Expr base_type op).
-
-Local Ltac make_type_from' T :=
- let T := (eval compute in T) in
- let rT := reify_type T in
- exact rT.
-Local Ltac make_type_from uncurried_op :=
- let T := (type of uncurried_op) in
- make_type_from' T.
-
-Definition fe5211_32T : flat_type base_type.
-Proof.
- let T := (eval compute in GF5211_32.fe5211_32) in
- let T := reify_flat_type T in
- exact T.
-Defined.
-Definition Expr_n_OpT (count_out : nat) : flat_type base_type
- := Eval cbv [Syntax.tuple Syntax.tuple' fe5211_32T] in
- Syntax.tuple fe5211_32T count_out.
-Definition Expr_nm_OpT (count_in count_out : nat) : type base_type
- := Eval cbv [Syntax.tuple Syntax.tuple' fe5211_32T Expr_n_OpT] in
- Arrow (Syntax.tuple fe5211_32T count_in) (Expr_n_OpT count_out).
-Definition ExprBinOpT : type base_type := Eval compute in Expr_nm_OpT 2 1.
-Definition ExprUnOpT : type base_type := Eval compute in Expr_nm_OpT 1 1.
-Definition ExprUnOpFEToZT : type base_type.
-Proof. make_type_from ge_modulus. Defined.
-Definition ExprUnOpWireToFET : type base_type.
-Proof. make_type_from unpack. Defined.
-Definition ExprUnOpFEToWireT : type base_type.
-Proof. make_type_from pack. Defined.
-Definition Expr4OpT : type base_type := Eval compute in Expr_nm_OpT 4 1.
-Definition Expr9_4OpT : type base_type := Eval compute in Expr_nm_OpT 9 4.
-Definition ExprArgT : flat_type base_type
- := Eval compute in domain ExprUnOpT.
-Definition ExprArgWireT : flat_type base_type
- := Eval compute in domain ExprUnOpWireToFET.
-Definition ExprZ : Type := Expr (Arrow Unit (Tbase TZ)).
-Definition ExprUnOpFEToZ : Type := Expr ExprUnOpFEToZT.
-Definition ExprUnOpWireToFE : Type := Expr ExprUnOpWireToFET.
-Definition ExprUnOpFEToWire : Type := Expr ExprUnOpFEToWireT.
-Definition Expr_nm_Op count_in count_out : Type := Expr (Expr_nm_OpT count_in count_out).
-Definition ExprBinOp : Type := Expr ExprBinOpT.
-Definition ExprUnOp : Type := Expr ExprUnOpT.
-Definition Expr4Op : Type := Expr Expr4OpT.
-Definition Expr9_4Op : Type := Expr Expr9_4OpT.
-Definition ExprArg : Type := Expr (Arrow Unit ExprArgT).
-Definition ExprArgWire : Type := Expr (Arrow Unit ExprArgWireT).
-Definition expr_nm_Op count_in count_out var : Type
- := expr base_type op (var:=var) (Expr_nm_OpT count_in count_out).
-Definition exprBinOp var : Type := expr base_type op (var:=var) ExprBinOpT.
-Definition exprUnOp var : Type := expr base_type op (var:=var) ExprUnOpT.
-Definition expr4Op var : Type := expr base_type op (var:=var) Expr4OpT.
-Definition expr9_4Op var : Type := expr base_type op (var:=var) Expr9_4OpT.
-Definition exprZ var : Type := expr base_type op (var:=var) (Arrow Unit (Tbase TZ)).
-Definition exprUnOpFEToZ var : Type := expr base_type op (var:=var) ExprUnOpFEToZT.
-Definition exprUnOpWireToFE var : Type := expr base_type op (var:=var) ExprUnOpWireToFET.
-Definition exprUnOpFEToWire var : Type := expr base_type op (var:=var) ExprUnOpFEToWireT.
-Definition exprArg var : Type := expr base_type op (var:=var) (Arrow Unit ExprArgT).
-Definition exprArgWire var : Type := expr base_type op (var:=var) (Arrow Unit ExprArgWireT).
-
-Definition make_bound (x : Z * Z) : ZBounds.t
- := Some {| Bounds.lower := fst x ; Bounds.upper := snd x |}.
-
-Fixpoint Expr_nm_Op_bounds count_in count_out {struct count_in} : interp_flat_type ZBounds.interp_base_type (domain (Expr_nm_OpT count_in count_out))
- := match count_in return interp_flat_type _ (domain (Expr_nm_OpT count_in count_out)) with
- | 0 => tt
- | S n
- => let b := (Tuple.map make_bound bounds) in
- let bs := Expr_nm_Op_bounds n count_out in
- match n return interp_flat_type _ (domain (Expr_nm_OpT n _)) -> interp_flat_type _ (domain (Expr_nm_OpT (S n) _)) with
- | 0 => fun _ => b
- | S n' => fun bs => (bs, b)
- end bs
- end.
-Definition ExprBinOp_bounds : interp_flat_type ZBounds.interp_base_type (domain ExprBinOpT)
- := Eval compute in Expr_nm_Op_bounds 2 1.
-Definition ExprUnOp_bounds : interp_flat_type ZBounds.interp_base_type (domain ExprUnOpT)
- := Eval compute in Expr_nm_Op_bounds 1 1.
-Definition ExprUnOpFEToZ_bounds : interp_flat_type ZBounds.interp_base_type (domain ExprUnOpFEToZT)
- := Eval compute in Expr_nm_Op_bounds 1 1.
-Definition ExprUnOpFEToWire_bounds : interp_flat_type ZBounds.interp_base_type (domain ExprUnOpFEToWireT)
- := Eval compute in Expr_nm_Op_bounds 1 1.
-Definition Expr4Op_bounds : interp_flat_type ZBounds.interp_base_type (domain Expr4OpT)
- := Eval compute in Expr_nm_Op_bounds 4 1.
-Definition Expr9Op_bounds : interp_flat_type ZBounds.interp_base_type (domain Expr9_4OpT)
- := Eval compute in Expr_nm_Op_bounds 9 4.
-Definition ExprUnOpWireToFE_bounds : interp_flat_type ZBounds.interp_base_type (domain ExprUnOpWireToFET)
- := Tuple.map make_bound wire_digit_bounds.
-
-Definition interp_bexpr : ExprBinOp -> SpecificGen.GF5211_32BoundedCommon.fe5211_32W * SpecificGen.GF5211_32BoundedCommon.fe5211_32W -> SpecificGen.GF5211_32BoundedCommon.fe5211_32W
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-Definition interp_uexpr : ExprUnOp -> SpecificGen.GF5211_32BoundedCommon.fe5211_32W -> SpecificGen.GF5211_32BoundedCommon.fe5211_32W
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-Definition interp_uexpr_FEToZ : ExprUnOpFEToZ -> SpecificGen.GF5211_32BoundedCommon.fe5211_32W -> SpecificGen.GF5211_32BoundedCommon.word64
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-Definition interp_uexpr_FEToWire : ExprUnOpFEToWire -> SpecificGen.GF5211_32BoundedCommon.fe5211_32W -> SpecificGen.GF5211_32BoundedCommon.wire_digitsW
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-Definition interp_uexpr_WireToFE : ExprUnOpWireToFE -> SpecificGen.GF5211_32BoundedCommon.wire_digitsW -> SpecificGen.GF5211_32BoundedCommon.fe5211_32W
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-Definition interp_9_4expr : Expr9_4Op
- -> Tuple.tuple SpecificGen.GF5211_32BoundedCommon.fe5211_32W 9
- -> Tuple.tuple SpecificGen.GF5211_32BoundedCommon.fe5211_32W 4
- := fun e => interp_flat_type_eta (Interp (@WordW.interp_op) e).
-
-Notation binop_correct_and_bounded rop op
- := (ibinop_correct_and_bounded (interp_bexpr rop) (curry2 op)) (only parsing).
-Notation unop_correct_and_bounded rop op
- := (iunop_correct_and_bounded (interp_uexpr rop) op) (only parsing).
-Notation unop_FEToZ_correct rop op
- := (iunop_FEToZ_correct (interp_uexpr_FEToZ rop) op) (only parsing).
-Notation unop_FEToWire_correct_and_bounded rop op
- := (iunop_FEToWire_correct_and_bounded (interp_uexpr_FEToWire rop) op) (only parsing).
-Notation unop_WireToFE_correct_and_bounded rop op
- := (iunop_WireToFE_correct_and_bounded (interp_uexpr_WireToFE rop) op) (only parsing).
-Notation op9_4_correct_and_bounded rop op
- := (i9top_correct_and_bounded 4 (interp_9_4expr rop) op) (only parsing).
-
-Ltac rexpr_cbv :=
- lazymatch goal with
- | [ |- { rexpr | forall x, Interp _ (t:=?T) rexpr x = ?uncurry ?oper x } ]
- => let operf := head oper in
- let uncurryf := head uncurry in
- try cbv delta [T]; try cbv delta [oper];
- try cbv beta iota delta [uncurryf]
- | [ |- { rexpr | forall x, Interp _ (t:=?T) rexpr x = ?oper x } ]
- => let operf := head oper in
- try cbv delta [T]; try cbv delta [oper]
- end;
- cbv beta iota delta [interp_flat_type interp_base_type zero_ GF5211_32.fe5211_32 GF5211_32.wire_digits].
-
-Ltac reify_sig :=
- rexpr_cbv; eexists; Reify_rhs; reflexivity.
-
-Local Notation rexpr_sig T uncurried_op :=
- { rexprZ
- | forall x, Interp interp_op (t:=T) rexprZ x = uncurried_op x }
- (only parsing).
-
-Notation rexpr_binop_sig op := (rexpr_sig ExprBinOpT (curry2 op)) (only parsing).
-Notation rexpr_unop_sig op := (rexpr_sig ExprUnOpT op) (only parsing).
-Notation rexpr_unop_FEToZ_sig op := (rexpr_sig ExprUnOpFEToZT op) (only parsing).
-Notation rexpr_unop_FEToWire_sig op := (rexpr_sig ExprUnOpFEToWireT op) (only parsing).
-Notation rexpr_unop_WireToFE_sig op := (rexpr_sig ExprUnOpWireToFET op) (only parsing).
-Notation rexpr_9_4op_sig op := (rexpr_sig Expr9_4OpT op) (only parsing).
-
-Notation correct_and_bounded_genT ropW'v ropZ_sigv
- := (let ropW' := ropW'v in
- let ropZ_sig := ropZ_sigv in
- ropW' = proj1_sig ropZ_sig
- /\ interp_type_rel_pointwise Relations.related_Z (Interp (@BoundedWordW.interp_op) ropW') (Interp (@Z.interp_op) ropW')
- /\ interp_type_rel_pointwise Relations.related_bounds (Interp (@BoundedWordW.interp_op) ropW') (Interp (@ZBounds.interp_op) ropW')
- /\ interp_type_rel_pointwise Relations.related_wordW (Interp (@BoundedWordW.interp_op) ropW') (Interp (@WordW.interp_op) ropW'))
- (only parsing).
-
-Ltac app_tuples x y :=
- let tx := type of x in
- lazymatch (eval hnf in tx) with
- | prod _ _ => let xs := app_tuples (snd x) y in
- constr:((fst x, xs))
- | _ => constr:((x, y))
- end.
-
-Local Arguments Tuple.map2 : simpl never.
-Local Arguments Tuple.map : simpl never.
-(*
-Fixpoint args_to_bounded_helperT {n}
- (v : Tuple.tuple' WordW.wordW n)
- (bounds : Tuple.tuple' (Z * Z) n)
- (pf : List.fold_right
- andb true
- (Tuple.to_list
- _
- (Tuple.map2
- (n:=S n)
- (fun bounds v =>
- let '(lower, upper) := bounds in ((lower <=? v)%Z && (v <=? upper)%Z)%bool)
- bounds
- (Tuple.map (n:=S n) WordW.wordWToZ v))) = true)
- (res : Type)
- {struct n}
- : Type.
-Proof.
- refine (match n return (forall (v : Tuple.tuple' _ n) (bounds : Tuple.tuple' _ n),
- List.fold_right
- _ _ (Tuple.to_list
- _
- (Tuple.map2 (n:=S n) _ bounds (Tuple.map (n:=S n) _ v))) = true
- -> Type)
- with
- | 0 => fun v' bounds' pf0 => forall pf1 : (0 <= fst bounds' /\ Z.log2 (snd bounds') < Z.of_nat WordW.bit_width)%Z, res
- | S n' => fun v' bounds' pf0 => let t := _ in
- forall pf1 : (0 <= fst (snd bounds') /\ Z.log2 (snd (snd bounds')) < Z.of_nat WordW.bit_width)%Z, @args_to_bounded_helperT n' (fst v') (fst bounds') t res
- end v bounds pf).
- { clear -pf0.
- abstract (
- destruct v', bounds'; simpl @fst;
- rewrite Tuple.map_S in pf0;
- simpl in pf0;
- rewrite Tuple.map2_S in pf0;
- simpl @List.fold_right in *;
- rewrite Bool.andb_true_iff in pf0; tauto
- ). }
-Defined.
-
-Fixpoint args_to_bounded_helper {n} res
- {struct n}
- : forall v bounds pf, (Tuple.tuple' BoundedWordW.BoundedWord n -> res) -> @args_to_bounded_helperT n v bounds pf res.
-Proof.
- refine match n return (forall v bounds pf, (Tuple.tuple' BoundedWordW.BoundedWord n -> res) -> @args_to_bounded_helperT n v bounds pf res) with
- | 0 => fun v bounds pf f pf' => f {| BoundedWord.lower := fst bounds ; BoundedWord.value := v ; BoundedWord.upper := snd bounds |}
- | S n'
- => fun v bounds pf f pf'
- => @args_to_bounded_helper
- n' res (fst v) (fst bounds) _
- (fun ts => f (ts, {| BoundedWord.lower := fst (snd bounds) ; BoundedWord.value := snd v ; BoundedWord.upper := snd (snd bounds) |}))
- end.
- { clear -pf pf'.
- unfold Tuple.map2, Tuple.map in pf; simpl in *.
- abstract (
- destruct bounds;
- simpl in *;
- rewrite !Bool.andb_true_iff in pf;
- destruct_head' and;
- Z.ltb_to_lt; auto
- ). }
- { simpl in *.
- clear -pf pf'.
- abstract (
- destruct bounds as [? [? ?] ], v; simpl in *;
- rewrite Tuple.map_S in pf; simpl in pf; rewrite Tuple.map2_S in pf;
- simpl in pf;
- rewrite !Bool.andb_true_iff in pf;
- destruct_head' and;
- Z.ltb_to_lt; auto
- ). }
-Defined.
-*)
-
-Definition assoc_right''
- := Eval cbv [Tuple.assoc_right' Tuple.rsnoc' fst snd] in @Tuple.assoc_right'.
-(*
-Definition args_to_bounded {n} v bounds pf
- := Eval cbv [args_to_bounded_helper assoc_right''] in
- @args_to_bounded_helper n _ v bounds pf (@assoc_right'' _ _).
-*)
-Local Ltac get_len T :=
- match (eval hnf in T) with
- | prod ?A ?B
- => let a := get_len A in
- let b := get_len B in
- (eval compute in (a + b)%nat)
- | _ => constr:(1%nat)
- end.
-
-Ltac assoc_right_tuple x so_far :=
- let t := type of x in
- lazymatch (eval hnf in t) with
- | prod _ _ => let so_far := assoc_right_tuple (snd x) so_far in
- assoc_right_tuple (fst x) so_far
- | _ => lazymatch so_far with
- | @None => x
- | _ => constr:((x, so_far))
- end
- end.
-
-(*
-Local Ltac make_args x :=
- let x' := fresh "x'" in
- compute in x |- *;
- let t := match type of x with @expr _ _ _ (Tflat ?t) => t end in
- let t' := match goal with |- @expr _ _ _ (Tflat ?t) => t end in
- refine (LetIn (invert_Return x) _);
- let x'' := fresh "x''" in
- intro x'';
- let xv := assoc_right_tuple x'' (@None) in
- refine (SmartVarf (xv : interp_flat_type _ t')).
-
-Local Ltac args_to_bounded x H :=
- let x' := fresh in
- set (x' := x);
- compute in x;
- let len := (let T := type of x in get_len T) in
- destruct_head' prod;
- let c := constr:(args_to_bounded (n:=pred len) x' _ H) in
- let bounds := lazymatch c with args_to_bounded _ ?bounds _ => bounds end in
- let c := (eval cbv [domain ExprUnOpT interp_flat_type args_to_bounded bounds pred fst snd] in c) in
- apply c; compute; clear;
- try abstract (
- repeat split;
- solve [ reflexivity
- | refine (fun v => match v with eq_refl => I end) ]
- ).
- *)
-
-Section gen.
- Definition bounds_are_good_gen
- {n : nat} (bounds : Tuple.tuple (Z * Z) n)
- := let res :=
- Tuple.map (fun bs => let '(lower, upper) := bs in ((0 <=? lower)%Z && (Z.log2 upper <? Z.of_nat WordW.bit_width)%Z)%bool) bounds
- in
- List.fold_right andb true (Tuple.to_list n res).
- Definition unop_args_to_bounded'
- (bs : Z * Z)
- (Hbs : bounds_are_good_gen (n:=1) bs = true)
- (x : word64)
- (H : is_bounded_gen (Tuple.map (fun v : word64 => (v : Z)) (n:=1) x) bs = true)
- : BoundedWordW.BoundedWord.
- Proof.
- refine {| BoundedWord.lower := fst bs ; BoundedWord.value := x ; BoundedWord.upper := snd bs |}.
- unfold bounds_are_good_gen, is_bounded_gen, Tuple.map, Tuple.map2 in *; simpl in *.
- abstract (
- destruct bs; Bool.split_andb; Z.ltb_to_lt; simpl;
- repeat apply conj; assumption
- ).
- Defined.
- Fixpoint n_op_args_to_bounded'
- n
- : forall (bs : Tuple.tuple' (Z * Z) n)
- (Hbs : bounds_are_good_gen (n:=S n) bs = true)
- (x : Tuple.tuple' word64 n)
- (H : is_bounded_gen (Tuple.eta_tuple (Tuple.map (n:=S n) (fun v : word64 => v : Z)) x) bs = true),
- interp_flat_type (fun _ => BoundedWordW.BoundedWord) (Syntax.tuple' (Tbase TZ) n).
- Proof.
- destruct n as [|n']; simpl in *.
- { exact unop_args_to_bounded'. }
- { refine (fun bs Hbs x H
- => (@n_op_args_to_bounded' n' (fst bs) _ (fst x) _,
- @unop_args_to_bounded' (snd bs) _ (snd x) _));
- clear n_op_args_to_bounded';
- simpl in *;
- [ clear x H | clear Hbs | clear x H | clear Hbs ];
- unfold bounds_are_good_gen, is_bounded_gen in *;
- abstract (
- repeat first [ progress simpl in *
- | assumption
- | reflexivity
- | progress Bool.split_andb
- | progress destruct_head prod
- | match goal with
- | [ H : _ |- _ ] => progress rewrite ?Tuple.map_S, ?Tuple.map2_S, ?Tuple.strip_eta_tuple'_dep in H
- end
- | progress rewrite ?Tuple.map_S, ?Tuple.map2_S, ?Tuple.strip_eta_tuple'_dep
- | progress break_match_hyps
- | rewrite Bool.andb_true_iff; apply conj
- | unfold Tuple.map, Tuple.map2; simpl; rewrite Bool.andb_true_iff; apply conj ]
- ). }
- Defined.
-
- Definition n_op_args_to_bounded
- n
- : forall (bs : Tuple.tuple (Z * Z) n)
- (Hbs : bounds_are_good_gen bs = true)
- (x : Tuple.tuple word64 n)
- (H : is_bounded_gen (Tuple.eta_tuple (Tuple.map (fun v : word64 => v : Z)) x) bs = true),
- interp_flat_type (fun _ => BoundedWordW.BoundedWord) (Syntax.tuple (Tbase TZ) n)
- := match n with
- | 0 => fun _ _ _ _ => tt
- | S n' => @n_op_args_to_bounded' n'
- end.
-
- Fixpoint nm_op_args_to_bounded' n m
- (bs : Tuple.tuple (Z * Z) m)
- (Hbs : bounds_are_good_gen bs = true)
- : forall (x : interp_flat_type (fun _ => Tuple.tuple word64 m) (Syntax.tuple' (Tbase TZ) n))
- (H : SmartVarfPropMap (fun _ x => is_bounded_gen (Tuple.eta_tuple (Tuple.map (fun v : word64 => v : Z)) x) bs = true)
- x),
- interp_flat_type (fun _ => BoundedWordW.BoundedWord) (Syntax.tuple' (Syntax.tuple (Tbase TZ) m) n)
- := match n with
- | 0 => @n_op_args_to_bounded m bs Hbs
- | S n' => fun x H
- => (@nm_op_args_to_bounded' n' m bs Hbs (fst x) (proj1 H),
- @n_op_args_to_bounded m bs Hbs (snd x) (proj2 H))
- end.
- Definition nm_op_args_to_bounded n m
- (bs : Tuple.tuple (Z * Z) m)
- (Hbs : bounds_are_good_gen bs = true)
- : forall (x : interp_flat_type (fun _ => Tuple.tuple word64 m) (Syntax.tuple (Tbase TZ) n))
- (H : SmartVarfPropMap (fun _ x => is_bounded_gen (Tuple.eta_tuple (Tuple.map (fun v : word64 => v : Z)) x) bs = true)
- x),
- interp_flat_type (fun _ => BoundedWordW.BoundedWord) (Syntax.tuple (Syntax.tuple (Tbase TZ) m) n)
- := match n with
- | 0 => fun _ _ => tt
- | S n' => @nm_op_args_to_bounded' n' m bs Hbs
- end.
-End gen.
-
-Local Ltac get_inner_len T :=
- lazymatch T with
- | (?T * _)%type => get_inner_len T
- | ?T => get_len T
- end.
-Local Ltac get_outer_len T :=
- lazymatch T with
- | (?A * ?B)%type => let a := get_outer_len A in
- let b := get_outer_len B in
- (eval compute in (a + b)%nat)
- | ?T => constr:(1%nat)
- end.
-Local Ltac args_to_bounded x H :=
- let t := type of x in
- let m := get_inner_len t in
- let n := get_outer_len t in
- let H := constr:(fun Hbs => @nm_op_args_to_bounded n m _ Hbs x H) in
- let H := (eval cbv beta in (H eq_refl)) in
- exact H.
-
-Definition binop_args_to_bounded (x : fe5211_32W * fe5211_32W)
- (H : is_bounded (fe5211_32WToZ (fst x)) = true)
- (H' : is_bounded (fe5211_32WToZ (snd x)) = true)
- : interp_flat_type (fun _ => BoundedWordW.BoundedWord) (domain ExprBinOpT).
-Proof. args_to_bounded x (conj H H'). Defined.
-Definition unop_args_to_bounded (x : fe5211_32W) (H : is_bounded (fe5211_32WToZ x) = true)
- : interp_flat_type (fun _ => BoundedWordW.BoundedWord) (domain ExprUnOpT).
-Proof. args_to_bounded x H. Defined.
-Definition unopWireToFE_args_to_bounded (x : wire_digitsW) (H : wire_digits_is_bounded (wire_digitsWToZ x) = true)
- : interp_flat_type (fun _ => BoundedWordW.BoundedWord) (domain ExprUnOpWireToFET).
-Proof. args_to_bounded x H. Defined.
-Definition op9_args_to_bounded (x : fe5211_32W * fe5211_32W * fe5211_32W * fe5211_32W * fe5211_32W * fe5211_32W * fe5211_32W * fe5211_32W * fe5211_32W)
- (H0 : is_bounded (fe5211_32WToZ (fst (fst (fst (fst (fst (fst (fst (fst x))))))))) = true)
- (H1 : is_bounded (fe5211_32WToZ (snd (fst (fst (fst (fst (fst (fst (fst x))))))))) = true)
- (H2 : is_bounded (fe5211_32WToZ (snd (fst (fst (fst (fst (fst (fst x)))))))) = true)
- (H3 : is_bounded (fe5211_32WToZ (snd (fst (fst (fst (fst (fst x))))))) = true)
- (H4 : is_bounded (fe5211_32WToZ (snd (fst (fst (fst (fst x)))))) = true)
- (H5 : is_bounded (fe5211_32WToZ (snd (fst (fst (fst x))))) = true)
- (H6 : is_bounded (fe5211_32WToZ (snd (fst (fst x)))) = true)
- (H7 : is_bounded (fe5211_32WToZ (snd (fst x))) = true)
- (H8 : is_bounded (fe5211_32WToZ (snd x)) = true)
- : interp_flat_type (fun _ => BoundedWordW.BoundedWord) (domain Expr9_4OpT).
-Proof. args_to_bounded x (conj (conj (conj (conj (conj (conj (conj (conj H0 H1) H2) H3) H4) H5) H6) H7) H8). Defined.
-Local Ltac make_bounds_prop' bounds bounds' :=
- first [ refine (andb _ _);
- [ destruct bounds' as [bounds' _], bounds as [bounds _]
- | destruct bounds' as [_ bounds'], bounds as [_ bounds] ];
- try make_bounds_prop' bounds bounds'
- | exact (match bounds' with
- | Some bounds' => let (l, u) := bounds in
- let (l', u') := bounds' in
- ((l' <=? l) && (u <=? u'))%Z%bool
- | None => false
- end) ].
-Local Ltac make_bounds_prop bounds orig_bounds :=
- let bounds' := fresh "bounds'" in
- pose orig_bounds as bounds';
- make_bounds_prop' bounds bounds'.
-Definition unop_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain ExprUnOpT)) : bool.
-Proof. make_bounds_prop bounds ExprUnOp_bounds. Defined.
-Definition binop_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain ExprBinOpT)) : bool.
-Proof. make_bounds_prop bounds ExprUnOp_bounds. Defined.
-Definition unopFEToWire_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain ExprUnOpFEToWireT)) : bool.
-Proof. make_bounds_prop bounds ExprUnOpWireToFE_bounds. Defined.
-Definition unopWireToFE_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain ExprUnOpWireToFET)) : bool.
-Proof. make_bounds_prop bounds ExprUnOp_bounds. Defined.
-(* TODO FIXME(jgross?, andreser?): Is every function returning a single Z a boolean function? *)
-Definition unopFEToZ_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain ExprUnOpFEToZT)) : bool.
-Proof.
- refine (let (l, u) := bounds in ((0 <=? l) && (u <=? 1))%Z%bool).
-Defined.
-Definition op9_4_bounds_good (bounds : interp_flat_type (fun _ => ZBounds.bounds) (codomain Expr9_4OpT)) : bool.
-Proof. make_bounds_prop bounds Expr4Op_bounds. Defined.
-(*Definition ApplyUnOp {var} (f : exprUnOp var) : exprArg var -> exprArg var
- := fun x
- => LetIn (invert_Return (unop_make_args x))
- (fun k => invert_Return (Apply length_fe5211_32 f k)).
-Definition ApplyBinOp {var} (f : exprBinOp var) : exprArg var -> exprArg var -> exprArg var
- := fun x y
- => LetIn (invert_Return (unop_make_args x))
- (fun x'
- => LetIn (invert_Return (unop_make_args y))
- (fun y'
- => invert_Return (Apply length_fe5211_32
- (Apply length_fe5211_32
- f x') y'))).
-Definition ApplyUnOpFEToWire {var} (f : exprUnOpFEToWire var) : exprArg var -> exprArgWire var
- := fun x
- => LetIn (invert_Return (unop_make_args x))
- (fun k => invert_Return (Apply length_fe5211_32 f k)).
-Definition ApplyUnOpWireToFE {var} (f : exprUnOpWireToFE var) : exprArgWire var -> exprArg var
- := fun x
- => LetIn (invert_Return (unop_wire_make_args x))
- (fun k => invert_Return (Apply (List.length wire_widths) f k)).
-Definition ApplyUnOpFEToZ {var} (f : exprUnOpFEToZ var) : exprArg var -> exprZ var
- := fun x
- => LetIn (invert_Return (unop_make_args x))
- (fun k => invert_Return (Apply length_fe5211_32 f k)).
-*)
-
-(* FIXME TODO(jgross): This is a horrible tactic. We should unify the
- various kinds of correct and boundedness, and abstract in Gallina
- rather than Ltac *)
-Ltac t_correct_and_bounded ropZ_sig Hbounds H0 H1 args :=
- let Heq := fresh "Heq" in
- let Hbounds0 := fresh "Hbounds0" in
- let Hbounds1 := fresh "Hbounds1" in
- let Hbounds2 := fresh "Hbounds2" in
- pose proof (proj2_sig ropZ_sig) as Heq;
- cbv [interp_bexpr interp_uexpr interp_uexpr_FEToWire interp_uexpr_FEToZ interp_uexpr_WireToFE interp_9_4expr
- interp_flat_type_eta interp_flat_type_eta_gen
- curry_binop_fe5211_32W curry_unop_fe5211_32W curry_unop_wire_digitsW curry_9op_fe5211_32W
- curry_binop_fe5211_32 curry_unop_fe5211_32 curry_unop_wire_digits curry_9op_fe5211_32
- uncurry_binop_fe5211_32W uncurry_unop_fe5211_32W uncurry_unop_wire_digitsW uncurry_9op_fe5211_32W
- uncurry_binop_fe5211_32 uncurry_unop_fe5211_32 uncurry_unop_wire_digits uncurry_9op_fe5211_32
- ExprBinOpT ExprUnOpFEToWireT ExprUnOpT ExprUnOpFEToZT ExprUnOpWireToFET Expr9_4OpT Expr4OpT] in *;
- cbv zeta in *;
- simpl @fe5211_32WToZ; simpl @wire_digitsWToZ;
- rewrite <- Heq; clear Heq;
- destruct Hbounds as [Heq Hbounds];
- change interp_op with (@Z.interp_op) in *;
- change interp_base_type with (@Z.interp_base_type) in *;
- change word64 with WordW.wordW in *;
- rewrite <- Heq; clear Heq;
- destruct Hbounds as [ Hbounds0 [Hbounds1 Hbounds2] ];
- pose proof (fun pf => Relations.uncurry_interp_type_rel_pointwise_proj_from_option2 WordW.to_Z pf Hbounds2 Hbounds0) as Hbounds_left;
- pose proof (fun pf => Relations.uncurry_interp_type_rel_pointwise_proj1_from_option2 Relations.related_wordW_boundsi' pf Hbounds1 Hbounds2) as Hbounds_right;
- specialize_by repeat first [ progress intros
- | progress unfold RelationClasses.Reflexive
- | reflexivity
- | assumption
- | progress destruct_head' base_type
- | progress destruct_head' BoundedWordW.BoundedWord
- | progress destruct_head' and
- | progress repeat apply conj ];
- specialize (Hbounds_left args H0);
- specialize (Hbounds_right args H0);
- cbv beta in *;
- lazymatch type of Hbounds_right with
- | match ?e with _ => _ end
- => lazymatch type of H1 with
- | match ?e' with _ => _ end
- => change e' with e in H1; destruct e eqn:?; [ | exfalso; assumption ]
- end
- end;
- repeat match goal with x := _ |- _ => subst x end;
- cbv [id
- binop_args_to_bounded unop_args_to_bounded unopWireToFE_args_to_bounded op9_args_to_bounded
- Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list
- Relations.proj_eq_rel SmartVarfMap interp_flat_type smart_interp_flat_map domain fst snd BoundedWordW.to_wordW' BoundedWordW.boundedWordToWordW BoundedWord.value Relations.related_wordW_boundsi' Relations.related'_wordW_bounds Bounds.upper Bounds.lower codomain WordW.to_Z nm_op_args_to_bounded nm_op_args_to_bounded' n_op_args_to_bounded n_op_args_to_bounded' unop_args_to_bounded' Relations.interp_flat_type_rel_pointwise Relations.interp_flat_type_rel_pointwise_gen_Prop] in Hbounds_left, Hbounds_right;
- simpl @interp_flat_type in *;
- (let v := (eval unfold WordW.interp_base_type in (WordW.interp_base_type TZ)) in
- change (WordW.interp_base_type TZ) with v in *);
- cbv beta iota zeta in *;
- lazymatch goal with
- | [ |- fe5211_32WToZ ?x = _ /\ _ ]
- => generalize dependent x; intros
- | [ |- wire_digitsWToZ ?x = _ /\ _ ]
- => generalize dependent x; intros
- | [ |- (Tuple.map fe5211_32WToZ ?x = _) /\ _ ]
- => generalize dependent x; intros
- | [ |- ((Tuple.map fe5211_32WToZ ?x = _) * _)%type ]
- => generalize dependent x; intros
- | [ |- _ = _ ]
- => exact Hbounds_left
- end;
- cbv [interp_type interp_type_gen interp_type_gen_hetero interp_flat_type WordW.interp_base_type codomain] in *;
- destruct_head' prod;
- change word64ToZ with WordW.wordWToZ in *;
- (split; [ exact Hbounds_left | ]);
- cbv [interp_flat_type] in *;
- cbv [fst snd
- Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' List.map Tuple.from_list Tuple.from_list Tuple.from_list'
- make_bound
- Datatypes.length wire_widths wire_digit_bounds PseudoMersenneBaseParams.limb_widths bounds
- binop_bounds_good unop_bounds_good unopFEToWire_bounds_good unopWireToFE_bounds_good unopFEToZ_bounds_good op9_4_bounds_good
- ExprUnOp_bounds ExprBinOp_bounds ExprUnOpFEToWire_bounds ExprUnOpFEToZ_bounds ExprUnOpWireToFE_bounds Expr9Op_bounds Expr4Op_bounds] in H1;
- destruct_head' ZBounds.bounds;
- unfold_is_bounded_in H1;
- simpl @fe5211_32WToZ; simpl @wire_digitsWToZ;
- destruct_head' and;
- Z.ltb_to_lt;
- change WordW.wordWToZ with word64ToZ in *;
- cbv [Tuple.map HList.hlist Tuple.on_tuple Tuple.from_list Tuple.from_list' Tuple.to_list Tuple.to_list' List.map HList.hlist' fst snd fe5211_32WToZ HList.hlistP HList.hlistP'];
- cbv [WordW.bit_width BitSize64.bit_width Z.of_nat Pos.of_succ_nat Pos.succ] in *;
- repeat split; unfold_is_bounded;
- Z.ltb_to_lt;
- try omega; try reflexivity.
-
-Ltac rexpr_correct :=
- let ropW' := fresh in
- let ropZ_sig := fresh in
- intros ropW' ropZ_sig;
- let wf_ropW := fresh "wf_ropW" in
- assert (wf_ropW : Wf ropW') by (subst ropW' ropZ_sig; reflect_Wf base_type_eq_semidec_is_dec op_beq_bl);
- cbv zeta; repeat apply conj;
- [ vm_compute; reflexivity
- | apply @InterpWf;
- [ | apply wf_ropW ].. ];
- auto with interp_related.
-
-Notation rword_of_Z rexprZ_sig := (proj1_sig rexprZ_sig) (only parsing).
-
-Notation compute_bounds opW bounds
- := (Interp (@ZBounds.interp_op) opW bounds)
- (only parsing).
-
-Notation rexpr_wfT e := (Wf.Wf e) (only parsing).
-
-Ltac prove_rexpr_wfT
- := reflect_Wf Equality.base_type_eq_semidec_is_dec Equality.op_beq_bl.
-
-Module Export PrettyPrinting.
- (* We add [enlargen] to force [bounds_on] to be in [Type] in 8.4 and
- 8.5/8.6. Because [Set] is special and things break if
- [bounds_on] ends up in [Set] for reasons jgross hasn't bothered
- to debug. *)
- Inductive bounds_on := overflow | in_range (lower upper : Z) | enlargen (_ : Set).
-
- Inductive result := yes | no | borked.
-
- Definition ZBounds_to_bounds_on
- := fun (t : base_type) (x : ZBounds.interp_base_type t)
- => match x with
- | Some {| Bounds.lower := l ; Bounds.upper := u |}
- => in_range l u
- | None
- => overflow
- end.
-
- Fixpoint does_it_overflow {t} : interp_flat_type (fun t : base_type => bounds_on) t -> result
- := match t return interp_flat_type _ t -> result with
- | Tbase _ => fun v => match v with
- | overflow => yes
- | in_range _ _ => no
- | enlargen _ => borked
- end
- | Unit => fun _ => no
- | Prod x y => fun v => match @does_it_overflow _ (fst v), @does_it_overflow _ (snd v) with
- | no, no => no
- | yes, no | no, yes | yes, yes => yes
- | borked, _ | _, borked => borked
- end
- end.
-
- (** This gives a slightly easier to read version of the bounds *)
- Notation compute_bounds_for_display opW bounds
- := (SmartVarfMap ZBounds_to_bounds_on (compute_bounds opW bounds)) (only parsing).
- Notation sanity_compute opW bounds
- := (does_it_overflow (SmartVarfMap ZBounds_to_bounds_on (compute_bounds opW bounds))) (only parsing).
- Notation sanity_check opW bounds
- := (eq_refl (sanity_compute opW bounds) <: no = no) (only parsing).
-End PrettyPrinting.
diff --git a/src/SpecificGen/GF5211_32Reflective/Common9_4Op.v b/src/SpecificGen/GF5211_32Reflective/Common9_4Op.v
deleted file mode 100644
index c3878caee..000000000
--- a/src/SpecificGen/GF5211_32Reflective/Common9_4Op.v
+++ /dev/null
@@ -1,102 +0,0 @@
-Require Export Crypto.SpecificGen.GF5211_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF5211_32BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Local Notation eta_and x := (let (a, b) := x in a, let (a, b) := x in b) (only parsing).
-Lemma Expr9_4Op_correct_and_bounded
- ropW op (ropZ_sig : rexpr_9_4op_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall x012345678
- (x012345678
- := (eta_fe5211_32W (fst (fst (fst (fst (fst (fst (fst (fst x012345678)))))))),
- eta_fe5211_32W (snd (fst (fst (fst (fst (fst (fst (fst x012345678)))))))),
- eta_fe5211_32W (snd (fst (fst (fst (fst (fst (fst x012345678))))))),
- eta_fe5211_32W (snd (fst (fst (fst (fst (fst x012345678)))))),
- eta_fe5211_32W (snd (fst (fst (fst (fst x012345678))))),
- eta_fe5211_32W (snd (fst (fst (fst x012345678)))),
- eta_fe5211_32W (snd (fst (fst x012345678))),
- eta_fe5211_32W (snd (fst x012345678)),
- eta_fe5211_32W (snd x012345678)))
- (Hx012345678
- : is_bounded (fe5211_32WToZ (fst (fst (fst (fst (fst (fst (fst (fst x012345678))))))))) = true
- /\ is_bounded (fe5211_32WToZ (snd (fst (fst (fst (fst (fst (fst (fst x012345678))))))))) = true
- /\ is_bounded (fe5211_32WToZ (snd (fst (fst (fst (fst (fst (fst x012345678)))))))) = true
- /\ is_bounded (fe5211_32WToZ (snd (fst (fst (fst (fst (fst x012345678))))))) = true
- /\ is_bounded (fe5211_32WToZ (snd (fst (fst (fst (fst x012345678)))))) = true
- /\ is_bounded (fe5211_32WToZ (snd (fst (fst (fst x012345678))))) = true
- /\ is_bounded (fe5211_32WToZ (snd (fst (fst x012345678)))) = true
- /\ is_bounded (fe5211_32WToZ (snd (fst x012345678))) = true
- /\ is_bounded (fe5211_32WToZ (snd x012345678)) = true),
- let (Hx0, Hx12345678) := (eta_and Hx012345678) in
- let (Hx1, Hx2345678) := (eta_and Hx12345678) in
- let (Hx2, Hx345678) := (eta_and Hx2345678) in
- let (Hx3, Hx45678) := (eta_and Hx345678) in
- let (Hx4, Hx5678) := (eta_and Hx45678) in
- let (Hx5, Hx678) := (eta_and Hx5678) in
- let (Hx6, Hx78) := (eta_and Hx678) in
- let (Hx7, Hx8) := (eta_and Hx78) in
- let args := op9_args_to_bounded x012345678 Hx0 Hx1 Hx2 Hx3 Hx4 Hx5 Hx6 Hx7 Hx8 in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall x012345678
- (x012345678
- := (eta_fe5211_32W (fst (fst (fst (fst (fst (fst (fst (fst x012345678)))))))),
- eta_fe5211_32W (snd (fst (fst (fst (fst (fst (fst (fst x012345678)))))))),
- eta_fe5211_32W (snd (fst (fst (fst (fst (fst (fst x012345678))))))),
- eta_fe5211_32W (snd (fst (fst (fst (fst (fst x012345678)))))),
- eta_fe5211_32W (snd (fst (fst (fst (fst x012345678))))),
- eta_fe5211_32W (snd (fst (fst (fst x012345678)))),
- eta_fe5211_32W (snd (fst (fst x012345678))),
- eta_fe5211_32W (snd (fst x012345678)),
- eta_fe5211_32W (snd x012345678)))
- (Hx012345678
- : is_bounded (fe5211_32WToZ (fst (fst (fst (fst (fst (fst (fst (fst x012345678))))))))) = true
- /\ is_bounded (fe5211_32WToZ (snd (fst (fst (fst (fst (fst (fst (fst x012345678))))))))) = true
- /\ is_bounded (fe5211_32WToZ (snd (fst (fst (fst (fst (fst (fst x012345678)))))))) = true
- /\ is_bounded (fe5211_32WToZ (snd (fst (fst (fst (fst (fst x012345678))))))) = true
- /\ is_bounded (fe5211_32WToZ (snd (fst (fst (fst (fst x012345678)))))) = true
- /\ is_bounded (fe5211_32WToZ (snd (fst (fst (fst x012345678))))) = true
- /\ is_bounded (fe5211_32WToZ (snd (fst (fst x012345678)))) = true
- /\ is_bounded (fe5211_32WToZ (snd (fst x012345678))) = true
- /\ is_bounded (fe5211_32WToZ (snd x012345678)) = true),
- let (Hx0, Hx12345678) := (eta_and Hx012345678) in
- let (Hx1, Hx2345678) := (eta_and Hx12345678) in
- let (Hx2, Hx345678) := (eta_and Hx2345678) in
- let (Hx3, Hx45678) := (eta_and Hx345678) in
- let (Hx4, Hx5678) := (eta_and Hx45678) in
- let (Hx5, Hx678) := (eta_and Hx5678) in
- let (Hx6, Hx78) := (eta_and Hx678) in
- let (Hx7, Hx8) := (eta_and Hx78) in
- let args := op9_args_to_bounded x012345678 Hx0 Hx1 Hx2 Hx3 Hx4 Hx5 Hx6 Hx7 Hx8 in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => op9_4_bounds_good bounds = true
- | None => False
- end)
- : op9_4_correct_and_bounded ropW op.
-Proof.
- intros xs Hxs.
- pose xs as xs'.
- compute in xs.
- destruct_head' prod.
- cbv [Tuple.map Tuple.on_tuple Tuple.to_list Tuple.to_list' fst snd List.map Tuple.from_list Tuple.from_list' HList.hlistP HList.hlistP'] in Hxs.
- pose Hxs as Hxs'.
- destruct Hxs as [ [ [ [ [ [ [ [ Hx0 Hx1 ] Hx2 ] Hx3 ] Hx4 ] Hx5 ] Hx6 ] Hx7 ] Hx8 ].
- specialize (H0 xs'
- (conj Hx0 (conj Hx1 (conj Hx2 (conj Hx3 (conj Hx4 (conj Hx5 (conj Hx6 (conj Hx7 Hx8))))))))).
- specialize (H1 xs'
- (conj Hx0 (conj Hx1 (conj Hx2 (conj Hx3 (conj Hx4 (conj Hx5 (conj Hx6 (conj Hx7 Hx8))))))))).
- Time let args := constr:(op9_args_to_bounded xs' Hx0 Hx1 Hx2 Hx3 Hx4 Hx5 Hx6 Hx7 Hx8) in
- admit; t_correct_and_bounded ropZ_sig Hbounds H0 H1 args. (* On 8.6beta1, with ~2 GB RAM, Finished transaction in 46.56 secs (46.372u,0.14s) (successful) *)
-Admitted. (*Time Qed. (* On 8.6beta1, with ~4.3 GB RAM, Finished transaction in 67.652 secs (66.932u,0.64s) (successful) *)*)
diff --git a/src/SpecificGen/GF5211_32Reflective/CommonBinOp.v b/src/SpecificGen/GF5211_32Reflective/CommonBinOp.v
deleted file mode 100644
index f54be4d6a..000000000
--- a/src/SpecificGen/GF5211_32Reflective/CommonBinOp.v
+++ /dev/null
@@ -1,50 +0,0 @@
-Require Export Crypto.SpecificGen.GF5211_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF5211_32BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Lemma ExprBinOp_correct_and_bounded
- ropW op (ropZ_sig : rexpr_binop_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall xy
- (xy := (eta_fe5211_32W (fst xy), eta_fe5211_32W (snd xy)))
- (Hxy : is_bounded (fe5211_32WToZ (fst xy)) = true
- /\ is_bounded (fe5211_32WToZ (snd xy)) = true),
- let Hx := let (Hx, Hy) := Hxy in Hx in
- let Hy := let (Hx, Hy) := Hxy in Hy in
- let args := binop_args_to_bounded xy Hx Hy in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall xy
- (xy := (eta_fe5211_32W (fst xy), eta_fe5211_32W (snd xy)))
- (Hxy : is_bounded (fe5211_32WToZ (fst xy)) = true
- /\ is_bounded (fe5211_32WToZ (snd xy)) = true),
- let Hx := let (Hx, Hy) := Hxy in Hx in
- let Hy := let (Hx, Hy) := Hxy in Hy in
- let args := binop_args_to_bounded (fst xy, snd xy) Hx Hy in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => binop_bounds_good bounds = true
- | None => False
- end)
- : binop_correct_and_bounded ropW op.
-Proof.
- intros xy HxHy.
- pose xy as xy'.
- compute in xy; destruct_head' prod.
- specialize (H0 xy' HxHy).
- specialize (H1 xy' HxHy).
- destruct HxHy as [Hx Hy].
- let args := constr:(binop_args_to_bounded xy' Hx Hy) in
- t_correct_and_bounded ropZ_sig Hbounds H0 H1 args.
-Qed.
diff --git a/src/SpecificGen/GF5211_32Reflective/CommonUnOp.v b/src/SpecificGen/GF5211_32Reflective/CommonUnOp.v
deleted file mode 100644
index c4fa848f6..000000000
--- a/src/SpecificGen/GF5211_32Reflective/CommonUnOp.v
+++ /dev/null
@@ -1,43 +0,0 @@
-Require Export Crypto.SpecificGen.GF5211_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF5211_32BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Lemma ExprUnOp_correct_and_bounded
- ropW op (ropZ_sig : rexpr_unop_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall x
- (x := eta_fe5211_32W x)
- (Hx : is_bounded (fe5211_32WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall x
- (x := eta_fe5211_32W x)
- (Hx : is_bounded (fe5211_32WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => unop_bounds_good bounds = true
- | None => False
- end)
- : unop_correct_and_bounded ropW op.
-Proof.
- intros x Hx.
- pose x as x'.
- hnf in x; destruct_head' prod.
- specialize (H0 x' Hx).
- specialize (H1 x' Hx).
- let args := constr:(unop_args_to_bounded x' Hx) in
- t_correct_and_bounded ropZ_sig Hbounds H0 H1 args.
-Qed.
diff --git a/src/SpecificGen/GF5211_32Reflective/CommonUnOpFEToWire.v b/src/SpecificGen/GF5211_32Reflective/CommonUnOpFEToWire.v
deleted file mode 100644
index 433609622..000000000
--- a/src/SpecificGen/GF5211_32Reflective/CommonUnOpFEToWire.v
+++ /dev/null
@@ -1,43 +0,0 @@
-Require Export Crypto.SpecificGen.GF5211_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF5211_32BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Lemma ExprUnOpFEToWire_correct_and_bounded
- ropW op (ropZ_sig : rexpr_unop_FEToWire_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall x
- (x := eta_fe5211_32W x)
- (Hx : is_bounded (fe5211_32WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall x
- (x := eta_fe5211_32W x)
- (Hx : is_bounded (fe5211_32WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => unopFEToWire_bounds_good bounds = true
- | None => False
- end)
- : unop_FEToWire_correct_and_bounded ropW op.
-Proof.
- intros x Hx.
- pose x as x'.
- hnf in x; destruct_head' prod.
- specialize (H0 x' Hx).
- specialize (H1 x' Hx).
- let args := constr:(unop_args_to_bounded x' Hx) in
- t_correct_and_bounded ropZ_sig Hbounds H0 H1 args.
-Qed.
diff --git a/src/SpecificGen/GF5211_32Reflective/CommonUnOpFEToZ.v b/src/SpecificGen/GF5211_32Reflective/CommonUnOpFEToZ.v
deleted file mode 100644
index 6b48722c2..000000000
--- a/src/SpecificGen/GF5211_32Reflective/CommonUnOpFEToZ.v
+++ /dev/null
@@ -1,43 +0,0 @@
-Require Export Crypto.SpecificGen.GF5211_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF5211_32BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Lemma ExprUnOpFEToZ_correct_and_bounded
- ropW op (ropZ_sig : rexpr_unop_FEToZ_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall x
- (x := eta_fe5211_32W x)
- (Hx : is_bounded (fe5211_32WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall x
- (x := eta_fe5211_32W x)
- (Hx : is_bounded (fe5211_32WToZ x) = true),
- let args := unop_args_to_bounded x Hx in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => unopFEToZ_bounds_good bounds = true
- | None => False
- end)
- : unop_FEToZ_correct ropW op.
-Proof.
- intros x Hx.
- pose x as x'.
- hnf in x; destruct_head' prod.
- specialize (H0 x' Hx).
- specialize (H1 x' Hx).
- let args := constr:(unop_args_to_bounded x' Hx) in
- t_correct_and_bounded ropZ_sig Hbounds H0 H1 args.
-Qed.
diff --git a/src/SpecificGen/GF5211_32Reflective/CommonUnOpWireToFE.v b/src/SpecificGen/GF5211_32Reflective/CommonUnOpWireToFE.v
deleted file mode 100644
index 324729d2c..000000000
--- a/src/SpecificGen/GF5211_32Reflective/CommonUnOpWireToFE.v
+++ /dev/null
@@ -1,43 +0,0 @@
-Require Export Crypto.SpecificGen.GF5211_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF5211_32BoundedCommon.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Util.Tactics.
-
-Local Opaque Interp.
-Lemma ExprUnOpWireToFE_correct_and_bounded
- ropW op (ropZ_sig : rexpr_unop_WireToFE_sig op)
- (Hbounds : correct_and_bounded_genT ropW ropZ_sig)
- (H0 : forall x
- (x := eta_wire_digitsW x)
- (Hx : wire_digits_is_bounded (wire_digitsWToZ x) = true),
- let args := unopWireToFE_args_to_bounded x Hx in
- match LiftOption.of'
- (Interp (@BoundedWordW.interp_op) ropW
- (LiftOption.to' (Some args)))
- with
- | Some _ => True
- | None => False
- end)
- (H1 : forall x
- (x := eta_wire_digitsW x)
- (Hx : wire_digits_is_bounded (wire_digitsWToZ x) = true),
- let args := unopWireToFE_args_to_bounded x Hx in
- let x' := SmartVarfMap (fun _ : base_type => BoundedWordW.BoundedWordToBounds) args in
- match LiftOption.of'
- (Interp (@ZBounds.interp_op) ropW (LiftOption.to' (Some x')))
- with
- | Some bounds => unopWireToFE_bounds_good bounds = true
- | None => False
- end)
- : unop_WireToFE_correct_and_bounded ropW op.
-Proof.
- intros x Hx.
- pose x as x'.
- hnf in x; destruct_head' prod.
- specialize (H0 x' Hx).
- specialize (H1 x' Hx).
- let args := constr:(unopWireToFE_args_to_bounded x' Hx) in
- t_correct_and_bounded ropZ_sig Hbounds H0 H1 args.
-Qed.
diff --git a/src/SpecificGen/GF5211_32Reflective/Reified.v b/src/SpecificGen/GF5211_32Reflective/Reified.v
deleted file mode 100644
index a783188c9..000000000
--- a/src/SpecificGen/GF5211_32Reflective/Reified.v
+++ /dev/null
@@ -1,13 +0,0 @@
-(** We split the reification up into separate files, one operation per
- file, so that it can run in parallel. *)
-Require Export Crypto.SpecificGen.GF5211_32Reflective.Reified.Add.
-Require Export Crypto.SpecificGen.GF5211_32Reflective.Reified.CarryAdd.
-Require Export Crypto.SpecificGen.GF5211_32Reflective.Reified.Sub.
-Require Export Crypto.SpecificGen.GF5211_32Reflective.Reified.CarrySub.
-Require Export Crypto.SpecificGen.GF5211_32Reflective.Reified.Mul.
-Require Export Crypto.SpecificGen.GF5211_32Reflective.Reified.Opp.
-Require Export Crypto.SpecificGen.GF5211_32Reflective.Reified.CarryOpp.
-Require Export Crypto.SpecificGen.GF5211_32Reflective.Reified.PreFreeze.
-Require Export Crypto.SpecificGen.GF5211_32Reflective.Reified.GeModulus.
-Require Export Crypto.SpecificGen.GF5211_32Reflective.Reified.Pack.
-Require Export Crypto.SpecificGen.GF5211_32Reflective.Reified.Unpack.
diff --git a/src/SpecificGen/GF5211_32Reflective/Reified/Add.v b/src/SpecificGen/GF5211_32Reflective/Reified/Add.v
deleted file mode 100644
index 5ddd88689..000000000
--- a/src/SpecificGen/GF5211_32Reflective/Reified/Add.v
+++ /dev/null
@@ -1,12 +0,0 @@
-Require Import Crypto.SpecificGen.GF5211_32Reflective.CommonBinOp.
-
-Definition raddZ_sig : rexpr_binop_sig add. Proof. reify_sig. Defined.
-Definition raddW := Eval vm_compute in rword_of_Z raddZ_sig.
-Lemma raddW_correct_and_bounded_gen : correct_and_bounded_genT raddW raddZ_sig.
-Proof. rexpr_correct. Qed.
-Definition radd_output_bounds := Eval vm_compute in compute_bounds raddW ExprBinOp_bounds.
-
-Local Open Scope string_scope.
-Compute ("Add", compute_bounds_for_display raddW ExprBinOp_bounds).
-Compute ("Add overflows? ", sanity_compute raddW ExprBinOp_bounds).
-Compute ("Add overflows (error if it does)? ", sanity_check raddW ExprBinOp_bounds).
diff --git a/src/SpecificGen/GF5211_32Reflective/Reified/AddCoordinates.v b/src/SpecificGen/GF5211_32Reflective/Reified/AddCoordinates.v
deleted file mode 100644
index e85a6f2cd..000000000
--- a/src/SpecificGen/GF5211_32Reflective/Reified/AddCoordinates.v
+++ /dev/null
@@ -1,183 +0,0 @@
-Require Export Coq.ZArith.ZArith.
-Require Export Coq.Strings.String.
-Require Export Crypto.SpecificGen.GF5211_32.
-Require Export Crypto.SpecificGen.GF5211_32BoundedCommon.
-Require Import Crypto.Reflection.Reify.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Reflection.ExprInversion.
-Require Import Crypto.Reflection.Relations.
-Require Import Crypto.Reflection.Linearize.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Crypto.Reflection.Z.Interpretations64.Relations.
-Require Import Crypto.Reflection.Z.Interpretations64.RelationsCombinations.
-Require Import Crypto.Reflection.Z.Reify.
-Require Export Crypto.Reflection.Z.Syntax.
-Require Import Crypto.Reflection.InterpWfRel.
-Require Import Crypto.Reflection.LinearizeInterp.
-Require Import Crypto.Reflection.WfReflective.
-Require Import Crypto.Reflection.Eta.
-Require Import Crypto.Reflection.EtaInterp.
-Require Import Crypto.CompleteEdwardsCurve.ExtendedCoordinates.
-Require Import Crypto.SpecificGen.GF5211_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF5211_32Reflective.Reified.Add.
-Require Import Crypto.SpecificGen.GF5211_32Reflective.Reified.Sub.
-Require Import Crypto.SpecificGen.GF5211_32Reflective.Reified.Mul.
-Require Import Crypto.SpecificGen.GF5211_32Reflective.Common9_4Op.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.HList.
-Require Import Crypto.Util.Tower.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.Notations.
-Require Import Bedrock.Word.
-
-Definition radd_coordinatesZ' var twice_d P1 P2
- := @Extended.add_coordinates_gen
- _
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig raddZ_sig var)))
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig rsubZ_sig var)))
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig rmulZ_sig var)))
- twice_d _
- (fun x y z w => (x, y, z, w)%expr)
- (fun v f => LetIn v
- (fun k => f (SmartVarf k)))
- P1 P2.
-
-Local Notation eta x := (fst x, snd x).
-
-Definition radd_coordinatesZ'' : Syntax.Expr _ _ _
- := Linearize
- (ExprEta
- (fun var
- => Abs (fun twice_d_P1_P2 : interp_flat_type _ (_ * ((_ * _ * _ * _) * (_ * _ * _ * _)))
- => let '(twice_d, ((P10, P11, P12, P13), (P20, P21, P22, P23)))
- := twice_d_P1_P2 in
- radd_coordinatesZ'
- var (SmartVarf twice_d)
- (SmartVarf P10, SmartVarf P11, SmartVarf P12, SmartVarf P13)
- (SmartVarf P20, SmartVarf P21, SmartVarf P22, SmartVarf P23)))).
-
-Definition add_coordinates
- := fun twice_d P10 P11 P12 P13 P20 P21 P22 P23
- => @Extended.add_coordinates
- _ add sub mul
- twice_d (P10, P11, P12, P13) (P20, P21, P22, P23).
-
-Definition uncurried_add_coordinates
- := fun twice_d_P1_P2
- => let twice_d := fst twice_d_P1_P2 in
- let (P1, P2) := eta (snd twice_d_P1_P2) in
- @Extended.add_coordinates
- _ add sub mul
- twice_d P1 P2.
-
-Local Notation rexpr_sigPf T uncurried_op rexprZ x :=
- (Interp interp_op (t:=T) rexprZ x = uncurried_op x)
- (only parsing).
-Local Notation rexpr_sigP T uncurried_op rexprZ :=
- (forall x, rexpr_sigPf T uncurried_op rexprZ x)
- (only parsing).
-Local Notation rexpr_sig T uncurried_op :=
- { rexprZ | rexpr_sigP T uncurried_op rexprZ }
- (only parsing).
-
-Local Ltac fold_interpf' :=
- let k := (eval unfold interpf, interpf_step in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- change k with k'; clearbody k'; subst k'.
-
-Local Ltac fold_interpf :=
- let k := (eval unfold interpf in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- change k with k'; clearbody k'; subst k';
- fold_interpf'.
-
-Local Ltac repeat_step_interpf :=
- let k := (eval unfold interpf in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- repeat (unfold k'; change k with k'; unfold interpf_step);
- clearbody k'; subst k'.
-
-Lemma radd_coordinatesZ_sigP' : rexpr_sigP _ uncurried_add_coordinates radd_coordinatesZ''.
-Proof.
- cbv [radd_coordinatesZ''].
- intro x; rewrite InterpLinearize, InterpExprEta.
- cbv [domain interp_flat_type] in x.
- destruct x as [twice_d [ [ [ [P10_ P11_] P12_] P13_] [ [ [P20_ P21_] P22_] P23_] ] ].
- repeat match goal with
- | [ H : prod _ _ |- _ ] => let H0 := fresh H in let H1 := fresh H in destruct H as [H0 H1]
- end.
- cbv [invert_Abs domain codomain Interp interp SmartVarf smart_interp_flat_map fst snd].
- cbv [radd_coordinatesZ' add_coordinates Extended.add_coordinates_gen uncurried_add_coordinates SmartVarf smart_interp_flat_map]; simpl @fst; simpl @snd.
- repeat match goal with
- | [ |- appcontext[@proj1_sig ?A ?B ?v] ]
- => let k := fresh "f" in
- let k' := fresh "f" in
- let H := fresh in
- set (k := v);
- set (k' := @proj1_sig A B k);
- pose proof (proj2_sig k) as H;
- change (proj1_sig k) with k' in H;
- clearbody k'; clear k;
- cbv beta in *
- end.
- cbv [Interp Curry.curry2] in *.
- unfold interpf, interpf_step; fold_interpf.
- cbv beta iota delta [Extended.add_coordinates interp_flat_type interp_base_type GF5211_32.fe5211_32].
- Time
- abstract (
- repeat match goal with
- | [ |- (dlet x := ?y in @?z x) = (let x' := ?y' in @?z' x') ]
- => refine ((fun pf0 pf1 => @Proper_Let_In_nd_changebody _ _ Logic.eq _ y y' pf0 z z' pf1)
- (_ : y = y')
- (_ : forall x, z x = z' x));
- cbv beta; intros;
- [ cbv [Let_In] | ]
- end;
- repeat match goal with
- | _ => rewrite !interpf_invert_Abs
- | _ => rewrite_hyp !*
- | [ |- ?x = ?x ] => reflexivity
- | _ => rewrite <- !surjective_pairing
- end
- ).
-Time Defined.
-Lemma radd_coordinatesZ_sigP : rexpr_sigP _ uncurried_add_coordinates radd_coordinatesZ''.
-Proof.
- exact radd_coordinatesZ_sigP'.
-Qed.
-Definition radd_coordinatesZ_sig
- := exist (fun v => rexpr_sigP _ _ v) radd_coordinatesZ'' radd_coordinatesZ_sigP.
-
-Definition radd_coordinates_input_bounds
- := (ExprUnOp_bounds, ((ExprUnOp_bounds, ExprUnOp_bounds, ExprUnOp_bounds, ExprUnOp_bounds),
- (ExprUnOp_bounds, ExprUnOp_bounds, ExprUnOp_bounds, ExprUnOp_bounds))).
-
-Time Definition radd_coordinatesW := Eval vm_compute in rword_of_Z radd_coordinatesZ_sig.
-Lemma radd_coordinatesW_correct_and_bounded_gen : correct_and_bounded_genT radd_coordinatesW radd_coordinatesZ_sig.
-Proof. Time rexpr_correct. Time Qed.
-Definition radd_coordinates_output_bounds := Eval vm_compute in compute_bounds radd_coordinatesW radd_coordinates_input_bounds.
-
-Local Obligation Tactic := intros; vm_compute; constructor.
-
-(*
-Program Definition radd_coordinatesW_correct_and_bounded
- := Expr9_4Op_correct_and_bounded
- radd_coordinatesW uncurried_add_coordinates radd_coordinatesZ_sig radd_coordinatesW_correct_and_bounded_gen
- _ _.
- *)
-
-Local Open Scope string_scope.
-Compute ("Add_Coordinates", compute_bounds_for_display radd_coordinatesW radd_coordinates_input_bounds).
-Compute ("Add_Coordinates overflows? ", sanity_compute radd_coordinatesW radd_coordinates_input_bounds).
-Compute ("Add_Coordinates overflows (error if it does)? ", sanity_check radd_coordinatesW radd_coordinates_input_bounds).
diff --git a/src/SpecificGen/GF5211_32Reflective/Reified/AddDisplay.log b/src/SpecificGen/GF5211_32Reflective/Reified/AddDisplay.log
deleted file mode 100644
index 27a848f71..000000000
--- a/src/SpecificGen/GF5211_32Reflective/Reified/AddDisplay.log
+++ /dev/null
@@ -1,75 +0,0 @@
-raddW =
-fun var : Syntax.base_type -> Type =>
-λ
-x x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20
- x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31 x32 x33 x34 x35 x36 x37
- x38 : var Syntax.TZ,
-Tbase Syntax.TZ x39 = x + x19;
-Tbase Syntax.TZ x40 = x0 + x20;
-Tbase Syntax.TZ x41 = x1 + x21;
-Tbase Syntax.TZ x42 = x2 + x22;
-Tbase Syntax.TZ x43 = x3 + x23;
-Tbase Syntax.TZ x44 = x4 + x24;
-Tbase Syntax.TZ x45 = x5 + x25;
-Tbase Syntax.TZ x46 = x6 + x26;
-Tbase Syntax.TZ x47 = x7 + x27;
-Tbase Syntax.TZ x48 = x8 + x28;
-Tbase Syntax.TZ x49 = x9 + x29;
-Tbase Syntax.TZ x50 = x10 + x30;
-Tbase Syntax.TZ x51 = x11 + x31;
-Tbase Syntax.TZ x52 = x12 + x32;
-Tbase Syntax.TZ x53 = x13 + x33;
-Tbase Syntax.TZ x54 = x14 + x34;
-Tbase Syntax.TZ x55 = x15 + x35;
-Tbase Syntax.TZ x56 = x16 + x36;
-Tbase Syntax.TZ x57 = x17 + x37;
-Tbase Syntax.TZ x58 = x18 + x38;
-(Return x39, Return x40, Return x41, Return x42, Return x43,
-Return x44, Return x45, Return x46, Return x47, Return x48,
-Return x49, Return x50, Return x51, Return x52, Return x53,
-Return x54, Return x55, Return x56, Return x57, Return x58)
- : forall var : Syntax.base_type -> Type,
- expr Syntax.base_type Syntax.op
- (Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- ... * ... * Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF5211_32Reflective/Reified/AddDisplay.v b/src/SpecificGen/GF5211_32Reflective/Reified/AddDisplay.v
deleted file mode 100644
index 5ecbc061e..000000000
--- a/src/SpecificGen/GF5211_32Reflective/Reified/AddDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF5211_32Reflective.Reified.Add.
-Require Export Crypto.Reflection.Z.CNotations.
-
-Print raddW.
diff --git a/src/SpecificGen/GF5211_32Reflective/Reified/AddJavaDisplay.log b/src/SpecificGen/GF5211_32Reflective/Reified/AddJavaDisplay.log
deleted file mode 100644
index 27a848f71..000000000
--- a/src/SpecificGen/GF5211_32Reflective/Reified/AddJavaDisplay.log
+++ /dev/null
@@ -1,75 +0,0 @@
-raddW =
-fun var : Syntax.base_type -> Type =>
-λ
-x x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20
- x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31 x32 x33 x34 x35 x36 x37
- x38 : var Syntax.TZ,
-Tbase Syntax.TZ x39 = x + x19;
-Tbase Syntax.TZ x40 = x0 + x20;
-Tbase Syntax.TZ x41 = x1 + x21;
-Tbase Syntax.TZ x42 = x2 + x22;
-Tbase Syntax.TZ x43 = x3 + x23;
-Tbase Syntax.TZ x44 = x4 + x24;
-Tbase Syntax.TZ x45 = x5 + x25;
-Tbase Syntax.TZ x46 = x6 + x26;
-Tbase Syntax.TZ x47 = x7 + x27;
-Tbase Syntax.TZ x48 = x8 + x28;
-Tbase Syntax.TZ x49 = x9 + x29;
-Tbase Syntax.TZ x50 = x10 + x30;
-Tbase Syntax.TZ x51 = x11 + x31;
-Tbase Syntax.TZ x52 = x12 + x32;
-Tbase Syntax.TZ x53 = x13 + x33;
-Tbase Syntax.TZ x54 = x14 + x34;
-Tbase Syntax.TZ x55 = x15 + x35;
-Tbase Syntax.TZ x56 = x16 + x36;
-Tbase Syntax.TZ x57 = x17 + x37;
-Tbase Syntax.TZ x58 = x18 + x38;
-(Return x39, Return x40, Return x41, Return x42, Return x43,
-Return x44, Return x45, Return x46, Return x47, Return x48,
-Return x49, Return x50, Return x51, Return x52, Return x53,
-Return x54, Return x55, Return x56, Return x57, Return x58)
- : forall var : Syntax.base_type -> Type,
- expr Syntax.base_type Syntax.op
- (Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- ... * ... * Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF5211_32Reflective/Reified/AddJavaDisplay.v b/src/SpecificGen/GF5211_32Reflective/Reified/AddJavaDisplay.v
deleted file mode 100644
index e01c1dbfb..000000000
--- a/src/SpecificGen/GF5211_32Reflective/Reified/AddJavaDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF5211_32Reflective.Reified.Add.
-Require Export Crypto.Reflection.Z.JavaNotations.
-
-Print raddW.
diff --git a/src/SpecificGen/GF5211_32Reflective/Reified/CarryAdd.v b/src/SpecificGen/GF5211_32Reflective/Reified/CarryAdd.v
deleted file mode 100644
index 3b17ad60c..000000000
--- a/src/SpecificGen/GF5211_32Reflective/Reified/CarryAdd.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF5211_32Reflective.CommonBinOp.
-
-Definition rcarry_addZ_sig : rexpr_binop_sig carry_add. Proof. reify_sig. Defined.
-Definition rcarry_addW := Eval vm_compute in rword_of_Z rcarry_addZ_sig.
-Lemma rcarry_addW_correct_and_bounded_gen : correct_and_bounded_genT rcarry_addW rcarry_addZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rcarry_add_output_bounds := Eval vm_compute in compute_bounds rcarry_addW ExprBinOp_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rcarry_addW_correct_and_bounded
- := ExprBinOp_correct_and_bounded
- rcarry_addW carry_add rcarry_addZ_sig rcarry_addW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Carry_Add", compute_bounds_for_display rcarry_addW ExprBinOp_bounds).
-Compute ("Carry_Add overflows? ", sanity_compute rcarry_addW ExprBinOp_bounds).
-Compute ("Carry_Add overflows (error if it does)? ", sanity_check rcarry_addW ExprBinOp_bounds).
diff --git a/src/SpecificGen/GF5211_32Reflective/Reified/CarryOpp.v b/src/SpecificGen/GF5211_32Reflective/Reified/CarryOpp.v
deleted file mode 100644
index faf4f7533..000000000
--- a/src/SpecificGen/GF5211_32Reflective/Reified/CarryOpp.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF5211_32Reflective.CommonUnOp.
-
-Definition rcarry_oppZ_sig : rexpr_unop_sig carry_opp. Proof. reify_sig. Defined.
-Definition rcarry_oppW := Eval vm_compute in rword_of_Z rcarry_oppZ_sig.
-Lemma rcarry_oppW_correct_and_bounded_gen : correct_and_bounded_genT rcarry_oppW rcarry_oppZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rcarry_opp_output_bounds := Eval vm_compute in compute_bounds rcarry_oppW ExprUnOp_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rcarry_oppW_correct_and_bounded
- := ExprUnOp_correct_and_bounded
- rcarry_oppW carry_opp rcarry_oppZ_sig rcarry_oppW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Carry_Opp", compute_bounds_for_display rcarry_oppW ExprUnOp_bounds).
-Compute ("Carry_Opp overflows? ", sanity_compute rcarry_oppW ExprUnOp_bounds).
-Compute ("Carry_Opp overflows (error if it does)? ", sanity_check rcarry_oppW ExprUnOp_bounds).
diff --git a/src/SpecificGen/GF5211_32Reflective/Reified/CarrySub.v b/src/SpecificGen/GF5211_32Reflective/Reified/CarrySub.v
deleted file mode 100644
index ad75f4530..000000000
--- a/src/SpecificGen/GF5211_32Reflective/Reified/CarrySub.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF5211_32Reflective.CommonBinOp.
-
-Definition rcarry_subZ_sig : rexpr_binop_sig carry_sub. Proof. reify_sig. Defined.
-Definition rcarry_subW := Eval vm_compute in rword_of_Z rcarry_subZ_sig.
-Lemma rcarry_subW_correct_and_bounded_gen : correct_and_bounded_genT rcarry_subW rcarry_subZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rcarry_sub_output_bounds := Eval vm_compute in compute_bounds rcarry_subW ExprBinOp_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rcarry_subW_correct_and_bounded
- := ExprBinOp_correct_and_bounded
- rcarry_subW carry_sub rcarry_subZ_sig rcarry_subW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Carry_Sub", compute_bounds_for_display rcarry_subW ExprBinOp_bounds).
-Compute ("Carry_Sub overflows? ", sanity_compute rcarry_subW ExprBinOp_bounds).
-Compute ("Carry_Sub overflows (error if it does)? ", sanity_check rcarry_subW ExprBinOp_bounds).
diff --git a/src/SpecificGen/GF5211_32Reflective/Reified/GeModulus.v b/src/SpecificGen/GF5211_32Reflective/Reified/GeModulus.v
deleted file mode 100644
index 68b630622..000000000
--- a/src/SpecificGen/GF5211_32Reflective/Reified/GeModulus.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF5211_32Reflective.CommonUnOpFEToZ.
-
-Definition rge_modulusZ_sig : rexpr_unop_FEToZ_sig ge_modulus. Proof. reify_sig. Defined.
-Definition rge_modulusW := Eval vm_compute in rword_of_Z rge_modulusZ_sig.
-Lemma rge_modulusW_correct_and_bounded_gen : correct_and_bounded_genT rge_modulusW rge_modulusZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rge_modulus_output_bounds := Eval vm_compute in compute_bounds rge_modulusW ExprUnOpFEToZ_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rge_modulusW_correct_and_bounded
- := ExprUnOpFEToZ_correct_and_bounded
- rge_modulusW ge_modulus rge_modulusZ_sig rge_modulusW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Ge_Modulus", compute_bounds_for_display rge_modulusW ExprUnOpFEToZ_bounds).
-Compute ("Ge_Modulus overflows? ", sanity_compute rge_modulusW ExprUnOpFEToZ_bounds).
-Compute ("Ge_Modulus overflows (error if it does)? ", sanity_check rge_modulusW ExprUnOpFEToZ_bounds).
diff --git a/src/SpecificGen/GF5211_32Reflective/Reified/LadderStep.v b/src/SpecificGen/GF5211_32Reflective/Reified/LadderStep.v
deleted file mode 100644
index 4e7a5f9b3..000000000
--- a/src/SpecificGen/GF5211_32Reflective/Reified/LadderStep.v
+++ /dev/null
@@ -1,189 +0,0 @@
-Require Export Coq.ZArith.ZArith.
-Require Export Coq.Strings.String.
-Require Export Crypto.SpecificGen.GF5211_32.
-Require Export Crypto.SpecificGen.GF5211_32BoundedCommon.
-Require Import Crypto.Reflection.Reify.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.SmartMap.
-Require Import Crypto.Reflection.Relations.
-Require Import Crypto.Reflection.ExprInversion.
-Require Import Crypto.Reflection.Linearize.
-Require Import Crypto.Reflection.Eta.
-Require Import Crypto.Reflection.EtaInterp.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Crypto.Reflection.Z.Interpretations64.Relations.
-Require Import Crypto.Reflection.Z.Interpretations64.RelationsCombinations.
-Require Import Crypto.Reflection.Z.Reify.
-Require Export Crypto.Reflection.Z.Syntax.
-Require Import Crypto.Reflection.InterpWfRel.
-Require Import Crypto.Reflection.LinearizeInterp.
-Require Import Crypto.Reflection.WfReflective.
-Require Import Crypto.Spec.MxDH.
-Require Import Crypto.SpecificGen.GF5211_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF5211_32Reflective.Reified.Add.
-Require Import Crypto.SpecificGen.GF5211_32Reflective.Reified.Sub.
-Require Import Crypto.SpecificGen.GF5211_32Reflective.Reified.Mul.
-Require Import Crypto.SpecificGen.GF5211_32Reflective.Common9_4Op.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.HList.
-Require Import Crypto.Util.Tower.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.Notations.
-Require Import Bedrock.Word.
-
-Definition rladderstepZ' var (T:=_) (a24 x0 : T) P1 P2
- := @MxDH.ladderstep_gen
- _
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig raddZ_sig var)))
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig rsubZ_sig var)))
- (fun x y => LetIn (Pair x y) (invert_Abs (proj1_sig rmulZ_sig var)))
- a24
- _
- (fun x y z w => (x, y, z, w)%expr)
- (fun v f => LetIn v
- (fun k => f (SmartVarf k)))
- x0
- P1 P2.
-
-Definition rladderstepZ'' : Syntax.Expr _ _ _
- := Linearize
- (ExprEta
- (fun var
- => Abs (fun a24_x0_P1_P2 : interp_flat_type _ (_ * _ * ((_ * _) * (_ * _)))
- => let '(a24, x0, ((P10, P11), (P20, P21)))
- := a24_x0_P1_P2 in
- rladderstepZ'
- var (SmartVarf a24) (SmartVarf x0)
- (SmartVarf P10, SmartVarf P11)
- (SmartVarf P20, SmartVarf P21)))).
-
-Local Notation eta x := (fst x, snd x).
-
-Definition ladderstep_other_assoc {F Fadd Fsub Fmul} a24 (X1:F) (P1 P2:F*F) : F*F*F*F :=
- Eval cbv beta delta [MxDH.ladderstep_gen] in
- @MxDH.ladderstep_gen
- F Fadd Fsub Fmul a24
- (F*F*F*F)
- (fun X3 Y3 Z3 T3 => (X3, Y3, Z3, T3))
- (fun x f => dlet y := x in f y)
- X1 P1 P2.
-
-Definition uncurried_ladderstep
- := fun (a24_x0_P1_P2 : _ * _ * ((_ * _) * (_ * _)))
- => let a24 := fst (fst a24_x0_P1_P2) in
- let x0 := snd (fst a24_x0_P1_P2) in
- let '(P1, P2) := eta (snd a24_x0_P1_P2) in
- let '((P10, P11), (P20, P21)) := (eta P1, eta P2) in
- @ladderstep_other_assoc
- _ add sub mul
- a24 x0 (P10, P11) (P20, P21).
-
-Local Notation rexpr_sigPf T uncurried_op rexprZ x :=
- (Interp interp_op (t:=T) rexprZ x = uncurried_op x)
- (only parsing).
-Local Notation rexpr_sigP T uncurried_op rexprZ :=
- (forall x, rexpr_sigPf T uncurried_op rexprZ x)
- (only parsing).
-Local Notation rexpr_sig T uncurried_op :=
- { rexprZ | rexpr_sigP T uncurried_op rexprZ }
- (only parsing).
-
-Local Ltac fold_interpf' :=
- let k := (eval unfold interpf, interpf_step in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- change k with k'; clearbody k'; subst k'.
-
-Local Ltac fold_interpf :=
- let k := (eval unfold interpf in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- change k with k'; clearbody k'; subst k';
- fold_interpf'.
-
-Local Ltac repeat_step_interpf :=
- let k := (eval unfold interpf in (@interpf base_type interp_base_type op interp_op)) in
- let k' := fresh in
- let H := fresh in
- pose k as k';
- assert (H : @interpf base_type interp_base_type op interp_op = k') by reflexivity;
- repeat (unfold interpf_step at 1; change k with k' at 1);
- clearbody k'; subst k'.
-
-Lemma rladderstepZ_sigP' : rexpr_sigP _ uncurried_ladderstep rladderstepZ''.
-Proof.
- cbv [rladderstepZ''].
- intro x; rewrite InterpLinearize, InterpExprEta.
- cbv [domain interp_flat_type interp_base_type] in x.
- destruct_head' prod.
- cbv [invert_Abs domain codomain Interp interp SmartVarf smart_interp_flat_map fst snd].
- cbv [rladderstepZ' MxDH.ladderstep_gen uncurried_ladderstep SmartVarf smart_interp_flat_map]; simpl @fst; simpl @snd.
- repeat match goal with
- | [ |- appcontext[@proj1_sig ?A ?B ?v] ]
- => let k := fresh "f" in
- let k' := fresh "f" in
- let H := fresh in
- set (k := v);
- set (k' := @proj1_sig A B k);
- pose proof (proj2_sig k) as H;
- change (proj1_sig k) with k' in H;
- clearbody k'; clear k;
- cbv beta in *
- end.
- cbv [Interp Curry.curry2] in *.
- unfold interpf, interpf_step; fold_interpf.
- cbv [ladderstep_other_assoc interp_flat_type GF5211_32.fe5211_32].
- Time
- abstract (
- repeat match goal with
- | [ |- (dlet x := ?y in @?z x) = (dlet x' := ?y' in @?z' x') ]
- => refine ((fun pf0 pf1 => @Proper_Let_In_nd_changebody _ _ Logic.eq _ y y' pf0 z z' pf1)
- (_ : y = y')
- (_ : forall x, z x = z' x));
- cbv beta; intros;
- [ cbv [Let_In Common.ExprBinOpT] | ]
- end;
- repeat match goal with
- | _ => rewrite !interpf_invert_Abs
- | _ => rewrite_hyp !*
- | _ => progress cbv [interp_base_type]
- | [ |- ?x = ?x ] => reflexivity
- | _ => rewrite <- !surjective_pairing
- end
- ).
-Time Defined.
-Lemma rladderstepZ_sigP : rexpr_sigP _ uncurried_ladderstep rladderstepZ''.
-Proof.
- exact rladderstepZ_sigP'.
-Qed.
-Definition rladderstepZ_sig
- := exist (fun v => rexpr_sigP _ _ v) rladderstepZ'' rladderstepZ_sigP.
-
-Definition rladderstep_input_bounds
- := (ExprUnOp_bounds, ExprUnOp_bounds,
- ((ExprUnOp_bounds, ExprUnOp_bounds),
- (ExprUnOp_bounds, ExprUnOp_bounds))).
-
-Time Definition rladderstepW := Eval vm_compute in rword_of_Z rladderstepZ_sig.
-Lemma rladderstepW_correct_and_bounded_gen : correct_and_bounded_genT rladderstepW rladderstepZ_sig.
-Proof. Time rexpr_correct. Time Qed.
-Definition rladderstep_output_bounds := Eval vm_compute in compute_bounds rladderstepW rladderstep_input_bounds.
-
-Local Obligation Tactic := intros; vm_compute; constructor.
-
-(*
-Program Definition rladderstepW_correct_and_bounded
- := Expr9_4Op_correct_and_bounded
- rladderstepW uncurried_ladderstep rladderstepZ_sig rladderstepW_correct_and_bounded_gen
- _ _.
- *)
-
-Local Open Scope string_scope.
-Compute ("Ladderstep", compute_bounds_for_display rladderstepW rladderstep_input_bounds).
-Compute ("Ladderstep overflows? ", sanity_compute rladderstepW rladderstep_input_bounds).
-Compute ("Ladderstep overflows (error if it does)? ", sanity_check rladderstepW rladderstep_input_bounds).
diff --git a/src/SpecificGen/GF5211_32Reflective/Reified/LadderStepDisplay.v b/src/SpecificGen/GF5211_32Reflective/Reified/LadderStepDisplay.v
deleted file mode 100644
index 9dd11cbcc..000000000
--- a/src/SpecificGen/GF5211_32Reflective/Reified/LadderStepDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF5211_32Reflective.Reified.LadderStep.
-Require Export Crypto.Reflection.Z.CNotations.
-
-Print rladderstepW.
diff --git a/src/SpecificGen/GF5211_32Reflective/Reified/LadderStepJavaDisplay.v b/src/SpecificGen/GF5211_32Reflective/Reified/LadderStepJavaDisplay.v
deleted file mode 100644
index 8c01dd87d..000000000
--- a/src/SpecificGen/GF5211_32Reflective/Reified/LadderStepJavaDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF5211_32Reflective.Reified.LadderStep.
-Require Export Crypto.Reflection.Z.JavaNotations.
-
-Print rladderstepW.
diff --git a/src/SpecificGen/GF5211_32Reflective/Reified/Mul.v b/src/SpecificGen/GF5211_32Reflective/Reified/Mul.v
deleted file mode 100644
index b6d2170de..000000000
--- a/src/SpecificGen/GF5211_32Reflective/Reified/Mul.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF5211_32Reflective.CommonBinOp.
-
-Definition rmulZ_sig : rexpr_binop_sig mul. Proof. reify_sig. Defined.
-Definition rmulW := Eval vm_compute in rword_of_Z rmulZ_sig.
-Lemma rmulW_correct_and_bounded_gen : correct_and_bounded_genT rmulW rmulZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rmul_output_bounds := Eval vm_compute in compute_bounds rmulW ExprBinOp_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rmulW_correct_and_bounded
- := ExprBinOp_correct_and_bounded
- rmulW mul rmulZ_sig rmulW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Mul", compute_bounds_for_display rmulW ExprBinOp_bounds).
-Compute ("Mul overflows? ", sanity_compute rmulW ExprBinOp_bounds).
-Compute ("Mul overflows (error if it does)? ", sanity_check rmulW ExprBinOp_bounds).
diff --git a/src/SpecificGen/GF5211_32Reflective/Reified/MulDisplay.log b/src/SpecificGen/GF5211_32Reflective/Reified/MulDisplay.log
deleted file mode 100644
index 717469504..000000000
--- a/src/SpecificGen/GF5211_32Reflective/Reified/MulDisplay.log
+++ /dev/null
@@ -1,1093 +0,0 @@
-rmulW =
-fun var : Syntax.base_type -> Type =>
-λ
-x x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20
- x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31 x32 x33 x34 x35 x36 x37
- x38 : var Syntax.TZ,
-Tbase Syntax.TZ x39 = x18 * x38;
-Tbase Syntax.TZ x40 = x37 * 0x2;
-Tbase Syntax.TZ x41 = x * x40;
-Tbase Syntax.TZ x42 = x36 * 0x2;
-Tbase Syntax.TZ x43 = x0 * x42;
-Tbase Syntax.TZ x44 = x35 * 0x2;
-Tbase Syntax.TZ x45 = x1 * x44;
-Tbase Syntax.TZ x46 = x34 * 0x2;
-Tbase Syntax.TZ x47 = x2 * x46;
-Tbase Syntax.TZ x48 = x33 * 0x2;
-Tbase Syntax.TZ x49 = x3 * x48;
-Tbase Syntax.TZ x50 = x32 * 0x2;
-Tbase Syntax.TZ x51 = x4 * x50;
-Tbase Syntax.TZ x52 = x31 * 0x2;
-Tbase Syntax.TZ x53 = x5 * x52;
-Tbase Syntax.TZ x54 = x30 * 0x2;
-Tbase Syntax.TZ x55 = x6 * x54;
-Tbase Syntax.TZ x56 = x29 * 0x2;
-Tbase Syntax.TZ x57 = x7 * x56;
-Tbase Syntax.TZ x58 = x28 * 0x2;
-Tbase Syntax.TZ x59 = x8 * x58;
-Tbase Syntax.TZ x60 = x27 * 0x2;
-Tbase Syntax.TZ x61 = x9 * x60;
-Tbase Syntax.TZ x62 = x26 * 0x2;
-Tbase Syntax.TZ x63 = x10 * x62;
-Tbase Syntax.TZ x64 = x25 * 0x2;
-Tbase Syntax.TZ x65 = x11 * x64;
-Tbase Syntax.TZ x66 = x24 * 0x2;
-Tbase Syntax.TZ x67 = x12 * x66;
-Tbase Syntax.TZ x68 = x23 * 0x2;
-Tbase Syntax.TZ x69 = x13 * x68;
-Tbase Syntax.TZ x70 = x22 * 0x2;
-Tbase Syntax.TZ x71 = x14 * x70;
-Tbase Syntax.TZ x72 = x21 * 0x2;
-Tbase Syntax.TZ x73 = x15 * x72;
-Tbase Syntax.TZ x74 = x20 * 0x2;
-Tbase Syntax.TZ x75 = x16 * x74;
-Tbase Syntax.TZ x76 = x19 * 0x2;
-Tbase Syntax.TZ x77 = x17 * x76;
-Tbase Syntax.TZ x78 = x75 + x77;
-Tbase Syntax.TZ x79 = x73 + x78;
-Tbase Syntax.TZ x80 = x71 + x79;
-Tbase Syntax.TZ x81 = x69 + x80;
-Tbase Syntax.TZ x82 = x67 + x81;
-Tbase Syntax.TZ x83 = x65 + x82;
-Tbase Syntax.TZ x84 = x63 + x83;
-Tbase Syntax.TZ x85 = x61 + x84;
-Tbase Syntax.TZ x86 = x59 + x85;
-Tbase Syntax.TZ x87 = x57 + x86;
-Tbase Syntax.TZ x88 = x55 + x87;
-Tbase Syntax.TZ x89 = x53 + x88;
-Tbase Syntax.TZ x90 = x51 + x89;
-Tbase Syntax.TZ x91 = x49 + x90;
-Tbase Syntax.TZ x92 = x47 + x91;
-Tbase Syntax.TZ x93 = x45 + x92;
-Tbase Syntax.TZ x94 = x43 + x93;
-Tbase Syntax.TZ x95 = x41 + x94;
-Tbase Syntax.TZ x96 = x39 + x95;
-Tbase Syntax.TZ x97 = x96 >> 0x1b;
-Tbase Syntax.TZ x98 = x17 * x38;
-Tbase Syntax.TZ x99 = x18 * x37;
-Tbase Syntax.TZ x100 = x98 + x99;
-Tbase Syntax.TZ x101 = x * x36;
-Tbase Syntax.TZ x102 = x0 * x35;
-Tbase Syntax.TZ x103 = x1 * x34;
-Tbase Syntax.TZ x104 = x2 * x33;
-Tbase Syntax.TZ x105 = x3 * x32;
-Tbase Syntax.TZ x106 = x4 * x31;
-Tbase Syntax.TZ x107 = x5 * x30;
-Tbase Syntax.TZ x108 = x6 * x29;
-Tbase Syntax.TZ x109 = x7 * x28;
-Tbase Syntax.TZ x110 = x8 * x27;
-Tbase Syntax.TZ x111 = x9 * x26;
-Tbase Syntax.TZ x112 = x10 * x25;
-Tbase Syntax.TZ x113 = x11 * x24;
-Tbase Syntax.TZ x114 = x12 * x23;
-Tbase Syntax.TZ x115 = x13 * x22;
-Tbase Syntax.TZ x116 = x14 * x21;
-Tbase Syntax.TZ x117 = x15 * x20;
-Tbase Syntax.TZ x118 = x16 * x19;
-Tbase Syntax.TZ x119 = x117 + x118;
-Tbase Syntax.TZ x120 = x116 + x119;
-Tbase Syntax.TZ x121 = x115 + x120;
-Tbase Syntax.TZ x122 = x114 + x121;
-Tbase Syntax.TZ x123 = x113 + x122;
-Tbase Syntax.TZ x124 = x112 + x123;
-Tbase Syntax.TZ x125 = x111 + x124;
-Tbase Syntax.TZ x126 = x110 + x125;
-Tbase Syntax.TZ x127 = x109 + x126;
-Tbase Syntax.TZ x128 = x108 + x127;
-Tbase Syntax.TZ x129 = x107 + x128;
-Tbase Syntax.TZ x130 = x106 + x129;
-Tbase Syntax.TZ x131 = x105 + x130;
-Tbase Syntax.TZ x132 = x104 + x131;
-Tbase Syntax.TZ x133 = x103 + x132;
-Tbase Syntax.TZ x134 = x102 + x133;
-Tbase Syntax.TZ x135 = x101 + x134;
-Tbase Syntax.TZ x136 = x100 + x135;
-Tbase Syntax.TZ x137 = x97 + x136;
-Tbase Syntax.TZ x138 = x137 >> 0x1a;
-Tbase Syntax.TZ x139 = x16 * x38;
-Tbase Syntax.TZ x140 = x37 * 0x2;
-Tbase Syntax.TZ x141 = x17 * x140;
-Tbase Syntax.TZ x142 = x18 * x36;
-Tbase Syntax.TZ x143 = x141 + x142;
-Tbase Syntax.TZ x144 = x139 + x143;
-Tbase Syntax.TZ x145 = x * x35;
-Tbase Syntax.TZ x146 = x0 * x34;
-Tbase Syntax.TZ x147 = x1 * x33;
-Tbase Syntax.TZ x148 = x2 * x32;
-Tbase Syntax.TZ x149 = x3 * x31;
-Tbase Syntax.TZ x150 = x4 * x30;
-Tbase Syntax.TZ x151 = x5 * x29;
-Tbase Syntax.TZ x152 = x6 * x28;
-Tbase Syntax.TZ x153 = x7 * x27;
-Tbase Syntax.TZ x154 = x8 * x26;
-Tbase Syntax.TZ x155 = x9 * x25;
-Tbase Syntax.TZ x156 = x10 * x24;
-Tbase Syntax.TZ x157 = x11 * x23;
-Tbase Syntax.TZ x158 = x12 * x22;
-Tbase Syntax.TZ x159 = x13 * x21;
-Tbase Syntax.TZ x160 = x14 * x20;
-Tbase Syntax.TZ x161 = x15 * x19;
-Tbase Syntax.TZ x162 = x160 + x161;
-Tbase Syntax.TZ x163 = x159 + x162;
-Tbase Syntax.TZ x164 = x158 + x163;
-Tbase Syntax.TZ x165 = x157 + x164;
-Tbase Syntax.TZ x166 = x156 + x165;
-Tbase Syntax.TZ x167 = x155 + x166;
-Tbase Syntax.TZ x168 = x154 + x167;
-Tbase Syntax.TZ x169 = x153 + x168;
-Tbase Syntax.TZ x170 = x152 + x169;
-Tbase Syntax.TZ x171 = x151 + x170;
-Tbase Syntax.TZ x172 = x150 + x171;
-Tbase Syntax.TZ x173 = x149 + x172;
-Tbase Syntax.TZ x174 = x148 + x173;
-Tbase Syntax.TZ x175 = x147 + x174;
-Tbase Syntax.TZ x176 = x146 + x175;
-Tbase Syntax.TZ x177 = x145 + x176;
-Tbase Syntax.TZ x178 = x144 + x177;
-Tbase Syntax.TZ x179 = x138 + x178;
-Tbase Syntax.TZ x180 = x179 >> 0x1a;
-Tbase Syntax.TZ x181 = x15 * x38;
-Tbase Syntax.TZ x182 = x37 * 0x2;
-Tbase Syntax.TZ x183 = x16 * x182;
-Tbase Syntax.TZ x184 = x36 * 0x2;
-Tbase Syntax.TZ x185 = x17 * x184;
-Tbase Syntax.TZ x186 = x18 * x35;
-Tbase Syntax.TZ x187 = x185 + x186;
-Tbase Syntax.TZ x188 = x183 + x187;
-Tbase Syntax.TZ x189 = x181 + x188;
-Tbase Syntax.TZ x190 = x * x34;
-Tbase Syntax.TZ x191 = x0 * x33;
-Tbase Syntax.TZ x192 = x1 * x32;
-Tbase Syntax.TZ x193 = x2 * x31;
-Tbase Syntax.TZ x194 = x3 * x30;
-Tbase Syntax.TZ x195 = x4 * x29;
-Tbase Syntax.TZ x196 = x5 * x28;
-Tbase Syntax.TZ x197 = x6 * x27;
-Tbase Syntax.TZ x198 = x7 * x26;
-Tbase Syntax.TZ x199 = x8 * x25;
-Tbase Syntax.TZ x200 = x9 * x24;
-Tbase Syntax.TZ x201 = x10 * x23;
-Tbase Syntax.TZ x202 = x11 * x22;
-Tbase Syntax.TZ x203 = x12 * x21;
-Tbase Syntax.TZ x204 = x13 * x20;
-Tbase Syntax.TZ x205 = x14 * x19;
-Tbase Syntax.TZ x206 = x204 + x205;
-Tbase Syntax.TZ x207 = x203 + x206;
-Tbase Syntax.TZ x208 = x202 + x207;
-Tbase Syntax.TZ x209 = x201 + x208;
-Tbase Syntax.TZ x210 = x200 + x209;
-Tbase Syntax.TZ x211 = x199 + x210;
-Tbase Syntax.TZ x212 = x198 + x211;
-Tbase Syntax.TZ x213 = x197 + x212;
-Tbase Syntax.TZ x214 = x196 + x213;
-Tbase Syntax.TZ x215 = x195 + x214;
-Tbase Syntax.TZ x216 = x194 + x215;
-Tbase Syntax.TZ x217 = x193 + x216;
-Tbase Syntax.TZ x218 = x192 + x217;
-Tbase Syntax.TZ x219 = x191 + x218;
-Tbase Syntax.TZ x220 = x190 + x219;
-Tbase Syntax.TZ x221 = x189 + x220;
-Tbase Syntax.TZ x222 = x180 + x221;
-Tbase Syntax.TZ x223 = x222 >> 0x1a;
-Tbase Syntax.TZ x224 = x14 * x38;
-Tbase Syntax.TZ x225 = x37 * 0x2;
-Tbase Syntax.TZ x226 = x15 * x225;
-Tbase Syntax.TZ x227 = x36 * 0x2;
-Tbase Syntax.TZ x228 = x16 * x227;
-Tbase Syntax.TZ x229 = x35 * 0x2;
-Tbase Syntax.TZ x230 = x17 * x229;
-Tbase Syntax.TZ x231 = x18 * x34;
-Tbase Syntax.TZ x232 = x230 + x231;
-Tbase Syntax.TZ x233 = x228 + x232;
-Tbase Syntax.TZ x234 = x226 + x233;
-Tbase Syntax.TZ x235 = x224 + x234;
-Tbase Syntax.TZ x236 = x * x33;
-Tbase Syntax.TZ x237 = x0 * x32;
-Tbase Syntax.TZ x238 = x1 * x31;
-Tbase Syntax.TZ x239 = x2 * x30;
-Tbase Syntax.TZ x240 = x3 * x29;
-Tbase Syntax.TZ x241 = x4 * x28;
-Tbase Syntax.TZ x242 = x5 * x27;
-Tbase Syntax.TZ x243 = x6 * x26;
-Tbase Syntax.TZ x244 = x7 * x25;
-Tbase Syntax.TZ x245 = x8 * x24;
-Tbase Syntax.TZ x246 = x9 * x23;
-Tbase Syntax.TZ x247 = x10 * x22;
-Tbase Syntax.TZ x248 = x11 * x21;
-Tbase Syntax.TZ x249 = x12 * x20;
-Tbase Syntax.TZ x250 = x13 * x19;
-Tbase Syntax.TZ x251 = x249 + x250;
-Tbase Syntax.TZ x252 = x248 + x251;
-Tbase Syntax.TZ x253 = x247 + x252;
-Tbase Syntax.TZ x254 = x246 + x253;
-Tbase Syntax.TZ x255 = x245 + x254;
-Tbase Syntax.TZ x256 = x244 + x255;
-Tbase Syntax.TZ x257 = x243 + x256;
-Tbase Syntax.TZ x258 = x242 + x257;
-Tbase Syntax.TZ x259 = x241 + x258;
-Tbase Syntax.TZ x260 = x240 + x259;
-Tbase Syntax.TZ x261 = x239 + x260;
-Tbase Syntax.TZ x262 = x238 + x261;
-Tbase Syntax.TZ x263 = x237 + x262;
-Tbase Syntax.TZ x264 = x236 + x263;
-Tbase Syntax.TZ x265 = x235 + x264;
-Tbase Syntax.TZ x266 = x223 + x265;
-Tbase Syntax.TZ x267 = x266 >> 0x1a;
-Tbase Syntax.TZ x268 = x13 * x38;
-Tbase Syntax.TZ x269 = x37 * 0x2;
-Tbase Syntax.TZ x270 = x14 * x269;
-Tbase Syntax.TZ x271 = x36 * 0x2;
-Tbase Syntax.TZ x272 = x15 * x271;
-Tbase Syntax.TZ x273 = x35 * 0x2;
-Tbase Syntax.TZ x274 = x16 * x273;
-Tbase Syntax.TZ x275 = x34 * 0x2;
-Tbase Syntax.TZ x276 = x17 * x275;
-Tbase Syntax.TZ x277 = x18 * x33;
-Tbase Syntax.TZ x278 = x276 + x277;
-Tbase Syntax.TZ x279 = x274 + x278;
-Tbase Syntax.TZ x280 = x272 + x279;
-Tbase Syntax.TZ x281 = x270 + x280;
-Tbase Syntax.TZ x282 = x268 + x281;
-Tbase Syntax.TZ x283 = x * x32;
-Tbase Syntax.TZ x284 = x0 * x31;
-Tbase Syntax.TZ x285 = x1 * x30;
-Tbase Syntax.TZ x286 = x2 * x29;
-Tbase Syntax.TZ x287 = x3 * x28;
-Tbase Syntax.TZ x288 = x4 * x27;
-Tbase Syntax.TZ x289 = x5 * x26;
-Tbase Syntax.TZ x290 = x6 * x25;
-Tbase Syntax.TZ x291 = x7 * x24;
-Tbase Syntax.TZ x292 = x8 * x23;
-Tbase Syntax.TZ x293 = x9 * x22;
-Tbase Syntax.TZ x294 = x10 * x21;
-Tbase Syntax.TZ x295 = x11 * x20;
-Tbase Syntax.TZ x296 = x12 * x19;
-Tbase Syntax.TZ x297 = x295 + x296;
-Tbase Syntax.TZ x298 = x294 + x297;
-Tbase Syntax.TZ x299 = x293 + x298;
-Tbase Syntax.TZ x300 = x292 + x299;
-Tbase Syntax.TZ x301 = x291 + x300;
-Tbase Syntax.TZ x302 = x290 + x301;
-Tbase Syntax.TZ x303 = x289 + x302;
-Tbase Syntax.TZ x304 = x288 + x303;
-Tbase Syntax.TZ x305 = x287 + x304;
-Tbase Syntax.TZ x306 = x286 + x305;
-Tbase Syntax.TZ x307 = x285 + x306;
-Tbase Syntax.TZ x308 = x284 + x307;
-Tbase Syntax.TZ x309 = x283 + x308;
-Tbase Syntax.TZ x310 = x282 + x309;
-Tbase Syntax.TZ x311 = x267 + x310;
-Tbase Syntax.TZ x312 = x311 >> 0x1a;
-Tbase Syntax.TZ x313 = x12 * x38;
-Tbase Syntax.TZ x314 = x37 * 0x2;
-Tbase Syntax.TZ x315 = x13 * x314;
-Tbase Syntax.TZ x316 = x36 * 0x2;
-Tbase Syntax.TZ x317 = x14 * x316;
-Tbase Syntax.TZ x318 = x35 * 0x2;
-Tbase Syntax.TZ x319 = x15 * x318;
-Tbase Syntax.TZ x320 = x34 * 0x2;
-Tbase Syntax.TZ x321 = x16 * x320;
-Tbase Syntax.TZ x322 = x33 * 0x2;
-Tbase Syntax.TZ x323 = x17 * x322;
-Tbase Syntax.TZ x324 = x18 * x32;
-Tbase Syntax.TZ x325 = x323 + x324;
-Tbase Syntax.TZ x326 = x321 + x325;
-Tbase Syntax.TZ x327 = x319 + x326;
-Tbase Syntax.TZ x328 = x317 + x327;
-Tbase Syntax.TZ x329 = x315 + x328;
-Tbase Syntax.TZ x330 = x313 + x329;
-Tbase Syntax.TZ x331 = x * x31;
-Tbase Syntax.TZ x332 = x0 * x30;
-Tbase Syntax.TZ x333 = x1 * x29;
-Tbase Syntax.TZ x334 = x2 * x28;
-Tbase Syntax.TZ x335 = x3 * x27;
-Tbase Syntax.TZ x336 = x4 * x26;
-Tbase Syntax.TZ x337 = x5 * x25;
-Tbase Syntax.TZ x338 = x6 * x24;
-Tbase Syntax.TZ x339 = x7 * x23;
-Tbase Syntax.TZ x340 = x8 * x22;
-Tbase Syntax.TZ x341 = x9 * x21;
-Tbase Syntax.TZ x342 = x10 * x20;
-Tbase Syntax.TZ x343 = x11 * x19;
-Tbase Syntax.TZ x344 = x342 + x343;
-Tbase Syntax.TZ x345 = x341 + x344;
-Tbase Syntax.TZ x346 = x340 + x345;
-Tbase Syntax.TZ x347 = x339 + x346;
-Tbase Syntax.TZ x348 = x338 + x347;
-Tbase Syntax.TZ x349 = x337 + x348;
-Tbase Syntax.TZ x350 = x336 + x349;
-Tbase Syntax.TZ x351 = x335 + x350;
-Tbase Syntax.TZ x352 = x334 + x351;
-Tbase Syntax.TZ x353 = x333 + x352;
-Tbase Syntax.TZ x354 = x332 + x353;
-Tbase Syntax.TZ x355 = x331 + x354;
-Tbase Syntax.TZ x356 = x330 + x355;
-Tbase Syntax.TZ x357 = x312 + x356;
-Tbase Syntax.TZ x358 = x357 >> 0x1a;
-Tbase Syntax.TZ x359 = x11 * x38;
-Tbase Syntax.TZ x360 = x37 * 0x2;
-Tbase Syntax.TZ x361 = x12 * x360;
-Tbase Syntax.TZ x362 = x36 * 0x2;
-Tbase Syntax.TZ x363 = x13 * x362;
-Tbase Syntax.TZ x364 = x35 * 0x2;
-Tbase Syntax.TZ x365 = x14 * x364;
-Tbase Syntax.TZ x366 = x34 * 0x2;
-Tbase Syntax.TZ x367 = x15 * x366;
-Tbase Syntax.TZ x368 = x33 * 0x2;
-Tbase Syntax.TZ x369 = x16 * x368;
-Tbase Syntax.TZ x370 = x32 * 0x2;
-Tbase Syntax.TZ x371 = x17 * x370;
-Tbase Syntax.TZ x372 = x18 * x31;
-Tbase Syntax.TZ x373 = x371 + x372;
-Tbase Syntax.TZ x374 = x369 + x373;
-Tbase Syntax.TZ x375 = x367 + x374;
-Tbase Syntax.TZ x376 = x365 + x375;
-Tbase Syntax.TZ x377 = x363 + x376;
-Tbase Syntax.TZ x378 = x361 + x377;
-Tbase Syntax.TZ x379 = x359 + x378;
-Tbase Syntax.TZ x380 = x * x30;
-Tbase Syntax.TZ x381 = x0 * x29;
-Tbase Syntax.TZ x382 = x1 * x28;
-Tbase Syntax.TZ x383 = x2 * x27;
-Tbase Syntax.TZ x384 = x3 * x26;
-Tbase Syntax.TZ x385 = x4 * x25;
-Tbase Syntax.TZ x386 = x5 * x24;
-Tbase Syntax.TZ x387 = x6 * x23;
-Tbase Syntax.TZ x388 = x7 * x22;
-Tbase Syntax.TZ x389 = x8 * x21;
-Tbase Syntax.TZ x390 = x9 * x20;
-Tbase Syntax.TZ x391 = x10 * x19;
-Tbase Syntax.TZ x392 = x390 + x391;
-Tbase Syntax.TZ x393 = x389 + x392;
-Tbase Syntax.TZ x394 = x388 + x393;
-Tbase Syntax.TZ x395 = x387 + x394;
-Tbase Syntax.TZ x396 = x386 + x395;
-Tbase Syntax.TZ x397 = x385 + x396;
-Tbase Syntax.TZ x398 = x384 + x397;
-Tbase Syntax.TZ x399 = x383 + x398;
-Tbase Syntax.TZ x400 = x382 + x399;
-Tbase Syntax.TZ x401 = x381 + x400;
-Tbase Syntax.TZ x402 = x380 + x401;
-Tbase Syntax.TZ x403 = x379 + x402;
-Tbase Syntax.TZ x404 = x358 + x403;
-Tbase Syntax.TZ x405 = x404 >> 0x1a;
-Tbase Syntax.TZ x406 = x10 * x38;
-Tbase Syntax.TZ x407 = x37 * 0x2;
-Tbase Syntax.TZ x408 = x11 * x407;
-Tbase Syntax.TZ x409 = x36 * 0x2;
-Tbase Syntax.TZ x410 = x12 * x409;
-Tbase Syntax.TZ x411 = x35 * 0x2;
-Tbase Syntax.TZ x412 = x13 * x411;
-Tbase Syntax.TZ x413 = x34 * 0x2;
-Tbase Syntax.TZ x414 = x14 * x413;
-Tbase Syntax.TZ x415 = x33 * 0x2;
-Tbase Syntax.TZ x416 = x15 * x415;
-Tbase Syntax.TZ x417 = x32 * 0x2;
-Tbase Syntax.TZ x418 = x16 * x417;
-Tbase Syntax.TZ x419 = x31 * 0x2;
-Tbase Syntax.TZ x420 = x17 * x419;
-Tbase Syntax.TZ x421 = x18 * x30;
-Tbase Syntax.TZ x422 = x420 + x421;
-Tbase Syntax.TZ x423 = x418 + x422;
-Tbase Syntax.TZ x424 = x416 + x423;
-Tbase Syntax.TZ x425 = x414 + x424;
-Tbase Syntax.TZ x426 = x412 + x425;
-Tbase Syntax.TZ x427 = x410 + x426;
-Tbase Syntax.TZ x428 = x408 + x427;
-Tbase Syntax.TZ x429 = x406 + x428;
-Tbase Syntax.TZ x430 = x * x29;
-Tbase Syntax.TZ x431 = x0 * x28;
-Tbase Syntax.TZ x432 = x1 * x27;
-Tbase Syntax.TZ x433 = x2 * x26;
-Tbase Syntax.TZ x434 = x3 * x25;
-Tbase Syntax.TZ x435 = x4 * x24;
-Tbase Syntax.TZ x436 = x5 * x23;
-Tbase Syntax.TZ x437 = x6 * x22;
-Tbase Syntax.TZ x438 = x7 * x21;
-Tbase Syntax.TZ x439 = x8 * x20;
-Tbase Syntax.TZ x440 = x9 * x19;
-Tbase Syntax.TZ x441 = x439 + x440;
-Tbase Syntax.TZ x442 = x438 + x441;
-Tbase Syntax.TZ x443 = x437 + x442;
-Tbase Syntax.TZ x444 = x436 + x443;
-Tbase Syntax.TZ x445 = x435 + x444;
-Tbase Syntax.TZ x446 = x434 + x445;
-Tbase Syntax.TZ x447 = x433 + x446;
-Tbase Syntax.TZ x448 = x432 + x447;
-Tbase Syntax.TZ x449 = x431 + x448;
-Tbase Syntax.TZ x450 = x430 + x449;
-Tbase Syntax.TZ x451 = x429 + x450;
-Tbase Syntax.TZ x452 = x405 + x451;
-Tbase Syntax.TZ x453 = x452 >> 0x1a;
-Tbase Syntax.TZ x454 = x9 * x38;
-Tbase Syntax.TZ x455 = x37 * 0x2;
-Tbase Syntax.TZ x456 = x10 * x455;
-Tbase Syntax.TZ x457 = x36 * 0x2;
-Tbase Syntax.TZ x458 = x11 * x457;
-Tbase Syntax.TZ x459 = x35 * 0x2;
-Tbase Syntax.TZ x460 = x12 * x459;
-Tbase Syntax.TZ x461 = x34 * 0x2;
-Tbase Syntax.TZ x462 = x13 * x461;
-Tbase Syntax.TZ x463 = x33 * 0x2;
-Tbase Syntax.TZ x464 = x14 * x463;
-Tbase Syntax.TZ x465 = x32 * 0x2;
-Tbase Syntax.TZ x466 = x15 * x465;
-Tbase Syntax.TZ x467 = x31 * 0x2;
-Tbase Syntax.TZ x468 = x16 * x467;
-Tbase Syntax.TZ x469 = x30 * 0x2;
-Tbase Syntax.TZ x470 = x17 * x469;
-Tbase Syntax.TZ x471 = x18 * x29;
-Tbase Syntax.TZ x472 = x470 + x471;
-Tbase Syntax.TZ x473 = x468 + x472;
-Tbase Syntax.TZ x474 = x466 + x473;
-Tbase Syntax.TZ x475 = x464 + x474;
-Tbase Syntax.TZ x476 = x462 + x475;
-Tbase Syntax.TZ x477 = x460 + x476;
-Tbase Syntax.TZ x478 = x458 + x477;
-Tbase Syntax.TZ x479 = x456 + x478;
-Tbase Syntax.TZ x480 = x454 + x479;
-Tbase Syntax.TZ x481 = x * x28;
-Tbase Syntax.TZ x482 = x0 * x27;
-Tbase Syntax.TZ x483 = x1 * x26;
-Tbase Syntax.TZ x484 = x2 * x25;
-Tbase Syntax.TZ x485 = x3 * x24;
-Tbase Syntax.TZ x486 = x4 * x23;
-Tbase Syntax.TZ x487 = x5 * x22;
-Tbase Syntax.TZ x488 = x6 * x21;
-Tbase Syntax.TZ x489 = x7 * x20;
-Tbase Syntax.TZ x490 = x8 * x19;
-Tbase Syntax.TZ x491 = x489 + x490;
-Tbase Syntax.TZ x492 = x488 + x491;
-Tbase Syntax.TZ x493 = x487 + x492;
-Tbase Syntax.TZ x494 = x486 + x493;
-Tbase Syntax.TZ x495 = x485 + x494;
-Tbase Syntax.TZ x496 = x484 + x495;
-Tbase Syntax.TZ x497 = x483 + x496;
-Tbase Syntax.TZ x498 = x482 + x497;
-Tbase Syntax.TZ x499 = x481 + x498;
-Tbase Syntax.TZ x500 = x480 + x499;
-Tbase Syntax.TZ x501 = x453 + x500;
-Tbase Syntax.TZ x502 = x501 >> 0x1a;
-Tbase Syntax.TZ x503 = x8 * x38;
-Tbase Syntax.TZ x504 = x37 * 0x2;
-Tbase Syntax.TZ x505 = x9 * x504;
-Tbase Syntax.TZ x506 = x36 * 0x2;
-Tbase Syntax.TZ x507 = x10 * x506;
-Tbase Syntax.TZ x508 = x35 * 0x2;
-Tbase Syntax.TZ x509 = x11 * x508;
-Tbase Syntax.TZ x510 = x34 * 0x2;
-Tbase Syntax.TZ x511 = x12 * x510;
-Tbase Syntax.TZ x512 = x33 * 0x2;
-Tbase Syntax.TZ x513 = x13 * x512;
-Tbase Syntax.TZ x514 = x32 * 0x2;
-Tbase Syntax.TZ x515 = x14 * x514;
-Tbase Syntax.TZ x516 = x31 * 0x2;
-Tbase Syntax.TZ x517 = x15 * x516;
-Tbase Syntax.TZ x518 = x30 * 0x2;
-Tbase Syntax.TZ x519 = x16 * x518;
-Tbase Syntax.TZ x520 = x29 * 0x2;
-Tbase Syntax.TZ x521 = x17 * x520;
-Tbase Syntax.TZ x522 = x18 * x28;
-Tbase Syntax.TZ x523 = x521 + x522;
-Tbase Syntax.TZ x524 = x519 + x523;
-Tbase Syntax.TZ x525 = x517 + x524;
-Tbase Syntax.TZ x526 = x515 + x525;
-Tbase Syntax.TZ x527 = x513 + x526;
-Tbase Syntax.TZ x528 = x511 + x527;
-Tbase Syntax.TZ x529 = x509 + x528;
-Tbase Syntax.TZ x530 = x507 + x529;
-Tbase Syntax.TZ x531 = x505 + x530;
-Tbase Syntax.TZ x532 = x503 + x531;
-Tbase Syntax.TZ x533 = x * x27;
-Tbase Syntax.TZ x534 = x0 * x26;
-Tbase Syntax.TZ x535 = x1 * x25;
-Tbase Syntax.TZ x536 = x2 * x24;
-Tbase Syntax.TZ x537 = x3 * x23;
-Tbase Syntax.TZ x538 = x4 * x22;
-Tbase Syntax.TZ x539 = x5 * x21;
-Tbase Syntax.TZ x540 = x6 * x20;
-Tbase Syntax.TZ x541 = x7 * x19;
-Tbase Syntax.TZ x542 = x540 + x541;
-Tbase Syntax.TZ x543 = x539 + x542;
-Tbase Syntax.TZ x544 = x538 + x543;
-Tbase Syntax.TZ x545 = x537 + x544;
-Tbase Syntax.TZ x546 = x536 + x545;
-Tbase Syntax.TZ x547 = x535 + x546;
-Tbase Syntax.TZ x548 = x534 + x547;
-Tbase Syntax.TZ x549 = x533 + x548;
-Tbase Syntax.TZ x550 = x532 + x549;
-Tbase Syntax.TZ x551 = x502 + x550;
-Tbase Syntax.TZ x552 = x551 >> 0x1a;
-Tbase Syntax.TZ x553 = x7 * x38;
-Tbase Syntax.TZ x554 = x37 * 0x2;
-Tbase Syntax.TZ x555 = x8 * x554;
-Tbase Syntax.TZ x556 = x36 * 0x2;
-Tbase Syntax.TZ x557 = x9 * x556;
-Tbase Syntax.TZ x558 = x35 * 0x2;
-Tbase Syntax.TZ x559 = x10 * x558;
-Tbase Syntax.TZ x560 = x34 * 0x2;
-Tbase Syntax.TZ x561 = x11 * x560;
-Tbase Syntax.TZ x562 = x33 * 0x2;
-Tbase Syntax.TZ x563 = x12 * x562;
-Tbase Syntax.TZ x564 = x32 * 0x2;
-Tbase Syntax.TZ x565 = x13 * x564;
-Tbase Syntax.TZ x566 = x31 * 0x2;
-Tbase Syntax.TZ x567 = x14 * x566;
-Tbase Syntax.TZ x568 = x30 * 0x2;
-Tbase Syntax.TZ x569 = x15 * x568;
-Tbase Syntax.TZ x570 = x29 * 0x2;
-Tbase Syntax.TZ x571 = x16 * x570;
-Tbase Syntax.TZ x572 = x28 * 0x2;
-Tbase Syntax.TZ x573 = x17 * x572;
-Tbase Syntax.TZ x574 = x18 * x27;
-Tbase Syntax.TZ x575 = x573 + x574;
-Tbase Syntax.TZ x576 = x571 + x575;
-Tbase Syntax.TZ x577 = x569 + x576;
-Tbase Syntax.TZ x578 = x567 + x577;
-Tbase Syntax.TZ x579 = x565 + x578;
-Tbase Syntax.TZ x580 = x563 + x579;
-Tbase Syntax.TZ x581 = x561 + x580;
-Tbase Syntax.TZ x582 = x559 + x581;
-Tbase Syntax.TZ x583 = x557 + x582;
-Tbase Syntax.TZ x584 = x555 + x583;
-Tbase Syntax.TZ x585 = x553 + x584;
-Tbase Syntax.TZ x586 = x * x26;
-Tbase Syntax.TZ x587 = x0 * x25;
-Tbase Syntax.TZ x588 = x1 * x24;
-Tbase Syntax.TZ x589 = x2 * x23;
-Tbase Syntax.TZ x590 = x3 * x22;
-Tbase Syntax.TZ x591 = x4 * x21;
-Tbase Syntax.TZ x592 = x5 * x20;
-Tbase Syntax.TZ x593 = x6 * x19;
-Tbase Syntax.TZ x594 = x592 + x593;
-Tbase Syntax.TZ x595 = x591 + x594;
-Tbase Syntax.TZ x596 = x590 + x595;
-Tbase Syntax.TZ x597 = x589 + x596;
-Tbase Syntax.TZ x598 = x588 + x597;
-Tbase Syntax.TZ x599 = x587 + x598;
-Tbase Syntax.TZ x600 = x586 + x599;
-Tbase Syntax.TZ x601 = x585 + x600;
-Tbase Syntax.TZ x602 = x552 + x601;
-Tbase Syntax.TZ x603 = x602 >> 0x1a;
-Tbase Syntax.TZ x604 = x6 * x38;
-Tbase Syntax.TZ x605 = x37 * 0x2;
-Tbase Syntax.TZ x606 = x7 * x605;
-Tbase Syntax.TZ x607 = x36 * 0x2;
-Tbase Syntax.TZ x608 = x8 * x607;
-Tbase Syntax.TZ x609 = x35 * 0x2;
-Tbase Syntax.TZ x610 = x9 * x609;
-Tbase Syntax.TZ x611 = x34 * 0x2;
-Tbase Syntax.TZ x612 = x10 * x611;
-Tbase Syntax.TZ x613 = x33 * 0x2;
-Tbase Syntax.TZ x614 = x11 * x613;
-Tbase Syntax.TZ x615 = x32 * 0x2;
-Tbase Syntax.TZ x616 = x12 * x615;
-Tbase Syntax.TZ x617 = x31 * 0x2;
-Tbase Syntax.TZ x618 = x13 * x617;
-Tbase Syntax.TZ x619 = x30 * 0x2;
-Tbase Syntax.TZ x620 = x14 * x619;
-Tbase Syntax.TZ x621 = x29 * 0x2;
-Tbase Syntax.TZ x622 = x15 * x621;
-Tbase Syntax.TZ x623 = x28 * 0x2;
-Tbase Syntax.TZ x624 = x16 * x623;
-Tbase Syntax.TZ x625 = x27 * 0x2;
-Tbase Syntax.TZ x626 = x17 * x625;
-Tbase Syntax.TZ x627 = x18 * x26;
-Tbase Syntax.TZ x628 = x626 + x627;
-Tbase Syntax.TZ x629 = x624 + x628;
-Tbase Syntax.TZ x630 = x622 + x629;
-Tbase Syntax.TZ x631 = x620 + x630;
-Tbase Syntax.TZ x632 = x618 + x631;
-Tbase Syntax.TZ x633 = x616 + x632;
-Tbase Syntax.TZ x634 = x614 + x633;
-Tbase Syntax.TZ x635 = x612 + x634;
-Tbase Syntax.TZ x636 = x610 + x635;
-Tbase Syntax.TZ x637 = x608 + x636;
-Tbase Syntax.TZ x638 = x606 + x637;
-Tbase Syntax.TZ x639 = x604 + x638;
-Tbase Syntax.TZ x640 = x * x25;
-Tbase Syntax.TZ x641 = x0 * x24;
-Tbase Syntax.TZ x642 = x1 * x23;
-Tbase Syntax.TZ x643 = x2 * x22;
-Tbase Syntax.TZ x644 = x3 * x21;
-Tbase Syntax.TZ x645 = x4 * x20;
-Tbase Syntax.TZ x646 = x5 * x19;
-Tbase Syntax.TZ x647 = x645 + x646;
-Tbase Syntax.TZ x648 = x644 + x647;
-Tbase Syntax.TZ x649 = x643 + x648;
-Tbase Syntax.TZ x650 = x642 + x649;
-Tbase Syntax.TZ x651 = x641 + x650;
-Tbase Syntax.TZ x652 = x640 + x651;
-Tbase Syntax.TZ x653 = x639 + x652;
-Tbase Syntax.TZ x654 = x603 + x653;
-Tbase Syntax.TZ x655 = x654 >> 0x1a;
-Tbase Syntax.TZ x656 = x5 * x38;
-Tbase Syntax.TZ x657 = x37 * 0x2;
-Tbase Syntax.TZ x658 = x6 * x657;
-Tbase Syntax.TZ x659 = x36 * 0x2;
-Tbase Syntax.TZ x660 = x7 * x659;
-Tbase Syntax.TZ x661 = x35 * 0x2;
-Tbase Syntax.TZ x662 = x8 * x661;
-Tbase Syntax.TZ x663 = x34 * 0x2;
-Tbase Syntax.TZ x664 = x9 * x663;
-Tbase Syntax.TZ x665 = x33 * 0x2;
-Tbase Syntax.TZ x666 = x10 * x665;
-Tbase Syntax.TZ x667 = x32 * 0x2;
-Tbase Syntax.TZ x668 = x11 * x667;
-Tbase Syntax.TZ x669 = x31 * 0x2;
-Tbase Syntax.TZ x670 = x12 * x669;
-Tbase Syntax.TZ x671 = x30 * 0x2;
-Tbase Syntax.TZ x672 = x13 * x671;
-Tbase Syntax.TZ x673 = x29 * 0x2;
-Tbase Syntax.TZ x674 = x14 * x673;
-Tbase Syntax.TZ x675 = x28 * 0x2;
-Tbase Syntax.TZ x676 = x15 * x675;
-Tbase Syntax.TZ x677 = x27 * 0x2;
-Tbase Syntax.TZ x678 = x16 * x677;
-Tbase Syntax.TZ x679 = x26 * 0x2;
-Tbase Syntax.TZ x680 = x17 * x679;
-Tbase Syntax.TZ x681 = x18 * x25;
-Tbase Syntax.TZ x682 = x680 + x681;
-Tbase Syntax.TZ x683 = x678 + x682;
-Tbase Syntax.TZ x684 = x676 + x683;
-Tbase Syntax.TZ x685 = x674 + x684;
-Tbase Syntax.TZ x686 = x672 + x685;
-Tbase Syntax.TZ x687 = x670 + x686;
-Tbase Syntax.TZ x688 = x668 + x687;
-Tbase Syntax.TZ x689 = x666 + x688;
-Tbase Syntax.TZ x690 = x664 + x689;
-Tbase Syntax.TZ x691 = x662 + x690;
-Tbase Syntax.TZ x692 = x660 + x691;
-Tbase Syntax.TZ x693 = x658 + x692;
-Tbase Syntax.TZ x694 = x656 + x693;
-Tbase Syntax.TZ x695 = x * x24;
-Tbase Syntax.TZ x696 = x0 * x23;
-Tbase Syntax.TZ x697 = x1 * x22;
-Tbase Syntax.TZ x698 = x2 * x21;
-Tbase Syntax.TZ x699 = x3 * x20;
-Tbase Syntax.TZ x700 = x4 * x19;
-Tbase Syntax.TZ x701 = x699 + x700;
-Tbase Syntax.TZ x702 = x698 + x701;
-Tbase Syntax.TZ x703 = x697 + x702;
-Tbase Syntax.TZ x704 = x696 + x703;
-Tbase Syntax.TZ x705 = x695 + x704;
-Tbase Syntax.TZ x706 = x694 + x705;
-Tbase Syntax.TZ x707 = x655 + x706;
-Tbase Syntax.TZ x708 = x707 >> 0x1a;
-Tbase Syntax.TZ x709 = x4 * x38;
-Tbase Syntax.TZ x710 = x37 * 0x2;
-Tbase Syntax.TZ x711 = x5 * x710;
-Tbase Syntax.TZ x712 = x36 * 0x2;
-Tbase Syntax.TZ x713 = x6 * x712;
-Tbase Syntax.TZ x714 = x35 * 0x2;
-Tbase Syntax.TZ x715 = x7 * x714;
-Tbase Syntax.TZ x716 = x34 * 0x2;
-Tbase Syntax.TZ x717 = x8 * x716;
-Tbase Syntax.TZ x718 = x33 * 0x2;
-Tbase Syntax.TZ x719 = x9 * x718;
-Tbase Syntax.TZ x720 = x32 * 0x2;
-Tbase Syntax.TZ x721 = x10 * x720;
-Tbase Syntax.TZ x722 = x31 * 0x2;
-Tbase Syntax.TZ x723 = x11 * x722;
-Tbase Syntax.TZ x724 = x30 * 0x2;
-Tbase Syntax.TZ x725 = x12 * x724;
-Tbase Syntax.TZ x726 = x29 * 0x2;
-Tbase Syntax.TZ x727 = x13 * x726;
-Tbase Syntax.TZ x728 = x28 * 0x2;
-Tbase Syntax.TZ x729 = x14 * x728;
-Tbase Syntax.TZ x730 = x27 * 0x2;
-Tbase Syntax.TZ x731 = x15 * x730;
-Tbase Syntax.TZ x732 = x26 * 0x2;
-Tbase Syntax.TZ x733 = x16 * x732;
-Tbase Syntax.TZ x734 = x25 * 0x2;
-Tbase Syntax.TZ x735 = x17 * x734;
-Tbase Syntax.TZ x736 = x18 * x24;
-Tbase Syntax.TZ x737 = x735 + x736;
-Tbase Syntax.TZ x738 = x733 + x737;
-Tbase Syntax.TZ x739 = x731 + x738;
-Tbase Syntax.TZ x740 = x729 + x739;
-Tbase Syntax.TZ x741 = x727 + x740;
-Tbase Syntax.TZ x742 = x725 + x741;
-Tbase Syntax.TZ x743 = x723 + x742;
-Tbase Syntax.TZ x744 = x721 + x743;
-Tbase Syntax.TZ x745 = x719 + x744;
-Tbase Syntax.TZ x746 = x717 + x745;
-Tbase Syntax.TZ x747 = x715 + x746;
-Tbase Syntax.TZ x748 = x713 + x747;
-Tbase Syntax.TZ x749 = x711 + x748;
-Tbase Syntax.TZ x750 = x709 + x749;
-Tbase Syntax.TZ x751 = x * x23;
-Tbase Syntax.TZ x752 = x0 * x22;
-Tbase Syntax.TZ x753 = x1 * x21;
-Tbase Syntax.TZ x754 = x2 * x20;
-Tbase Syntax.TZ x755 = x3 * x19;
-Tbase Syntax.TZ x756 = x754 + x755;
-Tbase Syntax.TZ x757 = x753 + x756;
-Tbase Syntax.TZ x758 = x752 + x757;
-Tbase Syntax.TZ x759 = x751 + x758;
-Tbase Syntax.TZ x760 = x750 + x759;
-Tbase Syntax.TZ x761 = x708 + x760;
-Tbase Syntax.TZ x762 = x761 >> 0x1a;
-Tbase Syntax.TZ x763 = x3 * x38;
-Tbase Syntax.TZ x764 = x37 * 0x2;
-Tbase Syntax.TZ x765 = x4 * x764;
-Tbase Syntax.TZ x766 = x36 * 0x2;
-Tbase Syntax.TZ x767 = x5 * x766;
-Tbase Syntax.TZ x768 = x35 * 0x2;
-Tbase Syntax.TZ x769 = x6 * x768;
-Tbase Syntax.TZ x770 = x34 * 0x2;
-Tbase Syntax.TZ x771 = x7 * x770;
-Tbase Syntax.TZ x772 = x33 * 0x2;
-Tbase Syntax.TZ x773 = x8 * x772;
-Tbase Syntax.TZ x774 = x32 * 0x2;
-Tbase Syntax.TZ x775 = x9 * x774;
-Tbase Syntax.TZ x776 = x31 * 0x2;
-Tbase Syntax.TZ x777 = x10 * x776;
-Tbase Syntax.TZ x778 = x30 * 0x2;
-Tbase Syntax.TZ x779 = x11 * x778;
-Tbase Syntax.TZ x780 = x29 * 0x2;
-Tbase Syntax.TZ x781 = x12 * x780;
-Tbase Syntax.TZ x782 = x28 * 0x2;
-Tbase Syntax.TZ x783 = x13 * x782;
-Tbase Syntax.TZ x784 = x27 * 0x2;
-Tbase Syntax.TZ x785 = x14 * x784;
-Tbase Syntax.TZ x786 = x26 * 0x2;
-Tbase Syntax.TZ x787 = x15 * x786;
-Tbase Syntax.TZ x788 = x25 * 0x2;
-Tbase Syntax.TZ x789 = x16 * x788;
-Tbase Syntax.TZ x790 = x24 * 0x2;
-Tbase Syntax.TZ x791 = x17 * x790;
-Tbase Syntax.TZ x792 = x18 * x23;
-Tbase Syntax.TZ x793 = x791 + x792;
-Tbase Syntax.TZ x794 = x789 + x793;
-Tbase Syntax.TZ x795 = x787 + x794;
-Tbase Syntax.TZ x796 = x785 + x795;
-Tbase Syntax.TZ x797 = x783 + x796;
-Tbase Syntax.TZ x798 = x781 + x797;
-Tbase Syntax.TZ x799 = x779 + x798;
-Tbase Syntax.TZ x800 = x777 + x799;
-Tbase Syntax.TZ x801 = x775 + x800;
-Tbase Syntax.TZ x802 = x773 + x801;
-Tbase Syntax.TZ x803 = x771 + x802;
-Tbase Syntax.TZ x804 = x769 + x803;
-Tbase Syntax.TZ x805 = x767 + x804;
-Tbase Syntax.TZ x806 = x765 + x805;
-Tbase Syntax.TZ x807 = x763 + x806;
-Tbase Syntax.TZ x808 = x * x22;
-Tbase Syntax.TZ x809 = x0 * x21;
-Tbase Syntax.TZ x810 = x1 * x20;
-Tbase Syntax.TZ x811 = x2 * x19;
-Tbase Syntax.TZ x812 = x810 + x811;
-Tbase Syntax.TZ x813 = x809 + x812;
-Tbase Syntax.TZ x814 = x808 + x813;
-Tbase Syntax.TZ x815 = x807 + x814;
-Tbase Syntax.TZ x816 = x762 + x815;
-Tbase Syntax.TZ x817 = x816 >> 0x1a;
-Tbase Syntax.TZ x818 = x2 * x38;
-Tbase Syntax.TZ x819 = x37 * 0x2;
-Tbase Syntax.TZ x820 = x3 * x819;
-Tbase Syntax.TZ x821 = x36 * 0x2;
-Tbase Syntax.TZ x822 = x4 * x821;
-Tbase Syntax.TZ x823 = x35 * 0x2;
-Tbase Syntax.TZ x824 = x5 * x823;
-Tbase Syntax.TZ x825 = x34 * 0x2;
-Tbase Syntax.TZ x826 = x6 * x825;
-Tbase Syntax.TZ x827 = x33 * 0x2;
-Tbase Syntax.TZ x828 = x7 * x827;
-Tbase Syntax.TZ x829 = x32 * 0x2;
-Tbase Syntax.TZ x830 = x8 * x829;
-Tbase Syntax.TZ x831 = x31 * 0x2;
-Tbase Syntax.TZ x832 = x9 * x831;
-Tbase Syntax.TZ x833 = x30 * 0x2;
-Tbase Syntax.TZ x834 = x10 * x833;
-Tbase Syntax.TZ x835 = x29 * 0x2;
-Tbase Syntax.TZ x836 = x11 * x835;
-Tbase Syntax.TZ x837 = x28 * 0x2;
-Tbase Syntax.TZ x838 = x12 * x837;
-Tbase Syntax.TZ x839 = x27 * 0x2;
-Tbase Syntax.TZ x840 = x13 * x839;
-Tbase Syntax.TZ x841 = x26 * 0x2;
-Tbase Syntax.TZ x842 = x14 * x841;
-Tbase Syntax.TZ x843 = x25 * 0x2;
-Tbase Syntax.TZ x844 = x15 * x843;
-Tbase Syntax.TZ x845 = x24 * 0x2;
-Tbase Syntax.TZ x846 = x16 * x845;
-Tbase Syntax.TZ x847 = x23 * 0x2;
-Tbase Syntax.TZ x848 = x17 * x847;
-Tbase Syntax.TZ x849 = x18 * x22;
-Tbase Syntax.TZ x850 = x848 + x849;
-Tbase Syntax.TZ x851 = x846 + x850;
-Tbase Syntax.TZ x852 = x844 + x851;
-Tbase Syntax.TZ x853 = x842 + x852;
-Tbase Syntax.TZ x854 = x840 + x853;
-Tbase Syntax.TZ x855 = x838 + x854;
-Tbase Syntax.TZ x856 = x836 + x855;
-Tbase Syntax.TZ x857 = x834 + x856;
-Tbase Syntax.TZ x858 = x832 + x857;
-Tbase Syntax.TZ x859 = x830 + x858;
-Tbase Syntax.TZ x860 = x828 + x859;
-Tbase Syntax.TZ x861 = x826 + x860;
-Tbase Syntax.TZ x862 = x824 + x861;
-Tbase Syntax.TZ x863 = x822 + x862;
-Tbase Syntax.TZ x864 = x820 + x863;
-Tbase Syntax.TZ x865 = x818 + x864;
-Tbase Syntax.TZ x866 = x * x21;
-Tbase Syntax.TZ x867 = x0 * x20;
-Tbase Syntax.TZ x868 = x1 * x19;
-Tbase Syntax.TZ x869 = x867 + x868;
-Tbase Syntax.TZ x870 = x866 + x869;
-Tbase Syntax.TZ x871 = x865 + x870;
-Tbase Syntax.TZ x872 = x817 + x871;
-Tbase Syntax.TZ x873 = x872 >> 0x1a;
-Tbase Syntax.TZ x874 = x1 * x38;
-Tbase Syntax.TZ x875 = x37 * 0x2;
-Tbase Syntax.TZ x876 = x2 * x875;
-Tbase Syntax.TZ x877 = x36 * 0x2;
-Tbase Syntax.TZ x878 = x3 * x877;
-Tbase Syntax.TZ x879 = x35 * 0x2;
-Tbase Syntax.TZ x880 = x4 * x879;
-Tbase Syntax.TZ x881 = x34 * 0x2;
-Tbase Syntax.TZ x882 = x5 * x881;
-Tbase Syntax.TZ x883 = x33 * 0x2;
-Tbase Syntax.TZ x884 = x6 * x883;
-Tbase Syntax.TZ x885 = x32 * 0x2;
-Tbase Syntax.TZ x886 = x7 * x885;
-Tbase Syntax.TZ x887 = x31 * 0x2;
-Tbase Syntax.TZ x888 = x8 * x887;
-Tbase Syntax.TZ x889 = x30 * 0x2;
-Tbase Syntax.TZ x890 = x9 * x889;
-Tbase Syntax.TZ x891 = x29 * 0x2;
-Tbase Syntax.TZ x892 = x10 * x891;
-Tbase Syntax.TZ x893 = x28 * 0x2;
-Tbase Syntax.TZ x894 = x11 * x893;
-Tbase Syntax.TZ x895 = x27 * 0x2;
-Tbase Syntax.TZ x896 = x12 * x895;
-Tbase Syntax.TZ x897 = x26 * 0x2;
-Tbase Syntax.TZ x898 = x13 * x897;
-Tbase Syntax.TZ x899 = x25 * 0x2;
-Tbase Syntax.TZ x900 = x14 * x899;
-Tbase Syntax.TZ x901 = x24 * 0x2;
-Tbase Syntax.TZ x902 = x15 * x901;
-Tbase Syntax.TZ x903 = x23 * 0x2;
-Tbase Syntax.TZ x904 = x16 * x903;
-Tbase Syntax.TZ x905 = x22 * 0x2;
-Tbase Syntax.TZ x906 = x17 * x905;
-Tbase Syntax.TZ x907 = x18 * x21;
-Tbase Syntax.TZ x908 = x906 + x907;
-Tbase Syntax.TZ x909 = x904 + x908;
-Tbase Syntax.TZ x910 = x902 + x909;
-Tbase Syntax.TZ x911 = x900 + x910;
-Tbase Syntax.TZ x912 = x898 + x911;
-Tbase Syntax.TZ x913 = x896 + x912;
-Tbase Syntax.TZ x914 = x894 + x913;
-Tbase Syntax.TZ x915 = x892 + x914;
-Tbase Syntax.TZ x916 = x890 + x915;
-Tbase Syntax.TZ x917 = x888 + x916;
-Tbase Syntax.TZ x918 = x886 + x917;
-Tbase Syntax.TZ x919 = x884 + x918;
-Tbase Syntax.TZ x920 = x882 + x919;
-Tbase Syntax.TZ x921 = x880 + x920;
-Tbase Syntax.TZ x922 = x878 + x921;
-Tbase Syntax.TZ x923 = x876 + x922;
-Tbase Syntax.TZ x924 = x874 + x923;
-Tbase Syntax.TZ x925 = x * x20;
-Tbase Syntax.TZ x926 = x0 * x19;
-Tbase Syntax.TZ x927 = x925 + x926;
-Tbase Syntax.TZ x928 = x924 + x927;
-Tbase Syntax.TZ x929 = x873 + x928;
-Tbase Syntax.TZ x930 = x929 >> 0x1a;
-Tbase Syntax.TZ x931 = x0 * x38;
-Tbase Syntax.TZ x932 = x37 * 0x2;
-Tbase Syntax.TZ x933 = x1 * x932;
-Tbase Syntax.TZ x934 = x36 * 0x2;
-Tbase Syntax.TZ x935 = x2 * x934;
-Tbase Syntax.TZ x936 = x35 * 0x2;
-Tbase Syntax.TZ x937 = x3 * x936;
-Tbase Syntax.TZ x938 = x34 * 0x2;
-Tbase Syntax.TZ x939 = x4 * x938;
-Tbase Syntax.TZ x940 = x33 * 0x2;
-Tbase Syntax.TZ x941 = x5 * x940;
-Tbase Syntax.TZ x942 = x32 * 0x2;
-Tbase Syntax.TZ x943 = x6 * x942;
-Tbase Syntax.TZ x944 = x31 * 0x2;
-Tbase Syntax.TZ x945 = x7 * x944;
-Tbase Syntax.TZ x946 = x30 * 0x2;
-Tbase Syntax.TZ x947 = x8 * x946;
-Tbase Syntax.TZ x948 = x29 * 0x2;
-Tbase Syntax.TZ x949 = x9 * x948;
-Tbase Syntax.TZ x950 = x28 * 0x2;
-Tbase Syntax.TZ x951 = x10 * x950;
-Tbase Syntax.TZ x952 = x27 * 0x2;
-Tbase Syntax.TZ x953 = x11 * x952;
-Tbase Syntax.TZ x954 = x26 * 0x2;
-Tbase Syntax.TZ x955 = x12 * x954;
-Tbase Syntax.TZ x956 = x25 * 0x2;
-Tbase Syntax.TZ x957 = x13 * x956;
-Tbase Syntax.TZ x958 = x24 * 0x2;
-Tbase Syntax.TZ x959 = x14 * x958;
-Tbase Syntax.TZ x960 = x23 * 0x2;
-Tbase Syntax.TZ x961 = x15 * x960;
-Tbase Syntax.TZ x962 = x22 * 0x2;
-Tbase Syntax.TZ x963 = x16 * x962;
-Tbase Syntax.TZ x964 = x21 * 0x2;
-Tbase Syntax.TZ x965 = x17 * x964;
-Tbase Syntax.TZ x966 = x18 * x20;
-Tbase Syntax.TZ x967 = x965 + x966;
-Tbase Syntax.TZ x968 = x963 + x967;
-Tbase Syntax.TZ x969 = x961 + x968;
-Tbase Syntax.TZ x970 = x959 + x969;
-Tbase Syntax.TZ x971 = x957 + x970;
-Tbase Syntax.TZ x972 = x955 + x971;
-Tbase Syntax.TZ x973 = x953 + x972;
-Tbase Syntax.TZ x974 = x951 + x973;
-Tbase Syntax.TZ x975 = x949 + x974;
-Tbase Syntax.TZ x976 = x947 + x975;
-Tbase Syntax.TZ x977 = x945 + x976;
-Tbase Syntax.TZ x978 = x943 + x977;
-Tbase Syntax.TZ x979 = x941 + x978;
-Tbase Syntax.TZ x980 = x939 + x979;
-Tbase Syntax.TZ x981 = x937 + x980;
-Tbase Syntax.TZ x982 = x935 + x981;
-Tbase Syntax.TZ x983 = x933 + x982;
-Tbase Syntax.TZ x984 = x931 + x983;
-Tbase Syntax.TZ x985 = x * x19;
-Tbase Syntax.TZ x986 = x984 + x985;
-Tbase Syntax.TZ x987 = x930 + x986;
-Tbase Syntax.TZ x988 = x987 >> 0x1a;
-Tbase Syntax.TZ x989 = x * x38;
-Tbase Syntax.TZ x990 = x37 * 0x2;
-Tbase Syntax.TZ x991 = x0 * x990;
-Tbase Syntax.TZ x992 = x36 * 0x2;
-Tbase Syntax.TZ x993 = x1 * x992;
-Tbase Syntax.TZ x994 = x35 * 0x2;
-Tbase Syntax.TZ x995 = x2 * x994;
-Tbase Syntax.TZ x996 = x34 * 0x2;
-Tbase Syntax.TZ x997 = x3 * x996;
-Tbase Syntax.TZ x998 = x33 * 0x2;
-Tbase Syntax.TZ x999 = x4 * x998;
-Tbase Syntax.TZ x1000 = x32 * 0x2;
-Tbase Syntax.TZ x1001 = x5 * x1000;
-Tbase Syntax.TZ x1002 = x31 * 0x2;
-Tbase Syntax.TZ x1003 = x6 * x1002;
-Tbase Syntax.TZ x1004 = x30 * 0x2;
-Tbase Syntax.TZ x1005 = x7 * x1004;
-Tbase Syntax.TZ x1006 = x29 * 0x2;
-Tbase Syntax.TZ x1007 = x8 * x1006;
-Tbase Syntax.TZ x1008 = x28 * 0x2;
-Tbase Syntax.TZ x1009 = x9 * x1008;
-Tbase Syntax.TZ x1010 = x27 * 0x2;
-Tbase Syntax.TZ x1011 = x10 * x1010;
-Tbase Syntax.TZ x1012 = x26 * 0x2;
-Tbase Syntax.TZ x1013 = x11 * x1012;
-Tbase Syntax.TZ x1014 = x25 * 0x2;
-Tbase Syntax.TZ x1015 = x12 * x1014;
-Tbase Syntax.TZ x1016 = x24 * 0x2;
-Tbase Syntax.TZ x1017 = x13 * x1016;
-Tbase Syntax.TZ x1018 = x23 * 0x2;
-Tbase Syntax.TZ x1019 = x14 * x1018;
-Tbase Syntax.TZ x1020 = x22 * 0x2;
-Tbase Syntax.TZ x1021 = x15 * x1020;
-Tbase Syntax.TZ x1022 = x21 * 0x2;
-Tbase Syntax.TZ x1023 = x16 * x1022;
-Tbase Syntax.TZ x1024 = x20 * 0x2;
-Tbase Syntax.TZ x1025 = x17 * x1024;
-Tbase Syntax.TZ x1026 = x18 * x19;
-Tbase Syntax.TZ x1027 = x1025 + x1026;
-Tbase Syntax.TZ x1028 = x1023 + x1027;
-Tbase Syntax.TZ x1029 = x1021 + x1028;
-Tbase Syntax.TZ x1030 = x1019 + x1029;
-Tbase Syntax.TZ x1031 = x1017 + x1030;
-Tbase Syntax.TZ x1032 = x1015 + x1031;
-Tbase Syntax.TZ x1033 = x1013 + x1032;
-Tbase Syntax.TZ x1034 = x1011 + x1033;
-Tbase Syntax.TZ x1035 = x1009 + x1034;
-Tbase Syntax.TZ x1036 = x1007 + x1035;
-Tbase Syntax.TZ x1037 = x1005 + x1036;
-Tbase Syntax.TZ x1038 = x1003 + x1037;
-Tbase Syntax.TZ x1039 = x1001 + x1038;
-Tbase Syntax.TZ x1040 = x999 + x1039;
-Tbase Syntax.TZ x1041 = x997 + x1040;
-Tbase Syntax.TZ x1042 = x995 + x1041;
-Tbase Syntax.TZ x1043 = x993 + x1042;
-Tbase Syntax.TZ x1044 = x991 + x1043;
-Tbase Syntax.TZ x1045 = x989 + x1044;
-Tbase Syntax.TZ x1046 = x988 + x1045;
-Tbase Syntax.TZ x1047 = x1046 >> 0x1a;
-Tbase Syntax.TZ x1048 = Const 1 * x1047;
-Tbase Syntax.TZ x1049 = x96 & 0x7ffffff;
-Tbase Syntax.TZ x1050 = x1048 + x1049;
-Tbase Syntax.TZ x1051 = x1050 >> 0x1b;
-Tbase Syntax.TZ x1052 = x137 & 0x3ffffff;
-Tbase Syntax.TZ x1053 = x1051 + x1052;
-Tbase Syntax.TZ x1054 = x1046 & 0x3ffffff;
-Tbase Syntax.TZ x1055 = x987 & 0x3ffffff;
-Tbase Syntax.TZ x1056 = x929 & 0x3ffffff;
-Tbase Syntax.TZ x1057 = x872 & 0x3ffffff;
-Tbase Syntax.TZ x1058 = x816 & 0x3ffffff;
-Tbase Syntax.TZ x1059 = x761 & 0x3ffffff;
-Tbase Syntax.TZ x1060 = x707 & 0x3ffffff;
-Tbase Syntax.TZ x1061 = x654 & 0x3ffffff;
-Tbase Syntax.TZ x1062 = x602 & 0x3ffffff;
-Tbase Syntax.TZ x1063 = x551 & 0x3ffffff;
-Tbase Syntax.TZ x1064 = x501 & 0x3ffffff;
-Tbase Syntax.TZ x1065 = x452 & 0x3ffffff;
-Tbase Syntax.TZ x1066 = x404 & 0x3ffffff;
-Tbase Syntax.TZ x1067 = x357 & 0x3ffffff;
-Tbase Syntax.TZ x1068 = x311 & 0x3ffffff;
-Tbase Syntax.TZ x1069 = x266 & 0x3ffffff;
-Tbase Syntax.TZ x1070 = x222 & 0x3ffffff;
-Tbase Syntax.TZ x1071 = x1053 >> 0x1a;
-Tbase Syntax.TZ x1072 = x179 & 0x3ffffff;
-Tbase Syntax.TZ x1073 = x1071 + x1072;
-Tbase Syntax.TZ x1074 = x1053 & 0x3ffffff;
-Tbase Syntax.TZ x1075 = x1050 & 0x7ffffff;
-(Return x1054, Return x1055, Return x1056, Return x1057,
-Return x1058, Return x1059, Return x1060, Return x1061,
-Return x1062, Return x1063, Return x1064, Return x1065,
-Return x1066, Return x1067, Return x1068, Return x1069,
-Return x1070, Return x1073, Return x1074, Return x1075)
- : forall var : Syntax.base_type -> Type,
- expr Syntax.base_type Syntax.op
- (Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- ... * ... * Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF5211_32Reflective/Reified/MulDisplay.v b/src/SpecificGen/GF5211_32Reflective/Reified/MulDisplay.v
deleted file mode 100644
index 43f08dbbb..000000000
--- a/src/SpecificGen/GF5211_32Reflective/Reified/MulDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF5211_32Reflective.Reified.Mul.
-Require Export Crypto.Reflection.Z.CNotations.
-
-Print rmulW.
diff --git a/src/SpecificGen/GF5211_32Reflective/Reified/MulJavaDisplay.log b/src/SpecificGen/GF5211_32Reflective/Reified/MulJavaDisplay.log
deleted file mode 100644
index 8b07afe7f..000000000
--- a/src/SpecificGen/GF5211_32Reflective/Reified/MulJavaDisplay.log
+++ /dev/null
@@ -1,1093 +0,0 @@
-rmulW =
-fun var : Syntax.base_type -> Type =>
-λ
-x x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20
- x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31 x32 x33 x34 x35 x36 x37
- x38 : var Syntax.TZ,
-Tbase Syntax.TZ x39 = x18 * x38;
-Tbase Syntax.TZ x40 = x37 * 0x2;
-Tbase Syntax.TZ x41 = x * x40;
-Tbase Syntax.TZ x42 = x36 * 0x2;
-Tbase Syntax.TZ x43 = x0 * x42;
-Tbase Syntax.TZ x44 = x35 * 0x2;
-Tbase Syntax.TZ x45 = x1 * x44;
-Tbase Syntax.TZ x46 = x34 * 0x2;
-Tbase Syntax.TZ x47 = x2 * x46;
-Tbase Syntax.TZ x48 = x33 * 0x2;
-Tbase Syntax.TZ x49 = x3 * x48;
-Tbase Syntax.TZ x50 = x32 * 0x2;
-Tbase Syntax.TZ x51 = x4 * x50;
-Tbase Syntax.TZ x52 = x31 * 0x2;
-Tbase Syntax.TZ x53 = x5 * x52;
-Tbase Syntax.TZ x54 = x30 * 0x2;
-Tbase Syntax.TZ x55 = x6 * x54;
-Tbase Syntax.TZ x56 = x29 * 0x2;
-Tbase Syntax.TZ x57 = x7 * x56;
-Tbase Syntax.TZ x58 = x28 * 0x2;
-Tbase Syntax.TZ x59 = x8 * x58;
-Tbase Syntax.TZ x60 = x27 * 0x2;
-Tbase Syntax.TZ x61 = x9 * x60;
-Tbase Syntax.TZ x62 = x26 * 0x2;
-Tbase Syntax.TZ x63 = x10 * x62;
-Tbase Syntax.TZ x64 = x25 * 0x2;
-Tbase Syntax.TZ x65 = x11 * x64;
-Tbase Syntax.TZ x66 = x24 * 0x2;
-Tbase Syntax.TZ x67 = x12 * x66;
-Tbase Syntax.TZ x68 = x23 * 0x2;
-Tbase Syntax.TZ x69 = x13 * x68;
-Tbase Syntax.TZ x70 = x22 * 0x2;
-Tbase Syntax.TZ x71 = x14 * x70;
-Tbase Syntax.TZ x72 = x21 * 0x2;
-Tbase Syntax.TZ x73 = x15 * x72;
-Tbase Syntax.TZ x74 = x20 * 0x2;
-Tbase Syntax.TZ x75 = x16 * x74;
-Tbase Syntax.TZ x76 = x19 * 0x2;
-Tbase Syntax.TZ x77 = x17 * x76;
-Tbase Syntax.TZ x78 = x75 + x77;
-Tbase Syntax.TZ x79 = x73 + x78;
-Tbase Syntax.TZ x80 = x71 + x79;
-Tbase Syntax.TZ x81 = x69 + x80;
-Tbase Syntax.TZ x82 = x67 + x81;
-Tbase Syntax.TZ x83 = x65 + x82;
-Tbase Syntax.TZ x84 = x63 + x83;
-Tbase Syntax.TZ x85 = x61 + x84;
-Tbase Syntax.TZ x86 = x59 + x85;
-Tbase Syntax.TZ x87 = x57 + x86;
-Tbase Syntax.TZ x88 = x55 + x87;
-Tbase Syntax.TZ x89 = x53 + x88;
-Tbase Syntax.TZ x90 = x51 + x89;
-Tbase Syntax.TZ x91 = x49 + x90;
-Tbase Syntax.TZ x92 = x47 + x91;
-Tbase Syntax.TZ x93 = x45 + x92;
-Tbase Syntax.TZ x94 = x43 + x93;
-Tbase Syntax.TZ x95 = x41 + x94;
-Tbase Syntax.TZ x96 = x39 + x95;
-Tbase Syntax.TZ x97 = x96 >>> 0x1b;
-Tbase Syntax.TZ x98 = x17 * x38;
-Tbase Syntax.TZ x99 = x18 * x37;
-Tbase Syntax.TZ x100 = x98 + x99;
-Tbase Syntax.TZ x101 = x * x36;
-Tbase Syntax.TZ x102 = x0 * x35;
-Tbase Syntax.TZ x103 = x1 * x34;
-Tbase Syntax.TZ x104 = x2 * x33;
-Tbase Syntax.TZ x105 = x3 * x32;
-Tbase Syntax.TZ x106 = x4 * x31;
-Tbase Syntax.TZ x107 = x5 * x30;
-Tbase Syntax.TZ x108 = x6 * x29;
-Tbase Syntax.TZ x109 = x7 * x28;
-Tbase Syntax.TZ x110 = x8 * x27;
-Tbase Syntax.TZ x111 = x9 * x26;
-Tbase Syntax.TZ x112 = x10 * x25;
-Tbase Syntax.TZ x113 = x11 * x24;
-Tbase Syntax.TZ x114 = x12 * x23;
-Tbase Syntax.TZ x115 = x13 * x22;
-Tbase Syntax.TZ x116 = x14 * x21;
-Tbase Syntax.TZ x117 = x15 * x20;
-Tbase Syntax.TZ x118 = x16 * x19;
-Tbase Syntax.TZ x119 = x117 + x118;
-Tbase Syntax.TZ x120 = x116 + x119;
-Tbase Syntax.TZ x121 = x115 + x120;
-Tbase Syntax.TZ x122 = x114 + x121;
-Tbase Syntax.TZ x123 = x113 + x122;
-Tbase Syntax.TZ x124 = x112 + x123;
-Tbase Syntax.TZ x125 = x111 + x124;
-Tbase Syntax.TZ x126 = x110 + x125;
-Tbase Syntax.TZ x127 = x109 + x126;
-Tbase Syntax.TZ x128 = x108 + x127;
-Tbase Syntax.TZ x129 = x107 + x128;
-Tbase Syntax.TZ x130 = x106 + x129;
-Tbase Syntax.TZ x131 = x105 + x130;
-Tbase Syntax.TZ x132 = x104 + x131;
-Tbase Syntax.TZ x133 = x103 + x132;
-Tbase Syntax.TZ x134 = x102 + x133;
-Tbase Syntax.TZ x135 = x101 + x134;
-Tbase Syntax.TZ x136 = x100 + x135;
-Tbase Syntax.TZ x137 = x97 + x136;
-Tbase Syntax.TZ x138 = x137 >>> 0x1a;
-Tbase Syntax.TZ x139 = x16 * x38;
-Tbase Syntax.TZ x140 = x37 * 0x2;
-Tbase Syntax.TZ x141 = x17 * x140;
-Tbase Syntax.TZ x142 = x18 * x36;
-Tbase Syntax.TZ x143 = x141 + x142;
-Tbase Syntax.TZ x144 = x139 + x143;
-Tbase Syntax.TZ x145 = x * x35;
-Tbase Syntax.TZ x146 = x0 * x34;
-Tbase Syntax.TZ x147 = x1 * x33;
-Tbase Syntax.TZ x148 = x2 * x32;
-Tbase Syntax.TZ x149 = x3 * x31;
-Tbase Syntax.TZ x150 = x4 * x30;
-Tbase Syntax.TZ x151 = x5 * x29;
-Tbase Syntax.TZ x152 = x6 * x28;
-Tbase Syntax.TZ x153 = x7 * x27;
-Tbase Syntax.TZ x154 = x8 * x26;
-Tbase Syntax.TZ x155 = x9 * x25;
-Tbase Syntax.TZ x156 = x10 * x24;
-Tbase Syntax.TZ x157 = x11 * x23;
-Tbase Syntax.TZ x158 = x12 * x22;
-Tbase Syntax.TZ x159 = x13 * x21;
-Tbase Syntax.TZ x160 = x14 * x20;
-Tbase Syntax.TZ x161 = x15 * x19;
-Tbase Syntax.TZ x162 = x160 + x161;
-Tbase Syntax.TZ x163 = x159 + x162;
-Tbase Syntax.TZ x164 = x158 + x163;
-Tbase Syntax.TZ x165 = x157 + x164;
-Tbase Syntax.TZ x166 = x156 + x165;
-Tbase Syntax.TZ x167 = x155 + x166;
-Tbase Syntax.TZ x168 = x154 + x167;
-Tbase Syntax.TZ x169 = x153 + x168;
-Tbase Syntax.TZ x170 = x152 + x169;
-Tbase Syntax.TZ x171 = x151 + x170;
-Tbase Syntax.TZ x172 = x150 + x171;
-Tbase Syntax.TZ x173 = x149 + x172;
-Tbase Syntax.TZ x174 = x148 + x173;
-Tbase Syntax.TZ x175 = x147 + x174;
-Tbase Syntax.TZ x176 = x146 + x175;
-Tbase Syntax.TZ x177 = x145 + x176;
-Tbase Syntax.TZ x178 = x144 + x177;
-Tbase Syntax.TZ x179 = x138 + x178;
-Tbase Syntax.TZ x180 = x179 >>> 0x1a;
-Tbase Syntax.TZ x181 = x15 * x38;
-Tbase Syntax.TZ x182 = x37 * 0x2;
-Tbase Syntax.TZ x183 = x16 * x182;
-Tbase Syntax.TZ x184 = x36 * 0x2;
-Tbase Syntax.TZ x185 = x17 * x184;
-Tbase Syntax.TZ x186 = x18 * x35;
-Tbase Syntax.TZ x187 = x185 + x186;
-Tbase Syntax.TZ x188 = x183 + x187;
-Tbase Syntax.TZ x189 = x181 + x188;
-Tbase Syntax.TZ x190 = x * x34;
-Tbase Syntax.TZ x191 = x0 * x33;
-Tbase Syntax.TZ x192 = x1 * x32;
-Tbase Syntax.TZ x193 = x2 * x31;
-Tbase Syntax.TZ x194 = x3 * x30;
-Tbase Syntax.TZ x195 = x4 * x29;
-Tbase Syntax.TZ x196 = x5 * x28;
-Tbase Syntax.TZ x197 = x6 * x27;
-Tbase Syntax.TZ x198 = x7 * x26;
-Tbase Syntax.TZ x199 = x8 * x25;
-Tbase Syntax.TZ x200 = x9 * x24;
-Tbase Syntax.TZ x201 = x10 * x23;
-Tbase Syntax.TZ x202 = x11 * x22;
-Tbase Syntax.TZ x203 = x12 * x21;
-Tbase Syntax.TZ x204 = x13 * x20;
-Tbase Syntax.TZ x205 = x14 * x19;
-Tbase Syntax.TZ x206 = x204 + x205;
-Tbase Syntax.TZ x207 = x203 + x206;
-Tbase Syntax.TZ x208 = x202 + x207;
-Tbase Syntax.TZ x209 = x201 + x208;
-Tbase Syntax.TZ x210 = x200 + x209;
-Tbase Syntax.TZ x211 = x199 + x210;
-Tbase Syntax.TZ x212 = x198 + x211;
-Tbase Syntax.TZ x213 = x197 + x212;
-Tbase Syntax.TZ x214 = x196 + x213;
-Tbase Syntax.TZ x215 = x195 + x214;
-Tbase Syntax.TZ x216 = x194 + x215;
-Tbase Syntax.TZ x217 = x193 + x216;
-Tbase Syntax.TZ x218 = x192 + x217;
-Tbase Syntax.TZ x219 = x191 + x218;
-Tbase Syntax.TZ x220 = x190 + x219;
-Tbase Syntax.TZ x221 = x189 + x220;
-Tbase Syntax.TZ x222 = x180 + x221;
-Tbase Syntax.TZ x223 = x222 >>> 0x1a;
-Tbase Syntax.TZ x224 = x14 * x38;
-Tbase Syntax.TZ x225 = x37 * 0x2;
-Tbase Syntax.TZ x226 = x15 * x225;
-Tbase Syntax.TZ x227 = x36 * 0x2;
-Tbase Syntax.TZ x228 = x16 * x227;
-Tbase Syntax.TZ x229 = x35 * 0x2;
-Tbase Syntax.TZ x230 = x17 * x229;
-Tbase Syntax.TZ x231 = x18 * x34;
-Tbase Syntax.TZ x232 = x230 + x231;
-Tbase Syntax.TZ x233 = x228 + x232;
-Tbase Syntax.TZ x234 = x226 + x233;
-Tbase Syntax.TZ x235 = x224 + x234;
-Tbase Syntax.TZ x236 = x * x33;
-Tbase Syntax.TZ x237 = x0 * x32;
-Tbase Syntax.TZ x238 = x1 * x31;
-Tbase Syntax.TZ x239 = x2 * x30;
-Tbase Syntax.TZ x240 = x3 * x29;
-Tbase Syntax.TZ x241 = x4 * x28;
-Tbase Syntax.TZ x242 = x5 * x27;
-Tbase Syntax.TZ x243 = x6 * x26;
-Tbase Syntax.TZ x244 = x7 * x25;
-Tbase Syntax.TZ x245 = x8 * x24;
-Tbase Syntax.TZ x246 = x9 * x23;
-Tbase Syntax.TZ x247 = x10 * x22;
-Tbase Syntax.TZ x248 = x11 * x21;
-Tbase Syntax.TZ x249 = x12 * x20;
-Tbase Syntax.TZ x250 = x13 * x19;
-Tbase Syntax.TZ x251 = x249 + x250;
-Tbase Syntax.TZ x252 = x248 + x251;
-Tbase Syntax.TZ x253 = x247 + x252;
-Tbase Syntax.TZ x254 = x246 + x253;
-Tbase Syntax.TZ x255 = x245 + x254;
-Tbase Syntax.TZ x256 = x244 + x255;
-Tbase Syntax.TZ x257 = x243 + x256;
-Tbase Syntax.TZ x258 = x242 + x257;
-Tbase Syntax.TZ x259 = x241 + x258;
-Tbase Syntax.TZ x260 = x240 + x259;
-Tbase Syntax.TZ x261 = x239 + x260;
-Tbase Syntax.TZ x262 = x238 + x261;
-Tbase Syntax.TZ x263 = x237 + x262;
-Tbase Syntax.TZ x264 = x236 + x263;
-Tbase Syntax.TZ x265 = x235 + x264;
-Tbase Syntax.TZ x266 = x223 + x265;
-Tbase Syntax.TZ x267 = x266 >>> 0x1a;
-Tbase Syntax.TZ x268 = x13 * x38;
-Tbase Syntax.TZ x269 = x37 * 0x2;
-Tbase Syntax.TZ x270 = x14 * x269;
-Tbase Syntax.TZ x271 = x36 * 0x2;
-Tbase Syntax.TZ x272 = x15 * x271;
-Tbase Syntax.TZ x273 = x35 * 0x2;
-Tbase Syntax.TZ x274 = x16 * x273;
-Tbase Syntax.TZ x275 = x34 * 0x2;
-Tbase Syntax.TZ x276 = x17 * x275;
-Tbase Syntax.TZ x277 = x18 * x33;
-Tbase Syntax.TZ x278 = x276 + x277;
-Tbase Syntax.TZ x279 = x274 + x278;
-Tbase Syntax.TZ x280 = x272 + x279;
-Tbase Syntax.TZ x281 = x270 + x280;
-Tbase Syntax.TZ x282 = x268 + x281;
-Tbase Syntax.TZ x283 = x * x32;
-Tbase Syntax.TZ x284 = x0 * x31;
-Tbase Syntax.TZ x285 = x1 * x30;
-Tbase Syntax.TZ x286 = x2 * x29;
-Tbase Syntax.TZ x287 = x3 * x28;
-Tbase Syntax.TZ x288 = x4 * x27;
-Tbase Syntax.TZ x289 = x5 * x26;
-Tbase Syntax.TZ x290 = x6 * x25;
-Tbase Syntax.TZ x291 = x7 * x24;
-Tbase Syntax.TZ x292 = x8 * x23;
-Tbase Syntax.TZ x293 = x9 * x22;
-Tbase Syntax.TZ x294 = x10 * x21;
-Tbase Syntax.TZ x295 = x11 * x20;
-Tbase Syntax.TZ x296 = x12 * x19;
-Tbase Syntax.TZ x297 = x295 + x296;
-Tbase Syntax.TZ x298 = x294 + x297;
-Tbase Syntax.TZ x299 = x293 + x298;
-Tbase Syntax.TZ x300 = x292 + x299;
-Tbase Syntax.TZ x301 = x291 + x300;
-Tbase Syntax.TZ x302 = x290 + x301;
-Tbase Syntax.TZ x303 = x289 + x302;
-Tbase Syntax.TZ x304 = x288 + x303;
-Tbase Syntax.TZ x305 = x287 + x304;
-Tbase Syntax.TZ x306 = x286 + x305;
-Tbase Syntax.TZ x307 = x285 + x306;
-Tbase Syntax.TZ x308 = x284 + x307;
-Tbase Syntax.TZ x309 = x283 + x308;
-Tbase Syntax.TZ x310 = x282 + x309;
-Tbase Syntax.TZ x311 = x267 + x310;
-Tbase Syntax.TZ x312 = x311 >>> 0x1a;
-Tbase Syntax.TZ x313 = x12 * x38;
-Tbase Syntax.TZ x314 = x37 * 0x2;
-Tbase Syntax.TZ x315 = x13 * x314;
-Tbase Syntax.TZ x316 = x36 * 0x2;
-Tbase Syntax.TZ x317 = x14 * x316;
-Tbase Syntax.TZ x318 = x35 * 0x2;
-Tbase Syntax.TZ x319 = x15 * x318;
-Tbase Syntax.TZ x320 = x34 * 0x2;
-Tbase Syntax.TZ x321 = x16 * x320;
-Tbase Syntax.TZ x322 = x33 * 0x2;
-Tbase Syntax.TZ x323 = x17 * x322;
-Tbase Syntax.TZ x324 = x18 * x32;
-Tbase Syntax.TZ x325 = x323 + x324;
-Tbase Syntax.TZ x326 = x321 + x325;
-Tbase Syntax.TZ x327 = x319 + x326;
-Tbase Syntax.TZ x328 = x317 + x327;
-Tbase Syntax.TZ x329 = x315 + x328;
-Tbase Syntax.TZ x330 = x313 + x329;
-Tbase Syntax.TZ x331 = x * x31;
-Tbase Syntax.TZ x332 = x0 * x30;
-Tbase Syntax.TZ x333 = x1 * x29;
-Tbase Syntax.TZ x334 = x2 * x28;
-Tbase Syntax.TZ x335 = x3 * x27;
-Tbase Syntax.TZ x336 = x4 * x26;
-Tbase Syntax.TZ x337 = x5 * x25;
-Tbase Syntax.TZ x338 = x6 * x24;
-Tbase Syntax.TZ x339 = x7 * x23;
-Tbase Syntax.TZ x340 = x8 * x22;
-Tbase Syntax.TZ x341 = x9 * x21;
-Tbase Syntax.TZ x342 = x10 * x20;
-Tbase Syntax.TZ x343 = x11 * x19;
-Tbase Syntax.TZ x344 = x342 + x343;
-Tbase Syntax.TZ x345 = x341 + x344;
-Tbase Syntax.TZ x346 = x340 + x345;
-Tbase Syntax.TZ x347 = x339 + x346;
-Tbase Syntax.TZ x348 = x338 + x347;
-Tbase Syntax.TZ x349 = x337 + x348;
-Tbase Syntax.TZ x350 = x336 + x349;
-Tbase Syntax.TZ x351 = x335 + x350;
-Tbase Syntax.TZ x352 = x334 + x351;
-Tbase Syntax.TZ x353 = x333 + x352;
-Tbase Syntax.TZ x354 = x332 + x353;
-Tbase Syntax.TZ x355 = x331 + x354;
-Tbase Syntax.TZ x356 = x330 + x355;
-Tbase Syntax.TZ x357 = x312 + x356;
-Tbase Syntax.TZ x358 = x357 >>> 0x1a;
-Tbase Syntax.TZ x359 = x11 * x38;
-Tbase Syntax.TZ x360 = x37 * 0x2;
-Tbase Syntax.TZ x361 = x12 * x360;
-Tbase Syntax.TZ x362 = x36 * 0x2;
-Tbase Syntax.TZ x363 = x13 * x362;
-Tbase Syntax.TZ x364 = x35 * 0x2;
-Tbase Syntax.TZ x365 = x14 * x364;
-Tbase Syntax.TZ x366 = x34 * 0x2;
-Tbase Syntax.TZ x367 = x15 * x366;
-Tbase Syntax.TZ x368 = x33 * 0x2;
-Tbase Syntax.TZ x369 = x16 * x368;
-Tbase Syntax.TZ x370 = x32 * 0x2;
-Tbase Syntax.TZ x371 = x17 * x370;
-Tbase Syntax.TZ x372 = x18 * x31;
-Tbase Syntax.TZ x373 = x371 + x372;
-Tbase Syntax.TZ x374 = x369 + x373;
-Tbase Syntax.TZ x375 = x367 + x374;
-Tbase Syntax.TZ x376 = x365 + x375;
-Tbase Syntax.TZ x377 = x363 + x376;
-Tbase Syntax.TZ x378 = x361 + x377;
-Tbase Syntax.TZ x379 = x359 + x378;
-Tbase Syntax.TZ x380 = x * x30;
-Tbase Syntax.TZ x381 = x0 * x29;
-Tbase Syntax.TZ x382 = x1 * x28;
-Tbase Syntax.TZ x383 = x2 * x27;
-Tbase Syntax.TZ x384 = x3 * x26;
-Tbase Syntax.TZ x385 = x4 * x25;
-Tbase Syntax.TZ x386 = x5 * x24;
-Tbase Syntax.TZ x387 = x6 * x23;
-Tbase Syntax.TZ x388 = x7 * x22;
-Tbase Syntax.TZ x389 = x8 * x21;
-Tbase Syntax.TZ x390 = x9 * x20;
-Tbase Syntax.TZ x391 = x10 * x19;
-Tbase Syntax.TZ x392 = x390 + x391;
-Tbase Syntax.TZ x393 = x389 + x392;
-Tbase Syntax.TZ x394 = x388 + x393;
-Tbase Syntax.TZ x395 = x387 + x394;
-Tbase Syntax.TZ x396 = x386 + x395;
-Tbase Syntax.TZ x397 = x385 + x396;
-Tbase Syntax.TZ x398 = x384 + x397;
-Tbase Syntax.TZ x399 = x383 + x398;
-Tbase Syntax.TZ x400 = x382 + x399;
-Tbase Syntax.TZ x401 = x381 + x400;
-Tbase Syntax.TZ x402 = x380 + x401;
-Tbase Syntax.TZ x403 = x379 + x402;
-Tbase Syntax.TZ x404 = x358 + x403;
-Tbase Syntax.TZ x405 = x404 >>> 0x1a;
-Tbase Syntax.TZ x406 = x10 * x38;
-Tbase Syntax.TZ x407 = x37 * 0x2;
-Tbase Syntax.TZ x408 = x11 * x407;
-Tbase Syntax.TZ x409 = x36 * 0x2;
-Tbase Syntax.TZ x410 = x12 * x409;
-Tbase Syntax.TZ x411 = x35 * 0x2;
-Tbase Syntax.TZ x412 = x13 * x411;
-Tbase Syntax.TZ x413 = x34 * 0x2;
-Tbase Syntax.TZ x414 = x14 * x413;
-Tbase Syntax.TZ x415 = x33 * 0x2;
-Tbase Syntax.TZ x416 = x15 * x415;
-Tbase Syntax.TZ x417 = x32 * 0x2;
-Tbase Syntax.TZ x418 = x16 * x417;
-Tbase Syntax.TZ x419 = x31 * 0x2;
-Tbase Syntax.TZ x420 = x17 * x419;
-Tbase Syntax.TZ x421 = x18 * x30;
-Tbase Syntax.TZ x422 = x420 + x421;
-Tbase Syntax.TZ x423 = x418 + x422;
-Tbase Syntax.TZ x424 = x416 + x423;
-Tbase Syntax.TZ x425 = x414 + x424;
-Tbase Syntax.TZ x426 = x412 + x425;
-Tbase Syntax.TZ x427 = x410 + x426;
-Tbase Syntax.TZ x428 = x408 + x427;
-Tbase Syntax.TZ x429 = x406 + x428;
-Tbase Syntax.TZ x430 = x * x29;
-Tbase Syntax.TZ x431 = x0 * x28;
-Tbase Syntax.TZ x432 = x1 * x27;
-Tbase Syntax.TZ x433 = x2 * x26;
-Tbase Syntax.TZ x434 = x3 * x25;
-Tbase Syntax.TZ x435 = x4 * x24;
-Tbase Syntax.TZ x436 = x5 * x23;
-Tbase Syntax.TZ x437 = x6 * x22;
-Tbase Syntax.TZ x438 = x7 * x21;
-Tbase Syntax.TZ x439 = x8 * x20;
-Tbase Syntax.TZ x440 = x9 * x19;
-Tbase Syntax.TZ x441 = x439 + x440;
-Tbase Syntax.TZ x442 = x438 + x441;
-Tbase Syntax.TZ x443 = x437 + x442;
-Tbase Syntax.TZ x444 = x436 + x443;
-Tbase Syntax.TZ x445 = x435 + x444;
-Tbase Syntax.TZ x446 = x434 + x445;
-Tbase Syntax.TZ x447 = x433 + x446;
-Tbase Syntax.TZ x448 = x432 + x447;
-Tbase Syntax.TZ x449 = x431 + x448;
-Tbase Syntax.TZ x450 = x430 + x449;
-Tbase Syntax.TZ x451 = x429 + x450;
-Tbase Syntax.TZ x452 = x405 + x451;
-Tbase Syntax.TZ x453 = x452 >>> 0x1a;
-Tbase Syntax.TZ x454 = x9 * x38;
-Tbase Syntax.TZ x455 = x37 * 0x2;
-Tbase Syntax.TZ x456 = x10 * x455;
-Tbase Syntax.TZ x457 = x36 * 0x2;
-Tbase Syntax.TZ x458 = x11 * x457;
-Tbase Syntax.TZ x459 = x35 * 0x2;
-Tbase Syntax.TZ x460 = x12 * x459;
-Tbase Syntax.TZ x461 = x34 * 0x2;
-Tbase Syntax.TZ x462 = x13 * x461;
-Tbase Syntax.TZ x463 = x33 * 0x2;
-Tbase Syntax.TZ x464 = x14 * x463;
-Tbase Syntax.TZ x465 = x32 * 0x2;
-Tbase Syntax.TZ x466 = x15 * x465;
-Tbase Syntax.TZ x467 = x31 * 0x2;
-Tbase Syntax.TZ x468 = x16 * x467;
-Tbase Syntax.TZ x469 = x30 * 0x2;
-Tbase Syntax.TZ x470 = x17 * x469;
-Tbase Syntax.TZ x471 = x18 * x29;
-Tbase Syntax.TZ x472 = x470 + x471;
-Tbase Syntax.TZ x473 = x468 + x472;
-Tbase Syntax.TZ x474 = x466 + x473;
-Tbase Syntax.TZ x475 = x464 + x474;
-Tbase Syntax.TZ x476 = x462 + x475;
-Tbase Syntax.TZ x477 = x460 + x476;
-Tbase Syntax.TZ x478 = x458 + x477;
-Tbase Syntax.TZ x479 = x456 + x478;
-Tbase Syntax.TZ x480 = x454 + x479;
-Tbase Syntax.TZ x481 = x * x28;
-Tbase Syntax.TZ x482 = x0 * x27;
-Tbase Syntax.TZ x483 = x1 * x26;
-Tbase Syntax.TZ x484 = x2 * x25;
-Tbase Syntax.TZ x485 = x3 * x24;
-Tbase Syntax.TZ x486 = x4 * x23;
-Tbase Syntax.TZ x487 = x5 * x22;
-Tbase Syntax.TZ x488 = x6 * x21;
-Tbase Syntax.TZ x489 = x7 * x20;
-Tbase Syntax.TZ x490 = x8 * x19;
-Tbase Syntax.TZ x491 = x489 + x490;
-Tbase Syntax.TZ x492 = x488 + x491;
-Tbase Syntax.TZ x493 = x487 + x492;
-Tbase Syntax.TZ x494 = x486 + x493;
-Tbase Syntax.TZ x495 = x485 + x494;
-Tbase Syntax.TZ x496 = x484 + x495;
-Tbase Syntax.TZ x497 = x483 + x496;
-Tbase Syntax.TZ x498 = x482 + x497;
-Tbase Syntax.TZ x499 = x481 + x498;
-Tbase Syntax.TZ x500 = x480 + x499;
-Tbase Syntax.TZ x501 = x453 + x500;
-Tbase Syntax.TZ x502 = x501 >>> 0x1a;
-Tbase Syntax.TZ x503 = x8 * x38;
-Tbase Syntax.TZ x504 = x37 * 0x2;
-Tbase Syntax.TZ x505 = x9 * x504;
-Tbase Syntax.TZ x506 = x36 * 0x2;
-Tbase Syntax.TZ x507 = x10 * x506;
-Tbase Syntax.TZ x508 = x35 * 0x2;
-Tbase Syntax.TZ x509 = x11 * x508;
-Tbase Syntax.TZ x510 = x34 * 0x2;
-Tbase Syntax.TZ x511 = x12 * x510;
-Tbase Syntax.TZ x512 = x33 * 0x2;
-Tbase Syntax.TZ x513 = x13 * x512;
-Tbase Syntax.TZ x514 = x32 * 0x2;
-Tbase Syntax.TZ x515 = x14 * x514;
-Tbase Syntax.TZ x516 = x31 * 0x2;
-Tbase Syntax.TZ x517 = x15 * x516;
-Tbase Syntax.TZ x518 = x30 * 0x2;
-Tbase Syntax.TZ x519 = x16 * x518;
-Tbase Syntax.TZ x520 = x29 * 0x2;
-Tbase Syntax.TZ x521 = x17 * x520;
-Tbase Syntax.TZ x522 = x18 * x28;
-Tbase Syntax.TZ x523 = x521 + x522;
-Tbase Syntax.TZ x524 = x519 + x523;
-Tbase Syntax.TZ x525 = x517 + x524;
-Tbase Syntax.TZ x526 = x515 + x525;
-Tbase Syntax.TZ x527 = x513 + x526;
-Tbase Syntax.TZ x528 = x511 + x527;
-Tbase Syntax.TZ x529 = x509 + x528;
-Tbase Syntax.TZ x530 = x507 + x529;
-Tbase Syntax.TZ x531 = x505 + x530;
-Tbase Syntax.TZ x532 = x503 + x531;
-Tbase Syntax.TZ x533 = x * x27;
-Tbase Syntax.TZ x534 = x0 * x26;
-Tbase Syntax.TZ x535 = x1 * x25;
-Tbase Syntax.TZ x536 = x2 * x24;
-Tbase Syntax.TZ x537 = x3 * x23;
-Tbase Syntax.TZ x538 = x4 * x22;
-Tbase Syntax.TZ x539 = x5 * x21;
-Tbase Syntax.TZ x540 = x6 * x20;
-Tbase Syntax.TZ x541 = x7 * x19;
-Tbase Syntax.TZ x542 = x540 + x541;
-Tbase Syntax.TZ x543 = x539 + x542;
-Tbase Syntax.TZ x544 = x538 + x543;
-Tbase Syntax.TZ x545 = x537 + x544;
-Tbase Syntax.TZ x546 = x536 + x545;
-Tbase Syntax.TZ x547 = x535 + x546;
-Tbase Syntax.TZ x548 = x534 + x547;
-Tbase Syntax.TZ x549 = x533 + x548;
-Tbase Syntax.TZ x550 = x532 + x549;
-Tbase Syntax.TZ x551 = x502 + x550;
-Tbase Syntax.TZ x552 = x551 >>> 0x1a;
-Tbase Syntax.TZ x553 = x7 * x38;
-Tbase Syntax.TZ x554 = x37 * 0x2;
-Tbase Syntax.TZ x555 = x8 * x554;
-Tbase Syntax.TZ x556 = x36 * 0x2;
-Tbase Syntax.TZ x557 = x9 * x556;
-Tbase Syntax.TZ x558 = x35 * 0x2;
-Tbase Syntax.TZ x559 = x10 * x558;
-Tbase Syntax.TZ x560 = x34 * 0x2;
-Tbase Syntax.TZ x561 = x11 * x560;
-Tbase Syntax.TZ x562 = x33 * 0x2;
-Tbase Syntax.TZ x563 = x12 * x562;
-Tbase Syntax.TZ x564 = x32 * 0x2;
-Tbase Syntax.TZ x565 = x13 * x564;
-Tbase Syntax.TZ x566 = x31 * 0x2;
-Tbase Syntax.TZ x567 = x14 * x566;
-Tbase Syntax.TZ x568 = x30 * 0x2;
-Tbase Syntax.TZ x569 = x15 * x568;
-Tbase Syntax.TZ x570 = x29 * 0x2;
-Tbase Syntax.TZ x571 = x16 * x570;
-Tbase Syntax.TZ x572 = x28 * 0x2;
-Tbase Syntax.TZ x573 = x17 * x572;
-Tbase Syntax.TZ x574 = x18 * x27;
-Tbase Syntax.TZ x575 = x573 + x574;
-Tbase Syntax.TZ x576 = x571 + x575;
-Tbase Syntax.TZ x577 = x569 + x576;
-Tbase Syntax.TZ x578 = x567 + x577;
-Tbase Syntax.TZ x579 = x565 + x578;
-Tbase Syntax.TZ x580 = x563 + x579;
-Tbase Syntax.TZ x581 = x561 + x580;
-Tbase Syntax.TZ x582 = x559 + x581;
-Tbase Syntax.TZ x583 = x557 + x582;
-Tbase Syntax.TZ x584 = x555 + x583;
-Tbase Syntax.TZ x585 = x553 + x584;
-Tbase Syntax.TZ x586 = x * x26;
-Tbase Syntax.TZ x587 = x0 * x25;
-Tbase Syntax.TZ x588 = x1 * x24;
-Tbase Syntax.TZ x589 = x2 * x23;
-Tbase Syntax.TZ x590 = x3 * x22;
-Tbase Syntax.TZ x591 = x4 * x21;
-Tbase Syntax.TZ x592 = x5 * x20;
-Tbase Syntax.TZ x593 = x6 * x19;
-Tbase Syntax.TZ x594 = x592 + x593;
-Tbase Syntax.TZ x595 = x591 + x594;
-Tbase Syntax.TZ x596 = x590 + x595;
-Tbase Syntax.TZ x597 = x589 + x596;
-Tbase Syntax.TZ x598 = x588 + x597;
-Tbase Syntax.TZ x599 = x587 + x598;
-Tbase Syntax.TZ x600 = x586 + x599;
-Tbase Syntax.TZ x601 = x585 + x600;
-Tbase Syntax.TZ x602 = x552 + x601;
-Tbase Syntax.TZ x603 = x602 >>> 0x1a;
-Tbase Syntax.TZ x604 = x6 * x38;
-Tbase Syntax.TZ x605 = x37 * 0x2;
-Tbase Syntax.TZ x606 = x7 * x605;
-Tbase Syntax.TZ x607 = x36 * 0x2;
-Tbase Syntax.TZ x608 = x8 * x607;
-Tbase Syntax.TZ x609 = x35 * 0x2;
-Tbase Syntax.TZ x610 = x9 * x609;
-Tbase Syntax.TZ x611 = x34 * 0x2;
-Tbase Syntax.TZ x612 = x10 * x611;
-Tbase Syntax.TZ x613 = x33 * 0x2;
-Tbase Syntax.TZ x614 = x11 * x613;
-Tbase Syntax.TZ x615 = x32 * 0x2;
-Tbase Syntax.TZ x616 = x12 * x615;
-Tbase Syntax.TZ x617 = x31 * 0x2;
-Tbase Syntax.TZ x618 = x13 * x617;
-Tbase Syntax.TZ x619 = x30 * 0x2;
-Tbase Syntax.TZ x620 = x14 * x619;
-Tbase Syntax.TZ x621 = x29 * 0x2;
-Tbase Syntax.TZ x622 = x15 * x621;
-Tbase Syntax.TZ x623 = x28 * 0x2;
-Tbase Syntax.TZ x624 = x16 * x623;
-Tbase Syntax.TZ x625 = x27 * 0x2;
-Tbase Syntax.TZ x626 = x17 * x625;
-Tbase Syntax.TZ x627 = x18 * x26;
-Tbase Syntax.TZ x628 = x626 + x627;
-Tbase Syntax.TZ x629 = x624 + x628;
-Tbase Syntax.TZ x630 = x622 + x629;
-Tbase Syntax.TZ x631 = x620 + x630;
-Tbase Syntax.TZ x632 = x618 + x631;
-Tbase Syntax.TZ x633 = x616 + x632;
-Tbase Syntax.TZ x634 = x614 + x633;
-Tbase Syntax.TZ x635 = x612 + x634;
-Tbase Syntax.TZ x636 = x610 + x635;
-Tbase Syntax.TZ x637 = x608 + x636;
-Tbase Syntax.TZ x638 = x606 + x637;
-Tbase Syntax.TZ x639 = x604 + x638;
-Tbase Syntax.TZ x640 = x * x25;
-Tbase Syntax.TZ x641 = x0 * x24;
-Tbase Syntax.TZ x642 = x1 * x23;
-Tbase Syntax.TZ x643 = x2 * x22;
-Tbase Syntax.TZ x644 = x3 * x21;
-Tbase Syntax.TZ x645 = x4 * x20;
-Tbase Syntax.TZ x646 = x5 * x19;
-Tbase Syntax.TZ x647 = x645 + x646;
-Tbase Syntax.TZ x648 = x644 + x647;
-Tbase Syntax.TZ x649 = x643 + x648;
-Tbase Syntax.TZ x650 = x642 + x649;
-Tbase Syntax.TZ x651 = x641 + x650;
-Tbase Syntax.TZ x652 = x640 + x651;
-Tbase Syntax.TZ x653 = x639 + x652;
-Tbase Syntax.TZ x654 = x603 + x653;
-Tbase Syntax.TZ x655 = x654 >>> 0x1a;
-Tbase Syntax.TZ x656 = x5 * x38;
-Tbase Syntax.TZ x657 = x37 * 0x2;
-Tbase Syntax.TZ x658 = x6 * x657;
-Tbase Syntax.TZ x659 = x36 * 0x2;
-Tbase Syntax.TZ x660 = x7 * x659;
-Tbase Syntax.TZ x661 = x35 * 0x2;
-Tbase Syntax.TZ x662 = x8 * x661;
-Tbase Syntax.TZ x663 = x34 * 0x2;
-Tbase Syntax.TZ x664 = x9 * x663;
-Tbase Syntax.TZ x665 = x33 * 0x2;
-Tbase Syntax.TZ x666 = x10 * x665;
-Tbase Syntax.TZ x667 = x32 * 0x2;
-Tbase Syntax.TZ x668 = x11 * x667;
-Tbase Syntax.TZ x669 = x31 * 0x2;
-Tbase Syntax.TZ x670 = x12 * x669;
-Tbase Syntax.TZ x671 = x30 * 0x2;
-Tbase Syntax.TZ x672 = x13 * x671;
-Tbase Syntax.TZ x673 = x29 * 0x2;
-Tbase Syntax.TZ x674 = x14 * x673;
-Tbase Syntax.TZ x675 = x28 * 0x2;
-Tbase Syntax.TZ x676 = x15 * x675;
-Tbase Syntax.TZ x677 = x27 * 0x2;
-Tbase Syntax.TZ x678 = x16 * x677;
-Tbase Syntax.TZ x679 = x26 * 0x2;
-Tbase Syntax.TZ x680 = x17 * x679;
-Tbase Syntax.TZ x681 = x18 * x25;
-Tbase Syntax.TZ x682 = x680 + x681;
-Tbase Syntax.TZ x683 = x678 + x682;
-Tbase Syntax.TZ x684 = x676 + x683;
-Tbase Syntax.TZ x685 = x674 + x684;
-Tbase Syntax.TZ x686 = x672 + x685;
-Tbase Syntax.TZ x687 = x670 + x686;
-Tbase Syntax.TZ x688 = x668 + x687;
-Tbase Syntax.TZ x689 = x666 + x688;
-Tbase Syntax.TZ x690 = x664 + x689;
-Tbase Syntax.TZ x691 = x662 + x690;
-Tbase Syntax.TZ x692 = x660 + x691;
-Tbase Syntax.TZ x693 = x658 + x692;
-Tbase Syntax.TZ x694 = x656 + x693;
-Tbase Syntax.TZ x695 = x * x24;
-Tbase Syntax.TZ x696 = x0 * x23;
-Tbase Syntax.TZ x697 = x1 * x22;
-Tbase Syntax.TZ x698 = x2 * x21;
-Tbase Syntax.TZ x699 = x3 * x20;
-Tbase Syntax.TZ x700 = x4 * x19;
-Tbase Syntax.TZ x701 = x699 + x700;
-Tbase Syntax.TZ x702 = x698 + x701;
-Tbase Syntax.TZ x703 = x697 + x702;
-Tbase Syntax.TZ x704 = x696 + x703;
-Tbase Syntax.TZ x705 = x695 + x704;
-Tbase Syntax.TZ x706 = x694 + x705;
-Tbase Syntax.TZ x707 = x655 + x706;
-Tbase Syntax.TZ x708 = x707 >>> 0x1a;
-Tbase Syntax.TZ x709 = x4 * x38;
-Tbase Syntax.TZ x710 = x37 * 0x2;
-Tbase Syntax.TZ x711 = x5 * x710;
-Tbase Syntax.TZ x712 = x36 * 0x2;
-Tbase Syntax.TZ x713 = x6 * x712;
-Tbase Syntax.TZ x714 = x35 * 0x2;
-Tbase Syntax.TZ x715 = x7 * x714;
-Tbase Syntax.TZ x716 = x34 * 0x2;
-Tbase Syntax.TZ x717 = x8 * x716;
-Tbase Syntax.TZ x718 = x33 * 0x2;
-Tbase Syntax.TZ x719 = x9 * x718;
-Tbase Syntax.TZ x720 = x32 * 0x2;
-Tbase Syntax.TZ x721 = x10 * x720;
-Tbase Syntax.TZ x722 = x31 * 0x2;
-Tbase Syntax.TZ x723 = x11 * x722;
-Tbase Syntax.TZ x724 = x30 * 0x2;
-Tbase Syntax.TZ x725 = x12 * x724;
-Tbase Syntax.TZ x726 = x29 * 0x2;
-Tbase Syntax.TZ x727 = x13 * x726;
-Tbase Syntax.TZ x728 = x28 * 0x2;
-Tbase Syntax.TZ x729 = x14 * x728;
-Tbase Syntax.TZ x730 = x27 * 0x2;
-Tbase Syntax.TZ x731 = x15 * x730;
-Tbase Syntax.TZ x732 = x26 * 0x2;
-Tbase Syntax.TZ x733 = x16 * x732;
-Tbase Syntax.TZ x734 = x25 * 0x2;
-Tbase Syntax.TZ x735 = x17 * x734;
-Tbase Syntax.TZ x736 = x18 * x24;
-Tbase Syntax.TZ x737 = x735 + x736;
-Tbase Syntax.TZ x738 = x733 + x737;
-Tbase Syntax.TZ x739 = x731 + x738;
-Tbase Syntax.TZ x740 = x729 + x739;
-Tbase Syntax.TZ x741 = x727 + x740;
-Tbase Syntax.TZ x742 = x725 + x741;
-Tbase Syntax.TZ x743 = x723 + x742;
-Tbase Syntax.TZ x744 = x721 + x743;
-Tbase Syntax.TZ x745 = x719 + x744;
-Tbase Syntax.TZ x746 = x717 + x745;
-Tbase Syntax.TZ x747 = x715 + x746;
-Tbase Syntax.TZ x748 = x713 + x747;
-Tbase Syntax.TZ x749 = x711 + x748;
-Tbase Syntax.TZ x750 = x709 + x749;
-Tbase Syntax.TZ x751 = x * x23;
-Tbase Syntax.TZ x752 = x0 * x22;
-Tbase Syntax.TZ x753 = x1 * x21;
-Tbase Syntax.TZ x754 = x2 * x20;
-Tbase Syntax.TZ x755 = x3 * x19;
-Tbase Syntax.TZ x756 = x754 + x755;
-Tbase Syntax.TZ x757 = x753 + x756;
-Tbase Syntax.TZ x758 = x752 + x757;
-Tbase Syntax.TZ x759 = x751 + x758;
-Tbase Syntax.TZ x760 = x750 + x759;
-Tbase Syntax.TZ x761 = x708 + x760;
-Tbase Syntax.TZ x762 = x761 >>> 0x1a;
-Tbase Syntax.TZ x763 = x3 * x38;
-Tbase Syntax.TZ x764 = x37 * 0x2;
-Tbase Syntax.TZ x765 = x4 * x764;
-Tbase Syntax.TZ x766 = x36 * 0x2;
-Tbase Syntax.TZ x767 = x5 * x766;
-Tbase Syntax.TZ x768 = x35 * 0x2;
-Tbase Syntax.TZ x769 = x6 * x768;
-Tbase Syntax.TZ x770 = x34 * 0x2;
-Tbase Syntax.TZ x771 = x7 * x770;
-Tbase Syntax.TZ x772 = x33 * 0x2;
-Tbase Syntax.TZ x773 = x8 * x772;
-Tbase Syntax.TZ x774 = x32 * 0x2;
-Tbase Syntax.TZ x775 = x9 * x774;
-Tbase Syntax.TZ x776 = x31 * 0x2;
-Tbase Syntax.TZ x777 = x10 * x776;
-Tbase Syntax.TZ x778 = x30 * 0x2;
-Tbase Syntax.TZ x779 = x11 * x778;
-Tbase Syntax.TZ x780 = x29 * 0x2;
-Tbase Syntax.TZ x781 = x12 * x780;
-Tbase Syntax.TZ x782 = x28 * 0x2;
-Tbase Syntax.TZ x783 = x13 * x782;
-Tbase Syntax.TZ x784 = x27 * 0x2;
-Tbase Syntax.TZ x785 = x14 * x784;
-Tbase Syntax.TZ x786 = x26 * 0x2;
-Tbase Syntax.TZ x787 = x15 * x786;
-Tbase Syntax.TZ x788 = x25 * 0x2;
-Tbase Syntax.TZ x789 = x16 * x788;
-Tbase Syntax.TZ x790 = x24 * 0x2;
-Tbase Syntax.TZ x791 = x17 * x790;
-Tbase Syntax.TZ x792 = x18 * x23;
-Tbase Syntax.TZ x793 = x791 + x792;
-Tbase Syntax.TZ x794 = x789 + x793;
-Tbase Syntax.TZ x795 = x787 + x794;
-Tbase Syntax.TZ x796 = x785 + x795;
-Tbase Syntax.TZ x797 = x783 + x796;
-Tbase Syntax.TZ x798 = x781 + x797;
-Tbase Syntax.TZ x799 = x779 + x798;
-Tbase Syntax.TZ x800 = x777 + x799;
-Tbase Syntax.TZ x801 = x775 + x800;
-Tbase Syntax.TZ x802 = x773 + x801;
-Tbase Syntax.TZ x803 = x771 + x802;
-Tbase Syntax.TZ x804 = x769 + x803;
-Tbase Syntax.TZ x805 = x767 + x804;
-Tbase Syntax.TZ x806 = x765 + x805;
-Tbase Syntax.TZ x807 = x763 + x806;
-Tbase Syntax.TZ x808 = x * x22;
-Tbase Syntax.TZ x809 = x0 * x21;
-Tbase Syntax.TZ x810 = x1 * x20;
-Tbase Syntax.TZ x811 = x2 * x19;
-Tbase Syntax.TZ x812 = x810 + x811;
-Tbase Syntax.TZ x813 = x809 + x812;
-Tbase Syntax.TZ x814 = x808 + x813;
-Tbase Syntax.TZ x815 = x807 + x814;
-Tbase Syntax.TZ x816 = x762 + x815;
-Tbase Syntax.TZ x817 = x816 >>> 0x1a;
-Tbase Syntax.TZ x818 = x2 * x38;
-Tbase Syntax.TZ x819 = x37 * 0x2;
-Tbase Syntax.TZ x820 = x3 * x819;
-Tbase Syntax.TZ x821 = x36 * 0x2;
-Tbase Syntax.TZ x822 = x4 * x821;
-Tbase Syntax.TZ x823 = x35 * 0x2;
-Tbase Syntax.TZ x824 = x5 * x823;
-Tbase Syntax.TZ x825 = x34 * 0x2;
-Tbase Syntax.TZ x826 = x6 * x825;
-Tbase Syntax.TZ x827 = x33 * 0x2;
-Tbase Syntax.TZ x828 = x7 * x827;
-Tbase Syntax.TZ x829 = x32 * 0x2;
-Tbase Syntax.TZ x830 = x8 * x829;
-Tbase Syntax.TZ x831 = x31 * 0x2;
-Tbase Syntax.TZ x832 = x9 * x831;
-Tbase Syntax.TZ x833 = x30 * 0x2;
-Tbase Syntax.TZ x834 = x10 * x833;
-Tbase Syntax.TZ x835 = x29 * 0x2;
-Tbase Syntax.TZ x836 = x11 * x835;
-Tbase Syntax.TZ x837 = x28 * 0x2;
-Tbase Syntax.TZ x838 = x12 * x837;
-Tbase Syntax.TZ x839 = x27 * 0x2;
-Tbase Syntax.TZ x840 = x13 * x839;
-Tbase Syntax.TZ x841 = x26 * 0x2;
-Tbase Syntax.TZ x842 = x14 * x841;
-Tbase Syntax.TZ x843 = x25 * 0x2;
-Tbase Syntax.TZ x844 = x15 * x843;
-Tbase Syntax.TZ x845 = x24 * 0x2;
-Tbase Syntax.TZ x846 = x16 * x845;
-Tbase Syntax.TZ x847 = x23 * 0x2;
-Tbase Syntax.TZ x848 = x17 * x847;
-Tbase Syntax.TZ x849 = x18 * x22;
-Tbase Syntax.TZ x850 = x848 + x849;
-Tbase Syntax.TZ x851 = x846 + x850;
-Tbase Syntax.TZ x852 = x844 + x851;
-Tbase Syntax.TZ x853 = x842 + x852;
-Tbase Syntax.TZ x854 = x840 + x853;
-Tbase Syntax.TZ x855 = x838 + x854;
-Tbase Syntax.TZ x856 = x836 + x855;
-Tbase Syntax.TZ x857 = x834 + x856;
-Tbase Syntax.TZ x858 = x832 + x857;
-Tbase Syntax.TZ x859 = x830 + x858;
-Tbase Syntax.TZ x860 = x828 + x859;
-Tbase Syntax.TZ x861 = x826 + x860;
-Tbase Syntax.TZ x862 = x824 + x861;
-Tbase Syntax.TZ x863 = x822 + x862;
-Tbase Syntax.TZ x864 = x820 + x863;
-Tbase Syntax.TZ x865 = x818 + x864;
-Tbase Syntax.TZ x866 = x * x21;
-Tbase Syntax.TZ x867 = x0 * x20;
-Tbase Syntax.TZ x868 = x1 * x19;
-Tbase Syntax.TZ x869 = x867 + x868;
-Tbase Syntax.TZ x870 = x866 + x869;
-Tbase Syntax.TZ x871 = x865 + x870;
-Tbase Syntax.TZ x872 = x817 + x871;
-Tbase Syntax.TZ x873 = x872 >>> 0x1a;
-Tbase Syntax.TZ x874 = x1 * x38;
-Tbase Syntax.TZ x875 = x37 * 0x2;
-Tbase Syntax.TZ x876 = x2 * x875;
-Tbase Syntax.TZ x877 = x36 * 0x2;
-Tbase Syntax.TZ x878 = x3 * x877;
-Tbase Syntax.TZ x879 = x35 * 0x2;
-Tbase Syntax.TZ x880 = x4 * x879;
-Tbase Syntax.TZ x881 = x34 * 0x2;
-Tbase Syntax.TZ x882 = x5 * x881;
-Tbase Syntax.TZ x883 = x33 * 0x2;
-Tbase Syntax.TZ x884 = x6 * x883;
-Tbase Syntax.TZ x885 = x32 * 0x2;
-Tbase Syntax.TZ x886 = x7 * x885;
-Tbase Syntax.TZ x887 = x31 * 0x2;
-Tbase Syntax.TZ x888 = x8 * x887;
-Tbase Syntax.TZ x889 = x30 * 0x2;
-Tbase Syntax.TZ x890 = x9 * x889;
-Tbase Syntax.TZ x891 = x29 * 0x2;
-Tbase Syntax.TZ x892 = x10 * x891;
-Tbase Syntax.TZ x893 = x28 * 0x2;
-Tbase Syntax.TZ x894 = x11 * x893;
-Tbase Syntax.TZ x895 = x27 * 0x2;
-Tbase Syntax.TZ x896 = x12 * x895;
-Tbase Syntax.TZ x897 = x26 * 0x2;
-Tbase Syntax.TZ x898 = x13 * x897;
-Tbase Syntax.TZ x899 = x25 * 0x2;
-Tbase Syntax.TZ x900 = x14 * x899;
-Tbase Syntax.TZ x901 = x24 * 0x2;
-Tbase Syntax.TZ x902 = x15 * x901;
-Tbase Syntax.TZ x903 = x23 * 0x2;
-Tbase Syntax.TZ x904 = x16 * x903;
-Tbase Syntax.TZ x905 = x22 * 0x2;
-Tbase Syntax.TZ x906 = x17 * x905;
-Tbase Syntax.TZ x907 = x18 * x21;
-Tbase Syntax.TZ x908 = x906 + x907;
-Tbase Syntax.TZ x909 = x904 + x908;
-Tbase Syntax.TZ x910 = x902 + x909;
-Tbase Syntax.TZ x911 = x900 + x910;
-Tbase Syntax.TZ x912 = x898 + x911;
-Tbase Syntax.TZ x913 = x896 + x912;
-Tbase Syntax.TZ x914 = x894 + x913;
-Tbase Syntax.TZ x915 = x892 + x914;
-Tbase Syntax.TZ x916 = x890 + x915;
-Tbase Syntax.TZ x917 = x888 + x916;
-Tbase Syntax.TZ x918 = x886 + x917;
-Tbase Syntax.TZ x919 = x884 + x918;
-Tbase Syntax.TZ x920 = x882 + x919;
-Tbase Syntax.TZ x921 = x880 + x920;
-Tbase Syntax.TZ x922 = x878 + x921;
-Tbase Syntax.TZ x923 = x876 + x922;
-Tbase Syntax.TZ x924 = x874 + x923;
-Tbase Syntax.TZ x925 = x * x20;
-Tbase Syntax.TZ x926 = x0 * x19;
-Tbase Syntax.TZ x927 = x925 + x926;
-Tbase Syntax.TZ x928 = x924 + x927;
-Tbase Syntax.TZ x929 = x873 + x928;
-Tbase Syntax.TZ x930 = x929 >>> 0x1a;
-Tbase Syntax.TZ x931 = x0 * x38;
-Tbase Syntax.TZ x932 = x37 * 0x2;
-Tbase Syntax.TZ x933 = x1 * x932;
-Tbase Syntax.TZ x934 = x36 * 0x2;
-Tbase Syntax.TZ x935 = x2 * x934;
-Tbase Syntax.TZ x936 = x35 * 0x2;
-Tbase Syntax.TZ x937 = x3 * x936;
-Tbase Syntax.TZ x938 = x34 * 0x2;
-Tbase Syntax.TZ x939 = x4 * x938;
-Tbase Syntax.TZ x940 = x33 * 0x2;
-Tbase Syntax.TZ x941 = x5 * x940;
-Tbase Syntax.TZ x942 = x32 * 0x2;
-Tbase Syntax.TZ x943 = x6 * x942;
-Tbase Syntax.TZ x944 = x31 * 0x2;
-Tbase Syntax.TZ x945 = x7 * x944;
-Tbase Syntax.TZ x946 = x30 * 0x2;
-Tbase Syntax.TZ x947 = x8 * x946;
-Tbase Syntax.TZ x948 = x29 * 0x2;
-Tbase Syntax.TZ x949 = x9 * x948;
-Tbase Syntax.TZ x950 = x28 * 0x2;
-Tbase Syntax.TZ x951 = x10 * x950;
-Tbase Syntax.TZ x952 = x27 * 0x2;
-Tbase Syntax.TZ x953 = x11 * x952;
-Tbase Syntax.TZ x954 = x26 * 0x2;
-Tbase Syntax.TZ x955 = x12 * x954;
-Tbase Syntax.TZ x956 = x25 * 0x2;
-Tbase Syntax.TZ x957 = x13 * x956;
-Tbase Syntax.TZ x958 = x24 * 0x2;
-Tbase Syntax.TZ x959 = x14 * x958;
-Tbase Syntax.TZ x960 = x23 * 0x2;
-Tbase Syntax.TZ x961 = x15 * x960;
-Tbase Syntax.TZ x962 = x22 * 0x2;
-Tbase Syntax.TZ x963 = x16 * x962;
-Tbase Syntax.TZ x964 = x21 * 0x2;
-Tbase Syntax.TZ x965 = x17 * x964;
-Tbase Syntax.TZ x966 = x18 * x20;
-Tbase Syntax.TZ x967 = x965 + x966;
-Tbase Syntax.TZ x968 = x963 + x967;
-Tbase Syntax.TZ x969 = x961 + x968;
-Tbase Syntax.TZ x970 = x959 + x969;
-Tbase Syntax.TZ x971 = x957 + x970;
-Tbase Syntax.TZ x972 = x955 + x971;
-Tbase Syntax.TZ x973 = x953 + x972;
-Tbase Syntax.TZ x974 = x951 + x973;
-Tbase Syntax.TZ x975 = x949 + x974;
-Tbase Syntax.TZ x976 = x947 + x975;
-Tbase Syntax.TZ x977 = x945 + x976;
-Tbase Syntax.TZ x978 = x943 + x977;
-Tbase Syntax.TZ x979 = x941 + x978;
-Tbase Syntax.TZ x980 = x939 + x979;
-Tbase Syntax.TZ x981 = x937 + x980;
-Tbase Syntax.TZ x982 = x935 + x981;
-Tbase Syntax.TZ x983 = x933 + x982;
-Tbase Syntax.TZ x984 = x931 + x983;
-Tbase Syntax.TZ x985 = x * x19;
-Tbase Syntax.TZ x986 = x984 + x985;
-Tbase Syntax.TZ x987 = x930 + x986;
-Tbase Syntax.TZ x988 = x987 >>> 0x1a;
-Tbase Syntax.TZ x989 = x * x38;
-Tbase Syntax.TZ x990 = x37 * 0x2;
-Tbase Syntax.TZ x991 = x0 * x990;
-Tbase Syntax.TZ x992 = x36 * 0x2;
-Tbase Syntax.TZ x993 = x1 * x992;
-Tbase Syntax.TZ x994 = x35 * 0x2;
-Tbase Syntax.TZ x995 = x2 * x994;
-Tbase Syntax.TZ x996 = x34 * 0x2;
-Tbase Syntax.TZ x997 = x3 * x996;
-Tbase Syntax.TZ x998 = x33 * 0x2;
-Tbase Syntax.TZ x999 = x4 * x998;
-Tbase Syntax.TZ x1000 = x32 * 0x2;
-Tbase Syntax.TZ x1001 = x5 * x1000;
-Tbase Syntax.TZ x1002 = x31 * 0x2;
-Tbase Syntax.TZ x1003 = x6 * x1002;
-Tbase Syntax.TZ x1004 = x30 * 0x2;
-Tbase Syntax.TZ x1005 = x7 * x1004;
-Tbase Syntax.TZ x1006 = x29 * 0x2;
-Tbase Syntax.TZ x1007 = x8 * x1006;
-Tbase Syntax.TZ x1008 = x28 * 0x2;
-Tbase Syntax.TZ x1009 = x9 * x1008;
-Tbase Syntax.TZ x1010 = x27 * 0x2;
-Tbase Syntax.TZ x1011 = x10 * x1010;
-Tbase Syntax.TZ x1012 = x26 * 0x2;
-Tbase Syntax.TZ x1013 = x11 * x1012;
-Tbase Syntax.TZ x1014 = x25 * 0x2;
-Tbase Syntax.TZ x1015 = x12 * x1014;
-Tbase Syntax.TZ x1016 = x24 * 0x2;
-Tbase Syntax.TZ x1017 = x13 * x1016;
-Tbase Syntax.TZ x1018 = x23 * 0x2;
-Tbase Syntax.TZ x1019 = x14 * x1018;
-Tbase Syntax.TZ x1020 = x22 * 0x2;
-Tbase Syntax.TZ x1021 = x15 * x1020;
-Tbase Syntax.TZ x1022 = x21 * 0x2;
-Tbase Syntax.TZ x1023 = x16 * x1022;
-Tbase Syntax.TZ x1024 = x20 * 0x2;
-Tbase Syntax.TZ x1025 = x17 * x1024;
-Tbase Syntax.TZ x1026 = x18 * x19;
-Tbase Syntax.TZ x1027 = x1025 + x1026;
-Tbase Syntax.TZ x1028 = x1023 + x1027;
-Tbase Syntax.TZ x1029 = x1021 + x1028;
-Tbase Syntax.TZ x1030 = x1019 + x1029;
-Tbase Syntax.TZ x1031 = x1017 + x1030;
-Tbase Syntax.TZ x1032 = x1015 + x1031;
-Tbase Syntax.TZ x1033 = x1013 + x1032;
-Tbase Syntax.TZ x1034 = x1011 + x1033;
-Tbase Syntax.TZ x1035 = x1009 + x1034;
-Tbase Syntax.TZ x1036 = x1007 + x1035;
-Tbase Syntax.TZ x1037 = x1005 + x1036;
-Tbase Syntax.TZ x1038 = x1003 + x1037;
-Tbase Syntax.TZ x1039 = x1001 + x1038;
-Tbase Syntax.TZ x1040 = x999 + x1039;
-Tbase Syntax.TZ x1041 = x997 + x1040;
-Tbase Syntax.TZ x1042 = x995 + x1041;
-Tbase Syntax.TZ x1043 = x993 + x1042;
-Tbase Syntax.TZ x1044 = x991 + x1043;
-Tbase Syntax.TZ x1045 = x989 + x1044;
-Tbase Syntax.TZ x1046 = x988 + x1045;
-Tbase Syntax.TZ x1047 = x1046 >>> 0x1a;
-Tbase Syntax.TZ x1048 = Const 1 * x1047;
-Tbase Syntax.TZ x1049 = x96 & 0x7ffffff;
-Tbase Syntax.TZ x1050 = x1048 + x1049;
-Tbase Syntax.TZ x1051 = x1050 >>> 0x1b;
-Tbase Syntax.TZ x1052 = x137 & 0x3ffffff;
-Tbase Syntax.TZ x1053 = x1051 + x1052;
-Tbase Syntax.TZ x1054 = x1046 & 0x3ffffff;
-Tbase Syntax.TZ x1055 = x987 & 0x3ffffff;
-Tbase Syntax.TZ x1056 = x929 & 0x3ffffff;
-Tbase Syntax.TZ x1057 = x872 & 0x3ffffff;
-Tbase Syntax.TZ x1058 = x816 & 0x3ffffff;
-Tbase Syntax.TZ x1059 = x761 & 0x3ffffff;
-Tbase Syntax.TZ x1060 = x707 & 0x3ffffff;
-Tbase Syntax.TZ x1061 = x654 & 0x3ffffff;
-Tbase Syntax.TZ x1062 = x602 & 0x3ffffff;
-Tbase Syntax.TZ x1063 = x551 & 0x3ffffff;
-Tbase Syntax.TZ x1064 = x501 & 0x3ffffff;
-Tbase Syntax.TZ x1065 = x452 & 0x3ffffff;
-Tbase Syntax.TZ x1066 = x404 & 0x3ffffff;
-Tbase Syntax.TZ x1067 = x357 & 0x3ffffff;
-Tbase Syntax.TZ x1068 = x311 & 0x3ffffff;
-Tbase Syntax.TZ x1069 = x266 & 0x3ffffff;
-Tbase Syntax.TZ x1070 = x222 & 0x3ffffff;
-Tbase Syntax.TZ x1071 = x1053 >>> 0x1a;
-Tbase Syntax.TZ x1072 = x179 & 0x3ffffff;
-Tbase Syntax.TZ x1073 = x1071 + x1072;
-Tbase Syntax.TZ x1074 = x1053 & 0x3ffffff;
-Tbase Syntax.TZ x1075 = x1050 & 0x7ffffff;
-(Return x1054, Return x1055, Return x1056, Return x1057,
-Return x1058, Return x1059, Return x1060, Return x1061,
-Return x1062, Return x1063, Return x1064, Return x1065,
-Return x1066, Return x1067, Return x1068, Return x1069,
-Return x1070, Return x1073, Return x1074, Return x1075)
- : forall var : Syntax.base_type -> Type,
- expr Syntax.base_type Syntax.op
- (Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- Syntax.TZ ->
- ... * ... * Tbase Syntax.TZ * Tbase Syntax.TZ * Tbase Syntax.TZ)
-
-Argument scope is [function_scope]
diff --git a/src/SpecificGen/GF5211_32Reflective/Reified/MulJavaDisplay.v b/src/SpecificGen/GF5211_32Reflective/Reified/MulJavaDisplay.v
deleted file mode 100644
index 8ca5b4c0c..000000000
--- a/src/SpecificGen/GF5211_32Reflective/Reified/MulJavaDisplay.v
+++ /dev/null
@@ -1,4 +0,0 @@
-Require Import Crypto.SpecificGen.GF5211_32Reflective.Reified.Mul.
-Require Export Crypto.Reflection.Z.JavaNotations.
-
-Print rmulW.
diff --git a/src/SpecificGen/GF5211_32Reflective/Reified/Opp.v b/src/SpecificGen/GF5211_32Reflective/Reified/Opp.v
deleted file mode 100644
index ae3389010..000000000
--- a/src/SpecificGen/GF5211_32Reflective/Reified/Opp.v
+++ /dev/null
@@ -1,12 +0,0 @@
-Require Import Crypto.SpecificGen.GF5211_32Reflective.CommonUnOp.
-
-Definition roppZ_sig : rexpr_unop_sig opp. Proof. reify_sig. Defined.
-Definition roppW := Eval vm_compute in rword_of_Z roppZ_sig.
-Lemma roppW_correct_and_bounded_gen : correct_and_bounded_genT roppW roppZ_sig.
-Proof. rexpr_correct. Qed.
-Definition ropp_output_bounds := Eval vm_compute in compute_bounds roppW ExprUnOp_bounds.
-
-Local Open Scope string_scope.
-Compute ("Opp", compute_bounds_for_display roppW ExprUnOp_bounds).
-Compute ("Opp overflows? ", sanity_compute roppW ExprUnOp_bounds).
-Compute ("Opp overflows (error if it does)? ", sanity_check roppW ExprUnOp_bounds).
diff --git a/src/SpecificGen/GF5211_32Reflective/Reified/Pack.v b/src/SpecificGen/GF5211_32Reflective/Reified/Pack.v
deleted file mode 100644
index 108ce3578..000000000
--- a/src/SpecificGen/GF5211_32Reflective/Reified/Pack.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF5211_32Reflective.CommonUnOpFEToWire.
-
-Definition rpackZ_sig : rexpr_unop_FEToWire_sig pack. Proof. reify_sig. Defined.
-Definition rpackW := Eval vm_compute in rword_of_Z rpackZ_sig.
-Lemma rpackW_correct_and_bounded_gen : correct_and_bounded_genT rpackW rpackZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rpack_output_bounds := Eval vm_compute in compute_bounds rpackW ExprUnOpFEToWire_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rpackW_correct_and_bounded
- := ExprUnOpFEToWire_correct_and_bounded
- rpackW pack rpackZ_sig rpackW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Pack", compute_bounds_for_display rpackW ExprUnOpFEToWire_bounds).
-Compute ("Pack overflows? ", sanity_compute rpackW ExprUnOpFEToWire_bounds).
-Compute ("Pack overflows (error if it does)? ", sanity_check rpackW ExprUnOpFEToWire_bounds).
diff --git a/src/SpecificGen/GF5211_32Reflective/Reified/PreFreeze.v b/src/SpecificGen/GF5211_32Reflective/Reified/PreFreeze.v
deleted file mode 100644
index 5cf7ea98a..000000000
--- a/src/SpecificGen/GF5211_32Reflective/Reified/PreFreeze.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF5211_32Reflective.CommonUnOp.
-
-Definition rprefreezeZ_sig : rexpr_unop_sig prefreeze. Proof. reify_sig. Defined.
-Definition rprefreezeW := Eval vm_compute in rword_of_Z rprefreezeZ_sig.
-Lemma rprefreezeW_correct_and_bounded_gen : correct_and_bounded_genT rprefreezeW rprefreezeZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rprefreeze_output_bounds := Eval vm_compute in compute_bounds rprefreezeW ExprUnOp_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition rprefreezeW_correct_and_bounded
- := ExprUnOp_correct_and_bounded
- rprefreezeW prefreeze rprefreezeZ_sig rprefreezeW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("PreFreeze", compute_bounds_for_display rprefreezeW ExprUnOp_bounds).
-Compute ("PreFreeze overflows? ", sanity_compute rprefreezeW ExprUnOp_bounds).
-Compute ("PreFreeze overflows (error if it does)? ", sanity_check rprefreezeW ExprUnOp_bounds).
diff --git a/src/SpecificGen/GF5211_32Reflective/Reified/Sub.v b/src/SpecificGen/GF5211_32Reflective/Reified/Sub.v
deleted file mode 100644
index f0c1f5d27..000000000
--- a/src/SpecificGen/GF5211_32Reflective/Reified/Sub.v
+++ /dev/null
@@ -1,12 +0,0 @@
-Require Import Crypto.SpecificGen.GF5211_32Reflective.CommonBinOp.
-
-Definition rsubZ_sig : rexpr_binop_sig sub. Proof. reify_sig. Defined.
-Definition rsubW := Eval vm_compute in rword_of_Z rsubZ_sig.
-Lemma rsubW_correct_and_bounded_gen : correct_and_bounded_genT rsubW rsubZ_sig.
-Proof. rexpr_correct. Qed.
-Definition rsub_output_bounds := Eval vm_compute in compute_bounds rsubW ExprBinOp_bounds.
-
-Local Open Scope string_scope.
-Compute ("Sub", compute_bounds_for_display rsubW ExprBinOp_bounds).
-Compute ("Sub overflows? ", sanity_compute rsubW ExprBinOp_bounds).
-Compute ("Sub overflows (error if it does)? ", sanity_check rsubW ExprBinOp_bounds).
diff --git a/src/SpecificGen/GF5211_32Reflective/Reified/Unpack.v b/src/SpecificGen/GF5211_32Reflective/Reified/Unpack.v
deleted file mode 100644
index 1040ec6d2..000000000
--- a/src/SpecificGen/GF5211_32Reflective/Reified/Unpack.v
+++ /dev/null
@@ -1,17 +0,0 @@
-Require Import Crypto.SpecificGen.GF5211_32Reflective.CommonUnOpWireToFE.
-
-Definition runpackZ_sig : rexpr_unop_WireToFE_sig unpack. Proof. reify_sig. Defined.
-Definition runpackW := Eval vm_compute in rword_of_Z runpackZ_sig.
-Lemma runpackW_correct_and_bounded_gen : correct_and_bounded_genT runpackW runpackZ_sig.
-Proof. rexpr_correct. Qed.
-Definition runpack_output_bounds := Eval vm_compute in compute_bounds runpackW ExprUnOpWireToFE_bounds.
-Local Obligation Tactic := intros; vm_compute; constructor.
-Program Definition runpackW_correct_and_bounded
- := ExprUnOpWireToFE_correct_and_bounded
- runpackW unpack runpackZ_sig runpackW_correct_and_bounded_gen
- _ _.
-
-Local Open Scope string_scope.
-Compute ("Unpack", compute_bounds_for_display runpackW ExprUnOpWireToFE_bounds).
-Compute ("Unpack overflows? ", sanity_compute runpackW ExprUnOpWireToFE_bounds).
-Compute ("Unpack overflows (error if it does)? ", sanity_check runpackW ExprUnOpWireToFE_bounds).
diff --git a/src/SpecificGen/GF5211_32ReflectiveAddCoordinates.v b/src/SpecificGen/GF5211_32ReflectiveAddCoordinates.v
deleted file mode 100644
index 8105fd507..000000000
--- a/src/SpecificGen/GF5211_32ReflectiveAddCoordinates.v
+++ /dev/null
@@ -1,77 +0,0 @@
-Require Import Crypto.BaseSystem.
-Require Import Crypto.ModularArithmetic.PrimeFieldTheorems.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParams.
-Require Import Crypto.ModularArithmetic.PseudoMersenneBaseParamProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystem.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemProofs.
-Require Import Crypto.ModularArithmetic.ModularBaseSystemOpt.
-Require Export Crypto.SpecificGen.GF5211_32.
-Require Import Crypto.SpecificGen.GF5211_32BoundedCommon.
-Require Import Crypto.Reflection.Reify.
-Require Import Crypto.Reflection.Syntax.
-Require Import Crypto.Reflection.Map.
-Require Import Crypto.Reflection.Z.Interpretations64.
-Require Crypto.Reflection.Z.Interpretations64.Relations.
-Require Import Crypto.Reflection.Z.Interpretations64.RelationsCombinations.
-Require Import Crypto.Reflection.Z.Reify.
-Require Import Crypto.Reflection.Z.Syntax.
-Require Import Crypto.SpecificGen.GF5211_32Reflective.Common.
-Require Import Crypto.SpecificGen.GF5211_32Reflective.Reified.AddCoordinates.
-Require Import Bedrock.Word Crypto.Util.WordUtil.
-Require Import Coq.Lists.List Crypto.Util.ListUtil.
-Require Import Crypto.Tactics.VerdiTactics.
-Require Import Crypto.Util.ZUtil.
-Require Import Crypto.Util.Tuple.
-Require Import Crypto.Util.Tactics.
-Require Import Crypto.Util.LetIn.
-Require Import Crypto.Util.Notations.
-Require Import Crypto.Util.Bool.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Algebra.
-Import ListNotations.
-Require Import Coq.ZArith.ZArith Coq.ZArith.Zpower Coq.ZArith.ZArith Coq.ZArith.Znumtheory.
-Local Open Scope Z.
-
-Time Definition radd_coordinates : Expr _ := Eval vm_compute in radd_coordinatesW.
-
-Declare Reduction asm_interp_add_coordinates
- := cbv beta iota delta
- [id
- interp_bexpr interp_uexpr interp_uexpr_FEToWire interp_uexpr_FEToZ interp_uexpr_WireToFE interp_9_4expr
- radd_coordinates
- curry_binop_fe5211_32W curry_unop_fe5211_32W curry_unop_wire_digitsW curry_9op_fe5211_32W
- WordW.interp_op WordW.interp_base_type
- Z.interp_op Z.interp_base_type
- Z.Syntax.interp_op Z.Syntax.interp_base_type
- mapf_interp_flat_type WordW.interp_base_type word64ize
- Interp interp interp_flat_type interpf interpf_step interp_flat_type fst snd].
-Ltac asm_interp_add_coordinates
- := cbv beta iota delta
- [id
- interp_bexpr interp_uexpr interp_uexpr_FEToWire interp_uexpr_FEToZ interp_uexpr_WireToFE interp_9_4expr
- radd_coordinates
- curry_binop_fe5211_32W curry_unop_fe5211_32W curry_unop_wire_digitsW curry_9op_fe5211_32W
- WordW.interp_op WordW.interp_base_type
- Z.interp_op Z.interp_base_type
- Z.Syntax.interp_op Z.Syntax.interp_base_type
- mapf_interp_flat_type WordW.interp_base_type word64ize
- Interp interp interp_flat_type interpf interp_flat_type fst snd].
-
-(*
-Time Definition interp_radd_coordinates : SpecificGen.GF5211_32BoundedCommon.fe5211_32W
- -> SpecificGen.GF5211_32BoundedCommon.fe5211_32W
- -> SpecificGen.GF5211_32BoundedCommon.fe5211_32W
- -> SpecificGen.GF5211_32BoundedCommon.fe5211_32W
- -> SpecificGen.GF5211_32BoundedCommon.fe5211_32W
- -> SpecificGen.GF5211_32BoundedCommon.fe5211_32W
- -> SpecificGen.GF5211_32BoundedCommon.fe5211_32W
- -> SpecificGen.GF5211_32BoundedCommon.fe5211_32W
- -> SpecificGen.GF5211_32BoundedCommon.fe5211_32W
- -> Tuple.tuple SpecificGen.GF5211_32BoundedCommon.fe5211_32W 4
- := Eval asm_interp_add_coordinates in interp_9_4expr radd_coordinates.
-(*Print interp_radd_coordinates.*)
-Time Definition interp_radd_coordinates_correct : interp_radd_coordinates = interp_9_4expr radd_coordinates := eq_refl.
-
-Lemma radd_coordinates_correct_and_bounded : op9_4_correct_and_bounded radd_coordinates add_coordinates.
-Proof. exact_no_check radd_coordinatesW_correct_and_bounded. Time Qed.
-*)