ETH Price: $3,403.70 (+2.07%)

Contract

0x53d838dDe74a69EDa87356fe21Cc800B865F3D89
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw181192362023-09-12 9:03:47474 days ago1694509427IN
0x53d838dD...B865F3D89
0 ETH0.000454714.59736044
Add Liquidity An...168735622023-03-21 4:12:11649 days ago1679371931IN
0x53d838dD...B865F3D89
0 ETH0.0037526715.15216776
Transfer168509752023-03-18 0:06:11652 days ago1679097971IN
0x53d838dD...B865F3D89
2.389437 ETH0.0007357433.27499971
Add Liquidity An...168508152023-03-17 23:33:35652 days ago1679096015IN
0x53d838dD...B865F3D89
0 ETH0.0072239330.87204683
Transfer168474732023-03-17 12:16:23652 days ago1679055383IN
0x53d838dD...B865F3D89
1.02084 ETH0.0006093727.56000357
Transfer168469422023-03-17 10:28:35653 days ago1679048915IN
0x53d838dD...B865F3D89
1.150106 ETH0.0005322324.0708316
Add Liquidity An...167928642023-03-09 19:56:35660 days ago1678391795IN
0x53d838dD...B865F3D89
0 ETH0.0098960439.95560285
Transfer166388642023-02-16 4:19:23682 days ago1676521163IN
0x53d838dD...B865F3D89
1.973361 ETH0.000801836.2628107
Add Liquidity An...166387812023-02-16 4:02:47682 days ago1676520167IN
0x53d838dD...B865F3D89
0 ETH0.0109214944.10282528
Transfer166340032023-02-15 12:00:47682 days ago1676462447IN
0x53d838dD...B865F3D89
1.108745 ETH0.0006950631.4354487
Add Liquidity An...166055932023-02-11 12:43:35686 days ago1676119415IN
0x53d838dD...B865F3D89
0 ETH0.0068994519.65741483
Add Liquidity An...165388502023-02-02 4:51:11696 days ago1675313471IN
0x53d838dD...B865F3D89
0 ETH0.0047675819.25361695
Add Liquidity An...165005782023-01-27 20:37:11701 days ago1674851831IN
0x53d838dD...B865F3D89
0 ETH0.0050549920.4129313
Add Liquidity An...164870552023-01-25 23:16:35703 days ago1674688595IN
0x53d838dD...B865F3D89
0 ETH0.0057864223.37109009
Add Liquidity An...164471852023-01-20 9:41:35709 days ago1674207695IN
0x53d838dD...B865F3D89
0 ETH0.0037447816.00429963
Add Liquidity An...163966872023-01-13 8:29:59716 days ago1673598599IN
0x53d838dD...B865F3D89
0 ETH0.0038713716.54462186
Add Liquidity An...163956592023-01-13 5:02:47716 days ago1673586167IN
0x53d838dD...B865F3D89
0 ETH0.0043439718.56573933
Add Liquidity An...163860602023-01-11 20:50:47717 days ago1673470247IN
0x53d838dD...B865F3D89
0 ETH0.0058599723.65983776
Add Liquidity An...162375092022-12-22 3:19:47738 days ago1671679187IN
0x53d838dD...B865F3D89
0 ETH0.002991512.78485969
Transfer161823052022-12-14 10:22:11746 days ago1671013331IN
0x53d838dD...B865F3D89
0.850719 ETH0.0003188814.42188616
Add Liquidity An...161816992022-12-14 8:19:23746 days ago1671005963IN
0x53d838dD...B865F3D89
0 ETH0.0041366916.70256373
Transfer161816522022-12-14 8:09:59746 days ago1671005399IN
0x53d838dD...B865F3D89
1.623283 ETH0.0003301614.93198039
Add Liquidity An...161316182022-12-07 8:21:35753 days ago1670401295IN
0x53d838dD...B865F3D89
0 ETH0.004033417.23782581
Add Liquidity An...161184202022-12-05 11:50:59754 days ago1670241059IN
0x53d838dD...B865F3D89
0 ETH0.0032683413.96799183
Add Liquidity An...159705502022-11-14 20:05:11775 days ago1668456311IN
0x53d838dD...B865F3D89
0 ETH0.0052135322.28046586
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
181192362023-09-12 9:03:47474 days ago1694509427
0x53d838dD...B865F3D89
2.5121655 ETH
168735622023-03-21 4:12:11649 days ago1679371931
0x53d838dD...B865F3D89
0.00146746 ETH
168735622023-03-21 4:12:11649 days ago1679371931
0x53d838dD...B865F3D89
0.03029446 ETH
168508152023-03-17 23:33:35652 days ago1679096015
0x53d838dD...B865F3D89
0.00286102 ETH
168508152023-03-17 23:33:35652 days ago1679096015
0x53d838dD...B865F3D89
4.79824986 ETH
167928642023-03-09 19:56:35660 days ago1678391795
0x53d838dD...B865F3D89
0.00370938 ETH
167928642023-03-09 19:56:35660 days ago1678391795
0x53d838dD...B865F3D89
0.07344677 ETH
166387812023-02-16 4:02:47682 days ago1676520167
0x53d838dD...B865F3D89
0.00409953 ETH
166387812023-02-16 4:02:47682 days ago1676520167
0x53d838dD...B865F3D89
1.52487925 ETH
166363552023-02-15 19:54:47682 days ago1676490887
0x53d838dD...B865F3D89
0.79870952 ETH
166055932023-02-11 12:43:35686 days ago1676119415
0x53d838dD...B865F3D89
0.00181347 ETH
166055932023-02-11 12:43:35686 days ago1676119415
0x53d838dD...B865F3D89
1.62779531 ETH
165388502023-02-02 4:51:11696 days ago1675313471
0x53d838dD...B865F3D89
0.00180593 ETH
165388502023-02-02 4:51:11696 days ago1675313471
0x53d838dD...B865F3D89
0.01766733 ETH
165208152023-01-30 16:24:11698 days ago1675095851
0x53d838dD...B865F3D89
0.07558864 ETH
165153382023-01-29 22:03:47699 days ago1675029827
0x53d838dD...B865F3D89
0.91165459 ETH
165048992023-01-28 11:04:23700 days ago1674903863
0x53d838dD...B865F3D89
0.00706139 ETH
165005782023-01-27 20:37:11701 days ago1674851831
0x53d838dD...B865F3D89
0.00169927 ETH
165005782023-01-27 20:37:11701 days ago1674851831
0x53d838dD...B865F3D89
0.57402079 ETH
164870552023-01-25 23:16:35703 days ago1674688595
0x53d838dD...B865F3D89
0.00221674 ETH
164870552023-01-25 23:16:35703 days ago1674688595
0x53d838dD...B865F3D89
0.00961926 ETH
164471852023-01-20 9:41:35709 days ago1674207695
0x53d838dD...B865F3D89
0.00150045 ETH
164471852023-01-20 9:41:35709 days ago1674207695
0x53d838dD...B865F3D89
0.0322058 ETH
163966872023-01-13 8:29:59716 days ago1673598599
0x53d838dD...B865F3D89
0.00153821 ETH
163966872023-01-13 8:29:59716 days ago1673598599
0x53d838dD...B865F3D89
0.28431753 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SPContractNoOracle

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2022-07-14
*/

// SPDX-License-Identifier: No License (None)
pragma solidity ^0.8.0;

interface IERC20 {
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function approve(address spender, uint256 amount) external returns (bool);
}

interface ISmartSwap {
    function isSystem(address caller) external returns(bool);   // check if caller is system wallet.
    function decimals(address token) external returns(uint256);   // token address => token decimals
    function processingFee() external returns(uint256); // Processing fee
    function companyFee() external returns(uint256); // Company fee
    //function reimburse(address user, uint256 amount) external; // reimburse user for SP payment
    function swap(
        address tokenA,
        address tokenB, 
        address receiver,
        uint256 amountA,
        address licensee,
        bool isInvestment,
        uint128 minimumAmountToClaim,   // do not claim on user behalf less of this amount. Only exception if order fulfilled.
        uint128 limitPice,   // Do not match user if token A price less this limit
        uint256 fee          // company + licensee fee amount
    )
        external
        payable
        returns (bool);

    function cancel(
        address tokenA,
        address tokenB, 
        address receiver,
        uint256 amountA    //amount of tokenA to cancel
    )
        external
        payable
        returns (bool);

    function claimToken(
        address tokenA, // foreignToken
        address tokenB, // nativeToken
        address sender,
        address receiver,
        uint128 amountA,    //amount of tokenA that has to be swapped
        uint128 currentRate,     // rate with 18 decimals: tokenA price / tokenB price
        uint256 foreignBalance,  // total tokens amount sent by user to pair on other chain
        uint256 foreignSpent,   // total tokens spent by SmartSwap pair
        uint256 nativeEncoded   // (nativeRate, nativeSpent) = _decode(nativeEncoded)
    )   
        external
        returns (bool);
}

