-
Notifications
You must be signed in to change notification settings - Fork 26
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Adding skip ack option, wip #204
Conversation
WalkthroughThe pull request introduces modifications across multiple contracts to enhance the handling of acknowledgment packets. The primary change involves updating function signatures to return both an Changes
Possibly related PRs
Suggested labels
Poem
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 10
Outside diff range and nitpick comments (9)
contracts/examples/Pluto.sol (1)
25-30
: LGTM: Well-documented contract purpose.The documentation clearly explains the contract's role as an IBC receiver that doesn't send acknowledgments. It also mentions its use for testing and as an example for developers.
Consider adding a brief explanation of how this contract differs from the
Mars
contract it extends, to provide more context for developers.contracts/examples/Earth.sol (1)
111-114
: LGTM! Consider adding a comment for the newskipAck
parameter.The changes to the
onRecvUniversalPacket
function look good. The addition of theskipAck
boolean to the return type allows for more flexible control over acknowledgment processing in the future, while maintaining backwards compatibility with the current behavior.Consider adding a brief comment explaining the purpose of the
skipAck
parameter, for example:/** * @notice Handles the recv callback of a universal packet. * @param channelId The channel ID. * @param packet The universal packet. * @return ackPacket The acknowledgement packet. * @return skipAck A boolean indicating whether to skip the acknowledgment (false in this implementation). * @dev It's recommended to always validate the authorized channel of any packet or channel using the * onlyAuthorizedChannel modifier. */contracts/examples/Mars.sol (4)
250-250
: Remove unreachable code after revertThe assignment
skipAck = false;
occurs after a revert, so it is unreachable code. Consider removing this line to clean up the function.Apply this diff:
require(false, "on recv packet is reverting"); - ack = AckPacket(false, ""); - skipAck = false; }
286-286
: Remove unreachable code after revertThe line
skipAck = false;
is placed after a revert statement and will never be executed. It can be safely removed.Apply this diff:
revert OnRecvPacketRevert(); - skipAck = false; }
303-303
: Remove unreachable code after revertThe assignment
skipAck = false;
is unreachable due to the precedingrequire(false);
. Consider removing it.Apply this diff:
require(false); - ack = AckPacket(false, ""); - skipAck = false; }
313-313
: Remove unreachable code after assertThe line
skipAck = false;
is unreachable becauseassert(false);
halts execution. Removing this line tidies up the code.Apply this diff:
assert(false); - ack = AckPacket(false, ""); - skipAck = false; }contracts/interfaces/IbcMiddleware.sol (3)
106-106
: Attention: Interface Modification Requires Documentation UpdateThe function
onRecvUniversalPacket
in theIbcUniversalPacketReceiver
interface now returns an additionalbool skipAck
. It's important to update the function's documentation to explain the purpose and usage of theskipAck
parameter. This clarification will assist developers in correctly implementing the interface and understanding how the acknowledgment process is affected.
Line range hint
229-231
: Inconsistent Contract Name in DocumentationThe contract
UCHUser
is documented with the titleIbcMwUser
, which is inconsistent with its actual name. This could lead to confusion for developers and maintainers.Apply the following change to correct the contract name in the documentation:
- * @title IbcMwUser + * @title UCHUser
Line range hint
323-325
: Potential Duplicate or Conflicting ContractsThere are two contracts named
IbcMwUser
defined in the code:
- Lines 229-282: An abstract contract named
UCHUser
with documentation referring toIbcMwUser
.- Lines 323-376: A contract named
IbcMwUser
with similar documentation.This duplication may cause confusion and potential conflicts within the codebase. Verify whether both contracts are necessary and appropriately named. If they serve different purposes, consider renaming one to better reflect its functionality.
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files selected for processing (10)
- contracts/base/GeneralMiddleware.sol (2 hunks)
- contracts/core/Dispatcher.sol (1 hunks)
- contracts/core/UniversalChannelHandler.sol (1 hunks)
- contracts/examples/Earth.sol (1 hunks)
- contracts/examples/Mars.sol (4 hunks)
- contracts/examples/Pluto.sol (1 hunks)
- contracts/interfaces/IbcMiddleware.sol (2 hunks)
- contracts/interfaces/IbcReceiver.sol (1 hunks)
- test/Dispatcher/Dispatcher.t.sol (3 hunks)
- test/mocks/GasUsingMars.sol (1 hunks)
Additional comments not posted (11)
contracts/examples/Pluto.sol (3)
1-23
: LGTM: License and imports are correctly specified.The SPDX license identifier and Apache 2.0 license header are properly included. The import statements are relevant to the contract's functionality, importing necessary components from other contracts and interfaces.
31-32
: LGTM: Contract definition and constructor are correctly implemented.The
Pluto
contract properly extendsMars
and the constructor correctly initializes the parent contract with the providedIbcDispatcher
.
34-50
: Implement packet validation and consider dynamic acknowledgment.The
onRecvPacket
function correctly implements the new signature returning bothAckPacket
andskipAck
. However, there are a few points to consider:
The comment mentions validating the packet's source and destination, but this validation is not implemented. Consider adding this validation for security.
The acknowledgment message is hardcoded. For a more flexible implementation, consider generating the acknowledgment dynamically based on the received packet's content.
The
skipAck
is always set totrue
. Ensure this aligns with the intended behavior for all possible scenarios.Implement the packet validation as mentioned in the comment. Here's a suggested structure:
require( packet.srcPort == expectedSrcPort && packet.srcChannel == expectedSrcChannel && packet.dstPort == expectedDstPort && packet.dstChannel == expectedDstChannel, "Invalid packet source or destination" );Consider making the acknowledgment message dynamic:
string memory reply = string(abi.encodePacked("Received packet with sequence: ", packet.sequence)); return (AckPacket(true, abi.encodePacked('{ "account": "account", "reply": "', reply, '" }')), true);To ensure consistency with other contracts, let's check how
onRecvPacket
is implemented elsewhere:contracts/base/GeneralMiddleware.sol (3)
101-101
: LGTM! Verify impact on dependent code.The addition of the
skipAck
boolean to the return type enhances control over the acknowledgment process. This change aligns with the PR objectives.To ensure consistency across the codebase, run the following script to check for any potential mismatches in function calls or implementations:
#!/bin/bash # Description: Check for potential mismatches in onRecvMWPacket function calls or implementations # Search for onRecvMWPacket function calls or implementations rg --type solidity -e 'onRecvMWPacket.*returns' -e 'onRecvMWPacket.*=.*\(' -A 5
Line range hint
1-224
: Summary: Enhanced acknowledgment control implemented consistently.The changes to both
onRecvMWPacket
andonRecvUniversalPacket
functions, adding askipAck
boolean to their return types, are consistent and align with the PR objectives. These modifications provide more granular control over the acknowledgment process.To ensure these changes are consistently applied and don't introduce any breaking changes, consider the following:
- Review all contracts that inherit from or implement
GeneralMiddleware
to ensure they're updated accordingly.- Check for any custom implementations of
IbcMwPacketReceiver
orIbcUniversalPacketReceiver
interfaces that might need to be updated.- Verify that any code calling these functions is updated to handle the new return value.
Run the following script to identify potential areas that might need attention:
#!/bin/bash # Description: Identify potential areas affected by the changes # Search for contracts inheriting from GeneralMiddleware echo "Contracts inheriting from GeneralMiddleware:" rg --type solidity "contract.*is.*GeneralMiddleware" # Search for implementations of IbcMwPacketReceiver or IbcUniversalPacketReceiver echo "\nImplementations of IbcMwPacketReceiver or IbcUniversalPacketReceiver:" rg --type solidity "contract.*is.*(IbcMwPacketReceiver|IbcUniversalPacketReceiver)" # Search for function calls to onRecvMWPacket or onRecvUniversalPacket echo "\nFunction calls to onRecvMWPacket or onRecvUniversalPacket:" rg --type solidity "(onRecvMWPacket|onRecvUniversalPacket).*\("Ensure that all affected areas are properly updated to maintain consistency with these changes.
183-183
: LGTM! Verify impact on dependent code.The addition of the
skipAck
boolean to the return type ofonRecvUniversalPacket
is consistent with the changes made toonRecvMWPacket
. This modification enhances control over the acknowledgment process for universal packets.To ensure consistency across the codebase, run the following script to check for any potential mismatches in function calls or implementations:
contracts/core/UniversalChannelHandler.sol (1)
139-139
: Implement skipAck logic and update related componentsThe addition of the
skipAck
boolean to the return type aligns with the PR objectives of adding a skip ack option. This change enhances the flexibility of the acknowledgment process in the IBC protocol.However, there are a few points to consider:
The function body hasn't been updated to implement the
skipAck
logic. Please update the implementation to determine and return the appropriateskipAck
value.Ensure that all related interfaces (e.g.,
IbcDispatcher
) and implementations are updated to accommodate this change.Update unit tests and integration tests to cover the new
skipAck
return value and its various scenarios.To verify the impact of this change on the entire IBC packet handling flow, please run the following script:
This script will help identify other areas of the codebase that might be affected by this change and need to be updated accordingly.
Verification successful
Change Verified:
skipAck
Parameter Consistently ImplementedThe addition of the
skipAck
boolean to theonRecvPacket
function return type has been consistently applied across all relevant implementations and interfaces in the codebase. This enhancement aligns with the PR objectives of introducing a skip acknowledgment option without removing or replacing existing code.Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Check for other occurrences of onRecvPacket and related IBC functions # Search for onRecvPacket implementations echo "Searching for onRecvPacket implementations:" rg --type solidity -A 5 'function\s+onRecvPacket' # Search for IbcDispatcher interface echo "\nSearching for IbcDispatcher interface:" rg --type solidity -A 10 'interface\s+IbcDispatcher' # Search for calls to onRecvPacket echo "\nSearching for calls to onRecvPacket:" rg --type solidity 'onRecvPacket\('Length of output: 518
Script:
#!/bin/bash # Description: Check for other occurrences of onRecvPacket and related IBC functions in .sol files # Search for onRecvPacket implementations echo "Searching for onRecvPacket implementations:" rg --glob "*.sol" -A 5 'function\s+onRecvPacket' # Search for IbcDispatcher interface echo "\nSearching for IbcDispatcher interface:" rg --glob "*.sol" -A 10 'interface\s+IbcDispatcher' # Search for calls to onRecvPacket echo "\nSearching for calls to onRecvPacket:" rg --glob "*.sol" 'onRecvPacket\('Length of output: 8297
test/Dispatcher/Dispatcher.t.sol (2)
341-341
: LGTM: Event declaration for testing purposes.The
DummyEvent
declaration looks good. It's appropriately named and structured for its intended use in the test suite.
Line range hint
341-380
: Overall, good test coverage for the new skip acknowledgment feature.The additions to the
DispatcherRecvPacketTestSuite
effectively test the new feature for skipping acknowledgments. TheDummyEvent
andtest_skip_ack
function work together to provide a comprehensive test case. These changes align well with the PR objective of "Adding skip ack option".A few minor improvements have been suggested, but overall, this is a solid addition to the test suite that should help ensure the reliability of the new feature.
contracts/examples/Mars.sol (2)
90-90
: Confirm the value ofskipAck
in the return statementIn the return statement,
skipAck
is hardcoded tofalse
. If the intention is to sometimes returntrue
to skip acknowledgment under certain conditions, please ensure that the logic reflects this. IfskipAck
is alwaysfalse
, consider whether this parameter is necessary.
85-85
: Verify consistency across all overrides ofonRecvPacket
Ensure that all contracts inheriting from
Mars
and overridingonRecvPacket
have updated their function signatures and implementations to handle the newskipAck
return value appropriately.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, aside from a couple of small nits
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 14
Outside diff range and nitpick comments (6)
test/Dispatcher/Dispatcher.t.sol (1)
Pending Implementation of Additional Tests
The current test suite lacks implementations for unordered channels, wrong ports, and invalid proofs. Please add the following tests to enhance coverage and ensure the reliability of the dispatcher:
- Tests for unordered channels
- Tests for wrong ports
- Tests for invalid proofs
Analysis chain
Line range hint
1-416
: Good progress on test coverage, don't forget remaining TODOs.The addition of the
test_skip_ack
function and related helpers has improved the test coverage for the skip acknowledgment feature. This is a positive step towards ensuring the reliability of the codebase.However, there's still a TODO comment at the end of the file:
// TODO: add tests for unordered channel, wrong port, and invalid proof
Let's check if these tests have been implemented elsewhere:
If the search doesn't yield results, consider implementing these additional test cases to further improve the test coverage.
Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Search for tests related to unordered channel, wrong port, and invalid proof rg -i "test.*unordered channel|test.*wrong port|test.*invalid proof" --type solidityLength of output: 119
Script:
#!/bin/bash # Search for tests related to unordered channel, wrong port, and invalid proof in Solidity files rg -i "test.*unordered channel|test.*wrong port|test.*invalid proof" --glob "*.sol"Length of output: 194
src/evm/contracts/factories/Earth__factory.ts (1)
Impact of ABI changes on dependent files
The ABI modification in
Earth__factory.ts
, specifically the addition of theskipAck
return value to theonRecvUniversalPacket
function, affects the following files:
test/VirtualChain.sol
test/Dispatcher/Dispatcher.t.sol
test/Dispatcher/Dispatcher.timeout.t.sol
test/Dispatcher/Dispatcher.ack.sol
test/Dispatcher/Dispatcher.dappHandlerRevert.t.sol
script/Deploy.s.sol
These files import the
Earth
contract and may require updates to handle the newskipAck
return value. Ensure that all interactions with theonRecvUniversalPacket
function accommodate the additional return value and update related test cases accordingly.Analysis chain
Line range hint
1-607
: Consider the impact of ABI changes on existing implementationsThe addition of the
skipAck
return value to theonRecvUniversalPacket
function in the ABI represents a significant change to the contract's interface. This modification may have far-reaching effects:
- Existing client code that calls this function will need to be updated to handle the new return value.
- Any middleware or services that interact with this contract may need to be modified to accommodate the new return structure.
- Test suites will need to be updated to verify the correct handling of the
skipAck
value.To mitigate potential issues:
- Consider versioning the contract interface if backward compatibility is a concern.
- Update all relevant documentation to reflect this change in the function's behavior.
- Conduct a thorough review of all code that interacts with the
Earth
contract to ensure it can handle the new return value structure.Let's check for any import statements of the
Earth
contract to identify potentially affected files:This will help us identify files that may need to be updated to accommodate the new ABI structure.
Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Search for imports of the Earth contract rg --type typescript --type solidity "import.*Earth" -A 2Length of output: 168
Script:
#!/bin/bash # Search for imports of the Earth contract in .ts and .sol files rg 'import.*Earth' --glob '*.ts' --glob '*.sol' -A 2Length of output: 1679
src/evm/contracts/factories/Moon__factory.ts (1)
Line range hint
1-896
: Summary: Skip acknowledgment option added to Moon contractThe changes in this file implement the "skip ack option" mentioned in the PR title. Key points:
- A new
skipAck
boolean property has been added to theonRecvPacket
function's output in the ABI.- The contract's bytecode has been updated to reflect this change.
These modifications allow for more flexible control over the acknowledgment process in the Moon contract. The changes appear to be correctly implemented, but thorough testing is recommended to ensure the new functionality works as intended and doesn't introduce any regressions.
Consider the following architectural implications:
- Ensure that all components interacting with the Moon contract are updated to handle the new
skipAck
option correctly.- Update any documentation or specifications to reflect this new functionality.
- Consider adding logging or monitoring for the usage of the
skipAck
option to track its impact on system behavior.src/evm/contracts/factories/Mars.sol/RevertingStringCloseChannelMars__factory.ts (1)
482-486
: LGTM: ABI updated with newskipAck
propertyThe addition of the
skipAck
boolean property to theonRecvPacket
function's output in the ABI is consistent with the PR objective. This change will allow for more granular control over the acknowledgment process.Ensure that all components interacting with this contract are updated to handle the new
skipAck
property correctly.bindings/go/mars/RevertingStringCloseChannelMars.go (1)
Missing
onRecvPacket
Implementation withskipAck
The Go bindings expect the
onRecvPacket
function to return abool skipAck
, but no such implementation exists in the identified smart contracts:
test/upgradeableProxy/upgrades/UCHV2.sol
contracts/examples/Mars.sol
contracts/core/UniversalChannelHandler.sol
This discrepancy can lead to runtime issues when interacting with the smart contracts.
- Action Required:
- Smart Contracts: Implement the
onRecvPacket
function with thebool skipAck
return value in the relevant contracts.- Go Bindings: If the smart contracts are not intended to include
skipAck
, revert the Go bindings to align with the existing contract implementations.Analysis chain
Line range hint
1-1023
: Verify smart contract implementation forskipAck
handlingWhile the bindings have been correctly updated to include the new
skipAck
return value for theOnRecvPacket
function, it's important to note that these bindings do not include the actual implementation of this function.To ensure full compatibility and correct behavior:
- Verify that the Solidity smart contract correctly implements the
onRecvPacket
function with the newskipAck
return value.- Check any Go code that calls this function to ensure it properly handles the new return value.
To help verify the smart contract implementation, you can run the following command to search for the
onRecvPacket
function definition in Solidity files:This will help confirm that the smart contract has been updated to match these bindings.
Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Search for the onRecvPacket function definition in Solidity files rg --type solidity 'function\s+onRecvPacket.*returns.*bool\s+skipAck' -A 10Length of output: 110
Script:
#!/bin/bash # Search for the onRecvPacket function definition in Solidity (.sol) files rg 'function\s+onRecvPacket.*returns\s*\(.*bool\s+skipAck.*\)' -g "*.sol" -A 10Length of output: 1049
Script:
#!/bin/bash # Search for implementations of the onRecvPacket function in Solidity (.sol) files excluding interfaces rg 'contract\s+\w+\s+is\s+.*IbcReceiver.*\{[^}]*function\s+onRecvPacket.*returns\s*\(.*bool\s+skipAck.*\)' -g "*.sol" -A 20Length of output: 125
Script:
#!/bin/bash # Step 1: Find all contracts that inherit from IbcReceiver contracts=$(rg 'contract\s+\w+\s+is\s+.*IbcReceiver' -g "*.sol" --only-filename) # Check if any contracts were found if [ -z "$contracts" ]; then echo "No contracts found inheriting from IbcReceiver." exit 0 fi # Step 2: Search for onRecvPacket implementation with skipAck in the identified contracts for contract in $contracts; do rg -M 1000 'function\s+onRecvPacket\s*\(.*\)\s*external\s*returns\s*\(.*bool\s+skipAck.*\)' "$contract" -A 10 doneLength of output: 660
Script:
#!/bin/bash # Step 1: Find all contracts that inherit from IbcReceiver contracts=$(rg 'contract\s+\w+\s+is\s+.*IbcReceiver' -g "*.sol" -l) # Check if any contracts were found if [ -z "$contracts" ]; then echo "No contracts found inheriting from IbcReceiver." exit 0 fi # Step 2: Search for onRecvPacket implementation with skipAck in the identified contracts for contract in $contracts; do rg -M 1000 'function\s+onRecvPacket\s*\(.*\)\s*external\s*returns\s*\(.*bool\s+skipAck.*\)' "$contract" -A 10 doneLength of output: 809
src/evm/contracts/factories/Dispatcher__factory.ts (1)
Line range hint
2172-2185
: Add validation for missing library addresses inlinkBytecode()
.Currently, the
linkBytecode
method does not handle cases where the required library addresses are missing from thelinkLibraryAddresses
parameter. This could result in placeholders not being replaced, potentially leading to deployment errors or incorrect bytecode.Consider adding validation to ensure that each required library address is provided, and throw a descriptive error if any are missing.
Apply this diff to implement the validation:
static linkBytecode( linkLibraryAddresses: DispatcherLibraryAddresses ): string { let linkedBytecode = _bytecode; + if (!linkLibraryAddresses["contracts/libs/Ibc.sol:Ibc"]) { + throw new Error("Missing address for contracts/libs/Ibc.sol:Ibc"); + } + if (!linkLibraryAddresses["contracts/libs/IbcUtils.sol:IbcUtils"]) { + throw new Error("Missing address for contracts/libs/IbcUtils.sol:IbcUtils"); + } linkedBytecode = linkedBytecode.replace( new RegExp("__\\$d825222459c46c14afb2efe0967c30e98d\\$__", "g"), linkLibraryAddresses["contracts/libs/Ibc.sol:Ibc"] .replace(/^0x/, "") .toLowerCase() ); linkedBytecode = linkedBytecode.replace( new RegExp("__\\$f61eb90c6f674e787d51c07f105fa231e2\\$__", "g"), linkLibraryAddresses["contracts/libs/IbcUtils.sol:IbcUtils"] .replace(/^0x/, "") .toLowerCase() ); return linkedBytecode; }
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files selected for processing (35)
- bindings/go/earth/Earth.go (2 hunks)
- bindings/go/iuniversalchannelhandler/IUniversalChannelHandler.go (2 hunks)
- bindings/go/mars/Mars.go (2 hunks)
- bindings/go/mars/PanickingMars.go (2 hunks)
- bindings/go/mars/RevertingBytesMars.go (2 hunks)
- bindings/go/mars/RevertingEmptyMars.go (2 hunks)
- bindings/go/mars/RevertingStringCloseChannelMars.go (2 hunks)
- bindings/go/mars/RevertingStringMars.go (2 hunks)
- bindings/go/moon/Moon.go (2 hunks)
- bindings/go/universalchannelhandler/UniversalChannelHandler.go (2 hunks)
- contracts/examples/Earth.sol (1 hunks)
- contracts/examples/Mars.sol (4 hunks)
- package.json (1 hunks)
- src/evm/contracts/Earth.ts (2 hunks)
- src/evm/contracts/IUniversalChannelHandler.ts (2 hunks)
- src/evm/contracts/Mars.sol/Mars.ts (2 hunks)
- src/evm/contracts/Mars.sol/PanickingMars.ts (2 hunks)
- src/evm/contracts/Mars.sol/RevertingBytesMars.ts (2 hunks)
- src/evm/contracts/Mars.sol/RevertingEmptyMars.ts (2 hunks)
- src/evm/contracts/Mars.sol/RevertingStringCloseChannelMars.ts (2 hunks)
- src/evm/contracts/Mars.sol/RevertingStringMars.ts (2 hunks)
- src/evm/contracts/Moon.ts (2 hunks)
- src/evm/contracts/UniversalChannelHandler.ts (2 hunks)
- src/evm/contracts/factories/Dispatcher__factory.ts (1 hunks)
- src/evm/contracts/factories/Earth__factory.ts (2 hunks)
- src/evm/contracts/factories/IUniversalChannelHandler__factory.ts (1 hunks)
- src/evm/contracts/factories/Mars.sol/Mars__factory.ts (2 hunks)
- src/evm/contracts/factories/Mars.sol/PanickingMars__factory.ts (2 hunks)
- src/evm/contracts/factories/Mars.sol/RevertingBytesMars__factory.ts (2 hunks)
- src/evm/contracts/factories/Mars.sol/RevertingEmptyMars__factory.ts (2 hunks)
- src/evm/contracts/factories/Mars.sol/RevertingStringCloseChannelMars__factory.ts (2 hunks)
- src/evm/contracts/factories/Mars.sol/RevertingStringMars__factory.ts (2 hunks)
- src/evm/contracts/factories/Moon__factory.ts (2 hunks)
- src/evm/contracts/factories/UniversalChannelHandler__factory.ts (2 hunks)
- test/Dispatcher/Dispatcher.t.sol (4 hunks)
Files skipped from review as they are similar to previous changes (2)
- contracts/examples/Earth.sol
- contracts/examples/Mars.sol
Additional comments not posted (72)
package.json (1)
3-3
: Confirm the rationale for the major version bump.I notice that the version has been updated from 3.0.6 to 4.0.0, which represents a major version bump. While this aligns with the addition of a new feature (skip ack option) mentioned in the PR title, I have a few points to consider:
- Major version bumps typically indicate breaking changes or significant new features. Can you confirm that the changes in this PR warrant a major version increment?
- The PR is marked as "wip" (work in progress). Is it appropriate to bump the major version at this stage, or should this be done when the feature is complete and ready for release?
- If this is intentional, please ensure that all breaking changes are documented and that the changelog is updated accordingly.
To help verify the extent of changes, let's check for modifications in other files:
This will help assess whether the changes are extensive enough to justify a major version bump.
src/evm/contracts/IUniversalChannelHandler.ts (3)
329-334
: LGTM: Enhanced return type foronRecvPacket
The modification to the
onRecvPacket
method's return type is well-structured and adds valuable functionality:
- It now returns a tuple containing an
AckPacketStructOutput
and a boolean.- The tuple includes named properties
ackPacket
andskipAck
, improving clarity.This change suggests the introduction of a feature to optionally skip acknowledgments, which could provide more flexibility in packet handling.
458-463
: LGTM: Consistent update ingetFunction
foronRecvPacket
The
getFunction
method foronRecvPacket
has been correctly updated to reflect the new return type:
- The return type matches the earlier modification in the file.
- This change maintains consistency and type safety throughout the interface.
This update ensures that developers retrieving the
onRecvPacket
function will have accurate type information, reducing the risk of runtime errors.
329-334
: Summary: Introduction of skip acknowledgment optionThe changes to
IUniversalChannelHandler.ts
introduce a new feature for optional acknowledgment skipping:
- The
onRecvPacket
method now returns a tuple with anAckPacketStructOutput
and askipAck
boolean.- This change is consistently applied in both the method declaration and the
getFunction
retrieval.Implications:
- Increased flexibility in packet handling, allowing for scenarios where acknowledgments can be skipped.
- Improved type safety and code clarity through structured return types and named properties.
These modifications enhance the interface's capabilities while maintaining a clear and type-safe contract for implementations.
Also applies to: 458-463
src/evm/contracts/Mars.sol/RevertingStringMars.ts (2)
407-412
: Approve: Enhanced packet acknowledgment controlThe modification to the
onRecvPacket
method signature, returning a tuple of[AckPacketStructOutput, boolean]
, introduces more granular control over packet acknowledgment. This change aligns with the PR objective of adding a "skip ack option".The boolean value, likely representing
skipAck
, allows the contract to decide whether to skip the acknowledgment process for a received packet. This can potentially optimize gas usage and provide more flexibility in handling different packet scenarios.Also applies to: 598-603
407-412
: Verify: Consistency ofonRecvPacket
signature changeThe modification to the
onRecvPacket
method signature has been consistently applied in both the interface definition and thegetFunction
method. This is good for maintaining the integrity of the interface.However, it's crucial to ensure that this change is reflected in:
- The actual contract implementation
- Any other files that might be using or implementing this interface
To verify the consistency of this change across the codebase, please run the following script:
This script will help identify any inconsistencies or places where the change might need to be applied.
Also applies to: 598-603
src/evm/contracts/Mars.sol/RevertingBytesMars.ts (3)
407-412
: LGTM: NewskipAck
option added toonRecvPacket
The modification to the
onRecvPacket
method's return type introduces a newskipAck
boolean, which aligns with the PR objective of adding a "skip ack option". This change allows for more granular control over the acknowledgment process.The updated return type is well-structured and maintains type safety:
[ [AckPacketStructOutput, boolean] & { ack: AckPacketStructOutput; skipAck: boolean; } ]
594-599
: LGTM: Consistent update ingetFunction
foronRecvPacket
The
getFunction
method foronRecvPacket
has been correctly updated to match the new method signature:[ [AckPacketStructOutput, boolean] & { ack: AckPacketStructOutput; skipAck: boolean; } ]This consistency is crucial for maintaining type safety and preventing potential runtime errors. It ensures that the contract interface remains coherent throughout the file.
407-412
: Summary: Successfully implemented "skip ack option"The changes in this file successfully implement the "skip ack option" mentioned in the PR objectives. The modifications are well-structured, type-safe, and consistently applied to both the
onRecvPacket
method declaration and its correspondinggetFunction
entry.Key points:
- Added a
skipAck
boolean to the return type ofonRecvPacket
.- Maintained type safety with a well-defined return structure.
- Ensured consistency between the method declaration and
getFunction
.These changes provide more granular control over the acknowledgment process in the IBC protocol implementation.
Also applies to: 594-599
src/evm/contracts/Moon.ts (3)
407-412
: LGTM: Enhanced packet acknowledgment controlThe modification to the
onRecvPacket
method's return type is well-structured and aligns with the PR's objective of adding a skip acknowledgment option. This change allows for more granular control over the packet acknowledgment process.The new return type, which includes both the
AckPacketStructOutput
and askipAck
boolean, provides a clear mechanism to optionally bypass the acknowledgment step when necessary.
598-603
: LGTM: Consistent interface updateThe changes to the
getFunction
method foronRecvPacket
are consistent with the modifications made to theonRecvPacket
method definition. This consistency is crucial for maintaining a coherent contract interface and ensuring type safety when retrieving theonRecvPacket
function.The updated return type correctly reflects the new structure, including both the
AckPacketStructOutput
and theskipAck
boolean.
407-412
: Summary: Successfully implemented skip acknowledgment optionThe changes in this file successfully implement the skip acknowledgment option for the
onRecvPacket
method. The modifications are consistent across both the method definition and its retrieval throughgetFunction
. This enhancement allows for more flexible packet handling in the IBC protocol implementation.Developers using this interface should be aware of the new
skipAck
boolean and handle it appropriately in their implementations.Also applies to: 598-603
src/evm/contracts/Mars.sol/PanickingMars.ts (3)
407-412
: LGTM: Enhanced packet acknowledgment controlThe modification to the
onRecvPacket
method's return type introduces a more granular control over packet acknowledgment. The new tuple return type, which includes both theAckPacketStructOutput
and askipAck
boolean, allows for conditional skipping of the acknowledgment process. This change aligns well with the PR objective of adding a skip ack option.
598-603
: LGTM: Consistent type updatesThe
getFunction
method foronRecvPacket
has been correctly updated to reflect the new return type. This change maintains type consistency throughout the interface, which is crucial for ensuring type safety when interacting with the contract. Good job on keeping the types synchronized.
Line range hint
1-724
: Verify implementation files for skip ack handlingThe changes to the
PanickingMars
interface successfully introduce the skip ack option. However, it's important to ensure that the corresponding implementation files are updated to handle this new option correctly.Please run the following script to check for potential implementation files that might need updates:
Verification successful
Verify
PanickingMars
implementation incontracts/examples/Mars.sol
for skip ack handlingThe script identified
contracts/examples/Mars.sol
as a potential implementation file forPanickingMars
. Please run the following script to verify whetherPanickingMars
is implemented in this file and if the skip ack option is handled correctly:
Verification Successful:
PanickingMars
correctly implements skip ack handlingThe
PanickingMars
implementation incontracts/examples/Mars.sol
includes handling for theskipAck
option as required. No further implementation files require updates.Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Find potential implementation files for PanickingMars # Search for Solidity files that might implement PanickingMars echo "Potential Solidity implementation files:" fd -e sol | xargs grep -l "contract.*PanickingMars" # Search for TypeScript files that might use PanickingMars echo "Potential TypeScript files using PanickingMars:" fd -e ts | xargs grep -l "PanickingMars"Length of output: 772
Script:
#!/bin/bash # Description: Check implementation of PanickingMars for skip ack handling in contracts/examples/Mars.sol # Path to the implementation file IMPLEMENTATION_FILE="contracts/examples/Mars.sol" # Verify if PanickingMars is implemented in the file if grep -q "contract.*PanickingMars" "$IMPLEMENTATION_FILE"; then echo "PanickingMars implementation found in $IMPLEMENTATION_FILE." # Check for skip ack handling if grep -q "skipAck" "$IMPLEMENTATION_FILE"; then echo "Skip ack handling is implemented." else echo "Skip ack handling is NOT implemented." fi else echo "No implementation of PanickingMars found in $IMPLEMENTATION_FILE." fiLength of output: 379
src/evm/contracts/Mars.sol/RevertingStringCloseChannelMars.ts (2)
407-412
: LGTM: New return type enhances acknowledgment controlThe modification to the
onRecvPacket
method's return type introduces askipAck
boolean, which aligns with the PR's objective of adding a skip acknowledgment option. This change provides more granular control over the packet acknowledgment process, potentially allowing for optimizations or special handling in certain scenarios.
598-603
: LGTM: Consistent update in getFunction methodThe changes to the
getFunction
method for "onRecvPacket" mirror those made to theonRecvPacket
method definition. This consistency ensures that the new return type, including theskipAck
boolean, is correctly reflected when retrieving the function, maintaining type safety and accurate representation of the new functionality throughout the interface.test/Dispatcher/Dispatcher.t.sol (2)
342-343
: LGTM: New event for testing purposes.The
DummyEvent
is well-named and has clear parameters, making it suitable for its testing purpose in thetest_skip_ack
function.
411-416
: LGTM: Well-structured helper function for event testing.The
batch_expected_events
function is a well-designed helper for testing event order. Its purpose is clearly explained in the comment, and its implementation is straightforward and effective.src/evm/contracts/UniversalChannelHandler.ts (1)
495-500
: LGTM! Improved return type foronRecvPacket
The changes to the
onRecvPacket
method's return type are well-implemented and align with the PR objective of adding a skip acknowledgment option. The new return type, which includes both anAckPacketStructOutput
and a booleanskipAck
, allows for more granular control over acknowledgment handling. The use of named properties in the return type enhances readability and type safety.These changes have been consistently applied in both the interface definition and the
getFunction
method, ensuring coherence throughout the contract interface.Also applies to: 649-654
src/evm/contracts/factories/Earth__factory.ts (2)
Line range hint
1-607
: Summary and RecommendationsThe changes to the
Earth__factory.ts
file, particularly the addition of theskipAck
property to the ABI, are consistent with the PR objective of adding a skip acknowledgment option. However, this change has potential far-reaching implications:
- The contract's interface has been modified, which may affect existing implementations and integrations.
- The bytecode has been updated, indicating changes in the contract's compiled form.
Recommendations:
- Thoroughly test the new
skipAck
functionality to ensure it behaves as expected.- Update all relevant documentation to reflect the changes in the contract's interface.
- Review and update any code that interacts with the
Earth
contract to handle the new return value structure.- Consider implementing a version control mechanism for the contract if backward compatibility is a concern.
- Conduct a comprehensive impact analysis across the entire codebase to identify and address any potential issues arising from this change.
To assist with the impact analysis, let's search for files that might be affected by this change:
This will help identify files that reference the
Earth
contract and may need to be reviewed or updated.
298-302
: NewskipAck
property added to ABIThe
onRecvUniversalPacket
function in the ABI has been updated to include a newskipAck
boolean return value. This change aligns with the PR objective of adding a skip acknowledgment option.However, there are a few points to consider:
- The
skipAck
property is added as a return value, which might affect existing implementations that expect only theackPacket
to be returned.- The change may require updates to other parts of the codebase that interact with this function.
To ensure this change is consistently applied across the codebase, let's check for other occurrences of
onRecvUniversalPacket
:This will help us identify if there are any inconsistencies in the implementation of this function across different contracts or interfaces.
Verification successful
skipAck
Property Consistently Implemented Across CodebaseAll occurrences of
onRecvUniversalPacket
have been reviewed, and theskipAck
property has been consistently added as a return value. This ensures that existing implementations are aware of the new property and can handle it appropriately without issues.
- Verified in the following files:
test/upgradeableProxy/upgrades/UCHV2.sol
contracts/interfaces/IbcMiddleware.sol
contracts/examples/Earth.sol
contracts/base/GeneralMiddleware.sol
Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Search for other occurrences of onRecvUniversalPacket rg --type typescript --type solidity "function onRecvUniversalPacket" -A 10Length of output: 168
Script:
#!/bin/bash # Search for other occurrences of onRecvUniversalPacket rg --type ts --type solidity "function onRecvUniversalPacket" -A 10Length of output: 102
Script:
#!/bin/bash # Search for other occurrences of onRecvUniversalPacket rg --type ts --type sol "function onRecvUniversalPacket" -A 10Length of output: 92
Script:
#!/bin/bash # Search for other occurrences of onRecvUniversalPacket in TypeScript and Solidity files rg "function onRecvUniversalPacket" --glob "*.ts" --glob "*.sol" -A 10Length of output: 3418
src/evm/contracts/factories/Mars.sol/RevertingBytesMars__factory.ts (2)
482-486
: LGTM. Please provide more context about theskipAck
functionality.The addition of the
skipAck
boolean output to theonRecvPacket
function in the ABI is consistent with the PR title. This change suggests a new feature for controlling acknowledgment behavior.Could you please provide more information about the intended use and implications of the
skipAck
option? This would help in understanding the broader impact of this change on the contract's behavior.
909-909
: Bytecode updated. Please confirm proper compilation.The bytecode has been updated, which is consistent with the ABI changes. This is expected when modifying the contract's functionality.
To ensure the integrity of the changes, please confirm that:
- The contract was compiled with the correct Solidity version.
- The compilation process was performed in a clean environment.
- The resulting bytecode matches what's expected for the updated contract.
You can verify this by running the following commands:
If the
diff
command shows no output, it means the bytecode in the factory file matches the newly compiled bytecode.src/evm/contracts/factories/Mars.sol/RevertingStringMars__factory.ts (2)
899-899
: Bytecode updated to reflect ABI changesThe contract's bytecode has been updated, which is expected due to the ABI change. The new bytecode is significantly longer than the previous version.
Consider the following:
- The increased bytecode size may lead to higher deployment costs. Ensure this is acceptable for your use case.
- Verify that the new bytecode correctly implements the
skipAck
functionality.- If this contract is part of a system with size constraints, ensure that the increased size doesn't cause issues.
To verify the bytecode changes, run the following script:
#!/bin/bash # Description: Compare bytecode size and check for potential issues # Get the old bytecode size (assuming it's in a previous commit) old_size=$(git show HEAD^:src/evm/contracts/factories/Mars.sol/RevertingStringMars__factory.ts | grep -oP '(?<=_bytecode = ").+(?=";)' | wc -c) # Get the new bytecode size new_size=$(echo "$_bytecode" | wc -c) echo "Old bytecode size: $old_size" echo "New bytecode size: $new_size" echo "Size difference: $((new_size - old_size))" # Check if the size increase is significant (e.g., more than 10%) if (( new_size > old_size * 1.1 )); then echo "Warning: Significant increase in bytecode size. Review for potential optimization opportunities." fi # Check for potential size-related issues in other contracts echo "\nChecking for contracts close to size limit:" rg --type solidity --max-filesize 1M '(contract|library|interface)(?=.*\{)' -C 2
482-486
: NewskipAck
property added to ABIA new boolean property
skipAck
has been added to the ABI in theonRecvPacket
function's output. This change suggests the introduction of a feature to control acknowledgment behavior.Ensure that:
- The contract implementation correctly handles this new
skipAck
property.- Any calling contracts or interfaces are updated to accommodate this change.
- The behavior change is documented in the contract's comments or external documentation.
To verify the impact of this change, run the following script:
src/evm/contracts/factories/UniversalChannelHandler__factory.ts (2)
865-865
: Bytecode updated. Ensure correct compilation and deployment.The contract's bytecode has been updated, which is expected due to the ABI changes. While direct review of bytecode is not practical, it's crucial to ensure that the new bytecode correctly represents the updated contract.
To verify the integrity of the new bytecode, please run the following checks:
#!/bin/bash # Description: Verify the integrity of the new bytecode # Check if the bytecode length is within expected range BYTECODE_LENGTH=$(echo "0x60a0604052306080523480156200001557600080fd5b506200002062000030565b6200002a62000030565b620000f1565b600054610100900460ff16156200009d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000ef576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60805161268e62000129600039600081816106000152818161064901528181610a9301528181610ad30152610b66015261268e6000f3fe60806040526004361061016a5760003560e01c806379ba5097116100d1578063c4d66de81161008a578063e847e28011610064578063e847e28014610408578063f2fde38b14610428578063fad28a2414610448578063ffa1ad741461046857600080fd5b8063c4d66de8146103aa578063cb7e9057146103ca578063e30c3978146103ea57600080fd5b806379ba5097146102ee5780637e1d42b5146103035780638da5cb5b14610323578063ace02de714610355578063ba22bd7614610375578063c1cb44e51461039557600080fd5b80634c2ee09d116101235780634c2ee09d146102355780634dcc0aa6146102555780634f1ef2861461028357806352d1902d14610296578063602f9834146102b9578063715018a6146102d957600080fd5b80631eb7dd5e146101765780631f3a5830146101985780633659cfe6146101d55780633f9fdbe414610176578063462fdf83146101f55780634bdb55971461020857600080fd5b3661017157005b600080fd5b34801561018257600080fd5b5061019661019136600461194a565b610497565b005b3480156101a457600080fd5b506101b86101b33660046119b1565b6104c8565b6040516001600160401b0390911681526020015b60405180910390f35b3480156101e157600080fd5b506101966101f0366004611a30565b6105f6565b6101b8610203366004611a5e565b6106de565b34801561021457600080fd5b50610228610223366004611bc9565b610870565b6040516101cc9190611d5a565b34801561024157600080fd5b50610196610250366004611d6d565b6108b5565b34801561026157600080fd5b50610275610270366004611d9e565b61091e565b6040516101cc929190611dd2565b610196610291366004611e0c565b610a89565b3480156102a257600080fd5b506102ab610b59565b6040519081526020016101cc565b3480156102c557600080fd5b506101966102d4366004611d9e565b610c0c565b3480156102e557600080fd5b50610196610d41565b3480156102fa57600080fd5b50610196610d55565b34801561030f57600080fd5b5061019661031e366004611e6f565b610dcc565b34801561032f57600080fd5b506033546001600160a01b03165b6040516001600160a01b0390911681526020016101cc565b34801561036157600080fd5b50610196610370366004611ee7565b610f04565b34801561038157600080fd5b50610196610390366004611a30565b610f86565b3480156103a157600080fd5b506102ab600181565b3480156103b657600080fd5b506101966103c5366004611a30565b610fb0565b3480156103d657600080fd5b5060975461033d906001600160a01b031681565b3480156103f657600080fd5b506065546001600160a01b031661033d565b34801561041457600080fd5b50610196610423366004611fd9565b6110c2565b34801561043457600080fd5b50610196610443366004611a30565b6110f8565b34801561045457600080fd5b50610196610463366004611d6d565b611169565b34801561047457600080fd5b50610228604051806040016040528060038152602001620312e360ec1b81525081565b6097546001600160a01b031633146104c2576040516321bf7f4960e01b815260040160405180910390fd5b50505050565b60008061053860405180608001604052806104e9336001600160a01b031690565b81526020016001815260200188815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050915250611194565b60408051338152602081018990529192507f9831d8c66285bfd33de069ced58ad437d6bf08f63446bf06c3713e40b4b7e873910160405180910390a16097546040516330f8455760e21b81526001600160a01b039091169063c3e1155c906105a8908a908590889060040161202b565b6020604051808303816000875af11580156105c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105eb919061205d565b979650505050505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036106475760405162461bcd60e51b815260040161063e9061207a565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610690600080516020612612833981519152546001600160a01b031690565b6001600160a01b0316146106b65760405162461bcd60e51b815260040161063e906120c6565b6106bf816111d0565b604080516000808252602082019092526106db918391906111d8565b50565b60975460408051608081019091526000916001600160a01b03169082906107509080338152602001600181526020018b81526020018a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050915250611194565b60408051338152602081018c90529192507f9831d8c66285bfd33de069ced58ad437d6bf08f63446bf06c3713e40b4b7e873910160405180910390a16040516330f8455760e21b81526001600160a01b0383169063c3e1155c906107bc908d9085908b9060040161202b565b6020604051808303816000875af11580156107db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ff919061205d565b609754604080518082018252929550610863926001600160a01b03909216918d918791908a9060029083908390808284376000920191909152505060408051808201825291508a906002908390839080828437600092019190915250611348915050565b5050979650505050505050565b6097546060906001600160a01b0316331461089e576040516321bf7f4960e01b815260040160405180910390fd5b6108a9868484611417565b98975050505050505050565b6108bd6114e1565b6097546040516381bc079b60e01b8152600481018390526001600160a01b03909116906381bc079b90602401600060405180830381600087803b15801561090357600080fd5b505af1158015610917573d6000803e3d6000fd5b5050505050565b6040805180820190915260008152606060208201526097546000906001600160a01b03163314610961576040516321bf7f4960e01b815260040160405180910390fd5b600073__$f61eb90c6f674e787d51c07f105fa231e2$__63d5c39a9d61098a6060870187612112565b6040518363ffffffff1660e01b81526004016109a7929190612181565b600060405180830381865af41580156109c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109ec91908101906121da565b90506109fb816040015161153b565b6001600160a01b0316635b761585610a16602087018761227c565b60200135836040518363ffffffff1660e01b8152600401610a389291906122cf565b6000604051808303816000875af1158015610a57573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a7f91908101906122e8565b9250925050915091565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610ad15760405162461bcd60e51b815260040161063e9061207a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610b1a600080516020612612833981519152546001600160a01b031690565b6001600160a01b031614610b405760405162461bcd60e51b815260040161063e906120c6565b610b49826111d0565b610b55828260016111d8565b5050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bf95760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161063e565b5060008051602061261283398151915290565b6097546001600160a01b03163314610c37576040516321bf7f4960e01b815260040160405180910390fd5b600073__$f61eb90c6f674e787d51c07f105fa231e2$__63d5c39a9d610c606060850185612112565b6040518363ffffffff1660e01b8152600401610c7d929190612181565b600060405180830381865af4158015610c9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610cc291908101906121da565b9050610cd1816000015161153b565b6001600160a01b031663400d9f5d610ce9848061227c565b60200135836040518363ffffffff1660e01b8152600401610d0b9291906122cf565b600060405180830381600087803b158015610d2557600080fd5b505af1158015610d39573d6000803e3d6000fd5b505050505050565b610d496114e1565b610d53600061154c565b565b60655433906001600160a01b03168114610dc35760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b606482015260840161063e565b6106db8161154c565b6097546001600160a01b03163314610df7576040516321bf7f4960e01b815260040160405180910390fd5b600073__$f61eb90c6f674e787d51c07f105fa231e2$__63d5c39a9d610e206060860186612112565b6040518363ffffffff1660e01b8152600401610e3d929190612181565b600060405180830381865af4158015610e5a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e8291908101906121da565b9050610e91816000015161153b565b6001600160a01b031663588152ca610ea9858061227c565b6020013583856040518463ffffffff1660e01b8152600401610ecd939291906123ce565b600060405180830381600087803b158015610ee757600080fd5b505af1158015610efb573d6000803e3d6000fd5b50505050505050565b610f0c6114e1565b60975460405163418925b760e01b81526001600160a01b039091169063418925b790610f4a908b908b908b908b908b908b908b908b90600401612420565b600060405180830381600087803b158015610f6457600080fd5b505af1158015610f78573d6000803e3d6000fd5b505050505050505050505050565b610f8e6114e1565b609780546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff1615808015610fd05750600054600160ff909116105b80610fea5750303b158015610fea575060005460ff166001145b61104d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161063e565b6000805460ff191660011790558015611070576000805461ff0019166101001790555b61107982611565565b8015610b55576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6097546001600160a01b031633146110ed576040516321bf7f4960e01b815260040160405180910390fd5b610917848383611417565b6111006114e1565b606580546001600160a01b0383166001600160a01b031990911681179091556111316033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6097546001600160a01b031633146106db576040516321bf7f4960e01b815260040160405180910390fd5b8051602080830151604080850151606086810151925190956111ba9590949391016124de565b6040516020818303038152906040529050919050565b6106db6114e1565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156112105761120b83611594565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561126a575060408051601f3d908101601f1916820190925261126791810190612512565b60015b6112cd5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161063e565b600080516020612612833981519152811461133c5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161063e565b5061120b838383611630565b846001600160a01b031663478222c26040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611388573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ac919061252b565b6001600160a01b03166318e3404b34868686866040518663ffffffff1660e01b81526004016113de949392919061256b565b6000604051808303818588803b1580156113f757600080fd5b505af115801561140b573d6000803e3d6000fd5b50505050505050505050565b6060604051806040016040528060038152602001620312e360ec1b81525060405160200161144591906125a4565b60405160208183030381529060405280519060200120838360405160200161146e9291906125b6565b60405160208183030381529060405280519060200120146114a25760405163b01318a560e01b815260040160405180910390fd5b82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092979650505050505050565b6033546001600160a01b03163314610d535760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161063e565b600061154682611655565b92915050565b606580546001600160a01b03191690556106db816116c2565b600054610100900460ff1661158c5760405162461bcd60e51b815260040161063e906125c6565b610f8e611714565b6001600160a01b0381163b6116015760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161063e565b60008051602061261283398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61163983611743565b6000825111806116465750805b1561120b576104c28383611783565b60006001600160a01b038211156116be5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663630206269747360c81b606482015260840161063e565b5090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661173b5760405162461bcd60e51b815260040161063e906125c6565b610d536117af565b61174c81611594565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606117a88383604051806060016040528060278152602001612632602791396117df565b9392505050565b600054610100900460ff166117d65760405162461bcd60e51b815260040161063e906125c6565b610d533361154c565b6060600080856001600160a01b0316856040516117fc91906125a4565b600060405180830381855af49150503d8060008114611837576040519150601f19603f3d011682016040523d82523d6000602084013e61183c565b606091505b509150915061184d86838387611857565b9695505050505050565b606083156118c65782516000036118bf576001600160a01b0385163b6118bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161063e565b50816118d0565b6118d083836118d8565b949350505050565b8151156118e85781518083602001fd5b8060405162461bcd60e51b815260040161063e9190611d5a565b60008083601f84011261191457600080fd5b5081356001600160401b0381111561192b57600080fd5b60208301915083602082850101111561194357600080fd5b9250929050565b6000806000806060858703121561196057600080fd5b8435935060208501356001600160401b0381111561197d57600080fd5b61198987828801611902565b9598909750949560400135949350505050565b6001600160401b03811681146106db57600080fd5b6000806000806000608086880312156119c957600080fd5b853594506020860135935060408601356001600160401b038111156119ed57600080fd5b6119f988828901611902565b9094509250506060860135611a0d8161199c565b809150509295509295909350565b6001600160a01b03811681146106db57600080fd5b600060208284031215611a4257600080fd5b81356117a881611a1b565b806040810183101561154657600080fd5b6000806000806000806000610100888a031215611a7a57600080fd5b873596506020880135955060408801356001600160401b03811115611a9e57600080fd5b611aaa8a828b01611902565b9096509450506060880135611abe8161199c565b9250611acd8960808a01611a4d565b9150611adc8960c08a01611a4d565b905092959891949750929550565b803560038110611af957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611b3c57611b3c611afe565b604052919050565b60006001600160401b03821115611b5d57611b5d611afe565b50601f01601f191660200190565b6000611b7e611b7984611b44565b611b14565b9050828152838383011115611b9257600080fd5b828260208301376000602084830101529392505050565b600082601f830112611bba57600080fd5b6117a883833560208501611b6b565b600080600080600080600060c0888a031215611be457600080fd5b611bed88611aea565b965060208801356001600160401b0380821115611c0957600080fd5b818a0191508a601f830112611c1d57600080fd5b813581811115611c2f57611c2f611afe565b8060051b611c3f60208201611b14565b9182526020818501810192908101908e841115611c5b57600080fd5b6020860192505b83831015611c99578483351115611c7857600080fd5b611c888f60208535890101611ba9565b825260209283019290910190611c62565b9a5050505060408a0135965060608a0135915080821115611cb957600080fd5b611cc58b838c01611ba9565b955060808a0135945060a08a0135915080821115611ce257600080fd5b50611cef8a828b01611902565b989b979a50959850939692959293505050565b60005b83811015611d1d578181015183820152602001611d05565b838111156104c25750506000910152565b60008151808452611d46816020860160208601611d02565b601f01601f19169290920160200192915050565b6020815260006117a86020830184611d2e565b600060208284031215611d7f57600080fd5b5035919050565b600060e08284031215611d9857600080fd5b50919050565b600060208284031215611db057600080fd5b81356001600160401b03811115611dc657600080fd5b6118d084828501611d86565b604081528251151560408201526000602084015160406060840152611dfa6080840182611d2e565b91505082151560208301529392505050565b60008060408385031215611e1f57600080fd5b8235611e2a81611a1b565b915060208301356001600160401b03811115611e4557600080fd5b8301601f81018513611e5657600080fd5b611e6585823560208401611b6b565b9150509250929050565b60008060408385031215611e8257600080fd5b82356001600160401b0380821115611e9957600080fd5b611ea586838701611d86565b93506020850135915080821115611ebb57600080fd5b50830160408186031215611ece57600080fd5b809150509250929050565b80151581146106db57600080fd5b60008060008060008060008060a0898b031215611f0357600080fd5b88356001600160401b0380821115611f1a57600080fd5b611f268c838d01611902565b909a509850889150611f3a60208c01611aea565b975060408b01359150611f4c82611ed9565b90955060608a01359080821115611f6257600080fd5b818b0191508b601f830112611f7657600080fd5b813581811115611f8557600080fd5b8c60208260051b8501011115611f9a57600080fd5b6020 --- `419-423`: **LGTM. Verify the impact of this change on dependent systems.** The addition of the `skipAck` boolean return value to the `onRecvPacket` function aligns with the PR objective of adding a skip acknowledgment option. This change enhances the contract's flexibility in handling packet acknowledgments. To ensure this change is properly integrated, please run the following script to check for any other components that might need updates: </blockquote></details> <details> <summary>src/evm/contracts/factories/Mars.sol/RevertingEmptyMars__factory.ts (3)</summary><blockquote> Line range hint `1-899`: **Summary: ABI and bytecode updates align with PR objective.** The changes in this file, namely the addition of the `skipAck` field in the ABI and the corresponding bytecode update, are consistent with the PR's goal of adding a skip acknowledgment option. These modifications appear to be correct and well-implemented. However, to ensure the changes are fully integrated and functioning as expected: 1. Verify that all components interacting with the `onRecvPacket` function are updated to handle the new `skipAck` return value. 2. Ensure comprehensive test coverage for the new functionality. 3. Consider updating relevant documentation to reflect this new feature. --- `899-899`: **Bytecode updated. Ensure comprehensive testing.** The contract's bytecode has been significantly modified, which is expected due to the addition of the `skipAck` functionality. While manual verification of bytecode is not feasible, it's crucial to ensure that this change doesn't introduce any unintended side effects. To verify the correctness of the new bytecode: 1. Ensure that all existing tests pass with the updated contract. 2. Add new tests specifically for the `skipAck` functionality. 3. Consider running a diff on the contract's source code to confirm that only the expected changes are present. ```shell #!/bin/bash # Description: Check for unexpected changes in the contract source # Test: Diff the contract source file git diff HEAD~1 src/evm/contracts/Mars.sol/RevertingEmptyMars.sol
482-486
: LGTM. Verify the usage of the newskipAck
field.The addition of the
skipAck
boolean field to theonRecvPacket
function's output in the ABI is consistent with the PR's objective of adding a skip acknowledgment option. This change looks good and aligns with the expected modifications.To ensure this change is properly implemented and used, please run the following script to check for its usage across the codebase:
src/evm/contracts/factories/Mars.sol/PanickingMars__factory.ts (3)
482-486
: LGTM: NewskipAck
output added toonRecvPacket
functionThe addition of the
skipAck
boolean output to theonRecvPacket
function is a significant change that enhances the contract's flexibility in handling IBC packet acknowledgments. This modification allows the contract to indicate whether the acknowledgment should be skipped, potentially optimizing the IBC communication process.Developers integrating with this contract should be aware of this new output and update their implementations accordingly to handle cases where acknowledgment might be skipped.
Line range hint
1-899
: Summary: PanickingMars contract factory updated with newskipAck
featureThe PanickingMars__factory.ts file has been updated to incorporate the new
skipAck
feature. Key changes include:
- ABI modification: The
onRecvPacket
function now includes askipAck
boolean output.- Bytecode update: The contract's bytecode has been regenerated to implement the new functionality.
These changes enhance the contract's capabilities in handling IBC packet acknowledgments. Developers using this contract should:
- Update their integrations to handle the new
skipAck
output fromonRecvPacket
.- Review and test the updated contract behavior, especially in IBC-related scenarios.
- Ensure that any dependent systems or contracts are compatible with this new feature.
The factory class itself remains unchanged, maintaining backward compatibility for instantiation and deployment processes.
899-899
: Bytecode updated to reflect ABI changesThe contract's bytecode has been updated, which is consistent with the addition of the
skipAck
feature in the ABI. This change is expected and necessary to implement the new functionality.To ensure the integrity of the changes:
- Verify that the new bytecode correctly implements the
skipAck
functionality.- Consider running tests to confirm that the contract behaves as expected with the new feature.
- If possible, compare the Solidity source code changes with the bytecode diff to ensure consistency.
To help verify the bytecode changes, you can run the following command to search for references to the
skipAck
functionality in the Solidity source files:src/evm/contracts/factories/Moon__factory.ts (2)
896-896
: Bytecode updated: Verify contract compilationThe bytecode has been updated, which is expected given the changes to the contract's functionality. While it's not feasible to manually verify the correctness of the bytecode, it's important to ensure that it accurately reflects the intended changes.
To ensure the bytecode update is correct:
- Verify that the contract compiles without errors.
- Run the contract's test suite to ensure all functionality works as expected.
- Consider using a bytecode comparison tool to highlight the specific changes between the old and new bytecode.
#!/bin/bash # Description: Verify the contract compilation and test execution # Test: Check if the contract compiles without errors echo "Compiling contract..." # Replace with your actual compilation command # npm run compile # Test: Run the contract's test suite echo "Running tests..." # Replace with your actual test command # npm run test
479-483
: LGTM: NewskipAck
property added to ABIThe addition of the
skipAck
boolean property to theonRecvPacket
function's output in the ABI is consistent with the PR objective of adding a skip acknowledgment option. This change allows for more granular control over the acknowledgment process.To ensure this change is properly implemented and used, please run the following script:
src/evm/contracts/factories/Mars.sol/Mars__factory.ts (1)
479-483
: LGTM: NewskipAck
property added to ABIThe addition of the
skipAck
boolean property to theonRecvPacket
function output in the ABI is correct and aligns with the PR objective. This change allows the contract to indicate whether the acknowledgment should be skipped for a received packet, providing more flexibility in packet handling.src/evm/contracts/factories/Mars.sol/RevertingStringCloseChannelMars__factory.ts (2)
Line range hint
1-899
: Verify factory class compatibility with updated contractWhile no changes were made to the
RevertingStringCloseChannelMars__factory
class, it's important to ensure that it remains compatible with the updated contract, especially considering the newskipAck
functionality.Please confirm that:
- The factory class can successfully deploy the updated contract.
- Any methods in the factory class that interact with the contract's ABI (if any) are still functioning correctly.
You can use the following script to verify the factory class compatibility:
899-899
: Bytecode updated: Verify compilation and testingThe contract's bytecode has been updated, which is expected due to the ABI changes. While manual verification of the bytecode is not feasible, it's crucial to ensure that the new bytecode correctly implements the intended functionality.
Please confirm that:
- The contract compiles without errors.
- All existing tests pass with the new implementation.
- New tests have been added to cover the
skipAck
functionality.You can use the following script to verify the compilation and run tests:
bindings/go/iuniversalchannelhandler/IUniversalChannelHandler.go (4)
62-62
: ABI update for skip ack option looks good.The ABI string has been correctly updated to include the new
skipAck
return value for theonRecvPacket
function. This change aligns with the PR objective of adding a skip ack option.
422-423
: OnRecvPacket function signature updates are correct.The OnRecvPacket function signatures have been properly updated to include the new
skipAck
boolean return value. This change is consistent with the ABI update and correctly implements the skip ack option functionality.Also applies to: 429-430, 436-437
Line range hint
1-1
: Auto-generated file with correct changes.This file is auto-generated, and the changes made are consistent with the PR objective of adding a skip ack option. The modifications to the ABI and function signatures have been correctly implemented by the code generation process. No manual changes or improvements are needed for this file.
Line range hint
1-537
: Overall assessment: Changes are correct and well-implemented.The modifications to this auto-generated file accurately reflect the addition of the skip ack option. The ABI string and OnRecvPacket function signatures have been updated correctly. These changes are consistent with the PR objective and have been implemented properly through the code generation process. No issues or necessary improvements were identified during the review.
bindings/go/mars/RevertingStringCloseChannelMars.go (2)
62-62
: ABI updated correctly foronRecvPacket
functionThe ABI string has been properly updated to include the new
skipAck
boolean return value for theonRecvPacket
function. This change is essential for correct interaction with the smart contract.
688-689
:OnRecvPacket
function signatures updated consistentlyThe
OnRecvPacket
function signatures have been correctly updated in all three instances (Transactor, Session, and TransactorSession) to include the newskipAck
boolean return value. This consistency is crucial for proper functioning of the generated bindings.Also applies to: 695-696, 702-703
bindings/go/universalchannelhandler/UniversalChannelHandler.go (3)
606-607
: OnRecvPacket function signature updated in UniversalChannelHandlerTransactorThe function signature and comment for
OnRecvPacket
inUniversalChannelHandlerTransactor
have been correctly updated to reflect the newskipAck
return value. This change is consistent with the ABI update and accurately describes the new function behavior.
613-614
: OnRecvPacket function signatures updated in Session structsThe function signatures and comments for
OnRecvPacket
in bothUniversalChannelHandlerSession
andUniversalChannelHandlerTransactorSession
have been correctly updated to reflect the newskipAck
return value. These changes are consistent with the ABI update and theUniversalChannelHandlerTransactor
change, ensuring consistency across all relevant structs.Also applies to: 620-621
62-62
: ABI update adds new return parameter for onRecvPacket functionThe ABI string has been updated to include a new
bool skipAck
return parameter for theonRecvPacket
function. This change reflects an update in the underlying Solidity contract and will affect how the contract interacts with other components in the system.To ensure this change is consistent across the codebase, run the following script:
Verification successful
ABI update verified across all relevant Go bindings
The
onRecvPacket
function has been consistently updated across multiple Go files to include the newbool skipAck
return parameter. This ensures that the ABI changes are correctly propagated throughout the codebase, maintaining consistency and integrity in contract interactions.
- Updated in the following files:
bindings/go/moon/Moon.go
bindings/go/mars/RevertingStringCloseChannelMars.go
bindings/go/mars/RevertingStringMars.go
bindings/go/mars/RevertingEmptyMars.go
bindings/go/mars/PanickingMars.go
bindings/go/mars/RevertingBytesMars.go
bindings/go/mars/Mars.go
bindings/go/iuniversalchannelhandler/IUniversalChannelHandler.go
Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Search for other occurrences of onRecvPacket in Go files rg --type go "func.*onRecvPacket.*\(.*\).*\(.*\)" -g '!UniversalChannelHandler.go'Length of output: 4821
src/evm/contracts/Earth.ts (2)
421-426
: Ensure consistency in function retrieval logicThe
getFunction
method foronRecvUniversalPacket
has been updated to reflect the new return type[AckPacketStructOutput, boolean]
. Confirm that all related interface definitions and usages are consistently updated to match this change.
304-309
: UpdateonRecvUniversalPacket
method signature and usageThe
onRecvUniversalPacket
method's return type has been changed to include[AckPacketStructOutput, boolean]
with propertiesackPacket
andskipAck
. Ensure that all implementations and calls to this method are updated to handle the new return type appropriately.Run the following script to verify that all instances of
onRecvUniversalPacket
have been updated:src/evm/contracts/Mars.sol/Mars.ts (2)
407-411
: Ensure implementations ofonRecvPacket
are updated to match the new return typeThe return type of
onRecvPacket
has been updated to include bothackPacket
andskipAck
. Please verify that all implementations of this method across the codebase have been updated accordingly to prevent type mismatches or runtime errors.Run the following script to find implementations of
onRecvPacket
and check their return types:#!/bin/bash # Description: Verify implementations of `onRecvPacket` match the new return type. # Test: Search for `onRecvPacket` implementations with the old return type. # Expect: No implementations should use the old return type. rg --type ts 'onRecvPacket\(.*\): AckPacketStructOutput' -A 5
598-603
: Ensure usage ofgetFunction('onRecvPacket')
reflects the updated return typeThe return type of
getFunction('onRecvPacket')
has been updated. Please verify that any code using this function is updated to handle the new return structure to prevent potential type errors.Run the following script to find usages of
getFunction('onRecvPacket')
:src/evm/contracts/Mars.sol/RevertingEmptyMars.ts (2)
598-603
: Confirm consistency ofgetFunction
signature foronRecvPacket
The
getFunction
method foronRecvPacket
reflects the updated return type. Ensure that this signature aligns with the implementation and that any code retrieving this function handles the new return structure appropriately.Run the following script to locate all references to
getFunction
withonRecvPacket
and verify usage:#!/bin/bash # Description: Locate references to `getFunction` for `onRecvPacket`. # Search for `getFunction` calls with `onRecvPacket` as an argument. rg --type typescript -A 5 'getFunction\(.*"onRecvPacket"'
407-412
: Ensure proper handling of the updated return type inonRecvPacket
The
onRecvPacket
method's return type has been updated to include bothack
andskipAck
. Please verify that all implementations and calls to this method correctly handle the new tuple return type to prevent any runtime errors or unexpected behavior.Run the following script to find all usages of
onRecvPacket
and check for proper handling:bindings/go/earth/Earth.go (1)
48-48
: ABI updated correctly inEarthMetaData
The ABI in
EarthMetaData
has been updated to include the newskipAck
boolean in theonRecvUniversalPacket
function's return parameters. This change reflects the modifications made in the Solidity contract and appears to be consistent.bindings/go/moon/Moon.go (1)
62-62
: Verify the updated ABI string reflects the latest contract changesThe ABI string at line 62 has been modified to include the new output parameters for the
onRecvPacket
function. Please ensure that this ABI accurately represents the current Solidity contract to prevent any potential mismatches.bindings/go/mars/PanickingMars.go (6)
62-62
: ABI update foronRecvPacket
function is correctly implemented.The ABI definition now correctly includes the
skipAck
boolean output for theonRecvPacket
function, matching the updated contract interface.
320-324
: Function signature ofOnRecvPacket
inPanickingMarsCaller
is updated appropriately.The function now returns a struct containing
AckPacket
andSkipAck
, which aligns with the updated ABI and provides the necessary output for acknowledgment handling.
328-331
: Struct definition for output ofOnRecvPacket
is properly defined.The
outstruct
is correctly defined to include bothAck
of typeAckPacket
andSkipAck
of typebool
, ensuring accurate representation of the return values.
336-337
: Output assignments inOnRecvPacket
are correctly implemented.The conversion and assignment of the returned values to
outstruct.Ack
andoutstruct.SkipAck
are correctly performed, ensuring accurate retrieval of the function outputs.
345-349
: Function signature ofOnRecvPacket
inPanickingMarsSession
is correctly updated.The session method now correctly returns a struct with
Ack
andSkipAck
, maintaining consistency with the updated contract interface.
355-359
: Function signature ofOnRecvPacket
inPanickingMarsCallerSession
is correctly updated.The caller session method reflects the updated return type, ensuring uniformity across different contexts.
bindings/go/mars/RevertingEmptyMars.go (1)
62-62
: ABI updated appropriatelyThe ABI in
RevertingEmptyMarsMetaData
has been updated to include theskipAck
parameter in theonRecvPacket
function. This change ensures that the Go bindings correctly reflect the updated contract interface.bindings/go/mars/RevertingBytesMars.go (4)
62-62
: ABI Updated to Reflect New Output StructureThe ABI string has been correctly updated to include the new output structure for the
onRecvPacket
function. This ensures that the Go bindings are consistent with the Solidity contract.
320-339
: UpdatedOnRecvPacket
Method inRevertingBytesMarsCaller
The
OnRecvPacket
method now returns a struct containing bothAck
andSkipAck
. This change aligns with the updated contract return values and ensures proper handling of acknowledgment packets.
345-349
: Updated Session MethodOnRecvPacket
inRevertingBytesMarsSession
The session-level
OnRecvPacket
method has been updated to return the new struct withAck
andSkipAck
. This maintains consistency across the binding interfaces and supports the new acknowledgment logic.
355-359
: Updated Caller Session MethodOnRecvPacket
The
OnRecvPacket
method inRevertingBytesMarsCallerSession
now correctly returns the struct withAck
andSkipAck
. This change ensures that all caller sessions are compatible with the updated contract interface.bindings/go/mars/RevertingStringMars.go (4)
62-62
: ABI updated to includeskipAck
inonRecvPacket
The ABI string has been updated to reflect the new output parameters for the
onRecvPacket
function, which now returns a tuple containingAckPacket
and abool
skipAck
. This change is correctly incorporated in the ABI.
378-397
: FunctionOnRecvPacket
updated with new return typeThe
OnRecvPacket
function inRevertingStringMarsCaller
has been updated to return a struct containingAck
andSkipAck
, matching the updated ABI. The implementation correctly unpacks the returned values.
403-407
: FunctionOnRecvPacket
inRevertingStringMarsSession
updated with new return typeThe
OnRecvPacket
function inRevertingStringMarsSession
now returns the updated struct withAck
andSkipAck
. The change aligns with the updated ABI and is correctly implemented.
413-417
: FunctionOnRecvPacket
inRevertingStringMarsCallerSession
updated with new return typeThe
OnRecvPacket
function inRevertingStringMarsCallerSession
now returns the updated struct withAck
andSkipAck
. This is consistent with the changes in other related structs and matches the updated ABI.src/evm/contracts/factories/Dispatcher__factory.ts (1)
Line range hint
1-2203
: LGTM!The updates to the
_bytecode
constant and theDispatcher__factory
class appropriately reflect the changes in the underlying smart contract. The factory is correctly configured to deploy and interact with theDispatcher
contract, and the code adheres to TypeScript best practices.
ed0c7ee
to
24b2ce5
Compare
24b2ce5
to
04c1a61
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
Outside diff range and nitpick comments (1)
bindings/go/mars/RevertingEmptyMars.go (1)
345-349
: Session-specific OnRecvPacket implementations updated correctly.The
OnRecvPacket
function implementations for bothRevertingEmptyMarsSession
andRevertingEmptyMarsCallerSession
have been properly updated to include the newskipAck
boolean return value. These changes ensure consistency with the mainOnRecvPacket
function modification.For improved consistency, consider using the same named struct (if implemented as suggested earlier) across all these implementations.
Also applies to: 355-359
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files selected for processing (42)
- bindings/go/earth/Earth.go (2 hunks)
- bindings/go/iuniversalchannelhandler/IUniversalChannelHandler.go (2 hunks)
- bindings/go/mars/Mars.go (2 hunks)
- bindings/go/mars/PanickingMars.go (2 hunks)
- bindings/go/mars/RevertingBytesMars.go (2 hunks)
- bindings/go/mars/RevertingEmptyMars.go (2 hunks)
- bindings/go/mars/RevertingStringCloseChannelMars.go (2 hunks)
- bindings/go/mars/RevertingStringMars.go (2 hunks)
- bindings/go/moon/Moon.go (2 hunks)
- bindings/go/universalchannelhandler/UniversalChannelHandler.go (2 hunks)
- contracts/base/GeneralMiddleware.sol (2 hunks)
- contracts/core/Dispatcher.sol (1 hunks)
- contracts/core/UniversalChannelHandler.sol (1 hunks)
- contracts/examples/Earth.sol (1 hunks)
- contracts/examples/Mars.sol (4 hunks)
- contracts/examples/Pluto.sol (1 hunks)
- contracts/interfaces/IbcMiddleware.sol (2 hunks)
- contracts/interfaces/IbcReceiver.sol (1 hunks)
- package.json (1 hunks)
- src/evm/contracts/Earth.ts (2 hunks)
- src/evm/contracts/IUniversalChannelHandler.ts (2 hunks)
- src/evm/contracts/Mars.sol/Mars.ts (2 hunks)
- src/evm/contracts/Mars.sol/PanickingMars.ts (2 hunks)
- src/evm/contracts/Mars.sol/RevertingBytesMars.ts (2 hunks)
- src/evm/contracts/Mars.sol/RevertingEmptyMars.ts (2 hunks)
- src/evm/contracts/Mars.sol/RevertingStringCloseChannelMars.ts (2 hunks)
- src/evm/contracts/Mars.sol/RevertingStringMars.ts (2 hunks)
- src/evm/contracts/Moon.ts (2 hunks)
- src/evm/contracts/UniversalChannelHandler.ts (2 hunks)
- src/evm/contracts/factories/Dispatcher__factory.ts (1 hunks)
- src/evm/contracts/factories/Earth__factory.ts (2 hunks)
- src/evm/contracts/factories/IUniversalChannelHandler__factory.ts (1 hunks)
- src/evm/contracts/factories/Mars.sol/Mars__factory.ts (2 hunks)
- src/evm/contracts/factories/Mars.sol/PanickingMars__factory.ts (2 hunks)
- src/evm/contracts/factories/Mars.sol/RevertingBytesMars__factory.ts (2 hunks)
- src/evm/contracts/factories/Mars.sol/RevertingEmptyMars__factory.ts (2 hunks)
- src/evm/contracts/factories/Mars.sol/RevertingStringCloseChannelMars__factory.ts (2 hunks)
- src/evm/contracts/factories/Mars.sol/RevertingStringMars__factory.ts (2 hunks)
- src/evm/contracts/factories/Moon__factory.ts (2 hunks)
- src/evm/contracts/factories/UniversalChannelHandler__factory.ts (2 hunks)
- test/Dispatcher/Dispatcher.t.sol (4 hunks)
- test/mocks/GasUsingMars.sol (1 hunks)
Files skipped from review as they are similar to previous changes (39)
- bindings/go/earth/Earth.go
- bindings/go/iuniversalchannelhandler/IUniversalChannelHandler.go
- bindings/go/mars/Mars.go
- bindings/go/mars/PanickingMars.go
- bindings/go/mars/RevertingStringCloseChannelMars.go
- bindings/go/mars/RevertingStringMars.go
- bindings/go/moon/Moon.go
- bindings/go/universalchannelhandler/UniversalChannelHandler.go
- contracts/base/GeneralMiddleware.sol
- contracts/core/Dispatcher.sol
- contracts/core/UniversalChannelHandler.sol
- contracts/examples/Earth.sol
- contracts/examples/Mars.sol
- contracts/examples/Pluto.sol
- contracts/interfaces/IbcMiddleware.sol
- contracts/interfaces/IbcReceiver.sol
- package.json
- src/evm/contracts/Earth.ts
- src/evm/contracts/IUniversalChannelHandler.ts
- src/evm/contracts/Mars.sol/Mars.ts
- src/evm/contracts/Mars.sol/PanickingMars.ts
- src/evm/contracts/Mars.sol/RevertingBytesMars.ts
- src/evm/contracts/Mars.sol/RevertingEmptyMars.ts
- src/evm/contracts/Mars.sol/RevertingStringCloseChannelMars.ts
- src/evm/contracts/Mars.sol/RevertingStringMars.ts
- src/evm/contracts/Moon.ts
- src/evm/contracts/UniversalChannelHandler.ts
- src/evm/contracts/factories/Earth__factory.ts
- src/evm/contracts/factories/IUniversalChannelHandler__factory.ts
- src/evm/contracts/factories/Mars.sol/Mars__factory.ts
- src/evm/contracts/factories/Mars.sol/PanickingMars__factory.ts
- src/evm/contracts/factories/Mars.sol/RevertingBytesMars__factory.ts
- src/evm/contracts/factories/Mars.sol/RevertingEmptyMars__factory.ts
- src/evm/contracts/factories/Mars.sol/RevertingStringCloseChannelMars__factory.ts
- src/evm/contracts/factories/Mars.sol/RevertingStringMars__factory.ts
- src/evm/contracts/factories/Moon__factory.ts
- src/evm/contracts/factories/UniversalChannelHandler__factory.ts
- test/Dispatcher/Dispatcher.t.sol
- test/mocks/GasUsingMars.sol
Additional comments not posted (10)
bindings/go/mars/RevertingEmptyMars.go (3)
62-62
: ABI update foronRecvPacket
function looks good.The ABI string has been correctly updated to include the new
skipAck
boolean return value for theonRecvPacket
function. This change accurately reflects the modification in the Solidity contract.
320-324
: OnRecvPacket function signature updated correctly.The
OnRecvPacket
function has been properly updated to include the newskipAck
boolean return value. The changes are consistent with the modifications in the Solidity contract.However, as mentioned in a previous comment, consider defining a named struct for the return type instead of using an anonymous struct. This would improve code readability and maintainability.
Also applies to: 328-331
Line range hint
1-1127
: Overall, the changes look good and are consistently implemented.The modifications to add the
skipAck
functionality to theOnRecvPacket
function and its related methods have been successfully implemented. The changes are consistent across the ABI, function signatures, and different session implementations.To further improve the code:
- Consider implementing a named struct for the return type of
OnRecvPacket
, as suggested in a previous comment.- If a named struct is implemented, use it consistently across all implementations of
OnRecvPacket
.These suggestions would enhance code readability and maintainability.
src/evm/contracts/factories/Dispatcher__factory.ts (1)
Line range hint
1-2092
: LGTM for unchanged sections.The rest of the file, including imports, type definitions, and factory methods, remains unchanged. This consistency is good, as it suggests the update was focused solely on the contract bytecode without affecting the TypeScript wrapper's structure.
Also applies to: 2094-2095
bindings/go/mars/RevertingBytesMars.go (6)
62-62
: ABI updated to include the new output structureThe ABI at line 62 correctly reflects the updated output structure for the
onRecvPacket
function, now returning both anAckPacket
and abool
skipAck
.
320-324
: Function signature updated to handle acknowledgment controlThe
OnRecvPacket
function signature has been updated to return a struct containingAck
andSkipAck
, enhancing control over acknowledgment processing.
328-333
: Proper initialization and error handling of output structThe output struct is correctly initialized, and the error handling ensures that an empty struct is returned alongside the error when
err != nil
.
336-337
: Correct mapping of contract outputs to struct fieldsThe returned values from the contract call are correctly assigned to
outstruct.Ack
andoutstruct.SkipAck
.
345-349
: Session method signature updated appropriatelyThe
OnRecvPacket
function inRevertingBytesMarsSession
now correctly returns bothAckPacket
andSkipAck
, matching the updated contract interface.
355-359
: Caller session method signature updated appropriatelyThe
OnRecvPacket
function inRevertingBytesMarsCallerSession
has been updated to return the new struct withAck
andSkipAck
, ensuring consistent handling across sessions.
@@ -2090,7 +2090,7 @@ const _abi = [ | |||
] as const; | |||
|
|||
const _bytecode = | |||
"0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000e7565b600054610100900460ff1615620000935760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e5576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6080516158656200011f60003960008181610c1f01528181610c68015281816113c201528181611402015261149501526158656000f3fe6080604052600436106101c25760003560e01c8063715018a6116100f7578063b12f89be11610095578063c899e27211610064578063c899e2721461051e578063e30c39781461053e578063f2fde38b1461055c578063f90b8e961461057c57600080fd5b8063b12f89be14610486578063ba5a4d25146104a6578063c00fa7c0146104c6578063c3e1155c146104e657600080fd5b80637ab4339d116100d15780637ab4339d1461040857806381bc079b146104285780638da5cb5b146104485780639f59ae711461046657600080fd5b8063715018a6146103bc5780637774a6d3146103d157806379ba5097146103f357600080fd5b8063478222c211610164578063556d51781161013e578063556d51781461033c5780635d7adf961461035c5780636050b5f31461037c5780636b67055e1461039c57600080fd5b8063478222c2146102cd5780634f1ef2861461030657806352d1902d1461031957600080fd5b80633659cfe6116101a05780633659cfe614610240578063418925b71461026057806342852d2414610280578063429446b6146102ad57600080fd5b80631eb9fc86146101c75780632494546b146101e95780632bf5d19d14610220575b600080fd5b3480156101d357600080fd5b506101e76101e2366004613faf565b61059c565b005b3480156101f557600080fd5b5060fa546102069063ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b34801561022c57600080fd5b506101e761023b366004614085565b610926565b34801561024c57600080fd5b506101e761025b36600461412f565b610c15565b34801561026c57600080fd5b506101e761027b36600461418d565b610cfd565b34801561028c57600080fd5b506102a061029b36600461424e565b610db6565b6040516102179190614351565b3480156102b957600080fd5b506101e76102c8366004613faf565b61110e565b3480156102d957600080fd5b50610105546102ee906001600160a01b031681565b6040516001600160a01b039091168152602001610217565b6101e76103143660046144a4565b6113b8565b34801561032557600080fd5b5061032e611488565b604051908152602001610217565b34801561034857600080fd5b506101e7610357366004614507565b61153b565b34801561036857600080fd5b506101e761037736600461456f565b611553565b34801561038857600080fd5b506101e761039736600461456f565b611863565b3480156103a857600080fd5b506101e76103b736600461456f565b611875565b3480156103c857600080fd5b506101e7611f67565b3480156103dd57600080fd5b506103e6611f7b565b60405161021791906145c8565b3480156103ff57600080fd5b506101e7612009565b34801561041457600080fd5b506101e76104233660046145fb565b612080565b34801561043457600080fd5b506101e761044336600461464c565b612209565b34801561045457600080fd5b506033546001600160a01b03166102ee565b34801561047257600080fd5b506101e7610481366004614665565b6122d1565b34801561049257600080fd5b5061032e6104a13660046146a6565b612326565b3480156104b257600080fd5b506101e76104c13660046146f1565b6123df565b3480156104d257600080fd5b506101e76104e1366004614665565b61291b565b3480156104f257600080fd5b50610506610501366004614795565b612957565b6040516001600160401b039091168152602001610217565b34801561052a57600080fd5b506101e76105393660046147f2565b612aab565b34801561054a57600080fd5b506065546001600160a01b03166102ee565b34801561056857600080fd5b506101e761057736600461412f565b612b56565b34801561058857600080fd5b506101e7610597366004614874565b612bc7565b6105a46131f4565b60028510156105c65760405163af0ba14d60e01b815260040160405180910390fd5b6105ec6105d388806148cc565b60208a01356105e286806148cc565b876020013561324d565b61064e8686600081811061060257610602614912565b905060200281019061061491906148cc565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061328892505050565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634f9b0fb36106818c806148cc565b8d602001356040518463ffffffff1660e01b81526004016106a493929190614951565b600060405180830381865af41580156106c1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106e991908101906149c5565b73__$d825222459c46c14afb2efe0967c30e98d$__6325e0dd0e60078a8e806040019061071691906148cc565b8f8f6107228e806148cc565b8f602001356040518a63ffffffff1660e01b815260040161074b99989796959493929190614a4e565b600060405180830381865af4158015610768573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261079091908101906149c5565b6040518463ffffffff1660e01b81526004016107ae93929190614b68565b600060405180830381600087803b1580156107c857600080fd5b505af11580156107dc573d6000803e3d6000fd5b50600092506107f791506107f2905089806148cc565b613307565b9050600080610869836301d08fc560e71b6020808e01359089013561081f60408b018b6148cc565b6040516024016108329493929190614d16565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261339a565b9150915081156108ce57610882838b8b8b8b8b8b613486565b826001600160a01b03167fcf8be9ab2b5edf8beb2c45abe8e0cc7646318ac19f6c3164ba2e19e93a8a32af8b602001356040516108c191815260200190565b60405180910390a2610910565b826001600160a01b03167f971a4433f5bff5f011728a4123aeeca4b5275ac20b013cf276e65510491ac26f8260405161090791906145c8565b60405180910390a25b50505061091d6001609755565b50505050505050565b61092e6131f4565b6002831461094f5760405163af0ba14d60e01b815260040160405180910390fd5b61095c6105d388806148cc565b6109728484600081811061060257610602614912565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634f9b0fb36109a58c806148cc565b8d602001356040518463ffffffff1660e01b81526004016109c893929190614951565b600060405180830381865af41580156109e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a0d91908101906149c5565b73__$d825222459c46c14afb2efe0967c30e98d$__6325e0dd0e60068c8e8060400190610a3a91906148cc565b8d8d610a468e806148cc565b8f602001356040518a63ffffffff1660e01b8152600401610a6f99989796959493929190614a4e565b600060405180830381865af4158015610a8c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ab491908101906149c5565b6040518463ffffffff1660e01b8152600401610ad293929190614b68565b600060405180830381600087803b158015610aec57600080fd5b505af1158015610b00573d6000803e3d6000fd5b5060009250610b1691506107f2905089806148cc565b9050600080610b6c83634bdb559760e01b8b8a8a8f602001358b8060000190610b3f91906148cc565b8d602001358e8060400190610b5491906148cc565b60405160240161083299989796959493929190614d86565b915091508115610bdc57826001600160a01b03167ff910705a7a768eb5958f281a5f84cae8bffc5dd811ca5cd303dda140a423698c82806020019051810190610bb59190614deb565b8b8b8b8b610bc38c806148cc565b8d602001356040516108c1989796959493929190614e33565b826001600160a01b03167f9e2fe55a3b54b57f82334c273f8d048cd7f05ad19c16cf334276a8c1fec4b6fd8260405161090791906145c8565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c665760405162461bcd60e51b8152600401610c5d90614e99565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610caf6000805160206157e9833981519152546001600160a01b031690565b6001600160a01b031614610cd55760405162461bcd60e51b8152600401610c5d90614ee5565b610cde81613726565b60408051600080825260208201909252610cfa9183919061372e565b50565b610d056131f4565b600283141580610d13575080155b15610d3157604051637d6ba8a560e01b815260040160405180910390fd5b6000879003610d535760405163f61bbcf360e01b815260040160405180910390fd5b336001600160a01b03167f20fd8a5856711b18d00def4aa6abafbe00ce6d60795e015cc1cad35eb9b463598989898989898989604051610d9a989796959493929190614f31565b60405180910390a2610dac6001609755565b5050505050505050565b610dfc6040805160e08101909152606081526020810160008152602001600015158152602001606081526020016060815260200160008019168152602001606081525090565b6001600160a01b038316600090815260fb6020908152604080832085845290915290819020815160e08101909252805482908290610e3990614f91565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6590614f91565b8015610eb25780601f10610e8757610100808354040283529160200191610eb2565b820191906000526020600020905b815481529060010190602001808311610e9557829003601f168201915b5050509183525050600182015460209091019060ff166002811115610ed957610ed96142d2565b6002811115610eea57610eea6142d2565b81526001820154610100900460ff161515602080830191909152600283018054604080518285028101850182528281529401939260009084015b82821015610fd0578382906000526020600020018054610f4390614f91565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6f90614f91565b8015610fbc5780601f10610f9157610100808354040283529160200191610fbc565b820191906000526020600020905b815481529060010190602001808311610f9f57829003601f168201915b505050505081526020019060010190610f24565b505050508152602001600382018054610fe890614f91565b80601f016020809104026020016040519081016040528092919081815260200182805461101490614f91565b80156110615780601f1061103657610100808354040283529160200191611061565b820191906000526020600020905b81548152906001019060200180831161104457829003601f168201915b505050505081526020016004820154815260200160058201805461108490614f91565b80601f01602080910402602001604051908101604052809291908181526020018280546110b090614f91565b80156110fd5780601f106110d2576101008083540402835291602001916110fd565b820191906000526020600020905b8154815290600101906020018083116110e057829003601f168201915b505050505081525050905092915050565b6111166131f4565b60028510156111385760405163af0ba14d60e01b815260040160405180910390fd5b6111456105d388806148cc565b61115b8686600081811061060257610602614912565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634f9b0fb361118e8c806148cc565b8d602001356040518463ffffffff1660e01b81526004016111b193929190614951565b600060405180830381865af41580156111ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111f691908101906149c5565b73__$d825222459c46c14afb2efe0967c30e98d$__6325e0dd0e60088a8e806040019061122391906148cc565b8f8f61122f8e806148cc565b8f602001356040518a63ffffffff1660e01b815260040161125899989796959493929190614a4e565b600060405180830381865af4158015611275573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261129d91908101906149c5565b6040518463ffffffff1660e01b81526004016112bb93929190614b68565b600060405180830381600087803b1580156112d557600080fd5b505af11580156112e9573d6000803e3d6000fd5b50600092506112ff91506107f2905089806148cc565b90506000806113278363fad28a2460e01b8c6020013560405160240161083291815260200190565b91509150811561137f57611340838b8b8b8b8b8b613486565b826001600160a01b03167fe80f571f70f7cabf9d7ac60ece08421be374117776c311c327a083ca398f802f8b602001356040516108c191815260200190565b826001600160a01b03167ff6a58ef30f66943749e8c29c661c84da143a1c8ed017f5faa92b509e0000875a8260405161090791906145c8565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036114005760405162461bcd60e51b8152600401610c5d90614e99565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166114496000805160206157e9833981519152546001600160a01b031690565b6001600160a01b03161461146f5760405162461bcd60e51b8152600401610c5d90614ee5565b61147882613726565b6114848282600161372e565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115285760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610c5d565b506000805160206157e983398151915290565b611543613899565b61154e8383836138f3565b505050565b61155b6131f4565b61157461156b6020840184614fc5565b6020013561398e565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634b5728d1866040518263ffffffff1660e01b81526004016115ba9190615047565b600060405180830381865af41580156115d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115ff91908101906149c5565b604051637e4794ed60e11b815273__$d825222459c46c14afb2efe0967c30e98d$__9063fc8f29da90611636908990600401615047565b602060405180830381865af4158015611653573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116779190615109565b60405160200161168991815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b81526004016116b693929190614b68565b600060405180830381600087803b1580156116d057600080fd5b505af11580156116e4573d6000803e3d6000fd5b5050505060006117078380602001906116fd9190614fc5565b6107f290806148cc565b6001600160a01b0381166000908152610100602090815260408220929350909190829061173690870187614fc5565b602001358152602001908152602001600020600085604001602081019061175d9190615122565b6001600160401b0316815260208101919091526040016000205460ff169050801561179b5760405163066c745760e01b815260040160405180910390fd5b6117c36117ae60e0860160c08701615122565b6117be60c0870160a08801615122565b613a59565b6117e0576040516312c9cc9f60e01b815260040160405180910390fd5b6117ed6020850185614fc5565b602001356001600160a01b0383167fedbcd9eeb09d85c3ea1b5bf002c04478059cb261cab82c903885cefccae374bc61182c6060880160408901615122565b6080880161184060e08a0160c08b01615122565b60405161184f9392919061513d565b60405180910390a350506114846001609755565b61186b6131f4565b6114846001609755565b61187d6131f4565b61188d61156b6020840184614fc5565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634b5728d1866040518263ffffffff1660e01b81526004016118d39190615047565b600060405180830381865af41580156118f0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261191891908101906149c5565b604051637e4794ed60e11b815273__$d825222459c46c14afb2efe0967c30e98d$__9063fc8f29da9061194f908990600401615047565b602060405180830381865af415801561196c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119909190615109565b6040516020016119a291815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b81526004016119cf93929190614b68565b600060405180830381600087803b1580156119e957600080fd5b505af11580156119fd573d6000803e3d6000fd5b505050506000611a168380602001906116fd9190614fc5565b6001600160a01b03811660009081526101006020908152604082209293509091908290611a4590870187614fc5565b6020013581526020019081526020016000206000856040016020810190611a6c9190615122565b6001600160401b0316815260208101919091526040016000205460ff1690508015611aaa5760405163066c745760e01b815260040160405180910390fd5b6001600160a01b03821660009081526101006020908152604082206001929091611ad690880188614fc5565b6020013581526020019081526020016000206000866040016020810190611afd9190615122565b6001600160401b031681526020810191909152604001600020805460ff191691151591909117905560026001600160a01b038316600090815260fb6020908152604082209190611b4f90880188614fc5565b60209081013582528101919091526040016000206001015460ff166002811115611b7b57611b7b6142d2565b03611c7a576001600160a01b038216600090815260fd6020908152604082209190611ba890870187614fc5565b60209081013582528101919091526040908101600020546001600160401b031690611bd99060608701908701615122565b6001600160401b031614611c005760405163362a414d60e01b815260040160405180910390fd5b611c106060850160408601615122565b611c1b90600161516d565b6001600160a01b038316600090815260fd6020908152604082209190611c4390880188614fc5565b60200135815260200190815260200160002060006101000a8154816001600160401b0302191690836001600160401b031602179055505b611c876020850185614fc5565b602001356001600160a01b0383167fde5b57e6566d68a30b0979431df3d5df6db3b9aa89f8820f595b9315bf86d067611cc66060880160408901615122565b6040516001600160401b03909116815260200160405180910390a3611cf46117ae60e0860160c08701615122565b15611d7757611d066020850185614fc5565b602001356001600160a01b0383167fedbcd9eeb09d85c3ea1b5bf002c04478059cb261cab82c903885cefccae374bc611d456060880160408901615122565b60808801611d5960e08a0160c08b01615122565b604051611d689392919061513d565b60405180910390a3505061186b565b604080518082019091526000815260606020820152600080611dac85634dcc0aa660e01b896040516024016108329190615257565b915091508115611dd15780806020019051810190611dca919061526a565b9250611de9565b60408051808201909152600081526020810182905292505b6001600160a01b0385166000908152610101602090815260408220908290611e13908b018b614fc5565b6020013581526020019081526020016000206000896040016020810190611e3a9190615122565b6001600160401b0316815260208101919091526040016000205460ff1690508015611e7857604051637aa549d360e01b815260040160405180910390fd5b6001600160a01b03861660009081526101016020908152604082206001929091611ea4908c018c614fc5565b60200135815260200190815260200160002060008a6040016020810190611ecb9190615122565b6001600160401b03168152602080820192909252604001600020805460ff191692151592909217909155611f0190890189614fc5565b602001356001600160a01b0387167fa32e6f42b1d63fb83ad73b009a6dbb9413d1da02e95b1bb08f081815eea8db20611f4060608c0160408d01615122565b87604051611f4f929190615320565b60405180910390a35050505050506114846001609755565b611f6f613899565b611f796000613aa7565b565b60f98054611f8890614f91565b80601f0160208091040260200160405190810160405280929190818152602001828054611fb490614f91565b80156120015780601f10611fd657610100808354040283529160200191612001565b820191906000526020600020905b815481529060010190602001808311611fe457829003601f168201915b505050505081565b60655433906001600160a01b031681146120775760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610c5d565b610cfa81613aa7565b600054600290610100900460ff161580156120a2575060005460ff8083169116105b6121055760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c5d565b6000805461ffff191660ff8316176101001790556121216131f4565b82516000036121435760405163e8cf362360e01b815260040160405180910390fd5b6001600160a01b03821661216a5760405163cbdd34cf60e01b815260040160405180910390fd5b612172613ac0565b61217a613aef565b60f96121868482615388565b50825160fa805463ffffffff191663ffffffff90921691909117905561010580546001600160a01b0319166001600160a01b03841617905560016097556000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b6122116131f4565b61221a81613b1e565b33600090815260fb6020908152604080832084845290915281209061223f8282613e39565b60018201805461ffff1916905561225a600283016000613e73565b612268600383016000613e39565b60048201600090556005820160006122809190613e39565b505060008181526101036020526040812061229a91613e39565b604051819033907f21372e37743553ba8e5f61239803174a827c7732d53ec8adcb76c6b3bb2c13f190600090a3610cfa6001609755565b6122d9613899565b60008190036122fb5760405163e8cf362360e01b815260040160405180910390fd5b60f9612308828483615447565b5060fa805463ffffffff191663ffffffff9290921691909117905550565b600061236783838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061328892505050565b6001600160a01b03166344c9af28856040518263ffffffff1660e01b815260040161239491815260200190565b602060405180830381865afa1580156123b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d59190615109565b90505b9392505050565b6123e76131f4565b60006123f66116fd8680614fc5565b905061240561156b8680614fc5565b6001600160a01b031663cb535ab58373__$d825222459c46c14afb2efe0967c30e98d$__6311a7a373896040518263ffffffff1660e01b815260040161244b9190615047565b600060405180830381865af4158015612468573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261249091908101906149c5565b6040516374e9704560e01b815273__$d825222459c46c14afb2efe0967c30e98d$__906374e97045906124c9908b908b90600401615507565b602060405180830381865af41580156124e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250a9190615109565b60405160200161251c91815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b815260040161254993929190614b68565b600060405180830381600087803b15801561256357600080fd5b505af1158015612577573d6000803e3d6000fd5b505050506001600160a01b038116600090815260ff602052604081208161259e8880614fc5565b60200135815260200190815260200160002060008760400160208101906125c59190615122565b6001600160401b0316815260208101919091526040016000205460ff169050806126025760405163ca89746b60e01b815260040160405180910390fd5b6000806126a184637e1d42b560e01b8a73__$d825222459c46c14afb2efe0967c30e98d$__63360b8cd78c8c6040518363ffffffff1660e01b815260040161264b929190615507565b600060405180830381865af4158015612668573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612690919081019061526a565b60405160240161083292919061551b565b9150915081156128c55760026001600160a01b038516600090815260fb60205260408120906126d08b80614fc5565b60209081013582528101919091526040016000206001015460ff1660028111156126fc576126fc6142d2565b036127f1576001600160a01b038416600090815260fe60205260408120906127248a80614fc5565b60209081013582528101919091526040908101600020546001600160401b0316906127559060608b01908b01615122565b6001600160401b03161461277c5760405163362a414d60e01b815260040160405180910390fd5b61278c6060890160408a01615122565b61279790600161516d565b6001600160a01b038516600090815260fe60205260408120906127ba8b80614fc5565b60200135815260200190815260200160002060006101000a8154816001600160401b0302191690836001600160401b031602179055505b6001600160a01b038416600090815260ff60205260408120906128148a80614fc5565b602001358152602001908152602001600020600089604001602081019061283b9190615122565b6001600160401b031681526020810191909152604001600020805460ff191690556128668880614fc5565b602001356001600160a01b0385167fe46f6591236abe528fe47a3b281fb002524dadd3e62b1f317ed285d07273c3b16128a560608c0160408d01615122565b6040516001600160401b03909116815260200160405180910390a3612907565b836001600160a01b03167f625eea143c9dae6915c809da47016c22d9cd006c3ace7c345c5cbcf57d3aefbc826040516128fe91906145c8565b60405180910390a25b505050506129156001609755565b50505050565b612923613899565b6101048282604051612936929190615540565b90815260405190819003602001902080546001600160a01b03191690555050565b60006129616131f4565b61296a85613b1e565b42826001600160401b0316116129935760405163551ea0fb60e11b815260040160405180910390fd5b5033600090815260fc602090815260408083208784529091528120546001600160401b0316908190036129d957604051631e510bfb60e21b815260040160405180910390fd5b33600090815260ff6020908152604080832088845282528083206001600160401b03851684529091529020805460ff19166001908117909155612a1d90829061516d565b33600081815260fc602090815260408083208a845290915290819020805467ffffffffffffffff19166001600160401b03949094169390931790925590518691907fb5bff96e18da044e4e34510d16df9053b9f1920f6a960732e5aaf22fe9b8013690612a91908890889087908990615550565b60405180910390a3612aa36001609755565b949350505050565b612aea82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061328892505050565b6001600160a01b03166349ff245e878787876040518563ffffffff1660e01b8152600401612b1b9493929190615585565b600060405180830381600087803b158015612b3557600080fd5b505af1158015612b49573d6000803e3d6000fd5b505050505b505050505050565b612b5e613899565b606580546001600160a01b0383166001600160a01b03199091168117909155612b8f6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b612bcf6131f4565b6001600160a01b038316612bf65760405163cbdd34cf60e01b815260040160405180910390fd5b6001600160a01b038316600090815260fb60209081526040808320858452909152808220815160e08101909252805482908290612c3290614f91565b80601f0160208091040260200160405190810160405280929190818152602001828054612c5e90614f91565b8015612cab5780601f10612c8057610100808354040283529160200191612cab565b820191906000526020600020905b815481529060010190602001808311612c8e57829003601f168201915b5050509183525050600182015460209091019060ff166002811115612cd257612cd26142d2565b6002811115612ce357612ce36142d2565b81526001820154610100900460ff161515602080830191909152600283018054604080518285028101850182528281529401939260009084015b82821015612dc9578382906000526020600020018054612d3c90614f91565b80601f0160208091040260200160405190810160405280929190818152602001828054612d6890614f91565b8015612db55780601f10612d8a57610100808354040283529160200191612db5565b820191906000526020600020905b815481529060010190602001808311612d9857829003601f168201915b505050505081526020019060010190612d1d565b505050508152602001600382018054612de190614f91565b80601f0160208091040260200160405190810160405280929190818152602001828054612e0d90614f91565b8015612e5a5780601f10612e2f57610100808354040283529160200191612e5a565b820191906000526020600020905b815481529060010190602001808311612e3d57829003601f168201915b5050505050815260200160048201548152602001600582018054612e7d90614f91565b80601f0160208091040260200160405190810160405280929190818152602001828054612ea990614f91565b8015612ef65780601f10612ecb57610100808354040283529160200191612ef6565b820191906000526020600020905b815481529060010190602001808311612ed957829003601f168201915b5050509190925250505060a0810151909150612f2557604051634d93b09d60e11b815260040160405180910390fd5b612f2e8361398e565b6001600160a01b031663cb535ab58373__$d825222459c46c14afb2efe0967c30e98d$__636f6547268560c00151886040518363ffffffff1660e01b8152600401612f7a9291906155ac565b600060405180830381865af4158015612f97573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612fbf91908101906149c5565b602085015185516060870151608088015160a0890151604051631f621e1560e31b815273__$d825222459c46c14afb2efe0967c30e98d$__9563fb10f0a8956130159560099592949193909291906004016155ce565b600060405180830381865af4158015613032573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261305a91908101906149c5565b6040518463ffffffff1660e01b815260040161307893929190614b68565b600060405180830381600087803b15801561309257600080fd5b505af11580156130a6573d6000803e3d6000fd5b505050506000806130d686633f9fdbe460e01b8786608001518760a0015160405160240161083293929190615676565b6001600160a01b038816600090815260fb602090815260408083208a845290915281209294509092506131098282613e39565b60018201805461ffff19169055613124600283016000613e73565b613132600383016000613e39565b600482016000905560058201600061314a9190613e39565b505060008581526101036020526040812061316491613e39565b81156131a55760405185906001600160a01b038816907f5f010dbbd6bf46aec8131c5456301a75cd688d3cca9bc8380c9e26301be2072990600090a36131e7565b856001600160a01b03167fc9d36d7a317cb116925d5cb66f0069fe825822fe23e9cf3f421c38cf444caa30826040516131de91906145c8565b60405180910390a25b50505061154e6001609755565b6002609754036132465760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002609755565b841580613258575081155b80613261575083155b8061326a575080155b15612b4e57604051637d6ba8a560e01b815260040160405180910390fd5b600081516000036132b65760405163524e171160e01b81526020600482015260006024820152604401610c5d565b610104826040516132c7919061569f565b908152604051908190036020019020546001600160a01b0316905080613302578160405163036c4d8760e11b8152600401610c5d91906145c8565b919050565b60fa5460009073__$f61eb90c6f674e787d51c07f105fa231e2$__9063a1ef9a989061333c90859063ffffffff1681886156b1565b6040518363ffffffff1660e01b8152600401613359929190615507565b602060405180830381865af4158015613376573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d891906156db565b600060606001600160a01b0384163b6133e257505060408051808201909152601481527318d85b1b081d1bc81b9bdb8b58dbdb9d1c9858dd60621b602082015260009061347f565b60005a9050846001600160a01b0316846040516133ff919061569f565b6000604051808303816000865af19150503d806000811461343c576040519150601f19603f3d011682016040523d82523d6000602084013e613441565b606091505b5090935091508215801561345f575061345b6040826156f8565b5a11155b1561347d5760405163b08ede0960e01b815260040160405180910390fd5b505b9250929050565b6040518060e001604052808780604001906134a191906148cc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252506020018460028111156134ed576134ed6142d2565b81528315156020820152604001613504868861571a565b815260200161351383806148cc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252506020838101359082015260400161356188806148cc565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160a01b038a16815260fb602090815260408083208b83013584529091529020825190915081906135cb9082615388565b50602082015160018083018054909160ff19909116908360028111156135f3576135f36142d2565b021790555060408201516001820180549115156101000261ff001990921691909117905560608201518051613632916002840191602090910190613e91565b50608082015160038201906136479082615388565b5060a0820151600482015560c082015160058201906136669082615388565b5050506001600160a01b038716600081815260fc602090815260408083208a8301358085529083528184208054600167ffffffffffffffff19918216811790925586865260fd85528386208387528552838620805482168317905595855260fe84528285209185529252822080549093161790915585908590816136ec576136ec614912565b90506020028101906136fe91906148cc565b60208089013560009081526101039091526040902091610dac919083615447565b6001609755565b610cfa613899565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156137615761154e83613b59565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156137bb575060408051601f3d908101601f191682019092526137b891810190615109565b60015b61381e5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610c5d565b6000805160206157e9833981519152811461388d5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610c5d565b5061154e838383613bf5565b6033546001600160a01b03163314611f795760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c5d565b600082900361391f5760405163524e171160e01b81526020600482015260006024820152604401610c5d565b6001600160a01b0381166139465760405163cbdd34cf60e01b815260040160405180910390fd5b80610104848460405161395a929190615540565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055505050565b60008181526101036020526040812080548291906139ab90614f91565b80601f01602080910402602001604051908101604052809291908181526020018280546139d790614f91565b8015613a245780601f106139f957610100808354040283529160200191613a24565b820191906000526020600020905b815481529060010190602001808311613a0757829003601f168201915b505050505090508051600003613a50576040516363b99a9d60e11b815260048101849052602401610c5d565b6123d881613288565b60006001600160401b03831615801590613a7c5750826001600160401b03164210155b806123d857506001600160401b038216158015906123d85750506001600160401b0316431015919050565b606580546001600160a01b0319169055610cfa81613c1a565b600054610100900460ff16613ae75760405162461bcd60e51b8152600401610c5d9061579d565b611f79613c6c565b600054610100900460ff16613b165760405162461bcd60e51b8152600401610c5d9061579d565b611f79613c9c565b33600090815260fb60209081526040808320848452909152902060040154610cfa57604051631109bfb360e31b815260040160405180910390fd5b6001600160a01b0381163b613bc65760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610c5d565b6000805160206157e983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b613bfe83613cc3565b600082511180613c0b5750805b1561154e576129158383613d03565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16613c935760405162461bcd60e51b8152600401610c5d9061579d565b611f7933613aa7565b600054610100900460ff1661371f5760405162461bcd60e51b8152600401610c5d9061579d565b613ccc81613b59565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606123d88383604051806060016040528060278152602001615809602791396060600080856001600160a01b031685604051613d40919061569f565b600060405180830381855af49150503d8060008114613d7b576040519150601f19603f3d011682016040523d82523d6000602084013e613d80565b606091505b5091509150613d9186838387613d9b565b9695505050505050565b60608315613e0a578251600003613e03576001600160a01b0385163b613e035760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c5d565b5081612aa3565b612aa38383815115613e1f5781518083602001fd5b8060405162461bcd60e51b8152600401610c5d91906145c8565b508054613e4590614f91565b6000825580601f10613e55575050565b601f016020900490600052602060002090810190610cfa9190613ee7565b5080546000825590600052602060002090810190610cfa9190613efc565b828054828255906000526020600020908101928215613ed7579160200282015b82811115613ed75782518290613ec79082615388565b5091602001919060010190613eb1565b50613ee3929150613efc565b5090565b5b80821115613ee35760008155600101613ee8565b80821115613ee3576000613f108282613e39565b50600101613efc565b600060608284031215613f2b57600080fd5b50919050565b60008083601f840112613f4357600080fd5b5081356001600160401b03811115613f5a57600080fd5b6020830191508360208260051b850101111561347f57600080fd5b80356003811061330257600080fd5b8015158114610cfa57600080fd5b803561330281613f84565b600060408284031215613f2b57600080fd5b600080600080600080600060c0888a031215613fca57600080fd5b87356001600160401b0380821115613fe157600080fd5b613fed8b838c01613f19565b985060208a013591508082111561400357600080fd5b61400f8b838c01613f31565b909850965086915061402360408b01613f75565b955061403160608b01613f92565b945060808a013591508082111561404757600080fd5b6140538b838c01613f19565b935060a08a013591508082111561406957600080fd5b506140768a828b01613f9d565b91505092959891949750929550565b600080600080600080600060c0888a0312156140a057600080fd5b87356001600160401b03808211156140b757600080fd5b6140c38b838c01613f19565b98506140d160208b01613f75565b97506140df60408b01613f92565b965060608a01359150808211156140f557600080fd5b6141018b838c01613f31565b909650945060808a013591508082111561404757600080fd5b6001600160a01b0381168114610cfa57600080fd5b60006020828403121561414157600080fd5b81356123d88161411a565b60008083601f84011261415e57600080fd5b5081356001600160401b0381111561417557600080fd5b60208301915083602082850101111561347f57600080fd5b60008060008060008060008060a0898b0312156141a957600080fd5b88356001600160401b03808211156141c057600080fd5b6141cc8c838d0161414c565b909a5098508891506141e060208c01613f75565b975060408b013591506141f282613f84565b90955060608a0135908082111561420857600080fd5b6142148c838d01613f31565b909650945060808b013591508082111561422d57600080fd5b5061423a8b828c0161414c565b999c989b5096995094979396929594505050565b6000806040838503121561426157600080fd5b823561426c8161411a565b946020939093013593505050565b60005b8381101561429557818101518382015260200161427d565b838111156129155750506000910152565b600081518084526142be81602086016020860161427a565b601f01601f19169290920160200192915050565b634e487b7160e01b600052602160045260246000fd5b600381106142f8576142f86142d2565b9052565b600081518084526020808501808196508360051b8101915082860160005b858110156143445782840389526143328483516142a6565b9885019893509084019060010161431a565b5091979650505050505050565b602081526000825160e0602084015261436e6101008401826142a6565b9050602084015161438260408501826142e8565b506040840151151560608401526060840151601f19808584030160808601526143ab83836142fc565b925060808601519150808584030160a08601526143c883836142a6565b925060a086015160c086015260c08601519150808584030160e0860152506143f082826142a6565b95945050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715614437576144376143f9565b604052919050565b60006001600160401b03821115614458576144586143f9565b50601f01601f191660200190565b60006144796144748461443f565b61440f565b905082815283838301111561448d57600080fd5b828260208301376000602084830101529392505050565b600080604083850312156144b757600080fd5b82356144c28161411a565b915060208301356001600160401b038111156144dd57600080fd5b8301601f810185136144ee57600080fd5b6144fd85823560208401614466565b9150509250929050565b60008060006040848603121561451c57600080fd5b83356001600160401b0381111561453257600080fd5b61453e8682870161414c565b90945092505060208401356145528161411a565b809150509250925092565b600060e08284031215613f2b57600080fd5b6000806040838503121561458257600080fd5b82356001600160401b038082111561459957600080fd5b6145a58683870161455d565b935060208501359150808211156145bb57600080fd5b506144fd85828601613f9d565b6020815260006123d860208301846142a6565b600082601f8301126145ec57600080fd5b6123d883833560208501614466565b6000806040838503121561460e57600080fd5b82356001600160401b0381111561462457600080fd5b614630858286016145db565b92505060208301356146418161411a565b809150509250929050565b60006020828403121561465e57600080fd5b5035919050565b6000806020838503121561467857600080fd5b82356001600160401b0381111561468e57600080fd5b61469a8582860161414c565b90969095509350505050565b6000806000604084860312156146bb57600080fd5b8335925060208401356001600160401b038111156146d857600080fd5b6146e48682870161414c565b9497909650939450505050565b6000806000806060858703121561470757600080fd5b84356001600160401b038082111561471e57600080fd5b61472a8883890161455d565b9550602087013591508082111561474057600080fd5b61474c8883890161414c565b9095509350604087013591508082111561476557600080fd5b5061477287828801613f9d565b91505092959194509250565b80356001600160401b038116811461330257600080fd5b600080600080606085870312156147ab57600080fd5b8435935060208501356001600160401b038111156147c857600080fd5b6147d48782880161414c565b90945092506147e790506040860161477e565b905092959194509250565b6000806000806000806080878903121561480b57600080fd5b86356001600160401b038082111561482257600080fd5b61482e8a838b0161414c565b90985096506020890135955060408901359450606089013591508082111561485557600080fd5b5061486289828a0161414c565b979a9699509497509295939492505050565b60008060006060848603121561488957600080fd5b83356148948161411a565b92506020840135915060408401356001600160401b038111156148b657600080fd5b6148c286828701613f9d565b9150509250925092565b6000808335601e198436030181126148e357600080fd5b8301803591506001600160401b038211156148fd57600080fd5b60200191503681900382131561347f57600080fd5b634e487b7160e01b600052603260045260246000fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000614965604083018587614928565b9050826020830152949350505050565b60006149836144748461443f565b905082815283838301111561499757600080fd5b6123d883602083018461427a565b600082601f8301126149b657600080fd5b6123d883835160208501614975565b6000602082840312156149d757600080fd5b81516001600160401b038111156149ed57600080fd5b612aa3848285016149a5565b600a81106142f8576142f86142d2565b6000808335601e19843603018112614a2057600080fd5b83016020810192503590506001600160401b03811115614a3f57600080fd5b80360382131561347f57600080fd5b614a58818b6149f9565b60006020614a688184018c6142e8565b60c06040840152614a7d60c084018a8c614928565b8381036060850152878152818101600589901b820183018a60005b8b811015614ad257848303601f19018452614ab3828e614a09565b614abe858284614928565b958801959450505090850190600101614a98565b50508581036080870152614ae781898b614928565b9450505050508260a08301529a9950505050505050505050565b6000808335601e19843603018112614b1857600080fd5b83016020810192503590506001600160401b03811115614b3757600080fd5b8060051b360382131561347f57600080fd5b60008235603e19833603018112614b5f57600080fd5b90910192915050565b6000606080835260a0808401614b7e8889614b01565b60408786018190529281905260059260c08089019083861b8a01018460005b85811015614cde578b830360bf19018452813536889003607e19018112614bc357600080fd5b87016080848101614bd48380614b01565b928752908290528b860191808c1b87018d0191908160005b82811015614c5c57898503609f19018652614c078285614b49565b614c118182614a09565b8e8852614c218f89018284614928565b9150506020614c3281840184614a09565b9350888303828a0152614c46838583614928565b9982019998505093909301925050600101614bec565b5050505060209150614c7082840184614a09565b87830384890152614c82838284614928565b92505050614c9288840184614a09565b8783038a890152614ca4838284614928565b92505050614cb48d840184614a09565b93508682038e880152614cc8828583614928565b9783019796505050929092019150600101614b9d565b505060208d013560808b015289810360208b0152614cfc818d6142a6565b97505050878603818901525050505050613d9181856142a6565b848152836020820152606060408201526000613d91606083018486614928565b81835260006020808501808196508560051b810191508460005b87811015614344578284038952614d678288614a09565b614d72868284614928565b9a87019a9550505090840190600101614d50565b614d90818b6142e8565b60c060208201526000614da760c083018a8c614d36565b8860408401528281036060840152614dc081888a614928565b905085608084015282810360a0840152614ddb818587614928565b9c9b505050505050505050505050565b600060208284031215614dfd57600080fd5b81516001600160401b03811115614e1357600080fd5b8201601f81018413614e2457600080fd5b612aa384825160208401614975565b60c081526000614e4660c083018b6142a6565b614e53602084018b6142e8565b88151560408401528281036060840152614e6e81888a614d36565b90508281036080840152614e83818688614928565b9150508260a08301529998505050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60a081526000614f4560a083018a8c614928565b614f52602084018a6142e8565b87151560408401528281036060840152614f6d818789614d36565b90508281036080840152614f82818587614928565b9b9a5050505050505050505050565b600181811c90821680614fa557607f821691505b602082108103613f2b57634e487b7160e01b600052602260045260246000fd5b60008235603e19833603018112614fdb57600080fd5b9190910192915050565b6000614ff18283614a09565b60408552615003604086018284614928565b915050602083013560208501528091505092915050565b6001600160401b038061502c8361477e565b1683528061503c6020840161477e565b166020840152505050565b6020815260006150578384614b49565b60e0602084015261506c610100840182614fe5565b905061507b6020850185614b49565b601f19808584030160408601526150928383614fe5565b92506150a06040870161477e565b91506001600160401b0380831660608701526150bf6060880188614a09565b9350828786030160808801526150d6858583614928565b9450506150e960a087016080890161501a565b806150f660c0890161477e565b1660e08701525050508091505092915050565b60006020828403121561511b57600080fd5b5051919050565b60006020828403121561513457600080fd5b6123d88261477e565b6001600160401b038481168252608082019061515c602084018661501a565b808416606084015250949350505050565b60006001600160401b0380831681851680830382111561519d57634e487b7160e01b600052601160045260246000fd5b01949350505050565b60006151b28283614b49565b60e084526151c360e0850182614fe5565b90506151d26020840184614b49565b84820360208601526151e48282614fe5565b9150506151f36040840161477e565b6001600160401b0380821660408701526152106060860186614a09565b92508684036060880152615225848483614928565b935050615238608087016080870161501a565b8061524560c0870161477e565b1660c087015250508091505092915050565b6020815260006123d860208301846151a6565b60006020828403121561527c57600080fd5b81516001600160401b038082111561529357600080fd5b90830190604082860312156152a757600080fd5b6040516040810181811083821117156152c2576152c26143f9565b60405282516152d081613f84565b81526020830151828111156152e457600080fd5b6152f0878286016149a5565b60208301525095945050505050565b8051151582526000602082015160406020850152612aa360408501826142a6565b6001600160401b03831681526040602082015260006123d560408301846152ff565b601f82111561154e57600081815260208120601f850160051c810160208610156153695750805b601f850160051c820191505b81811015612b4e57828155600101615375565b81516001600160401b038111156153a1576153a16143f9565b6153b5816153af8454614f91565b84615342565b602080601f8311600181146153ea57600084156153d25750858301515b600019600386901b1c1916600185901b178555612b4e565b600085815260208120601f198616915b82811015615419578886015182559484019460019091019084016153fa565b50858210156154375787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160401b0383111561545e5761545e6143f9565b6154728361546c8354614f91565b83615342565b6000601f8411600181146154a6576000851561548e5750838201355b600019600387901b1c1916600186901b178355615500565b600083815260209020601f19861690835b828110156154d757868501358255602094850194600190920191016154b7565b50868210156154f45760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b6020815260006123d5602083018486614928565b60408152600061552e60408301856151a6565b82810360208401526143f081856152ff565b8183823760009101908152919050565b606081526000615564606083018688614928565b6001600160401b039485166020840152929093166040909101529392505050565b606081526000615599606083018688614928565b6020830194909452506040015292915050565b6040815260006155bf60408301856142a6565b90508260208301529392505050565b6155d881886149f9565b600060206155e8818401896142e8565b60c060408401526155fc60c08401886142a6565b8381036060850152865180825282820190600581901b83018401848a0160005b8381101561564a57601f198684030185526156388383516142a6565b9487019492509086019060010161561c565b5050868103608088015261565e818a6142a6565b955050505050508260a0830152979650505050505050565b83815260606020820152600061568f60608301856142a6565b9050826040830152949350505050565b60008251614fdb81846020870161427a565b600080858511156156c157600080fd5b838611156156ce57600080fd5b5050820193919092039150565b6000602082840312156156ed57600080fd5b81516123d88161411a565b60008261571557634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160401b0380841115615734576157346143f9565b8360051b602061574581830161440f565b86815291850191818101903684111561575d57600080fd5b865b84811015615791578035868111156157775760008081fd5b61578336828b016145db565b84525091830191830161575f565b50979650505050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220bf8a17eff072122ba44ed6aa283e975964c11923f10fd06add4b4e9ef36c245264736f6c634300080f0033"; | |||
"0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000e7565b600054610100900460ff1615620000935760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e5576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6080516158d46200011f60003960008181610c1f01528181610c68015281816113c201528181611402015261149501526158d46000f3fe6080604052600436106101c25760003560e01c8063715018a6116100f7578063b12f89be11610095578063c899e27211610064578063c899e2721461051e578063e30c39781461053e578063f2fde38b1461055c578063f90b8e961461057c57600080fd5b8063b12f89be14610486578063ba5a4d25146104a6578063c00fa7c0146104c6578063c3e1155c146104e657600080fd5b80637ab4339d116100d15780637ab4339d1461040857806381bc079b146104285780638da5cb5b146104485780639f59ae711461046657600080fd5b8063715018a6146103bc5780637774a6d3146103d157806379ba5097146103f357600080fd5b8063478222c211610164578063556d51781161013e578063556d51781461033c5780635d7adf961461035c5780636050b5f31461037c5780636b67055e1461039c57600080fd5b8063478222c2146102cd5780634f1ef2861461030657806352d1902d1461031957600080fd5b80633659cfe6116101a05780633659cfe614610240578063418925b71461026057806342852d2414610280578063429446b6146102ad57600080fd5b80631eb9fc86146101c75780632494546b146101e95780632bf5d19d14610220575b600080fd5b3480156101d357600080fd5b506101e76101e2366004613fc6565b61059c565b005b3480156101f557600080fd5b5060fa546102069063ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b34801561022c57600080fd5b506101e761023b36600461409c565b610926565b34801561024c57600080fd5b506101e761025b366004614146565b610c15565b34801561026c57600080fd5b506101e761027b3660046141a4565b610cfd565b34801561028c57600080fd5b506102a061029b366004614265565b610db6565b6040516102179190614365565b3480156102b957600080fd5b506101e76102c8366004613fc6565b61110e565b3480156102d957600080fd5b50610105546102ee906001600160a01b031681565b6040516001600160a01b039091168152602001610217565b6101e76103143660046144b8565b6113b8565b34801561032557600080fd5b5061032e611488565b604051908152602001610217565b34801561034857600080fd5b506101e761035736600461451b565b61153b565b34801561036857600080fd5b506101e7610377366004614583565b611553565b34801561038857600080fd5b506101e7610397366004614583565b611863565b3480156103a857600080fd5b506101e76103b7366004614583565b611875565b3480156103c857600080fd5b506101e7611f7e565b3480156103dd57600080fd5b506103e6611f92565b60405161021791906145dc565b3480156103ff57600080fd5b506101e7612020565b34801561041457600080fd5b506101e761042336600461460f565b612097565b34801561043457600080fd5b506101e7610443366004614660565b612220565b34801561045457600080fd5b506033546001600160a01b03166102ee565b34801561047257600080fd5b506101e7610481366004614679565b6122e8565b34801561049257600080fd5b5061032e6104a13660046146ba565b61233d565b3480156104b257600080fd5b506101e76104c1366004614705565b6123f6565b3480156104d257600080fd5b506101e76104e1366004614679565b612932565b3480156104f257600080fd5b506105066105013660046147a9565b61296e565b6040516001600160401b039091168152602001610217565b34801561052a57600080fd5b506101e7610539366004614806565b612ac2565b34801561054a57600080fd5b506065546001600160a01b03166102ee565b34801561056857600080fd5b506101e7610577366004614146565b612b6d565b34801561058857600080fd5b506101e7610597366004614888565b612bde565b6105a461320b565b60028510156105c65760405163af0ba14d60e01b815260040160405180910390fd5b6105ec6105d388806148e0565b60208a01356105e286806148e0565b8760200135613264565b61064e8686600081811061060257610602614926565b905060200281019061061491906148e0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061329f92505050565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634f9b0fb36106818c806148e0565b8d602001356040518463ffffffff1660e01b81526004016106a493929190614965565b600060405180830381865af41580156106c1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106e991908101906149d9565b73__$d825222459c46c14afb2efe0967c30e98d$__6325e0dd0e60078a8e806040019061071691906148e0565b8f8f6107228e806148e0565b8f602001356040518a63ffffffff1660e01b815260040161074b99989796959493929190614a62565b600060405180830381865af4158015610768573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261079091908101906149d9565b6040518463ffffffff1660e01b81526004016107ae93929190614b7c565b600060405180830381600087803b1580156107c857600080fd5b505af11580156107dc573d6000803e3d6000fd5b50600092506107f791506107f2905089806148e0565b61331e565b9050600080610869836301d08fc560e71b6020808e01359089013561081f60408b018b6148e0565b6040516024016108329493929190614d2a565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526133b1565b9150915081156108ce57610882838b8b8b8b8b8b61349d565b826001600160a01b03167fcf8be9ab2b5edf8beb2c45abe8e0cc7646318ac19f6c3164ba2e19e93a8a32af8b602001356040516108c191815260200190565b60405180910390a2610910565b826001600160a01b03167f971a4433f5bff5f011728a4123aeeca4b5275ac20b013cf276e65510491ac26f8260405161090791906145dc565b60405180910390a25b50505061091d6001609755565b50505050505050565b61092e61320b565b6002831461094f5760405163af0ba14d60e01b815260040160405180910390fd5b61095c6105d388806148e0565b6109728484600081811061060257610602614926565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634f9b0fb36109a58c806148e0565b8d602001356040518463ffffffff1660e01b81526004016109c893929190614965565b600060405180830381865af41580156109e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a0d91908101906149d9565b73__$d825222459c46c14afb2efe0967c30e98d$__6325e0dd0e60068c8e8060400190610a3a91906148e0565b8d8d610a468e806148e0565b8f602001356040518a63ffffffff1660e01b8152600401610a6f99989796959493929190614a62565b600060405180830381865af4158015610a8c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ab491908101906149d9565b6040518463ffffffff1660e01b8152600401610ad293929190614b7c565b600060405180830381600087803b158015610aec57600080fd5b505af1158015610b00573d6000803e3d6000fd5b5060009250610b1691506107f2905089806148e0565b9050600080610b6c83634bdb559760e01b8b8a8a8f602001358b8060000190610b3f91906148e0565b8d602001358e8060400190610b5491906148e0565b60405160240161083299989796959493929190614d97565b915091508115610bdc57826001600160a01b03167ff910705a7a768eb5958f281a5f84cae8bffc5dd811ca5cd303dda140a423698c82806020019051810190610bb59190614dfc565b8b8b8b8b610bc38c806148e0565b8d602001356040516108c1989796959493929190614e44565b826001600160a01b03167f9e2fe55a3b54b57f82334c273f8d048cd7f05ad19c16cf334276a8c1fec4b6fd8260405161090791906145dc565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c665760405162461bcd60e51b8152600401610c5d90614eaa565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610caf600080516020615858833981519152546001600160a01b031690565b6001600160a01b031614610cd55760405162461bcd60e51b8152600401610c5d90614ef6565b610cde8161373d565b60408051600080825260208201909252610cfa91839190613745565b50565b610d0561320b565b600283141580610d13575080155b15610d3157604051637d6ba8a560e01b815260040160405180910390fd5b6000879003610d535760405163f61bbcf360e01b815260040160405180910390fd5b336001600160a01b03167f20fd8a5856711b18d00def4aa6abafbe00ce6d60795e015cc1cad35eb9b463598989898989898989604051610d9a989796959493929190614f42565b60405180910390a2610dac6001609755565b5050505050505050565b610dfc6040805160e08101909152606081526020810160008152602001600015158152602001606081526020016060815260200160008019168152602001606081525090565b6001600160a01b038316600090815260fb6020908152604080832085845290915290819020815160e08101909252805482908290610e3990614fa2565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6590614fa2565b8015610eb25780601f10610e8757610100808354040283529160200191610eb2565b820191906000526020600020905b815481529060010190602001808311610e9557829003601f168201915b5050509183525050600182015460209091019060ff166002811115610ed957610ed96142e9565b6002811115610eea57610eea6142e9565b81526001820154610100900460ff161515602080830191909152600283018054604080518285028101850182528281529401939260009084015b82821015610fd0578382906000526020600020018054610f4390614fa2565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6f90614fa2565b8015610fbc5780601f10610f9157610100808354040283529160200191610fbc565b820191906000526020600020905b815481529060010190602001808311610f9f57829003601f168201915b505050505081526020019060010190610f24565b505050508152602001600382018054610fe890614fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461101490614fa2565b80156110615780601f1061103657610100808354040283529160200191611061565b820191906000526020600020905b81548152906001019060200180831161104457829003601f168201915b505050505081526020016004820154815260200160058201805461108490614fa2565b80601f01602080910402602001604051908101604052809291908181526020018280546110b090614fa2565b80156110fd5780601f106110d2576101008083540402835291602001916110fd565b820191906000526020600020905b8154815290600101906020018083116110e057829003601f168201915b505050505081525050905092915050565b61111661320b565b60028510156111385760405163af0ba14d60e01b815260040160405180910390fd5b6111456105d388806148e0565b61115b8686600081811061060257610602614926565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634f9b0fb361118e8c806148e0565b8d602001356040518463ffffffff1660e01b81526004016111b193929190614965565b600060405180830381865af41580156111ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111f691908101906149d9565b73__$d825222459c46c14afb2efe0967c30e98d$__6325e0dd0e60088a8e806040019061122391906148e0565b8f8f61122f8e806148e0565b8f602001356040518a63ffffffff1660e01b815260040161125899989796959493929190614a62565b600060405180830381865af4158015611275573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261129d91908101906149d9565b6040518463ffffffff1660e01b81526004016112bb93929190614b7c565b600060405180830381600087803b1580156112d557600080fd5b505af11580156112e9573d6000803e3d6000fd5b50600092506112ff91506107f2905089806148e0565b90506000806113278363fad28a2460e01b8c6020013560405160240161083291815260200190565b91509150811561137f57611340838b8b8b8b8b8b61349d565b826001600160a01b03167fe80f571f70f7cabf9d7ac60ece08421be374117776c311c327a083ca398f802f8b602001356040516108c191815260200190565b826001600160a01b03167ff6a58ef30f66943749e8c29c661c84da143a1c8ed017f5faa92b509e0000875a8260405161090791906145dc565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036114005760405162461bcd60e51b8152600401610c5d90614eaa565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611449600080516020615858833981519152546001600160a01b031690565b6001600160a01b03161461146f5760405162461bcd60e51b8152600401610c5d90614ef6565b6114788261373d565b61148482826001613745565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115285760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610c5d565b5060008051602061585883398151915290565b6115436138b0565b61154e83838361390a565b505050565b61155b61320b565b61157461156b6020840184614fd6565b602001356139a5565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634b5728d1866040518263ffffffff1660e01b81526004016115ba9190615058565b600060405180830381865af41580156115d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115ff91908101906149d9565b604051637e4794ed60e11b815273__$d825222459c46c14afb2efe0967c30e98d$__9063fc8f29da90611636908990600401615058565b602060405180830381865af4158015611653573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611677919061511a565b60405160200161168991815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b81526004016116b693929190614b7c565b600060405180830381600087803b1580156116d057600080fd5b505af11580156116e4573d6000803e3d6000fd5b5050505060006117078380602001906116fd9190614fd6565b6107f290806148e0565b6001600160a01b0381166000908152610100602090815260408220929350909190829061173690870187614fd6565b602001358152602001908152602001600020600085604001602081019061175d9190615133565b6001600160401b0316815260208101919091526040016000205460ff169050801561179b5760405163066c745760e01b815260040160405180910390fd5b6117c36117ae60e0860160c08701615133565b6117be60c0870160a08801615133565b613a70565b6117e0576040516312c9cc9f60e01b815260040160405180910390fd5b6117ed6020850185614fd6565b602001356001600160a01b0383167fedbcd9eeb09d85c3ea1b5bf002c04478059cb261cab82c903885cefccae374bc61182c6060880160408901615133565b6080880161184060e08a0160c08b01615133565b60405161184f9392919061514e565b60405180910390a350506114846001609755565b61186b61320b565b6114846001609755565b61187d61320b565b61188d61156b6020840184614fd6565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634b5728d1866040518263ffffffff1660e01b81526004016118d39190615058565b600060405180830381865af41580156118f0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261191891908101906149d9565b604051637e4794ed60e11b815273__$d825222459c46c14afb2efe0967c30e98d$__9063fc8f29da9061194f908990600401615058565b602060405180830381865af415801561196c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611990919061511a565b6040516020016119a291815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b81526004016119cf93929190614b7c565b600060405180830381600087803b1580156119e957600080fd5b505af11580156119fd573d6000803e3d6000fd5b505050506000611a168380602001906116fd9190614fd6565b6001600160a01b03811660009081526101006020908152604082209293509091908290611a4590870187614fd6565b6020013581526020019081526020016000206000856040016020810190611a6c9190615133565b6001600160401b0316815260208101919091526040016000205460ff1690508015611aaa5760405163066c745760e01b815260040160405180910390fd5b6001600160a01b03821660009081526101006020908152604082206001929091611ad690880188614fd6565b6020013581526020019081526020016000206000866040016020810190611afd9190615133565b6001600160401b031681526020810191909152604001600020805460ff191691151591909117905560026001600160a01b038316600090815260fb6020908152604082209190611b4f90880188614fd6565b60209081013582528101919091526040016000206001015460ff166002811115611b7b57611b7b6142e9565b03611c7a576001600160a01b038216600090815260fd6020908152604082209190611ba890870187614fd6565b60209081013582528101919091526040908101600020546001600160401b031690611bd99060608701908701615133565b6001600160401b031614611c005760405163362a414d60e01b815260040160405180910390fd5b611c106060850160408601615133565b611c1b90600161517e565b6001600160a01b038316600090815260fd6020908152604082209190611c4390880188614fd6565b60200135815260200190815260200160002060006101000a8154816001600160401b0302191690836001600160401b031602179055505b611c876020850185614fd6565b602001356001600160a01b0383167fde5b57e6566d68a30b0979431df3d5df6db3b9aa89f8820f595b9315bf86d067611cc66060880160408901615133565b6040516001600160401b03909116815260200160405180910390a3611cf46117ae60e0860160c08701615133565b15611d7757611d066020850185614fd6565b602001356001600160a01b0383167fedbcd9eeb09d85c3ea1b5bf002c04478059cb261cab82c903885cefccae374bc611d456060880160408901615133565b60808801611d5960e08a0160c08b01615133565b604051611d689392919061514e565b60405180910390a3505061186b565b6040805180820190915260008152606060208201526000806000611dae86634dcc0aa660e01b8a6040516024016108329190615268565b915091508115611de75780806020019051810190611dcc91906152f4565b90945092508215611de25750505050505061186b565b611dff565b60408051808201909152600081526020810182905293505b6001600160a01b0386166000908152610101602090815260408220908290611e29908c018c614fd6565b60200135815260200190815260200160002060008a6040016020810190611e509190615133565b6001600160401b0316815260208101919091526040016000205460ff1690508015611e8e57604051637aa549d360e01b815260040160405180910390fd5b6001600160a01b03871660009081526101016020908152604082206001929091611eba908d018d614fd6565b60200135815260200190815260200160002060008b6040016020810190611ee19190615133565b6001600160401b03168152602080820192909252604001600020805460ff191692151592909217909155611f17908a018a614fd6565b602001356001600160a01b0388167fa32e6f42b1d63fb83ad73b009a6dbb9413d1da02e95b1bb08f081815eea8db20611f5660608d0160408e01615133565b88604051611f6592919061535b565b60405180910390a3505050505050506114846001609755565b611f866138b0565b611f906000613abe565b565b60f98054611f9f90614fa2565b80601f0160208091040260200160405190810160405280929190818152602001828054611fcb90614fa2565b80156120185780601f10611fed57610100808354040283529160200191612018565b820191906000526020600020905b815481529060010190602001808311611ffb57829003601f168201915b505050505081565b60655433906001600160a01b0316811461208e5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610c5d565b610cfa81613abe565b600054600290610100900460ff161580156120b9575060005460ff8083169116105b61211c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c5d565b6000805461ffff191660ff83161761010017905561213861320b565b825160000361215a5760405163e8cf362360e01b815260040160405180910390fd5b6001600160a01b0382166121815760405163cbdd34cf60e01b815260040160405180910390fd5b612189613ad7565b612191613b06565b60f961219d84826153c3565b50825160fa805463ffffffff191663ffffffff90921691909117905561010580546001600160a01b0319166001600160a01b03841617905560016097556000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b61222861320b565b61223181613b35565b33600090815260fb602090815260408083208484529091528120906122568282613e50565b60018201805461ffff19169055612271600283016000613e8a565b61227f600383016000613e50565b60048201600090556005820160006122979190613e50565b50506000818152610103602052604081206122b191613e50565b604051819033907f21372e37743553ba8e5f61239803174a827c7732d53ec8adcb76c6b3bb2c13f190600090a3610cfa6001609755565b6122f06138b0565b60008190036123125760405163e8cf362360e01b815260040160405180910390fd5b60f961231f828483615482565b5060fa805463ffffffff191663ffffffff9290921691909117905550565b600061237e83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061329f92505050565b6001600160a01b03166344c9af28856040518263ffffffff1660e01b81526004016123ab91815260200190565b602060405180830381865afa1580156123c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ec919061511a565b90505b9392505050565b6123fe61320b565b600061240d6116fd8680614fd6565b905061241c61156b8680614fd6565b6001600160a01b031663cb535ab58373__$d825222459c46c14afb2efe0967c30e98d$__6311a7a373896040518263ffffffff1660e01b81526004016124629190615058565b600060405180830381865af415801561247f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124a791908101906149d9565b6040516374e9704560e01b815273__$d825222459c46c14afb2efe0967c30e98d$__906374e97045906124e0908b908b90600401615542565b602060405180830381865af41580156124fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612521919061511a565b60405160200161253391815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b815260040161256093929190614b7c565b600060405180830381600087803b15801561257a57600080fd5b505af115801561258e573d6000803e3d6000fd5b505050506001600160a01b038116600090815260ff60205260408120816125b58880614fd6565b60200135815260200190815260200160002060008760400160208101906125dc9190615133565b6001600160401b0316815260208101919091526040016000205460ff169050806126195760405163ca89746b60e01b815260040160405180910390fd5b6000806126b884637e1d42b560e01b8a73__$d825222459c46c14afb2efe0967c30e98d$__63360b8cd78c8c6040518363ffffffff1660e01b8152600401612662929190615542565b600060405180830381865af415801561267f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126a79190810190615556565b60405160240161083292919061558a565b9150915081156128dc5760026001600160a01b038516600090815260fb60205260408120906126e78b80614fd6565b60209081013582528101919091526040016000206001015460ff166002811115612713576127136142e9565b03612808576001600160a01b038416600090815260fe602052604081209061273b8a80614fd6565b60209081013582528101919091526040908101600020546001600160401b03169061276c9060608b01908b01615133565b6001600160401b0316146127935760405163362a414d60e01b815260040160405180910390fd5b6127a36060890160408a01615133565b6127ae90600161517e565b6001600160a01b038516600090815260fe60205260408120906127d18b80614fd6565b60200135815260200190815260200160002060006101000a8154816001600160401b0302191690836001600160401b031602179055505b6001600160a01b038416600090815260ff602052604081209061282b8a80614fd6565b60200135815260200190815260200160002060008960400160208101906128529190615133565b6001600160401b031681526020810191909152604001600020805460ff1916905561287d8880614fd6565b602001356001600160a01b0385167fe46f6591236abe528fe47a3b281fb002524dadd3e62b1f317ed285d07273c3b16128bc60608c0160408d01615133565b6040516001600160401b03909116815260200160405180910390a361291e565b836001600160a01b03167f625eea143c9dae6915c809da47016c22d9cd006c3ace7c345c5cbcf57d3aefbc8260405161291591906145dc565b60405180910390a25b5050505061292c6001609755565b50505050565b61293a6138b0565b610104828260405161294d9291906155af565b90815260405190819003602001902080546001600160a01b03191690555050565b600061297861320b565b61298185613b35565b42826001600160401b0316116129aa5760405163551ea0fb60e11b815260040160405180910390fd5b5033600090815260fc602090815260408083208784529091528120546001600160401b0316908190036129f057604051631e510bfb60e21b815260040160405180910390fd5b33600090815260ff6020908152604080832088845282528083206001600160401b03851684529091529020805460ff19166001908117909155612a3490829061517e565b33600081815260fc602090815260408083208a845290915290819020805467ffffffffffffffff19166001600160401b03949094169390931790925590518691907fb5bff96e18da044e4e34510d16df9053b9f1920f6a960732e5aaf22fe9b8013690612aa89088908890879089906155bf565b60405180910390a3612aba6001609755565b949350505050565b612b0182828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061329f92505050565b6001600160a01b03166349ff245e878787876040518563ffffffff1660e01b8152600401612b3294939291906155f4565b600060405180830381600087803b158015612b4c57600080fd5b505af1158015612b60573d6000803e3d6000fd5b505050505b505050505050565b612b756138b0565b606580546001600160a01b0383166001600160a01b03199091168117909155612ba66033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b612be661320b565b6001600160a01b038316612c0d5760405163cbdd34cf60e01b815260040160405180910390fd5b6001600160a01b038316600090815260fb60209081526040808320858452909152808220815160e08101909252805482908290612c4990614fa2565b80601f0160208091040260200160405190810160405280929190818152602001828054612c7590614fa2565b8015612cc25780601f10612c9757610100808354040283529160200191612cc2565b820191906000526020600020905b815481529060010190602001808311612ca557829003601f168201915b5050509183525050600182015460209091019060ff166002811115612ce957612ce96142e9565b6002811115612cfa57612cfa6142e9565b81526001820154610100900460ff161515602080830191909152600283018054604080518285028101850182528281529401939260009084015b82821015612de0578382906000526020600020018054612d5390614fa2565b80601f0160208091040260200160405190810160405280929190818152602001828054612d7f90614fa2565b8015612dcc5780601f10612da157610100808354040283529160200191612dcc565b820191906000526020600020905b815481529060010190602001808311612daf57829003601f168201915b505050505081526020019060010190612d34565b505050508152602001600382018054612df890614fa2565b80601f0160208091040260200160405190810160405280929190818152602001828054612e2490614fa2565b8015612e715780601f10612e4657610100808354040283529160200191612e71565b820191906000526020600020905b815481529060010190602001808311612e5457829003601f168201915b5050505050815260200160048201548152602001600582018054612e9490614fa2565b80601f0160208091040260200160405190810160405280929190818152602001828054612ec090614fa2565b8015612f0d5780601f10612ee257610100808354040283529160200191612f0d565b820191906000526020600020905b815481529060010190602001808311612ef057829003601f168201915b5050509190925250505060a0810151909150612f3c57604051634d93b09d60e11b815260040160405180910390fd5b612f45836139a5565b6001600160a01b031663cb535ab58373__$d825222459c46c14afb2efe0967c30e98d$__636f6547268560c00151886040518363ffffffff1660e01b8152600401612f9192919061561b565b600060405180830381865af4158015612fae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612fd691908101906149d9565b602085015185516060870151608088015160a0890151604051631f621e1560e31b815273__$d825222459c46c14afb2efe0967c30e98d$__9563fb10f0a89561302c95600995929491939092919060040161563d565b600060405180830381865af4158015613049573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261307191908101906149d9565b6040518463ffffffff1660e01b815260040161308f93929190614b7c565b600060405180830381600087803b1580156130a957600080fd5b505af11580156130bd573d6000803e3d6000fd5b505050506000806130ed86633f9fdbe460e01b8786608001518760a00151604051602401610832939291906156e5565b6001600160a01b038816600090815260fb602090815260408083208a845290915281209294509092506131208282613e50565b60018201805461ffff1916905561313b600283016000613e8a565b613149600383016000613e50565b60048201600090556005820160006131619190613e50565b505060008581526101036020526040812061317b91613e50565b81156131bc5760405185906001600160a01b038816907f5f010dbbd6bf46aec8131c5456301a75cd688d3cca9bc8380c9e26301be2072990600090a36131fe565b856001600160a01b03167fc9d36d7a317cb116925d5cb66f0069fe825822fe23e9cf3f421c38cf444caa30826040516131f591906145dc565b60405180910390a25b50505061154e6001609755565b60026097540361325d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002609755565b84158061326f575081155b80613278575083155b80613281575080155b15612b6557604051637d6ba8a560e01b815260040160405180910390fd5b600081516000036132cd5760405163524e171160e01b81526020600482015260006024820152604401610c5d565b610104826040516132de919061570e565b908152604051908190036020019020546001600160a01b0316905080613319578160405163036c4d8760e11b8152600401610c5d91906145dc565b919050565b60fa5460009073__$f61eb90c6f674e787d51c07f105fa231e2$__9063a1ef9a989061335390859063ffffffff168188615720565b6040518363ffffffff1660e01b8152600401613370929190615542565b602060405180830381865af415801561338d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ef919061574a565b600060606001600160a01b0384163b6133f957505060408051808201909152601481527318d85b1b081d1bc81b9bdb8b58dbdb9d1c9858dd60621b6020820152600090613496565b60005a9050846001600160a01b031684604051613416919061570e565b6000604051808303816000865af19150503d8060008114613453576040519150601f19603f3d011682016040523d82523d6000602084013e613458565b606091505b509093509150821580156134765750613472604082615767565b5a11155b156134945760405163b08ede0960e01b815260040160405180910390fd5b505b9250929050565b6040518060e001604052808780604001906134b891906148e0565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602001846002811115613504576135046142e9565b8152831515602082015260400161351b8688615789565b815260200161352a83806148e0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252506020838101359082015260400161357888806148e0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160a01b038a16815260fb602090815260408083208b83013584529091529020825190915081906135e290826153c3565b50602082015160018083018054909160ff199091169083600281111561360a5761360a6142e9565b021790555060408201516001820180549115156101000261ff001990921691909117905560608201518051613649916002840191602090910190613ea8565b506080820151600382019061365e90826153c3565b5060a0820151600482015560c0820151600582019061367d90826153c3565b5050506001600160a01b038716600081815260fc602090815260408083208a8301358085529083528184208054600167ffffffffffffffff19918216811790925586865260fd85528386208387528552838620805482168317905595855260fe845282852091855292528220805490931617909155859085908161370357613703614926565b905060200281019061371591906148e0565b60208089013560009081526101039091526040902091610dac919083615482565b6001609755565b610cfa6138b0565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156137785761154e83613b70565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156137d2575060408051601f3d908101601f191682019092526137cf9181019061511a565b60015b6138355760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610c5d565b60008051602061585883398151915281146138a45760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610c5d565b5061154e838383613c0c565b6033546001600160a01b03163314611f905760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c5d565b60008290036139365760405163524e171160e01b81526020600482015260006024820152604401610c5d565b6001600160a01b03811661395d5760405163cbdd34cf60e01b815260040160405180910390fd5b8061010484846040516139719291906155af565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055505050565b60008181526101036020526040812080548291906139c290614fa2565b80601f01602080910402602001604051908101604052809291908181526020018280546139ee90614fa2565b8015613a3b5780601f10613a1057610100808354040283529160200191613a3b565b820191906000526020600020905b815481529060010190602001808311613a1e57829003601f168201915b505050505090508051600003613a67576040516363b99a9d60e11b815260048101849052602401610c5d565b6123ef8161329f565b60006001600160401b03831615801590613a935750826001600160401b03164210155b806123ef57506001600160401b038216158015906123ef5750506001600160401b0316431015919050565b606580546001600160a01b0319169055610cfa81613c31565b600054610100900460ff16613afe5760405162461bcd60e51b8152600401610c5d9061580c565b611f90613c83565b600054610100900460ff16613b2d5760405162461bcd60e51b8152600401610c5d9061580c565b611f90613cb3565b33600090815260fb60209081526040808320848452909152902060040154610cfa57604051631109bfb360e31b815260040160405180910390fd5b6001600160a01b0381163b613bdd5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610c5d565b60008051602061585883398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b613c1583613cda565b600082511180613c225750805b1561154e5761292c8383613d1a565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16613caa5760405162461bcd60e51b8152600401610c5d9061580c565b611f9033613abe565b600054610100900460ff166137365760405162461bcd60e51b8152600401610c5d9061580c565b613ce381613b70565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606123ef8383604051806060016040528060278152602001615878602791396060600080856001600160a01b031685604051613d57919061570e565b600060405180830381855af49150503d8060008114613d92576040519150601f19603f3d011682016040523d82523d6000602084013e613d97565b606091505b5091509150613da886838387613db2565b9695505050505050565b60608315613e21578251600003613e1a576001600160a01b0385163b613e1a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c5d565b5081612aba565b612aba8383815115613e365781518083602001fd5b8060405162461bcd60e51b8152600401610c5d91906145dc565b508054613e5c90614fa2565b6000825580601f10613e6c575050565b601f016020900490600052602060002090810190610cfa9190613efe565b5080546000825590600052602060002090810190610cfa9190613f13565b828054828255906000526020600020908101928215613eee579160200282015b82811115613eee5782518290613ede90826153c3565b5091602001919060010190613ec8565b50613efa929150613f13565b5090565b5b80821115613efa5760008155600101613eff565b80821115613efa576000613f278282613e50565b50600101613f13565b600060608284031215613f4257600080fd5b50919050565b60008083601f840112613f5a57600080fd5b5081356001600160401b03811115613f7157600080fd5b6020830191508360208260051b850101111561349657600080fd5b80356003811061331957600080fd5b8015158114610cfa57600080fd5b803561331981613f9b565b600060408284031215613f4257600080fd5b600080600080600080600060c0888a031215613fe157600080fd5b87356001600160401b0380821115613ff857600080fd5b6140048b838c01613f30565b985060208a013591508082111561401a57600080fd5b6140268b838c01613f48565b909850965086915061403a60408b01613f8c565b955061404860608b01613fa9565b945060808a013591508082111561405e57600080fd5b61406a8b838c01613f30565b935060a08a013591508082111561408057600080fd5b5061408d8a828b01613fb4565b91505092959891949750929550565b600080600080600080600060c0888a0312156140b757600080fd5b87356001600160401b03808211156140ce57600080fd5b6140da8b838c01613f30565b98506140e860208b01613f8c565b97506140f660408b01613fa9565b965060608a013591508082111561410c57600080fd5b6141188b838c01613f48565b909650945060808a013591508082111561405e57600080fd5b6001600160a01b0381168114610cfa57600080fd5b60006020828403121561415857600080fd5b81356123ef81614131565b60008083601f84011261417557600080fd5b5081356001600160401b0381111561418c57600080fd5b60208301915083602082850101111561349657600080fd5b60008060008060008060008060a0898b0312156141c057600080fd5b88356001600160401b03808211156141d757600080fd5b6141e38c838d01614163565b909a5098508891506141f760208c01613f8c565b975060408b0135915061420982613f9b565b90955060608a0135908082111561421f57600080fd5b61422b8c838d01613f48565b909650945060808b013591508082111561424457600080fd5b506142518b828c01614163565b999c989b5096995094979396929594505050565b6000806040838503121561427857600080fd5b823561428381614131565b946020939093013593505050565b60005b838110156142ac578181015183820152602001614294565b8381111561292c5750506000910152565b600081518084526142d5816020860160208601614291565b601f01601f19169290920160200192915050565b634e487b7160e01b600052602160045260246000fd5b6003811061430f5761430f6142e9565b9052565b6000815180845260208085019450848260051b860182860160005b858110156143585783830389526143468383516142bd565b9885019892509084019060010161432e565b5090979650505050505050565b602081526000825160e060208401526143826101008401826142bd565b9050602084015161439660408501826142ff565b506040840151151560608401526060840151601f19808584030160808601526143bf8383614313565b925060808601519150808584030160a08601526143dc83836142bd565b925060a086015160c086015260c08601519150808584030160e08601525061440482826142bd565b95945050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561444b5761444b61440d565b604052919050565b60006001600160401b0382111561446c5761446c61440d565b50601f01601f191660200190565b600061448d61448884614453565b614423565b90508281528383830111156144a157600080fd5b828260208301376000602084830101529392505050565b600080604083850312156144cb57600080fd5b82356144d681614131565b915060208301356001600160401b038111156144f157600080fd5b8301601f8101851361450257600080fd5b6145118582356020840161447a565b9150509250929050565b60008060006040848603121561453057600080fd5b83356001600160401b0381111561454657600080fd5b61455286828701614163565b909450925050602084013561456681614131565b809150509250925092565b600060e08284031215613f4257600080fd5b6000806040838503121561459657600080fd5b82356001600160401b03808211156145ad57600080fd5b6145b986838701614571565b935060208501359150808211156145cf57600080fd5b5061451185828601613fb4565b6020815260006123ef60208301846142bd565b600082601f83011261460057600080fd5b6123ef8383356020850161447a565b6000806040838503121561462257600080fd5b82356001600160401b0381111561463857600080fd5b614644858286016145ef565b925050602083013561465581614131565b809150509250929050565b60006020828403121561467257600080fd5b5035919050565b6000806020838503121561468c57600080fd5b82356001600160401b038111156146a257600080fd5b6146ae85828601614163565b90969095509350505050565b6000806000604084860312156146cf57600080fd5b8335925060208401356001600160401b038111156146ec57600080fd5b6146f886828701614163565b9497909650939450505050565b6000806000806060858703121561471b57600080fd5b84356001600160401b038082111561473257600080fd5b61473e88838901614571565b9550602087013591508082111561475457600080fd5b61476088838901614163565b9095509350604087013591508082111561477957600080fd5b5061478687828801613fb4565b91505092959194509250565b80356001600160401b038116811461331957600080fd5b600080600080606085870312156147bf57600080fd5b8435935060208501356001600160401b038111156147dc57600080fd5b6147e887828801614163565b90945092506147fb905060408601614792565b905092959194509250565b6000806000806000806080878903121561481f57600080fd5b86356001600160401b038082111561483657600080fd5b6148428a838b01614163565b90985096506020890135955060408901359450606089013591508082111561486957600080fd5b5061487689828a01614163565b979a9699509497509295939492505050565b60008060006060848603121561489d57600080fd5b83356148a881614131565b92506020840135915060408401356001600160401b038111156148ca57600080fd5b6148d686828701613fb4565b9150509250925092565b6000808335601e198436030181126148f757600080fd5b8301803591506001600160401b0382111561491157600080fd5b60200191503681900382131561349657600080fd5b634e487b7160e01b600052603260045260246000fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60408152600061497960408301858761493c565b9050826020830152949350505050565b600061499761448884614453565b90508281528383830111156149ab57600080fd5b6123ef836020830184614291565b600082601f8301126149ca57600080fd5b6123ef83835160208501614989565b6000602082840312156149eb57600080fd5b81516001600160401b03811115614a0157600080fd5b612aba848285016149b9565b600a811061430f5761430f6142e9565b6000808335601e19843603018112614a3457600080fd5b83016020810192503590506001600160401b03811115614a5357600080fd5b80360382131561349657600080fd5b614a6c818b614a0d565b60006020614a7c8184018c6142ff565b60c06040840152614a9160c084018a8c61493c565b8381036060850152878152818101600589901b820183018a60005b8b811015614ae657848303601f19018452614ac7828e614a1d565b614ad285828461493c565b958801959450505090850190600101614aac565b50508581036080870152614afb81898b61493c565b9450505050508260a08301529a9950505050505050505050565b6000808335601e19843603018112614b2c57600080fd5b83016020810192503590506001600160401b03811115614b4b57600080fd5b8060051b360382131561349657600080fd5b60008235603e19833603018112614b7357600080fd5b90910192915050565b6000606080835260a0808401614b928889614b15565b60408786018190529281905260059260c08089019083861b8a01018460005b85811015614cf2578b830360bf19018452813536889003607e19018112614bd757600080fd5b87016080848101614be88380614b15565b928752908290528b860191808c1b87018d0191908160005b82811015614c7057898503609f19018652614c1b8285614b5d565b614c258182614a1d565b8e8852614c358f8901828461493c565b9150506020614c4681840184614a1d565b9350888303828a0152614c5a83858361493c565b9982019998505093909301925050600101614c00565b5050505060209150614c8482840184614a1d565b87830384890152614c9683828461493c565b92505050614ca688840184614a1d565b8783038a890152614cb883828461493c565b92505050614cc88d840184614a1d565b93508682038e880152614cdc82858361493c565b9783019796505050929092019150600101614bb1565b505060208d013560808b015289810360208b0152614d10818d6142bd565b97505050878603818901525050505050613da881856142bd565b848152836020820152606060408201526000613da860608301848661493c565b818352600060208085019450848460051b86018460005b87811015614358578383038952614d788288614a1d565b614d8385828461493c565b9a87019a9450505090840190600101614d61565b614da1818b6142ff565b60c060208201526000614db860c083018a8c614d4a565b8860408401528281036060840152614dd181888a61493c565b905085608084015282810360a0840152614dec81858761493c565b9c9b505050505050505050505050565b600060208284031215614e0e57600080fd5b81516001600160401b03811115614e2457600080fd5b8201601f81018413614e3557600080fd5b612aba84825160208401614989565b60c081526000614e5760c083018b6142bd565b614e64602084018b6142ff565b88151560408401528281036060840152614e7f81888a614d4a565b90508281036080840152614e9481868861493c565b9150508260a08301529998505050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60a081526000614f5660a083018a8c61493c565b614f63602084018a6142ff565b87151560408401528281036060840152614f7e818789614d4a565b90508281036080840152614f9381858761493c565b9b9a5050505050505050505050565b600181811c90821680614fb657607f821691505b602082108103613f4257634e487b7160e01b600052602260045260246000fd5b60008235603e19833603018112614fec57600080fd5b9190910192915050565b60006150028283614a1d565b6040855261501460408601828461493c565b915050602083013560208501528091505092915050565b6001600160401b038061503d83614792565b1683528061504d60208401614792565b166020840152505050565b6020815260006150688384614b5d565b60e0602084015261507d610100840182614ff6565b905061508c6020850185614b5d565b601f19808584030160408601526150a38383614ff6565b92506150b160408701614792565b91506001600160401b0380831660608701526150d06060880188614a1d565b9350828786030160808801526150e785858361493c565b9450506150fa60a087016080890161502b565b8061510760c08901614792565b1660e08701525050508091505092915050565b60006020828403121561512c57600080fd5b5051919050565b60006020828403121561514557600080fd5b6123ef82614792565b6001600160401b038481168252608082019061516d602084018661502b565b808416606084015250949350505050565b60006001600160401b038083168185168083038211156151ae57634e487b7160e01b600052601160045260246000fd5b01949350505050565b60006151c38283614b5d565b60e084526151d460e0850182614ff6565b90506151e36020840184614b5d565b84820360208601526151f58282614ff6565b91505061520460408401614792565b6001600160401b0380821660408701526152216060860186614a1d565b9250868403606088015261523684848361493c565b935050615249608087016080870161502b565b8061525660c08701614792565b1660c087015250508091505092915050565b6020815260006123ef60208301846151b7565b60006040828403121561528d57600080fd5b604051604081016001600160401b0382821081831117156152b0576152b061440d565b81604052829350845191506152c482613f9b565b908252602084015190808211156152da57600080fd5b506152e7858286016149b9565b6020830152505092915050565b6000806040838503121561530757600080fd5b82516001600160401b0381111561531d57600080fd5b6153298582860161527b565b925050602083015161465581613f9b565b8051151582526000602082015160406020850152612aba60408501826142bd565b6001600160401b03831681526040602082015260006123ec604083018461533a565b601f82111561154e57600081815260208120601f850160051c810160208610156153a45750805b601f850160051c820191505b81811015612b65578281556001016153b0565b81516001600160401b038111156153dc576153dc61440d565b6153f0816153ea8454614fa2565b8461537d565b602080601f831160018114615425576000841561540d5750858301515b600019600386901b1c1916600185901b178555612b65565b600085815260208120601f198616915b8281101561545457888601518255948401946001909101908401615435565b50858210156154725787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160401b038311156154995761549961440d565b6154ad836154a78354614fa2565b8361537d565b6000601f8411600181146154e157600085156154c95750838201355b600019600387901b1c1916600186901b17835561553b565b600083815260209020601f19861690835b8281101561551257868501358255602094850194600190920191016154f2565b508682101561552f5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b6020815260006123ec60208301848661493c565b60006020828403121561556857600080fd5b81516001600160401b0381111561557e57600080fd5b612aba8482850161527b565b60408152600061559d60408301856151b7565b8281036020840152614404818561533a565b8183823760009101908152919050565b6060815260006155d360608301868861493c565b6001600160401b039485166020840152929093166040909101529392505050565b60608152600061560860608301868861493c565b6020830194909452506040015292915050565b60408152600061562e60408301856142bd565b90508260208301529392505050565b6156478188614a0d565b60006020615657818401896142ff565b60c0604084015261566b60c08401886142bd565b8381036060850152865180825282820190600581901b83018401848a0160005b838110156156b957601f198684030185526156a78383516142bd565b9487019492509086019060010161568b565b505086810360808801526156cd818a6142bd565b955050505050508260a0830152979650505050505050565b8381526060602082015260006156fe60608301856142bd565b9050826040830152949350505050565b60008251614fec818460208701614291565b6000808585111561573057600080fd5b8386111561573d57600080fd5b5050820193919092039150565b60006020828403121561575c57600080fd5b81516123ef81614131565b60008261578457634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160401b03808411156157a3576157a361440d565b8360051b60206157b4818301614423565b8681529185019181810190368411156157cc57600080fd5b865b84811015615800578035868111156157e65760008081fd5b6157f236828b016145ef565b8452509183019183016157ce565b50979650505050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212203f8f26d60b9aaf3863f5927452254ff0890e5a52ede93e9772d0c793e637860164736f6c634300080f0033"; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Significant bytecode update detected.
The _bytecode
constant has been completely replaced with a new value. This indicates substantial changes to the underlying smart contract logic. The new bytecode is significantly longer, suggesting additional functionality or optimizations have been implemented.
Given the extent of this change:
- Ensure that all new functionality in the corresponding Solidity contract has been thoroughly tested.
- Verify that the new bytecode is generated from the intended source code version.
- Consider running the new bytecode through a bytecode analyzer to identify any potential security issues or gas optimizations.
- Update any documentation or interfaces that may be affected by the changes in the contract's functionality.
Summary by CodeRabbit
Release Notes
New Features
skipAck
.Bug Fixes
skipAck
.Tests
Pluto
contract.DummyEvent
for testing purposes.