ETH Price: $2,634.52 (-0.89%)

Contract

0x5a867f6B759cA090E47CBfdBB3eA76E427262862
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw184302662023-10-25 22:36:35371 days ago1698273395IN
0x5a867f6B...427262862
0 ETH0.0020603523.12049193
Withdraw164735902023-01-24 2:09:11646 days ago1674526151IN
0x5a867f6B...427262862
0 ETH0.0011441115.28180937
Withdraw164735832023-01-24 2:07:47646 days ago1674526067IN
0x5a867f6B...427262862
0 ETH0.0011738315.67868354
Withdraw164373592023-01-19 0:46:11651 days ago1674089171IN
0x5a867f6B...427262862
0 ETH0.0016927222.60943722
Withdraw162362242022-12-21 23:01:59679 days ago1671663719IN
0x5a867f6B...427262862
0 ETH0.0013477414.84541354
Withdraw160780082022-11-29 20:23:11701 days ago1669753391IN
0x5a867f6B...427262862
0 ETH0.000854910.19677115
Withdraw160481082022-11-25 16:11:47705 days ago1669392707IN
0x5a867f6B...427262862
0 ETH0.0013732311.12891683
Withdraw157650682022-10-17 3:11:59745 days ago1665976319IN
0x5a867f6B...427262862
0 ETH0.0009496112.6838982
Withdraw157650582022-10-17 3:09:59745 days ago1665976199IN
0x5a867f6B...427262862
0 ETH0.0011706512.89479691
Withdraw156385302022-09-29 10:53:11763 days ago1664448791IN
0x5a867f6B...427262862
0 ETH0.000707217.93607971
Withdraw156347122022-09-28 22:06:11763 days ago1664402771IN
0x5a867f6B...427262862
0 ETH0.0009925913.25958562
Withdraw156185652022-09-26 15:53:47765 days ago1664207627IN
0x5a867f6B...427262862
0 ETH0.0019577325.95291962
Withdraw156108622022-09-25 14:03:35766 days ago1664114615IN
0x5a867f6B...427262862
0 ETH0.000610438.09236994
Withdraw155506612022-09-17 3:34:35775 days ago1663385675IN
0x5a867f6B...427262862
0 ETH0.00055565.42833121
Withdraw154980912022-09-08 18:10:31783 days ago1662660631IN
0x5a867f6B...427262862
0 ETH0.0021365626.92414344
Withdraw154372152022-08-30 0:14:15793 days ago1661818455IN
0x5a867f6B...427262862
0 ETH0.0013006219.24222273
Withdraw152410092022-07-30 1:58:07824 days ago1659146287IN
0x5a867f6B...427262862
0 ETH0.0016730817.35690016
Withdraw152410042022-07-30 1:56:48824 days ago1659146208IN
0x5a867f6B...427262862
0 ETH0.0013198714.22046704
Withdraw152283242022-07-28 2:34:17826 days ago1658975657IN
0x5a867f6B...427262862
0 ETH0.0011919711.68587596
Withdraw152112112022-07-25 10:43:33829 days ago1658745813IN
0x5a867f6B...427262862
0 ETH0.000563527.47046818
Withdraw150356502022-06-27 18:19:36856 days ago1656353976IN
0x5a867f6B...427262862
0 ETH0.0075906481.29551555
Withdraw149747762022-06-16 18:22:16867 days ago1655403736IN
0x5a867f6B...427262862
0 ETH0.0035815547.83830635
Withdraw148936802022-06-02 22:56:51881 days ago1654210611IN
0x5a867f6B...427262862
0 ETH0.0034838446.53319423
Withdraw148021432022-05-19 1:28:08896 days ago1652923688IN
0x5a867f6B...427262862
0 ETH0.0024580232.8314822
Withdraw147189122022-05-05 18:55:55909 days ago1651776955IN
0x5a867f6B...427262862
0 ETH0.0040241353.74979112
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:
AwardContract

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-11-11
*/

//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.6.12;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }
    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;
    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }
    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }
    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { // Return data is optional
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }
    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IERC20Token is IERC20 {
    function maxSupply() external view returns (uint256);
    function issue(address account, uint256 amount) external returns (bool);
    function burn(uint256 amount) external returns (bool);
}

contract DevAward {
    // dev line release
    address public dev;
    uint256 public devStartBlock;
    uint256 public devAccAwards;
    uint256 public devPerBlock;
    uint256 public MaxAvailAwards;
    uint256 public claimedIncentives;
}

contract AwardInfo {
    struct TaxInfo {
        uint256 epoch;
        uint256 amount;
    }

    struct UserInfo {
        uint256 freeAmount;
        uint256 taxHead;     // queue head element index
        uint256 taxTail;     // queue tail next element index
        bool notEmpty;       // whether taxList is empty where taxHead = taxTail
        TaxInfo[] taxList;
    }

    // tax epoch info
    uint256 public taxEpoch = 9;     // tax epoch and user taxlist max length
    uint256 public epUnit = 1 weeks;  // epoch unit => week

    // user info
    mapping(address => UserInfo) internal userInfo;

    // tax treasury address
    address public treasury;
}

