ETH Price: $2,082.12 (-0.67%)

Contract

0x26DA582889f59EaaE9dA1f063bE0140CD93E6a4f
 

Overview

ETH Balance

0.034225516702207805 ETH

Eth Value

$71.26 (@ $2,082.12/ETH)

Token Holdings

More Info

Private Name Tags

Multichain Info

Transaction Hash
Method
Block
From
To
Send Deposits246421162026-03-12 14:55:1139 hrs ago1773327311IN
0x26DA5828...CD93E6a4f
0.01226587 ETH0.000098290.2883582
Send Deposits246421112026-03-12 14:54:1139 hrs ago1773327251IN
0x26DA5828...CD93E6a4f
0.01226587 ETH0.000091820.26935847
Send Deposits246374432026-03-11 23:16:112 days ago1773270971IN
0x26DA5828...CD93E6a4f
0.00442758 ETH0.000008520.03907311
Send Deposits246374352026-03-11 23:14:352 days ago1773270875IN
0x26DA5828...CD93E6a4f
0.00442758 ETH0.000011020.05055483
Send Deposits246299192026-03-10 22:02:113 days ago1773180131IN
0x26DA5828...CD93E6a4f
0.00109969 ETH0.000008170.03599655
Send Deposits246029812026-03-07 3:46:117 days ago1772855171IN
0x26DA5828...CD93E6a4f
0.0044803 ETH0.000027930.12681757
Send Deposits246029392026-03-07 3:37:477 days ago1772854667IN
0x26DA5828...CD93E6a4f
0.0055303 ETH0.000028390.12888763
Send Deposits246029172026-03-07 3:33:237 days ago1772854403IN
0x26DA5828...CD93E6a4f
0.0044803 ETH0.000029560.13420143
Send Deposits246029142026-03-07 3:32:477 days ago1772854367IN
0x26DA5828...CD93E6a4f
0.0002803 ETH0.000029790.13545778
Send Deposits246029072026-03-07 3:31:237 days ago1772854283IN
0x26DA5828...CD93E6a4f
0.0012253 ETH0.000029050.13191046
Send Deposits246028982026-03-07 3:29:357 days ago1772854175IN
0x26DA5828...CD93E6a4f
0.0034303 ETH0.000028120.12768054
Send Deposits246028732026-03-07 3:24:357 days ago1772853875IN
0x26DA5828...CD93E6a4f
0.0003853 ETH0.000028540.12951323
Send Deposits246010592026-03-06 21:19:237 days ago1772831963IN
0x26DA5828...CD93E6a4f
0.00442698 ETH0.000009140.04192357
Send Deposits246010562026-03-06 21:18:477 days ago1772831927IN
0x26DA5828...CD93E6a4f
0.00442698 ETH0.000008650.03968271
Send Deposits246006722026-03-06 20:01:477 days ago1772827307IN
0x26DA5828...CD93E6a4f
0.00109953 ETH0.000022570.09937553
Send Deposits245957612026-03-06 3:32:238 days ago1772767943IN
0x26DA5828...CD93E6a4f
0.00005152 ETH0.000028990.1315386
Send Deposits245935892026-03-05 20:13:478 days ago1772741627IN
0x26DA5828...CD93E6a4f
0.0001949 ETH0.000075570.34294383
Send Deposits245425222026-02-26 17:15:3515 days ago1772126135IN
0x26DA5828...CD93E6a4f
0.00039912 ETH0.000281651.23697388
Send Deposits245405002026-02-26 10:29:3515 days ago1772101775IN
0x26DA5828...CD93E6a4f
0.00674705 ETH0.000011250.0515927
Send Deposits245284072026-02-24 17:58:5917 days ago1771955939IN
0x26DA5828...CD93E6a4f
0.0004038 ETH0.000471962.07276368
Send Deposits245167742026-02-23 3:03:5919 days ago1771815839IN
0x26DA5828...CD93E6a4f
0.0004013 ETH0.000177230.77839656
Send Deposits245107962026-02-22 7:04:1119 days ago1771743851IN
0x26DA5828...CD93E6a4f
0.00040125 ETH0.00000990.04352113
Send Deposits245078972026-02-21 21:21:5920 days ago1771708919IN
0x26DA5828...CD93E6a4f
0.00016121 ETH0.000022860.03922861
Send Deposits245069302026-02-21 18:07:2320 days ago1771697243IN
0x26DA5828...CD93E6a4f
0.00187968 ETH0.000073090.04339941
Send Deposits245050792026-02-21 11:56:1120 days ago1771674971IN
0x26DA5828...CD93E6a4f
0.00002914 ETH0.000015160.06881194
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer246421162026-03-12 14:55:1139 hrs ago1773327311
0x26DA5828...CD93E6a4f
0.03422551 ETH
Send246421162026-03-12 14:55:1139 hrs ago1773327311
0x26DA5828...CD93E6a4f
0.0392638 ETH
Transfer246421162026-03-12 14:55:1139 hrs ago1773327311
0x26DA5828...CD93E6a4f
0.0392638 ETH
Send246421162026-03-12 14:55:1139 hrs ago1773327311
0x26DA5828...CD93E6a4f
0.0404923 ETH
Transfer246421112026-03-12 14:54:1139 hrs ago1773327251
0x26DA5828...CD93E6a4f
0.02822643 ETH
Send246421112026-03-12 14:54:1139 hrs ago1773327251
0x26DA5828...CD93E6a4f
0.03326471 ETH
Transfer246421112026-03-12 14:54:1139 hrs ago1773327251
0x26DA5828...CD93E6a4f
0.03326471 ETH
Send246421112026-03-12 14:54:1139 hrs ago1773327251
0x26DA5828...CD93E6a4f
0.03449321 ETH
Transfer246374432026-03-11 23:16:112 days ago1773270971
0x26DA5828...CD93E6a4f
0.02222734 ETH
Send246374432026-03-11 23:16:112 days ago1773270971
0x26DA5828...CD93E6a4f
0.02465584 ETH
Transfer246374352026-03-11 23:14:352 days ago1773270875
0x26DA5828...CD93E6a4f
0.02022825 ETH
Send246374352026-03-11 23:14:352 days ago1773270875
0x26DA5828...CD93E6a4f
0.02265675 ETH
Transfer246299192026-03-10 22:02:113 days ago1773180131
0x26DA5828...CD93E6a4f
0.01822917 ETH
Send246299192026-03-10 22:02:113 days ago1773180131
0x26DA5828...CD93E6a4f
0.01932883 ETH
Transfer246029812026-03-07 3:46:117 days ago1772855171
0x26DA5828...CD93E6a4f
0.01822914 ETH
Send246029812026-03-07 3:46:117 days ago1772855171
0x26DA5828...CD93E6a4f
0.02270882 ETH
Transfer246029392026-03-07 3:37:477 days ago1772854667
0x26DA5828...CD93E6a4f
0.01822852 ETH
Send246029392026-03-07 3:37:477 days ago1772854667
0x26DA5828...CD93E6a4f
0.02375819 ETH
Transfer246029172026-03-07 3:33:237 days ago1772854403
0x26DA5828...CD93E6a4f
0.01822789 ETH
Send246029172026-03-07 3:33:237 days ago1772854403
0x26DA5828...CD93E6a4f
0.02270757 ETH
Transfer246029142026-03-07 3:32:477 days ago1772854367
0x26DA5828...CD93E6a4f
0.01822727 ETH
Send246029142026-03-07 3:32:477 days ago1772854367
0x26DA5828...CD93E6a4f
0.01850694 ETH
Transfer246029072026-03-07 3:31:237 days ago1772854283
0x26DA5828...CD93E6a4f
0.01822664 ETH
Send246029072026-03-07 3:31:237 days ago1772854283
0x26DA5828...CD93E6a4f
0.01945132 ETH
Transfer246028982026-03-07 3:29:357 days ago1772854175
0x26DA5828...CD93E6a4f
0.01822601 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GasLZV2

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200000 runs

Other Settings:
paris EvmVersion, MIT license
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./OptimizedOApp.sol";

