MOVR Price: $11.26 (+1.77%)
Gas: 2.75 GWei

Contract

0xcCA28D05b3979341b464df3A22c80110d966Bfef

Overview

MOVR Balance

Moonriver Chain LogoMoonriver Chain LogoMoonriver Chain Logo0 MOVR

MOVR Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Pay Vault71334152024-07-01 0:17:5423 days ago1719793074IN
0xcCA28D05...0d966Bfef
0 MOVR0.000283391.4
Remove62770142024-03-05 13:29:54140 days ago1709645394IN
0xcCA28D05...0d966Bfef
0 MOVR0.000171472.75
Withdraw62770112024-03-05 13:29:18140 days ago1709645358IN
0xcCA28D05...0d966Bfef
0 MOVR0.000282482.75
Reinvest58764072024-01-04 14:21:00201 days ago1704378060IN
0xcCA28D05...0d966Bfef
0 MOVR0.000198062.76248971
Reinvest57168202023-12-11 12:30:00225 days ago1702297800IN
0xcCA28D05...0d966Bfef
0 MOVR0.000197162.75
Withdraw57022392023-12-09 8:07:24228 days ago1702109244IN
0xcCA28D05...0d966Bfef
0 MOVR0.00012841.25
Remove57022362023-12-09 8:06:48228 days ago1702109208IN
0xcCA28D05...0d966Bfef
0 MOVR0.000077941.25
Reinvest55068422023-11-10 18:04:00256 days ago1699639440IN
0xcCA28D05...0d966Bfef
0 MOVR0.000197162.75
Remove54968222023-11-09 6:33:25258 days ago1699511605IN
0xcCA28D05...0d966Bfef
0 MOVR0.000080361.25
Withdraw54967932023-11-09 6:27:18258 days ago1699511238IN
0xcCA28D05...0d966Bfef
0 MOVR0.00012841.25
Reinvest51859012023-09-25 9:15:30302 days ago1695633330IN
0xcCA28D05...0d966Bfef
0 MOVR0.000211322.9475
Withdraw51172382023-09-15 18:36:36312 days ago1694802996IN
0xcCA28D05...0d966Bfef
0 MOVR0.000280282.75
Withdraw50924932023-09-12 7:15:00316 days ago1694502900IN
0xcCA28D05...0d966Bfef
0 MOVR0.00030042.9475
Withdraw50069532023-08-30 20:09:00328 days ago1693426140IN
0xcCA28D05...0d966Bfef
0 MOVR0.00012741.25
Remove50069452023-08-30 20:07:18328 days ago1693426038IN
0xcCA28D05...0d966Bfef
0 MOVR0.000080361.25
Reinvest49752592023-08-26 9:10:18332 days ago1693041018IN
0xcCA28D05...0d966Bfef
0 MOVR0.000211322.9475
Remove47892362023-07-31 7:16:00359 days ago1690787760IN
0xcCA28D05...0d966Bfef
0 MOVR0.000180662.89678424
Withdraw47892312023-07-31 7:15:00359 days ago1690787700IN
0xcCA28D05...0d966Bfef
0 MOVR0.00030042.9475
Withdraw46265962023-07-08 9:44:48381 days ago1688809488IN
0xcCA28D05...0d966Bfef
0 MOVR0.00020992.9475
Remove46265722023-07-08 9:40:00381 days ago1688809200IN
0xcCA28D05...0d966Bfef
0 MOVR0.000183822.9475
Withdraw46265552023-07-08 9:36:36381 days ago1688808996IN
0xcCA28D05...0d966Bfef
0 MOVR0.000242862.75
Reinvest45789892023-07-01 17:07:18388 days ago1688231238IN
0xcCA28D05...0d966Bfef
0 MOVR0.000211322.9475
Withdraw45765552023-07-01 8:54:36388 days ago1688201676IN
0xcCA28D05...0d966Bfef
0 MOVR0.000260312.9475
Remove45765512023-07-01 8:53:48388 days ago1688201628IN
0xcCA28D05...0d966Bfef
0 MOVR0.000183792.9475
Withdraw40476012023-04-16 9:51:42464 days ago1681638702IN
0xcCA28D05...0d966Bfef
0 MOVR0.000242862.75
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LPFarm

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at moonriver.moonscan.io on 2022-01-10
*/

// File: Context.sol


// OpenZeppelin Contracts v4.3.2 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
// File: PadLPFarm.sol

pragma solidity ^0.8.0;


library SafeMath {
    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
      if (a == 0) {
        return 0;
      }
      c = a * b;
      assert(c / a == b);
      return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
      return a / b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
      assert(b <= a);
      return a - b;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
      c = a + b;
      assert(c >= a);
      return c;
    }
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface TOKEN {
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
}

