ETH Price: $2,461.19 (+0.80%)

Contract

0x87C9DBFf0016aF23F5b1AB9B8e072124aB729193
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Restake127143302021-06-27 5:46:061165 days ago1624772766IN
0x87C9DBFf...4aB729193
0 ETH0.000098764
Unstake126302902021-06-14 3:55:121178 days ago1623642912IN
0x87C9DBFf...4aB729193
0 ETH0.000098374
Restake126302902021-06-14 3:55:121178 days ago1623642912IN
0x87C9DBFf...4aB729193
0 ETH0.000098714
Restake114595402020-12-15 19:21:041358 days ago1608060064IN
0x87C9DBFf...4aB729193
0 ETH0.0006082126.0022
Restake113554002020-11-29 19:07:141374 days ago1606676834IN
0x87C9DBFf...4aB729193
0 ETH0.0002795211.95622695
Restake113553942020-11-29 19:05:341374 days ago1606676734IN
0x87C9DBFf...4aB729193
0 ETH0.0002828812.1
Restake113552372020-11-29 18:30:351374 days ago1606674635IN
0x87C9DBFf...4aB729193
0 ETH0.0002805412.00000145
Restake113552372020-11-29 18:30:351374 days ago1606674635IN
0x87C9DBFf...4aB729193
0 ETH0.0002805412.00000145
Restake113551552020-11-29 18:11:381374 days ago1606673498IN
0x87C9DBFf...4aB729193
0 ETH0.0002852212.2
Restake113551452020-11-29 18:08:161374 days ago1606673296IN
0x87C9DBFf...4aB729193
0 ETH0.0002852212.2
Restake113551452020-11-29 18:08:161374 days ago1606673296IN
0x87C9DBFf...4aB729193
0 ETH0.0002852212.2
Restake113551452020-11-29 18:08:161374 days ago1606673296IN
0x87C9DBFf...4aB729193
0 ETH0.0002804411.99571427
Restake110885332020-10-19 19:58:411415 days ago1603137521IN
0x87C9DBFf...4aB729193
0 ETH0.0004675820
Restake110885322020-10-19 19:58:401415 days ago1603137520IN
0x87C9DBFf...4aB729193
0 ETH0.0004675820
Restake110885292020-10-19 19:58:001415 days ago1603137480IN
0x87C9DBFf...4aB729193
0 ETH0.0004675820
Restake110885212020-10-19 19:55:311415 days ago1603137331IN
0x87C9DBFf...4aB729193
0 ETH0.0004675820
Restake110885212020-10-19 19:55:311415 days ago1603137331IN
0x87C9DBFf...4aB729193
0 ETH0.0004675820
Restake110885142020-10-19 19:54:081415 days ago1603137248IN
0x87C9DBFf...4aB729193
0 ETH0.0004675820
Restake110885142020-10-19 19:54:081415 days ago1603137248IN
0x87C9DBFf...4aB729193
0 ETH0.0004675820
Restake110885132020-10-19 19:53:591415 days ago1603137239IN
0x87C9DBFf...4aB729193
0 ETH0.0004675820
Unstake107572652020-08-29 18:21:471466 days ago1598725307IN
0x87C9DBFf...4aB729193
0 ETH0.0020800689.3
Unstake107572432020-08-29 18:16:541466 days ago1598725014IN
0x87C9DBFf...4aB729193
0 ETH0.0021266591.3
Unstake107572312020-08-29 18:13:511466 days ago1598724831IN
0x87C9DBFf...4aB729193
0 ETH0.00349395150
Unstake107572282020-08-29 18:12:481466 days ago1598724768IN
0x87C9DBFf...4aB729193
0 ETH0.0046586200
Restake107307462020-08-25 16:48:471471 days ago1598374127IN
0x87C9DBFf...4aB729193
0 ETH0.00282885121
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:
Staking

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU LGPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-04-14
*/

// File: contracts/library/ERC20.sol

pragma solidity ^0.4.24;

interface ERC20 {

    function totalSupply() public view returns (uint);
    function balanceOf(address owner) public view returns (uint);
    function allowance(address owner, address spender) public view returns (uint);
    function transfer(address to, uint value) public returns (bool);
    function transferFrom(address from, address to, uint value) public returns (bool);
    function approve(address spender, uint value) public returns (bool);

}

// File: contracts/library/Ownable.sol

pragma solidity ^0.4.24;

contract Ownable {

    address public owner;

    modifier onlyOwner {
        require(isOwner(msg.sender));
        _;
    }

    function Ownable() public {
        owner = msg.sender;
    }

    function transferOwnership(address _newOwner) public onlyOwner {
        owner = _newOwner;
    }

    function isOwner(address _address) public view returns (bool) {
        return owner == _address;
    }
}

// File: contracts/library/SafeMath.sol

pragma solidity ^0.4.24;

library SafeMath {

    function mul(uint a, uint b) internal pure returns (uint) {
        uint c = a * b;
        assert(a == 0 || c / a == b);
        return c;
    }

    function div(uint a, uint b) internal pure returns (uint) {
        assert(b > 0);
        uint c = a / b;
        assert(a == b * c + a % b);
        return c;
    }

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

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

    function max64(uint64 a, uint64 b) internal pure returns (uint64) {
        return a >= b ? a : b;
    }

    function min64(uint64 a, uint64 b) internal pure returns (uint64) {
        return a < b ? a : b;
    }

    function max256(uint a, uint b) internal pure returns (uint) {
        return a >= b ? a : b;
    }

    function min256(uint a, uint b) internal pure returns (uint) {
        return a < b ? a : b;
    }
}

// File: contracts/library/Pausable.sol

pragma solidity ^0.4.24;


/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is Ownable {
  event Pause();
  event Unpause();

  bool public paused = false;


  /**
   * @dev Modifier to make a function callable only when the contract is not paused.
   */
  modifier whenNotPaused() {
    require(!paused);
    _;
  }

  /**
   * @dev Modifier to make a function callable only when the contract is paused.
   */
  modifier whenPaused() {
    require(paused);
    _;
  }

  /**
   * @dev called by the owner to pause, triggers stopped state
   */
  function pause() onlyOwner whenNotPaused public {
    paused = true;
    emit Pause();
  }

  /**
   * @dev called by the owner to unpause, returns to normal state
   */
  function unpause() onlyOwner whenPaused public {
    paused = false;
    emit Unpause();
  }
}

// File: contracts/library/Whitelist.sol

pragma solidity ^0.4.24;



/**
 * @title Whitelist
 * @dev The Whitelist contract has a whitelist of addresses, and provides basic authorization control functions.
 * @dev This simplifies the implementation of "user permissions".
 */
contract Whitelist is Ownable {
  mapping(address => bool) public whitelist;

  event WhitelistedAddressAdded(address addr);
  event WhitelistedAddressRemoved(address addr);

  /**
   * @dev Throws if called by any account that's not whitelisted.
   */
  modifier onlyWhitelisted() {
    require(whitelist[msg.sender]);
    _;
  }

  /**
   * @dev add an address to the whitelist
   * @param addr address
   * @return true if the address was added to the whitelist, false if the address was already in the whitelist
   */
  function addAddressToWhitelist(address addr) onlyOwner public returns(bool success) {
    if (!whitelist[addr]) {
      whitelist[addr] = true;
      emit WhitelistedAddressAdded(addr);
      success = true;
    }
  }

  /**
   * @dev add addresses to the whitelist
   * @param addrs addresses
   * @return true if at least one address was added to the whitelist,
   * false if all addresses were already in the whitelist
   */
  function addAddressesToWhitelist(address[] addrs) onlyOwner public returns(bool success) {
    for (uint256 i = 0; i < addrs.length; i++) {
      if (addAddressToWhitelist(addrs[i])) {
        success = true;
      }
    }
  }

  /**
   * @dev remove an address from the whitelist
   * @param addr address
   * @return true if the address was removed from the whitelist,
   * false if the address wasn't in the whitelist in the first place
   */
  function removeAddressFromWhitelist(address addr) onlyOwner public returns(bool success) {
    if (whitelist[addr]) {
      whitelist[addr] = false;
      emit WhitelistedAddressRemoved(addr);
      success = true;
    }
  }

  /**
   * @dev remove addresses from the whitelist
   * @param addrs addresses
   * @return true if at least one address was removed from the whitelist,
   * false if all addresses weren't in the whitelist in the first place
   */
  function removeAddressesFromWhitelist(address[] addrs) onlyOwner public returns(bool success) {
    for (uint256 i = 0; i < addrs.length; i++) {
      if (removeAddressFromWhitelist(addrs[i])) {
        success = true;
      }
    }
  }

}

// File: contracts/Staking.sol

pragma solidity ^0.4.24;






/**
 * @title Staking and voting contract.
 * @author IoTeX Team
 *
 */