contract GasLZV2 is OptimizedOApp {

    constructor(address _owner, address _endpoint) OptimizedOApp(_owner, _endpoint) {}

    event SentMessages(uint32[] eids, bytes[] messages, uint value, uint fee, address from);
    event SentDeposits(uint256[] params, address to, uint value, uint fee, address from);

    function sendMessages(
        uint32[] calldata _dstEids,
        bytes[] calldata _messages
    ) external payable {
        uint256 fee;
        for (uint i; i < _messages.length; i++) {
            fee += _sendMessage(_dstEids[i], _messages[i]);
        }
        require(msg.value >= fee, "Fee Not Met");
        emit SentMessages(_dstEids, _messages, msg.value, fee, msg.sender);
    }

    function sendDeposits(
        uint256[] calldata _depositParams,
        address _to
    ) external payable {
        uint256 fee;
        for (uint i; i < _depositParams.length; i++) {
            fee += _sendDeposit(uint32(_depositParams[i] >> 224), uint128(_depositParams[i]), _to);
        }
        require(msg.value >= fee, "Fee Not Met");
        emit SentDeposits(_depositParams, _to, msg.value, fee, msg.sender);
    }

    function _sendMessage(uint32 _dstEid, bytes calldata _message) internal returns (uint256 fee) {
        MessagingReceipt memory receipt = _lzSend(_dstEid, _message, createReceiveOption(_dstEid), address(this).balance, address(this));
        return receipt.fee.nativeFee;
    }

    function _sendDeposit(uint32 _dstEid, uint128 _amount, address _to) internal returns (uint256 fee) {
        MessagingReceipt memory receipt = _lzSend(_dstEid, "", createNativeDropOption(_dstEid, _amount, _to), address(this).balance, address(this));
        return receipt.fee.nativeFee;
    }

    function createReceiveOption(uint32 _dstEid) public view returns (bytes memory) {
        return abi.encodePacked(
            abi.encodePacked(uint16(3)),
            uint8(1),
            uint16(16+1),
            uint8(1),
            abi.encodePacked(getGasLimit(_dstEid))
        );
    }

    function createNativeDropOption(uint32 _dstEid, uint128 _nativeAmount, address _to) public view returns (bytes memory) {
        return abi.encodePacked(
            createReceiveOption(_dstEid),
            uint8(1),
            uint16(32+16+1),
            uint8(2),
            abi.encodePacked(_nativeAmount, bytes32(uint256(uint160(_to))))
        );
    }

    function estimateFees(
        uint32[] calldata _dstEids,
        bytes[] calldata _messages,
        bytes[] calldata _options
    ) external view returns (uint256[] memory nativeFees) {
        nativeFees = new uint256[](_dstEids.length);
        for (uint i; i < _dstEids.length; i++) {
            nativeFees[i] = quote(_dstEids[i], _messages[i], _options[i]);
        }
    }

    function quote(uint32 _dstEid, bytes calldata _message, bytes memory _options) public view returns (uint256 nativeFee) {
        MessagingFee memory fee = endpoint.quote(MessagingParams(_dstEid, getPeer(_dstEid), _message, _options, false), address(this));
        return fee.nativeFee;
    }

    function withdraw(address token, uint256 amount) external onlyOwner {
        bool s;
        if (token == address(0)) {
            (s,) = msg.sender.call{value: address(this).balance}("");
        } else {
            (s,) = token.call(abi.encodeWithSignature("transfer(address,uint256)", msg.sender, amount));
        }
        require(s, "Withdraw Failed");
    }

    receive() external payable {}
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../Ownable.sol";
import "./ILayerZeroEndpointV2.sol";
import "./IMessageLibManager.sol";
import "./IUlnBase.sol";

abstract contract OptimizedOApp is Ownable {
    ILayerZeroEndpointV2 public immutable endpoint;

    mapping(uint32 => bytes32) public peers;
    mapping(uint32 => uint128) public gasLimitLookup;

    uint128 public defaultGasLimit = 20_000;

    constructor(address _owner, address _endpoint) {
        endpoint = ILayerZeroEndpointV2(_endpoint);
        _initializeOwner(_owner);
        endpoint.setDelegate(_owner);
    }

    // Receive

    function nextNonce(uint32, bytes32) public pure virtual returns (uint64 nonce) {
        return 0;
    }

    function allowInitializePath(Origin calldata origin) public view virtual returns (bool) {
        return getPeer(origin.srcEid) == origin.sender;
    }

    function lzReceive(
        Origin calldata,
        bytes32,
        bytes calldata,
        address,
        bytes calldata
    ) external pure {
        return;
    }

    // Send

    function _lzSend(
        uint32 _dstEid,
        bytes memory _message,
        bytes memory _options,
        uint _nativeFee,
        address _refundAddress
    ) internal virtual returns (MessagingReceipt memory receipt) {
        return endpoint.send{value: _nativeFee}(MessagingParams(_dstEid, getPeer(_dstEid), _message, _options, false), _refundAddress);
    }

    function getPeer(uint32 _dstEid) internal view returns (bytes32) {
        bytes32 trustedRemote = peers[_dstEid];
        if (trustedRemote == 0) {
            return bytes32(uint256(uint160(address(this))));
        } else {
            return trustedRemote;
        }
    }

    function getGasLimit(uint32 _dstEid) internal view returns (uint128) {
        uint128 gasLimit = gasLimitLookup[_dstEid];
        if (gasLimit == 0) {
            return defaultGasLimit;
        } else {
            return gasLimit;
        }
    }

    function setPeers(
        uint32[] calldata _remoteEids, 
        bytes32[] calldata _remoteAddresses
    ) external onlyOwner {
        require(_remoteEids.length == _remoteAddresses.length, "Length Mismatch");

        for (uint i; i < _remoteEids.length; i++) {
            peers[_remoteEids[i]] = _remoteAddresses[i];
        }
    }

    function setGasLimit(
        uint32[] calldata _remoteEids, 
        uint128[] calldata _gasLimits
    ) external onlyOwner {
        require(_remoteEids.length == _gasLimits.length, "Length Mismatch");

        for (uint i; i < _remoteEids.length; i++) {
            gasLimitLookup[_remoteEids[i]] = _gasLimits[i];
        }
    }

    function setDefaultGasLimit(uint128 _defaultGasLimit) external onlyOwner {
        defaultGasLimit = _defaultGasLimit;
    }

    function setDelegate(address _delegate) external onlyOwner {
        endpoint.setDelegate(_delegate);
    }

    function setUlnConfigs(address _lib, uint64 confirmations, uint32[] calldata eids, address dvn) external onlyOwner {
        SetConfigParam[] memory configs = new SetConfigParam[](eids.length);

        for(uint i; i < eids.length; i++) {
            address[] memory opt = new address[](0);
            address[] memory req = new address[](1);
            req[0] = dvn;

            bytes memory config = abi.encode(UlnConfig(confirmations, uint8(1), 0, 0, req, opt));
            configs[i] = SetConfigParam({eid: eids[i], configType: 2, config: config});
        }

        IMessageLibManager(address(endpoint)).setConfig(address(this), _lib, configs);
    }
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

/// @notice Simple single owner authorization mixin.
/// @author Solady (https://github.com/vectorized/solady/blob/main/src/auth/Ownable.sol)
///
/// @dev Note:
/// This implementation does NOT auto-initialize the owner to `msg.sender`.
/// You MUST call the `_initializeOwner` in the constructor / initializer.
///
/// While the ownable portion follows
/// [EIP-173](https://eips.ethereum.org/EIPS/eip-173) for compatibility,
/// the nomenclature for the 2-step ownership handover may be unique to this codebase.
abstract contract Ownable {
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                       CUSTOM ERRORS                        */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The caller is not authorized to call the function.
    error Unauthorized();

    /// @dev The `newOwner` cannot be the zero address.
    error NewOwnerIsZeroAddress();

    /// @dev The `pendingOwner` does not have a valid handover request.
    error NoHandoverRequest();

    /// @dev Cannot double-initialize.
    error AlreadyInitialized();

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                           EVENTS                           */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The ownership is transferred from `oldOwner` to `newOwner`.
    /// This event is intentionally kept the same as OpenZeppelin's Ownable to be
    /// compatible with indexers and [EIP-173](https://eips.ethereum.org/EIPS/eip-173),
    /// despite it not being as lightweight as a single argument event.
    event OwnershipTransferred(address indexed oldOwner, address indexed newOwner);

    /// @dev An ownership handover to `pendingOwner` has been requested.
    event OwnershipHandoverRequested(address indexed pendingOwner);

    /// @dev The ownership handover to `pendingOwner` has been canceled.
    event OwnershipHandoverCanceled(address indexed pendingOwner);

    /// @dev `keccak256(bytes("OwnershipTransferred(address,address)"))`.
    uint256 private constant _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE =
        0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0;

    /// @dev `keccak256(bytes("OwnershipHandoverRequested(address)"))`.
    uint256 private constant _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE =
        0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d;

    /// @dev `keccak256(bytes("OwnershipHandoverCanceled(address)"))`.
    uint256 private constant _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE =
        0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                          STORAGE                           */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The owner slot is given by:
    /// `bytes32(~uint256(uint32(bytes4(keccak256("_OWNER_SLOT_NOT")))))`.
    /// It is intentionally chosen to be a high value
    /// to avoid collision with lower slots.
    /// The choice of manual storage layout is to enable compatibility
    /// with both regular and upgradeable contracts.
    bytes32 internal constant _OWNER_SLOT =
        0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927;

    /// The ownership handover slot of `newOwner` is given by:
    /// ```
    ///     mstore(0x00, or(shl(96, user), _HANDOVER_SLOT_SEED))
    ///     let handoverSlot := keccak256(0x00, 0x20)
    /// ```
    /// It stores the expiry timestamp of the two-step ownership handover.
    uint256 private constant _HANDOVER_SLOT_SEED = 0x389a75e1;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                     INTERNAL FUNCTIONS                     */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Override to return true to make `_initializeOwner` prevent double-initialization.
    function _guardInitializeOwner() internal pure virtual returns (bool guard) {}

    /// @dev Initializes the owner directly without authorization guard.
    /// This function must be called upon initialization,
    /// regardless of whether the contract is upgradeable or not.
    /// This is to enable generalization to both regular and upgradeable contracts,
    /// and to save gas in case the initial owner is not the caller.
    /// For performance reasons, this function will not check if there
    /// is an existing owner.
    function _initializeOwner(address newOwner) internal virtual {
        if (_guardInitializeOwner()) {
            /// @solidity memory-safe-assembly
            assembly {
                let ownerSlot := _OWNER_SLOT
                if sload(ownerSlot) {
                    mstore(0x00, 0x0dc149f0) // `AlreadyInitialized()`.
                    revert(0x1c, 0x04)
                }
                // Clean the upper 96 bits.
                newOwner := shr(96, shl(96, newOwner))
                // Store the new value.
                sstore(ownerSlot, or(newOwner, shl(255, iszero(newOwner))))
                // Emit the {OwnershipTransferred} event.
                log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner)
            }
        } else {
            /// @solidity memory-safe-assembly
            assembly {
                // Clean the upper 96 bits.
                newOwner := shr(96, shl(96, newOwner))
                // Store the new value.
                sstore(_OWNER_SLOT, newOwner)
                // Emit the {OwnershipTransferred} event.
                log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner)
            }
        }
    }

    /// @dev Sets the owner directly without authorization guard.
    function _setOwner(address newOwner) internal virtual {
        if (_guardInitializeOwner()) {
            /// @solidity memory-safe-assembly
            assembly {
                let ownerSlot := _OWNER_SLOT
                // Clean the upper 96 bits.
                newOwner := shr(96, shl(96, newOwner))
                // Emit the {OwnershipTransferred} event.
                log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner)
                // Store the new value.
                sstore(ownerSlot, or(newOwner, shl(255, iszero(newOwner))))
            }
        } else {
            /// @solidity memory-safe-assembly
            assembly {
                let ownerSlot := _OWNER_SLOT
                // Clean the upper 96 bits.
                newOwner := shr(96, shl(96, newOwner))
                // Emit the {OwnershipTransferred} event.
                log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner)
                // Store the new value.
                sstore(ownerSlot, newOwner)
            }
        }
    }

    /// @dev Throws if the sender is not the owner.
    function _checkOwner() internal view virtual {
        /// @solidity memory-safe-assembly
        assembly {
            // If the caller is not the stored owner, revert.
            if iszero(eq(caller(), sload(_OWNER_SLOT))) {
                mstore(0x00, 0x82b42900) // `Unauthorized()`.
                revert(0x1c, 0x04)
            }
        }
    }

    /// @dev Returns how long a two-step ownership handover is valid for in seconds.
    /// Override to return a different value if needed.
    /// Made internal to conserve bytecode. Wrap it in a public function if needed.
    function _ownershipHandoverValidFor() internal view virtual returns (uint64) {
        return 48 * 3600;
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                  PUBLIC UPDATE FUNCTIONS                   */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Allows the owner to transfer the ownership to `newOwner`.
    function transferOwnership(address newOwner) public payable virtual onlyOwner {
        /// @solidity memory-safe-assembly
        assembly {
            if iszero(shl(96, newOwner)) {
                mstore(0x00, 0x7448fbae) // `NewOwnerIsZeroAddress()`.
                revert(0x1c, 0x04)
            }
        }
        _setOwner(newOwner);
    }

    /// @dev Allows the owner to renounce their ownership.
    function renounceOwnership() public payable virtual onlyOwner {
        _setOwner(address(0));
    }

    /// @dev Request a two-step ownership handover to the caller.
    /// The request will automatically expire in 48 hours (172800 seconds) by default.
    function requestOwnershipHandover() public payable virtual {
        unchecked {
            uint256 expires = block.timestamp + _ownershipHandoverValidFor();
            /// @solidity memory-safe-assembly
            assembly {
                // Compute and set the handover slot to `expires`.
                mstore(0x0c, _HANDOVER_SLOT_SEED)
                mstore(0x00, caller())
                sstore(keccak256(0x0c, 0x20), expires)
                // Emit the {OwnershipHandoverRequested} event.
                log2(0, 0, _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE, caller())
            }
        }
    }

    /// @dev Cancels the two-step ownership handover to the caller, if any.
    function cancelOwnershipHandover() public payable virtual {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute and set the handover slot to 0.
            mstore(0x0c, _HANDOVER_SLOT_SEED)
            mstore(0x00, caller())
            sstore(keccak256(0x0c, 0x20), 0)
            // Emit the {OwnershipHandoverCanceled} event.
            log2(0, 0, _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE, caller())
        }
    }

    /// @dev Allows the owner to complete the two-step ownership handover to `pendingOwner`.
    /// Reverts if there is no existing ownership handover requested by `pendingOwner`.
    function completeOwnershipHandover(address pendingOwner) public payable virtual onlyOwner {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute and set the handover slot to 0.
            mstore(0x0c, _HANDOVER_SLOT_SEED)
            mstore(0x00, pendingOwner)
            let handoverSlot := keccak256(0x0c, 0x20)
            // If the handover does not exist, or has expired.
            if gt(timestamp(), sload(handoverSlot)) {
                mstore(0x00, 0x6f5e8818) // `NoHandoverRequest()`.
                revert(0x1c, 0x04)
            }
            // Set the handover slot to 0.
            sstore(handoverSlot, 0)
        }
        _setOwner(pendingOwner);
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                   PUBLIC READ FUNCTIONS                    */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Returns the owner of the contract.
    function owner() public view virtual returns (address result) {
        /// @solidity memory-safe-assembly
        assembly {
            result := sload(_OWNER_SLOT)
        }
    }

    /// @dev Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`.
    function ownershipHandoverExpiresAt(address pendingOwner)
        public
        view
        virtual
        returns (uint256 result)
    {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute the handover slot.
            mstore(0x0c, _HANDOVER_SLOT_SEED)
            mstore(0x00, pendingOwner)
            // Load the handover slot.
            result := sload(keccak256(0x0c, 0x20))
        }
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                         MODIFIERS                          */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Marks a function as only callable by the owner.
    modifier onlyOwner() virtual {
        _checkOwner();
        _;
    }
}

// SPDX-License-Identifier: MIT

pragma solidity >=0.8.0;

struct MessagingParams {
    uint32 dstEid;
    bytes32 receiver;
    bytes message;
    bytes options;
    bool payInLzToken;
}

struct MessagingReceipt {
    bytes32 guid;
    uint64 nonce;
    MessagingFee fee;
}

struct MessagingFee {
    uint256 nativeFee;
    uint256 lzTokenFee;
}

struct Origin {
    uint32 srcEid;
    bytes32 sender;
    uint64 nonce;
}

interface ILayerZeroEndpointV2 {
    event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);

    event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);

    event PacketDelivered(Origin origin, address receiver);

    event LzReceiveAlert(
        address indexed receiver,
        address indexed executor,
        Origin origin,
        bytes32 guid,
        uint256 gas,
        uint256 value,
        bytes message,
        bytes extraData,
        bytes reason
    );

    event LzTokenSet(address token);

    event DelegateSet(address sender, address delegate);

    function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);

    function send(
        MessagingParams calldata _params,
        address _refundAddress
    ) external payable returns (MessagingReceipt memory);

    function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;

    function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);

    function initializable(Origin calldata _origin, address _receiver) external view returns (bool);

    function lzReceive(
        Origin calldata _origin,
        address _receiver,
        bytes32 _guid,
        bytes calldata _message,
        bytes calldata _extraData
    ) external payable;

    // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order
    function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;

    function setLzToken(address _lzToken) external;

    function lzToken() external view returns (address);

    function nativeToken() external view returns (address);

    function setDelegate(address _delegate) external;
}