contract AwardContract is DevAward, AwardInfo, Ownable {

    using SafeMath for uint256;
    using SafeERC20 for IERC20Token;

    // platform token
    IERC20Token public platformToken;
    mapping(address => bool) public governors;
    modifier onlyGovernor{
        require(governors[_msgSender()], "AwardContract: caller is not the governor");
        _;
    }

    event AddFreeAward(address user, uint256 amount);
    event AddAward(address user, uint256 amount);
    event Withdraw(address user, uint256 amount, uint256 tax);

    constructor(
        IERC20Token _platformToken,
        uint256 _taxEpoch,
        address _treasury,
        address _dev,
        uint256 _devStartBlock,
        uint256 _devPerBlock
    ) public {
        require(_taxEpoch > 0, "AwardContract: taxEpoch invalid");
        require(_dev != address(0), "AwardContract: dev invalid");
        require(address(_platformToken) != address(0), "AwardContract: platform token invalid");
        require(_devStartBlock != 0, "AwardContract: dev start block invalid");

        platformToken = _platformToken;
        taxEpoch = _taxEpoch;
        governors[_msgSender()] = true;

        // get tax fee
        treasury = _treasury;
        // dev info
        dev = _dev;
        // Dev can receive 10% of platformToken
        MaxAvailAwards = platformToken.maxSupply().mul(10).div(100);
        devPerBlock = _devPerBlock;
        devStartBlock = _devStartBlock;
    }

    // get user total rewards
    function getUserTotalAwards(address user) view public returns (uint256){
        UserInfo memory info = userInfo[user];
        uint256 amount = info.freeAmount;
        if (info.notEmpty) {
            uint256 cursor = info.taxHead;
            while (true) {
                amount = amount.add(info.taxList[cursor].amount);
                cursor = cursor.add(1).mod(taxEpoch);
                if (cursor == info.taxTail) {
                    break;
                }
            }
        }
        return amount;
    }

    // get user free rewards amount
    function getCurrentFreeAwards(address user) view public returns (uint256){
        uint256 rebaseEp = getCurrEpoch().sub(taxEpoch);
        UserInfo memory info = userInfo[user];
        uint256 amount = info.freeAmount;
        if (info.notEmpty) {
            uint256 cursor = info.taxHead;
            while (info.taxList[cursor].epoch <= rebaseEp) {
                amount = amount.add(info.taxList[cursor].amount);
                cursor = cursor.add(1).mod(taxEpoch);
                if (cursor == info.taxTail) {
                    break;
                }
            }
        }
        return amount;
    }

    // get available awards
    function getUserAvailAwards(address user) view public returns (uint256){
        uint256 current = getCurrEpoch();
        uint256 rebaseEp = current.sub(taxEpoch);
        UserInfo memory info = userInfo[user];
        uint256 amount = info.freeAmount;
        if (info.notEmpty) {
            uint256 _ep = taxEpoch.add(1);
            uint256 cursor = info.taxHead;
            while (true) {
                if (info.taxList[cursor].epoch > rebaseEp) {
                    uint rate = current.sub(info.taxList[cursor].epoch).add(1).mul(1e12).div(_ep);
                    uint256 available = info.taxList[cursor].amount.mul(rate).div(1e12);
                    amount = amount.add(available);
                } else {
                    amount = amount.add(info.taxList[cursor].amount);
                }
                cursor = cursor.add(1).mod(taxEpoch);
                if (cursor == info.taxTail) {
                    break;
                }
            }
        }
        return amount;
    }

    // estimate gas
    function estimateTax(uint256 _amount) view external returns (uint256){
        uint256 _current = getCurrEpoch();
        uint256 tax = 0;
        UserInfo memory user = userInfo[msg.sender];
        if (user.freeAmount >= _amount) {
            return 0;
        }
        else {
            uint256 current = _current;
            uint256 arrears = _amount.sub(user.freeAmount);
            uint256 _head = user.taxHead;
            uint256 _ep = taxEpoch.add(1);
            while (user.notEmpty) {
                // non-levied tax rate
                TaxInfo memory taxInfo = user.taxList[_head];
                uint rate = current.sub(taxInfo.epoch).add(1).mul(1e12).div(_ep);
                if (rate > 1e12) {
                    rate = 1e12;
                }
                uint256 available = taxInfo.amount.mul(rate).div(1e12);
                if (available >= arrears) {
                    uint256 newAmount = arrears.mul(1e12).div(rate);
                    tax = tax.add(newAmount.sub(arrears));
                    arrears = 0;
                    break;
                }
                else {
                    arrears = arrears.sub(available);
                    tax = tax.add(taxInfo.amount.sub(available));
                    _head = _head.add(1).mod(taxEpoch);
                    if (_head == user.taxTail) {
                        break;
                    }
                }
            }
            require(arrears == 0, "AwardContract: Insufficient Balance");
            return tax;
        }
    }

    // add governor
    function addGovernor(address governor) onlyOwner external {
        governors[governor] = true;
    }

    // remove governor
    function removeGovernor(address governor) onlyOwner external {
        governors[governor] = false;
    }

    // dev get rewards
    function claimDevAwards() external {
        require(msg.sender == dev, "AwardContract: only dev can receive awards");
        require(devAccAwards < MaxAvailAwards, "AwardContract: dev awards exceed permitted amount");
        uint256 amount = block.number.sub(devStartBlock).mul(devPerBlock);
        uint256 rewards = amount.sub(devAccAwards);
        if (amount > MaxAvailAwards) {
            rewards = MaxAvailAwards.sub(devAccAwards);
        }
        safeIssue(dev, rewards, "AwardContract: dev claim awards failed");
        devAccAwards = devAccAwards.add(rewards);
    }

    // add free amount
    function addFreeAward(address _user, uint256 _amount) onlyGovernor external {
        UserInfo storage user = userInfo[_user];
        user.freeAmount = user.freeAmount.add(_amount);
        emit AddFreeAward(_user, _amount);
    }

    // add award
    function addAward(address _user, uint256 _amount) onlyGovernor public {
        uint256 current = getCurrEpoch();
        // get epoch
        UserInfo storage user = userInfo[_user];
        //
        if (user.taxList.length == 0) {
            user.taxList.push(TaxInfo({
            epoch : current,
            amount : _amount
            }));
            user.taxHead = 0;
            user.taxTail = 1;
            user.notEmpty = true;
        }
        else {
            // taxList not full
            if (user.notEmpty) {
                uint256 end;
                if (user.taxTail == 0) {
                    end = user.taxList.length - 1;
                } else {
                    end = user.taxTail.sub(1);
                }
                if (user.taxList[end].epoch >= current) {
                    user.taxList[end].amount = user.taxList[end].amount.add(_amount);
                } else {
                    if (user.taxList.length < taxEpoch) {
                        user.taxList.push(TaxInfo({
                        epoch : current,
                        amount : _amount
                        }));
                    } else {
                        if (user.taxHead == user.taxTail) {
                            rebase(user, current);
                        }
                        user.taxList[user.taxTail].epoch = current;
                        user.taxList[user.taxTail].amount = _amount;
                    }
                    user.taxTail = user.taxTail.add(1).mod(taxEpoch);
                }
            } else {// user.taxHead == user.taxTail
                if (user.taxList.length < taxEpoch) {
                    user.taxList.push(TaxInfo({
                    epoch : current,
                    amount : _amount
                    }));
                } else {
                    user.taxList[user.taxTail].epoch = current;
                    user.taxList[user.taxTail].amount = _amount;
                }
                user.taxTail = user.taxTail.add(1).mod(taxEpoch);
                user.notEmpty = true;
            }
        }
        emit AddAward(_user, _amount);
    }

    // batch add awards
    function batchAddAwards(address[] memory _users, uint256[] memory _amounts) onlyGovernor external {
        require(_users.length == _amounts.length, "AwardContract: params invalid");
        for (uint i = 0; i < _users.length; i++) {
            addAward(_users[i], _amounts[i]);
        }
    }

    function withdraw(uint256 _amount) external {
        uint256 current = getCurrEpoch();
        uint256 _destroy = 0;
        // get base time
        UserInfo storage user = userInfo[msg.sender];
        // rebase
        rebase(user, current);

        if (user.freeAmount >= _amount) {
            user.freeAmount = user.freeAmount.sub(_amount);
        }
        else {
            uint256 arrears = _amount.sub(user.freeAmount);
            user.freeAmount = 0;
            uint256 _head = user.taxHead;
            uint256 _ep = taxEpoch.add(1);
            while (user.notEmpty) {
                // non-levied tax rate
                uint rate = current.sub(user.taxList[_head].epoch).add(1).mul(1e12).div(_ep);

                uint256 available = user.taxList[_head].amount.mul(rate).div(1e12);
                // available token
                if (available >= arrears) {
                    uint256 newAmount = arrears.mul(1e12).div(rate);
                    user.taxList[_head].amount = user.taxList[_head].amount.sub(newAmount);
                    _destroy = _destroy.add(newAmount.sub(arrears));
                    arrears = 0;
                    break;
                }
                else {
                    arrears = arrears.sub(available);
                    _destroy = _destroy.add(user.taxList[_head].amount.sub(available));
                    _head = _head.add(1).mod(taxEpoch);
                    if (_head == user.taxTail) {
                        user.notEmpty = false;
                    }
                }
            }
            user.taxHead = _head;
            require(arrears == 0, "AwardContract: Insufficient Balance");
            safeIssue(treasury, _destroy, "AwardContract: levy tax failed");
        }
        safeIssue(msg.sender, _amount, "AwardContract: claim awards failed");
        emit Withdraw(msg.sender, _amount, _destroy);
    }

    function pendingIncentives() view public returns (uint256){
        uint256 startBlock = 11210456;   // It's staking start block
        if (block.number <= startBlock) return 0;

        uint256 maxIncent = 745000 * 10 ** 18;
        uint256 incents = block.number.sub(startBlock).mul(15 * 10 ** 16);
        if (incents > maxIncent) {
            return maxIncent.sub(claimedIncentives);
        } else {
            return incents.sub(claimedIncentives);
        }
    }

    function claimIncentives(address to, uint256 amount) external {
        require(msg.sender == dev, "AwardContract: unauthorized");
        require(to != dev, "AwardContract: dev so greedy");
        uint256 pending = pendingIncentives();
        require(amount <= pending, "AwardContract: incentives exceed");
        safeIssue(to, amount, "AwardContract: claim incentives err");
        claimedIncentives = claimedIncentives.add(amount);
    }

    function destroy(uint256 amount) onlyGovernor external {
        safeIssue(treasury, amount, "AwardContract: levy tax failed");
    }

    function getCurrEpoch() internal view returns (uint256) {
        return now.div(epUnit);
    }

    function safeIssue(address user, uint256 amount, string memory err) internal {
        if (amount > 0) {
            require(amount.add(platformToken.totalSupply()) <= platformToken.maxSupply(), "AwardContract: awards exceeds maxSupply");
            require(platformToken.issue(user, amount), err);
        }
    }

    function rebase(UserInfo storage _user, uint256 _current) internal {
        uint256 rebaseEp = _current.sub(taxEpoch);
        uint256 head = _user.taxHead;
        while (_user.notEmpty && _user.taxList[head].epoch <= rebaseEp) {
            _user.freeAmount = _user.freeAmount.add(_user.taxList[head].amount);
            head = head.add(1).mod(taxEpoch);
            if (head == _user.taxTail) {
                _user.notEmpty = false;
            }
        }
        _user.taxHead = head;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IERC20Token","name":"_platformToken","type":"address"},{"internalType":"uint256","name":"_taxEpoch","type":"uint256"},{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"address","name":"_dev","type":"address"},{"internalType":"uint256","name":"_devStartBlock","type":"uint256"},{"internalType":"uint256","name":"_devPerBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AddAward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AddFreeAward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tax","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"MaxAvailAwards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"addAward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"addFreeAward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"governor","type":"address"}],"name":"addGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"batchAddAwards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimDevAwards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimIncentives","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimedIncentives","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"destroy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dev","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devAccAwards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devStartBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"epUnit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"estimateTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getCurrentFreeAwards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserAvailAwards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserTotalAwards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"governors","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingIncentives","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"platformToken","outputs":[{"internalType":"contract IERC20Token","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"governor","type":"address"}],"name":"removeGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"taxEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600960065562093a806007553480156200001d57600080fd5b506040516200291b3803806200291b833981810160405260c08110156200004357600080fd5b508051602082015160408301516060840151608085015160a09095015193949293919290916000620000746200032b565b600a80546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000851162000118576040805162461bcd60e51b815260206004820152601f60248201527f4177617264436f6e74726163743a2074617845706f636820696e76616c696400604482015290519081900360640190fd5b6001600160a01b03831662000174576040805162461bcd60e51b815260206004820152601a60248201527f4177617264436f6e74726163743a2064657620696e76616c6964000000000000604482015290519081900360640190fd5b6001600160a01b038616620001bb5760405162461bcd60e51b8152600401808060200182810382526025815260200180620028af6025913960400191505060405180910390fd5b81620001f95760405162461bcd60e51b8152600401808060200182810382526026815260200180620028d46026913960400191505060405180910390fd5b600b80546001600160a01b0319166001600160a01b03881617905560068590556001600c6000620002296200032b565b6001600160a01b03908116825260208083019390935260409182016000908120805460ff191695151595909517909455600980546001600160a01b03199081168a84161790915584541687821617909355600b54815163d5abeb0160e01b8152915162000317946064946200030394600a949092169263d5abeb01926004808201939291829003018186803b158015620002c257600080fd5b505afa158015620002d7573d6000803e3d6000fd5b505050506040513d6020811015620002ee57600080fd5b5051906200032f602090811b62001c2417901c565b6200039660201b62001c861790919060201c565b600455600355600155506200048792505050565b3390565b600082620003405750600062000390565b828202828482816200034e57fe5b04146200038d5760405162461bcd60e51b8152600401808060200182810382526021815260200180620028fa6021913960400191505060405180910390fd5b90505b92915050565b60006200038d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620003e060201b60201c565b60008183620004705760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620004345781810151838201526020016200041a565b50505050905090810190601f168015620004625780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816200047d57fe5b0495945050505050565b61241880620004976000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806391cca3db116100f9578063db281e1b11610097578063f14d13c411610071578063f14d13c4146104eb578063f2fde38b14610511578063fa803b5114610537578063fbb29cfd14610563576101c4565b8063db281e1b14610465578063e3eece261461048b578063eecdac88146104c5576101c4565b8063a076e7db116100d3578063a076e7db14610445578063ad56ca421461044d578063aef018b114610455578063d1b812cd1461045d576101c4565b806391cca3db14610418578063961c34fe146104205780639d11877014610428576101c4565b806358f57f4d11610166578063715018a611610140578063715018a6146103b05780637336991d146103b85780638b76ba64146103e45780638da5cb5b14610410576101c4565b806358f57f4d1461037c57806359cd09381461038457806361d027b31461038c576101c4565b80631b255e18116101a25780631b255e18146101f35780632e1a7d4d146102105780633c4a25d01461022f57806345decd1e14610255576101c4565b806303aafa25146101c95780630f6104fc146101e3578063155a6b85146101eb575b600080fd5b6101d1610589565b60408051918252519081900360200190f35b6101d16105fc565b6101d1610602565b6101d16004803603602081101561020957600080fd5b5035610608565b61022d6004803603602081101561022657600080fd5b50356108a8565b005b61022d6004803603602081101561024557600080fd5b50356001600160a01b0316610b98565b61022d6004803603604081101561026b57600080fd5b81019060208101813564010000000081111561028657600080fd5b82018360208201111561029857600080fd5b803590602001918460208302840111640100000000831117156102ba57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561030a57600080fd5b82018360208201111561031c57600080fd5b8035906020019184602083028401116401000000008311171561033e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610c14945050505050565b61022d610d17565b6101d1610e3a565b610394610e40565b604080516001600160a01b039092168252519081900360200190f35b61022d610e4f565b61022d600480360360408110156103ce57600080fd5b506001600160a01b038135169060200135610ef1565b61022d600480360360408110156103fa57600080fd5b506001600160a01b03813516906020013561104c565b61039461111f565b61039461112e565b6101d161113d565b61022d6004803603602081101561043e57600080fd5b5035611143565b6101d16111f6565b6101d16111fc565b6101d1611202565b610394611208565b6101d16004803603602081101561047b57600080fd5b50356001600160a01b0316611217565b6104b1600480360360208110156104a157600080fd5b50356001600160a01b0316611356565b604080519115158252519081900360200190f35b61022d600480360360208110156104db57600080fd5b50356001600160a01b031661136b565b6101d16004803603602081101561050157600080fd5b50356001600160a01b03166113e4565b61022d6004803603602081101561052757600080fd5b50356001600160a01b0316611542565b61022d6004803603604081101561054d57600080fd5b506001600160a01b03813516906020013561163b565b6101d16004803603602081101561057957600080fd5b50356001600160a01b03166119f5565b600062ab0ed84381106105a05760009150506105f9565b699dc287eab4d4dfa0000060006105c9670214e8348c4f00006105c34386611cc8565b90611c24565b9050818111156105eb576005546105e1908390611cc8565b93505050506105f9565b6005546105e1908290611cc8565b90565b60035481565b60055481565b600080610613611d0a565b9050600061061f6121f7565b336000908152600860209081526040808320815160a08101835281548152600182015481850152600282015481840152600382015460ff1615156060820152600482018054845181870281018701909552808552919592946080870194939192919084015b828210156106ca57838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190610684565b50505091525050805190915085116106e857600093505050506108a3565b805183906000906106fa908890611cc8565b602084015160065491925090600090610714906001611d26565b90505b84606001511561085c57610729612228565b8560800151838151811061073957fe5b60200260200101519050600061077a8361077464e8d4a510006105c3600161076e88600001518d611cc890919063ffffffff16565b90611d26565b90611c86565b905064e8d4a51000811115610791575064e8d4a510005b60006107b364e8d4a51000610774848660200151611c2490919063ffffffff16565b90508581106107f65760006107d1836107748964e8d4a51000611c24565b90506107e76107e08289611cc8565b8b90611d26565b9950600096505050505061085c565b6108008682611cc8565b955061082361081c828560200151611cc890919063ffffffff16565b8a90611d26565b60065490995061083e90610838876001611d26565b90611d80565b945087604001518514156108545750505061085c565b505050610717565b82156108995760405162461bcd60e51b81526004018080602001828103825260238152602001806123436023913960400191505060405180910390fd5b5093955050505050505b919050565b60006108b2611d0a565b336000908152600860205260408120919250906108cf8184611dc2565b805484116108ea5780546108e39085611cc8565b8155610b2f565b80546000906108fa908690611cc8565b60008084556001808501546006549394509261091591611d26565b90505b600384015460ff1615610a9b5760006109638261077464e8d4a510006105c3600161076e8b6004018a8154811061094b57fe5b60009182526020909120600290910201548e90611cc8565b905060006109a364e8d4a510006107748489600401888154811061098357fe5b906000526020600020906002020160010154611c2490919063ffffffff16565b9050848110610a3b5760006109c1836107748864e8d4a51000611c24565b90506109f6818860040187815481106109d657fe5b906000526020600020906002020160010154611cc890919063ffffffff16565b876004018681548110610a0557fe5b6000918252602090912060016002909202010155610a2d610a268288611cc8565b8990611d26565b975060009550505050610a9b565b610a458582611cc8565b9450610a64610a5d828860040187815481106109d657fe5b8890611d26565b600654909750610a7990610838866001611d26565b93508560020154841415610a945760038601805460ff191690555b5050610918565b600184018290558215610adf5760405162461bcd60e51b81526004018080602001828103825260238152602001806123436023913960400191505060405180910390fd5b60095460408051808201909152601e81527f4177617264436f6e74726163743a206c65767920746178206661696c656400006020820152610b2b916001600160a01b0316908790611e8a565b5050505b610b52338560405180606001604052806022815260200161236660229139611e8a565b604080513381526020810186905280820184905290517ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360600190a150505050565b610ba06120d2565b600a546001600160a01b03908116911614610bf0576040805162461bcd60e51b815260206004820181905260248201526000805160206122fa833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b600c6000610c206120d2565b6001600160a01b0316815260208101919091526040016000205460ff16610c785760405162461bcd60e51b815260040180806020018281038252602981526020018061231a6029913960400191505060405180910390fd5b8051825114610cce576040805162461bcd60e51b815260206004820152601d60248201527f4177617264436f6e74726163743a20706172616d7320696e76616c6964000000604482015290519081900360640190fd5b60005b8251811015610d1257610d0a838281518110610ce957fe5b6020026020010151838381518110610cfd57fe5b602002602001015161163b565b600101610cd1565b505050565b6000546001600160a01b03163314610d605760405162461bcd60e51b815260040180806020018281038252602a815260200180612388602a913960400191505060405180910390fd5b60045460025410610da25760405162461bcd60e51b81526004018080602001828103825260318152602001806123b26031913960400191505060405180910390fd5b6000610dbf6003546105c360015443611cc890919063ffffffff16565b90506000610dd860025483611cc890919063ffffffff16565b9050600454821115610df657600254600454610df391611cc8565b90505b60005460408051606081019091526026808252610e26926001600160a01b03169184916122436020830139611e8a565b600254610e339082611d26565b6002555050565b60075481565b6009546001600160a01b031681565b610e576120d2565b600a546001600160a01b03908116911614610ea7576040805162461bcd60e51b815260206004820181905260248201526000805160206122fa833981519152604482015290519081900360640190fd5b600a546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600a80546001600160a01b0319169055565b6000546001600160a01b03163314610f50576040805162461bcd60e51b815260206004820152601b60248201527f4177617264436f6e74726163743a20756e617574686f72697a65640000000000604482015290519081900360640190fd5b6000546001600160a01b0383811691161415610fb3576040805162461bcd60e51b815260206004820152601c60248201527f4177617264436f6e74726163743a2064657620736f2067726565647900000000604482015290519081900360640190fd5b6000610fbd610589565b905080821115611014576040805162461bcd60e51b815260206004820181905260248201527f4177617264436f6e74726163743a20696e63656e746976657320657863656564604482015290519081900360640190fd5b61103783836040518060600160405280602381526020016122d760239139611e8a565b6005546110449083611d26565b600555505050565b600c60006110586120d2565b6001600160a01b0316815260208101919091526040016000205460ff166110b05760405162461bcd60e51b815260040180806020018281038252602981526020018061231a6029913960400191505060405180910390fd5b6001600160a01b038216600090815260086020526040902080546110d49083611d26565b8155604080516001600160a01b03851681526020810184905281517fb3d34aa6513790110f92a175d6dd74ad8c8a7b013c31d21cfbd8f875465afdbb929181900390910190a1505050565b600a546001600160a01b031690565b6000546001600160a01b031681565b60025481565b600c600061114f6120d2565b6001600160a01b0316815260208101919091526040016000205460ff166111a75760405162461bcd60e51b815260040180806020018281038252602981526020018061231a6029913960400191505060405180910390fd5b60095460408051808201909152601e81527f4177617264436f6e74726163743a206c65767920746178206661696c6564000060208201526111f3916001600160a01b0316908390611e8a565b50565b60045481565b60015481565b60065481565b600b546001600160a01b031681565b60006112216121f7565b6001600160a01b0383166000908152600860209081526040808320815160a08101835281548152600182015481850152600282015481840152600382015460ff1615156060820152600482018054845181870281018701909552808552919592946080870194939192919084015b828210156112d55783829060005260206000209060020201604051806040016040529081600082015481526020016001820154815250508152602001906001019061128f565b5050509152505080516060820151919250901561134f5760208201515b6113208360800151828151811061130557fe5b60200260200101516020015183611d2690919063ffffffff16565b60065490925061133590610838836001611d26565b905082604001518114156113485761134d565b6112f2565b505b9392505050565b600c6020526000908152604090205460ff1681565b6113736120d2565b600a546001600160a01b039081169116146113c3576040805162461bcd60e51b815260206004820181905260248201526000805160206122fa833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000806113fb6006546113f5611d0a565b90611cc8565b90506114056121f7565b6001600160a01b0384166000908152600860209081526040808320815160a08101835281548152600182015481850152600282015481840152600382015460ff1615156060820152600482018054845181870281018701909552808552919592946080870194939192919084015b828210156114b957838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190611473565b5050509152505080516060820151919250901561153a5760208201515b83836080015182815181106114e757fe5b602002602001015160000151116115385761150b8360800151828151811061130557fe5b60065490925061152090610838836001611d26565b9050826040015181141561153357611538565b6114d6565b505b949350505050565b61154a6120d2565b600a546001600160a01b0390811691161461159a576040805162461bcd60e51b815260206004820181905260248201526000805160206122fa833981519152604482015290519081900360640190fd5b6001600160a01b0381166115df5760405162461bcd60e51b81526004018080602001828103825260268152602001806122696026913960400191505060405180910390fd5b600a546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600c60006116476120d2565b6001600160a01b0316815260208101919091526040016000205460ff1661169f5760405162461bcd60e51b815260040180806020018281038252602981526020018061231a6029913960400191505060405180910390fd5b60006116a9611d0a565b6001600160a01b038416600090815260086020526040902060048101549192509061172f57604080518082019091528281526020808201858152600484018054600181810183556000928352938220945160029182029095019485559151938301939093558184019290925590820181905560038201805460ff191690911790556119ab565b600381015460ff16156118d657600081600201546000141561175a575060048101546000190161176d565b600282015461176a906001611cc8565b90505b8282600401828154811061177d57fe5b906000526020600020906002020160000154106117f0576117c7848360040183815481106117a757fe5b906000526020600020906002020160010154611d2690919063ffffffff16565b8260040182815481106117d657fe5b9060005260206000209060020201600101819055506118d0565b6006546004830154101561183f576040805180820190915283815260208082018681526004850180546001818101835560009283529390912093516002909102909301928355519101556118ac565b816002015482600101541415611859576118598284611dc2565b828260040183600201548154811061186d57fe5b906000526020600020906002020160000181905550838260040183600201548154811061189657fe5b9060005260206000209060020201600101819055505b6118ca60065461083860018560020154611d2690919063ffffffff16565b60028301555b506119ab565b6006546004820154101561192557604080518082019091528281526020808201858152600484018054600181810183556000928352939091209351600290910290930192835551910155611978565b818160040182600201548154811061193957fe5b906000526020600020906002020160000181905550828160040182600201548154811061196257fe5b9060005260206000209060020201600101819055505b61199660065461083860018460020154611d2690919063ffffffff16565b600282015560038101805460ff191660011790555b604080516001600160a01b03861681526020810185905281517fd185e4940a36e5f27549de4c89ab5d6d8ba2bbf01c48b4df813c0e73b123cbab929181900390910190a150505050565b600080611a00611d0a565b90506000611a1960065483611cc890919063ffffffff16565b9050611a236121f7565b6001600160a01b0385166000908152600860209081526040808320815160a08101835281548152600182015481850152600282015481840152600382015460ff1615156060820152600482018054845181870281018701909552808552919592946080870194939192919084015b82821015611ad757838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190611a91565b50505091525050805160608201519192509015611c1b57600654600090611aff906001611d26565b60208401519091505b8484608001518281518110611b1957fe5b6020026020010151600001511115611bbd576000611b6d8361077464e8d4a510006105c3600161076e8b608001518981518110611b5257fe5b6020026020010151600001518e611cc890919063ffffffff16565b90506000611ba864e8d4a510006107748489608001518781518110611b8e57fe5b602002602001015160200151611c2490919063ffffffff16565b9050611bb48582611d26565b94505050611bee565b611beb84608001518281518110611bd057fe5b60200260200101516020015184611d2690919063ffffffff16565b92505b600654611c0090610838836001611d26565b90508360400151811415611c1357611c18565b611b08565b50505b95945050505050565b600082611c3357506000611c80565b82820282848281611c4057fe5b0414611c7d5760405162461bcd60e51b815260040180806020018281038252602181526020018061228f6021913960400191505060405180910390fd5b90505b92915050565b6000611c7d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506120d6565b6000611c7d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061213b565b6000611d2160075442611c8690919063ffffffff16565b905090565b600082820183811015611c7d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000611c7d83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250612195565b6000611dd960065483611cc890919063ffffffff16565b60018401549091505b600384015460ff168015611e16575081846004018281548110611e0157fe5b90600052602060002090600202016000015411155b15611e7d57611e49846004018281548110611e2d57fe5b6000918252602090912060016002909202010154855490611d26565b8455600654611e5d90610838836001611d26565b90508360020154811415611e785760038401805460ff191690555b611de2565b6001909301929092555050565b8115610d1257600b60009054906101000a90046001600160a01b03166001600160a01b031663d5abeb016040518163ffffffff1660e01b815260040160206040518083038186803b158015611ede57600080fd5b505afa158015611ef2573d6000803e3d6000fd5b505050506040513d6020811015611f0857600080fd5b5051600b54604080516318160ddd60e01b81529051611f83926001600160a01b0316916318160ddd916004808301926020929190829003018186803b158015611f5057600080fd5b505afa158015611f64573d6000803e3d6000fd5b505050506040513d6020811015611f7a57600080fd5b50518490611d26565b1115611fc05760405162461bcd60e51b81526004018080602001828103825260278152602001806122b06027913960400191505060405180910390fd5b600b546040805163219e412d60e21b81526001600160a01b038681166004830152602482018690529151919092169163867904b49160448083019260209291908290030181600087803b15801561201657600080fd5b505af115801561202a573d6000803e3d6000fd5b505050506040513d602081101561204057600080fd5b505181906120cc5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612091578181015183820152602001612079565b50505050905090810190601f1680156120be5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505050565b3390565b600081836121255760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612091578181015183820152602001612079565b50600083858161213157fe5b0495945050505050565b6000818484111561218d5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612091578181015183820152602001612079565b505050900390565b600081836121e45760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612091578181015183820152602001612079565b508284816121ee57fe5b06949350505050565b6040518060a00160405280600081526020016000815260200160008152602001600015158152602001606081525090565b60405180604001604052806000815260200160008152509056fe4177617264436f6e74726163743a2064657620636c61696d20617761726473206661696c65644f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774177617264436f6e74726163743a206177617264732065786365656473206d6178537570706c794177617264436f6e74726163743a20636c61696d20696e63656e7469766573206572724f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724177617264436f6e74726163743a2063616c6c6572206973206e6f742074686520676f7665726e6f724177617264436f6e74726163743a20496e73756666696369656e742042616c616e63654177617264436f6e74726163743a20636c61696d20617761726473206661696c65644177617264436f6e74726163743a206f6e6c79206465762063616e2072656365697665206177617264734177617264436f6e74726163743a206465762061776172647320657863656564207065726d697474656420616d6f756e74a2646970667358221220a51897cf8f72196b48d14c35bd2f9f73775695e1324ed39557caf4e26551ce2364736f6c634300060c00334177617264436f6e74726163743a20706c6174666f726d20746f6b656e20696e76616c69644177617264436f6e74726163743a2064657620737461727420626c6f636b20696e76616c6964536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77000000000000000000000000e1b583dc66e0a24fd9af2dc665f6f5e48978e10600000000000000000000000000000000000000000000000000000000000000090000000000000000000000007ca6eea4df49c315534fee8dc43e0660540cd9ea000000000000000000000000667911bc8b5775616ebcf13d49734cff96d4ec390000000000000000000000000000000000000000000000000000000000b1549b00000000000000000000000000000000000000000000000004e28e2290f00000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101c45760003560e01c806391cca3db116100f9578063db281e1b11610097578063f14d13c411610071578063f14d13c4146104eb578063f2fde38b14610511578063fa803b5114610537578063fbb29cfd14610563576101c4565b8063db281e1b14610465578063e3eece261461048b578063eecdac88146104c5576101c4565b8063a076e7db116100d3578063a076e7db14610445578063ad56ca421461044d578063aef018b114610455578063d1b812cd1461045d576101c4565b806391cca3db14610418578063961c34fe146104205780639d11877014610428576101c4565b806358f57f4d11610166578063715018a611610140578063715018a6146103b05780637336991d146103b85780638b76ba64146103e45780638da5cb5b14610410576101c4565b806358f57f4d1461037c57806359cd09381461038457806361d027b31461038c576101c4565b80631b255e18116101a25780631b255e18146101f35780632e1a7d4d146102105780633c4a25d01461022f57806345decd1e14610255576101c4565b806303aafa25146101c95780630f6104fc146101e3578063155a6b85146101eb575b600080fd5b6101d1610589565b60408051918252519081900360200190f35b6101d16105fc565b6101d1610602565b6101d16004803603602081101561020957600080fd5b5035610608565b61022d6004803603602081101561022657600080fd5b50356108a8565b005b61022d6004803603602081101561024557600080fd5b50356001600160a01b0316610b98565b61022d6004803603604081101561026b57600080fd5b81019060208101813564010000000081111561028657600080fd5b82018360208201111561029857600080fd5b803590602001918460208302840111640100000000831117156102ba57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561030a57600080fd5b82018360208201111561031c57600080fd5b8035906020019184602083028401116401000000008311171561033e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610c14945050505050565b61022d610d17565b6101d1610e3a565b610394610e40565b604080516001600160a01b039092168252519081900360200190f35b61022d610e4f565b61022d600480360360408110156103ce57600080fd5b506001600160a01b038135169060200135610ef1565b61022d600480360360408110156103fa57600080fd5b506001600160a01b03813516906020013561104c565b61039461111f565b61039461112e565b6101d161113d565b61022d6004803603602081101561043e57600080fd5b5035611143565b6101d16111f6565b6101d16111fc565b6101d1611202565b610394611208565b6101d16004803603602081101561047b57600080fd5b50356001600160a01b0316611217565b6104b1600480360360208110156104a157600080fd5b50356001600160a01b0316611356565b604080519115158252519081900360200190f35b61022d600480360360208110156104db57600080fd5b50356001600160a01b031661136b565b6101d16004803603602081101561050157600080fd5b50356001600160a01b03166113e4565b61022d6004803603602081101561052757600080fd5b50356001600160a01b0316611542565b61022d6004803603604081101561054d57600080fd5b506001600160a01b03813516906020013561163b565b6101d16004803603602081101561057957600080fd5b50356001600160a01b03166119f5565b600062ab0ed84381106105a05760009150506105f9565b699dc287eab4d4dfa0000060006105c9670214e8348c4f00006105c34386611cc8565b90611c24565b9050818111156105eb576005546105e1908390611cc8565b93505050506105f9565b6005546105e1908290611cc8565b90565b60035481565b60055481565b600080610613611d0a565b9050600061061f6121f7565b336000908152600860209081526040808320815160a08101835281548152600182015481850152600282015481840152600382015460ff1615156060820152600482018054845181870281018701909552808552919592946080870194939192919084015b828210156106ca57838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190610684565b50505091525050805190915085116106e857600093505050506108a3565b805183906000906106fa908890611cc8565b602084015160065491925090600090610714906001611d26565b90505b84606001511561085c57610729612228565b8560800151838151811061073957fe5b60200260200101519050600061077a8361077464e8d4a510006105c3600161076e88600001518d611cc890919063ffffffff16565b90611d26565b90611c86565b905064e8d4a51000811115610791575064e8d4a510005b60006107b364e8d4a51000610774848660200151611c2490919063ffffffff16565b90508581106107f65760006107d1836107748964e8d4a51000611c24565b90506107e76107e08289611cc8565b8b90611d26565b9950600096505050505061085c565b6108008682611cc8565b955061082361081c828560200151611cc890919063ffffffff16565b8a90611d26565b60065490995061083e90610838876001611d26565b90611d80565b945087604001518514156108545750505061085c565b505050610717565b82156108995760405162461bcd60e51b81526004018080602001828103825260238152602001806123436023913960400191505060405180910390fd5b5093955050505050505b919050565b60006108b2611d0a565b336000908152600860205260408120919250906108cf8184611dc2565b805484116108ea5780546108e39085611cc8565b8155610b2f565b80546000906108fa908690611cc8565b60008084556001808501546006549394509261091591611d26565b90505b600384015460ff1615610a9b5760006109638261077464e8d4a510006105c3600161076e8b6004018a8154811061094b57fe5b60009182526020909120600290910201548e90611cc8565b905060006109a364e8d4a510006107748489600401888154811061098357fe5b906000526020600020906002020160010154611c2490919063ffffffff16565b9050848110610a3b5760006109c1836107748864e8d4a51000611c24565b90506109f6818860040187815481106109d657fe5b906000526020600020906002020160010154611cc890919063ffffffff16565b876004018681548110610a0557fe5b6000918252602090912060016002909202010155610a2d610a268288611cc8565b8990611d26565b975060009550505050610a9b565b610a458582611cc8565b9450610a64610a5d828860040187815481106109d657fe5b8890611d26565b600654909750610a7990610838866001611d26565b93508560020154841415610a945760038601805460ff191690555b5050610918565b600184018290558215610adf5760405162461bcd60e51b81526004018080602001828103825260238152602001806123436023913960400191505060405180910390fd5b60095460408051808201909152601e81527f4177617264436f6e74726163743a206c65767920746178206661696c656400006020820152610b2b916001600160a01b0316908790611e8a565b5050505b610b52338560405180606001604052806022815260200161236660229139611e8a565b604080513381526020810186905280820184905290517ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360600190a150505050565b610ba06120d2565b600a546001600160a01b03908116911614610bf0576040805162461bcd60e51b815260206004820181905260248201526000805160206122fa833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b600c6000610c206120d2565b6001600160a01b0316815260208101919091526040016000205460ff16610c785760405162461bcd60e51b815260040180806020018281038252602981526020018061231a6029913960400191505060405180910390fd5b8051825114610cce576040805162461bcd60e51b815260206004820152601d60248201527f4177617264436f6e74726163743a20706172616d7320696e76616c6964000000604482015290519081900360640190fd5b60005b8251811015610d1257610d0a838281518110610ce957fe5b6020026020010151838381518110610cfd57fe5b602002602001015161163b565b600101610cd1565b505050565b6000546001600160a01b03163314610d605760405162461bcd60e51b815260040180806020018281038252602a815260200180612388602a913960400191505060405180910390fd5b60045460025410610da25760405162461bcd60e51b81526004018080602001828103825260318152602001806123b26031913960400191505060405180910390fd5b6000610dbf6003546105c360015443611cc890919063ffffffff16565b90506000610dd860025483611cc890919063ffffffff16565b9050600454821115610df657600254600454610df391611cc8565b90505b60005460408051606081019091526026808252610e26926001600160a01b03169184916122436020830139611e8a565b600254610e339082611d26565b6002555050565b60075481565b6009546001600160a01b031681565b610e576120d2565b600a546001600160a01b03908116911614610ea7576040805162461bcd60e51b815260206004820181905260248201526000805160206122fa833981519152604482015290519081900360640190fd5b600a546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600a80546001600160a01b0319169055565b6000546001600160a01b03163314610f50576040805162461bcd60e51b815260206004820152601b60248201527f4177617264436f6e74726163743a20756e617574686f72697a65640000000000604482015290519081900360640190fd5b6000546001600160a01b0383811691161415610fb3576040805162461bcd60e51b815260206004820152601c60248201527f4177617264436f6e74726163743a2064657620736f2067726565647900000000604482015290519081900360640190fd5b6000610fbd610589565b905080821115611014576040805162461bcd60e51b815260206004820181905260248201527f4177617264436f6e74726163743a20696e63656e746976657320657863656564604482015290519081900360640190fd5b61103783836040518060600160405280602381526020016122d760239139611e8a565b6005546110449083611d26565b600555505050565b600c60006110586120d2565b6001600160a01b0316815260208101919091526040016000205460ff166110b05760405162461bcd60e51b815260040180806020018281038252602981526020018061231a6029913960400191505060405180910390fd5b6001600160a01b038216600090815260086020526040902080546110d49083611d26565b8155604080516001600160a01b03851681526020810184905281517fb3d34aa6513790110f92a175d6dd74ad8c8a7b013c31d21cfbd8f875465afdbb929181900390910190a1505050565b600a546001600160a01b031690565b6000546001600160a01b031681565b60025481565b600c600061114f6120d2565b6001600160a01b0316815260208101919091526040016000205460ff166111a75760405162461bcd60e51b815260040180806020018281038252602981526020018061231a6029913960400191505060405180910390fd5b60095460408051808201909152601e81527f4177617264436f6e74726163743a206c65767920746178206661696c6564000060208201526111f3916001600160a01b0316908390611e8a565b50565b60045481565b60015481565b60065481565b600b546001600160a01b031681565b60006112216121f7565b6001600160a01b0383166000908152600860209081526040808320815160a08101835281548152600182015481850152600282015481840152600382015460ff1615156060820152600482018054845181870281018701909552808552919592946080870194939192919084015b828210156112d55783829060005260206000209060020201604051806040016040529081600082015481526020016001820154815250508152602001906001019061128f565b5050509152505080516060820151919250901561134f5760208201515b6113208360800151828151811061130557fe5b60200260200101516020015183611d2690919063ffffffff16565b60065490925061133590610838836001611d26565b905082604001518114156113485761134d565b6112f2565b505b9392505050565b600c6020526000908152604090205460ff1681565b6113736120d2565b600a546001600160a01b039081169116146113c3576040805162461bcd60e51b815260206004820181905260248201526000805160206122fa833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000806113fb6006546113f5611d0a565b90611cc8565b90506114056121f7565b6001600160a01b0384166000908152600860209081526040808320815160a08101835281548152600182015481850152600282015481840152600382015460ff1615156060820152600482018054845181870281018701909552808552919592946080870194939192919084015b828210156114b957838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190611473565b5050509152505080516060820151919250901561153a5760208201515b83836080015182815181106114e757fe5b602002602001015160000151116115385761150b8360800151828151811061130557fe5b60065490925061152090610838836001611d26565b9050826040015181141561153357611538565b6114d6565b505b949350505050565b61154a6120d2565b600a546001600160a01b0390811691161461159a576040805162461bcd60e51b815260206004820181905260248201526000805160206122fa833981519152604482015290519081900360640190fd5b6001600160a01b0381166115df5760405162461bcd60e51b81526004018080602001828103825260268152602001806122696026913960400191505060405180910390fd5b600a546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600c60006116476120d2565b6001600160a01b0316815260208101919091526040016000205460ff1661169f5760405162461bcd60e51b815260040180806020018281038252602981526020018061231a6029913960400191505060405180910390fd5b60006116a9611d0a565b6001600160a01b038416600090815260086020526040902060048101549192509061172f57604080518082019091528281526020808201858152600484018054600181810183556000928352938220945160029182029095019485559151938301939093558184019290925590820181905560038201805460ff191690911790556119ab565b600381015460ff16156118d657600081600201546000141561175a575060048101546000190161176d565b600282015461176a906001611cc8565b90505b8282600401828154811061177d57fe5b906000526020600020906002020160000154106117f0576117c7848360040183815481106117a757fe5b906000526020600020906002020160010154611d2690919063ffffffff16565b8260040182815481106117d657fe5b9060005260206000209060020201600101819055506118d0565b6006546004830154101561183f576040805180820190915283815260208082018681526004850180546001818101835560009283529390912093516002909102909301928355519101556118ac565b816002015482600101541415611859576118598284611dc2565b828260040183600201548154811061186d57fe5b906000526020600020906002020160000181905550838260040183600201548154811061189657fe5b9060005260206000209060020201600101819055505b6118ca60065461083860018560020154611d2690919063ffffffff16565b60028301555b506119ab565b6006546004820154101561192557604080518082019091528281526020808201858152600484018054600181810183556000928352939091209351600290910290930192835551910155611978565b818160040182600201548154811061193957fe5b906000526020600020906002020160000181905550828160040182600201548154811061196257fe5b9060005260206000209060020201600101819055505b61199660065461083860018460020154611d2690919063ffffffff16565b600282015560038101805460ff191660011790555b604080516001600160a01b03861681526020810185905281517fd185e4940a36e5f27549de4c89ab5d6d8ba2bbf01c48b4df813c0e73b123cbab929181900390910190a150505050565b600080611a00611d0a565b90506000611a1960065483611cc890919063ffffffff16565b9050611a236121f7565b6001600160a01b0385166000908152600860209081526040808320815160a08101835281548152600182015481850152600282015481840152600382015460ff1615156060820152600482018054845181870281018701909552808552919592946080870194939192919084015b82821015611ad757838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190611a91565b50505091525050805160608201519192509015611c1b57600654600090611aff906001611d26565b60208401519091505b8484608001518281518110611b1957fe5b6020026020010151600001511115611bbd576000611b6d8361077464e8d4a510006105c3600161076e8b608001518981518110611b5257fe5b6020026020010151600001518e611cc890919063ffffffff16565b90506000611ba864e8d4a510006107748489608001518781518110611b8e57fe5b602002602001015160200151611c2490919063ffffffff16565b9050611bb48582611d26565b94505050611bee565b611beb84608001518281518110611bd057fe5b60200260200101516020015184611d2690919063ffffffff16565b92505b600654611c0090610838836001611d26565b90508360400151811415611c1357611c18565b611b08565b50505b95945050505050565b600082611c3357506000611c80565b82820282848281611c4057fe5b0414611c7d5760405162461bcd60e51b815260040180806020018281038252602181526020018061228f6021913960400191505060405180910390fd5b90505b92915050565b6000611c7d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506120d6565b6000611c7d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061213b565b6000611d2160075442611c8690919063ffffffff16565b905090565b600082820183811015611c7d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000611c7d83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250612195565b6000611dd960065483611cc890919063ffffffff16565b60018401549091505b600384015460ff168015611e16575081846004018281548110611e0157fe5b90600052602060002090600202016000015411155b15611e7d57611e49846004018281548110611e2d57fe5b6000918252602090912060016002909202010154855490611d26565b8455600654611e5d90610838836001611d26565b90508360020154811415611e785760038401805460ff191690555b611de2565b6001909301929092555050565b8115610d1257600b60009054906101000a90046001600160a01b03166001600160a01b031663d5abeb016040518163ffffffff1660e01b815260040160206040518083038186803b158015611ede57600080fd5b505afa158015611ef2573d6000803e3d6000fd5b505050506040513d6020811015611f0857600080fd5b5051600b54604080516318160ddd60e01b81529051611f83926001600160a01b0316916318160ddd916004808301926020929190829003018186803b158015611f5057600080fd5b505afa158015611f64573d6000803e3d6000fd5b505050506040513d6020811015611f7a57600080fd5b50518490611d26565b1115611fc05760405162461bcd60e51b81526004018080602001828103825260278152602001806122b06027913960400191505060405180910390fd5b600b546040805163219e412d60e21b81526001600160a01b038681166004830152602482018690529151919092169163867904b49160448083019260209291908290030181600087803b15801561201657600080fd5b505af115801561202a573d6000803e3d6000fd5b505050506040513d602081101561204057600080fd5b505181906120cc5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612091578181015183820152602001612079565b50505050905090810190601f1680156120be5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505050565b3390565b600081836121255760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612091578181015183820152602001612079565b50600083858161213157fe5b0495945050505050565b6000818484111561218d5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612091578181015183820152602001612079565b505050900390565b600081836121e45760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612091578181015183820152602001612079565b508284816121ee57fe5b06949350505050565b6040518060a00160405280600081526020016000815260200160008152602001600015158152602001606081525090565b60405180604001604052806000815260200160008152509056fe4177617264436f6e74726163743a2064657620636c61696d20617761726473206661696c65644f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774177617264436f6e74726163743a206177617264732065786365656473206d6178537570706c794177617264436f6e74726163743a20636c61696d20696e63656e7469766573206572724f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724177617264436f6e74726163743a2063616c6c6572206973206e6f742074686520676f7665726e6f724177617264436f6e74726163743a20496e73756666696369656e742042616c616e63654177617264436f6e74726163743a20636c61696d20617761726473206661696c65644177617264436f6e74726163743a206f6e6c79206465762063616e2072656365697665206177617264734177617264436f6e74726163743a206465762061776172647320657863656564207065726d697474656420616d6f756e74a2646970667358221220a51897cf8f72196b48d14c35bd2f9f73775695e1324ed39557caf4e26551ce2364736f6c634300060c0033

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

