ETH Price: $3,250.89 (+4.36%)
Gas: 2 Gwei

Token

V-Dimension Cloud (VDC)
 

Overview

Max Total Supply

5,000,000,000 VDC

Holders

1,161

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
560 VDC

Value
$0.00
0xa8616cbf31db3d55ed3607a22ef17e75cb3ced12
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
XDS

Compiler Version
v0.5.8+commit.23d335f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 8 of 8: XDS.sol
pragma solidity ^0.5.8;
import './ERC20.sol';

library address_make_payable {
   function make_payable(address x) internal pure returns (address payable) {
      return address(uint160(x));
   }
}

contract VDPoolBasic {
    function price() external view returns (uint256);
    function buyToken(uint256 ethAmount) external returns (uint256);
    function currentLevel() external view returns(uint256);
    function currentLevelRemaining() external view returns(uint256);
}

contract InvitationBasic {
    function signUp(address referrer, address addr, uint256 phase, uint256 ePhase) external;
    function isRoot(address addr) external view returns (bool);
    function newRoot(address addr, uint256 phase) external;
    function getParent(address addr) external view returns(address);
    function getAncestors(address addr) external view returns(address[] memory);
    function isSignedUp(address addr) public view returns (bool);
    function getPoints(uint256 phase, address addr) external view returns (uint256);
    function newSignupCount(uint256 phase) external view returns (uint256);
    function getTop(uint256 phase) external view returns(address[] memory);
    function distributeBonus(uint256 len) external pure returns(uint256[] memory);
}

contract LuckyDrawBasic {
    function buyTicket(address addr, uint256 phase) external;
    function aggregateIcexWinners(uint256 phase) external;
    function getWinners(uint256 phase) external view returns(address[] memory);
}

contract XDS is StandardToken {
    using address_make_payable for address;

    /*
     * CONSTANTS
     */

    uint16[] public bonusRate = [200, 150, 100, 50];

    /*
     * STATES
     */
    address public settler;
    string public name;
    string public symbol;
    uint8 public constant decimals = 18;

    address public reservedAccount;
    uint256 public reservedAmount;
    address public foundationAddr;

    uint256 public firstBlock = 0;
    uint256 public blockPerPhase = 0;

    mapping (uint256 => uint256) public ethBalance;
    mapping (uint256 => mapping (address => uint256)) public addressInvestment;
    mapping (address => uint256) public totalInvestment;
    mapping (address => uint256) public crBonus; // controlled release bonus
    address[] icexInvestors;
    mapping (uint256 => address[]) public topInvestor;
    mapping (uint256 => bool) public settled;

    InvitationBasic invitationContract;
    LuckyDrawBasic luckydrawContract;
    VDPoolBasic vdPoolContract;

    uint256 public signUpFee = 0;
    uint256 public rootFee = 0;
    uint256 referrerBonus = 0;
    uint256 ancestorBonus = 0;
    uint16 topInvestorCounter = 0;
    uint16 icexCRBonusRatio = 75;
    uint256 crBonusReleasePhases = 10;
    uint256 ethBonusReleasePhases = 20;

    uint256 luckyDrawRate = 10;
    uint256 invitationRate = 70;
    uint256 topInvestorRate = 20;

    uint256 foundationRate = 50;

    uint256 icexRewardETHPool = 0;

    /*
     * EVENTS
     */
    /// Emitted only once after token sale starts.
    event SaleStarted();

    event Settled(uint256 phase, uint256 ethDistributed, uint256 ethToPool);

    event LuckydrawSettle(uint256 phase, address indexed who, uint256 ethAmount);
    event InvitationSettle(uint256 phase, address indexed who, uint256 ethAmount);
    event InvestorSettle(uint256 phase, address indexed who, uint256 ethAmount);

    /*
     * MODIFIERS
     */
    /// only master can call the function
    modifier onlyOwner {
        require(master == msg.sender, "only master can call");
        _;
    }

    constructor(string memory _name, string memory _symbol, uint256 _blockPerPhase, uint256 _totalSupply, uint256 _reservedAmount, address _reservedAccount, address _foundationAddr) public {
        master = msg.sender;  // master account
        settler = master;

        name = _name;
        symbol = _symbol;
        totalSupply = _totalSupply;
        currentSupply = _reservedAmount;

        reservedAmount = _reservedAmount;
        reservedAccount = _reservedAccount;
        balances[reservedAccount] = reservedAmount;
        emit Transfer(address(this), reservedAccount, reservedAmount);

        foundationAddr = _foundationAddr; // foundation account

        blockPerPhase = _blockPerPhase; // block number per phase
    }

    /*
     * EXTERNAL FUNCTIONS
     */

    function setOwner(address newOwner) external onlyOwner {
        master = newOwner;
    }

    function setSettler(address newSettler) external onlyOwner {
        settler = newSettler;
    }

    function transfer(address _to, uint256 _value) external onlyPayloadSize(2 * 32) {
        if ( _to == address(this)) {
            require(_value == rootFee, "only valid value is root fee for this recipient");
            balances[msg.sender] = balances[msg.sender].sub(_value);
            balances[_to] = balances[_to].add(_value);
            emit Transfer(msg.sender, _to, _value);
            require(!isSignedUp(), "not qulifiled as new root");
            invitationContract.newRoot(msg.sender, currentPhase());
        } else if ( _value == signUpFee && invitationContract.isSignedUp(_to) && !isSignedUp()) {
            uint256 fee = _value;
            balances[msg.sender] = balances[msg.sender].sub(fee);

            uint256 phase = currentPhase();
            uint256 ePhase = phase;
            if (phase < bonusRate.length) {
                ePhase = bonusRate.length - 1;
            }

            invitationContract.signUp(_to, msg.sender, phase, ePhase);
            //direct referrer
            balances[_to] = balances[_to].add(referrerBonus);
            emit Transfer(msg.sender, _to, referrerBonus);
            fee = fee.sub(referrerBonus);

            // go up referrer tree
            address[] memory ancestors = invitationContract.getAncestors(msg.sender);
            for ( uint256 i = 0; i < ancestors.length && fee >= ancestorBonus; i++) {
                if (ancestors[i] == address(0)) {
                    break;
                }
                balances[ancestors[i]] = balances[ancestors[i]].add(ancestorBonus);
                emit Transfer(msg.sender, ancestors[i], ancestorBonus);
                fee = fee.sub(ancestorBonus);
            }

            balances[foundationAddr] = balances[foundationAddr].add(fee);
            emit Transfer(msg.sender, foundationAddr, fee);
        } else {
            balances[msg.sender] = balances[msg.sender].sub(_value);
            balances[_to] = balances[_to].add(_value);
            emit Transfer(msg.sender, _to, _value);
        }
    }

    function setInvitationContract(address addr, uint256 _rootFee, uint256 _signUpFee, uint256 _ancestorBonus, uint256 _referrerBonus, uint256 _invitationRate) external onlyOwner {
        invitationContract = InvitationBasic(addr);

        rootFee = _rootFee; // price to be root
        signUpFee = _signUpFee; // sign up ticker price
        ancestorBonus = _ancestorBonus;  // ancestor node bonus
        referrerBonus = _referrerBonus;  // referrer node bonus
        invitationRate = _invitationRate;
    }

    function setVdPoolContract(address addr, uint16 _topInvestorCounter, uint256 _topInvestorRate, uint256 _foundationRate) external onlyOwner {
        vdPoolContract = VDPoolBasic(addr);

        topInvestorCounter = _topInvestorCounter;  // number of top investor used during settlment
        topInvestorRate = _topInvestorRate;  // top investor settle rate

        foundationRate = _foundationRate; // foudation share
    }

    function setLuckyDrawContract(address addr, uint256 _luckyDrawRate) external onlyOwner {
        luckydrawContract = LuckyDrawBasic(addr);
        luckyDrawRate = _luckyDrawRate;
    }

    function settle(uint256 phase) external {
        require(settler == address(0) || settler == msg.sender, "only settler can call");
        require(phase >= 0, "invalid phase");
        require(phase < currentPhase(), "phase not matured yet");
        require (!settled[phase], "phase already settled");

        uint256 pool = 0;
        uint256 toPool = 0;
        if (phase < bonusRate.length) {
            if(ethBalance[phase] > 0) {
                toPool = ethBalance[phase].mul(bonusRate.length).div(bonusRate.length + ethBonusReleasePhases);
                icexRewardETHPool = icexRewardETHPool.add(toPool);
                transferToFoundation(ethBalance[phase].sub(toPool));
            }
            // settling last phase of ICEX, combine pools
            if (phase == bonusRate.length - 1) {
                pool = icexRewardETHPool;
            }
        } else {
            pool = ethBalance[phase];
            distributeCRBonus(phase);
        }

        if (pool > 0 ) {
            settleLuckydraw(phase, pool, phase < bonusRate.length);
            settleTopInvestor(phase, pool);
            settleInvitation(phase, pool);
        }

        settled[phase] = true;
        emit Settled(phase, pool, toPool);
    }

    function start(uint256 _firstBlock) external onlyOwner {
        require(!saleStarted(), "Sale has not started yet");
        require(firstBlock == 0 , "Resonance already started");
        firstBlock = _firstBlock;
        emit SaleStarted();
    }

    /// @dev This default function allows token to be purchased by directly
    /// sending ether to this smart contract.
    function () external payable {
        issueToken(msg.sender);
    }

    function price() external view returns(uint256) {
        return vdPoolContract.price();
    }

    function currentLevel() external view returns(uint256) {
        return vdPoolContract.currentLevel();
    }

    function currentRemainingEth() external view returns(uint256) {
        return vdPoolContract.currentLevelRemaining();
    }

    function currentBonusRate() external view returns(uint16) {
        uint256 phase = currentPhase();
        if (phase < bonusRate.length){
            return bonusRate[phase];
        }
        return 0;
    }

    function isSignedUp() public view returns (bool) {
        return invitationContract.isSignedUp(msg.sender);
    }

    function topInvestors(uint256 phase) external view returns (address[] memory) {
        return topInvestor[phase];
    }

    function luckyWinners(uint256 phase) external view returns (address[] memory) {
        return luckydrawContract.getWinners(phase);
    }

    function invitationWinners(uint256 phase) external view returns(address[] memory) {
        return invitationContract.getTop(phase);
    }

    function drain(uint256 amount) external onlyOwner {
        transferToFoundation(amount);
    }

    /*
     * PUBLIC FUNCTIONS
     */
    function saleStarted() public view returns (bool) {
        return (firstBlock > 0 && block.number >= firstBlock);
    }

    function currentPhase() public view returns(uint256) {
        return (block.number - firstBlock).div(blockPerPhase);
    }

    function issueToken(address recipient) public payable {
        require(saleStarted(), "Sale is not in progress");
        require(msg.value >= 0.1 ether, "minimal of 0.1 eth required");
        uint256 phase = currentPhase();
        uint256 totalEth = msg.value;

        updateTopInvestor(recipient, msg.value, phase);
        // ICEX
        if (phase < bonusRate.length){
            uint256 bonus = totalEth.mul(bonusRate[phase]).div(100);
            totalEth = totalEth.add(bonus);
            if (crBonus[recipient] == 0 ) {
                icexInvestors.push(recipient);
            }
        }

        uint256 tokens = vdPoolContract.buyToken(totalEth);

        totalInvestment[recipient] = totalInvestment[recipient].add(msg.value);
        currentSupply = currentSupply.add(tokens);

        require(currentSupply <= totalSupply, "exceed token supply cap");

        if (phase < bonusRate.length){
            uint256 crTokens = tokens.mul(bonusRate[phase]).div(100 + bonusRate[phase]).mul(icexCRBonusRatio).div(100);
            require(crTokens >= 0 && tokens > crTokens, 'invalid cr bonus value');
            crBonus[recipient] = crBonus[recipient].add(crTokens.div(crBonusReleasePhases));
            balances[recipient] = balances[recipient].add(tokens).sub(crTokens);
            emit Transfer(address(this), recipient, tokens.sub(crTokens));
        } else {
            balances[recipient] = balances[recipient].add(tokens);
            emit Transfer(address(this), recipient, tokens);
        }

        uint256 foundation = msg.value.mul(foundationRate).div(100);
        transferToFoundation(foundation);
        ethBalance[phase] = ethBalance[phase].add(msg.value).sub(foundation);
        luckydrawContract.buyTicket(recipient, phase);
    }

    /*
     * INTERNAL FUNCTIONS
     */

    function updateTopInvestor(address addr, uint256 ethAmount, uint256 phase) internal {
        uint256 ePhase = phase;
        if (phase < bonusRate.length) {
            ePhase = bonusRate.length - 1; // save it for the last phase of ICEX
        }
        addressInvestment[ePhase][addr] = addressInvestment[ePhase][addr].add(ethAmount);

        for (uint256 k = 0; k < topInvestor[ePhase].length; k++){
            if (topInvestor[ePhase][k] == addr) {
                for (uint256 i = k; i > 0; i--){
                    if (addressInvestment[ePhase][topInvestor[ePhase][i]] > addressInvestment[ePhase][topInvestor[ePhase][i-1]]) {
                        (topInvestor[ePhase][i], topInvestor[ePhase][i-1]) = (topInvestor[ePhase][i-1], topInvestor[ePhase][i]);
                    } else {
                      break;
                    }
                }
                return;
            }
        }

        if (topInvestor[ePhase].length < topInvestorCounter){
            topInvestor[ePhase].push(addr);
        } else if (addressInvestment[ePhase][addr] > addressInvestment[ePhase][topInvestor[ePhase][topInvestor[ePhase].length - 1]]){
            topInvestor[ePhase][topInvestor[ePhase].length - 1] = addr;
        }

        for (uint256 i = topInvestor[ePhase].length - 1; i > 0; i--){
            if (addressInvestment[ePhase][topInvestor[ePhase][i]] > addressInvestment[ePhase][topInvestor[ePhase][i-1]]) {
                (topInvestor[ePhase][i], topInvestor[ePhase][i-1]) = (topInvestor[ePhase][i-1], topInvestor[ePhase][i]);
            } else {
              break;
            }
        }
    }

    function transferToFoundation(uint256 ethAmount) internal {
        address payable addr = foundationAddr.make_payable();
        addr.transfer(ethAmount);
    }

    function settleLuckydraw(uint256 phase, uint256 ethAmount, bool isIcex) internal {
        if (isIcex) {
            luckydrawContract.aggregateIcexWinners(phase);
        }
        address[] memory winners = luckydrawContract.getWinners(phase);

        uint256 bonus = ethAmount.mul(luckyDrawRate).div(100).div(winners.length);
        if (winners.length == 0 && bonus > 0){
            transferToFoundation(bonus);
            return;
        }

        for (uint256 i = 0; i < winners.length; i++) {
            address payable addr = winners[i].make_payable();
            addr.transfer(bonus);
            emit LuckydrawSettle(phase, winners[i], bonus);
        }
    }

    function settleTopInvestor (uint256 phase, uint256 ethAmount) internal {
        uint256 bonus = ethAmount.mul(topInvestorRate).div(100);
        if (topInvestor[phase].length == 0 && bonus > 0){
            transferToFoundation(bonus);
            return;
        }

        uint256 len = topInvestor[phase].length;
        uint256[] memory factors = invitationContract.distributeBonus(len);
        for (uint256 i = 0; i < topInvestor[phase].length; i++) {
            address payable addr = topInvestor[phase][i].make_payable();
            uint256 iBonus = bonus.mul(factors[i]).div(len).div(len);
            addr.transfer(iBonus);
            emit InvestorSettle(phase, addr, iBonus);
        }
    }

    function settleInvitation (uint256 phase, uint256 ethAmount) internal {
        uint256 totalBonus = ethAmount.mul(invitationRate).div(100);
        address[] memory winners = invitationContract.getTop(phase);
        if (winners.length == 0 && totalBonus > 0){
            transferToFoundation(totalBonus);
            return;
        }

        uint256 len = winners.length;
        uint256[] memory factors = invitationContract.distributeBonus(len);
        for (uint256 i = 0; i < factors.length; i++) {
            uint256 bonus = totalBonus.mul(factors[i]).div(len).div(len);
            address payable addr = winners[i].make_payable();
            addr.transfer(bonus);
            emit InvitationSettle(phase, winners[i], bonus);
        }
    }

    function distributeCRBonus(uint256 phase) internal {
        if (phase < bonusRate.length || phase >= bonusRate.length + crBonusReleasePhases) {
          return;
        }

        for (uint256 i = 0; i < icexInvestors.length; i++) {
            address addr = icexInvestors[i];
            balances[addr] = balances[addr].add(crBonus[addr]);
            emit Transfer(address(this), addr, crBonus[addr]);
        }
    }
}