// SPDX-License-Identifier: MIT

pragma solidity >=0.8.0;

struct SetConfigParam {
    uint32 eid;
    uint32 configType;
    bytes config;
}

interface IMessageLibManager {
    struct Timeout {
        address lib;
        uint256 expiry;
    }

    event LibraryRegistered(address newLib);
    event DefaultSendLibrarySet(uint32 eid, address newLib);
    event DefaultReceiveLibrarySet(uint32 eid, address newLib);
    event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);
    event SendLibrarySet(address sender, uint32 eid, address newLib);
    event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);
    event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);

    function registerLibrary(address _lib) external;

    function isRegisteredLibrary(address _lib) external view returns (bool);

    function getRegisteredLibraries() external view returns (address[] memory);

    function setDefaultSendLibrary(uint32 _eid, address _newLib) external;

    function defaultSendLibrary(uint32 _eid) external view returns (address);

    function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _timeout) external;

    function defaultReceiveLibrary(uint32 _eid) external view returns (address);

    function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;

    function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);

    function isSupportedEid(uint32 _eid) external view returns (bool);

    function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);

    /// ------------------- OApp interfaces -------------------
    function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;

    function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);

    function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);

    function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;

    function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);

    function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _gracePeriod) external;

    function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);

    function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;

    function getConfig(
        address _oapp,
        address _lib,
        uint32 _eid,
        uint32 _configType
    ) external view returns (bytes memory config);
}

// SPDX-License-Identifier: MIT

pragma solidity >=0.8.0;

struct UlnConfig {
    uint64 confirmations;
    // we store the length of required DVNs and optional DVNs instead of using DVN.length directly to save gas
    uint8 requiredDVNCount; // 0 indicate DEFAULT, NIL_DVN_COUNT indicate NONE (to override the value of default)
    uint8 optionalDVNCount; // 0 indicate DEFAULT, NIL_DVN_COUNT indicate NONE (to override the value of default)
    uint8 optionalDVNThreshold; // (0, optionalDVNCount]
    address[] requiredDVNs; // no duplicates. sorted an an ascending order. allowed overlap with optionalDVNs
    address[] optionalDVNs; // no duplicates. sorted an an ascending order. allowed overlap with requiredDVNs
}

interface IUlnBase {
    function getUlnConfig(address, uint32) external returns (UlnConfig memory);
}