contract LPFarm is Ownable {
    using SafeMath for uint256;

    modifier hasDripped {
        if (dividendPool > 0) {
          uint256 secondsPassed = SafeMath.sub(block.timestamp, lastDripTime);
          uint256 dividends = secondsPassed.mul(dividendPool).div(dailyRate);

          if (dividends > dividendPool) {
            dividends = dividendPool;
          }

          profitPerShare = SafeMath.add(profitPerShare, (dividends * magnitude) / tokenSupply);
          dividendPool = dividendPool.sub(dividends);
          lastDripTime = block.timestamp;
        }
        _;
    }

    modifier onlyTokenHolders {
        require(myShares() > 0);
        _;
    }

    modifier onlyDivis {
        require(myRewards() > 0);
        _;
    }

    event onDonation(
        address indexed userAddress,
        uint256 tokens
    );

    event onStake(
        address indexed userAddress,
        uint256 incomingTokens,
        uint256 timestamp
    );

    event onUnstake(
        address indexed customerAddress,
        uint256 tokenRemoved,
        uint256 timestamp
    );

    event onReinvest(
        address indexed customerAddress,
        uint256 tokensReinvested
    );

    event onWithdraw(
        address indexed customerAddress,
        uint256 tokensWithdrawn
    );

    event feeReceiverChanged(
        address indexed previousFeeReceiver,
        address indexed newFeeReceiver
    );

    uint256 constant private magnitude = 2 ** 64;
    uint32 constant private dailyRate = 11520000; //0.75% a day
    uint8 constant private buyInFee = 75;
    uint8 constant private sellOutFee = 75;
    uint8 constant private vaultFee = 25;

    mapping(address => uint256) private tokenBalanceLedger;
    mapping(address => int256) private payoutsTo;

    uint256 public dividendPool = 0;
    uint256 public lastDripTime = block.timestamp;
    uint256 public totalDonation = 0;
    uint256 public totalVaultFundReceived = 0;
    uint256 public totalVaultFundCollected = 0;

    uint256 private tokenSupply = 0;
    uint256 private profitPerShare = 0;

    address public feeReceiver;
    TOKEN bep20;

    constructor() {
        feeReceiver = address(0x7a06dbaE8666e7DbdCf26A37be020dfedC782176); //vault address
        bep20 = TOKEN(address(0x21D6DbcA8aACdAa739e40180b1C8C828B46Ae376)); //pair token
    }

    fallback() external payable {
        revert();
    }

    receive() external payable {
        revert();
    }

    function checkAndTransfer(uint256 _amount) private {
        require(bep20.transferFrom(msg.sender, address(this), _amount) == true, "transfer must succeed");
    }

    function donateToPool(uint256 _amount) public {
        require(_amount > 0 && tokenSupply > 0, "must be a positive value and have supply");
        checkAndTransfer(_amount);
        totalDonation += _amount;
        dividendPool = dividendPool.add(_amount);
        emit onDonation(msg.sender, _amount);
    }

    function payVault() public {
        uint256 _tokensToPay = tokensToPay();
        require(_tokensToPay > 0);
        bep20.transfer(feeReceiver, _tokensToPay);
        totalVaultFundReceived = totalVaultFundReceived.add(_tokensToPay);
    }

    function reinvest() hasDripped onlyDivis public {
        address _customerAddress = msg.sender;
        uint256 _dividends = myRewards();
        payoutsTo[_customerAddress] +=  (int256) (_dividends.mul(magnitude));
        uint256 _tokens = purchaseTokens(_customerAddress, _dividends);
        emit onReinvest(_customerAddress, _tokens);
    }

    function withdraw() hasDripped onlyDivis public {
        address _customerAddress = msg.sender;
        uint256 _dividends = myRewards();
        payoutsTo[_customerAddress] += (int256) (_dividends.mul(magnitude));
        bep20.transfer(_customerAddress, _dividends);
        emit onWithdraw(_customerAddress, _dividends);
    }

    function deposit(uint256 _amount) hasDripped public returns (uint256) {
        checkAndTransfer(_amount);
        return purchaseTokens(msg.sender, _amount);
    }

    function _purchaseTokens(address _customerAddress, uint256 _incomingTokens) private returns(uint256) {
        uint256 _amountOfTokens = _incomingTokens;

        require(_amountOfTokens > 0 && _amountOfTokens.add(tokenSupply) > tokenSupply);

        tokenSupply = tokenSupply.add(_amountOfTokens);
        tokenBalanceLedger[_customerAddress] =  tokenBalanceLedger[_customerAddress].add(_amountOfTokens);

        int256 _updatedPayouts = (int256) (profitPerShare.mul(_amountOfTokens));
        payoutsTo[_customerAddress] += _updatedPayouts;

        return _amountOfTokens;
    }

    function purchaseTokens(address _customerAddress, uint256 _incomingTokens) private returns (uint256) {
        require(_incomingTokens > 0);

        uint256 _dividendFee = _incomingTokens.mul(buyInFee).div(1000);

        uint256 _vaultFee = _incomingTokens.mul(vaultFee).div(1000);

        uint256 _entryFee = _incomingTokens.mul(100).div(1000);
        uint256 _taxedTokens = _incomingTokens.sub(_entryFee);

        uint256 _amountOfTokens = _purchaseTokens(_customerAddress, _taxedTokens);

        dividendPool = dividendPool.add(_dividendFee);
        totalVaultFundCollected = totalVaultFundCollected.add(_vaultFee);

        emit onStake(_customerAddress, _amountOfTokens, block.timestamp);

        return _amountOfTokens;
    }

    function remove(uint256 _amountOfTokens) hasDripped onlyTokenHolders public {
        address _customerAddress = msg.sender;
        require(_amountOfTokens > 0 && _amountOfTokens <= tokenBalanceLedger[_customerAddress]);

        uint256 _dividendFee = _amountOfTokens.mul(sellOutFee).div(1000);
        uint256 _vaultFee = _amountOfTokens.mul(vaultFee).div(1000);
        uint256 _taxedTokens = _amountOfTokens.sub(_dividendFee).sub(_vaultFee);

        tokenSupply = tokenSupply.sub(_amountOfTokens);
        tokenBalanceLedger[_customerAddress] = tokenBalanceLedger[_customerAddress].sub(_amountOfTokens);

        int256 _updatedPayouts = (int256) ((profitPerShare.mul(_amountOfTokens)).add(_taxedTokens.mul(magnitude)));
        payoutsTo[_customerAddress] -= _updatedPayouts;

        dividendPool = dividendPool.add(_dividendFee);
        totalVaultFundCollected = totalVaultFundCollected.add(_vaultFee);
          
        emit onUnstake(_customerAddress, _taxedTokens, block.timestamp);
    }

    function totalTokenBalance() public view returns (uint256) {
        return bep20.balanceOf(address(this));
    }

    function totalSupply() public view returns(uint256) {
        return tokenSupply;
    }

    function myShares() public view returns (uint256) {
        address _customerAddress = msg.sender;
        return sharesOf(_customerAddress);
    }

    function myEstimateRewards() public view returns (uint256) {
        address _customerAddress = msg.sender;
        return estimateRewardsOf(_customerAddress);
    }

    function estimateRewardsOf(address _customerAddress) public view returns (uint256) {
        uint256 _profitPerShare = profitPerShare;

        if (dividendPool > 0) {
          uint256 secondsPassed = 0;
       
          secondsPassed = SafeMath.sub(block.timestamp, lastDripTime);

          uint256 dividends = secondsPassed.mul(dividendPool).div(dailyRate);

          if (dividends > dividendPool) {
            dividends = dividendPool;
          }

          _profitPerShare = SafeMath.add(_profitPerShare, (dividends * magnitude) / tokenSupply);
        }

        return (uint256) ((int256) (_profitPerShare * tokenBalanceLedger[_customerAddress]) - payoutsTo[_customerAddress]) / magnitude;
    }

    function myRewards() public view returns (uint256) {
        address _customerAddress = msg.sender;
        return rewardsOf(_customerAddress) ;
    }

    function rewardsOf(address _customerAddress) public view returns (uint256) {
        return (uint256) ((int256) (profitPerShare * tokenBalanceLedger[_customerAddress]) - payoutsTo[_customerAddress]) / magnitude;
    }

    function sharesOf(address _customerAddress) public view returns (uint256) {
        return tokenBalanceLedger[_customerAddress];
    }

    function tokensToPay() public view returns(uint256) {
        return totalVaultFundCollected.sub(totalVaultFundReceived);
    }
    
    function changeFeeReceiver(address _newFeeReceiver) onlyOwner public {
        address _oldFeeReceiver = _newFeeReceiver;
        feeReceiver = _newFeeReceiver;
        emit feeReceiverChanged(_oldFeeReceiver, _newFeeReceiver);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousFeeReceiver","type":"address"},{"indexed":true,"internalType":"address","name":"newFeeReceiver","type":"address"}],"name":"feeReceiverChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"onDonation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"customerAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensReinvested","type":"uint256"}],"name":"onReinvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"incomingTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"onStake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"customerAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenRemoved","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"onUnstake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"customerAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensWithdrawn","type":"uint256"}],"name":"onWithdraw","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"_newFeeReceiver","type":"address"}],"name":"changeFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dividendPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"donateToPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_customerAddress","type":"address"}],"name":"estimateRewardsOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastDripTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"myEstimateRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"myRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"myShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reinvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountOfTokens","type":"uint256"}],"name":"remove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_customerAddress","type":"address"}],"name":"rewardsOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_customerAddress","type":"address"}],"name":"sharesOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensToPay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDonation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalVaultFundCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalVaultFundReceived","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600355426004556000600555600060065560006007556000600855600060095534801561003257600080fd5b5061004f6100446100fe60201b60201c565b61010660201b60201c565b737a06dbae8666e7dbdcf26a37be020dfedc782176600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507321d6dbca8aacdaa739e40180b1c8c828b46ae376600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101ca565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61226580620001da6000396000f3fe60806040526004361061014f5760003560e01c80638da5cb5b116100b6578063ede6a80d1161006f578063ede6a80d14610480578063ee2ac05f14610497578063f2fde38b146104c2578063f5eb42dc146104eb578063fba1f7b014610528578063fdb5a03e1461055357610159565b80638da5cb5b1461036c5780639e7a475714610397578063b3f00674146103c2578063b6b55f25146103ed578063d4a483941461042a578063da2f63c11461045557610159565b80633d4b2c2c116101085780633d4b2c2c1461025c57806342a7afe214610287578063479ba7ae146102b25780634cc82215146102ef5780634e09d0cc146103185780637c08b9641461034357610159565b8063173425101461015e57806318160ddd146101895780631efcca28146101b45780632d6fa0cc146101f157806330d172d51461021a5780633ccfd60b1461024557610159565b3661015957600080fd5b600080fd5b34801561016a57600080fd5b5061017361056a565b6040516101809190611db8565b60405180910390f35b34801561019557600080fd5b5061019e610570565b6040516101ab9190611db8565b60405180910390f35b3480156101c057600080fd5b506101db60048036038101906101d69190611b6f565b61057a565b6040516101e89190611db8565b60405180910390f35b3480156101fd57600080fd5b5061021860048036038101906102139190611bc1565b6106c2565b005b34801561022657600080fd5b5061022f6107a1565b60405161023c9190611db8565b60405180910390f35b34801561025157600080fd5b5061025a6107a7565b005b34801561026857600080fd5b506102716109f6565b60405161027e9190611db8565b60405180910390f35b34801561029357600080fd5b5061029c610aa8565b6040516102a99190611db8565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d49190611b6f565b610abd565b6040516102e69190611db8565b60405180910390f35b3480156102fb57600080fd5b5061031660048036038101906103119190611bc1565b610b71565b005b34801561032457600080fd5b5061032d610efa565b60405161033a9190611db8565b60405180910390f35b34801561034f57600080fd5b5061036a60048036038101906103659190611b6f565b610f18565b005b34801561037857600080fd5b50610381611038565b60405161038e9190611cbd565b60405180910390f35b3480156103a357600080fd5b506103ac611061565b6040516103b99190611db8565b60405180910390f35b3480156103ce57600080fd5b506103d7611076565b6040516103e49190611cbd565b60405180910390f35b3480156103f957600080fd5b50610414600480360381019061040f9190611bc1565b61109c565b6040516104219190611db8565b60405180910390f35b34801561043657600080fd5b5061043f61116e565b60405161044c9190611db8565b60405180910390f35b34801561046157600080fd5b5061046a611183565b6040516104779190611db8565b60405180910390f35b34801561048c57600080fd5b50610495611189565b005b3480156104a357600080fd5b506104ac611292565b6040516104b99190611db8565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e49190611b6f565b611298565b005b3480156104f757600080fd5b50610512600480360381019061050d9190611b6f565b611390565b60405161051f9190611db8565b60405180910390f35b34801561053457600080fd5b5061053d6113d9565b60405161054a9190611db8565b60405180910390f35b34801561055f57600080fd5b506105686113df565b005b60065481565b6000600854905090565b60008060095490506000600354111561061157600061059b4260045461158d565b905060006105cf62afc80063ffffffff166105c1600354856115da90919063ffffffff16565b61164390919063ffffffff16565b90506003548111156105e15760035490505b61060c8360085468010000000000000000846105fd9190611f28565b6106079190611ef7565b611659565b925050505b68010000000000000000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836106a69190611f28565b6106b09190611f82565b6106ba9190611ef7565b915050919050565b6000811180156106d457506000600854115b610713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070a90611d98565b60405180910390fd5b61071c816116a6565b806005600082825461072e9190611ea1565b9250508190555061074a8160035461165990919063ffffffff16565b6003819055503373ffffffffffffffffffffffffffffffffffffffff167fabff69012e8615729dfcbe25d4c003cf6ce7c59d5ec16530f8d51b1b24646944826040516107969190611db8565b60405180910390a250565b60035481565b6000600354111561085e5760006107c04260045461158d565b905060006107f462afc80063ffffffff166107e6600354856115da90919063ffffffff16565b61164390919063ffffffff16565b90506003548111156108065760035490505b61083360095460085468010000000000000000846108249190611f28565b61082e9190611ef7565b611659565b60098190555061084e8160035461158d90919063ffffffff16565b6003819055504260048190555050505b6000610868610aa8565b1161087257600080fd5b60003390506000610881610aa8565b905061089f68010000000000000000826115da90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546108ed9190611e0d565b92505081905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610951929190611d0f565b602060405180830381600087803b15801561096b57600080fd5b505af115801561097f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a39190611b98565b508173ffffffffffffffffffffffffffffffffffffffff167fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc826040516109ea9190611db8565b60405180910390a25050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a539190611cbd565b60206040518083038186803b158015610a6b57600080fd5b505afa158015610a7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa39190611bea565b905090565b600080339050610ab781610abd565b91505090565b600068010000000000000000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600954610b569190611f28565b610b609190611f82565b610b6a9190611ef7565b9050919050565b60006003541115610c28576000610b8a4260045461158d565b90506000610bbe62afc80063ffffffff16610bb0600354856115da90919063ffffffff16565b61164390919063ffffffff16565b9050600354811115610bd05760035490505b610bfd6009546008546801000000000000000084610bee9190611f28565b610bf89190611ef7565b611659565b600981905550610c188160035461158d90919063ffffffff16565b6003819055504260048190555050505b6000610c32611061565b11610c3c57600080fd5b6000339050600082118015610c905750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211155b610c9957600080fd5b6000610cc66103e8610cb8604b60ff16866115da90919063ffffffff16565b61164390919063ffffffff16565b90506000610cf56103e8610ce7601960ff16876115da90919063ffffffff16565b61164390919063ffffffff16565b90506000610d1e82610d10858861158d90919063ffffffff16565b61158d90919063ffffffff16565b9050610d358560085461158d90919063ffffffff16565b600881905550610d8d85600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461158d90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000610e14610df168010000000000000000846115da90919063ffffffff16565b610e06886009546115da90919063ffffffff16565b61165990919063ffffffff16565b905080600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e659190611f82565b92505081905550610e818460035461165990919063ffffffff16565b600381905550610e9c8360075461165990919063ffffffff16565b6007819055508473ffffffffffffffffffffffffffffffffffffffff167f3d9fb957a04f1f29e06526e9c503fd88a0752d3a58eeccbaeb9e9b17fa24ee418342604051610eea929190611dd3565b60405180910390a2505050505050565b6000610f1360065460075461158d90919063ffffffff16565b905090565b610f206117a0565b73ffffffffffffffffffffffffffffffffffffffff16610f3e611038565b73ffffffffffffffffffffffffffffffffffffffff1614610f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8b90611d78565b60405180910390fd5b600081905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f47bbed8023ac1a0fe3025394c8f6b641a067058c37bc4eb3b7ccd0c68a7606b860405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008033905061107081611390565b91505090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060035411156111545760006110b64260045461158d565b905060006110ea62afc80063ffffffff166110dc600354856115da90919063ffffffff16565b61164390919063ffffffff16565b90506003548111156110fc5760035490505b611129600954600854680100000000000000008461111a9190611f28565b6111249190611ef7565b611659565b6009819055506111448160035461158d90919063ffffffff16565b6003819055504260048190555050505b61115d826116a6565b61116733836117a8565b9050919050565b60008033905061117d8161057a565b91505090565b60075481565b6000611193610efa565b9050600081116111a257600080fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611221929190611d0f565b602060405180830381600087803b15801561123b57600080fd5b505af115801561124f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112739190611b98565b506112898160065461165990919063ffffffff16565b60068190555050565b60055481565b6112a06117a0565b73ffffffffffffffffffffffffffffffffffffffff166112be611038565b73ffffffffffffffffffffffffffffffffffffffff1614611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b90611d78565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b90611d38565b60405180910390fd5b61138d816118f9565b50565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60045481565b600060035411156114965760006113f84260045461158d565b9050600061142c62afc80063ffffffff1661141e600354856115da90919063ffffffff16565b61164390919063ffffffff16565b905060035481111561143e5760035490505b61146b600954600854680100000000000000008461145c9190611f28565b6114669190611ef7565b611659565b6009819055506114868160035461158d90919063ffffffff16565b6003819055504260048190555050505b60006114a0610aa8565b116114aa57600080fd5b600033905060006114b9610aa8565b90506114d768010000000000000000826115da90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115259190611e0d565b92505081905550600061153883836117a8565b90508273ffffffffffffffffffffffffffffffffffffffff167f897045d5a66380517228d05ffbff921f593231848283388b9a65d03e73945eee826040516115809190611db8565b60405180910390a2505050565b6000828211156115c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b81836115d29190612016565b905092915050565b6000808314156115ed576000905061163d565b81836115f99190611f28565b90508183826116089190611ef7565b1461163c577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b5b92915050565b600081836116519190611ef7565b905092915050565b600081836116679190611ea1565b9050828110156116a0577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b92915050565b60011515600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b815260040161170993929190611cd8565b602060405180830381600087803b15801561172357600080fd5b505af1158015611737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175b9190611b98565b15151461179d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179490611d58565b60405180910390fd5b50565b600033905090565b60008082116117b657600080fd5b60006117e36103e86117d5604b60ff16866115da90919063ffffffff16565b61164390919063ffffffff16565b905060006118126103e8611804601960ff16876115da90919063ffffffff16565b61164390919063ffffffff16565b9050600061183e6103e86118306064886115da90919063ffffffff16565b61164390919063ffffffff16565b90506000611855828761158d90919063ffffffff16565b9050600061186388836119bd565b905061187a8560035461165990919063ffffffff16565b6003819055506118958460075461165990919063ffffffff16565b6007819055508773ffffffffffffffffffffffffffffffffffffffff167f67eb285178ed97c7defb3f6b5d97ea47f24ca9a429e1d6e8f31db80a7c1d930082426040516118e3929190611dd3565b60405180910390a2809550505050505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808290506000811180156119e857506008546119e66008548361165990919063ffffffff16565b115b6119f157600080fd5b611a068160085461165990919063ffffffff16565b600881905550611a5e81600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165990919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000611ab8826009546115da90919063ffffffff16565b905080600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b099190611e0d565b92505081905550819250505092915050565b600081359050611b2a816121ea565b92915050565b600081519050611b3f81612201565b92915050565b600081359050611b5481612218565b92915050565b600081519050611b6981612218565b92915050565b600060208284031215611b8157600080fd5b6000611b8f84828501611b1b565b91505092915050565b600060208284031215611baa57600080fd5b6000611bb884828501611b30565b91505092915050565b600060208284031215611bd357600080fd5b6000611be184828501611b45565b91505092915050565b600060208284031215611bfc57600080fd5b6000611c0a84828501611b5a565b91505092915050565b611c1c8161204a565b82525050565b6000611c2f602683611dfc565b9150611c3a826120fa565b604082019050919050565b6000611c52601583611dfc565b9150611c5d82612149565b602082019050919050565b6000611c75602083611dfc565b9150611c8082612172565b602082019050919050565b6000611c98602883611dfc565b9150611ca38261219b565b604082019050919050565b611cb781612092565b82525050565b6000602082019050611cd26000830184611c13565b92915050565b6000606082019050611ced6000830186611c13565b611cfa6020830185611c13565b611d076040830184611cae565b949350505050565b6000604082019050611d246000830185611c13565b611d316020830184611cae565b9392505050565b60006020820190508181036000830152611d5181611c22565b9050919050565b60006020820190508181036000830152611d7181611c45565b9050919050565b60006020820190508181036000830152611d9181611c68565b9050919050565b60006020820190508181036000830152611db181611c8b565b9050919050565b6000602082019050611dcd6000830184611cae565b92915050565b6000604082019050611de86000830185611cae565b611df56020830184611cae565b9392505050565b600082825260208201905092915050565b6000611e1882612068565b9150611e2383612068565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03831360008312151615611e5e57611e5d61209c565b5b817f8000000000000000000000000000000000000000000000000000000000000000038312600083121615611e9657611e9561209c565b5b828201905092915050565b6000611eac82612092565b9150611eb783612092565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611eec57611eeb61209c565b5b828201905092915050565b6000611f0282612092565b9150611f0d83612092565b925082611f1d57611f1c6120cb565b5b828204905092915050565b6000611f3382612092565b9150611f3e83612092565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611f7757611f7661209c565b5b828202905092915050565b6000611f8d82612068565b9150611f9883612068565b9250827f800000000000000000000000000000000000000000000000000000000000000001821260008412151615611fd357611fd261209c565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01821360008412161561200b5761200a61209c565b5b828203905092915050565b600061202182612092565b915061202c83612092565b92508282101561203f5761203e61209c565b5b828203905092915050565b600061205582612072565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f7472616e73666572206d75737420737563636565640000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f6d757374206265206120706f7369746976652076616c756520616e642068617660008201527f6520737570706c79000000000000000000000000000000000000000000000000602082015250565b6121f38161204a565b81146121fe57600080fd5b50565b61220a8161205c565b811461221557600080fd5b50565b61222181612092565b811461222c57600080fd5b5056fea2646970667358221220e4bf4c54f91aaacf0968c190900d7dc3cbdaf1268ca40a8c8f28bb54b9b5a99464736f6c63430008040033