contract Staking is Pausable, Whitelist {
    using SafeMath for uint256;

    // Events to be emitted
    event BucketCreated(uint256 bucketIndex, bytes12 canName, uint256 amount, uint256 stakeDuration, bool nonDecay, bytes data);
    event BucketUpdated(uint256 bucketIndex, bytes12 canName, uint256 stakeDuration, uint256 stakeStartTime, bool nonDecay, address bucketOwner, bytes data);
    event BucketUnstake(uint256 bucketIndex, bytes12 canName, uint256 amount, bytes data);
    event BucketWithdraw(uint256 bucketIndex, bytes12 canName, uint256 amount, bytes data);
    // TODO add change owner event which is not covered by BucketUpdated event

    // IOTX used for staking
    ERC20 stakingToken;

    // Unit is epoch
    uint256 public constant minStakeDuration = 0;
    uint256 public constant maxStakeDuration = 350;
    uint256 public constant minStakeAmount = 100 * 10 ** 18;
    uint256 public constant unStakeDuration = 3;

    uint256 public constant maxBucketsPerAddr = 500;
    uint256 public constant secondsPerEpoch = 86400;

    // Core data structure to track staking/voting status
    struct Bucket {
        bytes12 canName;            // Candidate name, which maps to public keys by NameRegistration.sol
        uint256 stakedAmount;       // Number of tokens
        uint256 stakeDuration;      // Stake duration, unit: second since epoch
        uint256 stakeStartTime;     // Staking start time, unit: second since epoch
        bool nonDecay;              // Nondecay staking -- staking for N epochs consistently without decaying
        uint256 unstakeStartTime;   // unstake timestamp, unit: second since epoch
        address bucketOwner;        // Owner of this bucket, usually the one who created it but can be someone else
        uint256 createTime;         // bucket firstly create time
        uint256 prev;               // Prev non-zero bucket index
        uint256 next;               // Next non-zero bucket index
    }
    mapping(uint256 => Bucket) public buckets;
    uint256 bucketCount; // number of total buckets. used to track the last used index for the bucket

    // Map from owner address to array of bucket indexes.
    mapping(address => uint256[]) public stakeholders;

    /**
     * @dev Modifier that checks that this given bucket can be updated/deleted by msg.sender
     * @param _address address to transfer tokens from
     * @param _bucketIndex uint256 the index of the bucket
     */
    modifier canTouchBucket(address _address, uint256 _bucketIndex) {
        require(_address != address(0));
        require(buckets[_bucketIndex].bucketOwner == msg.sender, "sender is not the owner.");
        _;
    }

    /**
     * @dev Modifier that check if a duration meets requirement
     * @param _duration uint256 duration to check
     */
    modifier checkStakeDuration(uint256 _duration) {
        require(_duration >= minStakeDuration && _duration <= maxStakeDuration, "The stake duration is too small or large");
        require(_duration % 7 == 0, "The stake duration should be multiple of 7");
        _;
    }

    /**
     * @dev Constructor function
     * @param _stakingTokenAddr address The address of the token contract used for staking
     */
    constructor(address _stakingTokenAddr) public {
        stakingToken = ERC20(_stakingTokenAddr);
        // create one bucket to initialize the double linked list
        buckets[0] = Bucket("", 1, 0, block.timestamp, true, 0, msg.sender, block.timestamp, 0, 0);
        stakeholders[msg.sender].push(0);
        bucketCount = 1;
    }

    function getActiveBucketIdxImpl(uint256 _prevIndex, uint256 _limit) internal returns(uint256 count, uint256[] indexes) {
        require (_limit > 0 && _limit < 5000);
        Bucket memory bucket = buckets[_prevIndex];
        require(bucket.next > 0, "cannot find bucket based on input index.");

        indexes = new uint256[](_limit);
        uint256 i = 0;
        for (i = 0; i < _limit; i++) {
            while (bucket.next > 0 && buckets[bucket.next].unstakeStartTime > 0) { // unstaked.
                bucket = buckets[bucket.next]; // skip
            }
            if (bucket.next == 0) { // no new bucket
                break;
            }
            indexes[i] = bucket.next;
            bucket = buckets[bucket.next];
        }
        return (i, indexes);
    }

    function getActiveBucketIdx(uint256 _prevIndex, uint256 _limit) external view returns(uint256 count, uint256[] indexes) {
        return getActiveBucketIdxImpl(_prevIndex, _limit);
    }

    /**
     * @dev Get active buckets for a range of indexes
     * @param _prevIndex uint256 the starting index. starting from 0, ending at the last. (putting 0,2 will return 1,2.)
     * @param _limit uint256 the number of non zero buckets to fetch after the start index
     * @return (uint256, uint256[], uint256[], uint256[], uint256[], bytes, address[])
     *  count, index array, stakeStartTime array, duration array, decay array, stakedAmount array, concat stakedFor, ownerAddress array
     */
    function getActiveBuckets(uint256 _prevIndex, uint256 _limit) external view returns(uint256 count,
            uint256[] indexes, uint256[] stakeStartTimes, uint256[] stakeDurations, bool[] decays, uint256[] stakedAmounts, bytes12[] canNames, address[] owners) {

        (count, indexes) = getActiveBucketIdxImpl(_prevIndex, _limit);
        stakeStartTimes = new uint256[](count);
        stakeDurations = new uint256[](count);
        decays = new bool[](count);
        stakedAmounts = new uint256[](count);
        canNames = new bytes12[](count);
        owners = new address[](count);

        for (uint256 i = 0; i < count; i++) {
            Bucket memory bucket = buckets[indexes[i]];
            stakeStartTimes[i] = bucket.stakeStartTime;
            stakeDurations[i] = bucket.stakeDuration;
            decays[i] = !bucket.nonDecay;
            stakedAmounts[i] = bucket.stakedAmount;
            canNames[i] = bucket.canName;
            owners[i] = bucket.bucketOwner;

        }

        return (count, indexes, stakeStartTimes, stakeDurations, decays, stakedAmounts, canNames, owners);
    }


    function getActiveBucketCreateTimes(uint256 _prevIndex, uint256 _limit) external view returns(uint256 count,
            uint256[] indexes, uint256[] createTimes) {
        (count, indexes) = getActiveBucketIdxImpl(_prevIndex, _limit);
        createTimes = new uint256[](count);
        for (uint256 i = 0; i < count; i++) {
            createTimes[i] = buckets[indexes[i]].createTime;
        }
        return (count, indexes, createTimes);
    }

    /**
     * @dev Get bucket indexes from a given address
     * @param _owner address onwer of the buckets
     * @return (uint256[])
     */
    function getBucketIndexesByAddress(address _owner) external view returns(uint256[]) {
        return stakeholders[_owner];
    }

    /**
     * @notice Extend the stake to stakeDuration from current time and/or set nonDecay.
     * @notice MUST trigger BucketUpdated event
     * @param _bucketIndex uint256 the index of the bucket
     * @param _stakeDuration uint256 the desired duration of staking.
     * @param _nonDecay bool if auto restake
     * @param _data bytes optional data to include in the emitted event
     */
    function restake(uint256 _bucketIndex, uint256 _stakeDuration, bool _nonDecay, bytes _data)
            external whenNotPaused canTouchBucket(msg.sender, _bucketIndex) checkStakeDuration(_stakeDuration) {
        require(block.timestamp.add(_stakeDuration * secondsPerEpoch) >=
                buckets[_bucketIndex].stakeStartTime.add(buckets[_bucketIndex].stakeDuration * secondsPerEpoch),
                "current stake duration not finished.");
        if (buckets[_bucketIndex].nonDecay) {
          require(_stakeDuration >= buckets[_bucketIndex].stakeDuration, "cannot reduce the stake duration.");
        }
        buckets[_bucketIndex].stakeDuration = _stakeDuration;
        buckets[_bucketIndex].stakeStartTime = block.timestamp;
        buckets[_bucketIndex].nonDecay = _nonDecay;
        buckets[_bucketIndex].unstakeStartTime = 0;
        emitBucketUpdated(_bucketIndex, _data);
    }

    /*
     * @notice Vote for another candidate with the tokens that are already staked in the given bucket
     * @notice MUST trigger BucketUpdated event
     * @param _bucketIndex uint256 the index of the bucket
     * @param canName bytes the IoTeX address of the candidate the tokens are staked for
     * @param _data bytes optional data to include in the emitted event
     */
    function revote(uint256 _bucketIndex, bytes12 _canName, bytes _data)
            external whenNotPaused canTouchBucket(msg.sender, _bucketIndex) {
        require(buckets[_bucketIndex].unstakeStartTime == 0, "cannot revote during unstaking.");
        buckets[_bucketIndex].canName = _canName;
        emitBucketUpdated(_bucketIndex, _data);
    }

    /*
     * @notice Set the new owner of a given bucket, the sender must be whitelisted to do so to avoid spam
     * @notice MUST trigger BucketUpdated event
     * @param _name bytes12 the name of the candidate the tokens are staked for
     * @param _bucketIndex uint256 optional data to include in the Stake event
     * @param _data bytes optional data to include in the emitted event
     */
    function setBucketOwner(uint256 _bucketIndex, address _newOwner, bytes _data)
            external whenNotPaused onlyWhitelisted canTouchBucket(msg.sender, _bucketIndex) {
        removeBucketIndex(_bucketIndex);
        buckets[_bucketIndex].bucketOwner = _newOwner;
        stakeholders[_newOwner].push(_bucketIndex);
        // TODO split event.
        emitBucketUpdated(_bucketIndex, _data);
    }

    /**
     * @notice Unstake a certain amount of tokens from a given bucket.
     * @notice MUST trigger BucketUnstake event
     * @param _bucketIndex uint256 the index of the bucket
     * @param _data bytes optional data to include in the emitted event
     */
    function unstake(uint256 _bucketIndex, bytes _data)
            external whenNotPaused canTouchBucket(msg.sender, _bucketIndex) {
        require(_bucketIndex > 0, "bucket 0 cannot be unstaked and withdrawn.");
        require(!buckets[_bucketIndex].nonDecay, "Cannot unstake with nonDecay flag. Need to disable non-decay mode first.");
        require(buckets[_bucketIndex].stakeStartTime.add(buckets[_bucketIndex].stakeDuration * secondsPerEpoch) <= block.timestamp,
            "Staking time does not expire yet. Please wait until staking expires.");
        require(buckets[_bucketIndex].unstakeStartTime == 0, "Unstaked already. No need to unstake again.");
        buckets[_bucketIndex].unstakeStartTime = block.timestamp;
        emit BucketUnstake(_bucketIndex, buckets[_bucketIndex].canName, buckets[_bucketIndex].stakedAmount, _data);
    }

    /**
     * @notice this SHOULD return the given amount of tokens to the user, if unstaking is currently not possible the function MUST revert
     * @notice MUST trigger BucketWithdraw event
     * @param _bucketIndex uint256 the index of the bucket
     * @param _data bytes optional data to include in the emitted event
     */
    function withdraw(uint256 _bucketIndex, bytes _data)
            external whenNotPaused canTouchBucket(msg.sender, _bucketIndex) {
        require(buckets[_bucketIndex].unstakeStartTime > 0, "Please unstake first before withdraw.");
        require(
            buckets[_bucketIndex].unstakeStartTime.add(unStakeDuration * secondsPerEpoch) <= block.timestamp,
            "Stakeholder needs to wait for 3 days before withdrawing tokens.");

        // fix double linked list
        uint256 prev = buckets[_bucketIndex].prev;
        uint256 next = buckets[_bucketIndex].next;
        buckets[prev].next = next;
        buckets[next].prev = prev;

        uint256 amount = buckets[_bucketIndex].stakedAmount;
        bytes12 canName = buckets[_bucketIndex].canName;
        address bucketowner = buckets[_bucketIndex].bucketOwner;
        buckets[_bucketIndex].stakedAmount = 0;
        removeBucketIndex(_bucketIndex);
        delete buckets[_bucketIndex];

        require(stakingToken.transfer(bucketowner, amount), "Unable to withdraw stake");
        emit BucketWithdraw(_bucketIndex, canName, amount, _data);
    }

    /**
     * @notice Returns the total of tokens staked from all addresses
     * @return uint256 The number of tokens staked from all addresses
     */
    function totalStaked() public view returns (uint256) {
        return stakingToken.balanceOf(this);
    }

    /**
     * @notice Address of the token being used by the staking interface
     * @return address The address of the ERC20 token used for staking
     */
    function token() public view returns(address) {
        return stakingToken;
    }

    /**
     * @notice Emit BucketUpdated event
     */
    function emitBucketUpdated(uint256 _bucketIndex, bytes _data) internal {
        Bucket memory b = buckets[_bucketIndex];
        emit BucketUpdated(_bucketIndex, b.canName, b.stakeDuration, b.stakeStartTime, b.nonDecay, b.bucketOwner, _data);
    }

    /**
     * @dev  Create a bucket and vote for a given canName.
     * @param _canName bytes The IoTeX address of the candidate the stake is being created for
     * @param _amount uint256 The duration to lock the tokens for
     * @param _stakeDuration bytes the desired duration of the staking
     * @param _nonDecay bool if auto restake
     * @param _data bytes optional data to include in the emitted event
     * @return uint236 the index of new bucket
     */
    function createBucket(bytes12 _canName, uint256 _amount, uint256 _stakeDuration, bool _nonDecay, bytes _data)
            external whenNotPaused checkStakeDuration(_stakeDuration) returns (uint256) {
        require(_amount >= minStakeAmount, "amount should >= 100.");
        require(stakeholders[msg.sender].length <= maxBucketsPerAddr, "One address can have up limited buckets");
        require(stakingToken.transferFrom(msg.sender, this, _amount), "Stake required"); // transfer token to contract
        // add a new bucket to the end of buckets array and fix the double linked list.
        buckets[bucketCount] = Bucket(_canName, _amount, _stakeDuration, block.timestamp, _nonDecay, 0, msg.sender, block.timestamp, buckets[0].prev, 0);
        buckets[buckets[0].prev].next = bucketCount;
        buckets[0].prev = bucketCount;
        stakeholders[msg.sender].push(bucketCount);
        bucketCount++;
        emit BucketCreated(bucketCount-1, _canName, _amount, _stakeDuration, _nonDecay, _data);
        return bucketCount-1;
    }

    /**
     * @dev Remove the bucket index from stakeholders map
     * @param _bucketidx uint256 the bucket index
     */
    function removeBucketIndex(uint256 _bucketidx) internal {
        address owner = buckets[_bucketidx].bucketOwner;
        require(stakeholders[owner].length > 0, "Expect the owner has at least one bucket index");

        uint256 i = 0;
        for (; i < stakeholders[owner].length; i++) {
          if(stakeholders[owner][i] == _bucketidx) {
                break;
          }
        }
        for (; i < stakeholders[owner].length - 1; i++) {
          stakeholders[owner][i] = stakeholders[owner][i + 1];
        }
        stakeholders[owner].length--;
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_bucketIndex","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_prevIndex","type":"uint256"},{"name":"_limit","type":"uint256"}],"name":"getActiveBuckets","outputs":[{"name":"count","type":"uint256"},{"name":"indexes","type":"uint256[]"},{"name":"stakeStartTimes","type":"uint256[]"},{"name":"stakeDurations","type":"uint256[]"},{"name":"decays","type":"bool[]"},{"name":"stakedAmounts","type":"uint256[]"},{"name":"canNames","type":"bytes12[]"},{"name":"owners","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addrs","type":"address[]"}],"name":"removeAddressesFromWhitelist","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"removeAddressFromWhitelist","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_prevIndex","type":"uint256"},{"name":"_limit","type":"uint256"}],"name":"getActiveBucketCreateTimes","outputs":[{"name":"count","type":"uint256"},{"name":"indexes","type":"uint256[]"},{"name":"createTimes","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"stakeholders","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"secondsPerEpoch","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minStakeDuration","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxStakeDuration","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_bucketIndex","type":"uint256"},{"name":"_stakeDuration","type":"uint256"},{"name":"_nonDecay","type":"bool"},{"name":"_data","type":"bytes"}],"name":"restake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"addAddressToWhitelist","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"getBucketIndexesByAddress","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalStaked","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_prevIndex","type":"uint256"},{"name":"_limit","type":"uint256"}],"name":"getActiveBucketIdx","outputs":[{"name":"count","type":"uint256"},{"name":"indexes","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"buckets","outputs":[{"name":"canName","type":"bytes12"},{"name":"stakedAmount","type":"uint256"},{"name":"stakeDuration","type":"uint256"},{"name":"stakeStartTime","type":"uint256"},{"name":"nonDecay","type":"bool"},{"name":"unstakeStartTime","type":"uint256"},{"name":"bucketOwner","type":"address"},{"name":"createTime","type":"uint256"},{"name":"prev","type":"uint256"},{"name":"next","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_bucketIndex","type":"uint256"},{"name":"_newOwner","type":"address"},{"name":"_data","type":"bytes"}],"name":"setBucketOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"unStakeDuration","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_bucketIndex","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"unstake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_bucketIndex","type":"uint256"},{"name":"_canName","type":"bytes12"},{"name":"_data","type":"bytes"}],"name":"revote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addrs","type":"address[]"}],"name":"addAddressesToWhitelist","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_canName","type":"bytes12"},{"name":"_amount","type":"uint256"},{"name":"_stakeDuration","type":"uint256"},{"name":"_nonDecay","type":"bool"},{"name":"_data","type":"bytes"}],"name":"createBucket","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"minStakeAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxBucketsPerAddr","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_stakingTokenAddr","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"bucketIndex","type":"uint256"},{"indexed":false,"name":"canName","type":"bytes12"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"stakeDuration","type":"uint256"},{"indexed":false,"name":"nonDecay","type":"bool"},{"indexed":false,"name":"data","type":"bytes"}],"name":"BucketCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"bucketIndex","type":"uint256"},{"indexed":false,"name":"canName","type":"bytes12"},{"indexed":false,"name":"stakeDuration","type":"uint256"},{"indexed":false,"name":"stakeStartTime","type":"uint256"},{"indexed":false,"name":"nonDecay","type":"bool"},{"indexed":false,"name":"bucketOwner","type":"address"},{"indexed":false,"name":"data","type":"bytes"}],"name":"BucketUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"bucketIndex","type":"uint256"},{"indexed":false,"name":"canName","type":"bytes12"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"data","type":"bytes"}],"name":"BucketUnstake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"bucketIndex","type":"uint256"},{"indexed":false,"name":"canName","type":"bytes12"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"data","type":"bytes"}],"name":"BucketWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"}],"name":"WhitelistedAddressAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"}],"name":"WhitelistedAddressRemoved","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"}]