contract SPContractNoOracle{

    address public owner;
    address public nativeTokenReceiver;
    address public nativeToken;
    mapping(address => address) public foreignToken;    // SmartSwap => foreign token
    mapping(address => address) public foreignTokenReceiver;    // SmartSwap => receiver address where tokens will be transferred from SmartSwap

    //ISmartSwap public smartSwap; // assign SmartSwap address here
    uint256 private feeAmountLimit; // limit of amount that System withdraw for fee reimbursement
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event FeeTransfer(address indexed systemWallet, uint256 fee);
    event Deposit(uint256 value);

    // run only once from proxy
    function initialize(
        address _owner,     // contract owner
        address _nativeToken, // native token that will be send to SmartSwap
        address _nativeTokenReceiver, // address on Binance to deposit native token
        uint256 _feeAmountLimit, // limit of amount that System may withdraw for fee reimbursement
        address[] calldata _foreignToken, // foreign token that has to be received from SmartSwap (on foreign chain)
        address[] calldata _foreignTokenReceiver, // address of foreign SP contract deposit foreign token
        address[] calldata _smartSwap   // address of local SmartSwap contract
    )
        external
    {
        require(owner == address(0)); // run only once
        require(
            _nativeToken != address(0)
            && _nativeTokenReceiver != address(0)
        );
        nativeToken = _nativeToken;
        nativeTokenReceiver = _nativeTokenReceiver;
        for (uint i; i < _smartSwap.length; i++) {
            foreignTokenReceiver[_smartSwap[i]] = _foreignTokenReceiver[i];
            foreignToken[_smartSwap[i]] = _foreignToken[i];
        }
        feeAmountLimit = _feeAmountLimit;
        //smartSwap = ISmartSwap(_smartSwap[0]);
        owner = _owner;
        emit OwnershipTransferred(address(0), _owner);
    }

    receive() external payable {
        emit Deposit(msg.value);
    }

    /**
    * @dev Throws if called by any account other than the system.
    */
    modifier onlySystem(address _smartSwap) {
        require(ISmartSwap(_smartSwap).isSystem(msg.sender), "Caller is not the system");
        _;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }

    // set limit of amount that System withdraw for fee reimbursement
    function setFeeAmountLimit(uint256 amount) external onlyOwner {
        feeAmountLimit = amount;
    }


    // set limit of amount that System withdraw for fee reimbursement
    function setForeignToken(address _localSmartSwap, address _foreignToken, address _foreignTokenReceiver) external onlyOwner {
        foreignTokenReceiver[_localSmartSwap] = _foreignTokenReceiver;
        foreignToken[_localSmartSwap] = _foreignToken;
    }

    // get limit of amount that System withdraw for fee reimbursement
    function getFeeAmountLimit() external view returns(uint256) {
        return feeAmountLimit;
    }

    function cancel(address smartSwap, uint256 amount) external onlySystem(smartSwap) {
        ISmartSwap(smartSwap).cancel(nativeToken, foreignToken[smartSwap], foreignTokenReceiver[smartSwap], amount);
    }

    // Allow owner withdraw tokens from contract
    function withdraw(address token, uint256 amount) external onlyOwner {
        if (token < address(9))
            safeTransferETH(msg.sender, amount);
        else
            safeTransfer(token, msg.sender, amount);
    }

    // Allow owner withdraw tokens from contract
    function withdrawSystem(address smartSwap, uint256 amount) external onlySystem(smartSwap) {
        require(foreignTokenReceiver[smartSwap] != address(0), "Wrong smartSwap");
        address token = nativeToken;
        if (token < address(9))
            safeTransferETH(nativeTokenReceiver, amount);
        else
            safeTransfer(token, nativeTokenReceiver, amount);
    }    



    // add liquidity to counterparty 
    function addLiquidityAndClaimBehalf(
        address smartSwap, // address of local SmartSwap
        uint256 feeAmount,   // processing fee amount to reimburse system wallet.
        uint128 amount,    //amount of native token that has to be swapped (amount of provided liquidity)
        uint128 currentRate,     // rate with 18 decimals: tokenB price / tokenA price
        uint128[] memory claimAmount, // claim amount (in foreign tokens).
        uint256[] memory foreignBalance,  // total tokens amount sent by user to pair on other chain
        address[] memory senderCounterparty, // correspondent value from SwapRequest event
        address[] memory receiverCounterparty,    // correspondent value from SwapRequest event
        uint256 foreignSpent,   // total tokens spent by SmartSwap pair
        uint256 nativeEncoded   // (nativeRate, nativeSpent) = _decode(nativeEncoded)        
    ) 
        external 
        onlySystem(smartSwap) 
    {
        require(feeAmountLimit >= feeAmount, "Fee limit exceeded");
        require(foreignTokenReceiver[smartSwap] != address(0), "Wrong smartSwap");

        feeAmountLimit -= feeAmount;
        require(claimAmount.length == foreignBalance.length &&
            senderCounterparty.length == receiverCounterparty.length &&
            foreignBalance.length == senderCounterparty.length,
            "Wrong length"
        );
        // send swap request
        swap(smartSwap, amount, feeAmount);
        // claim tokens on users behalf
        claimBehalf(smartSwap, currentRate, claimAmount, foreignBalance, senderCounterparty, receiverCounterparty, foreignSpent, nativeEncoded);
    }

    function claimBehalf(
        address smartSwap, // address of local SmartSwap
        uint128 currentRate,     // rate with 18 decimals: tokenB price / tokenA price
        uint128[] memory claimAmount, // claim amount (in foreign tokens).
        uint256[] memory foreignBalance,  // total tokens amount sent by user to pair on other chain
        address[] memory senderCounterparty, // correspondent value from SwapRequest event
        address[] memory receiverCounterparty,    // correspondent value from SwapRequest event
        uint256 foreignSpent,   // total tokens spent by SmartSwap pair
        uint256 nativeEncoded   // (nativeRate, nativeSpent) = _decode(nativeEncoded)  
    ) 
        internal 
    {
        //uint256 totalAmount;
        address _foreignToken = foreignToken[smartSwap];
        for (uint256 i = 0; i < claimAmount.length; i++) {
            //totalAmount += claimAmount[i];
            ISmartSwap(smartSwap).claimToken(
                _foreignToken,
                nativeToken,
                senderCounterparty[i],
                receiverCounterparty[i],
                claimAmount[i],
                currentRate, 
                foreignBalance[i],
                foreignSpent,
                nativeEncoded
            );
        }
        //require(totalAmount * currentRate / (10**(18+t.foreignDecimals-t.nativeDecimals)) <= uint256(amount), "Insuficiant amount");
    }

    function swap(address smartSwap, uint128 amount, uint256 feeAmount) internal {
        uint256 processingFee = ISmartSwap(smartSwap).processingFee();
        if (nativeToken > address(9)) {
            // can't get company fee amount
            IERC20(nativeToken).approve(address(smartSwap), uint256(amount));
            ISmartSwap(smartSwap).swap{value: processingFee}(
                nativeToken, 
                foreignToken[smartSwap],
                foreignTokenReceiver[smartSwap], 
                amount, 
                address(0),
                false, 
                0,
                0,
                0
            );            
        } else {    // native coin (ETH, BNB)
            uint256 fee = uint256(amount)*ISmartSwap(smartSwap).companyFee()/10000;  // company fee
            processingFee = fee + processingFee;
            ISmartSwap(smartSwap).swap{value: uint256(amount) + processingFee}(
                nativeToken, 
                foreignToken[smartSwap],
                foreignTokenReceiver[smartSwap], 
                amount, 
                address(0),
                false, 
                0,
                0,
                fee
            );
        }
        require(processingFee <= feeAmount, "Insuficiant fee");
        feeAmount -= processingFee; // we already paid processing fee to SmartSwap contract
        if (feeAmount != 0) {
            payable(msg.sender).transfer(feeAmount);
            emit FeeTransfer(msg.sender, feeAmount);
        }        
    }

    function safeTransfer(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TRANSFER_FAILED');
    }

    function safeTransferETH(address to, uint value) internal {
        (bool success,) = to.call{value:value}(new bytes(0));
        require(success, 'ETH_TRANSFER_FAILED');
    }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"systemWallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"FeeTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"smartSwap","type":"address"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"uint128","name":"amount","type":"uint128"},{"internalType":"uint128","name":"currentRate","type":"uint128"},{"internalType":"uint128[]","name":"claimAmount","type":"uint128[]"},{"internalType":"uint256[]","name":"foreignBalance","type":"uint256[]"},{"internalType":"address[]","name":"senderCounterparty","type":"address[]"},{"internalType":"address[]","name":"receiverCounterparty","type":"address[]"},{"internalType":"uint256","name":"foreignSpent","type":"uint256"},{"internalType":"uint256","name":"nativeEncoded","type":"uint256"}],"name":"addLiquidityAndClaimBehalf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"smartSwap","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"cancel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"foreignToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"foreignTokenReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeeAmountLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_nativeToken","type":"address"},{"internalType":"address","name":"_nativeTokenReceiver","type":"address"},{"internalType":"uint256","name":"_feeAmountLimit","type":"uint256"},{"internalType":"address[]","name":"_foreignToken","type":"address[]"},{"internalType":"address[]","name":"_foreignTokenReceiver","type":"address[]"},{"internalType":"address[]","name":"_smartSwap","type":"address[]"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nativeToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nativeTokenReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setFeeAmountLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_localSmartSwap","type":"address"},{"internalType":"address","name":"_foreignToken","type":"address"},{"internalType":"address","name":"_foreignTokenReceiver","type":"address"}],"name":"setForeignToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"smartSwap","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawSystem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b50611993806100206000396000f3fe6080604052600436106100e15760003560e01c8063d27bd7411161007f578063e17eaa4e11610059578063e17eaa4e146102ab578063e2097298146102cb578063f2fde38b146102e9578063f3fef3a31461030957600080fd5b8063d27bd74114610235578063d2a63e5c1461026b578063e1758bd81461028b57600080fd5b80638c90c121116100bb5780638c90c121146101b55780638da5cb5b146101d557806398590ef9146101f5578063d0d39e481461021557600080fd5b80631aad8a65146101205780633e55e99d1461014257806381ffc6281461019557600080fd5b3661011b576040513481527f4d6ce1e535dbade1c23defba91e23b8f791ce5edc0cc320257a2b364e4e384269060200160405180910390a1005b600080fd5b34801561012c57600080fd5b5061014061013b36600461149f565b610329565b005b34801561014e57600080fd5b5061017861015d36600461147d565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101a157600080fd5b506101406101b03660046114e2565b6103a0565b3480156101c157600080fd5b506101406101d0366004611704565b61058c565b3480156101e157600080fd5b50600054610178906001600160a01b031681565b34801561020157600080fd5b506101406102103660046115ba565b6105bb565b34801561022157600080fd5b506101406102303660046115e4565b61070c565b34801561024157600080fd5b5061017861025036600461147d565b6003602052600090815260409020546001600160a01b031681565b34801561027757600080fd5b50600154610178906001600160a01b031681565b34801561029757600080fd5b50600254610178906001600160a01b031681565b3480156102b757600080fd5b506101406102c63660046115ba565b6108dc565b3480156102d757600080fd5b5060055460405190815260200161018c565b3480156102f557600080fd5b5061014061030436600461147d565b610a14565b34801561031557600080fd5b506101406103243660046115ba565b610afe565b6000546001600160a01b0316331461035c5760405162461bcd60e51b815260040161035390611806565b60405180910390fd5b6001600160a01b03928316600090815260046020908152604080832080549487166001600160a01b0319958616179055600390915290208054929093169116179055565b6000546001600160a01b0316156103b657600080fd5b6001600160a01b038916158015906103d657506001600160a01b03881615155b6103df57600080fd5b600280546001600160a01b03808c166001600160a01b03199283161790925560018054928b169290911691909117905560005b818110156105325784848281811061042c5761042c611931565b9050602002016020810190610441919061147d565b6004600085858581811061045757610457611931565b905060200201602081019061046c919061147d565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b031916929091169190911790558686828181106104af576104af611931565b90506020020160208101906104c4919061147d565b600360008585858181106104da576104da611931565b90506020020160208101906104ef919061147d565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b031916929091169190911790558061052a81611900565b915050610412565b506005879055600080546001600160a01b0319166001600160a01b038c1690811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350505050505050505050565b6000546001600160a01b031633146105b65760405162461bcd60e51b815260040161035390611806565b600555565b604051631a66e79360e11b815233600482015282906001600160a01b038216906334cdcf2690602401602060405180830381600087803b1580156105fe57600080fd5b505af1158015610612573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063691906116e2565b6106525760405162461bcd60e51b8152600401610353906117cf565b6002546001600160a01b038481166000818152600360209081526040808320546004928390529281902054905163850853fd60e01b81529585169186019190915290831660248501529091166044830152606482018490529063850853fd90608401602060405180830381600087803b1580156106ce57600080fd5b505af11580156106e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070691906116e2565b50505050565b604051631a66e79360e11b81523360048201528a906001600160a01b038216906334cdcf2690602401602060405180830381600087803b15801561074f57600080fd5b505af1158015610763573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078791906116e2565b6107a35760405162461bcd60e51b8152600401610353906117cf565b8960055410156107ea5760405162461bcd60e51b8152602060048201526012602482015271119959481b1a5b5a5d08195e18d95959195960721b6044820152606401610353565b6001600160a01b038b8116600090815260046020526040902054166108435760405162461bcd60e51b815260206004820152600f60248201526e057726f6e6720736d6172745377617608c1b6044820152606401610353565b896005600082825461085591906118e9565b90915550508551875114801561086c575083518551145b8015610879575084518651145b6108b45760405162461bcd60e51b815260206004820152600c60248201526b0aee4dedcce40d8cadccee8d60a31b6044820152606401610353565b6108bf8b8a8c610b53565b6108cf8b89898989898989610f5e565b5050505050505050505050565b604051631a66e79360e11b815233600482015282906001600160a01b038216906334cdcf2690602401602060405180830381600087803b15801561091f57600080fd5b505af1158015610933573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095791906116e2565b6109735760405162461bcd60e51b8152600401610353906117cf565b6001600160a01b03838116600090815260046020526040902054166109cc5760405162461bcd60e51b815260206004820152600f60248201526e057726f6e6720736d6172745377617608c1b6044820152606401610353565b6002546001600160a01b031660098110156109fc576001546109f7906001600160a01b0316846110f9565b610706565b6001546107069082906001600160a01b0316856111b1565b6000546001600160a01b03163314610a3e5760405162461bcd60e51b815260040161035390611806565b6001600160a01b038116610aa35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610353565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610b285760405162461bcd60e51b815260040161035390611806565b60096001600160a01b0383161015610b4857610b4433826110f9565b5050565b610b448233836111b1565b6000836001600160a01b031663de1881a86040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610b9057600080fd5b505af1158015610ba4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc8919061171d565b60025490915060096001600160a01b039091161115610d295760025460405163095ea7b360e01b81526001600160a01b0386811660048301526001600160801b03861660248301529091169063095ea7b390604401602060405180830381600087803b158015610c3757600080fd5b505af1158015610c4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6f91906116e2565b506002546001600160a01b038086166000818152600360209081526040808320546004928390528184205491516370722f8760e11b8152949663e0e45f0e968996610cd1969282169593821694909116928c9291829182918291829101611771565b6020604051808303818588803b158015610cea57600080fd5b505af1158015610cfe573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d2391906116e2565b50610ea1565b6000612710856001600160a01b031663a27a88596040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610d6957600080fd5b505af1158015610d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da1919061171d565b610db4906001600160801b0387166118ca565b610dbe91906118a8565b9050610dca8282611890565b91506001600160a01b03851663e0e45f0e610dee846001600160801b038816611890565b6002546001600160a01b038981166000908152600360209081526040808320546004928390528184205491516001600160e01b031960e08a901b168152610e4c968616959182169492909116928d92918291829182918e9101611771565b6020604051808303818588803b158015610e6557600080fd5b505af1158015610e79573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e9e91906116e2565b50505b81811115610ee35760405162461bcd60e51b815260206004820152600f60248201526e496e737566696369616e742066656560881b6044820152606401610353565b610eed81836118e9565b9150811561070657604051339083156108fc029084906000818181858888f19350505050158015610f22573d6000803e3d6000fd5b5060405182815233907f41a4b099d16420f275b83ab9bcb5571fa53e7b424a4f7177e0a6e6bce42575a29060200160405180910390a250505050565b6001600160a01b03808916600090815260036020526040812054909116905b87518110156110ed57896001600160a01b031663569f6f5783600260009054906101000a90046001600160a01b0316898581518110610fbe57610fbe611931565b6020026020010151898681518110610fd857610fd8611931565b60200260200101518d8781518110610ff257610ff2611931565b60200260200101518f8e898151811061100d5761100d611931565b60209081029190910101516040516001600160e01b031960e08a901b1681526001600160a01b039788166004820152958716602487015293861660448601529490911660648401526001600160801b03908116608484015290921660a482015260c481019190915260e48101879052610104810186905261012401602060405180830381600087803b1580156110a257600080fd5b505af11580156110b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110da91906116e2565b50806110e581611900565b915050610f7d565b50505050505050505050565b604080516000808252602082019092526001600160a01b0384169083906040516111239190611736565b60006040518083038185875af1925050503d8060008114611160576040519150601f19603f3d011682016040523d82523d6000602084013e611165565b606091505b50509050806111ac5760405162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b6044820152606401610353565b505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161120d9190611736565b6000604051808303816000865af19150503d806000811461124a576040519150601f19603f3d011682016040523d82523d6000602084013e61124f565b606091505b509150915081801561127957508051158061127957508080602001905181019061127991906116e2565b6112b75760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610353565b5050505050565b80356001600160a01b03811681146112d557600080fd5b919050565b60008083601f8401126112ec57600080fd5b50813567ffffffffffffffff81111561130457600080fd5b6020830191508360208260051b850101111561131f57600080fd5b9250929050565b600082601f83011261133757600080fd5b8135602061134c6113478361186c565b61183b565b80838252828201915082860187848660051b890101111561136c57600080fd5b60005b8581101561139257611380826112be565b8452928401929084019060010161136f565b5090979650505050505050565b600082601f8301126113b057600080fd5b813560206113c06113478361186c565b80838252828201915082860187848660051b89010111156113e057600080fd5b60005b85811015611392576113f482611466565b845292840192908401906001016113e3565b600082601f83011261141757600080fd5b813560206114276113478361186c565b80838252828201915082860187848660051b890101111561144757600080fd5b60005b858110156113925781358452928401929084019060010161144a565b80356001600160801b03811681146112d557600080fd5b60006020828403121561148f57600080fd5b611498826112be565b9392505050565b6000806000606084860312156114b457600080fd5b6114bd846112be565b92506114cb602085016112be565b91506114d9604085016112be565b90509250925092565b60008060008060008060008060008060e08b8d03121561150157600080fd5b61150a8b6112be565b995061151860208c016112be565b985061152660408c016112be565b975060608b0135965060808b013567ffffffffffffffff8082111561154a57600080fd5b6115568e838f016112da565b909850965060a08d013591508082111561156f57600080fd5b61157b8e838f016112da565b909650945060c08d013591508082111561159457600080fd5b506115a18d828e016112da565b915080935050809150509295989b9194979a5092959850565b600080604083850312156115cd57600080fd5b6115d6836112be565b946020939093013593505050565b6000806000806000806000806000806101408b8d03121561160457600080fd5b61160d8b6112be565b995060208b0135985061162260408c01611466565b975061163060608c01611466565b965060808b013567ffffffffffffffff8082111561164d57600080fd5b6116598e838f0161139f565b975060a08d013591508082111561166f57600080fd5b61167b8e838f01611406565b965060c08d013591508082111561169157600080fd5b61169d8e838f01611326565b955060e08d01359150808211156116b357600080fd5b506116c08d828e01611326565b9350506101008b013591506101208b013590509295989b9194979a5092959850565b6000602082840312156116f457600080fd5b8151801515811461149857600080fd5b60006020828403121561171657600080fd5b5035919050565b60006020828403121561172f57600080fd5b5051919050565b6000825160005b81811015611757576020818601810151858301520161173d565b81811115611766576000828501525b509190910192915050565b6001600160a01b03998a168152978916602089015295881660408801526001600160801b039485166060880152929096166080860152151560a085015293811660c08401529290921660e08201526101008101919091526101200190565b60208082526018908201527f43616c6c6572206973206e6f74207468652073797374656d0000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561186457611864611947565b604052919050565b600067ffffffffffffffff82111561188657611886611947565b5060051b60200190565b600082198211156118a3576118a361191b565b500190565b6000826118c557634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156118e4576118e461191b565b500290565b6000828210156118fb576118fb61191b565b500390565b60006000198214156119145761191461191b565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220dd60a932416784d81ab45cd5351973a348a422515773f427d696835a3f55568164736f6c63430008070033

Deployed Bytecode

0x6080604052600436106100e15760003560e01c8063d27bd7411161007f578063e17eaa4e11610059578063e17eaa4e146102ab578063e2097298146102cb578063f2fde38b146102e9578063f3fef3a31461030957600080fd5b8063d27bd74114610235578063d2a63e5c1461026b578063e1758bd81461028b57600080fd5b80638c90c121116100bb5780638c90c121146101b55780638da5cb5b146101d557806398590ef9146101f5578063d0d39e481461021557600080fd5b80631aad8a65146101205780633e55e99d1461014257806381ffc6281461019557600080fd5b3661011b576040513481527f4d6ce1e535dbade1c23defba91e23b8f791ce5edc0cc320257a2b364e4e384269060200160405180910390a1005b600080fd5b34801561012c57600080fd5b5061014061013b36600461149f565b610329565b005b34801561014e57600080fd5b5061017861015d36600461147d565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101a157600080fd5b506101406101b03660046114e2565b6103a0565b3480156101c157600080fd5b506101406101d0366004611704565b61058c565b3480156101e157600080fd5b50600054610178906001600160a01b031681565b34801561020157600080fd5b506101406102103660046115ba565b6105bb565b34801561022157600080fd5b506101406102303660046115e4565b61070c565b34801561024157600080fd5b5061017861025036600461147d565b6003602052600090815260409020546001600160a01b031681565b34801561027757600080fd5b50600154610178906001600160a01b031681565b34801561029757600080fd5b50600254610178906001600160a01b031681565b3480156102b757600080fd5b506101406102c63660046115ba565b6108dc565b3480156102d757600080fd5b5060055460405190815260200161018c565b3480156102f557600080fd5b5061014061030436600461147d565b610a14565b34801561031557600080fd5b506101406103243660046115ba565b610afe565b6000546001600160a01b0316331461035c5760405162461bcd60e51b815260040161035390611806565b60405180910390fd5b6001600160a01b03928316600090815260046020908152604080832080549487166001600160a01b0319958616179055600390915290208054929093169116179055565b6000546001600160a01b0316156103b657600080fd5b6001600160a01b038916158015906103d657506001600160a01b03881615155b6103df57600080fd5b600280546001600160a01b03808c166001600160a01b03199283161790925560018054928b169290911691909117905560005b818110156105325784848281811061042c5761042c611931565b9050602002016020810190610441919061147d565b6004600085858581811061045757610457611931565b905060200201602081019061046c919061147d565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b031916929091169190911790558686828181106104af576104af611931565b90506020020160208101906104c4919061147d565b600360008585858181106104da576104da611931565b90506020020160208101906104ef919061147d565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b031916929091169190911790558061052a81611900565b915050610412565b506005879055600080546001600160a01b0319166001600160a01b038c1690811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350505050505050505050565b6000546001600160a01b031633146105b65760405162461bcd60e51b815260040161035390611806565b600555565b604051631a66e79360e11b815233600482015282906001600160a01b038216906334cdcf2690602401602060405180830381600087803b1580156105fe57600080fd5b505af1158015610612573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063691906116e2565b6106525760405162461bcd60e51b8152600401610353906117cf565b6002546001600160a01b038481166000818152600360209081526040808320546004928390529281902054905163850853fd60e01b81529585169186019190915290831660248501529091166044830152606482018490529063850853fd90608401602060405180830381600087803b1580156106ce57600080fd5b505af11580156106e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070691906116e2565b50505050565b604051631a66e79360e11b81523360048201528a906001600160a01b038216906334cdcf2690602401602060405180830381600087803b15801561074f57600080fd5b505af1158015610763573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078791906116e2565b6107a35760405162461bcd60e51b8152600401610353906117cf565b8960055410156107ea5760405162461bcd60e51b8152602060048201526012602482015271119959481b1a5b5a5d08195e18d95959195960721b6044820152606401610353565b6001600160a01b038b8116600090815260046020526040902054166108435760405162461bcd60e51b815260206004820152600f60248201526e057726f6e6720736d6172745377617608c1b6044820152606401610353565b896005600082825461085591906118e9565b90915550508551875114801561086c575083518551145b8015610879575084518651145b6108b45760405162461bcd60e51b815260206004820152600c60248201526b0aee4dedcce40d8cadccee8d60a31b6044820152606401610353565b6108bf8b8a8c610b53565b6108cf8b89898989898989610f5e565b5050505050505050505050565b604051631a66e79360e11b815233600482015282906001600160a01b038216906334cdcf2690602401602060405180830381600087803b15801561091f57600080fd5b505af1158015610933573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095791906116e2565b6109735760405162461bcd60e51b8152600401610353906117cf565b6001600160a01b03838116600090815260046020526040902054166109cc5760405162461bcd60e51b815260206004820152600f60248201526e057726f6e6720736d6172745377617608c1b6044820152606401610353565b6002546001600160a01b031660098110156109fc576001546109f7906001600160a01b0316846110f9565b610706565b6001546107069082906001600160a01b0316856111b1565b6000546001600160a01b03163314610a3e5760405162461bcd60e51b815260040161035390611806565b6001600160a01b038116610aa35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610353565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610b285760405162461bcd60e51b815260040161035390611806565b60096001600160a01b0383161015610b4857610b4433826110f9565b5050565b610b448233836111b1565b6000836001600160a01b031663de1881a86040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610b9057600080fd5b505af1158015610ba4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc8919061171d565b60025490915060096001600160a01b039091161115610d295760025460405163095ea7b360e01b81526001600160a01b0386811660048301526001600160801b03861660248301529091169063095ea7b390604401602060405180830381600087803b158015610c3757600080fd5b505af1158015610c4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6f91906116e2565b506002546001600160a01b038086166000818152600360209081526040808320546004928390528184205491516370722f8760e11b8152949663e0e45f0e968996610cd1969282169593821694909116928c9291829182918291829101611771565b6020604051808303818588803b158015610cea57600080fd5b505af1158015610cfe573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d2391906116e2565b50610ea1565b6000612710856001600160a01b031663a27a88596040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610d6957600080fd5b505af1158015610d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da1919061171d565b610db4906001600160801b0387166118ca565b610dbe91906118a8565b9050610dca8282611890565b91506001600160a01b03851663e0e45f0e610dee846001600160801b038816611890565b6002546001600160a01b038981166000908152600360209081526040808320546004928390528184205491516001600160e01b031960e08a901b168152610e4c968616959182169492909116928d92918291829182918e9101611771565b6020604051808303818588803b158015610e6557600080fd5b505af1158015610e79573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e9e91906116e2565b50505b81811115610ee35760405162461bcd60e51b815260206004820152600f60248201526e496e737566696369616e742066656560881b6044820152606401610353565b610eed81836118e9565b9150811561070657604051339083156108fc029084906000818181858888f19350505050158015610f22573d6000803e3d6000fd5b5060405182815233907f41a4b099d16420f275b83ab9bcb5571fa53e7b424a4f7177e0a6e6bce42575a29060200160405180910390a250505050565b6001600160a01b03808916600090815260036020526040812054909116905b87518110156110ed57896001600160a01b031663569f6f5783600260009054906101000a90046001600160a01b0316898581518110610fbe57610fbe611931565b6020026020010151898681518110610fd857610fd8611931565b60200260200101518d8781518110610ff257610ff2611931565b60200260200101518f8e898151811061100d5761100d611931565b60209081029190910101516040516001600160e01b031960e08a901b1681526001600160a01b039788166004820152958716602487015293861660448601529490911660648401526001600160801b03908116608484015290921660a482015260c481019190915260e48101879052610104810186905261012401602060405180830381600087803b1580156110a257600080fd5b505af11580156110b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110da91906116e2565b50806110e581611900565b915050610f7d565b50505050505050505050565b604080516000808252602082019092526001600160a01b0384169083906040516111239190611736565b60006040518083038185875af1925050503d8060008114611160576040519150601f19603f3d011682016040523d82523d6000602084013e611165565b606091505b50509050806111ac5760405162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b6044820152606401610353565b505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161120d9190611736565b6000604051808303816000865af19150503d806000811461124a576040519150601f19603f3d011682016040523d82523d6000602084013e61124f565b606091505b509150915081801561127957508051158061127957508080602001905181019061127991906116e2565b6112b75760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610353565b5050505050565b80356001600160a01b03811681146112d557600080fd5b919050565b60008083601f8401126112ec57600080fd5b50813567ffffffffffffffff81111561130457600080fd5b6020830191508360208260051b850101111561131f57600080fd5b9250929050565b600082601f83011261133757600080fd5b8135602061134c6113478361186c565b61183b565b80838252828201915082860187848660051b890101111561136c57600080fd5b60005b8581101561139257611380826112be565b8452928401929084019060010161136f565b5090979650505050505050565b600082601f8301126113b057600080fd5b813560206113c06113478361186c565b80838252828201915082860187848660051b89010111156113e057600080fd5b60005b85811015611392576113f482611466565b845292840192908401906001016113e3565b600082601f83011261141757600080fd5b813560206114276113478361186c565b80838252828201915082860187848660051b890101111561144757600080fd5b60005b858110156113925781358452928401929084019060010161144a565b80356001600160801b03811681146112d557600080fd5b60006020828403121561148f57600080fd5b611498826112be565b9392505050565b6000806000606084860312156114b457600080fd5b6114bd846112be565b92506114cb602085016112be565b91506114d9604085016112be565b90509250925092565b60008060008060008060008060008060e08b8d03121561150157600080fd5b61150a8b6112be565b995061151860208c016112be565b985061152660408c016112be565b975060608b0135965060808b013567ffffffffffffffff8082111561154a57600080fd5b6115568e838f016112da565b909850965060a08d013591508082111561156f57600080fd5b61157b8e838f016112da565b909650945060c08d013591508082111561159457600080fd5b506115a18d828e016112da565b915080935050809150509295989b9194979a5092959850565b600080604083850312156115cd57600080fd5b6115d6836112be565b946020939093013593505050565b6000806000806000806000806000806101408b8d03121561160457600080fd5b61160d8b6112be565b995060208b0135985061162260408c01611466565b975061163060608c01611466565b965060808b013567ffffffffffffffff8082111561164d57600080fd5b6116598e838f0161139f565b975060a08d013591508082111561166f57600080fd5b61167b8e838f01611406565b965060c08d013591508082111561169157600080fd5b61169d8e838f01611326565b955060e08d01359150808211156116b357600080fd5b506116c08d828e01611326565b9350506101008b013591506101208b013590509295989b9194979a5092959850565b6000602082840312156116f457600080fd5b8151801515811461149857600080fd5b60006020828403121561171657600080fd5b5035919050565b60006020828403121561172f57600080fd5b5051919050565b6000825160005b81811015611757576020818601810151858301520161173d565b81811115611766576000828501525b509190910192915050565b6001600160a01b03998a168152978916602089015295881660408801526001600160801b039485166060880152929096166080860152151560a085015293811660c08401529290921660e08201526101008101919091526101200190565b60208082526018908201527f43616c6c6572206973206e6f74207468652073797374656d0000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561186457611864611947565b604052919050565b600067ffffffffffffffff82111561188657611886611947565b5060051b60200190565b600082198211156118a3576118a361191b565b500190565b6000826118c557634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156118e4576118e461191b565b500290565b6000828210156118fb576118fb61191b565b500390565b60006000198214156119145761191461191b565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220dd60a932416784d81ab45cd5351973a348a422515773f427d696835a3f55568164736f6c63430008070033

Deployed Bytecode Sourcemap

2214:9962:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4348:18;;4356:9;14615:25:1;;4348:18:0;;14603:2:1;14588:18;4348::0;;;;;;;2214:9962;;;;;5487:259;;;;;;;;;;-1:-1:-1;5487:259:0;;;;;:::i;:::-;;:::i;:::-;;2438:55;;;;;;;;;;-1:-1:-1;2438:55:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;2438:55:0;;;;;;-1:-1:-1;;;;;7715:32:1;;;7697:51;;7685:2;7670:18;2438:55:0;;;;;;;;2981:1316;;;;;;;;;;-1:-1:-1;2981:1316:0;;;;;:::i;:::-;;:::i;5302:104::-;;;;;;;;;;-1:-1:-1;5302:104:0;;;;;:::i;:::-;;:::i;2250:20::-;;;;;;;;;;-1:-1:-1;2250:20:0;;;;-1:-1:-1;;;;;2250:20:0;;;5933:208;;;;;;;;;;-1:-1:-1;5933:208:0;;;;;:::i;:::-;;:::i;6928:1677::-;;;;;;;;;;-1:-1:-1;6928:1677:0;;;;;:::i;:::-;;:::i;2351:47::-;;;;;;;;;;-1:-1:-1;2351:47:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;2351:47:0;;;2277:34;;;;;;;;;;-1:-1:-1;2277:34:0;;;;-1:-1:-1;;;;;2277:34:0;;;2318:26;;;;;;;;;;-1:-1:-1;2318:26:0;;;;-1:-1:-1;;;;;2318:26:0;;;6484:389;;;;;;;;;;-1:-1:-1;6484:389:0;;;;;:::i;:::-;;:::i;5825:100::-;;;;;;;;;;-1:-1:-1;5903:14:0;;5825:100;;14615:25:1;;;14603:2;14588:18;5825:100:0;14469:177:1;4981:242:0;;;;;;;;;;-1:-1:-1;4981:242:0;;;;;:::i;:::-;;:::i;6199:227::-;;;;;;;;;;-1:-1:-1;6199:227:0;;;;;:::i;:::-;;:::i;5487:259::-;4750:5;;-1:-1:-1;;;;;4750:5:0;4759:10;4750:19;4742:64;;;;-1:-1:-1;;;4742:64:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;5621:37:0;;::::1;;::::0;;;:20:::1;:37;::::0;;;;;;;:61;;;;::::1;-1:-1:-1::0;;;;;;5621:61:0;;::::1;;::::0;;5693:12:::1;:29:::0;;;;;:45;;;;;::::1;::::0;::::1;;::::0;;5487:259::o;2981:1316::-;3683:1;3666:5;-1:-1:-1;;;;;3666:5:0;:19;3658:28;;;;;;-1:-1:-1;;;;;3736:26:0;;;;;;:77;;-1:-1:-1;;;;;;3779:34:0;;;;3736:77;3714:110;;;;;;3835:11;:26;;-1:-1:-1;;;;;3835:26:0;;;-1:-1:-1;;;;;;3835:26:0;;;;;;;;3872:42;;;;;;;;;;;;;;;3835:11;3925:191;3938:21;;;3925:191;;;4019:21;;4041:1;4019:24;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;3981:20;:35;4002:10;;4013:1;4002:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3981:35:0;;;;;;;;;;;;;;-1:-1:-1;3981:35:0;:62;;-1:-1:-1;;;;;;3981:62:0;;;;;;;;;;;4088:13;;4102:1;4088:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;4058:12;:27;4071:10;;4082:1;4071:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4058:27:0;;;;;;;;;;;;;;-1:-1:-1;4058:27:0;:46;;-1:-1:-1;;;;;;4058:46:0;;;;;;;;;;;3961:3;;;;:::i;:::-;;;;3925:191;;;-1:-1:-1;4126:14:0;:32;;;4219:5;:14;;-1:-1:-1;;;;;;4219:14:0;-1:-1:-1;;;;;4219:14:0;;;;;;;4249:40;;4219:14;;:5;4249:40;;4219:5;;4249:40;2981:1316;;;;;;;;;;:::o;5302:104::-;4750:5;;-1:-1:-1;;;;;4750:5:0;4759:10;4750:19;4742:64;;;;-1:-1:-1;;;4742:64:0;;;;;;;:::i;:::-;5375:14:::1;:23:::0;5302:104::o;5933:208::-;4525:43;;-1:-1:-1;;;4525:43:0;;4557:10;4525:43;;;7697:51:1;6004:9:0;;-1:-1:-1;;;;;4525:31:0;;;;;7670:18:1;;4525:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4517:80;;;;-1:-1:-1;;;4517:80:0;;;;;;;:::i;:::-;6055:11:::1;::::0;-1:-1:-1;;;;;6026:28:0;;::::1;6055:11;6068:23:::0;;;:12:::1;:23;::::0;;;;;;;;6093:20:::1;:31:::0;;;;;;;;;6026:107;;-1:-1:-1;;;6026:107:0;;6055:11;;::::1;6026:107:::0;;::::1;10809:34:1::0;;;;6068:23:0;;::::1;10859:18:1::0;;;10852:43;6093:31:0;;::::1;10911:18:1::0;;;10904:43;10963:18;;;10956:34;;;6026:28:0;::::1;::::0;10743:19:1;;6026:107:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5933:208:::0;;;:::o;6928:1677::-;4525:43;;-1:-1:-1;;;4525:43:0;;4557:10;4525:43;;;7697:51:1;7883:9:0;;-1:-1:-1;;;;;4525:31:0;;;;;7670:18:1;;4525:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4517:80;;;;-1:-1:-1;;;4517:80:0;;;;;;;:::i;:::-;7937:9:::1;7919:14;;:27;;7911:58;;;::::0;-1:-1:-1;;;7911:58:0;;11889:2:1;7911:58:0::1;::::0;::::1;11871:21:1::0;11928:2;11908:18;;;11901:30;-1:-1:-1;;;11947:18:1;;;11940:48;12005:18;;7911:58:0::1;11687:342:1::0;7911:58:0::1;-1:-1:-1::0;;;;;7988:31:0;;::::1;8031:1;7988:31:::0;;;:20:::1;:31;::::0;;;;;::::1;7980:73;;;::::0;-1:-1:-1;;;7980:73:0;;12589:2:1;7980:73:0::1;::::0;::::1;12571:21:1::0;12628:2;12608:18;;;12601:30;-1:-1:-1;;;12647:18:1;;;12640:45;12702:18;;7980:73:0::1;12387:339:1::0;7980:73:0::1;8084:9;8066:14;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;8134:21:0;;8112:18;;:43:::1;:116:::0;::::1;;;;8201:20;:27;8172:18;:25;:56;8112:116;:183;;;;;8270:18;:25;8245:14;:21;:50;8112:183;8104:231;;;::::0;-1:-1:-1;;;8104:231:0;;12933:2:1;8104:231:0::1;::::0;::::1;12915:21:1::0;12972:2;12952:18;;;12945:30;-1:-1:-1;;;12991:18:1;;;12984:42;13043:18;;8104:231:0::1;12731:336:1::0;8104:231:0::1;8376:34;8381:9;8392:6;8400:9;8376:4;:34::i;:::-;8462:135;8474:9;8485:11;8498;8511:14;8527:18;8547:20;8569:12;8583:13;8462:11;:135::i;:::-;6928:1677:::0;;;;;;;;;;;:::o;6484:389::-;4525:43;;-1:-1:-1;;;4525:43:0;;4557:10;4525:43;;;7697:51:1;6563:9:0;;-1:-1:-1;;;;;4525:31:0;;;;;7670:18:1;;4525:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4517:80;;;;-1:-1:-1;;;4517:80:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6593:31:0;;::::1;6636:1;6593:31:::0;;;:20:::1;:31;::::0;;;;;::::1;6585:73;;;::::0;-1:-1:-1;;;6585:73:0;;12589:2:1;6585:73:0::1;::::0;::::1;12571:21:1::0;12628:2;12608:18;;;12601:30;-1:-1:-1;;;12647:18:1;;;12640:45;12702:18;;6585:73:0::1;12387:339:1::0;6585:73:0::1;6685:11;::::0;-1:-1:-1;;;;;6685:11:0::1;6727:1;6711:18:::0;::::1;6707:158;;;6760:19;::::0;6744:44:::1;::::0;-1:-1:-1;;;;;6760:19:0::1;6781:6:::0;6744:15:::1;:44::i;:::-;6707:158;;;6837:19;::::0;6817:48:::1;::::0;6830:5;;-1:-1:-1;;;;;6837:19:0::1;6858:6:::0;6817:12:::1;:48::i;4981:242::-:0;4750:5;;-1:-1:-1;;;;;4750:5:0;4759:10;4750:19;4742:64;;;;-1:-1:-1;;;4742:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5070:22:0;::::1;5062:73;;;::::0;-1:-1:-1;;;5062:73:0;;11482:2:1;5062:73:0::1;::::0;::::1;11464:21:1::0;11521:2;11501:18;;;11494:30;11560:34;11540:18;;;11533:62;-1:-1:-1;;;11611:18:1;;;11604:36;11657:19;;5062:73:0::1;11280:402:1::0;5062:73:0::1;5172:5;::::0;;5151:37:::1;::::0;-1:-1:-1;;;;;5151:37:0;;::::1;::::0;5172:5;::::1;::::0;5151:37:::1;::::0;::::1;5199:5;:16:::0;;-1:-1:-1;;;;;;5199:16:0::1;-1:-1:-1::0;;;;;5199:16:0;;;::::1;::::0;;;::::1;::::0;;4981:242::o;6199:227::-;4750:5;;-1:-1:-1;;;;;4750:5:0;4759:10;4750:19;4742:64;;;;-1:-1:-1;;;4742:64:0;;;;;;;:::i;:::-;6298:1:::1;-1:-1:-1::0;;;;;6282:18:0;::::1;;6278:140;;;6315:35;6331:10;6343:6;6315:15;:35::i;:::-;6199:227:::0;;:::o;6278:140::-:1;6379:39;6392:5;6399:10;6411:6;6379:12;:39::i;10070:1563::-:0;10158:21;10193:9;-1:-1:-1;;;;;10182:35:0;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10234:11;;10158:61;;-1:-1:-1;10256:1:0;-1:-1:-1;;;;;10234:11:0;;;:24;10230:1080;;;10327:11;;10320:64;;-1:-1:-1;;;10320:64:0;;-1:-1:-1;;;;;11193:32:1;;;10320:64:0;;;11175:51:1;-1:-1:-1;;;;;10368:15:0;;11242:18:1;;;11235:34;10327:11:0;;;;10320:27;;11148:18:1;;10320:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;10466:11:0;;-1:-1:-1;;;;;10399:26:0;;;10466:11;10497:23;;;:12;:23;;;;;;;;;10539:20;:31;;;;;;;;10399:327;;-1:-1:-1;;;10399:327:0;;:26;;;;10433:13;;10399:327;;10466:11;;;;10497:23;;;;10539:31;;;;10590:6;;10466:11;;;;;;;;;10399:327;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10230:1080;;;10800:11;10865:5;10841:9;-1:-1:-1;;;;;10830:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10814:50;;-1:-1:-1;;;;;10814:15:0;;:50;:::i;:::-;:56;;;;:::i;:::-;10800:70;-1:-1:-1;10917:19:0;10923:13;10800:70;10917:19;:::i;:::-;10901:35;-1:-1:-1;;;;;;10951:26:0;;;10985:31;10901:35;-1:-1:-1;;;;;10985:15:0;;:31;:::i;:::-;11036:11;;-1:-1:-1;;;;;11067:23:0;;;11036:11;11067:23;;;:12;:23;;;;;;;;;11109:20;:31;;;;;;;;10951:347;;-1:-1:-1;;;;;;10951:347:0;;;;;;;;;11036:11;;;11067:23;;;;11109:31;;;;;11160:6;;11036:11;;;;;;;11280:3;;10951:347;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10756:554;10230:1080;11345:9;11328:13;:26;;11320:54;;;;-1:-1:-1;;;11320:54:0;;13979:2:1;11320:54:0;;;13961:21:1;14018:2;13998:18;;;13991:30;-1:-1:-1;;;14037:18:1;;;14030:45;14092:18;;11320:54:0;13777:339:1;11320:54:0;11385:26;11398:13;11385:26;;:::i;:::-;;-1:-1:-1;11482:14:0;;11478:140;;11513:39;;11521:10;;11513:39;;;;;11542:9;;11513:39;;;;11542:9;11521:10;11513:39;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11572:34:0;;14615:25:1;;;11584:10:0;;11572:34;;14603:2:1;14588:18;11572:34:0;;;;;;;10147:1486;10070:1563;;;:::o;8613:1449::-;-1:-1:-1;;;;;9409:23:0;;;9385:21;9409:23;;;:12;:23;;;;;;;;;;9443:476;9467:11;:18;9463:1;:22;9443:476;;;9564:9;-1:-1:-1;;;;;9553:32:0;;9604:13;9636:11;;;;;;;;;-1:-1:-1;;;;;9636:11:0;9666:18;9685:1;9666:21;;;;;;;;:::i;:::-;;;;;;;9706:20;9727:1;9706:23;;;;;;;;:::i;:::-;;;;;;;9748:11;9760:1;9748:14;;;;;;;;:::i;:::-;;;;;;;9781:11;9812:14;9827:1;9812:17;;;;;;;;:::i;:::-;;;;;;;;;;;9553:354;;-1:-1:-1;;;;;;9553:354:0;;;;;;;-1:-1:-1;;;;;8186:15:1;;;9553:354:0;;;8168:34:1;8238:15;;;8218:18;;;8211:43;8290:15;;;8270:18;;;8263:43;8342:15;;;;8322:18;;;8315:43;-1:-1:-1;;;;;8448:15:1;;;8427:19;;;8420:44;8501:15;;;8480:19;;;8473:44;8533:19;;;8526:35;;;;8577:19;;;8570:35;;;8621:19;;;8614:35;;;8102:19;;9553:354:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;9487:3:0;;;;:::i;:::-;;;;9443:476;;;;9342:720;8613:1449;;;;;;;;:::o;11994:179::-;12102:12;;;12064;12102;;;;;;;;;-1:-1:-1;;;;;12081:7:0;;;12095:5;;12081:34;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12063:52;;;12134:7;12126:39;;;;-1:-1:-1;;;12126:39:0;;14323:2:1;12126:39:0;;;14305:21:1;14362:2;14342:18;;;14335:30;-1:-1:-1;;;14381:18:1;;;14374:49;14440:18;;12126:39:0;14121:343:1;12126:39:0;12052:121;11994:179;;:::o;11641:345::-;11836:45;;;-1:-1:-1;;;;;11193:32:1;;;11836:45:0;;;11175:51:1;11242:18;;;;11235:34;;;11836:45:0;;;;;;;;;;11148:18:1;;;;11836:45:0;;;;;;;-1:-1:-1;;;;;11836:45:0;-1:-1:-1;;;11836:45:0;;;11825:57;;-1:-1:-1;;;;11825:10:0;;;;:57;;11836:45;11825:57;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11789:93;;;;11901:7;:57;;;;-1:-1:-1;11913:11:0;;:16;;:44;;;11944:4;11933:24;;;;;;;;;;;;:::i;:::-;11893:85;;;;-1:-1:-1;;;11893:85:0;;13274:2:1;11893:85:0;;;13256:21:1;13313:2;13293:18;;;13286:30;-1:-1:-1;;;13332:18:1;;;13325:45;13387:18;;11893:85:0;13072:339:1;11893:85:0;11711:275;;11641:345;;;:::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:367::-;255:8;265:6;319:3;312:4;304:6;300:17;296:27;286:55;;337:1;334;327:12;286:55;-1:-1:-1;360:20:1;;403:18;392:30;;389:50;;;435:1;432;425:12;389:50;472:4;464:6;460:17;448:29;;532:3;525:4;515:6;512:1;508:14;500:6;496:27;492:38;489:47;486:67;;;549:1;546;539:12;486:67;192:367;;;;;:::o;564:679::-;618:5;671:3;664:4;656:6;652:17;648:27;638:55;;689:1;686;679:12;638:55;725:6;712:20;751:4;775:60;791:43;831:2;791:43;:::i;:::-;775:60;:::i;:::-;857:3;881:2;876:3;869:15;909:2;904:3;900:12;893:19;;944:2;936:6;932:15;996:3;991:2;985;982:1;978:10;970:6;966:23;962:32;959:41;956:61;;;1013:1;1010;1003:12;956:61;1035:1;1045:169;1059:2;1056:1;1053:9;1045:169;;;1116:23;1135:3;1116:23;:::i;:::-;1104:36;;1160:12;;;;1192;;;;1077:1;1070:9;1045:169;;;-1:-1:-1;1232:5:1;;564:679;-1:-1:-1;;;;;;;564:679:1:o;1248:::-;1302:5;1355:3;1348:4;1340:6;1336:17;1332:27;1322:55;;1373:1;1370;1363:12;1322:55;1409:6;1396:20;1435:4;1459:60;1475:43;1515:2;1475:43;:::i;1459:60::-;1541:3;1565:2;1560:3;1553:15;1593:2;1588:3;1584:12;1577:19;;1628:2;1620:6;1616:15;1680:3;1675:2;1669;1666:1;1662:10;1654:6;1650:23;1646:32;1643:41;1640:61;;;1697:1;1694;1687:12;1640:61;1719:1;1729:169;1743:2;1740:1;1737:9;1729:169;;;1800:23;1819:3;1800:23;:::i;:::-;1788:36;;1844:12;;;;1876;;;;1761:1;1754:9;1729:169;;1932:673;1986:5;2039:3;2032:4;2024:6;2020:17;2016:27;2006:55;;2057:1;2054;2047:12;2006:55;2093:6;2080:20;2119:4;2143:60;2159:43;2199:2;2159:43;:::i;2143:60::-;2225:3;2249:2;2244:3;2237:15;2277:2;2272:3;2268:12;2261:19;;2312:2;2304:6;2300:15;2364:3;2359:2;2353;2350:1;2346:10;2338:6;2334:23;2330:32;2327:41;2324:61;;;2381:1;2378;2371:12;2324:61;2403:1;2413:163;2427:2;2424:1;2421:9;2413:163;;;2484:17;;2472:30;;2522:12;;;;2554;;;;2445:1;2438:9;2413:163;;2610:188;2678:20;;-1:-1:-1;;;;;2727:46:1;;2717:57;;2707:85;;2788:1;2785;2778:12;2803:186;2862:6;2915:2;2903:9;2894:7;2890:23;2886:32;2883:52;;;2931:1;2928;2921:12;2883:52;2954:29;2973:9;2954:29;:::i;:::-;2944:39;2803:186;-1:-1:-1;;;2803:186:1:o;2994:334::-;3071:6;3079;3087;3140:2;3128:9;3119:7;3115:23;3111:32;3108:52;;;3156:1;3153;3146:12;3108:52;3179:29;3198:9;3179:29;:::i;:::-;3169:39;;3227:38;3261:2;3250:9;3246:18;3227:38;:::i;:::-;3217:48;;3284:38;3318:2;3307:9;3303:18;3284:38;:::i;:::-;3274:48;;2994:334;;;;;:::o;3333:1382::-;3527:6;3535;3543;3551;3559;3567;3575;3583;3591;3599;3652:3;3640:9;3631:7;3627:23;3623:33;3620:53;;;3669:1;3666;3659:12;3620:53;3692:29;3711:9;3692:29;:::i;:::-;3682:39;;3740:38;3774:2;3763:9;3759:18;3740:38;:::i;:::-;3730:48;;3797:38;3831:2;3820:9;3816:18;3797:38;:::i;:::-;3787:48;;3882:2;3871:9;3867:18;3854:32;3844:42;;3937:3;3926:9;3922:19;3909:33;3961:18;4002:2;3994:6;3991:14;3988:34;;;4018:1;4015;4008:12;3988:34;4057:70;4119:7;4110:6;4099:9;4095:22;4057:70;:::i;:::-;4146:8;;-1:-1:-1;4031:96:1;-1:-1:-1;4234:3:1;4219:19;;4206:33;;-1:-1:-1;4251:16:1;;;4248:36;;;4280:1;4277;4270:12;4248:36;4319:72;4383:7;4372:8;4361:9;4357:24;4319:72;:::i;:::-;4410:8;;-1:-1:-1;4293:98:1;-1:-1:-1;4498:3:1;4483:19;;4470:33;;-1:-1:-1;4515:16:1;;;4512:36;;;4544:1;4541;4534:12;4512:36;;4583:72;4647:7;4636:8;4625:9;4621:24;4583:72;:::i;:::-;4557:98;;4674:8;4664:18;;;4701:8;4691:18;;;3333:1382;;;;;;;;;;;;;:::o;4720:254::-;4788:6;4796;4849:2;4837:9;4828:7;4824:23;4820:32;4817:52;;;4865:1;4862;4855:12;4817:52;4888:29;4907:9;4888:29;:::i;:::-;4878:39;4964:2;4949:18;;;;4936:32;;-1:-1:-1;;;4720:254:1:o;4979:1480::-;5219:6;5227;5235;5243;5251;5259;5267;5275;5283;5291;5344:3;5332:9;5323:7;5319:23;5315:33;5312:53;;;5361:1;5358;5351:12;5312:53;5384:29;5403:9;5384:29;:::i;:::-;5374:39;;5460:2;5449:9;5445:18;5432:32;5422:42;;5483:38;5517:2;5506:9;5502:18;5483:38;:::i;:::-;5473:48;;5540:38;5574:2;5563:9;5559:18;5540:38;:::i;:::-;5530:48;;5629:3;5618:9;5614:19;5601:33;5653:18;5694:2;5686:6;5683:14;5680:34;;;5710:1;5707;5700:12;5680:34;5733:61;5786:7;5777:6;5766:9;5762:22;5733:61;:::i;:::-;5723:71;;5847:3;5836:9;5832:19;5819:33;5803:49;;5877:2;5867:8;5864:16;5861:36;;;5893:1;5890;5883:12;5861:36;5916:63;5971:7;5960:8;5949:9;5945:24;5916:63;:::i;:::-;5906:73;;6032:3;6021:9;6017:19;6004:33;5988:49;;6062:2;6052:8;6049:16;6046:36;;;6078:1;6075;6068:12;6046:36;6101:63;6156:7;6145:8;6134:9;6130:24;6101:63;:::i;:::-;6091:73;;6217:3;6206:9;6202:19;6189:33;6173:49;;6247:2;6237:8;6234:16;6231:36;;;6263:1;6260;6253:12;6231:36;;6286:63;6341:7;6330:8;6319:9;6315:24;6286:63;:::i;:::-;6276:73;;;6396:3;6385:9;6381:19;6368:33;6358:43;;6448:3;6437:9;6433:19;6420:33;6410:43;;4979:1480;;;;;;;;;;;;;:::o;6464:277::-;6531:6;6584:2;6572:9;6563:7;6559:23;6555:32;6552:52;;;6600:1;6597;6590:12;6552:52;6632:9;6626:16;6685:5;6678:13;6671:21;6664:5;6661:32;6651:60;;6707:1;6704;6697:12;6746:180;6805:6;6858:2;6846:9;6837:7;6833:23;6829:32;6826:52;;;6874:1;6871;6864:12;6826:52;-1:-1:-1;6897:23:1;;6746:180;-1:-1:-1;6746:180:1:o;6931:184::-;7001:6;7054:2;7042:9;7033:7;7029:23;7025:32;7022:52;;;7070:1;7067;7060:12;7022:52;-1:-1:-1;7093:16:1;;6931:184;-1:-1:-1;6931:184:1:o;7120:426::-;7249:3;7287:6;7281:13;7312:1;7322:129;7336:6;7333:1;7330:13;7322:129;;;7434:4;7418:14;;;7414:25;;7408:32;7395:11;;;7388:53;7351:12;7322:129;;;7469:6;7466:1;7463:13;7460:48;;;7504:1;7495:6;7490:3;7486:16;7479:27;7460:48;-1:-1:-1;7524:16:1;;;;;7120:426;-1:-1:-1;;7120:426:1:o;8660:939::-;-1:-1:-1;;;;;9105:15:1;;;9087:34;;9157:15;;;9152:2;9137:18;;9130:43;9209:15;;;9204:2;9189:18;;9182:43;-1:-1:-1;;;;;9314:15:1;;;9309:2;9294:18;;9287:43;9367:15;;;;9361:3;9346:19;;9339:44;9427:14;9420:22;9067:3;9399:19;;9392:51;9480:15;;;9474:3;9459:19;;9452:44;9533:15;;;;9527:3;9512:19;;9505:44;9580:3;9565:19;;9558:35;;;;9036:3;9021:19;;8660:939::o;12034:348::-;12236:2;12218:21;;;12275:2;12255:18;;;12248:30;12314:26;12309:2;12294:18;;12287:54;12373:2;12358:18;;12034:348::o;13416:356::-;13618:2;13600:21;;;13637:18;;;13630:30;13696:34;13691:2;13676:18;;13669:62;13763:2;13748:18;;13416:356::o;14651:275::-;14722:2;14716:9;14787:2;14768:13;;-1:-1:-1;;14764:27:1;14752:40;;14822:18;14807:34;;14843:22;;;14804:62;14801:88;;;14869:18;;:::i;:::-;14905:2;14898:22;14651:275;;-1:-1:-1;14651:275:1:o;14931:183::-;14991:4;15024:18;15016:6;15013:30;15010:56;;;15046:18;;:::i;:::-;-1:-1:-1;15091:1:1;15087:14;15103:4;15083:25;;14931:183::o;15119:128::-;15159:3;15190:1;15186:6;15183:1;15180:13;15177:39;;;15196:18;;:::i;:::-;-1:-1:-1;15232:9:1;;15119:128::o;15252:217::-;15292:1;15318;15308:132;;15362:10;15357:3;15353:20;15350:1;15343:31;15397:4;15394:1;15387:15;15425:4;15422:1;15415:15;15308:132;-1:-1:-1;15454:9:1;;15252:217::o;15474:168::-;15514:7;15580:1;15576;15572:6;15568:14;15565:1;15562:21;15557:1;15550:9;15543:17;15539:45;15536:71;;;15587:18;;:::i;:::-;-1:-1:-1;15627:9:1;;15474:168::o;15647:125::-;15687:4;15715:1;15712;15709:8;15706:34;;;15720:18;;:::i;:::-;-1:-1:-1;15757:9:1;;15647:125::o;15777:135::-;15816:3;-1:-1:-1;;15837:17:1;;15834:43;;;15857:18;;:::i;:::-;-1:-1:-1;15904:1:1;15893:13;;15777:135::o;15917:127::-;15978:10;15973:3;15969:20;15966:1;15959:31;16009:4;16006:1;15999:15;16033:4;16030:1;16023:15;16049:127;16110:10;16105:3;16101:20;16098:1;16091:31;16141:4;16138:1;16131:15;16165:4;16162:1;16155:15;16181:127;16242:10;16237:3;16233:20;16230:1;16223:31;16273:4;16270:1;16263:15;16297:4;16294:1;16287:15

Swarm Source

ipfs://dd60a932416784d81ab45cd5351973a348a422515773f427d696835a3f555681

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.