File 1 of 8: ERC20.sol
pragma solidity ^0.5.8;
import './SafeMath.sol';

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 */
contract ERC20Basic {
  uint256 public totalSupply;
  uint256 public currentSupply;
  address public master;
  function balanceOf(address who) external view returns (uint256);
  function transfer(address to, uint256 value) external;
  event Transfer(address indexed from, address indexed to, uint256 value);
}

/**
 * @title Basic token
 * @dev Basic version of StandardToken, with no allowances.
 */
contract BasicToken is ERC20Basic {
  using SafeMath for uint256;
  mapping(address => uint256) balances;

  /**
   * @dev Fix for the ERC20 short address attack.
   */
  modifier onlyPayloadSize(uint256 size) {
     if(msg.data.length < size + 4) {
       revert();
     }
     _;
  }

  /**
  * @dev Gets the balance of the specified address.
  * @param _owner The address to query the the balance of.
  * @return An uint256 representing the amount owned by the passed address.
  */
  function balanceOf(address _owner) external view returns (uint256 balance) {
    return balances[_owner];
  }
}

/**
 * @title ERC20 interface
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) external view returns (uint256);
  function transferFrom(address from, address to, uint256 value) external;
  function approve(address spender, uint256 value) external;
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @title Standard ERC20 token
 *
 * @dev Implemantation of the basic standart token.
 */
contract StandardToken is BasicToken, ERC20 {

  mapping (address => mapping (address => uint256)) allowed;

  /**
   * @dev Transfer tokens from one address to another
   * @param _from address The address which you want to send tokens from
   * @param _to address The address which you want to transfer to
   * @param _value uint256 the amout of tokens to be transfered
   */
  function transferFrom(address _from, address _to, uint256 _value) external onlyPayloadSize(3 * 32) {
    uint256 _allowance = allowed[_from][msg.sender];

    // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met
    // if (_value > _allowance) throw;

    balances[_to] = balances[_to].add(_value);
    balances[_from] = balances[_from].sub(_value);
    allowed[_from][msg.sender] = _allowance.sub(_value);
    emit Transfer(_from, _to, _value);
  }

  /**
   * @dev Aprove the passed address to spend the specified amount of tokens on beahlf of msg.sender.
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint256 _value) external {

    // To change the approve amount you first have to reduce the addresses`
    //  allowance to zero by calling `approve(_spender, 0)` if it is not
    //  already 0 to mitigate the race condition described here:
    if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) revert();

    allowed[msg.sender][_spender] = _value;
    emit Approval(msg.sender, _spender, _value);
  }

  /**
   * @dev Function to check the amount of tokens than an owner allowed to a spender.
   * @param _owner address The address which owns the funds.
   * @param _spender address The address which will spend the funds.
   * @return A uint256 specifing the amount of tokens still avaible for the spender.
   */
  function allowance(address _owner, address _spender) external view returns (uint256 remaining) {
    return allowed[_owner][_spender];
  }
}

File 2 of 8: Invitation.sol
pragma solidity ^0.5.8;
import './SafeMath.sol';

contract InvitationBasic {
    function signUp(address referrer, address addr, uint256 phase, uint256 ePhase) external;
    function getParent(address addr) external view returns(address);
    function getAncestors(address addr) external view returns(address[] memory);
    function isRoot(address addr) external view returns (bool);
    function isSignedUp(address addr) public view returns (bool);
    function newRoot(address addr, uint256 phase) external;
    function newSignupCount(uint256 phase) external view returns (uint);
    function getPoints(uint256 phase, address addr) external view returns (uint256);
    function getTop(uint256 phase) external view returns(address[] memory);
    function distributeBonus(uint256 len) external pure returns(uint256[] memory);
}

contract Invitation is InvitationBasic {
    using SafeMath for uint256;

    /*
     * STATES
     */
    address public master;
    address public caller;

    bool public paused;

    mapping (address => bool) public rootList;
    mapping (address => address) public referenceParentList;
    mapping (address => address[]) public referenceChildList;
    mapping (uint256 => mapping (address => uint256)) public addressPoints;
    mapping (uint256 => address[]) public newSignupList;
    mapping (uint256 => address[]) public inviterList;
    mapping (uint256 => address[]) public top;

    uint maxChildrenCount = 0;
    uint256 basePoints = 100000;
    uint256 pointRate = 0;
    uint256 maxPointLevel = 10;
    uint256 winnerCount = 10;

    /*
     * MODIFIERS
     */
    /// only master can call the function
    modifier onlyOwner {
        require(master == msg.sender, "only owner can call");
        _;
    }

    /// only master can call the function
    modifier onlyCaller {
        require(caller == msg.sender, "only caller can call");
        _;
    }

    /// function not paused
    modifier notPaused {
        require(paused == false, "function is paused");
        _;
    }

    function setPause(bool value) external onlyOwner {
        paused = value;
    }

    function setWinnerCount(uint256 _count) external onlyOwner {
        winnerCount = _count;
    }

    function isSignedUp(address addr) public view returns (bool) {
        return rootList[addr] == true || referenceParentList[addr] != address(0);
    }

    function signUp(address referrer, address addr, uint256 phase, uint256 ePhase) external onlyCaller notPaused {
        require(isSignedUp(referrer), "invalid referrer");
        require(!isSignedUp(addr), "address has signed up");

        setUpParent(referrer, addr);
        updatePoints(referrer, addr, ePhase);
        newSignupList[phase].push(addr);
    }

    function isRoot(address addr) external view returns (bool) {
        return rootList[addr] == true;
    }

    function newRoot(address addr, uint256 phase) external onlyCaller notPaused {
        require(!isSignedUp(addr), "address has signed up");
        rootList[addr] = true;
        newSignupList[phase].push(addr);
    }

    function getTop(uint256 phase) external view returns(address[] memory) {
      return top[phase];
    }

    /*
    function getTopInviter(uint256 phase, uint256 topN) external onlyCaller returns(address[] memory) {
        if (inviterList[phase].length == 0 || top[phase].length > 0){
            return top[phase];
        }
        uint256 k = topN;
        randomizedSelect(inviterList[phase], 0, inviterList[phase].length - 1, k, phase);

        for (uint256 i = 0; i< k && i < inviterList[phase].length; i++){
            top[phase].push(inviterList[phase][i]);
        }
        return top[phase];
    }
    */

    function getChild(address addr) external view returns(address[] memory) {
        return referenceChildList[addr];
    }

    function getPoints(uint256 phase, address addr) external view returns (uint256) {
        return addressPoints[phase][addr];
    }

    function getParent(address addr) external view returns(address) {
        return referenceParentList[addr];
    }

    function getNewSignup(uint256 phase) external view returns(address[] memory) {
        return newSignupList[phase];
    }

    function newSignupCount(uint256 phase) external view returns (uint) {
        return newSignupList[phase].length;
    }

    function setCaller(address who) external onlyOwner {
        caller = who;
    }

    function setOwner(address who) external onlyOwner {
        master = who;
    }

    constructor(uint _maxChildrenCount, uint _pointRate, uint256 _winnerCount) public {
        master = msg.sender; // master account
        maxChildrenCount = _maxChildrenCount;  // child node max number
        pointRate = _pointRate;  // e.g. 618
        winnerCount = _winnerCount;
    }

    function setUpParent(address pAddress, address addr) internal {
        pAddress = findParent(pAddress);
        referenceParentList[addr] = pAddress;
        referenceChildList[pAddress].push(addr);
    }

    function updateTop(address addr, uint256 phase) internal {
        for (uint256 k = 0; k < top[phase].length; k++){
            if (top[phase][k] == addr) {
                for (uint256 i = k; i > 0; i--){
                    if (addressPoints[phase][top[phase][i]] > addressPoints[phase][top[phase][i-1]]) {
                        (top[phase][i], top[phase][i-1]) = (top[phase][i-1], top[phase][i]);
                    } else {
                        break;
                    }
                }
                return;
            }
        }

        if (top[phase].length < winnerCount){
            top[phase].push(addr);
        } else if (addressPoints[phase][addr] > addressPoints[phase][top[phase][top[phase].length - 1]]){
            top[phase][top[phase].length - 1] = addr;
        }

        for (uint256 i = top[phase].length - 1; i > 0; i--){
            if (addressPoints[phase][top[phase][i]] > addressPoints[phase][top[phase][i-1]]) {
                (top[phase][i], top[phase][i-1]) = (top[phase][i-1], top[phase][i]);
            } else {
              break;
            }
        }
    }

    function updatePoints(address referrer, address addr, uint256 phase) internal {
        uint256 points = basePoints;
        if (addressPoints[phase][referrer] == 0) {
            inviterList[phase].push(referrer);
        }
        addressPoints[phase][referrer] = addressPoints[phase][referrer].add(points);
        points = points.mul(pointRate).div(1000);
        updateTop(referrer, phase);

        address parent = referenceParentList[addr];
        uint256 level = 0;
        while (parent != address(0) && level < maxPointLevel){
            level = level.add(1);
            if (parent == referrer) {
                parent = referenceParentList[parent];
                continue;
            }
            if (addressPoints[phase][parent] == 0) {
                inviterList[phase].push(parent);
            }
            addressPoints[phase][parent] = addressPoints[phase][parent].add(points);
            points = points.mul(pointRate).div(1000);
            updateTop(parent, phase);
            parent = referenceParentList[parent];
        }
    }

    function findParent(address root) internal view returns (address) {
        uint len = 10000;
        address[] memory temp = new address[](len);
        uint startIndex = 0;
        uint currentIndex = 0;
        temp[startIndex] = root;
        while (true){
            address currentAddress = temp[startIndex];
            startIndex++;
            if (startIndex == len){
                startIndex = 0;
            }
            if (referenceChildList[currentAddress].length < maxChildrenCount){
                return currentAddress;
            }else {
                for(uint i = 0; i< referenceChildList[currentAddress].length; i++){
                    currentIndex++;
                    if (currentIndex == len){
                        currentIndex = 0;
                    }
                    temp[currentIndex] = referenceChildList[currentAddress][i];
                }
            }
        }
    }

    /*
    function randomizedSelect(address[] storage addressList, uint left, uint right, uint256 k, uint256 phase) internal{
        if (left == right) {
            return;
        }

        if (left < right) {
            uint mid = partition(addressList, left, right, phase);
            uint i = mid - left + 1;
            if (i == k){
                return;
            }

            if (k < i) {
                return randomizedSelect(addressList, left, mid - 1, k, phase);
            } else {
                return randomizedSelect(addressList, mid + 1, right, k - i, phase);
            }
        }
    }

    function partition(address[] storage addressList, uint left, uint right, uint256 phase) internal returns(uint) {
        address tmp = addressList[left];

        while (left < right) {
            while (left < right && addressPoints[phase][addressList[right]] < addressPoints[phase][tmp]) {
                right--;
            }
            addressList[left] = addressList[right];
            while (left < right && addressPoints[phase][addressList[left]] >= addressPoints[phase][tmp]) {
                left++;
            }
            addressList[right] = addressList[left];
        }
        addressList[left] = tmp;
        return left;
    }
    */

    function distributeBonus(uint256 len) external pure returns(uint256[] memory) {
        uint256[] memory factors = new uint256[](len);
        for (uint256 i = 0; i < len; i++) {
            if (i < len.div(2)) {
              factors[i] = len.add(len.div(2).sub(i));
            } else {
              if (len % 2 == 0 ) {
                factors[i] = len.add(len.div(2)).sub(1).sub(i);
              } else {
                factors[i] = len.add(len.div(2)).sub(i);
              }
            }
        }
        return factors;
    }

    function getAncestors(address addr) external view returns(address[] memory) {
        address[] memory ancestors = new address[](maxPointLevel);
        address parent = referenceParentList[addr];

        for (uint256 i = 0; parent != address(0) && i < maxPointLevel; i++) {
            ancestors[i] = parent;
            parent = referenceParentList[parent];
        }
        return ancestors;
    }
}

File 3 of 8: LuckyDraw.sol
pragma solidity ^0.5.8;

contract LuckyDrawBasic {
    function buyTicket(address addr, uint256 phase) external;
    function aggregateIcexWinners(uint256 phase) external;
    function getWinners(uint256 phase) external view returns(address[] memory);
}