608060405260008060146101000a81548160ff02191690831515021790555034801561002a57600080fd5b5060405160208061479a83398101806040528101908080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061014060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff191681526020016001815260200160008152602001428152602001600115158152602001600081526020013373ffffffffffffffffffffffffffffffffffffffff1681526020014281526020016000815260200160008152506003600080815260200190815260200160002060008201518160000160006101000a8154816bffffffffffffffffffffffff0219169083740100000000000000000000000000000000000000009004021790555060208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548160ff02191690831515021790555060a0820151816005015560c08201518160060160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060e0820151816007015561010082015181600801556101208201518160090155905050600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090806001815401808255809150509060018203906000526020600020016000909192909190915055506001600481905550506144c7806102d36000396000f30060806040526004361061018b576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063030ba25d14610190578063042f95bd146101d557806324953eaa14610418578063286dd3f5146104965780632f54bf6e146104f157806337130b931461054c5780633f4ba83a14610627578063423ce1ae1461063e578063580c8f3d1461069f5780635c975abb146106ca5780635fec5c64146106f957806376f70003146107245780637b24a5fd1461074f5780637b9417c8146107aa5780637d0de83114610805578063817b1cd21461089d5780638456cb59146108c85780638b59c5e0146108df5780638da5cb5b146109725780639b19251a146109c95780639b51fb0d14610a245780639cfe346114610b02578063c698d49514610b67578063c8fd6ed014610b92578063d3e41fd214610bd7578063e2ec6ec314610c3d578063eae20f7614610cbb578063f188768414610d4b578063f2fde38b14610d76578063fc0c546a14610db9578063fe8a8b4c14610e10575b600080fd5b34801561019c57600080fd5b506101d360048036038101908080359060200190929190803590602001908201803590602001919091929391929390505050610e3b565b005b3480156101e157600080fd5b5061020a60048036038101908080359060200190929190803590602001909291905050506114cd565b604051808981526020018060200180602001806020018060200180602001806020018060200188810388528f818151815260200191508051906020019060200280838360005b8381101561026b578082015181840152602081019050610250565b5050505090500188810387528e818151815260200191508051906020019060200280838360005b838110156102ad578082015181840152602081019050610292565b5050505090500188810386528d818151815260200191508051906020019060200280838360005b838110156102ef5780820151818401526020810190506102d4565b5050505090500188810385528c818151815260200191508051906020019060200280838360005b83811015610331578082015181840152602081019050610316565b5050505090500188810384528b818151815260200191508051906020019060200280838360005b83811015610373578082015181840152602081019050610358565b5050505090500188810383528a818151815260200191508051906020019060200280838360005b838110156103b557808201518184015260208101905061039a565b50505050905001888103825289818151815260200191508051906020019060200280838360005b838110156103f75780820151818401526020810190506103dc565b505050509050019f5050505050505050505050505050505060405180910390f35b34801561042457600080fd5b5061047c600480360381019080803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192905050506118d7565b604051808215151515815260200191505060405180910390f35b3480156104a257600080fd5b506104d7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611939565b604051808215151515815260200191505060405180910390f35b3480156104fd57600080fd5b50610532600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a66565b604051808215151515815260200191505060405180910390f35b34801561055857600080fd5b506105816004803603810190808035906020019092919080359060200190929190505050611abf565b604051808481526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156105ce5780820151818401526020810190506105b3565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156106105780820151818401526020810190506105f5565b505050509050019550505050505060405180910390f35b34801561063357600080fd5b5061063c611b7f565b005b34801561064a57600080fd5b50610689600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611bf6565b6040518082815260200191505060405180910390f35b3480156106ab57600080fd5b506106b4611c26565b6040518082815260200191505060405180910390f35b3480156106d657600080fd5b506106df611c2d565b604051808215151515815260200191505060405180910390f35b34801561070557600080fd5b5061070e611c40565b6040518082815260200191505060405180910390f35b34801561073057600080fd5b50610739611c45565b6040518082815260200191505060405180910390f35b34801561075b57600080fd5b506107a86004803603810190808035906020019092919080359060200190929190803515159060200190929190803590602001908201803590602001919091929391929390505050611c4b565b005b3480156107b657600080fd5b506107eb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612172565b604051808215151515815260200191505060405180910390f35b34801561081157600080fd5b50610846600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061229f565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561088957808201518184015260208101905061086e565b505050509050019250505060405180910390f35b3480156108a957600080fd5b506108b2612336565b6040518082815260200191505060405180910390f35b3480156108d457600080fd5b506108dd612435565b005b3480156108eb57600080fd5b5061091460048036038101908080359060200190929190803590602001909291905050506124ae565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561095d578082015181840152602081019050610942565b50505050905001935050505060405180910390f35b34801561097e57600080fd5b506109876124c7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109d557600080fd5b50610a0a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124ec565b604051808215151515815260200191505060405180910390f35b348015610a3057600080fd5b50610a4f6004803603810190808035906020019092919050505061250c565b604051808b73ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020018a8152602001898152602001888152602001871515151581526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018281526020019a505050505050505050505060405180910390f35b348015610b0e57600080fd5b50610b6560048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019082018035906020019190919293919293905050506125ae565b005b348015610b7357600080fd5b50610b7c612844565b6040518082815260200191505060405180910390f35b348015610b9e57600080fd5b50610bd560048036038101908080359060200190929190803590602001908201803590602001919091929391929390505050612849565b005b348015610be357600080fd5b50610c3b60048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff19169060200190929190803590602001908201803590602001919091929391929390505050612dc0565b005b348015610c4957600080fd5b50610ca160048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050613014565b604051808215151515815260200191505060405180910390f35b348015610cc757600080fd5b50610d35600480360381019080803573ffffffffffffffffffffffffffffffffffffffff191690602001909291908035906020019092919080359060200190929190803515159060200190929190803590602001908201803590602001919091929391929390505050613076565b6040518082815260200191505060405180910390f35b348015610d5757600080fd5b50610d6061381c565b6040518082815260200191505060405180910390f35b348015610d8257600080fd5b50610db7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613829565b005b348015610dc557600080fd5b50610dce613880565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610e1c57600080fd5b50610e256138aa565b6040518082815260200191505060405180910390f35b60008060008060008060149054906101000a900460ff16151515610e5e57600080fd5b3388600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515610e9c57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610f75576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f73656e646572206973206e6f7420746865206f776e65722e000000000000000081525060200191505060405180910390fd5b6000600360008c815260200190815260200160002060050154111515611029576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f506c6561736520756e7374616b65206669727374206265666f7265207769746881526020017f647261772e00000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b4261105962015180600302600360008e8152602001908152602001600020600501546138b090919063ffffffff16565b111515156110f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f8152602001807f5374616b65686f6c646572206e6565647320746f207761697420666f7220332081526020017f64617973206265666f7265207769746864726177696e6720746f6b656e732e0081525060400191505060405180910390fd5b600360008b8152602001908152602001600020600801549650600360008b8152602001908152602001600020600901549550856003600089815260200190815260200160002060090181905550866003600088815260200190815260200160002060080181905550600360008b8152602001908152602001600020600101549450600360008b815260200190815260200160002060000160009054906101000a900474010000000000000000000000000000000000000000029350600360008b815260200190815260200160002060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1692506000600360008c81526020019081526020016000206001018190555061120e8a6138ce565b600360008b8152602001908152602001600020600080820160006101000a8154906bffffffffffffffffffffffff02191690556001820160009055600282016000905560038201600090556004820160006101000a81549060ff021916905560058201600090556006820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556007820160009055600882016000905560098201600090555050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561137b57600080fd5b505af115801561138f573d6000803e3d6000fd5b505050506040513d60208110156113a557600080fd5b8101908080519060200190929190505050151561142a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f556e61626c6520746f207769746864726177207374616b65000000000000000081525060200191505060405180910390fd5b7f2a79739690fe6bf5933c5d812824e30c2b95d43b6ddadd96148a4493d3b565408a85878c8c604051808681526020018573ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020018481526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a150505050505050505050565b6000606080606080606080606060006114e46143c7565b6114ee8c8c613c10565b809a50819b505050896040519080825280602002602001820160405280156115255781602001602082028038833980820191505090505b509750896040519080825280602002602001820160405280156115575781602001602082028038833980820191505090505b509650896040519080825280602002602001820160405280156115895781602001602082028038833980820191505090505b509550896040519080825280602002602001820160405280156115bb5781602001602082028038833980820191505090505b509450896040519080825280602002602001820160405280156115ed5781602001602082028038833980820191505090505b5093508960405190808252806020026020018201604052801561161f5781602001602082028038833980820191505090505b509250600091505b898210156118b057600360008a8481518110151561164157fe5b90602001906020020151815260200190815260200160002061014060405190810160405290816000820160009054906101000a9004740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff16151515158152602001600582015481526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600782015481526020016008820154815260200160098201548152505090508060600151888381518110151561178b57fe5b9060200190602002018181525050806040015187838151811015156117ac57fe5b906020019060200201818152505080608001511586838151811015156117ce57fe5b9060200190602002019015159081151581525050806020015185838151811015156117f557fe5b90602001906020020181815250508060000151848381518110151561181657fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff1916908173ffffffffffffffffffffffffffffffffffffffff1916815250508060c00151838381518110151561186757fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508180600101925050611627565b89898989898989899950995099509950995099509950995050509295985092959890939650565b6000806118e333611a66565b15156118ee57600080fd5b600090505b82518110156119335761191c838281518110151561190d57fe5b90602001906020020151611939565b1561192657600191505b80806001019150506118f3565b50919050565b600061194433611a66565b151561194f57600080fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a61576000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ff1abf01a1043b7c244d128e8595cf0c1d10743b022b03a02dffd8ca3bf729f5a82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1600190505b919050565b60008173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006060806000611ad08686613c10565b809450819550505083604051908082528060200260200182016040528015611b075781602001602082028038833980820191505090505b509150600090505b83811015611b6e57600360008483815181101515611b2957fe5b906020019060200201518152602001908152602001600020600701548282815181101515611b5357fe5b90602001906020020181815250508080600101915050611b0f565b838383935093509350509250925092565b611b8833611a66565b1515611b9357600080fd5b600060149054906101000a900460ff161515611bae57600080fd5b60008060146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b600560205281600052604060002081815481101515611c1157fe5b90600052602060002001600091509150505481565b6201518081565b600060149054906101000a900460ff1681565b600081565b61015e81565b600060149054906101000a900460ff16151515611c6757600080fd5b3385600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611ca557600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611d7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f73656e646572206973206e6f7420746865206f776e65722e000000000000000081525060200191505060405180910390fd5b8560008110158015611d92575061015e8111155b1515611e2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f546865207374616b65206475726174696f6e20697320746f6f20736d616c6c2081526020017f6f72206c6172676500000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000600782811515611e3a57fe5b06141515611ed6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f546865207374616b65206475726174696f6e2073686f756c64206265206d756c81526020017f7469706c65206f6620370000000000000000000000000000000000000000000081525060400191505060405180910390fd5b611f1a62015180600360008b81526020019081526020016000206002015402600360008b8152602001908152602001600020600301546138b090919063ffffffff16565b611f32620151808902426138b090919063ffffffff16565b10151515611fce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f63757272656e74207374616b65206475726174696f6e206e6f742066696e697381526020017f6865642e0000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6003600089815260200190815260200160002060040160009054906101000a900460ff16156120ac57600360008981526020019081526020016000206002015487101515156120ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f63616e6e6f742072656475636520746865207374616b65206475726174696f6e81526020017f2e0000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b5b86600360008a81526020019081526020016000206002018190555042600360008a81526020019081526020016000206003018190555085600360008a815260200190815260200160002060040160006101000a81548160ff0219169083151502179055506000600360008a8152602001908152602001600020600501819055506121688886868080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505061414b565b5050505050505050565b600061217d33611a66565b151561218857600080fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561229a5760018060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd1bba68c128cc3f427e5831b3c6f99f480b6efa6b9e80c757768f6124158cc3f82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1600190505b919050565b6060600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561232a57602002820191906000526020600020905b815481526020019060010190808311612316575b50505050509050919050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156123f557600080fd5b505af1158015612409573d6000803e3d6000fd5b505050506040513d602081101561241f57600080fd5b8101908080519060200190929190505050905090565b61243e33611a66565b151561244957600080fd5b600060149054906101000a900460ff1615151561246557600080fd5b6001600060146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600060606124bc8484613c10565b915091509250929050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016020528060005260406000206000915054906101000a900460ff1681565b60036020528060005260406000206000915090508060000160009054906101000a90047401000000000000000000000000000000000000000002908060010154908060020154908060030154908060040160009054906101000a900460ff16908060050154908060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806007015490806008015490806009015490508a565b600060149054906101000a900460ff161515156125ca57600080fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561262257600080fd5b3384600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561266057600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612739576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f73656e646572206973206e6f7420746865206f776e65722e000000000000000081525060200191505060405180910390fd5b612742866138ce565b846003600088815260200190815260200160002060060160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002086908060018154018082558091505090600182039060005260206000200160009091929091909150555061283c8685858080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505061414b565b505050505050565b600381565b600060149054906101000a900460ff1615151561286557600080fd5b3383600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156128a357600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561297c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f73656e646572206973206e6f7420746865206f776e65722e000000000000000081525060200191505060405180910390fd5b600085111515612a1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f6275636b657420302063616e6e6f7420626520756e7374616b656420616e642081526020017f77697468647261776e2e0000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6003600086815260200190815260200160002060040160009054906101000a900460ff16151515612aff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260488152602001807f43616e6e6f7420756e7374616b652077697468206e6f6e446563617920666c6181526020017f672e204e65656420746f2064697361626c65206e6f6e2d6465636179206d6f6481526020017f652066697273742e00000000000000000000000000000000000000000000000081525060600191505060405180910390fd5b42612b446201518060036000898152602001908152602001600020600201540260036000898152602001908152602001600020600301546138b090919063ffffffff16565b11151515612c06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260448152602001807f5374616b696e672074696d6520646f6573206e6f74206578706972652079657481526020017f2e20506c65617365207761697420756e74696c207374616b696e67206578706981526020017f7265732e0000000000000000000000000000000000000000000000000000000081525060600191505060405180910390fd5b60006003600087815260200190815260200160002060050154141515612cba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f556e7374616b656420616c72656164792e204e6f206e65656420746f20756e7381526020017f74616b6520616761696e2e00000000000000000000000000000000000000000081525060400191505060405180910390fd5b4260036000878152602001908152602001600020600501819055507faa192dc938c20fb63756fbd8f4d9f46092c3252f772b2c549c4688c118b6b475856003600088815260200190815260200160002060000160009054906101000a9004740100000000000000000000000000000000000000000260036000898152602001908152602001600020600101548787604051808681526020018573ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020018481526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a15050505050565b600060149054906101000a900460ff16151515612ddc57600080fd5b3384600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612e1a57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612ef3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f73656e646572206973206e6f7420746865206f776e65722e000000000000000081525060200191505060405180910390fd5b60006003600088815260200190815260200160002060050154141515612f81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f63616e6e6f74207265766f746520647572696e6720756e7374616b696e672e0081525060200191505060405180910390fd5b846003600088815260200190815260200160002060000160006101000a8154816bffffffffffffffffffffffff0219169083740100000000000000000000000000000000000000009004021790555061300c8685858080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505061414b565b505050505050565b60008061302033611a66565b151561302b57600080fd5b600090505b825181101561307057613059838281518110151561304a57fe5b90602001906020020151612172565b1561306357600191505b8080600101915050613030565b50919050565b60008060149054906101000a900460ff1615151561309357600080fd5b84600081101580156130a7575061015e8111155b1515613141576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f546865207374616b65206475726174696f6e20697320746f6f20736d616c6c2081526020017f6f72206c6172676500000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600060078281151561314f57fe5b061415156131eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f546865207374616b65206475726174696f6e2073686f756c64206265206d756c81526020017f7469706c65206f6620370000000000000000000000000000000000000000000081525060400191505060405180910390fd5b68056bc75e2d63100000871015151561326c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f616d6f756e742073686f756c64203e3d203130302e000000000000000000000081525060200191505060405180910390fd5b6101f4600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501115151561334e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001807f4f6e6520616464726573732063616e2068617665207570206c696d697465642081526020017f6275636b6574730000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33308a6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561344757600080fd5b505af115801561345b573d6000803e3d6000fd5b505050506040513d602081101561347157600080fd5b810190808051906020019092919050505015156134f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f5374616b6520726571756972656400000000000000000000000000000000000081525060200191505060405180910390fd5b610140604051908101604052808973ffffffffffffffffffffffffffffffffffffffff191681526020018881526020018781526020014281526020018615158152602001600081526020013373ffffffffffffffffffffffffffffffffffffffff16815260200142815260200160036000808152602001908152602001600020600801548152602001600081525060036000600454815260200190815260200160002060008201518160000160006101000a8154816bffffffffffffffffffffffff0219169083740100000000000000000000000000000000000000009004021790555060208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548160ff02191690831515021790555060a0820151816005015560c08201518160060160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060e08201518160070155610100820151816008015561012082015181600901559050506004546003600060036000808152602001908152602001600020600801548152602001908152602001600020600901819055506004546003600080815260200190815260200160002060080181905550600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060045490806001815401808255809150509060018203906000526020600020016000909192909190915055506004600081548092919060010191905055507fbecddf0f61f76a4ac94a507fbc32c036d2fb7c4b466cad82dd9a4a2d76b263fe600160045403898989898989604051808881526020018773ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020018681526020018581526020018415151515815260200180602001828103825284848281815260200192508082843782019150509850505050505050505060405180910390a16001600454039150509695505050505050565b68056bc75e2d6310000081565b61383233611a66565b151561383d57600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6101f481565b60008082840190508381101515156138c457fe5b8091505092915050565b6000806003600084815260200190815260200160002060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501115156139ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f45787065637420746865206f776e657220686173206174206c65617374206f6e81526020017f65206275636b657420696e64657800000000000000000000000000000000000081525060400191505060405180910390fd5b600090505b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050811015613aa95782600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481101515613a8657fe5b90600052602060002001541415613a9c57613aa9565b80806001019150506139ef565b5b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905003811015613bb857600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060018201815481101515613b4657fe5b9060005260206000200154600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481101515613b9d57fe5b90600052602060002001819055508080600101915050613aaa565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003613c0a919061444a565b50505050565b60006060613c1c6143c7565b60008085118015613c2e575061138885105b1515613c3957600080fd5b6003600087815260200190815260200160002061014060405190810160405290816000820160009054906101000a9004740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff16151515158152602001600582015481526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600782015481526020016008820154815260200160098201548152505091506000826101200151111515613e0e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f63616e6e6f742066696e64206275636b6574206261736564206f6e20696e707581526020017f7420696e6465782e00000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b84604051908082528060200260200182016040528015613e3d5781602001602082028038833980820191505090505b50925060009050600090505b8481101561413c575b6000826101200151118015613e825750600060036000846101200151815260200190815260200160002060050154115b15613fc35760036000836101200151815260200190815260200160002061014060405190810160405290816000820160009054906101000a9004740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff16151515158152602001600582015481526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160078201548152602001600882015481526020016009820154815250509150613e52565b60008261012001511415613fd65761413c565b8161012001518382815181101515613fea57fe5b906020019060200201818152505060036000836101200151815260200190815260200160002061014060405190810160405290816000820160009054906101000a9004740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff16151515158152602001600582015481526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600782015481526020016008820154815260200160098201548152505091508080600101915050613e49565b80839350935050509250929050565b6141536143c7565b6003600084815260200190815260200160002061014060405190810160405290816000820160009054906101000a9004740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff16151515158152602001600582015481526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600782015481526020016008820154815260200160098201548152505090507e4bbbedd0138c223ffed73fdab05a22a5d22770de54bea694d06661d59d16008382600001518360400151846060015185608001518660c0015188604051808881526020018773ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff19168152602001868152602001858152602001841515151581526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614382578082015181840152602081019050614367565b50505050905090810190601f1680156143af5780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390a1505050565b61014060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff1916815260200160008152602001600081526020016000815260200160001515815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081525090565b815481835581811115614471578183600052602060002091820191016144709190614476565b5b505050565b61449891905b8082111561449457600081600090555060010161447c565b5090565b905600a165627a7a7230582070b08503648f3f587cc005b2109e5e13cc170fbaec9a9da2c254685b4247665100290000000000000000000000006fb3e0a217407efff7ca062d46c26e5d60a14d69

