From f96d49694d0c42981a0eeb85b09120617236802c Mon Sep 17 00:00:00 2001 From: thedavidmeister Date: Thu, 9 Apr 2026 12:29:40 +0400 Subject: [PATCH 1/4] Fix 16-bit pointer truncation in sub-parser linked list The sub-parser linked list packed a memory pointer into the top 16 bits of a bytes32 (shift 0xF0 = 240). When the free memory pointer exceeded 0xFFFF the pointer was silently truncated, corrupting the list. Widen to 96 bits (shift 0xA0 = 160) and extract the shift into a named constant SUB_PARSER_POINTER_SHIFT to prevent future inconsistencies. Closes #473 Closes #474 Co-Authored-By: Claude Opus 4.6 (1M context) --- .gas-snapshot | 2685 ++++++++++------- src/generated/Rainlang.pointers.sol | 8 +- .../RainlangExpressionDeployer.pointers.sol | 8 +- src/generated/RainlangParser.pointers.sol | 8 +- src/lib/parse/LibParseState.sol | 10 +- src/lib/parse/LibSubParse.sol | 6 +- .../lib/parse/LibParsePragma.keyword.t.sol | 18 +- ...ParseState.pushSubParser.largeMemory.t.sol | 47 + .../parse/LibParseState.pushSubParser.t.sol | 14 +- 9 files changed, 1654 insertions(+), 1150 deletions(-) create mode 100644 test/src/lib/parse/LibParseState.pushSubParser.largeMemory.t.sol diff --git a/.gas-snapshot b/.gas-snapshot index d34c86742..d15bd61db 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -1,1122 +1,1573 @@ -BaseRainterpreterExternIERC165Test:testRainterpreterExternIERC165(bytes4) (runs: 2048, μ: 262829, ~: 262829) -BaseRainterpreterSubParserIERC165Test:testRainterpreterSubParserIERC165(uint32) (runs: 2048, μ: 573409, ~: 573409) -LibAllStandardOpsTest:testIntegrityAndOpcodeFunctionPointersLength() (gas: 60693) -LibAllStandardOpsTest:testIntegrityFunctionPointersLength() (gas: 8913) -LibAllStandardOpsTest:testOpcodeFunctionPointersLength() (gas: 8900) -LibEvalFBoundsTest:testEvalNPFBoundsModConstant(bytes32) (runs: 2048, μ: 58270, ~: 58270) -LibExternCodecTest:testLibExternCodecEncodeExternCall(uint256,bytes32) (runs: 2048, μ: 2156, ~: 2532) -LibExternCodecTest:testLibExternCodecEncodeExternDispatch(uint256,bytes32) (runs: 2048, μ: 1925, ~: 2301) -LibInterpreterDeployTest:testDeployAddressExpressionDeployer() (gas: 1311115) -LibInterpreterDeployTest:testDeployAddressInterpreter() (gas: 3841163) -LibInterpreterDeployTest:testDeployAddressParser() (gas: 3202148) -LibInterpreterDeployTest:testDeployAddressStore() (gas: 220157) -LibInterpreterDeployTest:testExpectedCodeHashExpressionDeployer() (gas: 1295246) -LibInterpreterDeployTest:testExpectedCodeHashInterpreter() (gas: 3816364) -LibInterpreterDeployTest:testExpectedCodeHashParser() (gas: 3179159) -LibInterpreterDeployTest:testExpectedCodeHashStore() (gas: 208330) -LibInterpreterStateStackTraceTest:testStackTraceCall(uint256,uint256,uint256[]) (runs: 2048, μ: 28995, ~: 28761) -LibOpAbsTest:testOpAbsEval() (gas: 282244) -LibOpAbsTest:testOpAbsEvalOperandDisallowed() (gas: 17338) -LibOpAbsTest:testOpAbsIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10673, ~: 10628) -LibOpAbsTest:testOpAbsRun(bytes32,uint16) (runs: 2048, μ: 11372, ~: 11306) -LibOpAbsTest:testOpAbsTwoInputs() (gas: 38994) -LibOpAbsTest:testOpAbsTwoOutputs() (gas: 34731) -LibOpAbsTest:testOpAbsZeroInputs() (gas: 28977) -LibOpAbsTest:testOpAbsZeroOutputs() (gas: 33734) -LibOpAddTest:testOpAddEval2InputsHappyExamples() (gas: 389148) -LibOpAddTest:testOpAddEval2InputsHappyZero() (gas: 56033) -LibOpAddTest:testOpAddEval2InputsHappyZeroMax() (gas: 101218) -LibOpAddTest:testOpAddEval2InputsHappyZeroOne() (gas: 192244) -LibOpAddTest:testOpAddEval3InputsHappy() (gas: 341368) -LibOpAddTest:testOpAddEval3InputsUnhappy() (gas: 387819) -LibOpAddTest:testOpAddEvalOneInput() (gas: 35558) -LibOpAddTest:testOpAddEvalOperandDisallowed() (gas: 90471) -LibOpAddTest:testOpAddEvalTwoOutput() (gas: 43045) -LibOpAddTest:testOpAddEvalZeroInputs() (gas: 29061) -LibOpAddTest:testOpAddEvalZeroOutputs() (gas: 42074) -LibOpAddTest:testOpAddIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11560, ~: 11494) -LibOpAddTest:testOpAddIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10661, ~: 10618) -LibOpAddTest:testOpAddIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10658, ~: 10615) -LibOpAddTest:testOpAddRun(bytes32[]) (runs: 2048, μ: 56199, ~: 57558) -LibOpAnyTest:testOpAnyEval1FalseInput() (gas: 50406) -LibOpAnyTest:testOpAnyEval1TrueInput() (gas: 50390) -LibOpAnyTest:testOpAnyEval2FalseInputs() (gas: 55762) -LibOpAnyTest:testOpAnyEval2MixedInputs() (gas: 56160) -LibOpAnyTest:testOpAnyEval2MixedInputs2() (gas: 56259) -LibOpAnyTest:testOpAnyEval2MixedInputsZeroExponent() (gas: 57311) -LibOpAnyTest:testOpAnyEval2TrueInputs() (gas: 56217) -LibOpAnyTest:testOpAnyEvalFail() (gas: 28686) -LibOpAnyTest:testOpAnyIntegrityGas0() (gas: 3251) -LibOpAnyTest:testOpAnyIntegrityHappy(uint8,uint16) (runs: 2048, μ: 1867, ~: 2140) +BaseRainlangExternConstructionTest:testExternConstructorRevertsEmptyPointers() (gas: 35988) +BaseRainlangExternConstructionTest:testExternConstructorRevertsMoreIntegrity() (gas: 36287) +BaseRainlangExternConstructionTest:testExternConstructorRevertsMoreOpcodes() (gas: 36296) +BaseRainlangExternIERC165Test:testRainlangExternIERC165(bytes4) (runs: 2048, μ: 329642, ~: 329642) +BaseRainlangExternIntegrityOpcodeRangeTest:testExternIntegrityBoundaryHighestValidOpcode(uint16) (runs: 2048, μ: 18158513697557824775, ~: 8935141660703048972) +BaseRainlangExternIntegrityOpcodeRangeTest:testExternIntegrityRevertsOpcodeOutOfRange(uint16,uint16) (runs: 2048, μ: 344857, ~: 344857) +BaseRainlangSubParserIERC165Test:testRainlangSubParserIERC165(uint32) (runs: 2048, μ: 688824, ~: 688824) +BaseRainlangSubParserLiteral2Test:testSubParseLiteral2HappyPath() (gas: 749126) +BaseRainlangSubParserLiteral2Test:testSubParseLiteral2NoMatch() (gas: 681018) +BaseRainlangSubParserLiteral2Test:testSubParseLiteral2RevertsIndexOutOfBounds() (gas: 721496) +BaseRainlangSubParserWord2Test:testSubParseWord2RevertsEmptyWordParsers() (gas: 1057924) +BaseRainlangSubParserWord2Test:testSubParseWord2RevertsIndexOutOfBounds() (gas: 1088061) +LibAllStandardOpsFilesystemOrderingTest:testAuthoringMetaMatchesFilesystemOrdering() (gas: 1290912) +LibAllStandardOpsTest:testAuthoringMetaV2Content() (gas: 94356) +LibAllStandardOpsTest:testFourArrayOrderingConsistency() (gas: 113788) +LibAllStandardOpsTest:testIntegrityFunctionPointersLength() (gas: 8902) +LibAllStandardOpsTest:testLiteralParserFunctionPointersLength() (gas: 1198) +LibAllStandardOpsTest:testOpcodeFunctionPointersLength() (gas: 8901) +LibAllStandardOpsTest:testOperandHandlerFunctionPointersLength() (gas: 8881) +LibCamelToKebabTest:testAcronymBeforeWord() (gas: 13683) +LibCamelToKebabTest:testAcronymWithDigitsBeforeWord() (gas: 14713) +LibCamelToKebabTest:testAllCaps() (gas: 12539) +LibCamelToKebabTest:testCtPop() (gas: 7153) +LibCamelToKebabTest:testLeadingUint() (gas: 17930) +LibCamelToKebabTest:testMaxUint256() (gas: 9694) +LibCamelToKebabTest:testMultiWord() (gas: 16735) +LibCamelToKebabTest:testShortWord() (gas: 5015) +LibCamelToKebabTest:testSimple() (gas: 9794) +LibCamelToKebabTest:testSingleChar() (gas: 4476) +LibCamelToKebabTest:testTrailingDigit() (gas: 6076) +LibEvalFBoundsTest:testEvalFBoundsModConstant(bytes32) (runs: 2048, μ: 58055, ~: 58055) +LibEvalInputsLengthMismatchTest:testEval4InputsMatch() (gas: 21945) +LibEvalInputsLengthMismatchTest:testEval4InputsTooFew() (gas: 22036) +LibEvalInputsLengthMismatchTest:testEval4InputsTooMany() (gas: 22139) +LibEvalInputsLengthMismatchTest:testEval4InputsZeroWhenExpected() (gas: 21756) +LibEvalMaxOutputsTest:testMaxOutputsTruncation(uint8,bytes32,bytes32,bytes32) (runs: 2048, μ: 45154, ~: 45273) +LibEvalMultipleSourceTest:testEvalSourceIndex0VsIndex1() (gas: 68866) +LibEvalMultipleSourceTest:testEvalSourceIndex1() (gas: 61997) +LibEvalOpcodeCountEdgeCasesTest:testEvalExactly16Opcodes() (gas: 160573) +LibEvalOpcodeCountEdgeCasesTest:testEvalExactly8Opcodes() (gas: 94833) +LibEvalOpcodeCountEdgeCasesTest:testEvalZeroOpcodeSource() (gas: 33054) +LibEvalOpcodeCountEdgeCasesTest:testEvalZeroOpcodeSourceWithInputs(uint256,uint256) (runs: 2048, μ: 37214, ~: 37214) +LibEvalRemainderOnlyTest:testEvalLoopRemainderOnlySeven(bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32) (runs: 2048, μ: 69524, ~: 69524) +LibExternCodecTest:testDecodeExternCallStandalone(address,uint16,uint16) (runs: 2048, μ: 765, ~: 765) +LibExternCodecTest:testDecodeExternDispatchMasksOpcode(bytes32,uint16) (runs: 2048, μ: 608, ~: 608) +LibExternCodecTest:testDecodeExternDispatchStandalone(uint16,uint16) (runs: 2048, μ: 603, ~: 603) +LibExternCodecTest:testLibExternCodecEncodeExternCall(string,uint256,bytes32) (runs: 2048, μ: 6269, ~: 6611) +LibExternCodecTest:testLibExternCodecEncodeExternDispatch(uint256,bytes32) (runs: 2048, μ: 1943, ~: 2328) +LibExternOpContextCallingContractSubParserTest:testSubParserCallingContract(uint256,uint256,bytes32) (runs: 2048, μ: 1262, ~: 1262) +LibExternOpContextRainlenSubParserTest:testSubParserRainlen(uint256,uint256,bytes32) (runs: 2048, μ: 1306, ~: 1306) +LibExternOpContextSenderSubParserTest:testSubParserSender(uint256,uint256,bytes32) (runs: 2048, μ: 1283, ~: 1283) +LibExternOpStackOperandSubParserTest:testSubParserStackOperand(uint16,uint256,bytes32) (runs: 2048, μ: 1383, ~: 1383) +LibIntegrityCheckBadOpIOTest:testBadOpInputsLength() (gas: 38018) +LibIntegrityCheckBadOpIOTest:testBadOpOutputsLength() (gas: 38072) +LibIntegrityCheckHighwaterTest:testHighwaterAdvancesAfterMultiOutputCall() (gas: 60593) +LibIntegrityCheckIoTest:testIntegrityCheck2IoSingleSource() (gas: 33229) +LibIntegrityCheckIoTest:testIntegrityCheck2IoThreeSources() (gas: 86733) +LibIntegrityCheckIoTest:testIntegrityCheck2IoTwoSources() (gas: 55202) +LibIntegrityCheckMultiSourceTest:testIntegrityThreeSources() (gas: 64751) +LibIntegrityCheckMultiSourceTest:testIntegrityTwoSources() (gas: 37581) +LibIntegrityCheckNewStateTest:testNewState(bytes,uint256,bytes32[]) (runs: 2048, μ: 38587, ~: 38581) +LibIntegrityCheckStackMaxIndexTest:testStackMaxIndexTracksPeak() (gas: 27590) +LibIntegrityCheckTest:testOpcodeInRange() (gas: 18158513697557819442) +LibIntegrityCheckTest:testOpcodeOutOfRange(uint256) (runs: 2048, μ: 12011, ~: 12071) +LibIntegrityCheckTest:testStackAllocationMismatch() (gas: 625640) +LibIntegrityCheckTest:testStackOutputsMismatch() (gas: 625240) +LibIntegrityCheckTest:testStackUnderflow() (gas: 620463) +LibIntegrityCheckTest:testStackUnderflowHighwater() (gas: 625420) +LibIntegrityCheckZeroSourceTest:testZeroSourceCommentOnly() (gas: 9140) +LibIntegrityCheckZeroSourceTest:testZeroSourceEmptyInput() (gas: 7373) +LibInterpreterDeployProdTest:testProdDeployArbitrum() (gas: 17674) +LibInterpreterDeployProdTest:testProdDeployBase() (gas: 17634) +LibInterpreterDeployProdTest:testProdDeployBaseSepolia() (gas: 17696) +LibInterpreterDeployProdTest:testProdDeployFlare() (gas: 17674) +LibInterpreterDeployProdTest:testProdDeployPolygon() (gas: 17651) +LibInterpreterDeployTest:testCreationCodeExpressionDeployer() (gas: 6238) +LibInterpreterDeployTest:testCreationCodeInterpreter() (gas: 23010) +LibInterpreterDeployTest:testCreationCodeParser() (gas: 19034) +LibInterpreterDeployTest:testCreationCodeRainlang() (gas: 978) +LibInterpreterDeployTest:testCreationCodeReferenceExtern() (gas: 10823) +LibInterpreterDeployTest:testCreationCodeStore() (gas: 1294) +LibInterpreterDeployTest:testDeployAddressExpressionDeployer() (gas: 1453694) +LibInterpreterDeployTest:testDeployAddressInterpreter() (gas: 4815495) +LibInterpreterDeployTest:testDeployAddressParser() (gas: 4131259) +LibInterpreterDeployTest:testDeployAddressRainlang() (gas: 140594) +LibInterpreterDeployTest:testDeployAddressStore() (gas: 225735) +LibInterpreterDeployTest:testEtchRainlang() (gas: 45156) +LibInterpreterDeployTest:testEtchRainlangIdempotent() (gas: 45842) +LibInterpreterDeployTest:testExpectedCodeHashExpressionDeployer() (gas: 1440817) +LibInterpreterDeployTest:testExpectedCodeHashInterpreter() (gas: 4798329) +LibInterpreterDeployTest:testExpectedCodeHashParser() (gas: 4112486) +LibInterpreterDeployTest:testExpectedCodeHashRainlang() (gas: 133368) +LibInterpreterDeployTest:testExpectedCodeHashStore() (gas: 218377) +LibInterpreterDeployTest:testGeneratedDeployedAddressExpressionDeployer() (gas: 280) +LibInterpreterDeployTest:testGeneratedDeployedAddressInterpreter() (gas: 323) +LibInterpreterDeployTest:testGeneratedDeployedAddressParser() (gas: 302) +LibInterpreterDeployTest:testGeneratedDeployedAddressRainlang() (gas: 281) +LibInterpreterDeployTest:testGeneratedDeployedAddressStore() (gas: 282) +LibInterpreterDeployTest:testNoCborMetadataExpressionDeployer() (gas: 1442131) +LibInterpreterDeployTest:testNoCborMetadataInterpreter() (gas: 4801199) +LibInterpreterDeployTest:testNoCborMetadataParser() (gas: 4114961) +LibInterpreterDeployTest:testNoCborMetadataRainlang() (gas: 134065) +LibInterpreterDeployTest:testNoCborMetadataStore() (gas: 219047) +LibInterpreterDeployTest:testNotMetamorphicExpressionDeployer() (gas: 2139986) +LibInterpreterDeployTest:testNotMetamorphicInterpreter() (gas: 7003018) +LibInterpreterDeployTest:testNotMetamorphicParser() (gas: 5932763) +LibInterpreterDeployTest:testNotMetamorphicRainlang() (gas: 164264) +LibInterpreterDeployTest:testNotMetamorphicStore() (gas: 306271) +LibInterpreterDeployTest:testRuntimeCodeExpressionDeployer() (gas: 1446051) +LibInterpreterDeployTest:testRuntimeCodeInterpreter() (gas: 4817492) +LibInterpreterDeployTest:testRuntimeCodeParser() (gas: 4128487) +LibInterpreterDeployTest:testRuntimeCodeRainlang() (gas: 134009) +LibInterpreterDeployTest:testRuntimeCodeReferenceExtern() (gas: 2433517) +LibInterpreterDeployTest:testRuntimeCodeStore() (gas: 219316) +LibInterpreterStateDataContractTest:testSerializeDeserializeEmptyConstants() (gas: 11600) +LibInterpreterStateDataContractTest:testSerializeDeserializeRoundTrip() (gas: 13356) +LibInterpreterStateDataContractTest:testSerializeDeserializeRoundTripFuzzed(bytes32[]) (runs: 2048, μ: 79352, ~: 78139) +LibInterpreterStateDataContractTest:testSerializeDeserializeTwoSourceRoundTrip(bytes32[]) (runs: 2048, μ: 79999, ~: 78786) +LibInterpreterStateDataContractTest:testSerializeSize(uint8,uint8) (runs: 2048, μ: 1545, ~: 1317) +LibInterpreterStateDataContractTest:testSerializeSizeEmpty() (gas: 407) +LibInterpreterStateDataContractTest:testUnsafeDeserializeContext(bytes32[][]) (runs: 2048, μ: 22028506, ~: 19595594) +LibInterpreterStateDataContractTest:testUnsafeDeserializeFs(bytes) (runs: 2048, μ: 12277, ~: 12127) +LibInterpreterStateDataContractTest:testUnsafeDeserializeNamespace(uint256) (runs: 2048, μ: 11529, ~: 11529) +LibInterpreterStateDataContractTest:testUnsafeDeserializeSourceIndex(uint256) (runs: 2048, μ: 11531, ~: 11531) +LibInterpreterStateDataContractTest:testUnsafeDeserializeStackAllocation(uint8) (runs: 2048, μ: 15235, ~: 13076) +LibInterpreterStateDataContractTest:testUnsafeDeserializeStateKVZero() (gas: 11494) +LibInterpreterStateDataContractTest:testUnsafeDeserializeStore(address) (runs: 2048, μ: 11606, ~: 11606) +LibInterpreterStateDataContractTest:testUnsafeDeserializeTwoSourceStackAllocation(uint8,uint8) (runs: 2048, μ: 22535, ~: 21093) +LibInterpreterStateFingerprintTest:testFingerprintChangesWithSourceIndex(uint256,uint256) (runs: 2048, μ: 7046, ~: 7046) +LibInterpreterStateFingerprintTest:testFingerprintDeterministic() (gas: 3969) +LibInterpreterStateStackBottomsTest:testStackBottomsEmpty() (gas: 571) +LibInterpreterStateStackBottomsTest:testStackBottomsMultiple(uint8,uint8,uint8) (runs: 2048, μ: 4380, ~: 4179) +LibInterpreterStateStackBottomsTest:testStackBottomsSingle(uint8) (runs: 2048, μ: 1822, ~: 1613) +LibInterpreterStateStackTraceTest:testStackTraceCall(uint256,uint256,uint256[]) (runs: 2048, μ: 28964, ~: 28730) +LibInterpreterStateStackTraceTest:testStackTraceMasksUpperBits(uint256,uint256,uint256[]) (runs: 2048, μ: 28119, ~: 27702) +LibOpAbsTest:testOpAbsEval() (gas: 287814) +LibOpAbsTest:testOpAbsEvalOperandDisallowed() (gas: 17474) +LibOpAbsTest:testOpAbsIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10701, ~: 10629) +LibOpAbsTest:testOpAbsRun(bytes32,uint16) (runs: 2048, μ: 11201, ~: 11133) +LibOpAbsTest:testOpAbsTwoInputs() (gas: 39959) +LibOpAbsTest:testOpAbsTwoOutputs() (gas: 35519) +LibOpAbsTest:testOpAbsZeroInputs() (gas: 29448) +LibOpAbsTest:testOpAbsZeroOutputs() (gas: 34357) +LibOpAddTest:testOpAddEval2InputsHappyExamples() (gas: 397388) +LibOpAddTest:testOpAddEval2InputsHappyZero() (gas: 57126) +LibOpAddTest:testOpAddEval2InputsHappyZeroMax() (gas: 103336) +LibOpAddTest:testOpAddEval2InputsHappyZeroOne() (gas: 196382) +LibOpAddTest:testOpAddEval3InputsHappy() (gas: 348904) +LibOpAddTest:testOpAddEval3InputsUnhappy() (gas: 396893) +LibOpAddTest:testOpAddEvalOneInput() (gas: 36234) +LibOpAddTest:testOpAddEvalOperandDisallowed() (gas: 91461) +LibOpAddTest:testOpAddEvalTwoOutput() (gas: 43999) +LibOpAddTest:testOpAddEvalZeroInputs() (gas: 29526) +LibOpAddTest:testOpAddEvalZeroOutputs() (gas: 42863) +LibOpAddTest:testOpAddIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11587, ~: 11577) +LibOpAddTest:testOpAddIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10664, ~: 10609) +LibOpAddTest:testOpAddIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10661, ~: 10606) +LibOpAddTest:testOpAddRun(bytes32[]) (runs: 2048, μ: 55228, ~: 56523) +LibOpAnyTest:testOpAnyEval1FalseInput() (gas: 51265) +LibOpAnyTest:testOpAnyEval1TrueInput() (gas: 51259) +LibOpAnyTest:testOpAnyEval2FalseInputs() (gas: 56887) +LibOpAnyTest:testOpAnyEval2MixedInputs() (gas: 57282) +LibOpAnyTest:testOpAnyEval2MixedInputs2() (gas: 57369) +LibOpAnyTest:testOpAnyEval2MixedInputsZeroExponent() (gas: 58387) +LibOpAnyTest:testOpAnyEval2TrueInputs() (gas: 57327) +LibOpAnyTest:testOpAnyEvalFail() (gas: 29179) +LibOpAnyTest:testOpAnyEvalOperandDisallowed() (gas: 17442) +LibOpAnyTest:testOpAnyIntegrityGas0() (gas: 3261) +LibOpAnyTest:testOpAnyIntegrityHappy(uint8,uint16) (runs: 2048, μ: 1891, ~: 2160) LibOpAnyTest:testOpAnyIntegrityUnhappyZeroInputs() (gas: 867) -LibOpAnyTest:testOpAnyRun(bytes32[],uint16) (runs: 2048, μ: 15162, ~: 15163) -LibOpAnyTest:testOpAnyRunGas0() (gas: 3365) -LibOpAnyTest:testOpAnyTwoOutputs() (gas: 34678) -LibOpAnyTest:testOpAnyZeroOutputs() (gas: 33659) -LibOpAvgTest:testOpAvgEvalExamples() (gas: 460008) -LibOpAvgTest:testOpAvgEvalOneInput() (gas: 34066) -LibOpAvgTest:testOpAvgEvalOperandDisallowed() (gas: 17337) -LibOpAvgTest:testOpAvgEvalThreeInputs() (gas: 43965) -LibOpAvgTest:testOpAvgEvalTwoOutputs() (gas: 39603) -LibOpAvgTest:testOpAvgEvalZeroOutputs() (gas: 38566) -LibOpAvgTest:testOpAvgIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10695, ~: 10650) -LibOpAvgTest:testOpAvgRun(int256,int256,int256,int256,uint16) (runs: 2048, μ: 27015, ~: 27095) -LibOpBinaryEqualToTest:testOpBinaryEqualToEval2() (gas: 201049) -LibOpBinaryEqualToTest:testOpBinaryEqualToEval2InputsBothOne() (gas: 56454) -LibOpBinaryEqualToTest:testOpBinaryEqualToEval2InputsFirstOneSecondZero() (gas: 56954) -LibOpBinaryEqualToTest:testOpBinaryEqualToEval2InputsFirstZeroSecondOne() (gas: 56956) -LibOpBinaryEqualToTest:testOpBinaryEqualToEval2ZeroInputs() (gas: 56427) -LibOpBinaryEqualToTest:testOpBinaryEqualToEvalFail0Inputs() (gas: 29582) -LibOpBinaryEqualToTest:testOpBinaryEqualToEvalFail1Input() (gas: 33887) -LibOpBinaryEqualToTest:testOpBinaryEqualToEvalFail3Inputs() (gas: 42285) -LibOpBinaryEqualToTest:testOpBinaryEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12062, ~: 11975) -LibOpBinaryEqualToTest:testOpBinaryEqualToRun(bytes32,bytes32) (runs: 2048, μ: 7955, ~: 7955) -LibOpBinaryEqualToTest:testOpBinaryEqualToTwoOutputs() (gas: 40540) -LibOpBinaryEqualToTest:testOpBinaryEqualToZeroOutputs() (gas: 39482) -LibOpBitwiseAndNPTest:testOpBitwiseAndNPEvalHappy() (gas: 690733) -LibOpBitwiseAndNPTest:testOpBitwiseAndNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10614, ~: 10569) -LibOpBitwiseAndNPTest:testOpBitwiseAndNPRun(bytes32,bytes32) (runs: 2048, μ: 7961, ~: 7961) -LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalBadOperand() (gas: 17983) -LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalOneInput() (gas: 34647) -LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalThreeInputs() (gas: 44516) -LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalTwoOutputs() (gas: 40262) -LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalZeroInputs() (gas: 29615) -LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalZeroOutputs() (gas: 39247) -LibOpBitwiseOrNPTest:testOpBitwiseORNPEval() (gas: 689439) -LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalBadOperand() (gas: 17924) -LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalOneInput() (gas: 34588) -LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalThreeInputs() (gas: 44414) -LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalTwoOutputs() (gas: 40180) -LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalZeroInputs() (gas: 29512) -LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalZeroOutputs() (gas: 39188) -LibOpBitwiseOrNPTest:testOpBitwiseORNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10613, ~: 10568) -LibOpBitwiseOrNPTest:testOpBitwiseORNPRun(bytes32,bytes32) (runs: 2048, μ: 7918, ~: 7918) -LibOpBlockNumberTest:testOpBlockNumberEval(uint256) (runs: 2048, μ: 48888, ~: 48644) -LibOpBlockNumberTest:testOpBlockNumberEvalOneInput() (gas: 33985) -LibOpBlockNumberTest:testOpBlockNumberEvalTwoOutputs() (gas: 30294) -LibOpBlockNumberTest:testOpBlockNumberEvalZeroOutputs() (gas: 29296) -LibOpBlockNumberTest:testOpBlockNumberIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12044, ~: 12000) -LibOpBlockNumberTest:testOpBlockNumberRun(uint256,uint16) (runs: 2048, μ: 11579, ~: 11243) -LibOpCallTest:testCallTraceInnerOnly() (gas: 61013) -LibOpCallTest:testCallTraceOuterOnly() (gas: 43827) -LibOpCallTest:testOpCallNPIntegrityIO((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint8,bytes32) (runs: 2048, μ: 27862, ~: 27185) -LibOpCallTest:testOpCallNPIntegritySourceIndexOutOfBounds((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint256,uint256,bytes32) (runs: 2048, μ: 47707, ~: 47460) -LibOpCallTest:testOpCallNPIntegrityTooManyOutputs((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint8,bytes32) (runs: 2048, μ: 48192, ~: 47897) -LibOpCallTest:testOpCallNPRunInputsMismatch() (gas: 71446) -LibOpCallTest:testOpCallNPRunOutputsMismatch() (gas: 64594) -LibOpCallTest:testOpCallNPRunSourceDoesNotExist() (gas: 337056) -LibOpCeilTest:testOpCeilEval() (gas: 521227) -LibOpCeilTest:testOpCeilEvalOperandDisallowed() (gas: 17396) -LibOpCeilTest:testOpCeilIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10716, ~: 10671) -LibOpCeilTest:testOpCeilRun(bytes32,uint16) (runs: 2048, μ: 8491, ~: 8014) -LibOpCeilTest:testOpCeilTwoInputs() (gas: 39075) -LibOpCeilTest:testOpCeilTwoOutputs() (gas: 34832) -LibOpCeilTest:testOpCeilZeroInputs() (gas: 29036) -LibOpCeilTest:testOpCeilZeroOutputs() (gas: 33814) -LibOpChainIdTest:testOpChainIDEval(uint64) (runs: 2048, μ: 48168, ~: 48168) -LibOpChainIdTest:testOpChainIDIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12058, ~: 12001) -LibOpChainIdTest:testOpChainIdEvalFail() (gas: 33280) -LibOpChainIdTest:testOpChainIdRun(uint64,uint16) (runs: 2048, μ: 11083, ~: 11085) -LibOpChainIdTest:testOpChainIdTwoOutputs() (gas: 29983) -LibOpChainIdTest:testOpChainIdZeroOutputs() (gas: 28943) -LibOpConditionsTest:testOpConditionsEval1FalseInput1TrueInput() (gas: 68816) -LibOpConditionsTest:testOpConditionsEval1FalseInputRevert() (gas: 53151) -LibOpConditionsTest:testOpConditionsEval1TrueInput1FalseInput() (gas: 68690) -LibOpConditionsTest:testOpConditionsEval1TrueInputZeroOutput() (gas: 57095) -LibOpConditionsTest:testOpConditionsEval2MixedInputs() (gas: 57197) -LibOpConditionsTest:testOpConditionsEval2TrueInputs() (gas: 68791) -LibOpConditionsTest:testOpConditionsEvalErrorCode() (gas: 65242) -LibOpConditionsTest:testOpConditionsEvalFail0Inputs() (gas: 29320) -LibOpConditionsTest:testOpConditionsEvalFail1Inputs() (gas: 33594) -LibOpConditionsTest:testOpConditionsEvalUnhappyOperand() (gas: 17865) -LibOpConditionsTest:testOpConditionsIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12280, ~: 12206) -LibOpConditionsTest:testOpConditionsRun(bytes32[],bytes32) (runs: 2048, μ: 13118, ~: 13008) -LibOpConditionsTest:testOpConditionsRunNoConditionsMet(bytes32[],string) (runs: 2048, μ: 26073, ~: 26225) -LibOpConditionsTest:testOpConditionsTwoOutputs() (gas: 38754) -LibOpConditionsTest:testOpConditionsZeroOutputs() (gas: 37715) -LibOpConstantTest:testOpConstantEval() (gas: 50763) -LibOpConstantTest:testOpConstantEvalZeroConstants() (gas: 40351) -LibOpConstantTest:testOpConstantNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 14725, ~: 14670) -LibOpConstantTest:testOpConstantNPIntegrityOOBConstants((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 36912, ~: 36832) -LibOpConstantTest:testOpConstantNPMultipleOutputErrorSugared() (gas: 30602) -LibOpConstantTest:testOpConstantNPMultipleOutputErrorUnsugared() (gas: 40553) -LibOpConstantTest:testOpConstantNPRun(bytes32[],uint16) (runs: 2048, μ: 44104, ~: 43807) -LibOpConstantTest:testOpConstantNPZeroOutputErrorSugared() (gas: 29256) -LibOpConstantTest:testOpConstantNPZeroOutputErrorUnsugared() (gas: 39196) -LibOpContextNPTest:testOpContextNPEval00(bytes32[][]) (runs: 100, μ: 7253056, ~: 6852755) -LibOpContextNPTest:testOpContextNPEval01(bytes32[][]) (runs: 100, μ: 7253273, ~: 6852972) -LibOpContextNPTest:testOpContextNPEval10(bytes32[][]) (runs: 100, μ: 7253236, ~: 6852935) -LibOpContextNPTest:testOpContextNPEval11(bytes32[][]) (runs: 100, μ: 7253384, ~: 6853083) -LibOpContextNPTest:testOpContextNPEvalOOBi(bytes32[]) (runs: 100, μ: 75845, ~: 77003) -LibOpContextNPTest:testOpContextNPEvalOOBj(bytes32) (runs: 2048, μ: 46801, ~: 46801) -LibOpContextNPTest:testOpContextNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10765, ~: 10721) -LibOpContextNPTest:testOpContextNPOneInput() (gas: 40594) -LibOpContextNPTest:testOpContextNPRun(bytes32[][],uint256,uint256) (runs: 100, μ: 10289209, ~: 8985890) -LibOpContextNPTest:testOpContextNPRunOOBi(bytes32[][],uint256,uint256) (runs: 100, μ: 10692876, ~: 9547182) -LibOpContextNPTest:testOpContextNPRunOOBj(bytes32[][],uint256,uint256) (runs: 100, μ: 10693816, ~: 9548113) -LibOpContextNPTest:testOpContextNPTwoInputs() (gas: 45508) -LibOpContextNPTest:testOpContextNPTwoOutputs() (gas: 36202) -LibOpContextNPTest:testOpContextNPZeroOutputs() (gas: 35161) -LibOpCtPopNPTest:testOpCtPopNPEval(bytes32) (runs: 2048, μ: 78685, ~: 83877) -LibOpCtPopNPTest:testOpCtPopNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10612, ~: 10567) -LibOpCtPopNPTest:testOpCtPopNPRun(bytes32) (runs: 2048, μ: 8058, ~: 8058) -LibOpCtPopNPTest:testOpCtPopNPTwoInputs() (gas: 40077) -LibOpCtPopNPTest:testOpCtPopNPTwoOutputs() (gas: 35891) -LibOpCtPopNPTest:testOpCtPopNPZeroInputs() (gas: 30109) -LibOpCtPopNPTest:testOpCtPopNPZeroOutputs() (gas: 34851) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalHappy() (gas: 820201) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalTwoInputs() (gas: 46707) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalTwoOutputs() (gas: 42501) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalZeroInputs() (gas: 36785) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalZeroOutputs() (gas: 41459) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8,uint8) (runs: 2048, μ: 13248, ~: 13399) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrityFail((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2048, μ: 36967, ~: 36857) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrityFailZeroLength((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2048, μ: 35640, ~: 35665) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPRun(bytes32,uint8,uint8) (runs: 2048, μ: 9004, ~: 8902) -LibOpDivTest:testDebugOpDivRun() (gas: 10675) -LibOpDivTest:testOpDivEvalOneInput() (gas: 122650) -LibOpDivTest:testOpDivEvalOperandsDisallowed() (gas: 90447) -LibOpDivTest:testOpDivEvalThreeInputsHappy() (gas: 398091) -LibOpDivTest:testOpDivEvalThreeInputsUnhappyExamples() (gas: 204994) -LibOpDivTest:testOpDivEvalThreeInputsUnhappyOverflow() (gas: 66977) -LibOpDivTest:testOpDivEvalTwoInputsHappy() (gas: 343577) -LibOpDivTest:testOpDivEvalTwoInputsUnhappyDivZero() (gas: 137321) -LibOpDivTest:testOpDivEvalTwoInputsUnhappyOverflow() (gas: 57716) -LibOpDivTest:testOpDivEvalTwoOutputs() (gas: 40195) -LibOpDivTest:testOpDivEvalZeroInputs() (gas: 29040) -LibOpDivTest:testOpDivEvalZeroOutputs() (gas: 39180) -LibOpDivTest:testOpDivIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11537, ~: 11505) -LibOpDivTest:testOpDivIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10614, ~: 10571) -LibOpDivTest:testOpDivIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10615, ~: 10572) -LibOpDivTest:testOpDivRun(bytes32[]) (runs: 2048, μ: 70095, ~: 66947) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalFourInputs() (gas: 54494) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalHappy(uint256,uint8) (runs: 2048, μ: 71905, ~: 71825) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalOneInput() (gas: 35935) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalOperandDisallowed() (gas: 18311) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalTwoInputs() (gas: 42317) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalTwoOutputs() (gas: 49323) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalZeroInputs() (gas: 29955) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalZeroOutputs() (gas: 48310) -LibOpERC20AllowanceTest:testOpERC20AllowanceIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10634, ~: 10589) -LibOpERC20AllowanceTest:testOpERC20AllowanceRun(address,address,address,uint256,uint8) (runs: 2048, μ: 20720, ~: 20623) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalHappy(uint256,uint8) (runs: 2048, μ: 66133, ~: 66135) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalOneInput() (gas: 36046) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalOperandDisallowed() (gas: 18369) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalOverflow(uint256,uint8) (runs: 2048, μ: 59594, ~: 59594) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalThreeInputs() (gas: 48206) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalTwoOutputs() (gas: 43085) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroInputs() (gas: 30020) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroOutputs() (gas: 42028) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10613, ~: 10568) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfRun(address,address,uint256,uint16,uint8) (runs: 2048, μ: 21231, ~: 21233) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalHappy(uint256,uint8) (runs: 2048, μ: 59565, ~: 59567) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalOperandDisallowed() (gas: 18532) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalOverflow(uint256,uint8) (runs: 2048, μ: 52993, ~: 52993) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoInputs() (gas: 42545) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoOutputs() (gas: 36919) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroInputs() (gas: 30203) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroOutputs() (gas: 35902) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10657, ~: 10612) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyNPRun(address,uint256,uint16,uint8) (runs: 2048, μ: 20623, ~: 20626) -LibOpERC5313OwnerTest:testOpERC5313OwnerEvalHappy() (gas: 55828) -LibOpERC5313OwnerTest:testOpERC5313OwnerEvalOperandDisallowed() (gas: 18115) -LibOpERC5313OwnerTest:testOpERC5313OwnerEvalTwoInputs() (gas: 42135) -LibOpERC5313OwnerTest:testOpERC5313OwnerEvalTwoOutputs() (gas: 36479) -LibOpERC5313OwnerTest:testOpERC5313OwnerEvalZeroInputs() (gas: 29791) -LibOpERC5313OwnerTest:testOpERC5313OwnerEvalZeroOutputs() (gas: 35461) -LibOpERC5313OwnerTest:testOpERC5313OwnerOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10614, ~: 10569) -LibOpERC5313OwnerTest:testOpERC5313OwnerOfRun(address,address,uint16) (runs: 2048, μ: 17197, ~: 17197) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfEvalHappy(address,address,uint256) (runs: 2048, μ: 102448, ~: 102561) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12049, ~: 11987) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail0() (gas: 29766) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail1() (gas: 34041) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail3() (gas: 43372) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFailOperand() (gas: 21273) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfOneInput() (gas: 34414) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfRun(address,address,uint256,uint16) (runs: 2048, μ: 19494, ~: 19497) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfThreeInputs() (gas: 43734) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfTwoOutputs() (gas: 39745) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfZeroInputs() (gas: 30105) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfZeroOutputs() (gas: 38702) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFail0() (gas: 29648) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFail1() (gas: 33921) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFail3() (gas: 43307) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFailOperand() (gas: 18075) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalHappy(address,uint256,address) (runs: 2048, μ: 94029, ~: 91384) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalOneInput() (gas: 34285) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalThreeInputs() (gas: 43614) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalZeroInputs() (gas: 30000) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalZeroOutputs() (gas: 38552) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2048, μ: 10572, ~: 10586) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPRun(address,bytes32,address,uint16) (runs: 2048, μ: 17611, ~: 17611) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPTwoOutputs() (gas: 39587) -LibOpETest:testOpEEval() (gas: 39658) -LibOpETest:testOpEEvalOneInput() (gas: 33077) -LibOpETest:testOpEEvalTwoOutputs() (gas: 29452) -LibOpETest:testOpEEvalZeroOutputs() (gas: 28412) -LibOpETest:testOpEIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12068, ~: 11952) -LibOpETest:testOpERun(uint16) (runs: 2048, μ: 7566, ~: 7566) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalHappy() (gas: 805204) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalOneInput() (gas: 41069) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalThreeInputs() (gas: 50916) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalTwoOutputs() (gas: 46684) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalZeroInputs() (gas: 36036) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalZeroOutputs() (gas: 45691) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2048, μ: 11597, ~: 11604) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrityFail((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2048, μ: 37175, ~: 37013) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrityFailZeroLength((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2048, μ: 35772, ~: 35797) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPRun(bytes32,bytes32,uint8,uint8) (runs: 2048, μ: 9378, ~: 9232) -LibOpEnsureTest:testOpEnsureEvalBadOutputs() (gas: 34467) -LibOpEnsureTest:testOpEnsureEvalBadOutputs2() (gas: 33925) -LibOpEnsureTest:testOpEnsureEvalHappy() (gas: 160569) -LibOpEnsureTest:testOpEnsureEvalOne() (gas: 33575) -LibOpEnsureTest:testOpEnsureEvalThree() (gas: 44461) -LibOpEnsureTest:testOpEnsureEvalUnhappy() (gas: 158022) -LibOpEnsureTest:testOpEnsureEvalUnhappyOperand() (gas: 16837) -LibOpEnsureTest:testOpEnsureEvalZero() (gas: 28481) -LibOpEnsureTest:testOpEnsureIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12068, ~: 12033) -LibOpEnsureTest:testOpEnsureIntegrityUnhappy((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10520, ~: 10477) -LibOpEnsureTest:testOpEnsureOneOutput() (gas: 38538) -LibOpEnsureTest:testOpEnsureRun(bytes32,string) (runs: 2048, μ: 12484, ~: 12510) -LibOpEqualToNPTest:testOpEqualToEval2Inputs() (gas: 329153) -LibOpEqualToNPTest:testOpEqualToEval2InputsBothOne() (gas: 56274) -LibOpEqualToNPTest:testOpEqualToEval2InputsFirstOneSecondZero() (gas: 56731) -LibOpEqualToNPTest:testOpEqualToEval2InputsFirstZeroSecondOne() (gas: 56734) -LibOpEqualToNPTest:testOpEqualToEval2ZeroInputs() (gas: 56225) -LibOpEqualToNPTest:testOpEqualToEvalFail0Inputs() (gas: 29015) -LibOpEqualToNPTest:testOpEqualToEvalFail1Input() (gas: 33311) -LibOpEqualToNPTest:testOpEqualToEvalFail3Inputs() (gas: 41699) -LibOpEqualToNPTest:testOpEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12049, ~: 12002) -LibOpEqualToNPTest:testOpEqualToRun(bytes32,bytes32) (runs: 2048, μ: 8872, ~: 8762) -LibOpEqualToNPTest:testOpEqualToTwoOutputs() (gas: 39995) -LibOpEqualToNPTest:testOpEqualToZeroOutputs() (gas: 38915) -LibOpEveryTest:testOpEveryEval1FalseInput() (gas: 50517) -LibOpEveryTest:testOpEveryEval1TrueInput() (gas: 50867) -LibOpEveryTest:testOpEveryEval2FalseInputs() (gas: 55750) -LibOpEveryTest:testOpEveryEval2MixedInputs() (gas: 56396) -LibOpEveryTest:testOpEveryEval2MixedInputs2() (gas: 56323) -LibOpEveryTest:testOpEveryEval2TrueInputs() (gas: 56748) -LibOpEveryTest:testOpEveryEvalFail() (gas: 28814) -LibOpEveryTest:testOpEveryEvalZeroWithExponent() (gas: 57397) -LibOpEveryTest:testOpEveryIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12191, ~: 12109) -LibOpEveryTest:testOpEveryIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10653, ~: 10610) -LibOpEveryTest:testOpEveryRun(bytes32[]) (runs: 2048, μ: 14402, ~: 14429) -LibOpEveryTest:testOpEveryTwoOutputs() (gas: 34907) -LibOpEveryTest:testOpEveryZeroOutputs() (gas: 33889) -LibOpExp2Test:testOpExp2EvalBad() (gas: 63206) -LibOpExp2Test:testOpExp2EvalExample() (gas: 239998) -LibOpExp2Test:testOpExp2EvalOperandDisallowed() (gas: 17417) -LibOpExp2Test:testOpExp2Integrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10693, ~: 10648) -LibOpExp2Test:testOpExp2Run(int224,int32,uint16) (runs: 2048, μ: 83386, ~: 62897) -LibOpExp2Test:testOpExp2TwoOutputs() (gas: 34790) -LibOpExp2Test:testOpExp2ZeroOutputs() (gas: 33770) -LibOpExpTest:testOpExpEvalExample() (gas: 285984) -LibOpExpTest:testOpExpEvalOperandDisallowed() (gas: 17336) -LibOpExpTest:testOpExpEvalTwoInputs() (gas: 39038) -LibOpExpTest:testOpExpEvalZeroInputs() (gas: 28955) -LibOpExpTest:testOpExpIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10693, ~: 10648) -LibOpExpTest:testOpExpRun(int224,int32,uint16) (runs: 2048, μ: 112862, ~: 98760) -LibOpExpTest:testOpExpTwoOutputs() (gas: 34731) -LibOpExpTest:testOpExpZeroOutputs() (gas: 33711) -LibOpExponentialGrowthTest:testOpExponentialGrowthEval() (gas: 815233) -LibOpExponentialGrowthTest:testOpExponentialGrowthEvalFourInputs() (gas: 50650) -LibOpExponentialGrowthTest:testOpExponentialGrowthEvalOneInput() (gas: 35250) -LibOpExponentialGrowthTest:testOpExponentialGrowthEvalOperandDisallowed() (gas: 18519) -LibOpExponentialGrowthTest:testOpExponentialGrowthEvalTwoInputs() (gas: 40690) -LibOpExponentialGrowthTest:testOpExponentialGrowthEvalTwoOutputs() (gas: 46289) -LibOpExponentialGrowthTest:testOpExponentialGrowthEvalZeroInputs() (gas: 29821) -LibOpExponentialGrowthTest:testOpExponentialGrowthEvalZeroOutputs() (gas: 45231) -LibOpExponentialGrowthTest:testOpExponentialGrowthIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10671, ~: 10626) -LibOpExponentialGrowthTest:testOpExponentialGrowthRun(int224,int32,int224,int32,int224,int32,uint16) (runs: 2048, μ: 99182, ~: 82881) -LibOpExternNPTest:testOpExternNPEvalHappy() (gas: 98693) -LibOpExternNPTest:testOpExternNPEvalMultipleInputsOutputsHappy() (gas: 115676) -LibOpExternNPTest:testOpExternNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),address,uint16,uint8,uint8) (runs: 2048, μ: 27625, ~: 27629) -LibOpExternNPTest:testOpExternNPIntegrityNotAnExternContract((uint256,uint256,uint256,bytes32[],uint256,bytes),address,uint16,uint8,uint8) (runs: 2048, μ: 47363, ~: 47321) -LibOpExternNPTest:testOpExternNPRunHappy(address,bytes32[],uint16,bytes32[],bytes32[]) (runs: 2048, μ: 94158, ~: 94243) -LibOpFloorTest:testOpFloorEval() (gas: 244458) -LibOpFloorTest:testOpFloorEvalOperandDisallowed() (gas: 17477) -LibOpFloorTest:testOpFloorIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10672, ~: 10627) -LibOpFloorTest:testOpFloorRun(bytes32,uint16) (runs: 2048, μ: 8521, ~: 8014) -LibOpFloorTest:testOpFloorTwoInputs() (gas: 39178) -LibOpFloorTest:testOpFloorTwoOutputs() (gas: 34892) -LibOpFloorTest:testOpFloorZeroInputs() (gas: 29140) -LibOpFloorTest:testOpFloorZeroOutputs() (gas: 33896) -LibOpFracTest:testOpFracEval() (gas: 324777) -LibOpFracTest:testOpFracEvalOperandDisallowed() (gas: 17395) -LibOpFracTest:testOpFracIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10714, ~: 10669) -LibOpFracTest:testOpFracRun(bytes32,uint16) (runs: 2048, μ: 8487, ~: 8434) -LibOpFracTest:testOpFracTwoInputs() (gas: 39065) -LibOpFracTest:testOpFracTwoOutputs() (gas: 34822) -LibOpFracTest:testOpFracZeroInputs() (gas: 29025) -LibOpFracTest:testOpFracZeroOutputs() (gas: 33781) -LibOpGetTest:testLibOpGetEvalKeyNotSet() (gas: 273899) -LibOpGetTest:testLibOpGetEvalOperandDisallowed() (gas: 56822) -LibOpGetTest:testLibOpGetEvalSetThenGet() (gas: 472032) -LibOpGetTest:testLibOpGetEvalStoreAndSetAndGet() (gas: 233395) -LibOpGetTest:testLibOpGetEvalStoreThenGet() (gas: 434522) -LibOpGetTest:testLibOpGetEvalThreeInputs() (gas: 43778) -LibOpGetTest:testLibOpGetEvalTwoInputs() (gas: 38556) -LibOpGetTest:testLibOpGetEvalTwoOutputs() (gas: 34160) -LibOpGetTest:testLibOpGetEvalZeroInputs() (gas: 28605) -LibOpGetTest:testLibOpGetEvalZeroOutputs() (gas: 33141) -LibOpGetTest:testLibOpGetIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12272, ~: 12189) -LibOpGetTest:testLibOpGetRunState(bytes32,bytes32,uint16) (runs: 2048, μ: 7972, ~: 7977) -LibOpGetTest:testLibOpGetRunStateAndStore(bytes32,bytes32,bytes32,uint16) (runs: 2048, μ: 35942, ~: 35947) -LibOpGetTest:testLibOpGetRunStore(bytes32,bytes32,uint16) (runs: 2048, μ: 37862, ~: 37867) -LibOpGetTest:testLibOpGetRunStoreDifferentNamespace(bytes32,bytes32,uint16) (runs: 2048, μ: 39783, ~: 39788) -LibOpGetTest:testLibOpGetRunUnset(bytes32,uint16) (runs: 2048, μ: 13991, ~: 13995) -LibOpGmTest:testOpGmEval() (gas: 489468) -LibOpGmTest:testOpGmEvalOperandDisallowed() (gas: 17233) -LibOpGmTest:testOpGmIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10714, ~: 10669) -LibOpGmTest:testOpGmOneInput() (gas: 33955) -LibOpGmTest:testOpGmRun(int224,int32,int224,int32,uint16) (runs: 2048, μ: 78059, ~: 83746) -LibOpGmTest:testOpGmThreeInputs() (gas: 43874) -LibOpGmTest:testOpGmTwoOutputs() (gas: 39604) -LibOpGmTest:testOpGmZeroOutputs() (gas: 38592) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEval2InputsBothOne() (gas: 57526) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEval2InputsFirstOneSecondZero() (gas: 58005) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEval2InputsFirstZeroSecondOne() (gas: 58005) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEval2ZeroInputs() (gas: 57497) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEvalFail0Inputs() (gas: 30332) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEvalFail1Input() (gas: 34681) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEvalFail3Inputs() (gas: 42994) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2048, μ: 10553, ~: 10567) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToRun(bytes32,bytes32) (runs: 2048, μ: 8732, ~: 8627) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToTwoOutputs() (gas: 41875) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToZeroOutputs() (gas: 40789) -LibOpGreaterThanTest:testOpGreaterThanEval1_0Gt1() (gas: 57286) -LibOpGreaterThanTest:testOpGreaterThanEval1_1Gt1_2() (gas: 59861) -LibOpGreaterThanTest:testOpGreaterThanEval2InputsBothOne() (gas: 56524) -LibOpGreaterThanTest:testOpGreaterThanEval2InputsFirstOneSecondZero() (gas: 57026) -LibOpGreaterThanTest:testOpGreaterThanEval2InputsFirstZeroSecondOne() (gas: 57045) -LibOpGreaterThanTest:testOpGreaterThanEval2ZeroInputs() (gas: 56473) -LibOpGreaterThanTest:testOpGreaterThanEvalFail0Inputs() (gas: 29383) -LibOpGreaterThanTest:testOpGreaterThanEvalFail1Input() (gas: 33689) -LibOpGreaterThanTest:testOpGreaterThanEvalFail3Inputs() (gas: 41994) -LibOpGreaterThanTest:testOpGreaterThanEvalNeg1Gt0() (gas: 57075) -LibOpGreaterThanTest:testOpGreaterThanEvalNeg1_1GtNeg1_2() (gas: 60054) -LibOpGreaterThanTest:testOpGreaterThanIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12074, ~: 12032) -LibOpGreaterThanTest:testOpGreaterThanRun(bytes32,bytes32) (runs: 2048, μ: 8757, ~: 8651) -LibOpGreaterThanTest:testOpGreaterThanTwoOutputs() (gas: 40852) -LibOpGreaterThanTest:testOpGreaterThanZeroOutputs() (gas: 39815) -LibOpHashNPTest:testOpHashNPEval0Inputs() (gas: 44935) -LibOpHashNPTest:testOpHashNPEval1Input() (gas: 53337) -LibOpHashNPTest:testOpHashNPEval2Inputs() (gas: 61533) -LibOpHashNPTest:testOpHashNPEval2InputsDifferent() (gas: 62013) -LibOpHashNPTest:testOpHashNPEval2InputsOtherStack() (gas: 72208) -LibOpHashNPTest:testOpHashNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12098, ~: 12038) -LibOpHashNPTest:testOpHashNPRun(bytes32[]) (runs: 2048, μ: 12845, ~: 12920) -LibOpHashNPTest:testOpHashNPTwoOutputs() (gas: 29663) -LibOpHashNPTest:testOpHashNPZeroOutputs() (gas: 28304) -LibOpHeadroomTest:testOpHeadroomEval() (gas: 475602) -LibOpHeadroomTest:testOpHeadroomEvalOperandDisallowed() (gas: 17719) -LibOpHeadroomTest:testOpHeadroomIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10672, ~: 10627) -LibOpHeadroomTest:testOpHeadroomRun(bytes32,uint16) (runs: 2048, μ: 13496, ~: 13791) -LibOpHeadroomTest:testOpHeadroomTwoInputs() (gas: 39422) -LibOpHeadroomTest:testOpHeadroomTwoOutputs() (gas: 35179) -LibOpHeadroomTest:testOpHeadroomZeroInputs() (gas: 29382) -LibOpHeadroomTest:testOpHeadroomZeroOutputs() (gas: 34137) -LibOpIfTest:testOpIfEval3InputsFirstOneSecondTwoThirdThree() (gas: 62034) -LibOpIfTest:testOpIfEval3InputsFirstOneSecondZeroThirdThree() (gas: 61717) -LibOpIfTest:testOpIfEval3InputsFirstTwoSecondThreeThirdFour() (gas: 61990) -LibOpIfTest:testOpIfEval3InputsFirstTwoSecondZeroThirdFour() (gas: 61717) -LibOpIfTest:testOpIfEval3InputsFirstZeroSecondOneThirdTwo() (gas: 61997) -LibOpIfTest:testOpIfEval3InputsFirstZeroSecondOneThirdZero() (gas: 61320) -LibOpIfTest:testOpIfEval3InputsFirstZeroSecondZeroThirdOne() (gas: 61401) -LibOpIfTest:testOpIfEval3InputsFirstZeroSecondZeroThirdThree() (gas: 61404) -LibOpIfTest:testOpIfEvalEmptyStringTruthy() (gas: 158629) -LibOpIfTest:testOpIfEvalFail0Inputs() (gas: 28551) -LibOpIfTest:testOpIfEvalFail1Input() (gas: 32891) -LibOpIfTest:testOpIfEvalFail2Inputs() (gas: 37002) -LibOpIfTest:testOpIfEvalFail4Inputs() (gas: 45334) -LibOpIfTest:testOpIfEvalTwoOutputs() (gas: 44970) -LibOpIfTest:testOpIfEvalZeroExponent() (gas: 63332) -LibOpIfTest:testOpIfEvalZeroOutputs() (gas: 43912) -LibOpIfTest:testOpIfIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12055, ~: 11985) -LibOpIfTest:testOpIfRun(bytes32,bytes32,bytes32) (runs: 2048, μ: 8250, ~: 8251) -LibOpInvTest:testOpExpEvalOperandDisallowed() (gas: 17335) -LibOpInvTest:testOpInvEval() (gas: 178047) -LibOpInvTest:testOpInvIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10672, ~: 10627) -LibOpInvTest:testOpInvRun(int224,int32,uint16) (runs: 2048, μ: 18186, ~: 18075) -LibOpInvTest:testOpInvTwoInputs() (gas: 39038) -LibOpInvTest:testOpInvTwoOutputs() (gas: 34730) -LibOpInvTest:testOpInvZeroInputs() (gas: 28978) -LibOpInvTest:testOpInvZeroOutputs() (gas: 33734) -LibOpIsZeroTest:testOpIsZeroEval0e20Input() (gas: 51883) -LibOpIsZeroTest:testOpIsZeroEval1NonZeroInput() (gas: 50843) -LibOpIsZeroTest:testOpIsZeroEval1ZeroInput() (gas: 50548) -LibOpIsZeroTest:testOpIsZeroEvalFail0Inputs() (gas: 28924) -LibOpIsZeroTest:testOpIsZeroEvalFail2Inputs() (gas: 37450) -LibOpIsZeroTest:testOpIsZeroNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12152, ~: 12072) -LibOpIsZeroTest:testOpIsZeroRun(bytes32) (runs: 2048, μ: 7798, ~: 7799) -LibOpIsZeroTest:testOpIsZeroTwoOutputs() (gas: 35280) -LibOpIsZeroTest:testOpIsZeroZeroOutputs() (gas: 33965) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEval2InputsBothOne() (gas: 52271) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEval2InputsFirstOneSecondZero() (gas: 52752) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEval2InputsFirstZeroSecondOne() (gas: 52773) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEval2ZeroInputs() (gas: 52223) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEvalFail0Inputs() (gas: 30067) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEvalFail1Input() (gas: 34408) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEvalFail3Inputs() (gas: 42771) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12050, ~: 11986) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToRun(bytes32,bytes32) (runs: 2048, μ: 8731, ~: 8626) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToTwoOutputs() (gas: 41603) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToZeroOutputs() (gas: 40567) -LibOpLessThanTest:testOpLessThanEval2InputsFirstZeroSecondOne() (gas: 56802) -LibOpLessThanTest:testOpLessThanEval2ZeroInputs() (gas: 56208) -LibOpLessThanTest:testOpLessThanIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12068, ~: 11967) -LibOpLessThanTest:testOpLessThanNP1_0Lt1() (gas: 57110) -LibOpLessThanTest:testOpLessThanNP1_1Lt1_2() (gas: 59574) -LibOpLessThanTest:testOpLessThanNPEval2InputsBothOne() (gas: 56304) -LibOpLessThanTest:testOpLessThanNPEval2InputsFirstOneSecondZero() (gas: 56759) -LibOpLessThanTest:testOpLessThanNPMinus1Lt0() (gas: 56854) -LibOpLessThanTest:testOpLessThanNPMinus1_1LtMinus1_2() (gas: 59790) -LibOpLessThanTest:testOpLessThanNPTwoOutputs() (gas: 40898) -LibOpLessThanTest:testOpLessThanNPZeroOutputs() (gas: 38994) -LibOpLessThanTest:testOpLessThanRun(bytes32,bytes32) (runs: 2048, μ: 8756, ~: 8650) -LibOpLessThanTest:testOpLessThanToNPEvalFail0Inputs() (gas: 29118) -LibOpLessThanTest:testOpLessThanToNPEvalFail1Input() (gas: 33393) -LibOpLessThanTest:testOpLessThanToNPEvalFail3Inputs() (gas: 41737) -LibOpLinearGrowthTest:testOpLinearGrowthEval() (gas: 778945) -LibOpLinearGrowthTest:testOpLinearGrowthEvalFourInputs() (gas: 50256) -LibOpLinearGrowthTest:testOpLinearGrowthEvalOneInput() (gas: 34899) -LibOpLinearGrowthTest:testOpLinearGrowthEvalOperandDisallowed() (gas: 18123) -LibOpLinearGrowthTest:testOpLinearGrowthEvalTwoInputs() (gas: 40296) -LibOpLinearGrowthTest:testOpLinearGrowthEvalTwoOutputs() (gas: 45854) -LibOpLinearGrowthTest:testOpLinearGrowthEvalZeroInputs() (gas: 29405) -LibOpLinearGrowthTest:testOpLinearGrowthEvalZeroOutputs() (gas: 44816) -LibOpLinearGrowthTest:testOpLinearGrowthIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10671, ~: 10626) -LibOpLinearGrowthTest:testOpLinearGrowthRun(int224,int32,int224,int32,int224,int32,uint16) (runs: 2048, μ: 22020, ~: 21747) -LibOpMaxNegativeValueTest:testOpMaxNegativeValueEval() (gas: 45999) -LibOpMaxNegativeValueTest:testOpMaxNegativeValueEvalFail() (gas: 34111) -LibOpMaxNegativeValueTest:testOpMaxNegativeValueRun() (gas: 7667) -LibOpMaxNegativeValueTest:testOpMaxNegativeValueTwoOutputs() (gas: 30773) -LibOpMaxNegativeValueTest:testOpMaxNegativeValueZeroOutputs() (gas: 29776) -LibOpMaxNegativeValueTest:testOpMaxValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12063, ~: 11959) -LibOpMaxPositiveValueTest:testOpMaxPositiveValueEval() (gas: 45998) -LibOpMaxPositiveValueTest:testOpMaxPositiveValueEvalFail() (gas: 34132) -LibOpMaxPositiveValueTest:testOpMaxPositiveValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12087, ~: 12023) -LibOpMaxPositiveValueTest:testOpMaxPositiveValueRun() (gas: 7664) -LibOpMaxPositiveValueTest:testOpMaxPositiveValueTwoOutputs() (gas: 30772) -LibOpMaxPositiveValueTest:testOpMaxPositiveValueZeroOutputs() (gas: 29775) -LibOpMaxTest:testOpMaxEval2InputsHappy() (gas: 854751) -LibOpMaxTest:testOpMaxEval3InputsHappy() (gas: 1976172) -LibOpMaxTest:testOpMaxEvalOneInput() (gas: 125417) -LibOpMaxTest:testOpMaxEvalOperandDisallowed() (gas: 58203) -LibOpMaxTest:testOpMaxEvalTwoOutputs() (gas: 39670) -LibOpMaxTest:testOpMaxEvalZeroInputs() (gas: 29013) -LibOpMaxTest:testOpMaxIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11513, ~: 11469) -LibOpMaxTest:testOpMaxIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10615, ~: 10572) -LibOpMaxTest:testOpMaxIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10637, ~: 10594) -LibOpMaxTest:testOpMaxRun(bytes32[]) (runs: 2048, μ: 20339, ~: 20566) -LibOpMaxUint256Test:testOpMaxUint256Eval() (gas: 45926) -LibOpMaxUint256Test:testOpMaxUint256EvalFail() (gas: 34053) -LibOpMaxUint256Test:testOpMaxUint256Integrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12030, ~: 11977) -LibOpMaxUint256Test:testOpMaxUint256Run() (gas: 7425) -LibOpMaxUint256Test:testOpMaxUint256TwoOutputs() (gas: 30735) -LibOpMaxUint256Test:testOpMaxUint256ZeroOutputs() (gas: 29651) -LibOpMinNegativeValueTest:testOpMinNegativeValueEval() (gas: 46025) -LibOpMinNegativeValueTest:testOpMinNegativeValueEvalFail() (gas: 34133) -LibOpMinNegativeValueTest:testOpMinNegativeValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12066, ~: 11950) -LibOpMinNegativeValueTest:testOpMinNegativeValueRun() (gas: 7692) -LibOpMinNegativeValueTest:testOpMinNegativeValueTwoOutputs() (gas: 30794) -LibOpMinNegativeValueTest:testOpMinNegativeValueZeroOutputs() (gas: 29775) -LibOpMinPositiveValueTest:testOpMinPositiveValueEval() (gas: 46011) -LibOpMinPositiveValueTest:testOpMinPositiveValueEvalFail() (gas: 34090) -LibOpMinPositiveValueTest:testOpMinPositiveValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12048, ~: 11994) -LibOpMinPositiveValueTest:testOpMinPositiveValueRun() (gas: 7711) -LibOpMinPositiveValueTest:testOpMinPositiveValueTwoOutputs() (gas: 30793) -LibOpMinPositiveValueTest:testOpMinPositiveValueZeroOutputs() (gas: 29774) -LibOpMinTest:testOpMinEval2InputsHappy() (gas: 958342) -LibOpMinTest:testOpMinEval3InputsHappy() (gas: 3436822) -LibOpMinTest:testOpMinEvalOneInput() (gas: 125183) -LibOpMinTest:testOpMinEvalOperandDisallowed() (gas: 60882) -LibOpMinTest:testOpMinEvalZeroInputs() (gas: 29657) -LibOpMinTest:testOpMinIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11589, ~: 11543) -LibOpMinTest:testOpMinIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10638, ~: 10595) -LibOpMinTest:testOpMinIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10615, ~: 10572) -LibOpMinTest:testOpMinRun(bytes32[],uint16) (runs: 2048, μ: 19968, ~: 19892) -LibOpMulTest:testOpDecimal18MulNPIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10616, ~: 10573) -LibOpMulTest:testOpMulEvalOneInput() (gas: 122645) -LibOpMulTest:testOpMulEvalOperandsDisallowed() (gas: 90469) -LibOpMulTest:testOpMulEvalThreeInputsHappy() (gas: 743587) -LibOpMulTest:testOpMulEvalThreeInputsUnhappyOverflow() (gas: 61554) -LibOpMulTest:testOpMulEvalTwoInputsHappy() (gas: 516496) -LibOpMulTest:testOpMulEvalTwoInputsUnhappyOverflow() (gas: 54373) -LibOpMulTest:testOpMulEvalZeroInputs() (gas: 29077) -LibOpMulTest:testOpMulIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11540, ~: 11507) -LibOpMulTest:testOpMulIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10659, ~: 10616) -LibOpMulTest:testOpMulRun(bytes32[]) (runs: 2048, μ: 41537, ~: 38373) -LibOpMulTest:testOpMulTwoOutputs() (gas: 39712) -LibOpMulTest:testOpMulZeroOutputs() (gas: 38677) -LibOpPowTest:testOpPowEval() (gas: 560504) -LibOpPowTest:testOpPowEvalOneInput() (gas: 34236) -LibOpPowTest:testOpPowEvalOperandDisallowed() (gas: 17498) -LibOpPowTest:testOpPowIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10692, ~: 10647) -LibOpPowTest:testOpPowNegativeBaseError() (gas: 95378) -LibOpPowTest:testOpPowRun(int224,int32,int224,int32) (runs: 2048, μ: 76662, ~: 77842) -LibOpPowTest:testOpPowThreeInputs() (gas: 44134) -LibOpPowTest:testOpPowTwoOutputs() (gas: 39844) -LibOpPowTest:testOpPowZeroOutputs() (gas: 38850) -LibOpSetTest:testLibOpSet(bytes32,bytes32) (runs: 2048, μ: 6881, ~: 6886) -LibOpSetTest:testLibOpSetEvalOneInput() (gas: 33029) -LibOpSetTest:testLibOpSetEvalOneOutput() (gas: 38641) -LibOpSetTest:testLibOpSetEvalOperandsDisallowed() (gas: 55353) -LibOpSetTest:testLibOpSetEvalSetTwice() (gas: 69881) -LibOpSetTest:testLibOpSetEvalThreeInputs() (gas: 43422) -LibOpSetTest:testLibOpSetEvalTwoInputs() (gas: 235101) -LibOpSetTest:testLibOpSetEvalTwoOutputs() (gas: 39255) -LibOpSetTest:testLibOpSetEvalZeroInputs() (gas: 28223) -LibOpSetTest:testLibOpSetIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12158, ~: 12107) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPEval() (gas: 847450) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailBadShiftAmount() (gas: 125206) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailTwoInputs() (gas: 43475) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailTwoOutputs() (gas: 39301) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailZeroInputs() (gas: 33530) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailZeroOutputs() (gas: 38237) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8) (runs: 2048, μ: 15176, ~: 15087) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityNoop((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2048, μ: 35668, ~: 35693) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityZero((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 36950, ~: 36841) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPRun(bytes32,uint8) (runs: 2048, μ: 10704, ~: 10704) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPEval() (gas: 1016108) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityFailBadShiftAmount() (gas: 125601) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8) (runs: 100, μ: 15256, ~: 15260) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityNoop((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 100, μ: 36022, ~: 35759) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityZero((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 100, μ: 37868, ~: 37964) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPRun(bytes32,uint8) (runs: 2048, μ: 10706, ~: 10706) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPTwoInputs() (gas: 43599) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPTwoOutputs() (gas: 39361) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPZeroInputs() (gas: 33589) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPZeroOutputs() (gas: 38321) -LibOpSqrtTest:testOpSqrtEvalBad() (gas: 63207) -LibOpSqrtTest:testOpSqrtEvalExamples() (gas: 253795) -LibOpSqrtTest:testOpSqrtEvalOperandDisallowed() (gas: 17395) -LibOpSqrtTest:testOpSqrtEvalTwoOutputs() (gas: 34834) -LibOpSqrtTest:testOpSqrtEvalZeroOutputs() (gas: 33791) -LibOpSqrtTest:testOpSqrtIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10671, ~: 10626) -LibOpSqrtTest:testOpSqrtRun(bytes32) (runs: 2048, μ: 75601, ~: 82506) -LibOpStackNPTest:testOpStackEval() (gas: 60173) -LibOpStackNPTest:testOpStackEvalSeveral() (gas: 83684) -LibOpStackNPTest:testOpStackNPIntegrity(bytes,uint256,bytes32[],bytes32) (runs: 2048, μ: 11816, ~: 11897) -LibOpStackNPTest:testOpStackNPIntegrityOOBStack(bytes,uint16,bytes32[],uint16,uint256) (runs: 2048, μ: 37276, ~: 37400) -LibOpStackNPTest:testOpStackNPMultipleOutputErrorSugared() (gas: 38908) -LibOpStackNPTest:testOpStackNPMultipleOutputErrorUnsugared() (gas: 41951) -LibOpStackNPTest:testOpStackNPRun(bytes32[][],uint256) (runs: 100, μ: 1953904, ~: 1710600) -LibOpStackNPTest:testOpStackNPZeroOutputErrorSugared() (gas: 37471) -LibOpStackNPTest:testOpStackNPZeroOutputErrorUnsugared() (gas: 40479) -LibOpSubTest:testOpSubEvalOneInput() (gas: 125218) -LibOpSubTest:testOpSubEvalThreeInputs() (gas: 221742) -LibOpSubTest:testOpSubEvalTwoInputs() (gas: 431195) -LibOpSubTest:testOpSubEvalZeroInputs() (gas: 28969) -LibOpSubTest:testOpSubIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11536, ~: 11475) -LibOpSubTest:testOpSubIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10659, ~: 10616) -LibOpSubTest:testOpSubIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10659, ~: 10616) -LibOpSubTest:testOpSubRun(bytes32[]) (runs: 2048, μ: 58647, ~: 60087) -LibOpTimestampTest:testOpBlockTimestampNPEvalFail() (gas: 63968) -LibOpTimestampTest:testOpBlockTimestampNPTwoOutputs() (gas: 56889) -LibOpTimestampTest:testOpBlockTimestampNPZeroOutputs() (gas: 54786) -LibOpTimestampTest:testOpTimestampEval(uint256) (runs: 2048, μ: 76473, ~: 76136) -LibOpTimestampTest:testOpTimestampIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12062, ~: 12012) -LibOpTimestampTest:testOpTimestampRun(uint256) (runs: 2048, μ: 11349, ~: 11109) -LibOpUint256AddTest:testOpUint256AddEvalOneInput() (gas: 123553) -LibOpUint256AddTest:testOpUint256AddEvalOperandsDisallowed() (gas: 94357) -LibOpUint256AddTest:testOpUint256AddEvalThreeInputsHappy() (gas: 202094) -LibOpUint256AddTest:testOpUint256AddEvalThreeInputsUnhappy() (gas: 110179) -LibOpUint256AddTest:testOpUint256AddEvalTwoInputsHappy() (gas: 269363) -LibOpUint256AddTest:testOpUint256AddEvalTwoOutputs() (gas: 40367) -LibOpUint256AddTest:testOpUint256AddEvalZeroInputs() (gas: 29688) -LibOpUint256AddTest:testOpUint256AddEvalZeroOutputs() (gas: 39309) -LibOpUint256AddTest:testOpUint256AddIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11555, ~: 11508) -LibOpUint256AddTest:testOpUint256AddIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10610, ~: 10567) -LibOpUint256AddTest:testOpUint256AddIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10608, ~: 10565) -LibOpUint256AddTest:testOpUint256AddRun(bytes32[]) (runs: 2048, μ: 14710, ~: 14785) -LibOpUint256DivTest:testOpUint256DivEval2InputsHappy() (gas: 740472) -LibOpUint256DivTest:testOpUint256DivEval2InputsUnhappy() (gas: 137785) -LibOpUint256DivTest:testOpUint256DivEval3InputsHappy() (gas: 1352907) -LibOpUint256DivTest:testOpUint256DivEval3InputsUnhappy() (gas: 465773) -LibOpUint256DivTest:testOpUint256DivEvalOneInput() (gas: 129418) -LibOpUint256DivTest:testOpUint256DivEvalOperandDisallowed() (gas: 60774) -LibOpUint256DivTest:testOpUint256DivEvalTwoOutputs() (gas: 40368) -LibOpUint256DivTest:testOpUint256DivEvalZeroInputs() (gas: 29689) -LibOpUint256DivTest:testOpUint256DivEvalZeroOutputs() (gas: 39287) -LibOpUint256DivTest:testOpUint256DivIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11566, ~: 11535) -LibOpUint256DivTest:testOpUint256DivIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10630, ~: 10587) -LibOpUint256DivTest:testOpUint256DivIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10610, ~: 10567) -LibOpUint256DivTest:testOpUint256DivRun(bytes32[]) (runs: 2048, μ: 18167, ~: 18410) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalFourInputs() (gas: 55167) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalHappy(uint256) (runs: 2048, μ: 70176, ~: 70176) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalOneInput() (gas: 36646) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalOperandDisallowed() (gas: 18959) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalTwoInputs() (gas: 42965) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalTwoOutputs() (gas: 49971) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalZeroInputs() (gas: 30581) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalZeroOutputs() (gas: 48958) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10634, ~: 10589) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceRun(address,address,address,uint256) (runs: 2048, μ: 17903, ~: 17903) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalHappy(uint256) (runs: 2048, μ: 63512, ~: 63512) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalOneInput() (gas: 36685) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalOperandDisallowed() (gas: 19017) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalThreeInputs() (gas: 48848) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalTwoOutputs() (gas: 43727) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroInputs() (gas: 30684) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroOutputs() (gas: 42693) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10657, ~: 10612) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfRun(address,address,uint256,uint16) (runs: 2048, μ: 17558, ~: 17558) -LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalHappy(uint256) (runs: 2048, μ: 56883, ~: 56883) -LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalOperandDisallowed() (gas: 19180) -LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoInputs() (gas: 43187) -LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoOutputs() (gas: 37573) -LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroInputs() (gas: 30867) -LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroOutputs() (gas: 36511) -LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10657, ~: 10612) -LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyRun(address,uint256,uint16) (runs: 2048, μ: 16912, ~: 16912) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfEvalHappy(address,address,uint256) (runs: 2048, μ: 101760, ~: 101881) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12050, ~: 12008) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail0() (gas: 30414) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail1() (gas: 34719) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail3() (gas: 44020) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFailOperand() (gas: 21911) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfOneInput() (gas: 35091) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfRun(address,address,uint256,uint16) (runs: 2048, μ: 17612, ~: 17612) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfThreeInputs() (gas: 44382) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfTwoOutputs() (gas: 40383) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfZeroInputs() (gas: 30753) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfZeroOutputs() (gas: 39369) -LibOpUint256MulTest:testOpUint256MulEvalOneInput() (gas: 123641) -LibOpUint256MulTest:testOpUint256MulEvalOperandsDisallowed() (gas: 94337) -LibOpUint256MulTest:testOpUint256MulEvalThreeInputsHappy() (gas: 978437) -LibOpUint256MulTest:testOpUint256MulEvalThreeInputsUnhappy() (gas: 617414) -LibOpUint256MulTest:testOpUint256MulEvalTwoInputsHappy() (gas: 400979) -LibOpUint256MulTest:testOpUint256MulEvalTwoInputsUnhappy() (gas: 137813) -LibOpUint256MulTest:testOpUint256MulEvalTwoOutputs() (gas: 40312) -LibOpUint256MulTest:testOpUint256MulEvalZeroInputs() (gas: 29742) -LibOpUint256MulTest:testOpUint256MulEvalZeroOutputs() (gas: 39322) -LibOpUint256MulTest:testOpUint256MulIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11509, ~: 11463) -LibOpUint256MulTest:testOpUint256MulIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10652, ~: 10609) -LibOpUint256MulTest:testOpUint256MulIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10609, ~: 10566) -LibOpUint256MulTest:testOpUint256MulRun(bytes32[]) (runs: 2048, μ: 14632, ~: 14743) -LibOpUint256PowTest:testOpUint256ExpIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11518, ~: 11476) -LibOpUint256PowTest:testOpUint256PowEval2InputsHappy() (gas: 838410) -LibOpUint256PowTest:testOpUint256PowEval2InputsUnhappy() (gas: 139778) -LibOpUint256PowTest:testOpUint256PowEval3InputsHappy() (gas: 1905803) -LibOpUint256PowTest:testOpUint256PowEval3InputsUnhappy() (gas: 607802) -LibOpUint256PowTest:testOpUint256PowEvalOneInput() (gas: 128704) -LibOpUint256PowTest:testOpUint256PowEvalOperandDisallowed() (gas: 61466) -LibOpUint256PowTest:testOpUint256PowEvalTwoOutputs() (gas: 40497) -LibOpUint256PowTest:testOpUint256PowEvalZeroInputs() (gas: 29881) -LibOpUint256PowTest:testOpUint256PowEvalZeroOutputs() (gas: 39440) -LibOpUint256PowTest:testOpUint256PowIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10632, ~: 10589) -LibOpUint256PowTest:testOpUint256PowIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10609, ~: 10566) -LibOpUint256PowTest:testOpUint256PowRun(bytes32[]) (runs: 2048, μ: 16096, ~: 16315) -LibOpUint256SubTest:testOpUint256SubEvalOneInput() (gas: 123640) -LibOpUint256SubTest:testOpUint256SubEvalOperandsDisallowed() (gas: 94359) -LibOpUint256SubTest:testOpUint256SubEvalThreeInputsHappy() (gas: 201969) -LibOpUint256SubTest:testOpUint256SubEvalThreeInputsUnhappy() (gas: 110352) -LibOpUint256SubTest:testOpUint256SubEvalTwoInputsHappy() (gas: 269361) -LibOpUint256SubTest:testOpUint256SubEvalTwoOutputs() (gas: 40356) -LibOpUint256SubTest:testOpUint256SubEvalZeroInputs() (gas: 29699) -LibOpUint256SubTest:testOpUint256SubEvalZeroOutputs() (gas: 39299) -LibOpUint256SubTest:testOpUint256SubIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11547, ~: 11499) -LibOpUint256SubTest:testOpUint256SubIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10653, ~: 10610) -LibOpUint256SubTest:testOpUint256SubIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10609, ~: 10566) -LibOpUint256SubTest:testOpUint256SubRun(bytes32[]) (runs: 2048, μ: 14418, ~: 14413) -LibParseCommentsTest:testParseCommentAfterSources() (gas: 64767) -LibParseCommentsTest:testParseCommentBetweenSources() (gas: 64834) -LibParseCommentsTest:testParseCommentInIgnoredLHS() (gas: 45623) -LibParseCommentsTest:testParseCommentInLHSWhitespace() (gas: 45836) -LibParseCommentsTest:testParseCommentInNamedLHS() (gas: 45704) -LibParseCommentsTest:testParseCommentInRHS() (gas: 46004) -LibParseCommentsTest:testParseCommentInRHS2() (gas: 48842) -LibParseCommentsTest:testParseCommentInRHS3() (gas: 48852) -LibParseCommentsTest:testParseCommentLong() (gas: 60150) -LibParseCommentsTest:testParseCommentManyAstericks() (gas: 53083) -LibParseCommentsTest:testParseCommentManyAstericksTrailing() (gas: 53041) -LibParseCommentsTest:testParseCommentMultiple() (gas: 69559) -LibParseCommentsTest:testParseCommentNoTrailingWhitespace() (gas: 46443) -LibParseCommentsTest:testParseCommentNoWords() (gas: 49574) -LibParseCommentsTest:testParseCommentSingleWord() (gas: 53645) -LibParseCommentsTest:testParseCommentSingleWordSameLine() (gas: 54434) -LibParseCommentsTest:testParseCommentUnclosed() (gas: 46104) -LibParseCommentsTest:testParseCommentUnclosed2() (gas: 46308) -LibParseEmptyGasTest:testParseGasEmpty00() (gas: 37947) -LibParseEmptyGasTest:testParseGasEmpty01() (gas: 42655) -LibParseEmptyGasTest:testParseGasEmpty02() (gas: 46756) -LibParseEmptyGasTest:testParseGasEmpty03() (gas: 50834) -LibParseEmptyGasTest:testParseGasEmpty04() (gas: 54912) -LibParseEmptyTest:testParseEmpty00() (gas: 41467) -LibParseEmptyTest:testParseEmpty01() (gas: 47811) -LibParseEmptyTest:testParseEmpty02() (gas: 53820) -LibParseEmptyTest:testParseEmpty03() (gas: 59628) -LibParseEmptyTest:testParseEmpty04() (gas: 65502) -LibParseEmptyTest:testParseEmpty08() (gas: 88830) -LibParseEmptyTest:testParseEmpty15() (gas: 129670) -LibParseEmptyTest:testParseEmptyError16() (gas: 89744) -LibParseIgnoredLHSTest:testParseIgnoredLHSAlphaTooLong() (gas: 49878) -LibParseIgnoredLHSTest:testParseIgnoredLHSLoneUnderscore() (gas: 48495) -LibParseIgnoredLHSTest:testParseIgnoredLHSMultipleLines() (gas: 51732) -LibParseIgnoredLHSTest:testParseIgnoredLHSTwoAlphas() (gas: 49595) -LibParseIgnoredLHSTest:testParseIgnoredLHSTwoUnderscores() (gas: 49432) -LibParseIgnoredLHSTest:testParseIgnoredLHSUnderscoreAlpha() (gas: 48569) -LibParseIgnoredLHSTest:testParseIgnoredLHSUnderscoreNotInput() (gas: 53535) -LibParseIgnoredLHSTest:testParseIgnoredWordTooLong() (gas: 51120) -LibParseInputsOnlyGasTest:testParseGasInputsOnly00() (gas: 43348) -LibParseInputsOnlyGasTest:testParseGasInputsOnly01() (gas: 44274) -LibParseInputsOnlyGasTest:testParseGasInputsOnly02() (gas: 45173) -LibParseInputsOnlyGasTest:testParseGasInputsOnly03() (gas: 46098) -LibParseInputsOnlyGasTest:testParseGasInputsOnly04() (gas: 47023) -LibParseInputsOnlyGasTest:testParseGasInputsOnly05() (gas: 47948) -LibParseInputsOnlyGasTest:testParseGasInputsOnly06() (gas: 48871) -LibParseInputsOnlyGasTest:testParseGasInputsOnly07() (gas: 49826) -LibParseInputsOnlyGasTest:testParseGasInputsOnly08() (gas: 50718) -LibParseInputsOnlyGasTest:testParseGasInputsOnly09() (gas: 51643) -LibParseInputsOnlyTest:testParseInputsOnlyMultiple() (gas: 49387) -LibParseInputsOnlyTest:testParseInputsOnlySingle() (gas: 48486) -LibParseLiteralBoundLiteralHexTest:testParseLiteralBoundLiteralHexBounds() (gas: 8445) -LibParseLiteralBoundLiteralHexTest:testParseLiteralBoundLiteralHexFuzz(string,bytes1,string) (runs: 2048, μ: 37572, ~: 35311) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatDotE() (gas: 10895) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatDotE0() (gas: 10873) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatDotRevert() (gas: 10918) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatDotRevert2() (gas: 10873) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatDotRevert3() (gas: 11915) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatEDot() (gas: 10875) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatEmpty() (gas: 10849) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatExponentRevert() (gas: 10842) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatExponentRevert2() (gas: 12132) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatExponentRevert3() (gas: 12148) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatExponentRevert4() (gas: 10872) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatExponentRevert5() (gas: 10916) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatExponentRevert6() (gas: 10917) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatNegativeE() (gas: 12742) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatNegativeFrac() (gas: 11886) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatNonDecimal() (gas: 10850) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatPrecisionRevert0() (gas: 34547) -LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatPrecisionRevert1() (gas: 34386) -LibParseLiteralHexBoundHexTest:testParseLiteralHexRoundTrip(bytes32) (runs: 2048, μ: 30311, ~: 35541) -LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimal00() (gas: 53454) -LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimal01() (gas: 60370) -LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimal02() (gas: 66695) -LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalENotation() (gas: 86603) -LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalInt128Max() (gas: 63957) -LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalInt128MaxLeadingZeros() (gas: 64846) -LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalParensBoth() (gas: 49430) -LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalParensLeft() (gas: 49450) -LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalParensRight() (gas: 49331) -LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalUint256OverflowLeadingDigitBasic() (gas: 69003) -LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalUint256OverflowLeadingDigitLeadingZeros() (gas: 69176) -LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalUint256OverflowLeadingZeros() (gas: 69352) -LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalUint256OverflowSimple() (gas: 69168) -LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalYang() (gas: 50311) -LibParseLiteralIntegerHexTest:testParseIntegerLiteralHex00() (gas: 52444) -LibParseLiteralIntegerHexTest:testParseIntegerLiteralHex01() (gas: 57782) -LibParseLiteralIntegerHexTest:testParseIntegerLiteralHex02() (gas: 62807) -LibParseLiteralIntegerHexTest:testParseIntegerLiteralHexUint256Max() (gas: 69456) -LibParseLiteralStringBoundTest:testParseStringLiteralBounds(string) (runs: 2048, μ: 14116, ~: 13887) -LibParseLiteralStringBoundTest:testParseStringLiteralBoundsInvalidCharBefore(string,uint256) (runs: 2048, μ: 23719, ~: 23118) -LibParseLiteralStringBoundTest:testParseStringLiteralBoundsParserOutOfBounds(string,uint256) (runs: 2048, μ: 15051, ~: 15069) -LibParseLiteralStringBoundTest:testParseStringLiteralBoundsTooLong(string) (runs: 2048, μ: 28887, ~: 28444) -LibParseLiteralStringTest:testParseStringLiteralAny(bytes) (runs: 2048, μ: 12357, ~: 11786) -LibParseLiteralStringTest:testParseStringLiteralCorrupt(bytes,uint256) (runs: 2048, μ: 20142, ~: 20020) -LibParseLiteralStringTest:testParseStringLiteralEmpty() (gas: 2450) -LibParseLiteralStringTest:testParseStringLiteralEmpty() (gas: 48910) -LibParseLiteralStringTest:testParseStringLiteralInvalidCharAfter(string,string) (runs: 100, μ: 67816, ~: 67421) -LibParseLiteralStringTest:testParseStringLiteralInvalidCharWithin(string,uint256) (runs: 100, μ: 61719, ~: 61261) -LibParseLiteralStringTest:testParseStringLiteralLongASCII(string) (runs: 100, μ: 68312, ~: 68682) -LibParseLiteralStringTest:testParseStringLiteralShortASCII(string) (runs: 100, μ: 58643, ~: 57847) -LibParseLiteralStringTest:testParseStringLiteralSimple() (gas: 49025) -LibParseLiteralStringTest:testParseStringLiteralTwo(string,string) (runs: 100, μ: 71485, ~: 71849) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableBody() (gas: 56914) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableEmptyBody() (gas: 15655) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableHappyFuzz(string,string,string) (runs: 2048, μ: 82702, ~: 79844) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableHappyKnown() (gas: 40167) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableMissingDispatchEmpty() (gas: 9618) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableMissingDispatchUnclosed() (gas: 9584) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableMissingDispatchUnclosedWhitespace0() (gas: 9638) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableMissingDispatchUnclosedWhitespace1() (gas: 9595) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableUnclosedDispatch0() (gas: 10034) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableUnclosedDispatchBody() (gas: 10218) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableUnclosedDispatchWhitespace0() (gas: 10128) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableUnclosedDispatchWhitespace1() (gas: 9596) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableUnclosedDoubleOpen() (gas: 10056) -LibParseMissingFinalSemiTest:testParseMissingFinalSemiRevertsEmptySource() (gas: 48095) -LibParseMissingFinalSemiTest:testParseMissingFinalSemiRevertsLHSItems() (gas: 46023) -LibParseMissingFinalSemiTest:testParseMissingFinalSemiRevertsLoneColon() (gas: 45150) -LibParseMissingFinalSemiTest:testParseMissingFinalSemiRevertsSingleWord() (gas: 48079) -LibParseMissingFinalSemiTest:testParseMissingFinalSemiRevertsTrailingComma() (gas: 46322) -LibParseNOutputTest:testParseBalanceStackOffsetsInputs() (gas: 58637) -LibParseNOutputTest:testParseNOutputExcessRHS0() (gas: 49723) -LibParseNOutputTest:testParseNOutputExcessRHS1() (gas: 51861) -LibParseNOutputTest:testParseNOutputExcessRHS2() (gas: 52271) -LibParseNOutputTest:testParseNOutputExcessRHS3() (gas: 53610) -LibParseNOutputTest:testParseNOutputNestedRHS() (gas: 55889) -LibParseNamedLHSTest:testParseNamedDuplicateDifferentSource() (gas: 52644) -LibParseNamedLHSTest:testParseNamedError32() (gas: 47945) -LibParseNamedLHSTest:testParseNamedError33() (gas: 47955) -LibParseNamedLHSTest:testParseNamedErrorDuplicateSameSource() (gas: 48399) -LibParseNamedLHSTest:testParseNamedLHSEmptySourceExamples() (gas: 142817) -LibParseNamedLHSTest:testParseNamedLHSStackIndex() (gas: 56070) -LibParseNamedLHSTest:testParseNamedLHSTwoInputs() (gas: 56270) -LibParseNamedRHSTest:testParseSingleLHSNestingAndSequential00() (gas: 76512) -LibParseNamedRHSTest:testParseSingleLHSNestingAndSequential01() (gas: 91491) -LibParseNamedRHSTest:testParseSingleLHSNestingAndSequential02() (gas: 87209) -LibParseNamedRHSTest:testParseSingleLHSNestingAndSequential03() (gas: 190300) -LibParseNamedRHSTest:testParseSingleWord() (gas: 51488) -LibParseNamedRHSTest:testParseTwoFullLinesSingleRHSEach() (gas: 72605) -LibParseNamedRHSTest:testParseTwoFullSourcesSingleRHSEach() (gas: 61254) -LibParseNamedRHSTest:testParseTwoNested() (gas: 54917) -LibParseNamedRHSTest:testParseTwoNestedAsThirdInput() (gas: 64842) -LibParseNamedRHSTest:testParseTwoSequential() (gas: 56557) -LibParseNamedRHSTest:testParseTwoSequentialWithInputs() (gas: 69613) -LibParseOperand8M1M1Test:testOperand8M1M1Elided() (gas: 91922) -LibParseOperand8M1M1Test:testOperand8M1M1Single() (gas: 268119) -LibParseOperand8M1M1Test:testOperand8M1M1SingleBit() (gas: 552607) -LibParseOperand8M1M1Test:testOperand8M1M1SingleBitsPart1() (gas: 1567660) -LibParseOperand8M1M1Test:testOperand8M1M1Unclosed() (gas: 302867) -LibParseOperand8M1M1Test:testOperand8M1M1Unopened() (gas: 46988) -LibParseOperandDisallowedTest:testOperandDisallowed() (gas: 47216) -LibParseOperandDisallowedTest:testOperandDisallowed1() (gas: 47664) -LibParseOperandDisallowedTest:testOperandDisallowed3() (gas: 49470) -LibParseOperandDisallowedTest:testOperandDisallowed4() (gas: 49492) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultElided() (gas: 46750) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultEmpty() (gas: 47143) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultFirst() (gas: 49608) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultMultipleWhitespace() (gas: 57792) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultPostfixWhitespace() (gas: 57039) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultPrefixWhitespace() (gas: 56993) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultSecond() (gas: 56651) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultSecondMax() (gas: 57778) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultSecondMaxZero() (gas: 57065) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultSecondOverflow() (gas: 54347) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultSecondOverflowFirst() (gas: 54348) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultSecondZero() (gas: 56376) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultSecondZeroMax() (gas: 57087) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultThird() (gas: 55317) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultUnclosed() (gas: 52255) -LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultUnopened() (gas: 46740) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1AllValues(uint256,uint256,uint256) (runs: 2048, μ: 4489, ~: 4642) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1AllValuesThirdValueTooLarge(uint256,uint256,uint256) (runs: 2048, μ: 8702, ~: 8609) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstAndSecondValue(uint256,uint256) (runs: 2048, μ: 3484, ~: 3597) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstAndSecondValueSecondValueTooLarge(uint256,uint256) (runs: 2048, μ: 7592, ~: 7473) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstValueOnly(uint256) (runs: 2048, μ: 2499, ~: 2627) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstValueTooLarge(int256) (runs: 2048, μ: 7366, ~: 7547) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1ManyValues(bytes32[]) (runs: 2048, μ: 35489, ~: 35156) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1NoValues() (gas: 4551) -LibParseOperandHandleOperandDisallowedTest:testHandleOperandDisallowedAnyValues(bytes32[]) (runs: 2048, μ: 34940, ~: 34570) +LibOpAnyTest:testOpAnyRun(bytes32[],uint16) (runs: 2048, μ: 14961, ~: 14962) +LibOpAnyTest:testOpAnyRunGas0() (gas: 3360) +LibOpAnyTest:testOpAnyTwoOutputs() (gas: 35519) +LibOpAnyTest:testOpAnyZeroOutputs() (gas: 34335) +LibOpAvgTest:testOpAvgEvalExamples() (gas: 468614) +LibOpAvgTest:testOpAvgEvalOneInput() (gas: 34784) +LibOpAvgTest:testOpAvgEvalOperandDisallowed() (gas: 17473) +LibOpAvgTest:testOpAvgEvalThreeInputs() (gas: 45177) +LibOpAvgTest:testOpAvgEvalTwoOutputs() (gas: 40662) +LibOpAvgTest:testOpAvgEvalZeroOutputs() (gas: 39460) +LibOpAvgTest:testOpAvgIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10723, ~: 10651) +LibOpAvgTest:testOpAvgRun(int256,int256,int256,int256,uint16) (runs: 2048, μ: 26562, ~: 26629) +LibOpBinaryEqualToTest:testOpBinaryEqualToEval2() (gas: 205260) +LibOpBinaryEqualToTest:testOpBinaryEqualToEval2InputsBothOne() (gas: 57582) +LibOpBinaryEqualToTest:testOpBinaryEqualToEval2InputsFirstOneSecondZero() (gas: 58091) +LibOpBinaryEqualToTest:testOpBinaryEqualToEval2InputsFirstZeroSecondOne() (gas: 58093) +LibOpBinaryEqualToTest:testOpBinaryEqualToEval2ZeroInputs() (gas: 57579) +LibOpBinaryEqualToTest:testOpBinaryEqualToEvalFail0Inputs() (gas: 30113) +LibOpBinaryEqualToTest:testOpBinaryEqualToEvalFail1Input() (gas: 34687) +LibOpBinaryEqualToTest:testOpBinaryEqualToEvalFail3Inputs() (gas: 43601) +LibOpBinaryEqualToTest:testOpBinaryEqualToEvalOperandDisallowed() (gas: 18466) +LibOpBinaryEqualToTest:testOpBinaryEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12047, ~: 11952) +LibOpBinaryEqualToTest:testOpBinaryEqualToRun(bytes32,bytes32) (runs: 2048, μ: 7842, ~: 7842) +LibOpBinaryEqualToTest:testOpBinaryEqualToTwoOutputs() (gas: 41640) +LibOpBinaryEqualToTest:testOpBinaryEqualToZeroOutputs() (gas: 40417) +LibOpBitwiseAndTest:testOpBitwiseAndEvalHappy() (gas: 708751) +LibOpBitwiseAndTest:testOpBitwiseAndIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10640, ~: 10568) +LibOpBitwiseAndTest:testOpBitwiseAndRun(bytes32,bytes32) (runs: 2048, μ: 7847, ~: 7847) +LibOpBitwiseAndTest:testOpBitwiseOREvalBadOperand() (gas: 18120) +LibOpBitwiseAndTest:testOpBitwiseOREvalOneInput() (gas: 35399) +LibOpBitwiseAndTest:testOpBitwiseOREvalThreeInputs() (gas: 45722) +LibOpBitwiseAndTest:testOpBitwiseOREvalTwoOutputs() (gas: 41365) +LibOpBitwiseAndTest:testOpBitwiseOREvalZeroInputs() (gas: 30064) +LibOpBitwiseAndTest:testOpBitwiseOREvalZeroOutputs() (gas: 40118) +LibOpBitwiseCountOnesTest:testOpBitwiseCountOnesEval(bytes32) (runs: 2048, μ: 78852, ~: 83568) +LibOpBitwiseCountOnesTest:testOpBitwiseCountOnesEvalOperandDisallowed() (gas: 18686) +LibOpBitwiseCountOnesTest:testOpBitwiseCountOnesIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10640, ~: 10568) +LibOpBitwiseCountOnesTest:testOpBitwiseCountOnesRun(bytes32) (runs: 2048, μ: 7965, ~: 7965) +LibOpBitwiseCountOnesTest:testOpBitwiseCountOnesTwoInputs() (gas: 41136) +LibOpBitwiseCountOnesTest:testOpBitwiseCountOnesTwoOutputs() (gas: 36720) +LibOpBitwiseCountOnesTest:testOpBitwiseCountOnesZeroInputs() (gas: 30655) +LibOpBitwiseCountOnesTest:testOpBitwiseCountOnesZeroOutputs() (gas: 35515) +LibOpBitwiseDecodeTest:testOpDecodeBitsEvalHappy() (gas: 825754) +LibOpBitwiseDecodeTest:testOpDecodeBitsEvalTwoInputs() (gas: 47181) +LibOpBitwiseDecodeTest:testOpDecodeBitsEvalTwoOutputs() (gas: 42741) +LibOpBitwiseDecodeTest:testOpDecodeBitsEvalZeroInputs() (gas: 36673) +LibOpBitwiseDecodeTest:testOpDecodeBitsEvalZeroOutputs() (gas: 41537) +LibOpBitwiseDecodeTest:testOpDecodeBitsIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8,uint8) (runs: 2048, μ: 13279, ~: 13380) +LibOpBitwiseDecodeTest:testOpDecodeBitsIntegrityFail((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2048, μ: 37053, ~: 36828) +LibOpBitwiseDecodeTest:testOpDecodeBitsIntegrityFailZeroLength((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2048, μ: 35683, ~: 35626) +LibOpBitwiseDecodeTest:testOpDecodeBitsRun(bytes32,uint8,uint8) (runs: 2048, μ: 8825, ~: 8720) +LibOpBitwiseEncodeTest:testOpEncodeBitsEvalHappy() (gas: 824068) +LibOpBitwiseEncodeTest:testOpEncodeBitsEvalOneInput() (gas: 41923) +LibOpBitwiseEncodeTest:testOpEncodeBitsEvalThreeInputs() (gas: 52313) +LibOpBitwiseEncodeTest:testOpEncodeBitsEvalTwoOutputs() (gas: 47890) +LibOpBitwiseEncodeTest:testOpEncodeBitsEvalZeroInputs() (gas: 36657) +LibOpBitwiseEncodeTest:testOpEncodeBitsEvalZeroOutputs() (gas: 46646) +LibOpBitwiseEncodeTest:testOpEncodeBitsIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2048, μ: 11590, ~: 11620) +LibOpBitwiseEncodeTest:testOpEncodeBitsIntegrityFail((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2048, μ: 37156, ~: 36878) +LibOpBitwiseEncodeTest:testOpEncodeBitsIntegrityFailZeroLength((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2048, μ: 35797, ~: 35740) +LibOpBitwiseEncodeTest:testOpEncodeBitsRun(bytes32,bytes32,uint8,uint8) (runs: 2048, μ: 9233, ~: 9090) +LibOpBitwiseOrTest:testOpBitwiseOREval() (gas: 718847) +LibOpBitwiseOrTest:testOpBitwiseOREvalBadOperand() (gas: 18728) +LibOpBitwiseOrTest:testOpBitwiseOREvalOneInput() (gas: 36006) +LibOpBitwiseOrTest:testOpBitwiseOREvalThreeInputs() (gas: 46374) +LibOpBitwiseOrTest:testOpBitwiseOREvalTwoOutputs() (gas: 41951) +LibOpBitwiseOrTest:testOpBitwiseOREvalZeroInputs() (gas: 30716) +LibOpBitwiseOrTest:testOpBitwiseOREvalZeroOutputs() (gas: 40770) +LibOpBitwiseOrTest:testOpBitwiseORIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10642, ~: 10570) +LibOpBitwiseOrTest:testOpBitwiseORRun(bytes32,bytes32) (runs: 2048, μ: 7849, ~: 7849) +LibOpBitwiseShiftLeftTest:testOpShiftBitsLeftEval() (gas: 865566) +LibOpBitwiseShiftLeftTest:testOpShiftBitsLeftIntegrityFailBadShiftAmount() (gas: 127593) +LibOpBitwiseShiftLeftTest:testOpShiftBitsLeftIntegrityFailTwoInputs() (gas: 44514) +LibOpBitwiseShiftLeftTest:testOpShiftBitsLeftIntegrityFailTwoOutputs() (gas: 40107) +LibOpBitwiseShiftLeftTest:testOpShiftBitsLeftIntegrityFailZeroInputs() (gas: 34050) +LibOpBitwiseShiftLeftTest:testOpShiftBitsLeftIntegrityFailZeroOutputs() (gas: 38946) +LibOpBitwiseShiftLeftTest:testOpShiftBitsLeftIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8) (runs: 2048, μ: 15191, ~: 15071) +LibOpBitwiseShiftLeftTest:testOpShiftBitsLeftIntegrityNoop((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2048, μ: 35737, ~: 35680) +LibOpBitwiseShiftLeftTest:testOpShiftBitsLeftIntegrityZero((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 37037, ~: 36870) +LibOpBitwiseShiftLeftTest:testOpShiftBitsLeftRun(bytes32,uint8) (runs: 2048, μ: 10585, ~: 10585) +LibOpBitwiseShiftRightTest:testOpShiftBitsRightEval() (gas: 1037921) +LibOpBitwiseShiftRightTest:testOpShiftBitsRightIntegrityFailBadShiftAmount() (gas: 127967) +LibOpBitwiseShiftRightTest:testOpShiftBitsRightIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8) (runs: 100, μ: 15110, ~: 15126) +LibOpBitwiseShiftRightTest:testOpShiftBitsRightIntegrityNoop((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 100, μ: 35959, ~: 35695) +LibOpBitwiseShiftRightTest:testOpShiftBitsRightIntegrityZero((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 100, μ: 37823, ~: 37899) +LibOpBitwiseShiftRightTest:testOpShiftBitsRightRun(bytes32,uint8) (runs: 2048, μ: 10588, ~: 10588) +LibOpBitwiseShiftRightTest:testOpShiftBitsRightTwoInputs() (gas: 44617) +LibOpBitwiseShiftRightTest:testOpShiftBitsRightTwoOutputs() (gas: 40190) +LibOpBitwiseShiftRightTest:testOpShiftBitsRightZeroInputs() (gas: 34155) +LibOpBitwiseShiftRightTest:testOpShiftBitsRightZeroOutputs() (gas: 39003) +LibOpBlockNumberTest:testOpBlockNumberEval(uint256) (runs: 2048, μ: 49535, ~: 49298) +LibOpBlockNumberTest:testOpBlockNumberEvalOneInput() (gas: 34775) +LibOpBlockNumberTest:testOpBlockNumberEvalOperandDisallowed() (gas: 18177) +LibOpBlockNumberTest:testOpBlockNumberEvalTwoOutputs() (gas: 30885) +LibOpBlockNumberTest:testOpBlockNumberEvalZeroOutputs() (gas: 29700) +LibOpBlockNumberTest:testOpBlockNumberIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12059, ~: 11966) +LibOpBlockNumberTest:testOpBlockNumberRun(uint256,uint16) (runs: 2048, μ: 11434, ~: 11109) +LibOpBlockTimestampTest:testOpBlockTimestampEvalFail() (gas: 65576) +LibOpBlockTimestampTest:testOpBlockTimestampEvalOperandDisallowed() (gas: 18422) +LibOpBlockTimestampTest:testOpBlockTimestampTwoOutputs() (gas: 58113) +LibOpBlockTimestampTest:testOpBlockTimestampZeroOutputs() (gas: 55701) +LibOpBlockTimestampTest:testOpNowEvalOperandDisallowed() (gas: 18184) +LibOpBlockTimestampTest:testOpTimestampEval(uint256) (runs: 2048, μ: 77933, ~: 77601) +LibOpBlockTimestampTest:testOpTimestampIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12082, ~: 11988) +LibOpBlockTimestampTest:testOpTimestampRun(uint256) (runs: 2048, μ: 11234, ~: 10998) +LibOpCallTest:testCallTraceInnerOnly() (gas: 62050) +LibOpCallTest:testCallTraceOuterAndInner() (gas: 79711) +LibOpCallTest:testCallTraceOuterAndTwoInner() (gas: 125722) +LibOpCallTest:testCallTraceOuterOnly() (gas: 44526) +LibOpCallTest:testOpCallIntegrityIO((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint8,bytes32) (runs: 2048, μ: 43101, ~: 27119) +LibOpCallTest:testOpCallIntegritySourceIndexOutOfBounds((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint256,uint256,bytes32) (runs: 2048, μ: 51944, ~: 47441) +LibOpCallTest:testOpCallIntegrityTooManyOutputs((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint8,bytes32) (runs: 2048, μ: 60155, ~: 48393) +LibOpCallTest:testOpCallRunInputsMismatch() (gas: 72612) +LibOpCallTest:testOpCallRunMaxInputsMaxOutputs() (gas: 209891) +LibOpCallTest:testOpCallRunNoIO() (gas: 694270) +LibOpCallTest:testOpCallRunOutputsMismatch() (gas: 66542) +LibOpCallTest:testOpCallRunRecursive() (gas: 301691) +LibOpCallTest:testOpCallRunSourceDoesNotExist() (gas: 343500) +LibOpCeilTest:testOpCeilEval() (gas: 531517) +LibOpCeilTest:testOpCeilEvalOperandDisallowed() (gas: 17532) +LibOpCeilTest:testOpCeilIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10744, ~: 10672) +LibOpCeilTest:testOpCeilRun(bytes32,uint16) (runs: 2048, μ: 8337, ~: 7877) +LibOpCeilTest:testOpCeilTwoInputs() (gas: 40040) +LibOpCeilTest:testOpCeilTwoOutputs() (gas: 35620) +LibOpCeilTest:testOpCeilZeroInputs() (gas: 29507) +LibOpCeilTest:testOpCeilZeroOutputs() (gas: 34437) +LibOpChainIdTest:testOpChainIDEval(uint64) (runs: 2048, μ: 48822, ~: 48822) +LibOpChainIdTest:testOpChainIDIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12084, ~: 12002) +LibOpChainIdTest:testOpChainIdEvalFail() (gas: 34064) +LibOpChainIdTest:testOpChainIdEvalOperandDisallowed() (gas: 17854) +LibOpChainIdTest:testOpChainIdRun(uint64,uint16) (runs: 2048, μ: 10949, ~: 10951) +LibOpChainIdTest:testOpChainIdTwoOutputs() (gas: 30565) +LibOpChainIdTest:testOpChainIdZeroOutputs() (gas: 29404) +LibOpConditionsTest:testOpConditionsEval1FalseInput1TrueInput() (gas: 70355) +LibOpConditionsTest:testOpConditionsEval1FalseInputRevert() (gas: 54286) +LibOpConditionsTest:testOpConditionsEval1TrueInput1FalseInput() (gas: 70241) +LibOpConditionsTest:testOpConditionsEval1TrueInputZeroOutput() (gas: 58176) +LibOpConditionsTest:testOpConditionsEval2MixedInputs() (gas: 58254) +LibOpConditionsTest:testOpConditionsEval2TrueInputs() (gas: 70330) +LibOpConditionsTest:testOpConditionsEvalErrorCode() (gas: 67103) +LibOpConditionsTest:testOpConditionsEvalFail0Inputs() (gas: 29785) +LibOpConditionsTest:testOpConditionsEvalFail1Inputs() (gas: 34328) +LibOpConditionsTest:testOpConditionsEvalUnhappyOperand() (gas: 18001) +LibOpConditionsTest:testOpConditionsIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12297, ~: 12161) +LibOpConditionsTest:testOpConditionsRun(bytes32[],bytes32) (runs: 2048, μ: 12979, ~: 12867) +LibOpConditionsTest:testOpConditionsRunNoConditionsMet(bytes32[],string) (runs: 2048, μ: 25912, ~: 26051) +LibOpConditionsTest:testOpConditionsTwoOutputs() (gas: 39830) +LibOpConditionsTest:testOpConditionsZeroOutputs() (gas: 38626) +LibOpConstantTest:testOpConstantEval() (gas: 51763) +LibOpConstantTest:testOpConstantEvalZeroConstants() (gas: 41439) +LibOpConstantTest:testOpConstantIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 14746, ~: 14663) +LibOpConstantTest:testOpConstantIntegrityMaxIndex() (gas: 44981778) +LibOpConstantTest:testOpConstantIntegrityOOBConstants((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 36942, ~: 36752) +LibOpConstantTest:testOpConstantMultipleOutputErrorSugared() (gas: 31157) +LibOpConstantTest:testOpConstantMultipleOutputErrorUnsugared() (gas: 41553) +LibOpConstantTest:testOpConstantRun(bytes32[],uint16) (runs: 2048, μ: 43944, ~: 43653) +LibOpConstantTest:testOpConstantZeroOutputErrorSugared() (gas: 29596) +LibOpConstantTest:testOpConstantZeroOutputErrorUnsugared() (gas: 40019) +LibOpContextTest:testOpContextEval00(bytes32[][]) (runs: 100, μ: 7252777, ~: 6852378) +LibOpContextTest:testOpContextEval01(bytes32[][]) (runs: 100, μ: 7252892, ~: 6852493) +LibOpContextTest:testOpContextEval10(bytes32[][]) (runs: 100, μ: 7252854, ~: 6852455) +LibOpContextTest:testOpContextEval11(bytes32[][]) (runs: 100, μ: 7253015, ~: 6852616) +LibOpContextTest:testOpContextEvalEmptyInnerArray() (gas: 47277) +LibOpContextTest:testOpContextEvalMaxI() (gas: 323249) +LibOpContextTest:testOpContextEvalMaxJ() (gas: 90373) +LibOpContextTest:testOpContextEvalOOBi(bytes32[]) (runs: 100, μ: 76624, ~: 77782) +LibOpContextTest:testOpContextEvalOOBj(bytes32) (runs: 2048, μ: 47553, ~: 47553) +LibOpContextTest:testOpContextIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10835, ~: 10764) +LibOpContextTest:testOpContextOneInput() (gas: 41379) +LibOpContextTest:testOpContextRun(bytes32[][],uint256,uint256) (runs: 100, μ: 10287932, ~: 8984457) +LibOpContextTest:testOpContextRunOOBi(bytes32[][],uint256,uint256) (runs: 100, μ: 10691237, ~: 9545387) +LibOpContextTest:testOpContextRunOOBj(bytes32[][],uint256,uint256) (runs: 100, μ: 10692178, ~: 9546227) +LibOpContextTest:testOpContextTwoInputs() (gas: 46552) +LibOpContextTest:testOpContextTwoOutputs() (gas: 36905) +LibOpContextTest:testOpContextZeroOutputs() (gas: 35657) +LibOpDivTest:testDebugOpDivRun() (gas: 10541) +LibOpDivTest:testOpDivEvalOneInput() (gas: 125515) +LibOpDivTest:testOpDivEvalOperandsDisallowed() (gas: 91437) +LibOpDivTest:testOpDivEvalThreeInputsHappy() (gas: 406447) +LibOpDivTest:testOpDivEvalThreeInputsUnhappyExamples() (gas: 210453) +LibOpDivTest:testOpDivEvalThreeInputsUnhappyOverflow() (gas: 68159) +LibOpDivTest:testOpDivEvalTwoInputsHappy() (gas: 350579) +LibOpDivTest:testOpDivEvalTwoInputsUnhappyDivZero() (gas: 140710) +LibOpDivTest:testOpDivEvalTwoInputsUnhappyOverflow() (gas: 58740) +LibOpDivTest:testOpDivEvalTwoOutputs() (gas: 41233) +LibOpDivTest:testOpDivEvalZeroInputs() (gas: 29505) +LibOpDivTest:testOpDivEvalZeroOutputs() (gas: 40053) +LibOpDivTest:testOpDivIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11566, ~: 11555) +LibOpDivTest:testOpDivIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10617, ~: 10562) +LibOpDivTest:testOpDivIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10618, ~: 10563) +LibOpDivTest:testOpDivRun(bytes32[]) (runs: 2048, μ: 67486, ~: 65369) +LibOpERC20AllowanceTest:testOpERC20AllowanceDecimalsReadFailure() (gas: 70662) +LibOpERC20AllowanceTest:testOpERC20AllowanceEvalFourInputs() (gas: 55900) +LibOpERC20AllowanceTest:testOpERC20AllowanceEvalHappy(uint256,uint8) (runs: 2048, μ: 79155, ~: 79079) +LibOpERC20AllowanceTest:testOpERC20AllowanceEvalOneInput() (gas: 36630) +LibOpERC20AllowanceTest:testOpERC20AllowanceEvalOperandDisallowed() (gas: 18447) +LibOpERC20AllowanceTest:testOpERC20AllowanceEvalTwoInputs() (gas: 43270) +LibOpERC20AllowanceTest:testOpERC20AllowanceEvalTwoOutputs() (gas: 50582) +LibOpERC20AllowanceTest:testOpERC20AllowanceEvalZeroInputs() (gas: 30388) +LibOpERC20AllowanceTest:testOpERC20AllowanceEvalZeroOutputs() (gas: 49382) +LibOpERC20AllowanceTest:testOpERC20AllowanceInfiniteApproval(uint8) (runs: 2048, μ: 79803, ~: 79803) +LibOpERC20AllowanceTest:testOpERC20AllowanceIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10662, ~: 10590) +LibOpERC20AllowanceTest:testOpERC20AllowanceNotAnAddressOwner(uint256) (runs: 2048, μ: 6931, ~: 6931) +LibOpERC20AllowanceTest:testOpERC20AllowanceNotAnAddressSpender(uint256) (runs: 2048, μ: 6895, ~: 6895) +LibOpERC20AllowanceTest:testOpERC20AllowanceNotAnAddressToken(uint256) (runs: 2048, μ: 6880, ~: 6880) +LibOpERC20AllowanceTest:testOpERC20AllowanceRun(address,address,address,uint256,uint8) (runs: 2048, μ: 28147, ~: 28054) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfDecimalsReadFailure() (gas: 63782) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalHappy(uint256,uint8) (runs: 2048, μ: 73063, ~: 73065) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalOneInput() (gas: 36735) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalOperandDisallowed() (gas: 18527) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalOverflow(uint256,uint8) (runs: 2048, μ: 66636, ~: 66636) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalThreeInputs() (gas: 49370) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalTwoOutputs() (gas: 44080) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroInputs() (gas: 30492) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroOutputs() (gas: 42903) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10641, ~: 10569) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfNotAnAddressAccount(uint256) (runs: 2048, μ: 6611, ~: 6611) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfNotAnAddressToken(uint256) (runs: 2048, μ: 6627, ~: 6627) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfRun(address,address,uint256,uint16,uint8) (runs: 2048, μ: 28598, ~: 28600) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyDecimalsReadFailure() (gas: 56952) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalHappy(uint256,uint8) (runs: 2048, μ: 66247, ~: 66249) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalOperandDisallowed() (gas: 18713) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalOverflow(uint256,uint8) (runs: 2048, μ: 59765, ~: 59765) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoInputs() (gas: 43470) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoOutputs() (gas: 37678) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroInputs() (gas: 30631) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroOutputs() (gas: 36496) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10663, ~: 10591) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyNotAnAddress(uint256) (runs: 2048, μ: 6343, ~: 6343) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyRun(address,uint256,uint16,uint8) (runs: 2048, μ: 27975, ~: 27977) +LibOpERC5313OwnerTest:testOpERC5313OwnerEvalHappy() (gas: 56640) +LibOpERC5313OwnerTest:testOpERC5313OwnerEvalOperandDisallowed() (gas: 18273) +LibOpERC5313OwnerTest:testOpERC5313OwnerEvalTwoInputs() (gas: 43066) +LibOpERC5313OwnerTest:testOpERC5313OwnerEvalTwoOutputs() (gas: 37244) +LibOpERC5313OwnerTest:testOpERC5313OwnerEvalZeroInputs() (gas: 30247) +LibOpERC5313OwnerTest:testOpERC5313OwnerEvalZeroOutputs() (gas: 36083) +LibOpERC5313OwnerTest:testOpERC5313OwnerNotAnAddress(uint256) (runs: 2048, μ: 6361, ~: 6361) +LibOpERC5313OwnerTest:testOpERC5313OwnerOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10642, ~: 10570) +LibOpERC5313OwnerTest:testOpERC5313OwnerOfRun(address,address,uint16) (runs: 2048, μ: 17143, ~: 17143) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfEvalHappy(address,address,uint256) (runs: 2048, μ: 102165, ~: 102281) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12086, ~: 11996) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail0() (gas: 30275) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail1() (gas: 34775) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail3() (gas: 44682) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFailOperand() (gas: 21422) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfNotAnAddressAccount(uint256) (runs: 2048, μ: 6654, ~: 6654) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfNotAnAddressToken(uint256) (runs: 2048, μ: 6582, ~: 6582) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfOneInput() (gas: 35104) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfRun(address,address,uint256,uint16) (runs: 2048, μ: 19401, ~: 19403) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfThreeInputs() (gas: 44935) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfTwoOutputs() (gas: 40822) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfZeroInputs() (gas: 30571) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfZeroOutputs() (gas: 39569) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfEvalFail0() (gas: 30135) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfEvalFail1() (gas: 34711) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfEvalFail3() (gas: 44541) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfEvalFailOperand() (gas: 18193) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfEvalHappy(address,uint256,address) (runs: 2048, μ: 93853, ~: 91259) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfEvalOneInput() (gas: 35010) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfEvalThreeInputs() (gas: 44827) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfEvalZeroInputs() (gas: 30388) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfEvalZeroOutputs() (gas: 39496) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2048, μ: 10587, ~: 10577) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNotAnAddressToken(uint256) (runs: 2048, μ: 6643, ~: 6643) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfRun(address,bytes32,address,uint16) (runs: 2048, μ: 17580, ~: 17580) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfTwoOutputs() (gas: 40674) +LibOpETest:testOpEEval() (gas: 40376) +LibOpETest:testOpEEvalOneInput() (gas: 33861) +LibOpETest:testOpEEvalOperandDisallowed() (gas: 17286) +LibOpETest:testOpEEvalTwoOutputs() (gas: 30015) +LibOpETest:testOpEEvalZeroOutputs() (gas: 28832) +LibOpETest:testOpEIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12091, ~: 11938) +LibOpETest:testOpERun(uint16) (runs: 2048, μ: 7428, ~: 7428) +LibOpEnsureTest:testOpEnsureEvalBadOutputs() (gas: 35650) +LibOpEnsureTest:testOpEnsureEvalBadOutputs2() (gas: 34954) +LibOpEnsureTest:testOpEnsureEvalHappy() (gas: 164631) +LibOpEnsureTest:testOpEnsureEvalOne() (gas: 34206) +LibOpEnsureTest:testOpEnsureEvalThree() (gas: 45580) +LibOpEnsureTest:testOpEnsureEvalUnhappy() (gas: 162171) +LibOpEnsureTest:testOpEnsureEvalUnhappyOperand() (gas: 16892) +LibOpEnsureTest:testOpEnsureEvalZero() (gas: 28865) +LibOpEnsureTest:testOpEnsureIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12086, ~: 11952) +LibOpEnsureTest:testOpEnsureIntegrityUnhappy((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10523, ~: 10468) +LibOpEnsureTest:testOpEnsureOneOutput() (gas: 39416) +LibOpEnsureTest:testOpEnsureRun(bytes32,string) (runs: 2048, μ: 12316, ~: 12346) +LibOpEqualToTest:testOpEqualToEval2Inputs() (gas: 336712) +LibOpEqualToTest:testOpEqualToEval2InputsBothOne() (gas: 57412) +LibOpEqualToTest:testOpEqualToEval2InputsFirstOneSecondZero() (gas: 57878) +LibOpEqualToTest:testOpEqualToEval2InputsFirstZeroSecondOne() (gas: 57859) +LibOpEqualToTest:testOpEqualToEval2ZeroInputs() (gas: 57320) +LibOpEqualToTest:testOpEqualToEvalFail0Inputs() (gas: 29546) +LibOpEqualToTest:testOpEqualToEvalFail1Input() (gas: 34089) +LibOpEqualToTest:testOpEqualToEvalFail3Inputs() (gas: 42972) +LibOpEqualToTest:testOpEqualToEvalOperandDisallowed() (gas: 17877) +LibOpEqualToTest:testOpEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12089, ~: 11957) +LibOpEqualToTest:testOpEqualToRun(bytes32,bytes32) (runs: 2048, μ: 8735, ~: 8625) +LibOpEqualToTest:testOpEqualToTwoOutputs() (gas: 41095) +LibOpEqualToTest:testOpEqualToZeroOutputs() (gas: 39872) +LibOpEveryTest:testOpEveryEval1FalseInput() (gas: 51420) +LibOpEveryTest:testOpEveryEval1TrueInput() (gas: 51724) +LibOpEveryTest:testOpEveryEval2FalseInputs() (gas: 56887) +LibOpEveryTest:testOpEveryEval2MixedInputs() (gas: 57506) +LibOpEveryTest:testOpEveryEval2MixedInputs2() (gas: 57445) +LibOpEveryTest:testOpEveryEval2TrueInputs() (gas: 57856) +LibOpEveryTest:testOpEveryEvalFail() (gas: 29329) +LibOpEveryTest:testOpEveryEvalOperandDisallowed() (gas: 17656) +LibOpEveryTest:testOpEveryEvalZeroWithExponent() (gas: 58441) +LibOpEveryTest:testOpEveryIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12230, ~: 12032) +LibOpEveryTest:testOpEveryIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10656, ~: 10601) +LibOpEveryTest:testOpEveryRun(bytes32[]) (runs: 2048, μ: 14055, ~: 14106) +LibOpEveryTest:testOpEveryTwoOutputs() (gas: 35736) +LibOpEveryTest:testOpEveryZeroOutputs() (gas: 34553) +LibOpExp2Test:testOpExp2EvalBad() (gas: 64642) +LibOpExp2Test:testOpExp2EvalExample() (gas: 243530) +LibOpExp2Test:testOpExp2EvalNegativeInput() (gas: 56561) +LibOpExp2Test:testOpExp2EvalOperandDisallowed() (gas: 17553) +LibOpExp2Test:testOpExp2Integrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10721, ~: 10649) +LibOpExp2Test:testOpExp2Run(int224,int32,uint16) (runs: 2048, μ: 84146, ~: 67421) +LibOpExp2Test:testOpExp2TwoOutputs() (gas: 35601) +LibOpExp2Test:testOpExp2ZeroOutputs() (gas: 34393) +LibOpExpTest:testOpExpEvalExample() (gas: 288997) +LibOpExpTest:testOpExpEvalNegativeInput() (gas: 56394) +LibOpExpTest:testOpExpEvalOperandDisallowed() (gas: 17494) +LibOpExpTest:testOpExpEvalTwoInputs() (gas: 39959) +LibOpExpTest:testOpExpEvalZeroInputs() (gas: 29426) +LibOpExpTest:testOpExpIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10721, ~: 10649) +LibOpExpTest:testOpExpRun(int224,int32,uint16) (runs: 2048, μ: 114677, ~: 104463) +LibOpExpTest:testOpExpTwoOutputs() (gas: 35519) +LibOpExpTest:testOpExpZeroOutputs() (gas: 34356) +LibOpExponentialGrowthTest:testOpExponentialGrowthEval() (gas: 829724) +LibOpExponentialGrowthTest:testOpExponentialGrowthEvalFourInputs() (gas: 52130) +LibOpExponentialGrowthTest:testOpExponentialGrowthEvalOneInput() (gas: 35968) +LibOpExponentialGrowthTest:testOpExponentialGrowthEvalOperandDisallowed() (gas: 18655) +LibOpExponentialGrowthTest:testOpExponentialGrowthEvalTwoInputs() (gas: 41664) +LibOpExponentialGrowthTest:testOpExponentialGrowthEvalTwoOutputs() (gas: 47592) +LibOpExponentialGrowthTest:testOpExponentialGrowthEvalZeroInputs() (gas: 30208) +LibOpExponentialGrowthTest:testOpExponentialGrowthEvalZeroOutputs() (gas: 46369) +LibOpExponentialGrowthTest:testOpExponentialGrowthIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10699, ~: 10627) +LibOpExponentialGrowthTest:testOpExponentialGrowthRun(int224,int32,int224,int32,int224,int32,uint16) (runs: 2048, μ: 98221, ~: 82328) +LibOpExternTest:testOpExternEvalHappy() (gas: 99328) +LibOpExternTest:testOpExternEvalMultipleInputsOutputsHappy() (gas: 116433) +LibOpExternTest:testOpExternIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),address,uint16,uint8,uint8) (runs: 2048, μ: 26998, ~: 26931) +LibOpExternTest:testOpExternIntegrityNotAnExternContract((uint256,uint256,uint256,bytes32[],uint256,bytes),address,uint16,uint8,uint8) (runs: 2048, μ: 46827, ~: 46609) +LibOpExternTest:testOpExternReferenceFnBadOutputsLength(address,bytes32[],uint16,bytes32[],bytes32[]) (runs: 2048, μ: 79369, ~: 79392) +LibOpExternTest:testOpExternReferenceFnBadOutputsLengthTooMany(address,bytes32[],uint16,bytes32[],bytes32[]) (runs: 2048, μ: 79183, ~: 79225) +LibOpExternTest:testOpExternRunBadOutputsLength(address,bytes32[],uint16,bytes32[],bytes32[]) (runs: 2048, μ: 77712, ~: 77632) +LibOpExternTest:testOpExternRunBadOutputsLengthTooMany(address,bytes32[],uint16,bytes32[],bytes32[]) (runs: 2048, μ: 77590, ~: 77516) +LibOpExternTest:testOpExternRunHappy(address,bytes32[],uint16,bytes32[],bytes32[]) (runs: 2048, μ: 93241, ~: 93183) +LibOpExternTest:testOpExternRunZeroInputsZeroOutputs(address,bytes32[],uint16) (runs: 2048, μ: 49315, ~: 49087) +LibOpFloorTest:testOpFloorEval() (gas: 249273) +LibOpFloorTest:testOpFloorEvalNegative() (gas: 255835) +LibOpFloorTest:testOpFloorEvalOperandDisallowed() (gas: 17635) +LibOpFloorTest:testOpFloorIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10722, ~: 10650) +LibOpFloorTest:testOpFloorRun(bytes32,uint16) (runs: 2048, μ: 8346, ~: 7834) +LibOpFloorTest:testOpFloorTwoInputs() (gas: 40165) +LibOpFloorTest:testOpFloorTwoOutputs() (gas: 35702) +LibOpFloorTest:testOpFloorZeroInputs() (gas: 29633) +LibOpFloorTest:testOpFloorZeroOutputs() (gas: 34475) +LibOpFracTest:testOpFracEval() (gas: 331143) +LibOpFracTest:testOpFracEvalOperandDisallowed() (gas: 17531) +LibOpFracTest:testOpFracIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10742, ~: 10670) +LibOpFracTest:testOpFracRun(bytes32,uint16) (runs: 2048, μ: 8339, ~: 8297) +LibOpFracTest:testOpFracTwoInputs() (gas: 40030) +LibOpFracTest:testOpFracTwoOutputs() (gas: 35610) +LibOpFracTest:testOpFracZeroInputs() (gas: 29496) +LibOpFracTest:testOpFracZeroOutputs() (gas: 34404) +LibOpGetTest:testLibOpGetEvalKeyNotSet() (gas: 280583) +LibOpGetTest:testLibOpGetEvalOperandDisallowed() (gas: 57404) +LibOpGetTest:testLibOpGetEvalSetThenGet() (gas: 488143) +LibOpGetTest:testLibOpGetEvalStoreAndSetAndGet() (gas: 239922) +LibOpGetTest:testLibOpGetEvalStoreThenGet() (gas: 441506) +LibOpGetTest:testLibOpGetEvalThreeInputs() (gas: 45023) +LibOpGetTest:testLibOpGetEvalTwoInputs() (gas: 39545) +LibOpGetTest:testLibOpGetEvalTwoOutputs() (gas: 34963) +LibOpGetTest:testLibOpGetEvalZeroInputs() (gas: 29079) +LibOpGetTest:testLibOpGetEvalZeroOutputs() (gas: 33779) +LibOpGetTest:testLibOpGetIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12290, ~: 12123) +LibOpGetTest:testLibOpGetRunState(bytes32,bytes32,uint16) (runs: 2048, μ: 7859, ~: 7864) +LibOpGetTest:testLibOpGetRunStateAndStore(bytes32,bytes32,bytes32,uint16) (runs: 2048, μ: 35817, ~: 35822) +LibOpGetTest:testLibOpGetRunStore(bytes32,bytes32,uint16) (runs: 2048, μ: 37701, ~: 37706) +LibOpGetTest:testLibOpGetRunStoreDifferentNamespace(bytes32,bytes32,uint16) (runs: 2048, μ: 39622, ~: 39627) +LibOpGetTest:testLibOpGetRunUnset(bytes32,uint16) (runs: 2048, μ: 13854, ~: 13858) +LibOpGmTest:testOpGmEval() (gas: 508319) +LibOpGmTest:testOpGmEvalBothNegativeEqual() (gas: 68930) +LibOpGmTest:testOpGmEvalBothNegativeUnequal() (gas: 72030) +LibOpGmTest:testOpGmEvalMixedSignsNegativeFirst() (gas: 69531) +LibOpGmTest:testOpGmEvalMixedSignsNegativeSecond() (gas: 69556) +LibOpGmTest:testOpGmEvalMixedSignsNonUnit() (gas: 72186) +LibOpGmTest:testOpGmEvalNegativeWithZero() (gas: 59581) +LibOpGmTest:testOpGmEvalOperandDisallowed() (gas: 17413) +LibOpGmTest:testOpGmEvalZeroBytesIdentical() (gas: 106487) +LibOpGmTest:testOpGmEvalZeroWithNegative() (gas: 59582) +LibOpGmTest:testOpGmIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10705, ~: 10633) +LibOpGmTest:testOpGmOneInput() (gas: 34673) +LibOpGmTest:testOpGmRun(int224,int32,int224,int32,uint16) (runs: 2048, μ: 80451, ~: 86228) +LibOpGmTest:testOpGmThreeInputs() (gas: 45108) +LibOpGmTest:testOpGmTwoOutputs() (gas: 40683) +LibOpGmTest:testOpGmZeroOutputs() (gas: 39484) +LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEval2InputsBothOne() (gas: 58686) +LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEval2InputsFirstOneSecondZero() (gas: 59175) +LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEval2InputsFirstZeroSecondOne() (gas: 59151) +LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEval2ZeroInputs() (gas: 58593) +LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEvalFail0Inputs() (gas: 30819) +LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEvalFail1Input() (gas: 35415) +LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEvalFail3Inputs() (gas: 44331) +LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEvalNegOneGteZero() (gas: 59247) +LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEvalNegOnePointOneGteNegOnePointTwo() (gas: 62043) +LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEvalOnePointOneGteOnePointTwo() (gas: 61892) +LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEvalOnePointZeroGteOne() (gas: 59420) +LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEvalOperandDisallowed() (gas: 19176) +LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2048, μ: 10568, ~: 10558) +LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToRun(bytes32,bytes32) (runs: 2048, μ: 8587, ~: 8483) +LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToTwoOutputs() (gas: 42969) +LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToZeroOutputs() (gas: 41697) +LibOpGreaterThanTest:testOpGreaterThanEval1_0Gt1() (gas: 58396) +LibOpGreaterThanTest:testOpGreaterThanEval1_1Gt1_2() (gas: 60880) +LibOpGreaterThanTest:testOpGreaterThanEval2InputsBothOne() (gas: 57705) +LibOpGreaterThanTest:testOpGreaterThanEval2InputsFirstOneSecondZero() (gas: 58151) +LibOpGreaterThanTest:testOpGreaterThanEval2InputsFirstZeroSecondOne() (gas: 58170) +LibOpGreaterThanTest:testOpGreaterThanEval2ZeroInputs() (gas: 57591) +LibOpGreaterThanTest:testOpGreaterThanEvalFail0Inputs() (gas: 29870) +LibOpGreaterThanTest:testOpGreaterThanEvalFail1Input() (gas: 34467) +LibOpGreaterThanTest:testOpGreaterThanEvalFail3Inputs() (gas: 43288) +LibOpGreaterThanTest:testOpGreaterThanEvalNeg1Gt0() (gas: 58200) +LibOpGreaterThanTest:testOpGreaterThanEvalNeg1_1GtNeg1_2() (gas: 61073) +LibOpGreaterThanTest:testOpGreaterThanEvalOperandDisallowed() (gas: 18178) +LibOpGreaterThanTest:testOpGreaterThanIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12091, ~: 11992) +LibOpGreaterThanTest:testOpGreaterThanRun(bytes32,bytes32) (runs: 2048, μ: 8611, ~: 8507) +LibOpGreaterThanTest:testOpGreaterThanTwoOutputs() (gas: 41925) +LibOpGreaterThanTest:testOpGreaterThanZeroOutputs() (gas: 40723) +LibOpHashTest:testOpHashEval0Inputs() (gas: 45593) +LibOpHashTest:testOpHashEval1Input() (gas: 54171) +LibOpHashTest:testOpHashEval2Inputs() (gas: 62584) +LibOpHashTest:testOpHashEval2InputsDifferent() (gas: 63092) +LibOpHashTest:testOpHashEval2InputsOtherStack() (gas: 73998) +LibOpHashTest:testOpHashEvalOperandDisallowed() (gas: 17553) +LibOpHashTest:testOpHashIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12138, ~: 12039) +LibOpHashTest:testOpHashRun(bytes32[]) (runs: 2048, μ: 12684, ~: 12759) +LibOpHashTest:testOpHashTwoOutputs() (gas: 30251) +LibOpHashTest:testOpHashZeroOutputs() (gas: 28731) +LibOpHeadroomTest:testOpHeadroomEval() (gas: 483703) +LibOpHeadroomTest:testOpHeadroomEvalOperandDisallowed() (gas: 17855) +LibOpHeadroomTest:testOpHeadroomIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10700, ~: 10628) +LibOpHeadroomTest:testOpHeadroomRun(bytes32,uint16) (runs: 2048, μ: 13217, ~: 13606) +LibOpHeadroomTest:testOpHeadroomTwoInputs() (gas: 40387) +LibOpHeadroomTest:testOpHeadroomTwoOutputs() (gas: 35967) +LibOpHeadroomTest:testOpHeadroomZeroInputs() (gas: 29853) +LibOpHeadroomTest:testOpHeadroomZeroOutputs() (gas: 34760) +LibOpIfTest:testOpIfEval3InputsFirstOneSecondTwoThirdThree() (gas: 63376) +LibOpIfTest:testOpIfEval3InputsFirstOneSecondZeroThirdThree() (gas: 63083) +LibOpIfTest:testOpIfEval3InputsFirstTwoSecondThreeThirdFour() (gas: 63332) +LibOpIfTest:testOpIfEval3InputsFirstTwoSecondZeroThirdFour() (gas: 63083) +LibOpIfTest:testOpIfEval3InputsFirstZeroSecondOneThirdTwo() (gas: 63351) +LibOpIfTest:testOpIfEval3InputsFirstZeroSecondOneThirdZero() (gas: 62701) +LibOpIfTest:testOpIfEval3InputsFirstZeroSecondZeroThirdOne() (gas: 62770) +LibOpIfTest:testOpIfEval3InputsFirstZeroSecondZeroThirdThree() (gas: 62773) +LibOpIfTest:testOpIfEvalEmptyStringTruthy() (gas: 162439) +LibOpIfTest:testOpIfEvalFail0Inputs() (gas: 29060) +LibOpIfTest:testOpIfEvalFail1Input() (gas: 33669) +LibOpIfTest:testOpIfEvalFail2Inputs() (gas: 38049) +LibOpIfTest:testOpIfEvalFail4Inputs() (gas: 46919) +LibOpIfTest:testOpIfEvalOperandDisallowed() (gas: 17412) +LibOpIfTest:testOpIfEvalTwoOutputs() (gas: 46314) +LibOpIfTest:testOpIfEvalZeroExponent() (gas: 64650) +LibOpIfTest:testOpIfEvalZeroOutputs() (gas: 45069) +LibOpIfTest:testOpIfIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12086, ~: 11989) +LibOpIfTest:testOpIfRun(bytes32,bytes32,bytes32) (runs: 2048, μ: 8113, ~: 8114) +LibOpInvTest:testOpExpEvalOperandDisallowed() (gas: 17471) +LibOpInvTest:testOpInvEval() (gas: 181027) +LibOpInvTest:testOpInvEvalDivisionByZero() (gas: 47400) +LibOpInvTest:testOpInvEvalNegative() (gas: 96509) +LibOpInvTest:testOpInvIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10700, ~: 10628) +LibOpInvTest:testOpInvRun(int224,int32,uint16) (runs: 2048, μ: 17919, ~: 17812) +LibOpInvTest:testOpInvTwoInputs() (gas: 40003) +LibOpInvTest:testOpInvTwoOutputs() (gas: 35518) +LibOpInvTest:testOpInvZeroInputs() (gas: 29471) +LibOpInvTest:testOpInvZeroOutputs() (gas: 34313) +LibOpIsZeroTest:testOpIsZeroEval0e20Input() (gas: 52731) +LibOpIsZeroTest:testOpIsZeroEval1NonZeroInput() (gas: 51713) +LibOpIsZeroTest:testOpIsZeroEval1ZeroInput() (gas: 51410) +LibOpIsZeroTest:testOpIsZeroEvalFail0Inputs() (gas: 29433) +LibOpIsZeroTest:testOpIsZeroEvalFail2Inputs() (gas: 38497) +LibOpIsZeroTest:testOpIsZeroEvalOperandDisallowed() (gas: 17795) +LibOpIsZeroTest:testOpIsZeroIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12126, ~: 11971) +LibOpIsZeroTest:testOpIsZeroRun(bytes32) (runs: 2048, μ: 7639, ~: 7640) +LibOpIsZeroTest:testOpIsZeroTwoOutputs() (gas: 36150) +LibOpIsZeroTest:testOpIsZeroZeroOutputs() (gas: 34641) +LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEval2InputsBothOne() (gas: 53490) +LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEval2InputsFirstOneSecondZero() (gas: 53958) +LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEval2InputsFirstZeroSecondOne() (gas: 54001) +LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEval2ZeroInputs() (gas: 53444) +LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEvalFail0Inputs() (gas: 30598) +LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEvalFail1Input() (gas: 35186) +LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEvalFail3Inputs() (gas: 44109) +LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEvalNegOneLteZero() (gas: 58937) +LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEvalNegOnePointOneLteNegOnePointTwo() (gas: 61782) +LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEvalOnePointOneLteOnePointTwo() (gas: 61666) +LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEvalOnePointZeroLteOne() (gas: 59200) +LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEvalOperandDisallowed() (gas: 18942) +LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12095, ~: 11996) +LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToRun(bytes32,bytes32) (runs: 2048, μ: 8630, ~: 8526) +LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToTwoOutputs() (gas: 42653) +LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToZeroOutputs() (gas: 41475) +LibOpLessThanTest:testOpLessThan1_0Lt1() (gas: 58156) +LibOpLessThanTest:testOpLessThan1_1Lt1_2() (gas: 60659) +LibOpLessThanTest:testOpLessThanEval2InputsBothOne() (gas: 57420) +LibOpLessThanTest:testOpLessThanEval2InputsFirstOneSecondZero() (gas: 57884) +LibOpLessThanTest:testOpLessThanEval2InputsFirstZeroSecondOne() (gas: 57905) +LibOpLessThanTest:testOpLessThanEval2ZeroInputs() (gas: 57393) +LibOpLessThanTest:testOpLessThanEvalOperandDisallowed() (gas: 17936) +LibOpLessThanTest:testOpLessThanIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12065, ~: 11935) +LibOpLessThanTest:testOpLessThanMinus1Lt0() (gas: 58003) +LibOpLessThanTest:testOpLessThanMinus1_1LtMinus1_2() (gas: 60785) +LibOpLessThanTest:testOpLessThanRun(bytes32,bytes32) (runs: 2048, μ: 8589, ~: 8484) +LibOpLessThanTest:testOpLessThanToEvalFail0Inputs() (gas: 29671) +LibOpLessThanTest:testOpLessThanToEvalFail1Input() (gas: 34246) +LibOpLessThanTest:testOpLessThanToEvalFail3Inputs() (gas: 43085) +LibOpLessThanTest:testOpLessThanTwoOutputs() (gas: 41980) +LibOpLessThanTest:testOpLessThanZeroOutputs() (gas: 39953) +LibOpLinearGrowthTest:testOpLinearGrowthEval() (gas: 795987) +LibOpLinearGrowthTest:testOpLinearGrowthEvalFourInputs() (gas: 51736) +LibOpLinearGrowthTest:testOpLinearGrowthEvalOneInput() (gas: 35617) +LibOpLinearGrowthTest:testOpLinearGrowthEvalOperandDisallowed() (gas: 18259) +LibOpLinearGrowthTest:testOpLinearGrowthEvalTwoInputs() (gas: 41270) +LibOpLinearGrowthTest:testOpLinearGrowthEvalTwoOutputs() (gas: 47157) +LibOpLinearGrowthTest:testOpLinearGrowthEvalZeroInputs() (gas: 29792) +LibOpLinearGrowthTest:testOpLinearGrowthEvalZeroOutputs() (gas: 45954) +LibOpLinearGrowthTest:testOpLinearGrowthIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10699, ~: 10627) +LibOpLinearGrowthTest:testOpLinearGrowthRun(int224,int32,int224,int32,int224,int32,uint16) (runs: 2048, μ: 21545, ~: 21368) +LibOpMaxNegativeValueTest:testOpMaxNegativeValueEval() (gas: 46636) +LibOpMaxNegativeValueTest:testOpMaxNegativeValueEvalFail() (gas: 34918) +LibOpMaxNegativeValueTest:testOpMaxNegativeValueEvalOperandDisallowed() (gas: 18664) +LibOpMaxNegativeValueTest:testOpMaxNegativeValueRun() (gas: 7534) +LibOpMaxNegativeValueTest:testOpMaxNegativeValueTwoOutputs() (gas: 31355) +LibOpMaxNegativeValueTest:testOpMaxNegativeValueZeroOutputs() (gas: 30193) +LibOpMaxNegativeValueTest:testOpMaxValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12081, ~: 11988) +LibOpMaxPositiveValueTest:testOpMaxPositiveValueEval() (gas: 46635) +LibOpMaxPositiveValueTest:testOpMaxPositiveValueEvalFail() (gas: 34916) +LibOpMaxPositiveValueTest:testOpMaxPositiveValueEvalOperandDisallowed() (gas: 18686) +LibOpMaxPositiveValueTest:testOpMaxPositiveValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12082, ~: 11977) +LibOpMaxPositiveValueTest:testOpMaxPositiveValueRun() (gas: 7536) +LibOpMaxPositiveValueTest:testOpMaxPositiveValueTwoOutputs() (gas: 31377) +LibOpMaxPositiveValueTest:testOpMaxPositiveValueZeroOutputs() (gas: 30170) +LibOpMaxTest:testOpMaxEval2InputsHappy() (gas: 874824) +LibOpMaxTest:testOpMaxEval3InputsHappy() (gas: 2026677) +LibOpMaxTest:testOpMaxEvalOneInput() (gas: 128234) +LibOpMaxTest:testOpMaxEvalOperandDisallowed() (gas: 58773) +LibOpMaxTest:testOpMaxEvalTwoOutputs() (gas: 40729) +LibOpMaxTest:testOpMaxEvalZeroInputs() (gas: 29484) +LibOpMaxTest:testOpMaxIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11542, ~: 11533) +LibOpMaxTest:testOpMaxIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10663, ~: 10608) +LibOpMaxTest:testOpMaxIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10640, ~: 10585) +LibOpMaxTest:testOpMaxRun(bytes32[]) (runs: 2048, μ: 20139, ~: 20370) +LibOpMaxTest:testOpMaxZeroOutputs() (gas: 39527) +LibOpMinNegativeValueTest:testOpMinNegativeValueEval() (gas: 46656) +LibOpMinNegativeValueTest:testOpMinNegativeValueEvalFail() (gas: 34917) +LibOpMinNegativeValueTest:testOpMinNegativeValueEvalOperandDisallowed() (gas: 18687) +LibOpMinNegativeValueTest:testOpMinNegativeValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12090, ~: 11998) +LibOpMinNegativeValueTest:testOpMinNegativeValueRun() (gas: 7558) +LibOpMinNegativeValueTest:testOpMinNegativeValueTwoOutputs() (gas: 31376) +LibOpMinNegativeValueTest:testOpMinNegativeValueZeroOutputs() (gas: 30192) +LibOpMinPositiveValueTest:testOpMinPositiveValueEval() (gas: 46636) +LibOpMinPositiveValueTest:testOpMinPositiveValueEvalFail() (gas: 34874) +LibOpMinPositiveValueTest:testOpMinPositiveValueEvalOperandDisallowed() (gas: 18686) +LibOpMinPositiveValueTest:testOpMinPositiveValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12068, ~: 11966) +LibOpMinPositiveValueTest:testOpMinPositiveValueRun() (gas: 7580) +LibOpMinPositiveValueTest:testOpMinPositiveValueTwoOutputs() (gas: 31375) +LibOpMinPositiveValueTest:testOpMinPositiveValueZeroOutputs() (gas: 30191) +LibOpMinTest:testOpMinEval2InputsHappy() (gas: 966713) +LibOpMinTest:testOpMinEval3InputsHappy() (gas: 3479742) +LibOpMinTest:testOpMinEvalOneInput() (gas: 125470) +LibOpMinTest:testOpMinEvalOperandDisallowed() (gas: 58796) +LibOpMinTest:testOpMinEvalZeroInputs() (gas: 29483) +LibOpMinTest:testOpMinIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11595, ~: 11585) +LibOpMinTest:testOpMinIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10619, ~: 10564) +LibOpMinTest:testOpMinIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10663, ~: 10608) +LibOpMinTest:testOpMinRun(bytes32[],uint16) (runs: 2048, μ: 19786, ~: 19654) +LibOpMinTest:testOpMinTwoOutputs() (gas: 40797) +LibOpMinTest:testOpMinZeroOutputs() (gas: 39619) +LibOpMulTest:testOpDecimal18MulIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10620, ~: 10565) +LibOpMulTest:testOpMulEvalOneInput() (gas: 125472) +LibOpMulTest:testOpMulEvalOperandsDisallowed() (gas: 91459) +LibOpMulTest:testOpMulEvalThreeInputsHappy() (gas: 760970) +LibOpMulTest:testOpMulEvalThreeInputsUnhappyOverflow() (gas: 62862) +LibOpMulTest:testOpMulEvalTwoInputsHappy() (gas: 527647) +LibOpMulTest:testOpMulEvalTwoInputsUnhappyOverflow() (gas: 55423) +LibOpMulTest:testOpMulEvalZeroInputs() (gas: 29527) +LibOpMulTest:testOpMulIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11588, ~: 11579) +LibOpMulTest:testOpMulIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10662, ~: 10607) +LibOpMulTest:testOpMulRun(bytes32[]) (runs: 2048, μ: 40603, ~: 37709) +LibOpMulTest:testOpMulTwoOutputs() (gas: 40750) +LibOpMulTest:testOpMulZeroOutputs() (gas: 39550) +LibOpPowerTest:testOpPowEval() (gas: 571235) +LibOpPowerTest:testOpPowEvalOneInput() (gas: 34948) +LibOpPowerTest:testOpPowEvalOperandDisallowed() (gas: 17634) +LibOpPowerTest:testOpPowIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10720, ~: 10648) +LibOpPowerTest:testOpPowNegativeBaseError() (gas: 97596) +LibOpPowerTest:testOpPowRun(int224,int32,int224,int32) (runs: 2048, μ: 75606, ~: 76945) +LibOpPowerTest:testOpPowThreeInputs() (gas: 45340) +LibOpPowerTest:testOpPowTwoOutputs() (gas: 40873) +LibOpPowerTest:testOpPowZeroOutputs() (gas: 39714) +LibOpSetTest:testLibOpSet(bytes32,bytes32) (runs: 2048, μ: 6804, ~: 6809) +LibOpSetTest:testLibOpSetEvalOneInput() (gas: 33678) +LibOpSetTest:testLibOpSetEvalOneOutput() (gas: 39619) +LibOpSetTest:testLibOpSetEvalOperandsDisallowed() (gas: 55599) +LibOpSetTest:testLibOpSetEvalSetTwice() (gas: 71840) +LibOpSetTest:testLibOpSetEvalThreeInputs() (gas: 44583) +LibOpSetTest:testLibOpSetEvalTwoInputs() (gas: 241495) +LibOpSetTest:testLibOpSetEvalTwoOutputs() (gas: 40314) +LibOpSetTest:testLibOpSetEvalZeroInputs() (gas: 28613) +LibOpSetTest:testLibOpSetIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12178, ~: 12072) +LibOpSqrtTest:testOpSqrtEvalBad() (gas: 64643) +LibOpSqrtTest:testOpSqrtEvalExamples() (gas: 257011) +LibOpSqrtTest:testOpSqrtEvalNegativeInput() (gas: 47577) +LibOpSqrtTest:testOpSqrtEvalOperandDisallowed() (gas: 17575) +LibOpSqrtTest:testOpSqrtEvalTwoOutputs() (gas: 35622) +LibOpSqrtTest:testOpSqrtEvalZeroOutputs() (gas: 34414) +LibOpSqrtTest:testOpSqrtIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10699, ~: 10627) +LibOpSqrtTest:testOpSqrtRun(bytes32) (runs: 2048, μ: 74820, ~: 81820) +LibOpStackTest:testOpStackEval() (gas: 60533) +LibOpStackTest:testOpStackEvalSeveral() (gas: 80721) +LibOpStackTest:testOpStackIntegrity(bytes,uint256,bytes32[],bytes32) (runs: 2048, μ: 11785, ~: 11861) +LibOpStackTest:testOpStackIntegrityOOBStack(bytes,uint16,bytes32[],uint16,uint256) (runs: 2048, μ: 37288, ~: 37382) +LibOpStackTest:testOpStackMultipleOutputErrorSugared() (gas: 38721) +LibOpStackTest:testOpStackMultipleOutputErrorUnsugared() (gas: 42926) +LibOpStackTest:testOpStackRun(bytes32[][],uint256) (runs: 100, μ: 1953426, ~: 1710137) +LibOpStackTest:testOpStackRunReferenceFnParity(bytes32[][],uint256) (runs: 100, μ: 1906326, ~: 1670632) +LibOpStackTest:testOpStackZeroOutputErrorSugared() (gas: 37185) +LibOpStackTest:testOpStackZeroOutputErrorUnsugared() (gas: 41356) +LibOpSubTest:testOpSubEvalOneInput() (gas: 128211) +LibOpSubTest:testOpSubEvalOperandDisallowed() (gas: 91460) +LibOpSubTest:testOpSubEvalThreeInputs() (gas: 226922) +LibOpSubTest:testOpSubEvalTwoInputs() (gas: 440590) +LibOpSubTest:testOpSubEvalZeroInputs() (gas: 29484) +LibOpSubTest:testOpSubIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11543, ~: 11533) +LibOpSubTest:testOpSubIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10640, ~: 10585) +LibOpSubTest:testOpSubIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10640, ~: 10585) +LibOpSubTest:testOpSubRun(bytes32[]) (runs: 2048, μ: 57542, ~: 58942) +LibOpSubTest:testOpSubTwoOutputs() (gas: 40821) +LibOpSubTest:testOpSubZeroOutputs() (gas: 39597) +LibOpUint256AddTest:testOpUint256AddEvalOneInput() (gas: 126462) +LibOpUint256AddTest:testOpUint256AddEvalOperandsDisallowed() (gas: 95347) +LibOpUint256AddTest:testOpUint256AddEvalThreeInputsHappy() (gas: 207646) +LibOpUint256AddTest:testOpUint256AddEvalThreeInputsUnhappy() (gas: 113233) +LibOpUint256AddTest:testOpUint256AddEvalTwoInputsHappy() (gas: 276070) +LibOpUint256AddTest:testOpUint256AddEvalTwoOutputs() (gas: 41420) +LibOpUint256AddTest:testOpUint256AddEvalZeroInputs() (gas: 30153) +LibOpUint256AddTest:testOpUint256AddEvalZeroOutputs() (gas: 40197) +LibOpUint256AddTest:testOpUint256AddIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11584, ~: 11578) +LibOpUint256AddTest:testOpUint256AddIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10613, ~: 10558) +LibOpUint256AddTest:testOpUint256AddIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10611, ~: 10556) +LibOpUint256AddTest:testOpUint256AddRun(bytes32[]) (runs: 2048, μ: 14566, ~: 14657) +LibOpUint256DivTest:testOpUint256DivEval2InputsHappy() (gas: 759461) +LibOpUint256DivTest:testOpUint256DivEval2InputsUnhappy() (gas: 141257) +LibOpUint256DivTest:testOpUint256DivEval3InputsHappy() (gas: 1391578) +LibOpUint256DivTest:testOpUint256DivEval3InputsUnhappy() (gas: 478066) +LibOpUint256DivTest:testOpUint256DivEvalOneInput() (gas: 132175) +LibOpUint256DivTest:testOpUint256DivEvalOperandDisallowed() (gas: 61344) +LibOpUint256DivTest:testOpUint256DivEvalTwoOutputs() (gas: 41421) +LibOpUint256DivTest:testOpUint256DivEvalZeroInputs() (gas: 30154) +LibOpUint256DivTest:testOpUint256DivEvalZeroOutputs() (gas: 40175) +LibOpUint256DivTest:testOpUint256DivIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11591, ~: 11571) +LibOpUint256DivTest:testOpUint256DivIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10633, ~: 10578) +LibOpUint256DivTest:testOpUint256DivIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10613, ~: 10558) +LibOpUint256DivTest:testOpUint256DivRun(bytes32[]) (runs: 2048, μ: 18033, ~: 18276) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalFourInputs() (gas: 56573) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalHappy(uint256) (runs: 2048, μ: 71516, ~: 71516) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalOneInput() (gas: 37341) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalOperandDisallowed() (gas: 19073) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalTwoInputs() (gas: 43918) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalTwoOutputs() (gas: 51208) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalZeroInputs() (gas: 31037) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalZeroOutputs() (gas: 50008) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10662, ~: 10590) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceRun(address,address,address,uint256) (runs: 2048, μ: 17930, ~: 17930) +LibOpUint256ERC20AllowanceTest:testOpUint256ERC20AllowanceNotAnAddressOwner(uint256) (runs: 2048, μ: 6903, ~: 6903) +LibOpUint256ERC20AllowanceTest:testOpUint256ERC20AllowanceNotAnAddressSpender(uint256) (runs: 2048, μ: 6931, ~: 6931) +LibOpUint256ERC20AllowanceTest:testOpUint256ERC20AllowanceNotAnAddressToken(uint256) (runs: 2048, μ: 6929, ~: 6929) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalHappy(uint256) (runs: 2048, μ: 64568, ~: 64568) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalOneInput() (gas: 37380) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalOperandDisallowed() (gas: 19153) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalThreeInputs() (gas: 50041) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalTwoOutputs() (gas: 44751) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroInputs() (gas: 31118) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroOutputs() (gas: 43529) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10663, ~: 10591) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfRun(address,address,uint256,uint16) (runs: 2048, μ: 17503, ~: 17503) +LibOpUint256ERC20BalanceOfTest:testOpUint256ERC20BalanceOfNotAnAddressAccount(uint256) (runs: 2048, μ: 6699, ~: 6699) +LibOpUint256ERC20BalanceOfTest:testOpUint256ERC20BalanceOfNotAnAddressToken(uint256) (runs: 2048, μ: 6648, ~: 6648) +LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalHappy(uint256) (runs: 2048, μ: 57685, ~: 57685) +LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalOperandDisallowed() (gas: 19316) +LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoInputs() (gas: 44140) +LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoOutputs() (gas: 38338) +LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroInputs() (gas: 31280) +LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroOutputs() (gas: 37133) +LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2048, μ: 10685, ~: 10613) +LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyRun(address,uint256,uint16) (runs: 2048, μ: 16953, ~: 16953) +LibOpUint256ERC20TotalSupplyTest:testOpUint256ERC20TotalSupplyNotAnAddress(uint256) (runs: 2048, μ: 6360, ~: 6360) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfEvalHappy(address,address,uint256) (runs: 2048, μ: 101468, ~: 101573) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12039, ~: 11945) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail0() (gas: 30879) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail1() (gas: 35453) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail3() (gas: 45286) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFailOperand() (gas: 22038) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfOneInput() (gas: 35759) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfRun(address,address,uint256,uint16) (runs: 2048, μ: 17582, ~: 17582) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfThreeInputs() (gas: 45627) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfTwoOutputs() (gas: 41438) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfZeroInputs() (gas: 31219) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfZeroOutputs() (gas: 40259) +LibOpUint256ERC721BalanceOfTest:testOpUint256ERC721BalanceOfNotAnAddressAccount(uint256) (runs: 2048, μ: 6669, ~: 6669) +LibOpUint256ERC721BalanceOfTest:testOpUint256ERC721BalanceOfNotAnAddressToken(uint256) (runs: 2048, μ: 6630, ~: 6630) +LibOpUint256MaxValueTest:testOpMaxUint256Eval() (gas: 46559) +LibOpUint256MaxValueTest:testOpMaxUint256EvalFail() (gas: 34837) +LibOpUint256MaxValueTest:testOpMaxUint256EvalOperandDisallowed() (gas: 18605) +LibOpUint256MaxValueTest:testOpMaxUint256Integrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2048, μ: 12036, ~: 11943) +LibOpUint256MaxValueTest:testOpMaxUint256Run() (gas: 7305) +LibOpUint256MaxValueTest:testOpMaxUint256TwoOutputs() (gas: 31295) +LibOpUint256MaxValueTest:testOpMaxUint256ZeroOutputs() (gas: 30068) +LibOpUint256MulTest:testOpUint256MulEvalOneInput() (gas: 129394) +LibOpUint256MulTest:testOpUint256MulEvalOperandsDisallowed() (gas: 99593) +LibOpUint256MulTest:testOpUint256MulEvalThreeInputsHappy() (gas: 1020150) +LibOpUint256MulTest:testOpUint256MulEvalThreeInputsUnhappy() (gas: 643732) +LibOpUint256MulTest:testOpUint256MulEvalTwoInputsHappy() (gas: 417395) +LibOpUint256MulTest:testOpUint256MulEvalTwoInputsUnhappy() (gas: 143353) +LibOpUint256MulTest:testOpUint256MulEvalTwoOutputs() (gas: 42076) +LibOpUint256MulTest:testOpUint256MulEvalZeroInputs() (gas: 30918) +LibOpUint256MulTest:testOpUint256MulEvalZeroOutputs() (gas: 40921) +LibOpUint256MulTest:testOpUint256MulIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11538, ~: 11533) +LibOpUint256MulTest:testOpUint256MulIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10655, ~: 10600) +LibOpUint256MulTest:testOpUint256MulIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10612, ~: 10557) +LibOpUint256MulTest:testOpUint256MulRun(bytes32[]) (runs: 2048, μ: 14498, ~: 14452) +LibOpUint256PowerTest:testOpUint256ExpIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11551, ~: 11538) +LibOpUint256PowerTest:testOpUint256PowEval2InputsHappy() (gas: 859488) +LibOpUint256PowerTest:testOpUint256PowEval2InputsUnhappy() (gas: 143167) +LibOpUint256PowerTest:testOpUint256PowEval3InputsHappy() (gas: 1959528) +LibOpUint256PowerTest:testOpUint256PowEval3InputsUnhappy() (gas: 624490) +LibOpUint256PowerTest:testOpUint256PowEvalOneInput() (gas: 131497) +LibOpUint256PowerTest:testOpUint256PowEvalOperandDisallowed() (gas: 62036) +LibOpUint256PowerTest:testOpUint256PowEvalTwoOutputs() (gas: 41550) +LibOpUint256PowerTest:testOpUint256PowEvalZeroInputs() (gas: 30346) +LibOpUint256PowerTest:testOpUint256PowEvalZeroOutputs() (gas: 40328) +LibOpUint256PowerTest:testOpUint256PowIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10635, ~: 10580) +LibOpUint256PowerTest:testOpUint256PowIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10612, ~: 10557) +LibOpUint256PowerTest:testOpUint256PowRun(bytes32[]) (runs: 2048, μ: 15968, ~: 16200) +LibOpUint256SubTest:testOpUint256SubEvalOneInput() (gas: 126549) +LibOpUint256SubTest:testOpUint256SubEvalOperandsDisallowed() (gas: 95349) +LibOpUint256SubTest:testOpUint256SubEvalThreeInputsHappy() (gas: 207521) +LibOpUint256SubTest:testOpUint256SubEvalThreeInputsUnhappy() (gas: 113406) +LibOpUint256SubTest:testOpUint256SubEvalTwoInputsHappy() (gas: 276068) +LibOpUint256SubTest:testOpUint256SubEvalTwoOutputs() (gas: 41409) +LibOpUint256SubTest:testOpUint256SubEvalZeroInputs() (gas: 30164) +LibOpUint256SubTest:testOpUint256SubEvalZeroOutputs() (gas: 40187) +LibOpUint256SubTest:testOpUint256SubIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2048, μ: 11574, ~: 11563) +LibOpUint256SubTest:testOpUint256SubIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10656, ~: 10601) +LibOpUint256SubTest:testOpUint256SubIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2048, μ: 10612, ~: 10557) +LibOpUint256SubTest:testOpUint256SubRun(bytes32[]) (runs: 2048, μ: 14291, ~: 14303) +LibParseCommentsTest:testParseCommentAfterSources() (gas: 66709) +LibParseCommentsTest:testParseCommentBetweenSources() (gas: 66764) +LibParseCommentsTest:testParseCommentInIgnoredLHS() (gas: 46767) +LibParseCommentsTest:testParseCommentInLHSWhitespace() (gas: 46977) +LibParseCommentsTest:testParseCommentInNamedLHS() (gas: 46848) +LibParseCommentsTest:testParseCommentInRHS() (gas: 47145) +LibParseCommentsTest:testParseCommentInRHS2() (gas: 50199) +LibParseCommentsTest:testParseCommentInRHS3() (gas: 50209) +LibParseCommentsTest:testParseCommentLong() (gas: 61452) +LibParseCommentsTest:testParseCommentManyAstericks() (gas: 54619) +LibParseCommentsTest:testParseCommentManyAstericksTrailing() (gas: 54577) +LibParseCommentsTest:testParseCommentMultiple() (gas: 71390) +LibParseCommentsTest:testParseCommentNoTrailingWhitespace() (gas: 47468) +LibParseCommentsTest:testParseCommentNoWords() (gas: 50816) +LibParseCommentsTest:testParseCommentSingleWord() (gas: 55163) +LibParseCommentsTest:testParseCommentSingleWordSameLine() (gas: 55925) +LibParseCommentsTest:testParseCommentUnclosed() (gas: 47118) +LibParseCommentsTest:testParseCommentUnclosed2() (gas: 47316) +LibParseEmptyGasTest:testParseGasEmpty00() (gas: 39076) +LibParseEmptyGasTest:testParseGasEmpty01() (gas: 43955) +LibParseEmptyGasTest:testParseGasEmpty02() (gas: 48229) +LibParseEmptyGasTest:testParseGasEmpty03() (gas: 52480) +LibParseEmptyGasTest:testParseGasEmpty04() (gas: 56731) +LibParseEmptyTest:testParseEmpty00() (gas: 42589) +LibParseEmptyTest:testParseEmpty01() (gas: 49103) +LibParseEmptyTest:testParseEmpty02() (gas: 55284) +LibParseEmptyTest:testParseEmpty03() (gas: 61264) +LibParseEmptyTest:testParseEmpty04() (gas: 67310) +LibParseEmptyTest:testParseEmpty08() (gas: 91326) +LibParseEmptyTest:testParseEmpty15() (gas: 133370) +LibParseEmptyTest:testParseEmptyError16() (gas: 93537) +LibParseErrorTest:testHandleErrorSelectorReverts() (gas: 6078) +LibParseErrorTest:testHandleErrorSelectorZeroNoOp() (gas: 2663) +LibParseErrorTest:testParseErrorOffsetFirstByte() (gas: 1653) +LibParseErrorTest:testParseErrorOffsetFuzz(uint8,uint8) (runs: 2048, μ: 2897, ~: 3069) +LibParseErrorTest:testParseErrorOffsetLastByte() (gas: 1687) +LibParseIgnoredLHSTest:testParseIgnoredLHSAlphaTooLong() (gas: 51335) +LibParseIgnoredLHSTest:testParseIgnoredLHSLoneUnderscore() (gas: 49871) +LibParseIgnoredLHSTest:testParseIgnoredLHSMultipleLines() (gas: 53390) +LibParseIgnoredLHSTest:testParseIgnoredLHSTwoAlphas() (gas: 51052) +LibParseIgnoredLHSTest:testParseIgnoredLHSTwoUnderscores() (gas: 50889) +LibParseIgnoredLHSTest:testParseIgnoredLHSUnderscoreAlpha() (gas: 49945) +LibParseIgnoredLHSTest:testParseIgnoredLHSUnderscoreNotInput() (gas: 55217) +LibParseIgnoredLHSTest:testParseIgnoredWordTooLong() (gas: 52496) +LibParseInputsOnlyGasTest:testParseGasInputsOnly00() (gas: 44732) +LibParseInputsOnlyGasTest:testParseGasInputsOnly01() (gas: 45739) +LibParseInputsOnlyGasTest:testParseGasInputsOnly02() (gas: 46719) +LibParseInputsOnlyGasTest:testParseGasInputsOnly03() (gas: 47725) +LibParseInputsOnlyGasTest:testParseGasInputsOnly04() (gas: 48731) +LibParseInputsOnlyGasTest:testParseGasInputsOnly05() (gas: 49737) +LibParseInputsOnlyGasTest:testParseGasInputsOnly06() (gas: 50741) +LibParseInputsOnlyGasTest:testParseGasInputsOnly07() (gas: 51777) +LibParseInputsOnlyGasTest:testParseGasInputsOnly08() (gas: 52750) +LibParseInputsOnlyGasTest:testParseGasInputsOnly09() (gas: 53756) +LibParseInputsOnlyTest:testParseInputsOnlyMultiple() (gas: 50844) +LibParseInputsOnlyTest:testParseInputsOnlySingle() (gas: 49862) +LibParseInterstitialTest:testMalformedCommentStart(uint8) (runs: 2048, μ: 6693, ~: 6693) +LibParseInterstitialTest:testParseInterstitialAtEnd() (gas: 1829) +LibParseInterstitialTest:testParseInterstitialMixed() (gas: 4080) +LibParseInterstitialTest:testParseInterstitialMultipleComments() (gas: 4888) +LibParseInterstitialTest:testParseInterstitialNonInterstitialFirst() (gas: 1953) +LibParseInterstitialTest:testSkipCommentFuzzBody(bytes) (runs: 2048, μ: 25508, ~: 9679) +LibParseInterstitialTest:testSkipCommentSetsYang() (gas: 2368) +LibParseInterstitialTest:testSkipCommentThreeBytes() (gas: 6057) +LibParseInterstitialTest:testSkipCommentTooShort() (gas: 6102) +LibParseInterstitialTest:testSkipCommentWithContent() (gas: 3278) +LibParseInterstitialTest:testSkipWhitespaceAllTypes() (gas: 2298) +LibParseInterstitialTest:testSkipWhitespaceAtEnd() (gas: 1947) +LibParseInterstitialTest:testSkipWhitespaceClearsYang() (gas: 2199) +LibParseLHSOverflowTest:testLHSItemCount255() (gas: 394685) +LibParseLHSOverflowTest:testLHSItemCountOverflow256() (gas: 312567) +LibParseLiteralBoundLiteralHexTest:testParseLiteralBoundLiteralHexBounds() (gas: 8421) +LibParseLiteralBoundLiteralHexTest:testParseLiteralBoundLiteralHexFuzz(string,bytes1,string) (runs: 2048, μ: 37445, ~: 35468) +LibParseLiteralDecimalParseDecimalFloatTest:testParseDecimalFloatHappyPath() (gas: 520511) +LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatDotE() (gas: 10762) +LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatDotE0() (gas: 10718) +LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatDotRevert() (gas: 10763) +LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatDotRevert2() (gas: 10740) +LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatDotRevert3() (gas: 11726) +LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatEDot() (gas: 10742) +LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatEmpty() (gas: 10694) +LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatExponentRevert() (gas: 10709) +LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatExponentRevert2() (gas: 11943) +LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatExponentRevert3() (gas: 12046) +LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatExponentRevert4() (gas: 10739) +LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatExponentRevert5() (gas: 10783) +LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatExponentRevert6() (gas: 10762) +LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatNegativeE() (gas: 12569) +LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatNegativeFrac() (gas: 11719) +LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatNonDecimal() (gas: 10717) +LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatPrecisionRevert0() (gas: 34259) +LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatPrecisionRevert1() (gas: 34009) +LibParseLiteralDispatchTest:testParseLiteralHappyPath() (gas: 6388) +LibParseLiteralDispatchTest:testParseLiteralUnsupportedType() (gas: 8090) +LibParseLiteralDispatchTest:testTryParseLiteralCursorAdvancement() (gas: 7576) +LibParseLiteralDispatchTest:testTryParseLiteralDecimal() (gas: 7337) +LibParseLiteralDispatchTest:testTryParseLiteralDecimalValue() (gas: 7721) +LibParseLiteralDispatchTest:testTryParseLiteralEmptyString() (gas: 6135) +LibParseLiteralDispatchTest:testTryParseLiteralHex() (gas: 6394) +LibParseLiteralDispatchTest:testTryParseLiteralHexCursorAdvancement() (gas: 7204) +LibParseLiteralDispatchTest:testTryParseLiteralHexValue() (gas: 6530) +LibParseLiteralDispatchTest:testTryParseLiteralMaxHex() (gas: 24840) +LibParseLiteralDispatchTest:testTryParseLiteralMinHex() (gas: 6403) +LibParseLiteralDispatchTest:testTryParseLiteralNegativeDecimal() (gas: 7108) +LibParseLiteralDispatchTest:testTryParseLiteralNegativeDecimalValue() (gas: 7492) +LibParseLiteralDispatchTest:testTryParseLiteralNegativeMultiDigit() (gas: 7772) +LibParseLiteralDispatchTest:testTryParseLiteralNegativeZero() (gas: 7434) +LibParseLiteralDispatchTest:testTryParseLiteralOOBSecondBytePoison() (gas: 5559) +LibParseLiteralDispatchTest:testTryParseLiteralString() (gas: 6010) +LibParseLiteralDispatchTest:testTryParseLiteralStringCursorAdvancement() (gas: 6249) +LibParseLiteralDispatchTest:testTryParseLiteralStringValue() (gas: 6319) +LibParseLiteralDispatchTest:testTryParseLiteralSubParseableDispatch() (gas: 12788) +LibParseLiteralDispatchTest:testTryParseLiteralUnrecognized() (gas: 5167) +LibParseLiteralDispatchTest:testTryParseLiteralUnrecognizedMultiple() (gas: 21126) +LibParseLiteralDispatchTest:testTryParseLiteralUppercaseXReverts() (gas: 8099) +LibParseLiteralDispatchTest:testTryParseLiteralZeroDecimal() (gas: 7009) +LibParseLiteralDispatchTest:testTryParseLiteralZeroValue() (gas: 7145) +LibParseLiteralHexParseHexTest:testParseHexAlternatingCase() (gas: 5631) +LibParseLiteralHexParseHexTest:testParseHexLowerCase() (gas: 3883) +LibParseLiteralHexParseHexTest:testParseHexMixedCase() (gas: 3353) +LibParseLiteralHexParseHexTest:testParseHexOddLength(uint8) (runs: 2048, μ: 13723, ~: 12446) +LibParseLiteralHexParseHexTest:testParseHexOverflow() (gas: 11920) +LibParseLiteralHexParseHexTest:testParseHexUpperCase() (gas: 4015) +LibParseLiteralHexParseHexTest:testParseHexZeroLength(uint8) (runs: 2048, μ: 6948, ~: 6831) +LibParseLiteralHexParseHexTest:testParseLiteralHexRoundTrip(bytes32) (runs: 2048, μ: 29497, ~: 34320) +LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimal00() (gas: 54994) +LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimal01() (gas: 62223) +LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimal02() (gas: 68870) +LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalENotation() (gas: 89209) +LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalInt128Max() (gas: 65433) +LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalInt128MaxLeadingZeros() (gas: 66316) +LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalParensBoth() (gas: 50794) +LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalParensLeft() (gas: 50814) +LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalParensRight() (gas: 50704) +LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalUint256OverflowLeadingDigitBasic() (gas: 70075) +LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalUint256OverflowLeadingDigitLeadingZeros() (gas: 70248) +LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalUint256OverflowLeadingZeros() (gas: 70424) +LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalUint256OverflowSimple() (gas: 70240) +LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimalYang() (gas: 51641) +LibParseLiteralIntegerHexTest:testParseIntegerLiteralHex00() (gas: 54017) +LibParseLiteralIntegerHexTest:testParseIntegerLiteralHex01() (gas: 59706) +LibParseLiteralIntegerHexTest:testParseIntegerLiteralHex02() (gas: 65079) +LibParseLiteralIntegerHexTest:testParseIntegerLiteralHexUint256Max() (gas: 70717) +LibParseLiteralRepeatTest:testParseRepeatInvalidDispatch() (gas: 4153) +LibParseLiteralRepeatTest:testParseRepeatInvalidDispatchFuzz(uint256) (runs: 2048, μ: 4556, ~: 4556) +LibParseLiteralRepeatTest:testParseRepeatOutputValueFuzz(uint256,uint256) (runs: 2048, μ: 27195, ~: 26190) +LibParseLiteralRepeatTest:testParseRepeatTooLong(uint256) (runs: 2048, μ: 5125, ~: 5210) +LibParseLiteralSelectByIndexTest:testSelectIndex0Hex() (gas: 4871) +LibParseLiteralSelectByIndexTest:testSelectIndex1Decimal() (gas: 7487) +LibParseLiteralSelectByIndexTest:testSelectIndex2String() (gas: 4855) +LibParseLiteralStringBoundTest:testBoundStringUnclosedAtEndBoundary() (gas: 7556) +LibParseLiteralStringBoundTest:testBoundStringUnclosedAtEndBoundaryFuzz(string) (runs: 2048, μ: 15079, ~: 14865) +LibParseLiteralStringBoundTest:testParseStringLiteralBounds(string) (runs: 2048, μ: 14017, ~: 13719) +LibParseLiteralStringBoundTest:testParseStringLiteralBoundsInvalidCharBefore(string,uint256) (runs: 2048, μ: 23703, ~: 23124) +LibParseLiteralStringBoundTest:testParseStringLiteralBoundsParserOutOfBounds(string,uint256) (runs: 2048, μ: 14983, ~: 14926) +LibParseLiteralStringBoundTest:testParseStringLiteralBoundsTooLong(string) (runs: 2048, μ: 28904, ~: 28474) +LibParseLiteralStringTest:testParseStringLiteralAny(bytes) (runs: 2048, μ: 12251, ~: 11760) +LibParseLiteralStringTest:testParseStringLiteralCorrupt(bytes,uint256) (runs: 2048, μ: 19924, ~: 19734) +LibParseLiteralStringTest:testParseStringLiteralEmpty() (gas: 2486) +LibParseLiteralStringTest:testParseStringLiteralEmpty() (gas: 50392) +LibParseLiteralStringTest:testParseStringLiteralInvalidCharAfter(string,string) (runs: 100, μ: 68937, ~: 68525) +LibParseLiteralStringTest:testParseStringLiteralInvalidCharWithin(string,uint256) (runs: 100, μ: 62763, ~: 62001) +LibParseLiteralStringTest:testParseStringLiteralLongASCII(string) (runs: 100, μ: 69512, ~: 69860) +LibParseLiteralStringTest:testParseStringLiteralShortASCII(string) (runs: 100, μ: 59997, ~: 59454) +LibParseLiteralStringTest:testParseStringLiteralSimple() (gas: 50501) +LibParseLiteralStringTest:testParseStringLiteralTwo(string,string) (runs: 100, μ: 72793, ~: 72865) +LibParseLiteralStringTest:testParseStringMemoryRestoration(bytes) (runs: 2048, μ: 14146, ~: 13387) +LibParseLiteralSubParseableTest:testParseLiteralSubParseableBody() (gas: 56060) +LibParseLiteralSubParseableTest:testParseLiteralSubParseableEmptyBody() (gas: 15449) +LibParseLiteralSubParseableTest:testParseLiteralSubParseableHappyFuzz(string,string,string) (runs: 2048, μ: 82389, ~: 79406) +LibParseLiteralSubParseableTest:testParseLiteralSubParseableHappyKnown() (gas: 40088) +LibParseLiteralSubParseableTest:testParseLiteralSubParseableMissingDispatchEmpty() (gas: 9496) +LibParseLiteralSubParseableTest:testParseLiteralSubParseableMissingDispatchUnclosed() (gas: 9501) +LibParseLiteralSubParseableTest:testParseLiteralSubParseableMissingDispatchUnclosedWhitespace0() (gas: 9494) +LibParseLiteralSubParseableTest:testParseLiteralSubParseableMissingDispatchUnclosedWhitespace1() (gas: 9451) +LibParseLiteralSubParseableTest:testParseLiteralSubParseableUnclosedBracketPastEnd() (gas: 6903) +LibParseLiteralSubParseableTest:testParseLiteralSubParseableUnclosedDispatch0() (gas: 9916) +LibParseLiteralSubParseableTest:testParseLiteralSubParseableUnclosedDispatchBody() (gas: 10034) +LibParseLiteralSubParseableTest:testParseLiteralSubParseableUnclosedDispatchWhitespace0() (gas: 9944) +LibParseLiteralSubParseableTest:testParseLiteralSubParseableUnclosedDispatchWhitespace1() (gas: 9474) +LibParseLiteralSubParseableTest:testParseLiteralSubParseableUnclosedDoubleOpen() (gas: 9872) +LibParseLiteralSubParseableTest:testSubParseLiteralAllReject(string,string) (runs: 2048, μ: 16045, ~: 16046) +LibParseLiteralSubParseableTest:testSubParseLiteralFirstRejectsSecondAccepts(string,string) (runs: 2048, μ: 15486, ~: 15487) +LibParseMissingFinalSemiTest:testParseMissingFinalSemiRevertsEmptySource() (gas: 49335) +LibParseMissingFinalSemiTest:testParseMissingFinalSemiRevertsLHSItems() (gas: 47258) +LibParseMissingFinalSemiTest:testParseMissingFinalSemiRevertsLoneColon() (gas: 46217) +LibParseMissingFinalSemiTest:testParseMissingFinalSemiRevertsSingleWord() (gas: 49364) +LibParseMissingFinalSemiTest:testParseMissingFinalSemiRevertsTrailingComma() (gas: 47510) +LibParseNOutputTest:testParseBalanceStackOffsetsInputs() (gas: 60670) +LibParseNOutputTest:testParseNOutputExcessRHS0() (gas: 51204) +LibParseNOutputTest:testParseNOutputExcessRHS1() (gas: 53415) +LibParseNOutputTest:testParseNOutputExcessRHS2() (gas: 53909) +LibParseNOutputTest:testParseNOutputExcessRHS3() (gas: 55410) +LibParseNOutputTest:testParseNOutputNestedRHS() (gas: 57871) +LibParseNamedLHSTest:testParseNamedDuplicateDifferentSource() (gas: 54731) +LibParseNamedLHSTest:testParseNamedError32() (gas: 49031) +LibParseNamedLHSTest:testParseNamedError33() (gas: 49019) +LibParseNamedLHSTest:testParseNamedErrorDuplicateSameSource() (gas: 49686) +LibParseNamedLHSTest:testParseNamedLHSEmptySourceExamples() (gas: 147113) +LibParseNamedLHSTest:testParseNamedLHSStackIndex() (gas: 57903) +LibParseNamedLHSTest:testParseNamedLHSStackNameLastPosition() (gas: 37450) +LibParseNamedLHSTest:testParseNamedLHSStackNameOnly() (gas: 23386) +LibParseNamedLHSTest:testParseNamedLHSTwoInputs() (gas: 57861) +LibParseNamedRHSTest:testParseSingleLHSNestingAndSequential00() (gas: 79074) +LibParseNamedRHSTest:testParseSingleLHSNestingAndSequential01() (gas: 94914) +LibParseNamedRHSTest:testParseSingleLHSNestingAndSequential02() (gas: 90400) +LibParseNamedRHSTest:testParseSingleLHSNestingAndSequential03() (gas: 198920) +LibParseNamedRHSTest:testParseSingleWord() (gas: 53042) +LibParseNamedRHSTest:testParseTwoFullLinesSingleRHSEach() (gas: 75196) +LibParseNamedRHSTest:testParseTwoFullSourcesSingleRHSEach() (gas: 63242) +LibParseNamedRHSTest:testParseTwoNested() (gas: 56690) +LibParseNamedRHSTest:testParseTwoNestedAsThirdInput() (gas: 66955) +LibParseNamedRHSTest:testParseTwoSequential() (gas: 58439) +LibParseNamedRHSTest:testParseTwoSequentialWithInputs() (gas: 72057) +LibParseOperand8M1M1Test:testOperand8M1M1Elided() (gas: 94325) +LibParseOperand8M1M1Test:testOperand8M1M1Single() (gas: 275586) +LibParseOperand8M1M1Test:testOperand8M1M1SingleBit() (gas: 567527) +LibParseOperand8M1M1Test:testOperand8M1M1SingleBitsPart1() (gas: 1608379) +LibParseOperand8M1M1Test:testOperand8M1M1Unclosed() (gas: 310425) +LibParseOperand8M1M1Test:testOperand8M1M1Unopened() (gas: 48191) +LibParseOperandDisallowedTest:testOperandDisallowed() (gas: 48410) +LibParseOperandDisallowedTest:testOperandDisallowed1() (gas: 48992) +LibParseOperandDisallowedTest:testOperandDisallowed3() (gas: 50731) +LibParseOperandDisallowedTest:testOperandDisallowed4() (gas: 50753) +LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultElided() (gas: 47950) +LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultEmpty() (gas: 48340) +LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultFirst() (gas: 50870) +LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultMultipleWhitespace() (gas: 59456) +LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultPostfixWhitespace() (gas: 58706) +LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultPrefixWhitespace() (gas: 58660) +LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultSecond() (gas: 58321) +LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultSecondMax() (gas: 59440) +LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultSecondMaxZero() (gas: 58743) +LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultSecondOverflow() (gas: 55639) +LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultSecondOverflowFirst() (gas: 55640) +LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultSecondZero() (gas: 58070) +LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultSecondZeroMax() (gas: 58765) +LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultThird() (gas: 56703) +LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultUnclosed() (gas: 53501) +LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultUnopened() (gas: 47940) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1AllValues(uint256,uint256,uint256) (runs: 2048, μ: 4449, ~: 4600) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1AllValuesFirstValueTooLarge(int256,uint256,uint256) (runs: 2048, μ: 9486, ~: 9694) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1AllValuesThirdValueTooLarge(uint256,uint256,uint256) (runs: 2048, μ: 8645, ~: 8549) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstAndSecondValue(uint256,uint256) (runs: 2048, μ: 3463, ~: 3579) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstAndSecondValueSecondValueTooLarge(uint256,uint256) (runs: 2048, μ: 7449, ~: 7349) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstValueOnly(uint256) (runs: 2048, μ: 2477, ~: 2611) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstValueTooLarge(int256) (runs: 2048, μ: 7260, ~: 7437) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1ManyValues(bytes32[]) (runs: 2048, μ: 35466, ~: 35133) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1NoValues() (gas: 4509) +LibParseOperandHandleOperandDisallowedAlwaysOneTest:testHandleOperandDisallowedAlwaysOneAnyValues(bytes32[]) (runs: 2048, μ: 34907, ~: 34537) +LibParseOperandHandleOperandDisallowedAlwaysOneTest:testHandleOperandDisallowedAlwaysOneNoValues() (gas: 353) +LibParseOperandHandleOperandDisallowedTest:testHandleOperandDisallowedAnyValues(bytes32[]) (runs: 2048, μ: 34907, ~: 34537) LibParseOperandHandleOperandDisallowedTest:testHandleOperandDisallowedNoValues() (gas: 373) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultBothValuesWithinOneByte(uint256,uint256) (runs: 2048, μ: 3035, ~: 3281) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultFirstValueTooLarge(uint256,uint256) (runs: 2048, μ: 7326, ~: 7110) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultManyValues(bytes32[]) (runs: 2048, μ: 35345, ~: 34944) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultNoValues() (gas: 4570) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultOneValue(uint256) (runs: 2048, μ: 5562, ~: 5823) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultSecondValueTooLarge(uint256,uint256) (runs: 2048, μ: 7326, ~: 7121) +LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultBothValuesWithinOneByte(uint256,uint256) (runs: 2048, μ: 2993, ~: 3253) +LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultFirstValueTooLarge(uint256,uint256) (runs: 2048, μ: 7242, ~: 7042) +LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultManyValues(bytes32[]) (runs: 2048, μ: 35300, ~: 34899) +LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultNoValues() (gas: 4528) +LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultOneValue(uint256) (runs: 2048, μ: 5517, ~: 5779) +LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultSecondValueTooLarge(uint256,uint256) (runs: 2048, μ: 7248, ~: 7053) LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1ManyValues(bytes32[]) (runs: 2048, μ: 35239, ~: 34838) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1NoValues() (gas: 1054) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1OneValue(uint256) (runs: 2048, μ: 2126, ~: 2153) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1OneValueTooLarge(uint256) (runs: 2048, μ: 6091, ~: 5841) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1TwoValues(uint256,uint256) (runs: 2048, μ: 3119, ~: 3143) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1TwoValuesSecondValueTooLarge(uint256,uint256) (runs: 2048, μ: 7248, ~: 7040) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullManyValues(bytes32[]) (runs: 2048, μ: 35059, ~: 34618) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoDefaultManyValues(bytes32[]) (runs: 2048, μ: 35079, ~: 34638) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoDefaultNoValues() (gas: 4543) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoDefaultSingleValue(uint256) (runs: 2048, μ: 1574, ~: 1842) +LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1NoValues() (gas: 1030) +LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1OneValue(uint256) (runs: 2048, μ: 2099, ~: 2103) +LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1OneValueTooLarge(uint256) (runs: 2048, μ: 6017, ~: 5775) +LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1TwoValues(uint256,uint256) (runs: 2048, μ: 3093, ~: 3115) +LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1TwoValuesFirstValueTooLarge(uint256,uint256) (runs: 2048, μ: 7134, ~: 6941) +LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1TwoValuesSecondValueTooLarge(uint256,uint256) (runs: 2048, μ: 7167, ~: 6972) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullManyValues(bytes32[]) (runs: 2048, μ: 35014, ~: 34573) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoDefaultManyValues(bytes32[]) (runs: 2048, μ: 35034, ~: 34593) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoDefaultNoValues() (gas: 4501) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoDefaultSingleValue(uint256) (runs: 2048, μ: 1559, ~: 1828) LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoValues() (gas: 420) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValue(uint256) (runs: 2048, μ: 1623, ~: 1888) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValueDisallowed(uint256) (runs: 2048, μ: 6033, ~: 6240) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValueNoDefaultDisallowed(uint256) (runs: 2048, μ: 6073, ~: 6278) -LibParseOperandM1M1Test:testOperandM1M1Both() (gas: 56763) -LibParseOperandM1M1Test:testOperandM1M1BothZero() (gas: 55461) -LibParseOperandM1M1Test:testOperandM1M1Elided() (gas: 50763) -LibParseOperandM1M1Test:testOperandM1M1Empty() (gas: 51158) -LibParseOperandM1M1Test:testOperandM1M1First() (gas: 53733) -LibParseOperandM1M1Test:testOperandM1M1FirstOverflow() (gas: 50291) -LibParseOperandM1M1Test:testOperandM1M1Second() (gas: 56614) -LibParseOperandM1M1Test:testOperandM1M1SecondOverflow() (gas: 53173) -LibParseOperandM1M1Test:testOperandM1M1SecondZero() (gas: 56423) -LibParseOperandM1M1Test:testOperandM1M1Unclosed() (gas: 248950) -LibParseOperandM1M1Test:testOperandM1M1Unopened() (gas: 48743) -LibParseOperandParseOperandTest:testParseOperandEmptyOperand(string) (runs: 100, μ: 41667, ~: 41667) -LibParseOperandParseOperandTest:testParseOperandFourDecimalLiterals(bool[4],int256[4],string[5],string) (runs: 100, μ: 354741, ~: 353149) -LibParseOperandParseOperandTest:testParseOperandNoOpeningCharacter(string) (runs: 100, μ: 41549, ~: 41546) -LibParseOperandParseOperandTest:testParseOperandSingleDecimalLiteral(bool,int256,string,string,string) (runs: 100, μ: 151459, ~: 154545) -LibParseOperandParseOperandTest:testParseOperandThreeDecimalLiterals(bool,bool,bool,int256,int256,int256,string,string,string,string,string) (runs: 100, μ: 278167, ~: 274717) -LibParseOperandParseOperandTest:testParseOperandTooManyValues() (gas: 54093) -LibParseOperandParseOperandTest:testParseOperandTwoDecimalLiterals(bool,bool,int256,int256,string,string,string,string) (runs: 100, μ: 218680, ~: 219344) -LibParseOperandParseOperandTest:testParseOperandUnclosed() (gas: 53658) -LibParseOperandParseOperandTest:testParseOperandUnexpectedChars() (gas: 50851) -LibParseOperandSingleFullTest:testOperandSingleFullElided() (gas: 50130) -LibParseOperandSingleFullTest:testOperandSingleFullEmpty() (gas: 50458) -LibParseOperandSingleFullTest:testOperandSingleFullHexOne() (gas: 52630) -LibParseOperandSingleFullTest:testOperandSingleFullHexUint16Max() (gas: 53230) -LibParseOperandSingleFullTest:testOperandSingleFullHexUint16MaxOverflow() (gas: 50172) -LibParseOperandSingleFullTest:testOperandSingleFullHexZero() (gas: 52497) -LibParseOperandSingleFullTest:testOperandSingleFullLeadingAndTrailingWhitespace() (gas: 53299) -LibParseOperandSingleFullTest:testOperandSingleFullLeadingWhitespace() (gas: 53714) -LibParseOperandSingleFullTest:testOperandSingleFullMultiple() (gas: 50853) -LibParseOperandSingleFullTest:testOperandSingleFullOne() (gas: 53369) -LibParseOperandSingleFullTest:testOperandSingleFullTrailingWhitespace() (gas: 53758) -LibParseOperandSingleFullTest:testOperandSingleFullUint16Max() (gas: 54475) -LibParseOperandSingleFullTest:testOperandSingleFullUint16MaxOverflow() (gas: 51046) -LibParseOperandSingleFullTest:testOperandSingleFullUnclosed() (gas: 49403) -LibParseOperandSingleFullTest:testOperandSingleFullUnopened() (gas: 47744) -LibParseOperandSingleFullTest:testOperandSingleFullZero() (gas: 53244) -LibParseParseWordTest:testLibParseParseWordEnd(uint256) (runs: 2048, μ: 3018, ~: 3068) -LibParseParseWordTest:testLibParseParseWordExamples() (gas: 19790) -LibParseParseWordTest:testLibParseParseWordReferenceImplementation(bytes,uint256) (runs: 2048, μ: 5453, ~: 5243) -LibParseParseWordTest:testLibParseParseWordTooLong(bytes) (runs: 2048, μ: 9130, ~: 9126) -LibParsePragmaKeywordTest:testPragmaKeywordNoWhitespace(uint256,string) (runs: 100, μ: 8377, ~: 8376) -LibParsePragmaKeywordTest:testPragmaKeywordNoop((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),string) (runs: 100, μ: 16432, ~: 16310) -LibParsePragmaKeywordTest:testPragmaKeywordParseSubParserBasic(string,address,uint256,string) (runs: 100, μ: 169398, ~: 160204) -LibParsePragmaKeywordTest:testPragmaKeywordParseSubParserCoupleOfAddresses(string,string,address,address,uint256,string) (runs: 100, μ: 377317, ~: 383492) -LibParsePragmaKeywordTest:testPragmaKeywordParseSubParserSpecificStrings() (gas: 234616) -LibParsePragmaKeywordTest:testPragmaKeywordWhitespaceNoHex(uint256,string) (runs: 100, μ: 16175, ~: 13765) -LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored00() (gas: 8176) -LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored01() (gas: 8236) -LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored02() (gas: 8320) -LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored03() (gas: 8401) -LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored04() (gas: 8504) -LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored05() (gas: 8543) -LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored06() (gas: 8669) -LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored07() (gas: 8708) -LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored08() (gas: 8787) -LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored09() (gas: 8893) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed00() (gas: 8879) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed01() (gas: 8980) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed02() (gas: 9018) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed03() (gas: 9120) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed04() (gas: 9202) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed05() (gas: 9285) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed06() (gas: 9363) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed07() (gas: 9467) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed08() (gas: 9548) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed09() (gas: 9628) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed10() (gas: 9687) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed11() (gas: 9747) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed12() (gas: 9871) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed13() (gas: 9932) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed14() (gas: 10012) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed15() (gas: 10070) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed16() (gas: 10196) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed17() (gas: 10255) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed18() (gas: 10357) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed19() (gas: 10396) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed20() (gas: 10476) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed21() (gas: 10579) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed22() (gas: 10637) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed23() (gas: 10721) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed24() (gas: 10799) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed25() (gas: 10925) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed26() (gas: 10984) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed27() (gas: 11044) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed28() (gas: 11155) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed29() (gas: 11203) -LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed30() (gas: 11287) -LibParseSingleRHSNamedGasTest:testParseGasRHS00() (gas: 116490) -LibParseSingleRHSNamedGasTest:testParseGasRHS01() (gas: 116592) -LibParseSingleRHSNamedGasTest:testParseGasRHS02() (gas: 116651) -LibParseSingleRHSNamedGasTest:testParseGasRHS03() (gas: 116731) -LibParseSingleRHSNamedGasTest:testParseGasRHS04() (gas: 116814) -LibParseSingleRHSNamedGasTest:testParseGasRHS05() (gas: 116894) -LibParseSingleRHSNamedGasTest:testParseGasRHS06() (gas: 116954) -LibParseSingleRHSNamedGasTest:testParseGasRHS07() (gas: 117035) -LibParseSingleRHSNamedGasTest:testParseGasRHS08() (gas: 117136) -LibParseSingleRHSNamedGasTest:testParseGasRHS09() (gas: 117197) -LibParseSingleRHSNamedGasTest:testParseGasRHS10() (gas: 117320) -LibParseSingleRHSNamedGasTest:testParseGasRHS11() (gas: 117356) -LibParseSingleRHSNamedGasTest:testParseGasRHS12() (gas: 117470) -LibParseSingleRHSNamedGasTest:testParseGasRHS13() (gas: 117542) -LibParseSingleRHSNamedGasTest:testParseGasRHS14() (gas: 117600) -LibParseSingleRHSNamedGasTest:testParseGasRHS15() (gas: 117704) -LibParseSingleRHSNamedGasTest:testParseGasRHS16() (gas: 117764) -LibParseSingleRHSNamedGasTest:testParseGasRHS17() (gas: 117844) -LibParseSingleRHSNamedGasTest:testParseGasRHS18() (gas: 117969) -LibParseSingleRHSNamedGasTest:testParseGasRHS19() (gas: 118050) -LibParseSingleRHSNamedGasTest:testParseGasRHS20() (gas: 118109) -LibParseSingleRHSNamedGasTest:testParseGasRHS21() (gas: 118211) -LibParseSingleRHSNamedGasTest:testParseGasRHS22() (gas: 118249) -LibParseSingleRHSNamedGasTest:testParseGasRHS23() (gas: 118353) -LibParseSingleRHSNamedGasTest:testParseGasRHS24() (gas: 118432) -LibParseSingleRHSNamedGasTest:testParseGasRHS25() (gas: 118513) -LibParseSingleRHSNamedGasTest:testParseGasRHS26() (gas: 118575) -LibParseSingleRHSNamedGasTest:testParseGasRHS27() (gas: 118666) -LibParseSingleRHSNamedGasTest:testParseGasRHS28() (gas: 118770) -LibParseSingleRHSNamedGasTest:testParseGasRHS29() (gas: 118861) -LibParseSingleRHSNamedGasTest:testParseGasRHS30() (gas: 118923) -LibParseSourceInputsTest:testParseSourceInputsEmptyLinePrefix() (gas: 48403) -LibParseSourceInputsTest:testParseSourceInputsMultipleLines() (gas: 51122) -LibParseSourceInputsTest:testParseSourceInputsSingle() (gas: 48380) -LibParseStackNameTest:testPushAndRetrieveStackNameDouble((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32,bytes32) (runs: 2048, μ: 17667, ~: 17522) -LibParseStackNameTest:testPushAndRetrieveStackNameDoubleIdentical((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32) (runs: 2048, μ: 13896, ~: 13828) -LibParseStackNameTest:testPushAndRetrieveStackNameMany((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),uint256) (runs: 2048, μ: 253374, ~: 185469) -LibParseStackNameTest:testPushAndRetrieveStackNameSingle((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32) (runs: 2048, μ: 13861, ~: 13793) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValue(uint256) (runs: 2048, μ: 1607, ~: 1874) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValueDisallowed(uint256) (runs: 2048, μ: 5975, ~: 6184) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValueNoDefaultDisallowed(uint256) (runs: 2048, μ: 6016, ~: 6222) +LibParseOperandHandleOperandTest:testHandleOperandDispatchDifferentHandlers(uint256) (runs: 2048, μ: 19836, ~: 20111) +LibParseOperandHandleOperandTest:testHandleOperandDispatchDisallowedMultipleIndices() (gas: 31831) +LibParseOperandHandleOperandTest:testHandleOperandDispatchEmptyValues() (gas: 10792) +LibParseOperandHandleOperandTest:testHandleOperandDispatchSameHandler(uint256) (runs: 2048, μ: 12405, ~: 12685) +LibParseOperandM1M1Test:testOperandM1M1Both() (gas: 58433) +LibParseOperandM1M1Test:testOperandM1M1BothZero() (gas: 56856) +LibParseOperandM1M1Test:testOperandM1M1Elided() (gas: 52309) +LibParseOperandM1M1Test:testOperandM1M1Empty() (gas: 52701) +LibParseOperandM1M1Test:testOperandM1M1First() (gas: 55341) +LibParseOperandM1M1Test:testOperandM1M1FirstOverflow() (gas: 51529) +LibParseOperandM1M1Test:testOperandM1M1Second() (gas: 58296) +LibParseOperandM1M1Test:testOperandM1M1SecondOverflow() (gas: 54485) +LibParseOperandM1M1Test:testOperandM1M1SecondZero() (gas: 58117) +LibParseOperandM1M1Test:testOperandM1M1Unclosed() (gas: 255185) +LibParseOperandM1M1Test:testOperandM1M1Unopened() (gas: 50026) +LibParseOperandParseOperandTest:testParseOperandEmptyOperand(string) (runs: 100, μ: 42744, ~: 42744) +LibParseOperandParseOperandTest:testParseOperandFourDecimalLiterals(bool[4],int256[4],string[5],string) (runs: 100, μ: 352616, ~: 356134) +LibParseOperandParseOperandTest:testParseOperandNoOpeningCharacter(string) (runs: 100, μ: 42677, ~: 42674) +LibParseOperandParseOperandTest:testParseOperandSingleDecimalLiteral(bool,int256,string,string,string) (runs: 100, μ: 153219, ~: 156972) +LibParseOperandParseOperandTest:testParseOperandThreeDecimalLiterals(bool,bool,bool,int256,int256,int256,string,string,string,string,string) (runs: 100, μ: 277567, ~: 272119) +LibParseOperandParseOperandTest:testParseOperandTooManyValues() (gas: 55415) +LibParseOperandParseOperandTest:testParseOperandTwoDecimalLiterals(bool,bool,int256,int256,string,string,string,string) (runs: 100, μ: 222845, ~: 217660) +LibParseOperandParseOperandTest:testParseOperandUnclosed() (gas: 54908) +LibParseOperandParseOperandTest:testParseOperandUnexpectedChars() (gas: 52114) +LibParseOperandParseOperandTest:testParseOperandYangStateLiteralCollision() (gas: 49237) +LibParseOperandSingleFullTest:testOperandSingleFullElided() (gas: 51700) +LibParseOperandSingleFullTest:testOperandSingleFullEmpty() (gas: 52025) +LibParseOperandSingleFullTest:testOperandSingleFullHexOne() (gas: 54272) +LibParseOperandSingleFullTest:testOperandSingleFullHexUint16Max() (gas: 54862) +LibParseOperandSingleFullTest:testOperandSingleFullHexUint16MaxOverflow() (gas: 51424) +LibParseOperandSingleFullTest:testOperandSingleFullHexZero() (gas: 54139) +LibParseOperandSingleFullTest:testOperandSingleFullLeadingAndTrailingWhitespace() (gas: 54935) +LibParseOperandSingleFullTest:testOperandSingleFullLeadingWhitespace() (gas: 55331) +LibParseOperandSingleFullTest:testOperandSingleFullMultiple() (gas: 52221) +LibParseOperandSingleFullTest:testOperandSingleFullOne() (gas: 54989) +LibParseOperandSingleFullTest:testOperandSingleFullTrailingWhitespace() (gas: 55375) +LibParseOperandSingleFullTest:testOperandSingleFullUint16Max() (gas: 56087) +LibParseOperandSingleFullTest:testOperandSingleFullUint16MaxOverflow() (gas: 52288) +LibParseOperandSingleFullTest:testOperandSingleFullUnclosed() (gas: 50674) +LibParseOperandSingleFullTest:testOperandSingleFullUnopened() (gas: 49072) +LibParseOperandSingleFullTest:testOperandSingleFullZero() (gas: 54876) +LibParseParenOverflowTest:testParenMaxNesting() (gas: 197564) +LibParseParenOverflowTest:testParenOverflow() (gas: 77575) +LibParseParseWordTest:testLibParseParseWordEnd(uint256) (runs: 2048, μ: 3017, ~: 3064) +LibParseParseWordTest:testLibParseParseWordExamples() (gas: 19621) +LibParseParseWordTest:testLibParseParseWordReferenceImplementation(bytes,uint256) (runs: 2048, μ: 5443, ~: 5228) +LibParseParseWordTest:testLibParseParseWordTooLong(bytes) (runs: 2048, μ: 9094, ~: 9038) +LibParsePragmaKeywordTest:testParsePragmaOOBAfterInterstitial() (gas: 14746) +LibParsePragmaKeywordTest:testPragmaKeywordCommentBetweenAddresses() (gas: 48575) +LibParsePragmaKeywordTest:testPragmaKeywordEndAtKeyword() (gas: 7169) +LibParsePragmaKeywordTest:testPragmaKeywordNoWhitespace(uint256,string) (runs: 100, μ: 8313, ~: 8311) +LibParsePragmaKeywordTest:testPragmaKeywordNoop((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),string) (runs: 100, μ: 16468, ~: 16269) +LibParsePragmaKeywordTest:testPragmaKeywordParseSubParserBasic(string,address,uint256,string) (runs: 100, μ: 170942, ~: 161255) +LibParsePragmaKeywordTest:testPragmaKeywordParseSubParserCoupleOfAddresses(string,string,address,address,uint256,string) (runs: 100, μ: 369497, ~: 371860) +LibParsePragmaKeywordTest:testPragmaKeywordParseSubParserSpecificStrings() (gas: 229983) +LibParsePragmaKeywordTest:testPragmaKeywordTwoSequentialPragmas() (gas: 47435) +LibParsePragmaKeywordTest:testPragmaKeywordWhitespaceNoHex(uint256,string) (runs: 100, μ: 14921, ~: 13291) +LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored00() (gas: 8422) +LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored01() (gas: 8482) +LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored02() (gas: 8566) +LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored03() (gas: 8647) +LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored04() (gas: 8750) +LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored05() (gas: 8789) +LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored06() (gas: 8915) +LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored07() (gas: 8954) +LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored08() (gas: 9033) +LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored09() (gas: 9139) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed00() (gas: 9128) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed01() (gas: 9229) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed02() (gas: 9267) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed03() (gas: 9369) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed04() (gas: 9451) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed05() (gas: 9534) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed06() (gas: 9612) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed07() (gas: 9716) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed08() (gas: 9797) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed09() (gas: 9877) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed10() (gas: 9936) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed11() (gas: 9996) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed12() (gas: 10120) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed13() (gas: 10181) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed14() (gas: 10261) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed15() (gas: 10319) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed16() (gas: 10445) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed17() (gas: 10504) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed18() (gas: 10606) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed19() (gas: 10645) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed20() (gas: 10725) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed21() (gas: 10828) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed22() (gas: 10886) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed23() (gas: 10970) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed24() (gas: 11048) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed25() (gas: 11174) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed26() (gas: 11233) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed27() (gas: 11293) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed28() (gas: 11404) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed29() (gas: 11452) +LibParseSingleLHSNamedGasTest:testParseGasSingleLHSNamed30() (gas: 11536) +LibParseSingleRHSNamedGasTest:testParseGasRHS00() (gas: 120813) +LibParseSingleRHSNamedGasTest:testParseGasRHS01() (gas: 120915) +LibParseSingleRHSNamedGasTest:testParseGasRHS02() (gas: 120974) +LibParseSingleRHSNamedGasTest:testParseGasRHS03() (gas: 121054) +LibParseSingleRHSNamedGasTest:testParseGasRHS04() (gas: 121137) +LibParseSingleRHSNamedGasTest:testParseGasRHS05() (gas: 121217) +LibParseSingleRHSNamedGasTest:testParseGasRHS06() (gas: 121277) +LibParseSingleRHSNamedGasTest:testParseGasRHS07() (gas: 121358) +LibParseSingleRHSNamedGasTest:testParseGasRHS08() (gas: 121459) +LibParseSingleRHSNamedGasTest:testParseGasRHS09() (gas: 121520) +LibParseSingleRHSNamedGasTest:testParseGasRHS10() (gas: 121643) +LibParseSingleRHSNamedGasTest:testParseGasRHS11() (gas: 121679) +LibParseSingleRHSNamedGasTest:testParseGasRHS12() (gas: 121793) +LibParseSingleRHSNamedGasTest:testParseGasRHS13() (gas: 121865) +LibParseSingleRHSNamedGasTest:testParseGasRHS14() (gas: 121923) +LibParseSingleRHSNamedGasTest:testParseGasRHS15() (gas: 122027) +LibParseSingleRHSNamedGasTest:testParseGasRHS16() (gas: 122087) +LibParseSingleRHSNamedGasTest:testParseGasRHS17() (gas: 122167) +LibParseSingleRHSNamedGasTest:testParseGasRHS18() (gas: 122292) +LibParseSingleRHSNamedGasTest:testParseGasRHS19() (gas: 122373) +LibParseSingleRHSNamedGasTest:testParseGasRHS20() (gas: 122432) +LibParseSingleRHSNamedGasTest:testParseGasRHS21() (gas: 122534) +LibParseSingleRHSNamedGasTest:testParseGasRHS22() (gas: 122572) +LibParseSingleRHSNamedGasTest:testParseGasRHS23() (gas: 122676) +LibParseSingleRHSNamedGasTest:testParseGasRHS24() (gas: 122755) +LibParseSingleRHSNamedGasTest:testParseGasRHS25() (gas: 122836) +LibParseSingleRHSNamedGasTest:testParseGasRHS26() (gas: 122898) +LibParseSingleRHSNamedGasTest:testParseGasRHS27() (gas: 122989) +LibParseSingleRHSNamedGasTest:testParseGasRHS28() (gas: 123093) +LibParseSingleRHSNamedGasTest:testParseGasRHS29() (gas: 123184) +LibParseSingleRHSNamedGasTest:testParseGasRHS30() (gas: 123246) +LibParseSourceInputsTest:testParseSourceInputsEmptyLinePrefix() (gas: 49899) +LibParseSourceInputsTest:testParseSourceInputsMultipleLines() (gas: 52817) +LibParseSourceInputsTest:testParseSourceInputsSingle() (gas: 49876) +LibParseStackNameTest:testPushAndRetrieveStackNameDouble((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32,bytes32) (runs: 2048, μ: 17778, ~: 17625) +LibParseStackNameTest:testPushAndRetrieveStackNameDoubleIdentical((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32) (runs: 2048, μ: 13969, ~: 13921) +LibParseStackNameTest:testPushAndRetrieveStackNameMany((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),uint256) (runs: 2048, μ: 255174, ~: 189532) +LibParseStackNameTest:testPushAndRetrieveStackNameSingle((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32) (runs: 2048, μ: 13911, ~: 13863) +LibParseStackNameTest:testStackNameBloomFalsePositive() (gas: 7661) +LibParseStackNameTest:testStackNameNegativeLookup((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32,bytes32) (runs: 2048, μ: 16546, ~: 16420) +LibParseStackTrackerTest:testPopNoUnderflow(uint8,uint8) (runs: 2048, μ: 3585, ~: 3585) +LibParseStackTrackerTest:testPopPreservesInputsAndMax(uint8,uint8,uint8,uint8) (runs: 2048, μ: 3823, ~: 3823) +LibParseStackTrackerTest:testPopUnderflow(uint8,uint8) (runs: 2048, μ: 4627, ~: 4627) +LibParseStackTrackerTest:testPopZero(uint8,uint8,uint8) (runs: 2048, μ: 756, ~: 756) +LibParseStackTrackerTest:testPushInputsNoOverflow(uint8,uint8) (runs: 2048, μ: 4013, ~: 4014) +LibParseStackTrackerTest:testPushInputsOverflow(uint8,uint8) (runs: 2048, μ: 5361, ~: 5361) +LibParseStackTrackerTest:testPushInputsPushOverflow(uint8,uint8) (runs: 2048, μ: 4896, ~: 4896) +LibParseStackTrackerTest:testPushNoOverflow(uint8,uint8) (runs: 2048, μ: 3781, ~: 3782) +LibParseStackTrackerTest:testPushOverflow(uint8,uint8) (runs: 2048, μ: 4831, ~: 4831) +LibParseStackTrackerTest:testPushPreservesHighWatermark(uint8) (runs: 2048, μ: 3523, ~: 3523) +LibParseStackTrackerTest:testPushPreservesInputs(uint8,uint8,uint8) (runs: 2048, μ: 3791, ~: 3792) +LibParseStackTrackerTest:testPushUpdatesHighWatermark(uint8) (runs: 2048, μ: 3519, ~: 3519) +LibParseStackTrackerTest:testPushZero(uint8,uint8,uint8) (runs: 2048, μ: 981, ~: 979) +LibParseStateBuildBytecodeTest:testBuildBytecodeFuzz(uint256,uint256) (runs: 2048, μ: 96297, ~: 98203) +LibParseStateBuildBytecodeTest:testBuildBytecodeSingleSource() (gas: 4786) +LibParseStateBuildBytecodeTest:testBuildBytecodeTwoSources() (gas: 9414) +LibParseStateBuildConstantsTest:testBuildConstantsEmpty() (gas: 1826) +LibParseStateBuildConstantsTest:testBuildConstantsFuzz(bytes32[]) (runs: 2048, μ: 49335, ~: 49964) +LibParseStateBuildConstantsTest:testBuildConstantsMultiple() (gas: 3590) +LibParseStateBuildConstantsTest:testBuildConstantsSingle(bytes32) (runs: 2048, μ: 2525, ~: 2525) +LibParseStateCheckParseMemoryOverflowTest:testCheckParseMemoryOverflowAbove(uint256) (runs: 2048, μ: 298022340, ~: 305379338) +LibParseStateCheckParseMemoryOverflowTest:testCheckParseMemoryOverflowBelow(uint256) (runs: 2048, μ: 960, ~: 1218) +LibParseStateCheckParseMemoryOverflowTest:testCheckParseMemoryOverflowExact() (gas: 18370) LibParseStateConstantValueBloomTest:testConstantValueBloom(bytes32) (runs: 2048, μ: 470, ~: 470) -LibParseStateConstantValueBloomTest:testConstantValueBloomAllBits() (gas: 42523) -LibParseStateConstantValueBloomTest:testConstantValueBloomSingleBit(bytes32) (runs: 2048, μ: 600, ~: 600) -LibParseStateExportSubParsersTest:testExportSubParsers((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address[]) (runs: 2048, μ: 113182, ~: 113725) -LibParseStateNewActiveSourcePointerTest:testAlignedOldPointer(uint256,uint256) (runs: 2048, μ: 3006, ~: 3242) -LibParseStateNewActiveSourcePointerTest:testPostUnalignedNewPointer(uint256) (runs: 2048, μ: 1310, ~: 1310) -LibParseStateNewActiveSourcePointerTest:testPreUnalignedNewPointer() (gas: 1628) -LibParseStateNewActiveSourcePointerTest:testZeroOldPointer(bytes) (runs: 2048, μ: 1012, ~: 1009) -LibParseStatePushConstantValueTest:testPushConstantValueEmpty(bytes,bytes,bytes,bytes) (runs: 2048, μ: 3280, ~: 3277) -LibParseStatePushConstantValueTest:testPushConstantValueMany(bytes32[]) (runs: 2048, μ: 141833, ~: 140210) -LibParseStatePushConstantValueTest:testPushConstantValueSingle(bytes32) (runs: 2048, μ: 2452, ~: 2452) -LibParseStatePushSubParserTest:testPushSubParserList((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address[]) (runs: 2048, μ: 101231, ~: 101954) -LibParseStatePushSubParserTest:testPushSubParserMultiple((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address,address,address) (runs: 2048, μ: 13240, ~: 13100) -LibParseStatePushSubParserTest:testPushSubParserOverflow((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),uint256) (runs: 2048, μ: 40423, ~: 39613) -LibParseStatePushSubParserTest:testPushSubParserZero((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address) (runs: 2048, μ: 12536, ~: 12515) -LibParseUnclosedLeftParenTest:testParseUnclosedLeftParen() (gas: 48160) -LibParseUnclosedLeftParenTest:testParseUnclosedLeftParenNested() (gas: 68287) -LibParseUnclosedLeftParenTest:testParseUnclosedLeftParenNested2() (gas: 69815) -LibParseUnclosedLeftParenTest:testParseUnclosedLeftParenNested3() (gas: 79730) -LibParseUnclosedLeftParenTest:testParseUnclosedLeftParenNested4() (gas: 79596) -LibParseUnexpectedLHSTest:testParseUnexpectedLHSBadIgnoredTail(uint8) (runs: 2048, μ: 46167, ~: 46168) -LibParseUnexpectedLHSTest:testParseUnexpectedLHSBadNamedTail(uint8,bytes) (runs: 2048, μ: 49799, ~: 49861) -LibParseUnexpectedLHSTest:testParseUnexpectedLHSEOF() (gas: 131034) -LibParseUnexpectedLHSTest:testParseUnexpectedLHSEOL() (gas: 131057) -LibParseUnexpectedLHSTest:testParseUnexpectedLHSSingleChar(uint8) (runs: 2048, μ: 45762, ~: 45762) -LibParseUnexpectedLHSTest:testParseUnexpectedLHSUnderscoreTail() (gas: 133383) -LibParseUnexpectedRHSTest:testParseUnexpectedRHS(uint8) (runs: 2048, μ: 45997, ~: 45997) -LibParseUnexpectedRHSTest:testParseUnexpectedRHSLeftParen() (gas: 45505) -LibParseUnexpectedRightParenTest:testParseUnexpectedRightParen() (gas: 49530) -LibParseUnexpectedRightParenTest:testParseUnexpectedRightParenNested() (gas: 55761) -LibSubParseSubParserExternTest:testLibSubParseSubParserExtern(address,uint8,uint8,uint8,uint16,uint8) (runs: 2048, μ: 3451, ~: 3402) -LibSubParseSubParserExternTest:testLibSubParseSubParserExternConstantsHeightOverflow(address,uint256,uint8,uint8,uint16,uint8) (runs: 2048, μ: 7989, ~: 7757) -RainterpreterExpressionDeployerDeployCheckTest:testRainterpreterExpressionDeployerDeployNoEIP1820() (gas: 1295064) -RainterpreterExpressionDeployerDescribedByMetaV1Test:testRainterpreterExpressionDeployerDescribedByMetaV1Happy() (gas: 1301145) -RainterpreterExpressionDeployerIERC165Test:testRainterpreterExpressionDeployerIERC165(bytes4) (runs: 2048, μ: 1302263, ~: 1302263) -RainterpreterExpressionDeployerMetaTest:testRainterpreterExpressionDeployerExpectedConstructionMetaHash() (gas: 3322) -RainterpreterIERC165Test:testRainterpreterIERC165(bytes4) (runs: 2048, μ: 3821939, ~: 3821939) -RainterpreterParserIERC165Test:testRainterpreterParserIERC165(bytes4) (runs: 2048, μ: 3184945, ~: 3184945) -RainterpreterParserParserPragma:testParsePragmaNoPragma() (gas: 15911366) -RainterpreterParserParserPragma:testParsePragmaSinglePragma() (gas: 9598166) -RainterpreterParserParserPragma:testParsePragmaWithInterstitial() (gas: 9601453) -RainterpreterParserPointersTest:testLiteralParserFunctionPointers() (gas: 3184246) -RainterpreterParserPointersTest:testOperandHandlerFunctionPointers() (gas: 3192080) -RainterpreterParserPointersTest:testParserParseMeta() (gas: 5114461) -RainterpreterPointersTest:testOpcodeFunctionPointers() (gas: 3829185) -RainterpreterReferenceExternContextRainlenTest:testRainterpreterReferenceExternContextRainlenHappy() (gas: 1997788) -RainterpreterReferenceExternContextSenderTest:testRainterpreterReferenceExternContextContractHappy() (gas: 1997340) -RainterpreterReferenceExternContextSenderTest:testRainterpreterReferenceExternContextSenderHappy() (gas: 1996165) -RainterpreterReferenceExternDescribedByMetaV1:testRainterpreterReferenceExternDescribedByMetaV1Happy() (gas: 1919474) -RainterpreterReferenceExternIERC165Test:testRainterpreterReferenceExternIERC165(bytes4) (runs: 2048, μ: 1931193, ~: 1931193) -RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncHappySugared() (gas: 2025145) -RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncHappyUnsugared() (gas: 2019530) -RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncIntegrity(bytes32,uint256,uint256) (runs: 100, μ: 418, ~: 418) -RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncRun(bytes32,bytes32[]) (runs: 100, μ: 895118, ~: 820591) -RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncSubParseKnownWord(uint16,bytes1) (runs: 100, μ: 1925163, ~: 1924831) -RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncSubParseUnknownWord(uint16,bytes1,bytes) (runs: 100, μ: 1926407, ~: 1926681) -RainterpreterReferenceExternPointersTest:testIntegrityFunctionPointers() (gas: 1920349) -RainterpreterReferenceExternPointersTest:testOpcodeFunctionPointers() (gas: 1920392) -RainterpreterReferenceExternPointersTest:testSubParserFunctionPointers() (gas: 1920815) -RainterpreterReferenceExternPointersTest:testSubParserLiteralParsers() (gas: 1920369) -RainterpreterReferenceExternPointersTest:testSubParserOperandParsers() (gas: 1920842) -RainterpreterReferenceExternPointersTest:testSubParserParseMeta() (gas: 18291) -RainterpreterReferenceExternRepeatTest:testRainterpreterReferenceExternRepeatHappy() (gas: 2047725) -RainterpreterReferenceExternStackOperandTest:testRainterpreterReferenceExternStackOperandSingle(uint256) (runs: 2048, μ: 2001491, ~: 2001756) -RainterpreterReferenceExternUnknownWordTest:testRainterpreterReferenceExternUnknownWord() (gas: 1967549) -RainterpreterStateOverlayTest:testStateOverlayGet() (gas: 46725) -RainterpreterStateOverlayTest:testStateOverlaySet() (gas: 76807) -RainterpreterStoreIERC165Test:testRainterpreterStoreIERC165(bytes4) (runs: 2048, μ: 213904, ~: 213904) -RainterpreterStoreTest:testRainterpreterStoreSetGetDupes((uint256,bytes32[11])[]) (runs: 100, μ: 1573114, ~: 1642714) -RainterpreterStoreTest:testRainterpreterStoreSetGetNoDupesMany((uint256,bytes32[])[]) (runs: 100, μ: 3409172, ~: 3265613) -RainterpreterStoreTest:testRainterpreterStoreSetGetNoDupesSingle(uint256,bytes32[]) (runs: 100, μ: 1890621, ~: 1846693) -RainterpreterStoreTest:testRainterpreterStoreSetOddLength(uint256,bytes32[]) (runs: 100, μ: 234435, ~: 235382) -RainterpreterTest:testRainterpreterOddFunctionPointersLength() (gas: 543) \ No newline at end of file +LibParseStateConstantValueBloomTest:testConstantValueBloomAllBits() (gas: 42521) +LibParseStateConstantValueBloomTest:testConstantValueBloomSingleBit(bytes32) (runs: 2048, μ: 598, ~: 598) +LibParseStateDanglingSourceTest:testDanglingSource() (gas: 6057) +LibParseStateEndLineTest:testNotAcceptingInputs() (gas: 21320) +LibParseStateEndSourceTest:testEndSourceByteLengthFuzz(uint256) (runs: 2048, μ: 97987, ~: 93087) +LibParseStateEndSourceTest:testEndSourceMaxSources() (gas: 36340) +LibParseStateEndSourceTest:testEndSourceResetsState() (gas: 4126) +LibParseStateEndSourceTest:testEndSourceSingleOp() (gas: 3795) +LibParseStateEndSourceTest:testEndSourceTwoSources() (gas: 6503) +LibParseStateEndSourceTotalOpsOverflowTest:testTotalOps254NoOverflow() (gas: 1024432) +LibParseStateEndSourceTotalOpsOverflowTest:testTotalOpsOverflow256() (gas: 1002609) +LibParseStateEndSourceTotalOpsOverflowTest:testTotalOpsOverflow510() (gas: 1943746) +LibParseStateExportSubParsersTest:testExportSubParsers((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address[]) (runs: 2048, μ: 105329, ~: 105995) +LibParseStateHighwaterOverflowTest:testHighwaterJustBelowOverflow() (gas: 2279) +LibParseStateHighwaterOverflowTest:testHighwaterOverflow() (gas: 5319) +LibParseStateHighwaterTest:testParseStackOverflow() (gas: 365556) +LibParseStateNewActiveSourcePointerTest:testAlignedOldPointer(uint256,uint256) (runs: 2048, μ: 2972, ~: 3226) +LibParseStateNewActiveSourcePointerTest:testPostUnalignedNewPointer(uint256) (runs: 2048, μ: 1298, ~: 1298) +LibParseStateNewActiveSourcePointerTest:testPreUnalignedNewPointer() (gas: 1616) +LibParseStateNewActiveSourcePointerTest:testZeroOldPointer(bytes) (runs: 2048, μ: 1018, ~: 1000) +LibParseStateOffsetsTest:testLineTrackerOffset() (gas: 682) +LibParseStateOffsetsTest:testParenTracker0Offset() (gas: 660) +LibParseStateOffsetsTest:testTopLevel0DataOffset() (gas: 295) +LibParseStateOffsetsTest:testTopLevel0Offset() (gas: 704) +LibParseStateOpcodeIOOverflowTest:testOpcodeIOOverflowInputs() (gas: 90840) +LibParseStateOpcodeIOOverflowTest:testOpcodeIOOverflowOutputs() (gas: 40503) +LibParseStateOverflowTest:testLineRHSItems14NoOverflow() (gas: 118427) +LibParseStateOverflowTest:testLineRHSItemsOverflow() (gas: 109203) +LibParseStateOverflowTest:testSourceItemOps255NoOverflow() (gas: 1025469) +LibParseStateOverflowTest:testSourceItemOpsOverflow() (gas: 835826) +LibParseStateParenInputOverflowTest:testParenInputOverflow() (gas: 5899) +LibParseStatePushConstantValueTest:testPushConstantValueEmpty(bytes,bytes,bytes,bytes) (runs: 2048, μ: 3314, ~: 3253) +LibParseStatePushConstantValueTest:testPushConstantValueMany(bytes32[]) (runs: 2048, μ: 141572, ~: 139951) +LibParseStatePushConstantValueTest:testPushConstantValueSingle(bytes32) (runs: 2048, μ: 2446, ~: 2446) +LibParseStatePushLiteralTest:testPushLiteralDuplicate() (gas: 8167) +LibParseStatePushLiteralTest:testPushLiteralSingleDecimal() (gas: 7942) +LibParseStatePushLiteralTest:testPushLiteralSingleHex() (gas: 6212) +LibParseStatePushLiteralTest:testPushLiteralTwoDifferent() (gas: 8662) +LibParseStatePushLiteralTest:testPushLiteralUnsupported() (gas: 7590) +LibParseStatePushOpToSourceTest:testPushOpToSourceEncodesOp(uint8,uint16) (runs: 2048, μ: 2874, ~: 2874) +LibParseStatePushOpToSourceTest:testPushOpToSourceFSM() (gas: 2602) +LibParseStatePushOpToSourceTest:testPushOpToSourceItemOpsOverflow() (gas: 182485) +LibParseStatePushOpToSourceTest:testPushOpToSourceSlotOverflow() (gas: 6833) +LibParseStatePushOpToSourceTest:testPushOpToSourceTwoOps(uint8,uint16,uint8,uint16) (runs: 2048, μ: 3819, ~: 3819) +LibParseStatePushSubParserTest:testPushSubParserList((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address[]) (runs: 2048, μ: 93285, ~: 93893) +LibParseStatePushSubParserTest:testPushSubParserMultiple((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address,address,address) (runs: 2048, μ: 13149, ~: 13017) +LibParseStatePushSubParserTest:testPushSubParserOverflow((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),uint256) (runs: 2048, μ: 40514, ~: 39596) +LibParseStatePushSubParserTest:testPushSubParserZero((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address) (runs: 2048, μ: 12533, ~: 12527) +LibParseUnclosedLeftParenTest:testParseUnclosedLeftParen() (gas: 49499) +LibParseUnclosedLeftParenTest:testParseUnclosedLeftParenNested() (gas: 70432) +LibParseUnclosedLeftParenTest:testParseUnclosedLeftParenNested2() (gas: 72068) +LibParseUnclosedLeftParenTest:testParseUnclosedLeftParenNested3() (gas: 82424) +LibParseUnclosedLeftParenTest:testParseUnclosedLeftParenNested4() (gas: 82266) +LibParseUnexpectedLHSTest:testParseUnexpectedLHSBadIgnoredTail(uint8) (runs: 2048, μ: 47296, ~: 47297) +LibParseUnexpectedLHSTest:testParseUnexpectedLHSBadNamedTail(uint8,bytes) (runs: 2048, μ: 50858, ~: 50925) +LibParseUnexpectedLHSTest:testParseUnexpectedLHSEOF() (gas: 134322) +LibParseUnexpectedLHSTest:testParseUnexpectedLHSEOL() (gas: 134345) +LibParseUnexpectedLHSTest:testParseUnexpectedLHSSingleChar(uint8) (runs: 2048, μ: 46807, ~: 46807) +LibParseUnexpectedLHSTest:testParseUnexpectedLHSUnderscoreTail() (gas: 136929) +LibParseUnexpectedRHSTest:testParseUnexpectedRHS(uint8) (runs: 2048, μ: 47133, ~: 47133) +LibParseUnexpectedRHSTest:testParseUnexpectedRHSLeftParen() (gas: 46623) +LibParseUnexpectedRHSTest:testParseUnexpectedRHSYangWordWord() (gas: 57929) +LibParseUnexpectedRightParenTest:testParseUnexpectedRightParen() (gas: 50564) +LibParseUnexpectedRightParenTest:testParseUnexpectedRightParenNested() (gas: 57206) +LibSubParseBadSubParserResultTest:testBadSubParserResultEmpty() (gas: 310827) +LibSubParseBadSubParserResultTest:testBadSubParserResultTooLong() (gas: 331000) +LibSubParseBadSubParserResultTest:testBadSubParserResultTooShort() (gas: 331022) +LibSubParseBadSubParserResultTest:testBadSubParserResultWayTooLong() (gas: 331021) +LibSubParseConstantAccumulationTest:testSubParserConstantIndexAfterLiteral() (gas: 379951) +LibSubParseConstantAccumulationTest:testSubParserMultiConstantAccumulation() (gas: 384851) +LibSubParseConstantAccumulationTest:testSubParserSingleConstantAccumulation() (gas: 370097) +LibSubParseConstantAccumulationTest:testSubParserTwoWordsConstantAccumulation() (gas: 380638) +LibSubParseConsumeSubParseLiteralInputDataTest:testConsumeLiteralInputDataBasic() (gas: 1278) +LibSubParseConsumeSubParseLiteralInputDataTest:testConsumeLiteralInputDataBodyContent() (gas: 1495) +LibSubParseConsumeSubParseLiteralInputDataTest:testConsumeLiteralInputDataDispatchContent() (gas: 1491) +LibSubParseConsumeSubParseLiteralInputDataTest:testConsumeLiteralInputDataEmptyBody() (gas: 1064) +LibSubParseConsumeSubParseLiteralInputDataTest:testConsumeLiteralInputDataFuzz(bytes,bytes) (runs: 2048, μ: 5340, ~: 5335) +LibSubParseConsumeSubParseLiteralInputDataTest:testConsumeLiteralInputDataMinimal() (gas: 1062) +LibSubParseConsumeSubParseLiteralInputDataTest:testConsumeLiteralInputDataRoundtrip() (gas: 2560) +LibSubParseConsumeSubParseWordInputDataTest:testConsumeSubParseWordInputDataBasic() (gas: 3781) +LibSubParseConsumeSubParseWordInputDataTest:testConsumeSubParseWordInputDataEmptyWord() (gas: 3228) +LibSubParseConsumeSubParseWordInputDataTest:testConsumeSubParseWordInputDataFuzzConstantsHeight(uint16) (runs: 2048, μ: 3238, ~: 3238) +LibSubParseConsumeSubParseWordInputDataTest:testConsumeSubParseWordInputDataFuzzIOByte(uint8) (runs: 2048, μ: 3238, ~: 3238) +LibSubParseConsumeSubParseWordInputDataTest:testConsumeSubParseWordInputDataLongerWord() (gas: 3361) +LibSubParseConsumeSubParseWordInputDataTest:testConsumeSubParseWordInputDataMaxConstantsHeight() (gas: 3099) +LibSubParseConsumeSubParseWordInputDataTest:testConsumeSubParseWordInputDataWithOperands() (gas: 4060) +LibSubParseSubParseLiteralTest:testSubParseLiteralAllReject() (gas: 16490) +LibSubParseSubParseLiteralTest:testSubParseLiteralDispatchLengthOverflow() (gas: 126987) +LibSubParseSubParseLiteralTest:testSubParseLiteralEmptyBody() (gas: 11939) +LibSubParseSubParseLiteralTest:testSubParseLiteralFirstAcceptsSecondNotCalled() (gas: 15858) +LibSubParseSubParseLiteralTest:testSubParseLiteralFirstRejectsSecondAccepts() (gas: 15886) +LibSubParseSubParseLiteralTest:testSubParseLiteralSingleSubParserRejects() (gas: 12505) +LibSubParseSubParseLiteralTest:testSubParseLiteralSingleSubParserSuccess() (gas: 11953) +LibSubParseSubParseWordsTest:testSubParseWordsEmptyBytecode() (gas: 2127) +LibSubParseSubParseWordsTest:testSubParseWordsMultipleKnownOpcodes() (gas: 3904) +LibSubParseSubParseWordsTest:testSubParseWordsNoSubParsersUnknownReverts() (gas: 10245) +LibSubParseSubParseWordsTest:testSubParseWordsSingleSourceNoUnknown() (gas: 3629) +LibSubParseSubParseWordsTest:testSubParseWordsSingleSourceResolvesUnknown() (gas: 322324) +LibSubParseSubParseWordsTest:testSubParseWordsTwoSourcesBothResolved() (gas: 336930) +LibSubParseSubParseWordsTest:testSubParseWordsUnknownWordReverts() (gas: 327940) +LibSubParseSubParserConstantTest:testLibSubParseSubParserConstant(uint16,bytes32) (runs: 2048, μ: 1267, ~: 1267) +LibSubParseSubParserConstantTest:testLibSubParseSubParserConstantConstantsHeightOverflow(uint256,bytes32) (runs: 2048, μ: 7217, ~: 6976) +LibSubParseSubParserContextTest:testLibSubParseSubParserContext(uint8,uint8) (runs: 2048, μ: 1371, ~: 1371) +LibSubParseSubParserContextTest:testLibSubParseSubParserContextColumnOverflow(uint256,uint8) (runs: 2048, μ: 7201, ~: 7094) +LibSubParseSubParserContextTest:testLibSubParseSubParserContextRowOverflow(uint8,uint256) (runs: 2048, μ: 7250, ~: 7146) +LibSubParseSubParserExternTest:testLibSubParseSubParserExtern(address,uint8,uint8,uint8,uint16,uint8) (runs: 2048, μ: 3435, ~: 3361) +LibSubParseSubParserExternTest:testLibSubParseSubParserExternConstantsHeightOverflow(address,uint256,uint8,uint8,uint16,uint8) (runs: 2048, μ: 7921, ~: 7680) +LibSubParseUnknownWordTest:testUnknownWordMaxLength() (gas: 23087) +LibSubParseUnknownWordTest:testUnknownWordMinLength() (gas: 20648) +LibSubParseUnknownWordTest:testUnknownWordSingleSubParser(string) (runs: 2048, μ: 21266, ~: 21258) +LibSubParseUnknownWordTest:testUnknownWordWithOperandValues() (gas: 30408) +RainlangExpressionDeployerDeployCheckTest:testRainlangExpressionDeployerDeployNoEIP1820() (gas: 1440624) +RainlangExpressionDeployerDescribedByMetaV1Test:testRainlangExpressionDeployerDescribedByMetaV1Happy() (gas: 1446712) +RainlangExpressionDeployerIERC165Test:testRainlangExpressionDeployerIERC165(bytes4) (runs: 2048, μ: 1450202, ~: 1450202) +RainlangExpressionDeployerMetaTest:testRainlangExpressionDeployerExpectedConstructionMetaHash() (gas: 3246) +RainlangExpressionDeployerParse2Test:testParse2EmptyInput() (gas: 12475) +RainlangExpressionDeployerParse2Test:testParse2IntegrityFailure() (gas: 34388) +RainlangExpressionDeployerParse2Test:testParse2MissingFinalSemi() (gas: 19884) +RainlangExpressionDeployerParsePragma1Test:testParsePragma1ErrorPropagation() (gas: 14704) +RainlangExpressionDeployerParsePragma1Test:testParsePragma1NoPragma() (gas: 11403) +RainlangExpressionDeployerParsePragma1Test:testParsePragma1SingleAddress() (gas: 24417) +RainlangExpressionDeployerParsePragma1Test:testParsePragma1TwoAddresses() (gas: 37284) +RainlangExpressionDeployerPointersTest:testIntegrityFunctionPointers() (gas: 1453626) +RainlangIERC165Test:testRainlangIERC165(bytes4) (runs: 2048, μ: 138857, ~: 138857) +RainlangInterpreterEvalNonZeroSourceIndexTest:testEvalNonZeroSourceIndex() (gas: 54408) +RainlangInterpreterEvalNonZeroSourceIndexTest:testEvalNonZeroSourceIndexWithInputs() (gas: 71335) +RainlangInterpreterEvalNonZeroSourceIndexTest:testEvalSourceIndexSelectsCorrectSource() (gas: 63430) +RainlangInterpreterEvalTest:testEvalWithMatchingInputs(int256,int256) (runs: 2048, μ: 63238, ~: 63382) +RainlangInterpreterEvalTest:testInputsLengthMismatchTooFew(uint8,uint8) (runs: 2048, μ: 52440, ~: 51501) +RainlangInterpreterEvalTest:testInputsLengthMismatchTooMany(uint8) (runs: 2048, μ: 46867, ~: 44073) +RainlangInterpreterExtrospectTest:testInterpreterNoDisallowedOpcodes() (gas: 7003049) +RainlangInterpreterIERC165Test:testRainlangInterpreterIERC165(bytes4) (runs: 2048, μ: 4804973, ~: 4804973) +RainlangInterpreterPointersTest:testOpcodeFunctionPointers() (gas: 4811100) +RainlangInterpreterStateOverlayTest:testStateOverlayDuplicateKeyLastWins() (gas: 49386) +RainlangInterpreterStateOverlayTest:testStateOverlayDuplicateKeysInterleaved() (gas: 66672) +RainlangInterpreterStateOverlayTest:testStateOverlayGet() (gas: 47588) +RainlangInterpreterStateOverlayTest:testStateOverlayMultiplePairs() (gas: 63865) +RainlangInterpreterStateOverlayTest:testStateOverlayOddLength(bytes32[]) (runs: 2048, μ: 59762, ~: 59366) +RainlangInterpreterStateOverlayTest:testStateOverlaySet() (gas: 79181) +RainlangInterpreterStateOverlayTest:testStateOverlayThreePairs() (gas: 79631) +RainlangInterpreterTest:testRainlangInterpreterOddFunctionPointersLength() (gas: 499) +RainlangInterpreterZeroFunctionPointersTest:testStandardRainlangInterpreterDeploys() (gas: 4798115) +RainlangInterpreterZeroFunctionPointersTest:testZeroFunctionPointersReverts() (gas: 35514) +RainlangParserIERC165Test:testRainlangParserIERC165(bytes4) (runs: 2048, μ: 4117909, ~: 4117909) +RainlangParserParseMemoryOverflowTest:testCheckParseMemoryOverflowPasses() (gas: 4125421) +RainlangParserParseMemoryOverflowTest:testCheckParseMemoryOverflowReverts() (gas: 4142961) +RainlangParserParsePragmaEmptyInputTest:testParsePragma1EmptyInput() (gas: 4116639) +RainlangParserParsePragmaEmptyInputTest:testParsePragma1SingleNullByte() (gas: 4116710) +RainlangParserParserPragma:testParsePragmaNoPragma() (gas: 20574925) +RainlangParserParserPragma:testParsePragmaNoWhitespaceAfterKeyword() (gas: 4119828) +RainlangParserParserPragma:testParsePragmaSinglePragma() (gas: 12395970) +RainlangParserParserPragma:testParsePragmaWithInterstitial() (gas: 12399199) +RainlangParserPointersTest:testLiteralParserFunctionPointers() (gas: 4117488) +RainlangParserPointersTest:testOperandHandlerFunctionPointers() (gas: 4125322) +RainlangParserPointersTest:testParserParseMeta() (gas: 5466336) +RainlangParserUnsafeParseTest:testUnsafeParseEmpty() (gas: 7629) +RainlangParserUnsafeParseTest:testUnsafeParseHappyPath() (gas: 20833) +RainlangReferenceExternContextRainlenTest:testRainlangReferenceExternContextRainlenHappy() (gas: 2505690) +RainlangReferenceExternContextSenderTest:testRainlangReferenceExternContextContractHappy() (gas: 2505289) +RainlangReferenceExternContextSenderTest:testRainlangReferenceExternContextSenderHappy() (gas: 2504825) +RainlangReferenceExternDescribedByMetaV1:testRainlangReferenceExternDescribedByMetaV1Happy() (gas: 2428431) +RainlangReferenceExternIERC165Test:testRainlangReferenceExternIERC165(bytes4) (runs: 2048, μ: 2438966, ~: 2438966) +RainlangReferenceExternIntIncTest:testRainlangReferenceExternExternDirect() (gas: 2434928) +RainlangReferenceExternIntIncTest:testRainlangReferenceExternExternModWrap(uint16) (runs: 2048, μ: 2433978, ~: 2433978) +RainlangReferenceExternIntIncTest:testRainlangReferenceExternIntIncHappySugared() (gas: 2533571) +RainlangReferenceExternIntIncTest:testRainlangReferenceExternIntIncHappyUnsugared() (gas: 2529070) +RainlangReferenceExternIntIncTest:testRainlangReferenceExternIntIncIntegrity(bytes32,uint256,uint256) (runs: 100, μ: 439, ~: 439) +RainlangReferenceExternIntIncTest:testRainlangReferenceExternIntIncRun(bytes32,bytes32[]) (runs: 100, μ: 850330, ~: 765697) +RainlangReferenceExternIntIncTest:testRainlangReferenceExternIntIncSubParseKnownWord(uint16,bytes1) (runs: 100, μ: 2434204, ~: 2433877) +RainlangReferenceExternIntIncTest:testRainlangReferenceExternIntIncSubParseUnknownWord(uint16,bytes1,bytes) (runs: 100, μ: 2436510, ~: 2436781) +RainlangReferenceExternIntIncTest:testRainlangReferenceExternIntegrityDirect(uint16,uint256,uint256) (runs: 100, μ: 2425909, ~: 2425909) +RainlangReferenceExternPointersTest:testIntegrityFunctionPointers() (gas: 2429293) +RainlangReferenceExternPointersTest:testOpcodeFunctionPointers() (gas: 2429336) +RainlangReferenceExternPointersTest:testSubParserFunctionPointers() (gas: 2429759) +RainlangReferenceExternPointersTest:testSubParserLiteralParsers() (gas: 2429313) +RainlangReferenceExternPointersTest:testSubParserOperandParsers() (gas: 2429786) +RainlangReferenceExternPointersTest:testSubParserParseMeta() (gas: 18899) +RainlangReferenceExternRepeatTest:testRainlangReferenceExternRepeatHappy() (gas: 2559008) +RainlangReferenceExternRepeatTest:testRainlangReferenceExternRepeatNegative() (gas: 2470764) +RainlangReferenceExternRepeatTest:testRainlangReferenceExternRepeatNonInteger() (gas: 2473426) +RainlangReferenceExternRepeatTest:testRainlangReferenceExternRepeatTooLarge() (gas: 2471468) +RainlangReferenceExternRepeatTest:testRainlangReferenceExternRepeatTrailingBytes() (gas: 2470104) +RainlangReferenceExternRepeatTest:testRainlangReferenceExternRepeatZero() (gas: 2558051) +RainlangReferenceExternStackOperandTest:testRainlangReferenceExternStackOperandSingle(uint256) (runs: 2048, μ: 2509427, ~: 2509695) +RainlangReferenceExternSubParserIndexOutOfBoundsTest:testSubParseLiteral2IndexOutOfBounds() (gas: 1786461) +RainlangReferenceExternUnknownWordTest:testRainlangReferenceExternUnknownWord() (gas: 2474672) +RainlangStoreGetUninitializedTest:testGetUninitializedAfterSetDifferentKey() (gas: 246898) +RainlangStoreGetUninitializedTest:testGetUninitializedKey() (gas: 221321) +RainlangStoreGetUninitializedTest:testGetUninitializedKeyFuzz(uint256,bytes32) (runs: 2048, μ: 221376, ~: 221376) +RainlangStoreIERC165Test:testRainlangStoreIERC165(bytes4) (runs: 2048, μ: 223796, ~: 223796) +RainlangStoreNamespaceIsolationTest:testNamespaceIsolation(string,string,uint256,bytes32,bytes32) (runs: 2048, μ: 254812, ~: 254812) +RainlangStoreNamespaceIsolationTest:testNamespaceIsolationBidirectional(string,string,uint256,bytes32,bytes32,bytes32) (runs: 2048, μ: 278610, ~: 278619) +RainlangStoreNamespaceIsolationTest:testNamespaceIsolationSameSender(address,uint256,uint256,bytes32,bytes32,bytes32) (runs: 2048, μ: 275363, ~: 275373) +RainlangStoreOverwriteKeyTest:testOverwriteKeyAmongOtherKeys() (gas: 272526) +RainlangStoreOverwriteKeyTest:testOverwriteKeyLastValueWins() (gas: 247192) +RainlangStoreOverwriteKeyTest:testOverwriteKeyTriple() (gas: 249521) +RainlangStoreSetEmptyArrayTest:testSetEmptyArray() (gas: 219312) +RainlangStoreSetEmptyArrayTest:testSetEmptyArrayFuzz(uint256) (runs: 2048, μ: 219426, ~: 219426) +RainlangStoreSetEmptyArrayTest:testSetEmptyArrayNoEvents() (gas: 222994) +RainlangStoreSetEventTest:testSetEventFQNMatchesQualifyNamespace(uint256,bytes32,bytes32) (runs: 2048, μ: 248454, ~: 248454) +RainlangStoreSetEventTest:testSetEventMultiplePairs() (gas: 274888) +RainlangStoreSetEventTest:testSetEventSinglePair() (gas: 248296) +RainlangStoreTest:testRainlangStoreSetGetDupes((uint256,bytes32[11])[]) (runs: 100, μ: 1582353, ~: 1651971) +RainlangStoreTest:testRainlangStoreSetGetNoDupesMany((uint256,bytes32[])[]) (runs: 100, μ: 3417813, ~: 3274278) +RainlangStoreTest:testRainlangStoreSetGetNoDupesSingle(uint256,bytes32[]) (runs: 100, μ: 1899685, ~: 1855976) +RainlangStoreTest:testRainlangStoreSetOddLength(uint256,bytes32[]) (runs: 100, μ: 244405, ~: 245352) +RainlangTest:testExpressionDeployerAddress() (gas: 134442) +RainlangTest:testInterpreterAddress() (gas: 134508) +RainlangTest:testParserAddress() (gas: 134466) +RainlangTest:testStoreAddress() (gas: 134553) \ No newline at end of file diff --git a/src/generated/Rainlang.pointers.sol b/src/generated/Rainlang.pointers.sol index a512786b1..311a34466 100644 --- a/src/generated/Rainlang.pointers.sol +++ b/src/generated/Rainlang.pointers.sol @@ -10,16 +10,16 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x6a2b76d60dfa81bcd0883411e065853b2297d169332a22a15d01c5e6c0292e1c); +bytes32 constant BYTECODE_HASH = bytes32(0x913cd5246ac4e26d9f56fcff70fb3cad71bda448df4d4335de446eb905a89e09); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0x22508460712C350e914b49155982d3A92D923b10); +address constant DEPLOYED_ADDRESS = address(0xA6f5E45ffFa946e7b0376BC933cBcB485a224268); /// @dev The creation bytecode of the contract. bytes constant CREATION_CODE = - hex"6080604052348015600e575f80fd5b506101f78061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c8063107628021161004d57806310762802146100cb5780634501e517146100e5578063f2c4da93146100ff575f80fd5b806301ffc9a7146100685780630c1916a414610090575b5f80fd5b61007b6100763660046101b1565b610119565b60405190151581526020015b60405180910390f35b73ec923e3db8c8c90d7d42e49bf9d9135c540c255f5b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610087565b7336ee19f427a4a2448b6b8458e07a27bae16540486100a6565b733bf9bd9da4784f75c92317e61c68493ecc9aabdc6100a6565b731aa775533e28b1d843e1a589034984e3a62005dc6100a6565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fabaa01220000000000000000000000000000000000000000000000000000000014806101ab57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f602082840312156101c1575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101f0575f80fd5b939250505056"; + hex"6080604052348015600e575f80fd5b506101f78061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c8063107628021161004d57806310762802146100cb5780634501e517146100e5578063f2c4da93146100ff575f80fd5b806301ffc9a7146100685780630c1916a414610090575b5f80fd5b61007b6100763660046101b1565b610119565b60405190151581526020015b60405180910390f35b7325307b6a0437757c5fbd1ade52107b50324113fd5b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610087565b73eb9e5df8259c7a2de1bdd95b46bd3b81917490156100a6565b733bf9bd9da4784f75c92317e61c68493ecc9aabdc6100a6565b731aa775533e28b1d843e1a589034984e3a62005dc6100a6565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fabaa01220000000000000000000000000000000000000000000000000000000014806101ab57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f602082840312156101c1575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101f0575f80fd5b939250505056"; /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405234801561000f575f80fd5b5060043610610064575f3560e01c8063107628021161004d57806310762802146100cb5780634501e517146100e5578063f2c4da93146100ff575f80fd5b806301ffc9a7146100685780630c1916a414610090575b5f80fd5b61007b6100763660046101b1565b610119565b60405190151581526020015b60405180910390f35b73ec923e3db8c8c90d7d42e49bf9d9135c540c255f5b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610087565b7336ee19f427a4a2448b6b8458e07a27bae16540486100a6565b733bf9bd9da4784f75c92317e61c68493ecc9aabdc6100a6565b731aa775533e28b1d843e1a589034984e3a62005dc6100a6565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fabaa01220000000000000000000000000000000000000000000000000000000014806101ab57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f602082840312156101c1575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101f0575f80fd5b939250505056"; + hex"608060405234801561000f575f80fd5b5060043610610064575f3560e01c8063107628021161004d57806310762802146100cb5780634501e517146100e5578063f2c4da93146100ff575f80fd5b806301ffc9a7146100685780630c1916a414610090575b5f80fd5b61007b6100763660046101b1565b610119565b60405190151581526020015b60405180910390f35b7325307b6a0437757c5fbd1ade52107b50324113fd5b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610087565b73eb9e5df8259c7a2de1bdd95b46bd3b81917490156100a6565b733bf9bd9da4784f75c92317e61c68493ecc9aabdc6100a6565b731aa775533e28b1d843e1a589034984e3a62005dc6100a6565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fabaa01220000000000000000000000000000000000000000000000000000000014806101ab57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f602082840312156101c1575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101f0575f80fd5b939250505056"; diff --git a/src/generated/RainlangExpressionDeployer.pointers.sol b/src/generated/RainlangExpressionDeployer.pointers.sol index 289bc82f4..7d5e0aa85 100644 --- a/src/generated/RainlangExpressionDeployer.pointers.sol +++ b/src/generated/RainlangExpressionDeployer.pointers.sol @@ -10,19 +10,19 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x5dcebb28e9cc99839015fd7b702977a4233e2c3a10a8edae869a3937a4da61f6); +bytes32 constant BYTECODE_HASH = bytes32(0x6a5b1881719471d57aa64e9427cdd661a21ef344a381c5e7fadc9c020a45cebf); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0x36ee19F427a4a2448B6b8458e07a27BaE1654048); +address constant DEPLOYED_ADDRESS = address(0xeb9E5dF8259c7a2De1Bdd95b46Bd3B8191749015); /// @dev The creation bytecode of the contract. bytes constant CREATION_CODE = - hex"6080604052348015600e575f80fd5b50611b718061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c80636f5aa28d1161004d5780636f5aa28d146100b0578063a3869e14146100de578063b92d7553146100fe575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b6100763660046114e2565b610106565b60405190151581526020015b60405180910390f35b6100a361009e366004611521565b610282565b604051610087919061158d565b6040517f0ae1ecb6c0f6314beaf4d4cd803ba14c900b0eecb1ecd39a52739cff9ae2c34a8152602001610087565b6100f16100ec3660046116dc565b610347565b60405161008791906117a2565b6100f1610468565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f6f5aa28d00000000000000000000000000000000000000000000000000000000148061019857507fffffffff0000000000000000000000000000000000000000000000000000000082167fa3869e1400000000000000000000000000000000000000000000000000000000145b806101e457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5514ca2000000000000000000000000000000000000000000000000000000000145b8061023057507fffffffff0000000000000000000000000000000000000000000000000000000082167fb92d755300000000000000000000000000000000000000000000000000000000145b8061027c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b604080516020810182526060815290517f5514ca2000000000000000000000000000000000000000000000000000000000815273ec923e3db8c8c90d7d42e49bf9d9135c540c255f90635514ca20906102e190869086906004016117b4565b5f60405180830381865afa1580156102fb573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103409190810190611823565b9392505050565b6040517f7764fd9c0000000000000000000000000000000000000000000000000000000081526060905f90819073ec923e3db8c8c90d7d42e49bf9d9135c540c255f90637764fd9c9061039e9087906004016117a2565b5f60405180830381865afa1580156103b8573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103fd9190810190611902565b915091505f610416838351905160406020909202010190565b60408051602083820181019092528281529192508101610437818686610477565b5f61045b6040518060c0016040528060908152602001611ae16090913987876104ba565b5091979650505050505050565b6060610472610879565b905090565b80600182510160200281015b8082101561049e578151855260209485019490910190610483565b50506104b56104aa8390565b848451602001610b4c565b505050565b60605f6104c684610b55565b85519091506020860190600290046104dd86610b6f565b8260020267ffffffffffffffff8111156104f9576104f96115f2565b6040519080825280601f01601f191660200182016040528015610523576020820181803683370190505b509350602084015f5b8481101561086d575f806105408a84610d8c565b915091508184538060018501536002840193505f61055f8b848c610daf565b90505f601861056e8d87610e16565b0390505f61057c8d87610e45565b600402820190505b808210156107b757815162ffffff811690601d81901a600f81169160049190911c90601c1a6114d88c82106106015760808801516040517fc8344ab1000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018e90526064015b60405180910390fd5b50600281028d015160f01c5f806106168a8885565b9150915085821461066a5760808a01516040517fddf56071000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018790526064016105f8565b8481146106ba5760808a01516040517ffc8b5603000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604481018690526064016105f8565b895182111561070c5760808a01518a516040517f2cab6bff00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018390526064016105f8565b8951829003808b5260408b0151111561076e5760808a01518a516040808d015190517f1bc5ab0f0000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915260448201526064016105f8565b89518101808b5260208b0151101561078857895160208b01525b600181111561079957895160408b01525b50505060808701805160010190525050506004929092019150610584565b6107c18d87610e5c565b8360200151146108155782602001516107da8e88610e5c565b6040517f4d9c18dc000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016105f8565b8251841461085c5782516040517f4689f0b30000000000000000000000000000000000000000000000000000000081526004810191909152602481018590526044016105f8565b50506001909301925061052c915050565b50505050509392505050565b60606114d85f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff168152602001610e748152602001610ef08152602001610f5381526020016110c981526020016110d281526020016110dc81526020016110e581526020016110ff81526020016110d281526020016111a481526020016111a481526020016111ff8152602001611276815260200161128381526020016110d281526020016110dc815260200161128381526020016110d281526020016110dc81526020016110dc81526020016110d281526020016110d281526020016110d281526020016110c981526020016110c981526020016110c981526020016110c9815260200161128d81526020016110d281526020016112b181526020016112ca81526020016110d2815260200161128d81526020016110d281526020016110d2815260200161128381526020016110dc81526020016110d281526020016110d281526020016110dc81526020016112d381526020016110d281526020016110dc81526020016112d381526020016110c981526020016110dc81526020016110dc81526020016110dc81526020016110dc81526020016110d281526020016110dc81526020016110dc81526020016112d381526020016110c981526020016110c981526020016112d381526020016110c981526020016110c981526020016112d381526020016110d281526020016110dc81526020016112d38152602001611283815260200161128381526020016112d381526020016112d381526020016110c981526020016112d381526020016112d381526020016112d381526020016110dc81526020016112ca815250905060608190506048815114610b3a5780516040517fc8b569010000000000000000000000000000000000000000000000000000000081526004810191909152602481018490526044016105f8565b610b43816112ec565b94505050505090565b8083835e505050565b5f81515f03610b6557505f919050565b50602001515f1a90565b5f610b7982610b55565b90508015610d4a5781516001600283020190811115610bc657826040517f17f4bc5e0000000000000000000000000000000000000000000000000000000081526004016105f891906117a2565b82516020828501810191850101602160027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860102860181019086015b808210610d0657815160f01c8481016004810185811115610c5157896040517e39ba560000000000000000000000000000000000000000000000000000000081526004016105f891906117a2565b81515f81901a90600181901a90600281901a9060031a80821180610c7457508281115b15610caf578d876040517feaf45f4f0000000000000000000000000000000000000000000000000000000081526004016105f89291906119f3565b505050600481028201878114610cf3578b6040517ffbb8027a0000000000000000000000000000000000000000000000000000000081526004016105f891906117a2565b8397506002870396505050505050610c03565b838314610d4157866040517fde67b29a0000000000000000000000000000000000000000000000000000000081526004016105f891906117a2565b50505050505050565b600182511115610d8857816040517fd013da5d0000000000000000000000000000000000000000000000000000000081526004016105f891906117a2565b5050565b5f805f610d998585610e16565b51600281901a9660039190911a95509350505050565b610de46040518060c001604052805f81526020015f81526020015f8152602001606081526020015f8152602001606081525090565b506040805160c081018252838152602081018490529081019290925260608201525f608082015260a081019190915290565b5f80610e2184610b55565b60020260010190505f610e34858561137c565b949091019093016020019392505050565b5f80610e518484610e16565b515f1a949350505050565b5f80610e688484610e16565b5160011a949350505050565b81515f90819061ffff8416908110610ecf57608085015185516040517feaa16f3300000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b8460400151811115610ee357604085018190525b505f946001945092505050565b6060820151515f90819061ffff8416908110610ee35760808501516060860151516040517feb78945400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b606082015180515f91829161ffff851691839183908110610f7657610f76611a14565b602002602001015190505f80610f8f839060a082901c90565b91509150610fbd827f18003f8e000000000000000000000000000000000000000000000000000000006113d2565b61100b576040517f23016c8900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016105f8565b6040517f40c04edc00000000000000000000000000000000000000000000000000000000815260048101829052600f601089901c81166024830181905260148a901c90911660448301819052909173ffffffffffffffffffffffffffffffffffffffff8516906340c04edc906064016040805180830381865afa158015611094573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110b89190611a41565b975097505050505050509250929050565b505f9160019150565b5060029160019150565b50600191829150565b5f806110f184846110ff565b506001958695509350505050565b5f8060ff83811690600885901c16808303611146576040517f46f0ca6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101006111538284611a63565b1115611195576040517f8abcdd3f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016105f8565b50600295600195509350505050565b5f8061ffff831660ff8111806111b8575080155b156111f2576040517fc1be16a1000000000000000000000000000000000000000000000000000000008152600481018290526024016105f8565b5060019485945092505050565b60a08201515f90819061ffff841690601485901c90839081906112229085610d8c565b915091508281101561126a576040517fff13710800000000000000000000000000000000000000000000000000000000815260048101829052602481018490526044016105f8565b50969095509350505050565b60101c600f169160019150565b5060039160019150565b5f80600f601084901c16806112a35760016112a5565b805b95600195509350505050565b5f80600f601084901c16600281116112a35760026112a5565b506002915f9150565b5f80600f601084901c16600181116112a35760026112a5565b60605f825160020267ffffffffffffffff81111561130c5761130c6115f2565b6040519080825280601f01601f191660200182016040528015611336576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156113705780518351861690851617815260209092019160020161134e565b50939695505050505050565b5f61138683610b55565b82106113c25781836040517ffcfaeff10000000000000000000000000000000000000000000000000000000081526004016105f8929190611a9b565b50600202016003015161ffff1690565b5f6113dc836113ed565b801561034057506103408383611467565b5f611418827f01ffc9a700000000000000000000000000000000000000000000000000000000611467565b15611460575f80611449847fffffffff0000000000000000000000000000000000000000000000000000000061148b565b91509150818015611458575080155b949350505050565b505f919050565b5f805f611474858561148b565b915091508180156114825750805b95945050505050565b7f01ffc9a7000000000000000000000000000000000000000000000000000000005f818152600483905290819060208260248188617530fa92505f511515601f3d11169150509250929050565b6114e0611ab3565b565b5f602082840312156114f2575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610340575f80fd5b5f8060208385031215611532575f80fd5b823567ffffffffffffffff80821115611549575f80fd5b818501915085601f83011261155c575f80fd5b81358181111561156a575f80fd5b86602082850101111561157b575f80fd5b60209290920196919550909350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b808310156115e757835173ffffffffffffffffffffffffffffffffffffffff1682529284019260019290920191908401906115b1565b509695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516020810167ffffffffffffffff81118282101715611642576116426115f2565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561168f5761168f6115f2565b604052919050565b5f67ffffffffffffffff8211156116b0576116b06115f2565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f602082840312156116ec575f80fd5b813567ffffffffffffffff811115611702575f80fd5b8201601f81018413611712575f80fd5b803561172561172082611697565b611648565b818152856020838501011115611739575f80fd5b816020840160208301375f91810160200191909152949350505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6103406020830184611756565b60208152816020820152818360408301375f818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b5f67ffffffffffffffff821115611819576118196115f2565b5060051b60200190565b5f6020808385031215611834575f80fd5b825167ffffffffffffffff8082111561184b575f80fd5b818501915082828703121561185e575f80fd5b61186661161f565b825182811115611874575f80fd5b80840193505086601f840112611888575f80fd5b8251915061189861172083611800565b82815260059290921b830184019184810190888411156118b6575f80fd5b938501935b838510156118f557845173ffffffffffffffffffffffffffffffffffffffff811681146118e6575f80fd5b825293850193908501906118bb565b8252509695505050505050565b5f8060408385031215611913575f80fd5b825167ffffffffffffffff8082111561192a575f80fd5b818501915085601f83011261193d575f80fd5b8151602061194d61172083611697565b8281528882848701011115611960575f80fd5b828286018383015e5f81840183015287820151909650935082841115611984575f80fd5b838701935087601f850112611997575f80fd5b835192506119a761172084611800565b83815260059390931b84018101928181019250888411156119c6575f80fd5b938101935b838510156119e4578451835293810193918101916119cb565b80955050505050509250929050565b604081525f611a056040830185611756565b90508260208301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8060408385031215611a52575f80fd5b505080516020909101519092909150565b8082018082111561027c577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b828152604060208201525f6114586040830184611756565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0e740ef00f5310c910d210dc10e510ff10d211a411a411ff1276128310d210dc128310d210dc10dc10d210d210d210c910c910c910c9128d10d212b112ca10d2128d10d210d2128310dc10d210d210dc12d310d210dc12d310c910dc10dc10dc10dc10d210dc10dc12d310c910c912d310c910c912d310d210dc12d31283128312d312d310c912d312d312d310dc12ca"; + hex"6080604052348015600e575f80fd5b50611b718061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c80636f5aa28d1161004d5780636f5aa28d146100b0578063a3869e14146100de578063b92d7553146100fe575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b6100763660046114e2565b610106565b60405190151581526020015b60405180910390f35b6100a361009e366004611521565b610282565b604051610087919061158d565b6040517f0ae1ecb6c0f6314beaf4d4cd803ba14c900b0eecb1ecd39a52739cff9ae2c34a8152602001610087565b6100f16100ec3660046116dc565b610347565b60405161008791906117a2565b6100f1610468565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f6f5aa28d00000000000000000000000000000000000000000000000000000000148061019857507fffffffff0000000000000000000000000000000000000000000000000000000082167fa3869e1400000000000000000000000000000000000000000000000000000000145b806101e457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5514ca2000000000000000000000000000000000000000000000000000000000145b8061023057507fffffffff0000000000000000000000000000000000000000000000000000000082167fb92d755300000000000000000000000000000000000000000000000000000000145b8061027c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b604080516020810182526060815290517f5514ca200000000000000000000000000000000000000000000000000000000081527325307b6a0437757c5fbd1ade52107b50324113fd90635514ca20906102e190869086906004016117b4565b5f60405180830381865afa1580156102fb573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103409190810190611823565b9392505050565b6040517f7764fd9c0000000000000000000000000000000000000000000000000000000081526060905f9081907325307b6a0437757c5fbd1ade52107b50324113fd90637764fd9c9061039e9087906004016117a2565b5f60405180830381865afa1580156103b8573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103fd9190810190611902565b915091505f610416838351905160406020909202010190565b60408051602083820181019092528281529192508101610437818686610477565b5f61045b6040518060c0016040528060908152602001611ae16090913987876104ba565b5091979650505050505050565b6060610472610879565b905090565b80600182510160200281015b8082101561049e578151855260209485019490910190610483565b50506104b56104aa8390565b848451602001610b4c565b505050565b60605f6104c684610b55565b85519091506020860190600290046104dd86610b6f565b8260020267ffffffffffffffff8111156104f9576104f96115f2565b6040519080825280601f01601f191660200182016040528015610523576020820181803683370190505b509350602084015f5b8481101561086d575f806105408a84610d8c565b915091508184538060018501536002840193505f61055f8b848c610daf565b90505f601861056e8d87610e16565b0390505f61057c8d87610e45565b600402820190505b808210156107b757815162ffffff811690601d81901a600f81169160049190911c90601c1a6114d88c82106106015760808801516040517fc8344ab1000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018e90526064015b60405180910390fd5b50600281028d015160f01c5f806106168a8885565b9150915085821461066a5760808a01516040517fddf56071000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018790526064016105f8565b8481146106ba5760808a01516040517ffc8b5603000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604481018690526064016105f8565b895182111561070c5760808a01518a516040517f2cab6bff00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018390526064016105f8565b8951829003808b5260408b0151111561076e5760808a01518a516040808d015190517f1bc5ab0f0000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915260448201526064016105f8565b89518101808b5260208b0151101561078857895160208b01525b600181111561079957895160408b01525b50505060808701805160010190525050506004929092019150610584565b6107c18d87610e5c565b8360200151146108155782602001516107da8e88610e5c565b6040517f4d9c18dc000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016105f8565b8251841461085c5782516040517f4689f0b30000000000000000000000000000000000000000000000000000000081526004810191909152602481018590526044016105f8565b50506001909301925061052c915050565b50505050509392505050565b60606114d85f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff168152602001610e748152602001610ef08152602001610f5381526020016110c981526020016110d281526020016110dc81526020016110e581526020016110ff81526020016110d281526020016111a481526020016111a481526020016111ff8152602001611276815260200161128381526020016110d281526020016110dc815260200161128381526020016110d281526020016110dc81526020016110dc81526020016110d281526020016110d281526020016110d281526020016110c981526020016110c981526020016110c981526020016110c9815260200161128d81526020016110d281526020016112b181526020016112ca81526020016110d2815260200161128d81526020016110d281526020016110d2815260200161128381526020016110dc81526020016110d281526020016110d281526020016110dc81526020016112d381526020016110d281526020016110dc81526020016112d381526020016110c981526020016110dc81526020016110dc81526020016110dc81526020016110dc81526020016110d281526020016110dc81526020016110dc81526020016112d381526020016110c981526020016110c981526020016112d381526020016110c981526020016110c981526020016112d381526020016110d281526020016110dc81526020016112d38152602001611283815260200161128381526020016112d381526020016112d381526020016110c981526020016112d381526020016112d381526020016112d381526020016110dc81526020016112ca815250905060608190506048815114610b3a5780516040517fc8b569010000000000000000000000000000000000000000000000000000000081526004810191909152602481018490526044016105f8565b610b43816112ec565b94505050505090565b8083835e505050565b5f81515f03610b6557505f919050565b50602001515f1a90565b5f610b7982610b55565b90508015610d4a5781516001600283020190811115610bc657826040517f17f4bc5e0000000000000000000000000000000000000000000000000000000081526004016105f891906117a2565b82516020828501810191850101602160027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860102860181019086015b808210610d0657815160f01c8481016004810185811115610c5157896040517e39ba560000000000000000000000000000000000000000000000000000000081526004016105f891906117a2565b81515f81901a90600181901a90600281901a9060031a80821180610c7457508281115b15610caf578d876040517feaf45f4f0000000000000000000000000000000000000000000000000000000081526004016105f89291906119f3565b505050600481028201878114610cf3578b6040517ffbb8027a0000000000000000000000000000000000000000000000000000000081526004016105f891906117a2565b8397506002870396505050505050610c03565b838314610d4157866040517fde67b29a0000000000000000000000000000000000000000000000000000000081526004016105f891906117a2565b50505050505050565b600182511115610d8857816040517fd013da5d0000000000000000000000000000000000000000000000000000000081526004016105f891906117a2565b5050565b5f805f610d998585610e16565b51600281901a9660039190911a95509350505050565b610de46040518060c001604052805f81526020015f81526020015f8152602001606081526020015f8152602001606081525090565b506040805160c081018252838152602081018490529081019290925260608201525f608082015260a081019190915290565b5f80610e2184610b55565b60020260010190505f610e34858561137c565b949091019093016020019392505050565b5f80610e518484610e16565b515f1a949350505050565b5f80610e688484610e16565b5160011a949350505050565b81515f90819061ffff8416908110610ecf57608085015185516040517feaa16f3300000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b8460400151811115610ee357604085018190525b505f946001945092505050565b6060820151515f90819061ffff8416908110610ee35760808501516060860151516040517feb78945400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b606082015180515f91829161ffff851691839183908110610f7657610f76611a14565b602002602001015190505f80610f8f839060a082901c90565b91509150610fbd827f18003f8e000000000000000000000000000000000000000000000000000000006113d2565b61100b576040517f23016c8900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016105f8565b6040517f40c04edc00000000000000000000000000000000000000000000000000000000815260048101829052600f601089901c81166024830181905260148a901c90911660448301819052909173ffffffffffffffffffffffffffffffffffffffff8516906340c04edc906064016040805180830381865afa158015611094573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110b89190611a41565b975097505050505050509250929050565b505f9160019150565b5060029160019150565b50600191829150565b5f806110f184846110ff565b506001958695509350505050565b5f8060ff83811690600885901c16808303611146576040517f46f0ca6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101006111538284611a63565b1115611195576040517f8abcdd3f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016105f8565b50600295600195509350505050565b5f8061ffff831660ff8111806111b8575080155b156111f2576040517fc1be16a1000000000000000000000000000000000000000000000000000000008152600481018290526024016105f8565b5060019485945092505050565b60a08201515f90819061ffff841690601485901c90839081906112229085610d8c565b915091508281101561126a576040517fff13710800000000000000000000000000000000000000000000000000000000815260048101829052602481018490526044016105f8565b50969095509350505050565b60101c600f169160019150565b5060039160019150565b5f80600f601084901c16806112a35760016112a5565b805b95600195509350505050565b5f80600f601084901c16600281116112a35760026112a5565b506002915f9150565b5f80600f601084901c16600181116112a35760026112a5565b60605f825160020267ffffffffffffffff81111561130c5761130c6115f2565b6040519080825280601f01601f191660200182016040528015611336576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156113705780518351861690851617815260209092019160020161134e565b50939695505050505050565b5f61138683610b55565b82106113c25781836040517ffcfaeff10000000000000000000000000000000000000000000000000000000081526004016105f8929190611a9b565b50600202016003015161ffff1690565b5f6113dc836113ed565b801561034057506103408383611467565b5f611418827f01ffc9a700000000000000000000000000000000000000000000000000000000611467565b15611460575f80611449847fffffffff0000000000000000000000000000000000000000000000000000000061148b565b91509150818015611458575080155b949350505050565b505f919050565b5f805f611474858561148b565b915091508180156114825750805b95945050505050565b7f01ffc9a7000000000000000000000000000000000000000000000000000000005f818152600483905290819060208260248188617530fa92505f511515601f3d11169150509250929050565b6114e0611ab3565b565b5f602082840312156114f2575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610340575f80fd5b5f8060208385031215611532575f80fd5b823567ffffffffffffffff80821115611549575f80fd5b818501915085601f83011261155c575f80fd5b81358181111561156a575f80fd5b86602082850101111561157b575f80fd5b60209290920196919550909350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b808310156115e757835173ffffffffffffffffffffffffffffffffffffffff1682529284019260019290920191908401906115b1565b509695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516020810167ffffffffffffffff81118282101715611642576116426115f2565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561168f5761168f6115f2565b604052919050565b5f67ffffffffffffffff8211156116b0576116b06115f2565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f602082840312156116ec575f80fd5b813567ffffffffffffffff811115611702575f80fd5b8201601f81018413611712575f80fd5b803561172561172082611697565b611648565b818152856020838501011115611739575f80fd5b816020840160208301375f91810160200191909152949350505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6103406020830184611756565b60208152816020820152818360408301375f818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b5f67ffffffffffffffff821115611819576118196115f2565b5060051b60200190565b5f6020808385031215611834575f80fd5b825167ffffffffffffffff8082111561184b575f80fd5b818501915082828703121561185e575f80fd5b61186661161f565b825182811115611874575f80fd5b80840193505086601f840112611888575f80fd5b8251915061189861172083611800565b82815260059290921b830184019184810190888411156118b6575f80fd5b938501935b838510156118f557845173ffffffffffffffffffffffffffffffffffffffff811681146118e6575f80fd5b825293850193908501906118bb565b8252509695505050505050565b5f8060408385031215611913575f80fd5b825167ffffffffffffffff8082111561192a575f80fd5b818501915085601f83011261193d575f80fd5b8151602061194d61172083611697565b8281528882848701011115611960575f80fd5b828286018383015e5f81840183015287820151909650935082841115611984575f80fd5b838701935087601f850112611997575f80fd5b835192506119a761172084611800565b83815260059390931b84018101928181019250888411156119c6575f80fd5b938101935b838510156119e4578451835293810193918101916119cb565b80955050505050509250929050565b604081525f611a056040830185611756565b90508260208301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8060408385031215611a52575f80fd5b505080516020909101519092909150565b8082018082111561027c577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b828152604060208201525f6114586040830184611756565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0e740ef00f5310c910d210dc10e510ff10d211a411a411ff1276128310d210dc128310d210dc10dc10d210d210d210c910c910c910c9128d10d212b112ca10d2128d10d210d2128310dc10d210d210dc12d310d210dc12d310c910dc10dc10dc10dc10d210dc10dc12d310c910c912d310c910c912d310d210dc12d31283128312d312d310c912d312d312d310dc12ca"; /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405234801561000f575f80fd5b5060043610610064575f3560e01c80636f5aa28d1161004d5780636f5aa28d146100b0578063a3869e14146100de578063b92d7553146100fe575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b6100763660046114e2565b610106565b60405190151581526020015b60405180910390f35b6100a361009e366004611521565b610282565b604051610087919061158d565b6040517f0ae1ecb6c0f6314beaf4d4cd803ba14c900b0eecb1ecd39a52739cff9ae2c34a8152602001610087565b6100f16100ec3660046116dc565b610347565b60405161008791906117a2565b6100f1610468565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f6f5aa28d00000000000000000000000000000000000000000000000000000000148061019857507fffffffff0000000000000000000000000000000000000000000000000000000082167fa3869e1400000000000000000000000000000000000000000000000000000000145b806101e457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5514ca2000000000000000000000000000000000000000000000000000000000145b8061023057507fffffffff0000000000000000000000000000000000000000000000000000000082167fb92d755300000000000000000000000000000000000000000000000000000000145b8061027c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b604080516020810182526060815290517f5514ca2000000000000000000000000000000000000000000000000000000000815273ec923e3db8c8c90d7d42e49bf9d9135c540c255f90635514ca20906102e190869086906004016117b4565b5f60405180830381865afa1580156102fb573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103409190810190611823565b9392505050565b6040517f7764fd9c0000000000000000000000000000000000000000000000000000000081526060905f90819073ec923e3db8c8c90d7d42e49bf9d9135c540c255f90637764fd9c9061039e9087906004016117a2565b5f60405180830381865afa1580156103b8573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103fd9190810190611902565b915091505f610416838351905160406020909202010190565b60408051602083820181019092528281529192508101610437818686610477565b5f61045b6040518060c0016040528060908152602001611ae16090913987876104ba565b5091979650505050505050565b6060610472610879565b905090565b80600182510160200281015b8082101561049e578151855260209485019490910190610483565b50506104b56104aa8390565b848451602001610b4c565b505050565b60605f6104c684610b55565b85519091506020860190600290046104dd86610b6f565b8260020267ffffffffffffffff8111156104f9576104f96115f2565b6040519080825280601f01601f191660200182016040528015610523576020820181803683370190505b509350602084015f5b8481101561086d575f806105408a84610d8c565b915091508184538060018501536002840193505f61055f8b848c610daf565b90505f601861056e8d87610e16565b0390505f61057c8d87610e45565b600402820190505b808210156107b757815162ffffff811690601d81901a600f81169160049190911c90601c1a6114d88c82106106015760808801516040517fc8344ab1000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018e90526064015b60405180910390fd5b50600281028d015160f01c5f806106168a8885565b9150915085821461066a5760808a01516040517fddf56071000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018790526064016105f8565b8481146106ba5760808a01516040517ffc8b5603000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604481018690526064016105f8565b895182111561070c5760808a01518a516040517f2cab6bff00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018390526064016105f8565b8951829003808b5260408b0151111561076e5760808a01518a516040808d015190517f1bc5ab0f0000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915260448201526064016105f8565b89518101808b5260208b0151101561078857895160208b01525b600181111561079957895160408b01525b50505060808701805160010190525050506004929092019150610584565b6107c18d87610e5c565b8360200151146108155782602001516107da8e88610e5c565b6040517f4d9c18dc000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016105f8565b8251841461085c5782516040517f4689f0b30000000000000000000000000000000000000000000000000000000081526004810191909152602481018590526044016105f8565b50506001909301925061052c915050565b50505050509392505050565b60606114d85f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff168152602001610e748152602001610ef08152602001610f5381526020016110c981526020016110d281526020016110dc81526020016110e581526020016110ff81526020016110d281526020016111a481526020016111a481526020016111ff8152602001611276815260200161128381526020016110d281526020016110dc815260200161128381526020016110d281526020016110dc81526020016110dc81526020016110d281526020016110d281526020016110d281526020016110c981526020016110c981526020016110c981526020016110c9815260200161128d81526020016110d281526020016112b181526020016112ca81526020016110d2815260200161128d81526020016110d281526020016110d2815260200161128381526020016110dc81526020016110d281526020016110d281526020016110dc81526020016112d381526020016110d281526020016110dc81526020016112d381526020016110c981526020016110dc81526020016110dc81526020016110dc81526020016110dc81526020016110d281526020016110dc81526020016110dc81526020016112d381526020016110c981526020016110c981526020016112d381526020016110c981526020016110c981526020016112d381526020016110d281526020016110dc81526020016112d38152602001611283815260200161128381526020016112d381526020016112d381526020016110c981526020016112d381526020016112d381526020016112d381526020016110dc81526020016112ca815250905060608190506048815114610b3a5780516040517fc8b569010000000000000000000000000000000000000000000000000000000081526004810191909152602481018490526044016105f8565b610b43816112ec565b94505050505090565b8083835e505050565b5f81515f03610b6557505f919050565b50602001515f1a90565b5f610b7982610b55565b90508015610d4a5781516001600283020190811115610bc657826040517f17f4bc5e0000000000000000000000000000000000000000000000000000000081526004016105f891906117a2565b82516020828501810191850101602160027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860102860181019086015b808210610d0657815160f01c8481016004810185811115610c5157896040517e39ba560000000000000000000000000000000000000000000000000000000081526004016105f891906117a2565b81515f81901a90600181901a90600281901a9060031a80821180610c7457508281115b15610caf578d876040517feaf45f4f0000000000000000000000000000000000000000000000000000000081526004016105f89291906119f3565b505050600481028201878114610cf3578b6040517ffbb8027a0000000000000000000000000000000000000000000000000000000081526004016105f891906117a2565b8397506002870396505050505050610c03565b838314610d4157866040517fde67b29a0000000000000000000000000000000000000000000000000000000081526004016105f891906117a2565b50505050505050565b600182511115610d8857816040517fd013da5d0000000000000000000000000000000000000000000000000000000081526004016105f891906117a2565b5050565b5f805f610d998585610e16565b51600281901a9660039190911a95509350505050565b610de46040518060c001604052805f81526020015f81526020015f8152602001606081526020015f8152602001606081525090565b506040805160c081018252838152602081018490529081019290925260608201525f608082015260a081019190915290565b5f80610e2184610b55565b60020260010190505f610e34858561137c565b949091019093016020019392505050565b5f80610e518484610e16565b515f1a949350505050565b5f80610e688484610e16565b5160011a949350505050565b81515f90819061ffff8416908110610ecf57608085015185516040517feaa16f3300000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b8460400151811115610ee357604085018190525b505f946001945092505050565b6060820151515f90819061ffff8416908110610ee35760808501516060860151516040517feb78945400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b606082015180515f91829161ffff851691839183908110610f7657610f76611a14565b602002602001015190505f80610f8f839060a082901c90565b91509150610fbd827f18003f8e000000000000000000000000000000000000000000000000000000006113d2565b61100b576040517f23016c8900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016105f8565b6040517f40c04edc00000000000000000000000000000000000000000000000000000000815260048101829052600f601089901c81166024830181905260148a901c90911660448301819052909173ffffffffffffffffffffffffffffffffffffffff8516906340c04edc906064016040805180830381865afa158015611094573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110b89190611a41565b975097505050505050509250929050565b505f9160019150565b5060029160019150565b50600191829150565b5f806110f184846110ff565b506001958695509350505050565b5f8060ff83811690600885901c16808303611146576040517f46f0ca6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101006111538284611a63565b1115611195576040517f8abcdd3f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016105f8565b50600295600195509350505050565b5f8061ffff831660ff8111806111b8575080155b156111f2576040517fc1be16a1000000000000000000000000000000000000000000000000000000008152600481018290526024016105f8565b5060019485945092505050565b60a08201515f90819061ffff841690601485901c90839081906112229085610d8c565b915091508281101561126a576040517fff13710800000000000000000000000000000000000000000000000000000000815260048101829052602481018490526044016105f8565b50969095509350505050565b60101c600f169160019150565b5060039160019150565b5f80600f601084901c16806112a35760016112a5565b805b95600195509350505050565b5f80600f601084901c16600281116112a35760026112a5565b506002915f9150565b5f80600f601084901c16600181116112a35760026112a5565b60605f825160020267ffffffffffffffff81111561130c5761130c6115f2565b6040519080825280601f01601f191660200182016040528015611336576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156113705780518351861690851617815260209092019160020161134e565b50939695505050505050565b5f61138683610b55565b82106113c25781836040517ffcfaeff10000000000000000000000000000000000000000000000000000000081526004016105f8929190611a9b565b50600202016003015161ffff1690565b5f6113dc836113ed565b801561034057506103408383611467565b5f611418827f01ffc9a700000000000000000000000000000000000000000000000000000000611467565b15611460575f80611449847fffffffff0000000000000000000000000000000000000000000000000000000061148b565b91509150818015611458575080155b949350505050565b505f919050565b5f805f611474858561148b565b915091508180156114825750805b95945050505050565b7f01ffc9a7000000000000000000000000000000000000000000000000000000005f818152600483905290819060208260248188617530fa92505f511515601f3d11169150509250929050565b6114e0611ab3565b565b5f602082840312156114f2575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610340575f80fd5b5f8060208385031215611532575f80fd5b823567ffffffffffffffff80821115611549575f80fd5b818501915085601f83011261155c575f80fd5b81358181111561156a575f80fd5b86602082850101111561157b575f80fd5b60209290920196919550909350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b808310156115e757835173ffffffffffffffffffffffffffffffffffffffff1682529284019260019290920191908401906115b1565b509695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516020810167ffffffffffffffff81118282101715611642576116426115f2565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561168f5761168f6115f2565b604052919050565b5f67ffffffffffffffff8211156116b0576116b06115f2565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f602082840312156116ec575f80fd5b813567ffffffffffffffff811115611702575f80fd5b8201601f81018413611712575f80fd5b803561172561172082611697565b611648565b818152856020838501011115611739575f80fd5b816020840160208301375f91810160200191909152949350505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6103406020830184611756565b60208152816020820152818360408301375f818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b5f67ffffffffffffffff821115611819576118196115f2565b5060051b60200190565b5f6020808385031215611834575f80fd5b825167ffffffffffffffff8082111561184b575f80fd5b818501915082828703121561185e575f80fd5b61186661161f565b825182811115611874575f80fd5b80840193505086601f840112611888575f80fd5b8251915061189861172083611800565b82815260059290921b830184019184810190888411156118b6575f80fd5b938501935b838510156118f557845173ffffffffffffffffffffffffffffffffffffffff811681146118e6575f80fd5b825293850193908501906118bb565b8252509695505050505050565b5f8060408385031215611913575f80fd5b825167ffffffffffffffff8082111561192a575f80fd5b818501915085601f83011261193d575f80fd5b8151602061194d61172083611697565b8281528882848701011115611960575f80fd5b828286018383015e5f81840183015287820151909650935082841115611984575f80fd5b838701935087601f850112611997575f80fd5b835192506119a761172084611800565b83815260059390931b84018101928181019250888411156119c6575f80fd5b938101935b838510156119e4578451835293810193918101916119cb565b80955050505050509250929050565b604081525f611a056040830185611756565b90508260208301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8060408385031215611a52575f80fd5b505080516020909101519092909150565b8082018082111561027c577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b828152604060208201525f6114586040830184611756565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0e740ef00f5310c910d210dc10e510ff10d211a411a411ff1276128310d210dc128310d210dc10dc10d210d210d210c910c910c910c9128d10d212b112ca10d2128d10d210d2128310dc10d210d210dc12d310d210dc12d310c910dc10dc10dc10dc10d210dc10dc12d310c910c912d310c910c912d310d210dc12d31283128312d312d310c912d312d312d310dc12ca"; + hex"608060405234801561000f575f80fd5b5060043610610064575f3560e01c80636f5aa28d1161004d5780636f5aa28d146100b0578063a3869e14146100de578063b92d7553146100fe575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b6100763660046114e2565b610106565b60405190151581526020015b60405180910390f35b6100a361009e366004611521565b610282565b604051610087919061158d565b6040517f0ae1ecb6c0f6314beaf4d4cd803ba14c900b0eecb1ecd39a52739cff9ae2c34a8152602001610087565b6100f16100ec3660046116dc565b610347565b60405161008791906117a2565b6100f1610468565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f6f5aa28d00000000000000000000000000000000000000000000000000000000148061019857507fffffffff0000000000000000000000000000000000000000000000000000000082167fa3869e1400000000000000000000000000000000000000000000000000000000145b806101e457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5514ca2000000000000000000000000000000000000000000000000000000000145b8061023057507fffffffff0000000000000000000000000000000000000000000000000000000082167fb92d755300000000000000000000000000000000000000000000000000000000145b8061027c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b604080516020810182526060815290517f5514ca200000000000000000000000000000000000000000000000000000000081527325307b6a0437757c5fbd1ade52107b50324113fd90635514ca20906102e190869086906004016117b4565b5f60405180830381865afa1580156102fb573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103409190810190611823565b9392505050565b6040517f7764fd9c0000000000000000000000000000000000000000000000000000000081526060905f9081907325307b6a0437757c5fbd1ade52107b50324113fd90637764fd9c9061039e9087906004016117a2565b5f60405180830381865afa1580156103b8573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103fd9190810190611902565b915091505f610416838351905160406020909202010190565b60408051602083820181019092528281529192508101610437818686610477565b5f61045b6040518060c0016040528060908152602001611ae16090913987876104ba565b5091979650505050505050565b6060610472610879565b905090565b80600182510160200281015b8082101561049e578151855260209485019490910190610483565b50506104b56104aa8390565b848451602001610b4c565b505050565b60605f6104c684610b55565b85519091506020860190600290046104dd86610b6f565b8260020267ffffffffffffffff8111156104f9576104f96115f2565b6040519080825280601f01601f191660200182016040528015610523576020820181803683370190505b509350602084015f5b8481101561086d575f806105408a84610d8c565b915091508184538060018501536002840193505f61055f8b848c610daf565b90505f601861056e8d87610e16565b0390505f61057c8d87610e45565b600402820190505b808210156107b757815162ffffff811690601d81901a600f81169160049190911c90601c1a6114d88c82106106015760808801516040517fc8344ab1000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018e90526064015b60405180910390fd5b50600281028d015160f01c5f806106168a8885565b9150915085821461066a5760808a01516040517fddf56071000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604481018790526064016105f8565b8481146106ba5760808a01516040517ffc8b5603000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604481018690526064016105f8565b895182111561070c5760808a01518a516040517f2cab6bff00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018390526064016105f8565b8951829003808b5260408b0151111561076e5760808a01518a516040808d015190517f1bc5ab0f0000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915260448201526064016105f8565b89518101808b5260208b0151101561078857895160208b01525b600181111561079957895160408b01525b50505060808701805160010190525050506004929092019150610584565b6107c18d87610e5c565b8360200151146108155782602001516107da8e88610e5c565b6040517f4d9c18dc000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016105f8565b8251841461085c5782516040517f4689f0b30000000000000000000000000000000000000000000000000000000081526004810191909152602481018590526044016105f8565b50506001909301925061052c915050565b50505050509392505050565b60606114d85f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff168152602001610e748152602001610ef08152602001610f5381526020016110c981526020016110d281526020016110dc81526020016110e581526020016110ff81526020016110d281526020016111a481526020016111a481526020016111ff8152602001611276815260200161128381526020016110d281526020016110dc815260200161128381526020016110d281526020016110dc81526020016110dc81526020016110d281526020016110d281526020016110d281526020016110c981526020016110c981526020016110c981526020016110c9815260200161128d81526020016110d281526020016112b181526020016112ca81526020016110d2815260200161128d81526020016110d281526020016110d2815260200161128381526020016110dc81526020016110d281526020016110d281526020016110dc81526020016112d381526020016110d281526020016110dc81526020016112d381526020016110c981526020016110dc81526020016110dc81526020016110dc81526020016110dc81526020016110d281526020016110dc81526020016110dc81526020016112d381526020016110c981526020016110c981526020016112d381526020016110c981526020016110c981526020016112d381526020016110d281526020016110dc81526020016112d38152602001611283815260200161128381526020016112d381526020016112d381526020016110c981526020016112d381526020016112d381526020016112d381526020016110dc81526020016112ca815250905060608190506048815114610b3a5780516040517fc8b569010000000000000000000000000000000000000000000000000000000081526004810191909152602481018490526044016105f8565b610b43816112ec565b94505050505090565b8083835e505050565b5f81515f03610b6557505f919050565b50602001515f1a90565b5f610b7982610b55565b90508015610d4a5781516001600283020190811115610bc657826040517f17f4bc5e0000000000000000000000000000000000000000000000000000000081526004016105f891906117a2565b82516020828501810191850101602160027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860102860181019086015b808210610d0657815160f01c8481016004810185811115610c5157896040517e39ba560000000000000000000000000000000000000000000000000000000081526004016105f891906117a2565b81515f81901a90600181901a90600281901a9060031a80821180610c7457508281115b15610caf578d876040517feaf45f4f0000000000000000000000000000000000000000000000000000000081526004016105f89291906119f3565b505050600481028201878114610cf3578b6040517ffbb8027a0000000000000000000000000000000000000000000000000000000081526004016105f891906117a2565b8397506002870396505050505050610c03565b838314610d4157866040517fde67b29a0000000000000000000000000000000000000000000000000000000081526004016105f891906117a2565b50505050505050565b600182511115610d8857816040517fd013da5d0000000000000000000000000000000000000000000000000000000081526004016105f891906117a2565b5050565b5f805f610d998585610e16565b51600281901a9660039190911a95509350505050565b610de46040518060c001604052805f81526020015f81526020015f8152602001606081526020015f8152602001606081525090565b506040805160c081018252838152602081018490529081019290925260608201525f608082015260a081019190915290565b5f80610e2184610b55565b60020260010190505f610e34858561137c565b949091019093016020019392505050565b5f80610e518484610e16565b515f1a949350505050565b5f80610e688484610e16565b5160011a949350505050565b81515f90819061ffff8416908110610ecf57608085015185516040517feaa16f3300000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b8460400151811115610ee357604085018190525b505f946001945092505050565b6060820151515f90819061ffff8416908110610ee35760808501516060860151516040517feb78945400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604481018290526064016105f8565b606082015180515f91829161ffff851691839183908110610f7657610f76611a14565b602002602001015190505f80610f8f839060a082901c90565b91509150610fbd827f18003f8e000000000000000000000000000000000000000000000000000000006113d2565b61100b576040517f23016c8900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016105f8565b6040517f40c04edc00000000000000000000000000000000000000000000000000000000815260048101829052600f601089901c81166024830181905260148a901c90911660448301819052909173ffffffffffffffffffffffffffffffffffffffff8516906340c04edc906064016040805180830381865afa158015611094573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110b89190611a41565b975097505050505050509250929050565b505f9160019150565b5060029160019150565b50600191829150565b5f806110f184846110ff565b506001958695509350505050565b5f8060ff83811690600885901c16808303611146576040517f46f0ca6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101006111538284611a63565b1115611195576040517f8abcdd3f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016105f8565b50600295600195509350505050565b5f8061ffff831660ff8111806111b8575080155b156111f2576040517fc1be16a1000000000000000000000000000000000000000000000000000000008152600481018290526024016105f8565b5060019485945092505050565b60a08201515f90819061ffff841690601485901c90839081906112229085610d8c565b915091508281101561126a576040517fff13710800000000000000000000000000000000000000000000000000000000815260048101829052602481018490526044016105f8565b50969095509350505050565b60101c600f169160019150565b5060039160019150565b5f80600f601084901c16806112a35760016112a5565b805b95600195509350505050565b5f80600f601084901c16600281116112a35760026112a5565b506002915f9150565b5f80600f601084901c16600181116112a35760026112a5565b60605f825160020267ffffffffffffffff81111561130c5761130c6115f2565b6040519080825280601f01601f191660200182016040528015611336576020820181803683370190505b50905061ffff80196020850160208651028101600285015b818310156113705780518351861690851617815260209092019160020161134e565b50939695505050505050565b5f61138683610b55565b82106113c25781836040517ffcfaeff10000000000000000000000000000000000000000000000000000000081526004016105f8929190611a9b565b50600202016003015161ffff1690565b5f6113dc836113ed565b801561034057506103408383611467565b5f611418827f01ffc9a700000000000000000000000000000000000000000000000000000000611467565b15611460575f80611449847fffffffff0000000000000000000000000000000000000000000000000000000061148b565b91509150818015611458575080155b949350505050565b505f919050565b5f805f611474858561148b565b915091508180156114825750805b95945050505050565b7f01ffc9a7000000000000000000000000000000000000000000000000000000005f818152600483905290819060208260248188617530fa92505f511515601f3d11169150509250929050565b6114e0611ab3565b565b5f602082840312156114f2575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610340575f80fd5b5f8060208385031215611532575f80fd5b823567ffffffffffffffff80821115611549575f80fd5b818501915085601f83011261155c575f80fd5b81358181111561156a575f80fd5b86602082850101111561157b575f80fd5b60209290920196919550909350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b808310156115e757835173ffffffffffffffffffffffffffffffffffffffff1682529284019260019290920191908401906115b1565b509695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516020810167ffffffffffffffff81118282101715611642576116426115f2565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561168f5761168f6115f2565b604052919050565b5f67ffffffffffffffff8211156116b0576116b06115f2565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f602082840312156116ec575f80fd5b813567ffffffffffffffff811115611702575f80fd5b8201601f81018413611712575f80fd5b803561172561172082611697565b611648565b818152856020838501011115611739575f80fd5b816020840160208301375f91810160200191909152949350505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6103406020830184611756565b60208152816020820152818360408301375f818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b5f67ffffffffffffffff821115611819576118196115f2565b5060051b60200190565b5f6020808385031215611834575f80fd5b825167ffffffffffffffff8082111561184b575f80fd5b818501915082828703121561185e575f80fd5b61186661161f565b825182811115611874575f80fd5b80840193505086601f840112611888575f80fd5b8251915061189861172083611800565b82815260059290921b830184019184810190888411156118b6575f80fd5b938501935b838510156118f557845173ffffffffffffffffffffffffffffffffffffffff811681146118e6575f80fd5b825293850193908501906118bb565b8252509695505050505050565b5f8060408385031215611913575f80fd5b825167ffffffffffffffff8082111561192a575f80fd5b818501915085601f83011261193d575f80fd5b8151602061194d61172083611697565b8281528882848701011115611960575f80fd5b828286018383015e5f81840183015287820151909650935082841115611984575f80fd5b838701935087601f850112611997575f80fd5b835192506119a761172084611800565b83815260059390931b84018101928181019250888411156119c6575f80fd5b938101935b838510156119e4578451835293810193918101916119cb565b80955050505050509250929050565b604081525f611a056040830185611756565b90508260208301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8060408385031215611a52575f80fd5b505080516020909101519092909150565b8082018082111561027c577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b828152604060208201525f6114586040830184611756565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0e740ef00f5310c910d210dc10e510ff10d211a411a411ff1276128310d210dc128310d210dc10dc10d210d210d210c910c910c910c9128d10d212b112ca10d2128d10d210d2128310dc10d210d210dc12d310d210dc12d310c910dc10dc10dc10dc10d210dc10dc12d310c910c912d310c910c912d310d210dc12d31283128312d312d310c912d312d312d310dc12ca"; /// @dev The hash of the meta that describes the contract. bytes32 constant DESCRIBED_BY_META_HASH = bytes32(0x0ae1ecb6c0f6314beaf4d4cd803ba14c900b0eecb1ecd39a52739cff9ae2c34a); diff --git a/src/generated/RainlangParser.pointers.sol b/src/generated/RainlangParser.pointers.sol index 7ef3b0a64..c8dd7a4c7 100644 --- a/src/generated/RainlangParser.pointers.sol +++ b/src/generated/RainlangParser.pointers.sol @@ -10,19 +10,19 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x87cd76c4ba9fc14f432880e126d67865e2ca86a7a3392fbf63c76f52ede7c76a); +bytes32 constant BYTECODE_HASH = bytes32(0xe053dc6b2923dc37af7f595486db3c9211fb9b6156d38d4a56a375c878809df9); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0xec923E3db8c8c90d7d42E49bF9D9135C540c255F); +address constant DEPLOYED_ADDRESS = address(0x25307B6A0437757C5fbd1AdE52107b50324113fD); /// @dev The creation bytecode of the contract. bytes constant CREATION_CODE = - hex"6080604052348015600e575f80fd5b50614f7b8061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c80637764fd9c1161004d5780637764fd9c146100b0578063ccf44775146100d1578063d6d8c9a8146100e6575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b6100763660046146ac565b6100ee565b60405190151581526020015b60405180910390f35b6100a361009e3660046147ac565b610186565b6040516100879190614826565b6100c36100be3660046147ac565b61023e565b6040516100879291906148d7565b6100d9610266565b604051610087919061492c565b6100d9610275565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f1a2c8edd00000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6040805160208101909152606081525f6101e3836101a261027f565b6101aa6102a2565b60408051808201909152600881527f1a2e1cf21d321d8f00000000000000000000000000000000000000000000000060208201526102c2565b90505f6020840190505f6101fa8580510160200190565b90506102078383836104b4565b9150610214838383610516565b9150604051806020016040528061022a8561069f565b905293505050506102396106fd565b919050565b606080610255610250846101a261027f565b610742565b915091506102616106fd565b915091565b606061027061088e565b905090565b60606102706108db565b6060604051806101a001604052806101638152602001614d886101639139905090565b60606040518060c0016040528060908152602001614eeb60909139905090565b61034f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b5f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f801b81526020015f8152602001600481526020015f81526020015f81526020015f81526020015f801b8152602001848152602001858152602001600467ffffffffffffffff8111156103d5576103d56146eb565b6040519080825280602002602001820160405280156103fe578160200160208202803683370190505b5081525f602080830182905260408084018b905260609384018a90528051601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016828152808301825283517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001681178452855290840182905283018190529082018190526080820181905260a082018190526101208201819052610140820181905261020082015290505b95945050505050565b5f5b8183101561050c57825160015f9190911a1b6401000026008116156104e7576104e0858585610b9c565b9350610506565b65800000000000811615610500576104e0858585610be0565b5061050c565b506104b6565b50815b9392505050565b815160408051808201909152601081527f7573696e672d776f7264732d66726f6d0000000000000000000000000000000060208201525f91906105589061493e565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000821614610589578391505061050f565b506010830192508183106106005761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517fe3e4992d0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b60405180910390fd5b825160015f91821a1b90640100002600821690036106475761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016105c2565b836001019350505b8183101561050c576106628484846104b4565b92508183101561050c575f80610679868686610da8565b90965090925090508161068d57505061050c565b610698868683610f38565b505061064f565b60c08101516040516060919073ffffffffffffffffffffffffffffffffffffffff602082015f5b84156106e757848316825260f09490941c51936020909101906001016106c6565b83526040526106f582610fd5565b509392505050565b60405162010000811061073f576040517f766c065f000000000000000000000000000000000000000000000000000000008152600481018290526024016105f7565b50565b6060805f836102200151511115610872575f61076384610220015160200190565b90505f61077885610220015180510160200190565b90506107858583836104b4565b9150610792858383610516565b91505b808210156107c9576107a88583836104b4565b91506107b5858383611023565b91506107c285838361137c565b9150610795565b808214610802576040517f7d565df600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101008501516008161561086f5761022085015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517ff06f54cf0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b50505b61088561087e84611891565b84906119c6565b91509150915091565b6040805160a0810182526004808252611a2e6020830152611cf292820192909252611d32606082810191909152611d8f608083015291908190805b6108d281611f12565b94505050505090565b60606146a25f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff168152602001611fa28152602001611fa28152602001611fa2815260200161206e81526020016121828152602001612182815260200161206e815260200161206e81526020016121828152602001611fa28152602001611fa28152602001611fa28152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152509050606081905060488151146108c95780516040517fc8b569010000000000000000000000000000000000000000000000000000000081526004810191909152602481018490526044016105f7565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690525f610bd883836401000026006121c4565b949350505050565b6101008301805160011790525f60048301821015610c585761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517f25a764680000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b825160f01c612f2a8114610cc55761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f3e47169c0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b6003840193505f5b83851015610d6a5784515f1a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd18101610d5e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86015160f01c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5d18101610d5c57505050600193840193610d6a565b505b85600101955050610ccd565b80610d9e5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001610c23565b5092949350505050565b81515f90819081908190600181831a1b6703ff200000000000811615610ead5786610dd48960016149b0565b1015610ea457600182811a1b7ffffffffffffffffffffffffffffffffffeffffffffffffffffff00000000000082821701610e11575f9350610e9e565b7ffffffffffffffffffffffffffffffffffffffffffeffffffffff00000000000082821701610e99576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f75c28ff90000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b600193505b50610ef2565b60019250610ef2565b640400000000811615610ec35760029250610ef2565b6b080000000000000000000000811615610ee05760039250610ef2565b505f9450869350849250610f2f915050565b505f9050610f20888888610f1883876101a09190910151600291820201015161ffff1690565b63ffffffff16565b90975060019550879450925050505b93509350939050565b73ffffffffffffffffffffffffffffffffffffffff811115610fb35761022083015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f9d7e517e0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b60c09092018051604080516020810190915290815260f01b9290921790915250565b60208101602082510282015b8082101561101e5781518151835281526020909101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001610fe1565b505050565b5f5b8183101561050c5782515f90600190821a1b6f07fffffe80000000000000000000000081161561123a57610100860151600116156110bd5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517f5520a5170000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b6f07fffffe00000000000000000000000081161561116e576110f085856f07fffffe0000000003ff2000000000006121ed565b90955091505f61110087846122bc565b50905080156111685761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f53e6feba0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b5061118f565b61118c60018601856f07fffffe0000000003ff2000000000006121c4565b94505b856040015160ff1660ff14806111ac57508560a0015160ff1660ff145b156112105761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f382063410000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b604086018051600190810190915260a0870180519091019052610100860180516009179052611375565b64010000260081161561128c5761125a60018601856401000026006121c4565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690529450611375565b6704000000000000008116156112d8575050610100840180516008177ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690526001929092019161050c565b658000000000008116156113465761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517fedad0c580000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001611088565b5050611025565b5f5b8183101561050c5782515f90600190821a1b6f07fffffe00000000000000000000000081161561157a57610100860151600116156114165761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517f4e803df60000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b8461143281866f07fffffe0000000003ff2000000000006121ed565b80945081975050505f8061144b89610240015186612337565b91509150811561148c5761146089898961240b565b97505f61146d8a83612630565b905061147a8a8383612656565b50610100890180516002179052611566565b611496898661283b565b909250905081156114ba576114ac895f83612656565b6114b5896128b5565b611566565b5f6060848a03600581016114cf8d8d8d61240b565b9b508c6101e0015151602002602001810190505f60059050604051935060208201840160405282818501528184528394506115178860056115108760200190565b018561291b565b5050506101e08b015180516001019061154a906115448361153b8680510160200190565b90602002900390565b83612924565b506115578b60ff84612656565b50506101008901805160021790525b50505061010086018051600117905261188a565b6101008601516002161561167a576501000000000081165f036115f65761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f23b5c6ea0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b606086810180515f1a6003019190829053603b821115611642576040517f6232f2d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050610100860180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc16905260019094019361188a565b65020000000000811615611734576060868101515f90811a91908290036116fa5761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f7f9db5420000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b808801600383039250828153826004820101515f1a8360028301015160f01c6001015350611727886128b5565b505060019094019361188a565b6401000026008116156117865761175460018601856401000026006121c4565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe169052945061188a565b6b0800000003ff2004000000008116156117c1576117a5868686612930565b94506117b0866128b5565b61010086018051600117905261188a565b651000000000008116156117e6576117d98686612a38565b505060019092019161050c565b67080000000000000081161561181e576118008686612a38565b61180986612dae565b5050600461010085015260019092019161050c565b6580000000000081161561185b5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001611311565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016113e1565b505061137e565b60e08101518151516060919060f082901c90602081146118dd576040517f858f2dcf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051935060208401601083045f8183535060016008850483018101928391015f80805b8881101561193a5789811c61ffff81165163ffff0000601092831b16811760e01b8786015284019360f08390031b929092179101611901565b50825117909152878203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08181018952908801601f01166040525f5b828110156119ba576002810288016003015161ffff90811683018051602060f082901c019260e09190911c16906119af83828461291b565b505050600101611977565b50505050505050919050565b6060805f6119d3846130dc565b90505f5b81811015611a16575f6119ea86836130f6565b60040190505f6119fa8784613125565b60040282019050611a0c88838361313c565b50506001016119d7565b5083611a21866133fc565b92509250505b9250929050565b5f80808080611a3e888888613471565b985090925090508181036040811115611ab05761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517fff2f59490000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b805f03611b165761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517fc75cd5090000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b60028106600103611b805761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517fd76d9b570000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b6001820397505f5b838910611ce15788515f90811a906001821b906703ff000000000000821615611bd457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd08201611cab565b6c7e000000000000000000000000821615611c1257507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa98201611cab565b687e0000000000000000821615611c4c57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc98201611cab565b6102208d01518c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f69f1e3e60000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909b019a831b96909617955050600401611b88565b50509350909150505b935093915050565b5f805f805f80611d0288886134c1565b92965090945092509050611d17898486613904565b82611d228383613966565b9550955050505050935093915050565b5f808080611d418787876139b8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301805184840382529199509294509092505f91611d7f81613b2e565b9190529698969750505050505050565b6001909101905f8083611db381856fffffffffdffffffffffffffeffffd9ff6121c4565b945084818103611e1c5761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517ff73a1aa80000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b611e27878787610b9c565b955085611e4581876fffffffffdfffffffffffffffffffffff6121c4565b965086868110611eaf5761022089015188037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517fc4b191350000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b875160015f91821a1b906b20000000000000000000000082169003611efd576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001611e7a565b5060019097019687611d228a86868686613b5a565b60605f825160020267ffffffffffffffff811115611f3257611f326146eb565b6040519080825280601f01601f191660200182016040528015611f5c576020820181803683370190505b50905061ffff80196020850160208651028101600285015b81831015611f9657805183518616908516178152602090920191600201611f74565b50939695505050505050565b5f815160010361202d575060208101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b60e082901d5f611fe5838383613cfc565b905061ffff811115612023576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250610239915050565b81515f0361203c57505f919050565b6040517f1ac6690800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f815160020361214657602082015160408301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d5f6120b5838383613cfc565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b935060e085901d925090505f6120ee848483613cfc565b905060ff8211806120ff575060ff81115b15612136576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60081b1794506102399350505050565b60028251101561203c576040517ff16066b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81515f146121bd576040517f9f16b02000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505f919050565b5f5b5f82600186515f1a1b161183851016156121e5576001840193506121c6565b509192915050565b5f8080600181878703602081116122045780612207565b60205b915050875192505b8519600184841a1b1615818310161561222d5760018201915061220f565b9681019660208290036008810293841c90931b926122af57604080516020810185905201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fe47fe8b70000000000000000000000000000000000000000000000000000000082526105f79160040161492c565b5095969095509350505050565b5f806122c8848461283b565b909250905081611a275750610120830180515f93845260209384902060408051928352948201855293909401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909316601084901b62ff00001617909317909252909160ff90911660010190565b600182810180515f928392600560ff93909316602102870192830192909101835b818310156123fc5760018301516021909301805190935f90819060ff168180612381838e613d58565b915091508186165f036123a3575f809b509b5050505050505050505050611a27565b5f876123b3600185038916613d83565b016004028b015195505062ffffff90811693508416830391506123e79050575060019750601c1a9550611a27945050505050565b6123f083613d83565b84019350505050612358565b505f9788975095505050505050565b81516101e08401515f80825291600190831a1b907ffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000008201610d9e5761244f856149f0565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe169052805190955060015f91821a1b9250805b858710156125f057865160015f9190911a1b93506401000026008416156124bd576124b6888888610b9c565b965061248a565b6740000000000000008416156124e1576124d6876149f0565b9650600190506125f0565b6001886101000151165f0361259057600482036125575761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f8c9fdbb30000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b5f612563898989613e5b565b60208581028701018190526101008b01805160011790529098509050612588836149f0565b92505061248a565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517f722cd24a0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b806126245761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016125bb565b50905250919392505050565b6101c08201516002828102820101516101e08401515f9261ffff90921691906104ab9083565b61265f83613e83565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb1660081790526020808401515f90811a8501602101805190911a60ff8114929190600181018253505081156126e8576040517f8092d1ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050825180516060808601515f90811a87016061018051939461ffff8616949093921a60ff81149291600886048503601c0191600181018253505f60038201537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe30180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016909117905281156127ab576040517f3abd0c5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050602090920183821b176018820185901b178083529160e08290036128335760408051601083901b6020908117601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016918252810190915281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000168117825286525b505050505050565b6101208201516101408301515f8381526020808220919384939290911c91600160ff84161b808216156128a05761ffff83165b801561289e578360201c8503612891576001965061ffff8460101c16955061289e565b51925061ffff831661286e565b505b17610140909601959095525090939092509050565b6060818101515f90811a919082900361101e57602083810180515f1a600101919082815350603f8210612914576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b8083835e505050565b6020810283835e505050565b5f808061293e868686610da8565b90965092509050806129aa5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517fb0e4e5b30000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b5f806129b584613f0f565b61018089015116156129f65761016088015160101c5b80158015906129d8575082155b156129f4576020810151905190851492506001909101906129cb565b505b61016088015161ffff16612a1c600184612a105782612a14565b8383035b8b9190612656565b5081612a2c57612a2c8885613f26565b50949695505050505050565b6060828101515f1a908115612aa65761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f6fb11cdc0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b5050612ab182613e83565b61010082018051600416600890811790915260a0830151602084015160ff8083169360f89290921c9290911c1681035f819003612b81576004856101000151165f03612b565761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517fab1d3ea70000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b90820160f881901b6020860152610200850151909190612b769084613f78565b610200860152612c58565b6001811115612c585780831015612bf15761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f78ef27820000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b80831115612c585761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f43168e680000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b8082036001016020601083028101905b81811015612d9a5760a08801516020848a0181015191831c61ffff16915f1a9060015b828111612d885760208406601c03612ca457925160f01c925b83516102008d015160019190911a90612cbd9082613ffc565b6102008e01525f8285148015612cd35750896001145b612cde576001612ce0565b8b5b6102008f0151909150612cf39082614042565b6102008f0152600f811180612d085750600f82115b15612d6c576102208e01518d037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f7ea1869f0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b818160041b176001870153505060049390930192600101612c8b565b50506001909401935050601001612c68565b5050505060081b60a0909301929092525050565b60e081015160208083015160f083811c925f9290921a6001019190839003612e02576040517fa806284100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610200850151855180515f928392909160219060101c61ffff165b8015612e3457805190925060101c61ffff16612e1d565b506040518a82018051919650601c8401939160049160248901915f90811a805b8d831015612f195760048202860195506004878a03045b80821115612e8957965161ffff16601c810199509690036007612e6b565b506004810298899003805186529894909401938103865b6007821115612ee5575160101c61ffff1680518652601c909501947ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff990910190612ea0565b8115612f00575160101c61ffff168051865260048202909501945b50505060019182018051909291909101905f1a80612e54565b50505082895250600488810180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9290940491909101601881901b8817939093179052601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660405260ff109450508315612fe5576040517fe972437e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ff26001808a1b614a27565b891685891b60f06130048b60106149b0565b901b171760e08b01526101008a0180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7169052604080516020601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681815280820183525f80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001682178152908d52908c01819052908b0181905260608b0181905260808b0181905260a08b018190526101208b018190526101408b018190526102008b015250505050505050505050565b5f81515f036130ec57505f919050565b50602001515f1a90565b5f80613101846130dc565b60020260010190505f61311485856140b5565b949091019093016020019392505050565b5f8061313184846130f6565b515f1a949350505050565b8082101561101e5781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016133765760c08401515b80156133745760f081901c5161016086015161ffff60e085901c1660208101805160089390931b62ffff0016600187901a1760e81b7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909316929092179091526040517f570c7a630000000000000000000000000000000000000000000000000000000081529192915f908190819073ffffffffffffffffffffffffffffffffffffffff86169063570c7a639061322f90879060040161492c565b5f60405180830381865afa158015613249573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261328e9190810190614ac6565b925092509250821561336a5781516004146132d757816040517fbe2d187d0000000000000000000000000000000000000000000000000000000081526004016105f7919061492c565b60208201517fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff88161789525f5b815181101561335f5761335782828151811061334057613340614b73565b60200260200101518c613f2690919063ffffffff16565b600101613322565b505050505050613374565b5050505050613177565b505b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016133f057606061ffff8260e01c1690505f6003820152600581019050806040517faedfba2f0000000000000000000000000000000000000000000000000000000081526004016105f7919061492c565b5060048201915061313c565b6101608101516040805161ffff8316808252602080820283019081019093529092909160109190911c90835b808211156134685760208301518252915161ffff16917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090910190613428565b50505050919050565b5f8080806134808660026149b0565b9050806c7e0000007e03ff0000000000005b86821081600184515f1a1b16151516156134b157600182019150613492565b5090979096508695509350505050565b5f8281806134d68386652000000000006121c4565b925085831415836134f081886703ff0000000000006121c4565b945080850361352a57507f34bd20690000000000000000000000000000000000000000000000000000000094505f92508291506138fb9050565b5f806135368a8861410b565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613574575095505f93508392506138fb915050565b86519095506540000000000060015f9290921a9190911b16151588871016915050801561380357506001909301925f846135b781896703ff0000000000006121c4565b95508086036135f257507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f93508392506138fb915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b660100000000000016151516600103613661577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016135f4565b8181146136b8575f80613674848461410b565b90925090507fffffffff000000000000000000000000000000000000000000000000000000008216156136b4575097505f95508594506138fb9350505050565b9350505b5f8312156136f357507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f94508493506138fb92505050565b83156136ff57825f0392505b80820394505f85131561373f57507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f94508493506138fb92505050565b855f0361374e57829550613800565b5f859003604381111561378f57507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f95508594506138fb9350505050565b600a0a8681025f888383816137a6576137a66149c3565b0514159050601b82900b82141581806137bc5750805b156137f857507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f98508897506138fb9650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b1615158786101680156138ec5760019095019485613843818a652000000000006121c4565b965086613859818b6703ff0000000000006121c4565b975080880361389657507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f95508594506138fb9350505050565b505f806138a3838a61410b565b90925090507fffffffff000000000000000000000000000000000000000000000000000000008216156138e3575097505f95508594506138fb9350505050565b95860195925050505b845f036138f7575f93505b5050505b92959194509250565b7fffffffff0000000000000000000000000000000000000000000000000000000081161561101e576102208301515f9083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0019050815f528060045260245ffd5b5f805f6139738585614235565b91509150806106f5576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016105f7565b5f80806001850181806f7ffffffffffffffffffffffb0000000081807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b8b0301602080821015613a065750805b875193505b84600185851a1b1615158184101615613a2957600183019250613a0b565b505080602003613a92576102208c01518b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f30515bda0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b85810180519095505f1a6001811b640400000000161580613ab25750858b145b15613b16576102208d015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f04022fbf0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b50949b939a505060018a019850919650505050505050565b5f80601f90505f60e09050818451168082175f528060208601600183016020035e50505f519392505050565b5f60608186860361ffff811115613ba0576040517fb6da789c000000000000000000000000000000000000000000000000000000008152600481018290526024016105f7565b604080516041888803848101838101929092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690935260028281018590520181529350602284019250613bf689848461291b565b613c03878385018361291b565b50505060c08701515b8015613ccd5760f081901c516040517fc6c0cbb60000000000000000000000000000000000000000000000000000000081529091905f90819073ffffffffffffffffffffffffffffffffffffffff84169063c6c0cbb690613c7190889060040161492c565b6040805180830381865afa158015613c8b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613caf9190614ba0565b915091508115613cc55794506104ab9350505050565b505050613c0c565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001612975565b5f805f613d0a86868661433b565b9150915080613d4f576040517f05e4767800000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016105f7565b50949350505050565b5f80825f528360205360215f2090506001815f1a1b915062ffffff8116611a27575060019250929050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613db45750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f805f805f613e6b888888610da8565b9250925092508215613ccd579093509150611cea9050565b8051602080830180515f90811a8086016021015160a0939190831a613ed55785518488018051600861ffff909316929092046020038801601e83901a840360010160100290811b909217905260f01092505b50508015612914576040517f5b1a42d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f613f1c61010083614bca565b6001901b92915050565b6101608201805160408051808201909152601091821c808252602082018590528351600161ffff909116019282901b92909217909252613f6583613f0f565b6101809094018051909417909352505050565b5f613f838383614042565b925060ff600884901c8116830190811115613fca576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff841660089190911b17905092915050565b5f60ff83168281101561403b576040517f23b49a2a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050900390565b5f60ff808416830190600885901c811690601086901c90831115614092576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8083111561409d5750815b601081901b600883901b841717935050505092915050565b5f6140bf836130dc565b82106140fb5781836040517ffcfaeff10000000000000000000000000000000000000000000000000000000081526004016105f7929190614c02565b50600202016003015161ffff1690565b81515f90819065200000000000600191831a9190911b161515838510168085019082806141388488614487565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615614173575093505f9250611a27915050565b825f036141d6577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116141a7575f6141c9565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95509350611a2792505050565b7f80000000000000000000000000000000000000000000000000000000000000008111614203575f614225565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f601b83900b8314838382614299577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561427957620186a0860595506005850194505b8586601b0b1461429457600a86059550846001019450614279565b6142af565b855f036142af57505f925060019150611a279050565b848560030b1461430b575f8512156142cf57505f9250829150611a279050565b6040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016105f7565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f851215614381576040517f4a7d166b00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016105f7565b845f0361439357505f90506001611cea565b8460ff84168501858112156143de576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016105f7565b5f805f831215614448577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb383121561441f575f809550955050505050611cea565b825f03600a0a9150818481614436576144366149c3565b0495505084029091149150611cea9050565b5f8313156144775761445b83600a614d38565b91506144678285614d43565b955060019450611cea9350505050565b8360019550955050505050611cea565b5f808284106144ba57507f34bd20690000000000000000000000000000000000000000000000000000000090505f611a27565b835f036144f3576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b87821015801561452b5750604d83105b1561456e57815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a859003020161451b565b8782106146945781515f1a84900360018111156145b657507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611a279350505050565b600a84900a81028281018311156145f957507f0fdc26350000000000000000000000000000000000000000000000000000000096505f9550611a27945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b8782106146945781515f1a6030811461466957507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611a279350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910190614625565b5f9890975095505050505050565b6146aa614d5a565b565b5f602082840312156146bc575f80fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461050f575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561475f5761475f6146eb565b604052919050565b5f67ffffffffffffffff821115614780576147806146eb565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f602082840312156147bc575f80fd5b813567ffffffffffffffff8111156147d2575f80fd5b8201601f810184136147e2575f80fd5b80356147f56147f082614767565b614718565b818152856020838501011115614809575f80fd5b816020840160208301375f91810160200191909152949350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b8083101561488057835173ffffffffffffffffffffffffffffffffffffffff16825292840192600192909201919084019061484a565b509695505050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b604081525f6148e9604083018561488b565b8281036020848101919091528451808352858201928201905f5b8181101561491f57845183529383019391830191600101614903565b5090979650505050505050565b602081525f61050f602083018461488b565b8051602080830151919081101561497d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561018057610180614983565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a2057614a20614983565b5060010190565b8181038181111561018057610180614983565b80518015158114610239575f80fd5b5f82601f830112614a58575f80fd5b8151602067ffffffffffffffff821115614a7457614a746146eb565b8160051b614a83828201614718565b9283528481018201928281019087851115614a9c575f80fd5b83870192505b84831015614abb57825182529183019190830190614aa2565b979650505050505050565b5f805f60608486031215614ad8575f80fd5b614ae184614a3a565b9250602084015167ffffffffffffffff80821115614afd575f80fd5b818601915086601f830112614b10575f80fd5b8151614b1e6147f082614767565b818152886020838601011115614b32575f80fd5b8160208501602083015e5f6020838301015280955050506040860151915080821115614b5c575f80fd5b50614b6986828701614a49565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8060408385031215614bb1575f80fd5b614bba83614a3a565b9150602083015190509250929050565b5f82614bfd577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500690565b828152604060208201525f610bd8604083018461488b565b600181815b80851115614c7357817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115614c5957614c59614983565b80851615614c6657918102915b93841c9390800290614c1f565b509250929050565b5f82614c8957506001610180565b81614c9557505f610180565b8160018114614cab5760028114614cb557614cd1565b6001915050610180565b60ff841115614cc657614cc6614983565b50506001821b610180565b5060208310610133831016604e8410600b8410161715614cf4575081810a610180565b614cfe8383614c1a565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115614d3057614d30614983565b029392505050565b5f61050f8383614c7b565b808202811582820484141761018057610180614983565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0288400100420b0280046b0641220186adb8a044003012020f2a880521281ac8811a000000000000000000080000000000100000000000000002000000000000000000290ea98a3a10f9c53927bda61c6395ad0e9fb4a8075dbeaf2d313e9e09b06d681dfe49062ce21ac13e83a6cc2ad2d2123422c3e0052f369e1f27267220a0a68d2f357696465d217b131120880f24f4a8242f1af53f41f7290afa3e8638acf3d13397e9fd00443a453b406bb547b9059d25a3cd1e11d0c3260b15eb4d16fc94274427bc412baf2cc2321b8f630dca9efe403ce35f1400684845c291e3425d68b13d5f9a151eb98c15239cd9c10c1f698235c8d3843c08d579273459d41a2c9ff617a5b2cd15c0031810f621af127ba34c26bb6c4137b2ad3d1b73563d0210215f36aa563921098e690457fb180376e752066a470128f11de101fcc60522de7ddd183d3d6d4196c37031cba2872e7b3af5304eee7219a8093543082b5f0801f5a51fa21fa21fa2206e21822182206e206e21821fa21fa21fa2218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182"; + hex"6080604052348015600e575f80fd5b50614f7b8061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c80637764fd9c1161004d5780637764fd9c146100b0578063ccf44775146100d1578063d6d8c9a8146100e6575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b6100763660046146ac565b6100ee565b60405190151581526020015b60405180910390f35b6100a361009e3660046147ac565b610186565b6040516100879190614826565b6100c36100be3660046147ac565b61023e565b6040516100879291906148d7565b6100d9610266565b604051610087919061492c565b6100d9610275565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f1a2c8edd00000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6040805160208101909152606081525f6101e3836101a261027f565b6101aa6102a2565b60408051808201909152600881527f1a2e1cf21d321d8f00000000000000000000000000000000000000000000000060208201526102c2565b90505f6020840190505f6101fa8580510160200190565b90506102078383836104b4565b9150610214838383610516565b9150604051806020016040528061022a8561069f565b905293505050506102396106fd565b919050565b606080610255610250846101a261027f565b610742565b915091506102616106fd565b915091565b606061027061088e565b905090565b60606102706108db565b6060604051806101a001604052806101638152602001614d886101639139905090565b60606040518060c0016040528060908152602001614eeb60909139905090565b61034f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b5f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f801b81526020015f8152602001600481526020015f81526020015f81526020015f81526020015f801b8152602001848152602001858152602001600467ffffffffffffffff8111156103d5576103d56146eb565b6040519080825280602002602001820160405280156103fe578160200160208202803683370190505b5081525f602080830182905260408084018b905260609384018a90528051601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016828152808301825283517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001681178452855290840182905283018190529082018190526080820181905260a082018190526101208201819052610140820181905261020082015290505b95945050505050565b5f5b8183101561050c57825160015f9190911a1b6401000026008116156104e7576104e0858585610b9c565b9350610506565b65800000000000811615610500576104e0858585610be0565b5061050c565b506104b6565b50815b9392505050565b815160408051808201909152601081527f7573696e672d776f7264732d66726f6d0000000000000000000000000000000060208201525f91906105589061493e565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000821614610589578391505061050f565b506010830192508183106106005761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517fe3e4992d0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b60405180910390fd5b825160015f91821a1b90640100002600821690036106475761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016105c2565b836001019350505b8183101561050c576106628484846104b4565b92508183101561050c575f80610679868686610da8565b90965090925090508161068d57505061050c565b610698868683610f38565b505061064f565b60c08101516040516060919073ffffffffffffffffffffffffffffffffffffffff602082015f5b84156106e757848316825260a09490941c51936020909101906001016106c6565b83526040526106f582610fd5565b509392505050565b60405162010000811061073f576040517f766c065f000000000000000000000000000000000000000000000000000000008152600481018290526024016105f7565b50565b6060805f836102200151511115610872575f61076384610220015160200190565b90505f61077885610220015180510160200190565b90506107858583836104b4565b9150610792858383610516565b91505b808210156107c9576107a88583836104b4565b91506107b5858383611023565b91506107c285838361137c565b9150610795565b808214610802576040517f7d565df600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101008501516008161561086f5761022085015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517ff06f54cf0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b50505b61088561087e84611891565b84906119c6565b91509150915091565b6040805160a0810182526004808252611a2e6020830152611cf292820192909252611d32606082810191909152611d8f608083015291908190805b6108d281611f12565b94505050505090565b60606146a25f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff168152602001611fa28152602001611fa28152602001611fa2815260200161206e81526020016121828152602001612182815260200161206e815260200161206e81526020016121828152602001611fa28152602001611fa28152602001611fa28152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152509050606081905060488151146108c95780516040517fc8b569010000000000000000000000000000000000000000000000000000000081526004810191909152602481018490526044016105f7565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690525f610bd883836401000026006121c4565b949350505050565b6101008301805160011790525f60048301821015610c585761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517f25a764680000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b825160f01c612f2a8114610cc55761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f3e47169c0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b6003840193505f5b83851015610d6a5784515f1a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd18101610d5e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86015160f01c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5d18101610d5c57505050600193840193610d6a565b505b85600101955050610ccd565b80610d9e5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001610c23565b5092949350505050565b81515f90819081908190600181831a1b6703ff200000000000811615610ead5786610dd48960016149b0565b1015610ea457600182811a1b7ffffffffffffffffffffffffffffffffffeffffffffffffffffff00000000000082821701610e11575f9350610e9e565b7ffffffffffffffffffffffffffffffffffffffffffeffffffffff00000000000082821701610e99576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f75c28ff90000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b600193505b50610ef2565b60019250610ef2565b640400000000811615610ec35760029250610ef2565b6b080000000000000000000000811615610ee05760039250610ef2565b505f9450869350849250610f2f915050565b505f9050610f20888888610f1883876101a09190910151600291820201015161ffff1690565b63ffffffff16565b90975060019550879450925050505b93509350939050565b73ffffffffffffffffffffffffffffffffffffffff811115610fb35761022083015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f9d7e517e0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b60c09092018051604080516020810190915290815260a01b9290921790915250565b60208101602082510282015b8082101561101e5781518151835281526020909101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001610fe1565b505050565b5f5b8183101561050c5782515f90600190821a1b6f07fffffe80000000000000000000000081161561123a57610100860151600116156110bd5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517f5520a5170000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b6f07fffffe00000000000000000000000081161561116e576110f085856f07fffffe0000000003ff2000000000006121ed565b90955091505f61110087846122bc565b50905080156111685761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f53e6feba0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b5061118f565b61118c60018601856f07fffffe0000000003ff2000000000006121c4565b94505b856040015160ff1660ff14806111ac57508560a0015160ff1660ff145b156112105761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f382063410000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b604086018051600190810190915260a0870180519091019052610100860180516009179052611375565b64010000260081161561128c5761125a60018601856401000026006121c4565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690529450611375565b6704000000000000008116156112d8575050610100840180516008177ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690526001929092019161050c565b658000000000008116156113465761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517fedad0c580000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001611088565b5050611025565b5f5b8183101561050c5782515f90600190821a1b6f07fffffe00000000000000000000000081161561157a57610100860151600116156114165761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517f4e803df60000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b8461143281866f07fffffe0000000003ff2000000000006121ed565b80945081975050505f8061144b89610240015186612337565b91509150811561148c5761146089898961240b565b97505f61146d8a83612630565b905061147a8a8383612656565b50610100890180516002179052611566565b611496898661283b565b909250905081156114ba576114ac895f83612656565b6114b5896128b5565b611566565b5f6060848a03600581016114cf8d8d8d61240b565b9b508c6101e0015151602002602001810190505f60059050604051935060208201840160405282818501528184528394506115178860056115108760200190565b018561291b565b5050506101e08b015180516001019061154a906115448361153b8680510160200190565b90602002900390565b83612924565b506115578b60ff84612656565b50506101008901805160021790525b50505061010086018051600117905261188a565b6101008601516002161561167a576501000000000081165f036115f65761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f23b5c6ea0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b606086810180515f1a6003019190829053603b821115611642576040517f6232f2d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050610100860180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc16905260019094019361188a565b65020000000000811615611734576060868101515f90811a91908290036116fa5761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f7f9db5420000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b808801600383039250828153826004820101515f1a8360028301015160f01c6001015350611727886128b5565b505060019094019361188a565b6401000026008116156117865761175460018601856401000026006121c4565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe169052945061188a565b6b0800000003ff2004000000008116156117c1576117a5868686612930565b94506117b0866128b5565b61010086018051600117905261188a565b651000000000008116156117e6576117d98686612a38565b505060019092019161050c565b67080000000000000081161561181e576118008686612a38565b61180986612dae565b5050600461010085015260019092019161050c565b6580000000000081161561185b5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001611311565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016113e1565b505061137e565b60e08101518151516060919060f082901c90602081146118dd576040517f858f2dcf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051935060208401601083045f8183535060016008850483018101928391015f80805b8881101561193a5789811c61ffff81165163ffff0000601092831b16811760e01b8786015284019360f08390031b929092179101611901565b50825117909152878203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08181018952908801601f01166040525f5b828110156119ba576002810288016003015161ffff90811683018051602060f082901c019260e09190911c16906119af83828461291b565b505050600101611977565b50505050505050919050565b6060805f6119d3846130dc565b90505f5b81811015611a16575f6119ea86836130f6565b60040190505f6119fa8784613125565b60040282019050611a0c88838361313c565b50506001016119d7565b5083611a21866133fc565b92509250505b9250929050565b5f80808080611a3e888888613471565b985090925090508181036040811115611ab05761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517fff2f59490000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b805f03611b165761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517fc75cd5090000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b60028106600103611b805761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517fd76d9b570000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b6001820397505f5b838910611ce15788515f90811a906001821b906703ff000000000000821615611bd457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd08201611cab565b6c7e000000000000000000000000821615611c1257507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa98201611cab565b687e0000000000000000821615611c4c57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc98201611cab565b6102208d01518c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f69f1e3e60000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909b019a831b96909617955050600401611b88565b50509350909150505b935093915050565b5f805f805f80611d0288886134c1565b92965090945092509050611d17898486613904565b82611d228383613966565b9550955050505050935093915050565b5f808080611d418787876139b8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301805184840382529199509294509092505f91611d7f81613b2e565b9190529698969750505050505050565b6001909101905f8083611db381856fffffffffdffffffffffffffeffffd9ff6121c4565b945084818103611e1c5761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517ff73a1aa80000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b611e27878787610b9c565b955085611e4581876fffffffffdfffffffffffffffffffffff6121c4565b965086868110611eaf5761022089015188037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517fc4b191350000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b875160015f91821a1b906b20000000000000000000000082169003611efd576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001611e7a565b5060019097019687611d228a86868686613b5a565b60605f825160020267ffffffffffffffff811115611f3257611f326146eb565b6040519080825280601f01601f191660200182016040528015611f5c576020820181803683370190505b50905061ffff80196020850160208651028101600285015b81831015611f9657805183518616908516178152602090920191600201611f74565b50939695505050505050565b5f815160010361202d575060208101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b60e082901d5f611fe5838383613cfc565b905061ffff811115612023576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250610239915050565b81515f0361203c57505f919050565b6040517f1ac6690800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f815160020361214657602082015160408301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d5f6120b5838383613cfc565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b935060e085901d925090505f6120ee848483613cfc565b905060ff8211806120ff575060ff81115b15612136576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60081b1794506102399350505050565b60028251101561203c576040517ff16066b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81515f146121bd576040517f9f16b02000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505f919050565b5f5b5f82600186515f1a1b161183851016156121e5576001840193506121c6565b509192915050565b5f8080600181878703602081116122045780612207565b60205b915050875192505b8519600184841a1b1615818310161561222d5760018201915061220f565b9681019660208290036008810293841c90931b926122af57604080516020810185905201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fe47fe8b70000000000000000000000000000000000000000000000000000000082526105f79160040161492c565b5095969095509350505050565b5f806122c8848461283b565b909250905081611a275750610120830180515f93845260209384902060408051928352948201855293909401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909316601084901b62ff00001617909317909252909160ff90911660010190565b600182810180515f928392600560ff93909316602102870192830192909101835b818310156123fc5760018301516021909301805190935f90819060ff168180612381838e613d58565b915091508186165f036123a3575f809b509b5050505050505050505050611a27565b5f876123b3600185038916613d83565b016004028b015195505062ffffff90811693508416830391506123e79050575060019750601c1a9550611a27945050505050565b6123f083613d83565b84019350505050612358565b505f9788975095505050505050565b81516101e08401515f80825291600190831a1b907ffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000008201610d9e5761244f856149f0565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe169052805190955060015f91821a1b9250805b858710156125f057865160015f9190911a1b93506401000026008416156124bd576124b6888888610b9c565b965061248a565b6740000000000000008416156124e1576124d6876149f0565b9650600190506125f0565b6001886101000151165f0361259057600482036125575761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f8c9fdbb30000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b5f612563898989613e5b565b60208581028701018190526101008b01805160011790529098509050612588836149f0565b92505061248a565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517f722cd24a0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b806126245761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016125bb565b50905250919392505050565b6101c08201516002828102820101516101e08401515f9261ffff90921691906104ab9083565b61265f83613e83565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb1660081790526020808401515f90811a8501602101805190911a60ff8114929190600181018253505081156126e8576040517f8092d1ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050825180516060808601515f90811a87016061018051939461ffff8616949093921a60ff81149291600886048503601c0191600181018253505f60038201537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe30180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016909117905281156127ab576040517f3abd0c5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050602090920183821b176018820185901b178083529160e08290036128335760408051601083901b6020908117601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016918252810190915281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000168117825286525b505050505050565b6101208201516101408301515f8381526020808220919384939290911c91600160ff84161b808216156128a05761ffff83165b801561289e578360201c8503612891576001965061ffff8460101c16955061289e565b51925061ffff831661286e565b505b17610140909601959095525090939092509050565b6060818101515f90811a919082900361101e57602083810180515f1a600101919082815350603f8210612914576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b8083835e505050565b6020810283835e505050565b5f808061293e868686610da8565b90965092509050806129aa5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517fb0e4e5b30000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b5f806129b584613f0f565b61018089015116156129f65761016088015160101c5b80158015906129d8575082155b156129f4576020810151905190851492506001909101906129cb565b505b61016088015161ffff16612a1c600184612a105782612a14565b8383035b8b9190612656565b5081612a2c57612a2c8885613f26565b50949695505050505050565b6060828101515f1a908115612aa65761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f6fb11cdc0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b5050612ab182613e83565b61010082018051600416600890811790915260a0830151602084015160ff8083169360f89290921c9290911c1681035f819003612b81576004856101000151165f03612b565761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517fab1d3ea70000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b90820160f881901b6020860152610200850151909190612b769084613f78565b610200860152612c58565b6001811115612c585780831015612bf15761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f78ef27820000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b80831115612c585761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f43168e680000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b8082036001016020601083028101905b81811015612d9a5760a08801516020848a0181015191831c61ffff16915f1a9060015b828111612d885760208406601c03612ca457925160f01c925b83516102008d015160019190911a90612cbd9082613ffc565b6102008e01525f8285148015612cd35750896001145b612cde576001612ce0565b8b5b6102008f0151909150612cf39082614042565b6102008f0152600f811180612d085750600f82115b15612d6c576102208e01518d037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f7ea1869f0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b818160041b176001870153505060049390930192600101612c8b565b50506001909401935050601001612c68565b5050505060081b60a0909301929092525050565b60e081015160208083015160f083811c925f9290921a6001019190839003612e02576040517fa806284100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610200850151855180515f928392909160219060101c61ffff165b8015612e3457805190925060101c61ffff16612e1d565b506040518a82018051919650601c8401939160049160248901915f90811a805b8d831015612f195760048202860195506004878a03045b80821115612e8957965161ffff16601c810199509690036007612e6b565b506004810298899003805186529894909401938103865b6007821115612ee5575160101c61ffff1680518652601c909501947ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff990910190612ea0565b8115612f00575160101c61ffff168051865260048202909501945b50505060019182018051909291909101905f1a80612e54565b50505082895250600488810180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9290940491909101601881901b8817939093179052601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660405260ff109450508315612fe5576040517fe972437e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ff26001808a1b614a27565b891685891b60f06130048b60106149b0565b901b171760e08b01526101008a0180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7169052604080516020601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681815280820183525f80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001682178152908d52908c01819052908b0181905260608b0181905260808b0181905260a08b018190526101208b018190526101408b018190526102008b015250505050505050505050565b5f81515f036130ec57505f919050565b50602001515f1a90565b5f80613101846130dc565b60020260010190505f61311485856140b5565b949091019093016020019392505050565b5f8061313184846130f6565b515f1a949350505050565b8082101561101e5781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016133765760c08401515b80156133745760a081901c5161016086015161ffff60e085901c1660208101805160089390931b62ffff0016600187901a1760e81b7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909316929092179091526040517f570c7a630000000000000000000000000000000000000000000000000000000081529192915f908190819073ffffffffffffffffffffffffffffffffffffffff86169063570c7a639061322f90879060040161492c565b5f60405180830381865afa158015613249573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261328e9190810190614ac6565b925092509250821561336a5781516004146132d757816040517fbe2d187d0000000000000000000000000000000000000000000000000000000081526004016105f7919061492c565b60208201517fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff88161789525f5b815181101561335f5761335782828151811061334057613340614b73565b60200260200101518c613f2690919063ffffffff16565b600101613322565b505050505050613374565b5050505050613177565b505b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016133f057606061ffff8260e01c1690505f6003820152600581019050806040517faedfba2f0000000000000000000000000000000000000000000000000000000081526004016105f7919061492c565b5060048201915061313c565b6101608101516040805161ffff8316808252602080820283019081019093529092909160109190911c90835b808211156134685760208301518252915161ffff16917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090910190613428565b50505050919050565b5f8080806134808660026149b0565b9050806c7e0000007e03ff0000000000005b86821081600184515f1a1b16151516156134b157600182019150613492565b5090979096508695509350505050565b5f8281806134d68386652000000000006121c4565b925085831415836134f081886703ff0000000000006121c4565b945080850361352a57507f34bd20690000000000000000000000000000000000000000000000000000000094505f92508291506138fb9050565b5f806135368a8861410b565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613574575095505f93508392506138fb915050565b86519095506540000000000060015f9290921a9190911b16151588871016915050801561380357506001909301925f846135b781896703ff0000000000006121c4565b95508086036135f257507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f93508392506138fb915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b660100000000000016151516600103613661577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016135f4565b8181146136b8575f80613674848461410b565b90925090507fffffffff000000000000000000000000000000000000000000000000000000008216156136b4575097505f95508594506138fb9350505050565b9350505b5f8312156136f357507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f94508493506138fb92505050565b83156136ff57825f0392505b80820394505f85131561373f57507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f94508493506138fb92505050565b855f0361374e57829550613800565b5f859003604381111561378f57507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f95508594506138fb9350505050565b600a0a8681025f888383816137a6576137a66149c3565b0514159050601b82900b82141581806137bc5750805b156137f857507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f98508897506138fb9650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b1615158786101680156138ec5760019095019485613843818a652000000000006121c4565b965086613859818b6703ff0000000000006121c4565b975080880361389657507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f95508594506138fb9350505050565b505f806138a3838a61410b565b90925090507fffffffff000000000000000000000000000000000000000000000000000000008216156138e3575097505f95508594506138fb9350505050565b95860195925050505b845f036138f7575f93505b5050505b92959194509250565b7fffffffff0000000000000000000000000000000000000000000000000000000081161561101e576102208301515f9083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0019050815f528060045260245ffd5b5f805f6139738585614235565b91509150806106f5576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016105f7565b5f80806001850181806f7ffffffffffffffffffffffb0000000081807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b8b0301602080821015613a065750805b875193505b84600185851a1b1615158184101615613a2957600183019250613a0b565b505080602003613a92576102208c01518b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f30515bda0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b85810180519095505f1a6001811b640400000000161580613ab25750858b145b15613b16576102208d015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f04022fbf0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b50949b939a505060018a019850919650505050505050565b5f80601f90505f60e09050818451168082175f528060208601600183016020035e50505f519392505050565b5f60608186860361ffff811115613ba0576040517fb6da789c000000000000000000000000000000000000000000000000000000008152600481018290526024016105f7565b604080516041888803848101838101929092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690935260028281018590520181529350602284019250613bf689848461291b565b613c03878385018361291b565b50505060c08701515b8015613ccd5760a081901c516040517fc6c0cbb60000000000000000000000000000000000000000000000000000000081529091905f90819073ffffffffffffffffffffffffffffffffffffffff84169063c6c0cbb690613c7190889060040161492c565b6040805180830381865afa158015613c8b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613caf9190614ba0565b915091508115613cc55794506104ab9350505050565b505050613c0c565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001612975565b5f805f613d0a86868661433b565b9150915080613d4f576040517f05e4767800000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016105f7565b50949350505050565b5f80825f528360205360215f2090506001815f1a1b915062ffffff8116611a27575060019250929050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613db45750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f805f805f613e6b888888610da8565b9250925092508215613ccd579093509150611cea9050565b8051602080830180515f90811a8086016021015160a0939190831a613ed55785518488018051600861ffff909316929092046020038801601e83901a840360010160100290811b909217905260f01092505b50508015612914576040517f5b1a42d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f613f1c61010083614bca565b6001901b92915050565b6101608201805160408051808201909152601091821c808252602082018590528351600161ffff909116019282901b92909217909252613f6583613f0f565b6101809094018051909417909352505050565b5f613f838383614042565b925060ff600884901c8116830190811115613fca576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff841660089190911b17905092915050565b5f60ff83168281101561403b576040517f23b49a2a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050900390565b5f60ff808416830190600885901c811690601086901c90831115614092576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8083111561409d5750815b601081901b600883901b841717935050505092915050565b5f6140bf836130dc565b82106140fb5781836040517ffcfaeff10000000000000000000000000000000000000000000000000000000081526004016105f7929190614c02565b50600202016003015161ffff1690565b81515f90819065200000000000600191831a9190911b161515838510168085019082806141388488614487565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615614173575093505f9250611a27915050565b825f036141d6577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116141a7575f6141c9565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95509350611a2792505050565b7f80000000000000000000000000000000000000000000000000000000000000008111614203575f614225565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f601b83900b8314838382614299577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561427957620186a0860595506005850194505b8586601b0b1461429457600a86059550846001019450614279565b6142af565b855f036142af57505f925060019150611a279050565b848560030b1461430b575f8512156142cf57505f9250829150611a279050565b6040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016105f7565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f851215614381576040517f4a7d166b00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016105f7565b845f0361439357505f90506001611cea565b8460ff84168501858112156143de576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016105f7565b5f805f831215614448577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb383121561441f575f809550955050505050611cea565b825f03600a0a9150818481614436576144366149c3565b0495505084029091149150611cea9050565b5f8313156144775761445b83600a614d38565b91506144678285614d43565b955060019450611cea9350505050565b8360019550955050505050611cea565b5f808284106144ba57507f34bd20690000000000000000000000000000000000000000000000000000000090505f611a27565b835f036144f3576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b87821015801561452b5750604d83105b1561456e57815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a859003020161451b565b8782106146945781515f1a84900360018111156145b657507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611a279350505050565b600a84900a81028281018311156145f957507f0fdc26350000000000000000000000000000000000000000000000000000000096505f9550611a27945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b8782106146945781515f1a6030811461466957507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611a279350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910190614625565b5f9890975095505050505050565b6146aa614d5a565b565b5f602082840312156146bc575f80fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461050f575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561475f5761475f6146eb565b604052919050565b5f67ffffffffffffffff821115614780576147806146eb565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f602082840312156147bc575f80fd5b813567ffffffffffffffff8111156147d2575f80fd5b8201601f810184136147e2575f80fd5b80356147f56147f082614767565b614718565b818152856020838501011115614809575f80fd5b816020840160208301375f91810160200191909152949350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b8083101561488057835173ffffffffffffffffffffffffffffffffffffffff16825292840192600192909201919084019061484a565b509695505050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b604081525f6148e9604083018561488b565b8281036020848101919091528451808352858201928201905f5b8181101561491f57845183529383019391830191600101614903565b5090979650505050505050565b602081525f61050f602083018461488b565b8051602080830151919081101561497d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561018057610180614983565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a2057614a20614983565b5060010190565b8181038181111561018057610180614983565b80518015158114610239575f80fd5b5f82601f830112614a58575f80fd5b8151602067ffffffffffffffff821115614a7457614a746146eb565b8160051b614a83828201614718565b9283528481018201928281019087851115614a9c575f80fd5b83870192505b84831015614abb57825182529183019190830190614aa2565b979650505050505050565b5f805f60608486031215614ad8575f80fd5b614ae184614a3a565b9250602084015167ffffffffffffffff80821115614afd575f80fd5b818601915086601f830112614b10575f80fd5b8151614b1e6147f082614767565b818152886020838601011115614b32575f80fd5b8160208501602083015e5f6020838301015280955050506040860151915080821115614b5c575f80fd5b50614b6986828701614a49565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8060408385031215614bb1575f80fd5b614bba83614a3a565b9150602083015190509250929050565b5f82614bfd577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500690565b828152604060208201525f610bd8604083018461488b565b600181815b80851115614c7357817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115614c5957614c59614983565b80851615614c6657918102915b93841c9390800290614c1f565b509250929050565b5f82614c8957506001610180565b81614c9557505f610180565b8160018114614cab5760028114614cb557614cd1565b6001915050610180565b60ff841115614cc657614cc6614983565b50506001821b610180565b5060208310610133831016604e8410600b8410161715614cf4575081810a610180565b614cfe8383614c1a565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115614d3057614d30614983565b029392505050565b5f61050f8383614c7b565b808202811582820484141761018057610180614983565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0288400100420b0280046b0641220186adb8a044003012020f2a880521281ac8811a000000000000000000080000000000100000000000000002000000000000000000290ea98a3a10f9c53927bda61c6395ad0e9fb4a8075dbeaf2d313e9e09b06d681dfe49062ce21ac13e83a6cc2ad2d2123422c3e0052f369e1f27267220a0a68d2f357696465d217b131120880f24f4a8242f1af53f41f7290afa3e8638acf3d13397e9fd00443a453b406bb547b9059d25a3cd1e11d0c3260b15eb4d16fc94274427bc412baf2cc2321b8f630dca9efe403ce35f1400684845c291e3425d68b13d5f9a151eb98c15239cd9c10c1f698235c8d3843c08d579273459d41a2c9ff617a5b2cd15c0031810f621af127ba34c26bb6c4137b2ad3d1b73563d0210215f36aa563921098e690457fb180376e752066a470128f11de101fcc60522de7ddd183d3d6d4196c37031cba2872e7b3af5304eee7219a8093543082b5f0801f5a51fa21fa21fa2206e21822182206e206e21821fa21fa21fa2218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182"; /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405234801561000f575f80fd5b5060043610610064575f3560e01c80637764fd9c1161004d5780637764fd9c146100b0578063ccf44775146100d1578063d6d8c9a8146100e6575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b6100763660046146ac565b6100ee565b60405190151581526020015b60405180910390f35b6100a361009e3660046147ac565b610186565b6040516100879190614826565b6100c36100be3660046147ac565b61023e565b6040516100879291906148d7565b6100d9610266565b604051610087919061492c565b6100d9610275565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f1a2c8edd00000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6040805160208101909152606081525f6101e3836101a261027f565b6101aa6102a2565b60408051808201909152600881527f1a2e1cf21d321d8f00000000000000000000000000000000000000000000000060208201526102c2565b90505f6020840190505f6101fa8580510160200190565b90506102078383836104b4565b9150610214838383610516565b9150604051806020016040528061022a8561069f565b905293505050506102396106fd565b919050565b606080610255610250846101a261027f565b610742565b915091506102616106fd565b915091565b606061027061088e565b905090565b60606102706108db565b6060604051806101a001604052806101638152602001614d886101639139905090565b60606040518060c0016040528060908152602001614eeb60909139905090565b61034f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b5f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f801b81526020015f8152602001600481526020015f81526020015f81526020015f81526020015f801b8152602001848152602001858152602001600467ffffffffffffffff8111156103d5576103d56146eb565b6040519080825280602002602001820160405280156103fe578160200160208202803683370190505b5081525f602080830182905260408084018b905260609384018a90528051601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016828152808301825283517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001681178452855290840182905283018190529082018190526080820181905260a082018190526101208201819052610140820181905261020082015290505b95945050505050565b5f5b8183101561050c57825160015f9190911a1b6401000026008116156104e7576104e0858585610b9c565b9350610506565b65800000000000811615610500576104e0858585610be0565b5061050c565b506104b6565b50815b9392505050565b815160408051808201909152601081527f7573696e672d776f7264732d66726f6d0000000000000000000000000000000060208201525f91906105589061493e565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000821614610589578391505061050f565b506010830192508183106106005761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517fe3e4992d0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b60405180910390fd5b825160015f91821a1b90640100002600821690036106475761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016105c2565b836001019350505b8183101561050c576106628484846104b4565b92508183101561050c575f80610679868686610da8565b90965090925090508161068d57505061050c565b610698868683610f38565b505061064f565b60c08101516040516060919073ffffffffffffffffffffffffffffffffffffffff602082015f5b84156106e757848316825260f09490941c51936020909101906001016106c6565b83526040526106f582610fd5565b509392505050565b60405162010000811061073f576040517f766c065f000000000000000000000000000000000000000000000000000000008152600481018290526024016105f7565b50565b6060805f836102200151511115610872575f61076384610220015160200190565b90505f61077885610220015180510160200190565b90506107858583836104b4565b9150610792858383610516565b91505b808210156107c9576107a88583836104b4565b91506107b5858383611023565b91506107c285838361137c565b9150610795565b808214610802576040517f7d565df600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101008501516008161561086f5761022085015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517ff06f54cf0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b50505b61088561087e84611891565b84906119c6565b91509150915091565b6040805160a0810182526004808252611a2e6020830152611cf292820192909252611d32606082810191909152611d8f608083015291908190805b6108d281611f12565b94505050505090565b60606146a25f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff168152602001611fa28152602001611fa28152602001611fa2815260200161206e81526020016121828152602001612182815260200161206e815260200161206e81526020016121828152602001611fa28152602001611fa28152602001611fa28152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152509050606081905060488151146108c95780516040517fc8b569010000000000000000000000000000000000000000000000000000000081526004810191909152602481018490526044016105f7565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690525f610bd883836401000026006121c4565b949350505050565b6101008301805160011790525f60048301821015610c585761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517f25a764680000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b825160f01c612f2a8114610cc55761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f3e47169c0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b6003840193505f5b83851015610d6a5784515f1a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd18101610d5e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86015160f01c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5d18101610d5c57505050600193840193610d6a565b505b85600101955050610ccd565b80610d9e5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001610c23565b5092949350505050565b81515f90819081908190600181831a1b6703ff200000000000811615610ead5786610dd48960016149b0565b1015610ea457600182811a1b7ffffffffffffffffffffffffffffffffffeffffffffffffffffff00000000000082821701610e11575f9350610e9e565b7ffffffffffffffffffffffffffffffffffffffffffeffffffffff00000000000082821701610e99576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f75c28ff90000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b600193505b50610ef2565b60019250610ef2565b640400000000811615610ec35760029250610ef2565b6b080000000000000000000000811615610ee05760039250610ef2565b505f9450869350849250610f2f915050565b505f9050610f20888888610f1883876101a09190910151600291820201015161ffff1690565b63ffffffff16565b90975060019550879450925050505b93509350939050565b73ffffffffffffffffffffffffffffffffffffffff811115610fb35761022083015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f9d7e517e0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b60c09092018051604080516020810190915290815260f01b9290921790915250565b60208101602082510282015b8082101561101e5781518151835281526020909101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001610fe1565b505050565b5f5b8183101561050c5782515f90600190821a1b6f07fffffe80000000000000000000000081161561123a57610100860151600116156110bd5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517f5520a5170000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b6f07fffffe00000000000000000000000081161561116e576110f085856f07fffffe0000000003ff2000000000006121ed565b90955091505f61110087846122bc565b50905080156111685761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f53e6feba0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b5061118f565b61118c60018601856f07fffffe0000000003ff2000000000006121c4565b94505b856040015160ff1660ff14806111ac57508560a0015160ff1660ff145b156112105761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f382063410000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b604086018051600190810190915260a0870180519091019052610100860180516009179052611375565b64010000260081161561128c5761125a60018601856401000026006121c4565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690529450611375565b6704000000000000008116156112d8575050610100840180516008177ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690526001929092019161050c565b658000000000008116156113465761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517fedad0c580000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001611088565b5050611025565b5f5b8183101561050c5782515f90600190821a1b6f07fffffe00000000000000000000000081161561157a57610100860151600116156114165761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517f4e803df60000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b8461143281866f07fffffe0000000003ff2000000000006121ed565b80945081975050505f8061144b89610240015186612337565b91509150811561148c5761146089898961240b565b97505f61146d8a83612630565b905061147a8a8383612656565b50610100890180516002179052611566565b611496898661283b565b909250905081156114ba576114ac895f83612656565b6114b5896128b5565b611566565b5f6060848a03600581016114cf8d8d8d61240b565b9b508c6101e0015151602002602001810190505f60059050604051935060208201840160405282818501528184528394506115178860056115108760200190565b018561291b565b5050506101e08b015180516001019061154a906115448361153b8680510160200190565b90602002900390565b83612924565b506115578b60ff84612656565b50506101008901805160021790525b50505061010086018051600117905261188a565b6101008601516002161561167a576501000000000081165f036115f65761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f23b5c6ea0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b606086810180515f1a6003019190829053603b821115611642576040517f6232f2d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050610100860180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc16905260019094019361188a565b65020000000000811615611734576060868101515f90811a91908290036116fa5761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f7f9db5420000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b808801600383039250828153826004820101515f1a8360028301015160f01c6001015350611727886128b5565b505060019094019361188a565b6401000026008116156117865761175460018601856401000026006121c4565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe169052945061188a565b6b0800000003ff2004000000008116156117c1576117a5868686612930565b94506117b0866128b5565b61010086018051600117905261188a565b651000000000008116156117e6576117d98686612a38565b505060019092019161050c565b67080000000000000081161561181e576118008686612a38565b61180986612dae565b5050600461010085015260019092019161050c565b6580000000000081161561185b5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001611311565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016113e1565b505061137e565b60e08101518151516060919060f082901c90602081146118dd576040517f858f2dcf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051935060208401601083045f8183535060016008850483018101928391015f80805b8881101561193a5789811c61ffff81165163ffff0000601092831b16811760e01b8786015284019360f08390031b929092179101611901565b50825117909152878203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08181018952908801601f01166040525f5b828110156119ba576002810288016003015161ffff90811683018051602060f082901c019260e09190911c16906119af83828461291b565b505050600101611977565b50505050505050919050565b6060805f6119d3846130dc565b90505f5b81811015611a16575f6119ea86836130f6565b60040190505f6119fa8784613125565b60040282019050611a0c88838361313c565b50506001016119d7565b5083611a21866133fc565b92509250505b9250929050565b5f80808080611a3e888888613471565b985090925090508181036040811115611ab05761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517fff2f59490000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b805f03611b165761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517fc75cd5090000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b60028106600103611b805761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517fd76d9b570000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b6001820397505f5b838910611ce15788515f90811a906001821b906703ff000000000000821615611bd457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd08201611cab565b6c7e000000000000000000000000821615611c1257507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa98201611cab565b687e0000000000000000821615611c4c57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc98201611cab565b6102208d01518c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f69f1e3e60000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909b019a831b96909617955050600401611b88565b50509350909150505b935093915050565b5f805f805f80611d0288886134c1565b92965090945092509050611d17898486613904565b82611d228383613966565b9550955050505050935093915050565b5f808080611d418787876139b8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301805184840382529199509294509092505f91611d7f81613b2e565b9190529698969750505050505050565b6001909101905f8083611db381856fffffffffdffffffffffffffeffffd9ff6121c4565b945084818103611e1c5761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517ff73a1aa80000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b611e27878787610b9c565b955085611e4581876fffffffffdfffffffffffffffffffffff6121c4565b965086868110611eaf5761022089015188037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517fc4b191350000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b875160015f91821a1b906b20000000000000000000000082169003611efd576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001611e7a565b5060019097019687611d228a86868686613b5a565b60605f825160020267ffffffffffffffff811115611f3257611f326146eb565b6040519080825280601f01601f191660200182016040528015611f5c576020820181803683370190505b50905061ffff80196020850160208651028101600285015b81831015611f9657805183518616908516178152602090920191600201611f74565b50939695505050505050565b5f815160010361202d575060208101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b60e082901d5f611fe5838383613cfc565b905061ffff811115612023576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250610239915050565b81515f0361203c57505f919050565b6040517f1ac6690800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f815160020361214657602082015160408301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d5f6120b5838383613cfc565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b935060e085901d925090505f6120ee848483613cfc565b905060ff8211806120ff575060ff81115b15612136576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60081b1794506102399350505050565b60028251101561203c576040517ff16066b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81515f146121bd576040517f9f16b02000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505f919050565b5f5b5f82600186515f1a1b161183851016156121e5576001840193506121c6565b509192915050565b5f8080600181878703602081116122045780612207565b60205b915050875192505b8519600184841a1b1615818310161561222d5760018201915061220f565b9681019660208290036008810293841c90931b926122af57604080516020810185905201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fe47fe8b70000000000000000000000000000000000000000000000000000000082526105f79160040161492c565b5095969095509350505050565b5f806122c8848461283b565b909250905081611a275750610120830180515f93845260209384902060408051928352948201855293909401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909316601084901b62ff00001617909317909252909160ff90911660010190565b600182810180515f928392600560ff93909316602102870192830192909101835b818310156123fc5760018301516021909301805190935f90819060ff168180612381838e613d58565b915091508186165f036123a3575f809b509b5050505050505050505050611a27565b5f876123b3600185038916613d83565b016004028b015195505062ffffff90811693508416830391506123e79050575060019750601c1a9550611a27945050505050565b6123f083613d83565b84019350505050612358565b505f9788975095505050505050565b81516101e08401515f80825291600190831a1b907ffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000008201610d9e5761244f856149f0565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe169052805190955060015f91821a1b9250805b858710156125f057865160015f9190911a1b93506401000026008416156124bd576124b6888888610b9c565b965061248a565b6740000000000000008416156124e1576124d6876149f0565b9650600190506125f0565b6001886101000151165f0361259057600482036125575761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f8c9fdbb30000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b5f612563898989613e5b565b60208581028701018190526101008b01805160011790529098509050612588836149f0565b92505061248a565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517f722cd24a0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b806126245761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016125bb565b50905250919392505050565b6101c08201516002828102820101516101e08401515f9261ffff90921691906104ab9083565b61265f83613e83565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb1660081790526020808401515f90811a8501602101805190911a60ff8114929190600181018253505081156126e8576040517f8092d1ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050825180516060808601515f90811a87016061018051939461ffff8616949093921a60ff81149291600886048503601c0191600181018253505f60038201537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe30180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016909117905281156127ab576040517f3abd0c5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050602090920183821b176018820185901b178083529160e08290036128335760408051601083901b6020908117601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016918252810190915281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000168117825286525b505050505050565b6101208201516101408301515f8381526020808220919384939290911c91600160ff84161b808216156128a05761ffff83165b801561289e578360201c8503612891576001965061ffff8460101c16955061289e565b51925061ffff831661286e565b505b17610140909601959095525090939092509050565b6060818101515f90811a919082900361101e57602083810180515f1a600101919082815350603f8210612914576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b8083835e505050565b6020810283835e505050565b5f808061293e868686610da8565b90965092509050806129aa5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517fb0e4e5b30000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b5f806129b584613f0f565b61018089015116156129f65761016088015160101c5b80158015906129d8575082155b156129f4576020810151905190851492506001909101906129cb565b505b61016088015161ffff16612a1c600184612a105782612a14565b8383035b8b9190612656565b5081612a2c57612a2c8885613f26565b50949695505050505050565b6060828101515f1a908115612aa65761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f6fb11cdc0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b5050612ab182613e83565b61010082018051600416600890811790915260a0830151602084015160ff8083169360f89290921c9290911c1681035f819003612b81576004856101000151165f03612b565761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517fab1d3ea70000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b90820160f881901b6020860152610200850151909190612b769084613f78565b610200860152612c58565b6001811115612c585780831015612bf15761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f78ef27820000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b80831115612c585761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f43168e680000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b8082036001016020601083028101905b81811015612d9a5760a08801516020848a0181015191831c61ffff16915f1a9060015b828111612d885760208406601c03612ca457925160f01c925b83516102008d015160019190911a90612cbd9082613ffc565b6102008e01525f8285148015612cd35750896001145b612cde576001612ce0565b8b5b6102008f0151909150612cf39082614042565b6102008f0152600f811180612d085750600f82115b15612d6c576102208e01518d037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f7ea1869f0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b818160041b176001870153505060049390930192600101612c8b565b50506001909401935050601001612c68565b5050505060081b60a0909301929092525050565b60e081015160208083015160f083811c925f9290921a6001019190839003612e02576040517fa806284100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610200850151855180515f928392909160219060101c61ffff165b8015612e3457805190925060101c61ffff16612e1d565b506040518a82018051919650601c8401939160049160248901915f90811a805b8d831015612f195760048202860195506004878a03045b80821115612e8957965161ffff16601c810199509690036007612e6b565b506004810298899003805186529894909401938103865b6007821115612ee5575160101c61ffff1680518652601c909501947ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff990910190612ea0565b8115612f00575160101c61ffff168051865260048202909501945b50505060019182018051909291909101905f1a80612e54565b50505082895250600488810180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9290940491909101601881901b8817939093179052601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660405260ff109450508315612fe5576040517fe972437e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ff26001808a1b614a27565b891685891b60f06130048b60106149b0565b901b171760e08b01526101008a0180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7169052604080516020601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681815280820183525f80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001682178152908d52908c01819052908b0181905260608b0181905260808b0181905260a08b018190526101208b018190526101408b018190526102008b015250505050505050505050565b5f81515f036130ec57505f919050565b50602001515f1a90565b5f80613101846130dc565b60020260010190505f61311485856140b5565b949091019093016020019392505050565b5f8061313184846130f6565b515f1a949350505050565b8082101561101e5781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016133765760c08401515b80156133745760f081901c5161016086015161ffff60e085901c1660208101805160089390931b62ffff0016600187901a1760e81b7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909316929092179091526040517f570c7a630000000000000000000000000000000000000000000000000000000081529192915f908190819073ffffffffffffffffffffffffffffffffffffffff86169063570c7a639061322f90879060040161492c565b5f60405180830381865afa158015613249573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261328e9190810190614ac6565b925092509250821561336a5781516004146132d757816040517fbe2d187d0000000000000000000000000000000000000000000000000000000081526004016105f7919061492c565b60208201517fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff88161789525f5b815181101561335f5761335782828151811061334057613340614b73565b60200260200101518c613f2690919063ffffffff16565b600101613322565b505050505050613374565b5050505050613177565b505b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016133f057606061ffff8260e01c1690505f6003820152600581019050806040517faedfba2f0000000000000000000000000000000000000000000000000000000081526004016105f7919061492c565b5060048201915061313c565b6101608101516040805161ffff8316808252602080820283019081019093529092909160109190911c90835b808211156134685760208301518252915161ffff16917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090910190613428565b50505050919050565b5f8080806134808660026149b0565b9050806c7e0000007e03ff0000000000005b86821081600184515f1a1b16151516156134b157600182019150613492565b5090979096508695509350505050565b5f8281806134d68386652000000000006121c4565b925085831415836134f081886703ff0000000000006121c4565b945080850361352a57507f34bd20690000000000000000000000000000000000000000000000000000000094505f92508291506138fb9050565b5f806135368a8861410b565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613574575095505f93508392506138fb915050565b86519095506540000000000060015f9290921a9190911b16151588871016915050801561380357506001909301925f846135b781896703ff0000000000006121c4565b95508086036135f257507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f93508392506138fb915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b660100000000000016151516600103613661577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016135f4565b8181146136b8575f80613674848461410b565b90925090507fffffffff000000000000000000000000000000000000000000000000000000008216156136b4575097505f95508594506138fb9350505050565b9350505b5f8312156136f357507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f94508493506138fb92505050565b83156136ff57825f0392505b80820394505f85131561373f57507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f94508493506138fb92505050565b855f0361374e57829550613800565b5f859003604381111561378f57507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f95508594506138fb9350505050565b600a0a8681025f888383816137a6576137a66149c3565b0514159050601b82900b82141581806137bc5750805b156137f857507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f98508897506138fb9650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b1615158786101680156138ec5760019095019485613843818a652000000000006121c4565b965086613859818b6703ff0000000000006121c4565b975080880361389657507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f95508594506138fb9350505050565b505f806138a3838a61410b565b90925090507fffffffff000000000000000000000000000000000000000000000000000000008216156138e3575097505f95508594506138fb9350505050565b95860195925050505b845f036138f7575f93505b5050505b92959194509250565b7fffffffff0000000000000000000000000000000000000000000000000000000081161561101e576102208301515f9083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0019050815f528060045260245ffd5b5f805f6139738585614235565b91509150806106f5576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016105f7565b5f80806001850181806f7ffffffffffffffffffffffb0000000081807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b8b0301602080821015613a065750805b875193505b84600185851a1b1615158184101615613a2957600183019250613a0b565b505080602003613a92576102208c01518b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f30515bda0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b85810180519095505f1a6001811b640400000000161580613ab25750858b145b15613b16576102208d015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f04022fbf0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b50949b939a505060018a019850919650505050505050565b5f80601f90505f60e09050818451168082175f528060208601600183016020035e50505f519392505050565b5f60608186860361ffff811115613ba0576040517fb6da789c000000000000000000000000000000000000000000000000000000008152600481018290526024016105f7565b604080516041888803848101838101929092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690935260028281018590520181529350602284019250613bf689848461291b565b613c03878385018361291b565b50505060c08701515b8015613ccd5760f081901c516040517fc6c0cbb60000000000000000000000000000000000000000000000000000000081529091905f90819073ffffffffffffffffffffffffffffffffffffffff84169063c6c0cbb690613c7190889060040161492c565b6040805180830381865afa158015613c8b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613caf9190614ba0565b915091508115613cc55794506104ab9350505050565b505050613c0c565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001612975565b5f805f613d0a86868661433b565b9150915080613d4f576040517f05e4767800000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016105f7565b50949350505050565b5f80825f528360205360215f2090506001815f1a1b915062ffffff8116611a27575060019250929050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613db45750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f805f805f613e6b888888610da8565b9250925092508215613ccd579093509150611cea9050565b8051602080830180515f90811a8086016021015160a0939190831a613ed55785518488018051600861ffff909316929092046020038801601e83901a840360010160100290811b909217905260f01092505b50508015612914576040517f5b1a42d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f613f1c61010083614bca565b6001901b92915050565b6101608201805160408051808201909152601091821c808252602082018590528351600161ffff909116019282901b92909217909252613f6583613f0f565b6101809094018051909417909352505050565b5f613f838383614042565b925060ff600884901c8116830190811115613fca576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff841660089190911b17905092915050565b5f60ff83168281101561403b576040517f23b49a2a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050900390565b5f60ff808416830190600885901c811690601086901c90831115614092576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8083111561409d5750815b601081901b600883901b841717935050505092915050565b5f6140bf836130dc565b82106140fb5781836040517ffcfaeff10000000000000000000000000000000000000000000000000000000081526004016105f7929190614c02565b50600202016003015161ffff1690565b81515f90819065200000000000600191831a9190911b161515838510168085019082806141388488614487565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615614173575093505f9250611a27915050565b825f036141d6577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116141a7575f6141c9565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95509350611a2792505050565b7f80000000000000000000000000000000000000000000000000000000000000008111614203575f614225565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f601b83900b8314838382614299577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561427957620186a0860595506005850194505b8586601b0b1461429457600a86059550846001019450614279565b6142af565b855f036142af57505f925060019150611a279050565b848560030b1461430b575f8512156142cf57505f9250829150611a279050565b6040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016105f7565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f851215614381576040517f4a7d166b00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016105f7565b845f0361439357505f90506001611cea565b8460ff84168501858112156143de576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016105f7565b5f805f831215614448577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb383121561441f575f809550955050505050611cea565b825f03600a0a9150818481614436576144366149c3565b0495505084029091149150611cea9050565b5f8313156144775761445b83600a614d38565b91506144678285614d43565b955060019450611cea9350505050565b8360019550955050505050611cea565b5f808284106144ba57507f34bd20690000000000000000000000000000000000000000000000000000000090505f611a27565b835f036144f3576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b87821015801561452b5750604d83105b1561456e57815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a859003020161451b565b8782106146945781515f1a84900360018111156145b657507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611a279350505050565b600a84900a81028281018311156145f957507f0fdc26350000000000000000000000000000000000000000000000000000000096505f9550611a27945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b8782106146945781515f1a6030811461466957507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611a279350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910190614625565b5f9890975095505050505050565b6146aa614d5a565b565b5f602082840312156146bc575f80fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461050f575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561475f5761475f6146eb565b604052919050565b5f67ffffffffffffffff821115614780576147806146eb565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f602082840312156147bc575f80fd5b813567ffffffffffffffff8111156147d2575f80fd5b8201601f810184136147e2575f80fd5b80356147f56147f082614767565b614718565b818152856020838501011115614809575f80fd5b816020840160208301375f91810160200191909152949350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b8083101561488057835173ffffffffffffffffffffffffffffffffffffffff16825292840192600192909201919084019061484a565b509695505050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b604081525f6148e9604083018561488b565b8281036020848101919091528451808352858201928201905f5b8181101561491f57845183529383019391830191600101614903565b5090979650505050505050565b602081525f61050f602083018461488b565b8051602080830151919081101561497d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561018057610180614983565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a2057614a20614983565b5060010190565b8181038181111561018057610180614983565b80518015158114610239575f80fd5b5f82601f830112614a58575f80fd5b8151602067ffffffffffffffff821115614a7457614a746146eb565b8160051b614a83828201614718565b9283528481018201928281019087851115614a9c575f80fd5b83870192505b84831015614abb57825182529183019190830190614aa2565b979650505050505050565b5f805f60608486031215614ad8575f80fd5b614ae184614a3a565b9250602084015167ffffffffffffffff80821115614afd575f80fd5b818601915086601f830112614b10575f80fd5b8151614b1e6147f082614767565b818152886020838601011115614b32575f80fd5b8160208501602083015e5f6020838301015280955050506040860151915080821115614b5c575f80fd5b50614b6986828701614a49565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8060408385031215614bb1575f80fd5b614bba83614a3a565b9150602083015190509250929050565b5f82614bfd577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500690565b828152604060208201525f610bd8604083018461488b565b600181815b80851115614c7357817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115614c5957614c59614983565b80851615614c6657918102915b93841c9390800290614c1f565b509250929050565b5f82614c8957506001610180565b81614c9557505f610180565b8160018114614cab5760028114614cb557614cd1565b6001915050610180565b60ff841115614cc657614cc6614983565b50506001821b610180565b5060208310610133831016604e8410600b8410161715614cf4575081810a610180565b614cfe8383614c1a565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115614d3057614d30614983565b029392505050565b5f61050f8383614c7b565b808202811582820484141761018057610180614983565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0288400100420b0280046b0641220186adb8a044003012020f2a880521281ac8811a000000000000000000080000000000100000000000000002000000000000000000290ea98a3a10f9c53927bda61c6395ad0e9fb4a8075dbeaf2d313e9e09b06d681dfe49062ce21ac13e83a6cc2ad2d2123422c3e0052f369e1f27267220a0a68d2f357696465d217b131120880f24f4a8242f1af53f41f7290afa3e8638acf3d13397e9fd00443a453b406bb547b9059d25a3cd1e11d0c3260b15eb4d16fc94274427bc412baf2cc2321b8f630dca9efe403ce35f1400684845c291e3425d68b13d5f9a151eb98c15239cd9c10c1f698235c8d3843c08d579273459d41a2c9ff617a5b2cd15c0031810f621af127ba34c26bb6c4137b2ad3d1b73563d0210215f36aa563921098e690457fb180376e752066a470128f11de101fcc60522de7ddd183d3d6d4196c37031cba2872e7b3af5304eee7219a8093543082b5f0801f5a51fa21fa21fa2206e21822182206e206e21821fa21fa21fa2218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182"; + hex"608060405234801561000f575f80fd5b5060043610610064575f3560e01c80637764fd9c1161004d5780637764fd9c146100b0578063ccf44775146100d1578063d6d8c9a8146100e6575f80fd5b806301ffc9a7146100685780635514ca2014610090575b5f80fd5b61007b6100763660046146ac565b6100ee565b60405190151581526020015b60405180910390f35b6100a361009e3660046147ac565b610186565b6040516100879190614826565b6100c36100be3660046147ac565b61023e565b6040516100879291906148d7565b6100d9610266565b604051610087919061492c565b6100d9610275565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f1a2c8edd00000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6040805160208101909152606081525f6101e3836101a261027f565b6101aa6102a2565b60408051808201909152600881527f1a2e1cf21d321d8f00000000000000000000000000000000000000000000000060208201526102c2565b90505f6020840190505f6101fa8580510160200190565b90506102078383836104b4565b9150610214838383610516565b9150604051806020016040528061022a8561069f565b905293505050506102396106fd565b919050565b606080610255610250846101a261027f565b610742565b915091506102616106fd565b915091565b606061027061088e565b905090565b60606102706108db565b6060604051806101a001604052806101638152602001614d886101639139905090565b60606040518060c0016040528060908152602001614eeb60909139905090565b61034f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f80191681526020016060815260200160608152602001606081526020015f815260200160608152602001606081525090565b5f6040518061026001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f801b81526020015f8152602001600481526020015f81526020015f81526020015f81526020015f801b8152602001848152602001858152602001600467ffffffffffffffff8111156103d5576103d56146eb565b6040519080825280602002602001820160405280156103fe578160200160208202803683370190505b5081525f602080830182905260408084018b905260609384018a90528051601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016828152808301825283517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001681178452855290840182905283018190529082018190526080820181905260a082018190526101208201819052610140820181905261020082015290505b95945050505050565b5f5b8183101561050c57825160015f9190911a1b6401000026008116156104e7576104e0858585610b9c565b9350610506565b65800000000000811615610500576104e0858585610be0565b5061050c565b506104b6565b50815b9392505050565b815160408051808201909152601081527f7573696e672d776f7264732d66726f6d0000000000000000000000000000000060208201525f91906105589061493e565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000821614610589578391505061050f565b506010830192508183106106005761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517fe3e4992d0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b60405180910390fd5b825160015f91821a1b90640100002600821690036106475761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016105c2565b836001019350505b8183101561050c576106628484846104b4565b92508183101561050c575f80610679868686610da8565b90965090925090508161068d57505061050c565b610698868683610f38565b505061064f565b60c08101516040516060919073ffffffffffffffffffffffffffffffffffffffff602082015f5b84156106e757848316825260a09490941c51936020909101906001016106c6565b83526040526106f582610fd5565b509392505050565b60405162010000811061073f576040517f766c065f000000000000000000000000000000000000000000000000000000008152600481018290526024016105f7565b50565b6060805f836102200151511115610872575f61076384610220015160200190565b90505f61077885610220015180510160200190565b90506107858583836104b4565b9150610792858383610516565b91505b808210156107c9576107a88583836104b4565b91506107b5858383611023565b91506107c285838361137c565b9150610795565b808214610802576040517f7d565df600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101008501516008161561086f5761022085015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517ff06f54cf0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b50505b61088561087e84611891565b84906119c6565b91509150915091565b6040805160a0810182526004808252611a2e6020830152611cf292820192909252611d32606082810191909152611d8f608083015291908190805b6108d281611f12565b94505050505090565b60606146a25f604890508091505f6040518061092001604052808467ffffffffffffffff1667ffffffffffffffff168152602001611fa28152602001611fa28152602001611fa2815260200161206e81526020016121828152602001612182815260200161206e815260200161206e81526020016121828152602001611fa28152602001611fa28152602001611fa28152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152602001612182815260200161218281526020016121828152509050606081905060488151146108c95780516040517fc8b569010000000000000000000000000000000000000000000000000000000081526004810191909152602481018490526044016105f7565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690525f610bd883836401000026006121c4565b949350505050565b6101008301805160011790525f60048301821015610c585761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517f25a764680000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b825160f01c612f2a8114610cc55761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f3e47169c0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b6003840193505f5b83851015610d6a5784515f1a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd18101610d5e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86015160f01c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5d18101610d5c57505050600193840193610d6a565b505b85600101955050610ccd565b80610d9e5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001610c23565b5092949350505050565b81515f90819081908190600181831a1b6703ff200000000000811615610ead5786610dd48960016149b0565b1015610ea457600182811a1b7ffffffffffffffffffffffffffffffffffeffffffffffffffffff00000000000082821701610e11575f9350610e9e565b7ffffffffffffffffffffffffffffffffffffffffffeffffffffff00000000000082821701610e99576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f75c28ff90000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b600193505b50610ef2565b60019250610ef2565b640400000000811615610ec35760029250610ef2565b6b080000000000000000000000811615610ee05760039250610ef2565b505f9450869350849250610f2f915050565b505f9050610f20888888610f1883876101a09190910151600291820201015161ffff1690565b63ffffffff16565b90975060019550879450925050505b93509350939050565b73ffffffffffffffffffffffffffffffffffffffff811115610fb35761022083015182037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f9d7e517e0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b60c09092018051604080516020810190915290815260a01b9290921790915250565b60208101602082510282015b8082101561101e5781518151835281526020909101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001610fe1565b505050565b5f5b8183101561050c5782515f90600190821a1b6f07fffffe80000000000000000000000081161561123a57610100860151600116156110bd5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517f5520a5170000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b6f07fffffe00000000000000000000000081161561116e576110f085856f07fffffe0000000003ff2000000000006121ed565b90955091505f61110087846122bc565b50905080156111685761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f53e6feba0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b5061118f565b61118c60018601856f07fffffe0000000003ff2000000000006121c4565b94505b856040015160ff1660ff14806111ac57508560a0015160ff1660ff145b156112105761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f382063410000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b604086018051600190810190915260a0870180519091019052610100860180516009179052611375565b64010000260081161561128c5761125a60018601856401000026006121c4565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690529450611375565b6704000000000000008116156112d8575050610100840180516008177ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1690526001929092019161050c565b658000000000008116156113465761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517fedad0c580000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001611088565b5050611025565b5f5b8183101561050c5782515f90600190821a1b6f07fffffe00000000000000000000000081161561157a57610100860151600116156114165761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517f4e803df60000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b8461143281866f07fffffe0000000003ff2000000000006121ed565b80945081975050505f8061144b89610240015186612337565b91509150811561148c5761146089898961240b565b97505f61146d8a83612630565b905061147a8a8383612656565b50610100890180516002179052611566565b611496898661283b565b909250905081156114ba576114ac895f83612656565b6114b5896128b5565b611566565b5f6060848a03600581016114cf8d8d8d61240b565b9b508c6101e0015151602002602001810190505f60059050604051935060208201840160405282818501528184528394506115178860056115108760200190565b018561291b565b5050506101e08b015180516001019061154a906115448361153b8680510160200190565b90602002900390565b83612924565b506115578b60ff84612656565b50506101008901805160021790525b50505061010086018051600117905261188a565b6101008601516002161561167a576501000000000081165f036115f65761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f23b5c6ea0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b606086810180515f1a6003019190829053603b821115611642576040517f6232f2d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050610100860180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc16905260019094019361188a565b65020000000000811615611734576060868101515f90811a91908290036116fa5761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f7f9db5420000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b808801600383039250828153826004820101515f1a8360028301015160f01c6001015350611727886128b5565b505060019094019361188a565b6401000026008116156117865761175460018601856401000026006121c4565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe169052945061188a565b6b0800000003ff2004000000008116156117c1576117a5868686612930565b94506117b0866128b5565b61010086018051600117905261188a565b651000000000008116156117e6576117d98686612a38565b505060019092019161050c565b67080000000000000081161561181e576118008686612a38565b61180986612dae565b5050600461010085015260019092019161050c565b6580000000000081161561185b5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001611311565b61022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016113e1565b505061137e565b60e08101518151516060919060f082901c90602081146118dd576040517f858f2dcf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051935060208401601083045f8183535060016008850483018101928391015f80805b8881101561193a5789811c61ffff81165163ffff0000601092831b16811760e01b8786015284019360f08390031b929092179101611901565b50825117909152878203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08181018952908801601f01166040525f5b828110156119ba576002810288016003015161ffff90811683018051602060f082901c019260e09190911c16906119af83828461291b565b505050600101611977565b50505050505050919050565b6060805f6119d3846130dc565b90505f5b81811015611a16575f6119ea86836130f6565b60040190505f6119fa8784613125565b60040282019050611a0c88838361313c565b50506001016119d7565b5083611a21866133fc565b92509250505b9250929050565b5f80808080611a3e888888613471565b985090925090508181036040811115611ab05761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517fff2f59490000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b805f03611b165761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517fc75cd5090000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b60028106600103611b805761022089015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517fd76d9b570000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b6001820397505f5b838910611ce15788515f90811a906001821b906703ff000000000000821615611bd457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd08201611cab565b6c7e000000000000000000000000821615611c1257507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa98201611cab565b687e0000000000000000821615611c4c57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc98201611cab565b6102208d01518c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f69f1e3e60000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909b019a831b96909617955050600401611b88565b50509350909150505b935093915050565b5f805f805f80611d0288886134c1565b92965090945092509050611d17898486613904565b82611d228383613966565b9550955050505050935093915050565b5f808080611d418787876139b8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301805184840382529199509294509092505f91611d7f81613b2e565b9190529698969750505050505050565b6001909101905f8083611db381856fffffffffdffffffffffffffeffffd9ff6121c4565b945084818103611e1c5761022087015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517ff73a1aa80000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b611e27878787610b9c565b955085611e4581876fffffffffdfffffffffffffffffffffff6121c4565b965086868110611eaf5761022089015188037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517fc4b191350000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b875160015f91821a1b906b20000000000000000000000082169003611efd576102208a015189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001611e7a565b5060019097019687611d228a86868686613b5a565b60605f825160020267ffffffffffffffff811115611f3257611f326146eb565b6040519080825280601f01601f191660200182016040528015611f5c576020820181803683370190505b50905061ffff80196020850160208651028101600285015b81831015611f9657805183518616908516178152602090920191600201611f74565b50939695505050505050565b5f815160010361202d575060208101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116601b0b60e082901d5f611fe5838383613cfc565b905061ffff811115612023576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250610239915050565b81515f0361203c57505f919050565b6040517f1ac6690800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f815160020361214657602082015160408301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216601b0b60e083901d5f6120b5838383613cfc565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8516601b0b935060e085901d925090505f6120ee848483613cfc565b905060ff8211806120ff575060ff81115b15612136576040517f7938075c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60081b1794506102399350505050565b60028251101561203c576040517ff16066b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81515f146121bd576040517f9f16b02000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505f919050565b5f5b5f82600186515f1a1b161183851016156121e5576001840193506121c6565b509192915050565b5f8080600181878703602081116122045780612207565b60205b915050875192505b8519600184841a1b1615818310161561222d5760018201915061220f565b9681019660208290036008810293841c90931b926122af57604080516020810185905201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fe47fe8b70000000000000000000000000000000000000000000000000000000082526105f79160040161492c565b5095969095509350505050565b5f806122c8848461283b565b909250905081611a275750610120830180515f93845260209384902060408051928352948201855293909401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909316601084901b62ff00001617909317909252909160ff90911660010190565b600182810180515f928392600560ff93909316602102870192830192909101835b818310156123fc5760018301516021909301805190935f90819060ff168180612381838e613d58565b915091508186165f036123a3575f809b509b5050505050505050505050611a27565b5f876123b3600185038916613d83565b016004028b015195505062ffffff90811693508416830391506123e79050575060019750601c1a9550611a27945050505050565b6123f083613d83565b84019350505050612358565b505f9788975095505050505050565b81516101e08401515f80825291600190831a1b907ffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000008201610d9e5761244f856149f0565b610100870180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe169052805190955060015f91821a1b9250805b858710156125f057865160015f9190911a1b93506401000026008416156124bd576124b6888888610b9c565b965061248a565b6740000000000000008416156124e1576124d6876149f0565b9650600190506125f0565b6001886101000151165f0361259057600482036125575761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f8c9fdbb30000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b5f612563898989613e5b565b60208581028701018190526101008b01805160011790529098509050612588836149f0565b92505061248a565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517f722cd24a0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b806126245761022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016125bb565b50905250919392505050565b6101c08201516002828102820101516101e08401515f9261ffff90921691906104ab9083565b61265f83613e83565b610100830180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb1660081790526020808401515f90811a8501602101805190911a60ff8114929190600181018253505081156126e8576040517f8092d1ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050825180516060808601515f90811a87016061018051939461ffff8616949093921a60ff81149291600886048503601c0191600181018253505f60038201537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe30180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016909117905281156127ab576040517f3abd0c5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050602090920183821b176018820185901b178083529160e08290036128335760408051601083901b6020908117601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016918252810190915281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000168117825286525b505050505050565b6101208201516101408301515f8381526020808220919384939290911c91600160ff84161b808216156128a05761ffff83165b801561289e578360201c8503612891576001965061ffff8460101c16955061289e565b51925061ffff831661286e565b505b17610140909601959095525090939092509050565b6060818101515f90811a919082900361101e57602083810180515f1a600101919082815350603f8210612914576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b8083835e505050565b6020810283835e505050565b5f808061293e868686610da8565b90965092509050806129aa5761022086015185037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015b6040517fb0e4e5b30000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b5f806129b584613f0f565b61018089015116156129f65761016088015160101c5b80158015906129d8575082155b156129f4576020810151905190851492506001909101906129cb565b505b61016088015161ffff16612a1c600184612a105782612a14565b8383035b8b9190612656565b5081612a2c57612a2c8885613f26565b50949695505050505050565b6060828101515f1a908115612aa65761022084015183037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f6fb11cdc0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b5050612ab182613e83565b61010082018051600416600890811790915260a0830151602084015160ff8083169360f89290921c9290911c1681035f819003612b81576004856101000151165f03612b565761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517fab1d3ea70000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b90820160f881901b6020860152610200850151909190612b769084613f78565b610200860152612c58565b6001811115612c585780831015612bf15761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f78ef27820000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b80831115612c585761022085015184037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f43168e680000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b8082036001016020601083028101905b81811015612d9a5760a08801516020848a0181015191831c61ffff16915f1a9060015b828111612d885760208406601c03612ca457925160f01c925b83516102008d015160019190911a90612cbd9082613ffc565b6102008e01525f8285148015612cd35750896001145b612cde576001612ce0565b8b5b6102008f0151909150612cf39082614042565b6102008f0152600f811180612d085750600f82115b15612d6c576102208e01518d037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f7ea1869f0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b818160041b176001870153505060049390930192600101612c8b565b50506001909401935050601001612c68565b5050505060081b60a0909301929092525050565b60e081015160208083015160f083811c925f9290921a6001019190839003612e02576040517fa806284100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610200850151855180515f928392909160219060101c61ffff165b8015612e3457805190925060101c61ffff16612e1d565b506040518a82018051919650601c8401939160049160248901915f90811a805b8d831015612f195760048202860195506004878a03045b80821115612e8957965161ffff16601c810199509690036007612e6b565b506004810298899003805186529894909401938103865b6007821115612ee5575160101c61ffff1680518652601c909501947ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff990910190612ea0565b8115612f00575160101c61ffff168051865260048202909501945b50505060019182018051909291909101905f1a80612e54565b50505082895250600488810180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9290940491909101601881901b8817939093179052601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660405260ff109450508315612fe5576040517fe972437e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ff26001808a1b614a27565b891685891b60f06130048b60106149b0565b901b171760e08b01526101008a0180517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7169052604080516020601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681815280820183525f80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001682178152908d52908c01819052908b0181905260608b0181905260808b0181905260a08b018190526101208b018190526101408b018190526102008b015250505050505050505050565b5f81515f036130ec57505f919050565b50602001515f1a90565b5f80613101846130dc565b60020260010190505f61311485856140b5565b949091019093016020019392505050565b5f8061313184846130f6565b515f1a949350505050565b8082101561101e5781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016133765760c08401515b80156133745760a081901c5161016086015161ffff60e085901c1660208101805160089390931b62ffff0016600187901a1760e81b7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909316929092179091526040517f570c7a630000000000000000000000000000000000000000000000000000000081529192915f908190819073ffffffffffffffffffffffffffffffffffffffff86169063570c7a639061322f90879060040161492c565b5f60405180830381865afa158015613249573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261328e9190810190614ac6565b925092509250821561336a5781516004146132d757816040517fbe2d187d0000000000000000000000000000000000000000000000000000000081526004016105f7919061492c565b60208201517fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff88161789525f5b815181101561335f5761335782828151811061334057613340614b73565b60200260200101518c613f2690919063ffffffff16565b600101613322565b505050505050613374565b5050505050613177565b505b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160f882901c016133f057606061ffff8260e01c1690505f6003820152600581019050806040517faedfba2f0000000000000000000000000000000000000000000000000000000081526004016105f7919061492c565b5060048201915061313c565b6101608101516040805161ffff8316808252602080820283019081019093529092909160109190911c90835b808211156134685760208301518252915161ffff16917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090910190613428565b50505050919050565b5f8080806134808660026149b0565b9050806c7e0000007e03ff0000000000005b86821081600184515f1a1b16151516156134b157600182019150613492565b5090979096508695509350505050565b5f8281806134d68386652000000000006121c4565b925085831415836134f081886703ff0000000000006121c4565b945080850361352a57507f34bd20690000000000000000000000000000000000000000000000000000000094505f92508291506138fb9050565b5f806135368a8861410b565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615613574575095505f93508392506138fb915050565b86519095506540000000000060015f9290921a9190911b16151588871016915050801561380357506001909301925f846135b781896703ff0000000000006121c4565b95508086036135f257507f7bfa48af0000000000000000000000000000000000000000000000000000000095505f93508392506138fb915050565b855b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018051908a1160015f9290921a9190911b660100000000000016151516600103613661577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016135f4565b8181146136b8575f80613674848461410b565b90925090507fffffffff000000000000000000000000000000000000000000000000000000008216156136b4575097505f95508594506138fb9350505050565b9350505b5f8312156136f357507f7bfa48af0000000000000000000000000000000000000000000000000000000096505f94508493506138fb92505050565b83156136ff57825f0392505b80820394505f85131561373f57507f013b2aaa0000000000000000000000000000000000000000000000000000000096505f94508493506138fb92505050565b855f0361374e57829550613800565b5f859003604381111561378f57507f32b8b8be0000000000000000000000000000000000000000000000000000000097505f95508594506138fb9350505050565b600a0a8681025f888383816137a6576137a66149c3565b0514159050601b82900b82141581806137bc5750805b156137f857507f32b8b8be000000000000000000000000000000000000000000000000000000009a505f98508897506138fb9650505050505050565b505084019650505b50505b84516c2000000020000000000000000060015f9290921a9190911b1615158786101680156138ec5760019095019485613843818a652000000000006121c4565b965086613859818b6703ff0000000000006121c4565b975080880361389657507f013b2aaa0000000000000000000000000000000000000000000000000000000097505f95508594506138fb9350505050565b505f806138a3838a61410b565b90925090507fffffffff000000000000000000000000000000000000000000000000000000008216156138e3575097505f95508594506138fb9350505050565b95860195925050505b845f036138f7575f93505b5050505b92959194509250565b7fffffffff0000000000000000000000000000000000000000000000000000000081161561101e576102208301515f9083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0019050815f528060045260245ffd5b5f805f6139738585614235565b91509150806106f5576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016105f7565b5f80806001850181806f7ffffffffffffffffffffffb0000000081807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b8b0301602080821015613a065750805b875193505b84600185851a1b1615158184101615613a2957600183019250613a0b565b505080602003613a92576102208c01518b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f30515bda0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b85810180519095505f1a6001811b640400000000161580613ab25750858b145b15613b16576102208d015186037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016040517f04022fbf0000000000000000000000000000000000000000000000000000000081526004016105f791815260200190565b50949b939a505060018a019850919650505050505050565b5f80601f90505f60e09050818451168082175f528060208601600183016020035e50505f519392505050565b5f60608186860361ffff811115613ba0576040517fb6da789c000000000000000000000000000000000000000000000000000000008152600481018290526024016105f7565b604080516041888803848101838101929092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690935260028281018590520181529350602284019250613bf689848461291b565b613c03878385018361291b565b50505060c08701515b8015613ccd5760a081901c516040517fc6c0cbb60000000000000000000000000000000000000000000000000000000081529091905f90819073ffffffffffffffffffffffffffffffffffffffff84169063c6c0cbb690613c7190889060040161492c565b6040805180830381865afa158015613c8b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613caf9190614ba0565b915091508115613cc55794506104ab9350505050565b505050613c0c565b61022088015187037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001612975565b5f805f613d0a86868661433b565b9150915080613d4f576040517f05e4767800000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044016105f7565b50949350505050565b5f80825f528360205360215f2090506001815f1a1b915062ffffff8116611a27575060019250929050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613db45750610100919050565b507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f7f5555555555555555555555555555555555555555555555555555555555555555600183901c16909103600281901c7f3333333333333333333333333333333333333333333333333333333333333333908116911601600481901c01167f01010101010101010101010101010101010101010101010101010101010101010260f81c90565b5f805f805f613e6b888888610da8565b9250925092508215613ccd579093509150611cea9050565b8051602080830180515f90811a8086016021015160a0939190831a613ed55785518488018051600861ffff909316929092046020038801601e83901a840360010160100290811b909217905260f01092505b50508015612914576040517f5b1a42d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f613f1c61010083614bca565b6001901b92915050565b6101608201805160408051808201909152601091821c808252602082018590528351600161ffff909116019282901b92909217909252613f6583613f0f565b6101809094018051909417909352505050565b5f613f838383614042565b925060ff600884901c8116830190811115613fca576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff841660089190911b17905092915050565b5f60ff83168281101561403b576040517f23b49a2a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050900390565b5f60ff808416830190600885901c811690601086901c90831115614092576040517fe826b5f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8083111561409d5750815b601081901b600883901b841717935050505092915050565b5f6140bf836130dc565b82106140fb5781836040517ffcfaeff10000000000000000000000000000000000000000000000000000000081526004016105f7929190614c02565b50600202016003015161ffff1690565b81515f90819065200000000000600191831a9190911b161515838510168085019082806141388488614487565b90925090507fffffffff00000000000000000000000000000000000000000000000000000000821615614173575093505f9250611a27915050565b825f036141d6577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116141a7575f6141c9565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95509350611a2792505050565b7f80000000000000000000000000000000000000000000000000000000000000008111614203575f614225565b7f0fdc2635000000000000000000000000000000000000000000000000000000005b95505f0393505050509250929050565b5f601b83900b8314838382614299577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561427957620186a0860595506005850194505b8586601b0b1461429457600a86059550846001019450614279565b6142af565b855f036142af57505f925060019150611a279050565b848560030b1461430b575f8512156142cf57505f9250829150611a279050565b6040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016105f7565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f805f851215614381576040517f4a7d166b00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016105f7565b845f0361439357505f90506001611cea565b8460ff84168501858112156143de576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016105f7565b5f805f831215614448577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb383121561441f575f809550955050505050611cea565b825f03600a0a9150818481614436576144366149c3565b0495505084029091149150611cea9050565b5f8313156144775761445b83600a614d38565b91506144678285614d43565b955060019450611cea9350505050565b8360019550955050505050611cea565b5f808284106144ba57507f34bd20690000000000000000000000000000000000000000000000000000000090505f611a27565b835f036144f3576040517fda6966d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60305f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501815b87821015801561452b5750604d83105b1561456e57815160018401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930192600a0a5f9190911a859003020161451b565b8782106146945781515f1a84900360018111156145b657507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611a279350505050565b600a84900a81028281018311156145f957507f0fdc26350000000000000000000000000000000000000000000000000000000096505f9550611a27945050505050565b9190910190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909101905b8782106146945781515f1a6030811461466957507f0fdc26350000000000000000000000000000000000000000000000000000000095505f9450611a279350505050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910190614625565b5f9890975095505050505050565b6146aa614d5a565b565b5f602082840312156146bc575f80fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461050f575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561475f5761475f6146eb565b604052919050565b5f67ffffffffffffffff821115614780576147806146eb565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f602082840312156147bc575f80fd5b813567ffffffffffffffff8111156147d2575f80fd5b8201601f810184136147e2575f80fd5b80356147f56147f082614767565b614718565b818152856020838501011115614809575f80fd5b816020840160208301375f91810160200191909152949350505050565b602080825282518282018290528051604084018190525f9291820190839060608601905b8083101561488057835173ffffffffffffffffffffffffffffffffffffffff16825292840192600192909201919084019061484a565b509695505050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b604081525f6148e9604083018561488b565b8281036020848101919091528451808352858201928201905f5b8181101561491f57845183529383019391830191600101614903565b5090979650505050505050565b602081525f61050f602083018461488b565b8051602080830151919081101561497d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561018057610180614983565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a2057614a20614983565b5060010190565b8181038181111561018057610180614983565b80518015158114610239575f80fd5b5f82601f830112614a58575f80fd5b8151602067ffffffffffffffff821115614a7457614a746146eb565b8160051b614a83828201614718565b9283528481018201928281019087851115614a9c575f80fd5b83870192505b84831015614abb57825182529183019190830190614aa2565b979650505050505050565b5f805f60608486031215614ad8575f80fd5b614ae184614a3a565b9250602084015167ffffffffffffffff80821115614afd575f80fd5b818601915086601f830112614b10575f80fd5b8151614b1e6147f082614767565b818152886020838601011115614b32575f80fd5b8160208501602083015e5f6020838301015280955050506040860151915080821115614b5c575f80fd5b50614b6986828701614a49565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8060408385031215614bb1575f80fd5b614bba83614a3a565b9150602083015190509250929050565b5f82614bfd577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500690565b828152604060208201525f610bd8604083018461488b565b600181815b80851115614c7357817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115614c5957614c59614983565b80851615614c6657918102915b93841c9390800290614c1f565b509250929050565b5f82614c8957506001610180565b81614c9557505f610180565b8160018114614cab5760028114614cb557614cd1565b6001915050610180565b60ff841115614cc657614cc6614983565b50506001821b610180565b5060208310610133831016604e8410600b8410161715614cf4575081810a610180565b614cfe8383614c1a565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115614d3057614d30614983565b029392505050565b5f61050f8383614c7b565b808202811582820484141761018057610180614983565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfe0288400100420b0280046b0641220186adb8a044003012020f2a880521281ac8811a000000000000000000080000000000100000000000000002000000000000000000290ea98a3a10f9c53927bda61c6395ad0e9fb4a8075dbeaf2d313e9e09b06d681dfe49062ce21ac13e83a6cc2ad2d2123422c3e0052f369e1f27267220a0a68d2f357696465d217b131120880f24f4a8242f1af53f41f7290afa3e8638acf3d13397e9fd00443a453b406bb547b9059d25a3cd1e11d0c3260b15eb4d16fc94274427bc412baf2cc2321b8f630dca9efe403ce35f1400684845c291e3425d68b13d5f9a151eb98c15239cd9c10c1f698235c8d3843c08d579273459d41a2c9ff617a5b2cd15c0031810f621af127ba34c26bb6c4137b2ad3d1b73563d0210215f36aa563921098e690457fb180376e752066a470128f11de101fcc60522de7ddd183d3d6d4196c37031cba2872e7b3af5304eee7219a8093543082b5f0801f5a51fa21fa21fa2206e21822182206e206e21821fa21fa21fa2218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182218221822182"; /// @dev The parse meta that is used to lookup word definitions. /// The structure of the parse meta is: diff --git a/src/lib/parse/LibParseState.sol b/src/lib/parse/LibParseState.sol index d5672d098..4ce921311 100644 --- a/src/lib/parse/LibParseState.sol +++ b/src/lib/parse/LibParseState.sol @@ -27,6 +27,12 @@ import { import {LibParseLiteral} from "./literal/LibParseLiteral.sol"; import {LibParseError} from "./LibParseError.sol"; +/// @dev The sub-parser linked list packs an address (160 bits, low) and a +/// memory pointer (96 bits, high) into a single bytes32. This constant is the +/// bit shift used to pack/unpack the pointer portion. It equals the address +/// width (160 bits = 0xA0). +uint256 constant SUB_PARSER_POINTER_SHIFT = 0xA0; + /// @dev Initial state of an active source is just the starting offset which is /// 0x20. uint256 constant EMPTY_ACTIVE_SOURCE = 0x20; @@ -329,7 +335,7 @@ library LibParseState { mstore(tailPointer, tail) } // Put the tail pointer in the high bits of the new head. - state.subParsers = subParser | bytes32(tailPointer << 0xF0); + state.subParsers = subParser | bytes32(tailPointer << SUB_PARSER_POINTER_SHIFT); } /// @notice Builds a memory array of sub parsers from the linked list of sub parsers. @@ -346,7 +352,7 @@ library LibParseState { for {} gt(tail, 0) {} { mstore(cursor, and(tail, addressMask)) cursor := add(cursor, 0x20) - tail := mload(shr(0xF0, tail)) + tail := mload(shr(SUB_PARSER_POINTER_SHIFT, tail)) len := add(len, 1) } mstore(subParsersUint256, len) diff --git a/src/lib/parse/LibSubParse.sol b/src/lib/parse/LibSubParse.sol index c8066b933..765fe0e70 100644 --- a/src/lib/parse/LibSubParse.sol +++ b/src/lib/parse/LibSubParse.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd pragma solidity ^0.8.25; -import {LibParseState, ParseState} from "./LibParseState.sol"; +import {LibParseState, ParseState, SUB_PARSER_POINTER_SHIFT} from "./LibParseState.sol"; import { OPCODE_UNKNOWN, OPCODE_EXTERN, @@ -225,7 +225,7 @@ library LibSubParse { while (deref != 0) { ISubParserV4 subParser = ISubParserV4(address(uint160(uint256(deref)))); assembly ("memory-safe") { - deref := mload(shr(0xf0, deref)) + deref := mload(shr(SUB_PARSER_POINTER_SHIFT, deref)) } // Subparse data is a fixed length header that provides the @@ -386,7 +386,7 @@ library LibSubParse { while (deref != 0) { ISubParserV4 subParser = ISubParserV4(address(uint160(uint256(deref)))); assembly ("memory-safe") { - deref := mload(shr(0xf0, deref)) + deref := mload(shr(SUB_PARSER_POINTER_SHIFT, deref)) } (bool success, bytes32 value) = subParser.subParseLiteral2(data); diff --git a/test/src/lib/parse/LibParsePragma.keyword.t.sol b/test/src/lib/parse/LibParsePragma.keyword.t.sol index 96ae800b7..819d3e2f4 100644 --- a/test/src/lib/parse/LibParsePragma.keyword.t.sol +++ b/test/src/lib/parse/LibParsePragma.keyword.t.sol @@ -4,7 +4,7 @@ pragma solidity =0.8.25; import {Test} from "forge-std/Test.sol"; -import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; +import {LibParseState, ParseState, SUB_PARSER_POINTER_SHIFT} from "../../../../src/lib/parse/LibParseState.sol"; import { LibParsePragma, PRAGMA_KEYWORD_BYTES_LENGTH, @@ -46,14 +46,14 @@ contract LibParsePragmaKeywordTest is Test { if (values.length > 0) { uint256 j = values.length - 1; bytes32 deref = state.subParsers; - uint256 pointer = uint256(deref) >> 0xF0; + uint256 pointer = uint256(deref) >> SUB_PARSER_POINTER_SHIFT; while (deref != 0) { assertEq(uint160(uint256(deref)), uint160(values[j])); assembly ("memory-safe") { deref := mload(pointer) } - pointer = uint256(deref) >> 0xF0; + pointer = uint256(deref) >> SUB_PARSER_POINTER_SHIFT; // This underflows exactly when deref is zero and the loop // terminates. unchecked { @@ -165,7 +165,7 @@ contract LibParsePragmaKeywordTest is Test { // The sub parser should be pushed to the state. bytes32 deref = state.subParsers; assertEq(uint160(uint256(deref)), uint160(subParser)); - uint256 pointer = uint256(deref) >> 0xF0; + uint256 pointer = uint256(deref) >> SUB_PARSER_POINTER_SHIFT; assembly ("memory-safe") { deref := mload(pointer) } @@ -218,12 +218,12 @@ contract LibParsePragmaKeywordTest is Test { // The sub parsers should both be pushed to the state. bytes32 deref = state.subParsers; assertEq(uint160(uint256(deref)), uint160(subParser1)); - uint256 pointer = uint256(deref) >> 0xF0; + uint256 pointer = uint256(deref) >> SUB_PARSER_POINTER_SHIFT; assembly ("memory-safe") { deref := mload(pointer) } assertEq(uint160(uint256(deref)), uint160(subParser0)); - pointer = uint256(deref) >> 0xF0; + pointer = uint256(deref) >> SUB_PARSER_POINTER_SHIFT; assembly ("memory-safe") { deref := mload(pointer) } @@ -253,14 +253,14 @@ contract LibParsePragmaKeywordTest is Test { // Both sub parsers should be in the linked list. bytes32 deref = state.subParsers; assertEq(uint160(uint256(deref)), uint160(addr2), "second address"); - uint256 pointer = uint256(deref) >> 0xF0; + uint256 pointer = uint256(deref) >> SUB_PARSER_POINTER_SHIFT; assembly ("memory-safe") { deref := mload(pointer) } assertEq(uint160(uint256(deref)), uint160(addr1), "first address"); // The list must terminate: dereferencing the first node's next pointer // yields zero (the initial empty subParsers value). - uint256 nextPointer = uint256(deref) >> 0xF0; + uint256 nextPointer = uint256(deref) >> SUB_PARSER_POINTER_SHIFT; bytes32 nextDeref; assembly ("memory-safe") { nextDeref := mload(nextPointer) @@ -313,7 +313,7 @@ contract LibParsePragmaKeywordTest is Test { bytes32 deref = state.subParsers; assertEq(uint160(uint256(deref)), uint160(0x1234567890123456789012345678901234567890), "real address"); // The linked list must terminate: no garbage sub-parser was pushed. - uint256 pointer = uint256(deref) >> 0xF0; + uint256 pointer = uint256(deref) >> SUB_PARSER_POINTER_SHIFT; assembly ("memory-safe") { deref := mload(pointer) } diff --git a/test/src/lib/parse/LibParseState.pushSubParser.largeMemory.t.sol b/test/src/lib/parse/LibParseState.pushSubParser.largeMemory.t.sol new file mode 100644 index 000000000..c75870d6b --- /dev/null +++ b/test/src/lib/parse/LibParseState.pushSubParser.largeMemory.t.sol @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: LicenseRef-DCL-1.0 +// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd +pragma solidity ^0.8.18; + +import {Test} from "forge-std/Test.sol"; +import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; +import {LibBytes, Pointer} from "rain.solmem/lib/LibBytes.sol"; + +/// @title LibParseStatePushSubParserLargeMemoryTest +/// @notice Regression test for the 16-bit pointer truncation bug in +/// pushSubParser. When the free memory pointer exceeds 0xFFFF, the linked +/// list pointer stored in the high bits of subParsers gets truncated, +/// corrupting the list. +contract LibParseStatePushSubParserLargeMemoryTest is Test { + using LibParseState for ParseState; + using LibBytes for bytes; + + /// Push the free memory pointer past 0xFFFF, then verify that + /// pushSubParser + exportSubParsers round-trips correctly. + function testPushSubParserLargeMemoryOffset() external pure { + // Allocate enough memory to push the free memory pointer past 0xFFFF. + bytes memory padding = new bytes(0x20000); + // Suppress unused variable warning. + assembly ("memory-safe") { + pop(padding) + } + + ParseState memory state; + state.data = new bytes(32); + uint256 cursor = Pointer.unwrap(state.data.dataPointer()); + state.subParsers = 0; + + address addr0 = address(0x1111111111111111111111111111111111111111); + address addr1 = address(0x2222222222222222222222222222222222222222); + address addr2 = address(0x3333333333333333333333333333333333333333); + + state.pushSubParser(cursor, bytes32(uint256(uint160(addr0)))); + state.pushSubParser(cursor, bytes32(uint256(uint160(addr1)))); + state.pushSubParser(cursor, bytes32(uint256(uint160(addr2)))); + + address[] memory exported = state.exportSubParsers(); + assertEq(exported.length, 3); + assertEq(exported[0], addr0); + assertEq(exported[1], addr1); + assertEq(exported[2], addr2); + } +} diff --git a/test/src/lib/parse/LibParseState.pushSubParser.t.sol b/test/src/lib/parse/LibParseState.pushSubParser.t.sol index 93249b313..6b4257f9f 100644 --- a/test/src/lib/parse/LibParseState.pushSubParser.t.sol +++ b/test/src/lib/parse/LibParseState.pushSubParser.t.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.18; import {Test} from "forge-std/Test.sol"; -import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; +import {LibParseState, ParseState, SUB_PARSER_POINTER_SHIFT} from "../../../../src/lib/parse/LibParseState.sol"; import {LibBytes, Pointer} from "rain.solmem/lib/LibBytes.sol"; import {InvalidSubParser} from "../../../../src/error/ErrParse.sol"; @@ -35,7 +35,7 @@ contract LibParseStatePushSubParserTest is Test { state.pushSubParser(cursor, bytes32(uint256(uint160(value)))); assertEq(uint160(uint256(state.subParsers)), uint160(value)); - uint256 pointer = uint256(state.subParsers) >> 0xF0; + uint256 pointer = uint256(state.subParsers) >> SUB_PARSER_POINTER_SHIFT; bytes32 deref; assembly ("memory-safe") { deref := mload(pointer) @@ -57,20 +57,20 @@ contract LibParseStatePushSubParserTest is Test { } assertEq(uint160(uint256(state.subParsers)), uint256(uint160(value2))); - uint256 pointer = uint256(state.subParsers) >> 0xF0; + uint256 pointer = uint256(state.subParsers) >> SUB_PARSER_POINTER_SHIFT; bytes32 deref; assembly ("memory-safe") { deref := mload(pointer) } assertEq(uint160(uint256(deref)), uint256(uint160(value1))); - pointer = uint256(deref) >> 0xF0; + pointer = uint256(deref) >> SUB_PARSER_POINTER_SHIFT; assembly ("memory-safe") { deref := mload(pointer) } assertEq(uint160(uint256(deref)), uint256(uint160(value0))); - pointer = uint256(deref) >> 0xF0; + pointer = uint256(deref) >> SUB_PARSER_POINTER_SHIFT; assembly ("memory-safe") { deref := mload(pointer) } @@ -88,14 +88,14 @@ contract LibParseStatePushSubParserTest is Test { uint256 j = values.length - 1; bytes32 deref = state.subParsers; - uint256 pointer = uint256(deref) >> 0xF0; + uint256 pointer = uint256(deref) >> SUB_PARSER_POINTER_SHIFT; while (deref != 0) { assertEq(uint160(uint256(deref)), uint160(values[j])); assembly ("memory-safe") { deref := mload(pointer) } - pointer = uint256(deref) >> 0xF0; + pointer = uint256(deref) >> SUB_PARSER_POINTER_SHIFT; // This underflows exactly when deref is zero and the loop // terminates. unchecked { From b50d3a0e91a7fd054d8a404e2e9c581ba3c621a9 Mon Sep 17 00:00:00 2001 From: thedavidmeister Date: Fri, 10 Apr 2026 12:55:04 +0400 Subject: [PATCH 2/4] Update Cargo.lock for crate renames Co-Authored-By: Claude Opus 4.6 (1M context) --- Cargo.lock | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 318fab47d..d71240377 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5431,15 +5431,15 @@ dependencies = [ ] [[package]] -name = "rain-i9r-cli" +name = "rainlang-cli" version = "0.0.1" dependencies = [ "alloy", "anyhow", "clap", - "rain-interpreter-eval", - "rain_interpreter_test_fixtures", + "rainlang-eval", "rainlang_bindings", + "rainlang_test_fixtures", "tempfile", "tokio", "tracing", @@ -5447,15 +5447,15 @@ dependencies = [ ] [[package]] -name = "rain-interpreter-eval" +name = "rainlang-eval" version = "0.1.0" dependencies = [ "alloy", "eyre", "foundry-evm", "rain-error-decoding 0.1.0 (git+https://github.com/rainlanguage/rain.error?rev=3d2ed70fb2f7c6156706846e10f163d1e493a8d3)", - "rain_interpreter_test_fixtures", "rainlang_bindings", + "rainlang_test_fixtures", "revm 24.0.1", "revm 25.0.0", "serde", @@ -5466,7 +5466,14 @@ dependencies = [ ] [[package]] -name = "rain_interpreter_dispair" +name = "rainlang_bindings" +version = "0.1.0" +dependencies = [ + "alloy", +] + +[[package]] +name = "rainlang_dispair" version = "0.1.0" dependencies = [ "alloy", @@ -5478,27 +5485,20 @@ version = "0.1.0" dependencies = [ "alloy", "alloy-ethers-typecast", - "rain_interpreter_dispair", "rainlang_bindings", + "rainlang_dispair", "thiserror 1.0.69", "tokio", ] [[package]] -name = "rain_interpreter_test_fixtures" +name = "rainlang_test_fixtures" version = "0.0.0" dependencies = [ "alloy", "getrandom 0.2.16", ] -[[package]] -name = "rainlang_bindings" -version = "0.1.0" -dependencies = [ - "alloy", -] - [[package]] name = "rand" version = "0.8.5" From bde304126c121dab5506a502ac4fcedca7ee6027 Mon Sep 17 00:00:00 2001 From: thedavidmeister Date: Fri, 10 Apr 2026 14:03:20 +0400 Subject: [PATCH 3/4] Always use prod deploy key for manual sol artifacts Co-Authored-By: Claude Opus 4.6 (1M context) --- .github/workflows/manual-sol-artifacts.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/manual-sol-artifacts.yaml b/.github/workflows/manual-sol-artifacts.yaml index 40dfdd245..5e2949f4b 100644 --- a/.github/workflows/manual-sol-artifacts.yaml +++ b/.github/workflows/manual-sol-artifacts.yaml @@ -42,7 +42,7 @@ jobs: - run: nix develop -c forge selectors up --all - run: nix develop -c forge script script/Deploy.sol:Deploy -vvvvv --slow --broadcast --verify env: - DEPLOYMENT_KEY: ${{ github.ref == 'refs/heads/main' && secrets.PRIVATE_KEY || secrets.PRIVATE_KEY_DEV }} + DEPLOYMENT_KEY: ${{ secrets.PRIVATE_KEY }} DEPLOYMENT_SUITE: ${{ inputs.suite }} CI_DEPLOY_ARBITRUM_RPC_URL: ${{ secrets.CI_DEPLOY_ARBITRUM_RPC_URL || vars.CI_DEPLOY_ARBITRUM_RPC_URL || '' }} CI_DEPLOY_BASE_RPC_URL: ${{ secrets.CI_DEPLOY_BASE_RPC_URL || vars.CI_DEPLOY_BASE_RPC_URL || '' }} From 09d6b8e3df0538910339d48386feae15d7f88413 Mon Sep 17 00:00:00 2001 From: thedavidmeister Date: Sun, 12 Apr 2026 13:10:46 +0400 Subject: [PATCH 4/4] Fix test pragmas and outdated comment from pointer fix Co-Authored-By: Claude Opus 4.6 (1M context) --- src/lib/parse/LibParseState.sol | 8 +++----- .../parse/LibParseState.pushSubParser.largeMemory.t.sol | 2 +- test/src/lib/parse/LibParseState.pushSubParser.t.sol | 2 +- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/lib/parse/LibParseState.sol b/src/lib/parse/LibParseState.sol index 4ce921311..9cf6dbc03 100644 --- a/src/lib/parse/LibParseState.sol +++ b/src/lib/parse/LibParseState.sol @@ -313,11 +313,9 @@ library LibParseState { /// @notice Pushes a `uint256` representation of a sub parser onto the linked list of /// sub parsers in memory. The sub parser is expected to be an `address` so - /// the pointer for the linked list is ORed in the 16 high bits of the - /// `uint256`. Only 16 bits are available for the linked-list pointer, so - /// this function relies on `checkParseMemoryOverflow` keeping the free - /// memory pointer below `0x10000`. If that invariant is violated, the - /// tail pointer will be silently truncated and the linked list corrupted. + /// the pointer for the linked list is ORed in the high 96 bits of the + /// `uint256` (above the 160-bit address). This provides ample space for + /// any practical memory pointer. /// @param state The parse state containing the sub parser linked list. /// @param cursor The current cursor for error reporting. /// @param subParser The sub parser address as a bytes32. diff --git a/test/src/lib/parse/LibParseState.pushSubParser.largeMemory.t.sol b/test/src/lib/parse/LibParseState.pushSubParser.largeMemory.t.sol index c75870d6b..f9e37a0da 100644 --- a/test/src/lib/parse/LibParseState.pushSubParser.largeMemory.t.sol +++ b/test/src/lib/parse/LibParseState.pushSubParser.largeMemory.t.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: LicenseRef-DCL-1.0 // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd -pragma solidity ^0.8.18; +pragma solidity =0.8.25; import {Test} from "forge-std/Test.sol"; import {LibParseState, ParseState} from "../../../../src/lib/parse/LibParseState.sol"; diff --git a/test/src/lib/parse/LibParseState.pushSubParser.t.sol b/test/src/lib/parse/LibParseState.pushSubParser.t.sol index 6b4257f9f..dfb911837 100644 --- a/test/src/lib/parse/LibParseState.pushSubParser.t.sol +++ b/test/src/lib/parse/LibParseState.pushSubParser.t.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: LicenseRef-DCL-1.0 // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd -pragma solidity ^0.8.18; +pragma solidity =0.8.25; import {Test} from "forge-std/Test.sol"; import {LibParseState, ParseState, SUB_PARSER_POINTER_SHIFT} from "../../../../src/lib/parse/LibParseState.sol";