contract LuckyDraw is LuckyDrawBasic {
    /*
     * STATES
     */
    address public master;
    address public caller;

    bool public paused;

    uint winnerCount = 10;
    mapping (uint256 => address[]) winnerList;
    mapping (uint256 => mapping(address => bool)) playerList;
    mapping (uint256 => uint256) playerNumbers;
    uint nonce = 0;

    /*
     * MODIFIERS
     */
    /// only master can call the function
    modifier onlyOwner {
        require(master == msg.sender, "only owner can call");
        _;
    }

    /// only master can call the function
    modifier onlyCaller {
        require(caller == msg.sender, "only caller can call");
        _;
    }

    /// function not paused
    modifier notPaused {
        require(paused == false, "function is paused");
        _;
    }

    constructor() public {
        master = msg.sender;
    }

    function setCaller(address who) external onlyOwner {
        caller = who;
    }

    function setOwner(address who) external onlyOwner {
        master = who;
    }

    function setPause(bool value) external onlyOwner {
        paused = value;
    }

    function buyTicket(address addr, uint256 phase) external onlyCaller notPaused {
        if (!playerList[phase][addr]){
            playerNumbers[phase]++;
            if (winnerList[phase].length < winnerCount){
                winnerList[phase].push(addr);
            }else {
                uint index = randomIndex(addr, playerNumbers[phase]);
                if (index < winnerCount){
                    winnerList[phase][index] = addr;
                }
            }
            playerList[phase][addr] = true;
        }
    }

    // costs a bit, but will only invoke once, and paid by operator
    function aggregateIcexWinners(uint256 phase) external onlyCaller notPaused {
        for(uint i = 0 ; i < phase; ++i) {
            address[] memory candidates = winnerList[i];
            for(uint j = 0; j < candidates.length; ++j) {
                if (!playerList[phase][candidates[j]]) {
                    if (winnerList[phase].length < winnerCount) {
                        winnerList[phase].push(candidates[j]);
                    } else {
                        uint index = randomIndex(candidates[j], winnerCount * (phase + 1));
                        if (index < winnerCount){
                            winnerList[phase][index] = candidates[j];
                        }
                    }
                }
            }
        }
    }

    function getWinners(uint256 phase) external view returns(address[] memory) {
        return winnerList[phase];
    }

    function randomIndex(address addr, uint number) internal returns (uint) {
        uint randomnumber = uint(keccak256(abi.encodePacked(now, addr, nonce))) % number;
        nonce++;
        return randomnumber;
    }
}

File 4 of 8: Migrations.sol
pragma solidity >=0.4.25 <0.6.0;

contract Migrations {
  address public owner;
  uint public last_completed_migration;

  modifier restricted() {
    if (msg.sender == owner) _;
  }

  constructor() public {
    owner = msg.sender;
  }

  function setCompleted(uint completed) public restricted {
    last_completed_migration = completed;
  }

  function upgrade(address new_address) public restricted {
    Migrations upgraded = Migrations(new_address);
    upgraded.setCompleted(last_completed_migration);
  }
}

File 5 of 8: SafeMath.sol
pragma solidity ^0.5.8;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, "SafeMath: division by zero");
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0, "SafeMath: modulo by zero");
        return a % b;
    }
}

File 6 of 8: VDPool.sol
pragma solidity ^0.5.8;
import './SafeMath.sol';

contract VDPoolBasic {
    function price() external view returns(uint256);
    function currentLevel() external view returns(uint256);
    function currentLevelRemaining() external view returns(uint256);
}

contract VDPoolThrottler {
    function getCooldownBlocks() external view returns(uint256);
}

contract VDPool is VDPoolBasic {
    using SafeMath for uint256;
    /*
     * STATES
     */
    address public master;
    address public caller;

    uint256 public ethCapacity = 0;
    uint256 public basicExchangeRate = 0;
    uint256 public currentLevel = 0;
    uint256 public currentLevelStartBlock = 0;
    uint256 public cooldownBlocks = 0; // by default wait 1 block before enterring next level
    VDPoolThrottler throttlerContract;
    uint256 public currentPrice = 0;
    uint256 public currentLevelRemaining = 0;

    bool public paused;

    /*
     * EVENTS
     */
    event LevelDescend(uint256 level, uint256 price, uint256 startBlock, uint256 cooldownBlocks, uint256 currentBlock);

    /*
     * MODIFIERS
     */
    /// only master can call the function
    modifier onlyOwner {
        require(master == msg.sender, "only owner can call");
        _;
    }

    /// only master can call the function
    modifier onlyCaller {
        require(caller == msg.sender, "only caller can call");
        _;
    }

    /// function not paused
    modifier notPaused {
        require(paused == false, "function is paused");
        _;
    }

    constructor(uint256 _ethCapacity, uint256 _currentLevel, uint256 _basicExchangeRate) public {
        master = msg.sender;
        ethCapacity = _ethCapacity;
        currentLevel = _currentLevel;
        currentPrice = (currentLevel.sub(1)).mul(10).add(_basicExchangeRate);
        currentLevelRemaining = _ethCapacity;
        basicExchangeRate = _basicExchangeRate;
    }

    function setPause(bool value) external onlyOwner {
        paused = value;
    }

    function setCaller(address who) external onlyOwner {
        caller = who;
    }

    function setOwner(address who) external onlyOwner {
        master = who;
    }

    function setCooldownBlocks(uint256 bn) external onlyOwner {
        cooldownBlocks = bn;
    }

    function setThrottlerContract(address contractAddress) external onlyOwner {
        throttlerContract = VDPoolThrottler(contractAddress);
    }

    function price() external view returns (uint256) {
        uint256 tokens = computeTokenAmount(1 ether);
        return tokens;
    }

    function computeTokenAmount(uint256 ethAmount) public view returns (uint256) {
        uint256 tokens = ethAmount.mul(currentPrice);
        return tokens;
    }

    function buyToken(uint256 ethAmount) external onlyCaller notPaused returns (uint256) {
        require(currentLevelStartBlock <= block.number, "cooling down");
        uint256 eth = ethAmount;
        uint256 tokens = 0;
        while (eth > 0) {
            if (eth <= currentLevelRemaining) {
                tokens = tokens + computeTokenAmount(eth);
                currentLevelRemaining = currentLevelRemaining.sub(eth);
                eth = 0;
            }else {
                tokens = tokens + computeTokenAmount(currentLevelRemaining);
                eth = eth.sub(currentLevelRemaining);
                currentLevelRemaining = 0;
            }

            if (currentLevelRemaining == 0){
                currentLevel = currentLevel.sub(1);
                require (currentLevel > 0, "end of levels");
                currentPrice = (currentLevel.sub(1)).mul(10).add(basicExchangeRate);
                currentLevelRemaining = ethCapacity;
                if (address(throttlerContract) != address(0)) {
                    cooldownBlocks = throttlerContract.getCooldownBlocks();
                }
                if (currentLevelStartBlock > block.number ) {
                    // handling the case of desending multiple level in one tx
                    currentLevelStartBlock = currentLevelStartBlock + cooldownBlocks;
                } else {
                    currentLevelStartBlock = block.number + cooldownBlocks;
                }
                emit LevelDescend(currentLevel, currentPrice, currentLevelStartBlock, cooldownBlocks, block.number);
            }
        }

        return tokens;
    }
}

File 7 of 8: VDPoolThrottler.sol
pragma solidity ^0.5.8;


contract VDPoolThrottler {
    function getCooldownBlocks() external view returns(uint256);
}

contract DummyThrottler is VDPoolThrottler {
    function getCooldownBlocks() external view returns(uint256) {
      return 1;
  }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"currentPhase","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newSettler","type":"address"}],"name":"setSettler","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isSignedUp","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"reservedAccount","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentBonusRate","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"firstBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"settled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"bonusRate","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"phase","type":"uint256"}],"name":"invitationWinners","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"_rootFee","type":"uint256"},{"name":"_signUpFee","type":"uint256"},{"name":"_ancestorBonus","type":"uint256"},{"name":"_referrerBonus","type":"uint256"},{"name":"_invitationRate","type":"uint256"}],"name":"setInvitationContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"currentRemainingEth","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"topInvestor","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"saleStarted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rootFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"_luckyDrawRate","type":"uint256"}],"name":"setLuckyDrawContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"}],"name":"issueToken","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"blockPerPhase","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"phase","type":"uint256"}],"name":"settle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"signUpFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_firstBlock","type":"uint256"}],"name":"start","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"totalInvestment","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"address"}],"name":"addressInvestment","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentLevel","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"price","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"_topInvestorCounter","type":"uint16"},{"name":"_topInvestorRate","type":"uint256"},{"name":"_foundationRate","type":"uint256"}],"name":"setVdPoolContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"settler","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"phase","type":"uint256"}],"name":"topInvestors","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"crBonus","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"ethBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"phase","type":"uint256"}],"name":"luckyWinners","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"master","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"drain","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"reservedAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"foundationAddr","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_blockPerPhase","type":"uint256"},{"name":"_totalSupply","type":"uint256"},{"name":"_reservedAmount","type":"uint256"},{"name":"_reservedAccount","type":"address"},{"name":"_foundationAddr","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[],"name":"SaleStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"phase","type":"uint256"},{"indexed":false,"name":"ethDistributed","type":"uint256"},{"indexed":false,"name":"ethToPool","type":"uint256"}],"name":"Settled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"phase","type":"uint256"},{"indexed":true,"name":"who","type":"address"},{"indexed":false,"name":"ethAmount","type":"uint256"}],"name":"LuckydrawSettle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"phase","type":"uint256"},{"indexed":true,"name":"who","type":"address"},{"indexed":false,"name":"ethAmount","type":"uint256"}],"name":"InvitationSettle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"phase","type":"uint256"},{"indexed":true,"name":"who","type":"address"},{"indexed":false,"name":"ethAmount","type":"uint256"}],"name":"InvestorSettle","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]