000000000000000000000000e1b583dc66e0a24fd9af2dc665f6f5e48978e10600000000000000000000000000000000000000000000000000000000000000090000000000000000000000007ca6eea4df49c315534fee8dc43e0660540cd9ea000000000000000000000000667911bc8b5775616ebcf13d49734cff96d4ec390000000000000000000000000000000000000000000000000000000000b1549b00000000000000000000000000000000000000000000000004e28e2290f00000

-----Decoded View---------------
Arg [0] : _platformToken (address): 0xe1b583dc66e0A24Fd9Af2dC665f6F5e48978E106
Arg [1] : _taxEpoch (uint256): 9
Arg [2] : _treasury (address): 0x7Ca6EEa4DF49c315534feE8dc43E0660540cD9EA
Arg [3] : _dev (address): 0x667911bc8B5775616eBcF13d49734cFf96D4ec39
Arg [4] : _devStartBlock (uint256): 11621531
Arg [5] : _devPerBlock (uint256): 352000000000000000

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000e1b583dc66e0a24fd9af2dc665f6f5e48978e106
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [2] : 0000000000000000000000007ca6eea4df49c315534fee8dc43e0660540cd9ea
Arg [3] : 000000000000000000000000667911bc8b5775616ebcf13d49734cff96d4ec39
Arg [4] : 0000000000000000000000000000000000000000000000000000000000b1549b
Arg [5] : 00000000000000000000000000000000000000000000000004e28e2290f00000


