FTM Price: $0.40 (-0.60%)
Gas: 35 Gwei

Contract

0xb17Ef6B99C98f68dFe4115cbbb6D72B0F7a1A9Ad
 

Overview

FTM Balance

Fantom LogoFantom LogoFantom Logo0 FTM

FTM Value

$0.00

Token Holdings

Sponsored

Transaction Hash
Method
Block
From
To
Value
Withdraw694573512023-10-18 6:06:12127 days 21 hrs ago1697609172IN
0xb17Ef6...F7a1A9Ad
0 FTM0.003829132.62699615
Update694572282023-10-18 6:00:53127 days 21 hrs ago1697608853IN
0xb17Ef6...F7a1A9Ad
0 FTM0.01153434169.36117679
Update694503072023-10-18 1:50:18128 days 1 hr ago1697593818IN
0xb17Ef6...F7a1A9Ad
0 FTM0.0020082629.48780842
Update694373682023-10-17 18:03:12128 days 9 hrs ago1697565792IN
0xb17Ef6...F7a1A9Ad
0 FTM0.0018518327.1909141
Update694264442023-10-17 12:21:03128 days 14 hrs ago1697545263IN
0xb17Ef6...F7a1A9Ad
0 FTM0.0039402557.85551852
Update694157502023-10-17 6:05:27128 days 21 hrs ago1697522727IN
0xb17Ef6...F7a1A9Ad
0 FTM0.00239835.21038865
Update694062442023-10-17 0:29:56129 days 2 hrs ago1697502596IN
0xb17Ef6...F7a1A9Ad
0 FTM0.0022122132.48240506
Update693978082023-10-16 19:06:03129 days 8 hrs ago1697483163IN
0xb17Ef6...F7a1A9Ad
0 FTM0.004958472.80536037
Update693912712023-10-16 14:18:23129 days 12 hrs ago1697465903IN
0xb17Ef6...F7a1A9Ad
0 FTM0.0023392234.34737183
Update693784782023-10-16 6:01:24129 days 21 hrs ago1697436084IN
0xb17Ef6...F7a1A9Ad
0 FTM0.01299303190.77950891
Stake693707612023-10-16 0:32:01130 days 2 hrs ago1697416321IN
0xb17Ef6...F7a1A9Ad
0 FTM0.0015544926.59294234
Claim Reward693705482023-10-16 0:24:58130 days 2 hrs ago1697415898IN
0xb17Ef6...F7a1A9Ad
0 FTM0.0019471325.94485506
Update693705302023-10-16 0:24:00130 days 2 hrs ago1697415840IN
0xb17Ef6...F7a1A9Ad
0 FTM0.0006475626.12831488
Update693701272023-10-16 0:09:04130 days 3 hrs ago1697414944IN
0xb17Ef6...F7a1A9Ad
0 FTM0.0019064227.99245814
Update693647232023-10-15 21:06:27130 days 6 hrs ago1697403987IN
0xb17Ef6...F7a1A9Ad
0 FTM0.0017387925.53108912
Update693531052023-10-15 13:13:37130 days 13 hrs ago1697375617IN
0xb17Ef6...F7a1A9Ad
0 FTM0.0043982464.58034477
Update693426872023-10-15 6:00:44130 days 21 hrs ago1697349644IN
0xb17Ef6...F7a1A9Ad
0 FTM0.0044378865.16232868
Update693352322023-10-15 0:43:28131 days 2 hrs ago1697330608IN
0xb17Ef6...F7a1A9Ad
0 FTM0.0044997966.07136723
Stake693256052023-10-14 18:24:50131 days 8 hrs ago1697307890IN
0xb17Ef6...F7a1A9Ad
0 FTM0.0039795268.07850247
Claim Reward693253602023-10-14 18:14:23131 days 8 hrs ago1697307263IN
0xb17Ef6...F7a1A9Ad
0 FTM0.0073242197.59246683
Update693252092023-10-14 18:08:20131 days 9 hrs ago1697306900IN
0xb17Ef6...F7a1A9Ad
0 FTM0.0048141970.6877727
Update693198412023-10-14 14:36:15131 days 12 hrs ago1697294175IN
0xb17Ef6...F7a1A9Ad
0 FTM0.0044478765.30913555
Update693081252023-10-14 6:13:43131 days 20 hrs ago1697264023IN
0xb17Ef6...F7a1A9Ad
0 FTM0.0050758974.53046668
Update693067212023-10-14 5:12:06131 days 22 hrs ago1697260326IN
0xb17Ef6...F7a1A9Ad
0 FTM0.0015979164.47381346
Update692994922023-10-14 0:01:50132 days 3 hrs ago1697241710IN
0xb17Ef6...F7a1A9Ad
0 FTM0.0030095744.1901858
View all transactions

Latest 1 internal transaction

Parent Txn Hash Block From To Value
500334462022-10-26 12:49:14484 days 14 hrs ago1666788554  Contract Creation0 FTM
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CherryForest2

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at ftmscan.com on 2022-10-26
*/

// CherryForest2.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/**

The Forest 2:
The goal of that smart contract is to give rewards to people who have
contributed to the CHRT-FTM liquidity pool.
The UI to interact with this contract is here:
https://cherrific.io/CherryMerry/Forest2

1) LP providers stake their spLP tokens at the Forest.

2) every epoch, the Forest distributes some rewards to stakers.

The reward is given in Cherry Trees (CHRT)
The reward is equal to one thousandth of the CHRT tokens
the Forest has, rounded up.

Imagine the Forest has 4567 CHRT in reserve, it will give 5 CHRT
to stakers every epoch. Once the supply goes below 4000, it will only
give 4 CHRT / epoch, etc ...

Owner powers:
  - none


TRUST (and gas fees) over governance

*/


// From OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
// simplified (not is Context)

abstract contract Ownable {

  // ==== Events      ====
  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

  // ==== Storage     ====
  // Private so it cannot be changed by inherited contracts
  address private _owner;

  // ==== Constructor ====
  constructor() {
    _transferOwnership(msg.sender);
  }

  // ==== Modifiers   ====
  modifier onlyOwner() {
    require(_owner == msg.sender, "Ownable: caller is not the owner");
    _;
  }

  // ==== Views       ====
  function owner() public view virtual returns (address) {
    return _owner;
  }

  // ==== Mutators    ====
  function renounceOwnership() public virtual onlyOwner {
    _transferOwnership(address(0));
  }

  function transferOwnership(address newOwner_) public virtual onlyOwner {
    require(newOwner_ != address(0), "Ownable: new owner is the zero address");
    _transferOwnership(newOwner_);
  }

  // ==== Internals   ====
  function _transferOwnership(address newOwner_) internal virtual {
    address oldOwner = owner();
    _owner = newOwner_;
    emit OwnershipTransferred(oldOwner, newOwner_);
  }
}


interface IERC20 {
    event Transfer(address indexed from,  address indexed to,      uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    function totalSupply()                             external view returns (uint256);
    function balanceOf(address account)                external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);

    function transfer(     address to,                uint256 amount)  external returns (bool);
    function approve(      address spender,           uint256 amount)  external returns (bool);
    function transferFrom( address from,  address to, uint256 amount ) external returns (bool);
}

interface IERC20Metadata is IERC20 {
    function name()     external view returns (string memory);
    function symbol()   external view returns (string memory);
    function decimals() external view returns (uint8);
}