6080604052604051806080016040528060c860ff168152602001609660ff168152602001606460ff168152602001603260ff1681525060059060046200004792919062000447565b506000600c556000600d55600060185560006019556000601a556000601b556000601c60006101000a81548161ffff021916908361ffff160217905550604b601c60026101000a81548161ffff021916908361ffff160217905550600a601d556014601e55600a601f556046602055601460215560326022556000602355348015620000d257600080fd5b506040516200614438038062006144833981018060405260e0811015620000f857600080fd5b8101908080516401000000008111156200011157600080fd5b828101905060208101848111156200012857600080fd5b81518560018202830111640100000000821117156200014657600080fd5b505092919060200180516401000000008111156200016357600080fd5b828101905060208101848111156200017a57600080fd5b81518560018202830111640100000000821117156200019857600080fd5b5050929190602001805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866007908051906020019062000291929190620004f7565b508560089080519060200190620002aa929190620004f7565b50836000819055508260018190555082600a8190555081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a5460036000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a546040518082815260200191505060405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600d8190555050505050505050620005da565b82805482825590600052602060002090600f01601090048101928215620004e45791602002820160005b83821115620004b257835183826101000a81548161ffff021916908360ff160217905550926020019260020160208160010104928301926001030262000471565b8015620004e25782816101000a81549061ffff0219169055600201602081600101049283019260010302620004b2565b505b509050620004f391906200057e565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200053a57805160ff19168380011785556200056b565b828001600101855582156200056b579182015b828111156200056a5782518255916020019190600101906200054d565b5b5090506200057a9190620005b2565b5090565b620005af91905b80821115620005ab57600081816101000a81549061ffff02191690555060010162000585565b5090565b90565b620005d791905b80821115620005d3576000816000905550600101620005b9565b5090565b90565b615b5a80620005ea6000396000f3fe6080604052600436106102725760003560e01c8063771282f61161014f578063a7848dca116100c1578063c25225981161007a578063c252259814610ed5578063dd62ed3e14610f65578063ee97f7f314610fea578063f6b19c7414611041578063f92c45b71461107c578063feafb79b146110a757610272565b8063a7848dca14610c6c578063a9059cbb14610cdf578063ab221a7614610d3a578063ad012f1c14610d91578063ba750fb214610e21578063bf17f2f214610e8657610272565b806395805dad1161011357806395805dad14610a7757806395d89b4114610ab25780639b2b524f14610b425780639c42abb314610ba75780639dc4b9c914610c16578063a035b1fe14610c4157610272565b8063771282f61461097757806389034082146109a25780638d5a1fb9146109e65780638df8280014610a115780639278b58714610a4c57610272565b806328345780116101e85780634152dc9f116101ac5780634152dc9f146107ad5780634cd1b1d2146107d85780635c474f9e1461085d5780635faeb3351461088c5780636b6bdec2146108b757806370a082311461091257610272565b806328345780146105bf5780632896ef47146106125780633087110514610669578063313ce567146106f9578063386914601461072a57610272565b806318160ddd1161023a57806318160ddd14610435578063191d1cb4146104605780631bec0d391461048f5780631d902fe9146104e6578063231b02681461051957806323b872dd1461054457610272565b8063055ad42e1461027d57806306fdde03146102a857806307f19eba14610338578063095ea7b31461038957806313af4035146103e4575b61027b336110fe565b005b34801561028957600080fd5b50610292611a91565b6040518082815260200191505060405180910390f35b3480156102b457600080fd5b506102bd611ab1565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102fd5780820151818401526020810190506102e2565b50505050905090810190601f16801561032a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034457600080fd5b506103876004803603602081101561035b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b4f565b005b34801561039557600080fd5b506103e2600480360360408110156103ac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c56565b005b3480156103f057600080fd5b506104336004803603602081101561040757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dd8565b005b34801561044157600080fd5b5061044a611edf565b6040518082815260200191505060405180910390f35b34801561046c57600080fd5b50610475611ee5565b604051808215151515815260200191505060405180910390f35b34801561049b57600080fd5b506104a4611fc6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104f257600080fd5b506104fb611fec565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561052557600080fd5b5061052e612048565b6040518082815260200191505060405180910390f35b34801561055057600080fd5b506105bd6004803603606081101561056757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061204e565b005b3480156105cb57600080fd5b506105f8600480360360208110156105e257600080fd5b810190808035906020019092919050505061230e565b604051808215151515815260200191505060405180910390f35b34801561061e57600080fd5b5061064b6004803603602081101561063557600080fd5b810190808035906020019092919050505061232e565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561067557600080fd5b506106a26004803603602081101561068c57600080fd5b8101908080359060200190929190505050612363565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156106e55780820151818401526020810190506106ca565b505050509050019250505060405180910390f35b34801561070557600080fd5b5061070e612470565b604051808260ff1660ff16815260200191505060405180910390f35b34801561073657600080fd5b506107ab600480360360c081101561074d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050612475565b005b3480156107b957600080fd5b506107c26125a4565b6040518082815260200191505060405180910390f35b3480156107e457600080fd5b5061081b600480360360408110156107fb57600080fd5b81019080803590602001909291908035906020019092919050505061264e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561086957600080fd5b50610872612699565b604051808215151515815260200191505060405180910390f35b34801561089857600080fd5b506108a16126b3565b6040518082815260200191505060405180910390f35b3480156108c357600080fd5b50610910600480360360408110156108da57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506126b9565b005b34801561091e57600080fd5b506109616004803603602081101561093557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127c8565b6040518082815260200191505060405180910390f35b34801561098357600080fd5b5061098c612811565b6040518082815260200191505060405180910390f35b6109e4600480360360208110156109b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110fe565b005b3480156109f257600080fd5b506109fb612817565b6040518082815260200191505060405180910390f35b348015610a1d57600080fd5b50610a4a60048036036020811015610a3457600080fd5b810190808035906020019092919050505061281d565b005b348015610a5857600080fd5b50610a61612c68565b6040518082815260200191505060405180910390f35b348015610a8357600080fd5b50610ab060048036036020811015610a9a57600080fd5b8101908080359060200190929190505050612c6e565b005b348015610abe57600080fd5b50610ac7612e5a565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b07578082015181840152602081019050610aec565b50505050905090810190601f168015610b345780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b4e57600080fd5b50610b9160048036036020811015610b6557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ef8565b6040518082815260200191505060405180910390f35b348015610bb357600080fd5b50610c0060048036036040811015610bca57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f10565b6040518082815260200191505060405180910390f35b348015610c2257600080fd5b50610c2b612f35565b6040518082815260200191505060405180910390f35b348015610c4d57600080fd5b50610c56612fdf565b6040518082815260200191505060405180910390f35b348015610c7857600080fd5b50610cdd60048036036080811015610c8f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff1690602001909291908035906020019092919080359060200190929190505050613089565b005b348015610ceb57600080fd5b50610d3860048036036040811015610d0257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506131be565b005b348015610d4657600080fd5b50610d4f613f05565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d9d57600080fd5b50610dca60048036036020811015610db457600080fd5b8101908080359060200190929190505050613f2b565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610e0d578082015181840152602081019050610df2565b505050509050019250505060405180910390f35b348015610e2d57600080fd5b50610e7060048036036020811015610e4457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613fcc565b6040518082815260200191505060405180910390f35b348015610e9257600080fd5b50610ebf60048036036020811015610ea957600080fd5b8101908080359060200190929190505050613fe4565b6040518082815260200191505060405180910390f35b348015610ee157600080fd5b50610f0e60048036036020811015610ef857600080fd5b8101908080359060200190929190505050613ffc565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610f51578082015181840152602081019050610f36565b505050509050019250505060405180910390f35b348015610f7157600080fd5b50610fd460048036036040811015610f8857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614109565b6040518082815260200191505060405180910390f35b348015610ff657600080fd5b50610fff614190565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561104d57600080fd5b5061107a6004803603602081101561106457600080fd5b81019080803590602001909291905050506141b6565b005b34801561108857600080fd5b50611091614285565b6040518082815260200191505060405180910390f35b3480156110b357600080fd5b506110bc61428b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b611106612699565b611178576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f53616c65206973206e6f7420696e2070726f677265737300000000000000000081525060200191505060405180910390fd5b67016345785d8a00003410156111f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6d696e696d616c206f6620302e3120657468207265717569726564000000000081525060200191505060405180910390fd5b6000611200611a91565b905060003490506112128334846142b1565b60058054905082101561134357600061127b606461126d6005868154811061123657fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1685614c3290919063ffffffff16565b614cb890919063ffffffff16565b90506112908183614d4790919063ffffffff16565b91506000601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156113415760128490806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b505b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d296bf1836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b1580156113ba57600080fd5b505af11580156113ce573d6000803e3d6000fd5b505050506040513d60208110156113e457600080fd5b8101908080519060200190929190505050905061144934601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506114a181600154614d4790919063ffffffff16565b6001819055506000546001541115611521576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f65786365656420746f6b656e20737570706c792063617000000000000000000081525060200191505060405180910390fd5b60058054905083101561184a5760006115f960646115eb601c60029054906101000a900461ffff1661ffff166115dd6005898154811061155d57fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff1660640161ffff166115cf60058b8154811061159857fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1689614c3290919063ffffffff16565b614cb890919063ffffffff16565b614c3290919063ffffffff16565b614cb890919063ffffffff16565b90506000811015801561160b57508082115b61167d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f696e76616c696420637220626f6e75732076616c75650000000000000000000081525060200191505060405180910390fd5b6116e3611695601d5483614cb890919063ffffffff16565b601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061178a8161177c84600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b614dcf90919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61182f8486614dcf90919063ffffffff16565b6040518082815260200191505060405180910390a350611945565b61189c81600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35b600061196f606461196160225434614c3290919063ffffffff16565b614cb890919063ffffffff16565b905061197a81614e58565b6119b2816119a434600e600089815260200190815260200160002054614d4790919063ffffffff16565b614dcf90919063ffffffff16565b600e600086815260200190815260200160002081905550601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166366a5ef2f86866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611a7257600080fd5b505af1158015611a86573d6000803e3d6000fd5b505050505050505050565b6000611aac600d54600c544303614cb890919063ffffffff16565b905090565b60078054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b475780601f10611b1c57610100808354040283529160200191611b47565b820191906000526020600020905b815481529060010190602001808311611b2a57829003601f168201915b505050505081565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008114158015611ce457506000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b15611cee57600080fd5b80600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a35050565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60005481565b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166322b6ffca336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611f8657600080fd5b505afa158015611f9a573d6000803e3d6000fd5b505050506040513d6020811015611fb057600080fd5b8101908080519060200190929190505050905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611ff7611a91565b905060058054905081101561203f576005818154811061201357fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff16915050612045565b60009150505b90565b600c5481565b6060600481016000369050101561206457600080fd5b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061213783600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121cc83600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614dcf90919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506122228382614dcf90919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35050505050565b60146020528060005260406000206000915054906101000a900460ff1681565b6005818154811061233b57fe5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b6060601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166337caa8b6836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156123d857600080fd5b505afa1580156123ec573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561241657600080fd5b81019080805164010000000081111561242e57600080fd5b8281019050602081018481111561244457600080fd5b815185602082028301116401000000008211171561246157600080fd5b50509291905050509050919050565b601281565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612538576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b85601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550846019819055508360188190555082601b8190555081601a8190555080602081905550505050505050565b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328d807ad6040518163ffffffff1660e01b815260040160206040518083038186803b15801561260e57600080fd5b505afa158015612622573d6000803e3d6000fd5b505050506040513d602081101561263857600080fd5b8101908080519060200190929190505050905090565b6013602052816000526040600020818154811061266757fe5b906000526020600020016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600c541180156126ae5750600c544310155b905090565b60195481565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461277c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b81601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601f819055505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60015481565b600d5481565b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806128c757503373ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612939576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6f6e6c7920736574746c65722063616e2063616c6c000000000000000000000081525060200191505060405180910390fd5b60008110156129b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f696e76616c69642070686173650000000000000000000000000000000000000081525060200191505060405180910390fd5b6129b8611a91565b8110612a2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f7068617365206e6f74206d61747572656420796574000000000000000000000081525060200191505060405180910390fd5b6014600082815260200190815260200160002060009054906101000a900460ff1615612ac0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f706861736520616c726561647920736574746c6564000000000000000000000081525060200191505060405180910390fd5b60008090506000809050600580549050831015612ba0576000600e6000858152602001908152602001600020541115612b8557612b39601e5460058054905001612b2b600580549050600e600088815260200190815260200160002054614c3290919063ffffffff16565b614cb890919063ffffffff16565b9050612b5081602354614d4790919063ffffffff16565b602381905550612b84612b7f82600e600087815260200190815260200160002054614dcf90919063ffffffff16565b614e58565b5b600160058054905003831415612b9b5760235491505b612bc0565b600e6000848152602001908152602001600020549150612bbf83614ee8565b5b6000821115612bf057612bdb838360058054905086106150e8565b612be583836153f5565b612bef8383615710565b5b60016014600085815260200190815260200160002060006101000a81548160ff0219169083151502179055507f321f57f44af402708b8b3bad0bd10012cd568d8696946e26edeb86178bb7c27e83838360405180848152602001838152602001828152602001935050505060405180910390a1505050565b60185481565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b612d39612699565b15612dac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f53616c6520686173206e6f74207374617274656420796574000000000000000081525060200191505060405180910390fd5b6000600c5414612e24576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f5265736f6e616e636520616c726561647920737461727465640000000000000081525060200191505060405180910390fd5b80600c819055507f912ee23dde46ec889d6748212cce445d667f7041597691dc89e8549ad8bc0acb60405160405180910390a150565b60088054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612ef05780601f10612ec557610100808354040283529160200191612ef0565b820191906000526020600020905b815481529060010190602001808311612ed357829003601f168201915b505050505081565b60106020528060005260406000206000915090505481565b600f602052816000526040600020602052806000526040600020600091509150505481565b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc4b9c96040518163ffffffff1660e01b815260040160206040518083038186803b158015612f9f57600080fd5b505afa158015612fb3573d6000803e3d6000fd5b505050506040513d6020811015612fc957600080fd5b8101908080519060200190929190505050905090565b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a035b1fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561304957600080fd5b505afa15801561305d573d6000803e3d6000fd5b505050506040513d602081101561307357600080fd5b8101908080519060200190929190505050905090565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461314c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b83601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601c60006101000a81548161ffff021916908361ffff160217905550816021819055508060228190555050505050565b604060048101600036905010156131d457600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613539576019548214613262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180615adf602f913960400191505060405180910390fd5b6132b482600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614dcf90919063ffffffff16565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061334982600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36133f9611ee5565b1561346c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f6e6f742071756c6966696c6564206173206e657720726f6f740000000000000081525060200191505060405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d7f4b53336134b3611a91565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561351c57600080fd5b505af1158015613530573d6000803e3d6000fd5b50505050613f00565b601854821480156136205750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166322b6ffca846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156135e457600080fd5b505afa1580156135f8573d6000803e3d6000fd5b505050506040513d602081101561360e57600080fd5b81019080805190602001909291905050505b8015613631575061362f611ee5565b155b15613d6f57600082905061368d81600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614dcf90919063ffffffff16565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006136da611a91565b905060008190506005805490508210156136fa5760016005805490500390505b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390859294873385856040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001945050505050600060405180830381600087803b1580156137df57600080fd5b505af11580156137f3573d6000803e3d6000fd5b5050505061384b601a54600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601a546040518082815260200191505060405180910390a361390a601a5484614dcf90919063ffffffff16565b92506060601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ff747cc0336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b1580156139ad57600080fd5b505afa1580156139c1573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156139eb57600080fd5b810190808051640100000000811115613a0357600080fd5b82810190506020810184811115613a1957600080fd5b8151856020820283011164010000000082111715613a3657600080fd5b5050929190505050905060008090505b815181108015613a585750601b548510155b15613c0557600073ffffffffffffffffffffffffffffffffffffffff16828281518110613a8157fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415613aaa57613c05565b613b11601b5460036000858581518110613ac057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b60036000848481518110613b2157fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550818181518110613b7357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601b546040518082815260200191505060405180910390a3613bf6601b5486614dcf90919063ffffffff16565b94508080600101915050613a46565b50613c7a8460036000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b60036000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a350505050613eff565b613dc182600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614dcf90919063ffffffff16565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e5682600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35b5b505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060136000838152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015613fc057602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311613f76575b50505050509050919050565b60116020528060005260406000206000915090505481565b600e6020528060005260406000206000915090505481565b6060601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b1426a4836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b15801561407157600080fd5b505afa158015614085573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156140af57600080fd5b8101908080516401000000008111156140c757600080fd5b828101905060208101848111156140dd57600080fd5b81518560208202830111640100000000821117156140fa57600080fd5b50509291905050509050919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614279576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b61428281614e58565b50565b600a5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008190506005805490508210156142cf5760016005805490500390505b61433283600f600084815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600f600083815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008090505b6013600083815260200190815260200160002080549050811015614709578473ffffffffffffffffffffffffffffffffffffffff166013600084815260200190815260200160002082815481106143df57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156146fc5760008190505b60008111156146f457600f6000848152602001908152602001600020600060136000868152602001908152602001600020600184038154811061446b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f6000858152602001908152602001600020600060136000878152602001908152602001600020848154811061450457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156146e15760136000848152602001908152602001600020600182038154811061459157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166013600085815260200190815260200160002082815481106145da57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660136000868152602001908152602001600020838154811061462357fe5b90600052602060002001600060136000888152602001908152602001600020600186038154811061465057fe5b9060005260206000200160008491906101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508391906101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506146e6565b6146f4565b80806001900391505061442c565b505050614c2d565b808060010191505061438c565b50601c60009054906101000a900461ffff1661ffff16601360008381526020019081526020016000208054905010156147b857601360008281526020019081526020016000208490806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050614943565b600f600082815260200190815260200160002060006013600084815260200190815260200160002060016013600086815260200190815260200160002080549050038154811061480457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f600083815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156149425783601360008381526020019081526020016000206001601360008581526020019081526020016000208054905003815481106148f957fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b6000600160136000848152602001908152602001600020805490500390505b6000811115614c2a57600f600083815260200190815260200160002060006013600085815260200190815260200160002060018403815481106149a157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f60008481526020019081526020016000206000601360008681526020019081526020016000208481548110614a3a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115614c1757601360008381526020019081526020016000206001820381548110614ac757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601360008481526020019081526020016000208281548110614b1057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601360008581526020019081526020016000208381548110614b5957fe5b906000526020600020016000601360008781526020019081526020016000206001860381548110614b8657fe5b9060005260206000200160008491906101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508391906101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050614c1c565b614c2a565b808060019003915050614962565b50505b505050565b600080831415614c455760009050614cb2565b6000828402905082848281614c5657fe5b0414614cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615b0e6021913960400191505060405180910390fd5b809150505b92915050565b6000808211614d2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b6000828481614d3a57fe5b0490508091505092915050565b600080828401905083811015614dc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600082821115614e47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b600082840390508091505092915050565b6000614e9b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16615ad4565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015614ee3573d6000803e3d6000fd5b505050565b600580549050811080614f045750601d54600580549050018110155b15614f0e576150e5565b60008090505b6012805490508110156150e357600060128281548110614f3057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050614fee601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3508080600101915050614f14565b505b50565b801561517c57601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638cf2371c846040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561516357600080fd5b505af1158015615177573d6000803e3d6000fd5b505050505b6060601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b1426a4856040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156151f157600080fd5b505afa158015615205573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561522f57600080fd5b81019080805164010000000081111561524757600080fd5b8281019050602081018481111561525d57600080fd5b815185602082028301116401000000008211171561527a57600080fd5b5050929190505050905060006152c182516152b360646152a5601f5489614c3290919063ffffffff16565b614cb890919063ffffffff16565b614cb890919063ffffffff16565b9050600082511480156152d45750600081115b156152e9576152e281614e58565b50506153f0565b60008090505b82518110156153ec57600061532c84838151811061530957fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16615ad4565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015615374573d6000803e3d6000fd5b5083828151811061538157fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f1bf242fce473b656e6d1d08dcb25b01042413f08c12e2818d923a6e29d4c1afb8885604051808381526020018281526020019250505060405180910390a25080806001019150506152ef565b5050505b505050565b600061541f606461541160215485614c3290919063ffffffff16565b614cb890919063ffffffff16565b9050600060136000858152602001908152602001600020805490501480156154475750600081115b1561545b5761545581614e58565b5061570c565b6000601360008581526020019081526020016000208054905090506060601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393c1e292836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156154eb57600080fd5b505afa1580156154ff573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561552957600080fd5b81019080805164010000000081111561554157600080fd5b8281019050602081018481111561555757600080fd5b815185602082028301116401000000008211171561557457600080fd5b5050929190505050905060008090505b601360008781526020019081526020016000208054905081101561570757600061560b6013600089815260200190815260200160002083815481106155c557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16615ad4565b905060006156598561564b8761563d88888151811061562657fe5b60200260200101518b614c3290919063ffffffff16565b614cb890919063ffffffff16565b614cb890919063ffffffff16565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156156a1573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff167f1eac6055421b211dbe224185ed987d950ab8cdad41c7e6cfa729cf3c92c5eed78983604051808381526020018281526020019250505060405180910390a250508080600101915050615584565b505050505b5050565b600061573a606461572c60205485614c3290919063ffffffff16565b614cb890919063ffffffff16565b90506060601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166337caa8b6856040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156157b157600080fd5b505afa1580156157c5573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156157ef57600080fd5b81019080805164010000000081111561580757600080fd5b8281019050602081018481111561581d57600080fd5b815185602082028301116401000000008211171561583a57600080fd5b50509291905050509050600081511480156158555750600082115b1561586a5761586382614e58565b5050615ad0565b6000815190506060601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393c1e292836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156158e557600080fd5b505afa1580156158f9573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561592357600080fd5b81019080805164010000000081111561593b57600080fd5b8281019050602081018481111561595157600080fd5b815185602082028301116401000000008211171561596e57600080fd5b5050929190505050905060008090505b8151811015615aca5760006159d3846159c5866159b78787815181106159a057fe5b60200260200101518b614c3290919063ffffffff16565b614cb890919063ffffffff16565b614cb890919063ffffffff16565b90506000615a098684815181106159e657fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16615ad4565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015615a51573d6000803e3d6000fd5b50858381518110615a5e57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f70098ec6480a4d5390c19f0a21daad08444bf356e3cf48f99b4e65517edb1f8d8a84604051808381526020018281526020019250505060405180910390a25050808060010191505061597e565b50505050505b5050565b600081905091905056fe6f6e6c792076616c69642076616c756520697320726f6f742066656520666f72207468697320726563697069656e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a165627a7a72305820e5035ff13373008b1863bfb433199e29c407914cd84c4b0fbdaa3b093ece0796002900000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000b3b000000000000000000000000000000000000000001027e72f1f12813088000000000000000000000000000000000000000000000005a790ea17ace06a960000000000000000000000000000000aa3e3ad42952958f2d81357bf8cd5dcb77ed93000000000000000000000000079756ba86affc6cdda424aa7a061fec56077f6130000000000000000000000000000000000000000000000000000000000000011562d44696d656e73696f6e20436c6f756400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035644430000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102725760003560e01c8063771282f61161014f578063a7848dca116100c1578063c25225981161007a578063c252259814610ed5578063dd62ed3e14610f65578063ee97f7f314610fea578063f6b19c7414611041578063f92c45b71461107c578063feafb79b146110a757610272565b8063a7848dca14610c6c578063a9059cbb14610cdf578063ab221a7614610d3a578063ad012f1c14610d91578063ba750fb214610e21578063bf17f2f214610e8657610272565b806395805dad1161011357806395805dad14610a7757806395d89b4114610ab25780639b2b524f14610b425780639c42abb314610ba75780639dc4b9c914610c16578063a035b1fe14610c4157610272565b8063771282f61461097757806389034082146109a25780638d5a1fb9146109e65780638df8280014610a115780639278b58714610a4c57610272565b806328345780116101e85780634152dc9f116101ac5780634152dc9f146107ad5780634cd1b1d2146107d85780635c474f9e1461085d5780635faeb3351461088c5780636b6bdec2146108b757806370a082311461091257610272565b806328345780146105bf5780632896ef47146106125780633087110514610669578063313ce567146106f9578063386914601461072a57610272565b806318160ddd1161023a57806318160ddd14610435578063191d1cb4146104605780631bec0d391461048f5780631d902fe9146104e6578063231b02681461051957806323b872dd1461054457610272565b8063055ad42e1461027d57806306fdde03146102a857806307f19eba14610338578063095ea7b31461038957806313af4035146103e4575b61027b336110fe565b005b34801561028957600080fd5b50610292611a91565b6040518082815260200191505060405180910390f35b3480156102b457600080fd5b506102bd611ab1565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102fd5780820151818401526020810190506102e2565b50505050905090810190601f16801561032a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034457600080fd5b506103876004803603602081101561035b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b4f565b005b34801561039557600080fd5b506103e2600480360360408110156103ac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c56565b005b3480156103f057600080fd5b506104336004803603602081101561040757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dd8565b005b34801561044157600080fd5b5061044a611edf565b6040518082815260200191505060405180910390f35b34801561046c57600080fd5b50610475611ee5565b604051808215151515815260200191505060405180910390f35b34801561049b57600080fd5b506104a4611fc6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104f257600080fd5b506104fb611fec565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561052557600080fd5b5061052e612048565b6040518082815260200191505060405180910390f35b34801561055057600080fd5b506105bd6004803603606081101561056757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061204e565b005b3480156105cb57600080fd5b506105f8600480360360208110156105e257600080fd5b810190808035906020019092919050505061230e565b604051808215151515815260200191505060405180910390f35b34801561061e57600080fd5b5061064b6004803603602081101561063557600080fd5b810190808035906020019092919050505061232e565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561067557600080fd5b506106a26004803603602081101561068c57600080fd5b8101908080359060200190929190505050612363565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156106e55780820151818401526020810190506106ca565b505050509050019250505060405180910390f35b34801561070557600080fd5b5061070e612470565b604051808260ff1660ff16815260200191505060405180910390f35b34801561073657600080fd5b506107ab600480360360c081101561074d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050612475565b005b3480156107b957600080fd5b506107c26125a4565b6040518082815260200191505060405180910390f35b3480156107e457600080fd5b5061081b600480360360408110156107fb57600080fd5b81019080803590602001909291908035906020019092919050505061264e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561086957600080fd5b50610872612699565b604051808215151515815260200191505060405180910390f35b34801561089857600080fd5b506108a16126b3565b6040518082815260200191505060405180910390f35b3480156108c357600080fd5b50610910600480360360408110156108da57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506126b9565b005b34801561091e57600080fd5b506109616004803603602081101561093557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127c8565b6040518082815260200191505060405180910390f35b34801561098357600080fd5b5061098c612811565b6040518082815260200191505060405180910390f35b6109e4600480360360208110156109b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110fe565b005b3480156109f257600080fd5b506109fb612817565b6040518082815260200191505060405180910390f35b348015610a1d57600080fd5b50610a4a60048036036020811015610a3457600080fd5b810190808035906020019092919050505061281d565b005b348015610a5857600080fd5b50610a61612c68565b6040518082815260200191505060405180910390f35b348015610a8357600080fd5b50610ab060048036036020811015610a9a57600080fd5b8101908080359060200190929190505050612c6e565b005b348015610abe57600080fd5b50610ac7612e5a565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b07578082015181840152602081019050610aec565b50505050905090810190601f168015610b345780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b4e57600080fd5b50610b9160048036036020811015610b6557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ef8565b6040518082815260200191505060405180910390f35b348015610bb357600080fd5b50610c0060048036036040811015610bca57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f10565b6040518082815260200191505060405180910390f35b348015610c2257600080fd5b50610c2b612f35565b6040518082815260200191505060405180910390f35b348015610c4d57600080fd5b50610c56612fdf565b6040518082815260200191505060405180910390f35b348015610c7857600080fd5b50610cdd60048036036080811015610c8f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff1690602001909291908035906020019092919080359060200190929190505050613089565b005b348015610ceb57600080fd5b50610d3860048036036040811015610d0257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506131be565b005b348015610d4657600080fd5b50610d4f613f05565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d9d57600080fd5b50610dca60048036036020811015610db457600080fd5b8101908080359060200190929190505050613f2b565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610e0d578082015181840152602081019050610df2565b505050509050019250505060405180910390f35b348015610e2d57600080fd5b50610e7060048036036020811015610e4457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613fcc565b6040518082815260200191505060405180910390f35b348015610e9257600080fd5b50610ebf60048036036020811015610ea957600080fd5b8101908080359060200190929190505050613fe4565b6040518082815260200191505060405180910390f35b348015610ee157600080fd5b50610f0e60048036036020811015610ef857600080fd5b8101908080359060200190929190505050613ffc565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610f51578082015181840152602081019050610f36565b505050509050019250505060405180910390f35b348015610f7157600080fd5b50610fd460048036036040811015610f8857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614109565b6040518082815260200191505060405180910390f35b348015610ff657600080fd5b50610fff614190565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561104d57600080fd5b5061107a6004803603602081101561106457600080fd5b81019080803590602001909291905050506141b6565b005b34801561108857600080fd5b50611091614285565b6040518082815260200191505060405180910390f35b3480156110b357600080fd5b506110bc61428b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b611106612699565b611178576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f53616c65206973206e6f7420696e2070726f677265737300000000000000000081525060200191505060405180910390fd5b67016345785d8a00003410156111f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6d696e696d616c206f6620302e3120657468207265717569726564000000000081525060200191505060405180910390fd5b6000611200611a91565b905060003490506112128334846142b1565b60058054905082101561134357600061127b606461126d6005868154811061123657fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1685614c3290919063ffffffff16565b614cb890919063ffffffff16565b90506112908183614d4790919063ffffffff16565b91506000601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156113415760128490806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b505b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d296bf1836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b1580156113ba57600080fd5b505af11580156113ce573d6000803e3d6000fd5b505050506040513d60208110156113e457600080fd5b8101908080519060200190929190505050905061144934601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506114a181600154614d4790919063ffffffff16565b6001819055506000546001541115611521576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f65786365656420746f6b656e20737570706c792063617000000000000000000081525060200191505060405180910390fd5b60058054905083101561184a5760006115f960646115eb601c60029054906101000a900461ffff1661ffff166115dd6005898154811061155d57fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff1660640161ffff166115cf60058b8154811061159857fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1689614c3290919063ffffffff16565b614cb890919063ffffffff16565b614c3290919063ffffffff16565b614cb890919063ffffffff16565b90506000811015801561160b57508082115b61167d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f696e76616c696420637220626f6e75732076616c75650000000000000000000081525060200191505060405180910390fd5b6116e3611695601d5483614cb890919063ffffffff16565b601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061178a8161177c84600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b614dcf90919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61182f8486614dcf90919063ffffffff16565b6040518082815260200191505060405180910390a350611945565b61189c81600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35b600061196f606461196160225434614c3290919063ffffffff16565b614cb890919063ffffffff16565b905061197a81614e58565b6119b2816119a434600e600089815260200190815260200160002054614d4790919063ffffffff16565b614dcf90919063ffffffff16565b600e600086815260200190815260200160002081905550601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166366a5ef2f86866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611a7257600080fd5b505af1158015611a86573d6000803e3d6000fd5b505050505050505050565b6000611aac600d54600c544303614cb890919063ffffffff16565b905090565b60078054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b475780601f10611b1c57610100808354040283529160200191611b47565b820191906000526020600020905b815481529060010190602001808311611b2a57829003601f168201915b505050505081565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008114158015611ce457506000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b15611cee57600080fd5b80600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a35050565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60005481565b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166322b6ffca336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611f8657600080fd5b505afa158015611f9a573d6000803e3d6000fd5b505050506040513d6020811015611fb057600080fd5b8101908080519060200190929190505050905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611ff7611a91565b905060058054905081101561203f576005818154811061201357fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff16915050612045565b60009150505b90565b600c5481565b6060600481016000369050101561206457600080fd5b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061213783600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121cc83600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614dcf90919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506122228382614dcf90919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35050505050565b60146020528060005260406000206000915054906101000a900460ff1681565b6005818154811061233b57fe5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b6060601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166337caa8b6836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156123d857600080fd5b505afa1580156123ec573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561241657600080fd5b81019080805164010000000081111561242e57600080fd5b8281019050602081018481111561244457600080fd5b815185602082028301116401000000008211171561246157600080fd5b50509291905050509050919050565b601281565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612538576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b85601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550846019819055508360188190555082601b8190555081601a8190555080602081905550505050505050565b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328d807ad6040518163ffffffff1660e01b815260040160206040518083038186803b15801561260e57600080fd5b505afa158015612622573d6000803e3d6000fd5b505050506040513d602081101561263857600080fd5b8101908080519060200190929190505050905090565b6013602052816000526040600020818154811061266757fe5b906000526020600020016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600c541180156126ae5750600c544310155b905090565b60195481565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461277c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b81601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601f819055505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60015481565b600d5481565b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806128c757503373ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612939576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6f6e6c7920736574746c65722063616e2063616c6c000000000000000000000081525060200191505060405180910390fd5b60008110156129b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f696e76616c69642070686173650000000000000000000000000000000000000081525060200191505060405180910390fd5b6129b8611a91565b8110612a2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f7068617365206e6f74206d61747572656420796574000000000000000000000081525060200191505060405180910390fd5b6014600082815260200190815260200160002060009054906101000a900460ff1615612ac0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f706861736520616c726561647920736574746c6564000000000000000000000081525060200191505060405180910390fd5b60008090506000809050600580549050831015612ba0576000600e6000858152602001908152602001600020541115612b8557612b39601e5460058054905001612b2b600580549050600e600088815260200190815260200160002054614c3290919063ffffffff16565b614cb890919063ffffffff16565b9050612b5081602354614d4790919063ffffffff16565b602381905550612b84612b7f82600e600087815260200190815260200160002054614dcf90919063ffffffff16565b614e58565b5b600160058054905003831415612b9b5760235491505b612bc0565b600e6000848152602001908152602001600020549150612bbf83614ee8565b5b6000821115612bf057612bdb838360058054905086106150e8565b612be583836153f5565b612bef8383615710565b5b60016014600085815260200190815260200160002060006101000a81548160ff0219169083151502179055507f321f57f44af402708b8b3bad0bd10012cd568d8696946e26edeb86178bb7c27e83838360405180848152602001838152602001828152602001935050505060405180910390a1505050565b60185481565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b612d39612699565b15612dac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f53616c6520686173206e6f74207374617274656420796574000000000000000081525060200191505060405180910390fd5b6000600c5414612e24576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f5265736f6e616e636520616c726561647920737461727465640000000000000081525060200191505060405180910390fd5b80600c819055507f912ee23dde46ec889d6748212cce445d667f7041597691dc89e8549ad8bc0acb60405160405180910390a150565b60088054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612ef05780601f10612ec557610100808354040283529160200191612ef0565b820191906000526020600020905b815481529060010190602001808311612ed357829003601f168201915b505050505081565b60106020528060005260406000206000915090505481565b600f602052816000526040600020602052806000526040600020600091509150505481565b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc4b9c96040518163ffffffff1660e01b815260040160206040518083038186803b158015612f9f57600080fd5b505afa158015612fb3573d6000803e3d6000fd5b505050506040513d6020811015612fc957600080fd5b8101908080519060200190929190505050905090565b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a035b1fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561304957600080fd5b505afa15801561305d573d6000803e3d6000fd5b505050506040513d602081101561307357600080fd5b8101908080519060200190929190505050905090565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461314c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b83601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601c60006101000a81548161ffff021916908361ffff160217905550816021819055508060228190555050505050565b604060048101600036905010156131d457600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613539576019548214613262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180615adf602f913960400191505060405180910390fd5b6132b482600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614dcf90919063ffffffff16565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061334982600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36133f9611ee5565b1561346c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f6e6f742071756c6966696c6564206173206e657720726f6f740000000000000081525060200191505060405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d7f4b53336134b3611a91565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561351c57600080fd5b505af1158015613530573d6000803e3d6000fd5b50505050613f00565b601854821480156136205750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166322b6ffca846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156135e457600080fd5b505afa1580156135f8573d6000803e3d6000fd5b505050506040513d602081101561360e57600080fd5b81019080805190602001909291905050505b8015613631575061362f611ee5565b155b15613d6f57600082905061368d81600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614dcf90919063ffffffff16565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006136da611a91565b905060008190506005805490508210156136fa5760016005805490500390505b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390859294873385856040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001945050505050600060405180830381600087803b1580156137df57600080fd5b505af11580156137f3573d6000803e3d6000fd5b5050505061384b601a54600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601a546040518082815260200191505060405180910390a361390a601a5484614dcf90919063ffffffff16565b92506060601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ff747cc0336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b1580156139ad57600080fd5b505afa1580156139c1573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156139eb57600080fd5b810190808051640100000000811115613a0357600080fd5b82810190506020810184811115613a1957600080fd5b8151856020820283011164010000000082111715613a3657600080fd5b5050929190505050905060008090505b815181108015613a585750601b548510155b15613c0557600073ffffffffffffffffffffffffffffffffffffffff16828281518110613a8157fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415613aaa57613c05565b613b11601b5460036000858581518110613ac057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b60036000848481518110613b2157fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550818181518110613b7357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601b546040518082815260200191505060405180910390a3613bf6601b5486614dcf90919063ffffffff16565b94508080600101915050613a46565b50613c7a8460036000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b60036000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a350505050613eff565b613dc182600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614dcf90919063ffffffff16565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e5682600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35b5b505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060136000838152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015613fc057602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311613f76575b50505050509050919050565b60116020528060005260406000206000915090505481565b600e6020528060005260406000206000915090505481565b6060601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b1426a4836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b15801561407157600080fd5b505afa158015614085573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156140af57600080fd5b8101908080516401000000008111156140c757600080fd5b828101905060208101848111156140dd57600080fd5b81518560208202830111640100000000821117156140fa57600080fd5b50509291905050509050919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614279576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b61428281614e58565b50565b600a5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008190506005805490508210156142cf5760016005805490500390505b61433283600f600084815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600f600083815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008090505b6013600083815260200190815260200160002080549050811015614709578473ffffffffffffffffffffffffffffffffffffffff166013600084815260200190815260200160002082815481106143df57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156146fc5760008190505b60008111156146f457600f6000848152602001908152602001600020600060136000868152602001908152602001600020600184038154811061446b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f6000858152602001908152602001600020600060136000878152602001908152602001600020848154811061450457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156146e15760136000848152602001908152602001600020600182038154811061459157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166013600085815260200190815260200160002082815481106145da57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660136000868152602001908152602001600020838154811061462357fe5b90600052602060002001600060136000888152602001908152602001600020600186038154811061465057fe5b9060005260206000200160008491906101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508391906101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506146e6565b6146f4565b80806001900391505061442c565b505050614c2d565b808060010191505061438c565b50601c60009054906101000a900461ffff1661ffff16601360008381526020019081526020016000208054905010156147b857601360008281526020019081526020016000208490806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050614943565b600f600082815260200190815260200160002060006013600084815260200190815260200160002060016013600086815260200190815260200160002080549050038154811061480457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f600083815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156149425783601360008381526020019081526020016000206001601360008581526020019081526020016000208054905003815481106148f957fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b6000600160136000848152602001908152602001600020805490500390505b6000811115614c2a57600f600083815260200190815260200160002060006013600085815260200190815260200160002060018403815481106149a157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f60008481526020019081526020016000206000601360008681526020019081526020016000208481548110614a3a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115614c1757601360008381526020019081526020016000206001820381548110614ac757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601360008481526020019081526020016000208281548110614b1057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601360008581526020019081526020016000208381548110614b5957fe5b906000526020600020016000601360008781526020019081526020016000206001860381548110614b8657fe5b9060005260206000200160008491906101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508391906101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050614c1c565b614c2a565b808060019003915050614962565b50505b505050565b600080831415614c455760009050614cb2565b6000828402905082848281614c5657fe5b0414614cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615b0e6021913960400191505060405180910390fd5b809150505b92915050565b6000808211614d2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b6000828481614d3a57fe5b0490508091505092915050565b600080828401905083811015614dc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600082821115614e47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b600082840390508091505092915050565b6000614e9b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16615ad4565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015614ee3573d6000803e3d6000fd5b505050565b600580549050811080614f045750601d54600580549050018110155b15614f0e576150e5565b60008090505b6012805490508110156150e357600060128281548110614f3057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050614fee601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3508080600101915050614f14565b505b50565b801561517c57601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638cf2371c846040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561516357600080fd5b505af1158015615177573d6000803e3d6000fd5b505050505b6060601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b1426a4856040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156151f157600080fd5b505afa158015615205573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561522f57600080fd5b81019080805164010000000081111561524757600080fd5b8281019050602081018481111561525d57600080fd5b815185602082028301116401000000008211171561527a57600080fd5b5050929190505050905060006152c182516152b360646152a5601f5489614c3290919063ffffffff16565b614cb890919063ffffffff16565b614cb890919063ffffffff16565b9050600082511480156152d45750600081115b156152e9576152e281614e58565b50506153f0565b60008090505b82518110156153ec57600061532c84838151811061530957fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16615ad4565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015615374573d6000803e3d6000fd5b5083828151811061538157fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f1bf242fce473b656e6d1d08dcb25b01042413f08c12e2818d923a6e29d4c1afb8885604051808381526020018281526020019250505060405180910390a25080806001019150506152ef565b5050505b505050565b600061541f606461541160215485614c3290919063ffffffff16565b614cb890919063ffffffff16565b9050600060136000858152602001908152602001600020805490501480156154475750600081115b1561545b5761545581614e58565b5061570c565b6000601360008581526020019081526020016000208054905090506060601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393c1e292836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156154eb57600080fd5b505afa1580156154ff573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561552957600080fd5b81019080805164010000000081111561554157600080fd5b8281019050602081018481111561555757600080fd5b815185602082028301116401000000008211171561557457600080fd5b5050929190505050905060008090505b601360008781526020019081526020016000208054905081101561570757600061560b6013600089815260200190815260200160002083815481106155c557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16615ad4565b905060006156598561564b8761563d88888151811061562657fe5b60200260200101518b614c3290919063ffffffff16565b614cb890919063ffffffff16565b614cb890919063ffffffff16565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156156a1573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff167f1eac6055421b211dbe224185ed987d950ab8cdad41c7e6cfa729cf3c92c5eed78983604051808381526020018281526020019250505060405180910390a250508080600101915050615584565b505050505b5050565b600061573a606461572c60205485614c3290919063ffffffff16565b614cb890919063ffffffff16565b90506060601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166337caa8b6856040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156157b157600080fd5b505afa1580156157c5573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156157ef57600080fd5b81019080805164010000000081111561580757600080fd5b8281019050602081018481111561581d57600080fd5b815185602082028301116401000000008211171561583a57600080fd5b50509291905050509050600081511480156158555750600082115b1561586a5761586382614e58565b5050615ad0565b6000815190506060601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393c1e292836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156158e557600080fd5b505afa1580156158f9573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561592357600080fd5b81019080805164010000000081111561593b57600080fd5b8281019050602081018481111561595157600080fd5b815185602082028301116401000000008211171561596e57600080fd5b5050929190505050905060008090505b8151811015615aca5760006159d3846159c5866159b78787815181106159a057fe5b60200260200101518b614c3290919063ffffffff16565b614cb890919063ffffffff16565b614cb890919063ffffffff16565b90506000615a098684815181106159e657fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16615ad4565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015615a51573d6000803e3d6000fd5b50858381518110615a5e57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f70098ec6480a4d5390c19f0a21daad08444bf356e3cf48f99b4e65517edb1f8d8a84604051808381526020018281526020019250505060405180910390a25050808060010191505061597e565b50505050505b5050565b600081905091905056fe6f6e6c792076616c69642076616c756520697320726f6f742066656520666f72207468697320726563697069656e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a165627a7a72305820e5035ff13373008b1863bfb433199e29c407914cd84c4b0fbdaa3b093ece07960029

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