Deployed Bytecode

0x60806040526004361061014f5760003560e01c80638da5cb5b116100b6578063ede6a80d1161006f578063ede6a80d14610480578063ee2ac05f14610497578063f2fde38b146104c2578063f5eb42dc146104eb578063fba1f7b014610528578063fdb5a03e1461055357610159565b80638da5cb5b1461036c5780639e7a475714610397578063b3f00674146103c2578063b6b55f25146103ed578063d4a483941461042a578063da2f63c11461045557610159565b80633d4b2c2c116101085780633d4b2c2c1461025c57806342a7afe214610287578063479ba7ae146102b25780634cc82215146102ef5780634e09d0cc146103185780637c08b9641461034357610159565b8063173425101461015e57806318160ddd146101895780631efcca28146101b45780632d6fa0cc146101f157806330d172d51461021a5780633ccfd60b1461024557610159565b3661015957600080fd5b600080fd5b34801561016a57600080fd5b5061017361056a565b6040516101809190611db8565b60405180910390f35b34801561019557600080fd5b5061019e610570565b6040516101ab9190611db8565b60405180910390f35b3480156101c057600080fd5b506101db60048036038101906101d69190611b6f565b61057a565b6040516101e89190611db8565b60405180910390f35b3480156101fd57600080fd5b5061021860048036038101906102139190611bc1565b6106c2565b005b34801561022657600080fd5b5061022f6107a1565b60405161023c9190611db8565b60405180910390f35b34801561025157600080fd5b5061025a6107a7565b005b34801561026857600080fd5b506102716109f6565b60405161027e9190611db8565b60405180910390f35b34801561029357600080fd5b5061029c610aa8565b6040516102a99190611db8565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d49190611b6f565b610abd565b6040516102e69190611db8565b60405180910390f35b3480156102fb57600080fd5b5061031660048036038101906103119190611bc1565b610b71565b005b34801561032457600080fd5b5061032d610efa565b60405161033a9190611db8565b60405180910390f35b34801561034f57600080fd5b5061036a60048036038101906103659190611b6f565b610f18565b005b34801561037857600080fd5b50610381611038565b60405161038e9190611cbd565b60405180910390f35b3480156103a357600080fd5b506103ac611061565b6040516103b99190611db8565b60405180910390f35b3480156103ce57600080fd5b506103d7611076565b6040516103e49190611cbd565b60405180910390f35b3480156103f957600080fd5b50610414600480360381019061040f9190611bc1565b61109c565b6040516104219190611db8565b60405180910390f35b34801561043657600080fd5b5061043f61116e565b60405161044c9190611db8565b60405180910390f35b34801561046157600080fd5b5061046a611183565b6040516104779190611db8565b60405180910390f35b34801561048c57600080fd5b50610495611189565b005b3480156104a357600080fd5b506104ac611292565b6040516104b99190611db8565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e49190611b6f565b611298565b005b3480156104f757600080fd5b50610512600480360381019061050d9190611b6f565b611390565b60405161051f9190611db8565b60405180910390f35b34801561053457600080fd5b5061053d6113d9565b60405161054a9190611db8565b60405180910390f35b34801561055f57600080fd5b506105686113df565b005b60065481565b6000600854905090565b60008060095490506000600354111561061157600061059b4260045461158d565b905060006105cf62afc80063ffffffff166105c1600354856115da90919063ffffffff16565b61164390919063ffffffff16565b90506003548111156105e15760035490505b61060c8360085468010000000000000000846105fd9190611f28565b6106079190611ef7565b611659565b925050505b68010000000000000000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836106a69190611f28565b6106b09190611f82565b6106ba9190611ef7565b915050919050565b6000811180156106d457506000600854115b610713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070a90611d98565b60405180910390fd5b61071c816116a6565b806005600082825461072e9190611ea1565b9250508190555061074a8160035461165990919063ffffffff16565b6003819055503373ffffffffffffffffffffffffffffffffffffffff167fabff69012e8615729dfcbe25d4c003cf6ce7c59d5ec16530f8d51b1b24646944826040516107969190611db8565b60405180910390a250565b60035481565b6000600354111561085e5760006107c04260045461158d565b905060006107f462afc80063ffffffff166107e6600354856115da90919063ffffffff16565b61164390919063ffffffff16565b90506003548111156108065760035490505b61083360095460085468010000000000000000846108249190611f28565b61082e9190611ef7565b611659565b60098190555061084e8160035461158d90919063ffffffff16565b6003819055504260048190555050505b6000610868610aa8565b1161087257600080fd5b60003390506000610881610aa8565b905061089f68010000000000000000826115da90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546108ed9190611e0d565b92505081905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610951929190611d0f565b602060405180830381600087803b15801561096b57600080fd5b505af115801561097f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a39190611b98565b508173ffffffffffffffffffffffffffffffffffffffff167fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc826040516109ea9190611db8565b60405180910390a25050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a539190611cbd565b60206040518083038186803b158015610a6b57600080fd5b505afa158015610a7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa39190611bea565b905090565b600080339050610ab781610abd565b91505090565b600068010000000000000000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600954610b569190611f28565b610b609190611f82565b610b6a9190611ef7565b9050919050565b60006003541115610c28576000610b8a4260045461158d565b90506000610bbe62afc80063ffffffff16610bb0600354856115da90919063ffffffff16565b61164390919063ffffffff16565b9050600354811115610bd05760035490505b610bfd6009546008546801000000000000000084610bee9190611f28565b610bf89190611ef7565b611659565b600981905550610c188160035461158d90919063ffffffff16565b6003819055504260048190555050505b6000610c32611061565b11610c3c57600080fd5b6000339050600082118015610c905750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211155b610c9957600080fd5b6000610cc66103e8610cb8604b60ff16866115da90919063ffffffff16565b61164390919063ffffffff16565b90506000610cf56103e8610ce7601960ff16876115da90919063ffffffff16565b61164390919063ffffffff16565b90506000610d1e82610d10858861158d90919063ffffffff16565b61158d90919063ffffffff16565b9050610d358560085461158d90919063ffffffff16565b600881905550610d8d85600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461158d90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000610e14610df168010000000000000000846115da90919063ffffffff16565b610e06886009546115da90919063ffffffff16565b61165990919063ffffffff16565b905080600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e659190611f82565b92505081905550610e818460035461165990919063ffffffff16565b600381905550610e9c8360075461165990919063ffffffff16565b6007819055508473ffffffffffffffffffffffffffffffffffffffff167f3d9fb957a04f1f29e06526e9c503fd88a0752d3a58eeccbaeb9e9b17fa24ee418342604051610eea929190611dd3565b60405180910390a2505050505050565b6000610f1360065460075461158d90919063ffffffff16565b905090565b610f206117a0565b73ffffffffffffffffffffffffffffffffffffffff16610f3e611038565b73ffffffffffffffffffffffffffffffffffffffff1614610f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8b90611d78565b60405180910390fd5b600081905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f47bbed8023ac1a0fe3025394c8f6b641a067058c37bc4eb3b7ccd0c68a7606b860405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008033905061107081611390565b91505090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060035411156111545760006110b64260045461158d565b905060006110ea62afc80063ffffffff166110dc600354856115da90919063ffffffff16565b61164390919063ffffffff16565b90506003548111156110fc5760035490505b611129600954600854680100000000000000008461111a9190611f28565b6111249190611ef7565b611659565b6009819055506111448160035461158d90919063ffffffff16565b6003819055504260048190555050505b61115d826116a6565b61116733836117a8565b9050919050565b60008033905061117d8161057a565b91505090565b60075481565b6000611193610efa565b9050600081116111a257600080fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611221929190611d0f565b602060405180830381600087803b15801561123b57600080fd5b505af115801561124f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112739190611b98565b506112898160065461165990919063ffffffff16565b60068190555050565b60055481565b6112a06117a0565b73ffffffffffffffffffffffffffffffffffffffff166112be611038565b73ffffffffffffffffffffffffffffffffffffffff1614611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b90611d78565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b90611d38565b60405180910390fd5b61138d816118f9565b50565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60045481565b600060035411156114965760006113f84260045461158d565b9050600061142c62afc80063ffffffff1661141e600354856115da90919063ffffffff16565b61164390919063ffffffff16565b905060035481111561143e5760035490505b61146b600954600854680100000000000000008461145c9190611f28565b6114669190611ef7565b611659565b6009819055506114868160035461158d90919063ffffffff16565b6003819055504260048190555050505b60006114a0610aa8565b116114aa57600080fd5b600033905060006114b9610aa8565b90506114d768010000000000000000826115da90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115259190611e0d565b92505081905550600061153883836117a8565b90508273ffffffffffffffffffffffffffffffffffffffff167f897045d5a66380517228d05ffbff921f593231848283388b9a65d03e73945eee826040516115809190611db8565b60405180910390a2505050565b6000828211156115c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b81836115d29190612016565b905092915050565b6000808314156115ed576000905061163d565b81836115f99190611f28565b90508183826116089190611ef7565b1461163c577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b5b92915050565b600081836116519190611ef7565b905092915050565b600081836116679190611ea1565b9050828110156116a0577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b92915050565b60011515600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b815260040161170993929190611cd8565b602060405180830381600087803b15801561172357600080fd5b505af1158015611737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175b9190611b98565b15151461179d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179490611d58565b60405180910390fd5b50565b600033905090565b60008082116117b657600080fd5b60006117e36103e86117d5604b60ff16866115da90919063ffffffff16565b61164390919063ffffffff16565b905060006118126103e8611804601960ff16876115da90919063ffffffff16565b61164390919063ffffffff16565b9050600061183e6103e86118306064886115da90919063ffffffff16565b61164390919063ffffffff16565b90506000611855828761158d90919063ffffffff16565b9050600061186388836119bd565b905061187a8560035461165990919063ffffffff16565b6003819055506118958460075461165990919063ffffffff16565b6007819055508773ffffffffffffffffffffffffffffffffffffffff167f67eb285178ed97c7defb3f6b5d97ea47f24ca9a429e1d6e8f31db80a7c1d930082426040516118e3929190611dd3565b60405180910390a2809550505050505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808290506000811180156119e857506008546119e66008548361165990919063ffffffff16565b115b6119f157600080fd5b611a068160085461165990919063ffffffff16565b600881905550611a5e81600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165990919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000611ab8826009546115da90919063ffffffff16565b905080600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b099190611e0d565b92505081905550819250505092915050565b600081359050611b2a816121ea565b92915050565b600081519050611b3f81612201565b92915050565b600081359050611b5481612218565b92915050565b600081519050611b6981612218565b92915050565b600060208284031215611b8157600080fd5b6000611b8f84828501611b1b565b91505092915050565b600060208284031215611baa57600080fd5b6000611bb884828501611b30565b91505092915050565b600060208284031215611bd357600080fd5b6000611be184828501611b45565b91505092915050565b600060208284031215611bfc57600080fd5b6000611c0a84828501611b5a565b91505092915050565b611c1c8161204a565b82525050565b6000611c2f602683611dfc565b9150611c3a826120fa565b604082019050919050565b6000611c52601583611dfc565b9150611c5d82612149565b602082019050919050565b6000611c75602083611dfc565b9150611c8082612172565b602082019050919050565b6000611c98602883611dfc565b9150611ca38261219b565b604082019050919050565b611cb781612092565b82525050565b6000602082019050611cd26000830184611c13565b92915050565b6000606082019050611ced6000830186611c13565b611cfa6020830185611c13565b611d076040830184611cae565b949350505050565b6000604082019050611d246000830185611c13565b611d316020830184611cae565b9392505050565b60006020820190508181036000830152611d5181611c22565b9050919050565b60006020820190508181036000830152611d7181611c45565b9050919050565b60006020820190508181036000830152611d9181611c68565b9050919050565b60006020820190508181036000830152611db181611c8b565b9050919050565b6000602082019050611dcd6000830184611cae565b92915050565b6000604082019050611de86000830185611cae565b611df56020830184611cae565b9392505050565b600082825260208201905092915050565b6000611e1882612068565b9150611e2383612068565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03831360008312151615611e5e57611e5d61209c565b5b817f8000000000000000000000000000000000000000000000000000000000000000038312600083121615611e9657611e9561209c565b5b828201905092915050565b6000611eac82612092565b9150611eb783612092565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611eec57611eeb61209c565b5b828201905092915050565b6000611f0282612092565b9150611f0d83612092565b925082611f1d57611f1c6120cb565b5b828204905092915050565b6000611f3382612092565b9150611f3e83612092565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611f7757611f7661209c565b5b828202905092915050565b6000611f8d82612068565b9150611f9883612068565b9250827f800000000000000000000000000000000000000000000000000000000000000001821260008412151615611fd357611fd261209c565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01821360008412161561200b5761200a61209c565b5b828203905092915050565b600061202182612092565b915061202c83612092565b92508282101561203f5761203e61209c565b5b828203905092915050565b600061205582612072565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f7472616e73666572206d75737420737563636565640000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f6d757374206265206120706f7369746976652076616c756520616e642068617660008201527f6520737570706c79000000000000000000000000000000000000000000000000602082015250565b6121f38161204a565b81146121fe57600080fd5b50565b61220a8161205c565b811461221557600080fd5b50565b61222181612092565b811461222c57600080fd5b5056fea2646970667358221220e4bf4c54f91aaacf0968c190900d7dc3cbdaf1268ca40a8c8f28bb54b9b5a99464736f6c63430008040033