contract CherryForest2 is Ownable {

  // ==== Events ====
  event Staked      (address indexed user, uint80 amount);
  event Withdrawn   (address indexed user, uint80 amount);
  event RewardPaid  (address indexed user, uint80 reward);
  event RewardAdded (address indexed user, uint80 reward);
  event ReserveAdded(address indexed user, uint80 amount);


  // ==== Structs ====

  // only 1 slot
  struct StakerSeat {
    uint32  lastSnapshotIndex;
    uint32  epochTimerStart;
    uint80  balance;  // max value: 1 208 925 tokens
                      // please don't stake more than 1 208 925 spLP tokens
                      // stake() will revert because of overflow if you do anyway
    uint112 rewardEarned;
  }

  // only 1 slot
  struct Snapshot {
      uint32  epoch;               // epoch of the snapshot
      uint112 rewardDistributed;   // amount distributed during that Epoch
      uint112 rewardPerLPtoken;    // accumulated reward per spLP up to that snapshot
  }


  // ==== Constants ====

  uint32 public constant PERIOD = 6 hours;
  uint32 public constant withdrawLockupEpochs = 6;  // 6 epochs before can withdraw
  uint32 public constant rewardLockupEpochs   = 3;  // 3 epochs before can claimReward

  address public constant pool = 0x4e904138B50f8a3Ad71B5303C02F53d0ad359D6C;
  address public constant tree = 0x8Dc673878d325C028D08d73C24cD59E15df62a4c;


  // ==== Storage ====
  // ---- 1 slot  ----
  uint32  public epoch;       // last update epoch
  uint112 public totalSupply; // total spLP staked
  uint80  public reserve;     // total CHRT left to distribute
                              // this is < this balance of tree because
                              // some stakers won't have withdrawn their rewards

  mapping(address => StakerSeat) public stakers;

  Snapshot[] public history;


  // ==== Constructor ====

//  constructor(address pool_, address tree_) {
  constructor() {
//    require(pool_ != address(0), "pool cannot be 0x00");

    // deploy checks to make sure I'm not an idiot

    // check pool symbol is spLP
    require(
      keccak256(abi.encodePacked(IERC20Metadata(pool).symbol())) == keccak256(abi.encodePacked('spLP')),
      "pool_ is not a SpookySwap liquidity pool"
    );

    // check tree symbol is CHRT
    require(
      keccak256(abi.encodePacked(IERC20Metadata(tree).symbol())) == keccak256(abi.encodePacked('CHRT')),
      "tree_ is not the Cherry Tree token contract"
    );

    // set immutables in constructor
    // pool       = pool_;
    // tree       = tree_;

    // create initial snapshop
    Snapshot memory initialSnapshot = Snapshot({
      epoch : uint32(getEpoch()),
      rewardDistributed : 0,
      rewardPerLPtoken  : 0
    });
    history.push(initialSnapshot);

    // set first epoch
    epoch = uint32(getEpoch());

    // Important: stake at least one spLP before first reward
    // or the application will not start
  }


  // ==== Pseudo - ERC20 ====

  function balanceOf(address account_) public view returns (uint256) {
    return stakers[account_].balance;
  }

  // Pseudo ERC20Metadata so people can watch their st-spLP-CHRY-FTM tokens in MetaMask
  // with balanceOf() the 4 following functions are the only implementation of the ERC20 token specification
  // they are just here so that users can easily view how many spLP tokens they have staked at the Forest easily
  // from their MetaMask wallet: they just need to add the Forest contract address as a token in MM
  // Other functions of the ERC20 standard are not implemented
  function symbol()   external pure returns (string memory) { return "stSpLP-T"; }
  function name()     external pure returns (string memory) { return "CHRT-FTM spLP staked at the Forest"; }
  function decimals() external pure returns (uint8)         { return 18; }

  // ==== Modifiers ====

  // ==== Governance ====
  // Less Governance == more Trust


  // ==== Views ====

  // Current epoch
  function getEpoch() public view returns (uint256) {
    return block.timestamp / PERIOD;
  }

  // === Read snapshots ===

  function getLatestSnapshotIndex() public view returns (uint256) {
    return history.length - 1;
  }

  function getLatestSnapshot() public view returns (Snapshot memory) {
    return history[history.length - 1];
  }

  function getLastSnapshotIndexOf(address staker_) public view returns (uint256) {
    return stakers[staker_].lastSnapshotIndex;
  }

  function getLastSnapshotOf(address staker_) public view returns (Snapshot memory) {
    return history[stakers[staker_].lastSnapshotIndex];
  }

  function canWithdraw(address staker_) external view returns (bool) {
    return stakers[staker_].epochTimerStart + withdrawLockupEpochs <= getEpoch();
  }

  function canClaimReward(address staker_) external view returns (bool) {
    return stakers[staker_].epochTimerStart + rewardLockupEpochs <= getEpoch();
  }

  function rewardPerLPtoken() public view returns (uint256) {
    return history[history.length - 1].rewardPerLPtoken;
  }

  function earned(address staker_) public view returns (uint256) {
    StakerSeat memory staker = stakers[staker_];

    uint256 latestRPT = history[history.length - 1].rewardPerLPtoken;
    uint256 storedRPT = history[staker.lastSnapshotIndex ].rewardPerLPtoken;

    return ( uint(staker.balance) * (latestRPT - storedRPT) / 1e18 ) + staker.rewardEarned;
  }


  // ==== Mutators ====

  function stake(uint256 amount_) public returns(bool) {
    uint newEpoch = getEpoch();

    // check Forest is not lagging in time
    if (newEpoch > epoch) {
      // Forest is lagging
      update();

      // After that, Forest will be updated for the whole epoch
    }

    StakerSeat memory staker = stakers[msg.sender];
    staker = _updateStaker(staker);

    IERC20(pool).transferFrom(msg.sender, address(this), amount_);
    totalSupply    += uint80(amount_);
    staker.balance += uint80(amount_);
    staker.epochTimerStart = uint32(newEpoch); // reset timer

    stakers[msg.sender] = staker; // only one swrite !!!!

    emit Staked(msg.sender, uint80(amount_));

    return true;
  }


  // withdraw automatically claims
  function withdraw(uint256 amount_) public returns(bool) {
    uint newEpoch = getEpoch();

    // check Forest is not lagging in time
    if (newEpoch > epoch) {
      update();
    }

    StakerSeat memory staker = stakers[msg.sender];
    staker = _updateStaker(staker);

    require(
      staker.epochTimerStart + withdrawLockupEpochs <= newEpoch,
      "Forest: you're still in withdraw lockup"
    );

    staker = _claim(staker, newEpoch);

    require(staker.balance >= amount_, "Forest: you asked for too much");

    totalSupply    -= uint80(amount_);  // swrite 5 000 gas
    require(totalSupply > 1e18, "Forest: at least one spLP must remain");
    staker.balance -= uint80(amount_);

    stakers[msg.sender] = staker; // only one swrite for staker

    IERC20(pool).transfer(msg.sender, amount_);

    emit Withdrawn(msg.sender, uint80(amount_));

    return true;
  }


  function exit() external {
    // withdraw automatically claims
    withdraw(balanceOf(msg.sender));
  }


  function claimReward() public returns(bool) {
    uint newEpoch = getEpoch();

    // check Forest is not lagging in time
    if (newEpoch > epoch) {
      update();
    }

    StakerSeat memory staker = stakers[msg.sender];
    staker = _updateStaker(staker);
    staker = _claim(staker, newEpoch);

    stakers[msg.sender] = staker; // only one swrite for staker

    return true;
  }

  // add reserve to be distributed
  // anyone can add reserve if they want to give CHRT
  // to spLP CHRY-FTM stakers
  function addReserve(uint amount_) public returns(bool) {

    IERC20(tree).transferFrom(msg.sender, address(this), amount_);
    reserve += uint80(amount_);

    emit ReserveAdded(msg.sender, uint80(amount_));

    return true;
  }


  /**
    * This can only run once an epoch.
    */
  function update() public returns (bool) {

    uint newEpoch = getEpoch();
    if (newEpoch <= epoch) {
      return false;
    }

    // below code will only run once per epoch

    epoch = uint32(newEpoch);

    // Forest is empty
    if (reserve < 1e18) {
      return false;
    }

    // no stake
    if (totalSupply < 1e18) {
      return false;
    }

    // compute reward
    uint reward = ((reserve / 1e21) + 1) * 1e18;

    // distribute reward
    // new snapshot is a copy of the previous one:
    Snapshot memory newSnapshot = getLatestSnapshot();

    newSnapshot.epoch              = uint32(newEpoch);
    newSnapshot.rewardDistributed  = uint112(reward);
    newSnapshot.rewardPerLPtoken  += uint112(reward * 1e18 / totalSupply);

    history.push(newSnapshot);

    reserve -= uint80(reward);

    emit RewardAdded(msg.sender, uint80(reward));

    return true;
  }


  // ==== Privates ====

  function _updateStaker(StakerSeat memory staker_) private view returns (StakerSeat memory) {
    uint latestSnapshotIdx = history.length - 1;
    // update staker if he lags
    if (staker_.lastSnapshotIndex < latestSnapshotIdx) {
      Snapshot memory latestSnapshot = history[latestSnapshotIdx];
      Snapshot memory stakerSnapshot = history[staker_.lastSnapshotIndex];

      unchecked {
        staker_.rewardEarned += uint112((uint(staker_.balance) * (latestSnapshot.rewardPerLPtoken - stakerSnapshot.rewardPerLPtoken)) / 1e18);
      }
      staker_.lastSnapshotIndex = uint32(latestSnapshotIdx);
    }
    return staker_;
  }

  function _claim(StakerSeat memory staker_, uint newEpoch_) private returns (StakerSeat memory) {
    if (staker_.rewardEarned > 0) {
      require(
        staker_.epochTimerStart + rewardLockupEpochs <=  newEpoch_,
        "Forest: you're still in reward lockup"
      );
      staker_.epochTimerStart = uint32(newEpoch_); // reset timer
      IERC20(tree).transfer(msg.sender, staker_.rewardEarned);  // we trust tree (no re-entrancy)
      emit RewardPaid(msg.sender, uint80(staker_.rewardEarned));
      staker_.rewardEarned = 0;
    }
    return staker_;
  }
}

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":"user","type":"address"},{"indexed":false,"internalType":"uint80","name":"amount","type":"uint80"}],"name":"ReserveAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint80","name":"reward","type":"uint80"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint80","name":"reward","type":"uint80"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint80","name":"amount","type":"uint80"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint80","name":"amount","type":"uint80"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"PERIOD","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"addReserve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker_","type":"address"}],"name":"canClaimReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker_","type":"address"}],"name":"canWithdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"staker_","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"epoch","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker_","type":"address"}],"name":"getLastSnapshotIndexOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker_","type":"address"}],"name":"getLastSnapshotOf","outputs":[{"components":[{"internalType":"uint32","name":"epoch","type":"uint32"},{"internalType":"uint112","name":"rewardDistributed","type":"uint112"},{"internalType":"uint112","name":"rewardPerLPtoken","type":"uint112"}],"internalType":"struct CherryForest2.Snapshot","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestSnapshot","outputs":[{"components":[{"internalType":"uint32","name":"epoch","type":"uint32"},{"internalType":"uint112","name":"rewardDistributed","type":"uint112"},{"internalType":"uint112","name":"rewardPerLPtoken","type":"uint112"}],"internalType":"struct CherryForest2.Snapshot","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestSnapshotIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"history","outputs":[{"internalType":"uint32","name":"epoch","type":"uint32"},{"internalType":"uint112","name":"rewardDistributed","type":"uint112"},{"internalType":"uint112","name":"rewardPerLPtoken","type":"uint112"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserve","outputs":[{"internalType":"uint80","name":"","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardLockupEpochs","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerLPtoken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"stake","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakers","outputs":[{"internalType":"uint32","name":"lastSnapshotIndex","type":"uint32"},{"internalType":"uint32","name":"epochTimerStart","type":"uint32"},{"internalType":"uint80","name":"balance","type":"uint80"},{"internalType":"uint112","name":"rewardEarned","type":"uint112"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint112","name":"","type":"uint112"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tree","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"update","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawLockupEpochs","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506200001d3362000368565b60405163073704c560e41b602082015260240160405160208183030381529060405280519060200120734e904138b50f8a3ad71b5303c02f53d0ad359d6c6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000099573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620000c3919081019062000409565b604051602001620000d59190620004c1565b60405160208183030381529060405280519060200120146200014f5760405162461bcd60e51b815260206004820152602860248201527f706f6f6c5f206973206e6f7420612053706f6f6b7953776170206c69717569646044820152671a5d1e481c1bdbdb60c21b60648201526084015b60405180910390fd5b6040516310d2149560e21b602082015260240160405160208183030381529060405280519060200120738dc673878d325c028d08d73c24cd59e15df62a4c6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620001cb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620001f5919081019062000409565b604051602001620002079190620004c1565b6040516020818303038152906040528051906020012014620002805760405162461bcd60e51b815260206004820152602b60248201527f747265655f206973206e6f742074686520436865727279205472656520746f6b60448201526a195b8818dbdb9d1c9858dd60aa1b606482015260840162000146565b600060405180606001604052806200029d620003b860201b60201c565b63ffffffff908116825260006020808401829052604093840182905260038054600181018255925284517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b909201805491860151948601516001600160701b03908116600160901b026001600160901b0396909116640100000000026001600160901b031990931693909416929092171792909216179055905062000341620003b8565b600060146101000a81548163ffffffff021916908363ffffffff1602179055505062000502565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000620003c861546042620004df565b905090565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000400578181015183820152602001620003e6565b50506000910152565b6000602082840312156200041c57600080fd5b81516001600160401b03808211156200043457600080fd5b818401915084601f8301126200044957600080fd5b8151818111156200045e576200045e620003cd565b604051601f8201601f19908116603f01168101908382118183101715620004895762000489620003cd565b81604052828152876020848701011115620004a357600080fd5b620004b6836020830160208801620003e3565b979650505050505050565b60008251620004d5818460208701620003e3565b9190910192915050565b600082620004fd57634e487b7160e01b600052601260045260246000fd5b500490565b611c4a80620005126000396000f3fe608060405234801561001057600080fd5b50600436106101ef5760003560e01c8063757991a81161010f578063b4d1d795116100a2578063d518f24311610071578063d518f24314610586578063e9fad8ee1461058e578063f2fde38b14610596578063fd54b228146105a957600080fd5b8063b4d1d795146104f7578063b6f3c6c014610500578063b88a802f1461054c578063cd3293de1461055457600080fd5b806395d89b41116100de57806395d89b4114610464578063a2e620451461049d578063a694fc3a146104a5578063a7a38f0b146104b857600080fd5b8063757991a81461039f5780638da5cb5b146103a7578063900cf0cf146103b85780639168ae72146103cf57600080fd5b80631e85cd651161018757806365c97bd01161015657806365c97bd01461032557806370a082311461032d578063714b465814610366578063715018a61461039557600080fd5b80631e85cd65146102e85780632e1a7d4d146102f0578063313ce567146103035780634b8243c91461031257600080fd5b80630d491992116101c35780630d4919921461026f57806316f0115b1461027757806318160ddd146102aa57806319262d30146102d557600080fd5b80628cc262146101f4578063022ba18d1461021a578063046335d01461023757806306fdde031461025a575b600080fd5b6102076102023660046119b1565b6105c4565b6040519081526020015b60405180910390f35b610222600381565b60405163ffffffff9091168152602001610211565b61024a6102453660046119b1565b6106fd565b6040519015158152602001610211565b610262610748565b60405161021191906119e1565b610207610768565b610292734e904138b50f8a3ad71b5303c02f53d0ad359d6c81565b6040516001600160a01b039091168152602001610211565b6001546102bd906001600160701b031681565b6040516001600160701b039091168152602001610211565b61024a6102e33660046119b1565b6107ad565b610222600681565b61024a6102fe366004611a2f565b6107ea565b60405160128152602001610211565b61024a610320366004611a2f565b610bc1565b610207610ce7565b61020761033b3660046119b1565b6001600160a01b0316600090815260026020526040902054600160401b90046001600160501b031690565b6102076103743660046119b1565b6001600160a01b031660009081526002602052604090205463ffffffff1690565b61039d610cfe565b005b610207610d64565b6000546001600160a01b0316610292565b60005461022290600160a01b900463ffffffff1681565b6104256103dd3660046119b1565b60026020526000908152604090205463ffffffff80821691640100000000810490911690600160401b81046001600160501b031690600160901b90046001600160701b031684565b6040805163ffffffff95861681529490931660208501526001600160501b03909116918301919091526001600160701b03166060820152608001610211565b60408051808201909152600881527f737453704c502d540000000000000000000000000000000000000000000000006020820152610262565b61024a610d72565b61024a6104b3366004611a2f565b611022565b6104cb6104c6366004611a2f565b611279565b6040805163ffffffff90941684526001600160701b039283166020850152911690820152606001610211565b61022261546081565b61051361050e3660046119b1565b6112bc565b60408051825163ffffffff1681526020808401516001600160701b03908116918301919091529282015190921690820152606001610211565b61024a611359565b60015461056e90600160701b90046001600160501b031681565b6040516001600160501b039091168152602001610211565b6105136114a4565b61039d611530565b61039d6105a43660046119b1565b61155c565b610292738dc673878d325c028d08d73c24cd59e15df62a4c81565b6001600160a01b03811660009081526002602090815260408083208151608081018352905463ffffffff808216835264010000000082041693820193909352600160401b83046001600160501b031691810191909152600160901b9091046001600160701b031660608201526003805483919061064390600190611a5e565b8154811061065357610653611a71565b6000918252602082200154835160038054600160901b9093046001600160701b031694509163ffffffff90911690811061068f5761068f611a71565b60009182526020909120015460608401516001600160701b03600160901b9092048216925016670de0b6b3a76400006106c88385611a5e565b85604001516001600160501b03166106e09190611a87565b6106ea9190611ab4565b6106f49190611ac8565b95945050505050565b6000610707610d64565b6001600160a01b03831660009081526002602052604090205461073a90600390640100000000900463ffffffff16611adb565b63ffffffff16111592915050565b6060604051806060016040528060228152602001611bf360229139905090565b600380546000919061077c90600190611a5e565b8154811061078c5761078c611a71565b600091825260209091200154600160901b90046001600160701b0316919050565b60006107b7610d64565b6001600160a01b03831660009081526002602052604090205461073a90600690640100000000900463ffffffff16611adb565b6000806107f5610d64565b600054909150600160a01b900463ffffffff1681111561081957610817610d72565b505b336000908152600260209081526040918290208251608081018452905463ffffffff808216835264010000000082041692820192909252600160401b82046001600160501b031692810192909252600160901b90046001600160701b031660608201526108858161163b565b905081600682602001516108999190611adb565b63ffffffff1611156109185760405162461bcd60e51b815260206004820152602760248201527f466f726573743a20796f75277265207374696c6c20696e20776974686472617760448201527f206c6f636b75700000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610922818361179a565b90508381604001516001600160501b031610156109815760405162461bcd60e51b815260206004820152601e60248201527f466f726573743a20796f752061736b656420666f7220746f6f206d7563680000604482015260640161090f565b600180546001600160501b03861691906000906109a89084906001600160701b0316611aff565b82546101009290920a6001600160701b03818102199093169183160217909155600154670de0b6b3a76400009116119050610a4b5760405162461bcd60e51b815260206004820152602560248201527f466f726573743a206174206c65617374206f6e652073704c50206d757374207260448201527f656d61696e000000000000000000000000000000000000000000000000000000606482015260840161090f565b8381604001818151610a5d9190611b1f565b6001600160501b039081169091523360008181526002602090815260409182902086518154928801518885015160608a01516001600160701b0316600160901b0271ffffffffffffffffffffffffffffffffffff91909816600160401b021667ffffffffffffffff63ffffffff9283166401000000000267ffffffffffffffff19909616929093169190911793909317169190911793909317909255905163a9059cbb60e01b8152600481019190915260248101869052734e904138b50f8a3ad71b5303c02f53d0ad359d6c915063a9059cbb906044016020604051808303816000875af1158015610b53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b779190611b3f565b506040516001600160501b038516815233907fae86ed1aedb40b4431d4ad7e73e176a61719aa184e16b3a07abca01a33b36990906020015b60405180910390a25060019392505050565b6040516323b872dd60e01b815233600482015230602482015260448101829052600090738dc673878d325c028d08d73c24cd59e15df62a4c906323b872dd906064016020604051808303816000875af1158015610c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c469190611b3f565b50816001600e8282829054906101000a90046001600160501b0316610c6b9190611b61565b92506101000a8154816001600160501b0302191690836001600160501b03160217905550336001600160a01b03167f1748dd3942e03e376927624575a3d84f83afa86f16da95cd16f5cf750a2e079683604051610cd791906001600160501b0391909116815260200190565b60405180910390a2506001919050565b600354600090610cf990600190611a5e565b905090565b6000546001600160a01b03163314610d585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161090f565b610d626000611949565b565b6000610cf961546042611ab4565b600080610d7d610d64565b600054909150600160a01b900463ffffffff168111610d9e57600091505090565b600080547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff16600160a01b63ffffffff841602179055600154670de0b6b3a7640000600160701b9091046001600160501b03161015610dff57600091505090565b600154670de0b6b3a76400006001600160701b039091161015610e2457600091505090565b600154600090610e4e90683635c9adc5dea0000090600160701b90046001600160501b0316611b81565b610e59906001611b61565b610e6b90670de0b6b3a7640000611ba7565b6001600160501b031690506000610e806114a4565b63ffffffff841681526001600160701b03808416602083015260015491925016610eb283670de0b6b3a7640000611a87565b610ebc9190611ab4565b81604001818151610ecd9190611bd2565b6001600160701b03908116909152600380546001818101835560009290925284517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b9091018054602087015160408801518616600160901b0271ffffffffffffffffffffffffffffffffffff91909616640100000000027fffffffffffffffffffffffffffff00000000000000000000000000000000000090921663ffffffff909416939093171791909116929092179091558054849250600e90610fa49084906001600160501b03600160701b90910416611b1f565b92506101000a8154816001600160501b0302191690836001600160501b03160217905550336001600160a01b03167fb4b1f9f4a997d0b9333ada0140b3aaf162b951cb6a9e7f0f8da5d2daa53545858360405161101091906001600160501b0391909116815260200190565b60405180910390a26001935050505090565b60008061102d610d64565b600054909150600160a01b900463ffffffff168111156110515761104f610d72565b505b336000908152600260209081526040918290208251608081018452905463ffffffff808216835264010000000082041692820192909252600160401b82046001600160501b031692810192909252600160901b90046001600160701b031660608201526110bd8161163b565b6040516323b872dd60e01b815233600482015230602482015260448101869052909150734e904138b50f8a3ad71b5303c02f53d0ad359d6c906323b872dd906064016020604051808303816000875af115801561111e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111429190611b3f565b50600180546001600160501b038616919060009061116a9084906001600160701b0316611bd2565b92506101000a8154816001600160701b0302191690836001600160701b0316021790555083816040018181516111a09190611b61565b6001600160501b0390811690915263ffffffff848116602085810191825233600081815260028352604090819020885181549551838b015160608c01516001600160701b0316600160901b0271ffffffffffffffffffffffffffffffffffff918b16600160401b029190911667ffffffffffffffff928a166401000000000267ffffffffffffffff19909916939099169290921796909617959095169590951793909317909355905192881683529092507fa30980b51b66079e4d77346786093ffc1fb7580f4a38b0fa2a1d73506ae22cc29101610baf565b6003818154811061128957600080fd5b60009182526020909120015463ffffffff811691506001600160701b036401000000008204811691600160901b90041683565b60408051606081018252600080825260208083018290528284018290526001600160a01b038516825260029052919091205460038054909163ffffffff1690811061130957611309611a71565b600091825260209182902060408051606081018252919092015463ffffffff811682526001600160701b036401000000008204811694830194909452600160901b90049092169082015292915050565b600080611364610d64565b600054909150600160a01b900463ffffffff1681111561138857611386610d72565b505b336000908152600260209081526040918290208251608081018452905463ffffffff808216835264010000000082041692820192909252600160401b82046001600160501b031692810192909252600160901b90046001600160701b031660608201526113f48161163b565b9050611400818361179a565b336000908152600260209081526040918290208351815492850151938501516060909501516001600160701b0316600160901b0271ffffffffffffffffffffffffffffffffffff6001600160501b03909616600160401b029590951667ffffffffffffffff63ffffffff9586166401000000000267ffffffffffffffff19909516959092169490941792909217919091169190911791909117905550600192915050565b6040805160608101825260008082526020820181905291810191909152600380546114d190600190611a5e565b815481106114e1576114e1611a71565b600091825260209182902060408051606081018252919092015463ffffffff811682526001600160701b036401000000008204811694830194909452600160901b900490921690820152919050565b3360009081526002602052604090205461155990600160401b90046001600160501b03166107ea565b50565b6000546001600160a01b031633146115b65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161090f565b6001600160a01b0381166116325760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161090f565b61155981611949565b60408051608081018252600080825260208201819052918101829052606081019190915260035460009061167190600190611a5e565b905080836000015163ffffffff1610156117935760006003828154811061169a5761169a611a71565b6000918252602080832060408051606081018252939091015463ffffffff80821685526001600160701b036401000000008304811694860194909452600160901b9091049092169083015286516003805493955092911690811061170057611700611a71565b600091825260209182902060408051606081018252919092015463ffffffff811682526001600160701b036401000000008204811694830194909452600160901b900483168183018190528583015192890151919450670de0b6b3a7640000936001600160501b0390921692031602606087018051929091049091016001600160701b03169052505063ffffffff811683525b5090919050565b60408051608081018252600080825260208201819052918101829052606081019190915260608301516001600160701b0316156119405781600384602001516117e39190611adb565b63ffffffff16111561185d5760405162461bcd60e51b815260206004820152602560248201527f466f726573743a20796f75277265207374696c6c20696e20726577617264206c60448201527f6f636b7570000000000000000000000000000000000000000000000000000000606482015260840161090f565b63ffffffff82166020840152606083015160405163a9059cbb60e01b81523360048201526001600160701b039091166024820152738dc673878d325c028d08d73c24cd59e15df62a4c9063a9059cbb906044016020604051808303816000875af11580156118cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f39190611b3f565b5060608301516040516001600160501b03909116815233907f08011f9b08e22dea00d80f640cf312a59df67dec442483f5c7041d2b08719d409060200160405180910390a2600060608401525b50815b92915050565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156119c357600080fd5b81356001600160a01b03811681146119da57600080fd5b9392505050565b600060208083528351808285015260005b81811015611a0e578581018301518582016040015282016119f2565b506000604082860101526040601f19601f8301168501019250505092915050565b600060208284031215611a4157600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561194357611943611a48565b634e487b7160e01b600052603260045260246000fd5b808202811582820484141761194357611943611a48565b634e487b7160e01b600052601260045260246000fd5b600082611ac357611ac3611a9e565b500490565b8082018082111561194357611943611a48565b63ffffffff818116838216019080821115611af857611af8611a48565b5092915050565b6001600160701b03828116828216039080821115611af857611af8611a48565b6001600160501b03828116828216039080821115611af857611af8611a48565b600060208284031215611b5157600080fd5b815180151581146119da57600080fd5b6001600160501b03818116838216019080821115611af857611af8611a48565b60006001600160501b0380841680611b9b57611b9b611a9e565b92169190910492915050565b6001600160501b03818116838216028082169190828114611bca57611bca611a48565b505092915050565b6001600160701b03818116838216019080821115611af857611af8611a4856fe434852542d46544d2073704c50207374616b65642061742074686520466f72657374a2646970667358221220f1f76e1f38aa6689d5b9a829b56066f1e792916eeb2bc5a7616474d0396fc46d64736f6c63430008110033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101ef5760003560e01c8063757991a81161010f578063b4d1d795116100a2578063d518f24311610071578063d518f24314610586578063e9fad8ee1461058e578063f2fde38b14610596578063fd54b228146105a957600080fd5b8063b4d1d795146104f7578063b6f3c6c014610500578063b88a802f1461054c578063cd3293de1461055457600080fd5b806395d89b41116100de57806395d89b4114610464578063a2e620451461049d578063a694fc3a146104a5578063a7a38f0b146104b857600080fd5b8063757991a81461039f5780638da5cb5b146103a7578063900cf0cf146103b85780639168ae72146103cf57600080fd5b80631e85cd651161018757806365c97bd01161015657806365c97bd01461032557806370a082311461032d578063714b465814610366578063715018a61461039557600080fd5b80631e85cd65146102e85780632e1a7d4d146102f0578063313ce567146103035780634b8243c91461031257600080fd5b80630d491992116101c35780630d4919921461026f57806316f0115b1461027757806318160ddd146102aa57806319262d30146102d557600080fd5b80628cc262146101f4578063022ba18d1461021a578063046335d01461023757806306fdde031461025a575b600080fd5b6102076102023660046119b1565b6105c4565b6040519081526020015b60405180910390f35b610222600381565b60405163ffffffff9091168152602001610211565b61024a6102453660046119b1565b6106fd565b6040519015158152602001610211565b610262610748565b60405161021191906119e1565b610207610768565b610292734e904138b50f8a3ad71b5303c02f53d0ad359d6c81565b6040516001600160a01b039091168152602001610211565b6001546102bd906001600160701b031681565b6040516001600160701b039091168152602001610211565b61024a6102e33660046119b1565b6107ad565b610222600681565b61024a6102fe366004611a2f565b6107ea565b60405160128152602001610211565b61024a610320366004611a2f565b610bc1565b610207610ce7565b61020761033b3660046119b1565b6001600160a01b0316600090815260026020526040902054600160401b90046001600160501b031690565b6102076103743660046119b1565b6001600160a01b031660009081526002602052604090205463ffffffff1690565b61039d610cfe565b005b610207610d64565b6000546001600160a01b0316610292565b60005461022290600160a01b900463ffffffff1681565b6104256103dd3660046119b1565b60026020526000908152604090205463ffffffff80821691640100000000810490911690600160401b81046001600160501b031690600160901b90046001600160701b031684565b6040805163ffffffff95861681529490931660208501526001600160501b03909116918301919091526001600160701b03166060820152608001610211565b60408051808201909152600881527f737453704c502d540000000000000000000000000000000000000000000000006020820152610262565b61024a610d72565b61024a6104b3366004611a2f565b611022565b6104cb6104c6366004611a2f565b611279565b6040805163ffffffff90941684526001600160701b039283166020850152911690820152606001610211565b61022261546081565b61051361050e3660046119b1565b6112bc565b60408051825163ffffffff1681526020808401516001600160701b03908116918301919091529282015190921690820152606001610211565b61024a611359565b60015461056e90600160701b90046001600160501b031681565b6040516001600160501b039091168152602001610211565b6105136114a4565b61039d611530565b61039d6105a43660046119b1565b61155c565b610292738dc673878d325c028d08d73c24cd59e15df62a4c81565b6001600160a01b03811660009081526002602090815260408083208151608081018352905463ffffffff808216835264010000000082041693820193909352600160401b83046001600160501b031691810191909152600160901b9091046001600160701b031660608201526003805483919061064390600190611a5e565b8154811061065357610653611a71565b6000918252602082200154835160038054600160901b9093046001600160701b031694509163ffffffff90911690811061068f5761068f611a71565b60009182526020909120015460608401516001600160701b03600160901b9092048216925016670de0b6b3a76400006106c88385611a5e565b85604001516001600160501b03166106e09190611a87565b6106ea9190611ab4565b6106f49190611ac8565b95945050505050565b6000610707610d64565b6001600160a01b03831660009081526002602052604090205461073a90600390640100000000900463ffffffff16611adb565b63ffffffff16111592915050565b6060604051806060016040528060228152602001611bf360229139905090565b600380546000919061077c90600190611a5e565b8154811061078c5761078c611a71565b600091825260209091200154600160901b90046001600160701b0316919050565b60006107b7610d64565b6001600160a01b03831660009081526002602052604090205461073a90600690640100000000900463ffffffff16611adb565b6000806107f5610d64565b600054909150600160a01b900463ffffffff1681111561081957610817610d72565b505b336000908152600260209081526040918290208251608081018452905463ffffffff808216835264010000000082041692820192909252600160401b82046001600160501b031692810192909252600160901b90046001600160701b031660608201526108858161163b565b905081600682602001516108999190611adb565b63ffffffff1611156109185760405162461bcd60e51b815260206004820152602760248201527f466f726573743a20796f75277265207374696c6c20696e20776974686472617760448201527f206c6f636b75700000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610922818361179a565b90508381604001516001600160501b031610156109815760405162461bcd60e51b815260206004820152601e60248201527f466f726573743a20796f752061736b656420666f7220746f6f206d7563680000604482015260640161090f565b600180546001600160501b03861691906000906109a89084906001600160701b0316611aff565b82546101009290920a6001600160701b03818102199093169183160217909155600154670de0b6b3a76400009116119050610a4b5760405162461bcd60e51b815260206004820152602560248201527f466f726573743a206174206c65617374206f6e652073704c50206d757374207260448201527f656d61696e000000000000000000000000000000000000000000000000000000606482015260840161090f565b8381604001818151610a5d9190611b1f565b6001600160501b039081169091523360008181526002602090815260409182902086518154928801518885015160608a01516001600160701b0316600160901b0271ffffffffffffffffffffffffffffffffffff91909816600160401b021667ffffffffffffffff63ffffffff9283166401000000000267ffffffffffffffff19909616929093169190911793909317169190911793909317909255905163a9059cbb60e01b8152600481019190915260248101869052734e904138b50f8a3ad71b5303c02f53d0ad359d6c915063a9059cbb906044016020604051808303816000875af1158015610b53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b779190611b3f565b506040516001600160501b038516815233907fae86ed1aedb40b4431d4ad7e73e176a61719aa184e16b3a07abca01a33b36990906020015b60405180910390a25060019392505050565b6040516323b872dd60e01b815233600482015230602482015260448101829052600090738dc673878d325c028d08d73c24cd59e15df62a4c906323b872dd906064016020604051808303816000875af1158015610c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c469190611b3f565b50816001600e8282829054906101000a90046001600160501b0316610c6b9190611b61565b92506101000a8154816001600160501b0302191690836001600160501b03160217905550336001600160a01b03167f1748dd3942e03e376927624575a3d84f83afa86f16da95cd16f5cf750a2e079683604051610cd791906001600160501b0391909116815260200190565b60405180910390a2506001919050565b600354600090610cf990600190611a5e565b905090565b6000546001600160a01b03163314610d585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161090f565b610d626000611949565b565b6000610cf961546042611ab4565b600080610d7d610d64565b600054909150600160a01b900463ffffffff168111610d9e57600091505090565b600080547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff16600160a01b63ffffffff841602179055600154670de0b6b3a7640000600160701b9091046001600160501b03161015610dff57600091505090565b600154670de0b6b3a76400006001600160701b039091161015610e2457600091505090565b600154600090610e4e90683635c9adc5dea0000090600160701b90046001600160501b0316611b81565b610e59906001611b61565b610e6b90670de0b6b3a7640000611ba7565b6001600160501b031690506000610e806114a4565b63ffffffff841681526001600160701b03808416602083015260015491925016610eb283670de0b6b3a7640000611a87565b610ebc9190611ab4565b81604001818151610ecd9190611bd2565b6001600160701b03908116909152600380546001818101835560009290925284517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b9091018054602087015160408801518616600160901b0271ffffffffffffffffffffffffffffffffffff91909616640100000000027fffffffffffffffffffffffffffff00000000000000000000000000000000000090921663ffffffff909416939093171791909116929092179091558054849250600e90610fa49084906001600160501b03600160701b90910416611b1f565b92506101000a8154816001600160501b0302191690836001600160501b03160217905550336001600160a01b03167fb4b1f9f4a997d0b9333ada0140b3aaf162b951cb6a9e7f0f8da5d2daa53545858360405161101091906001600160501b0391909116815260200190565b60405180910390a26001935050505090565b60008061102d610d64565b600054909150600160a01b900463ffffffff168111156110515761104f610d72565b505b336000908152600260209081526040918290208251608081018452905463ffffffff808216835264010000000082041692820192909252600160401b82046001600160501b031692810192909252600160901b90046001600160701b031660608201526110bd8161163b565b6040516323b872dd60e01b815233600482015230602482015260448101869052909150734e904138b50f8a3ad71b5303c02f53d0ad359d6c906323b872dd906064016020604051808303816000875af115801561111e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111429190611b3f565b50600180546001600160501b038616919060009061116a9084906001600160701b0316611bd2565b92506101000a8154816001600160701b0302191690836001600160701b0316021790555083816040018181516111a09190611b61565b6001600160501b0390811690915263ffffffff848116602085810191825233600081815260028352604090819020885181549551838b015160608c01516001600160701b0316600160901b0271ffffffffffffffffffffffffffffffffffff918b16600160401b029190911667ffffffffffffffff928a166401000000000267ffffffffffffffff19909916939099169290921796909617959095169590951793909317909355905192881683529092507fa30980b51b66079e4d77346786093ffc1fb7580f4a38b0fa2a1d73506ae22cc29101610baf565b6003818154811061128957600080fd5b60009182526020909120015463ffffffff811691506001600160701b036401000000008204811691600160901b90041683565b60408051606081018252600080825260208083018290528284018290526001600160a01b038516825260029052919091205460038054909163ffffffff1690811061130957611309611a71565b600091825260209182902060408051606081018252919092015463ffffffff811682526001600160701b036401000000008204811694830194909452600160901b90049092169082015292915050565b600080611364610d64565b600054909150600160a01b900463ffffffff1681111561138857611386610d72565b505b336000908152600260209081526040918290208251608081018452905463ffffffff808216835264010000000082041692820192909252600160401b82046001600160501b031692810192909252600160901b90046001600160701b031660608201526113f48161163b565b9050611400818361179a565b336000908152600260209081526040918290208351815492850151938501516060909501516001600160701b0316600160901b0271ffffffffffffffffffffffffffffffffffff6001600160501b03909616600160401b029590951667ffffffffffffffff63ffffffff9586166401000000000267ffffffffffffffff19909516959092169490941792909217919091169190911791909117905550600192915050565b6040805160608101825260008082526020820181905291810191909152600380546114d190600190611a5e565b815481106114e1576114e1611a71565b600091825260209182902060408051606081018252919092015463ffffffff811682526001600160701b036401000000008204811694830194909452600160901b900490921690820152919050565b3360009081526002602052604090205461155990600160401b90046001600160501b03166107ea565b50565b6000546001600160a01b031633146115b65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161090f565b6001600160a01b0381166116325760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161090f565b61155981611949565b60408051608081018252600080825260208201819052918101829052606081019190915260035460009061167190600190611a5e565b905080836000015163ffffffff1610156117935760006003828154811061169a5761169a611a71565b6000918252602080832060408051606081018252939091015463ffffffff80821685526001600160701b036401000000008304811694860194909452600160901b9091049092169083015286516003805493955092911690811061170057611700611a71565b600091825260209182902060408051606081018252919092015463ffffffff811682526001600160701b036401000000008204811694830194909452600160901b900483168183018190528583015192890151919450670de0b6b3a7640000936001600160501b0390921692031602606087018051929091049091016001600160701b03169052505063ffffffff811683525b5090919050565b60408051608081018252600080825260208201819052918101829052606081019190915260608301516001600160701b0316156119405781600384602001516117e39190611adb565b63ffffffff16111561185d5760405162461bcd60e51b815260206004820152602560248201527f466f726573743a20796f75277265207374696c6c20696e20726577617264206c60448201527f6f636b7570000000000000000000000000000000000000000000000000000000606482015260840161090f565b63ffffffff82166020840152606083015160405163a9059cbb60e01b81523360048201526001600160701b039091166024820152738dc673878d325c028d08d73c24cd59e15df62a4c9063a9059cbb906044016020604051808303816000875af11580156118cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f39190611b3f565b5060608301516040516001600160501b03909116815233907f08011f9b08e22dea00d80f640cf312a59df67dec442483f5c7041d2b08719d409060200160405180910390a2600060608401525b50815b92915050565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156119c357600080fd5b81356001600160a01b03811681146119da57600080fd5b9392505050565b600060208083528351808285015260005b81811015611a0e578581018301518582016040015282016119f2565b506000604082860101526040601f19601f8301168501019250505092915050565b600060208284031215611a4157600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561194357611943611a48565b634e487b7160e01b600052603260045260246000fd5b808202811582820484141761194357611943611a48565b634e487b7160e01b600052601260045260246000fd5b600082611ac357611ac3611a9e565b500490565b8082018082111561194357611943611a48565b63ffffffff818116838216019080821115611af857611af8611a48565b5092915050565b6001600160701b03828116828216039080821115611af857611af8611a48565b6001600160501b03828116828216039080821115611af857611af8611a48565b600060208284031215611b5157600080fd5b815180151581146119da57600080fd5b6001600160501b03818116838216019080821115611af857611af8611a48565b60006001600160501b0380841680611b9b57611b9b611a9e565b92169190910492915050565b6001600160501b03818116838216028082169190828114611bca57611bca611a48565b505092915050565b6001600160701b03818116838216019080821115611af857611af8611a4856fe434852542d46544d2073704c50207374616b65642061742074686520466f72657374a2646970667358221220f1f76e1f38aa6689d5b9a829b56066f1e792916eeb2bc5a7616474d0396fc46d64736f6c63430008110033

Deployed Bytecode Sourcemap

3074:10380:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8236:365;;;;;;:::i;:::-;;:::i;:::-;;;474:25:1;;;462:2;447:18;8236:365:0;;;;;;;;4248:47;;4294:1;4248:47;;;;;684:10:1;672:23;;;654:42;;642:2;627:18;4248:47:0;510:192:1;7945:157:0;;;;;;:::i;:::-;;:::i;:::-;;;872:14:1;;865:22;847:41;;835:2;820:18;7945:157:0;707:187:1;6807:106:0;;;:::i;:::-;;;;;;;:::i;8108:122::-;;;:::i;4338:73::-;;4369:42;4338:73;;;;;-1:-1:-1;;;;;1616:55:1;;;1598:74;;1586:2;1571:18;4338:73:0;1452:226:1;4598:26:0;;;;;-1:-1:-1;;;;;4598:26:0;;;;;;-1:-1:-1;;;;;1847:43:1;;;1829:62;;1817:2;1802:18;4598:26:0;1683:214:1;7783:156:0;;;;;;:::i;:::-;;:::i;4163:47::-;;4209:1;4163:47;;9401:912;;;;;;:::i;:::-;;:::i;6917:72::-;;;6984:2;2229:36:1;;2217:2;2202:18;6917:72:0;2087:184:1;10965:239:0;;;;;;:::i;:::-;;:::i;7265:102::-;;;:::i;6127:112::-;;;;;;:::i;:::-;-1:-1:-1;;;;;6208:17:0;6185:7;6208:17;;;:7;:17;;;;;:25;-1:-1:-1;;;6208:25:0;;-1:-1:-1;;;;;6208:25:0;;6127:112;7493:133;;;;;;:::i;:::-;-1:-1:-1;;;;;7586:16:0;7563:7;7586:16;;;:7;:16;;;;;:34;;;;7493:133;1569:97;;;:::i;:::-;;7134:94;;;:::i;1454:81::-;1500:7;1523:6;-1:-1:-1;;;;;1523:6:0;1454:81;;4546:20;;;;;-1:-1:-1;;;4546:20:0;;;;;;4871:45;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4871:45:0;;-1:-1:-1;;;;;4871:45:0;;-1:-1:-1;;;4871:45:0;;-1:-1:-1;;;;;4871:45:0;;;;;;;2511:10:1;2548:15;;;2530:34;;2600:15;;;;2595:2;2580:18;;2573:43;-1:-1:-1;;;;;2652:35:1;;;2632:18;;;2625:63;;;;-1:-1:-1;;;;;2724:43:1;2719:2;2704:18;;2697:71;2488:3;2473:19;4871:45:0;2276:498:1;6723:80:0;6783:17;;;;;;;;;;;;;;;;;6723:80;;11267:922;;;:::i;8636:721::-;;;;;;:::i;:::-;;:::i;4923:25::-;;;;;;:::i;:::-;;:::i;:::-;;;;3009:10:1;2997:23;;;2979:42;;-1:-1:-1;;;;;3106:15:1;;;3101:2;3086:18;;3079:43;3158:15;;3138:18;;;3131:43;2967:2;2952:18;4923:25:0;2779:401:1;4119:39:0;;4151:7;4119:39;;7632:145;;;;;;:::i;:::-;;:::i;:::-;;;;3403:13:1;;3418:10;3399:30;3381:49;;3477:4;3465:17;;;3459:24;-1:-1:-1;;;;;3570:21:1;;;3548:20;;;3541:51;;;;3640:17;;;3634:24;3630:33;;;3608:20;;;3601:63;3369:2;3354:18;7632:145:0;3185:485:1;10436:401:0;;;:::i;4650:22::-;;;;;-1:-1:-1;;;4650:22:0;;-1:-1:-1;;;;;4650:22:0;;;;;;-1:-1:-1;;;;;3837:35:1;;;3819:54;;3807:2;3792:18;4650:22:0;3675:204:1;7373:114:0;;;:::i;10321:107::-;;;:::i;1672:194::-;;;;;;:::i;:::-;;:::i;4416:73::-;;4447:42;4416:73;;8236:365;-1:-1:-1;;;;;8333:16:0;;8290:7;8333:16;;;:7;:16;;;;;;;;8306:43;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8306:43:0;;-1:-1:-1;;;;;8306:43:0;;;;;;;;-1:-1:-1;;;8306:43:0;;;-1:-1:-1;;;;;8306:43:0;;;;;8378:7;8386:14;;8290:7;;8378;8386:18;;8306:43;;8386:18;:::i;:::-;8378:27;;;;;;;;:::i;:::-;;;;;;;;;:44;8457:24;;8449:7;:34;;-1:-1:-1;;;8378:44:0;;;-1:-1:-1;;;;;8378:44:0;;-1:-1:-1;8449:7:0;:34;;;;;;;;;;;:::i;:::-;;;;;;;;;;:51;8576:19;;;;-1:-1:-1;;;;;;;;8449:51:0;;;;;;-1:-1:-1;8516:79:0;8567:4;8542:21;8449:51;8542:9;:21;:::i;:::-;8523:6;:14;;;-1:-1:-1;;;;;8518:20:0;:46;;;;:::i;:::-;:53;;;;:::i;:::-;8516:79;;;;:::i;:::-;8509:86;8236:365;-1:-1:-1;;;;;8236:365:0:o;7945:157::-;8009:4;8086:10;:8;:10::i;:::-;-1:-1:-1;;;;;8029:16:0;;;;;;:7;:16;;;;;:32;:53;;4294:1;;8029:32;;;;;:53;:::i;:::-;:67;;;;;7945:157;-1:-1:-1;;7945:157:0:o;6807:106::-;6850:13;6867:43;;;;;;;;;;;;;;;;;;;6807:106;:::o;8108:122::-;8180:7;8188:14;;8157:7;;8180;8188:18;;8205:1;;8188:18;:::i;:::-;8180:27;;;;;;;;:::i;:::-;;;;;;;;;;:44;-1:-1:-1;;;8180:44:0;;-1:-1:-1;;;;;8180:44:0;;;-1:-1:-1;8108:122:0:o;7783:156::-;7844:4;7923:10;:8;:10::i;:::-;-1:-1:-1;;;;;7864:16:0;;;;;;:7;:16;;;;;:32;:55;;4209:1;;7864:32;;;;;:55;:::i;9401:912::-;9451:4;9464:13;9480:10;:8;:10::i;:::-;9558:5;;9464:26;;-1:-1:-1;;;;9558:5:0;;;;9547:16;;9543:47;;;9574:8;:6;:8::i;:::-;;9543:47;9633:10;9598:24;9625:19;;;:7;:19;;;;;;;;;9598:46;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9598:46:0;;-1:-1:-1;;;;;9598:46:0;;;;;;;;-1:-1:-1;;;9598:46:0;;-1:-1:-1;;;;;9598:46:0;;;;;9660:21;9598:46;9660:13;:21::i;:::-;9651:30;;9755:8;4209:1;9706:6;:22;;;:45;;;;:::i;:::-;:57;;;;9690:130;;;;-1:-1:-1;;;9690:130:0;;5391:2:1;9690:130:0;;;5373:21:1;5430:2;5410:18;;;5403:30;5469:34;5449:18;;;5442:62;5540:9;5520:18;;;5513:37;5567:19;;9690:130:0;;;;;;;;;9838:24;9845:6;9853:8;9838:6;:24::i;:::-;9829:33;;9897:7;9879:6;:14;;;-1:-1:-1;;;;;9879:25:0;;;9871:68;;;;-1:-1:-1;;;9871:68:0;;5799:2:1;9871:68:0;;;5781:21:1;5838:2;5818:18;;;5811:30;5877:32;5857:18;;;5850:60;5927:18;;9871:68:0;5597:354:1;9871:68:0;9948:11;:33;;-1:-1:-1;;;;;9948:33:0;;;:11;;;:33;;;;-1:-1:-1;;;;;9948:33:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;9948:33:0;;;;;;;;;;;;;;;-1:-1:-1;10017:11:0;10031:4;10017:11;;:18;;-1:-1:-1;10009:68:0;;;;-1:-1:-1;;;10009:68:0;;6359:2:1;10009:68:0;;;6341:21:1;6398:2;6378:18;;;6371:30;6437:34;6417:18;;;6410:62;6508:7;6488:18;;;6481:35;6533:19;;10009:68:0;6157:401:1;10009:68:0;10109:7;10084:6;:14;;:33;;;;;;;:::i;:::-;-1:-1:-1;;;;;10084:33:0;;;;;;10134:10;10126:19;;;;:7;:19;;;;;;;;;:28;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10126:28:0;-1:-1:-1;;;10126:28:0;;;;;;-1:-1:-1;;;10126:28:0;;;;;;;;;-1:-1:-1;;10126:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;10193:42;;-1:-1:-1;;;10193:42:0;;10126:28;10193:42;;6929:74:1;;;;7019:18;;;7012:34;;;4369:42:0;;-1:-1:-1;10193:21:0;;6902:18:1;;10193:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;10249:38:0;;-1:-1:-1;;;;;3837:35:1;;3819:54;;10259:10:0;;10249:38;;3807:2:1;3792:18;10249:38:0;;;;;;;;-1:-1:-1;10303:4:0;;9401:912;-1:-1:-1;;;9401:912:0:o;10965:239::-;11029:61;;-1:-1:-1;;;11029:61:0;;11055:10;11029:61;;;7602:34:1;11075:4:0;7652:18:1;;;7645:43;7704:18;;;7697:34;;;11014:4:0;;4447:42;;11029:25;;7514:18:1;;11029:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11115:7;11097;;:26;;;;;;;;;;-1:-1:-1;;;;;11097:26:0;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;11097:26:0;;;;;-1:-1:-1;;;;;11097:26:0;;;;;;11150:10;-1:-1:-1;;;;;11137:41:0;;11169:7;11137:41;;;;;-1:-1:-1;;;;;3837:35:1;;;;3819:54;;3807:2;3792:18;;3675:204;11137:41:0;;;;;;;;-1:-1:-1;11194:4:0;;10965:239;-1:-1:-1;10965:239:0:o;7265:102::-;7343:7;:14;7320:7;;7343:18;;7360:1;;7343:18;:::i;:::-;7336:25;;7265:102;:::o;1569:97::-;1349:6;;-1:-1:-1;;;;;1349:6:0;1359:10;1349:20;1341:65;;;;-1:-1:-1;;;1341:65:0;;8133:2:1;1341:65:0;;;8115:21:1;;;8152:18;;;8145:30;8211:34;8191:18;;;8184:62;8263:18;;1341:65:0;7931:356:1;1341:65:0;1630:30:::1;1657:1;1630:18;:30::i;:::-;1569:97::o:0;7134:94::-;7175:7;7198:24;4151:7;7198:15;:24;:::i;11267:922::-;11301:4;11316:13;11332:10;:8;:10::i;:::-;11365:5;;11316:26;;-1:-1:-1;;;;11365:5:0;;;;11353:17;;11349:52;;11388:5;11381:12;;;11267:922;:::o;11349:52::-;11459:5;:24;;;;-1:-1:-1;;;11459:24:0;;;;;;;-1:-1:-1;11520:7:0;11530:4;-1:-1:-1;;;11520:7:0;;;-1:-1:-1;;;;;11520:7:0;:14;11516:49;;;11552:5;11545:12;;;11267:922;:::o;11516:49::-;11594:11;;11608:4;-1:-1:-1;;;;;11594:11:0;;;:18;11590:53;;;11630:5;11623:12;;;11267:922;:::o;11590:53::-;11690:7;;11674:11;;11690:14;;11700:4;;-1:-1:-1;;;11690:7:0;;-1:-1:-1;;;;;11690:7:0;:14;:::i;:::-;11689:20;;11708:1;11689:20;:::i;:::-;11688:29;;11713:4;11688:29;:::i;:::-;-1:-1:-1;;;;;11674:43:0;;;11804:27;11834:19;:17;:19::i;:::-;11862:49;;;;;-1:-1:-1;;;;;11918:48:0;;;:29;;;:48;12030:11;;11804:49;;-1:-1:-1;12030:11:0;12014:13;11959:6;12023:4;12014:13;:::i;:::-;:27;;;;:::i;:::-;11973:11;:28;;:69;;;;;;;:::i;:::-;-1:-1:-1;;;;;11973:69:0;;;;;;12051:7;:25;;;;;;;;-1:-1:-1;12051:25:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12051:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12085;;12103:6;;-1:-1:-1;12085:7:0;;:25;;12103:6;;-1:-1:-1;;;;;;;;12085:25:0;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;12085:25:0;;;;;-1:-1:-1;;;;;12085:25:0;;;;;;12136:10;-1:-1:-1;;;;;12124:39:0;;12155:6;12124:39;;;;;-1:-1:-1;;;;;3837:35:1;;;;3819:54;;3807:2;3792:18;;3675:204;12124:39:0;;;;;;;;12179:4;12172:11;;;;;11267:922;:::o;8636:721::-;8683:4;8696:13;8712:10;:8;:10::i;:::-;8790:5;;8696:26;;-1:-1:-1;;;;8790:5:0;;;;8779:16;;8775:142;;;8834:8;:6;:8::i;:::-;;8775:142;8960:10;8925:24;8952:19;;;:7;:19;;;;;;;;;8925:46;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8925:46:0;;-1:-1:-1;;;;;8925:46:0;;;;;;;;-1:-1:-1;;;8925:46:0;;-1:-1:-1;;;;;8925:46:0;;;;;8987:21;8925:46;8987:13;:21::i;:::-;9017:61;;-1:-1:-1;;;9017:61:0;;9043:10;9017:61;;;7602:34:1;9063:4:0;7652:18:1;;;7645:43;7704:18;;;7697:34;;;8978:30:0;;-1:-1:-1;4369:42:0;;9017:25;;7514:18:1;;9017:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;9085:11:0;:33;;-1:-1:-1;;;;;9085:33:0;;;:11;;;:33;;;;-1:-1:-1;;;;;9085:33:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;9085:33:0;;;;;-1:-1:-1;;;;;9085:33:0;;;;;;9150:7;9125:6;:14;;:33;;;;;;;:::i;:::-;-1:-1:-1;;;;;9125:33:0;;;;;;9165:41;;;;:22;;;;:41;;;9238:10;9230:19;;;;:7;:19;;;;;;;:28;;;;;;;;;;;;;;-1:-1:-1;;;;;9230:28:0;-1:-1:-1;;;9230:28:0;;;;;-1:-1:-1;;;9230:28:0;;;;;;;;;;;-1:-1:-1;;9230:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9296:35;;3837::1;;;3819:54;;9238:10:0;;-1:-1:-1;9296:35:0;;3792:18:1;9296:35:0;3675:204:1;4923:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4923:25:0;;;;;;-1:-1:-1;;;4923:25:0;;;;:::o;7632:145::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7736:16:0;;;;:7;:16;;;;;;:34;7728:7;:43;;:7;;7736:34;;;7728:43;;;;;;:::i;:::-;;;;;;;;;;7721:50;;;;;;;;7728:43;;;;7721:50;;;;;;-1:-1:-1;;;;;7721:50:0;;;;;;;;;;;;-1:-1:-1;;;7721:50:0;;;;;;;;;;7632:145;-1:-1:-1;;7632:145:0:o;10436:401::-;10474:4;10487:13;10503:10;:8;:10::i;:::-;10581:5;;10487:26;;-1:-1:-1;;;;10581:5:0;;;;10570:16;;10566:47;;;10597:8;:6;:8::i;:::-;;10566:47;10656:10;10621:24;10648:19;;;:7;:19;;;;;;;;;10621:46;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10621:46:0;;-1:-1:-1;;;;;10621:46:0;;;;;;;;-1:-1:-1;;;10621:46:0;;-1:-1:-1;;;;;10621:46:0;;;;;10683:21;10621:46;10683:13;:21::i;:::-;10674:30;;10720:24;10727:6;10735:8;10720:6;:24::i;:::-;10761:10;10753:19;;;;:7;:19;;;;;;;;;:28;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10753:28:0;-1:-1:-1;;;10753:28:0;;-1:-1:-1;;;;;10753:28:0;;;-1:-1:-1;;;10753:28:0;;;;;;;;;;;;-1:-1:-1;;10753:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10753:28:0;;10436:401;-1:-1:-1;;10436:401:0:o;7373:114::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;7454:7:0;7462:14;;:18;;7479:1;;7462:18;:::i;:::-;7454:27;;;;;;;;:::i;:::-;;;;;;;;;;7447:34;;;;;;;;7454:27;;;;7447:34;;;;;;-1:-1:-1;;;;;7447:34:0;;;;;;;;;;;;-1:-1:-1;;;7447:34:0;;;;;;;;;;7373:114;-1:-1:-1;7373:114:0:o;10321:107::-;10410:10;6185:7;6208:17;;;:7;:17;;;;;:25;10391:31;;-1:-1:-1;;;6208:25:0;;-1:-1:-1;;;;;6208:25:0;9401:912;:::i;10391:31::-;;10321:107::o;1672:194::-;1349:6;;-1:-1:-1;;;;;1349:6:0;1359:10;1349:20;1341:65;;;;-1:-1:-1;;;1341:65:0;;8133:2:1;1341:65:0;;;8115:21:1;;;8152:18;;;8145:30;8211:34;8191:18;;;8184:62;8263:18;;1341:65:0;7931:356:1;1341:65:0;-1:-1:-1;;;;;1758:23:0;::::1;1750:74;;;::::0;-1:-1:-1;;;1750:74:0;;9166:2:1;1750:74:0::1;::::0;::::1;9148:21:1::0;9205:2;9185:18;;;9178:30;9244:34;9224:18;;;9217:62;9315:8;9295:18;;;9288:36;9341:19;;1750:74:0::1;8964:402:1::0;1750:74:0::1;1831:29;1850:9;1831:18;:29::i;12224:646::-:0;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12347:7:0;:14;12322:22;;12347:18;;12364:1;;12347:18;:::i;:::-;12322:43;;12437:17;12409:7;:25;;;:45;;;12405:439;;;12465:30;12498:7;12506:17;12498:26;;;;;;;;:::i;:::-;;;;;;;;;12465:59;;;;;;;;12498:26;;;;12465:59;;;;;;;-1:-1:-1;;;;;12465:59:0;;;;;;;;;;;;-1:-1:-1;;;12465:59:0;;;;;;;;;;12574:25;;12566:7;:34;;12465:59;;-1:-1:-1;12566:7:0;:34;;;;;;;;;:::i;:::-;;;;;;;;;;12533:67;;;;;;;;12566:34;;;;12533:67;;;;;;-1:-1:-1;;;;;12533:67:0;;;;;;;;;;;;-1:-1:-1;;;12533:67:0;;;;;;;;;;12690:31;;;;12670:15;;;;12533:67;;-1:-1:-1;12760:4:0;;-1:-1:-1;;;;;12665:21:0;;;12690:65;;12665:91;;12632:20;;;:133;;12664:100;;;;12632:133;;;-1:-1:-1;;;;;12632:133:0;;;-1:-1:-1;;12783:53:0;;;;;12405:439;-1:-1:-1;12857:7:0;;12224:646;-1:-1:-1;12224:646:0:o;12876:575::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12982:20:0;;;;-1:-1:-1;;;;;12982:24:0;;12978:447;;13084:9;4294:1;13035:7;:23;;;:44;;;;:::i;:::-;:58;;;;13017:135;;;;-1:-1:-1;;;13017:135:0;;9573:2:1;13017:135:0;;;9555:21:1;9612:2;9592:18;;;9585:30;9651:34;9631:18;;;9624:62;9722:7;9702:18;;;9695:35;9747:19;;13017:135:0;9371:401:1;13017:135:0;13161:43;;;:23;;;:43;13262:20;;;;13228:55;;-1:-1:-1;;;13228:55:0;;13250:10;13228:55;;;9951:74:1;-1:-1:-1;;;;;10061:43:1;;;10041:18;;;10034:71;4447:42:0;;13228:21;;9924:18:1;;13228:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;13362:20:0;;;;13332:52;;-1:-1:-1;;;;;3837:35:1;;;3819:54;;13343:10:0;;13332:52;;3807:2:1;3792:18;13332:52:0;;;;;;;13416:1;13393:20;;;:24;12978:447;-1:-1:-1;13438:7:0;12876:575;;;;;:::o;1900:181::-;1971:16;1523:6;;-1:-1:-1;;;;;2004:18:0;;;;;;;;;;2034:41;;1523:6;;;;;;;2034:41;;1971:16;2034:41;1964:117;1900:181;:::o;14:309:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;-1:-1:-1;;;;;224:5:1;220:54;213:5;210:65;200:93;;289:1;286;279:12;200:93;312:5;14:309;-1:-1:-1;;;14:309:1:o;899:548::-;1011:4;1040:2;1069;1058:9;1051:21;1101:6;1095:13;1144:6;1139:2;1128:9;1124:18;1117:34;1169:1;1179:140;1193:6;1190:1;1187:13;1179:140;;;1288:14;;;1284:23;;1278:30;1254:17;;;1273:2;1250:26;1243:66;1208:10;;1179:140;;;1183:3;1368:1;1363:2;1354:6;1343:9;1339:22;1335:31;1328:42;1438:2;1431;1427:7;1422:2;1414:6;1410:15;1406:29;1395:9;1391:45;1387:54;1379:62;;;;899:548;;;;:::o;1902:180::-;1961:6;2014:2;2002:9;1993:7;1989:23;1985:32;1982:52;;;2030:1;2027;2020:12;1982:52;-1:-1:-1;2053:23:1;;1902:180;-1:-1:-1;1902:180:1:o;3884:184::-;-1:-1:-1;;;3933:1:1;3926:88;4033:4;4030:1;4023:15;4057:4;4054:1;4047:15;4073:128;4140:9;;;4161:11;;;4158:37;;;4175:18;;:::i;4206:184::-;-1:-1:-1;;;4255:1:1;4248:88;4355:4;4352:1;4345:15;4379:4;4376:1;4369:15;4395:168;4468:9;;;4499;;4516:15;;;4510:22;;4496:37;4486:71;;4537:18;;:::i;4568:184::-;-1:-1:-1;;;4617:1:1;4610:88;4717:4;4714:1;4707:15;4741:4;4738:1;4731:15;4757:120;4797:1;4823;4813:35;;4828:18;;:::i;:::-;-1:-1:-1;4862:9:1;;4757:120::o;4882:125::-;4947:9;;;4968:10;;;4965:36;;;4981:18;;:::i;5012:172::-;5079:10;5109;;;5121;;;5105:27;;5144:11;;;5141:37;;;5158:18;;:::i;:::-;5141:37;5012:172;;;;:::o;5956:196::-;-1:-1:-1;;;;;6088:10:1;;;6076;;;6072:27;;6111:12;;;6108:38;;;6126:18;;:::i;6563:187::-;-1:-1:-1;;;;;6686:10:1;;;6674;;;6670:27;;6709:12;;;6706:38;;;6724:18;;:::i;7057:277::-;7124:6;7177:2;7165:9;7156:7;7152:23;7148:32;7145:52;;;7193:1;7190;7183:12;7145:52;7225:9;7219:16;7278:5;7271:13;7264:21;7257:5;7254:32;7244:60;;7300:1;7297;7290:12;7742:184;-1:-1:-1;;;;;7851:10:1;;;7863;;;7847:27;;7886:11;;;7883:37;;;7900:18;;:::i;8292:203::-;8331:1;-1:-1:-1;;;;;8406:2:1;8403:1;8399:10;8428:3;8418:37;;8435:18;;:::i;:::-;8473:10;;8469:20;;;;;8292:203;-1:-1:-1;;8292:203:1:o;8500:261::-;-1:-1:-1;;;;;8625:10:1;;;8637;;;8621:27;8668:20;;;;8571:22;8707:24;;;8697:58;;8735:18;;:::i;:::-;8697:58;;8500:261;;;;:::o;8766:193::-;-1:-1:-1;;;;;8884:10:1;;;8896;;;8880:27;;8919:11;;;8916:37;;;8933:18;;:::i

Swarm Source

ipfs://f1f76e1f38aa6689d5b9a829b56066f1e792916eeb2bc5a7616474d0396fc46d

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

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