Deployed Bytecode

0x60806040526004361061018b576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063030ba25d14610190578063042f95bd146101d557806324953eaa14610418578063286dd3f5146104965780632f54bf6e146104f157806337130b931461054c5780633f4ba83a14610627578063423ce1ae1461063e578063580c8f3d1461069f5780635c975abb146106ca5780635fec5c64146106f957806376f70003146107245780637b24a5fd1461074f5780637b9417c8146107aa5780637d0de83114610805578063817b1cd21461089d5780638456cb59146108c85780638b59c5e0146108df5780638da5cb5b146109725780639b19251a146109c95780639b51fb0d14610a245780639cfe346114610b02578063c698d49514610b67578063c8fd6ed014610b92578063d3e41fd214610bd7578063e2ec6ec314610c3d578063eae20f7614610cbb578063f188768414610d4b578063f2fde38b14610d76578063fc0c546a14610db9578063fe8a8b4c14610e10575b600080fd5b34801561019c57600080fd5b506101d360048036038101908080359060200190929190803590602001908201803590602001919091929391929390505050610e3b565b005b3480156101e157600080fd5b5061020a60048036038101908080359060200190929190803590602001909291905050506114cd565b604051808981526020018060200180602001806020018060200180602001806020018060200188810388528f818151815260200191508051906020019060200280838360005b8381101561026b578082015181840152602081019050610250565b5050505090500188810387528e818151815260200191508051906020019060200280838360005b838110156102ad578082015181840152602081019050610292565b5050505090500188810386528d818151815260200191508051906020019060200280838360005b838110156102ef5780820151818401526020810190506102d4565b5050505090500188810385528c818151815260200191508051906020019060200280838360005b83811015610331578082015181840152602081019050610316565b5050505090500188810384528b818151815260200191508051906020019060200280838360005b83811015610373578082015181840152602081019050610358565b5050505090500188810383528a818151815260200191508051906020019060200280838360005b838110156103b557808201518184015260208101905061039a565b50505050905001888103825289818151815260200191508051906020019060200280838360005b838110156103f75780820151818401526020810190506103dc565b505050509050019f5050505050505050505050505050505060405180910390f35b34801561042457600080fd5b5061047c600480360381019080803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192905050506118d7565b604051808215151515815260200191505060405180910390f35b3480156104a257600080fd5b506104d7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611939565b604051808215151515815260200191505060405180910390f35b3480156104fd57600080fd5b50610532600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a66565b604051808215151515815260200191505060405180910390f35b34801561055857600080fd5b506105816004803603810190808035906020019092919080359060200190929190505050611abf565b604051808481526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156105ce5780820151818401526020810190506105b3565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156106105780820151818401526020810190506105f5565b505050509050019550505050505060405180910390f35b34801561063357600080fd5b5061063c611b7f565b005b34801561064a57600080fd5b50610689600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611bf6565b6040518082815260200191505060405180910390f35b3480156106ab57600080fd5b506106b4611c26565b6040518082815260200191505060405180910390f35b3480156106d657600080fd5b506106df611c2d565b604051808215151515815260200191505060405180910390f35b34801561070557600080fd5b5061070e611c40565b6040518082815260200191505060405180910390f35b34801561073057600080fd5b50610739611c45565b6040518082815260200191505060405180910390f35b34801561075b57600080fd5b506107a86004803603810190808035906020019092919080359060200190929190803515159060200190929190803590602001908201803590602001919091929391929390505050611c4b565b005b3480156107b657600080fd5b506107eb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612172565b604051808215151515815260200191505060405180910390f35b34801561081157600080fd5b50610846600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061229f565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561088957808201518184015260208101905061086e565b505050509050019250505060405180910390f35b3480156108a957600080fd5b506108b2612336565b6040518082815260200191505060405180910390f35b3480156108d457600080fd5b506108dd612435565b005b3480156108eb57600080fd5b5061091460048036038101908080359060200190929190803590602001909291905050506124ae565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561095d578082015181840152602081019050610942565b50505050905001935050505060405180910390f35b34801561097e57600080fd5b506109876124c7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109d557600080fd5b50610a0a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124ec565b604051808215151515815260200191505060405180910390f35b348015610a3057600080fd5b50610a4f6004803603810190808035906020019092919050505061250c565b604051808b73ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020018a8152602001898152602001888152602001871515151581526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018281526020019a505050505050505050505060405180910390f35b348015610b0e57600080fd5b50610b6560048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019082018035906020019190919293919293905050506125ae565b005b348015610b7357600080fd5b50610b7c612844565b6040518082815260200191505060405180910390f35b348015610b9e57600080fd5b50610bd560048036038101908080359060200190929190803590602001908201803590602001919091929391929390505050612849565b005b348015610be357600080fd5b50610c3b60048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff19169060200190929190803590602001908201803590602001919091929391929390505050612dc0565b005b348015610c4957600080fd5b50610ca160048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050613014565b604051808215151515815260200191505060405180910390f35b348015610cc757600080fd5b50610d35600480360381019080803573ffffffffffffffffffffffffffffffffffffffff191690602001909291908035906020019092919080359060200190929190803515159060200190929190803590602001908201803590602001919091929391929390505050613076565b6040518082815260200191505060405180910390f35b348015610d5757600080fd5b50610d6061381c565b6040518082815260200191505060405180910390f35b348015610d8257600080fd5b50610db7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613829565b005b348015610dc557600080fd5b50610dce613880565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610e1c57600080fd5b50610e256138aa565b6040518082815260200191505060405180910390f35b60008060008060008060149054906101000a900460ff16151515610e5e57600080fd5b3388600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515610e9c57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610f75576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f73656e646572206973206e6f7420746865206f776e65722e000000000000000081525060200191505060405180910390fd5b6000600360008c815260200190815260200160002060050154111515611029576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f506c6561736520756e7374616b65206669727374206265666f7265207769746881526020017f647261772e00000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b4261105962015180600302600360008e8152602001908152602001600020600501546138b090919063ffffffff16565b111515156110f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f8152602001807f5374616b65686f6c646572206e6565647320746f207761697420666f7220332081526020017f64617973206265666f7265207769746864726177696e6720746f6b656e732e0081525060400191505060405180910390fd5b600360008b8152602001908152602001600020600801549650600360008b8152602001908152602001600020600901549550856003600089815260200190815260200160002060090181905550866003600088815260200190815260200160002060080181905550600360008b8152602001908152602001600020600101549450600360008b815260200190815260200160002060000160009054906101000a900474010000000000000000000000000000000000000000029350600360008b815260200190815260200160002060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1692506000600360008c81526020019081526020016000206001018190555061120e8a6138ce565b600360008b8152602001908152602001600020600080820160006101000a8154906bffffffffffffffffffffffff02191690556001820160009055600282016000905560038201600090556004820160006101000a81549060ff021916905560058201600090556006820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556007820160009055600882016000905560098201600090555050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561137b57600080fd5b505af115801561138f573d6000803e3d6000fd5b505050506040513d60208110156113a557600080fd5b8101908080519060200190929190505050151561142a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f556e61626c6520746f207769746864726177207374616b65000000000000000081525060200191505060405180910390fd5b7f2a79739690fe6bf5933c5d812824e30c2b95d43b6ddadd96148a4493d3b565408a85878c8c604051808681526020018573ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020018481526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a150505050505050505050565b6000606080606080606080606060006114e46143c7565b6114ee8c8c613c10565b809a50819b505050896040519080825280602002602001820160405280156115255781602001602082028038833980820191505090505b509750896040519080825280602002602001820160405280156115575781602001602082028038833980820191505090505b509650896040519080825280602002602001820160405280156115895781602001602082028038833980820191505090505b509550896040519080825280602002602001820160405280156115bb5781602001602082028038833980820191505090505b509450896040519080825280602002602001820160405280156115ed5781602001602082028038833980820191505090505b5093508960405190808252806020026020018201604052801561161f5781602001602082028038833980820191505090505b509250600091505b898210156118b057600360008a8481518110151561164157fe5b90602001906020020151815260200190815260200160002061014060405190810160405290816000820160009054906101000a9004740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff16151515158152602001600582015481526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600782015481526020016008820154815260200160098201548152505090508060600151888381518110151561178b57fe5b9060200190602002018181525050806040015187838151811015156117ac57fe5b906020019060200201818152505080608001511586838151811015156117ce57fe5b9060200190602002019015159081151581525050806020015185838151811015156117f557fe5b90602001906020020181815250508060000151848381518110151561181657fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff1916908173ffffffffffffffffffffffffffffffffffffffff1916815250508060c00151838381518110151561186757fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508180600101925050611627565b89898989898989899950995099509950995099509950995050509295985092959890939650565b6000806118e333611a66565b15156118ee57600080fd5b600090505b82518110156119335761191c838281518110151561190d57fe5b90602001906020020151611939565b1561192657600191505b80806001019150506118f3565b50919050565b600061194433611a66565b151561194f57600080fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a61576000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ff1abf01a1043b7c244d128e8595cf0c1d10743b022b03a02dffd8ca3bf729f5a82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1600190505b919050565b60008173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006060806000611ad08686613c10565b809450819550505083604051908082528060200260200182016040528015611b075781602001602082028038833980820191505090505b509150600090505b83811015611b6e57600360008483815181101515611b2957fe5b906020019060200201518152602001908152602001600020600701548282815181101515611b5357fe5b90602001906020020181815250508080600101915050611b0f565b838383935093509350509250925092565b611b8833611a66565b1515611b9357600080fd5b600060149054906101000a900460ff161515611bae57600080fd5b60008060146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b600560205281600052604060002081815481101515611c1157fe5b90600052602060002001600091509150505481565b6201518081565b600060149054906101000a900460ff1681565b600081565b61015e81565b600060149054906101000a900460ff16151515611c6757600080fd5b3385600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611ca557600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611d7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f73656e646572206973206e6f7420746865206f776e65722e000000000000000081525060200191505060405180910390fd5b8560008110158015611d92575061015e8111155b1515611e2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f546865207374616b65206475726174696f6e20697320746f6f20736d616c6c2081526020017f6f72206c6172676500000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000600782811515611e3a57fe5b06141515611ed6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f546865207374616b65206475726174696f6e2073686f756c64206265206d756c81526020017f7469706c65206f6620370000000000000000000000000000000000000000000081525060400191505060405180910390fd5b611f1a62015180600360008b81526020019081526020016000206002015402600360008b8152602001908152602001600020600301546138b090919063ffffffff16565b611f32620151808902426138b090919063ffffffff16565b10151515611fce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f63757272656e74207374616b65206475726174696f6e206e6f742066696e697381526020017f6865642e0000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6003600089815260200190815260200160002060040160009054906101000a900460ff16156120ac57600360008981526020019081526020016000206002015487101515156120ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f63616e6e6f742072656475636520746865207374616b65206475726174696f6e81526020017f2e0000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b5b86600360008a81526020019081526020016000206002018190555042600360008a81526020019081526020016000206003018190555085600360008a815260200190815260200160002060040160006101000a81548160ff0219169083151502179055506000600360008a8152602001908152602001600020600501819055506121688886868080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505061414b565b5050505050505050565b600061217d33611a66565b151561218857600080fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561229a5760018060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd1bba68c128cc3f427e5831b3c6f99f480b6efa6b9e80c757768f6124158cc3f82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1600190505b919050565b6060600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561232a57602002820191906000526020600020905b815481526020019060010190808311612316575b50505050509050919050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156123f557600080fd5b505af1158015612409573d6000803e3d6000fd5b505050506040513d602081101561241f57600080fd5b8101908080519060200190929190505050905090565b61243e33611a66565b151561244957600080fd5b600060149054906101000a900460ff1615151561246557600080fd5b6001600060146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600060606124bc8484613c10565b915091509250929050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016020528060005260406000206000915054906101000a900460ff1681565b60036020528060005260406000206000915090508060000160009054906101000a90047401000000000000000000000000000000000000000002908060010154908060020154908060030154908060040160009054906101000a900460ff16908060050154908060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806007015490806008015490806009015490508a565b600060149054906101000a900460ff161515156125ca57600080fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561262257600080fd5b3384600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561266057600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612739576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f73656e646572206973206e6f7420746865206f776e65722e000000000000000081525060200191505060405180910390fd5b612742866138ce565b846003600088815260200190815260200160002060060160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002086908060018154018082558091505090600182039060005260206000200160009091929091909150555061283c8685858080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505061414b565b505050505050565b600381565b600060149054906101000a900460ff1615151561286557600080fd5b3383600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156128a357600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561297c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f73656e646572206973206e6f7420746865206f776e65722e000000000000000081525060200191505060405180910390fd5b600085111515612a1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f6275636b657420302063616e6e6f7420626520756e7374616b656420616e642081526020017f77697468647261776e2e0000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6003600086815260200190815260200160002060040160009054906101000a900460ff16151515612aff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260488152602001807f43616e6e6f7420756e7374616b652077697468206e6f6e446563617920666c6181526020017f672e204e65656420746f2064697361626c65206e6f6e2d6465636179206d6f6481526020017f652066697273742e00000000000000000000000000000000000000000000000081525060600191505060405180910390fd5b42612b446201518060036000898152602001908152602001600020600201540260036000898152602001908152602001600020600301546138b090919063ffffffff16565b11151515612c06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260448152602001807f5374616b696e672074696d6520646f6573206e6f74206578706972652079657481526020017f2e20506c65617365207761697420756e74696c207374616b696e67206578706981526020017f7265732e0000000000000000000000000000000000000000000000000000000081525060600191505060405180910390fd5b60006003600087815260200190815260200160002060050154141515612cba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f556e7374616b656420616c72656164792e204e6f206e65656420746f20756e7381526020017f74616b6520616761696e2e00000000000000000000000000000000000000000081525060400191505060405180910390fd5b4260036000878152602001908152602001600020600501819055507faa192dc938c20fb63756fbd8f4d9f46092c3252f772b2c549c4688c118b6b475856003600088815260200190815260200160002060000160009054906101000a9004740100000000000000000000000000000000000000000260036000898152602001908152602001600020600101548787604051808681526020018573ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020018481526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a15050505050565b600060149054906101000a900460ff16151515612ddc57600080fd5b3384600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612e1a57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612ef3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f73656e646572206973206e6f7420746865206f776e65722e000000000000000081525060200191505060405180910390fd5b60006003600088815260200190815260200160002060050154141515612f81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f63616e6e6f74207265766f746520647572696e6720756e7374616b696e672e0081525060200191505060405180910390fd5b846003600088815260200190815260200160002060000160006101000a8154816bffffffffffffffffffffffff0219169083740100000000000000000000000000000000000000009004021790555061300c8685858080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505061414b565b505050505050565b60008061302033611a66565b151561302b57600080fd5b600090505b825181101561307057613059838281518110151561304a57fe5b90602001906020020151612172565b1561306357600191505b8080600101915050613030565b50919050565b60008060149054906101000a900460ff1615151561309357600080fd5b84600081101580156130a7575061015e8111155b1515613141576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f546865207374616b65206475726174696f6e20697320746f6f20736d616c6c2081526020017f6f72206c6172676500000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600060078281151561314f57fe5b061415156131eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f546865207374616b65206475726174696f6e2073686f756c64206265206d756c81526020017f7469706c65206f6620370000000000000000000000000000000000000000000081525060400191505060405180910390fd5b68056bc75e2d63100000871015151561326c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f616d6f756e742073686f756c64203e3d203130302e000000000000000000000081525060200191505060405180910390fd5b6101f4600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501115151561334e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001807f4f6e6520616464726573732063616e2068617665207570206c696d697465642081526020017f6275636b6574730000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33308a6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561344757600080fd5b505af115801561345b573d6000803e3d6000fd5b505050506040513d602081101561347157600080fd5b810190808051906020019092919050505015156134f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f5374616b6520726571756972656400000000000000000000000000000000000081525060200191505060405180910390fd5b610140604051908101604052808973ffffffffffffffffffffffffffffffffffffffff191681526020018881526020018781526020014281526020018615158152602001600081526020013373ffffffffffffffffffffffffffffffffffffffff16815260200142815260200160036000808152602001908152602001600020600801548152602001600081525060036000600454815260200190815260200160002060008201518160000160006101000a8154816bffffffffffffffffffffffff0219169083740100000000000000000000000000000000000000009004021790555060208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548160ff02191690831515021790555060a0820151816005015560c08201518160060160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060e08201518160070155610100820151816008015561012082015181600901559050506004546003600060036000808152602001908152602001600020600801548152602001908152602001600020600901819055506004546003600080815260200190815260200160002060080181905550600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060045490806001815401808255809150509060018203906000526020600020016000909192909190915055506004600081548092919060010191905055507fbecddf0f61f76a4ac94a507fbc32c036d2fb7c4b466cad82dd9a4a2d76b263fe600160045403898989898989604051808881526020018773ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020018681526020018581526020018415151515815260200180602001828103825284848281815260200192508082843782019150509850505050505050505060405180910390a16001600454039150509695505050505050565b68056bc75e2d6310000081565b61383233611a66565b151561383d57600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6101f481565b60008082840190508381101515156138c457fe5b8091505092915050565b6000806003600084815260200190815260200160002060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501115156139ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f45787065637420746865206f776e657220686173206174206c65617374206f6e81526020017f65206275636b657420696e64657800000000000000000000000000000000000081525060400191505060405180910390fd5b600090505b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050811015613aa95782600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481101515613a8657fe5b90600052602060002001541415613a9c57613aa9565b80806001019150506139ef565b5b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905003811015613bb857600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060018201815481101515613b4657fe5b9060005260206000200154600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481101515613b9d57fe5b90600052602060002001819055508080600101915050613aaa565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003613c0a919061444a565b50505050565b60006060613c1c6143c7565b60008085118015613c2e575061138885105b1515613c3957600080fd5b6003600087815260200190815260200160002061014060405190810160405290816000820160009054906101000a9004740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff16151515158152602001600582015481526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600782015481526020016008820154815260200160098201548152505091506000826101200151111515613e0e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f63616e6e6f742066696e64206275636b6574206261736564206f6e20696e707581526020017f7420696e6465782e00000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b84604051908082528060200260200182016040528015613e3d5781602001602082028038833980820191505090505b50925060009050600090505b8481101561413c575b6000826101200151118015613e825750600060036000846101200151815260200190815260200160002060050154115b15613fc35760036000836101200151815260200190815260200160002061014060405190810160405290816000820160009054906101000a9004740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff16151515158152602001600582015481526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160078201548152602001600882015481526020016009820154815250509150613e52565b60008261012001511415613fd65761413c565b8161012001518382815181101515613fea57fe5b906020019060200201818152505060036000836101200151815260200190815260200160002061014060405190810160405290816000820160009054906101000a9004740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff16151515158152602001600582015481526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600782015481526020016008820154815260200160098201548152505091508080600101915050613e49565b80839350935050509250929050565b6141536143c7565b6003600084815260200190815260200160002061014060405190810160405290816000820160009054906101000a9004740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff191681526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff16151515158152602001600582015481526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600782015481526020016008820154815260200160098201548152505090507e4bbbedd0138c223ffed73fdab05a22a5d22770de54bea694d06661d59d16008382600001518360400151846060015185608001518660c0015188604051808881526020018773ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff19168152602001868152602001858152602001841515151581526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614382578082015181840152602081019050614367565b50505050905090810190601f1680156143af5780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390a1505050565b61014060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff1916815260200160008152602001600081526020016000815260200160001515815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081525090565b815481835581811115614471578183600052602060002091820191016144709190614476565b5b505050565b61449891905b8082111561449457600081600090555060010161447c565b5090565b905600a165627a7a7230582070b08503648f3f587cc005b2109e5e13cc170fbaec9a9da2c254685b424766510029

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

