diff --git a/contracts/.changeset/nervous-cherries-judge.md b/contracts/.changeset/nervous-cherries-judge.md new file mode 100644 index 00000000000..92b82e9fcf6 --- /dev/null +++ b/contracts/.changeset/nervous-cherries-judge.md @@ -0,0 +1,10 @@ +--- +'@chainlink/contracts': patch +--- + +remove rawVs from RMNRemote + + +PR issue: CCIP-4015 + +Solidity Review issue: CCIP-3966 \ No newline at end of file diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index c73de5eb7a1..dc65b4c684d 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -68,7 +68,7 @@ CCIPHome_setCandidate:test_setCandidate_ConfigDigestMismatch_reverts() (gas: 139 CCIPHome_setCandidate:test_setCandidate_success() (gas: 1365439) DefensiveExampleTest:test_HappyPath_Success() (gas: 200473) DefensiveExampleTest:test_Recovery() (gas: 424859) -E2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1521230) +E2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1520953) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_fallbackToWethTransfer() (gas: 96962) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_happyPath() (gas: 49812) EtherSenderReceiverTest_ccipReceive:test_ccipReceive_wrongToken() (gas: 17457) @@ -392,17 +392,17 @@ NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySet_overrideAllow NonceManager_applyPreviousRampsUpdates:test_SingleRampUpdate_success() (gas: 66889) NonceManager_applyPreviousRampsUpdates:test_ZeroInput_success() (gas: 12213) NonceManager_typeAndVersion:test_typeAndVersion() (gas: 9705) -OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 5910204) +OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 5908404) OffRamp_applySourceChainConfigUpdates:test_AddMultipleChains_Success() (gas: 626115) OffRamp_applySourceChainConfigUpdates:test_AddNewChain_Success() (gas: 166515) OffRamp_applySourceChainConfigUpdates:test_ApplyZeroUpdates_Success() (gas: 16763) -OffRamp_applySourceChainConfigUpdates:test_InvalidOnRampUpdate_Revert() (gas: 275075) +OffRamp_applySourceChainConfigUpdates:test_InvalidOnRampUpdate_Revert() (gas: 274803) OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChainOnRamp_Success() (gas: 168560) OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChain_Success() (gas: 181059) OffRamp_applySourceChainConfigUpdates:test_RouterAddress_Revert() (gas: 13463) OffRamp_applySourceChainConfigUpdates:test_ZeroOnRampAddress_Revert() (gas: 72746) OffRamp_applySourceChainConfigUpdates:test_ZeroSourceChainSelector_Revert() (gas: 15476) -OffRamp_applySourceChainConfigUpdates:test_allowNonOnRampUpdateAfterLaneIsUsed_success() (gas: 285425) +OffRamp_applySourceChainConfigUpdates:test_allowNonOnRampUpdateAfterLaneIsUsed_success() (gas: 285153) OffRamp_batchExecute:test_MultipleReportsDifferentChainsSkipCursedChain_Success() (gas: 177564) OffRamp_batchExecute:test_MultipleReportsDifferentChains_Success() (gas: 333809) OffRamp_batchExecute:test_MultipleReportsSameChain_Success() (gas: 277075) @@ -412,28 +412,28 @@ OffRamp_batchExecute:test_SingleReport_Success() (gas: 156555) OffRamp_batchExecute:test_Unhealthy_Success() (gas: 553993) OffRamp_batchExecute:test_ZeroReports_Revert() (gas: 10600) OffRamp_ccipReceive:test_Reverts() (gas: 15407) -OffRamp_commit:test_CommitOnRampMismatch_Revert() (gas: 93097) -OffRamp_commit:test_FailedRMNVerification_Reverts() (gas: 63763) -OffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 70395) -OffRamp_commit:test_InvalidInterval_Revert() (gas: 66458) -OffRamp_commit:test_InvalidRootRevert() (gas: 65545) -OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6671577) -OffRamp_commit:test_NoConfig_Revert() (gas: 6254907) -OffRamp_commit:test_OnlyGasPriceUpdates_Success() (gas: 113187) -OffRamp_commit:test_OnlyPriceUpdateStaleReport_Revert() (gas: 121714) -OffRamp_commit:test_OnlyTokenPriceUpdates_Success() (gas: 113186) -OffRamp_commit:test_PriceSequenceNumberCleared_Success() (gas: 355766) -OffRamp_commit:test_ReportAndPriceUpdate_Success() (gas: 164660) -OffRamp_commit:test_ReportOnlyRootSuccess_gas() (gas: 141660) -OffRamp_commit:test_RootAlreadyCommitted_Revert() (gas: 148891) -OffRamp_commit:test_RootWithRMNDisabled_success() (gas: 154318) -OffRamp_commit:test_SourceChainNotEnabled_Revert() (gas: 62025) -OffRamp_commit:test_StaleReportWithRoot_Success() (gas: 233095) -OffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 125579) -OffRamp_commit:test_Unhealthy_Revert() (gas: 60822) -OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 207441) -OffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 53889) -OffRamp_constructor:test_Constructor_Success() (gas: 6216896) +OffRamp_commit:test_CommitOnRampMismatch_Revert() (gas: 92834) +OffRamp_commit:test_FailedRMNVerification_Reverts() (gas: 63500) +OffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 70146) +OffRamp_commit:test_InvalidInterval_Revert() (gas: 66209) +OffRamp_commit:test_InvalidRootRevert() (gas: 65304) +OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6669536) +OffRamp_commit:test_NoConfig_Revert() (gas: 6252866) +OffRamp_commit:test_OnlyGasPriceUpdates_Success() (gas: 112980) +OffRamp_commit:test_OnlyPriceUpdateStaleReport_Revert() (gas: 121333) +OffRamp_commit:test_OnlyTokenPriceUpdates_Success() (gas: 112979) +OffRamp_commit:test_PriceSequenceNumberCleared_Success() (gas: 355372) +OffRamp_commit:test_ReportAndPriceUpdate_Success() (gas: 164388) +OffRamp_commit:test_ReportOnlyRootSuccess_gas() (gas: 141416) +OffRamp_commit:test_RootAlreadyCommitted_Revert() (gas: 148426) +OffRamp_commit:test_RootWithRMNDisabled_success() (gas: 154111) +OffRamp_commit:test_SourceChainNotEnabled_Revert() (gas: 61771) +OffRamp_commit:test_StaleReportWithRoot_Success() (gas: 232626) +OffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 125320) +OffRamp_commit:test_Unhealthy_Revert() (gas: 60572) +OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 207009) +OffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 53689) +OffRamp_constructor:test_Constructor_Success() (gas: 6215096) OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 136627) OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 103707) OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 101534) @@ -444,12 +444,12 @@ OffRamp_execute:test_IncorrectArrayType_Revert() (gas: 17639) OffRamp_execute:test_LargeBatch_Success() (gas: 3406667) OffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 371505) OffRamp_execute:test_MultipleReports_Success() (gas: 299194) -OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 7079421) -OffRamp_execute:test_NoConfig_Revert() (gas: 6303869) +OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 7077621) +OffRamp_execute:test_NoConfig_Revert() (gas: 6302069) OffRamp_execute:test_NonArray_Revert() (gas: 27643) OffRamp_execute:test_SingleReport_Success() (gas: 175809) OffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 147805) -OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 6971078) +OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 6969278) OffRamp_execute:test_ZeroReports_Revert() (gas: 17317) OffRamp_executeSingleMessage:test_MessageSender_Revert() (gas: 18537) OffRamp_executeSingleMessage:test_NonContractWithTokens_Success() (gas: 244193) @@ -606,7 +606,7 @@ RMNHome_setDynamicConfig:test_setDynamicConfig_MinObserversTooHigh_reverts() (ga RMNHome_setDynamicConfig:test_setDynamicConfig_OnlyOwner_reverts() (gas: 14099) RMNHome_setDynamicConfig:test_setDynamicConfig_success() (gas: 104862) RMNRemote_constructor:test_constructor_success() (gas: 8334) -RMNRemote_constructor:test_constructor_zeroChainSelector_reverts() (gas: 59245) +RMNRemote_constructor:test_constructor_zeroChainSelector_reverts() (gas: 59238) RMNRemote_curse:test_curse_AlreadyCursed_duplicateSubject_reverts() (gas: 154479) RMNRemote_curse:test_curse_calledByNonOwner_reverts() (gas: 18802) RMNRemote_curse:test_curse_success() (gas: 149431) @@ -618,13 +618,13 @@ RMNRemote_setConfig:test_setConfig_notEnoughSigners_reverts() (gas: 54212) RMNRemote_uncurse:test_uncurse_NotCursed_duplicatedUncurseSubject_reverts() (gas: 51993) RMNRemote_uncurse:test_uncurse_calledByNonOwner_reverts() (gas: 18772) RMNRemote_uncurse:test_uncurse_success() (gas: 40171) -RMNRemote_verify_withConfigNotSet:test_verify_reverts() (gas: 13650) -RMNRemote_verify_withConfigSet:test_verify_InvalidSignature_reverts() (gas: 78585) -RMNRemote_verify_withConfigSet:test_verify_OutOfOrderSignatures_duplicateSignature_reverts() (gas: 76403) -RMNRemote_verify_withConfigSet:test_verify_OutOfOrderSignatures_not_sorted_reverts() (gas: 83466) -RMNRemote_verify_withConfigSet:test_verify_ThresholdNotMet_reverts() (gas: 321808) -RMNRemote_verify_withConfigSet:test_verify_UnexpectedSigner_reverts() (gas: 387816) -RMNRemote_verify_withConfigSet:test_verify_success() (gas: 68296) +RMNRemote_verify_withConfigNotSet:test_verify_reverts() (gas: 13578) +RMNRemote_verify_withConfigSet:test_verify_InvalidSignature_reverts() (gas: 96449) +RMNRemote_verify_withConfigSet:test_verify_OutOfOrderSignatures_duplicateSignature_reverts() (gas: 94267) +RMNRemote_verify_withConfigSet:test_verify_OutOfOrderSignatures_not_sorted_reverts() (gas: 101330) +RMNRemote_verify_withConfigSet:test_verify_ThresholdNotMet_reverts() (gas: 303846) +RMNRemote_verify_withConfigSet:test_verify_UnexpectedSigner_reverts() (gas: 427512) +RMNRemote_verify_withConfigSet:test_verify_success() (gas: 86159) RateLimiter_constructor:test_Constructor_Success() (gas: 19806) RateLimiter_consume:test_AggregateValueMaxCapacityExceeded_Revert() (gas: 16042) RateLimiter_consume:test_AggregateValueRateLimitReached_Revert() (gas: 22435) diff --git a/contracts/src/v0.8/ccip/interfaces/IRMNRemote.sol b/contracts/src/v0.8/ccip/interfaces/IRMNRemote.sol index 3754a2fe918..27339154402 100644 --- a/contracts/src/v0.8/ccip/interfaces/IRMNRemote.sol +++ b/contracts/src/v0.8/ccip/interfaces/IRMNRemote.sol @@ -15,13 +15,11 @@ interface IRMNRemote { /// @param offRampAddress is not inferred by msg.sender, in case the call is made through ARMProxy /// @param merkleRoots must be well formed, and is a representation of the CommitReport received from the oracles /// @param signatures rmnNodes ECDSA sigs, only r & s, must be sorted in ascending order by signer address - /// @param rawVs rmnNodes ECDSA sigs, part v bitmap /// @dev Will revert if verification fails function verify( address offRampAddress, Internal.MerkleRoot[] memory merkleRoots, - Signature[] memory signatures, - uint256 rawVs + Signature[] memory signatures ) external view; /// @notice gets the current set of cursed subjects diff --git a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol index da9eac80282..1c7e7e46bf4 100644 --- a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol +++ b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol @@ -130,7 +130,6 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { Internal.PriceUpdates priceUpdates; // Collection of gas and price updates to commit. Internal.MerkleRoot[] merkleRoots; // Collection of merkle roots per source chain to commit. IRMNRemote.Signature[] rmnSignatures; // RMN signatures on the merkle roots. - uint256 rmnRawVs; // Raw v values of the RMN signatures. } /// @dev Both receiverExecutionGasLimit and tokenGasOverrides are optional. To indicate no override, set the value @@ -786,7 +785,7 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { // Verify RMN signatures if (!dynamicConfig.isRMNVerificationDisabled) { if (commitReport.merkleRoots.length > 0) { - i_rmnRemote.verify(address(this), commitReport.merkleRoots, commitReport.rmnSignatures, commitReport.rmnRawVs); + i_rmnRemote.verify(address(this), commitReport.merkleRoots, commitReport.rmnSignatures); } } diff --git a/contracts/src/v0.8/ccip/rmn/RMNRemote.sol b/contracts/src/v0.8/ccip/rmn/RMNRemote.sol index 8077ee7f3d0..6bc75663865 100644 --- a/contracts/src/v0.8/ccip/rmn/RMNRemote.sol +++ b/contracts/src/v0.8/ccip/rmn/RMNRemote.sol @@ -71,6 +71,11 @@ contract RMNRemote is OwnerIsCreator, ITypeAndVersion, IRMNRemote { Config private s_config; uint32 private s_configCount; + /// @dev RMN nodes only generate sigs with v=27; making this constant allows us to save gas by not transmitting v + /// @dev Any valid ECDSA sig (r, s, v) can be "flipped" into (r, s*, v*) without knowing the private key (where v=27 or 28 for secp256k1) + /// https://github.com/kadenzipfel/smart-contract-vulnerabilities/blob/master/vulnerabilities/signature-malleability.md + uint8 private constant ECDSA_RECOVERY_V = 27; + EnumerableSet.Bytes16Set private s_cursedSubjects; mapping(address signer => bool exists) private s_signers; // for more gas efficient verify @@ -90,8 +95,7 @@ contract RMNRemote is OwnerIsCreator, ITypeAndVersion, IRMNRemote { function verify( address offrampAddress, Internal.MerkleRoot[] calldata merkleRoots, - Signature[] calldata signatures, - uint256 rawVs + Signature[] calldata signatures ) external view { if (s_configCount == 0) { revert ConfigNotSet(); @@ -115,8 +119,7 @@ contract RMNRemote is OwnerIsCreator, ITypeAndVersion, IRMNRemote { address prevAddress; address signerAddress; for (uint256 i = 0; i < signatures.length; ++i) { - // The v value is bit-encoded into rawVs - signerAddress = ecrecover(digest, 27 + uint8(rawVs & 0x01 << i), signatures[i].r, signatures[i].s); + signerAddress = ecrecover(digest, ECDSA_RECOVERY_V, signatures[i].r, signatures[i].s); if (signerAddress == address(0)) revert InvalidSignature(); if (prevAddress >= signerAddress) revert OutOfOrderSignatures(); if (!s_signers[signerAddress]) revert UnexpectedSigner(); diff --git a/contracts/src/v0.8/ccip/test/e2e/End2End.t.sol b/contracts/src/v0.8/ccip/test/e2e/End2End.t.sol index 4d462adfe16..83e567d965e 100644 --- a/contracts/src/v0.8/ccip/test/e2e/End2End.t.sol +++ b/contracts/src/v0.8/ccip/test/e2e/End2End.t.sol @@ -168,12 +168,8 @@ contract E2E is OnRampSetup, OffRampSetup { merkleRoot: merkleRoots[1] }); - OffRamp.CommitReport memory report = OffRamp.CommitReport({ - priceUpdates: _getEmptyPriceUpdates(), - merkleRoots: roots, - rmnSignatures: rmnSignatures, - rmnRawVs: 0 - }); + OffRamp.CommitReport memory report = + OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots, rmnSignatures: rmnSignatures}); vm.resumeGasMetering(); _commit(report, ++s_latestSequenceNumber); diff --git a/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol b/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol index 56aec836012..34de9292d69 100644 --- a/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol +++ b/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol @@ -1006,8 +1006,7 @@ contract OffRamp_executeSingleReport is OffRampSetup { return OffRamp.CommitReport({ priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18), merkleRoots: roots, - rmnSignatures: s_rmnSignatures, - rmnRawVs: 0 + rmnSignatures: s_rmnSignatures }); } } @@ -3217,8 +3216,7 @@ contract OffRamp_applySourceChainConfigUpdates is OffRampSetup { OffRamp.CommitReport({ priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18), merkleRoots: roots, - rmnSignatures: s_rmnSignatures, - rmnRawVs: 0 + rmnSignatures: s_rmnSignatures }), s_latestSequenceNumber ); @@ -3302,8 +3300,7 @@ contract OffRamp_applySourceChainConfigUpdates is OffRampSetup { OffRamp.CommitReport({ priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18), merkleRoots: roots, - rmnSignatures: s_rmnSignatures, - rmnRawVs: 0 + rmnSignatures: s_rmnSignatures }), s_latestSequenceNumber ); @@ -3356,12 +3353,8 @@ contract OffRamp_commit is OffRampSetup { merkleRoot: root }); - OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({ - priceUpdates: _getEmptyPriceUpdates(), - merkleRoots: roots, - rmnSignatures: s_rmnSignatures, - rmnRawVs: 0 - }); + OffRamp.CommitReport memory commitReport = + OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots, rmnSignatures: s_rmnSignatures}); vm.expectEmit(); emit OffRamp.CommitReportAccepted(commitReport.merkleRoots, commitReport.priceUpdates); @@ -3397,12 +3390,8 @@ contract OffRamp_commit is OffRampSetup { merkleRoot: root }); - OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({ - priceUpdates: _getEmptyPriceUpdates(), - merkleRoots: roots, - rmnSignatures: s_rmnSignatures, - rmnRawVs: 0 - }); + OffRamp.CommitReport memory commitReport = + OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots, rmnSignatures: s_rmnSignatures}); vm.expectEmit(); emit OffRamp.CommitReportAccepted(commitReport.merkleRoots, commitReport.priceUpdates); @@ -3429,12 +3418,8 @@ contract OffRamp_commit is OffRampSetup { maxSeqNr: maxSeq, merkleRoot: "stale report 1" }); - OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({ - priceUpdates: _getEmptyPriceUpdates(), - merkleRoots: roots, - rmnSignatures: s_rmnSignatures, - rmnRawVs: 0 - }); + OffRamp.CommitReport memory commitReport = + OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots, rmnSignatures: s_rmnSignatures}); vm.expectEmit(); emit OffRamp.CommitReportAccepted(commitReport.merkleRoots, commitReport.priceUpdates); @@ -3472,8 +3457,7 @@ contract OffRamp_commit is OffRampSetup { OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({ priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18), merkleRoots: roots, - rmnSignatures: s_rmnSignatures, - rmnRawVs: 0 + rmnSignatures: s_rmnSignatures }); vm.expectEmit(); @@ -3495,8 +3479,7 @@ contract OffRamp_commit is OffRampSetup { OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({ priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18), merkleRoots: roots, - rmnSignatures: s_rmnSignatures, - rmnRawVs: 0 + rmnSignatures: s_rmnSignatures }); vm.expectEmit(); @@ -3514,8 +3497,7 @@ contract OffRamp_commit is OffRampSetup { OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({ priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18), merkleRoots: roots, - rmnSignatures: s_rmnSignatures, - rmnRawVs: 0 + rmnSignatures: s_rmnSignatures }); vm.expectEmit(); @@ -3567,8 +3549,7 @@ contract OffRamp_commit is OffRampSetup { OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({ priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, tokenPrice1), merkleRoots: roots, - rmnSignatures: s_rmnSignatures, - rmnRawVs: 0 + rmnSignatures: s_rmnSignatures }); vm.expectEmit(); @@ -3678,12 +3659,8 @@ contract OffRamp_commit is OffRampSetup { onRampAddress: abi.encode(ON_RAMP_ADDRESS_1) }); - OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({ - priceUpdates: _getEmptyPriceUpdates(), - merkleRoots: roots, - rmnSignatures: s_rmnSignatures, - rmnRawVs: 0 - }); + OffRamp.CommitReport memory commitReport = + OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots, rmnSignatures: s_rmnSignatures}); vm.expectRevert(abi.encodeWithSelector(OffRamp.CursedByRMN.selector, roots[0].sourceChainSelector)); _commit(commitReport, s_latestSequenceNumber); @@ -3698,12 +3675,8 @@ contract OffRamp_commit is OffRampSetup { maxSeqNr: 4, merkleRoot: bytes32(0) }); - OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({ - priceUpdates: _getEmptyPriceUpdates(), - merkleRoots: roots, - rmnSignatures: s_rmnSignatures, - rmnRawVs: 0 - }); + OffRamp.CommitReport memory commitReport = + OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots, rmnSignatures: s_rmnSignatures}); vm.expectRevert(OffRamp.InvalidRoot.selector); _commit(commitReport, s_latestSequenceNumber); @@ -3718,12 +3691,8 @@ contract OffRamp_commit is OffRampSetup { maxSeqNr: 2, merkleRoot: bytes32(0) }); - OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({ - priceUpdates: _getEmptyPriceUpdates(), - merkleRoots: roots, - rmnSignatures: s_rmnSignatures, - rmnRawVs: 0 - }); + OffRamp.CommitReport memory commitReport = + OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots, rmnSignatures: s_rmnSignatures}); vm.expectRevert( abi.encodeWithSelector( @@ -3743,12 +3712,8 @@ contract OffRamp_commit is OffRampSetup { maxSeqNr: 0, merkleRoot: bytes32(0) }); - OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({ - priceUpdates: _getEmptyPriceUpdates(), - merkleRoots: roots, - rmnSignatures: s_rmnSignatures, - rmnRawVs: 0 - }); + OffRamp.CommitReport memory commitReport = + OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots, rmnSignatures: s_rmnSignatures}); vm.expectRevert( abi.encodeWithSelector( @@ -3763,8 +3728,7 @@ contract OffRamp_commit is OffRampSetup { OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({ priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18), merkleRoots: roots, - rmnSignatures: s_rmnSignatures, - rmnRawVs: 0 + rmnSignatures: s_rmnSignatures }); vm.expectRevert(OffRamp.StaleCommitReport.selector); @@ -3776,8 +3740,7 @@ contract OffRamp_commit is OffRampSetup { OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({ priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18), merkleRoots: roots, - rmnSignatures: s_rmnSignatures, - rmnRawVs: 0 + rmnSignatures: s_rmnSignatures }); vm.expectEmit(); @@ -3798,12 +3761,8 @@ contract OffRamp_commit is OffRampSetup { merkleRoot: "Only a single root" }); - OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({ - priceUpdates: _getEmptyPriceUpdates(), - merkleRoots: roots, - rmnSignatures: s_rmnSignatures, - rmnRawVs: 0 - }); + OffRamp.CommitReport memory commitReport = + OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots, rmnSignatures: s_rmnSignatures}); vm.expectRevert(abi.encodeWithSelector(OffRamp.SourceChainNotEnabled.selector, 0)); _commit(commitReport, s_latestSequenceNumber); @@ -3818,12 +3777,8 @@ contract OffRamp_commit is OffRampSetup { maxSeqNr: 2, merkleRoot: "Only a single root" }); - OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({ - priceUpdates: _getEmptyPriceUpdates(), - merkleRoots: roots, - rmnSignatures: s_rmnSignatures, - rmnRawVs: 0 - }); + OffRamp.CommitReport memory commitReport = + OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots, rmnSignatures: s_rmnSignatures}); _commit(commitReport, s_latestSequenceNumber); commitReport.merkleRoots[0].minSeqNr = 3; @@ -3857,8 +3812,7 @@ contract OffRamp_commit is OffRampSetup { return OffRamp.CommitReport({ priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18), merkleRoots: roots, - rmnSignatures: s_rmnSignatures, - rmnRawVs: 0 + rmnSignatures: s_rmnSignatures }); } } diff --git a/contracts/src/v0.8/ccip/test/rmn/RMNRemote.t.sol b/contracts/src/v0.8/ccip/test/rmn/RMNRemote.t.sol index 0a54fa259de..25894cc2faa 100644 --- a/contracts/src/v0.8/ccip/test/rmn/RMNRemote.t.sol +++ b/contracts/src/v0.8/ccip/test/rmn/RMNRemote.t.sol @@ -96,7 +96,7 @@ contract RMNRemote_verify_withConfigNotSet is RMNRemoteSetup { IRMNRemote.Signature[] memory signatures = new IRMNRemote.Signature[](0); vm.expectRevert(RMNRemote.ConfigNotSet.selector); - s_rmnRemote.verify(OFF_RAMP_ADDRESS, merkleRoots, signatures, 0); + s_rmnRemote.verify(OFF_RAMP_ADDRESS, merkleRoots, signatures); } } @@ -104,13 +104,13 @@ contract RMNRemote_verify_withConfigSet is RMNRemoteSetup { function setUp() public override { super.setUp(); RMNRemote.Config memory config = - RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, f: 1}); + RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, f: 3}); s_rmnRemote.setConfig(config); - _generatePayloadAndSigs(2, 2); + _generatePayloadAndSigs(2, 4); } function test_verify_success() public view { - s_rmnRemote.verify(OFF_RAMP_ADDRESS, s_merkleRoots, s_signatures, s_v); + s_rmnRemote.verify(OFF_RAMP_ADDRESS, s_merkleRoots, s_signatures); } function test_verify_InvalidSignature_reverts() public { @@ -120,7 +120,7 @@ contract RMNRemote_verify_withConfigSet is RMNRemoteSetup { s_signatures.push(sig); vm.expectRevert(RMNRemote.InvalidSignature.selector); - s_rmnRemote.verify(OFF_RAMP_ADDRESS, s_merkleRoots, s_signatures, s_v); + s_rmnRemote.verify(OFF_RAMP_ADDRESS, s_merkleRoots, s_signatures); } function test_verify_OutOfOrderSignatures_not_sorted_reverts() public { @@ -132,7 +132,7 @@ contract RMNRemote_verify_withConfigSet is RMNRemoteSetup { s_signatures.push(sig2); vm.expectRevert(RMNRemote.OutOfOrderSignatures.selector); - s_rmnRemote.verify(OFF_RAMP_ADDRESS, s_merkleRoots, s_signatures, s_v); + s_rmnRemote.verify(OFF_RAMP_ADDRESS, s_merkleRoots, s_signatures); } function test_verify_OutOfOrderSignatures_duplicateSignature_reverts() public { @@ -141,15 +141,15 @@ contract RMNRemote_verify_withConfigSet is RMNRemoteSetup { s_signatures.push(sig); vm.expectRevert(RMNRemote.OutOfOrderSignatures.selector); - s_rmnRemote.verify(OFF_RAMP_ADDRESS, s_merkleRoots, s_signatures, s_v); + s_rmnRemote.verify(OFF_RAMP_ADDRESS, s_merkleRoots, s_signatures); } function test_verify_UnexpectedSigner_reverts() public { - _setupSigners(2); // create 2 new signers that aren't configured on RMNRemote - _generatePayloadAndSigs(2, 2); + _setupSigners(4); // create new signers that aren't configured on RMNRemote + _generatePayloadAndSigs(2, 4); vm.expectRevert(RMNRemote.UnexpectedSigner.selector); - s_rmnRemote.verify(OFF_RAMP_ADDRESS, s_merkleRoots, s_signatures, s_v); + s_rmnRemote.verify(OFF_RAMP_ADDRESS, s_merkleRoots, s_signatures); } function test_verify_ThresholdNotMet_reverts() public { @@ -160,7 +160,7 @@ contract RMNRemote_verify_withConfigSet is RMNRemoteSetup { _generatePayloadAndSigs(2, 2); // 2 sigs generated, but 3 required vm.expectRevert(RMNRemote.ThresholdNotMet.selector); - s_rmnRemote.verify(OFF_RAMP_ADDRESS, s_merkleRoots, s_signatures, s_v); + s_rmnRemote.verify(OFF_RAMP_ADDRESS, s_merkleRoots, s_signatures); } } diff --git a/contracts/src/v0.8/ccip/test/rmn/RMNRemoteSetup.t.sol b/contracts/src/v0.8/ccip/test/rmn/RMNRemoteSetup.t.sol index 131dfec7cb5..435fa76cce0 100644 --- a/contracts/src/v0.8/ccip/test/rmn/RMNRemoteSetup.t.sol +++ b/contracts/src/v0.8/ccip/test/rmn/RMNRemoteSetup.t.sol @@ -18,7 +18,6 @@ contract RMNRemoteSetup is BaseTest { Internal.MerkleRoot[] s_merkleRoots; IRMNRemote.Signature[] s_signatures; - uint256 internal s_v; bytes16 internal constant curseSubj1 = bytes16(keccak256("subject 1")); bytes16 internal constant curseSubj2 = bytes16(keccak256("subject 2")); @@ -71,18 +70,13 @@ contract RMNRemoteSetup is BaseTest { while (s_signatures.length > 0) { s_signatures.pop(); } - s_v = 0; for (uint256 i = 0; i < numUpdates; i++) { s_merkleRoots.push(_generateRandomDestLaneUpdate()); } for (uint256 i = 0; i < numSigs; i++) { - (uint8 v, IRMNRemote.Signature memory sig) = _signDestLaneUpdate(s_merkleRoots, s_signerWallets[i]); - s_signatures.push(sig); - if (v == 28) { - s_v += 1 << i; - } + s_signatures.push(_signDestLaneUpdate(s_merkleRoots, s_signerWallets[i])); } } @@ -100,12 +94,11 @@ contract RMNRemoteSetup is BaseTest { } /// @notice signs the provided payload with the provided wallet - /// @return sigV v, either 27 of 28 /// @return sig the signature function _signDestLaneUpdate( Internal.MerkleRoot[] memory merkleRoots, Vm.Wallet memory wallet - ) private returns (uint8 sigV, IRMNRemote.Signature memory) { + ) private returns (IRMNRemote.Signature memory) { (, RMNRemote.Config memory config) = s_rmnRemote.getVersionedConfig(); bytes32 digest = keccak256( abi.encode( @@ -121,7 +114,14 @@ contract RMNRemoteSetup is BaseTest { ) ); (uint8 v, bytes32 r, bytes32 s) = vm.sign(wallet, digest); - return (v, IRMNRemote.Signature({r: r, s: s})); + // RMNRemote only supports sigs with v=27, so adjust if necessary + // Any valid ECDSA sig (r, s, v) can be "flipped" into (r, s*, v*) without knowing the private key (where v=27 or 28 for secp256k1) + // https://github.com/kadenzipfel/smart-contract-vulnerabilities/blob/master/vulnerabilities/signature-malleability.md + if (v == 28) { + uint256 N = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141; + s = bytes32(N - uint256(s)); + } + return (IRMNRemote.Signature({r: r, s: s})); } /// @notice bubble sort on a storage array of wallets diff --git a/core/capabilities/ccip/ccip_integration_tests/ccipreader/ccipreader_test.go b/core/capabilities/ccip/ccip_integration_tests/ccipreader/ccipreader_test.go index ff5d62205d0..61036ea60e6 100644 --- a/core/capabilities/ccip/ccip_integration_tests/ccipreader/ccipreader_test.go +++ b/core/capabilities/ccip/ccip_integration_tests/ccipreader/ccipreader_test.go @@ -114,7 +114,6 @@ func TestCCIPReader_CommitReportsGTETimestamp(t *testing.T) { S: [32]byte{4}, }, }, - RmnRawVs: big.NewInt(100), }) assert.NoError(t, err) s.sb.Commit() diff --git a/core/capabilities/ccip/ccipevm/commitcodec.go b/core/capabilities/ccip/ccipevm/commitcodec.go index 21236721724..31501ea96c4 100644 --- a/core/capabilities/ccip/ccipevm/commitcodec.go +++ b/core/capabilities/ccip/ccipevm/commitcodec.go @@ -83,7 +83,6 @@ func (c *CommitPluginCodecV1) Encode(ctx context.Context, report cciptypes.Commi PriceUpdates: priceUpdates, MerkleRoots: merkleRoots, RmnSignatures: rmnSignatures, - RmnRawVs: report.RMNRawVs.Int, } packed, err := ccipEncodingUtilsABI.Pack("exposeCommitReport", commitReport) @@ -154,7 +153,6 @@ func (c *CommitPluginCodecV1) Decode(ctx context.Context, bytes []byte) (cciptyp GasPriceUpdates: gasPriceUpdates, }, RMNSignatures: rmnSignatures, - RMNRawVs: cciptypes.NewBigInt(commitReport.RmnRawVs), }, nil } diff --git a/core/capabilities/ccip/ccipevm/commitcodec_test.go b/core/capabilities/ccip/ccipevm/commitcodec_test.go index a53fced7857..2449aa5ef04 100644 --- a/core/capabilities/ccip/ccipevm/commitcodec_test.go +++ b/core/capabilities/ccip/ccipevm/commitcodec_test.go @@ -53,7 +53,6 @@ var randomCommitReport = func() cciptypes.CommitPluginReport { {R: utils.RandomBytes32(), S: utils.RandomBytes32()}, {R: utils.RandomBytes32(), S: utils.RandomBytes32()}, }, - RMNRawVs: cciptypes.NewBigInt(utils.RandUint256()), } } diff --git a/core/gethwrappers/ccip/generated/ccip_encoding_utils/ccip_encoding_utils.go b/core/gethwrappers/ccip/generated/ccip_encoding_utils/ccip_encoding_utils.go index 7886793aa08..208c0e37d63 100644 --- a/core/gethwrappers/ccip/generated/ccip_encoding_utils/ccip_encoding_utils.go +++ b/core/gethwrappers/ccip/generated/ccip_encoding_utils/ccip_encoding_utils.go @@ -77,7 +77,6 @@ type OffRampCommitReport struct { PriceUpdates InternalPriceUpdates MerkleRoots []InternalMerkleRoot RmnSignatures []IRMNRemoteSignature - RmnRawVs *big.Int } type RMNRemoteReport struct { @@ -90,7 +89,7 @@ type RMNRemoteReport struct { } var EncodingUtilsMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"structIRMNRemote.Signature[]\",\"name\":\"rmnSignatures\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"rmnRawVs\",\"type\":\"uint256\"}],\"internalType\":\"structOffRamp.CommitReport\",\"name\":\"commitReport\",\"type\":\"tuple\"}],\"name\":\"exposeCommitReport\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"FRoleDON\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rmnHomeAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signerKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"transmitterKey\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Config[]\",\"name\":\"config\",\"type\":\"tuple[]\"}],\"name\":\"exposeOCR3Config\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"rmnReportVersion\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"destChainId\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnRemoteContractAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offrampAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"}],\"internalType\":\"structRMNRemote.Report\",\"name\":\"rmnReport\",\"type\":\"tuple\"}],\"name\":\"exposeRmnReport\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"structIRMNRemote.Signature[]\",\"name\":\"rmnSignatures\",\"type\":\"tuple[]\"}],\"internalType\":\"structOffRamp.CommitReport\",\"name\":\"commitReport\",\"type\":\"tuple\"}],\"name\":\"exposeCommitReport\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"FRoleDON\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rmnHomeAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signerKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"transmitterKey\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Config[]\",\"name\":\"config\",\"type\":\"tuple[]\"}],\"name\":\"exposeOCR3Config\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"rmnReportVersion\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"destChainId\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnRemoteContractAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offrampAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"}],\"internalType\":\"structRMNRemote.Report\",\"name\":\"rmnReport\",\"type\":\"tuple\"}],\"name\":\"exposeRmnReport\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", } var EncodingUtilsABI = EncodingUtilsMetaData.ABI diff --git a/core/gethwrappers/ccip/generated/ccip_reader_tester/ccip_reader_tester.go b/core/gethwrappers/ccip/generated/ccip_reader_tester/ccip_reader_tester.go index c5c451a3e8a..168d31806b8 100644 --- a/core/gethwrappers/ccip/generated/ccip_reader_tester/ccip_reader_tester.go +++ b/core/gethwrappers/ccip/generated/ccip_reader_tester/ccip_reader_tester.go @@ -90,7 +90,6 @@ type OffRampCommitReport struct { PriceUpdates InternalPriceUpdates MerkleRoots []InternalMerkleRoot RmnSignatures []IRMNRemoteSignature - RmnRawVs *big.Int } type OffRampSourceChainConfig struct { @@ -101,8 +100,8 @@ type OffRampSourceChainConfig struct { } var CCIPReaderTesterMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeValueJuels\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sourcePoolAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"destExecData\",\"type\":\"bytes\"}],\"internalType\":\"structInternal.EVM2AnyTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structInternal.EVM2AnyRampMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"CCIPMessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"}],\"name\":\"CommitReportAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"name\":\"ExecutionStateChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeValueJuels\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sourcePoolAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"destExecData\",\"type\":\"bytes\"}],\"internalType\":\"structInternal.EVM2AnyTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.EVM2AnyRampMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"emitCCIPMessageSent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"structIRMNRemote.Signature[]\",\"name\":\"rmnSignatures\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"rmnRawVs\",\"type\":\"uint256\"}],\"internalType\":\"structOffRamp.CommitReport\",\"name\":\"report\",\"type\":\"tuple\"}],\"name\":\"emitCommitReportAccepted\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"name\":\"emitExecutionStateChanged\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getExpectedNextSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"getInboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"getSourceChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"setDestChainSeqNr\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"testNonce\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"setInboundNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"sourceChainConfig\",\"type\":\"tuple\"}],\"name\":\"setSourceChainConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b506118cd806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063c1a5a35511610076578063c92236251161005b578063c92236251461017c578063e83eabba1461018f578063e9d68a8e146101a257600080fd5b8063c1a5a35514610114578063c7c1cba11461016957600080fd5b8063198b821c146100a85780634bf78697146100bd5780639041be3d146100d057806393df286714610101575b600080fd5b6100bb6100b6366004610a4d565b6101c2565b005b6100bb6100cb366004610d93565b610204565b6100e36100de366004610ece565b61025d565b60405167ffffffffffffffff90911681526020015b60405180910390f35b6100bb61010f366004610f39565b61028d565b6100bb610122366004610f9a565b67ffffffffffffffff918216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001691909216179055565b6100bb610177366004610fcd565b610308565b6100e361018a36600461105f565b610365565b6100bb61019d3660046110b2565b6103b1565b6101b56101b0366004610ece565b61049b565b6040516100f891906111d2565b602081015181516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e4926101f9929091611329565b60405180910390a150565b80600001516060015167ffffffffffffffff168267ffffffffffffffff167f192442a2b2adb6a7948f097023cb6b57d29d3a7a5dd33e6666d33c39cc456f328360405161025191906114e4565b60405180910390a35050565b67ffffffffffffffff8082166000908152600160208190526040822054919261028792169061163c565b92915050565b67ffffffffffffffff84166000908152600260205260409081902090518491906102ba908590859061168b565b908152604051908190036020019020805467ffffffffffffffff929092167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090921691909117905550505050565b848667ffffffffffffffff168867ffffffffffffffff167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b87878787604051610354949392919061169b565b60405180910390a450505050505050565b67ffffffffffffffff8316600090815260026020526040808220905161038e908590859061168b565b9081526040519081900360200190205467ffffffffffffffff1690509392505050565b67ffffffffffffffff808316600090815260208181526040918290208451815492860151938601519094167501000000000000000000000000000000000000000000027fffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffff93151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090931673ffffffffffffffffffffffffffffffffffffffff9095169490941791909117919091169190911781556060820151829190600182019061049490826117a6565b5050505050565b604080516080808201835260008083526020808401829052838501829052606080850181905267ffffffffffffffff87811684528383529286902086519485018752805473ffffffffffffffffffffffffffffffffffffffff8116865274010000000000000000000000000000000000000000810460ff16151593860193909352750100000000000000000000000000000000000000000090920490921694830194909452600184018054939492939184019161055790611702565b80601f016020809104026020016040519081016040528092919081815260200182805461058390611702565b80156105d05780601f106105a5576101008083540402835291602001916105d0565b820191906000526020600020905b8154815290600101906020018083116105b357829003601f168201915b5050505050815250509050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610632576106326105e0565b60405290565b60405160a0810167ffffffffffffffff81118282101715610632576106326105e0565b6040516080810167ffffffffffffffff81118282101715610632576106326105e0565b604051610120810167ffffffffffffffff81118282101715610632576106326105e0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156106e9576106e96105e0565b604052919050565b600067ffffffffffffffff82111561070b5761070b6105e0565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff8116811461073757600080fd5b50565b803561074581610715565b919050565b80357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116811461074557600080fd5b803567ffffffffffffffff8116811461074557600080fd5b600082601f83011261079f57600080fd5b813560206107b46107af836106f1565b6106a2565b82815260069290921b840181019181810190868411156107d357600080fd5b8286015b8481101561082057604081890312156107f05760008081fd5b6107f861060f565b61080182610776565b815261080e85830161074a565b818601528352918301916040016107d7565b509695505050505050565b600082601f83011261083c57600080fd5b813567ffffffffffffffff811115610856576108566105e0565b61088760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016106a2565b81815284602083860101111561089c57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f8301126108ca57600080fd5b813560206108da6107af836106f1565b82815260059290921b840181019181810190868411156108f957600080fd5b8286015b8481101561082057803567ffffffffffffffff8082111561091e5760008081fd5b818901915060a0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d030112156109575760008081fd5b61095f610638565b61096a888501610776565b8152604080850135848111156109805760008081fd5b61098e8e8b8389010161082b565b8a84015250606093506109a2848601610776565b9082015260806109b3858201610776565b938201939093529201359082015283529183019183016108fd565b600082601f8301126109df57600080fd5b813560206109ef6107af836106f1565b82815260069290921b84018101918181019086841115610a0e57600080fd5b8286015b848110156108205760408189031215610a2b5760008081fd5b610a3361060f565b813581528482013585820152835291830191604001610a12565b60006020808385031215610a6057600080fd5b823567ffffffffffffffff80821115610a7857600080fd5b9084019060808287031215610a8c57600080fd5b610a9461065b565b823582811115610aa357600080fd5b83016040818903811315610ab657600080fd5b610abe61060f565b823585811115610acd57600080fd5b8301601f81018b13610ade57600080fd5b8035610aec6107af826106f1565b81815260069190911b8201890190898101908d831115610b0b57600080fd5b928a01925b82841015610b5b5785848f031215610b285760008081fd5b610b3061060f565b8435610b3b81610715565b8152610b48858d0161074a565b818d0152825292850192908a0190610b10565b845250505082870135915084821115610b7357600080fd5b610b7f8a83850161078e565b81880152835250508284013582811115610b9857600080fd5b610ba4888286016108b9565b85830152506040830135935081841115610bbd57600080fd5b610bc9878585016109ce565b6040820152606083013560608201528094505050505092915050565b600060a08284031215610bf757600080fd5b610bff610638565b905081358152610c1160208301610776565b6020820152610c2260408301610776565b6040820152610c3360608301610776565b6060820152610c4460808301610776565b608082015292915050565b600082601f830112610c6057600080fd5b81356020610c706107af836106f1565b82815260059290921b84018101918181019086841115610c8f57600080fd5b8286015b8481101561082057803567ffffffffffffffff80821115610cb45760008081fd5b818901915060a0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d03011215610ced5760008081fd5b610cf5610638565b610d0088850161073a565b815260408085013584811115610d165760008081fd5b610d248e8b8389010161082b565b8a8401525060608086013585811115610d3d5760008081fd5b610d4b8f8c838a010161082b565b83850152506080915081860135818401525082850135925083831115610d715760008081fd5b610d7f8d8a8588010161082b565b908201528652505050918301918301610c93565b60008060408385031215610da657600080fd5b610daf83610776565b9150602083013567ffffffffffffffff80821115610dcc57600080fd5b908401906101a08287031215610de157600080fd5b610de961067e565b610df38784610be5565b8152610e0160a0840161073a565b602082015260c083013582811115610e1857600080fd5b610e248882860161082b565b60408301525060e083013582811115610e3c57600080fd5b610e488882860161082b565b6060830152506101008084013583811115610e6257600080fd5b610e6e8982870161082b565b608084015250610e81610120850161073a565b60a083015261014084013560c083015261016084013560e083015261018084013583811115610eaf57600080fd5b610ebb89828701610c4f565b8284015250508093505050509250929050565b600060208284031215610ee057600080fd5b610ee982610776565b9392505050565b60008083601f840112610f0257600080fd5b50813567ffffffffffffffff811115610f1a57600080fd5b602083019150836020828501011115610f3257600080fd5b9250929050565b60008060008060608587031215610f4f57600080fd5b610f5885610776565b9350610f6660208601610776565b9250604085013567ffffffffffffffff811115610f8257600080fd5b610f8e87828801610ef0565b95989497509550505050565b60008060408385031215610fad57600080fd5b610fb683610776565b9150610fc460208401610776565b90509250929050565b600080600080600080600060e0888a031215610fe857600080fd5b610ff188610776565b9650610fff60208901610776565b9550604088013594506060880135935060808801356004811061102157600080fd5b925060a088013567ffffffffffffffff81111561103d57600080fd5b6110498a828b0161082b565b92505060c0880135905092959891949750929550565b60008060006040848603121561107457600080fd5b61107d84610776565b9250602084013567ffffffffffffffff81111561109957600080fd5b6110a586828701610ef0565b9497909650939450505050565b600080604083850312156110c557600080fd5b6110ce83610776565b9150602083013567ffffffffffffffff808211156110eb57600080fd5b90840190608082870312156110ff57600080fd5b61110761065b565b823561111281610715565b81526020830135801515811461112757600080fd5b602082015261113860408401610776565b604082015260608301358281111561114f57600080fd5b61115b8882860161082b565b6060830152508093505050509250929050565b6000815180845260005b8181101561119457602081850181015186830182015201611178565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815273ffffffffffffffffffffffffffffffffffffffff825116602082015260208201511515604082015267ffffffffffffffff60408301511660608201526000606083015160808084015261122d60a084018261116e565b949350505050565b805160408084528151848201819052600092602091908201906060870190855b818110156112ae578351805173ffffffffffffffffffffffffffffffffffffffff1684528501517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16858401529284019291850191600101611255565b50508583015187820388850152805180835290840192506000918401905b8083101561131d578351805167ffffffffffffffff1683528501517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16858301529284019260019290920191908501906112cc565b50979650505050505050565b60006040808301604084528086518083526060925060608601915060608160051b8701016020808a0160005b848110156113e1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018652815160a067ffffffffffffffff8083511687528583015182878901526113ac8389018261116e565b848d01518316898e01528b8501519092168b890152506080928301519290960191909152509482019490820190600101611355565b5050878203908801526113f48189611235565b9998505050505050505050565b600082825180855260208086019550808260051b84010181860160005b848110156114d7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018952815160a073ffffffffffffffffffffffffffffffffffffffff82511685528582015181878701526114808287018261116e565b9150506040808301518683038288015261149a838261116e565b925050506060808301518187015250608080830151925085820381870152506114c3818361116e565b9a86019a945050509083019060010161141e565b5090979650505050505050565b6020815261153560208201835180518252602081015167ffffffffffffffff808216602085015280604084015116604085015280606084015116606085015280608084015116608085015250505050565b6000602083015161155e60c084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516101a08060e085015261157b6101c085018361116e565b915060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06101008187860301818801526115b9858461116e565b94506080880151925081878603016101208801526115d7858461116e565b945060a0880151925061160361014088018473ffffffffffffffffffffffffffffffffffffffff169052565b60c088015161016088015260e08801516101808801528701518685039091018387015290506116328382611401565b9695505050505050565b67ffffffffffffffff818116838216019080821115611684577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5092915050565b8183823760009101908152919050565b8481526000600485106116d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b846020830152608060408301526116f1608083018561116e565b905082606083015295945050505050565b600181811c9082168061171657607f821691505b60208210810361174f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f8211156117a1576000816000526020600020601f850160051c8101602086101561177e5750805b601f850160051c820191505b8181101561179d5782815560010161178a565b5050505b505050565b815167ffffffffffffffff8111156117c0576117c06105e0565b6117d4816117ce8454611702565b84611755565b602080601f83116001811461182757600084156117f15750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561179d565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561187457888601518255948401946001909101908401611855565b50858210156118b057878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea164736f6c6343000818000a", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeValueJuels\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sourcePoolAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"destExecData\",\"type\":\"bytes\"}],\"internalType\":\"structInternal.EVM2AnyTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structInternal.EVM2AnyRampMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"CCIPMessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"}],\"name\":\"CommitReportAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"name\":\"ExecutionStateChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeValueJuels\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sourcePoolAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"destExecData\",\"type\":\"bytes\"}],\"internalType\":\"structInternal.EVM2AnyTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.EVM2AnyRampMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"emitCCIPMessageSent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"structIRMNRemote.Signature[]\",\"name\":\"rmnSignatures\",\"type\":\"tuple[]\"}],\"internalType\":\"structOffRamp.CommitReport\",\"name\":\"report\",\"type\":\"tuple\"}],\"name\":\"emitCommitReportAccepted\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"name\":\"emitExecutionStateChanged\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getExpectedNextSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"getInboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"getSourceChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"setDestChainSeqNr\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"testNonce\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"setInboundNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"sourceChainConfig\",\"type\":\"tuple\"}],\"name\":\"setSourceChainConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b506118e3806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063c1a5a35511610076578063c92236251161005b578063c92236251461017c578063e83eabba1461018f578063e9d68a8e146101a257600080fd5b8063c1a5a35514610114578063c7c1cba11461016957600080fd5b80634bf78697146100a85780639041be3d146100bd57806393df2867146100ee578063bfc9b78914610101575b600080fd5b6100bb6100b63660046109d1565b6101c2565b005b6100d06100cb366004610b0c565b61021b565b60405167ffffffffffffffff90911681526020015b60405180910390f35b6100bb6100fc366004610b77565b61024b565b6100bb61010f366004610e25565b6102c6565b6100bb610122366004610fb0565b67ffffffffffffffff918216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001691909216179055565b6100bb610177366004610fe3565b610308565b6100d061018a366004611075565b610365565b6100bb61019d3660046110c8565b6103b1565b6101b56101b0366004610b0c565b61049b565b6040516100e591906111e8565b80600001516060015167ffffffffffffffff168267ffffffffffffffff167f192442a2b2adb6a7948f097023cb6b57d29d3a7a5dd33e6666d33c39cc456f328360405161020f919061132e565b60405180910390a35050565b67ffffffffffffffff80821660009081526001602081905260408220549192610245921690611486565b92915050565b67ffffffffffffffff841660009081526002602052604090819020905184919061027890859085906114d5565b908152604051908190036020019020805467ffffffffffffffff929092167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090921691909117905550505050565b602081015181516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e4926102fd9290916115d9565b60405180910390a150565b848667ffffffffffffffff168867ffffffffffffffff167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8787878760405161035494939291906116b1565b60405180910390a450505050505050565b67ffffffffffffffff8316600090815260026020526040808220905161038e90859085906114d5565b9081526040519081900360200190205467ffffffffffffffff1690509392505050565b67ffffffffffffffff808316600090815260208181526040918290208451815492860151938601519094167501000000000000000000000000000000000000000000027fffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffff93151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090931673ffffffffffffffffffffffffffffffffffffffff9095169490941791909117919091169190911781556060820151829190600182019061049490826117bc565b5050505050565b604080516080808201835260008083526020808401829052838501829052606080850181905267ffffffffffffffff87811684528383529286902086519485018752805473ffffffffffffffffffffffffffffffffffffffff8116865274010000000000000000000000000000000000000000810460ff16151593860193909352750100000000000000000000000000000000000000000090920490921694830194909452600184018054939492939184019161055790611718565b80601f016020809104026020016040519081016040528092919081815260200182805461058390611718565b80156105d05780601f106105a5576101008083540402835291602001916105d0565b820191906000526020600020905b8154815290600101906020018083116105b357829003601f168201915b5050505050815250509050919050565b803567ffffffffffffffff811681146105f857600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561064f5761064f6105fd565b60405290565b604051610120810167ffffffffffffffff8111828210171561064f5761064f6105fd565b6040805190810167ffffffffffffffff8111828210171561064f5761064f6105fd565b6040516060810167ffffffffffffffff8111828210171561064f5761064f6105fd565b6040516080810167ffffffffffffffff8111828210171561064f5761064f6105fd565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610729576107296105fd565b604052919050565b600060a0828403121561074357600080fd5b61074b61062c565b90508135815261075d602083016105e0565b602082015261076e604083016105e0565b604082015261077f606083016105e0565b6060820152610790608083016105e0565b608082015292915050565b73ffffffffffffffffffffffffffffffffffffffff811681146107bd57600080fd5b50565b80356105f88161079b565b600082601f8301126107dc57600080fd5b813567ffffffffffffffff8111156107f6576107f66105fd565b61082760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016106e2565b81815284602083860101111561083c57600080fd5b816020850160208301376000918101602001919091529392505050565b600067ffffffffffffffff821115610873576108736105fd565b5060051b60200190565b600082601f83011261088e57600080fd5b813560206108a361089e83610859565b6106e2565b82815260059290921b840181019181810190868411156108c257600080fd5b8286015b848110156109c657803567ffffffffffffffff808211156108e75760008081fd5b818901915060a0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d030112156109205760008081fd5b61092861062c565b6109338885016107c0565b8152604080850135848111156109495760008081fd5b6109578e8b838901016107cb565b8a84015250606080860135858111156109705760008081fd5b61097e8f8c838a01016107cb565b838501525060809150818601358184015250828501359250838311156109a45760008081fd5b6109b28d8a858801016107cb565b9082015286525050509183019183016108c6565b509695505050505050565b600080604083850312156109e457600080fd5b6109ed836105e0565b9150602083013567ffffffffffffffff80821115610a0a57600080fd5b908401906101a08287031215610a1f57600080fd5b610a27610655565b610a318784610731565b8152610a3f60a084016107c0565b602082015260c083013582811115610a5657600080fd5b610a62888286016107cb565b60408301525060e083013582811115610a7a57600080fd5b610a86888286016107cb565b6060830152506101008084013583811115610aa057600080fd5b610aac898287016107cb565b608084015250610abf61012085016107c0565b60a083015261014084013560c083015261016084013560e083015261018084013583811115610aed57600080fd5b610af98982870161087d565b8284015250508093505050509250929050565b600060208284031215610b1e57600080fd5b610b27826105e0565b9392505050565b60008083601f840112610b4057600080fd5b50813567ffffffffffffffff811115610b5857600080fd5b602083019150836020828501011115610b7057600080fd5b9250929050565b60008060008060608587031215610b8d57600080fd5b610b96856105e0565b9350610ba4602086016105e0565b9250604085013567ffffffffffffffff811115610bc057600080fd5b610bcc87828801610b2e565b95989497509550505050565b80357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811681146105f857600080fd5b600082601f830112610c1557600080fd5b81356020610c2561089e83610859565b82815260069290921b84018101918181019086841115610c4457600080fd5b8286015b848110156109c65760408189031215610c615760008081fd5b610c69610679565b610c72826105e0565b8152610c7f858301610bd8565b81860152835291830191604001610c48565b600082601f830112610ca257600080fd5b81356020610cb261089e83610859565b82815260059290921b84018101918181019086841115610cd157600080fd5b8286015b848110156109c657803567ffffffffffffffff80821115610cf65760008081fd5b818901915060a0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d03011215610d2f5760008081fd5b610d3761062c565b610d428885016105e0565b815260408085013584811115610d585760008081fd5b610d668e8b838901016107cb565b8a8401525060609350610d7a8486016105e0565b908201526080610d8b8582016105e0565b93820193909352920135908201528352918301918301610cd5565b600082601f830112610db757600080fd5b81356020610dc761089e83610859565b82815260069290921b84018101918181019086841115610de657600080fd5b8286015b848110156109c65760408189031215610e035760008081fd5b610e0b610679565b813581528482013585820152835291830191604001610dea565b60006020808385031215610e3857600080fd5b823567ffffffffffffffff80821115610e5057600080fd5b9084019060608287031215610e6457600080fd5b610e6c61069c565b823582811115610e7b57600080fd5b83016040818903811315610e8e57600080fd5b610e96610679565b823585811115610ea557600080fd5b8301601f81018b13610eb657600080fd5b8035610ec461089e82610859565b81815260069190911b8201890190898101908d831115610ee357600080fd5b928a01925b82841015610f335785848f031215610f005760008081fd5b610f08610679565b8435610f138161079b565b8152610f20858d01610bd8565b818d0152825292850192908a0190610ee8565b845250505082870135915084821115610f4b57600080fd5b610f578a838501610c04565b81880152835250508284013582811115610f7057600080fd5b610f7c88828601610c91565b85830152506040830135935081841115610f9557600080fd5b610fa187858501610da6565b60408201529695505050505050565b60008060408385031215610fc357600080fd5b610fcc836105e0565b9150610fda602084016105e0565b90509250929050565b600080600080600080600060e0888a031215610ffe57600080fd5b611007886105e0565b9650611015602089016105e0565b9550604088013594506060880135935060808801356004811061103757600080fd5b925060a088013567ffffffffffffffff81111561105357600080fd5b61105f8a828b016107cb565b92505060c0880135905092959891949750929550565b60008060006040848603121561108a57600080fd5b611093846105e0565b9250602084013567ffffffffffffffff8111156110af57600080fd5b6110bb86828701610b2e565b9497909650939450505050565b600080604083850312156110db57600080fd5b6110e4836105e0565b9150602083013567ffffffffffffffff8082111561110157600080fd5b908401906080828703121561111557600080fd5b61111d6106bf565b82356111288161079b565b81526020830135801515811461113d57600080fd5b602082015261114e604084016105e0565b604082015260608301358281111561116557600080fd5b611171888286016107cb565b6060830152508093505050509250929050565b6000815180845260005b818110156111aa5760208185018101518683018201520161118e565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815273ffffffffffffffffffffffffffffffffffffffff825116602082015260208201511515604082015267ffffffffffffffff60408301511660608201526000606083015160808084015261124360a0840182611184565b949350505050565b600082825180855260208086019550808260051b84010181860160005b84811015611321577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018952815160a073ffffffffffffffffffffffffffffffffffffffff82511685528582015181878701526112ca82870182611184565b915050604080830151868303828801526112e48382611184565b9250505060608083015181870152506080808301519250858203818701525061130d8183611184565b9a86019a9450505090830190600101611268565b5090979650505050505050565b6020815261137f60208201835180518252602081015167ffffffffffffffff808216602085015280604084015116604085015280606084015116606085015280608084015116608085015250505050565b600060208301516113a860c084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516101a08060e08501526113c56101c0850183611184565b915060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06101008187860301818801526114038584611184565b94506080880151925081878603016101208801526114218584611184565b945060a0880151925061144d61014088018473ffffffffffffffffffffffffffffffffffffffff169052565b60c088015161016088015260e088015161018088015287015186850390910183870152905061147c838261124b565b9695505050505050565b67ffffffffffffffff8181168382160190808211156114ce577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5092915050565b8183823760009101908152919050565b805160408084528151848201819052600092602091908201906060870190855b8181101561155e578351805173ffffffffffffffffffffffffffffffffffffffff1684528501517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16858401529284019291850191600101611505565b50508583015187820388850152805180835290840192506000918401905b808310156115cd578351805167ffffffffffffffff1683528501517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168583015292840192600192909201919085019061157c565b50979650505050505050565b60006040808301604084528086518083526060925060608601915060608160051b8701016020808a0160005b84811015611691577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018652815160a067ffffffffffffffff80835116875285830151828789015261165c83890182611184565b848d01518316898e01528b8501519092168b890152506080928301519290960191909152509482019490820190600101611605565b5050878203908801526116a481896114e5565b9998505050505050505050565b8481526000600485106116ed577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b846020830152608060408301526117076080830185611184565b905082606083015295945050505050565b600181811c9082168061172c57607f821691505b602082108103611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f8211156117b7576000816000526020600020601f850160051c810160208610156117945750805b601f850160051c820191505b818110156117b3578281556001016117a0565b5050505b505050565b815167ffffffffffffffff8111156117d6576117d66105fd565b6117ea816117e48454611718565b8461176b565b602080601f83116001811461183d57600084156118075750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556117b3565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561188a5788860151825594840194600190910190840161186b565b50858210156118c657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea164736f6c6343000818000a", } var CCIPReaderTesterABI = CCIPReaderTesterMetaData.ABI diff --git a/core/gethwrappers/ccip/generated/offramp/offramp.go b/core/gethwrappers/ccip/generated/offramp/offramp.go index cf7b0a4f488..beece7d27ef 100644 --- a/core/gethwrappers/ccip/generated/offramp/offramp.go +++ b/core/gethwrappers/ccip/generated/offramp/offramp.go @@ -156,7 +156,7 @@ type OffRampStaticConfig struct { var OffRampMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CanOnlySelfCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reportOnRamp\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"configOnRamp\",\"type\":\"bytes\"}],\"name\":\"CommitOnRampMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyBatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"EmptyReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ExecutionError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"ForkedChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumMultiOCR3Base.InvalidConfigErrorType\",\"name\":\"errorType\",\"type\":\"uint8\"}],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"got\",\"type\":\"uint256\"}],\"name\":\"InvalidDataLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"InvalidInterval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionGasLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oldLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenGasOverride\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionTokenGasOverride\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"messageDestChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidMessageDestChainSelector\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"newState\",\"type\":\"uint8\"}],\"name\":\"InvalidNewState\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidOnRampUpdate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRoot\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeavesCannotBeEmpty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionGasAmountCountMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ManualExecutionGasLimitMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionNotYetEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"errorReason\",\"type\":\"bytes\"}],\"name\":\"MessageValidationError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonUniqueSignatures\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"notPool\",\"type\":\"address\"}],\"name\":\"NotACompatiblePool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OracleCannotBeZeroAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ReceiverError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountReleased\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePre\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePost\",\"type\":\"uint256\"}],\"name\":\"ReleaseOrMintBalanceMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"name\":\"RootAlreadyCommitted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"RootNotCommitted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignatureVerificationNotAllowedInExecutionPlugin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignatureVerificationRequiredInCommitPlugin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignaturesOutOfRegistration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainNotEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"reportSourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageSourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StaleCommitReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"StaticConfigCannotBeChanged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"TokenDataMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"TokenHandlingError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedTransmitter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnexpectedTokenData\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"WrongMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongNumberOfSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroChainSelectorNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"AlreadyAttempted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"}],\"name\":\"CommitReportAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"DynamicConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"name\":\"ExecutionStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"RootRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"SkippedAlreadyExecutedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SkippedReportExecution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"sourceConfig\",\"type\":\"tuple\"}],\"name\":\"SourceChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"}],\"name\":\"StaticConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"Transmitted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigUpdates\",\"type\":\"tuple[]\"}],\"name\":\"applySourceChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"rs\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"ss\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"rawVs\",\"type\":\"bytes32\"}],\"name\":\"commit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[]\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"name\":\"executeSingleMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllSourceChainConfigs\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"getExecutionState\",\"outputs\":[{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLatestPriceSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"getMerkleRoot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"getSourceChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"latestConfigDetails\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"n\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"}],\"internalType\":\"structMultiOCR3Base.ConfigInfo\",\"name\":\"configInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfig\",\"name\":\"ocrConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.ExecutionReport[]\",\"name\":\"reports\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"receiverExecutionGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"internalType\":\"structOffRamp.GasLimitOverride[][]\",\"name\":\"gasLimitOverrides\",\"type\":\"tuple[][]\"}],\"name\":\"manuallyExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"setDynamicConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfigArgs[]\",\"name\":\"ocrConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"setOCR3Configs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x6101206040523480156200001257600080fd5b5060405162006cc138038062006cc18339810160408190526200003591620008e4565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001fa565b5050466080525060208301516001600160a01b03161580620000ec575060408301516001600160a01b0316155b8062000103575060608301516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e682620002a5565b620001f18162000393565b50505062000cd6565b336001600160a01b03821603620002545760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316620002ce576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516001600160a01b039889166001600160c01b03199097168717600160a01b63ffffffff958616021760ff60c01b1916600160c01b911515919091021790965560608089018051600580546001600160a01b031916918b169190911790558251968752935190921693850193909352935115159183019190915251909216908201527fcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee9060800160405180910390a150565b60005b815181101562000625576000828281518110620003b757620003b762000a0e565b60200260200101519050600081602001519050806001600160401b0316600003620003f55760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166200041e576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b038116600090815260086020526040902060608301516001820180546200044c9062000a24565b9050600003620004af578154600160a81b600160e81b031916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a16200051d565b8154600160a81b90046001600160401b0316600114801590620004f2575080516020820120604051620004e790600185019062000a60565b604051809103902014155b156200051d57604051632105803760e11b81526001600160401b038416600482015260240162000083565b80511580620005535750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b1562000572576040516342bcdf7f60e11b815260040160405180910390fd5b6001820162000582828262000b33565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b031990911617178255620005d160066001600160401b03851662000629565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b836040516200060d919062000bff565b60405180910390a25050505080600101905062000396565b5050565b600062000637838362000640565b90505b92915050565b600081815260018301602052604081205462000689575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200063a565b5060006200063a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715620006cd57620006cd62000692565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006fe57620006fe62000692565b604052919050565b80516001600160401b03811681146200071e57600080fd5b919050565b6001600160a01b03811681146200073957600080fd5b50565b805180151581146200071e57600080fd5b6000601f83601f8401126200076157600080fd5b825160206001600160401b038083111562000780576200078062000692565b8260051b62000791838201620006d3565b9384528681018301938381019089861115620007ac57600080fd5b84890192505b85831015620008d757825184811115620007cc5760008081fd5b89016080601f19828d038101821315620007e65760008081fd5b620007f0620006a8565b88840151620007ff8162000723565b815260406200081085820162000706565b8a8301526060620008238187016200073c565b838301529385015193898511156200083b5760008081fd5b84860195508f603f8701126200085357600094508485fd5b8a8601519450898511156200086c576200086c62000692565b6200087d8b858f88011601620006d3565b93508484528f82868801011115620008955760008081fd5b60005b85811015620008b5578681018301518582018d01528b0162000898565b5060009484018b019490945250918201528352509184019190840190620007b2565b9998505050505050505050565b6000806000838503610120811215620008fc57600080fd5b60808112156200090b57600080fd5b62000915620006a8565b620009208662000706565b81526020860151620009328162000723565b60208201526040860151620009478162000723565b604082015260608601516200095c8162000723565b606082015293506080607f19820112156200097657600080fd5b5062000981620006a8565b6080850151620009918162000723565b815260a085015163ffffffff81168114620009ab57600080fd5b6020820152620009be60c086016200073c565b604082015260e0850151620009d38162000723565b60608201526101008501519092506001600160401b03811115620009f657600080fd5b62000a04868287016200074d565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168062000a3957607f821691505b60208210810362000a5a57634e487b7160e01b600052602260045260246000fd5b50919050565b600080835462000a708162000a24565b6001828116801562000a8b576001811462000aa15762000ad2565b60ff198416875282151583028701945062000ad2565b8760005260208060002060005b8581101562000ac95781548a82015290840190820162000aae565b50505082870194505b50929695505050505050565b601f82111562000b2e576000816000526020600020601f850160051c8101602086101562000b095750805b601f850160051c820191505b8181101562000b2a5782815560010162000b15565b5050505b505050565b81516001600160401b0381111562000b4f5762000b4f62000692565b62000b678162000b60845462000a24565b8462000ade565b602080601f83116001811462000b9f576000841562000b865750858301515b600019600386901b1c1916600185901b17855562000b2a565b600085815260208120601f198616915b8281101562000bd05788860151825594840194600190910190840162000baf565b508582101562000bef5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000c548162000a24565b8060a089015260c0600183166000811462000c78576001811462000c955762000cc7565b60ff19841660c08b015260c083151560051b8b0101945062000cc7565b85600052602060002060005b8481101562000cbe5781548c820185015290880190890162000ca1565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e05161010051615f6e62000d53600039600081816102070152612c760152600081816101d80152612f3e0152600081816101a90152818161058701528181610738015261267601526000818161017a0152818161282101526128d8015260008181611d750152611da80152615f6e6000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80637437ff9f116100ad578063c673e58411610071578063c673e58414610474578063ccd37ba314610494578063e9d68a8e146104d8578063f2fde38b146104f8578063f716f99f1461050b57600080fd5b80637437ff9f1461037357806379ba5097146104305780637edf52f41461043857806385572ffb1461044b5780638da5cb5b1461045957600080fd5b80633f4b04aa116100f45780633f4b04aa146102fc5780635215505b146103175780635e36480c1461032d5780635e7bb0081461034d57806360987c201461036057600080fd5b806304666f9c1461013157806306285c6914610146578063181f5a771461028d5780632d04ab76146102d6578063311cd513146102e9575b600080fd5b61014461013f366004613e8f565b61051e565b005b61023760408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160401b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b604051610284919081516001600160401b031681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6102c96040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102849190613ffd565b6101446102e43660046140ad565b610532565b6101446102f736600461415f565b610a4c565b600b546040516001600160401b039091168152602001610284565b61031f610ab5565b6040516102849291906141f9565b61034061033b36600461429a565b610d10565b60405161028491906142f7565b61014461035b366004614860565b610d65565b61014461036e366004614aa4565b610ff4565b6103e960408051608081018252600080825260208201819052918101829052606081019190915250604080516080810182526004546001600160a01b038082168352600160a01b820463ffffffff166020840152600160c01b90910460ff16151592820192909252600554909116606082015290565b604051610284919081516001600160a01b03908116825260208084015163ffffffff1690830152604080840151151590830152606092830151169181019190915260800190565b6101446112ab565b610144610446366004614b38565b61135c565b61014461012c366004614b9d565b6000546040516001600160a01b039091168152602001610284565b610487610482366004614be8565b61136d565b6040516102849190614c48565b6104ca6104a2366004614cbd565b6001600160401b03919091166000908152600a60209081526040808320938352929052205490565b604051908152602001610284565b6104eb6104e6366004614ce7565b6114cb565b6040516102849190614d02565b610144610506366004614d15565b6115d7565b610144610519366004614d9a565b6115e8565b61052661162a565b61052f81611686565b50565b6000610540878901896150ef565b6004805491925090600160c01b900460ff166105f057602082015151156105f057602082015160408084015160608501519151638d8741cb60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693638d8741cb936105bf933093909190600401615324565b60006040518083038186803b1580156105d757600080fd5b505afa1580156105eb573d6000803e3d6000fd5b505050505b8151515115158061060657508151602001515115155b156106d157600b5460208b0135906001600160401b03808316911610156106a957600b805467ffffffffffffffff19166001600160401b03831617905581548351604051633937306f60e01b81526001600160a01b0390921691633937306f9161067291600401615471565b600060405180830381600087803b15801561068c57600080fd5b505af11580156106a0573d6000803e3d6000fd5b505050506106cf565b8260200151516000036106cf57604051632261116760e01b815260040160405180910390fd5b505b60005b82602001515181101561098c576000836020015182815181106106f9576106f961539f565b60209081029190910101518051604051632cbc26bb60e01b815267ffffffffffffffff60801b608083901b166004820152919250906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa15801561077f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a39190615484565b156107d157604051637edeb53960e11b81526001600160401b03821660048201526024015b60405180910390fd5b60006107dc8261190f565b9050806001016040516107ef91906154db565b60405180910390208360200151805190602001201461082c5782602001518160010160405163b80d8fa960e01b81526004016107c89291906155ce565b60408301518154600160a81b90046001600160401b03908116911614158061086d575082606001516001600160401b031683604001516001600160401b0316115b156108b257825160408085015160608601519151636af0786b60e11b81526001600160401b0393841660048201529083166024820152911660448201526064016107c8565b6080830151806108d55760405163504570e360e01b815260040160405180910390fd5b83516001600160401b03166000908152600a602090815260408083208484529091529020541561092d5783516040516332cf0cbf60e01b81526001600160401b039091166004820152602481018290526044016107c8565b606084015161093d906001615609565b825467ffffffffffffffff60a81b1916600160a81b6001600160401b0392831602179092559251166000908152600a6020908152604080832094835293905291909120429055506001016106d4565b50602082015182516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e4926109c4929091615630565b60405180910390a1610a4060008b8b8b8b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d9182918501908490808284376000920191909152508c925061195b915050565b50505050505050505050565b610a8c610a5b82840184615655565b6040805160008082526020820190925290610a86565b6060815260200190600190039081610a715790505b50611c54565b604080516000808252602082019092529050610aaf60018585858586600061195b565b50505050565b6060806000610ac46006611d17565b6001600160401b03811115610adb57610adb613cd1565b604051908082528060200260200182016040528015610b2c57816020015b6040805160808101825260008082526020808301829052928201526060808201528252600019909201910181610af95790505b5090506000610b3b6006611d17565b6001600160401b03811115610b5257610b52613cd1565b604051908082528060200260200182016040528015610b7b578160200160208202803683370190505b50905060005b610b8b6006611d17565b811015610d0757610b9d600682611d21565b828281518110610baf57610baf61539f565b60200260200101906001600160401b031690816001600160401b03168152505060086000838381518110610be557610be561539f565b6020908102919091018101516001600160401b039081168352828201939093526040918201600020825160808101845281546001600160a01b038116825260ff600160a01b820416151593820193909352600160a81b90920490931691810191909152600182018054919291606084019190610c60906154a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8c906154a1565b8015610cd95780601f10610cae57610100808354040283529160200191610cd9565b820191906000526020600020905b815481529060010190602001808311610cbc57829003601f168201915b505050505081525050838281518110610cf457610cf461539f565b6020908102919091010152600101610b81565b50939092509050565b6000610d1e60016004615689565b6002610d2b6080856156b2565b6001600160401b0316610d3e91906156d8565b610d488585611d2d565b901c166003811115610d5c57610d5c6142cd565b90505b92915050565b610d6d611d72565b815181518114610d90576040516320f8fd5960e21b815260040160405180910390fd5b60005b81811015610fe4576000848281518110610daf57610daf61539f565b60200260200101519050600081602001515190506000858481518110610dd757610dd761539f565b6020026020010151905080518214610e02576040516320f8fd5960e21b815260040160405180910390fd5b60005b82811015610fd5576000828281518110610e2157610e2161539f565b6020026020010151600001519050600085602001518381518110610e4757610e4761539f565b6020026020010151905081600014610e9b578060800151821015610e9b578551815151604051633a98d46360e11b81526001600160401b0390921660048301526024820152604481018390526064016107c8565b838381518110610ead57610ead61539f565b602002602001015160200151518160a001515114610efa57805180516060909101516040516370a193fd60e01b815260048101929092526001600160401b031660248201526044016107c8565b60005b8160a0015151811015610fc7576000858581518110610f1e57610f1e61539f565b6020026020010151602001518281518110610f3b57610f3b61539f565b602002602001015163ffffffff16905080600014610fbe5760008360a001518381518110610f6b57610f6b61539f565b60200260200101516040015163ffffffff16905080821015610fbc578351516040516348e617b360e01b815260048101919091526024810184905260448101829052606481018390526084016107c8565b505b50600101610efd565b505050806001019050610e05565b50505050806001019050610d93565b50610fef8383611c54565b505050565b333014611014576040516306e34e6560e31b815260040160405180910390fd5b6040805160008082526020820190925281611051565b604080518082019091526000808252602082015281526020019060019003908161102a5790505b5060a08701515190915015611087576110848660a001518760200151886060015189600001516020015189898989611dda565b90505b6040805160a081018252875151815287516020908101516001600160401b03168183015288015181830152908701516060820152608081018290526005546001600160a01b0316801561117a576040516308d450a160e01b81526001600160a01b038216906308d450a190611100908590600401615790565b600060405180830381600087803b15801561111a57600080fd5b505af192505050801561112b575060015b61117a573d808015611159576040519150601f19603f3d011682016040523d82523d6000602084013e61115e565b606091505b50806040516309c2532560e01b81526004016107c89190613ffd565b60408801515115801561118f57506080880151155b806111a6575060608801516001600160a01b03163b155b806111cd575060608801516111cb906001600160a01b03166385572ffb60e01b611f8b565b155b156111da575050506112a4565b87516020908101516001600160401b03166000908152600890915260408082205460808b015160608c01519251633cf9798360e01b815284936001600160a01b0390931692633cf979839261123892899261138892916004016157a3565b6000604051808303816000875af1158015611257573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261127f91908101906157df565b509150915081610a4057806040516302a35ba360e21b81526004016107c89190613ffd565b5050505050565b6001546001600160a01b031633146113055760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016107c8565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b61136461162a565b61052f81611fa7565b6113b06040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c08201529485529182018054845181840281018401909552808552929385830193909283018282801561145957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161143b575b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156114bb57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161149d575b5050505050815250509050919050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b03878116845260088352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b909204909216948301949094526001840180549394929391840191611557906154a1565b80601f0160208091040260200160405190810160405280929190818152602001828054611583906154a1565b80156114bb5780601f106115a5576101008083540402835291602001916114bb565b820191906000526020600020905b8154815290600101906020018083116115b357505050919092525091949350505050565b6115df61162a565b61052f816120ac565b6115f061162a565b60005b81518110156116265761161e8282815181106116115761161161539f565b6020026020010151612155565b6001016115f3565b5050565b6000546001600160a01b031633146116845760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016107c8565b565b60005b81518110156116265760008282815181106116a6576116a661539f565b60200260200101519050600081602001519050806001600160401b03166000036116e35760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b031661170b576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b03811660009081526008602052604090206060830151600182018054611737906154a1565b905060000361179957815467ffffffffffffffff60a81b1916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1611802565b8154600160a81b90046001600160401b03166001148015906117d95750805160208201206040516117ce9060018501906154db565b604051809103902014155b1561180257604051632105803760e11b81526001600160401b03841660048201526024016107c8565b805115806118375750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b15611855576040516342bcdf7f60e11b815260040160405180910390fd5b6001820161186382826158c4565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b029290921674ffffffffffffffffffffffffffffffffffffffffff19909116171782556118be60066001600160401b03851661247f565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b836040516118f89190615983565b60405180910390a250505050806001019050611689565b6001600160401b03811660009081526008602052604081208054600160a01b900460ff16610d5f5760405163ed053c5960e01b81526001600160401b03841660048201526024016107c8565b60ff878116600090815260026020908152604080832081516080810183528154815260019091015480861693820193909352610100830485169181019190915262010000909104909216151560608301528735906119ba8760a46159d1565b9050826060015115611a025784516119d39060206156d8565b86516119e09060206156d8565b6119eb9060a06159d1565b6119f591906159d1565b6119ff90826159d1565b90505b368114611a2b57604051638e1192e160e01b8152600481018290523660248201526044016107c8565b5081518114611a5a5781516040516324f7d61360e21b81526004810191909152602481018290526044016107c8565b611a62611d72565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611ab057611ab06142cd565b6002811115611ac157611ac16142cd565b9052509050600281602001516002811115611ade57611ade6142cd565b148015611b325750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611b1a57611b1a61539f565b6000918252602090912001546001600160a01b031633145b611b4f57604051631b41e11d60e31b815260040160405180910390fd5b50816060015115611bff576020820151611b6a9060016159e4565b60ff16855114611b8d576040516371253a2560e01b815260040160405180910390fd5b8351855114611baf5760405163a75d88af60e01b815260040160405180910390fd5b60008787604051611bc19291906159fd565b604051908190038120611bd8918b90602001615a0d565b604051602081830303815290604052805190602001209050611bfd8a8288888861248b565b505b6040805182815260208a8101356001600160401b03169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b8151600003611c765760405163c2e5347d60e01b815260040160405180910390fd5b80516040805160008082526020820190925291159181611cb9565b604080518082019091526000815260606020820152815260200190600190039081611c915790505b50905060005b84518110156112a457611d0f858281518110611cdd57611cdd61539f565b602002602001015184611d0957858381518110611cfc57611cfc61539f565b6020026020010151612648565b83612648565b600101611cbf565b6000610d5f825490565b6000610d5c8383612ed9565b6001600160401b038216600090815260096020526040812081611d51608085615a21565b6001600160401b031681526020810191909152604001600020549392505050565b467f00000000000000000000000000000000000000000000000000000000000000001461168457604051630f01ce8560e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201526044016107c8565b606088516001600160401b03811115611df557611df5613cd1565b604051908082528060200260200182016040528015611e3a57816020015b6040805180820190915260008082526020820152815260200190600190039081611e135790505b509050811560005b8a51811015611f7d5781611eda57848482818110611e6257611e6261539f565b9050602002016020810190611e779190615a47565b63ffffffff1615611eda57848482818110611e9457611e9461539f565b9050602002016020810190611ea99190615a47565b8b8281518110611ebb57611ebb61539f565b60200260200101516040019063ffffffff16908163ffffffff16815250505b611f588b8281518110611eef57611eef61539f565b60200260200101518b8b8b8b8b87818110611f0c57611f0c61539f565b9050602002810190611f1e9190615a62565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612f0392505050565b838281518110611f6a57611f6a61539f565b6020908102919091010152600101611e42565b505098975050505050505050565b6000611f96836131e3565b8015610d5c5750610d5c8383613216565b80516001600160a01b0316611fcf576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516001600160a01b039889167fffffffffffffffff0000000000000000000000000000000000000000000000009097168717600160a01b63ffffffff958616021760ff60c01b1916600160c01b911515919091021790965560608089018051600580546001600160a01b031916918b169190911790558251968752935190921693850193909352935115159183019190915251909216908201527fcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee9060800160405180910390a150565b336001600160a01b038216036121045760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016107c8565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff16600003612180576000604051631b3fab5160e11b81526004016107c89190615aa8565b60208082015160ff808216600090815260029093526040832060018101549293909283921690036121d1576060840151600182018054911515620100000262ff00001990921691909117905561220d565b6060840151600182015460ff620100009091041615159015151461220d576040516321fd80df60e21b815260ff841660048201526024016107c8565b60a084015180516101001015612239576001604051631b3fab5160e11b81526004016107c89190615aa8565b805160000361225e576005604051631b3fab5160e11b81526004016107c89190615aa8565b6122c484846003018054806020026020016040519081016040528092919081815260200182805480156122ba57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161229c575b50505050506132a0565b8460600151156123f45761233284846002018054806020026020016040519081016040528092919081815260200182805480156122ba576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161229c5750505050506132a0565b60808501518051610100101561235e576002604051631b3fab5160e11b81526004016107c89190615aa8565b604086015161236e906003615ac2565b60ff16815111612394576003604051631b3fab5160e11b81526004016107c89190615aa8565b8151815110156123ba576001604051631b3fab5160e11b81526004016107c89190615aa8565b805160018401805461ff00191661010060ff8416021790556123e59060028601906020840190613c57565b506123f285826001613309565b505b61240084826002613309565b80516124159060038501906020840190613c57565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f5479361246e9389939260028a01929190615ade565b60405180910390a16112a484613464565b6000610d5c83836134e7565b8251600090815b8181101561263e5760006001888684602081106124b1576124b161539f565b6124be91901a601b6159e4565b8985815181106124d0576124d061539f565b60200260200101518986815181106124ea576124ea61539f565b602002602001015160405160008152602001604052604051612528949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa15801561254a573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b038516835281528582208587019096528554808416865293975090955092939284019161010090041660028111156125ab576125ab6142cd565b60028111156125bc576125bc6142cd565b90525090506001816020015160028111156125d9576125d96142cd565b146125f757604051636518c33d60e11b815260040160405180910390fd5b8051600160ff9091161b85161561262157604051633d9ef1f160e21b815260040160405180910390fd5b806000015160ff166001901b851794505050806001019050612492565b5050505050505050565b81518151604051632cbc26bb60e01b8152608083901b67ffffffffffffffff60801b166004820152901515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa1580156126c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e99190615484565b1561275a57801561271857604051637edeb53960e11b81526001600160401b03831660048201526024016107c8565b6040516001600160401b03831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b602084015151600081900361279057845160405163676cf24b60e11b81526001600160401b0390911660048201526024016107c8565b84604001515181146127b5576040516357e0e08360e01b815260040160405180910390fd5b6000816001600160401b038111156127cf576127cf613cd1565b6040519080825280602002602001820160405280156127f8578160200160208202803683370190505b50905060007f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f857f00000000000000000000000000000000000000000000000000000000000000006128498861190f565b60010160405161285991906154db565b604051908190038120612891949392916020019384526001600160401b03928316602085015291166040830152606082015260800190565b60405160208183030381529060405280519060200120905060005b838110156129c7576000886020015182815181106128cc576128cc61539f565b602002602001015190507f00000000000000000000000000000000000000000000000000000000000000006001600160401b03168160000151604001516001600160401b0316146129435780516040908101519051631c21951160e11b81526001600160401b0390911660048201526024016107c8565b866001600160401b03168160000151602001516001600160401b03161461299757805160200151604051636c95f1eb60e01b81526001600160401b03808a16600483015290911660248201526044016107c8565b6129a18184613536565b8483815181106129b3576129b361539f565b6020908102919091010152506001016128ac565b505060006129df858389606001518a6080015161363e565b905080600003612a0d57604051633ee8bd3f60e11b81526001600160401b03861660048201526024016107c8565b60005b8381101561263e5760005a9050600089602001518381518110612a3557612a3561539f565b602002602001015190506000612a5389836000015160600151610d10565b90506000816003811115612a6957612a696142cd565b1480612a8657506003816003811115612a8457612a846142cd565b145b612adc57815160600151604080516001600160401b03808d16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c910160405180910390a1505050612ed1565b60608815612bbb578a8581518110612af657612af661539f565b6020908102919091018101510151600454909150600090600160a01b900463ffffffff16612b248842615689565b1190508080612b4457506003836003811115612b4257612b426142cd565b145b612b6c576040516354e7e43160e11b81526001600160401b038c1660048201526024016107c8565b8b8681518110612b7e57612b7e61539f565b602002602001015160000151600014612bb5578b8681518110612ba357612ba361539f565b60209081029190910101515160808501525b50612c27565b6000826003811115612bcf57612bcf6142cd565b14612c2757825160600151604080516001600160401b03808e16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120910160405180910390a150505050612ed1565b8251608001516001600160401b031615612cfd576000826003811115612c4f57612c4f6142cd565b03612cfd5782516080015160208401516040516370701e5760e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263e0e03cae92612cad928f929190600401615b90565b6020604051808303816000875af1158015612ccc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf09190615484565b612cfd5750505050612ed1565b60008c604001518681518110612d1557612d1561539f565b6020026020010151905080518460a001515114612d5f57835160600151604051631cfe6d8b60e01b81526001600160401b03808e16600483015290911660248201526044016107c8565b612d738b856000015160600151600161367b565b600080612d81868486613720565b91509150612d988d8760000151606001518461367b565b8b15612def576003826003811115612db257612db26142cd565b03612def576000856003811115612dcb57612dcb6142cd565b14612def57855151604051632b11b8d960e01b81526107c891908390600401615bbc565b6002826003811115612e0357612e036142cd565b14612e44576003826003811115612e1c57612e1c6142cd565b14612e44578551606001516040516349362d1f60e11b81526107c8918f918590600401615bd5565b8560000151600001518660000151606001516001600160401b03168e6001600160401b03167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8c81518110612e9c57612e9c61539f565b602002602001015186865a612eb1908f615689565b604051612ec19493929190615bfa565b60405180910390a4505050505050505b600101612a10565b6000826000018281548110612ef057612ef061539f565b9060005260206000200154905092915050565b6040805180820190915260008082526020820152602086015160405163bbe4f6db60e01b81526001600160a01b0380831660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015612f87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fab9190615c31565b90506001600160a01b0381161580612fda5750612fd86001600160a01b03821663aff2afbf60e01b611f8b565b155b156130035760405163ae9b4ce960e01b81526001600160a01b03821660048201526024016107c8565b60008061301b88858c6040015163ffffffff166137d4565b9150915060008060006130ce6040518061010001604052808e81526020018c6001600160401b031681526020018d6001600160a01b031681526020018f608001518152602001896001600160a01b031681526020018f6000015181526020018f6060015181526020018b8152506040516024016130989190615c4e565b60408051601f198184030181529190526020810180516001600160e01b0316633907753760e01b179052878661138860846138b7565b925092509250826130f4578160405163e1cd550960e01b81526004016107c89190613ffd565b8151602014613123578151604051631e3be00960e21b81526020600482015260248101919091526044016107c8565b6000828060200190518101906131399190615d1a565b9050866001600160a01b03168c6001600160a01b0316146131b557600061316a8d8a613165868a615689565b6137d4565b509050868110806131845750816131818883615689565b14155b156131b35760405163a966e21f60e01b81526004810183905260248101889052604481018290526064016107c8565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b60006131f6826301ffc9a760e01b613216565b8015610d5f575061320f826001600160e01b0319613216565b1592915050565b6040516001600160e01b031982166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d91506000519050828015613289575060208210155b80156132955750600081115b979650505050505050565b60005b8151811015610fef5760ff8316600090815260036020526040812083519091908490849081106132d5576132d561539f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff191690556001016132a3565b60005b8251811015610aaf5760008382815181106133295761332961539f565b6020026020010151905060006002811115613346576133466142cd565b60ff80871660009081526003602090815260408083206001600160a01b03871684529091529020546101009004166002811115613385576133856142cd565b146133a6576004604051631b3fab5160e11b81526004016107c89190615aa8565b6001600160a01b0381166133cd5760405163d6c62c9b60e01b815260040160405180910390fd5b60405180604001604052808360ff1681526020018460028111156133f3576133f36142cd565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff191617610100836002811115613450576134506142cd565b02179055509050505080600101905061330c565b60ff818116600081815260026020526040902060010154620100009004909116906134bc57806134a7576040516317bd8dd160e11b815260040160405180910390fd5b600b805467ffffffffffffffff191690555050565b60001960ff831601611626578015611626576040516307b8c74d60e51b815260040160405180910390fd5b600081815260018301602052604081205461352e57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d5f565b506000610d5f565b81518051606080850151908301516080808701519401516040516000958695889561359a95919490939192916020019485526001600160a01b039390931660208501526001600160401b039182166040850152606084015216608082015260a00190565b604051602081830303815290604052805190602001208560200151805190602001208660400151805190602001208760a001516040516020016135dd9190615dd4565b60408051601f198184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e0015b60405160208183030381529060405280519060200120905092915050565b60008061364c858585613991565b6001600160401b0387166000908152600a6020908152604080832093835292905220549150505b949350505050565b6000600261368a6080856156b2565b6001600160401b031661369d91906156d8565b905060006136ab8585611d2d565b9050816136ba60016004615689565b901b1916818360038111156136d1576136d16142cd565b6001600160401b03871660009081526009602052604081209190921b929092179182916136ff608088615a21565b6001600160401b031681526020810191909152604001600020555050505050565b604051630304c3e160e51b815260009060609030906360987c209061374d90889088908890600401615e6b565b600060405180830381600087803b15801561376757600080fd5b505af1925050508015613778575060015b6137b7573d8080156137a6576040519150601f19603f3d011682016040523d82523d6000602084013e6137ab565b606091505b506003925090506137cc565b50506040805160208101909152600081526002905b935093915050565b6000806000806000613835886040516024016137ff91906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b179052888861138860846138b7565b9250925092508261385b578160405163e1cd550960e01b81526004016107c89190613ffd565b602082511461388a578151604051631e3be00960e21b81526020600482015260248101919091526044016107c8565b8180602001905181019061389e9190615d1a565b6138a88288615689565b94509450505050935093915050565b6000606060008361ffff166001600160401b038111156138d9576138d9613cd1565b6040519080825280601f01601f191660200182016040528015613903576020820181803683370190505b509150863b61391d5763030ed58f60e21b60005260046000fd5b5a8581101561393757632be8ca8b60e21b60005260046000fd5b8590036040810481038710613957576337c3be2960e01b60005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d8481111561397a5750835b808352806000602085013e50955095509592505050565b82518251600091908183036139b957604051630469ac9960e21b815260040160405180910390fd5b61010182118015906139cd57506101018111155b6139ea576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613a14576040516309bde33960e01b815260040160405180910390fd5b80600003613a415786600081518110613a2f57613a2f61539f565b60200260200101519350505050613c0f565b6000816001600160401b03811115613a5b57613a5b613cd1565b604051908082528060200260200182016040528015613a84578160200160208202803683370190505b50905060008080805b85811015613bae5760006001821b8b811603613ae85788851015613ad1578c5160018601958e918110613ac257613ac261539f565b60200260200101519050613b0a565b8551600185019487918110613ac257613ac261539f565b8b5160018401938d918110613aff57613aff61539f565b602002602001015190505b600089861015613b3a578d5160018701968f918110613b2b57613b2b61539f565b60200260200101519050613b5c565b8651600186019588918110613b5157613b5161539f565b602002602001015190505b82851115613b7d576040516309bde33960e01b815260040160405180910390fd5b613b878282613c16565b878481518110613b9957613b9961539f565b60209081029190910101525050600101613a8d565b506001850382148015613bc057508683145b8015613bcb57508581145b613be8576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613bfd57613bfd61539f565b60200260200101519750505050505050505b9392505050565b6000818310613c2e57613c298284613c34565b610d5c565b610d5c83835b604080516001602082015290810183905260608101829052600090608001613620565b828054828255906000526020600020908101928215613cac579160200282015b82811115613cac57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613c77565b50613cb8929150613cbc565b5090565b5b80821115613cb85760008155600101613cbd565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613d0957613d09613cd1565b60405290565b60405160a081016001600160401b0381118282101715613d0957613d09613cd1565b60405160c081016001600160401b0381118282101715613d0957613d09613cd1565b604080519081016001600160401b0381118282101715613d0957613d09613cd1565b604051601f8201601f191681016001600160401b0381118282101715613d9d57613d9d613cd1565b604052919050565b60006001600160401b03821115613dbe57613dbe613cd1565b5060051b60200190565b6001600160a01b038116811461052f57600080fd5b80356001600160401b0381168114613df457600080fd5b919050565b801515811461052f57600080fd5b8035613df481613df9565b60006001600160401b03821115613e2b57613e2b613cd1565b50601f01601f191660200190565b600082601f830112613e4a57600080fd5b8135613e5d613e5882613e12565b613d75565b818152846020838601011115613e7257600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613ea257600080fd5b82356001600160401b0380821115613eb957600080fd5b818501915085601f830112613ecd57600080fd5b8135613edb613e5882613da5565b81815260059190911b83018401908481019088831115613efa57600080fd5b8585015b83811015613fa057803585811115613f165760008081fd5b86016080818c03601f1901811315613f2e5760008081fd5b613f36613ce7565b89830135613f4381613dc8565b81526040613f52848201613ddd565b8b830152606080850135613f6581613df9565b83830152928401359289841115613f7e57600091508182fd5b613f8c8f8d86880101613e39565b908301525085525050918601918601613efe565b5098975050505050505050565b60005b83811015613fc8578181015183820152602001613fb0565b50506000910152565b60008151808452613fe9816020860160208601613fad565b601f01601f19169290920160200192915050565b602081526000610d5c6020830184613fd1565b8060608101831015610d5f57600080fd5b60008083601f84011261403357600080fd5b5081356001600160401b0381111561404a57600080fd5b60208301915083602082850101111561406257600080fd5b9250929050565b60008083601f84011261407b57600080fd5b5081356001600160401b0381111561409257600080fd5b6020830191508360208260051b850101111561406257600080fd5b60008060008060008060008060e0898b0312156140c957600080fd5b6140d38a8a614010565b975060608901356001600160401b03808211156140ef57600080fd5b6140fb8c838d01614021565b909950975060808b013591508082111561411457600080fd5b6141208c838d01614069565b909750955060a08b013591508082111561413957600080fd5b506141468b828c01614069565b999c989b50969995989497949560c00135949350505050565b60008060006080848603121561417457600080fd5b61417e8585614010565b925060608401356001600160401b0381111561419957600080fd5b6141a586828701614021565b9497909650939450505050565b6001600160a01b0381511682526020810151151560208301526001600160401b03604082015116604083015260006060820151608060608501526136736080850182613fd1565b604080825283519082018190526000906020906060840190828701845b8281101561423b5781516001600160401b031684529284019290840190600101614216565b50505083810382850152845180825282820190600581901b8301840187850160005b8381101561428b57601f198684030185526142798383516141b2565b9487019492509086019060010161425d565b50909998505050505050505050565b600080604083850312156142ad57600080fd5b6142b683613ddd565b91506142c460208401613ddd565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b600481106142f3576142f36142cd565b9052565b60208101610d5f82846142e3565b600060a0828403121561431757600080fd5b61431f613d0f565b90508135815261433160208301613ddd565b602082015261434260408301613ddd565b604082015261435360608301613ddd565b606082015261436460808301613ddd565b608082015292915050565b8035613df481613dc8565b803563ffffffff81168114613df457600080fd5b600082601f83011261439f57600080fd5b813560206143af613e5883613da5565b82815260059290921b840181019181810190868411156143ce57600080fd5b8286015b8481101561449e5780356001600160401b03808211156143f25760008081fd5b9088019060a0828b03601f190181131561440c5760008081fd5b614414613d0f565b87840135838111156144265760008081fd5b6144348d8a83880101613e39565b82525060408085013561444681613dc8565b828a0152606061445786820161437a565b828401526080915081860135858111156144715760008081fd5b61447f8f8c838a0101613e39565b91840191909152509190930135908301525083529183019183016143d2565b509695505050505050565b600061014082840312156144bc57600080fd5b6144c4613d31565b90506144d08383614305565b815260a08201356001600160401b03808211156144ec57600080fd5b6144f885838601613e39565b602084015260c084013591508082111561451157600080fd5b61451d85838601613e39565b604084015261452e60e0850161436f565b6060840152610100840135608084015261012084013591508082111561455357600080fd5b506145608482850161438e565b60a08301525092915050565b600082601f83011261457d57600080fd5b8135602061458d613e5883613da5565b82815260059290921b840181019181810190868411156145ac57600080fd5b8286015b8481101561449e5780356001600160401b038111156145cf5760008081fd5b6145dd8986838b01016144a9565b8452509183019183016145b0565b600082601f8301126145fc57600080fd5b8135602061460c613e5883613da5565b82815260059290921b8401810191818101908684111561462b57600080fd5b8286015b8481101561449e5780356001600160401b038082111561464e57600080fd5b818901915089603f83011261466257600080fd5b85820135614672613e5882613da5565b81815260059190911b830160400190878101908c83111561469257600080fd5b604085015b838110156146cb578035858111156146ae57600080fd5b6146bd8f6040838a0101613e39565b845250918901918901614697565b5087525050509284019250830161462f565b600082601f8301126146ee57600080fd5b813560206146fe613e5883613da5565b8083825260208201915060208460051b87010193508684111561472057600080fd5b602086015b8481101561449e5780358352918301918301614725565b600082601f83011261474d57600080fd5b8135602061475d613e5883613da5565b82815260059290921b8401810191818101908684111561477c57600080fd5b8286015b8481101561449e5780356001600160401b03808211156147a05760008081fd5b9088019060a0828b03601f19018113156147ba5760008081fd5b6147c2613d0f565b6147cd888501613ddd565b8152604080850135848111156147e35760008081fd5b6147f18e8b8389010161456c565b8a840152506060808601358581111561480a5760008081fd5b6148188f8c838a01016145eb565b83850152506080915081860135858111156148335760008081fd5b6148418f8c838a01016146dd565b9184019190915250919093013590830152508352918301918301614780565b6000806040838503121561487357600080fd5b6001600160401b038335111561488857600080fd5b614895848435850161473c565b91506001600160401b03602084013511156148af57600080fd5b6020830135830184601f8201126148c557600080fd5b6148d2613e588235613da5565b81358082526020808301929160051b8401018710156148f057600080fd5b602083015b6020843560051b850101811015614a96576001600160401b038135111561491b57600080fd5b87603f82358601011261492d57600080fd5b614940613e586020833587010135613da5565b81358501602081810135808452908301929160059190911b016040018a101561496857600080fd5b604083358701015b83358701602081013560051b01604001811015614a86576001600160401b038135111561499c57600080fd5b833587018135016040818d03603f190112156149b757600080fd5b6149bf613d53565b604082013581526001600160401b03606083013511156149de57600080fd5b8c605f6060840135840101126149f357600080fd5b6040606083013583010135614a0a613e5882613da5565b808282526020820191508f60608460051b6060880135880101011115614a2f57600080fd5b6060808601358601015b60608460051b606088013588010101811015614a6657614a588161437a565b835260209283019201614a39565b508060208501525050508085525050602083019250602081019050614970565b50845250602092830192016148f5565b508093505050509250929050565b600080600080600060608688031215614abc57600080fd5b85356001600160401b0380821115614ad357600080fd5b614adf89838a016144a9565b96506020880135915080821115614af557600080fd5b614b0189838a01614069565b90965094506040880135915080821115614b1a57600080fd5b50614b2788828901614069565b969995985093965092949392505050565b600060808284031215614b4a57600080fd5b614b52613ce7565b8235614b5d81613dc8565b8152614b6b6020840161437a565b60208201526040830135614b7e81613df9565b60408201526060830135614b9181613dc8565b60608201529392505050565b600060208284031215614baf57600080fd5b81356001600160401b03811115614bc557600080fd5b820160a08185031215613c0f57600080fd5b803560ff81168114613df457600080fd5b600060208284031215614bfa57600080fd5b610d5c82614bd7565b60008151808452602080850194506020840160005b83811015614c3d5781516001600160a01b031687529582019590820190600101614c18565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614c9760e0840182614c03565b90506040840151601f198483030160c0850152614cb48282614c03565b95945050505050565b60008060408385031215614cd057600080fd5b614cd983613ddd565b946020939093013593505050565b600060208284031215614cf957600080fd5b610d5c82613ddd565b602081526000610d5c60208301846141b2565b600060208284031215614d2757600080fd5b8135613c0f81613dc8565b600082601f830112614d4357600080fd5b81356020614d53613e5883613da5565b8083825260208201915060208460051b870101935086841115614d7557600080fd5b602086015b8481101561449e578035614d8d81613dc8565b8352918301918301614d7a565b60006020808385031215614dad57600080fd5b82356001600160401b0380821115614dc457600080fd5b818501915085601f830112614dd857600080fd5b8135614de6613e5882613da5565b81815260059190911b83018401908481019088831115614e0557600080fd5b8585015b83811015613fa057803585811115614e2057600080fd5b860160c0818c03601f19011215614e375760008081fd5b614e3f613d31565b8882013581526040614e52818401614bd7565b8a8301526060614e63818501614bd7565b8284015260809150614e76828501613e07565b9083015260a08381013589811115614e8e5760008081fd5b614e9c8f8d83880101614d32565b838501525060c0840135915088821115614eb65760008081fd5b614ec48e8c84870101614d32565b9083015250845250918601918601614e09565b80356001600160e01b0381168114613df457600080fd5b600082601f830112614eff57600080fd5b81356020614f0f613e5883613da5565b82815260069290921b84018101918181019086841115614f2e57600080fd5b8286015b8481101561449e5760408189031215614f4b5760008081fd5b614f53613d53565b614f5c82613ddd565b8152614f69858301614ed7565b81860152835291830191604001614f32565b600082601f830112614f8c57600080fd5b81356020614f9c613e5883613da5565b82815260059290921b84018101918181019086841115614fbb57600080fd5b8286015b8481101561449e5780356001600160401b0380821115614fdf5760008081fd5b9088019060a0828b03601f1901811315614ff95760008081fd5b615001613d0f565b61500c888501613ddd565b8152604080850135848111156150225760008081fd5b6150308e8b83890101613e39565b8a8401525060609350615044848601613ddd565b908201526080615055858201613ddd565b93820193909352920135908201528352918301918301614fbf565b600082601f83011261508157600080fd5b81356020615091613e5883613da5565b82815260069290921b840181019181810190868411156150b057600080fd5b8286015b8481101561449e57604081890312156150cd5760008081fd5b6150d5613d53565b8135815284820135858201528352918301916040016150b4565b6000602080838503121561510257600080fd5b82356001600160401b038082111561511957600080fd5b908401906080828703121561512d57600080fd5b615135613ce7565b82358281111561514457600080fd5b8301604081890381131561515757600080fd5b61515f613d53565b82358581111561516e57600080fd5b8301601f81018b1361517f57600080fd5b803561518d613e5882613da5565b81815260069190911b8201890190898101908d8311156151ac57600080fd5b928a01925b828410156151fc5785848f0312156151c95760008081fd5b6151d1613d53565b84356151dc81613dc8565b81526151e9858d01614ed7565b818d0152825292850192908a01906151b1565b84525050508287013591508482111561521457600080fd5b6152208a838501614eee565b8188015283525050828401358281111561523957600080fd5b61524588828601614f7b565b8583015250604083013593508184111561525e57600080fd5b61526a87858501615070565b6040820152606083013560608201528094505050505092915050565b600082825180855260208086019550808260051b84010181860160005b8481101561531757601f19868403018952815160a06001600160401b038083511686528683015182888801526152db83880182613fd1565b604085810151841690890152606080860151909316928801929092525060809283015192909501919091525097830197908301906001016152a3565b5090979650505050505050565b6001600160a01b0385168152600060206080818401526153476080840187615286565b83810360408581019190915286518083528388019284019060005b8181101561538757845180518452860151868401529385019391830191600101615362565b50508094505050505082606083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b805160408084528151848201819052600092602091908201906060870190855b8181101561540c57835180516001600160a01b031684528501516001600160e01b03168584015292840192918501916001016153d5565b50508583015187820388850152805180835290840192506000918401905b8083101561546557835180516001600160401b031683528501516001600160e01b03168583015292840192600192909201919085019061542a565b50979650505050505050565b602081526000610d5c60208301846153b5565b60006020828403121561549657600080fd5b8151613c0f81613df9565b600181811c908216806154b557607f821691505b6020821081036154d557634e487b7160e01b600052602260045260246000fd5b50919050565b60008083546154e9816154a1565b60018281168015615501576001811461551657615545565b60ff1984168752821515830287019450615545565b8760005260208060002060005b8581101561553c5781548a820152908401908201615523565b50505082870194505b50929695505050505050565b6000815461555e816154a1565b80855260206001838116801561557b5760018114615595576155c3565b60ff1985168884015283151560051b8801830195506155c3565b866000528260002060005b858110156155bb5781548a82018601529083019084016155a0565b890184019650505b505050505092915050565b6040815260006155e16040830185613fd1565b8281036020840152614cb48185615551565b634e487b7160e01b600052601160045260246000fd5b6001600160401b03818116838216019080821115615629576156296155f3565b5092915050565b6040815260006156436040830185615286565b8281036020840152614cb481856153b5565b60006020828403121561566757600080fd5b81356001600160401b0381111561567d57600080fd5b6136738482850161473c565b81810381811115610d5f57610d5f6155f3565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b03808416806156cc576156cc61569c565b92169190910692915050565b8082028115828204841417610d5f57610d5f6155f3565b80518252600060206001600160401b0381840151168185015260408084015160a0604087015261572260a0870182613fd1565b90506060850151868203606088015261573b8282613fd1565b608087810151898303918a01919091528051808352908601935060009250908501905b8083101561546557835180516001600160a01b031683528601518683015292850192600192909201919084019061575e565b602081526000610d5c60208301846156ef565b6080815260006157b660808301876156ef565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b6000806000606084860312156157f457600080fd5b83516157ff81613df9565b60208501519093506001600160401b0381111561581b57600080fd5b8401601f8101861361582c57600080fd5b805161583a613e5882613e12565b81815287602083850101111561584f57600080fd5b615860826020830160208601613fad565b809450505050604084015190509250925092565b601f821115610fef576000816000526020600020601f850160051c8101602086101561589d5750805b601f850160051c820191505b818110156158bc578281556001016158a9565b505050505050565b81516001600160401b038111156158dd576158dd613cd1565b6158f1816158eb84546154a1565b84615874565b602080601f831160018114615926576000841561590e5750858301515b600019600386901b1c1916600185901b1785556158bc565b600085815260208120601f198616915b8281101561595557888601518255948401946001909101908401615936565b50858210156159735787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082546001600160a01b038116602084015260ff8160a01c16151560408401526001600160401b038160a81c16606084015250608080830152610d5c60a0830160018501615551565b80820180821115610d5f57610d5f6155f3565b60ff8181168382160190811115610d5f57610d5f6155f3565b8183823760009101908152919050565b828152606082602083013760800192915050565b60006001600160401b0380841680615a3b57615a3b61569c565b92169190910492915050565b600060208284031215615a5957600080fd5b610d5c8261437a565b6000808335601e19843603018112615a7957600080fd5b8301803591506001600160401b03821115615a9357600080fd5b60200191503681900382131561406257600080fd5b6020810160068310615abc57615abc6142cd565b91905290565b60ff8181168382160290811690818114615629576156296155f3565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615b365784546001600160a01b031683526001948501949284019201615b11565b50508481036060860152865180825290820192508187019060005b81811015615b765782516001600160a01b031685529383019391830191600101615b51565b50505060ff851660808501525090505b9695505050505050565b60006001600160401b03808616835280851660208401525060606040830152614cb46060830184613fd1565b8281526040602082015260006136736040830184613fd1565b6001600160401b038481168252831660208201526060810161367360408301846142e3565b848152615c0a60208201856142e3565b608060408201526000615c206080830185613fd1565b905082606083015295945050505050565b600060208284031215615c4357600080fd5b8151613c0f81613dc8565b6020815260008251610100806020850152615c6d610120850183613fd1565b91506020850151615c8960408601826001600160401b03169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615cc360a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615ce08483613fd1565b935060c08701519150808685030160e0870152615cfd8483613fd1565b935060e0870151915080868503018387015250615b868382613fd1565b600060208284031215615d2c57600080fd5b5051919050565b600082825180855260208086019550808260051b84010181860160005b8481101561531757601f19868403018952815160a08151818652615d7682870182613fd1565b9150506001600160a01b03868301511686860152604063ffffffff8184015116818701525060608083015186830382880152615db28382613fd1565b6080948501519790940196909652505098840198925090830190600101615d50565b602081526000610d5c6020830184615d33565b60008282518085526020808601955060208260051b8401016020860160005b8481101561531757601f19868403018952615e22838351613fd1565b98840198925090830190600101615e06565b60008151808452602080850194506020840160005b83811015614c3d57815163ffffffff1687529582019590820190600101615e49565b60608152600084518051606084015260208101516001600160401b0380821660808601528060408401511660a08601528060608401511660c08601528060808401511660e0860152505050602085015161014080610100850152615ed36101a0850183613fd1565b91506040870151605f198086850301610120870152615ef28483613fd1565b935060608901519150615f0f838701836001600160a01b03169052565b608089015161016087015260a0890151925080868503016101808701525050615f388282615d33565b9150508281036020840152615f4d8186615de7565b90508281036040840152615b868185615e3456fea164736f6c6343000818000a", + Bin: "0x6101206040523480156200001257600080fd5b5060405162006cb838038062006cb88339810160408190526200003591620008e4565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001fa565b5050466080525060208301516001600160a01b03161580620000ec575060408301516001600160a01b0316155b8062000103575060608301516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e682620002a5565b620001f18162000393565b50505062000cd6565b336001600160a01b03821603620002545760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316620002ce576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516001600160a01b039889166001600160c01b03199097168717600160a01b63ffffffff958616021760ff60c01b1916600160c01b911515919091021790965560608089018051600580546001600160a01b031916918b169190911790558251968752935190921693850193909352935115159183019190915251909216908201527fcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee9060800160405180910390a150565b60005b815181101562000625576000828281518110620003b757620003b762000a0e565b60200260200101519050600081602001519050806001600160401b0316600003620003f55760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166200041e576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b038116600090815260086020526040902060608301516001820180546200044c9062000a24565b9050600003620004af578154600160a81b600160e81b031916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a16200051d565b8154600160a81b90046001600160401b0316600114801590620004f2575080516020820120604051620004e790600185019062000a60565b604051809103902014155b156200051d57604051632105803760e11b81526001600160401b038416600482015260240162000083565b80511580620005535750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b1562000572576040516342bcdf7f60e11b815260040160405180910390fd5b6001820162000582828262000b33565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b031990911617178255620005d160066001600160401b03851662000629565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b836040516200060d919062000bff565b60405180910390a25050505080600101905062000396565b5050565b600062000637838362000640565b90505b92915050565b600081815260018301602052604081205462000689575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200063a565b5060006200063a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715620006cd57620006cd62000692565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006fe57620006fe62000692565b604052919050565b80516001600160401b03811681146200071e57600080fd5b919050565b6001600160a01b03811681146200073957600080fd5b50565b805180151581146200071e57600080fd5b6000601f83601f8401126200076157600080fd5b825160206001600160401b038083111562000780576200078062000692565b8260051b62000791838201620006d3565b9384528681018301938381019089861115620007ac57600080fd5b84890192505b85831015620008d757825184811115620007cc5760008081fd5b89016080601f19828d038101821315620007e65760008081fd5b620007f0620006a8565b88840151620007ff8162000723565b815260406200081085820162000706565b8a8301526060620008238187016200073c565b838301529385015193898511156200083b5760008081fd5b84860195508f603f8701126200085357600094508485fd5b8a8601519450898511156200086c576200086c62000692565b6200087d8b858f88011601620006d3565b93508484528f82868801011115620008955760008081fd5b60005b85811015620008b5578681018301518582018d01528b0162000898565b5060009484018b019490945250918201528352509184019190840190620007b2565b9998505050505050505050565b6000806000838503610120811215620008fc57600080fd5b60808112156200090b57600080fd5b62000915620006a8565b620009208662000706565b81526020860151620009328162000723565b60208201526040860151620009478162000723565b604082015260608601516200095c8162000723565b606082015293506080607f19820112156200097657600080fd5b5062000981620006a8565b6080850151620009918162000723565b815260a085015163ffffffff81168114620009ab57600080fd5b6020820152620009be60c086016200073c565b604082015260e0850151620009d38162000723565b60608201526101008501519092506001600160401b03811115620009f657600080fd5b62000a04868287016200074d565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168062000a3957607f821691505b60208210810362000a5a57634e487b7160e01b600052602260045260246000fd5b50919050565b600080835462000a708162000a24565b6001828116801562000a8b576001811462000aa15762000ad2565b60ff198416875282151583028701945062000ad2565b8760005260208060002060005b8581101562000ac95781548a82015290840190820162000aae565b50505082870194505b50929695505050505050565b601f82111562000b2e576000816000526020600020601f850160051c8101602086101562000b095750805b601f850160051c820191505b8181101562000b2a5782815560010162000b15565b5050505b505050565b81516001600160401b0381111562000b4f5762000b4f62000692565b62000b678162000b60845462000a24565b8462000ade565b602080601f83116001811462000b9f576000841562000b865750858301515b600019600386901b1c1916600185901b17855562000b2a565b600085815260208120601f198616915b8281101562000bd05788860151825594840194600190910190840162000baf565b508582101562000bef5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000c548162000a24565b8060a089015260c0600183166000811462000c78576001811462000c955762000cc7565b60ff19841660c08b015260c083151560051b8b0101945062000cc7565b85600052602060002060005b8481101562000cbe5781548c820185015290880190890162000ca1565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e05161010051615f6562000d53600039600081816102070152612c700152600081816101d80152612f380152600081816101a90152818161058201528181610732015261267001526000818161017a0152818161281b01526128d2015260008181611d6f0152611da20152615f656000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80637437ff9f116100ad578063c673e58411610071578063c673e58414610474578063ccd37ba314610494578063e9d68a8e146104d8578063f2fde38b146104f8578063f716f99f1461050b57600080fd5b80637437ff9f1461037357806379ba5097146104305780637edf52f41461043857806385572ffb1461044b5780638da5cb5b1461045957600080fd5b80633f4b04aa116100f45780633f4b04aa146102fc5780635215505b146103175780635e36480c1461032d5780635e7bb0081461034d57806360987c201461036057600080fd5b806304666f9c1461013157806306285c6914610146578063181f5a771461028d5780632d04ab76146102d6578063311cd513146102e9575b600080fd5b61014461013f366004613eab565b61051e565b005b61023760408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160401b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b604051610284919081516001600160401b031681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6102c96040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102849190614019565b6101446102e43660046140c9565b610532565b6101446102f736600461417b565b610a46565b600b546040516001600160401b039091168152602001610284565b61031f610aaf565b604051610284929190614215565b61034061033b3660046142b6565b610d0a565b6040516102849190614313565b61014461035b36600461487c565b610d5f565b61014461036e366004614ac0565b610fee565b6103e960408051608081018252600080825260208201819052918101829052606081019190915250604080516080810182526004546001600160a01b038082168352600160a01b820463ffffffff166020840152600160c01b90910460ff16151592820192909252600554909116606082015290565b604051610284919081516001600160a01b03908116825260208084015163ffffffff1690830152604080840151151590830152606092830151169181019190915260800190565b6101446112a5565b610144610446366004614b54565b611356565b61014461012c366004614bb9565b6000546040516001600160a01b039091168152602001610284565b610487610482366004614c04565b611367565b6040516102849190614c64565b6104ca6104a2366004614cd9565b6001600160401b03919091166000908152600a60209081526040808320938352929052205490565b604051908152602001610284565b6104eb6104e6366004614d03565b6114c5565b6040516102849190614d1e565b610144610506366004614d31565b6115d1565b610144610519366004614db6565b6115e2565b610526611624565b61052f81611680565b50565b60006105408789018961510b565b6004805491925090600160c01b900460ff166105ea57602082015151156105ea5760208201516040808401519051633854844f60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016926370a9089e926105b99230929190600401615333565b60006040518083038186803b1580156105d157600080fd5b505afa1580156105e5573d6000803e3d6000fd5b505050505b8151515115158061060057508151602001515115155b156106cb57600b5460208b0135906001600160401b03808316911610156106a357600b805467ffffffffffffffff19166001600160401b03831617905581548351604051633937306f60e01b81526001600160a01b0390921691633937306f9161066c91600401615468565b600060405180830381600087803b15801561068657600080fd5b505af115801561069a573d6000803e3d6000fd5b505050506106c9565b8260200151516000036106c957604051632261116760e01b815260040160405180910390fd5b505b60005b826020015151811015610986576000836020015182815181106106f3576106f3615396565b60209081029190910101518051604051632cbc26bb60e01b815267ffffffffffffffff60801b608083901b166004820152919250906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa158015610779573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079d919061547b565b156107cb57604051637edeb53960e11b81526001600160401b03821660048201526024015b60405180910390fd5b60006107d682611909565b9050806001016040516107e991906154d2565b6040518091039020836020015180519060200120146108265782602001518160010160405163b80d8fa960e01b81526004016107c29291906155c5565b60408301518154600160a81b90046001600160401b039081169116141580610867575082606001516001600160401b031683604001516001600160401b0316115b156108ac57825160408085015160608601519151636af0786b60e11b81526001600160401b0393841660048201529083166024820152911660448201526064016107c2565b6080830151806108cf5760405163504570e360e01b815260040160405180910390fd5b83516001600160401b03166000908152600a60209081526040808320848452909152902054156109275783516040516332cf0cbf60e01b81526001600160401b039091166004820152602481018290526044016107c2565b6060840151610937906001615600565b825467ffffffffffffffff60a81b1916600160a81b6001600160401b0392831602179092559251166000908152600a6020908152604080832094835293905291909120429055506001016106ce565b50602082015182516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e4926109be929091615627565b60405180910390a1610a3a60008b8b8b8b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d9182918501908490808284376000920191909152508c9250611955915050565b50505050505050505050565b610a86610a558284018461564c565b6040805160008082526020820190925290610a80565b6060815260200190600190039081610a6b5790505b50611c4e565b604080516000808252602082019092529050610aa9600185858585866000611955565b50505050565b6060806000610abe6006611d11565b6001600160401b03811115610ad557610ad5613ccb565b604051908082528060200260200182016040528015610b2657816020015b6040805160808101825260008082526020808301829052928201526060808201528252600019909201910181610af35790505b5090506000610b356006611d11565b6001600160401b03811115610b4c57610b4c613ccb565b604051908082528060200260200182016040528015610b75578160200160208202803683370190505b50905060005b610b856006611d11565b811015610d0157610b97600682611d1b565b828281518110610ba957610ba9615396565b60200260200101906001600160401b031690816001600160401b03168152505060086000838381518110610bdf57610bdf615396565b6020908102919091018101516001600160401b039081168352828201939093526040918201600020825160808101845281546001600160a01b038116825260ff600160a01b820416151593820193909352600160a81b90920490931691810191909152600182018054919291606084019190610c5a90615498565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8690615498565b8015610cd35780601f10610ca857610100808354040283529160200191610cd3565b820191906000526020600020905b815481529060010190602001808311610cb657829003601f168201915b505050505081525050838281518110610cee57610cee615396565b6020908102919091010152600101610b7b565b50939092509050565b6000610d1860016004615680565b6002610d256080856156a9565b6001600160401b0316610d3891906156cf565b610d428585611d27565b901c166003811115610d5657610d566142e9565b90505b92915050565b610d67611d6c565b815181518114610d8a576040516320f8fd5960e21b815260040160405180910390fd5b60005b81811015610fde576000848281518110610da957610da9615396565b60200260200101519050600081602001515190506000858481518110610dd157610dd1615396565b6020026020010151905080518214610dfc576040516320f8fd5960e21b815260040160405180910390fd5b60005b82811015610fcf576000828281518110610e1b57610e1b615396565b6020026020010151600001519050600085602001518381518110610e4157610e41615396565b6020026020010151905081600014610e95578060800151821015610e95578551815151604051633a98d46360e11b81526001600160401b0390921660048301526024820152604481018390526064016107c2565b838381518110610ea757610ea7615396565b602002602001015160200151518160a001515114610ef457805180516060909101516040516370a193fd60e01b815260048101929092526001600160401b031660248201526044016107c2565b60005b8160a0015151811015610fc1576000858581518110610f1857610f18615396565b6020026020010151602001518281518110610f3557610f35615396565b602002602001015163ffffffff16905080600014610fb85760008360a001518381518110610f6557610f65615396565b60200260200101516040015163ffffffff16905080821015610fb6578351516040516348e617b360e01b815260048101919091526024810184905260448101829052606481018390526084016107c2565b505b50600101610ef7565b505050806001019050610dff565b50505050806001019050610d8d565b50610fe98383611c4e565b505050565b33301461100e576040516306e34e6560e31b815260040160405180910390fd5b604080516000808252602082019092528161104b565b60408051808201909152600080825260208201528152602001906001900390816110245790505b5060a087015151909150156110815761107e8660a001518760200151886060015189600001516020015189898989611dd4565b90505b6040805160a081018252875151815287516020908101516001600160401b03168183015288015181830152908701516060820152608081018290526005546001600160a01b03168015611174576040516308d450a160e01b81526001600160a01b038216906308d450a1906110fa908590600401615787565b600060405180830381600087803b15801561111457600080fd5b505af1925050508015611125575060015b611174573d808015611153576040519150601f19603f3d011682016040523d82523d6000602084013e611158565b606091505b50806040516309c2532560e01b81526004016107c29190614019565b60408801515115801561118957506080880151155b806111a0575060608801516001600160a01b03163b155b806111c7575060608801516111c5906001600160a01b03166385572ffb60e01b611f85565b155b156111d45750505061129e565b87516020908101516001600160401b03166000908152600890915260408082205460808b015160608c01519251633cf9798360e01b815284936001600160a01b0390931692633cf9798392611232928992611388929160040161579a565b6000604051808303816000875af1158015611251573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261127991908101906157d6565b509150915081610a3a57806040516302a35ba360e21b81526004016107c29190614019565b5050505050565b6001546001600160a01b031633146112ff5760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016107c2565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b61135e611624565b61052f81611fa1565b6113aa6040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c08201529485529182018054845181840281018401909552808552929385830193909283018282801561145357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611435575b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156114b557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611497575b5050505050815250509050919050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b03878116845260088352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b90920490921694830194909452600184018054939492939184019161155190615498565b80601f016020809104026020016040519081016040528092919081815260200182805461157d90615498565b80156114b55780601f1061159f576101008083540402835291602001916114b5565b820191906000526020600020905b8154815290600101906020018083116115ad57505050919092525091949350505050565b6115d9611624565b61052f816120a6565b6115ea611624565b60005b81518110156116205761161882828151811061160b5761160b615396565b602002602001015161214f565b6001016115ed565b5050565b6000546001600160a01b0316331461167e5760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016107c2565b565b60005b81518110156116205760008282815181106116a0576116a0615396565b60200260200101519050600081602001519050806001600160401b03166000036116dd5760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b0316611705576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b0381166000908152600860205260409020606083015160018201805461173190615498565b905060000361179357815467ffffffffffffffff60a81b1916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a16117fc565b8154600160a81b90046001600160401b03166001148015906117d35750805160208201206040516117c89060018501906154d2565b604051809103902014155b156117fc57604051632105803760e11b81526001600160401b03841660048201526024016107c2565b805115806118315750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b1561184f576040516342bcdf7f60e11b815260040160405180910390fd5b6001820161185d82826158bb565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b029290921674ffffffffffffffffffffffffffffffffffffffffff19909116171782556118b860066001600160401b038516612479565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b836040516118f2919061597a565b60405180910390a250505050806001019050611683565b6001600160401b03811660009081526008602052604081208054600160a01b900460ff16610d595760405163ed053c5960e01b81526001600160401b03841660048201526024016107c2565b60ff878116600090815260026020908152604080832081516080810183528154815260019091015480861693820193909352610100830485169181019190915262010000909104909216151560608301528735906119b48760a46159c8565b90508260600151156119fc5784516119cd9060206156cf565b86516119da9060206156cf565b6119e59060a06159c8565b6119ef91906159c8565b6119f990826159c8565b90505b368114611a2557604051638e1192e160e01b8152600481018290523660248201526044016107c2565b5081518114611a545781516040516324f7d61360e21b81526004810191909152602481018290526044016107c2565b611a5c611d6c565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611aaa57611aaa6142e9565b6002811115611abb57611abb6142e9565b9052509050600281602001516002811115611ad857611ad86142e9565b148015611b2c5750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611b1457611b14615396565b6000918252602090912001546001600160a01b031633145b611b4957604051631b41e11d60e31b815260040160405180910390fd5b50816060015115611bf9576020820151611b649060016159db565b60ff16855114611b87576040516371253a2560e01b815260040160405180910390fd5b8351855114611ba95760405163a75d88af60e01b815260040160405180910390fd5b60008787604051611bbb9291906159f4565b604051908190038120611bd2918b90602001615a04565b604051602081830303815290604052805190602001209050611bf78a82888888612485565b505b6040805182815260208a8101356001600160401b03169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b8151600003611c705760405163c2e5347d60e01b815260040160405180910390fd5b80516040805160008082526020820190925291159181611cb3565b604080518082019091526000815260606020820152815260200190600190039081611c8b5790505b50905060005b845181101561129e57611d09858281518110611cd757611cd7615396565b602002602001015184611d0357858381518110611cf657611cf6615396565b6020026020010151612642565b83612642565b600101611cb9565b6000610d59825490565b6000610d568383612ed3565b6001600160401b038216600090815260096020526040812081611d4b608085615a18565b6001600160401b031681526020810191909152604001600020549392505050565b467f00000000000000000000000000000000000000000000000000000000000000001461167e57604051630f01ce8560e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201526044016107c2565b606088516001600160401b03811115611def57611def613ccb565b604051908082528060200260200182016040528015611e3457816020015b6040805180820190915260008082526020820152815260200190600190039081611e0d5790505b509050811560005b8a51811015611f775781611ed457848482818110611e5c57611e5c615396565b9050602002016020810190611e719190615a3e565b63ffffffff1615611ed457848482818110611e8e57611e8e615396565b9050602002016020810190611ea39190615a3e565b8b8281518110611eb557611eb5615396565b60200260200101516040019063ffffffff16908163ffffffff16815250505b611f528b8281518110611ee957611ee9615396565b60200260200101518b8b8b8b8b87818110611f0657611f06615396565b9050602002810190611f189190615a59565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612efd92505050565b838281518110611f6457611f64615396565b6020908102919091010152600101611e3c565b505098975050505050505050565b6000611f90836131dd565b8015610d565750610d568383613210565b80516001600160a01b0316611fc9576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516001600160a01b039889167fffffffffffffffff0000000000000000000000000000000000000000000000009097168717600160a01b63ffffffff958616021760ff60c01b1916600160c01b911515919091021790965560608089018051600580546001600160a01b031916918b169190911790558251968752935190921693850193909352935115159183019190915251909216908201527fcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee9060800160405180910390a150565b336001600160a01b038216036120fe5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016107c2565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff1660000361217a576000604051631b3fab5160e11b81526004016107c29190615a9f565b60208082015160ff808216600090815260029093526040832060018101549293909283921690036121cb576060840151600182018054911515620100000262ff000019909216919091179055612207565b6060840151600182015460ff6201000090910416151590151514612207576040516321fd80df60e21b815260ff841660048201526024016107c2565b60a084015180516101001015612233576001604051631b3fab5160e11b81526004016107c29190615a9f565b8051600003612258576005604051631b3fab5160e11b81526004016107c29190615a9f565b6122be84846003018054806020026020016040519081016040528092919081815260200182805480156122b457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612296575b505050505061329a565b8460600151156123ee5761232c84846002018054806020026020016040519081016040528092919081815260200182805480156122b4576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161229657505050505061329a565b608085015180516101001015612358576002604051631b3fab5160e11b81526004016107c29190615a9f565b6040860151612368906003615ab9565b60ff1681511161238e576003604051631b3fab5160e11b81526004016107c29190615a9f565b8151815110156123b4576001604051631b3fab5160e11b81526004016107c29190615a9f565b805160018401805461ff00191661010060ff8416021790556123df9060028601906020840190613c51565b506123ec85826001613303565b505b6123fa84826002613303565b805161240f9060038501906020840190613c51565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f547936124689389939260028a01929190615ad5565b60405180910390a161129e8461345e565b6000610d5683836134e1565b8251600090815b818110156126385760006001888684602081106124ab576124ab615396565b6124b891901a601b6159db565b8985815181106124ca576124ca615396565b60200260200101518986815181106124e4576124e4615396565b602002602001015160405160008152602001604052604051612522949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015612544573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b038516835281528582208587019096528554808416865293975090955092939284019161010090041660028111156125a5576125a56142e9565b60028111156125b6576125b66142e9565b90525090506001816020015160028111156125d3576125d36142e9565b146125f157604051636518c33d60e11b815260040160405180910390fd5b8051600160ff9091161b85161561261b57604051633d9ef1f160e21b815260040160405180910390fd5b806000015160ff166001901b85179450505080600101905061248c565b5050505050505050565b81518151604051632cbc26bb60e01b8152608083901b67ffffffffffffffff60801b166004820152901515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa1580156126bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e3919061547b565b1561275457801561271257604051637edeb53960e11b81526001600160401b03831660048201526024016107c2565b6040516001600160401b03831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b602084015151600081900361278a57845160405163676cf24b60e11b81526001600160401b0390911660048201526024016107c2565b84604001515181146127af576040516357e0e08360e01b815260040160405180910390fd5b6000816001600160401b038111156127c9576127c9613ccb565b6040519080825280602002602001820160405280156127f2578160200160208202803683370190505b50905060007f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f857f000000000000000000000000000000000000000000000000000000000000000061284388611909565b60010160405161285391906154d2565b60405190819003812061288b949392916020019384526001600160401b03928316602085015291166040830152606082015260800190565b60405160208183030381529060405280519060200120905060005b838110156129c1576000886020015182815181106128c6576128c6615396565b602002602001015190507f00000000000000000000000000000000000000000000000000000000000000006001600160401b03168160000151604001516001600160401b03161461293d5780516040908101519051631c21951160e11b81526001600160401b0390911660048201526024016107c2565b866001600160401b03168160000151602001516001600160401b03161461299157805160200151604051636c95f1eb60e01b81526001600160401b03808a16600483015290911660248201526044016107c2565b61299b8184613530565b8483815181106129ad576129ad615396565b6020908102919091010152506001016128a6565b505060006129d9858389606001518a60800151613638565b905080600003612a0757604051633ee8bd3f60e11b81526001600160401b03861660048201526024016107c2565b60005b838110156126385760005a9050600089602001518381518110612a2f57612a2f615396565b602002602001015190506000612a4d89836000015160600151610d0a565b90506000816003811115612a6357612a636142e9565b1480612a8057506003816003811115612a7e57612a7e6142e9565b145b612ad657815160600151604080516001600160401b03808d16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c910160405180910390a1505050612ecb565b60608815612bb5578a8581518110612af057612af0615396565b6020908102919091018101510151600454909150600090600160a01b900463ffffffff16612b1e8842615680565b1190508080612b3e57506003836003811115612b3c57612b3c6142e9565b145b612b66576040516354e7e43160e11b81526001600160401b038c1660048201526024016107c2565b8b8681518110612b7857612b78615396565b602002602001015160000151600014612baf578b8681518110612b9d57612b9d615396565b60209081029190910101515160808501525b50612c21565b6000826003811115612bc957612bc96142e9565b14612c2157825160600151604080516001600160401b03808e16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120910160405180910390a150505050612ecb565b8251608001516001600160401b031615612cf7576000826003811115612c4957612c496142e9565b03612cf75782516080015160208401516040516370701e5760e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263e0e03cae92612ca7928f929190600401615b87565b6020604051808303816000875af1158015612cc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cea919061547b565b612cf75750505050612ecb565b60008c604001518681518110612d0f57612d0f615396565b6020026020010151905080518460a001515114612d5957835160600151604051631cfe6d8b60e01b81526001600160401b03808e16600483015290911660248201526044016107c2565b612d6d8b8560000151606001516001613675565b600080612d7b86848661371a565b91509150612d928d87600001516060015184613675565b8b15612de9576003826003811115612dac57612dac6142e9565b03612de9576000856003811115612dc557612dc56142e9565b14612de957855151604051632b11b8d960e01b81526107c291908390600401615bb3565b6002826003811115612dfd57612dfd6142e9565b14612e3e576003826003811115612e1657612e166142e9565b14612e3e578551606001516040516349362d1f60e11b81526107c2918f918590600401615bcc565b8560000151600001518660000151606001516001600160401b03168e6001600160401b03167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8c81518110612e9657612e96615396565b602002602001015186865a612eab908f615680565b604051612ebb9493929190615bf1565b60405180910390a4505050505050505b600101612a0a565b6000826000018281548110612eea57612eea615396565b9060005260206000200154905092915050565b6040805180820190915260008082526020820152602086015160405163bbe4f6db60e01b81526001600160a01b0380831660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015612f81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa59190615c28565b90506001600160a01b0381161580612fd45750612fd26001600160a01b03821663aff2afbf60e01b611f85565b155b15612ffd5760405163ae9b4ce960e01b81526001600160a01b03821660048201526024016107c2565b60008061301588858c6040015163ffffffff166137ce565b9150915060008060006130c86040518061010001604052808e81526020018c6001600160401b031681526020018d6001600160a01b031681526020018f608001518152602001896001600160a01b031681526020018f6000015181526020018f6060015181526020018b8152506040516024016130929190615c45565b60408051601f198184030181529190526020810180516001600160e01b0316633907753760e01b179052878661138860846138b1565b925092509250826130ee578160405163e1cd550960e01b81526004016107c29190614019565b815160201461311d578151604051631e3be00960e21b81526020600482015260248101919091526044016107c2565b6000828060200190518101906131339190615d11565b9050866001600160a01b03168c6001600160a01b0316146131af5760006131648d8a61315f868a615680565b6137ce565b5090508681108061317e57508161317b8883615680565b14155b156131ad5760405163a966e21f60e01b81526004810183905260248101889052604481018290526064016107c2565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b60006131f0826301ffc9a760e01b613210565b8015610d595750613209826001600160e01b0319613210565b1592915050565b6040516001600160e01b031982166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d91506000519050828015613283575060208210155b801561328f5750600081115b979650505050505050565b60005b8151811015610fe95760ff8316600090815260036020526040812083519091908490849081106132cf576132cf615396565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff1916905560010161329d565b60005b8251811015610aa957600083828151811061332357613323615396565b6020026020010151905060006002811115613340576133406142e9565b60ff80871660009081526003602090815260408083206001600160a01b0387168452909152902054610100900416600281111561337f5761337f6142e9565b146133a0576004604051631b3fab5160e11b81526004016107c29190615a9f565b6001600160a01b0381166133c75760405163d6c62c9b60e01b815260040160405180910390fd5b60405180604001604052808360ff1681526020018460028111156133ed576133ed6142e9565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff19161761010083600281111561344a5761344a6142e9565b021790555090505050806001019050613306565b60ff818116600081815260026020526040902060010154620100009004909116906134b657806134a1576040516317bd8dd160e11b815260040160405180910390fd5b600b805467ffffffffffffffff191690555050565b60001960ff831601611620578015611620576040516307b8c74d60e51b815260040160405180910390fd5b600081815260018301602052604081205461352857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d59565b506000610d59565b81518051606080850151908301516080808701519401516040516000958695889561359495919490939192916020019485526001600160a01b039390931660208501526001600160401b039182166040850152606084015216608082015260a00190565b604051602081830303815290604052805190602001208560200151805190602001208660400151805190602001208760a001516040516020016135d79190615dcb565b60408051601f198184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e0015b60405160208183030381529060405280519060200120905092915050565b60008061364685858561398b565b6001600160401b0387166000908152600a6020908152604080832093835292905220549150505b949350505050565b600060026136846080856156a9565b6001600160401b031661369791906156cf565b905060006136a58585611d27565b9050816136b460016004615680565b901b1916818360038111156136cb576136cb6142e9565b6001600160401b03871660009081526009602052604081209190921b929092179182916136f9608088615a18565b6001600160401b031681526020810191909152604001600020555050505050565b604051630304c3e160e51b815260009060609030906360987c209061374790889088908890600401615e62565b600060405180830381600087803b15801561376157600080fd5b505af1925050508015613772575060015b6137b1573d8080156137a0576040519150601f19603f3d011682016040523d82523d6000602084013e6137a5565b606091505b506003925090506137c6565b50506040805160208101909152600081526002905b935093915050565b600080600080600061382f886040516024016137f991906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b179052888861138860846138b1565b92509250925082613855578160405163e1cd550960e01b81526004016107c29190614019565b6020825114613884578151604051631e3be00960e21b81526020600482015260248101919091526044016107c2565b818060200190518101906138989190615d11565b6138a28288615680565b94509450505050935093915050565b6000606060008361ffff166001600160401b038111156138d3576138d3613ccb565b6040519080825280601f01601f1916602001820160405280156138fd576020820181803683370190505b509150863b6139175763030ed58f60e21b60005260046000fd5b5a8581101561393157632be8ca8b60e21b60005260046000fd5b8590036040810481038710613951576337c3be2960e01b60005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d848111156139745750835b808352806000602085013e50955095509592505050565b82518251600091908183036139b357604051630469ac9960e21b815260040160405180910390fd5b61010182118015906139c757506101018111155b6139e4576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613a0e576040516309bde33960e01b815260040160405180910390fd5b80600003613a3b5786600081518110613a2957613a29615396565b60200260200101519350505050613c09565b6000816001600160401b03811115613a5557613a55613ccb565b604051908082528060200260200182016040528015613a7e578160200160208202803683370190505b50905060008080805b85811015613ba85760006001821b8b811603613ae25788851015613acb578c5160018601958e918110613abc57613abc615396565b60200260200101519050613b04565b8551600185019487918110613abc57613abc615396565b8b5160018401938d918110613af957613af9615396565b602002602001015190505b600089861015613b34578d5160018701968f918110613b2557613b25615396565b60200260200101519050613b56565b8651600186019588918110613b4b57613b4b615396565b602002602001015190505b82851115613b77576040516309bde33960e01b815260040160405180910390fd5b613b818282613c10565b878481518110613b9357613b93615396565b60209081029190910101525050600101613a87565b506001850382148015613bba57508683145b8015613bc557508581145b613be2576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613bf757613bf7615396565b60200260200101519750505050505050505b9392505050565b6000818310613c2857613c238284613c2e565b610d56565b610d5683835b60408051600160208201529081018390526060810182905260009060800161361a565b828054828255906000526020600020908101928215613ca6579160200282015b82811115613ca657825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613c71565b50613cb2929150613cb6565b5090565b5b80821115613cb25760008155600101613cb7565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613d0357613d03613ccb565b60405290565b60405160a081016001600160401b0381118282101715613d0357613d03613ccb565b60405160c081016001600160401b0381118282101715613d0357613d03613ccb565b604080519081016001600160401b0381118282101715613d0357613d03613ccb565b604051606081016001600160401b0381118282101715613d0357613d03613ccb565b604051601f8201601f191681016001600160401b0381118282101715613db957613db9613ccb565b604052919050565b60006001600160401b03821115613dda57613dda613ccb565b5060051b60200190565b6001600160a01b038116811461052f57600080fd5b80356001600160401b0381168114613e1057600080fd5b919050565b801515811461052f57600080fd5b8035613e1081613e15565b60006001600160401b03821115613e4757613e47613ccb565b50601f01601f191660200190565b600082601f830112613e6657600080fd5b8135613e79613e7482613e2e565b613d91565b818152846020838601011115613e8e57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613ebe57600080fd5b82356001600160401b0380821115613ed557600080fd5b818501915085601f830112613ee957600080fd5b8135613ef7613e7482613dc1565b81815260059190911b83018401908481019088831115613f1657600080fd5b8585015b83811015613fbc57803585811115613f325760008081fd5b86016080818c03601f1901811315613f4a5760008081fd5b613f52613ce1565b89830135613f5f81613de4565b81526040613f6e848201613df9565b8b830152606080850135613f8181613e15565b83830152928401359289841115613f9a57600091508182fd5b613fa88f8d86880101613e55565b908301525085525050918601918601613f1a565b5098975050505050505050565b60005b83811015613fe4578181015183820152602001613fcc565b50506000910152565b60008151808452614005816020860160208601613fc9565b601f01601f19169290920160200192915050565b602081526000610d566020830184613fed565b8060608101831015610d5957600080fd5b60008083601f84011261404f57600080fd5b5081356001600160401b0381111561406657600080fd5b60208301915083602082850101111561407e57600080fd5b9250929050565b60008083601f84011261409757600080fd5b5081356001600160401b038111156140ae57600080fd5b6020830191508360208260051b850101111561407e57600080fd5b60008060008060008060008060e0898b0312156140e557600080fd5b6140ef8a8a61402c565b975060608901356001600160401b038082111561410b57600080fd5b6141178c838d0161403d565b909950975060808b013591508082111561413057600080fd5b61413c8c838d01614085565b909750955060a08b013591508082111561415557600080fd5b506141628b828c01614085565b999c989b50969995989497949560c00135949350505050565b60008060006080848603121561419057600080fd5b61419a858561402c565b925060608401356001600160401b038111156141b557600080fd5b6141c18682870161403d565b9497909650939450505050565b6001600160a01b0381511682526020810151151560208301526001600160401b036040820151166040830152600060608201516080606085015261366d6080850182613fed565b604080825283519082018190526000906020906060840190828701845b828110156142575781516001600160401b031684529284019290840190600101614232565b50505083810382850152845180825282820190600581901b8301840187850160005b838110156142a757601f198684030185526142958383516141ce565b94870194925090860190600101614279565b50909998505050505050505050565b600080604083850312156142c957600080fd5b6142d283613df9565b91506142e060208401613df9565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b6004811061430f5761430f6142e9565b9052565b60208101610d5982846142ff565b600060a0828403121561433357600080fd5b61433b613d09565b90508135815261434d60208301613df9565b602082015261435e60408301613df9565b604082015261436f60608301613df9565b606082015261438060808301613df9565b608082015292915050565b8035613e1081613de4565b803563ffffffff81168114613e1057600080fd5b600082601f8301126143bb57600080fd5b813560206143cb613e7483613dc1565b82815260059290921b840181019181810190868411156143ea57600080fd5b8286015b848110156144ba5780356001600160401b038082111561440e5760008081fd5b9088019060a0828b03601f19018113156144285760008081fd5b614430613d09565b87840135838111156144425760008081fd5b6144508d8a83880101613e55565b82525060408085013561446281613de4565b828a01526060614473868201614396565b8284015260809150818601358581111561448d5760008081fd5b61449b8f8c838a0101613e55565b91840191909152509190930135908301525083529183019183016143ee565b509695505050505050565b600061014082840312156144d857600080fd5b6144e0613d2b565b90506144ec8383614321565b815260a08201356001600160401b038082111561450857600080fd5b61451485838601613e55565b602084015260c084013591508082111561452d57600080fd5b61453985838601613e55565b604084015261454a60e0850161438b565b6060840152610100840135608084015261012084013591508082111561456f57600080fd5b5061457c848285016143aa565b60a08301525092915050565b600082601f83011261459957600080fd5b813560206145a9613e7483613dc1565b82815260059290921b840181019181810190868411156145c857600080fd5b8286015b848110156144ba5780356001600160401b038111156145eb5760008081fd5b6145f98986838b01016144c5565b8452509183019183016145cc565b600082601f83011261461857600080fd5b81356020614628613e7483613dc1565b82815260059290921b8401810191818101908684111561464757600080fd5b8286015b848110156144ba5780356001600160401b038082111561466a57600080fd5b818901915089603f83011261467e57600080fd5b8582013561468e613e7482613dc1565b81815260059190911b830160400190878101908c8311156146ae57600080fd5b604085015b838110156146e7578035858111156146ca57600080fd5b6146d98f6040838a0101613e55565b8452509189019189016146b3565b5087525050509284019250830161464b565b600082601f83011261470a57600080fd5b8135602061471a613e7483613dc1565b8083825260208201915060208460051b87010193508684111561473c57600080fd5b602086015b848110156144ba5780358352918301918301614741565b600082601f83011261476957600080fd5b81356020614779613e7483613dc1565b82815260059290921b8401810191818101908684111561479857600080fd5b8286015b848110156144ba5780356001600160401b03808211156147bc5760008081fd5b9088019060a0828b03601f19018113156147d65760008081fd5b6147de613d09565b6147e9888501613df9565b8152604080850135848111156147ff5760008081fd5b61480d8e8b83890101614588565b8a84015250606080860135858111156148265760008081fd5b6148348f8c838a0101614607565b838501525060809150818601358581111561484f5760008081fd5b61485d8f8c838a01016146f9565b918401919091525091909301359083015250835291830191830161479c565b6000806040838503121561488f57600080fd5b6001600160401b03833511156148a457600080fd5b6148b18484358501614758565b91506001600160401b03602084013511156148cb57600080fd5b6020830135830184601f8201126148e157600080fd5b6148ee613e748235613dc1565b81358082526020808301929160051b84010187101561490c57600080fd5b602083015b6020843560051b850101811015614ab2576001600160401b038135111561493757600080fd5b87603f82358601011261494957600080fd5b61495c613e746020833587010135613dc1565b81358501602081810135808452908301929160059190911b016040018a101561498457600080fd5b604083358701015b83358701602081013560051b01604001811015614aa2576001600160401b03813511156149b857600080fd5b833587018135016040818d03603f190112156149d357600080fd5b6149db613d4d565b604082013581526001600160401b03606083013511156149fa57600080fd5b8c605f606084013584010112614a0f57600080fd5b6040606083013583010135614a26613e7482613dc1565b808282526020820191508f60608460051b6060880135880101011115614a4b57600080fd5b6060808601358601015b60608460051b606088013588010101811015614a8257614a7481614396565b835260209283019201614a55565b50806020850152505050808552505060208301925060208101905061498c565b5084525060209283019201614911565b508093505050509250929050565b600080600080600060608688031215614ad857600080fd5b85356001600160401b0380821115614aef57600080fd5b614afb89838a016144c5565b96506020880135915080821115614b1157600080fd5b614b1d89838a01614085565b90965094506040880135915080821115614b3657600080fd5b50614b4388828901614085565b969995985093965092949392505050565b600060808284031215614b6657600080fd5b614b6e613ce1565b8235614b7981613de4565b8152614b8760208401614396565b60208201526040830135614b9a81613e15565b60408201526060830135614bad81613de4565b60608201529392505050565b600060208284031215614bcb57600080fd5b81356001600160401b03811115614be157600080fd5b820160a08185031215613c0957600080fd5b803560ff81168114613e1057600080fd5b600060208284031215614c1657600080fd5b610d5682614bf3565b60008151808452602080850194506020840160005b83811015614c595781516001600160a01b031687529582019590820190600101614c34565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614cb360e0840182614c1f565b90506040840151601f198483030160c0850152614cd08282614c1f565b95945050505050565b60008060408385031215614cec57600080fd5b614cf583613df9565b946020939093013593505050565b600060208284031215614d1557600080fd5b610d5682613df9565b602081526000610d5660208301846141ce565b600060208284031215614d4357600080fd5b8135613c0981613de4565b600082601f830112614d5f57600080fd5b81356020614d6f613e7483613dc1565b8083825260208201915060208460051b870101935086841115614d9157600080fd5b602086015b848110156144ba578035614da981613de4565b8352918301918301614d96565b60006020808385031215614dc957600080fd5b82356001600160401b0380821115614de057600080fd5b818501915085601f830112614df457600080fd5b8135614e02613e7482613dc1565b81815260059190911b83018401908481019088831115614e2157600080fd5b8585015b83811015613fbc57803585811115614e3c57600080fd5b860160c0818c03601f19011215614e535760008081fd5b614e5b613d2b565b8882013581526040614e6e818401614bf3565b8a8301526060614e7f818501614bf3565b8284015260809150614e92828501613e23565b9083015260a08381013589811115614eaa5760008081fd5b614eb88f8d83880101614d4e565b838501525060c0840135915088821115614ed25760008081fd5b614ee08e8c84870101614d4e565b9083015250845250918601918601614e25565b80356001600160e01b0381168114613e1057600080fd5b600082601f830112614f1b57600080fd5b81356020614f2b613e7483613dc1565b82815260069290921b84018101918181019086841115614f4a57600080fd5b8286015b848110156144ba5760408189031215614f675760008081fd5b614f6f613d4d565b614f7882613df9565b8152614f85858301614ef3565b81860152835291830191604001614f4e565b600082601f830112614fa857600080fd5b81356020614fb8613e7483613dc1565b82815260059290921b84018101918181019086841115614fd757600080fd5b8286015b848110156144ba5780356001600160401b0380821115614ffb5760008081fd5b9088019060a0828b03601f19018113156150155760008081fd5b61501d613d09565b615028888501613df9565b81526040808501358481111561503e5760008081fd5b61504c8e8b83890101613e55565b8a8401525060609350615060848601613df9565b908201526080615071858201613df9565b93820193909352920135908201528352918301918301614fdb565b600082601f83011261509d57600080fd5b813560206150ad613e7483613dc1565b82815260069290921b840181019181810190868411156150cc57600080fd5b8286015b848110156144ba57604081890312156150e95760008081fd5b6150f1613d4d565b8135815284820135858201528352918301916040016150d0565b6000602080838503121561511e57600080fd5b82356001600160401b038082111561513557600080fd5b908401906060828703121561514957600080fd5b615151613d6f565b82358281111561516057600080fd5b8301604081890381131561517357600080fd5b61517b613d4d565b82358581111561518a57600080fd5b8301601f81018b1361519b57600080fd5b80356151a9613e7482613dc1565b81815260069190911b8201890190898101908d8311156151c857600080fd5b928a01925b828410156152185785848f0312156151e55760008081fd5b6151ed613d4d565b84356151f881613de4565b8152615205858d01614ef3565b818d0152825292850192908a01906151cd565b84525050508287013591508482111561523057600080fd5b61523c8a838501614f0a565b8188015283525050828401358281111561525557600080fd5b61526188828601614f97565b8583015250604083013593508184111561527a57600080fd5b6152868785850161508c565b60408201529695505050505050565b600082825180855260208086019550808260051b84010181860160005b8481101561532657601f19868403018952815160a06001600160401b038083511686528683015182888801526152ea83880182613fed565b604085810151841690890152606080860151909316928801929092525060809283015192909501919091525097830197908301906001016152b2565b5090979650505050505050565b6001600160a01b0384168152600060206060818401526153566060840186615295565b83810360408581019190915285518083528387019284019060005b818110156142a757845180518452860151868401529385019391830191600101615371565b634e487b7160e01b600052603260045260246000fd5b805160408084528151848201819052600092602091908201906060870190855b8181101561540357835180516001600160a01b031684528501516001600160e01b03168584015292840192918501916001016153cc565b50508583015187820388850152805180835290840192506000918401905b8083101561545c57835180516001600160401b031683528501516001600160e01b031685830152928401926001929092019190850190615421565b50979650505050505050565b602081526000610d5660208301846153ac565b60006020828403121561548d57600080fd5b8151613c0981613e15565b600181811c908216806154ac57607f821691505b6020821081036154cc57634e487b7160e01b600052602260045260246000fd5b50919050565b60008083546154e081615498565b600182811680156154f8576001811461550d5761553c565b60ff198416875282151583028701945061553c565b8760005260208060002060005b858110156155335781548a82015290840190820161551a565b50505082870194505b50929695505050505050565b6000815461555581615498565b808552602060018381168015615572576001811461558c576155ba565b60ff1985168884015283151560051b8801830195506155ba565b866000528260002060005b858110156155b25781548a8201860152908301908401615597565b890184019650505b505050505092915050565b6040815260006155d86040830185613fed565b8281036020840152614cd08185615548565b634e487b7160e01b600052601160045260246000fd5b6001600160401b03818116838216019080821115615620576156206155ea565b5092915050565b60408152600061563a6040830185615295565b8281036020840152614cd081856153ac565b60006020828403121561565e57600080fd5b81356001600160401b0381111561567457600080fd5b61366d84828501614758565b81810381811115610d5957610d596155ea565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b03808416806156c3576156c3615693565b92169190910692915050565b8082028115828204841417610d5957610d596155ea565b80518252600060206001600160401b0381840151168185015260408084015160a0604087015261571960a0870182613fed565b9050606085015186820360608801526157328282613fed565b608087810151898303918a01919091528051808352908601935060009250908501905b8083101561545c57835180516001600160a01b0316835286015186830152928501926001929092019190840190615755565b602081526000610d5660208301846156e6565b6080815260006157ad60808301876156e6565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b6000806000606084860312156157eb57600080fd5b83516157f681613e15565b60208501519093506001600160401b0381111561581257600080fd5b8401601f8101861361582357600080fd5b8051615831613e7482613e2e565b81815287602083850101111561584657600080fd5b615857826020830160208601613fc9565b809450505050604084015190509250925092565b601f821115610fe9576000816000526020600020601f850160051c810160208610156158945750805b601f850160051c820191505b818110156158b3578281556001016158a0565b505050505050565b81516001600160401b038111156158d4576158d4613ccb565b6158e8816158e28454615498565b8461586b565b602080601f83116001811461591d57600084156159055750858301515b600019600386901b1c1916600185901b1785556158b3565b600085815260208120601f198616915b8281101561594c5788860151825594840194600190910190840161592d565b508582101561596a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082546001600160a01b038116602084015260ff8160a01c16151560408401526001600160401b038160a81c16606084015250608080830152610d5660a0830160018501615548565b80820180821115610d5957610d596155ea565b60ff8181168382160190811115610d5957610d596155ea565b8183823760009101908152919050565b828152606082602083013760800192915050565b60006001600160401b0380841680615a3257615a32615693565b92169190910492915050565b600060208284031215615a5057600080fd5b610d5682614396565b6000808335601e19843603018112615a7057600080fd5b8301803591506001600160401b03821115615a8a57600080fd5b60200191503681900382131561407e57600080fd5b6020810160068310615ab357615ab36142e9565b91905290565b60ff8181168382160290811690818114615620576156206155ea565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615b2d5784546001600160a01b031683526001948501949284019201615b08565b50508481036060860152865180825290820192508187019060005b81811015615b6d5782516001600160a01b031685529383019391830191600101615b48565b50505060ff851660808501525090505b9695505050505050565b60006001600160401b03808616835280851660208401525060606040830152614cd06060830184613fed565b82815260406020820152600061366d6040830184613fed565b6001600160401b038481168252831660208201526060810161366d60408301846142ff565b848152615c0160208201856142ff565b608060408201526000615c176080830185613fed565b905082606083015295945050505050565b600060208284031215615c3a57600080fd5b8151613c0981613de4565b6020815260008251610100806020850152615c64610120850183613fed565b91506020850151615c8060408601826001600160401b03169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615cba60a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615cd78483613fed565b935060c08701519150808685030160e0870152615cf48483613fed565b935060e0870151915080868503018387015250615b7d8382613fed565b600060208284031215615d2357600080fd5b5051919050565b600082825180855260208086019550808260051b84010181860160005b8481101561532657601f19868403018952815160a08151818652615d6d82870182613fed565b9150506001600160a01b03868301511686860152604063ffffffff8184015116818701525060608083015186830382880152615da98382613fed565b6080948501519790940196909652505098840198925090830190600101615d47565b602081526000610d566020830184615d2a565b60008282518085526020808601955060208260051b8401016020860160005b8481101561532657601f19868403018952615e19838351613fed565b98840198925090830190600101615dfd565b60008151808452602080850194506020840160005b83811015614c5957815163ffffffff1687529582019590820190600101615e40565b60608152600084518051606084015260208101516001600160401b0380821660808601528060408401511660a08601528060608401511660c08601528060808401511660e0860152505050602085015161014080610100850152615eca6101a0850183613fed565b91506040870151605f198086850301610120870152615ee98483613fed565b935060608901519150615f06838701836001600160a01b03169052565b608089015161016087015260a0890151925080868503016101808701525050615f2f8282615d2a565b9150508281036020840152615f448186615dde565b90508281036040840152615b7d8185615e2b56fea164736f6c6343000818000a", } var OffRampABI = OffRampMetaData.ABI diff --git a/core/gethwrappers/ccip/generated/report_codec/report_codec.go b/core/gethwrappers/ccip/generated/report_codec/report_codec.go index 45e49035b05..0a58d0a6b93 100644 --- a/core/gethwrappers/ccip/generated/report_codec/report_codec.go +++ b/core/gethwrappers/ccip/generated/report_codec/report_codec.go @@ -95,12 +95,11 @@ type OffRampCommitReport struct { PriceUpdates InternalPriceUpdates MerkleRoots []InternalMerkleRoot RmnSignatures []IRMNRemoteSignature - RmnRawVs *big.Int } var ReportCodecMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"structIRMNRemote.Signature[]\",\"name\":\"rmnSignatures\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"rmnRawVs\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structOffRamp.CommitReport\",\"name\":\"report\",\"type\":\"tuple\"}],\"name\":\"CommitReportDecoded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structInternal.ExecutionReport[]\",\"name\":\"report\",\"type\":\"tuple[]\"}],\"name\":\"ExecuteReportDecoded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"decodeCommitReport\",\"outputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"structIRMNRemote.Signature[]\",\"name\":\"rmnSignatures\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"rmnRawVs\",\"type\":\"uint256\"}],\"internalType\":\"structOffRamp.CommitReport\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"decodeExecuteReport\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.ExecutionReport[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b506113e8806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80636fb349561461003b578063f816ec6014610064575b600080fd5b61004e61004936600461023a565b610084565b60405161005b91906104f7565b60405180910390f35b61007761007236600461023a565b6100a0565b60405161005b919061083c565b60608180602001905181019061009a9190610e85565b92915050565b6040805160c08101825260606080820181815260a08301829052825260208083018290529282018190526000908201528251909161009a9184018101908401611245565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715610136576101366100e4565b60405290565b60405160c0810167ffffffffffffffff81118282101715610136576101366100e4565b6040805190810167ffffffffffffffff81118282101715610136576101366100e4565b6040516080810167ffffffffffffffff81118282101715610136576101366100e4565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156101ec576101ec6100e4565b604052919050565b600067ffffffffffffffff82111561020e5761020e6100e4565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60006020828403121561024c57600080fd5b813567ffffffffffffffff81111561026357600080fd5b8201601f8101841361027457600080fd5b8035610287610282826101f4565b6101a5565b81815285602083850101111561029c57600080fd5b81602084016020830137600091810160200191909152949350505050565b60005b838110156102d55781810151838201526020016102bd565b50506000910152565b600081518084526102f68160208601602086016102ba565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082825180855260208086019550808260051b84010181860160005b848110156103f4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018952815160a08151818652610389828701826102de565b91505073ffffffffffffffffffffffffffffffffffffffff868301511686860152604063ffffffff81840151168187015250606080830151868303828801526103d283826102de565b6080948501519790940196909652505098840198925090830190600101610345565b5090979650505050505050565b6000828251808552602080860195506005818360051b8501018287016000805b868110156104ac577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe088850381018c5283518051808752908801908887019080891b88018a01865b8281101561049557858a83030184526104838286516102de565b948c0194938c01939150600101610469565b509e8a019e97505050938701935050600101610421565b50919998505050505050505050565b60008151808452602080850194506020840160005b838110156104ec578151875295820195908201906001016104d0565b509495945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156106df577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452815160a0860167ffffffffffffffff8083511688528883015160a08a8a015282815180855260c08b01915060c08160051b8c010194508b8301925060005b81811015610688577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408c87030183528351805180518852868f820151168f890152866040820151166040890152866060820151166060890152866080820151166080890152508d81015161014060a089015261060b6101408901826102de565b9050604082015188820360c08a015261062482826102de565b915050606082015161064e60e08a018273ffffffffffffffffffffffffffffffffffffffff169052565b50608082015161010089015260a082015191508781036101208901526106748183610328565b97505050928c0192918c019160010161058b565b5050505050604082015187820360408901526106a48282610401565b915050606082015187820360608901526106be82826104bb565b6080938401519890930197909752509450928501929085019060010161051e565b5092979650505050505050565b60008151808452602080850194506020840160005b838110156104ec578151805167ffffffffffffffff1688528301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168388015260409096019590820190600101610701565b600082825180855260208086019550808260051b84010181860160005b848110156103f4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018952815160a067ffffffffffffffff8083511686528683015182888801526107c4838801826102de565b6040858101518416908901526060808601519093169288019290925250608092830151929095019190915250978301979083019060010161076d565b60008151808452602080850194506020840160005b838110156104ec578151805188528301518388015260409096019590820190600101610815565b602080825282516080838301528051604060a08501819052815160e08601819052600094939284019185916101008801905b808410156108cb578451805173ffffffffffffffffffffffffffffffffffffffff1683528701517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168783015293860193600193909301929082019061086e565b50938501518785037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600160c08901529361090581866106ec565b9450505050508185015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0808583030160408601526109468284610750565b92506040860151915080858403016060860152506109648282610800565b915050606084015160808401528091505092915050565b600067ffffffffffffffff821115610995576109956100e4565b5060051b60200190565b805167ffffffffffffffff811681146109b757600080fd5b919050565b600060a082840312156109ce57600080fd5b6109d6610113565b9050815181526109e86020830161099f565b60208201526109f96040830161099f565b6040820152610a0a6060830161099f565b6060820152610a1b6080830161099f565b608082015292915050565b600082601f830112610a3757600080fd5b8151610a45610282826101f4565b818152846020838601011115610a5a57600080fd5b610a6b8260208301602087016102ba565b949350505050565b805173ffffffffffffffffffffffffffffffffffffffff811681146109b757600080fd5b600082601f830112610aa857600080fd5b81516020610ab86102828361097b565b82815260059290921b84018101918181019086841115610ad757600080fd5b8286015b84811015610bd357805167ffffffffffffffff80821115610afc5760008081fd5b818901915060a0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d03011215610b355760008081fd5b610b3d610113565b8784015183811115610b4f5760008081fd5b610b5d8d8a83880101610a26565b8252506040610b6d818601610a73565b8983015260608086015163ffffffff81168114610b8a5760008081fd5b808385015250608091508186015185811115610ba65760008081fd5b610bb48f8c838a0101610a26565b9184019190915250919093015190830152508352918301918301610adb565b509695505050505050565b600082601f830112610bef57600080fd5b81516020610bff6102828361097b565b82815260059290921b84018101918181019086841115610c1e57600080fd5b8286015b84811015610bd357805167ffffffffffffffff80821115610c435760008081fd5b8189019150610140807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d03011215610c7d5760008081fd5b610c8561013c565b610c918c8986016109bc565b815260c084015183811115610ca65760008081fd5b610cb48d8a83880101610a26565b898301525060e084015183811115610ccc5760008081fd5b610cda8d8a83880101610a26565b604083015250610ced6101008501610a73565b60608201526101208401516080820152908301519082821115610d105760008081fd5b610d1e8c8984870101610a97565b60a08201528652505050918301918301610c22565b600082601f830112610d4457600080fd5b81516020610d546102828361097b565b82815260059290921b84018101918181019086841115610d7357600080fd5b8286015b84811015610bd357805167ffffffffffffffff80821115610d9757600080fd5b818901915089603f830112610dab57600080fd5b85820151610dbb6102828261097b565b81815260059190911b830160400190878101908c831115610ddb57600080fd5b604085015b83811015610e1457805185811115610df757600080fd5b610e068f6040838a0101610a26565b845250918901918901610de0565b50875250505092840192508301610d77565b600082601f830112610e3757600080fd5b81516020610e476102828361097b565b8083825260208201915060208460051b870101935086841115610e6957600080fd5b602086015b84811015610bd35780518352918301918301610e6e565b60006020808385031215610e9857600080fd5b825167ffffffffffffffff80821115610eb057600080fd5b818501915085601f830112610ec457600080fd5b8151610ed26102828261097b565b81815260059190911b83018401908481019088831115610ef157600080fd5b8585015b83811015610feb57805185811115610f0c57600080fd5b860160a0818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0011215610f415760008081fd5b610f49610113565b610f5489830161099f565b815260408083015188811115610f6a5760008081fd5b610f788e8c83870101610bde565b8b8401525060608084015189811115610f915760008081fd5b610f9f8f8d83880101610d33565b8385015250608091508184015189811115610fba5760008081fd5b610fc88f8d83880101610e26565b918401919091525060a09290920151918101919091528352918601918601610ef5565b5098975050505050505050565b80517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811681146109b757600080fd5b600082601f83011261103557600080fd5b815160206110456102828361097b565b82815260069290921b8401810191818101908684111561106457600080fd5b8286015b84811015610bd357604081890312156110815760008081fd5b61108961015f565b6110928261099f565b815261109f858301610ff8565b81860152835291830191604001611068565b600082601f8301126110c257600080fd5b815160206110d26102828361097b565b82815260059290921b840181019181810190868411156110f157600080fd5b8286015b84811015610bd357805167ffffffffffffffff808211156111165760008081fd5b818901915060a0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d0301121561114f5760008081fd5b611157610113565b61116288850161099f565b8152604080850151848111156111785760008081fd5b6111868e8b83890101610a26565b8a840152506060935061119a84860161099f565b9082015260806111ab85820161099f565b938201939093529201519082015283529183019183016110f5565b600082601f8301126111d757600080fd5b815160206111e76102828361097b565b82815260069290921b8401810191818101908684111561120657600080fd5b8286015b84811015610bd357604081890312156112235760008081fd5b61122b61015f565b81518152848201518582015283529183019160400161120a565b6000602080838503121561125857600080fd5b825167ffffffffffffffff8082111561127057600080fd5b908401906080828703121561128457600080fd5b61128c610182565b82518281111561129b57600080fd5b830160408189038113156112ae57600080fd5b6112b661015f565b8251858111156112c557600080fd5b8301601f81018b136112d657600080fd5b80516112e46102828261097b565b81815260069190911b8201890190898101908d83111561130357600080fd5b928a01925b828410156113515785848f0312156113205760008081fd5b61132861015f565b61133185610a73565b815261133e8c8601610ff8565b818d0152825292850192908a0190611308565b84525050508287015191508482111561136957600080fd5b6113758a838501611024565b8188015283525050828401518281111561138e57600080fd5b61139a888286016110b1565b858301525060408301519350818411156113b357600080fd5b6113bf878585016111c6565b604082015260608301516060820152809450505050509291505056fea164736f6c6343000818000a", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"structIRMNRemote.Signature[]\",\"name\":\"rmnSignatures\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structOffRamp.CommitReport\",\"name\":\"report\",\"type\":\"tuple\"}],\"name\":\"CommitReportDecoded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structInternal.ExecutionReport[]\",\"name\":\"report\",\"type\":\"tuple[]\"}],\"name\":\"ExecuteReportDecoded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"decodeCommitReport\",\"outputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"structIRMNRemote.Signature[]\",\"name\":\"rmnSignatures\",\"type\":\"tuple[]\"}],\"internalType\":\"structOffRamp.CommitReport\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"decodeExecuteReport\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.ExecutionReport[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b506113c3806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80636fb349561461003b578063f816ec6014610064575b600080fd5b61004e610049366004610231565b610084565b60405161005b91906104ee565b60405180910390f35b610077610072366004610231565b6100a0565b60405161005b9190610833565b60608180602001905181019061009a9190610e6d565b92915050565b6040805160a08101825260608082018181526080830182905282526020808301829052928201528251909161009a918401810190840161122d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561012d5761012d6100db565b60405290565b60405160c0810167ffffffffffffffff8111828210171561012d5761012d6100db565b6040805190810167ffffffffffffffff8111828210171561012d5761012d6100db565b6040516060810167ffffffffffffffff8111828210171561012d5761012d6100db565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156101e3576101e36100db565b604052919050565b600067ffffffffffffffff821115610205576102056100db565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60006020828403121561024357600080fd5b813567ffffffffffffffff81111561025a57600080fd5b8201601f8101841361026b57600080fd5b803561027e610279826101eb565b61019c565b81815285602083850101111561029357600080fd5b81602084016020830137600091810160200191909152949350505050565b60005b838110156102cc5781810151838201526020016102b4565b50506000910152565b600081518084526102ed8160208601602086016102b1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082825180855260208086019550808260051b84010181860160005b848110156103eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018952815160a08151818652610380828701826102d5565b91505073ffffffffffffffffffffffffffffffffffffffff868301511686860152604063ffffffff81840151168187015250606080830151868303828801526103c983826102d5565b608094850151979094019690965250509884019892509083019060010161033c565b5090979650505050505050565b6000828251808552602080860195506005818360051b8501018287016000805b868110156104a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe088850381018c5283518051808752908801908887019080891b88018a01865b8281101561048c57858a830301845261047a8286516102d5565b948c0194938c01939150600101610460565b509e8a019e97505050938701935050600101610418565b50919998505050505050505050565b60008151808452602080850194506020840160005b838110156104e3578151875295820195908201906001016104c7565b509495945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156106d6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452815160a0860167ffffffffffffffff8083511688528883015160a08a8a015282815180855260c08b01915060c08160051b8c010194508b8301925060005b8181101561067f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408c87030183528351805180518852868f820151168f890152866040820151166040890152866060820151166060890152866080820151166080890152508d81015161014060a08901526106026101408901826102d5565b9050604082015188820360c08a015261061b82826102d5565b915050606082015161064560e08a018273ffffffffffffffffffffffffffffffffffffffff169052565b50608082015161010089015260a0820151915087810361012089015261066b818361031f565b97505050928c0192918c0191600101610582565b50505050506040820151878203604089015261069b82826103f8565b915050606082015187820360608901526106b582826104b2565b60809384015198909301979097525094509285019290850190600101610515565b5092979650505050505050565b60008151808452602080850194506020840160005b838110156104e3578151805167ffffffffffffffff1688528301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1683880152604090960195908201906001016106f8565b600082825180855260208086019550808260051b84010181860160005b848110156103eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018952815160a067ffffffffffffffff8083511686528683015182888801526107bb838801826102d5565b60408581015184169089015260608086015190931692880192909252506080928301519290950191909152509783019790830190600101610764565b60008151808452602080850194506020840160005b838110156104e357815180518852830151838801526040909601959082019060010161080c565b602080825282516060838301528051604060808501819052815160c086018190526000949392840191859160e08801905b808410156108c1578451805173ffffffffffffffffffffffffffffffffffffffff1683528701517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1687830152938601936001939093019290820190610864565b50938501518785037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800160a0890152936108fb81866106e3565b9450505050508185015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08085830301604086015261093c8284610747565b925060408601519150808584030160608601525061095a82826107f7565b95945050505050565b600067ffffffffffffffff82111561097d5761097d6100db565b5060051b60200190565b805167ffffffffffffffff8116811461099f57600080fd5b919050565b600060a082840312156109b657600080fd5b6109be61010a565b9050815181526109d060208301610987565b60208201526109e160408301610987565b60408201526109f260608301610987565b6060820152610a0360808301610987565b608082015292915050565b600082601f830112610a1f57600080fd5b8151610a2d610279826101eb565b818152846020838601011115610a4257600080fd5b610a538260208301602087016102b1565b949350505050565b805173ffffffffffffffffffffffffffffffffffffffff8116811461099f57600080fd5b600082601f830112610a9057600080fd5b81516020610aa061027983610963565b82815260059290921b84018101918181019086841115610abf57600080fd5b8286015b84811015610bbb57805167ffffffffffffffff80821115610ae45760008081fd5b818901915060a0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d03011215610b1d5760008081fd5b610b2561010a565b8784015183811115610b375760008081fd5b610b458d8a83880101610a0e565b8252506040610b55818601610a5b565b8983015260608086015163ffffffff81168114610b725760008081fd5b808385015250608091508186015185811115610b8e5760008081fd5b610b9c8f8c838a0101610a0e565b9184019190915250919093015190830152508352918301918301610ac3565b509695505050505050565b600082601f830112610bd757600080fd5b81516020610be761027983610963565b82815260059290921b84018101918181019086841115610c0657600080fd5b8286015b84811015610bbb57805167ffffffffffffffff80821115610c2b5760008081fd5b8189019150610140807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d03011215610c655760008081fd5b610c6d610133565b610c798c8986016109a4565b815260c084015183811115610c8e5760008081fd5b610c9c8d8a83880101610a0e565b898301525060e084015183811115610cb45760008081fd5b610cc28d8a83880101610a0e565b604083015250610cd56101008501610a5b565b60608201526101208401516080820152908301519082821115610cf85760008081fd5b610d068c8984870101610a7f565b60a08201528652505050918301918301610c0a565b600082601f830112610d2c57600080fd5b81516020610d3c61027983610963565b82815260059290921b84018101918181019086841115610d5b57600080fd5b8286015b84811015610bbb57805167ffffffffffffffff80821115610d7f57600080fd5b818901915089603f830112610d9357600080fd5b85820151610da361027982610963565b81815260059190911b830160400190878101908c831115610dc357600080fd5b604085015b83811015610dfc57805185811115610ddf57600080fd5b610dee8f6040838a0101610a0e565b845250918901918901610dc8565b50875250505092840192508301610d5f565b600082601f830112610e1f57600080fd5b81516020610e2f61027983610963565b8083825260208201915060208460051b870101935086841115610e5157600080fd5b602086015b84811015610bbb5780518352918301918301610e56565b60006020808385031215610e8057600080fd5b825167ffffffffffffffff80821115610e9857600080fd5b818501915085601f830112610eac57600080fd5b8151610eba61027982610963565b81815260059190911b83018401908481019088831115610ed957600080fd5b8585015b83811015610fd357805185811115610ef457600080fd5b860160a0818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0011215610f295760008081fd5b610f3161010a565b610f3c898301610987565b815260408083015188811115610f525760008081fd5b610f608e8c83870101610bc6565b8b8401525060608084015189811115610f795760008081fd5b610f878f8d83880101610d1b565b8385015250608091508184015189811115610fa25760008081fd5b610fb08f8d83880101610e0e565b918401919091525060a09290920151918101919091528352918601918601610edd565b5098975050505050505050565b80517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116811461099f57600080fd5b600082601f83011261101d57600080fd5b8151602061102d61027983610963565b82815260069290921b8401810191818101908684111561104c57600080fd5b8286015b84811015610bbb57604081890312156110695760008081fd5b611071610156565b61107a82610987565b8152611087858301610fe0565b81860152835291830191604001611050565b600082601f8301126110aa57600080fd5b815160206110ba61027983610963565b82815260059290921b840181019181810190868411156110d957600080fd5b8286015b84811015610bbb57805167ffffffffffffffff808211156110fe5760008081fd5b818901915060a0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d030112156111375760008081fd5b61113f61010a565b61114a888501610987565b8152604080850151848111156111605760008081fd5b61116e8e8b83890101610a0e565b8a8401525060609350611182848601610987565b908201526080611193858201610987565b938201939093529201519082015283529183019183016110dd565b600082601f8301126111bf57600080fd5b815160206111cf61027983610963565b82815260069290921b840181019181810190868411156111ee57600080fd5b8286015b84811015610bbb576040818903121561120b5760008081fd5b611213610156565b8151815284820151858201528352918301916040016111f2565b6000602080838503121561124057600080fd5b825167ffffffffffffffff8082111561125857600080fd5b908401906060828703121561126c57600080fd5b611274610179565b82518281111561128357600080fd5b8301604081890381131561129657600080fd5b61129e610156565b8251858111156112ad57600080fd5b8301601f81018b136112be57600080fd5b80516112cc61027982610963565b81815260069190911b8201890190898101908d8311156112eb57600080fd5b928a01925b828410156113395785848f0312156113085760008081fd5b611310610156565b61131985610a5b565b81526113268c8601610fe0565b818d0152825292850192908a01906112f0565b84525050508287015191508482111561135157600080fd5b61135d8a83850161100c565b8188015283525050828401518281111561137657600080fd5b61138288828601611099565b8583015250604083015193508184111561139b57600080fd5b6113a7878585016111ae565b6040820152969550505050505056fea164736f6c6343000818000a", } var ReportCodecABI = ReportCodecMetaData.ABI @@ -530,7 +529,7 @@ func (_ReportCodec *ReportCodec) ParseLog(log types.Log) (generated.AbigenLog, e } func (ReportCodecCommitReportDecoded) Topic() common.Hash { - return common.HexToHash("0x39ecb9cbf9994ec2d914cd3ec4bff76f953a004c8f16cd9d8fdd5e620b956834") + return common.HexToHash("0x31a4e1cb25733cdb9679561cd59cdc238d70a7d486f8bfc1f13242efd60fc29d") } func (ReportCodecExecuteReportDecoded) Topic() common.Hash { diff --git a/core/gethwrappers/ccip/generated/rmn_remote/rmn_remote.go b/core/gethwrappers/ccip/generated/rmn_remote/rmn_remote.go index d75c7aea88d..c8fbeb1cecc 100644 --- a/core/gethwrappers/ccip/generated/rmn_remote/rmn_remote.go +++ b/core/gethwrappers/ccip/generated/rmn_remote/rmn_remote.go @@ -55,8 +55,8 @@ type RMNRemoteSigner struct { } var RMNRemoteMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"localChainSelector\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"AlreadyCursed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ConfigNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateOnchainPublicKey\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSignature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSignerOrder\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"NotCursed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfOrderSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ThresholdNotMet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnexpectedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroValueNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"onchainPublicKey\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"nodeIndex\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Signer[]\",\"name\":\"signers\",\"type\":\"tuple[]\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structRMNRemote.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"Cursed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"Uncursed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"curse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"curse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCursedSubjects\",\"outputs\":[{\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLocalChainSelector\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"localChainSelector\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReportDigestHeader\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"digestHeader\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVersionedConfig\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"onchainPublicKey\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"nodeIndex\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Signer[]\",\"name\":\"signers\",\"type\":\"tuple[]\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"isCursed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCursed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"onchainPublicKey\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"nodeIndex\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Signer[]\",\"name\":\"signers\",\"type\":\"tuple[]\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Config\",\"name\":\"newConfig\",\"type\":\"tuple\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"uncurse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"uncurse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"offrampAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"structIRMNRemote.Signature[]\",\"name\":\"signatures\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"rawVs\",\"type\":\"uint256\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a06040523480156200001157600080fd5b50604051620021e9380380620021e98339810160408190526200003491620001a9565b33806000816200008b5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000be57620000be81620000fe565b505050806001600160401b0316600003620000ec5760405163273e150360e21b815260040160405180910390fd5b6001600160401b0316608052620001db565b336001600160a01b03821603620001585760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000082565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215620001bc57600080fd5b81516001600160401b0381168114620001d457600080fd5b9392505050565b608051611feb620001fe6000396000818161027a0152610af60152611feb6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806379ba509711610097578063d881e09211610066578063d881e09214610257578063eaa83ddd1461026c578063f2fde38b146102a4578063f8bb876e146102b757600080fd5b806379ba5097146102015780638d8741cb146102095780638da5cb5b1461021c5780639a19b3291461024457600080fd5b8063397796f7116100d3578063397796f7146101a557806362eed415146101ad5780636509a954146101c05780636d2d3993146101ee57600080fd5b8063181f5a7714610105578063198f0f77146101575780631add205f1461016c5780632cbc26bb14610182575b600080fd5b6101416040518060400160405280601381526020017f524d4e52656d6f746520312e362e302d6465760000000000000000000000000081525081565b60405161014e91906113eb565b60405180910390f35b61016a6101653660046113fe565b6102ca565b005b61017461068c565b60405161014e929190611439565b610195610190366004611517565b610784565b604051901515815260200161014e565b6101956107e1565b61016a6101bb366004611517565b61085b565b6040517f9651943783dbf81935a60e98f218a9d9b5b28823fb2228bbd91320d632facf53815260200161014e565b61016a6101fc366004611517565b6108cf565b61016a61093f565b61016a6102173660046115a0565b610a41565b60005460405173ffffffffffffffffffffffffffffffffffffffff909116815260200161014e565b61016a610252366004611727565b610daa565b61025f610ea7565b60405161014e91906117c4565b60405167ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161014e565b61016a6102b236600461182a565b610eb3565b61016a6102c5366004611727565b610ec7565b6102d2610fb9565b60015b6102e26020830183611847565b90508110156103b2576102f86020830183611847565b82818110610308576103086118af565b905060400201602001602081019061032091906118ff565b67ffffffffffffffff166103376020840184611847565b61034260018561194b565b818110610351576103516118af565b905060400201602001602081019061036991906118ff565b67ffffffffffffffff16106103aa576040517f4485151700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001016102d5565b506103c360608201604083016118ff565b6103ce90600261195e565b6103d990600161198a565b67ffffffffffffffff166103f06020830183611847565b9050101561042a576040517f014c502000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003545b80156104bc5760086000600361044560018561194b565b81548110610455576104556118af565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556104b5816119ab565b905061042e565b5060005b6104cd6020830183611847565b905081101561060257600860006104e76020850185611847565b848181106104f7576104f76118af565b61050d926020604090920201908101915061182a565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205460ff161561056e576040517f28cae27d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600860006105816020860186611847565b85818110610591576105916118af565b6105a7926020604090920201908101915061182a565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790556001016104c0565b508060026106108282611a99565b50506005805460009190829061062b9063ffffffff16611bd4565b91906101000a81548163ffffffff021916908363ffffffff160217905590508063ffffffff167f7f22bf988149dbe8de8fb879c6b97a4e56e68b2bd57421ce1a4e79d4ef6b496c836040516106809190611bf7565b60405180910390a25050565b6040805160608082018352600080835260208301919091529181018290526005546040805160608101825260028054825260038054845160208281028201810190965281815263ffffffff9096169592948593818601939092909160009084015b8282101561075b576000848152602090819020604080518082019091529084015473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900467ffffffffffffffff16818301528252600190920191016106ed565b505050908252506002919091015467ffffffffffffffff16602090910152919491935090915050565b6000610790600661103c565b60000361079f57506000919050565b6107aa600683611046565b806107db57506107db60067f0100000000000000000000000000000100000000000000000000000000000000611046565b92915050565b60006107ed600661103c565b6000036107fa5750600090565b61082560067f0100000000000000000000000000000000000000000000000000000000000000611046565b80610856575061085660067f0100000000000000000000000000000100000000000000000000000000000000611046565b905090565b604080516001808252818301909252600091602080830190803683370190505090508181600081518110610891576108916118af565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000909216602092830291909101909101526108cb81610ec7565b5050565b604080516001808252818301909252600091602080830190803683370190505090508181600081518110610905576109056118af565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000909216602092830291909101909101526108cb81610daa565b60015473ffffffffffffffffffffffffffffffffffffffff1633146109c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b60055463ffffffff16600003610a83576040517face124bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600454610a9b9067ffffffffffffffff16600161198a565b67ffffffffffffffff16821015610ade576040517f59fa4a9300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825246815267ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166020820152309181019190915273ffffffffffffffffffffffffffffffffffffffff8716606082015260025460808201526000907f9651943783dbf81935a60e98f218a9d9b5b28823fb2228bbd91320d632facf539060a08101610b7a888a611d01565b9052604051610b8d929190602001611e61565b60405160208183030381529060405280519060200120905060008060005b85811015610d9e57600184610bc582841b8816601b611f96565b898985818110610bd757610bd76118af565b905060400201600001358a8a86818110610bf357610bf36118af565b9050604002016020013560405160008152602001604052604051610c33949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015610c55573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015192505073ffffffffffffffffffffffffffffffffffffffff8216610ccd576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1610610d32576040517fbbe15e7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526008602052604090205460ff16610d91576040517faaaa914100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9091508190600101610bab565b50505050505050505050565b610db2610fb9565b60005b8151811015610e6c57610deb828281518110610dd357610dd36118af565b6020026020010151600661108490919063ffffffff16565b610e6457818181518110610e0157610e016118af565b60200260200101516040517f73281fa10000000000000000000000000000000000000000000000000000000081526004016109bc91907fffffffffffffffffffffffffffffffff0000000000000000000000000000000091909116815260200190565b600101610db5565b507f0676e709c9cc74fa0519fd78f7c33be0f1b2b0bae0507c724aef7229379c6ba181604051610e9c91906117c4565b60405180910390a150565b606061085660066110b2565b610ebb610fb9565b610ec4816110bf565b50565b610ecf610fb9565b60005b8151811015610f8957610f08828281518110610ef057610ef06118af565b602002602001015160066111b490919063ffffffff16565b610f8157818181518110610f1e57610f1e6118af565b60200260200101516040517f19d5c79b0000000000000000000000000000000000000000000000000000000081526004016109bc91907fffffffffffffffffffffffffffffffff0000000000000000000000000000000091909116815260200190565b600101610ed2565b507f1716e663a90a76d3b6c7e5f680673d1b051454c19c627e184c8daf28f3104f7481604051610e9c91906117c4565b60005473ffffffffffffffffffffffffffffffffffffffff16331461103a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016109bc565b565b60006107db825490565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008116600090815260018301602052604081205415155b9392505050565b600061107d837fffffffffffffffffffffffffffffffff0000000000000000000000000000000084166111e2565b6060600061107d836112dc565b3373ffffffffffffffffffffffffffffffffffffffff82160361113e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016109bc565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600061107d837fffffffffffffffffffffffffffffffff000000000000000000000000000000008416611338565b600081815260018301602052604081205480156112cb57600061120660018361194b565b855490915060009061121a9060019061194b565b905080821461127f57600086600001828154811061123a5761123a6118af565b906000526020600020015490508087600001848154811061125d5761125d6118af565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061129057611290611faf565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107db565b60009150506107db565b5092915050565b60608160000180548060200260200160405190810160405280929190818152602001828054801561132c57602002820191906000526020600020905b815481526020019060010190808311611318575b50505050509050919050565b600081815260018301602052604081205461137f575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107db565b5060006107db565b6000815180845260005b818110156113ad57602081850181015186830182015201611391565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061107d6020830184611387565b60006020828403121561141057600080fd5b813567ffffffffffffffff81111561142757600080fd5b82016060818503121561107d57600080fd5b63ffffffff831681526040602080830182905283518383015283810151606080850152805160a085018190526000939291820190849060c08701905b808310156114be578351805173ffffffffffffffffffffffffffffffffffffffff16835285015167ffffffffffffffff1685830152928401926001929092019190850190611475565b50604088015167ffffffffffffffff81166080890152945098975050505050505050565b80357fffffffffffffffffffffffffffffffff000000000000000000000000000000008116811461151257600080fd5b919050565b60006020828403121561152957600080fd5b61107d826114e2565b73ffffffffffffffffffffffffffffffffffffffff81168114610ec457600080fd5b60008083601f84011261156657600080fd5b50813567ffffffffffffffff81111561157e57600080fd5b6020830191508360208260061b850101111561159957600080fd5b9250929050565b600080600080600080608087890312156115b957600080fd5b86356115c481611532565b9550602087013567ffffffffffffffff808211156115e157600080fd5b818901915089601f8301126115f557600080fd5b81358181111561160457600080fd5b8a60208260051b850101111561161957600080fd5b60208301975080965050604089013591508082111561163757600080fd5b5061164489828a01611554565b979a9699509497949695606090950135949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156116ae576116ae61165c565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156116fb576116fb61165c565b604052919050565b600067ffffffffffffffff82111561171d5761171d61165c565b5060051b60200190565b6000602080838503121561173a57600080fd5b823567ffffffffffffffff81111561175157600080fd5b8301601f8101851361176257600080fd5b803561177561177082611703565b6116b4565b81815260059190911b8201830190838101908783111561179457600080fd5b928401925b828410156117b9576117aa846114e2565b82529284019290840190611799565b979650505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561181e5783517fffffffffffffffffffffffffffffffff0000000000000000000000000000000016835292840192918401916001016117e0565b50909695505050505050565b60006020828403121561183c57600080fd5b813561107d81611532565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261187c57600080fd5b83018035915067ffffffffffffffff82111561189757600080fd5b6020019150600681901b360382131561159957600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b67ffffffffffffffff81168114610ec457600080fd5b8035611512816118de565b60006020828403121561191157600080fd5b813561107d816118de565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156107db576107db61191c565b67ffffffffffffffff8181168382160280821691908281146119825761198261191c565b505092915050565b67ffffffffffffffff8181168382160190808211156112d5576112d561191c565b6000816119ba576119ba61191c565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b600081356107db816118de565b81356119f881611532565b73ffffffffffffffffffffffffffffffffffffffff811690508154817fffffffffffffffffffffffff000000000000000000000000000000000000000082161783556020840135611a48816118de565b7bffffffffffffffff00000000000000000000000000000000000000008160a01b16837fffffffff000000000000000000000000000000000000000000000000000000008416171784555050505050565b81358155600180820160208401357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1853603018112611ad757600080fd5b8401803567ffffffffffffffff811115611af057600080fd5b6020820191508060061b3603821315611b0857600080fd5b68010000000000000000811115611b2157611b2161165c565b825481845580821015611b56576000848152602081208381019083015b80821015611b525782825590870190611b3e565b5050505b50600092835260208320925b81811015611b8657611b7483856119ed565b92840192604092909201918401611b62565b50505050506108cb611b9a604084016119e0565b6002830167ffffffffffffffff82167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008254161781555050565b600063ffffffff808316818103611bed57611bed61191c565b6001019392505050565b6000602080835260808301843582850152818501357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1863603018112611c3c57600080fd5b8501828101903567ffffffffffffffff80821115611c5957600080fd5b8160061b3603831315611c6b57600080fd5b6040606060408901528483865260a089019050849550600094505b83851015611cd6578535611c9981611532565b73ffffffffffffffffffffffffffffffffffffffff16815285870135611cbe816118de565b83168188015294810194600194909401938101611c86565b611ce260408b016118f4565b67ffffffffffffffff811660608b015296509998505050505050505050565b6000611d0f61177084611703565b80848252602080830192508560051b850136811115611d2d57600080fd5b855b81811015611e5557803567ffffffffffffffff80821115611d505760008081fd5b818901915060a08236031215611d665760008081fd5b611d6e61168b565b8235611d79816118de565b81528286013582811115611d8d5760008081fd5b8301601f3681830112611da05760008081fd5b813584811115611db257611db261165c565b611de1897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084840116016116b4565b94508085523689828501011115611dfa57600091508182fd5b808984018a8701376000898287010152505050818682015260409150611e218284016118f4565b8282015260609150611e348284016118f4565b91810191909152608091820135918101919091528552938201938201611d2f565b50919695505050505050565b60006040848352602060408185015261010084018551604086015281860151606067ffffffffffffffff808316606089015260408901519250608073ffffffffffffffffffffffffffffffffffffffff80851660808b015260608b0151945060a081861660a08c015260808c015160c08c015260a08c0151955060c060e08c015286915085518088526101209750878c019250878160051b8d01019750888701965060005b81811015611f83577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee08d8a030184528751868151168a528a810151848c8c0152611f52858c0182611387565b828e015189168c8f01528983015189168a8d0152918701519a87019a909a5298509689019692890192600101611f06565b50969d9c50505050505050505050505050565b60ff81811683821601908111156107db576107db61191c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"localChainSelector\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"AlreadyCursed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ConfigNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateOnchainPublicKey\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSignature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSignerOrder\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"NotCursed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfOrderSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ThresholdNotMet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnexpectedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroValueNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"onchainPublicKey\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"nodeIndex\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Signer[]\",\"name\":\"signers\",\"type\":\"tuple[]\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structRMNRemote.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"Cursed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"Uncursed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"curse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"curse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCursedSubjects\",\"outputs\":[{\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLocalChainSelector\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"localChainSelector\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReportDigestHeader\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"digestHeader\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVersionedConfig\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"onchainPublicKey\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"nodeIndex\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Signer[]\",\"name\":\"signers\",\"type\":\"tuple[]\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"isCursed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCursed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"onchainPublicKey\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"nodeIndex\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Signer[]\",\"name\":\"signers\",\"type\":\"tuple[]\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Config\",\"name\":\"newConfig\",\"type\":\"tuple\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"uncurse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"uncurse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"offrampAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"structIRMNRemote.Signature[]\",\"name\":\"signatures\",\"type\":\"tuple[]\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60a06040523480156200001157600080fd5b50604051620021ba380380620021ba8339810160408190526200003491620001a9565b33806000816200008b5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000be57620000be81620000fe565b505050806001600160401b0316600003620000ec5760405163273e150360e21b815260040160405180910390fd5b6001600160401b0316608052620001db565b336001600160a01b03821603620001585760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000082565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215620001bc57600080fd5b81516001600160401b0381168114620001d457600080fd5b9392505050565b608051611fbc620001fe6000396000818161027a01526109f40152611fbc6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806370a9089e11610097578063d881e09211610066578063d881e09214610257578063eaa83ddd1461026c578063f2fde38b146102a4578063f8bb876e146102b757600080fd5b806370a9089e1461020157806379ba5097146102145780638da5cb5b1461021c5780639a19b3291461024457600080fd5b8063397796f7116100d3578063397796f7146101a557806362eed415146101ad5780636509a954146101c05780636d2d3993146101ee57600080fd5b8063181f5a7714610105578063198f0f77146101575780631add205f1461016c5780632cbc26bb14610182575b600080fd5b6101416040518060400160405280601381526020017f524d4e52656d6f746520312e362e302d6465760000000000000000000000000081525081565b60405161014e91906113dd565b60405180910390f35b61016a6101653660046113f0565b6102ca565b005b61017461068c565b60405161014e92919061142b565b610195610190366004611509565b610784565b604051901515815260200161014e565b6101956107e1565b61016a6101bb366004611509565b61085b565b6040517f9651943783dbf81935a60e98f218a9d9b5b28823fb2228bbd91320d632facf53815260200161014e565b61016a6101fc366004611509565b6108cf565b61016a61020f366004611592565b61093f565b61016a610c9a565b60005460405173ffffffffffffffffffffffffffffffffffffffff909116815260200161014e565b61016a610252366004611711565b610d9c565b61025f610e99565b60405161014e91906117ae565b60405167ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161014e565b61016a6102b2366004611814565b610ea5565b61016a6102c5366004611711565b610eb9565b6102d2610fab565b60015b6102e26020830183611831565b90508110156103b2576102f86020830183611831565b8281811061030857610308611899565b905060400201602001602081019061032091906118e9565b67ffffffffffffffff166103376020840184611831565b610342600185611935565b81811061035157610351611899565b905060400201602001602081019061036991906118e9565b67ffffffffffffffff16106103aa576040517f4485151700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001016102d5565b506103c360608201604083016118e9565b6103ce906002611948565b6103d9906001611974565b67ffffffffffffffff166103f06020830183611831565b9050101561042a576040517f014c502000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003545b80156104bc57600860006003610445600185611935565b8154811061045557610455611899565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556104b581611995565b905061042e565b5060005b6104cd6020830183611831565b905081101561060257600860006104e76020850185611831565b848181106104f7576104f7611899565b61050d9260206040909202019081019150611814565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205460ff161561056e576040517f28cae27d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600860006105816020860186611831565b8581811061059157610591611899565b6105a79260206040909202019081019150611814565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790556001016104c0565b508060026106108282611a83565b50506005805460009190829061062b9063ffffffff16611bbe565b91906101000a81548163ffffffff021916908363ffffffff160217905590508063ffffffff167f7f22bf988149dbe8de8fb879c6b97a4e56e68b2bd57421ce1a4e79d4ef6b496c836040516106809190611be1565b60405180910390a25050565b6040805160608082018352600080835260208301919091529181018290526005546040805160608101825260028054825260038054845160208281028201810190965281815263ffffffff9096169592948593818601939092909160009084015b8282101561075b576000848152602090819020604080518082019091529084015473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900467ffffffffffffffff16818301528252600190920191016106ed565b505050908252506002919091015467ffffffffffffffff16602090910152919491935090915050565b6000610790600661102e565b60000361079f57506000919050565b6107aa600683611038565b806107db57506107db60067f0100000000000000000000000000000100000000000000000000000000000000611038565b92915050565b60006107ed600661102e565b6000036107fa5750600090565b61082560067f0100000000000000000000000000000000000000000000000000000000000000611038565b80610856575061085660067f0100000000000000000000000000000100000000000000000000000000000000611038565b905090565b60408051600180825281830190925260009160208083019080368337019050509050818160008151811061089157610891611899565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000909216602092830291909101909101526108cb81610eb9565b5050565b60408051600180825281830190925260009160208083019080368337019050509050818160008151811061090557610905611899565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000909216602092830291909101909101526108cb81610d9c565b60055463ffffffff16600003610981576040517face124bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004546109999067ffffffffffffffff166001611974565b67ffffffffffffffff168110156109dc576040517f59fa4a9300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825246815267ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166020820152309181019190915273ffffffffffffffffffffffffffffffffffffffff8616606082015260025460808201526000907f9651943783dbf81935a60e98f218a9d9b5b28823fb2228bbd91320d632facf539060a08101610a788789611ceb565b9052604051610a8b929190602001611e4b565b60405160208183030381529060405280519060200120905060008060005b84811015610c8f57600184601b888885818110610ac857610ac8611899565b90506040020160000135898986818110610ae457610ae4611899565b9050604002016020013560405160008152602001604052604051610b24949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015610b46573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015192505073ffffffffffffffffffffffffffffffffffffffff8216610bbe576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1610610c23576040517fbbe15e7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526008602052604090205460ff16610c82576040517faaaa914100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9091508190600101610aa9565b505050505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610d20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610da4610fab565b60005b8151811015610e5e57610ddd828281518110610dc557610dc5611899565b6020026020010151600661107690919063ffffffff16565b610e5657818181518110610df357610df3611899565b60200260200101516040517f73281fa1000000000000000000000000000000000000000000000000000000008152600401610d1791907fffffffffffffffffffffffffffffffff0000000000000000000000000000000091909116815260200190565b600101610da7565b507f0676e709c9cc74fa0519fd78f7c33be0f1b2b0bae0507c724aef7229379c6ba181604051610e8e91906117ae565b60405180910390a150565b606061085660066110a4565b610ead610fab565b610eb6816110b1565b50565b610ec1610fab565b60005b8151811015610f7b57610efa828281518110610ee257610ee2611899565b602002602001015160066111a690919063ffffffff16565b610f7357818181518110610f1057610f10611899565b60200260200101516040517f19d5c79b000000000000000000000000000000000000000000000000000000008152600401610d1791907fffffffffffffffffffffffffffffffff0000000000000000000000000000000091909116815260200190565b600101610ec4565b507f1716e663a90a76d3b6c7e5f680673d1b051454c19c627e184c8daf28f3104f7481604051610e8e91906117ae565b60005473ffffffffffffffffffffffffffffffffffffffff16331461102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610d17565b565b60006107db825490565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008116600090815260018301602052604081205415155b9392505050565b600061106f837fffffffffffffffffffffffffffffffff0000000000000000000000000000000084166111d4565b6060600061106f836112ce565b3373ffffffffffffffffffffffffffffffffffffffff821603611130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610d17565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600061106f837fffffffffffffffffffffffffffffffff00000000000000000000000000000000841661132a565b600081815260018301602052604081205480156112bd5760006111f8600183611935565b855490915060009061120c90600190611935565b905080821461127157600086600001828154811061122c5761122c611899565b906000526020600020015490508087600001848154811061124f5761124f611899565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061128257611282611f80565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107db565b60009150506107db565b5092915050565b60608160000180548060200260200160405190810160405280929190818152602001828054801561131e57602002820191906000526020600020905b81548152602001906001019080831161130a575b50505050509050919050565b6000818152600183016020526040812054611371575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107db565b5060006107db565b6000815180845260005b8181101561139f57602081850181015186830182015201611383565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061106f6020830184611379565b60006020828403121561140257600080fd5b813567ffffffffffffffff81111561141957600080fd5b82016060818503121561106f57600080fd5b63ffffffff831681526040602080830182905283518383015283810151606080850152805160a085018190526000939291820190849060c08701905b808310156114b0578351805173ffffffffffffffffffffffffffffffffffffffff16835285015167ffffffffffffffff1685830152928401926001929092019190850190611467565b50604088015167ffffffffffffffff81166080890152945098975050505050505050565b80357fffffffffffffffffffffffffffffffff000000000000000000000000000000008116811461150457600080fd5b919050565b60006020828403121561151b57600080fd5b61106f826114d4565b73ffffffffffffffffffffffffffffffffffffffff81168114610eb657600080fd5b60008083601f84011261155857600080fd5b50813567ffffffffffffffff81111561157057600080fd5b6020830191508360208260061b850101111561158b57600080fd5b9250929050565b6000806000806000606086880312156115aa57600080fd5b85356115b581611524565b9450602086013567ffffffffffffffff808211156115d257600080fd5b818801915088601f8301126115e657600080fd5b8135818111156115f557600080fd5b8960208260051b850101111561160a57600080fd5b60208301965080955050604088013591508082111561162857600080fd5b5061163588828901611546565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561169857611698611646565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156116e5576116e5611646565b604052919050565b600067ffffffffffffffff82111561170757611707611646565b5060051b60200190565b6000602080838503121561172457600080fd5b823567ffffffffffffffff81111561173b57600080fd5b8301601f8101851361174c57600080fd5b803561175f61175a826116ed565b61169e565b81815260059190911b8201830190838101908783111561177e57600080fd5b928401925b828410156117a357611794846114d4565b82529284019290840190611783565b979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156118085783517fffffffffffffffffffffffffffffffff0000000000000000000000000000000016835292840192918401916001016117ca565b50909695505050505050565b60006020828403121561182657600080fd5b813561106f81611524565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261186657600080fd5b83018035915067ffffffffffffffff82111561188157600080fd5b6020019150600681901b360382131561158b57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b67ffffffffffffffff81168114610eb657600080fd5b8035611504816118c8565b6000602082840312156118fb57600080fd5b813561106f816118c8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156107db576107db611906565b67ffffffffffffffff81811683821602808216919082811461196c5761196c611906565b505092915050565b67ffffffffffffffff8181168382160190808211156112c7576112c7611906565b6000816119a4576119a4611906565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b600081356107db816118c8565b81356119e281611524565b73ffffffffffffffffffffffffffffffffffffffff811690508154817fffffffffffffffffffffffff000000000000000000000000000000000000000082161783556020840135611a32816118c8565b7bffffffffffffffff00000000000000000000000000000000000000008160a01b16837fffffffff000000000000000000000000000000000000000000000000000000008416171784555050505050565b81358155600180820160208401357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1853603018112611ac157600080fd5b8401803567ffffffffffffffff811115611ada57600080fd5b6020820191508060061b3603821315611af257600080fd5b68010000000000000000811115611b0b57611b0b611646565b825481845580821015611b40576000848152602081208381019083015b80821015611b3c5782825590870190611b28565b5050505b50600092835260208320925b81811015611b7057611b5e83856119d7565b92840192604092909201918401611b4c565b50505050506108cb611b84604084016119ca565b6002830167ffffffffffffffff82167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008254161781555050565b600063ffffffff808316818103611bd757611bd7611906565b6001019392505050565b6000602080835260808301843582850152818501357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1863603018112611c2657600080fd5b8501828101903567ffffffffffffffff80821115611c4357600080fd5b8160061b3603831315611c5557600080fd5b6040606060408901528483865260a089019050849550600094505b83851015611cc0578535611c8381611524565b73ffffffffffffffffffffffffffffffffffffffff16815285870135611ca8816118c8565b83168188015294810194600194909401938101611c70565b611ccc60408b016118de565b67ffffffffffffffff811660608b015296509998505050505050505050565b6000611cf961175a846116ed565b80848252602080830192508560051b850136811115611d1757600080fd5b855b81811015611e3f57803567ffffffffffffffff80821115611d3a5760008081fd5b818901915060a08236031215611d505760008081fd5b611d58611675565b8235611d63816118c8565b81528286013582811115611d775760008081fd5b8301601f3681830112611d8a5760008081fd5b813584811115611d9c57611d9c611646565b611dcb897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848401160161169e565b94508085523689828501011115611de457600091508182fd5b808984018a8701376000898287010152505050818682015260409150611e0b8284016118de565b8282015260609150611e1e8284016118de565b91810191909152608091820135918101919091528552938201938201611d19565b50919695505050505050565b60006040848352602060408185015261010084018551604086015281860151606067ffffffffffffffff808316606089015260408901519250608073ffffffffffffffffffffffffffffffffffffffff80851660808b015260608b0151945060a081861660a08c015260808c015160c08c015260a08c0151955060c060e08c015286915085518088526101209750878c019250878160051b8d01019750888701965060005b81811015611f6d577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee08d8a030184528751868151168a528a810151848c8c0152611f3c858c0182611379565b828e015189168c8f01528983015189168a8d0152918701519a87019a909a5298509689019692890192600101611ef0565b50969d9c50505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", } var RMNRemoteABI = RMNRemoteMetaData.ABI @@ -379,9 +379,9 @@ func (_RMNRemote *RMNRemoteCallerSession) TypeAndVersion() (string, error) { return _RMNRemote.Contract.TypeAndVersion(&_RMNRemote.CallOpts) } -func (_RMNRemote *RMNRemoteCaller) Verify(opts *bind.CallOpts, offrampAddress common.Address, merkleRoots []InternalMerkleRoot, signatures []IRMNRemoteSignature, rawVs *big.Int) error { +func (_RMNRemote *RMNRemoteCaller) Verify(opts *bind.CallOpts, offrampAddress common.Address, merkleRoots []InternalMerkleRoot, signatures []IRMNRemoteSignature) error { var out []interface{} - err := _RMNRemote.contract.Call(opts, &out, "verify", offrampAddress, merkleRoots, signatures, rawVs) + err := _RMNRemote.contract.Call(opts, &out, "verify", offrampAddress, merkleRoots, signatures) if err != nil { return err @@ -391,12 +391,12 @@ func (_RMNRemote *RMNRemoteCaller) Verify(opts *bind.CallOpts, offrampAddress co } -func (_RMNRemote *RMNRemoteSession) Verify(offrampAddress common.Address, merkleRoots []InternalMerkleRoot, signatures []IRMNRemoteSignature, rawVs *big.Int) error { - return _RMNRemote.Contract.Verify(&_RMNRemote.CallOpts, offrampAddress, merkleRoots, signatures, rawVs) +func (_RMNRemote *RMNRemoteSession) Verify(offrampAddress common.Address, merkleRoots []InternalMerkleRoot, signatures []IRMNRemoteSignature) error { + return _RMNRemote.Contract.Verify(&_RMNRemote.CallOpts, offrampAddress, merkleRoots, signatures) } -func (_RMNRemote *RMNRemoteCallerSession) Verify(offrampAddress common.Address, merkleRoots []InternalMerkleRoot, signatures []IRMNRemoteSignature, rawVs *big.Int) error { - return _RMNRemote.Contract.Verify(&_RMNRemote.CallOpts, offrampAddress, merkleRoots, signatures, rawVs) +func (_RMNRemote *RMNRemoteCallerSession) Verify(offrampAddress common.Address, merkleRoots []InternalMerkleRoot, signatures []IRMNRemoteSignature) error { + return _RMNRemote.Contract.Verify(&_RMNRemote.CallOpts, offrampAddress, merkleRoots, signatures) } func (_RMNRemote *RMNRemoteTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { @@ -1183,7 +1183,7 @@ type RMNRemoteInterface interface { TypeAndVersion(opts *bind.CallOpts) (string, error) - Verify(opts *bind.CallOpts, offrampAddress common.Address, merkleRoots []InternalMerkleRoot, signatures []IRMNRemoteSignature, rawVs *big.Int) error + Verify(opts *bind.CallOpts, offrampAddress common.Address, merkleRoots []InternalMerkleRoot, signatures []IRMNRemoteSignature) error AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) diff --git a/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt index 43a36ab8ac5..e41c26d5d69 100644 --- a/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt +++ b/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt @@ -2,9 +2,9 @@ GETH_VERSION: 1.13.8 burn_from_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnFromMintTokenPool/BurnFromMintTokenPool.abi ../../../contracts/solc/v0.8.24/BurnFromMintTokenPool/BurnFromMintTokenPool.bin 1e60c28ad796a220a38043b369dec8d9bffe23e1c7d9895760e30672872afd06 burn_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnMintTokenPool/BurnMintTokenPool.abi ../../../contracts/solc/v0.8.24/BurnMintTokenPool/BurnMintTokenPool.bin 3e8e3358f0bb520af069a7d37ea625940a88461a54418b1d5925eabced8c74df burn_with_from_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPool/BurnWithFromMintTokenPool.abi ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPool/BurnWithFromMintTokenPool.bin 734c2a0ea8f1224b5f01ed849410209e74b4e3427e8bfddb8ff5dd8ead5f2d8d -ccip_encoding_utils: ../../../contracts/solc/v0.8.24/ICCIPEncodingUtils/ICCIPEncodingUtils.abi ../../../contracts/solc/v0.8.24/ICCIPEncodingUtils/ICCIPEncodingUtils.bin a074f2ecf2749a1d5afc4cd9bfa48677f09c2be4e076776f87c6feb767432ecb +ccip_encoding_utils: ../../../contracts/solc/v0.8.24/ICCIPEncodingUtils/ICCIPEncodingUtils.abi ../../../contracts/solc/v0.8.24/ICCIPEncodingUtils/ICCIPEncodingUtils.bin 9971fc93c34442a0989570d3dab90a125de31e6e60754ad972807ce6ad4dfba0 ccip_home: ../../../contracts/solc/v0.8.24/CCIPHome/CCIPHome.abi ../../../contracts/solc/v0.8.24/CCIPHome/CCIPHome.bin 76e5647a4574b1f09d9ee22ce1242f7c48d85412069a03e505b8000a7e3c7701 -ccip_reader_tester: ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.abi ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.bin 5db06eb7fad07ec0d1ae5ac8d39f61398687fe3cda8290716ce0cd8fb9dca1ab +ccip_reader_tester: ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.abi ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.bin 893c9930e874fe5235db24e28a22650c37f562da94fac93618566bcd84839fdc ether_sender_receiver: ../../../contracts/solc/v0.8.24/EtherSenderReceiver/EtherSenderReceiver.abi ../../../contracts/solc/v0.8.24/EtherSenderReceiver/EtherSenderReceiver.bin 09510a3f773f108a3c231e8d202835c845ded862d071ec54c4f89c12d868b8de fee_quoter: ../../../contracts/solc/v0.8.24/FeeQuoter/FeeQuoter.abi ../../../contracts/solc/v0.8.24/FeeQuoter/FeeQuoter.bin 9e0491fe2117abe5538b7297ec6a52307bf3c187fce1409721a89631385da9fc lock_release_token_pool: ../../../contracts/solc/v0.8.24/LockReleaseTokenPool/LockReleaseTokenPool.abi ../../../contracts/solc/v0.8.24/LockReleaseTokenPool/LockReleaseTokenPool.bin e6a8ec9e8faccb1da7d90e0f702ed72975964f97dc3222b54cfcca0a0ba3fea2 @@ -16,14 +16,14 @@ mock_v3_aggregator_contract: ../../../contracts/solc/v0.8.24/MockV3Aggregator/Mo multi_aggregate_rate_limiter: ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.abi ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.bin 55d35e20c49a61849247a693a0decf44daa9e7820919a15ee5b8ef46e55637ca multi_ocr3_helper: ../../../contracts/solc/v0.8.24/MultiOCR3Helper/MultiOCR3Helper.abi ../../../contracts/solc/v0.8.24/MultiOCR3Helper/MultiOCR3Helper.bin 04b6b261dd71925670bf4d904aaf7bf08543452009feefb88e07d4c49d12e969 nonce_manager: ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.abi ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.bin eb234dfb57c6dc64f83cfbf9d78a27939a7241fd0de41342d41c919c156a3633 -offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 1dd0c0b9cd5e4d996e9cb1d269f8497962746acfeb4b9a984155a5e8937d06e1 +offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin d7e7b154ab5442b0c046bef3b3b80db0c7d8b6eb0470a76e5b6bb5cfee40269d onramp: ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.abi ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.bin 4749f923c88f2b521a39d3cda2623307fb255eaebde0ace16aeb8d1270662d19 ping_pong_demo: ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin c1c2f8a65c7ffd971899cae7fe62f2da57d09e936151e2b92163c4bebe699d6b registry_module_owner_custom: ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.abi ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.bin 75be86323c227917a9bbc3f799d7ed02f92db546653a36db30ed0ebe64461353 -report_codec: ../../../contracts/solc/v0.8.24/ReportCodec/ReportCodec.abi ../../../contracts/solc/v0.8.24/ReportCodec/ReportCodec.bin 695b4798f1e9d6f1442f7e6d7c499d23464d9237f325effde132913c404607f7 +report_codec: ../../../contracts/solc/v0.8.24/ReportCodec/ReportCodec.abi ../../../contracts/solc/v0.8.24/ReportCodec/ReportCodec.bin 6c943b39f003aa67c3cefa19a8ff99e846236a058e1ceae77569c3a065ffd5c7 rmn_home: ../../../contracts/solc/v0.8.24/RMNHome/RMNHome.abi ../../../contracts/solc/v0.8.24/RMNHome/RMNHome.bin fa6f66001bb8de061f9c4672e83fdf3f57ab751a7de519a459908c96b077ce74 rmn_proxy_contract: ../../../contracts/solc/v0.8.24/ARMProxy/ARMProxy.abi ../../../contracts/solc/v0.8.24/ARMProxy/ARMProxy.bin b048d8e752e3c41113ebb305c1efa06737ad36b4907b93e627fb0a3113023454 -rmn_remote: ../../../contracts/solc/v0.8.24/RMNRemote/RMNRemote.abi ../../../contracts/solc/v0.8.24/RMNRemote/RMNRemote.bin 4979c4de584a0a6be8755f7d563839900be5adbcd70fd97443176f9d941f3570 +rmn_remote: ../../../contracts/solc/v0.8.24/RMNRemote/RMNRemote.abi ../../../contracts/solc/v0.8.24/RMNRemote/RMNRemote.bin 637a7adc456c1d08409a15b617bb9c7a709bf71d2a5f88022fafb4ccd445df83 router: ../../../contracts/solc/v0.8.24/Router/Router.abi ../../../contracts/solc/v0.8.24/Router/Router.bin 2e4f0a7826c8abb49d882bb49fc5ff20a186dbd3137624b9097ffed903ae4888 token_admin_registry: ../../../contracts/solc/v0.8.24/TokenAdminRegistry/TokenAdminRegistry.abi ../../../contracts/solc/v0.8.24/TokenAdminRegistry/TokenAdminRegistry.bin 942be7d1681ac102e0615bee13f76838ebb0b261697cf1270d2bf82c12e57aeb token_pool: ../../../contracts/solc/v0.8.24/TokenPool/TokenPool.abi ../../../contracts/solc/v0.8.24/TokenPool/TokenPool.bin 7c01fd89f5153baa4d7409d14beabb3f861abfbf8880d3c6d06802cc398570f9