00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000b3b000000000000000000000000000000000000000001027e72f1f12813088000000000000000000000000000000000000000000000005a790ea17ace06a960000000000000000000000000000000aa3e3ad42952958f2d81357bf8cd5dcb77ed93000000000000000000000000079756ba86affc6cdda424aa7a061fec56077f6130000000000000000000000000000000000000000000000000000000000000011562d44696d656e73696f6e20436c6f756400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035644430000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): V-Dimension Cloud
Arg [1] : _symbol (string): VDC
Arg [2] : _blockPerPhase (uint256): 46000
Arg [3] : _totalSupply (uint256): 5000000000000000000000000000
Arg [4] : _reservedAmount (uint256): 1750000000000000000000000000
Arg [5] : _reservedAccount (address): 0x0AA3e3Ad42952958F2D81357Bf8CD5dcb77eD930
Arg [6] : _foundationAddr (address): 0x79756bA86aFFc6CddA424AA7a061fEc56077F613

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [2] : 000000000000000000000000000000000000000000000000000000000000b3b0
Arg [3] : 00000000000000000000000000000000000000001027e72f1f12813088000000
Arg [4] : 000000000000000000000000000000000000000005a790ea17ace06a96000000
Arg [5] : 0000000000000000000000000aa3e3ad42952958f2d81357bf8cd5dcb77ed930
Arg [6] : 00000000000000000000000079756ba86affc6cdda424aa7a061fec56077f613
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000011
Arg [8] : 562d44696d656e73696f6e20436c6f7564000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [10] : 5644430000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