Settings
{
  "remappings": [
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200000
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_endpoint","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyInitialized","type":"error"},{"inputs":[],"name":"NewOwnerIsZeroAddress","type":"error"},{"inputs":[],"name":"NoHandoverRequest","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"params","type":"uint256[]"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"},{"indexed":false,"internalType":"address","name":"from","type":"address"}],"name":"SentDeposits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32[]","name":"eids","type":"uint32[]"},{"indexed":false,"internalType":"bytes[]","name":"messages","type":"bytes[]"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"},{"indexed":false,"internalType":"address","name":"from","type":"address"}],"name":"SentMessages","type":"event"},{"inputs":[{"components":[{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"internalType":"struct Origin","name":"origin","type":"tuple"}],"name":"allowInitializePath","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pendingOwner","type":"address"}],"name":"completeOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_dstEid","type":"uint32"},{"internalType":"uint128","name":"_nativeAmount","type":"uint128"},{"internalType":"address","name":"_to","type":"address"}],"name":"createNativeDropOption","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_dstEid","type":"uint32"}],"name":"createReceiveOption","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultGasLimit","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endpoint","outputs":[{"internalType":"contract ILayerZeroEndpointV2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32[]","name":"_dstEids","type":"uint32[]"},{"internalType":"bytes[]","name":"_messages","type":"bytes[]"},{"internalType":"bytes[]","name":"_options","type":"bytes[]"}],"name":"estimateFees","outputs":[{"internalType":"uint256[]","name":"nativeFees","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"gasLimitLookup","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"internalType":"struct Origin","name":"","type":"tuple"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"lzReceive","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"nextNonce","outputs":[{"internalType":"uint64","name":"nonce","type":"uint64"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"result","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pendingOwner","type":"address"}],"name":"ownershipHandoverExpiresAt","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"peers","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_dstEid","type":"uint32"},{"internalType":"bytes","name":"_message","type":"bytes"},{"internalType":"bytes","name":"_options","type":"bytes"}],"name":"quote","outputs":[{"internalType":"uint256","name":"nativeFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"requestOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_depositParams","type":"uint256[]"},{"internalType":"address","name":"_to","type":"address"}],"name":"sendDeposits","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint32[]","name":"_dstEids","type":"uint32[]"},{"internalType":"bytes[]","name":"_messages","type":"bytes[]"}],"name":"sendMessages","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint128","name":"_defaultGasLimit","type":"uint128"}],"name":"setDefaultGasLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_delegate","type":"address"}],"name":"setDelegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32[]","name":"_remoteEids","type":"uint32[]"},{"internalType":"uint128[]","name":"_gasLimits","type":"uint128[]"}],"name":"setGasLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32[]","name":"_remoteEids","type":"uint32[]"},{"internalType":"bytes32[]","name":"_remoteAddresses","type":"bytes32[]"}],"name":"setPeers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lib","type":"address"},{"internalType":"uint64","name":"confirmations","type":"uint64"},{"internalType":"uint32[]","name":"eids","type":"uint32[]"},{"internalType":"address","name":"dvn","type":"address"}],"name":"setUlnConfigs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600280546001600160801b031916614e201790553480156200002557600080fd5b50604051620026b5380380620026b5833981016040819052620000489162000126565b6001600160a01b03811660805281816200006282620000cd565b60805160405163ca5eb5e160e01b81526001600160a01b0384811660048301529091169063ca5eb5e190602401600060405180830381600087803b158015620000aa57600080fd5b505af1158015620000bf573d6000803e3d6000fd5b50505050505050506200015e565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b80516001600160a01b03811681146200012157600080fd5b919050565b600080604083850312156200013a57600080fd5b620001458362000109565b9150620001556020840162000109565b90509250929050565b60805161251f62000196600039600081816102de0152818161097001528181610e7d015281816113240152611605015261251f6000f3fe6080604052600436106101a55760003560e01c80638da5cb5b116100e1578063ec089c411161008a578063f3fef3a311610064578063f3fef3a3146104e4578063fccbe22014610504578063fee81cf414610524578063ff7bd03d1461055757600080fd5b8063ec089c411461049e578063f04e283e146104be578063f2fde38b146104d157600080fd5b8063bb0b6a53116100bb578063bb0b6a5314610430578063ca5eb5e11461046b578063d29e9f321461048b57600080fd5b80638da5cb5b146103a657806394ca88aa146103da57806395368d2e1461040757600080fd5b80633772df581161014e578063715018a611610128578063715018a6146103255780637154cc651461032d5780637d25a05e1461035a57806389a281b61461039357600080fd5b80633772df58146102a457806354d1f13d146102c45780635e280f11146102cc57600080fd5b806329b85fff1161017f57806329b85fff146101ff5780632b94e4991461021f57806333ebcb741461023f57600080fd5b8063128c9991146101b157806313137d65146101d357806325692962146101f757600080fd5b366101ac57005b600080fd5b3480156101bd57600080fd5b506101d16101cc366004611777565b610587565b005b3480156101df57600080fd5b506101d16101ee366004611866565b50505050505050565b6101d16106c8565b34801561020b57600080fd5b506101d161021a366004611925565b610718565b34801561022b57600080fd5b506101d161023a36600461195d565b610763565b34801561024b57600080fd5b5061027e61025a3660046119e9565b6001602052600090815260409020546fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102b057600080fd5b506101d16102bf366004611777565b6109e3565b6101d1610acb565b3480156102d857600080fd5b506103007f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161029b565b6101d1610b07565b34801561033957600080fd5b5061034d610348366004611a04565b610b1b565b60405161029b9190611ab5565b34801561036657600080fd5b5061037a610375366004611ac8565b610bd4565b60405167ffffffffffffffff909116815260200161029b565b6101d16103a1366004611af2565b610bdd565b3480156103b257600080fd5b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754610300565b3480156103e657600080fd5b506103fa6103f5366004611b3d565b610cf8565b60405161029b9190611bd7565b34801561041357600080fd5b5060025461027e906fffffffffffffffffffffffffffffffff1681565b34801561043c57600080fd5b5061045d61044b3660046119e9565b60006020819052908152604090205481565b60405190815260200161029b565b34801561047757600080fd5b506101d1610486366004611c1b565b610e30565b6101d1610499366004611777565b610ed5565b3480156104aa57600080fd5b5061034d6104b93660046119e9565b611007565b6101d16104cc366004611c1b565b6110e3565b6101d16104df366004611c1b565b611123565b3480156104f057600080fd5b506101d16104ff366004611c36565b61114a565b34801561051057600080fd5b5061045d61051f366004611cd0565b61131f565b34801561053057600080fd5b5061045d61053f366004611c1b565b63389a75e1600c908152600091909152602090205490565b34801561056357600080fd5b50610577610572366004611dbe565b61144c565b604051901515815260200161029b565b61058f61146f565b8281146105fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c656e677468204d69736d61746368000000000000000000000000000000000060448201526064015b60405180910390fd5b60005b838110156106c15782828281811061061a5761061a611dda565b905060200201602081019061062f9190611925565b6001600087878581811061064557610645611dda565b905060200201602081019061065a91906119e9565b63ffffffff168152602081019190915260400160002080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055806106b981611e38565b915050610600565b5050505050565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b61072061146f565b600280547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b61076b61146f565b60008267ffffffffffffffff81111561078657610786611c52565b6040519080825280602002602001820160405280156107d357816020015b604080516060808201835260008083526020830152918101919091528152602001906001900390816107a45790505b50905060005b838110156109325760408051600080825260016020808401828152606085018652939492939285019080368337019050509050848160008151811061082057610820611dda565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091018201526040805160c08101825267ffffffffffffffff8b1681526001818401526000818301819052606082018190526080820185905260a082018690529151919261088c9201611ec1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152606083019091529150808989878181106108d3576108d3611dda565b90506020020160208101906108e891906119e9565b63ffffffff16815260026020820152604001829052855186908690811061091157610911611dda565b6020026020010181905250505050808061092a90611e38565b9150506107d9565b506040517f6dbd9f9000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636dbd9f90906109a99030908a908690600401611f5c565b600060405180830381600087803b1580156109c357600080fd5b505af11580156109d7573d6000803e3d6000fd5b50505050505050505050565b6109eb61146f565b828114610a54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c656e677468204d69736d61746368000000000000000000000000000000000060448201526064016105f4565b60005b838110156106c157828282818110610a7157610a71611dda565b90506020020135600080878785818110610a8d57610a8d611dda565b9050602002016020810190610aa291906119e9565b63ffffffff16815260208101919091526040016000205580610ac381611e38565b915050610a57565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b610b0f61146f565b610b1960006114a5565b565b6060610b2684611007565b6040517fffffffffffffffffffffffffffffffff00000000000000000000000000000000608086901b16602082015273ffffffffffffffffffffffffffffffffffffffff84166030820152600190603190600290605001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610bbc959493929160200161202b565b60405160208183030381529060405290509392505050565b60005b92915050565b6000805b83811015610c4657610c2860e0868684818110610c0057610c00611dda565b90506020020135901c868684818110610c1b57610c1b611dda565b905060200201358561150b565b610c3290836120c4565b915080610c3e81611e38565b915050610be1565b5080341015610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f466565204e6f74204d657400000000000000000000000000000000000000000060448201526064016105f4565b7fa22a487af6300dc77db439586e8ce7028fd7f1d734efd33b287bc1e2af4cd162848484348533604051610cea969594939291906120d7565b60405180910390a150505050565b60608567ffffffffffffffff811115610d1357610d13611c52565b604051908082528060200260200182016040528015610d3c578160200160208202803683370190505b50905060005b86811015610e2557610df6888883818110610d5f57610d5f611dda565b9050602002016020810190610d7491906119e9565b878784818110610d8657610d86611dda565b9050602002810190610d98919061215b565b878786818110610daa57610daa611dda565b9050602002810190610dbc919061215b565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061131f92505050565b828281518110610e0857610e08611dda565b602090810291909101015280610e1d81611e38565b915050610d42565b509695505050505050565b610e3861146f565b6040517fca5eb5e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b158015610ec157600080fd5b505af11580156106c1573d6000803e3d6000fd5b6000805b82811015610f5257610f34868683818110610ef657610ef6611dda565b9050602002016020810190610f0b91906119e9565b858584818110610f1d57610f1d611dda565b9050602002810190610f2f919061215b565b611542565b610f3e90836120c4565b915080610f4a81611e38565b915050610ed9565b5080341015610fbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f466565204e6f74204d657400000000000000000000000000000000000000000060448201526064016105f4565b7f14af90211b59e95afdafa93c2cb547e61a4e6b0e74cfad8c3d7b6c3d48e6c29d85858585348633604051610ff89796959493929190612209565b60405180910390a15050505050565b6040517e0300000000000000000000000000000000000000000000000000000000000060208201526060906022016040516020818303038152906040526001601160016110538661158b565b60405160200161108e919060809190911b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000016815260100190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526110cd959493929160200161202b565b6040516020818303038152906040529050919050565b6110eb61146f565b63389a75e1600c52806000526020600c20805442111561111357636f5e88186000526004601cfd5b60009055611120816114a5565b50565b61112b61146f565b8060601b61114157637448fbae6000526004601cfd5b611120816114a5565b61115261146f565b600073ffffffffffffffffffffffffffffffffffffffff83166111bf5760405133904790600081818185875af1925050503d80600081146111af576040519150601f19603f3d011682016040523d82523d6000602084013e6111b4565b606091505b5050809150506112b3565b6040513360248201526044810183905273ffffffffffffffffffffffffffffffffffffffff841690606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790525161126b9190612356565b6000604051808303816000865af19150503d80600081146112a8576040519150601f19603f3d011682016040523d82523d6000602084013e6112ad565b606091505b50909150505b8061131a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5769746864726177204661696c6564000000000000000000000000000000000060448201526064016105f4565b505050565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808963ffffffff16815260200161137e8a6115d6565b815260200188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208201889052604091820152517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815261140191903090600401612372565b6040805180830381865afa15801561141d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114419190612465565b519695505050505050565b6000602082018035906114689061146390856119e9565b6115d6565b1492915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927543314610b19576382b429006000526004601cfd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927805473ffffffffffffffffffffffffffffffffffffffff9092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b600080611534856040518060200160405280600081525061152d888888610b1b565b47306115fb565b604001515195945050505050565b6000806115348585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061152d92508a91506110079050565b63ffffffff81166000908152600160205260408120546fffffffffffffffffffffffffffffffff16808203610bd75750506002546fffffffffffffffffffffffffffffffff16919050565b63ffffffff8116600090815260208190526040812054808203610bd757503092915050565b6116036116e3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632637a450846040518060a001604052808a63ffffffff1681526020016116608b6115d6565b815260200189815260200188815260200160001515815250856040518463ffffffff1660e01b8152600401611696929190612372565b60806040518083038185885af11580156116b4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906116d99190612481565b9695505050505050565b604051806060016040528060008019168152602001600067ffffffffffffffff168152602001611726604051806040016040528060008152602001600081525090565b905290565b60008083601f84011261173d57600080fd5b50813567ffffffffffffffff81111561175557600080fd5b6020830191508360208260051b850101111561177057600080fd5b9250929050565b6000806000806040858703121561178d57600080fd5b843567ffffffffffffffff808211156117a557600080fd5b6117b18883890161172b565b909650945060208701359150808211156117ca57600080fd5b506117d78782880161172b565b95989497509550505050565b6000606082840312156117f557600080fd5b50919050565b60008083601f84011261180d57600080fd5b50813567ffffffffffffffff81111561182557600080fd5b60208301915083602082850101111561177057600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461186157600080fd5b919050565b600080600080600080600060e0888a03121561188157600080fd5b61188b89896117e3565b965060608801359550608088013567ffffffffffffffff808211156118af57600080fd5b6118bb8b838c016117fb565b90975095508591506118cf60a08b0161183d565b945060c08a01359150808211156118e557600080fd5b506118f28a828b016117fb565b989b979a50959850939692959293505050565b80356fffffffffffffffffffffffffffffffff8116811461186157600080fd5b60006020828403121561193757600080fd5b61194082611905565b9392505050565b67ffffffffffffffff8116811461112057600080fd5b60008060008060006080868803121561197557600080fd5b61197e8661183d565b9450602086013561198e81611947565b9350604086013567ffffffffffffffff8111156119aa57600080fd5b6119b68882890161172b565b90945092506119c990506060870161183d565b90509295509295909350565b803563ffffffff8116811461186157600080fd5b6000602082840312156119fb57600080fd5b611940826119d5565b600080600060608486031215611a1957600080fd5b611a22846119d5565b9250611a3060208501611905565b9150611a3e6040850161183d565b90509250925092565b60005b83811015611a62578181015183820152602001611a4a565b50506000910152565b60008151808452611a83816020860160208601611a47565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006119406020830184611a6b565b60008060408385031215611adb57600080fd5b611ae4836119d5565b946020939093013593505050565b600080600060408486031215611b0757600080fd5b833567ffffffffffffffff811115611b1e57600080fd5b611b2a8682870161172b565b9094509250611a3e90506020850161183d565b60008060008060008060608789031215611b5657600080fd5b863567ffffffffffffffff80821115611b6e57600080fd5b611b7a8a838b0161172b565b90985096506020890135915080821115611b9357600080fd5b611b9f8a838b0161172b565b90965094506040890135915080821115611bb857600080fd5b50611bc589828a0161172b565b979a9699509497509295939492505050565b6020808252825182820181905260009190848201906040850190845b81811015611c0f57835183529284019291840191600101611bf3565b50909695505050505050565b600060208284031215611c2d57600080fd5b6119408261183d565b60008060408385031215611c4957600080fd5b611ae48361183d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611cc857611cc8611c52565b604052919050565b60008060008060608587031215611ce657600080fd5b611cef856119d5565b935060208086013567ffffffffffffffff80821115611d0d57600080fd5b611d1989838a016117fb565b90965094506040880135915080821115611d3257600080fd5b818801915088601f830112611d4657600080fd5b813581811115611d5857611d58611c52565b611d88847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611c81565b91508082528984828501011115611d9e57600080fd5b808484018584013760008482840101525080935050505092959194509250565b600060608284031215611dd057600080fd5b61194083836117e3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611e6957611e69611e09565b5060010190565b600081518084526020808501945080840160005b83811015611eb657815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101611e84565b509495945050505050565b6020815267ffffffffffffffff825116602082015260ff602083015116604082015260ff604083015116606082015260ff60608301511660808201526000608083015160c060a0840152611f1860e0840182611e70565b905060a08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08483030160c0850152611f538282611e70565b95945050505050565b6000606080830173ffffffffffffffffffffffffffffffffffffffff808816855260208188168187015260409150838287015282875180855260808801915060808160051b890101945082890160005b8281101561201a578987037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800184528151805163ffffffff908116895286820151168689015286015186880189905261200789890182611a6b565b9750509284019290840190600101611fac565b50949b9a5050505050505050505050565b6000865161203d818460208b01611a47565b80830190507fff00000000000000000000000000000000000000000000000000000000000000808860f81b1682527fffff0000000000000000000000000000000000000000000000000000000000008760f01b166001830152808660f81b1660038301525083516120b5816004840160208801611a47565b01600401979650505050505050565b80820180821115610bd757610bd7611e09565b60a081528560a082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87111561211057600080fd5b8660051b808960c085013773ffffffffffffffffffffffffffffffffffffffff9687166020840152604083019590955250606081019290925290921660808301520160c00192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261219057600080fd5b83018035915067ffffffffffffffff8211156121ab57600080fd5b60200191503681900382131561177057600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60a0808252810187905260008860c08301825b8a8110156122475763ffffffff612232846119d5565b1682526020928301929091019060010161221c565b506020915083810382850152808882528282019050828960051b8301018a60005b8b811015612313577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18e36030181126122c957600080fd5b8d01868101903567ffffffffffffffff8111156122e557600080fd5b8036038213156122f457600080fd5b6122ff8582846121c0565b958801959450505090850190600101612268565b50508094505050505084604083015283606083015261234a608083018473ffffffffffffffffffffffffffffffffffffffff169052565b98975050505050505050565b60008251612368818460208701611a47565b9190910192915050565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a060808401526123a860e0840182611a6b565b905060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08483030160a08501526123e38282611a6b565b60809690960151151560c085015250505073ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b60006040828403121561242857600080fd5b6040516040810181811067ffffffffffffffff8211171561244b5761244b611c52565b604052825181526020928301519281019290925250919050565b60006040828403121561247757600080fd5b6119408383612416565b60006080828403121561249357600080fd5b6040516060810181811067ffffffffffffffff821117156124b6576124b6611c52565b6040528251815260208301516124cb81611947565b60208201526124dd8460408501612416565b6040820152939250505056fea264697066735822122003802418fd76c668814738a0ada7739fe057268c6807317835b9193206c2797364736f6c63430008150033000000000000000000000000bc2c7144b1f8d708a0601961da6b6102f4af286a0000000000000000000000001a44076050125825900e736c501f859c50fe728c

Deployed Bytecode

0x6080604052600436106101a55760003560e01c80638da5cb5b116100e1578063ec089c411161008a578063f3fef3a311610064578063f3fef3a3146104e4578063fccbe22014610504578063fee81cf414610524578063ff7bd03d1461055757600080fd5b8063ec089c411461049e578063f04e283e146104be578063f2fde38b146104d157600080fd5b8063bb0b6a53116100bb578063bb0b6a5314610430578063ca5eb5e11461046b578063d29e9f321461048b57600080fd5b80638da5cb5b146103a657806394ca88aa146103da57806395368d2e1461040757600080fd5b80633772df581161014e578063715018a611610128578063715018a6146103255780637154cc651461032d5780637d25a05e1461035a57806389a281b61461039357600080fd5b80633772df58146102a457806354d1f13d146102c45780635e280f11146102cc57600080fd5b806329b85fff1161017f57806329b85fff146101ff5780632b94e4991461021f57806333ebcb741461023f57600080fd5b8063128c9991146101b157806313137d65146101d357806325692962146101f757600080fd5b366101ac57005b600080fd5b3480156101bd57600080fd5b506101d16101cc366004611777565b610587565b005b3480156101df57600080fd5b506101d16101ee366004611866565b50505050505050565b6101d16106c8565b34801561020b57600080fd5b506101d161021a366004611925565b610718565b34801561022b57600080fd5b506101d161023a36600461195d565b610763565b34801561024b57600080fd5b5061027e61025a3660046119e9565b6001602052600090815260409020546fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102b057600080fd5b506101d16102bf366004611777565b6109e3565b6101d1610acb565b3480156102d857600080fd5b506103007f0000000000000000000000001a44076050125825900e736c501f859c50fe728c81565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161029b565b6101d1610b07565b34801561033957600080fd5b5061034d610348366004611a04565b610b1b565b60405161029b9190611ab5565b34801561036657600080fd5b5061037a610375366004611ac8565b610bd4565b60405167ffffffffffffffff909116815260200161029b565b6101d16103a1366004611af2565b610bdd565b3480156103b257600080fd5b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754610300565b3480156103e657600080fd5b506103fa6103f5366004611b3d565b610cf8565b60405161029b9190611bd7565b34801561041357600080fd5b5060025461027e906fffffffffffffffffffffffffffffffff1681565b34801561043c57600080fd5b5061045d61044b3660046119e9565b60006020819052908152604090205481565b60405190815260200161029b565b34801561047757600080fd5b506101d1610486366004611c1b565b610e30565b6101d1610499366004611777565b610ed5565b3480156104aa57600080fd5b5061034d6104b93660046119e9565b611007565b6101d16104cc366004611c1b565b6110e3565b6101d16104df366004611c1b565b611123565b3480156104f057600080fd5b506101d16104ff366004611c36565b61114a565b34801561051057600080fd5b5061045d61051f366004611cd0565b61131f565b34801561053057600080fd5b5061045d61053f366004611c1b565b63389a75e1600c908152600091909152602090205490565b34801561056357600080fd5b50610577610572366004611dbe565b61144c565b604051901515815260200161029b565b61058f61146f565b8281146105fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c656e677468204d69736d61746368000000000000000000000000000000000060448201526064015b60405180910390fd5b60005b838110156106c15782828281811061061a5761061a611dda565b905060200201602081019061062f9190611925565b6001600087878581811061064557610645611dda565b905060200201602081019061065a91906119e9565b63ffffffff168152602081019190915260400160002080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055806106b981611e38565b915050610600565b5050505050565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b61072061146f565b600280547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b61076b61146f565b60008267ffffffffffffffff81111561078657610786611c52565b6040519080825280602002602001820160405280156107d357816020015b604080516060808201835260008083526020830152918101919091528152602001906001900390816107a45790505b50905060005b838110156109325760408051600080825260016020808401828152606085018652939492939285019080368337019050509050848160008151811061082057610820611dda565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091018201526040805160c08101825267ffffffffffffffff8b1681526001818401526000818301819052606082018190526080820185905260a082018690529151919261088c9201611ec1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152606083019091529150808989878181106108d3576108d3611dda565b90506020020160208101906108e891906119e9565b63ffffffff16815260026020820152604001829052855186908690811061091157610911611dda565b6020026020010181905250505050808061092a90611e38565b9150506107d9565b506040517f6dbd9f9000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001a44076050125825900e736c501f859c50fe728c1690636dbd9f90906109a99030908a908690600401611f5c565b600060405180830381600087803b1580156109c357600080fd5b505af11580156109d7573d6000803e3d6000fd5b50505050505050505050565b6109eb61146f565b828114610a54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c656e677468204d69736d61746368000000000000000000000000000000000060448201526064016105f4565b60005b838110156106c157828282818110610a7157610a71611dda565b90506020020135600080878785818110610a8d57610a8d611dda565b9050602002016020810190610aa291906119e9565b63ffffffff16815260208101919091526040016000205580610ac381611e38565b915050610a57565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b610b0f61146f565b610b1960006114a5565b565b6060610b2684611007565b6040517fffffffffffffffffffffffffffffffff00000000000000000000000000000000608086901b16602082015273ffffffffffffffffffffffffffffffffffffffff84166030820152600190603190600290605001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610bbc959493929160200161202b565b60405160208183030381529060405290509392505050565b60005b92915050565b6000805b83811015610c4657610c2860e0868684818110610c0057610c00611dda565b90506020020135901c868684818110610c1b57610c1b611dda565b905060200201358561150b565b610c3290836120c4565b915080610c3e81611e38565b915050610be1565b5080341015610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f466565204e6f74204d657400000000000000000000000000000000000000000060448201526064016105f4565b7fa22a487af6300dc77db439586e8ce7028fd7f1d734efd33b287bc1e2af4cd162848484348533604051610cea969594939291906120d7565b60405180910390a150505050565b60608567ffffffffffffffff811115610d1357610d13611c52565b604051908082528060200260200182016040528015610d3c578160200160208202803683370190505b50905060005b86811015610e2557610df6888883818110610d5f57610d5f611dda565b9050602002016020810190610d7491906119e9565b878784818110610d8657610d86611dda565b9050602002810190610d98919061215b565b878786818110610daa57610daa611dda565b9050602002810190610dbc919061215b565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061131f92505050565b828281518110610e0857610e08611dda565b602090810291909101015280610e1d81611e38565b915050610d42565b509695505050505050565b610e3861146f565b6040517fca5eb5e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000001a44076050125825900e736c501f859c50fe728c169063ca5eb5e190602401600060405180830381600087803b158015610ec157600080fd5b505af11580156106c1573d6000803e3d6000fd5b6000805b82811015610f5257610f34868683818110610ef657610ef6611dda565b9050602002016020810190610f0b91906119e9565b858584818110610f1d57610f1d611dda565b9050602002810190610f2f919061215b565b611542565b610f3e90836120c4565b915080610f4a81611e38565b915050610ed9565b5080341015610fbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f466565204e6f74204d657400000000000000000000000000000000000000000060448201526064016105f4565b7f14af90211b59e95afdafa93c2cb547e61a4e6b0e74cfad8c3d7b6c3d48e6c29d85858585348633604051610ff89796959493929190612209565b60405180910390a15050505050565b6040517e0300000000000000000000000000000000000000000000000000000000000060208201526060906022016040516020818303038152906040526001601160016110538661158b565b60405160200161108e919060809190911b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000016815260100190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526110cd959493929160200161202b565b6040516020818303038152906040529050919050565b6110eb61146f565b63389a75e1600c52806000526020600c20805442111561111357636f5e88186000526004601cfd5b60009055611120816114a5565b50565b61112b61146f565b8060601b61114157637448fbae6000526004601cfd5b611120816114a5565b61115261146f565b600073ffffffffffffffffffffffffffffffffffffffff83166111bf5760405133904790600081818185875af1925050503d80600081146111af576040519150601f19603f3d011682016040523d82523d6000602084013e6111b4565b606091505b5050809150506112b3565b6040513360248201526044810183905273ffffffffffffffffffffffffffffffffffffffff841690606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790525161126b9190612356565b6000604051808303816000865af19150503d80600081146112a8576040519150601f19603f3d011682016040523d82523d6000602084013e6112ad565b606091505b50909150505b8061131a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5769746864726177204661696c6564000000000000000000000000000000000060448201526064016105f4565b505050565b6000807f0000000000000000000000001a44076050125825900e736c501f859c50fe728c73ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808963ffffffff16815260200161137e8a6115d6565b815260200188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208201889052604091820152517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815261140191903090600401612372565b6040805180830381865afa15801561141d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114419190612465565b519695505050505050565b6000602082018035906114689061146390856119e9565b6115d6565b1492915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927543314610b19576382b429006000526004601cfd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927805473ffffffffffffffffffffffffffffffffffffffff9092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b600080611534856040518060200160405280600081525061152d888888610b1b565b47306115fb565b604001515195945050505050565b6000806115348585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061152d92508a91506110079050565b63ffffffff81166000908152600160205260408120546fffffffffffffffffffffffffffffffff16808203610bd75750506002546fffffffffffffffffffffffffffffffff16919050565b63ffffffff8116600090815260208190526040812054808203610bd757503092915050565b6116036116e3565b7f0000000000000000000000001a44076050125825900e736c501f859c50fe728c73ffffffffffffffffffffffffffffffffffffffff16632637a450846040518060a001604052808a63ffffffff1681526020016116608b6115d6565b815260200189815260200188815260200160001515815250856040518463ffffffff1660e01b8152600401611696929190612372565b60806040518083038185885af11580156116b4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906116d99190612481565b9695505050505050565b604051806060016040528060008019168152602001600067ffffffffffffffff168152602001611726604051806040016040528060008152602001600081525090565b905290565b60008083601f84011261173d57600080fd5b50813567ffffffffffffffff81111561175557600080fd5b6020830191508360208260051b850101111561177057600080fd5b9250929050565b6000806000806040858703121561178d57600080fd5b843567ffffffffffffffff808211156117a557600080fd5b6117b18883890161172b565b909650945060208701359150808211156117ca57600080fd5b506117d78782880161172b565b95989497509550505050565b6000606082840312156117f557600080fd5b50919050565b60008083601f84011261180d57600080fd5b50813567ffffffffffffffff81111561182557600080fd5b60208301915083602082850101111561177057600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461186157600080fd5b919050565b600080600080600080600060e0888a03121561188157600080fd5b61188b89896117e3565b965060608801359550608088013567ffffffffffffffff808211156118af57600080fd5b6118bb8b838c016117fb565b90975095508591506118cf60a08b0161183d565b945060c08a01359150808211156118e557600080fd5b506118f28a828b016117fb565b989b979a50959850939692959293505050565b80356fffffffffffffffffffffffffffffffff8116811461186157600080fd5b60006020828403121561193757600080fd5b61194082611905565b9392505050565b67ffffffffffffffff8116811461112057600080fd5b60008060008060006080868803121561197557600080fd5b61197e8661183d565b9450602086013561198e81611947565b9350604086013567ffffffffffffffff8111156119aa57600080fd5b6119b68882890161172b565b90945092506119c990506060870161183d565b90509295509295909350565b803563ffffffff8116811461186157600080fd5b6000602082840312156119fb57600080fd5b611940826119d5565b600080600060608486031215611a1957600080fd5b611a22846119d5565b9250611a3060208501611905565b9150611a3e6040850161183d565b90509250925092565b60005b83811015611a62578181015183820152602001611a4a565b50506000910152565b60008151808452611a83816020860160208601611a47565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006119406020830184611a6b565b60008060408385031215611adb57600080fd5b611ae4836119d5565b946020939093013593505050565b600080600060408486031215611b0757600080fd5b833567ffffffffffffffff811115611b1e57600080fd5b611b2a8682870161172b565b9094509250611a3e90506020850161183d565b60008060008060008060608789031215611b5657600080fd5b863567ffffffffffffffff80821115611b6e57600080fd5b611b7a8a838b0161172b565b90985096506020890135915080821115611b9357600080fd5b611b9f8a838b0161172b565b90965094506040890135915080821115611bb857600080fd5b50611bc589828a0161172b565b979a9699509497509295939492505050565b6020808252825182820181905260009190848201906040850190845b81811015611c0f57835183529284019291840191600101611bf3565b50909695505050505050565b600060208284031215611c2d57600080fd5b6119408261183d565b60008060408385031215611c4957600080fd5b611ae48361183d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611cc857611cc8611c52565b604052919050565b60008060008060608587031215611ce657600080fd5b611cef856119d5565b935060208086013567ffffffffffffffff80821115611d0d57600080fd5b611d1989838a016117fb565b90965094506040880135915080821115611d3257600080fd5b818801915088601f830112611d4657600080fd5b813581811115611d5857611d58611c52565b611d88847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611c81565b91508082528984828501011115611d9e57600080fd5b808484018584013760008482840101525080935050505092959194509250565b600060608284031215611dd057600080fd5b61194083836117e3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611e6957611e69611e09565b5060010190565b600081518084526020808501945080840160005b83811015611eb657815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101611e84565b509495945050505050565b6020815267ffffffffffffffff825116602082015260ff602083015116604082015260ff604083015116606082015260ff60608301511660808201526000608083015160c060a0840152611f1860e0840182611e70565b905060a08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08483030160c0850152611f538282611e70565b95945050505050565b6000606080830173ffffffffffffffffffffffffffffffffffffffff808816855260208188168187015260409150838287015282875180855260808801915060808160051b890101945082890160005b8281101561201a578987037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800184528151805163ffffffff908116895286820151168689015286015186880189905261200789890182611a6b565b9750509284019290840190600101611fac565b50949b9a5050505050505050505050565b6000865161203d818460208b01611a47565b80830190507fff00000000000000000000000000000000000000000000000000000000000000808860f81b1682527fffff0000000000000000000000000000000000000000000000000000000000008760f01b166001830152808660f81b1660038301525083516120b5816004840160208801611a47565b01600401979650505050505050565b80820180821115610bd757610bd7611e09565b60a081528560a082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87111561211057600080fd5b8660051b808960c085013773ffffffffffffffffffffffffffffffffffffffff9687166020840152604083019590955250606081019290925290921660808301520160c00192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261219057600080fd5b83018035915067ffffffffffffffff8211156121ab57600080fd5b60200191503681900382131561177057600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60a0808252810187905260008860c08301825b8a8110156122475763ffffffff612232846119d5565b1682526020928301929091019060010161221c565b506020915083810382850152808882528282019050828960051b8301018a60005b8b811015612313577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18e36030181126122c957600080fd5b8d01868101903567ffffffffffffffff8111156122e557600080fd5b8036038213156122f457600080fd5b6122ff8582846121c0565b958801959450505090850190600101612268565b50508094505050505084604083015283606083015261234a608083018473ffffffffffffffffffffffffffffffffffffffff169052565b98975050505050505050565b60008251612368818460208701611a47565b9190910192915050565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a060808401526123a860e0840182611a6b565b905060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08483030160a08501526123e38282611a6b565b60809690960151151560c085015250505073ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b60006040828403121561242857600080fd5b6040516040810181811067ffffffffffffffff8211171561244b5761244b611c52565b604052825181526020928301519281019290925250919050565b60006040828403121561247757600080fd5b6119408383612416565b60006080828403121561249357600080fd5b6040516060810181811067ffffffffffffffff821117156124b6576124b6611c52565b6040528251815260208301516124cb81611947565b60208201526124dd8460408501612416565b6040820152939250505056fea264697066735822122003802418fd76c668814738a0ada7739fe057268c6807317835b9193206c2797364736f6c63430008150033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000bc2c7144b1f8d708a0601961da6b6102f4af286a0000000000000000000000001a44076050125825900e736c501f859c50fe728c

-----Decoded View---------------
Arg [0] : _owner (address): 0xBC2C7144b1F8D708A0601961da6B6102f4Af286a
Arg [1] : _endpoint (address): 0x1a44076050125825900e736c501f859c50fE728c

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000bc2c7144b1f8d708a0601961da6b6102f4af286a
Arg [1] : 0000000000000000000000001a44076050125825900e736c501f859c50fe728c


Deployed Bytecode Sourcemap

89:3481:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2339:332:5;;;;;;;;;;-1:-1:-1;2339:332:5;;;;;:::i;:::-;;:::i;:::-;;896:169;;;;;;;;;;-1:-1:-1;896:169:5;;;;;:::i;:::-;;;;;;;;;9021:617:0;;;:::i;2677:124:5:-;;;;;;;;;;-1:-1:-1;2677:124:5;;;;;:::i;:::-;;:::i;2920:661::-;;;;;;;;;;-1:-1:-1;2920:661:5;;;;;:::i;:::-;;:::i;328:48::-;;;;;;;;;;-1:-1:-1;328:48:5;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4636:34:6;4624:47;;;4606:66;;4594:2;4579:18;328:48:5;;;;;;;;1995:338;;;;;;;;;;-1:-1:-1;1995:338:5;;;;;:::i;:::-;;:::i;9720:456:0:-;;;:::i;230:46:5:-;;;;;;;;;;;;;;;;;;5662:42:6;5650:55;;;5632:74;;5620:2;5605:18;230:46:5;5458:254:6;8762:100:0;;;:::i;2114:361:1:-;;;;;;;;;;-1:-1:-1;2114:361:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;629:104:5:-;;;;;;;;;;-1:-1:-1;629:104:5;;;;;:::i;:::-;;:::i;:::-;;;7296:18:6;7284:31;;;7266:50;;7254:2;7239:18;629:104:5;7122:200:6;799:428:1;;;;;;:::i;:::-;;:::i;11408:182:0:-;;;;;;;;;;-1:-1:-1;11562:11:0;11556:18;11408:182;;2481:381:1;;;;;;;;;;-1:-1:-1;2481:381:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;383:39:5:-;;;;;;;;;;-1:-1:-1;383:39:5;;;;;;;;283;;;;;;;;;;-1:-1:-1;283:39:5;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;10099:25:6;;;10087:2;10072:18;283:39:5;9953:177:6;2807:107:5;;;;;;;;;;-1:-1:-1;2807:107:5;;;;;:::i;:::-;;:::i;402:391:1:-;;;;;;:::i;:::-;;:::i;1815:293::-;;;;;;;;;;-1:-1:-1;1815:293:1;;;;;:::i;:::-;;:::i;10363:708:0:-;;;;;;:::i;:::-;;:::i;8348:349::-;;;;;;:::i;:::-;;:::i;3166:367:1:-;;;;;;;;;;-1:-1:-1;3166:367:1;;;;;:::i;:::-;;:::i;2868:292::-;;;;;;;;;;-1:-1:-1;2868:292:1;;;;;:::i;:::-;;:::i;11693:435:0:-;;;;;;;;;;-1:-1:-1;11693:435:0;;;;;:::i;:::-;11963:19;11957:4;11950:33;;;11812:14;11996:26;;;;12106:4;12090:21;;12084:28;;11693:435;739:151:5;;;;;;;;;;-1:-1:-1;739:151:5;;;;;:::i;:::-;;:::i;:::-;;;13672:14:6;;13665:22;13647:41;;13635:2;13620:18;739:151:5;13507:187:6;2339:332:5;12517:13:0;:11;:13::i;:::-;2482:39:5;;::::1;2474:67;;;::::0;::::1;::::0;;13901:2:6;2474:67:5::1;::::0;::::1;13883:21:6::0;13940:2;13920:18;;;13913:30;13979:17;13959:18;;;13952:45;14014:18;;2474:67:5::1;;;;;;;;;2557:6;2552:113;2565:22:::0;;::::1;2552:113;;;2641:10;;2652:1;2641:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;2608:14;:30;2623:11;;2635:1;2623:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;2608:30;;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;2608:30:5;:46;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;2589:3;::::1;::::0;::::1;:::i;:::-;;;;2552:113;;;;2339:332:::0;;;;:::o;9021:617:0:-;9114:15;7972:9;9132:46;;:15;:46;9114:64;;9346:19;9340:4;9333:33;9396:8;9390:4;9383:22;9452:7;9445:4;9439;9429:21;9422:38;9599:8;9552:45;9549:1;9546;9541:67;9248:374;9021:617::o;2677:124:5:-;12517:13:0;:11;:13::i;:::-;2760:15:5::1;:34:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;2677:124::o;2920:661::-;12517:13:0;:11;:13::i;:::-;3045:31:5::1;3100:4:::0;3079:33:::1;::::0;::::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;;;;;;;;;;;;;;3079:33:5::1;;;;;;;;;;;;;;;;3045:67;;3127:6;3123:364;3135:15:::0;;::::1;3123:364;;;3194:16;::::0;;3171:20:::1;3194:16:::0;;;3261:1:::1;3194:16;::::0;;::::1;3247::::0;;;;;;;;3194;;3171:20;;3194:16;3247;;;3194;3247::::1;::::0;::::1;;::::0;-1:-1:-1;3247:16:5::1;3224:39;;3286:3;3277;3281:1;3277:6;;;;;;;;:::i;:::-;:12;::::0;;::::1;:6;::::0;;::::1;::::0;;;;;;:12;3337:50:::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;3368:1:::1;3337:50:::0;;::::1;::::0;3304:19:::1;3337:50:::0;;;;;;;;;;;;;;;;;;;;;;;;3326:62;;3304:19;;3326:62:::1;::::0;::::1;;:::i;:::-;;::::0;;;;;::::1;::::0;;;3415:61:::1;::::0;::::1;::::0;;;3326:62;-1:-1:-1;3326:62:5;3436:4;;3441:1;3436:7;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;3415:61;;::::0;;3457:1:::1;3415:61;::::0;::::1;::::0;;;;;;3402:10;;:7;;3410:1;;3402:10;::::1;;;;;:::i;:::-;;;;;;:74;;;;3157:330;;;3152:3;;;;;:::i;:::-;;;;3123:364;;;-1:-1:-1::0;3497:77:5::1;::::0;;;;:47:::1;3524:8;3497:47;::::0;::::1;::::0;:77:::1;::::0;3553:4:::1;::::0;3560;;3566:7;;3497:77:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3035:546;2920:661:::0;;;;;:::o;1995:338::-;12517:13:0;:11;:13::i;:::-;2141:45:5;;::::1;2133:73;;;::::0;::::1;::::0;;13901:2:6;2133:73:5::1;::::0;::::1;13883:21:6::0;13940:2;13920:18;;;13913:30;13979:17;13959:18;;;13952:45;14014:18;;2133:73:5::1;13699:339:6::0;2133:73:5::1;2222:6;2217:110;2230:22:::0;;::::1;2217:110;;;2297:16;;2314:1;2297:19;;;;;;;:::i;:::-;;;;;;;2273:5;:21:::0;2279:11:::1;;2291:1;2279:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;2273:21;;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;2273:21:5;:43;2254:3;::::1;::::0;::::1;:::i;:::-;;;;2217:110;;9720:456:0::0;9922:19;9916:4;9909:33;9968:8;9962:4;9955:22;10020:1;10013:4;10007;9997:21;9990:32;10151:8;10105:44;10102:1;10099;10094:66;9720:456::o;8762:100::-;12517:13;:11;:13::i;:::-;8834:21:::1;8852:1;8834:9;:21::i;:::-;8762:100::o:0;2114:361:1:-;2219:12;2280:28;2300:7;2280:19;:28::i;:::-;2395:63;;17674:66:6;17660:3;17656:16;;;17652:89;2395:63:1;;;17640:102:6;2435:21:1;;;17758:12:6;;;17751:28;2328:1:1;;2351:7;;2379:1;;17795:12:6;;2395:63:1;;;;;;;;;;;;;;2250:218;;;;;;2395:63;2250:218;;:::i;:::-;;;;;;;;;;;;;2243:225;;2114:361;;;;;:::o;629:104:5:-;694:12;629:104;;;;;:::o;799:428:1:-;918:11;944:6;939:156;952:25;;;939:156;;;1005:79;1046:3;1025:14;;1040:1;1025:17;;;;;;;:::i;:::-;;;;;;;:24;;1060:14;;1075:1;1060:17;;;;;;;:::i;:::-;;;;;;;1080:3;1005:12;:79::i;:::-;998:86;;;;:::i;:::-;;-1:-1:-1;979:3:1;;;;:::i;:::-;;;;939:156;;;;1125:3;1112:9;:16;;1104:40;;;;;;;19049:2:6;1104:40:1;;;19031:21:6;19088:2;19068:18;;;19061:30;19127:13;19107:18;;;19100:41;19158:18;;1104:40:1;18847:335:6;1104:40:1;1159:61;1172:14;;1188:3;1193:9;1204:3;1209:10;1159:61;;;;;;;;;;;:::i;:::-;;;;;;;;908:319;799:428;;;:::o;2481:381::-;2639:27;2705:8;2691:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2691:30:1;;2678:43;;2736:6;2731:125;2744:19;;;2731:125;;;2800:45;2806:8;;2815:1;2806:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;2819:9;;2829:1;2819:12;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;2833:8;;2842:1;2833:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;2800:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2800:5:1;;-1:-1:-1;;;2800:45:1:i;:::-;2784:10;2795:1;2784:13;;;;;;;;:::i;:::-;;;;;;;;;;:61;2765:3;;;;:::i;:::-;;;;2731:125;;;;2481:381;;;;;;;;:::o;2807:107:5:-;12517:13:0;:11;:13::i;:::-;2876:31:5::1;::::0;;;;:20:::1;5650:55:6::0;;;2876:31:5::1;::::0;::::1;5632:74:6::0;2876:8:5::1;:20;::::0;::::1;::::0;5605:18:6;;2876:31:5::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;402:391:1::0;529:11;555:6;550:111;563:20;;;550:111;;;611:39;624:8;;633:1;624:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;637:9;;647:1;637:12;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;611;:39::i;:::-;604:46;;;;:::i;:::-;;-1:-1:-1;585:3:1;;;;:::i;:::-;;;;550:111;;;;691:3;678:9;:16;;670:40;;;;;;;19049:2:6;670:40:1;;;19031:21:6;19088:2;19068:18;;;19061:30;19127:13;19107:18;;;19100:41;19158:18;;670:40:1;18847:335:6;670:40:1;725:61;738:8;;748:9;;759;770:3;775:10;725:61;;;;;;;;;;;;:::i;:::-;;;;;;;;519:274;402:391;;;;:::o;1815:293::-;1942:27;;23207:16:6;1942:27:1;;;23191:102:6;1881:12:1;;23309:11:6;;1942:27:1;;;;;;;;;;;;1989:1;2012:4;2037:1;2070:20;2082:7;2070:11;:20::i;:::-;2053:38;;;;;;;23480:3:6;23476:16;;;;23494:66;23472:89;23460:102;;23587:2;23578:12;;23331:265;2053:38:1;;;;;;;;;;;;;;;1912:189;;;;;;2053:38;1912:189;;:::i;:::-;;;;;;;;;;;;;1905:196;;1815:293;;;:::o;10363:708:0:-;12517:13;:11;:13::i;:::-;10597:19:::1;10591:4;10584:33;10643:12;10637:4;10630:26;10705:4;10699;10689:21;10811:12;10805:19;10792:11;10789:36;10786:157;;;10857:10;10851:4;10844:24;10924:4;10918;10911:18;10786:157;11020:1;10999:23:::0;;11041::::1;11051:12:::0;11041:9:::1;:23::i;:::-;10363:708:::0;:::o;8348:349::-;12517:13;:11;:13::i;:::-;8520:8:::1;8516:2;8512:17;8502:150;;8562:10;8556:4;8549:24;8633:4;8627;8620:18;8502:150;8671:19;8681:8;8671:9;:19::i;3166:367:1:-:0;12517:13:0;:11;:13::i;:::-;3244:6:1::1;3264:19;::::0;::::1;3260:228;;3306:49;::::0;:10:::1;::::0;3329:21:::1;::::0;3306:49:::1;::::0;;;3329:21;3306:10;:49:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3299:56;;;;;3260:228;;;3404:72;::::0;3457:10:::1;3404:72;::::0;::::1;23985:74:6::0;24075:18;;;24068:34;;;3393:10:1::1;::::0;::::1;::::0;23958:18:6;;3404:72:1::1;::::0;;;;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;::::1;;;;::::0;;3393:84;::::1;::::0;3404:72;3393:84:::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;3386:91:1;;-1:-1:-1;;3260:228:1::1;3505:1;3497:29;;;::::0;::::1;::::0;;24607:2:6;3497:29:1::1;::::0;::::1;24589:21:6::0;24646:2;24626:18;;;24619:30;24685:17;24665:18;;;24658:45;24720:18;;3497:29:1::1;24405:339:6::0;3497:29:1::1;3234:299;3166:367:::0;;:::o;2868:292::-;2968:17;2997:23;3023:8;:14;;;3038:69;;;;;;;;3054:7;3038:69;;;;;;3063:16;3071:7;3063;:16::i;:::-;3038:69;;;;3081:8;;3038:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3038:69:1;;;-1:-1:-1;;;3038:69:1;;;;;;;;;;;3023:100;;;;;;;;;;;;3117:4;;3023:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3140:13;;2868:292;-1:-1:-1;;;;;;2868:292:1:o;739:151:5:-;821:4;870:13;;;;;;844:22;;852:13;;870:6;852:13;:::i;:::-;844:7;:22::i;:::-;:39;;739:151;-1:-1:-1;;739:151:5:o;7292:355:0:-;7504:11;7498:18;7488:8;7485:32;7475:156;;7550:10;7544:4;7537:24;7612:4;7606;7599:18;6145:1089;6857:11;7093:16;;6941:26;;;;;;;7053:38;7050:1;;7042:78;7177:27;6145:1089::o;1516:293:1:-;1602:11;1625:31;1659:105;1667:7;1659:105;;;;;;;;;;;;1680:45;1703:7;1712;1721:3;1680:22;:45::i;:::-;1727:21;1758:4;1659:7;:105::i;:::-;1781:11;;;:21;;1516:293;-1:-1:-1;;;;;1516:293:1:o;1233:277::-;1314:11;1337:31;1371:94;1379:7;1388:8;;1371:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1398:28:1;;-1:-1:-1;1418:7:1;;-1:-1:-1;1398:19:1;;-1:-1:-1;1398:28:1:i;1740:249:5:-;1838:23;;;1800:7;1838:23;;;:14;:23;;;;;;;;1875:13;;;1871:112;;-1:-1:-1;;1911:15:5;;;;;1740:249;-1:-1:-1;1740:249:5:o;1458:276::-;1557:14;;;1514:7;1557:14;;;;;;;;;;;1585:18;;;1581:147;;-1:-1:-1;1658:4:5;;1458:276;-1:-1:-1;;1458:276:5:o;1084:368::-;1276:31;;:::i;:::-;1326:8;:13;;;1347:10;1359:69;;;;;;;;1375:7;1359:69;;;;;;1384:16;1392:7;1384;:16::i;:::-;1359:69;;;;1402:8;1359:69;;;;1412:8;1359:69;;;;1422:5;1359:69;;;;;1430:14;1326:119;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1319:126;1084:368;-1:-1:-1;;;;;;1084:368:5:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:366:6:-;76:8;86:6;140:3;133:4;125:6;121:17;117:27;107:55;;158:1;155;148:12;107:55;-1:-1:-1;181:20:6;;224:18;213:30;;210:50;;;256:1;253;246:12;210:50;293:4;285:6;281:17;269:29;;353:3;346:4;336:6;333:1;329:14;321:6;317:27;313:38;310:47;307:67;;;370:1;367;360:12;307:67;14:366;;;;;:::o;385:770::-;506:6;514;522;530;583:2;571:9;562:7;558:23;554:32;551:52;;;599:1;596;589:12;551:52;639:9;626:23;668:18;709:2;701:6;698:14;695:34;;;725:1;722;715:12;695:34;764:69;825:7;816:6;805:9;801:22;764:69;:::i;:::-;852:8;;-1:-1:-1;738:95:6;-1:-1:-1;940:2:6;925:18;;912:32;;-1:-1:-1;956:16:6;;;953:36;;;985:1;982;975:12;953:36;;1024:71;1087:7;1076:8;1065:9;1061:24;1024:71;:::i;:::-;385:770;;;;-1:-1:-1;1114:8:6;-1:-1:-1;;;;385:770:6:o;1160:154::-;1219:5;1264:2;1255:6;1250:3;1246:16;1242:25;1239:45;;;1280:1;1277;1270:12;1239:45;-1:-1:-1;1302:6:6;1160:154;-1:-1:-1;1160:154:6:o;1319:347::-;1370:8;1380:6;1434:3;1427:4;1419:6;1415:17;1411:27;1401:55;;1452:1;1449;1442:12;1401:55;-1:-1:-1;1475:20:6;;1518:18;1507:30;;1504:50;;;1550:1;1547;1540:12;1504:50;1587:4;1579:6;1575:17;1563:29;;1639:3;1632:4;1623:6;1615;1611:19;1607:30;1604:39;1601:59;;;1656:1;1653;1646:12;1671:196;1739:20;;1799:42;1788:54;;1778:65;;1768:93;;1857:1;1854;1847:12;1768:93;1671:196;;;:::o;1872:986::-;2014:6;2022;2030;2038;2046;2054;2062;2115:3;2103:9;2094:7;2090:23;2086:33;2083:53;;;2132:1;2129;2122:12;2083:53;2155;2200:7;2189:9;2155:53;:::i;:::-;2145:63;;2255:2;2244:9;2240:18;2227:32;2217:42;;2310:3;2299:9;2295:19;2282:33;2334:18;2375:2;2367:6;2364:14;2361:34;;;2391:1;2388;2381:12;2361:34;2430:58;2480:7;2471:6;2460:9;2456:22;2430:58;:::i;:::-;2507:8;;-1:-1:-1;2404:84:6;-1:-1:-1;2404:84:6;;-1:-1:-1;2561:39:6;2595:3;2580:19;;2561:39;:::i;:::-;2551:49;;2653:3;2642:9;2638:19;2625:33;2609:49;;2683:2;2673:8;2670:16;2667:36;;;2699:1;2696;2689:12;2667:36;;2738:60;2790:7;2779:8;2768:9;2764:24;2738:60;:::i;:::-;1872:986;;;;-1:-1:-1;1872:986:6;;-1:-1:-1;1872:986:6;;;;2712:86;;-1:-1:-1;;;1872:986:6:o;2863:188::-;2931:20;;2991:34;2980:46;;2970:57;;2960:85;;3041:1;3038;3031:12;3056:186;3115:6;3168:2;3156:9;3147:7;3143:23;3139:32;3136:52;;;3184:1;3181;3174:12;3136:52;3207:29;3226:9;3207:29;:::i;:::-;3197:39;3056:186;-1:-1:-1;;;3056:186:6:o;3247:129::-;3332:18;3325:5;3321:30;3314:5;3311:41;3301:69;;3366:1;3363;3356:12;3381:717;3492:6;3500;3508;3516;3524;3577:3;3565:9;3556:7;3552:23;3548:33;3545:53;;;3594:1;3591;3584:12;3545:53;3617:29;3636:9;3617:29;:::i;:::-;3607:39;;3696:2;3685:9;3681:18;3668:32;3709:30;3733:5;3709:30;:::i;:::-;3758:5;-1:-1:-1;3814:2:6;3799:18;;3786:32;3841:18;3830:30;;3827:50;;;3873:1;3870;3863:12;3827:50;3912:69;3973:7;3964:6;3953:9;3949:22;3912:69;:::i;:::-;4000:8;;-1:-1:-1;3886:95:6;-1:-1:-1;4054:38:6;;-1:-1:-1;4088:2:6;4073:18;;4054:38;:::i;:::-;4044:48;;3381:717;;;;;;;;:::o;4103:163::-;4170:20;;4230:10;4219:22;;4209:33;;4199:61;;4256:1;4253;4246:12;4271:184;4329:6;4382:2;4370:9;4361:7;4357:23;4353:32;4350:52;;;4398:1;4395;4388:12;4350:52;4421:28;4439:9;4421:28;:::i;5717:332::-;5793:6;5801;5809;5862:2;5850:9;5841:7;5837:23;5833:32;5830:52;;;5878:1;5875;5868:12;5830:52;5901:28;5919:9;5901:28;:::i;:::-;5891:38;;5948;5982:2;5971:9;5967:18;5948:38;:::i;:::-;5938:48;;6005:38;6039:2;6028:9;6024:18;6005:38;:::i;:::-;5995:48;;5717:332;;;;;:::o;6054:250::-;6139:1;6149:113;6163:6;6160:1;6157:13;6149:113;;;6239:11;;;6233:18;6220:11;;;6213:39;6185:2;6178:10;6149:113;;;-1:-1:-1;;6296:1:6;6278:16;;6271:27;6054:250::o;6309:329::-;6350:3;6388:5;6382:12;6415:6;6410:3;6403:19;6431:76;6500:6;6493:4;6488:3;6484:14;6477:4;6470:5;6466:16;6431:76;:::i;:::-;6552:2;6540:15;6557:66;6536:88;6527:98;;;;6627:4;6523:109;;6309:329;-1:-1:-1;;6309:329:6:o;6643:217::-;6790:2;6779:9;6772:21;6753:4;6810:44;6850:2;6839:9;6835:18;6827:6;6810:44;:::i;6865:252::-;6932:6;6940;6993:2;6981:9;6972:7;6968:23;6964:32;6961:52;;;7009:1;7006;6999:12;6961:52;7032:28;7050:9;7032:28;:::i;:::-;7022:38;7107:2;7092:18;;;;7079:32;;-1:-1:-1;;;6865:252:6:o;7327:510::-;7422:6;7430;7438;7491:2;7479:9;7470:7;7466:23;7462:32;7459:52;;;7507:1;7504;7497:12;7459:52;7547:9;7534:23;7580:18;7572:6;7569:30;7566:50;;;7612:1;7609;7602:12;7566:50;7651:69;7712:7;7703:6;7692:9;7688:22;7651:69;:::i;:::-;7739:8;;-1:-1:-1;7625:95:6;-1:-1:-1;7793:38:6;;-1:-1:-1;7827:2:6;7812:18;;7793:38;:::i;8205:1106::-;8384:6;8392;8400;8408;8416;8424;8477:2;8465:9;8456:7;8452:23;8448:32;8445:52;;;8493:1;8490;8483:12;8445:52;8533:9;8520:23;8562:18;8603:2;8595:6;8592:14;8589:34;;;8619:1;8616;8609:12;8589:34;8658:69;8719:7;8710:6;8699:9;8695:22;8658:69;:::i;:::-;8746:8;;-1:-1:-1;8632:95:6;-1:-1:-1;8834:2:6;8819:18;;8806:32;;-1:-1:-1;8850:16:6;;;8847:36;;;8879:1;8876;8869:12;8847:36;8918:71;8981:7;8970:8;8959:9;8955:24;8918:71;:::i;:::-;9008:8;;-1:-1:-1;8892:97:6;-1:-1:-1;9096:2:6;9081:18;;9068:32;;-1:-1:-1;9112:16:6;;;9109:36;;;9141:1;9138;9131:12;9109:36;;9180:71;9243:7;9232:8;9221:9;9217:24;9180:71;:::i;:::-;8205:1106;;;;-1:-1:-1;8205:1106:6;;-1:-1:-1;8205:1106:6;;9270:8;;8205:1106;-1:-1:-1;;;8205:1106:6:o;9316:632::-;9487:2;9539:21;;;9609:13;;9512:18;;;9631:22;;;9458:4;;9487:2;9710:15;;;;9684:2;9669:18;;;9458:4;9753:169;9767:6;9764:1;9761:13;9753:169;;;9828:13;;9816:26;;9897:15;;;;9862:12;;;;9789:1;9782:9;9753:169;;;-1:-1:-1;9939:3:6;;9316:632;-1:-1:-1;;;;;;9316:632:6:o;10135:186::-;10194:6;10247:2;10235:9;10226:7;10222:23;10218:32;10215:52;;;10263:1;10260;10253:12;10215:52;10286:29;10305:9;10286:29;:::i;11112:254::-;11180:6;11188;11241:2;11229:9;11220:7;11216:23;11212:32;11209:52;;;11257:1;11254;11247:12;11209:52;11280:29;11299:9;11280:29;:::i;11371:184::-;11423:77;11420:1;11413:88;11520:4;11517:1;11510:15;11544:4;11541:1;11534:15;11560:334;11631:2;11625:9;11687:2;11677:13;;11692:66;11673:86;11661:99;;11790:18;11775:34;;11811:22;;;11772:62;11769:88;;;11837:18;;:::i;:::-;11873:2;11866:22;11560:334;;-1:-1:-1;11560:334:6:o;11899:1181::-;11995:6;12003;12011;12019;12072:2;12060:9;12051:7;12047:23;12043:32;12040:52;;;12088:1;12085;12078:12;12040:52;12111:28;12129:9;12111:28;:::i;:::-;12101:38;;12158:2;12211;12200:9;12196:18;12183:32;12234:18;12275:2;12267:6;12264:14;12261:34;;;12291:1;12288;12281:12;12261:34;12330:58;12380:7;12371:6;12360:9;12356:22;12330:58;:::i;:::-;12407:8;;-1:-1:-1;12304:84:6;-1:-1:-1;12495:2:6;12480:18;;12467:32;;-1:-1:-1;12511:16:6;;;12508:36;;;12540:1;12537;12530:12;12508:36;12578:8;12567:9;12563:24;12553:34;;12625:7;12618:4;12614:2;12610:13;12606:27;12596:55;;12647:1;12644;12637:12;12596:55;12683:2;12670:16;12705:2;12701;12698:10;12695:36;;;12711:18;;:::i;:::-;12753:112;12861:2;12792:66;12785:4;12781:2;12777:13;12773:86;12769:95;12753:112;:::i;:::-;12740:125;;12888:2;12881:5;12874:17;12928:7;12923:2;12918;12914;12910:11;12906:20;12903:33;12900:53;;;12949:1;12946;12939:12;12900:53;13004:2;12999;12995;12991:11;12986:2;12979:5;12975:14;12962:45;13048:1;13043:2;13038;13031:5;13027:14;13023:23;13016:34;;13069:5;13059:15;;;;;11899:1181;;;;;;;:::o;13267:235::-;13351:6;13404:2;13392:9;13383:7;13379:23;13375:32;13372:52;;;13420:1;13417;13410:12;13372:52;13443:53;13488:7;13477:9;13443:53;:::i;14043:184::-;14095:77;14092:1;14085:88;14192:4;14189:1;14182:15;14216:4;14213:1;14206:15;14232:184;14284:77;14281:1;14274:88;14381:4;14378:1;14371:15;14405:4;14402:1;14395:15;14421:195;14460:3;14491:66;14484:5;14481:77;14478:103;;14561:18;;:::i;:::-;-1:-1:-1;14608:1:6;14597:13;;14421:195::o;14621:484::-;14674:3;14712:5;14706:12;14739:6;14734:3;14727:19;14765:4;14794:2;14789:3;14785:12;14778:19;;14831:2;14824:5;14820:14;14852:1;14862:218;14876:6;14873:1;14870:13;14862:218;;;14941:13;;14956:42;14937:62;14925:75;;15020:12;;;;15055:15;;;;14898:1;14891:9;14862:218;;;-1:-1:-1;15096:3:6;;14621:484;-1:-1:-1;;;;;14621:484:6:o;15110:915::-;15293:2;15282:9;15275:21;15351:18;15342:6;15336:13;15332:38;15327:2;15316:9;15312:18;15305:66;15435:4;15429:2;15421:6;15417:15;15411:22;15407:33;15402:2;15391:9;15387:18;15380:61;15505:4;15499:2;15491:6;15487:15;15481:22;15477:33;15472:2;15461:9;15457:18;15450:61;15576:4;15570:2;15562:6;15558:15;15552:22;15548:33;15542:3;15531:9;15527:19;15520:62;15256:4;15629:3;15621:6;15617:16;15611:23;15671:4;15665:3;15654:9;15650:19;15643:33;15699:63;15757:3;15746:9;15742:19;15728:12;15699:63;:::i;:::-;15685:77;;15811:3;15803:6;15799:16;15793:23;15882:66;15870:9;15862:6;15858:22;15854:95;15847:4;15836:9;15832:20;15825:125;15967:52;16012:6;15996:14;15967:52;:::i;:::-;15959:60;15110:915;-1:-1:-1;;;;;15110:915:6:o;16030:1448::-;16290:4;16319:2;16359;16348:9;16344:18;16381:42;16462:2;16454:6;16450:15;16439:9;16432:34;16485:2;16535;16527:6;16523:15;16518:2;16507:9;16503:18;16496:43;16558:2;16548:12;;16596:2;16591;16580:9;16576:18;16569:30;16619:6;16654;16648:13;16685:6;16677;16670:22;16723:3;16712:9;16708:19;16701:26;;16786:3;16776:6;16773:1;16769:14;16758:9;16754:30;16750:40;16736:54;;16825:2;16817:6;16813:15;16846:1;16856:593;16870:6;16867:1;16864:13;16856:593;;;16935:22;;;16959:66;16931:95;16919:108;;17050:13;;17128:9;;17086:10;17124:18;;;17109:34;;17190:11;;;17184:18;17180:27;17163:15;;;17156:52;17247:11;;17241:18;17279:15;;;17272:27;;;17322:47;17353:15;;;17241:18;17322:47;:::i;:::-;17312:57;-1:-1:-1;;17427:12:6;;;;17392:15;;;;16892:1;16885:9;16856:593;;;-1:-1:-1;17466:6:6;;16030:1448;-1:-1:-1;;;;;;;;;;;16030:1448:6:o;17818:894::-;18067:3;18105:6;18099:13;18121:66;18180:6;18175:3;18168:4;18160:6;18156:17;18121:66;:::i;:::-;18218:6;18213:3;18209:16;18196:29;;18244:66;18355:2;18346:6;18341:3;18337:16;18333:25;18326:5;18319:40;18412:66;18403:6;18398:3;18394:16;18390:89;18386:1;18379:5;18375:13;18368:112;18533:2;18524:6;18519:3;18515:16;18511:25;18507:1;18500:5;18496:13;18489:48;;18568:6;18562:13;18584:78;18653:8;18649:1;18642:5;18638:13;18631:4;18623:6;18619:17;18584:78;:::i;:::-;18682:20;18704:1;18678:28;;17818:894;-1:-1:-1;;;;;;;17818:894:6:o;18717:125::-;18782:9;;;18803:10;;;18800:36;;;18816:18;;:::i;19187:860::-;19488:3;19477:9;19470:22;19529:6;19523:3;19512:9;19508:19;19501:35;19451:4;19559:66;19551:6;19548:78;19545:98;;;19639:1;19636;19629:12;19545:98;19673:6;19670:1;19666:14;19731:6;19723;19717:3;19706:9;19702:19;19689:49;19806:42;19886:15;;;19879:4;19864:20;;19857:45;19933:2;19918:18;;19911:34;;;;-1:-1:-1;19976:2:6;19961:18;;19954:34;;;;20025:15;;;20019:3;20004:19;;19997:44;19759:22;19783:3;19755:32;;19187:860;-1:-1:-1;;19187:860:6:o;20052:580::-;20129:4;20135:6;20195:11;20182:25;20285:66;20274:8;20258:14;20254:29;20250:102;20230:18;20226:127;20216:155;;20367:1;20364;20357:12;20216:155;20394:33;;20446:20;;;-1:-1:-1;20489:18:6;20478:30;;20475:50;;;20521:1;20518;20511:12;20475:50;20554:4;20542:17;;-1:-1:-1;20585:14:6;20581:27;;;20571:38;;20568:58;;;20622:1;20619;20612:12;20637:325;20725:6;20720:3;20713:19;20777:6;20770:5;20763:4;20758:3;20754:14;20741:43;;20829:1;20822:4;20813:6;20808:3;20804:16;20800:27;20793:38;20695:3;20951:4;20881:66;20876:2;20868:6;20864:15;20860:88;20855:3;20851:98;20847:109;20840:116;;20637:325;;;;:::o;20967:2092::-;21357:3;21370:22;;;21342:19;;21427:22;;;21309:4;21507:6;21480:3;21465:19;;21309:4;21541:225;21555:6;21552:1;21549:13;21541:225;;;21647:10;21620:25;21638:6;21620:25;:::i;:::-;21616:42;21604:55;;21682:4;21741:15;;;;21706:12;;;;21577:1;21570:9;21541:225;;;21545:3;21785:4;21775:14;;21834:9;21829:3;21825:19;21820:2;21809:9;21805:18;21798:47;21867:3;21891:6;21886:3;21879:19;21925:2;21920:3;21916:12;21907:21;;21981:2;21971:6;21968:1;21964:14;21959:3;21955:24;21951:33;22009:6;22035:1;22045:843;22061:6;22056:3;22053:15;22045:843;;;22150:66;22144:3;22136:6;22132:16;22128:89;22121:5;22114:104;22270:8;22257:22;22359:66;22350:6;22334:14;22330:27;22326:100;22306:18;22302:125;22292:153;;22441:1;22438;22431:12;22292:153;22471:31;;22576:14;;;;22529:19;22617:18;22606:30;;22603:50;;;22649:1;22646;22639:12;22603:50;22702:6;22686:14;22682:27;22673:7;22669:41;22666:61;;;22723:1;22720;22713:12;22666:61;22750:50;22793:6;22785;22776:7;22750:50;:::i;:::-;22864:14;;;;22740:60;-1:-1:-1;;;22825:17:6;;;;22087:1;22078:11;22045:843;;;22049:3;;22905:6;22897:14;;;;;;22947:6;22942:2;22931:9;22927:18;22920:34;22990:6;22985:2;22974:9;22970:18;22963:34;23006:47;23048:3;23037:9;23033:19;23025:6;7919:42;7908:54;7896:67;;7842:127;23006:47;20967:2092;;;;;;;;;;:::o;24113:287::-;24242:3;24280:6;24274:13;24296:66;24355:6;24350:3;24343:4;24335:6;24331:17;24296:66;:::i;:::-;24378:16;;;;;24113:287;-1:-1:-1;;24113:287:6:o;24749:969::-;24970:2;24959:9;24952:21;25028:10;25019:6;25013:13;25009:30;25004:2;24993:9;24989:18;24982:58;25094:4;25086:6;25082:17;25076:24;25071:2;25060:9;25056:18;25049:52;24933:4;25148:2;25140:6;25136:15;25130:22;25189:4;25183:3;25172:9;25168:19;25161:33;25217:51;25263:3;25252:9;25248:19;25234:12;25217:51;:::i;:::-;25203:65;;25317:2;25309:6;25305:15;25299:22;25387:66;25375:9;25367:6;25363:22;25359:95;25352:4;25341:9;25337:20;25330:125;25478:40;25511:6;25495:14;25478:40;:::i;:::-;25587:3;25575:16;;;;25569:23;25562:31;25555:39;25549:3;25534:19;;25527:68;-1:-1:-1;;;25668:42:6;25656:55;;;;25649:4;25634:20;;;25627:85;25464:54;24749:969::o;25723:478::-;25793:5;25841:4;25829:9;25824:3;25820:19;25816:30;25813:50;;;25859:1;25856;25849:12;25813:50;25892:4;25886:11;25936:4;25928:6;25924:17;26007:6;25995:10;25992:22;25971:18;25959:10;25956:34;25953:62;25950:88;;;26018:18;;:::i;:::-;26054:4;26047:24;26119:16;;26104:32;;26190:2;26175:18;;;26169:25;26152:15;;;26145:50;;;;-1:-1:-1;26089:6:6;25723:478;-1:-1:-1;25723:478:6:o;26206:258::-;26305:6;26358:2;26346:9;26337:7;26333:23;26329:32;26326:52;;;26374:1;26371;26364:12;26326:52;26397:61;26450:7;26439:9;26397:61;:::i;26469:682::-;26572:6;26625:3;26613:9;26604:7;26600:23;26596:33;26593:53;;;26642:1;26639;26632:12;26593:53;26675:2;26669:9;26717:4;26709:6;26705:17;26788:6;26776:10;26773:22;26752:18;26740:10;26737:34;26734:62;26731:88;;;26799:18;;:::i;:::-;26835:2;26828:22;26874:16;;26859:32;;26934:2;26919:18;;26913:25;26947:30;26913:25;26947:30;:::i;:::-;27005:2;26993:15;;26986:30;27049:70;27111:7;27106:2;27091:18;;27049:70;:::i;:::-;27044:2;27032:15;;27025:95;27036:6;26469:682;-1:-1:-1;;;26469:682:6:o

Swarm Source

ipfs://03802418fd76c668814738a0ada7739fe057268c6807317835b9193206c27973

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
0x26DA582889f59EaaE9dA1f063bE0140CD93E6a4f
Net Worth in USD
$307.51

Net Worth in ETH
0.14769

Token Allocations
ETH 48.86%
XDAI 33.18%
BNB 12.71%
Others 5.26%
Chain Token Portfolio % Price Amount Value
GNO33.18%$1102.0195$102.02
ETH
Ether (ETH)
23.15%$2,080.130.0342$71.19
LINEA13.76%$2,082.120.0203$42.32
BSC10.75%$652.590.0506$33.05
SCROLL8.43%$2,080.130.0125$25.93
POL2.92%$0.09567693.9092$8.98
OPBNB1.96%$653.170.00922709$6.03
AVAX1.73%$9.60.5525$5.31
BASE1.67%$2,079.990.00247103$5.14
BLAST0.88%$2,079.990.00129483$2.69
ARB0.67%$2,078.40.00099261$2.06
MANTLE0.35%$0.7094551.4956$1.06
OP0.20%$2,078.040.00030022$0.623865
CELO0.14%$0.0738245.9508$0.439316
TAIKO0.09%$2,080.130.00013413$0.279009
FRAXTAL0.08%$0.6087460.4191$0.255109
MOVR0.02%$1.280.0486$0.062124
GLMR0.02%$0.0122124.3312$0.052892
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.