Deployed Bytecode Sourcemap

8690:13141:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19791:484;;;:::i;:::-;;;;;;;;;;;;;;;;7885:26;;;:::i;7954:32::-;;;:::i;12536:1577::-;;;;;;;;;;;;;;;;-1:-1:-1;12536:1577:0;;:::i;17843:1940::-;;;;;;;;;;;;;;;;-1:-1:-1;17843:1940:0;;:::i;:::-;;14142:103;;;;;;;;;;;;;;;;-1:-1:-1;14142:103:0;-1:-1:-1;;;;;14142:103:0;;:::i;17534:301::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17534:301:0;;;;;;;;-1:-1:-1;17534:301:0;;-1:-1:-1;;17534:301:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17534:301:0;;-1:-1:-1;17534:301:0;;-1:-1:-1;;;;;17534:301:0:i;14416:592::-;;;:::i;8494:31::-;;;:::i;8659:23::-;;;:::i;:::-;;;;-1:-1:-1;;;;;8659:23:0;;;;;;;;;;;;;;7099:148;;;:::i;20283:451::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20283:451:0;;;;;;;;:::i;15040:235::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15040:235:0;;;;;;;;:::i;6889:79::-;;;:::i;7791:18::-;;;:::i;7851:27::-;;;:::i;20742:135::-;;;;;;;;;;;;;;;;-1:-1:-1;20742:135:0;;:::i;7918:29::-;;;:::i;7816:28::-;;;:::i;8415:27::-;;;:::i;8850:32::-;;;:::i;10225:538::-;;;;;;;;;;;;;;;;-1:-1:-1;10225:538:0;-1:-1:-1;;;;;10225:538:0;;:::i;8889:41::-;;;;;;;;;;;;;;;;-1:-1:-1;8889:41:0;-1:-1:-1;;;;;8889:41:0;;:::i;:::-;;;;;;;;;;;;;;;;;;14277:107;;;;;;;;;;;;;;;;-1:-1:-1;14277:107:0;-1:-1:-1;;;;;14277:107:0;;:::i;10808:632::-;;;;;;;;;;;;;;;;-1:-1:-1;10808:632:0;-1:-1:-1;;;;;10808:632:0;;:::i;7253:244::-;;;;;;;;;;;;;;;;-1:-1:-1;7253:244:0;-1:-1:-1;;;;;7253:244:0;;:::i;15301:2200::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15301:2200:0;;;;;;;;:::i;11477:1030::-;;;;;;;;;;;;;;;;-1:-1:-1;11477:1030:0;-1:-1:-1;;;;;11477:1030:0;;:::i;19791:484::-;19841:7;19881:8;19934:12;:26;-1:-1:-1;19930:40:0;;19969:1;19962:8;;;;;19930:40;20003:17;19983;20049:47;20082:13;20049:28;:12;20066:10;20049:16;:28::i;:::-;:32;;:47::i;:::-;20031:65;;20121:9;20111:7;:19;20107:161;;;20168:17;;20154:32;;:9;;:13;:32::i;:::-;20147:39;;;;;;;20107:161;20238:17;;20226:30;;:7;;:11;:30::i;19791:484::-;;:::o;7885:26::-;;;;:::o;7954:32::-;;;;:::o;12536:1577::-;12597:7;12616:16;12635:14;:12;:14::i;:::-;12616:33;;12660:11;12686:20;;:::i;:::-;12718:10;12709:20;;;;:8;:20;;;;;;;;12686:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12709:20;;12686:43;;;;;;;;12709:20;12686:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12686:43:0;;-1:-1:-1;;12744:15:0;;12686:43;;-1:-1:-1;12744:26:0;-1:-1:-1;12740:1366:0;;12794:1;12787:8;;;;;;;12740:1366;12908:15;;12855:8;;12837:15;;12896:28;;:7;;:11;:28::i;:::-;12955:12;;;;12996:8;;12878:46;;-1:-1:-1;12955:12:0;12939:13;;12996:15;;13009:1;12996:12;:15::i;:::-;12982:29;;13026:969;13033:4;:13;;;13026:969;;;13107:22;;:::i;:::-;13132:4;:12;;;13145:5;13132:19;;;;;;;;;;;;;;13107:44;;13170:9;13182:52;13230:3;13182:43;13220:4;13182:33;13213:1;13182:26;13194:7;:13;;;13182:7;:11;;:26;;;;:::i;:::-;:30;;:33::i;:43::-;:47;;:52::i;:::-;13170:64;;13264:4;13257;:11;13253:71;;;-1:-1:-1;13300:4:0;13253:71;13342:17;13362:34;13391:4;13362:24;13381:4;13362:7;:14;;;:18;;:24;;;;:::i;:34::-;13342:54;;13432:7;13419:9;:20;13415:565;;13464:17;13484:27;13506:4;13484:17;:7;13496:4;13484:11;:17::i;:27::-;13464:47;-1:-1:-1;13540:31:0;13548:22;13464:47;13562:7;13548:13;:22::i;:::-;13540:3;;:7;:31::i;:::-;13534:37;;13604:1;13594:11;;13628:5;;;;;;13415:565;13709:22;:7;13721:9;13709:11;:22::i;:::-;13699:32;;13760:38;13768:29;13787:9;13768:7;:14;;;:18;;:29;;;;:::i;:::-;13760:3;;:7;:38::i;:::-;13846:8;;13754:44;;-1:-1:-1;13829:26:0;;:12;:5;13839:1;13829:9;:12::i;:::-;:16;;:26::i;:::-;13821:34;;13891:4;:12;;;13882:5;:21;13878:83;;;13932:5;;;;;13878:83;13026:969;;;;;;14017:12;;14009:60;;;;-1:-1:-1;;;14009:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14091:3:0;;-1:-1:-1;;;;;;12536:1577:0;;;;:::o;17843:1940::-;17898:15;17916:14;:12;:14::i;:::-;18031:10;17941:16;18022:20;;;:8;:20;;;;;17898:32;;-1:-1:-1;17941:16:0;18072:21;18022:20;17898:32;18072:6;:21::i;:::-;18110:15;;:26;-1:-1:-1;18106:1536:0;;18171:15;;:28;;18191:7;18171:19;:28::i;:::-;18153:46;;18106:1536;;;18271:15;;18241;;18259:28;;:7;;:11;:28::i;:::-;18320:1;18302:19;;;18352:12;;;;;18393:8;;18241:46;;-1:-1:-1;18352:12:0;18393:15;;:12;:15::i;:::-;18379:29;;18423:1020;18430:13;;;;;;18423:1020;;;18504:9;18516:64;18576:3;18516:55;18566:4;18516:45;18559:1;18516:38;18528:4;:12;;18541:5;18528:19;;;;;;;;;;;;;;;;;;;;;:25;18516:7;;:11;:38::i;:64::-;18504:76;;18601:17;18621:46;18662:4;18621:36;18652:4;18621;:12;;18634:5;18621:19;;;;;;;;;;;;;;;;;;:26;;;:30;;:36;;;;:::i;:46::-;18601:66;;18739:7;18726:9;:20;18722:706;;18771:17;18791:27;18813:4;18791:17;:7;18803:4;18791:11;:17::i;:27::-;18771:47;;18870:41;18901:9;18870:4;:12;;18883:5;18870:19;;;;;;;;;;;;;;;;;;:26;;;:30;;:41;;;;:::i;:::-;18841:4;:12;;18854:5;18841:19;;;;;;;;;;;;;;;;:26;:19;;;;;:26;:70;18945:36;18958:22;:9;18972:7;18958:13;:22::i;:::-;18945:8;;:12;:36::i;:::-;18934:47;;19014:1;19004:11;;19038:5;;;;;18722:706;19119:22;:7;19131:9;19119:11;:22::i;:::-;19109:32;;19175:55;19188:41;19219:9;19188:4;:12;;19201:5;19188:19;;;;;;;:41;19175:8;;:12;:55::i;:::-;19278:8;;19164:66;;-1:-1:-1;19261:26:0;;:12;:5;19271:1;19261:9;:12::i;:26::-;19253:34;;19323:4;:12;;;19314:5;:21;19310:99;;;19364:13;;;:21;;-1:-1:-1;;19364:21:0;;;19310:99;18423:1020;;;;;19457:12;;;:20;;;19500:12;;19492:60;;;;-1:-1:-1;;;19492:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19577:8;;19567:63;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19577:8:0;;19587;;19567:9;:63::i;:::-;18106:1536;;;;19652:68;19662:10;19674:7;19652:68;;;;;;;;;;;;;;;;;:9;:68::i;:::-;19736:39;;;19745:10;19736:39;;;;;;;;;;;;;;;;;;;;;;;;;17843:1940;;;;:::o;14142:103::-;7024:12;:10;:12::i;:::-;7014:6;;-1:-1:-1;;;;;7014:6:0;;;:22;;;7006:67;;;;;-1:-1:-1;;;7006:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7006:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;14211:19:0::1;;::::0;;;:9:::1;:19;::::0;;;;:26;;-1:-1:-1;;14211:26:0::1;14233:4;14211:26;::::0;;14142:103::o;17534:301::-;8977:9;:23;8987:12;:10;:12::i;:::-;-1:-1:-1;;;;;8977:23:0;;;;;;;;;;;;-1:-1:-1;8977:23:0;;;;8969:77;;;;-1:-1:-1;;;8969:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17668:8:::1;:15;17651:6;:13;:32;17643:74;;;::::0;;-1:-1:-1;;;17643:74:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;17733:6;17728:100;17749:6;:13;17745:1;:17;17728:100;;;17784:32;17793:6;17800:1;17793:9;;;;;;;;;;;;;;17804:8;17813:1;17804:11;;;;;;;;;;;;;;17784:8;:32::i;:::-;17764:3;;17728:100;;;;17534:301:::0;;:::o;14416:592::-;14484:3;;-1:-1:-1;;;;;14484:3:0;14470:10;:17;14462:72;;;;-1:-1:-1;;;14462:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14568:14;;14553:12;;:29;14545:91;;;;-1:-1:-1;;;14545:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14647:14;14664:48;14700:11;;14664:31;14681:13;;14664:12;:16;;:31;;;;:::i;:48::-;14647:65;;14723:15;14741:24;14752:12;;14741:6;:10;;:24;;;;:::i;:::-;14723:42;;14789:14;;14780:6;:23;14776:98;;;14849:12;;14830:14;;:32;;:18;:32::i;:::-;14820:42;;14776:98;14894:3;;14884:65;;;;;;;;;;;;;;;-1:-1:-1;;;;;14894:3:0;;14899:7;;14884:65;;;;;:9;:65::i;:::-;14975:12;;:25;;14992:7;14975:16;:25::i;:::-;14960:12;:40;-1:-1:-1;;14416:592:0:o;8494:31::-;;;;:::o;8659:23::-;;;-1:-1:-1;;;;;8659:23:0;;:::o;7099:148::-;7024:12;:10;:12::i;:::-;7014:6;;-1:-1:-1;;;;;7014:6:0;;;:22;;;7006:67;;;;;-1:-1:-1;;;7006:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7006:67:0;;;;;;;;;;;;;;;7190:6:::1;::::0;7169:40:::1;::::0;7206:1:::1;::::0;-1:-1:-1;;;;;7190:6:0::1;::::0;7169:40:::1;::::0;7206:1;;7169:40:::1;7220:6;:19:::0;;-1:-1:-1;;;;;;7220:19:0::1;::::0;;7099:148::o;20283:451::-;20378:3;;-1:-1:-1;;;;;20378:3:0;20364:10;:17;20356:57;;;;;-1:-1:-1;;;20356:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20438:3;;-1:-1:-1;;;;;20432:9:0;;;20438:3;;20432:9;;20424:50;;;;;-1:-1:-1;;;20424:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20485:15;20503:19;:17;:19::i;:::-;20485:37;;20551:7;20541:6;:17;;20533:62;;;;;-1:-1:-1;;;20533:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20606:60;20616:2;20620:6;20606:60;;;;;;;;;;;;;;;;;:9;:60::i;:::-;20697:17;;:29;;20719:6;20697:21;:29::i;:::-;20677:17;:49;-1:-1:-1;;;20283:451:0:o;15040:235::-;8977:9;:23;8987:12;:10;:12::i;:::-;-1:-1:-1;;;;;8977:23:0;;;;;;;;;;;;-1:-1:-1;8977:23:0;;;;8969:77;;;;-1:-1:-1;;;8969:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15151:15:0;::::1;15127:21;15151:15:::0;;;:8:::1;:15;::::0;;;;15195;;:28:::1;::::0;15215:7;15195:19:::1;:28::i;:::-;15177:46:::0;;15239:28:::1;::::0;;-1:-1:-1;;;;;15239:28:0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;9057:1;15040:235:::0;;:::o;6889:79::-;6954:6;;-1:-1:-1;;;;;6954:6:0;6889:79;:::o;7791:18::-;;;-1:-1:-1;;;;;7791:18:0;;:::o;7851:27::-;;;;:::o;20742:135::-;8977:9;:23;8987:12;:10;:12::i;:::-;-1:-1:-1;;;;;8977:23:0;;;;;;;;;;;;-1:-1:-1;8977:23:0;;;;8969:77;;;;-1:-1:-1;;;8969:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20818:8:::1;::::0;20808:61:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;20818:8:0::1;::::0;20828:6;;20808:9:::1;:61::i;:::-;20742:135:::0;:::o;7918:29::-;;;;:::o;7816:28::-;;;;:::o;8415:27::-;;;;:::o;8850:32::-;;;-1:-1:-1;;;;;8850:32:0;;:::o;10225:538::-;10288:7;10307:20;;:::i;:::-;-1:-1:-1;;;;;10330:14:0;;;;;;:8;:14;;;;;;;;10307:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10330:14;;10307:37;;;;;;;;10330:14;10307:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10307:37:0;;-1:-1:-1;;10372:15:0;;10402:13;;;;10307:37;;-1:-1:-1;10372:15:0;10398:334;;;10449:12;;;;10476:245;10517:39;10528:4;:12;;;10541:6;10528:20;;;;;;;;;;;;;;:27;;;10517:6;:10;;:39;;;;:::i;:::-;10602:8;;10508:48;;-1:-1:-1;10584:27:0;;:13;:6;10595:1;10584:10;:13::i;:27::-;10575:36;;10644:4;:12;;;10634:6;:22;10630:76;;;10681:5;;10630:76;10476:245;;;10398:334;;10749:6;10225:538;-1:-1:-1;;;10225:538:0:o;8889:41::-;;;;;;;;;;;;;;;:::o;14277:107::-;7024:12;:10;:12::i;:::-;7014:6;;-1:-1:-1;;;;;7014:6:0;;;:22;;;7006:67;;;;;-1:-1:-1;;;7006:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7006:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;14349:19:0::1;14371:5;14349:19:::0;;;:9:::1;:19;::::0;;;;:27;;-1:-1:-1;;14349:27:0::1;::::0;;14277:107::o;10808:632::-;10873:7;10892:16;10911:28;10930:8;;10911:14;:12;:14::i;:::-;:18;;:28::i;:::-;10892:47;;10950:20;;:::i;:::-;-1:-1:-1;;;;;10973:14:0;;;;;;:8;:14;;;;;;;;10950:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10973:14;;10950:37;;;;;;;;10973:14;10950:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10950:37:0;;-1:-1:-1;;11015:15:0;;11045:13;;;;10950:37;;-1:-1:-1;11015:15:0;11041:368;;;11092:12;;;;11119:279;11156:8;11126:4;:12;;;11139:6;11126:20;;;;;;;;;;;;;;:26;;;:38;11119:279;;11194:39;11205:4;:12;;;11218:6;11205:20;;;;;;;11194:39;11279:8;;11185:48;;-1:-1:-1;11261:27:0;;:13;:6;11272:1;11261:10;:13::i;:27::-;11252:36;;11321:4;:12;;;11311:6;:22;11307:76;;;11358:5;;11307:76;11119:279;;;11041:368;;11426:6;10808:632;-1:-1:-1;;;;10808:632:0:o;7253:244::-;7024:12;:10;:12::i;:::-;7014:6;;-1:-1:-1;;;;;7014:6:0;;;:22;;;7006:67;;;;;-1:-1:-1;;;7006:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7006:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;7342:22:0;::::1;7334:73;;;;-1:-1:-1::0;;;7334:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7444:6;::::0;7423:38:::1;::::0;-1:-1:-1;;;;;7423:38:0;;::::1;::::0;7444:6:::1;::::0;7423:38:::1;::::0;7444:6:::1;::::0;7423:38:::1;7472:6;:17:::0;;-1:-1:-1;;;;;;7472:17:0::1;-1:-1:-1::0;;;;;7472:17:0;;;::::1;::::0;;;::::1;::::0;;7253:244::o;15301:2200::-;8977:9;:23;8987:12;:10;:12::i;:::-;-1:-1:-1;;;;;8977:23:0;;;;;;;;;;;;-1:-1:-1;8977:23:0;;;;8969:77;;;;-1:-1:-1;;;8969:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15382:15:::1;15400:14;:12;:14::i;:::-;-1:-1:-1::0;;;;;15471:15:0;::::1;15447:21;15471:15:::0;;;:8:::1;:15;::::0;;;;15513:12:::1;::::0;::::1;:19:::0;15382:32;;-1:-1:-1;15471:15:0;15509:1945:::1;;15572:85;::::0;;;;::::1;::::0;;;;;;::::1;::::0;;::::1;::::0;;;15554:12:::1;::::0;::::1;:104:::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;15554:104:0;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;::::1;::::0;;;;15673:12;;::::1;:16:::0;;;;15704:12;;::::1;:16:::0;;;15735:13:::1;::::0;::::1;:20:::0;;-1:-1:-1;;15735:20:0::1;::::0;;::::1;::::0;;15509:1945:::1;;;15834:13;::::0;::::1;::::0;::::1;;15830:1613;;;15868:11;15902:4;:12;;;15918:1;15902:17;15898:169;;;-1:-1:-1::0;15950:12:0::1;::::0;::::1;:19:::0;-1:-1:-1;;15950:23:0;15898:169:::1;;;16028:12;::::0;::::1;::::0;:19:::1;::::0;16045:1:::1;16028:16;:19::i;:::-;16022:25;;15898:169;16116:7;16089:4;:12;;16102:3;16089:17;;;;;;;;;;;;;;;;;;:23;;;:34;16085:802;;16175:37;16204:7;16175:4;:12;;16188:3;16175:17;;;;;;;;;;;;;;;;;;:24;;;:28;;:37;;;;:::i;:::-;16148:4;:12;;16161:3;16148:17;;;;;;;;;;;;;;;;;;:24;;:64;;;;16085:802;;;16287:8;::::0;16265:12:::1;::::0;::::1;:19:::0;:30:::1;16261:536;;;16342:121;::::0;;;;::::1;::::0;;;;;;::::1;::::0;;::::1;::::0;;;16324:12:::1;::::0;::::1;:140:::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;16324:140:0;;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;::::1;::::0;16261:536:::1;;;16541:4;:12;;;16525:4;:12;;;:28;16521:114;;;16586:21;16593:4;16599:7;16586:6;:21::i;:::-;16696:7;16661:4;:12;;16674:4;:12;;;16661:26;;;;;;;;;;;;;;;;;;:32;;:42;;;;16766:7;16730:4;:12;;16743:4;:12;;;16730:26;;;;;;;;;;;;;;;;;;:33;;:43;;;;16261:536;16834:33;16858:8;;16834:19;16851:1;16834:4;:12;;;:16;;:19;;;;:::i;:33::-;16819:12;::::0;::::1;:48:::0;16085:802:::1;15830:1613;;;;16984:8;::::0;16962:12:::1;::::0;::::1;:19:::0;:30:::1;16958:364;;;17035:109;::::0;;;;::::1;::::0;;;;;;::::1;::::0;;::::1;::::0;;;17017:12:::1;::::0;::::1;:128:::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;17017:128:0;;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;::::1;::::0;16958:364:::1;;;17229:7;17194:4;:12;;17207:4;:12;;;17194:26;;;;;;;;;;;;;;;;;;:32;;:42;;;;17295:7;17259:4;:12;;17272:4;:12;;;17259:26;;;;;;;;;;;;;;;;;;:33;;:43;;;;16958:364;17355:33;17379:8;;17355:19;17372:1;17355:4;:12;;;:16;;:19;;;;:::i;:33::-;17340:12;::::0;::::1;:48:::0;17407:13:::1;::::0;::::1;:20:::0;;-1:-1:-1;;17407:20:0::1;17423:4;17407:20;::::0;;15830:1613:::1;17469:24;::::0;;-1:-1:-1;;;;;17469:24:0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;9057:1;;15301:2200:::0;;:::o;11477:1030::-;11540:7;11559:15;11577:14;:12;:14::i;:::-;11559:32;;11602:16;11621:21;11633:8;;11621:7;:11;;:21;;;;:::i;:::-;11602:40;;11653:20;;:::i;:::-;-1:-1:-1;;;;;11676:14:0;;;;;;:8;:14;;;;;;;;11653:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11676:14;;11653:37;;;;;;;;11676:14;11653:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11653:37:0;;-1:-1:-1;;11718:15:0;;11748:13;;;;11653:37;;-1:-1:-1;11718:15:0;11744:732;;;11792:8;;11778:11;;11792:15;;11805:1;11792:12;:15::i;:::-;11839:12;;;;11778:29;;-1:-1:-1;11866:599:0;11931:8;11902:4;:12;;;11915:6;11902:20;;;;;;;;;;;;;;:26;;;:37;11898:403;;;11964:9;11976:65;12037:3;11976:56;12027:4;11976:46;12020:1;11976:39;11988:4;:12;;;12001:6;11988:20;;;;;;;;;;;;;;:26;;;11976:7;:11;;:39;;;;:::i;:65::-;11964:77;;12064:17;12084:47;12126:4;12084:37;12116:4;12084;:12;;;12097:6;12084:20;;;;;;;;;;;;;;:27;;;:31;;:37;;;;:::i;:47::-;12064:67;-1:-1:-1;12163:21:0;:6;12064:67;12163:10;:21::i;:::-;12154:30;;11898:403;;;;;12242:39;12253:4;:12;;;12266:6;12253:20;;;;;;;;;;;;;;:27;;;12242:6;:10;;:39;;;;:::i;:::-;12233:48;;11898:403;12346:8;;12328:27;;:13;:6;12339:1;12328:10;:13::i;:27::-;12319:36;;12388:4;:12;;;12378:6;:22;12374:76;;;12425:5;;12374:76;11866:599;;;11744:732;;;12493:6;11477:1030;-1:-1:-1;;;;;11477:1030:0:o;1293:246::-;1351:7;1375:6;1371:47;;-1:-1:-1;1405:1:0;1398:8;;1371:47;1440:5;;;1444:1;1440;:5;:1;1464:5;;;;;:10;1456:56;;;;-1:-1:-1;;;1456:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1530:1;-1:-1:-1;1293:246:0;;;;;:::o;1545:132::-;1603:7;1630:39;1634:1;1637;1630:39;;;;;;;;;;;;;;;;;:3;:39::i;955:136::-;1013:7;1040:43;1044:1;1047;1040:43;;;;;;;;;;;;;;;;;:3;:43::i;20885:97::-;20932:7;20959:15;20967:6;;20959:3;:7;;:15;;;;:::i;:::-;20952:22;;20885:97;:::o;770:179::-;828:7;860:5;;;884:6;;;;876:46;;;;;-1:-1:-1;;;876:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1878:130;1936:7;1963:37;1967:1;1970;1963:37;;;;;;;;;;;;;;;;;:3;:37::i;21318:510::-;21396:16;21415:22;21428:8;;21415;:12;;:22;;;;:::i;:::-;21463:13;;;;21396:41;;-1:-1:-1;21487:303:0;21494:14;;;;;;:55;;;;;21541:8;21512:5;:13;;21526:4;21512:19;;;;;;;;;;;;;;;;;;:25;;;:37;;21494:55;21487:303;;;21585:48;21606:5;:13;;21620:4;21606:19;;;;;;;;;;;;;;;;:26;:19;;;;;:26;;21585:16;;;:20;:48::i;:::-;21566:67;;21671:8;;21655:25;;:11;:4;21664:1;21655:8;:11::i;:25::-;21648:32;;21707:5;:13;;;21699:4;:21;21695:84;;;21741:14;;;:22;;-1:-1:-1;;21741:22:0;;;21695:84;21487:303;;;21800:13;;;;:20;;;;-1:-1:-1;;21318:510:0:o;20990:320::-;21082:10;;21078:225;;21160:13;;;;;;;;;-1:-1:-1;;;;;21160:13:0;-1:-1:-1;;;;;21160:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21160:25:0;21128:13;;:27;;;-1:-1:-1;;;21128:27:0;;;;21117:39;;-1:-1:-1;;;;;21128:13:0;;:25;;:27;;;;;21160:25;;21128:27;;;;;;;:13;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21128:27:0;21117:6;;:10;:39::i;:::-;:68;;21109:120;;;;-1:-1:-1;;;21109:120:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21252:13;;:33;;;-1:-1:-1;;;21252:33:0;;-1:-1:-1;;;;;21252:33:0;;;;;;;;;;;;;;;:13;;;;;:19;;:33;;;;;;;;;;;;;;:13;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21252:33:0;21287:3;;21244:47;;;;-1:-1:-1;;;21244:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20990:320;;;:::o;6216:106::-;6304:10;6216:106;:::o;1683:189::-;1769:7;1804:12;1797:5;1789:28;;;;-1:-1:-1;;;1789:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1828:9;1844:1;1840;:5;;;;;;;1683:189;-1:-1:-1;;;;;1683:189:0:o;1097:190::-;1183:7;1219:12;1211:6;;;;1203:29;;;;-1:-1:-1;;;1203:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1255:5:0;;;1097:190::o;2014:166::-;2100:7;2136:12;2128:6;2120:29;;;;-1:-1:-1;;;2120:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2171:1;2167;:5;;;;;;;2014:166;-1:-1:-1;;;;2014:166:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://a51897cf8f72196b48d14c35bd2f9f73775695e1324ed39557caf4e26551ce23

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.