1489:15585:7:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9364:22;9375:10;9364;:22::i;:::-;1489:15585;10757:123;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10757:123:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1714:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1714:18:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;1714:18:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4430:96;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4430:96:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4430:96:7;;;;;;;;;;;;;;;;;;;:::i;:::-;;2698:447:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2698:447:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2698:447:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4335:89:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4335:89:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4335:89:7;;;;;;;;;;;;;;;;;;;:::i;:::-;;146:26:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;146:26:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9958:114:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9958:114:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1806:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1806:30:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;9743:209;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9743:209:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1913:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1913:29:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1968:499:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1968:499:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1968:499:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2337:40:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2337:40:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2337:40:7;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1603:47;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1603:47:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1603:47:7;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10347:138;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10347:138:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10347:138:7;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;10347:138:7;;;;;;;;;;;;;;;;;1764:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1764:35:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6568:509;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6568:509:7;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;6568:509:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9613:124;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9613:124:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2282:49;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2282:49:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2282:49:7;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10631:120;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10631:120:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2529:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2529:26:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7514:184;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7514:184:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7514:184:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1010:109:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1010:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1010:109:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;176:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;176:28:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10886:1770:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10886:1770:7;;;;;;;;;;;;;;;;;;;:::i;:::-;;1948:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1948:32:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7704:1238;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7704:1238:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7704:1238:7;;;;;;;;;;;;;;;;;:::i;:::-;;2495:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2495:28:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8948:249;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8948:249:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8948:249:7;;;;;;;;;;;;;;;;;:::i;:::-;;1738:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1738:20:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;1738:20:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2119:51;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2119:51:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2119:51:7;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2039:74;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2039:74:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2039:74:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9499:108;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9499:108:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9399:94;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9399:94:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7083:425;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7083:425:7;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;7083:425:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4532:2030;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4532:2030:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4532:2030:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1686:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1686:22:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10078:120;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10078:120:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10078:120:7;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;10078:120:7;;;;;;;;;;;;;;;;;2176:43;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2176:43:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2176:43:7;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1987:46;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1987:46:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1987:46:7;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10204:137;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10204:137:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10204:137:7;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;10204:137:7;;;;;;;;;;;;;;;;;3461:138:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3461:138:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3461:138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;208:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;208:21:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10491:95:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10491:95:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10491:95:7;;;;;;;;;;;;;;;;;:::i;:::-;;1842:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1842:29:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1877;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1877:29:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10886:1770;10958:13;:11;:13::i;:::-;10950:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11030:9;11017;:22;;11009:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11081:13;11097:14;:12;:14::i;:::-;11081:30;;11121:16;11140:9;11121:28;;11160:46;11178:9;11189;11200:5;11160:17;:46::i;:::-;11244:9;:16;;;;11236:5;:24;11232:258;;;11275:13;11291:39;11326:3;11291:30;11304:9;11314:5;11304:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11291:30;;:8;:12;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;11275:55;;11355:19;11368:5;11355:8;:12;;:19;;;;:::i;:::-;11344:30;;11414:1;11392:7;:18;11400:9;11392:18;;;;;;;;;;;;;;;;:23;11388:92;;;11436:13;11455:9;11436:29;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;11436:29:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11388:92;11232:258;;11500:14;11517;;;;;;;;;;;:23;;;11541:8;11517:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11517:33:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11517:33:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11517:33:7;;;;;;;;;;;;;;;;11500:50;;11590:41;11621:9;11590:15;:26;11606:9;11590:26;;;;;;;;;;;;;;;;:30;;:41;;;;:::i;:::-;11561:15;:26;11577:9;11561:26;;;;;;;;;;;;;;;:70;;;;11657:25;11675:6;11657:13;;:17;;:25;;;;:::i;:::-;11641:13;:41;;;;11718:11;;11701:13;;:28;;11693:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11780:9;:16;;;;11772:5;:24;11768:637;;;11811:16;11830:87;11913:3;11830:78;11891:16;;;;;;;;;;;11830:78;;:56;11869:9;11879:5;11869:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11863:3;:22;11830:56;;:28;11841:9;11851:5;11841:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11830:28;;:6;:10;;:28;;;;:::i;:::-;:32;;:56;;;;:::i;:::-;:60;;:78;;;;:::i;:::-;:82;;:87;;;;:::i;:::-;11811:106;;11951:1;11939:8;:13;;:34;;;;;11965:8;11956:6;:17;11939:34;11931:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12035:58;12058:34;12071:20;;12058:8;:12;;:34;;;;:::i;:::-;12035:7;:18;12043:9;12035:18;;;;;;;;;;;;;;;;:22;;:58;;;;:::i;:::-;12014:7;:18;12022:9;12014:18;;;;;;;;;;;;;;;:79;;;;12129:45;12165:8;12129:31;12153:6;12129:8;:19;12138:9;12129:19;;;;;;;;;;;;;;;;:23;;:31;;;;:::i;:::-;:35;;:45;;;;:::i;:::-;12107:8;:19;12116:9;12107:19;;;;;;;;;;;;;;;:67;;;;12217:9;12193:56;;12210:4;12193:56;;;12228:20;12239:8;12228:6;:10;;:20;;;;:::i;:::-;12193:56;;;;;;;;;;;;;;;;;;11768:637;;;;12302:31;12326:6;12302:8;:19;12311:9;12302:19;;;;;;;;;;;;;;;;:23;;:31;;;;:::i;:::-;12280:8;:19;12289:9;12280:19;;;;;;;;;;;;;;;:53;;;;12376:9;12352:42;;12369:4;12352:42;;;12387:6;12352:42;;;;;;;;;;;;;;;;;;11768:637;12415:18;12436:38;12470:3;12436:29;12450:14;;12436:9;:13;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;12415:59;;12484:32;12505:10;12484:20;:32::i;:::-;12546:48;12583:10;12546:32;12568:9;12546:10;:17;12557:5;12546:17;;;;;;;;;;;;:21;;:32;;;;:::i;:::-;:36;;:48;;;;:::i;:::-;12526:10;:17;12537:5;12526:17;;;;;;;;;;;:68;;;;12604:17;;;;;;;;;;;:27;;;12632:9;12643:5;12604:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12604:45:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12604:45:7;;;;10886:1770;;;;;:::o;10757:123::-;10801:7;10827:46;10859:13;;10843:10;;10828:12;:25;10827:31;;:46;;;;:::i;:::-;10820:53;;10757:123;:::o;1714:18::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4430:96::-;3494:10;3484:20;;:6;;;;;;;;;;;:20;;;3476:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4509:10;4499:7;;:20;;;;;;;;;;;;;;;;;;4430:96;:::o;2698:447:0:-;2994:1;2984:6;:11;;2983:53;;;;;3034:1;3001:7;:19;3009:10;3001:19;;;;;;;;;;;;;;;:29;3021:8;3001:29;;;;;;;;;;;;;;;;:34;;2983:53;2979:67;;;3038:8;;;2979:67;3085:6;3053:7;:19;3061:10;3053:19;;;;;;;;;;;;;;;:29;3073:8;3053:29;;;;;;;;;;;;;;;:38;;;;3123:8;3102:38;;3111:10;3102:38;;;3133:6;3102:38;;;;;;;;;;;;;;;;;;2698:447;;:::o;4335:89:7:-;3494:10;3484:20;;:6;;;;;;;;;;;:20;;;3476:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4409:8;4400:6;;:17;;;;;;;;;;;;;;;;;;4335:89;:::o;146:26:0:-;;;;:::o;9958:114:7:-;10001:4;10024:18;;;;;;;;;;;:29;;;10054:10;10024:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10024:41:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10024:41:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10024:41:7;;;;;;;;;;;;;;;;10017:48;;9958:114;:::o;1806:30::-;;;;;;;;;;;;;:::o;9743:209::-;9793:6;9811:13;9827:14;:12;:14::i;:::-;9811:30;;9863:9;:16;;;;9855:5;:24;9851:77;;;9901:9;9911:5;9901:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9894:23;;;;;9851:77;9944:1;9937:8;;;9743:209;;:::o;1913:29::-;;;;:::o;1968:499:0:-;2059:6;768:1;761:4;:8;743;;:15;;:26;740:56;;;780:8;;;740:56;2073:18;2094:7;:14;2102:5;2094:14;;;;;;;;;;;;;;;:26;2109:10;2094:26;;;;;;;;;;;;;;;;2073:47;;2290:25;2308:6;2290:8;:13;2299:3;2290:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;2274:8;:13;2283:3;2274:13;;;;;;;;;;;;;;;:41;;;;2339:27;2359:6;2339:8;:15;2348:5;2339:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;2321:8;:15;2330:5;2321:15;;;;;;;;;;;;;;;:45;;;;2401:22;2416:6;2401:10;:14;;:22;;;;:::i;:::-;2372:7;:14;2380:5;2372:14;;;;;;;;;;;;;;;:26;2387:10;2372:26;;;;;;;;;;;;;;;:51;;;;2450:3;2434:28;;2443:5;2434:28;;;2455:6;2434:28;;;;;;;;;;;;;;;;;;802:1;1968:499;;;;:::o;2337:40:7:-;;;;;;;;;;;;;;;;;;;;;;:::o;1603:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10347:138::-;10411:16;10446:18;;;;;;;;;;;:25;;;10472:5;10446:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10446:32:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10446:32:7;;;;;;39:16:-1;36:1;17:17;2:54;10446:32:7;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10446:32:7;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;0:373;;10446:32:7;;;;;;10439:39;;10347:138;;;:::o;1764:35::-;1797:2;1764:35;:::o;6568:509::-;3494:10;3484:20;;:6;;;;;;;;;;;:20;;;3476:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6790:4;6753:18;;:42;;;;;;;;;;;;;;;;;;6816:8;6806:7;:18;;;;6866:10;6854:9;:22;;;;6926:14;6910:13;:30;;;;6990:14;6974:13;:30;;;;7055:15;7038:14;:32;;;;6568:509;;;;;;:::o;9613:124::-;9666:7;9692:14;;;;;;;;;;;:36;;;:38;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9692:38:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9692:38:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9692:38:7;;;;;;;;;;;;;;;;9685:45;;9613:124;:::o;2282:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10631:120::-;10675:4;10712:1;10699:10;;:14;:44;;;;;10733:10;;10717:12;:26;;10699:44;10691:53;;10631:120;:::o;2529:26::-;;;;:::o;7514:184::-;3494:10;3484:20;;:6;;;;;;;;;;;:20;;;3476:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7646:4;7611:17;;:40;;;;;;;;;;;;;;;;;;7677:14;7661:13;:30;;;;7514:184;;:::o;1010:109:0:-;1068:15;1098:8;:16;1107:6;1098:16;;;;;;;;;;;;;;;;1091:23;;1010:109;;;:::o;176:28::-;;;;:::o;1948:32:7:-;;;;:::o;7704:1238::-;7781:1;7762:21;;:7;;;;;;;;;;;:21;;;:46;;;;7798:10;7787:21;;:7;;;;;;;;;;;:21;;;7762:46;7754:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7861:1;7852:5;:10;;7844:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7906:14;:12;:14::i;:::-;7898:5;:22;7890:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7966:7;:14;7974:5;7966:14;;;;;;;;;;;;;;;;;;;;;7965:15;7956:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8017:12;8032:1;8017:16;;8043:14;8060:1;8043:18;;8083:9;:16;;;;8075:5;:24;8071:599;;;8138:1;8118:10;:17;8129:5;8118:17;;;;;;;;;;;;:21;8115:289;;;8168:85;8231:21;;8212:9;:16;;;;:40;8168:39;8190:9;:16;;;;8168:10;:17;8179:5;8168:17;;;;;;;;;;;;:21;;:39;;;;:::i;:::-;:43;;:85;;;;:::i;:::-;8159:94;;8291:29;8313:6;8291:17;;:21;;:29;;;;:::i;:::-;8271:17;:49;;;;8338:51;8359:29;8381:6;8359:10;:17;8370:5;8359:17;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;8338:20;:51::i;:::-;8115:289;8507:1;8488:9;:16;;;;:20;8479:5;:29;8475:92;;;8535:17;;8528:24;;8475:92;8071:599;;;8604:10;:17;8615:5;8604:17;;;;;;;;;;;;8597:24;;8635;8653:5;8635:17;:24::i;:::-;8071:599;8691:1;8684:4;:8;8680:181;;;8709:54;8725:5;8732:4;8746:9;:16;;;;8738:5;:24;8709:15;:54::i;:::-;8777:30;8795:5;8802:4;8777:17;:30::i;:::-;8821:29;8838:5;8845:4;8821:16;:29::i;:::-;8680:181;8888:4;8871:7;:14;8879:5;8871:14;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;8907:28;8915:5;8922:4;8928:6;8907:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7704:1238;;;:::o;2495:28::-;;;;:::o;8948:249::-;3494:10;3484:20;;:6;;;;;;;;;;;:20;;;3476:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9022:13;:11;:13::i;:::-;9021:14;9013:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9096:1;9082:10;;:15;9074:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9151:11;9138:10;:24;;;;9177:13;;;;;;;;;;8948:249;:::o;1738:20::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2119:51::-;;;;;;;;;;;;;;;;;:::o;2039:74::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9499:108::-;9545:7;9571:14;;;;;;;;;;;:27;;;:29;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9571:29:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9571:29:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9571:29:7;;;;;;;;;;;;;;;;9564:36;;9499:108;:::o;9399:94::-;9438:7;9464:14;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9464:22:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9464:22:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9464:22:7;;;;;;;;;;;;;;;;9457:29;;9399:94;:::o;7083:425::-;3494:10;3484:20;;:6;;;;;;;;;;;:20;;;3476:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7261:4;7232:14;;:34;;;;;;;;;;;;;;;;;;7298:19;7277:18;;:40;;;;;;;;;;;;;;;;;;7394:16;7376:15;:34;;;;7467:15;7450:14;:32;;;;7083:425;;;;:::o;4532:2030::-;4604:6;768:1:0;761:4;:8;743;;:15;;:26;740:56;;;780:8;;;740:56;4642:4:7;4627:20;;:3;:20;;;4622:1934;;;4681:7;;4671:6;:17;4663:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4777:32;4802:6;4777:8;:20;4786:10;4777:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;4754:8;:20;4763:10;4754:20;;;;;;;;;;;;;;;:55;;;;4839:25;4857:6;4839:8;:13;4848:3;4839:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;4823:8;:13;4832:3;4823:13;;;;;;;;;;;;;;;:41;;;;4904:3;4883:33;;4892:10;4883:33;;;4909:6;4883:33;;;;;;;;;;;;;;;;;;4939:12;:10;:12::i;:::-;4938:13;4930:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4995:18;;;;;;;;;;;:26;;;5022:10;5034:14;:12;:14::i;:::-;4995:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4995:54:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4995:54:7;;;;4622:1934;;;5081:9;;5071:6;:19;:57;;;;;5094:18;;;;;;;;;;;:29;;;5124:3;5094:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5094:34:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5094:34:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5094:34:7;;;;;;;;;;;;;;;;5071:57;:74;;;;;5133:12;:10;:12::i;:::-;5132:13;5071:74;5066:1490;;;5161:11;5175:6;5161:20;;5218:29;5243:3;5218:8;:20;5227:10;5218:20;;;;;;;;;;;;;;;;:24;;:29;;;;:::i;:::-;5195:8;:20;5204:10;5195:20;;;;;;;;;;;;;;;:52;;;;5262:13;5278:14;:12;:14::i;:::-;5262:30;;5306:14;5323:5;5306:22;;5354:9;:16;;;;5346:5;:24;5342:92;;;5418:1;5399:9;:16;;;;:20;5390:29;;5342:92;5448:18;;;;;;;;;;;:25;;;5474:3;5479:10;5491:5;5498:6;5448:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5448:57:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5448:57:7;;;;5565:32;5583:13;;5565:8;:13;5574:3;5565:13;;;;;;;;;;;;;;;;:17;;:32;;;;:::i;:::-;5549:8;:13;5558:3;5549:13;;;;;;;;;;;;;;;:48;;;;5637:3;5616:40;;5625:10;5616:40;;;5642:13;;5616:40;;;;;;;;;;;;;;;;;;5676:22;5684:13;;5676:3;:7;;:22;;;;:::i;:::-;5670:28;;5748:26;5777:18;;;;;;;;;;;:31;;;5809:10;5777:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5777:43:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5777:43:7;;;;;;39:16:-1;36:1;17:17;2:54;5777:43:7;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5777:43:7;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;0:373;;5777:43:7;;;;;;5748:72;;5840:9;5852:1;5840:13;;5834:384;5859:9;:16;5855:1;:20;:44;;;;;5886:13;;5879:3;:20;;5855:44;5834:384;;;5952:1;5928:26;;:9;5938:1;5928:12;;;;;;;;;;;;;;:26;;;5924:78;;;5978:5;;5924:78;6044:41;6071:13;;6044:8;:22;6053:9;6063:1;6053:12;;;;;;;;;;;;;;6044:22;;;;;;;;;;;;;;;;:26;;:41;;;;:::i;:::-;6019:8;:22;6028:9;6038:1;6028:12;;;;;;;;;;;;;;6019:22;;;;;;;;;;;;;;;:66;;;;6129:9;6139:1;6129:12;;;;;;;;;;;;;;6108:49;;6117:10;6108:49;;;6143:13;;6108:49;;;;;;;;;;;;;;;;;;6181:22;6189:13;;6181:3;:7;;:22;;;;:::i;:::-;6175:28;;5901:3;;;;;;;5834:384;;;;6259:33;6288:3;6259:8;:24;6268:14;;;;;;;;;;;6259:24;;;;;;;;;;;;;;;;:28;;:33;;;;:::i;:::-;6232:8;:24;6241:14;;;;;;;;;;;6232:24;;;;;;;;;;;;;;;:60;;;;6332:14;;;;;;;;;;;6311:41;;6320:10;6311:41;;;6348:3;6311:41;;;;;;;;;;;;;;;;;;5066:1490;;;;;;;6406:32;6431:6;6406:8;:20;6415:10;6406:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;6383:8;:20;6392:10;6383:20;;;;;;;;;;;;;;;:55;;;;6468:25;6486:6;6468:8;:13;6477:3;6468:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;6452:8;:13;6461:3;6452:13;;;;;;;;;;;;;;;:41;;;;6533:3;6512:33;;6521:10;6512:33;;;6538:6;6512:33;;;;;;;;;;;;;;;;;;5066:1490;4622:1934;4532:2030;;;:::o;1686:22::-;;;;;;;;;;;;;:::o;10078:120::-;10138:16;10173:11;:18;10185:5;10173:18;;;;;;;;;;;10166:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10078:120;;;:::o;2176:43::-;;;;;;;;;;;;;;;;;:::o;1987:46::-;;;;;;;;;;;;;;;;;:::o;10204:137::-;10264:16;10299:17;;;;;;;;;;;:28;;;10328:5;10299:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10299:35:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10299:35:7;;;;;;39:16:-1;36:1;17:17;2:54;10299:35:7;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10299:35:7;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;0:373;;10299:35:7;;;;;;10292:42;;10204:137;;;:::o;3461:138:0:-;3537:17;3569:7;:15;3577:6;3569:15;;;;;;;;;;;;;;;:25;3585:8;3569:25;;;;;;;;;;;;;;;;3562:32;;3461:138;;;;:::o;208:21::-;;;;;;;;;;;;;:::o;10491:95:7:-;3494:10;3484:20;;:6;;;;;;;;;;;:20;;;3476:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10551:28;10572:6;10551:20;:28::i;:::-;10491:95;:::o;1842:29::-;;;;:::o;1877:::-;;;;;;;;;;;;;:::o;12704:1620::-;12798:14;12815:5;12798:22;;12842:9;:16;;;;12834:5;:24;12830:122;;;12902:1;12883:9;:16;;;;:20;12874:29;;12830:122;12995:46;13031:9;12995:17;:25;13013:6;12995:25;;;;;;;;;;;:31;13021:4;12995:31;;;;;;;;;;;;;;;;:35;;:46;;;;:::i;:::-;12961:17;:25;12979:6;12961:25;;;;;;;;;;;:31;12987:4;12961:31;;;;;;;;;;;;;;;:80;;;;13057:9;13069:1;13057:13;;13052:562;13076:11;:19;13088:6;13076:19;;;;;;;;;;;:26;;;;13072:1;:30;13052:562;;;13152:4;13126:30;;:11;:19;13138:6;13126:19;;;;;;;;;;;13146:1;13126:22;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;13122:482;;;13181:9;13193:1;13181:13;;13176:390;13200:1;13196;:5;13176:390;;;13285:17;:25;13303:6;13285:25;;;;;;;;;;;:51;13311:11;:19;13323:6;13311:19;;;;;;;;;;;13333:1;13331;:3;13311:24;;;;;;;;;;;;;;;;;;;;;;;;;13285:51;;;;;;;;;;;;;;;;13233:17;:25;13251:6;13233:25;;;;;;;;;;;:49;13259:11;:19;13271:6;13259:19;;;;;;;;;;;13279:1;13259:22;;;;;;;;;;;;;;;;;;;;;;;;;13233:49;;;;;;;;;;;;;;;;:103;13229:319;;;13418:11;:19;13430:6;13418:19;;;;;;;;;;;13440:1;13438;:3;13418:24;;;;;;;;;;;;;;;;;;;;;;;;;13444:11;:19;13456:6;13444:19;;;;;;;;;;;13464:1;13444:22;;;;;;;;;;;;;;;;;;;;;;;;;13365:11;:19;13377:6;13365:19;;;;;;;;;;;13385:1;13365:22;;;;;;;;;;;;;;;;13389:11;:19;13401:6;13389:19;;;;;;;;;;;13411:1;13409;:3;13389:24;;;;;;;;;;;;;;;;13364:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13229:319;;;13520:5;;13229:319;13203:3;;;;;;;;13176:390;;;;13583:7;;;;13122:482;13104:3;;;;;;;13052:562;;;;13657:18;;;;;;;;;;;13628:47;;:11;:19;13640:6;13628:19;;;;;;;;;;;:26;;;;:47;13624:313;;;13690:11;:19;13702:6;13690:19;;;;;;;;;;;13715:4;13690:30;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;13690:30:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13624:313;;;13775:17;:25;13793:6;13775:25;;;;;;;;;;;:78;13801:11;:19;13813:6;13801:19;;;;;;;;;;;13850:1;13821:11;:19;13833:6;13821:19;;;;;;;;;;;:26;;;;:30;13801:51;;;;;;;;;;;;;;;;;;;;;;;;;13775:78;;;;;;;;;;;;;;;;13741:17;:25;13759:6;13741:25;;;;;;;;;;;:31;13767:4;13741:31;;;;;;;;;;;;;;;;:112;13737:200;;;13922:4;13868:11;:19;13880:6;13868:19;;;;;;;;;;;13917:1;13888:11;:19;13900:6;13888:19;;;;;;;;;;;:26;;;;:30;13868:51;;;;;;;;;;;;;;;;:58;;;;;;;;;;;;;;;;;;13737:200;13624:313;13952:9;13993:1;13964:11;:19;13976:6;13964:19;;;;;;;;;;;:26;;;;:30;13952:42;;13947:371;14000:1;13996;:5;13947:371;;;14077:17;:25;14095:6;14077:25;;;;;;;;;;;:51;14103:11;:19;14115:6;14103:19;;;;;;;;;;;14125:1;14123;:3;14103:24;;;;;;;;;;;;;;;;;;;;;;;;;14077:51;;;;;;;;;;;;;;;;14025:17;:25;14043:6;14025:25;;;;;;;;;;;:49;14051:11;:19;14063:6;14051:19;;;;;;;;;;;14071:1;14051:22;;;;;;;;;;;;;;;;;;;;;;;;;14025:49;;;;;;;;;;;;;;;;:103;14021:287;;;14202:11;:19;14214:6;14202:19;;;;;;;;;;;14224:1;14222;:3;14202:24;;;;;;;;;;;;;;;;;;;;;;;;;14228:11;:19;14240:6;14228:19;;;;;;;;;;;14248:1;14228:22;;;;;;;;;;;;;;;;;;;;;;;;;14149:11;:19;14161:6;14149:19;;;;;;;;;;;14169:1;14149:22;;;;;;;;;;;;;;;;14173:11;:19;14185:6;14173:19;;;;;;;;;;;14195:1;14193;:3;14173:24;;;;;;;;;;;;;;;;14148:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14021:287;;;14288:5;;14021:287;14003:3;;;;;;;;13947:371;;;;12704:1620;;;;;:::o;1693:458:4:-;1751:7;1996:1;1991;:6;1987:45;;;2020:1;2013:8;;;;1987:45;2042:9;2058:1;2054;:5;2042:17;;2086:1;2081;2077;:5;;;;;;:10;2069:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2143:1;2136:8;;;1693:458;;;;;:::o;2606:326::-;2664:7;2761:1;2757;:5;2749:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2803:9;2819:1;2815;:5;;;;;;2803:17;;2924:1;2917:8;;;2606:326;;;;:::o;834:176::-;892:7;911:9;927:1;923;:5;911:17;;951:1;946;:6;;938:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1002:1;995:8;;;834:176;;;;:::o;1274:179::-;1332:7;1364:1;1359;:6;;1351:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1410:9;1426:1;1422;:5;1410:17;;1445:1;1438:8;;;1274:179;;;;:::o;14330:161:7:-;14398:20;14421:29;:14;;;;;;;;;;;:27;;;:29::i;:::-;14398:52;;14460:4;:13;;:24;14474:9;14460:24;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14460:24:7;14330:161;;:::o;16650:422::-;16723:9;:16;;;;16715:5;:24;:76;;;;16771:20;;16752:9;:16;;;;:39;16743:5;:48;;16715:76;16711:111;;;16805:7;;16711:111;16837:9;16849:1;16837:13;;16832:234;16856:13;:20;;;;16852:1;:24;16832:234;;;16897:12;16912:13;16926:1;16912:16;;;;;;;;;;;;;;;;;;;;;;;;;16897:31;;16959:33;16978:7;:13;16986:4;16978:13;;;;;;;;;;;;;;;;16959:8;:14;16968:4;16959:14;;;;;;;;;;;;;;;;:18;;:33;;;;:::i;:::-;16942:8;:14;16951:4;16942:14;;;;;;;;;;;;;;;:50;;;;17035:4;17011:44;;17028:4;17011:44;;;17041:7;:13;17049:4;17041:13;;;;;;;;;;;;;;;;17011:44;;;;;;;;;;;;;;;;;;16832:234;16878:3;;;;;;;16832:234;;;;16650:422;;:::o;14497:675::-;14592:6;14588:82;;;14614:17;;;;;;;;;;;:38;;;14653:5;14614:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14614:45:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14614:45:7;;;;14588:82;14679:24;14706:17;;;;;;;;;;;:28;;;14735:5;14706:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14706:35:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14706:35:7;;;;;;39:16:-1;36:1;17:17;2:54;14706:35:7;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14706:35:7;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;0:373;;14706:35:7;;;;;;14679:62;;14752:13;14768:57;14810:7;:14;14768:37;14801:3;14768:28;14782:13;;14768:9;:13;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;:41;;:57;;;;:::i;:::-;14752:73;;14857:1;14839:7;:14;:19;:32;;;;;14870:1;14862:5;:9;14839:32;14835:109;;;14886:27;14907:5;14886:20;:27::i;:::-;14927:7;;;;14835:109;14959:9;14971:1;14959:13;;14954:212;14978:7;:14;14974:1;:18;14954:212;;;15013:20;15036:25;:7;15044:1;15036:10;;;;;;;;;;;;;;:23;;;:25::i;:::-;15013:48;;15075:4;:13;;:20;15089:5;15075:20;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15075:20:7;15137:7;15145:1;15137:10;;;;;;;;;;;;;;15114:41;;;15130:5;15149;15114:41;;;;;;;;;;;;;;;;;;;;;;;;14954:212;14994:3;;;;;;;14954:212;;;;14497:675;;;;;;:::o;15178:706::-;15259:13;15275:39;15310:3;15275:30;15289:15;;15275:9;:13;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;15259:55;;15357:1;15328:11;:18;15340:5;15328:18;;;;;;;;;;;:25;;;;:30;:43;;;;;15370:1;15362:5;:9;15328:43;15324:120;;;15386:27;15407:5;15386:20;:27::i;:::-;15427:7;;;15324:120;15454:11;15468;:18;15480:5;15468:18;;;;;;;;;;;:25;;;;15454:39;;15503:24;15530:18;;;;;;;;;;;:34;;;15565:3;15530:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15530:39:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15530:39:7;;;;;;39:16:-1;36:1;17:17;2:54;15530:39:7;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15530:39:7;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;0:373;;15530:39:7;;;;;;15503:66;;15584:9;15596:1;15584:13;;15579:299;15603:11;:18;15615:5;15603:18;;;;;;;;;;;:25;;;;15599:1;:29;15579:299;;;15649:20;15672:36;:11;:18;15684:5;15672:18;;;;;;;;;;;15691:1;15672:21;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;:36::i;:::-;15649:59;;15722:14;15739:39;15774:3;15739:30;15765:3;15739:21;15749:7;15757:1;15749:10;;;;;;;;;;;;;;15739:5;:9;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;15722:56;;15792:4;:13;;:21;15806:6;15792:21;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15792:21:7;15854:4;15832:35;;;15847:5;15860:6;15832:35;;;;;;;;;;;;;;;;;;;;;;;;15579:299;;15630:3;;;;;;;15579:299;;;;15178:706;;;;;;:::o;15890:754::-;15970:18;15991:38;16025:3;15991:29;16005:14;;15991:9;:13;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;15970:59;;16039:24;16066:18;;;;;;;;;;;:25;;;16092:5;16066:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16066:32:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16066:32:7;;;;;;39:16:-1;36:1;17:17;2:54;16066:32:7;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16066:32:7;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;0:373;;16066:32:7;;;;;;16039:59;;16130:1;16112:7;:14;:19;:37;;;;;16148:1;16135:10;:14;16112:37;16108:119;;;16164:32;16185:10;16164:20;:32::i;:::-;16210:7;;;;16108:119;16237:11;16251:7;:14;16237:28;;16275:24;16302:18;;;;;;;;;;;:34;;;16337:3;16302:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16302:39:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16302:39:7;;;;;;39:16:-1;36:1;17:17;2:54;16302:39:7;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16302:39:7;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;0:373;;16302:39:7;;;;;;16275:66;;16356:9;16368:1;16356:13;;16351:287;16375:7;:14;16371:1;:18;16351:287;;;16410:13;16426:44;16466:3;16426:35;16457:3;16426:26;16441:7;16449:1;16441:10;;;;;;;;;;;;;;16426;:14;;:26;;;;:::i;:::-;:30;;:35;;;;:::i;:::-;:39;;:44;;;;:::i;:::-;16410:60;;16484:20;16507:25;:7;16515:1;16507:10;;;;;;;;;;;;;;:23;;;:25::i;:::-;16484:48;;16546:4;:13;;:20;16560:5;16546:20;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16546:20:7;16609:7;16617:1;16609:10;;;;;;;;;;;;;;16585:42;;;16602:5;16621;16585:42;;;;;;;;;;;;;;;;;;;;;;;;16351:287;;16391:3;;;;;;;16351:287;;;;15890:754;;;;;;;:::o;81:113::-;137:15;185:1;162:26;;81:113;;;:::o

Swarm Source

bzzr://e5035ff13373008b1863bfb433199e29c407914cd84c4b0fbdaa3b093ece0796
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.