0000000000000000000000006fb3e0a217407efff7ca062d46c26e5d60a14d69

-----Decoded View---------------
Arg [0] : _stakingTokenAddr (address): 0x6fB3e0A217407EFFf7Ca062D46c26E5d60a14d69

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000006fb3e0a217407efff7ca062d46c26e5d60a14d69


Deployed Bytecode Sourcemap

5775:15682:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17207:1142;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17207:1142:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10933:1132;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10933:1132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10933:1132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10933:1132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10933:1132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10933:1132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10933:1132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10933:1132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10933:1132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5375:242;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5375:242:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4901:230;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4901:230:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;924:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;924:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12075:456;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12075:456:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;12075:456:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;12075:456:0;;;;;;;;;;;;;;;;;;;;3062:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3062:95:0;;;;;;7990:49;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7990:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6793:47;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6793:47:0;;;;;;;;;;;;;;;;;;;;;;;2441:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2441:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;6521:44;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6521:44:0;;;;;;;;;;;;;;;;;;;;;;;6572:46;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6572:46:0;;;;;;;;;;;;;;;;;;;;;;;13233:911;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13233:911:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3995:223;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3995:223:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12689:130;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12689:130:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;12689:130:0;;;;;;;;;;;;;;;;;18516:107;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18516:107:0;;;;;;;;;;;;;;;;;;;;;;;2882:93;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2882:93:0;;;;;;10225:188;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10225:188:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10225:188:0;;;;;;;;;;;;;;;;;;631:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;631:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;3487:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3487:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7778;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7778:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15311:409;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15311:409:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6687:43;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6687:43:0;;;;;;;;;;;;;;;;;;;;;;;16000:859;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16000:859:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14544:352;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14544:352:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4439:232;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4439:232:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19685:1055;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19685:1055:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6625:55;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6625:55:0;;;;;;;;;;;;;;;;;;;;;;;817:99;;8:9:-1;5:2;;;30:1;27;20:12;5:2;817:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18794:84;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18794:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;6739:47;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6739:47:0;;;;;;;;;;;;;;;;;;;;;;;17207:1142;17698:12;17750;17876:14;17938:15;17996:19;2617:6;;;;;;;;;;;2616:7;2608:16;;;;;;;;17311:10;17323:12;8379:1;8359:22;;:8;:22;;;;8351:31;;;;;;;;8438:10;8401:47;;:7;:21;8409:12;8401:21;;;;;;;;;;;:33;;;;;;;;;;;;:47;;;8393:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17397:1;17356:7;:21;17364:12;17356:21;;;;;;;;;;;:38;;;:42;17348:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17554:15;17473:77;6835:5;6729:1;17516:33;17473:7;:21;17481:12;17473:21;;;;;;;;;;;:38;;;:42;;:77;;;;:::i;:::-;:96;;17451:199;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17713:7;:21;17721:12;17713:21;;;;;;;;;;;:26;;;17698:41;;17765:7;:21;17773:12;17765:21;;;;;;;;;;;:26;;;17750:41;;17823:4;17802:7;:13;17810:4;17802:13;;;;;;;;;;;:18;;:25;;;;17859:4;17838:7;:13;17846:4;17838:13;;;;;;;;;;;:18;;:25;;;;17893:7;:21;17901:12;17893:21;;;;;;;;;;;:34;;;17876:51;;17956:7;:21;17964:12;17956:21;;;;;;;;;;;:29;;;;;;;;;;;;17938:47;;18018:7;:21;18026:12;18018:21;;;;;;;;;;;:33;;;;;;;;;;;;17996:55;;18099:1;18062:7;:21;18070:12;18062:21;;;;;;;;;;;:34;;:38;;;;18111:31;18129:12;18111:17;:31::i;:::-;18160:7;:21;18168:12;18160:21;;;;;;;;;;;;18153:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18202:12;;;;;;;;;;;:21;;;18224:11;18237:6;18202:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18202:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18202:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18202:42:0;;;;;;;;;;;;;;;;18194:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18289:52;18304:12;18318:7;18327:6;18335:5;;18289:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2631:1;;17207:1142;;;;;;;;:::o;10933:1132::-;11017:13;11045:17;11064:25;11091:24;11117:13;11132:23;11157:18;11177:16;11550:9;11596:20;;:::i;:::-;11227:42;11250:10;11262:6;11227:22;:42::i;:::-;11208:61;;;;;;;;11312:5;11298:20;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;11298:20:0;;;;11280:38;;11360:5;11346:20;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;11346:20:0;;;;11329:37;;11397:5;11386:17;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;11386:17:0;;;;11377:26;;11444:5;11430:20;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;11430:20:0;;;;11414:36;;11486:5;11472:20;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;11472:20:0;;;;11461:31;;11526:5;11512:20;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;11512:20:0;;;;11503:29;;11562:1;11550:13;;11545:403;11569:5;11565:1;:9;11545:403;;;11619:7;:19;11627:7;11635:1;11627:10;;;;;;;;;;;;;;;;;;11619:19;;;;;;;;;;;11596:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11674:6;:21;;;11653:15;11669:1;11653:18;;;;;;;;;;;;;;;;;:42;;;;;11730:6;:20;;;11710:14;11725:1;11710:17;;;;;;;;;;;;;;;;;:40;;;;;11778:6;:15;;;11777:16;11765:6;11772:1;11765:9;;;;;;;;;;;;;;;;;:28;;;;;;;;;;;11827:6;:19;;;11808:13;11822:1;11808:16;;;;;;;;;;;;;;;;;:38;;;;;11875:6;:14;;;11861:8;11870:1;11861:11;;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;11916:6;:18;;;11904:6;11911:1;11904:9;;;;;;;;;;;;;;;;;:30;;;;;;;;;;;11576:3;;;;;;;11545:403;;;11968:5;11975:7;11984:15;12001:14;12017:6;12025:13;12040:8;12050:6;11960:97;;;;;;;;;;;;;;;;10933:1132;;;;;;;;;;;;;:::o;5375:242::-;5455:12;5481:9;698:19;706:10;698:7;:19::i;:::-;690:28;;;;;;;;5493:1;5481:13;;5476:136;5500:5;:12;5496:1;:16;5476:136;;;5532:36;5559:5;5565:1;5559:8;;;;;;;;;;;;;;;;;;5532:26;:36::i;:::-;5528:77;;;5591:4;5581:14;;5528:77;5514:3;;;;;;;5476:136;;;5375:242;;;;:::o;4901:230::-;4976:12;698:19;706:10;698:7;:19::i;:::-;690:28;;;;;;;;5001:9;:15;5011:4;5001:15;;;;;;;;;;;;;;;;;;;;;;;;;4997:129;;;5045:5;5027:9;:15;5037:4;5027:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;5064:31;5090:4;5064:31;;;;;;;;;;;;;;;;;;;;;;5114:4;5104:14;;4997:129;4901:230;;;:::o;924:105::-;980:4;1013:8;1004:17;;:5;;;;;;;;;;;:17;;;997:24;;924:105;;;:::o;12075:456::-;12169:13;12197:17;12216:21;12372:9;12269:42;12292:10;12304:6;12269:22;:42::i;:::-;12250:61;;;;;;;;12350:5;12336:20;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;12336:20:0;;;;12322:34;;12384:1;12372:13;;12367:110;12391:5;12387:1;:9;12367:110;;;12435:7;:19;12443:7;12451:1;12443:10;;;;;;;;;;;;;;;;;;12435:19;;;;;;;;;;;:30;;;12418:11;12430:1;12418:14;;;;;;;;;;;;;;;;;:47;;;;;12398:3;;;;;;;12367:110;;;12495:5;12502:7;12511:11;12487:36;;;;;;12075:456;;;;;;:::o;3062:95::-;698:19;706:10;698:7;:19::i;:::-;690:28;;;;;;;;2777:6;;;;;;;;;;;2769:15;;;;;;;;3125:5;3116:6;;:14;;;;;;;;;;;;;;;;;;3142:9;;;;;;;;;;3062:95::o;7990:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6793:47::-;6835:5;6793:47;:::o;2441:26::-;;;;;;;;;;;;;:::o;6521:44::-;6564:1;6521:44;:::o;6572:46::-;6615:3;6572:46;:::o;13233:911::-;2617:6;;;;;;;;;;;2616:7;2608:16;;;;;;;;13376:10;13388:12;8379:1;8359:22;;:8;:22;;;;8351:31;;;;;;;;8438:10;8401:47;;:7;:21;8409:12;8401:21;;;;;;;;;;;:33;;;;;;;;;;;;:47;;;8393:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13421:14;6564:1;8705:9;:29;;:62;;;;;6615:3;8738:9;:29;;8705:62;8697:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8848:1;8843;8831:9;:13;;;;;;;;:18;8823:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13530:95;6835:5;13571:7;:21;13579:12;13571:21;;;;;;;;;;;:35;;;:53;13530:7;:21;13538:12;13530:21;;;;;;;;;;;:36;;;:40;;:95;;;;:::i;:::-;13456:53;6835:5;13476:14;:32;13456:15;:19;;:53;;;;:::i;:::-;:169;;13448:235;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13698:7;:21;13706:12;13698:21;;;;;;;;;;;:30;;;;;;;;;;;;13694:160;;;13769:7;:21;13777:12;13769:21;;;;;;;;;;;:35;;;13751:14;:53;;13743:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13694:160;13902:14;13864:7;:21;13872:12;13864:21;;;;;;;;;;;:35;;:52;;;;13966:15;13927:7;:21;13935:12;13927:21;;;;;;;;;;;:36;;:54;;;;14025:9;13992:7;:21;14000:12;13992:21;;;;;;;;;;;:30;;;:42;;;;;;;;;;;;;;;;;;14086:1;14045:7;:21;14053:12;14045:21;;;;;;;;;;;:38;;:42;;;;14098:38;14116:12;14130:5;;14098:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;:38::i;:::-;8488:1;2631;;13233:911;;;;;:::o;3995:223::-;4065:12;698:19;706:10;698:7;:19::i;:::-;690:28;;;;;;;;4091:9;:15;4101:4;4091:15;;;;;;;;;;;;;;;;;;;;;;;;;4090:16;4086:127;;;4135:4;4117:9;:15;4127:4;4117:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;4153:29;4177:4;4153:29;;;;;;;;;;;;;;;;;;;;;;4201:4;4191:14;;4086:127;3995:223;;;:::o;12689:130::-;12762:9;12791:12;:20;12804:6;12791:20;;;;;;;;;;;;;;;12784:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12689:130;;;:::o;18516:107::-;18560:7;18587:12;;;;;;;;;;;:22;;;18610:4;18587:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18587:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18587:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18587:28:0;;;;;;;;;;;;;;;;18580:35;;18516:107;:::o;2882:93::-;698:19;706:10;698:7;:19::i;:::-;690:28;;;;;;;;2617:6;;;;;;;;;;;2616:7;2608:16;;;;;;;;2946:4;2937:6;;:13;;;;;;;;;;;;;;;;;;2962:7;;;;;;;;;;2882:93::o;10225:188::-;10311:13;10326:17;10363:42;10386:10;10398:6;10363:22;:42::i;:::-;10356:49;;;;10225:188;;;;;:::o;631:20::-;;;;;;;;;;;;;:::o;3487:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;7778:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15311:409::-;2617:6;;;;;;;;;;;2616:7;2608:16;;;;;;;;3758:9;:21;3768:10;3758:21;;;;;;;;;;;;;;;;;;;;;;;;;3750:30;;;;;;;;15456:10;15468:12;8379:1;8359:22;;:8;:22;;;;8351:31;;;;;;;;8438:10;8401:47;;:7;:21;8409:12;8401:21;;;;;;;;;;;:33;;;;;;;;;;;;:47;;;8393:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15493:31;15511:12;15493:17;:31::i;:::-;15571:9;15535:7;:21;15543:12;15535:21;;;;;;;;;;;:33;;;:45;;;;;;;;;;;;;;;;;;15591:12;:23;15604:9;15591:23;;;;;;;;;;;;;;;15620:12;15591:42;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;15591:42:0;;;;;;;;;;;;;;;;;;;;;;15674:38;15692:12;15706:5;;15674:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;:38::i;:::-;3787:1;;15311:409;;;;:::o;6687:43::-;6729:1;6687:43;:::o;16000:859::-;2617:6;;;;;;;;;;;2616:7;2608:16;;;;;;;;16103:10;16115:12;8379:1;8359:22;;:8;:22;;;;8351:31;;;;;;;;8438:10;8401:47;;:7;:21;8409:12;8401:21;;;;;;;;;;;:33;;;;;;;;;;;;:47;;;8393:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16163:1;16148:12;:16;16140:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16231:7;:21;16239:12;16231:21;;;;;;;;;;;:30;;;;;;;;;;;;16230:31;16222:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16456:15;16357:95;6835:5;16398:7;:21;16406:12;16398:21;;;;;;;;;;;:35;;;:53;16357:7;:21;16365:12;16357:21;;;;;;;;;;;:36;;;:40;;:95;;;;:::i;:::-;:114;;16349:208;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16618:1;16576:7;:21;16584:12;16576:21;;;;;;;;;;;:38;;;:43;16568:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16719:15;16678:7;:21;16686:12;16678:21;;;;;;;;;;;:38;;:56;;;;16750:101;16764:12;16778:7;:21;16786:12;16778:21;;;;;;;;;;;:29;;;;;;;;;;;;16809:7;:21;16817:12;16809:21;;;;;;;;;;;:34;;;16845:5;;16750:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2631:1;;16000:859;;;:::o;14544:352::-;2617:6;;;;;;;;;;;2616:7;2608:16;;;;;;;;14664:10;14676:12;8379:1;8359:22;;:8;:22;;;;8351:31;;;;;;;;8438:10;8401:47;;:7;:21;8409:12;8401:21;;;;;;;;;;;:33;;;;;;;;;;;;:47;;;8393:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14751:1;14709:7;:21;14717:12;14709:21;;;;;;;;;;;:38;;;:43;14701:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14831:8;14799:7;:21;14807:12;14799:21;;;;;;;;;;;:29;;;:40;;;;;;;;;;;;;;;;;;;14850:38;14868:12;14882:5;;14850:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;:38::i;:::-;2631:1;;14544:352;;;;:::o;4439:232::-;4514:12;4540:9;698:19;706:10;698:7;:19::i;:::-;690:28;;;;;;;;4552:1;4540:13;;4535:131;4559:5;:12;4555:1;:16;4535:131;;;4591:31;4613:5;4619:1;4613:8;;;;;;;;;;;;;;;;;;4591:21;:31::i;:::-;4587:72;;;4645:4;4635:14;;4587:72;4573:3;;;;;;;4535:131;;;4439:232;;;;:::o;19685:1055::-;19875:7;2617:6;;;;;;;;;;;2616:7;2608:16;;;;;;;;19850:14;6564:1;8705:9;:29;;:62;;;;;6615:3;8738:9;:29;;8705:62;8697:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8848:1;8843;8831:9;:13;;;;;;;;:18;8823:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6666:14;19903:7;:25;;19895:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6783:3;19973:12;:24;19986:10;19973:24;;;;;;;;;;;;;;;:31;;;;:52;;19965:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20088:12;;;;;;;;;;;:25;;;20114:10;20126:4;20132:7;20088:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20088:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20088:52:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20088:52:0;;;;;;;;;;;;;;;;20080:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20312:121;;;;;;;;;20319:8;20312:121;;;;;;;20329:7;20312:121;;;;20338:14;20312:121;;;;20354:15;20312:121;;;;20371:9;20312:121;;;;;;20382:1;20312:121;;;;20385:10;20312:121;;;;;;20397:15;20312:121;;;;20414:7;:10;20422:1;20414:10;;;;;;;;;;;:15;;;20312:121;;;;20431:1;20312:121;;;20289:7;:20;20297:11;;20289:20;;;;;;;;;;;:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20476:11;;20444:7;:24;20452:7;:10;20460:1;20452:10;;;;;;;;;;;:15;;;20444:24;;;;;;;;;;;:29;;:43;;;;20516:11;;20498:7;:10;20506:1;20498:10;;;;;;;;;;;:15;;:29;;;;20538:12;:24;20551:10;20538:24;;;;;;;;;;;;;;;20568:11;;20538:42;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;20538:42:0;;;;;;;;;;;;;;;;;;;;;;20591:11;;:13;;;;;;;;;;;;;20620:81;20646:1;20634:11;;:13;20649:8;20659:7;20668:14;20684:9;20695:5;;20620:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20731:1;20719:11;;:13;20712:20;;2631:1;19685:1055;;;;;;;;:::o;6625:55::-;6666:14;6625:55;:::o;817:99::-;698:19;706:10;698:7;:19::i;:::-;690:28;;;;;;;;899:9;891:5;;:17;;;;;;;;;;;;;;;;;;817:99;:::o;18794:84::-;18831:7;18858:12;;;;;;;;;;;18851:19;;18794:84;:::o;6739:47::-;6783:3;6739:47;:::o;1591:135::-;1643:4;1660:6;1673:1;1669;:5;1660:14;;1697:1;1692;:6;;1685:14;;;;;;1717:1;1710:8;;1591:135;;;;;:::o;20876:578::-;20943:13;21103:9;20959:7;:19;20967:10;20959:19;;;;;;;;;;;:31;;;;;;;;;;;;20943:47;;21038:1;21009:12;:19;21022:5;21009:19;;;;;;;;;;;;;;;:26;;;;:30;21001:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21115:1;21103:13;;21127:147;21138:12;:19;21151:5;21138:19;;;;;;;;;;;;;;;:26;;;;21134:1;:30;21127:147;;;21213:10;21187:12;:19;21200:5;21187:19;;;;;;;;;;;;;;;21207:1;21187:22;;;;;;;;;;;;;;;;;;:36;21184:79;;;21244:5;;21184:79;21166:3;;;;;;;21127:147;;;21284:124;21324:1;21295:12;:19;21308:5;21295:19;;;;;;;;;;;;;;;:26;;;;:30;21291:1;:34;21284:124;;;21370:12;:19;21383:5;21370:19;;;;;;;;;;;;;;;21394:1;21390;:5;21370:26;;;;;;;;;;;;;;;;;;21345:12;:19;21358:5;21345:19;;;;;;;;;;;;;;;21365:1;21345:22;;;;;;;;;;;;;;;;;:51;;;;21327:3;;;;;;;21284:124;;;21418:12;:19;21431:5;21418:19;;;;;;;;;;;;;;;:28;;;;;;;;;;;;:::i;:::-;;20876:578;;;:::o;9417:800::-;9502:13;9517:17;9595:20;;:::i;:::-;9771:9;9565:1;9556:6;:10;:27;;;;;9579:4;9570:6;:13;9556:27;9547:37;;;;;;;;9618:7;:19;9626:10;9618:19;;;;;;;;;;;9595:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9670:1;9656:6;:11;;;:15;9648:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9753:6;9739:21;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;9739:21:0;;;;9729:31;;9783:1;9771:13;;9804:1;9800:5;;9795:385;9811:6;9807:1;:10;9795:385;;;9839:154;9860:1;9846:6;:11;;;:15;:60;;;;;9905:1;9865:7;:20;9873:6;:11;;;9865:20;;;;;;;;;;;:37;;;:41;9846:60;9839:154;;;9949:7;:20;9957:6;:11;;;9949:20;;;;;;;;;;;9940:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9839:154;;;10026:1;10011:6;:11;;;:16;10007:79;;;10065:5;;10007:79;10113:6;:11;;;10100:7;10108:1;10100:10;;;;;;;;;;;;;;;;;:24;;;;;10148:7;:20;10156:6;:11;;;10148:20;;;;;;;;;;;10139:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9819:3;;;;;;;9795:385;;;10198:1;10201:7;10190:19;;;;9417:800;;;;;;;:::o;18945:252::-;19027:15;;:::i;:::-;19045:7;:21;19053:12;19045:21;;;;;;;;;;;19027:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19082:107;19096:12;19110:1;:9;;;19121:1;:15;;;19138:1;:16;;;19156:1;:10;;;19168:1;:13;;;19183:5;19082:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;19082:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18945:252;;;:::o;5775:15682::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://70b08503648f3f587cc005b2109e5e13cc170fbaec9a9da2c254685b42476651

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

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.