Deployed Bytecode Sourcemap

3219:8773:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5740:8;;;3219:8773;5678:8;;;5194:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9915:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10346:725;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5938:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5065:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6877:336;;;;;;;;;;;;;:::i;:::-;;9792:115;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11079:153;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11240:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8764:1020;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11611:129;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11752:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1921:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10012:150;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5374:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7221:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10170:168;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5242:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6263:246;;;;;;;;;;;;;:::i;:::-;;5155:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2376:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11467:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5103:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6517:352;;;;;;;;;;;;;:::i;:::-;;5194:41;;;;:::o;9915:89::-;9958:7;9985:11;;9978:18;;9915:89;:::o;10346:725::-;10420:7;10440:23;10466:14;;10440:40;;10512:1;10497:12;;:16;10493:432;;;10528:21;10591:43;10604:15;10621:12;;10591;:43::i;:::-;10575:59;;10649:17;10669:46;4789:8;10669:46;;:31;10687:12;;10669:13;:17;;:31;;;;:::i;:::-;:35;;:46;;;;:::i;:::-;10649:66;;10746:12;;10734:9;:24;10730:83;;;10787:12;;10775:24;;10730:83;10845:68;10858:15;10901:11;;4739:7;10876:9;:21;;;;:::i;:::-;10875:37;;;;:::i;:::-;10845:12;:68::i;:::-;10827:86;;10493:432;;;4739:7;11023:9;:27;11033:16;11023:27;;;;;;;;;;;;;;;;10983:18;:36;11002:16;10983:36;;;;;;;;;;;;;;;;10965:15;:54;;;;:::i;:::-;10955:95;;;;:::i;:::-;10944:119;;;;:::i;:::-;10937:126;;;10346:725;;;:::o;5938:317::-;6013:1;6003:7;:11;:30;;;;;6032:1;6018:11;;:15;6003:30;5995:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;6089:25;6106:7;6089:16;:25::i;:::-;6142:7;6125:13;;:24;;;;;;;:::i;:::-;;;;;;;;6175:25;6192:7;6175:12;;:16;;:25;;;;:::i;:::-;6160:12;:40;;;;6227:10;6216:31;;;6239:7;6216:31;;;;;;:::i;:::-;;;;;;;;5938:317;:::o;5065:31::-;;;;:::o;6877:336::-;3338:1;3323:12;;:16;3319:487;;;3354:21;3378:43;3391:15;3408:12;;3378;:43::i;:::-;3354:67;;3434:17;3454:46;4789:8;3454:46;;:31;3472:12;;3454:13;:17;;:31;;;;:::i;:::-;:35;;:46;;;;:::i;:::-;3434:66;;3531:12;;3519:9;:24;3515:83;;;3572:12;;3560:24;;3515:83;3629:67;3642:14;;3684:11;;4739:7;3659:9;:21;;;;:::i;:::-;3658:37;;;;:::i;:::-;3629:12;:67::i;:::-;3612:14;:84;;;;3724:27;3741:9;3724:12;;:16;;:27;;;;:::i;:::-;3709:12;:42;;;;3779:15;3764:12;:30;;;;3319:487;;;3973:1:::1;3959:11;:9;:11::i;:::-;:15;3951:24;;;::::0;::::1;;6936::::2;6963:10;6936:37;;6984:18;7005:11;:9;:11::i;:::-;6984:32;;7068:25;4739:7;7068:10;:14;;:25;;;;:::i;:::-;7027:9;:27;7037:16;7027:27;;;;;;;;;;;;;;;;:67;;;;;;;:::i;:::-;;;;;;;;7105:5;;;;;;;;;;;:14;;;7120:16;7138:10;7105:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7176:16;7165:40;;;7194:10;7165:40;;;;;;:::i;:::-;;;;;;;;3986:1;;6877:336::o:0;9792:115::-;9842:7;9869:5;;;;;;;;;;;:15;;;9893:4;9869:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9862:37;;9792:115;:::o;11079:153::-;11121:7;11141:24;11168:10;11141:37;;11196:27;11206:16;11196:9;:27::i;:::-;11189:34;;;11079:153;:::o;11240:219::-;11306:7;4739;11411:9;:27;11421:16;11411:27;;;;;;;;;;;;;;;;11371:18;:36;11390:16;11371:36;;;;;;;;;;;;;;;;11354:14;;:53;;;;:::i;:::-;11344:94;;;;:::i;:::-;11333:118;;;;:::i;:::-;11326:125;;11240:219;;;:::o;8764:1020::-;3338:1;3323:12;;:16;3319:487;;;3354:21;3378:43;3391:15;3408:12;;3378;:43::i;:::-;3354:67;;3434:17;3454:46;4789:8;3454:46;;:31;3472:12;;3454:13;:17;;:31;;;;:::i;:::-;:35;;:46;;;;:::i;:::-;3434:66;;3531:12;;3519:9;:24;3515:83;;;3572:12;;3560:24;;3515:83;3629:67;3642:14;;3684:11;;4739:7;3659:9;:21;;;;:::i;:::-;3658:37;;;;:::i;:::-;3629:12;:67::i;:::-;3612:14;:84;;;;3724:27;3741:9;3724:12;;:16;;:27;;;;:::i;:::-;3709:12;:42;;;;3779:15;3764:12;:30;;;;3319:487;;;3891:1:::1;3878:10;:8;:10::i;:::-;:14;3870:23;;;::::0;::::1;;8851:24:::2;8878:10;8851:37;;8925:1;8907:15;:19;:78;;;;;8949:18;:36;8968:16;8949:36;;;;;;;;;;;;;;;;8930:15;:55;;8907:78;8899:87;;;::::0;::::2;;8999:20;9022:41;9058:4;9022:31;4897:2;9022:31;;:15;:19;;:31;;;;:::i;:::-;:35;;:41;;;;:::i;:::-;8999:64;;9074:17;9094:39;9128:4;9094:29;4940:2;9094:29;;:15;:19;;:29;;;;:::i;:::-;:33;;:39;;;;:::i;:::-;9074:59;;9144:20;9167:48;9205:9;9167:33;9187:12;9167:15;:19;;:33;;;;:::i;:::-;:37;;:48;;;;:::i;:::-;9144:71;;9242:32;9258:15;9242:11;;:15;;:32;;;;:::i;:::-;9228:11;:46;;;;9324:57;9365:15;9324:18;:36;9343:16;9324:36;;;;;;;;;;;;;;;;:40;;:57;;;;:::i;:::-;9285:18;:36;9304:16;9285:36;;;;;;;;;;;;;;;:96;;;;9394:22;9429:70;9471:27;4739:7;9471:12;:16;;:27;;;;:::i;:::-;9430:35;9449:15;9430:14;;:18;;:35;;;;:::i;:::-;9429:41;;:70;;;;:::i;:::-;9394:106;;9542:15;9511:9;:27;9521:16;9511:27;;;;;;;;;;;;;;;;:46;;;;;;;:::i;:::-;;;;;;;;9585:30;9602:12;9585;;:16;;:30;;;;:::i;:::-;9570:12;:45;;;;9652:38;9680:9;9652:23;;:27;;:38;;;;:::i;:::-;9626:23;:64;;;;9728:16;9718:58;;;9746:12;9760:15;9718:58;;;;;;;:::i;:::-;;;;;;;;3904:1;;;;;8764:1020:::0;:::o;11611:129::-;11654:7;11681:51;11709:22;;11681:23;;:27;;:51;;;;:::i;:::-;11674:58;;11611:129;:::o;11752:237::-;2152:12;:10;:12::i;:::-;2141:23;;:7;:5;:7::i;:::-;:23;;;2133:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11832:23:::1;11858:15;11832:41;;11898:15;11884:11;;:29;;;;;;;;;;;;;;;;;;11965:15;11929:52;;11948:15;11929:52;;;;;;;;;;;;2212:1;11752:237:::0;:::o;1921:87::-;1967:7;1994:6;;;;;;;;;;;1987:13;;1921:87;:::o;10012:150::-;10053:7;10073:24;10100:10;10073:37;;10128:26;10137:16;10128:8;:26::i;:::-;10121:33;;;10012:150;:::o;5374:26::-;;;;;;;;;;;;;:::o;7221:167::-;7282:7;3338:1;3323:12;;:16;3319:487;;;3354:21;3378:43;3391:15;3408:12;;3378;:43::i;:::-;3354:67;;3434:17;3454:46;4789:8;3454:46;;:31;3472:12;;3454:13;:17;;:31;;;;:::i;:::-;:35;;:46;;;;:::i;:::-;3434:66;;3531:12;;3519:9;:24;3515:83;;;3572:12;;3560:24;;3515:83;3629:67;3642:14;;3684:11;;4739:7;3659:9;:21;;;;:::i;:::-;3658:37;;;;:::i;:::-;3629:12;:67::i;:::-;3612:14;:84;;;;3724:27;3741:9;3724:12;;:16;;:27;;;;:::i;:::-;3709:12;:42;;;;3779:15;3764:12;:30;;;;3319:487;;;7302:25:::1;7319:7;7302:16;:25::i;:::-;7345:35;7360:10;7372:7;7345:14;:35::i;:::-;7338:42;;7221:167:::0;;;:::o;10170:168::-;10220:7;10240:24;10267:10;10240:37;;10295:35;10313:16;10295:17;:35::i;:::-;10288:42;;;10170:168;:::o;5242:42::-;;;;:::o;6263:246::-;6301:20;6324:13;:11;:13::i;:::-;6301:36;;6371:1;6356:12;:16;6348:25;;;;;;6384:5;;;;;;;;;;;:14;;;6399:11;;;;;;;;;;;6412:12;6384:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6461:40;6488:12;6461:22;;:26;;:40;;;;:::i;:::-;6436:22;:65;;;;6263:246;:::o;5155:32::-;;;;:::o;2376:201::-;2152:12;:10;:12::i;:::-;2141:23;;:7;:5;:7::i;:::-;:23;;;2133:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2485:1:::1;2465:22;;:8;:22;;;;2457:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2541:28;2560:8;2541:18;:28::i;:::-;2376:201:::0;:::o;11467:136::-;11532:7;11559:18;:36;11578:16;11559:36;;;;;;;;;;;;;;;;11552:43;;11467:136;;;:::o;5103:45::-;;;;:::o;6517:352::-;3338:1;3323:12;;:16;3319:487;;;3354:21;3378:43;3391:15;3408:12;;3378;:43::i;:::-;3354:67;;3434:17;3454:46;4789:8;3454:46;;:31;3472:12;;3454:13;:17;;:31;;;;:::i;:::-;:35;;:46;;;;:::i;:::-;3434:66;;3531:12;;3519:9;:24;3515:83;;;3572:12;;3560:24;;3515:83;3629:67;3642:14;;3684:11;;4739:7;3659:9;:21;;;;:::i;:::-;3658:37;;;;:::i;:::-;3629:12;:67::i;:::-;3612:14;:84;;;;3724:27;3741:9;3724:12;;:16;;:27;;;;:::i;:::-;3709:12;:42;;;;3779:15;3764:12;:30;;;;3319:487;;;3973:1:::1;3959:11;:9;:11::i;:::-;:15;3951:24;;;::::0;::::1;;6576::::2;6603:10;6576:37;;6624:18;6645:11;:9;:11::i;:::-;6624:32;;6709:25;4739:7;6709:10;:14;;:25;;;;:::i;:::-;6667:9;:27;6677:16;6667:27;;;;;;;;;;;;;;;;:68;;;;;;;:::i;:::-;;;;;;;;6746:15;6764:44;6779:16;6797:10;6764:14;:44::i;:::-;6746:62;;6835:16;6824:37;;;6853:7;6824:37;;;;;;:::i;:::-;;;;;;;;3986:1;;;6517:352::o:0;1240:119::-;1298:7;1328:1;1323;:6;;1316:14;;;;;;;;;;;;1350:1;1346;:5;;;;:::i;:::-;1339:12;;1240:119;;;;:::o;940:188::-;998:9;1027:1;1022;:6;1018:41;;;1048:1;1041:8;;;;1018:41;1075:1;1071;:5;;;;:::i;:::-;1067:9;;1101:1;1096;1092;:5;;;;:::i;:::-;:10;1085:18;;;;;;;;;;;;940:188;;;;;:::o;1136:96::-;1194:7;1223:1;1219;:5;;;;:::i;:::-;1212:12;;1136:96;;;;:::o;1367:135::-;1425:9;1453:1;1449;:5;;;;:::i;:::-;1445:9;;1475:1;1470;:6;;1463:14;;;;;;;;;;;;1367:135;;;;:::o;5764:166::-;5892:4;5834:62;;:5;;;;;;;;;;;:18;;;5853:10;5873:4;5880:7;5834:54;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:62;;;5826:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;5764:166;:::o;649:98::-;702:7;729:10;722:17;;649:98;:::o;7999:757::-;8091:7;8137:1;8119:15;:19;8111:28;;;;;;8152:20;8175:39;8209:4;8175:29;4852:2;8175:29;;:15;:19;;:29;;;;:::i;:::-;:33;;:39;;;;:::i;:::-;8152:62;;8227:17;8247:39;8281:4;8247:29;4940:2;8247:29;;:15;:19;;:29;;;;:::i;:::-;:33;;:39;;;;:::i;:::-;8227:59;;8299:17;8319:34;8348:4;8319:24;8339:3;8319:15;:19;;:24;;;;:::i;:::-;:28;;:34;;;;:::i;:::-;8299:54;;8364:20;8387:30;8407:9;8387:15;:19;;:30;;;;:::i;:::-;8364:53;;8430:23;8456:47;8472:16;8490:12;8456:15;:47::i;:::-;8430:73;;8531:30;8548:12;8531;;:16;;:30;;;;:::i;:::-;8516:12;:45;;;;8598:38;8626:9;8598:23;;:27;;:38;;;;:::i;:::-;8572:23;:64;;;;8662:16;8654:59;;;8680:15;8697;8654:59;;;;;;;:::i;:::-;;;;;;;;8733:15;8726:22;;;;;;;7999:757;;;;:::o;2737:191::-;2811:16;2830:6;;;;;;;;;;;2811:25;;2856:8;2847:6;;:17;;;;;;;;;;;;;;;;;;2911:8;2880:40;;2901:8;2880:40;;;;;;;;;;;;2737:191;;:::o;7396:595::-;7488:7;7508:23;7534:15;7508:41;;7588:1;7570:15;:19;:69;;;;;7628:11;;7593:32;7613:11;;7593:15;:19;;:32;;;;:::i;:::-;:46;7570:69;7562:78;;;;;;7667:32;7683:15;7667:11;;:15;;:32;;;;:::i;:::-;7653:11;:46;;;;7750:57;7791:15;7750:18;:36;7769:16;7750:36;;;;;;;;;;;;;;;;:40;;:57;;;;:::i;:::-;7710:18;:36;7729:16;7710:36;;;;;;;;;;;;;;;:97;;;;7820:22;7855:35;7874:15;7855:14;;:18;;:35;;;;:::i;:::-;7820:71;;7933:15;7902:9;:27;7912:16;7902:27;;;;;;;;;;;;;;;;:46;;;;;;;:::i;:::-;;;;;;;;7968:15;7961:22;;;;7396:595;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:137::-;206:5;237:6;231:13;222:22;;253:30;277:5;253:30;:::i;:::-;212:77;;;;:::o;295:139::-;341:5;379:6;366:20;357:29;;395:33;422:5;395:33;:::i;:::-;347:87;;;;:::o;440:143::-;497:5;528:6;522:13;513:22;;544:33;571:5;544:33;:::i;:::-;503:80;;;;:::o;589:262::-;648:6;697:2;685:9;676:7;672:23;668:32;665:2;;;713:1;710;703:12;665:2;756:1;781:53;826:7;817:6;806:9;802:22;781:53;:::i;:::-;771:63;;727:117;655:196;;;;:::o;857:278::-;924:6;973:2;961:9;952:7;948:23;944:32;941:2;;;989:1;986;979:12;941:2;1032:1;1057:61;1110:7;1101:6;1090:9;1086:22;1057:61;:::i;:::-;1047:71;;1003:125;931:204;;;;:::o;1141:262::-;1200:6;1249:2;1237:9;1228:7;1224:23;1220:32;1217:2;;;1265:1;1262;1255:12;1217:2;1308:1;1333:53;1378:7;1369:6;1358:9;1354:22;1333:53;:::i;:::-;1323:63;;1279:117;1207:196;;;;:::o;1409:284::-;1479:6;1528:2;1516:9;1507:7;1503:23;1499:32;1496:2;;;1544:1;1541;1534:12;1496:2;1587:1;1612:64;1668:7;1659:6;1648:9;1644:22;1612:64;:::i;:::-;1602:74;;1558:128;1486:207;;;;:::o;1699:118::-;1786:24;1804:5;1786:24;:::i;:::-;1781:3;1774:37;1764:53;;:::o;1823:366::-;1965:3;1986:67;2050:2;2045:3;1986:67;:::i;:::-;1979:74;;2062:93;2151:3;2062:93;:::i;:::-;2180:2;2175:3;2171:12;2164:19;;1969:220;;;:::o;2195:366::-;2337:3;2358:67;2422:2;2417:3;2358:67;:::i;:::-;2351:74;;2434:93;2523:3;2434:93;:::i;:::-;2552:2;2547:3;2543:12;2536:19;;2341:220;;;:::o;2567:366::-;2709:3;2730:67;2794:2;2789:3;2730:67;:::i;:::-;2723:74;;2806:93;2895:3;2806:93;:::i;:::-;2924:2;2919:3;2915:12;2908:19;;2713:220;;;:::o;2939:366::-;3081:3;3102:67;3166:2;3161:3;3102:67;:::i;:::-;3095:74;;3178:93;3267:3;3178:93;:::i;:::-;3296:2;3291:3;3287:12;3280:19;;3085:220;;;:::o;3311:118::-;3398:24;3416:5;3398:24;:::i;:::-;3393:3;3386:37;3376:53;;:::o;3435:222::-;3528:4;3566:2;3555:9;3551:18;3543:26;;3579:71;3647:1;3636:9;3632:17;3623:6;3579:71;:::i;:::-;3533:124;;;;:::o;3663:442::-;3812:4;3850:2;3839:9;3835:18;3827:26;;3863:71;3931:1;3920:9;3916:17;3907:6;3863:71;:::i;:::-;3944:72;4012:2;4001:9;3997:18;3988:6;3944:72;:::i;:::-;4026;4094:2;4083:9;4079:18;4070:6;4026:72;:::i;:::-;3817:288;;;;;;:::o;4111:332::-;4232:4;4270:2;4259:9;4255:18;4247:26;;4283:71;4351:1;4340:9;4336:17;4327:6;4283:71;:::i;:::-;4364:72;4432:2;4421:9;4417:18;4408:6;4364:72;:::i;:::-;4237:206;;;;;:::o;4449:419::-;4615:4;4653:2;4642:9;4638:18;4630:26;;4702:9;4696:4;4692:20;4688:1;4677:9;4673:17;4666:47;4730:131;4856:4;4730:131;:::i;:::-;4722:139;;4620:248;;;:::o;4874:419::-;5040:4;5078:2;5067:9;5063:18;5055:26;;5127:9;5121:4;5117:20;5113:1;5102:9;5098:17;5091:47;5155:131;5281:4;5155:131;:::i;:::-;5147:139;;5045:248;;;:::o;5299:419::-;5465:4;5503:2;5492:9;5488:18;5480:26;;5552:9;5546:4;5542:20;5538:1;5527:9;5523:17;5516:47;5580:131;5706:4;5580:131;:::i;:::-;5572:139;;5470:248;;;:::o;5724:419::-;5890:4;5928:2;5917:9;5913:18;5905:26;;5977:9;5971:4;5967:20;5963:1;5952:9;5948:17;5941:47;6005:131;6131:4;6005:131;:::i;:::-;5997:139;;5895:248;;;:::o;6149:222::-;6242:4;6280:2;6269:9;6265:18;6257:26;;6293:71;6361:1;6350:9;6346:17;6337:6;6293:71;:::i;:::-;6247:124;;;;:::o;6377:332::-;6498:4;6536:2;6525:9;6521:18;6513:26;;6549:71;6617:1;6606:9;6602:17;6593:6;6549:71;:::i;:::-;6630:72;6698:2;6687:9;6683:18;6674:6;6630:72;:::i;:::-;6503:206;;;;;:::o;6715:169::-;6799:11;6833:6;6828:3;6821:19;6873:4;6868:3;6864:14;6849:29;;6811:73;;;;:::o;6890:525::-;6929:3;6948:19;6965:1;6948:19;:::i;:::-;6943:24;;6981:19;6998:1;6981:19;:::i;:::-;6976:24;;7169:1;7101:66;7097:74;7094:1;7090:82;7085:1;7082;7078:9;7071:17;7067:106;7064:2;;;7176:18;;:::i;:::-;7064:2;7356:1;7288:66;7284:74;7281:1;7277:82;7273:1;7270;7266:9;7262:98;7259:2;;;7363:18;;:::i;:::-;7259:2;7407:1;7404;7400:9;7393:16;;6933:482;;;;:::o;7421:305::-;7461:3;7480:20;7498:1;7480:20;:::i;:::-;7475:25;;7514:20;7532:1;7514:20;:::i;:::-;7509:25;;7668:1;7600:66;7596:74;7593:1;7590:81;7587:2;;;7674:18;;:::i;:::-;7587:2;7718:1;7715;7711:9;7704:16;;7465:261;;;;:::o;7732:185::-;7772:1;7789:20;7807:1;7789:20;:::i;:::-;7784:25;;7823:20;7841:1;7823:20;:::i;:::-;7818:25;;7862:1;7852:2;;7867:18;;:::i;:::-;7852:2;7909:1;7906;7902:9;7897:14;;7774:143;;;;:::o;7923:348::-;7963:7;7986:20;8004:1;7986:20;:::i;:::-;7981:25;;8020:20;8038:1;8020:20;:::i;:::-;8015:25;;8208:1;8140:66;8136:74;8133:1;8130:81;8125:1;8118:9;8111:17;8107:105;8104:2;;;8215:18;;:::i;:::-;8104:2;8263:1;8260;8256:9;8245:20;;7971:300;;;;:::o;8277:527::-;8316:4;8336:19;8353:1;8336:19;:::i;:::-;8331:24;;8369:19;8386:1;8369:19;:::i;:::-;8364:24;;8558:1;8490:66;8486:74;8483:1;8479:82;8474:1;8471;8467:9;8460:17;8456:106;8453:2;;;8565:18;;:::i;:::-;8453:2;8744:1;8676:66;8672:74;8669:1;8665:82;8661:1;8658;8654:9;8650:98;8647:2;;;8751:18;;:::i;:::-;8647:2;8796:1;8793;8789:9;8781:17;;8321:483;;;;:::o;8810:191::-;8850:4;8870:20;8888:1;8870:20;:::i;:::-;8865:25;;8904:20;8922:1;8904:20;:::i;:::-;8899:25;;8943:1;8940;8937:8;8934:2;;;8948:18;;:::i;:::-;8934:2;8993:1;8990;8986:9;8978:17;;8855:146;;;;:::o;9007:96::-;9044:7;9073:24;9091:5;9073:24;:::i;:::-;9062:35;;9052:51;;;:::o;9109:90::-;9143:7;9186:5;9179:13;9172:21;9161:32;;9151:48;;;:::o;9205:76::-;9241:7;9270:5;9259:16;;9249:32;;;:::o;9287:126::-;9324:7;9364:42;9357:5;9353:54;9342:65;;9332:81;;;:::o;9419:77::-;9456:7;9485:5;9474:16;;9464:32;;;:::o;9502:180::-;9550:77;9547:1;9540:88;9647:4;9644:1;9637:15;9671:4;9668:1;9661:15;9688:180;9736:77;9733:1;9726:88;9833:4;9830:1;9823:15;9857:4;9854:1;9847:15;9874:225;10014:34;10010:1;10002:6;9998:14;9991:58;10083:8;10078:2;10070:6;10066:15;10059:33;9980:119;:::o;10105:171::-;10245:23;10241:1;10233:6;10229:14;10222:47;10211:65;:::o;10282:182::-;10422:34;10418:1;10410:6;10406:14;10399:58;10388:76;:::o;10470:227::-;10610:34;10606:1;10598:6;10594:14;10587:58;10679:10;10674:2;10666:6;10662:15;10655:35;10576:121;:::o;10703:122::-;10776:24;10794:5;10776:24;:::i;:::-;10769:5;10766:35;10756:2;;10815:1;10812;10805:12;10756:2;10746:79;:::o;10831:116::-;10901:21;10916:5;10901:21;:::i;:::-;10894:5;10891:32;10881:2;;10937:1;10934;10927:12;10881:2;10871:76;:::o;10953:122::-;11026:24;11044:5;11026:24;:::i;:::-;11019:5;11016:35;11006:2;;11065:1;11062;11055:12;11006:2;10996:79;:::o

Swarm Source

ipfs://e4bf4c54f91aaacf0968c190900d7dc3cbdaf1268ca40a8c8f28bb54b9b5a994

Block Transaction Gas Used Reward
view all blocks collator

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

Validator Index Block Amount
View All Withdrawals

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