ETH Price: $3,234.11 (-3.11%)
 
Transaction Hash
Method
Block
From
To
Create Refund Po...89828022019-11-22 22:01:301897 days ago1574460090IN
TheAbyss: MultiSig
0 ETH0.000127585
Create Refund Po...89827922019-11-22 21:59:371897 days ago1574459977IN
TheAbyss: MultiSig
0 ETH0.000102064
Create Refund Po...89827162019-11-22 21:41:301897 days ago1574458890IN
TheAbyss: MultiSig
0 ETH0.000025511
Create Refund Po...89825512019-11-22 21:01:581897 days ago1574456518IN
TheAbyss: MultiSig
0 ETH0.000021271
Withdraw71785632019-02-05 13:53:582188 days ago1549374838IN
TheAbyss: MultiSig
0 ETH0.000053161
Withdraw65326492018-10-17 15:29:432299 days ago1539790183IN
TheAbyss: MultiSig
0 ETH0.000283536
Vote64945452018-10-11 10:42:262305 days ago1539254546IN
TheAbyss: MultiSig
0 ETH0.000115225
Revoke Vote64945182018-10-11 10:36:332305 days ago1539254193IN
TheAbyss: MultiSig
0 ETH0.000114265
Create Tap Poll64856662018-10-10 0:03:402306 days ago1539129820IN
TheAbyss: MultiSig
0 ETH0.002814044
Create Refund Po...64318512018-10-01 6:20:162315 days ago1538374816IN
TheAbyss: MultiSig
0 ETH0.028815941
Create Tap Poll63029782018-09-10 0:16:232336 days ago1536538583IN
TheAbyss: MultiSig
0 ETH0.00009054
Create Tap Poll63029762018-09-10 0:16:052336 days ago1536538565IN
TheAbyss: MultiSig
0 ETH0.00281784
Withdraw61415852018-08-13 19:09:362364 days ago1534187376IN
TheAbyss: MultiSig
0 ETH0.000358039
Create Tap Poll61192392018-08-10 0:01:232367 days ago1533859283IN
TheAbyss: MultiSig
0 ETH0.0105361315
Withdraw59807692018-07-17 13:24:192391 days ago1531833859IN
TheAbyss: MultiSig
0 ETH0.000318258
Vote59363062018-07-10 1:34:472398 days ago1531186487IN
TheAbyss: MultiSig
0 ETH0.0004596220
Create Tap Poll59359392018-07-10 0:02:572398 days ago1531180977IN
TheAbyss: MultiSig
0 ETH0.0105278515
Create Refund Po...59302022018-07-09 0:33:472399 days ago1531096427IN
TheAbyss: MultiSig
0 ETH0.000164335
Withdraw58515082018-06-25 11:25:242413 days ago1529925924IN
TheAbyss: MultiSig
0 ETH0.0007956420
Can Withdraw58244982018-06-20 20:41:132417 days ago1529527273IN
TheAbyss: MultiSig
0 ETH0.000115825
Vote57788082018-06-13 0:34:252425 days ago1528850065IN
TheAbyss: MultiSig
0 ETH0.000023041
Create Refund Po...57780842018-06-12 21:36:222425 days ago1528839382IN
TheAbyss: MultiSig
0 ETH0.000032281
Vote57653842018-06-10 15:51:242428 days ago1528645884IN
TheAbyss: MultiSig
0 ETH0.0002304510
Create Tap Poll57616672018-06-10 0:01:232428 days ago1528588883IN
TheAbyss: MultiSig
0 ETH0.0028124
Withdraw57155392018-06-01 19:43:412436 days ago1527882221IN
TheAbyss: MultiSig
0 ETH0.0005967315
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
71785632019-02-05 13:53:582188 days ago1549374838
TheAbyss: MultiSig
6,658.8560207 ETH
65326492018-10-17 15:29:432299 days ago1539790183
TheAbyss: MultiSig
3,647.66080729 ETH
64856662018-10-10 0:03:402306 days ago1539129820
TheAbyss: MultiSig
 Contract Creation0 ETH
64318512018-10-01 6:20:162315 days ago1538374816
TheAbyss: MultiSig
 Contract Creation0 ETH
63029762018-09-10 0:16:052336 days ago1536538565
TheAbyss: MultiSig
 Contract Creation0 ETH
61415852018-08-13 19:09:362364 days ago1534187376
TheAbyss: MultiSig
1,021.49175347 ETH
61192392018-08-10 0:01:232367 days ago1533859283
TheAbyss: MultiSig
 Contract Creation0 ETH
59807692018-07-17 13:24:192391 days ago1531833859
TheAbyss: MultiSig
552.06452546 ETH
59359392018-07-10 0:02:572398 days ago1531180977
TheAbyss: MultiSig
 Contract Creation0 ETH
58515082018-06-25 11:25:242413 days ago1529925924
TheAbyss: MultiSig
591.34924768 ETH
57616672018-06-10 0:01:232428 days ago1528588883
TheAbyss: MultiSig
 Contract Creation0 ETH
57155392018-06-01 19:43:412436 days ago1527882221
TheAbyss: MultiSig
270.60050154 ETH
57155262018-06-01 19:40:282436 days ago1527882028
TheAbyss: MultiSig
5,769 ETH
56239252018-05-16 14:02:242453 days ago1526479344
TheAbyss: MultiSig
2 ETH
56239222018-05-16 14:01:072453 days ago1526479267
TheAbyss: MultiSig
2.8983354 ETH
56239202018-05-16 14:00:492453 days ago1526479249
TheAbyss: MultiSig
5 ETH
56239122018-05-16 13:58:552453 days ago1526479135
TheAbyss: MultiSig
17 ETH
56239122018-05-16 13:58:552453 days ago1526479135
TheAbyss: MultiSig
10 ETH
56239122018-05-16 13:58:552453 days ago1526479135
TheAbyss: MultiSig
0.35384615 ETH
56239102018-05-16 13:58:282453 days ago1526479108
TheAbyss: MultiSig
0.65 ETH
56239082018-05-16 13:57:562453 days ago1526479076
TheAbyss: MultiSig
1 ETH
56239072018-05-16 13:57:462453 days ago1526479066
TheAbyss: MultiSig
1.5 ETH
56239062018-05-16 13:57:372453 days ago1526479057
TheAbyss: MultiSig
0.2 ETH
56239042018-05-16 13:57:032453 days ago1526479023
TheAbyss: MultiSig
0.32 ETH
56239022018-05-16 13:56:412453 days ago1526479001
TheAbyss: MultiSig
0.3 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PollManagedFund

Compiler Version
v0.4.21+commit.dfe3193c

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-04-18
*/

pragma solidity ^0.4.21;

// File: contracts/DateTime.sol

contract DateTime {
        /*
         *  Date and Time utilities for ethereum contracts
         *
         */
        struct _DateTime {
                uint16 year;
                uint8 month;
                uint8 day;
                uint8 hour;
                uint8 minute;
                uint8 second;
                uint8 weekday;
        }

        uint constant DAY_IN_SECONDS = 86400;
        uint constant YEAR_IN_SECONDS = 31536000;
        uint constant LEAP_YEAR_IN_SECONDS = 31622400;

        uint constant HOUR_IN_SECONDS = 3600;
        uint constant MINUTE_IN_SECONDS = 60;

        uint16 constant ORIGIN_YEAR = 1970;

        function isLeapYear(uint16 year) public pure returns (bool) {
                if (year % 4 != 0) {
                        return false;
                }
                if (year % 100 != 0) {
                        return true;
                }
                if (year % 400 != 0) {
                        return false;
                }
                return true;
        }

        function leapYearsBefore(uint year) public pure returns (uint) {
                year -= 1;
                return year / 4 - year / 100 + year / 400;
        }

        function getDaysInMonth(uint8 month, uint16 year) public pure returns (uint8) {
                if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
                        return 31;
                }
                else if (month == 4 || month == 6 || month == 9 || month == 11) {
                        return 30;
                }
                else if (isLeapYear(year)) {
                        return 29;
                }
                else {
                        return 28;
                }
        }

        function parseTimestamp(uint timestamp) internal pure returns (_DateTime dt) {
                uint secondsAccountedFor = 0;
                uint buf;
                uint8 i;

                // Year
                dt.year = getYear(timestamp);
                buf = leapYearsBefore(dt.year) - leapYearsBefore(ORIGIN_YEAR);

                secondsAccountedFor += LEAP_YEAR_IN_SECONDS * buf;
                secondsAccountedFor += YEAR_IN_SECONDS * (dt.year - ORIGIN_YEAR - buf);

                // Month
                uint secondsInMonth;
                for (i = 1; i <= 12; i++) {
                        secondsInMonth = DAY_IN_SECONDS * getDaysInMonth(i, dt.year);
                        if (secondsInMonth + secondsAccountedFor > timestamp) {
                                dt.month = i;
                                break;
                        }
                        secondsAccountedFor += secondsInMonth;
                }

                // Day
                for (i = 1; i <= getDaysInMonth(dt.month, dt.year); i++) {
                        if (DAY_IN_SECONDS + secondsAccountedFor > timestamp) {
                                dt.day = i;
                                break;
                        }
                        secondsAccountedFor += DAY_IN_SECONDS;
                }

                // Hour
                dt.hour = getHour(timestamp);

                // Minute
                dt.minute = getMinute(timestamp);

                // Second
                dt.second = getSecond(timestamp);

                // Day of week.
                dt.weekday = getWeekday(timestamp);
        }

        function getYear(uint timestamp) public pure returns (uint16) {
                uint secondsAccountedFor = 0;
                uint16 year;
                uint numLeapYears;

                // Year
                year = uint16(ORIGIN_YEAR + timestamp / YEAR_IN_SECONDS);
                numLeapYears = leapYearsBefore(year) - leapYearsBefore(ORIGIN_YEAR);

                secondsAccountedFor += LEAP_YEAR_IN_SECONDS * numLeapYears;
                secondsAccountedFor += YEAR_IN_SECONDS * (year - ORIGIN_YEAR - numLeapYears);

                while (secondsAccountedFor > timestamp) {
                        if (isLeapYear(uint16(year - 1))) {
                                secondsAccountedFor -= LEAP_YEAR_IN_SECONDS;
                        }
                        else {
                                secondsAccountedFor -= YEAR_IN_SECONDS;
                        }
                        year -= 1;
                }
                return year;
        }

        function getMonth(uint timestamp) public pure returns (uint8) {
                return parseTimestamp(timestamp).month;
        }

        function getDay(uint timestamp) public pure returns (uint8) {
                return parseTimestamp(timestamp).day;
        }

        function getHour(uint timestamp) public pure returns (uint8) {
                return uint8((timestamp / 60 / 60) % 24);
        }

        function getMinute(uint timestamp) public pure returns (uint8) {
                return uint8((timestamp / 60) % 60);
        }

        function getSecond(uint timestamp) public pure returns (uint8) {
                return uint8(timestamp % 60);
        }

        function getWeekday(uint timestamp) public pure returns (uint8) {
                return uint8((timestamp / DAY_IN_SECONDS + 4) % 7);
        }

        function toTimestamp(uint16 year, uint8 month, uint8 day) public pure returns (uint timestamp) {
                return toTimestamp(year, month, day, 0, 0, 0);
        }

        function toTimestamp(uint16 year, uint8 month, uint8 day, uint8 hour) public pure returns (uint timestamp) {
                return toTimestamp(year, month, day, hour, 0, 0);
        }

        function toTimestamp(uint16 year, uint8 month, uint8 day, uint8 hour, uint8 minute) public pure returns (uint timestamp) {
                return toTimestamp(year, month, day, hour, minute, 0);
        }

        function toTimestamp(uint16 year, uint8 month, uint8 day, uint8 hour, uint8 minute, uint8 second) public pure returns (uint timestamp) {
                uint16 i;

                // Year
                for (i = ORIGIN_YEAR; i < year; i++) {
                        if (isLeapYear(i)) {
                                timestamp += LEAP_YEAR_IN_SECONDS;
                        }
                        else {
                                timestamp += YEAR_IN_SECONDS;
                        }
                }

                // Month
                uint8[12] memory monthDayCounts;
                monthDayCounts[0] = 31;
                if (isLeapYear(year)) {
                        monthDayCounts[1] = 29;
                }
                else {
                        monthDayCounts[1] = 28;
                }
                monthDayCounts[2] = 31;
                monthDayCounts[3] = 30;
                monthDayCounts[4] = 31;
                monthDayCounts[5] = 30;
                monthDayCounts[6] = 31;
                monthDayCounts[7] = 31;
                monthDayCounts[8] = 30;
                monthDayCounts[9] = 31;
                monthDayCounts[10] = 30;
                monthDayCounts[11] = 31;

                for (i = 1; i < month; i++) {
                        timestamp += DAY_IN_SECONDS * monthDayCounts[i - 1];
                }

                // Day
                timestamp += DAY_IN_SECONDS * (day - 1);

                // Hour
                timestamp += HOUR_IN_SECONDS * (hour);

                // Minute
                timestamp += MINUTE_IN_SECONDS * (minute);

                // Second
                timestamp += second;

                return timestamp;
        }
}

// File: contracts/ISimpleCrowdsale.sol

interface ISimpleCrowdsale {
    function getSoftCap() external view returns(uint256);
    function isContributorInLists(address contributorAddress) external view returns(bool);
    function processReservationFundContribution(
        address contributor,
        uint256 tokenAmount,
        uint256 tokenBonusAmount
    ) external payable;
}

// File: contracts/fund/ICrowdsaleFund.sol

/**
 * @title ICrowdsaleFund
 * @dev Fund methods used by crowdsale contract
 */
interface ICrowdsaleFund {
    /**
    * @dev Function accepts user`s contributed ether and logs contribution
    * @param contributor Contributor wallet address.
    */
    function processContribution(address contributor) external payable;
    /**
    * @dev Function is called on the end of successful crowdsale
    */
    function onCrowdsaleEnd() external;
    /**
    * @dev Function is called if crowdsale failed to reach soft cap
    */
    function enableCrowdsaleRefund() external;
}

// File: contracts/math/SafeMath.sol

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
contract SafeMath {
    /**
    * @dev constructor
    */
    function SafeMath() public {
    }

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

    function safeDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a / b;
        return c;
    }

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

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

// File: contracts/ownership/MultiOwnable.sol

/**
 * @title MultiOwnable
 * @dev The MultiOwnable contract has owners addresses and provides basic authorization control
 * functions, this simplifies the implementation of "users permissions".
 */
contract MultiOwnable {
    address public manager; // address used to set owners
    address[] public owners;
    mapping(address => bool) public ownerByAddress;

    event SetOwners(address[] owners);

    modifier onlyOwner() {
        require(ownerByAddress[msg.sender] == true);
        _;
    }

    /**
     * @dev MultiOwnable constructor sets the manager
     */
    function MultiOwnable() public {
        manager = msg.sender;
    }

    /**
     * @dev Function to set owners addresses
     */
    function setOwners(address[] _owners) public {
        require(msg.sender == manager);
        _setOwners(_owners);

    }

    function _setOwners(address[] _owners) internal {
        for(uint256 i = 0; i < owners.length; i++) {
            ownerByAddress[owners[i]] = false;
        }


        for(uint256 j = 0; j < _owners.length; j++) {
            ownerByAddress[_owners[j]] = true;
        }
        owners = _owners;
        SetOwners(_owners);
    }

    function getOwners() public constant returns (address[]) {
        return owners;
    }
}

// File: contracts/token/IERC20Token.sol

/**
 * @title IERC20Token - ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract IERC20Token {
    string public name;
    string public symbol;
    uint8 public decimals;
    uint256 public totalSupply;

    function balanceOf(address _owner) public constant returns (uint256 balance);
    function transfer(address _to, uint256 _value)  public returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value)  public returns (bool success);
    function approve(address _spender, uint256 _value)  public returns (bool success);
    function allowance(address _owner, address _spender)  public constant returns (uint256 remaining);

    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}

// File: contracts/token/ERC20Token.sol

/**
 * @title ERC20Token - ERC20 base implementation
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20Token is IERC20Token, SafeMath {
    mapping (address => uint256) public balances;
    mapping (address => mapping (address => uint256)) public allowed;

    function transfer(address _to, uint256 _value) public returns (bool) {
        require(_to != address(0));
        require(balances[msg.sender] >= _value);

        balances[msg.sender] = safeSub(balances[msg.sender], _value);
        balances[_to] = safeAdd(balances[_to], _value);
        Transfer(msg.sender, _to, _value);
        return true;
    }

    function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
        require(_to != address(0));
        require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value);

        balances[_to] = safeAdd(balances[_to], _value);
        balances[_from] = safeSub(balances[_from], _value);
        allowed[_from][msg.sender] = safeSub(allowed[_from][msg.sender], _value);
        Transfer(_from, _to, _value);
        return true;
    }

    function balanceOf(address _owner) public constant returns (uint256) {
        return balances[_owner];
    }

    function approve(address _spender, uint256 _value) public returns (bool) {
        allowed[msg.sender][_spender] = _value;
        Approval(msg.sender, _spender, _value);
        return true;
    }

    function allowance(address _owner, address _spender) public constant returns (uint256) {
      return allowed[_owner][_spender];
    }
}

// File: contracts/token/ITokenEventListener.sol

/**
 * @title ITokenEventListener
 * @dev Interface which should be implemented by token listener
 */
interface ITokenEventListener {
    /**
     * @dev Function is called after token transfer/transferFrom
     * @param _from Sender address
     * @param _to Receiver address
     * @param _value Amount of tokens
     */
    function onTokenTransfer(address _from, address _to, uint256 _value) external;
}

// File: contracts/token/ManagedToken.sol

/**
 * @title ManagedToken
 * @dev ERC20 compatible token with issue and destroy facilities
 * @dev All transfers can be monitored by token event listener
 */
contract ManagedToken is ERC20Token, MultiOwnable {
    bool public allowTransfers = false;
    bool public issuanceFinished = false;

    ITokenEventListener public eventListener;

    event AllowTransfersChanged(bool _newState);
    event Issue(address indexed _to, uint256 _value);
    event Destroy(address indexed _from, uint256 _value);
    event IssuanceFinished();

    modifier transfersAllowed() {
        require(allowTransfers);
        _;
    }

    modifier canIssue() {
        require(!issuanceFinished);
        _;
    }

    /**
     * @dev ManagedToken constructor
     * @param _listener Token listener(address can be 0x0)
     * @param _owners Owners list
     */
    function ManagedToken(address _listener, address[] _owners) public {
        if(_listener != address(0)) {
            eventListener = ITokenEventListener(_listener);
        }
        _setOwners(_owners);
    }

    /**
     * @dev Enable/disable token transfers. Can be called only by owners
     * @param _allowTransfers True - allow False - disable
     */
    function setAllowTransfers(bool _allowTransfers) external onlyOwner {
        allowTransfers = _allowTransfers;
        AllowTransfersChanged(_allowTransfers);
    }

    /**
     * @dev Set/remove token event listener
     * @param _listener Listener address (Contract must implement ITokenEventListener interface)
     */
    function setListener(address _listener) public onlyOwner {
        if(_listener != address(0)) {
            eventListener = ITokenEventListener(_listener);
        } else {
            delete eventListener;
        }
    }

    function transfer(address _to, uint256 _value) public transfersAllowed returns (bool) {
        bool success = super.transfer(_to, _value);
        if(hasListener() && success) {
            eventListener.onTokenTransfer(msg.sender, _to, _value);
        }
        return success;
    }

    function transferFrom(address _from, address _to, uint256 _value) public transfersAllowed returns (bool) {
        bool success = super.transferFrom(_from, _to, _value);
        if(hasListener() && success) {
            eventListener.onTokenTransfer(_from, _to, _value);
        }
        return success;
    }

    function hasListener() internal view returns(bool) {
        if(eventListener == address(0)) {
            return false;
        }
        return true;
    }

    /**
     * @dev Issue tokens to specified wallet
     * @param _to Wallet address
     * @param _value Amount of tokens
     */
    function issue(address _to, uint256 _value) external onlyOwner canIssue {
        totalSupply = safeAdd(totalSupply, _value);
        balances[_to] = safeAdd(balances[_to], _value);
        Issue(_to, _value);
        Transfer(address(0), _to, _value);
    }

    /**
     * @dev Destroy tokens on specified address (Called by owner or token holder)
     * @dev Fund contract address must be in the list of owners to burn token during refund
     * @param _from Wallet address
     * @param _value Amount of tokens to destroy
     */
    function destroy(address _from, uint256 _value) external {
        require(ownerByAddress[msg.sender] || msg.sender == _from);
        require(balances[_from] >= _value);
        totalSupply = safeSub(totalSupply, _value);
        balances[_from] = safeSub(balances[_from], _value);
        Transfer(_from, address(0), _value);
        Destroy(_from, _value);
    }

    /**
     * @dev Increase the amount of tokens that an owner allowed to a spender.
     *
     * approve should be called when allowed[_spender] == 0. To increment
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From OpenZeppelin StandardToken.sol
     * @param _spender The address which will spend the funds.
     * @param _addedValue The amount of tokens to increase the allowance by.
     */
    function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
        allowed[msg.sender][_spender] = safeAdd(allowed[msg.sender][_spender], _addedValue);
        Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }

    /**
     * @dev Decrease the amount of tokens that an owner allowed to a spender.
     *
     * approve should be called when allowed[_spender] == 0. To decrement
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From OpenZeppelin StandardToken.sol
     * @param _spender The address which will spend the funds.
     * @param _subtractedValue The amount of tokens to decrease the allowance by.
     */
    function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
        uint oldValue = allowed[msg.sender][_spender];
        if (_subtractedValue > oldValue) {
            allowed[msg.sender][_spender] = 0;
        } else {
            allowed[msg.sender][_spender] = safeSub(oldValue, _subtractedValue);
        }
        Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }

    /**
     * @dev Finish token issuance
     * @return True if success
     */
    function finishIssuance() public onlyOwner returns (bool) {
        issuanceFinished = true;
        IssuanceFinished();
        return true;
    }
}

// File: contracts/Fund.sol

contract Fund is ICrowdsaleFund, SafeMath, MultiOwnable {
    enum FundState {
        Crowdsale,
        CrowdsaleRefund,
        TeamWithdraw,
        Refund
    }

    FundState public state = FundState.Crowdsale;
    ManagedToken public token;

    uint256 public constant INITIAL_TAP = 192901234567901; // (wei/sec) == 500 ether/month

    address public teamWallet;
    uint256 public crowdsaleEndDate;

    address public referralTokenWallet;
    address public foundationTokenWallet;
    address public reserveTokenWallet;
    address public bountyTokenWallet;
    address public companyTokenWallet;
    address public advisorTokenWallet;
    address public lockedTokenAddress;
    address public refundManager;

    uint256 public tap;
    uint256 public lastWithdrawTime = 0;
    uint256 public firstWithdrawAmount = 0;

    address public crowdsaleAddress;
    mapping(address => uint256) public contributions;

    event RefundContributor(address tokenHolder, uint256 amountWei, uint256 timestamp);
    event RefundHolder(address tokenHolder, uint256 amountWei, uint256 tokenAmount, uint256 timestamp);
    event Withdraw(uint256 amountWei, uint256 timestamp);
    event RefundEnabled(address initiatorAddress);

    /**
     * @dev Fund constructor
     * @param _teamWallet Withdraw functions transfers ether to this address
     * @param _referralTokenWallet Referral wallet address
     * @param _companyTokenWallet Company wallet address
     * @param _reserveTokenWallet Reserve wallet address
     * @param _bountyTokenWallet Bounty wallet address
     * @param _advisorTokenWallet Advisor wallet address
     * @param _owners Contract owners
     */
    function Fund(
        address _teamWallet,
        address _referralTokenWallet,
        address _foundationTokenWallet,
        address _companyTokenWallet,
        address _reserveTokenWallet,
        address _bountyTokenWallet,
        address _advisorTokenWallet,
        address _refundManager,
        address[] _owners
    ) public
    {
        teamWallet = _teamWallet;
        referralTokenWallet = _referralTokenWallet;
        foundationTokenWallet = _foundationTokenWallet;
        companyTokenWallet = _companyTokenWallet;
        reserveTokenWallet = _reserveTokenWallet;
        bountyTokenWallet = _bountyTokenWallet;
        advisorTokenWallet = _advisorTokenWallet;
        refundManager = _refundManager;
        _setOwners(_owners);
    }

    modifier withdrawEnabled() {
        require(canWithdraw());
        _;
    }

    modifier onlyCrowdsale() {
        require(msg.sender == crowdsaleAddress);
        _;
    }

    function canWithdraw() public returns(bool);

    function setCrowdsaleAddress(address _crowdsaleAddress) public onlyOwner {
        require(crowdsaleAddress == address(0));
        crowdsaleAddress = _crowdsaleAddress;
    }

    function setTokenAddress(address _tokenAddress) public onlyOwner {
        require(address(token) == address(0));
        token = ManagedToken(_tokenAddress);
    }

    function setLockedTokenAddress(address _lockedTokenAddress) public onlyOwner {
        require(address(lockedTokenAddress) == address(0));
        lockedTokenAddress = _lockedTokenAddress;
    }

    /**
     * @dev Process crowdsale contribution
     */
    function processContribution(address contributor) external payable onlyCrowdsale {
        require(state == FundState.Crowdsale);
        uint256 totalContribution = safeAdd(contributions[contributor], msg.value);
        contributions[contributor] = totalContribution;
    }

    /**
     * @dev Callback is called after crowdsale finalization if soft cap is reached
     */
    function onCrowdsaleEnd() external onlyCrowdsale {
        state = FundState.TeamWithdraw;
        ISimpleCrowdsale crowdsale = ISimpleCrowdsale(crowdsaleAddress);
        firstWithdrawAmount = safeDiv(crowdsale.getSoftCap(), 2);
        lastWithdrawTime = now;
        tap = INITIAL_TAP;
        crowdsaleEndDate = now;
    }

    /**
     * @dev Callback is called after crowdsale finalization if soft cap is not reached
     */
    function enableCrowdsaleRefund() external onlyCrowdsale {
        require(state == FundState.Crowdsale);
        state = FundState.CrowdsaleRefund;
    }

    /**
    * @dev Function is called by contributor to refund payments if crowdsale failed to reach soft cap
    */
    function refundCrowdsaleContributor() external {
        require(state == FundState.CrowdsaleRefund);
        require(contributions[msg.sender] > 0);

        uint256 refundAmount = contributions[msg.sender];
        contributions[msg.sender] = 0;
        token.destroy(msg.sender, token.balanceOf(msg.sender));
        msg.sender.transfer(refundAmount);
        RefundContributor(msg.sender, refundAmount, now);
    }

    /**
    * @dev Function is called by owner to refund payments if crowdsale failed to reach soft cap
    */
    function autoRefundCrowdsaleContributor(address contributorAddress) external {
        require(ownerByAddress[msg.sender] == true || msg.sender == refundManager);
        require(state == FundState.CrowdsaleRefund);
        require(contributions[contributorAddress] > 0);

        uint256 refundAmount = contributions[contributorAddress];
        contributions[contributorAddress] = 0;
        token.destroy(contributorAddress, token.balanceOf(contributorAddress));
        contributorAddress.transfer(refundAmount);
        RefundContributor(contributorAddress, refundAmount, now);
    }

    /**
     * @dev Decrease tap amount
     * @param _tap New tap value
     */
    function decTap(uint256 _tap) external onlyOwner {
        require(state == FundState.TeamWithdraw);
        require(_tap < tap);
        tap = _tap;
    }

    function getCurrentTapAmount() public constant returns(uint256) {
        if(state != FundState.TeamWithdraw) {
            return 0;
        }
        return calcTapAmount();
    }

    function calcTapAmount() internal view returns(uint256) {
        uint256 amount = safeMul(safeSub(now, lastWithdrawTime), tap);
        if(address(this).balance < amount) {
            amount = address(this).balance;
        }
        return amount;
    }

    function firstWithdraw() public onlyOwner withdrawEnabled {
        require(firstWithdrawAmount > 0);
        uint256 amount = firstWithdrawAmount;
        firstWithdrawAmount = 0;
        teamWallet.transfer(amount);
        Withdraw(amount, now);
    }

    /**
     * @dev Withdraw tap amount
     */
    function withdraw() public onlyOwner withdrawEnabled {
        require(state == FundState.TeamWithdraw);
        uint256 amount = calcTapAmount();
        lastWithdrawTime = now;
        teamWallet.transfer(amount);
        Withdraw(amount, now);
    }

    // Refund
    /**
     * @dev Called to start refunding
     */
    function enableRefund() internal {
        require(state == FundState.TeamWithdraw);
        state = FundState.Refund;
        token.destroy(lockedTokenAddress, token.balanceOf(lockedTokenAddress));
        token.destroy(companyTokenWallet, token.balanceOf(companyTokenWallet));
        token.destroy(reserveTokenWallet, token.balanceOf(reserveTokenWallet));
        token.destroy(foundationTokenWallet, token.balanceOf(foundationTokenWallet));
        token.destroy(bountyTokenWallet, token.balanceOf(bountyTokenWallet));
        token.destroy(referralTokenWallet, token.balanceOf(referralTokenWallet));
        token.destroy(advisorTokenWallet, token.balanceOf(advisorTokenWallet));
        RefundEnabled(msg.sender);
    }

    /**
    * @dev Function is called by contributor to refund
    * Buy user tokens for refundTokenPrice and destroy them
    */
    function refundTokenHolder() public {
        require(state == FundState.Refund);

        uint256 tokenBalance = token.balanceOf(msg.sender);
        require(tokenBalance > 0);
        uint256 refundAmount = safeDiv(safeMul(tokenBalance, address(this).balance), token.totalSupply());
        require(refundAmount > 0);

        token.destroy(msg.sender, tokenBalance);
        msg.sender.transfer(refundAmount);

        RefundHolder(msg.sender, refundAmount, tokenBalance, now);
    }
}

// File: contracts/fund/IPollManagedFund.sol

/**
 * @title IPollManagedFund
 * @dev Fund callbacks used by polling contracts
 */
interface IPollManagedFund {
    /**
     * @dev TapPoll callback
     * @param agree True if new tap value is accepted by majority of contributors
     * @param _tap New tap value
     */
    function onTapPollFinish(bool agree, uint256 _tap) external;

    /**
     * @dev RefundPoll callback
     * @param agree True if contributors decided to allow refunding
     */
    function onRefundPollFinish(bool agree) external;
}

// File: contracts/poll/BasePoll.sol

/**
 * @title BasePoll
 * @dev Abstract base class for polling contracts
 */
contract BasePoll is SafeMath {
    struct Vote {
        uint256 time;
        uint256 weight;
        bool agree;
    }

    uint256 public constant MAX_TOKENS_WEIGHT_DENOM = 1000;

    IERC20Token public token;
    address public fundAddress;

    uint256 public startTime;
    uint256 public endTime;
    bool checkTransfersAfterEnd;

    uint256 public yesCounter = 0;
    uint256 public noCounter = 0;
    uint256 public totalVoted = 0;

    bool public finalized;
    mapping(address => Vote) public votesByAddress;

    modifier checkTime() {
        require(now >= startTime && now <= endTime);
        _;
    }

    modifier notFinalized() {
        require(!finalized);
        _;
    }

    /**
     * @dev BasePoll constructor
     * @param _tokenAddress ERC20 compatible token contract address
     * @param _fundAddress Fund contract address
     * @param _startTime Poll start time
     * @param _endTime Poll end time
     */
    function BasePoll(address _tokenAddress, address _fundAddress, uint256 _startTime, uint256 _endTime, bool _checkTransfersAfterEnd) public {
        require(_tokenAddress != address(0));
        require(_startTime >= now && _endTime > _startTime);

        token = IERC20Token(_tokenAddress);
        fundAddress = _fundAddress;
        startTime = _startTime;
        endTime = _endTime;
        finalized = false;
        checkTransfersAfterEnd = _checkTransfersAfterEnd;
    }

    /**
     * @dev Process user`s vote
     * @param agree True if user endorses the proposal else False
     */
    function vote(bool agree) public checkTime {
        require(votesByAddress[msg.sender].time == 0);

        uint256 voiceWeight = token.balanceOf(msg.sender);
        uint256 maxVoiceWeight = safeDiv(token.totalSupply(), MAX_TOKENS_WEIGHT_DENOM);
        voiceWeight =  voiceWeight <= maxVoiceWeight ? voiceWeight : maxVoiceWeight;

        if(agree) {
            yesCounter = safeAdd(yesCounter, voiceWeight);
        } else {
            noCounter = safeAdd(noCounter, voiceWeight);

        }

        votesByAddress[msg.sender].time = now;
        votesByAddress[msg.sender].weight = voiceWeight;
        votesByAddress[msg.sender].agree = agree;

        totalVoted = safeAdd(totalVoted, 1);
    }

    /**
     * @dev Revoke user`s vote
     */
    function revokeVote() public checkTime {
        require(votesByAddress[msg.sender].time > 0);

        uint256 voiceWeight = votesByAddress[msg.sender].weight;
        bool agree = votesByAddress[msg.sender].agree;

        votesByAddress[msg.sender].time = 0;
        votesByAddress[msg.sender].weight = 0;
        votesByAddress[msg.sender].agree = false;

        totalVoted = safeSub(totalVoted, 1);
        if(agree) {
            yesCounter = safeSub(yesCounter, voiceWeight);
        } else {
            noCounter = safeSub(noCounter, voiceWeight);
        }
    }

    /**
     * @dev Function is called after token transfer from user`s wallet to check and correct user`s vote
     *
     */
    function onTokenTransfer(address tokenHolder, uint256 amount) public {
        require(msg.sender == fundAddress);
        if(votesByAddress[tokenHolder].time == 0) {
            return;
        }
        if(!checkTransfersAfterEnd) {
             if(finalized || (now < startTime || now > endTime)) {
                 return;
             }
        }

        if(token.balanceOf(tokenHolder) >= votesByAddress[tokenHolder].weight) {
            return;
        }
        uint256 voiceWeight = amount;
        if(amount > votesByAddress[tokenHolder].weight) {
            voiceWeight = votesByAddress[tokenHolder].weight;
        }

        if(votesByAddress[tokenHolder].agree) {
            yesCounter = safeSub(yesCounter, voiceWeight);
        } else {
            noCounter = safeSub(noCounter, voiceWeight);
        }
        votesByAddress[tokenHolder].weight = safeSub(votesByAddress[tokenHolder].weight, voiceWeight);
    }

    /**
     * Finalize poll and call onPollFinish callback with result
     */
    function tryToFinalize() public notFinalized returns(bool) {
        if(now < endTime) {
            return false;
        }
        finalized = true;
        onPollFinish(isSubjectApproved());
        return true;
    }

    function isNowApproved() public view returns(bool) {
        return isSubjectApproved();
    }

    function isSubjectApproved() internal view returns(bool) {
        return yesCounter > noCounter;
    }

    /**
     * @dev callback called after poll finalization
     */
    function onPollFinish(bool agree) internal;
}

// File: contracts/RefundPoll.sol

/**
 * @title RefundPoll
 * @dev Enables fund refund mode
 */
contract RefundPoll is BasePoll {
    uint256 public holdEndTime = 0;

    /**
     * RefundPoll constructor
     * @param _tokenAddress ERC20 compatible token contract address
     * @param _fundAddress Fund contract address
     * @param _startTime Poll start time
     * @param _endTime Poll end time
     */
    function RefundPoll(
        address _tokenAddress,
        address _fundAddress,
        uint256 _startTime,
        uint256 _endTime,
        uint256 _holdEndTime,
        bool _checkTransfersAfterEnd
    ) public
        BasePoll(_tokenAddress, _fundAddress, _startTime, _endTime, _checkTransfersAfterEnd)
    {
        holdEndTime = _holdEndTime;
    }

    function tryToFinalize() public returns(bool) {
        if(holdEndTime > 0 && holdEndTime > endTime) {
            require(now >= holdEndTime);
        } else {
            require(now >= endTime);
        }

        finalized = true;
        onPollFinish(isSubjectApproved());
        return true;
    }

    function isSubjectApproved() internal view returns(bool) {
        return yesCounter > noCounter && yesCounter >= safeDiv(token.totalSupply(), 3);
    }

    function onPollFinish(bool agree) internal {
        IPollManagedFund fund = IPollManagedFund(fundAddress);
        fund.onRefundPollFinish(agree);
    }

}

// File: contracts/TapPoll.sol

/**
 * @title TapPoll
 * @dev Poll to increase tap amount
 */
contract TapPoll is BasePoll {
    uint256 public tap;
    uint256 public minTokensPerc = 0;

    /**
     * TapPoll constructor
     * @param _tap New tap value
     * @param _tokenAddress ERC20 compatible token contract address
     * @param _fundAddress Fund contract address
     * @param _startTime Poll start time
     * @param _endTime Poll end time
     * @param _minTokensPerc - Min percent of tokens from totalSupply where poll is considered to be fulfilled
     */
    function TapPoll(
        uint256 _tap,
        address _tokenAddress,
        address _fundAddress,
        uint256 _startTime,
        uint256 _endTime,
        uint256 _minTokensPerc
    ) public
        BasePoll(_tokenAddress, _fundAddress, _startTime, _endTime, false)
    {
        tap = _tap;
        minTokensPerc = _minTokensPerc;
    }

    function onPollFinish(bool agree) internal {
        IPollManagedFund fund = IPollManagedFund(fundAddress);
        fund.onTapPollFinish(agree, tap);
    }

    function getVotedTokensPerc() public view returns(uint256) {
        return safeDiv(safeMul(safeAdd(yesCounter, noCounter), 100), token.totalSupply());
    }

    function isSubjectApproved() internal view returns(bool) {
        return yesCounter > noCounter && getVotedTokensPerc() >= minTokensPerc;
    }
}

// File: contracts/PollManagedFund.sol

/**
 * @title PollManagedFund
 * @dev Fund controlled by users
 */
contract PollManagedFund is Fund, DateTime, ITokenEventListener {
    uint256 public constant TAP_POLL_DURATION = 3 days;
    uint256 public constant REFUND_POLL_DURATION = 7 days;
    uint256 public constant MAX_VOTED_TOKEN_PERC = 10;

    TapPoll public tapPoll;
    RefundPoll public refundPoll;

    uint256 public minVotedTokensPerc = 0;
    uint256 public secondRefundPollDate = 0;
    bool public isWithdrawEnabled = true;

    uint256[] public refundPollDates = [
        1530403200, // 01.07.2018
        1538352000, // 01.10.2018
        1546300800, // 01.01.2019
        1554076800, // 01.04.2019
        1561939200, // 01.07.2019
        1569888000, // 01.10.2019
        1577836800, // 01.01.2020
        1585699200  // 01.04.2020
    ];

    modifier onlyTokenHolder() {
        require(token.balanceOf(msg.sender) > 0);
        _;
    }

    event TapPollCreated();
    event TapPollFinished(bool approved, uint256 _tap);
    event RefundPollCreated();
    event RefundPollFinished(bool approved);

    /**
     * @dev PollManagedFund constructor
     * params - see Fund constructor
     */
    function PollManagedFund(
        address _teamWallet,
        address _referralTokenWallet,
        address _foundationTokenWallet,
        address _companyTokenWallet,
        address _reserveTokenWallet,
        address _bountyTokenWallet,
        address _advisorTokenWallet,
        address _refundManager,
        address[] _owners
        ) public
    Fund(_teamWallet, _referralTokenWallet, _foundationTokenWallet, _companyTokenWallet, _reserveTokenWallet, _bountyTokenWallet, _advisorTokenWallet, _refundManager, _owners)
    {
    }

    function canWithdraw() public returns(bool) {
        if(
            address(refundPoll) != address(0) &&
            !refundPoll.finalized() &&
            refundPoll.holdEndTime() > 0 &&
            now >= refundPoll.holdEndTime() &&
            refundPoll.isNowApproved()
        ) {
            return false;
        }
        return isWithdrawEnabled;
    }

    /**
     * @dev ITokenEventListener implementation. Notify active poll contracts about token transfers
     */
    function onTokenTransfer(address _from, address /*_to*/, uint256 _value) external {
        require(msg.sender == address(token));
        if(address(tapPoll) != address(0) && !tapPoll.finalized()) {
            tapPoll.onTokenTransfer(_from, _value);
        }
         if(address(refundPoll) != address(0) && !refundPoll.finalized()) {
            refundPoll.onTokenTransfer(_from, _value);
        }
    }

    /**
     * @dev Update minVotedTokensPerc value after tap poll.
     * Set new value == 50% from current voted tokens amount
     */
    function updateMinVotedTokens(uint256 _minVotedTokensPerc) internal {
        uint256 newPerc = safeDiv(_minVotedTokensPerc, 2);
        if(newPerc > MAX_VOTED_TOKEN_PERC) {
            minVotedTokensPerc = MAX_VOTED_TOKEN_PERC;
            return;
        }
        minVotedTokensPerc = newPerc;
    }

    // Tap poll
    function createTapPoll(uint8 tapIncPerc) public onlyOwner {
        require(state == FundState.TeamWithdraw);
        require(tapPoll == address(0));
        require(getDay(now) == 10);
        require(tapIncPerc <= 50);
        uint256 _tap = safeAdd(tap, safeDiv(safeMul(tap, tapIncPerc), 100));
        uint256 startTime = now;
        uint256 endTime = startTime + TAP_POLL_DURATION;
        tapPoll = new TapPoll(_tap, token, this, startTime, endTime, minVotedTokensPerc);
        TapPollCreated();
    }

    function onTapPollFinish(bool agree, uint256 _tap) external {
        require(msg.sender == address(tapPoll) && tapPoll.finalized());
        if(agree) {
            tap = _tap;
        }
        updateMinVotedTokens(tapPoll.getVotedTokensPerc());
        TapPollFinished(agree, _tap);
        delete tapPoll;
    }

    // Refund poll
    function checkRefundPollDate() internal view returns(bool) {
        if(secondRefundPollDate > 0 && now >= secondRefundPollDate && now <= safeAdd(secondRefundPollDate, 1 days)) {
            return true;
        }

        for(uint i; i < refundPollDates.length; i++) {
            if(now >= refundPollDates[i] && now <= safeAdd(refundPollDates[i], 1 days)) {
                return true;
            }
        }
        return false;
    }

    function createRefundPoll() public onlyTokenHolder {
        require(state == FundState.TeamWithdraw);
        require(address(refundPoll) == address(0));
        require(checkRefundPollDate());

        if(secondRefundPollDate > 0 && now > safeAdd(secondRefundPollDate, 1 days)) {
            secondRefundPollDate = 0;
        }

        uint256 startTime = now;
        uint256 endTime = startTime + REFUND_POLL_DURATION;
        bool isFirstRefund = secondRefundPollDate == 0;
        uint256 holdEndTime = 0;

        if(isFirstRefund) {
            holdEndTime = toTimestamp(
                getYear(startTime),
                getMonth(startTime) + 1,
                1
            );
        }
        refundPoll = new RefundPoll(token, this, startTime, endTime, holdEndTime, isFirstRefund);
        RefundPollCreated();
    }

    function onRefundPollFinish(bool agree) external {
        require(msg.sender == address(refundPoll) && refundPoll.finalized());
        if(agree) {
            if(secondRefundPollDate > 0) {
                enableRefund();
            } else {
                uint256 startTime = refundPoll.startTime();
                secondRefundPollDate = toTimestamp(
                    getYear(startTime),
                    getMonth(startTime) + 2,
                    1
                );
                isWithdrawEnabled = false;
            }
        } else {
            secondRefundPollDate = 0;
            isWithdrawEnabled = true;
        }
        RefundPollFinished(agree);

        delete refundPoll;
    }

    function forceRefund() public {
        require(msg.sender == refundManager);
        enableRefund();
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"owners","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tapIncPerc","type":"uint8"}],"name":"createTapPoll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TAP_POLL_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"REFUND_POLL_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"crowdsaleEndDate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_crowdsaleAddress","type":"address"}],"name":"setCrowdsaleAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddress","type":"address"}],"name":"setTokenAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"firstWithdrawAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"agree","type":"bool"},{"name":"_tap","type":"uint256"}],"name":"onTapPollFinish","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"crowdsaleAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tap","type":"uint256"}],"name":"decTap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"enableCrowdsaleRefund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getHour","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[],"name":"createRefundPoll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"contributions","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"manager","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getWeekday","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"teamWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"refundPollDates","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"onCrowdsaleEnd","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint16"},{"name":"month","type":"uint8"},{"name":"day","type":"uint8"},{"name":"hour","type":"uint8"},{"name":"minute","type":"uint8"}],"name":"toTimestamp","outputs":[{"name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getDay","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"","type":"address"},{"name":"_value","type":"uint256"}],"name":"onTokenTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentTapAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_lockedTokenAddress","type":"address"}],"name":"setLockedTokenAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint16"},{"name":"month","type":"uint8"},{"name":"day","type":"uint8"},{"name":"hour","type":"uint8"}],"name":"toTimestamp","outputs":[{"name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"minVotedTokensPerc","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"refundManager","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isWithdrawEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"agree","type":"bool"}],"name":"onRefundPollFinish","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getSecond","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint16"},{"name":"month","type":"uint8"},{"name":"day","type":"uint8"}],"name":"toTimestamp","outputs":[{"name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"foundationTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"INITIAL_TAP","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint16"},{"name":"month","type":"uint8"},{"name":"day","type":"uint8"},{"name":"hour","type":"uint8"},{"name":"minute","type":"uint8"},{"name":"second","type":"uint8"}],"name":"toTimestamp","outputs":[{"name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"reserveTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getYear","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"MAX_VOTED_TOKEN_PERC","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOwners","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getMonth","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"lockedTokenAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint16"}],"name":"isLeapYear","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"contributor","type":"address"}],"name":"processContribution","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"lastWithdrawTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint256"}],"name":"leapYearsBefore","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"month","type":"uint8"},{"name":"year","type":"uint16"}],"name":"getDaysInMonth","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"secondRefundPollDate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"canWithdraw","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"forceRefund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"state","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"advisorTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tapPoll","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"referralTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bountyTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"refundPoll","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"contributorAddress","type":"address"}],"name":"autoRefundCrowdsaleContributor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"firstWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"ownerByAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"companyTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owners","type":"address[]"}],"name":"setOwners","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getMinute","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[],"name":"refundTokenHolder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"refundCrowdsaleContributor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_teamWallet","type":"address"},{"name":"_referralTokenWallet","type":"address"},{"name":"_foundationTokenWallet","type":"address"},{"name":"_companyTokenWallet","type":"address"},{"name":"_reserveTokenWallet","type":"address"},{"name":"_bountyTokenWallet","type":"address"},{"name":"_advisorTokenWallet","type":"address"},{"name":"_refundManager","type":"address"},{"name":"_owners","type":"address[]"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"TapPollCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"approved","type":"bool"},{"indexed":false,"name":"_tap","type":"uint256"}],"name":"TapPollFinished","type":"event"},{"anonymous":false,"inputs":[],"name":"RefundPollCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"approved","type":"bool"}],"name":"RefundPollFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenHolder","type":"address"},{"indexed":false,"name":"amountWei","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"RefundContributor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenHolder","type":"address"},{"indexed":false,"name":"amountWei","type":"uint256"},{"indexed":false,"name":"tokenAmount","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"RefundHolder","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amountWei","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"initiatorAddress","type":"address"}],"name":"RefundEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owners","type":"address[]"}],"name":"SetOwners","type":"event"}]

606060409081526003805460ff199081169091556000600f8190556010819055601581905560165560178054909116600117905561010090519081016040908152635b3819808252635bb163806020830152635c2aad8090820152635ca154806060820152635d194d006080820152635d92970060a0820152635e0be10060c0820152635e83d98060e08201526200009c90601890600862000313565b503415620000a957600080fd5b60405162004a7038038062004a7083398101604052808051919060200180519190602001805191906020018051919060200180519190602001805191906020018051919060200180519190602001805160008054600160a060020a031990811633600160a060020a03908116919091179092556004805482168e84161790556006805482168d84161790556007805482168c8416179055600a805482168b84161790556008805482168a8416179055600980548216898416179055600b80548216888416179055600d8054909116918616919091179055919091019050888888888888888888620001a881640100000000620001c0810262002f521704565b5050505050505050505050505050505050506200041a565b6000805b6001548210156200022657600060026000600185815481101515620001e557fe5b600091825260208083209190910154600160a060020a031683528201929092526040019020805460ff191691151591909117905560019190910190620001c4565b5060005b825181101562000282576001600260008584815181106200024757fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff19169115159190911790556001016200022a565b6001838051620002979291602001906200036b565b507f9465cd279c2de393c5568ae444599e3644e3d1864ca2c05ced8a654df2aea3cb8360405160208082528190810183818151815260200191508051906020019060200280838360005b83811015620002fb578082015183820152602001620002e1565b505050509050019250505060405180910390a1505050565b82805482825590600052602060002090810192821562000359579160200282015b8281111562000359578251829063ffffffff1690559160200191906001019062000334565b5062000367929150620003d3565b5090565b828054828255906000526020600020908101928215620003c5579160200282015b82811115620003c55782518254600160a060020a031916600160a060020a0391909116178255602092909201916001909101906200038c565b5062000367929150620003f3565b620003f091905b80821115620003675760008155600101620003da565b90565b620003f091905b8082111562000367578054600160a060020a0319168155600101620003fa565b614646806200042a6000396000f300606060405260043610620003355763ffffffff60e060020a600035041663025e7c2781146200033a578063026eca12146200036f57806302fc28c4146200038d57806308867fc214620003b5578063192f107614620003cb5780631f35bc4014620003e157806326a4e8d2146200040357806326b52faf146200042557806329c90b63146200043b57806331d2f891146200045957806336e61cf7146200046f5780633b64e77e14620004885780633ccfd60b146200049e5780633e239e1a14620004b457806340e6b00a14620004e357806342e94c9014620004f9578063481c6a75146200051b5780634ac1ad78146200053157806359927044146200054a5780635f58384614620005605780636252c127146200057957806362ba9687146200058f57806365c7284014620005c4578063677ba3d314620005dd578063774a97cf14620006085780637ddbf0ed146200061e5780637f791833146200064057806384219204146200066f57806387174c3e1462000685578063880dc4e6146200069b57806389ea2cb714620006c55780638aa001fc14620006e05780638c8d98a014620006f9578063903171ae14620007225780639054bbb614620007385780639054bdec146200074e57806392a0fd64146200078957806392d66313146200079f578063962c9c8d14620007cf578063a0e67e2b14620007e5578063a324ad241462000850578063a666ff3c1462000869578063a6f0e577146200087f578063a78a651a146200089c578063ab23151114620008b2578063b199993714620008c8578063b238ad0e14620008e1578063b465e52f1462000904578063b51459fe146200091a578063bd7427f81462000930578063c19d93fb1462000946578063c5f5ce211462000981578063cae6b9c51462000997578063cc96019f14620009ad578063d0e6cfec14620009c3578063d66f146d14620009d9578063e2d2a86814620009ef578063e9b5a2f71462000a11578063eb6b192f1462000a27578063f190a7931462000a49578063fa4d36981462000a5f578063fa93f8831462000ab1578063fbbfe8301462000aca578063fc0c546a1462000ae0578063fd2210311462000af6578063ff01ffa81462000b0c575b600080fd5b34156200034657600080fd5b6200035360043562000b22565b604051600160a060020a03909116815260200160405180910390f35b34156200037b57600080fd5b6200038b60ff6004351662000b4b565b005b34156200039957600080fd5b620003a362000cdf565b60405190815260200160405180910390f35b3415620003c157600080fd5b620003a362000ce6565b3415620003d757600080fd5b620003a362000ced565b3415620003ed57600080fd5b6200038b600160a060020a036004351662000cf3565b34156200040f57600080fd5b6200038b600160a060020a036004351662000d57565b34156200043157600080fd5b620003a362000dd3565b34156200044757600080fd5b6200038b600435151560243562000dd9565b34156200046557600080fd5b6200035362000f18565b34156200047b57600080fd5b6200038b60043562000f27565b34156200049457600080fd5b6200038b62000f85565b3415620004aa57600080fd5b6200038b62000fcf565b3415620004c057600080fd5b620004cd600435620010b1565b60405160ff909116815260200160405180910390f35b3415620004ef57600080fd5b6200038b620010cf565b34156200050557600080fd5b620003a3600160a060020a0360043516620012db565b34156200052757600080fd5b62000353620012ed565b34156200053d57600080fd5b620004cd600435620012fc565b34156200055657600080fd5b620003536200130f565b34156200056c57600080fd5b620003a36004356200131e565b34156200058557600080fd5b6200038b6200133e565b34156200059b57600080fd5b620003a361ffff6004351660ff60243581169060443581169060643581169060843516620013e9565b3415620005d057600080fd5b620004cd60043562001406565b3415620005e957600080fd5b6200038b600160a060020a03600435811690602435166044356200141d565b34156200061457600080fd5b620003a362001601565b34156200062a57600080fd5b6200038b600160a060020a036004351662001636565b34156200064c57600080fd5b620003a361ffff6004351660ff602435811690604435811690606435166200169a565b34156200067b57600080fd5b620003a3620016b6565b34156200069157600080fd5b62000353620016bc565b3415620006a757600080fd5b620006b1620016cb565b604051901515815260200160405180910390f35b3415620006d157600080fd5b6200038b6004351515620016d4565b3415620006ec57600080fd5b620004cd60043562001868565b34156200070557600080fd5b620003a361ffff6004351660ff6024358116906044351662001873565b34156200072e57600080fd5b620003536200188f565b34156200074457600080fd5b620003a36200189e565b34156200075a57600080fd5b620003a361ffff6004351660ff60243581169060443581169060643581169060843581169060a43516620018a8565b34156200079557600080fd5b62000353620019fd565b3415620007ab57600080fd5b620007b860043562001a0c565b60405161ffff909116815260200160405180910390f35b3415620007db57600080fd5b620003a362001aa6565b3415620007f157600080fd5b620007fb62001aab565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156200083c57808201518382015260200162000822565b505050509050019250505060405180910390f35b34156200085c57600080fd5b620004cd60043562001b17565b34156200087557600080fd5b6200035362001b2e565b34156200088b57600080fd5b620006b161ffff6004351662001b3d565b6200038b600160a060020a036004351662001b91565b3415620008be57600080fd5b620003a362001c14565b3415620008d457600080fd5b620003a360043562001c1a565b3415620008ed57600080fd5b620004cd60ff6004351661ffff6024351662001c35565b34156200091057600080fd5b620003a362001d0e565b34156200092657600080fd5b620006b162001d14565b34156200093c57600080fd5b6200038b62001eca565b34156200095257600080fd5b6200095c62001ef2565b604051808260038111156200096d57fe5b60ff16815260200191505060405180910390f35b34156200098d57600080fd5b6200035362001efb565b3415620009a357600080fd5b6200035362001f0a565b3415620009b957600080fd5b6200035362001f19565b3415620009cf57600080fd5b6200035362001f28565b3415620009e557600080fd5b6200035362001f37565b3415620009fb57600080fd5b6200038b600160a060020a036004351662001f46565b341562000a1d57600080fd5b6200038b6200214a565b341562000a3357600080fd5b620006b1600160a060020a0360043516620021da565b341562000a5557600080fd5b62000353620021ef565b341562000a6b57600080fd5b6200038b6004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650620021fe95505050505050565b341562000abd57600080fd5b620004cd60043562002228565b341562000ad657600080fd5b6200038b62002234565b341562000aec57600080fd5b6200035362002464565b341562000b0257600080fd5b620003a362002478565b341562000b1857600080fd5b6200038b6200247e565b600180548290811062000b3157fe5b600091825260209091200154600160a060020a0316905081565b600160a060020a0333166000908152600260205260408120548190819060ff16151560011462000b7a57600080fd5b60026003805460ff169081111562000b8e57fe5b1462000b9957600080fd5b601354600160a060020a03161562000bb057600080fd5b62000bbb4262001406565b60ff16600a14151562000bcd57600080fd5b603260ff8516111562000bdf57600080fd5b62000c09600e5462000c0362000bfb600e548860ff166200263c565b60646200266a565b62002682565b92504291506203f4808201905082600360019054906101000a9004600160a060020a031630848460155462000c3d620030b8565b958652600160a060020a039485166020870152929093166040808601919091526060850191909152608084019290925260a083015260c09091019051809103906000f080151562000c8d57600080fd5b60138054600160a060020a031916600160a060020a03929092169190911790557f330d2f37998c8839fca77205925adc69e2c4aa616175f8b357f42f84d06c454960405160405180910390a150505050565b6203f48081565b62093a8081565b60055481565b600160a060020a03331660009081526002602052604090205460ff16151560011462000d1e57600080fd5b601154600160a060020a03161562000d3557600080fd5b60118054600160a060020a031916600160a060020a0392909216919091179055565b600160a060020a03331660009081526002602052604090205460ff16151560011462000d8257600080fd5b6003546101009004600160a060020a03161562000d9e57600080fd5b60038054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b60105481565b60135433600160a060020a03908116911614801562000e4c5750601354600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562000e3357600080fd5b5af1151562000e4157600080fd5b505050604051805190505b151562000e5857600080fd5b811562000e6557600e8190555b60135462000ec890600160a060020a0316632c24909c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562000eaa57600080fd5b5af1151562000eb857600080fd5b5050506040518051905062002692565b7fecb94f7dd81b39de2b8d95fa8a4d9f0a8723d7a974187fef4fa5305ca5d162488282604051911515825260208201526040908101905180910390a1505060138054600160a060020a0319169055565b601154600160a060020a031681565b600160a060020a03331660009081526002602052604090205460ff16151560011462000f5257600080fd5b60026003805460ff169081111562000f6657fe5b1462000f7157600080fd5b600e54811062000f8057600080fd5b600e55565b60115433600160a060020a0390811691161462000fa157600080fd5b60006003805460ff169081111562000fb557fe5b1462000fc057600080fd5b6003805460ff19166001179055565b600160a060020a03331660009081526002602052604081205460ff16151560011462000ffa57600080fd5b6200100462001d14565b15156200101057600080fd5b60026003805460ff16908111156200102457fe5b146200102f57600080fd5b62001039620026c2565b42600f55600454909150600160a060020a031681156108fc0282604051600060405180830381858888f1935050505015156200107457600080fd5b7f56ca301a9219608c91e7bcee90e083c19671d2cdcc96752c7af291cee5f9c8c8814260405191825260208201526040908101905180910390a150565b60006018603c8084045b04811515620010c657fe5b0690505b919050565b6000806000806000600360019054906101000a9004600160a060020a0316600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200113b57600080fd5b5af115156200114957600080fd5b505050604051805190501115156200116057600080fd5b60026003805460ff16908111156200117457fe5b146200117f57600080fd5b601454600160a060020a0316156200119657600080fd5b620011a06200270a565b1515620011ac57600080fd5b6000601654118015620011ce5750620011cb6016546201518062002682565b42115b15620011da5760006016555b505060165442925062093a808301915015600081156200121c5762001219620012038562001a0c565b6200120e8662001b17565b600101600162001873565b90505b6003546101009004600160a060020a031630858584866200123c620030c9565b600160a060020a0396871681529490951660208501526040808501939093526060840191909152608083015291151560a082015260c0019051809103906000f08015156200128957600080fd5b60148054600160a060020a031916600160a060020a03929092169190911790557fd1a79c97f023d07d5c5533b0887300f81e113759deeb9531a541b93341ceab7f60405160405180910390a150505050565b60126020526000908152604090205481565b600054600160a060020a031681565b60006007600462015180840401620010c6565b600454600160a060020a031681565b60188054829081106200132d57fe5b600091825260209091200154905081565b60115460009033600160a060020a039081169116146200135d57600080fd5b506003805460ff19166002179055601154600160a060020a0316620013d081634d52a5126040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620013b057600080fd5b5af11515620013be57600080fd5b5050506040518051905060026200266a565b6010555042600f81905565af7151902add600e55600555565b6000620013fc86868686866000620018a8565b9695505050505050565b60006200141382620027cf565b6040015192915050565b60035433600160a060020a0390811661010090920416146200143e57600080fd5b601354600160a060020a031615801590620014ae5750601354600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200149457600080fd5b5af11515620014a257600080fd5b50505060405180519050155b156200151d57601354600160a060020a031663c734f917848360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156200150b57600080fd5b5af115156200151957600080fd5b5050505b601454600160a060020a0316158015906200158d5750601454600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200157357600080fd5b5af115156200158157600080fd5b50505060405180519050155b15620015fc57601454600160a060020a031663c734f917848360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515620015ea57600080fd5b5af11515620015f857600080fd5b5050505b505050565b600060026003805460ff16908111156200161757fe5b14620016265750600062001633565b62001630620026c2565b90505b90565b600160a060020a03331660009081526002602052604090205460ff1615156001146200166157600080fd5b600c54600160a060020a0316156200167857600080fd5b600c8054600160a060020a031916600160a060020a0392909216919091179055565b6000620016ad85858585600080620018a8565b95945050505050565b60155481565b600d54600160a060020a031681565b60175460ff1681565b60145460009033600160a060020a0390811691161480156200174a5750601454600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200173157600080fd5b5af115156200173f57600080fd5b505050604051805190505b15156200175657600080fd5b81156200180c576000601654111562001779576200177362002932565b62001806565b601454600160a060020a03166378e979256040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620017b957600080fd5b5af11515620017c757600080fd5b505050604051805190509050620017f8620017e28262001a0c565b620017ed8362001b17565b600201600162001873565b6016556017805460ff191690555b6200181f565b60006016556017805460ff191660011790555b7f9ab7d9b3f53fbde0442a57f23d2eca52d14cd437e392cf8896a96f3647dff6db82604051901515815260200160405180910390a1505060148054600160a060020a0319169055565b6000603c82620010c6565b6000620018878484846000806000620018a8565b949350505050565b600754600160a060020a031681565b65af7151902add81565b600080620018b5620030da565b6107b291505b8861ffff168261ffff1610156200190257620018d78262001b3d565b15620018ec576301e2850083019250620018f6565b6301e13380830192505b600190910190620018bb565b601f8152620019118962001b3d565b156200192457601d60208201526200192c565b601c60208201525b601f60408201819052601e606083018190526080830182905260a0830181905260c0830182905260e0830182905261010083018190526101208301829052610140830152610160820152600191505b8760ff168261ffff161015620019bf578061ffff600019840116600c8110620019a057fe5b602002015160ff1662015180028301925081806001019250506200197b565b6001870360ff166201518002830192508560ff16610e1002830192508460ff16603c02830192508360ff168301925082925050509695505050505050565b600854600160a060020a031681565b6000806107b26301e133808404810190829062001a299062001c1a565b62001a388361ffff1662001c1a565b039050806301e285000283019250806107b2830361ffff16036301e1338002830192505b8483111562001a9e5762001a736001830362001b3d565b1562001a88576301e285008303925062001a92565b6301e13380830392505b60018203915062001a5c565b509392505050565b600a81565b62001ab562003104565b600180548060200260200160405190810160405280929190818152602001828054801562001b0d57602002820191906000526020600020905b8154600160a060020a0316815260019091019060200180831162001aee575b5050505050905090565b600062001b2482620027cf565b6020015192915050565b600c54600160a060020a031681565b6000600382161562001b5257506000620010ca565b606461ffff83160661ffff161562001b6d57506001620010ca565b61019061ffff83160661ffff161562001b8957506000620010ca565b506001919050565b60115460009033600160a060020a0390811691161462001bb057600080fd5b60006003805460ff169081111562001bc457fe5b1462001bcf57600080fd5b600160a060020a03821660009081526012602052604090205462001bf4903462002682565b600160a060020a0390921660009081526012602052604090209190915550565b600f5481565b60001901600061019082046064830460048404030192915050565b60008260ff166001148062001c4d57508260ff166003145b8062001c5c57508260ff166005145b8062001c6b57508260ff166007145b8062001c7a57508260ff166008145b8062001c8957508260ff16600a145b8062001c9857508260ff16600c145b1562001ca75750601f62001d08565b8260ff166004148062001cbd57508260ff166006145b8062001ccc57508260ff166009145b8062001cdb57508260ff16600b145b1562001cea5750601e62001d08565b62001cf58262001b3d565b1562001d045750601d62001d08565b50601c5b92915050565b60165481565b601454600090600160a060020a03161580159062001d875750601454600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001d6d57600080fd5b5af1151562001d7b57600080fd5b50505060405180519050155b801562001dec5750601454600090600160a060020a031663728b482b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001dd257600080fd5b5af1151562001de057600080fd5b50505060405180519050115b801562001e505750601454600160a060020a031663728b482b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001e3457600080fd5b5af1151562001e4257600080fd5b505050604051805190504210155b801562001eb15750601454600160a060020a03166380322cbd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001e9857600080fd5b5af1151562001ea657600080fd5b505050604051805190505b1562001ec05750600062001633565b5060175460ff1690565b600d5433600160a060020a0390811691161462001ee657600080fd5b62001ef062002932565b565b60035460ff1681565b600b54600160a060020a031681565b601354600160a060020a031681565b600654600160a060020a031681565b600954600160a060020a031681565b601454600160a060020a031681565b600160a060020a03331660009081526002602052604081205460ff1615156001148062001f815750600d5433600160a060020a039081169116145b151562001f8d57600080fd5b60016003805460ff169081111562001fa157fe5b1462001fac57600080fd5b600160a060020a0382166000908152601260205260408120541162001fd057600080fd5b50600160a060020a03808216600090815260126020526040808220805492905560035491926101009092049091169063a24835d190849083906370a082319083905160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200204e57600080fd5b5af115156200205c57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515620020aa57600080fd5b5af11515620020b857600080fd5b505050600160a060020a0382166108fc82150282604051600060405180830381858888f193505050501515620020ed57600080fd5b7fec44c8b7c9108bd9d48e9a929c78d5a448562d61b1113d016ba7fd99d7dc3c7c8282426040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a15050565b600160a060020a03331660009081526002602052604081205460ff1615156001146200217557600080fd5b6200217f62001d14565b15156200218b57600080fd5b601054600090116200219c57600080fd5b50601080546000909155600454600160a060020a031681156108fc0282604051600060405180830381858888f1935050505015156200107457600080fd5b60026020526000908152604090205460ff1681565b600a54600160a060020a031681565b60005433600160a060020a039081169116146200221a57600080fd5b620022258162002f52565b50565b6000603c8083620010bb565b600080600380805460ff16908111156200224a57fe5b146200225557600080fd5b6003546101009004600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515620022ab57600080fd5b5af11515620022b957600080fd5b505050604051805192505060008211620022d257600080fd5b6200234f620022ec8330600160a060020a0316316200263c565b6003546101009004600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200233157600080fd5b5af115156200233f57600080fd5b505050604051805190506200266a565b9050600081116200235f57600080fd5b6003546101009004600160a060020a031663a24835d1338460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515620023bb57600080fd5b5af11515620023c957600080fd5b5050600160a060020a033316905081156108fc0282604051600060405180830381858888f193505050501515620023ff57600080fd5b7f2fe53133356d775fd6784d23de274186e0721e0d93074ae2392acb8968bb2e51338284426040518085600160a060020a0316600160a060020a0316815260200184815260200183815260200182815260200194505050505060405180910390a15050565b6003546101009004600160a060020a031681565b600e5481565b600060016003805460ff16908111156200249457fe5b146200249f57600080fd5b600160a060020a03331660009081526012602052604081205411620024c357600080fd5b50600160a060020a0333818116600090815260126020526040808220805492905560035491936101009092049091169163a24835d19183906370a082319083905160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200254057600080fd5b5af115156200254e57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156200259c57600080fd5b5af11515620025aa57600080fd5b5050600160a060020a033316905081156108fc0282604051600060405180830381858888f193505050501515620025e057600080fd5b7fec44c8b7c9108bd9d48e9a929c78d5a448562d61b1113d016ba7fd99d7dc3c7c3382426040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a150565b60008282028315806200265a57508284828115156200265757fe5b04145b15156200266357fe5b9392505050565b60008082848115156200267957fe5b04949350505050565b6000828201838110156200266357fe5b6000620026a18260026200266a565b9050600a811115620026b857600a601555620026be565b60158190555b5050565b600080620026e0620026d742600f54620030a5565b600e546200263c565b90508030600160a060020a0316311015620027025750600160a060020a033016315b8091505b5090565b60008060006016541180156200272257506016544210155b80156200273f57506200273b6016546201518062002682565b4211155b156200274f576001915062002706565b601854811015620027c75760188054829081106200276957fe5b9060005260206000209001544210158015620027ae5750620027aa6018828154811015156200279457fe5b9060005260206000209001546201518062002682565b4211155b15620027be576001915062002706565b6001016200274f565b600091505090565b620027d962003116565b6000808080620027e98662001a0c565b61ffff168552620027fc6107b262001c1a565b6200280c865161ffff1662001c1a565b039250826301e285000284019350826107b286600001510361ffff16036301e133800284019350600191505b600c60ff83161162002885576200285182865162001c35565b60ff1662015180029050858482011115620028755760ff8216602086015262002885565b9283019260019091019062002838565b600191505b6200289b8560200151865162001c35565b60ff168260ff16111515620028dc57858462015180011115620028c75760ff82166040860152620028dc565b6201518093909301926001909101906200288a565b620028e786620010b1565b60ff166060860152620028fa8662002228565b60ff1660808601526200290d8662001868565b60ff1660a08601526200292086620012fc565b60ff1660c08601525092949350505050565b60026003805460ff16908111156200294657fe5b146200295157600080fd5b6003805460ff1916811790819055600c54600160a060020a0361010090920482169163a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515620029c057600080fd5b5af11515620029ce57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002a1c57600080fd5b5af1151562002a2a57600080fd5b5050600354600a54600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002a9157600080fd5b5af1151562002a9f57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002aed57600080fd5b5af1151562002afb57600080fd5b5050600354600854600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002b6257600080fd5b5af1151562002b7057600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002bbe57600080fd5b5af1151562002bcc57600080fd5b5050600354600754600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002c3357600080fd5b5af1151562002c4157600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002c8f57600080fd5b5af1151562002c9d57600080fd5b5050600354600954600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002d0457600080fd5b5af1151562002d1257600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002d6057600080fd5b5af1151562002d6e57600080fd5b5050600354600654600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002dd557600080fd5b5af1151562002de357600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002e3157600080fd5b5af1151562002e3f57600080fd5b5050600354600b54600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002ea657600080fd5b5af1151562002eb457600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002f0257600080fd5b5af1151562002f1057600080fd5b5050507f32a9af620b9010e46c598870c64620a9c1b65816b3140fbd73ea13f2e50cdb2333604051600160a060020a03909116815260200160405180910390a1565b6000805b60015482101562002fb85760006002600060018581548110151562002f7757fe5b600091825260208083209190910154600160a060020a031683528201929092526040019020805460ff19169115159190911790556001919091019062002f56565b5060005b8251811015620030145760016002600085848151811062002fd957fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff191691151591909117905560010162002fbc565b60018380516200302992916020019062003152565b507f9465cd279c2de393c5568ae444599e3644e3d1864ca2c05ced8a654df2aea3cb8360405160208082528190810183818151815260200191508051906020019060200280838360005b838110156200308d57808201518382015260200162003073565b505050509050019250505060405180910390a1505050565b600081831015620030b257fe5b50900390565b604051610a6280620031db83390190565b6040516109de8062003c3d83390190565b610180604051908101604052600c815b600081526000199091019060200181620030ea5790505090565b60206040519081016040526000815290565b60e06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c082015290565b828054828255906000526020600020908101928215620031ac579160200282015b82811115620031ac5782518254600160a060020a031916600160a060020a03919091161782556020929092019160019091019062003173565b506200270692620016339250905b8082111562002706578054600160a060020a0319168155600101620031ba560060606040526000600555600060065560006007556000600b55341561002357600080fd5b60405160c080610a6283398101604052808051919060200180519190602001805191906020018051919060200180519190602001805191508590508484846000600160a060020a038516151561007857600080fd5b42831015801561008757508282115b151561009257600080fd5b60008054600160a060020a03968716600160a060020a03199182161790915560018054959096169416939093179093556002556003919091556008805460ff199081169091556004805492151592909116919091179055600a95909555505050600b919091555061095a806101086000396000f3006060604052600436106100e25763ffffffff60e060020a6000350416632c24909c81146100e75780633197cbb61461010c578063361810261461011f57806341fdade61461014657806343c14b22146101595780634b9f5c981461016e57806364a90292146101865780636f6a97621461019957806378e97925146101ac57806380322cbd146101bf578063a7491b48146101d2578063b3a2273f14610217578063b3f05b971461022a578063c734f9171461023d578063d74689e41461025f578063e82bef2914610272578063fc0c546a146102a1578063fd221031146102b4575b600080fd5b34156100f257600080fd5b6100fa6102c7565b60405190815260200160405180910390f35b341561011757600080fd5b6100fa610345565b341561012a57600080fd5b61013261034b565b604051901515815260200160405180910390f35b341561015157600080fd5b6100fa610393565b341561016457600080fd5b61016c610399565b005b341561017957600080fd5b61016c6004351515610458565b341561019157600080fd5b6100fa6105ee565b34156101a457600080fd5b6100fa6105f4565b34156101b757600080fd5b6100fa6105fa565b34156101ca57600080fd5b610132610600565b34156101dd57600080fd5b6101f1600160a060020a036004351661060a565b604051928352602083019190915215156040808301919091526060909101905180910390f35b341561022257600080fd5b6100fa61062e565b341561023557600080fd5b610132610634565b341561024857600080fd5b61016c600160a060020a036004351660243561063d565b341561026a57600080fd5b6100fa610814565b341561027d57600080fd5b61028561081a565b604051600160a060020a03909116815260200160405180910390f35b34156102ac57600080fd5b610285610829565b34156102bf57600080fd5b6100fa610838565b600061033f6102e46102dd60055460065461083e565b6064610854565b600054600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561032357600080fd5b5af1151561033057600080fd5b50505060405180519050610878565b90505b90565b60035481565b60085460009060ff161561035e57600080fd5b60035442101561037057506000610342565b6008805460ff1916600117905561038d61038861088f565b6108b1565b50600190565b6103e881565b60008060025442101580156103b057506003544211155b15156103bb57600080fd5b600160a060020a033316600090815260096020526040812054116103de57600080fd5b5050600160a060020a033316600090815260096020526040812060018082018054600284018054948690559490915560ff19831690935560075460ff909216916104279161091c565b60075580156104445761043c6005548361091c565b600555610454565b6104506006548361091c565b6006555b5050565b600080600254421015801561046f57506003544211155b151561047a57600080fd5b600160a060020a0333166000908152600960205260409020541561049d57600080fd5b600054600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156104ed57600080fd5b5af115156104fa57600080fd5b50505060405180516000549093506105689150600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561054957600080fd5b5af1151561055657600080fd5b505050604051805190506103e8610878565b905080821115610578578061057a565b815b915082156105965761058e6005548361083e565b6005556105a6565b6105a26006548361083e565b6006555b33600160a060020a0316600090815260096020526040902042815560018082018490556002909101805460ff19168515151790556007546105e69161083e565b600755505050565b60065481565b600b5481565b60025481565b600061033f61088f565b60096020526000908152604090208054600182015460029092015490919060ff1683565b60075481565b60085460ff1681565b60015460009033600160a060020a0390811691161461065b57600080fd5b600160a060020a038316600090815260096020526040902054151561067f5761080f565b60045460ff1615156106b25760085460ff16806106a857506002544210806106a8575060035442115b156106b25761080f565b600160a060020a03808416600090815260096020526040808220600101549154919291909116906370a082319086905160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561071d57600080fd5b5af1151561072a57600080fd5b505050604051805190501015156107405761080f565b50600160a060020a03821660009081526009602052604090206001015481908111156107845750600160a060020a0382166000908152600960205260409020600101545b600160a060020a03831660009081526009602052604090206002015460ff16156107bc576107b46005548261091c565b6005556107cc565b6107c86006548261091c565b6006555b600160a060020a0383166000908152600960205260409020600101546107f2908261091c565b600160a060020a0384166000908152600960205260409020600101555b505050565b60055481565b600154600160a060020a031681565b600054600160a060020a031681565b600a5481565b60008282018381101561084d57fe5b9392505050565b6000828202831580610870575082848281151561086d57fe5b04145b151561084d57fe5b600080828481151561088657fe5b04949350505050565b600060065460055411801561033f5750600b546108aa6102c7565b1015905090565b600154600a54600160a060020a039091169081906329c90b6390849060405160e060020a63ffffffff851602815291151560048301526024820152604401600060405180830381600087803b151561090857600080fd5b5af1151561091557600080fd5b5050505050565b60008183101561092857fe5b509003905600a165627a7a7230582059b9e61e8cd64d75d9fd9707882faf208afa8c2a4a99bc7f4ed6dd90ad40be26002960606040526000600555600060065560006007556000600a55341561002357600080fd5b60405160c0806109de833981016040528080519190602001805191906020018051919060200180519190602001805191906020018051915086905085858584600160a060020a038516151561007757600080fd5b42831015801561008657508282115b151561009157600080fd5b60008054600160a060020a03968716600160a060020a03199182161790915560018054959096169416939093179093556002556003919091556008805460ff19908116909155600480549215159290911691909117905550600a55505050506108df806100ff6000396000f3006060604052600436106100cc5763ffffffff60e060020a6000350416633197cbb681146100d157806336181026146100f657806341fdade61461011d57806343c14b22146101305780634b9f5c981461014557806364a902921461015d578063728b482b1461017057806378e979251461018357806380322cbd14610196578063a7491b48146101a9578063b3a2273f146101ee578063b3f05b9714610201578063c734f91714610214578063d74689e414610236578063e82bef2914610249578063fc0c546a14610278575b600080fd5b34156100dc57600080fd5b6100e461028b565b60405190815260200160405180910390f35b341561010157600080fd5b610109610291565b604051901515815260200160405180910390f35b341561012857600080fd5b6100e46102f2565b341561013b57600080fd5b6101436102f8565b005b341561015057600080fd5b61014360043515156103b7565b341561016857600080fd5b6100e461054d565b341561017b57600080fd5b6100e4610553565b341561018e57600080fd5b6100e4610559565b34156101a157600080fd5b61010961055f565b34156101b457600080fd5b6101c8600160a060020a036004351661056e565b604051928352602083019190915215156040808301919091526060909101905180910390f35b34156101f957600080fd5b6100e4610592565b341561020c57600080fd5b610109610598565b341561021f57600080fd5b610143600160a060020a03600435166024356105a1565b341561024157600080fd5b6100e4610778565b341561025457600080fd5b61025c61077e565b604051600160a060020a03909116815260200160405180910390f35b341561028357600080fd5b61025c61078d565b60035481565b600080600a541180156102a75750600354600a54115b156102c057600a544210156102bb57600080fd5b6102cf565b6003544210156102cf57600080fd5b6008805460ff191660011790556102ec6102e761079c565b610817565b50600190565b6103e881565b600080600254421015801561030f57506003544211155b151561031a57600080fd5b600160a060020a0333166000908152600960205260408120541161033d57600080fd5b5050600160a060020a033316600090815260096020526040812060018082018054600284018054948690559490915560ff19831690935560075460ff9092169161038691610874565b60075580156103a35761039b60055483610874565b6005556103b3565b6103af60065483610874565b6006555b5050565b60008060025442101580156103ce57506003544211155b15156103d957600080fd5b600160a060020a033316600090815260096020526040902054156103fc57600080fd5b600054600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561044c57600080fd5b5af1151561045957600080fd5b50505060405180516000549093506104c79150600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156104a857600080fd5b5af115156104b557600080fd5b505050604051805190506103e8610886565b9050808211156104d757806104d9565b815b915082156104f5576104ed6005548361089d565b600555610505565b6105016006548361089d565b6006555b33600160a060020a0316600090815260096020526040902042815560018082018490556002909101805460ff19168515151790556007546105459161089d565b600755505050565b60065481565b600a5481565b60025481565b600061056961079c565b905090565b60096020526000908152604090208054600182015460029092015490919060ff1683565b60075481565b60085460ff1681565b60015460009033600160a060020a039081169116146105bf57600080fd5b600160a060020a03831660009081526009602052604090205415156105e357610773565b60045460ff1615156106165760085460ff168061060c575060025442108061060c575060035442115b1561061657610773565b600160a060020a03808416600090815260096020526040808220600101549154919291909116906370a082319086905160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561068157600080fd5b5af1151561068e57600080fd5b505050604051805190501015156106a457610773565b50600160a060020a03821660009081526009602052604090206001015481908111156106e85750600160a060020a0382166000908152600960205260409020600101545b600160a060020a03831660009081526009602052604090206002015460ff16156107205761071860055482610874565b600555610730565b61072c60065482610874565b6006555b600160a060020a0383166000908152600960205260409020600101546107569082610874565b600160a060020a0384166000908152600960205260409020600101555b505050565b60055481565b600154600160a060020a031681565b600054600160a060020a031681565b6000600654600554118015610569575060005461080d90600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156107ef57600080fd5b5af115156107fc57600080fd5b505050604051805190506003610886565b6005541015905090565b600154600160a060020a0316806389ea2cb78360405160e060020a63ffffffff84160281529015156004820152602401600060405180830381600087803b151561086057600080fd5b5af1151561086d57600080fd5b5050505050565b60008183101561088057fe5b50900390565b600080828481151561089457fe5b04949350505050565b6000828201838110156108ac57fe5b93925050505600a165627a7a7230582008913de14f0f24c71050379b6997cb6e8d4ff163e3e8f3e73edbd6069a08d95f0029a165627a7a72305820933a469c477da45183c7ccef2cc51e8cce1c9f6715277e653a22eb77386679c70029000000000000000000000000e45f9c10f3e4647ac922b0128e688e8e1f220f5f000000000000000000000000f759cae90459c72bb3668fcd8e674f9e1eb9c2c30000000000000000000000009496dbbb9bc9fd78d4735b954569a54fe2a0d9f30000000000000000000000005686508abbff20db6a582643280601ef53b58ddf000000000000000000000000a1568c501e650c83337f8119b6276c0de4aabb0f00000000000000000000000073c2d67e4181ad1926b4b47b56d3d2c198b8760400000000000000000000000011f21536f888def8c7d2c4785f3f70b3ddbca1b90000000000000000000000002d2edbfa6c22c276263dacf1252eb0611bde751d000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010000000000000000000000005eaf0a37346ff992199fbc4480c9ccc4137d9c1f

Deployed Bytecode

0x606060405260043610620003355763ffffffff60e060020a600035041663025e7c2781146200033a578063026eca12146200036f57806302fc28c4146200038d57806308867fc214620003b5578063192f107614620003cb5780631f35bc4014620003e157806326a4e8d2146200040357806326b52faf146200042557806329c90b63146200043b57806331d2f891146200045957806336e61cf7146200046f5780633b64e77e14620004885780633ccfd60b146200049e5780633e239e1a14620004b457806340e6b00a14620004e357806342e94c9014620004f9578063481c6a75146200051b5780634ac1ad78146200053157806359927044146200054a5780635f58384614620005605780636252c127146200057957806362ba9687146200058f57806365c7284014620005c4578063677ba3d314620005dd578063774a97cf14620006085780637ddbf0ed146200061e5780637f791833146200064057806384219204146200066f57806387174c3e1462000685578063880dc4e6146200069b57806389ea2cb714620006c55780638aa001fc14620006e05780638c8d98a014620006f9578063903171ae14620007225780639054bbb614620007385780639054bdec146200074e57806392a0fd64146200078957806392d66313146200079f578063962c9c8d14620007cf578063a0e67e2b14620007e5578063a324ad241462000850578063a666ff3c1462000869578063a6f0e577146200087f578063a78a651a146200089c578063ab23151114620008b2578063b199993714620008c8578063b238ad0e14620008e1578063b465e52f1462000904578063b51459fe146200091a578063bd7427f81462000930578063c19d93fb1462000946578063c5f5ce211462000981578063cae6b9c51462000997578063cc96019f14620009ad578063d0e6cfec14620009c3578063d66f146d14620009d9578063e2d2a86814620009ef578063e9b5a2f71462000a11578063eb6b192f1462000a27578063f190a7931462000a49578063fa4d36981462000a5f578063fa93f8831462000ab1578063fbbfe8301462000aca578063fc0c546a1462000ae0578063fd2210311462000af6578063ff01ffa81462000b0c575b600080fd5b34156200034657600080fd5b6200035360043562000b22565b604051600160a060020a03909116815260200160405180910390f35b34156200037b57600080fd5b6200038b60ff6004351662000b4b565b005b34156200039957600080fd5b620003a362000cdf565b60405190815260200160405180910390f35b3415620003c157600080fd5b620003a362000ce6565b3415620003d757600080fd5b620003a362000ced565b3415620003ed57600080fd5b6200038b600160a060020a036004351662000cf3565b34156200040f57600080fd5b6200038b600160a060020a036004351662000d57565b34156200043157600080fd5b620003a362000dd3565b34156200044757600080fd5b6200038b600435151560243562000dd9565b34156200046557600080fd5b6200035362000f18565b34156200047b57600080fd5b6200038b60043562000f27565b34156200049457600080fd5b6200038b62000f85565b3415620004aa57600080fd5b6200038b62000fcf565b3415620004c057600080fd5b620004cd600435620010b1565b60405160ff909116815260200160405180910390f35b3415620004ef57600080fd5b6200038b620010cf565b34156200050557600080fd5b620003a3600160a060020a0360043516620012db565b34156200052757600080fd5b62000353620012ed565b34156200053d57600080fd5b620004cd600435620012fc565b34156200055657600080fd5b620003536200130f565b34156200056c57600080fd5b620003a36004356200131e565b34156200058557600080fd5b6200038b6200133e565b34156200059b57600080fd5b620003a361ffff6004351660ff60243581169060443581169060643581169060843516620013e9565b3415620005d057600080fd5b620004cd60043562001406565b3415620005e957600080fd5b6200038b600160a060020a03600435811690602435166044356200141d565b34156200061457600080fd5b620003a362001601565b34156200062a57600080fd5b6200038b600160a060020a036004351662001636565b34156200064c57600080fd5b620003a361ffff6004351660ff602435811690604435811690606435166200169a565b34156200067b57600080fd5b620003a3620016b6565b34156200069157600080fd5b62000353620016bc565b3415620006a757600080fd5b620006b1620016cb565b604051901515815260200160405180910390f35b3415620006d157600080fd5b6200038b6004351515620016d4565b3415620006ec57600080fd5b620004cd60043562001868565b34156200070557600080fd5b620003a361ffff6004351660ff6024358116906044351662001873565b34156200072e57600080fd5b620003536200188f565b34156200074457600080fd5b620003a36200189e565b34156200075a57600080fd5b620003a361ffff6004351660ff60243581169060443581169060643581169060843581169060a43516620018a8565b34156200079557600080fd5b62000353620019fd565b3415620007ab57600080fd5b620007b860043562001a0c565b60405161ffff909116815260200160405180910390f35b3415620007db57600080fd5b620003a362001aa6565b3415620007f157600080fd5b620007fb62001aab565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156200083c57808201518382015260200162000822565b505050509050019250505060405180910390f35b34156200085c57600080fd5b620004cd60043562001b17565b34156200087557600080fd5b6200035362001b2e565b34156200088b57600080fd5b620006b161ffff6004351662001b3d565b6200038b600160a060020a036004351662001b91565b3415620008be57600080fd5b620003a362001c14565b3415620008d457600080fd5b620003a360043562001c1a565b3415620008ed57600080fd5b620004cd60ff6004351661ffff6024351662001c35565b34156200091057600080fd5b620003a362001d0e565b34156200092657600080fd5b620006b162001d14565b34156200093c57600080fd5b6200038b62001eca565b34156200095257600080fd5b6200095c62001ef2565b604051808260038111156200096d57fe5b60ff16815260200191505060405180910390f35b34156200098d57600080fd5b6200035362001efb565b3415620009a357600080fd5b6200035362001f0a565b3415620009b957600080fd5b6200035362001f19565b3415620009cf57600080fd5b6200035362001f28565b3415620009e557600080fd5b6200035362001f37565b3415620009fb57600080fd5b6200038b600160a060020a036004351662001f46565b341562000a1d57600080fd5b6200038b6200214a565b341562000a3357600080fd5b620006b1600160a060020a0360043516620021da565b341562000a5557600080fd5b62000353620021ef565b341562000a6b57600080fd5b6200038b6004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650620021fe95505050505050565b341562000abd57600080fd5b620004cd60043562002228565b341562000ad657600080fd5b6200038b62002234565b341562000aec57600080fd5b6200035362002464565b341562000b0257600080fd5b620003a362002478565b341562000b1857600080fd5b6200038b6200247e565b600180548290811062000b3157fe5b600091825260209091200154600160a060020a0316905081565b600160a060020a0333166000908152600260205260408120548190819060ff16151560011462000b7a57600080fd5b60026003805460ff169081111562000b8e57fe5b1462000b9957600080fd5b601354600160a060020a03161562000bb057600080fd5b62000bbb4262001406565b60ff16600a14151562000bcd57600080fd5b603260ff8516111562000bdf57600080fd5b62000c09600e5462000c0362000bfb600e548860ff166200263c565b60646200266a565b62002682565b92504291506203f4808201905082600360019054906101000a9004600160a060020a031630848460155462000c3d620030b8565b958652600160a060020a039485166020870152929093166040808601919091526060850191909152608084019290925260a083015260c09091019051809103906000f080151562000c8d57600080fd5b60138054600160a060020a031916600160a060020a03929092169190911790557f330d2f37998c8839fca77205925adc69e2c4aa616175f8b357f42f84d06c454960405160405180910390a150505050565b6203f48081565b62093a8081565b60055481565b600160a060020a03331660009081526002602052604090205460ff16151560011462000d1e57600080fd5b601154600160a060020a03161562000d3557600080fd5b60118054600160a060020a031916600160a060020a0392909216919091179055565b600160a060020a03331660009081526002602052604090205460ff16151560011462000d8257600080fd5b6003546101009004600160a060020a03161562000d9e57600080fd5b60038054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b60105481565b60135433600160a060020a03908116911614801562000e4c5750601354600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562000e3357600080fd5b5af1151562000e4157600080fd5b505050604051805190505b151562000e5857600080fd5b811562000e6557600e8190555b60135462000ec890600160a060020a0316632c24909c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562000eaa57600080fd5b5af1151562000eb857600080fd5b5050506040518051905062002692565b7fecb94f7dd81b39de2b8d95fa8a4d9f0a8723d7a974187fef4fa5305ca5d162488282604051911515825260208201526040908101905180910390a1505060138054600160a060020a0319169055565b601154600160a060020a031681565b600160a060020a03331660009081526002602052604090205460ff16151560011462000f5257600080fd5b60026003805460ff169081111562000f6657fe5b1462000f7157600080fd5b600e54811062000f8057600080fd5b600e55565b60115433600160a060020a0390811691161462000fa157600080fd5b60006003805460ff169081111562000fb557fe5b1462000fc057600080fd5b6003805460ff19166001179055565b600160a060020a03331660009081526002602052604081205460ff16151560011462000ffa57600080fd5b6200100462001d14565b15156200101057600080fd5b60026003805460ff16908111156200102457fe5b146200102f57600080fd5b62001039620026c2565b42600f55600454909150600160a060020a031681156108fc0282604051600060405180830381858888f1935050505015156200107457600080fd5b7f56ca301a9219608c91e7bcee90e083c19671d2cdcc96752c7af291cee5f9c8c8814260405191825260208201526040908101905180910390a150565b60006018603c8084045b04811515620010c657fe5b0690505b919050565b6000806000806000600360019054906101000a9004600160a060020a0316600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200113b57600080fd5b5af115156200114957600080fd5b505050604051805190501115156200116057600080fd5b60026003805460ff16908111156200117457fe5b146200117f57600080fd5b601454600160a060020a0316156200119657600080fd5b620011a06200270a565b1515620011ac57600080fd5b6000601654118015620011ce5750620011cb6016546201518062002682565b42115b15620011da5760006016555b505060165442925062093a808301915015600081156200121c5762001219620012038562001a0c565b6200120e8662001b17565b600101600162001873565b90505b6003546101009004600160a060020a031630858584866200123c620030c9565b600160a060020a0396871681529490951660208501526040808501939093526060840191909152608083015291151560a082015260c0019051809103906000f08015156200128957600080fd5b60148054600160a060020a031916600160a060020a03929092169190911790557fd1a79c97f023d07d5c5533b0887300f81e113759deeb9531a541b93341ceab7f60405160405180910390a150505050565b60126020526000908152604090205481565b600054600160a060020a031681565b60006007600462015180840401620010c6565b600454600160a060020a031681565b60188054829081106200132d57fe5b600091825260209091200154905081565b60115460009033600160a060020a039081169116146200135d57600080fd5b506003805460ff19166002179055601154600160a060020a0316620013d081634d52a5126040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620013b057600080fd5b5af11515620013be57600080fd5b5050506040518051905060026200266a565b6010555042600f81905565af7151902add600e55600555565b6000620013fc86868686866000620018a8565b9695505050505050565b60006200141382620027cf565b6040015192915050565b60035433600160a060020a0390811661010090920416146200143e57600080fd5b601354600160a060020a031615801590620014ae5750601354600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200149457600080fd5b5af11515620014a257600080fd5b50505060405180519050155b156200151d57601354600160a060020a031663c734f917848360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156200150b57600080fd5b5af115156200151957600080fd5b5050505b601454600160a060020a0316158015906200158d5750601454600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200157357600080fd5b5af115156200158157600080fd5b50505060405180519050155b15620015fc57601454600160a060020a031663c734f917848360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515620015ea57600080fd5b5af11515620015f857600080fd5b5050505b505050565b600060026003805460ff16908111156200161757fe5b14620016265750600062001633565b62001630620026c2565b90505b90565b600160a060020a03331660009081526002602052604090205460ff1615156001146200166157600080fd5b600c54600160a060020a0316156200167857600080fd5b600c8054600160a060020a031916600160a060020a0392909216919091179055565b6000620016ad85858585600080620018a8565b95945050505050565b60155481565b600d54600160a060020a031681565b60175460ff1681565b60145460009033600160a060020a0390811691161480156200174a5750601454600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200173157600080fd5b5af115156200173f57600080fd5b505050604051805190505b15156200175657600080fd5b81156200180c576000601654111562001779576200177362002932565b62001806565b601454600160a060020a03166378e979256040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620017b957600080fd5b5af11515620017c757600080fd5b505050604051805190509050620017f8620017e28262001a0c565b620017ed8362001b17565b600201600162001873565b6016556017805460ff191690555b6200181f565b60006016556017805460ff191660011790555b7f9ab7d9b3f53fbde0442a57f23d2eca52d14cd437e392cf8896a96f3647dff6db82604051901515815260200160405180910390a1505060148054600160a060020a0319169055565b6000603c82620010c6565b6000620018878484846000806000620018a8565b949350505050565b600754600160a060020a031681565b65af7151902add81565b600080620018b5620030da565b6107b291505b8861ffff168261ffff1610156200190257620018d78262001b3d565b15620018ec576301e2850083019250620018f6565b6301e13380830192505b600190910190620018bb565b601f8152620019118962001b3d565b156200192457601d60208201526200192c565b601c60208201525b601f60408201819052601e606083018190526080830182905260a0830181905260c0830182905260e0830182905261010083018190526101208301829052610140830152610160820152600191505b8760ff168261ffff161015620019bf578061ffff600019840116600c8110620019a057fe5b602002015160ff1662015180028301925081806001019250506200197b565b6001870360ff166201518002830192508560ff16610e1002830192508460ff16603c02830192508360ff168301925082925050509695505050505050565b600854600160a060020a031681565b6000806107b26301e133808404810190829062001a299062001c1a565b62001a388361ffff1662001c1a565b039050806301e285000283019250806107b2830361ffff16036301e1338002830192505b8483111562001a9e5762001a736001830362001b3d565b1562001a88576301e285008303925062001a92565b6301e13380830392505b60018203915062001a5c565b509392505050565b600a81565b62001ab562003104565b600180548060200260200160405190810160405280929190818152602001828054801562001b0d57602002820191906000526020600020905b8154600160a060020a0316815260019091019060200180831162001aee575b5050505050905090565b600062001b2482620027cf565b6020015192915050565b600c54600160a060020a031681565b6000600382161562001b5257506000620010ca565b606461ffff83160661ffff161562001b6d57506001620010ca565b61019061ffff83160661ffff161562001b8957506000620010ca565b506001919050565b60115460009033600160a060020a0390811691161462001bb057600080fd5b60006003805460ff169081111562001bc457fe5b1462001bcf57600080fd5b600160a060020a03821660009081526012602052604090205462001bf4903462002682565b600160a060020a0390921660009081526012602052604090209190915550565b600f5481565b60001901600061019082046064830460048404030192915050565b60008260ff166001148062001c4d57508260ff166003145b8062001c5c57508260ff166005145b8062001c6b57508260ff166007145b8062001c7a57508260ff166008145b8062001c8957508260ff16600a145b8062001c9857508260ff16600c145b1562001ca75750601f62001d08565b8260ff166004148062001cbd57508260ff166006145b8062001ccc57508260ff166009145b8062001cdb57508260ff16600b145b1562001cea5750601e62001d08565b62001cf58262001b3d565b1562001d045750601d62001d08565b50601c5b92915050565b60165481565b601454600090600160a060020a03161580159062001d875750601454600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001d6d57600080fd5b5af1151562001d7b57600080fd5b50505060405180519050155b801562001dec5750601454600090600160a060020a031663728b482b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001dd257600080fd5b5af1151562001de057600080fd5b50505060405180519050115b801562001e505750601454600160a060020a031663728b482b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001e3457600080fd5b5af1151562001e4257600080fd5b505050604051805190504210155b801562001eb15750601454600160a060020a03166380322cbd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001e9857600080fd5b5af1151562001ea657600080fd5b505050604051805190505b1562001ec05750600062001633565b5060175460ff1690565b600d5433600160a060020a0390811691161462001ee657600080fd5b62001ef062002932565b565b60035460ff1681565b600b54600160a060020a031681565b601354600160a060020a031681565b600654600160a060020a031681565b600954600160a060020a031681565b601454600160a060020a031681565b600160a060020a03331660009081526002602052604081205460ff1615156001148062001f815750600d5433600160a060020a039081169116145b151562001f8d57600080fd5b60016003805460ff169081111562001fa157fe5b1462001fac57600080fd5b600160a060020a0382166000908152601260205260408120541162001fd057600080fd5b50600160a060020a03808216600090815260126020526040808220805492905560035491926101009092049091169063a24835d190849083906370a082319083905160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200204e57600080fd5b5af115156200205c57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515620020aa57600080fd5b5af11515620020b857600080fd5b505050600160a060020a0382166108fc82150282604051600060405180830381858888f193505050501515620020ed57600080fd5b7fec44c8b7c9108bd9d48e9a929c78d5a448562d61b1113d016ba7fd99d7dc3c7c8282426040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a15050565b600160a060020a03331660009081526002602052604081205460ff1615156001146200217557600080fd5b6200217f62001d14565b15156200218b57600080fd5b601054600090116200219c57600080fd5b50601080546000909155600454600160a060020a031681156108fc0282604051600060405180830381858888f1935050505015156200107457600080fd5b60026020526000908152604090205460ff1681565b600a54600160a060020a031681565b60005433600160a060020a039081169116146200221a57600080fd5b620022258162002f52565b50565b6000603c8083620010bb565b600080600380805460ff16908111156200224a57fe5b146200225557600080fd5b6003546101009004600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515620022ab57600080fd5b5af11515620022b957600080fd5b505050604051805192505060008211620022d257600080fd5b6200234f620022ec8330600160a060020a0316316200263c565b6003546101009004600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200233157600080fd5b5af115156200233f57600080fd5b505050604051805190506200266a565b9050600081116200235f57600080fd5b6003546101009004600160a060020a031663a24835d1338460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515620023bb57600080fd5b5af11515620023c957600080fd5b5050600160a060020a033316905081156108fc0282604051600060405180830381858888f193505050501515620023ff57600080fd5b7f2fe53133356d775fd6784d23de274186e0721e0d93074ae2392acb8968bb2e51338284426040518085600160a060020a0316600160a060020a0316815260200184815260200183815260200182815260200194505050505060405180910390a15050565b6003546101009004600160a060020a031681565b600e5481565b600060016003805460ff16908111156200249457fe5b146200249f57600080fd5b600160a060020a03331660009081526012602052604081205411620024c357600080fd5b50600160a060020a0333818116600090815260126020526040808220805492905560035491936101009092049091169163a24835d19183906370a082319083905160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200254057600080fd5b5af115156200254e57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156200259c57600080fd5b5af11515620025aa57600080fd5b5050600160a060020a033316905081156108fc0282604051600060405180830381858888f193505050501515620025e057600080fd5b7fec44c8b7c9108bd9d48e9a929c78d5a448562d61b1113d016ba7fd99d7dc3c7c3382426040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a150565b60008282028315806200265a57508284828115156200265757fe5b04145b15156200266357fe5b9392505050565b60008082848115156200267957fe5b04949350505050565b6000828201838110156200266357fe5b6000620026a18260026200266a565b9050600a811115620026b857600a601555620026be565b60158190555b5050565b600080620026e0620026d742600f54620030a5565b600e546200263c565b90508030600160a060020a0316311015620027025750600160a060020a033016315b8091505b5090565b60008060006016541180156200272257506016544210155b80156200273f57506200273b6016546201518062002682565b4211155b156200274f576001915062002706565b601854811015620027c75760188054829081106200276957fe5b9060005260206000209001544210158015620027ae5750620027aa6018828154811015156200279457fe5b9060005260206000209001546201518062002682565b4211155b15620027be576001915062002706565b6001016200274f565b600091505090565b620027d962003116565b6000808080620027e98662001a0c565b61ffff168552620027fc6107b262001c1a565b6200280c865161ffff1662001c1a565b039250826301e285000284019350826107b286600001510361ffff16036301e133800284019350600191505b600c60ff83161162002885576200285182865162001c35565b60ff1662015180029050858482011115620028755760ff8216602086015262002885565b9283019260019091019062002838565b600191505b6200289b8560200151865162001c35565b60ff168260ff16111515620028dc57858462015180011115620028c75760ff82166040860152620028dc565b6201518093909301926001909101906200288a565b620028e786620010b1565b60ff166060860152620028fa8662002228565b60ff1660808601526200290d8662001868565b60ff1660a08601526200292086620012fc565b60ff1660c08601525092949350505050565b60026003805460ff16908111156200294657fe5b146200295157600080fd5b6003805460ff1916811790819055600c54600160a060020a0361010090920482169163a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515620029c057600080fd5b5af11515620029ce57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002a1c57600080fd5b5af1151562002a2a57600080fd5b5050600354600a54600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002a9157600080fd5b5af1151562002a9f57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002aed57600080fd5b5af1151562002afb57600080fd5b5050600354600854600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002b6257600080fd5b5af1151562002b7057600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002bbe57600080fd5b5af1151562002bcc57600080fd5b5050600354600754600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002c3357600080fd5b5af1151562002c4157600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002c8f57600080fd5b5af1151562002c9d57600080fd5b5050600354600954600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002d0457600080fd5b5af1151562002d1257600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002d6057600080fd5b5af1151562002d6e57600080fd5b5050600354600654600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002dd557600080fd5b5af1151562002de357600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002e3157600080fd5b5af1151562002e3f57600080fd5b5050600354600b54600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002ea657600080fd5b5af1151562002eb457600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002f0257600080fd5b5af1151562002f1057600080fd5b5050507f32a9af620b9010e46c598870c64620a9c1b65816b3140fbd73ea13f2e50cdb2333604051600160a060020a03909116815260200160405180910390a1565b6000805b60015482101562002fb85760006002600060018581548110151562002f7757fe5b600091825260208083209190910154600160a060020a031683528201929092526040019020805460ff19169115159190911790556001919091019062002f56565b5060005b8251811015620030145760016002600085848151811062002fd957fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff191691151591909117905560010162002fbc565b60018380516200302992916020019062003152565b507f9465cd279c2de393c5568ae444599e3644e3d1864ca2c05ced8a654df2aea3cb8360405160208082528190810183818151815260200191508051906020019060200280838360005b838110156200308d57808201518382015260200162003073565b505050509050019250505060405180910390a1505050565b600081831015620030b257fe5b50900390565b604051610a6280620031db83390190565b6040516109de8062003c3d83390190565b610180604051908101604052600c815b600081526000199091019060200181620030ea5790505090565b60206040519081016040526000815290565b60e06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c082015290565b828054828255906000526020600020908101928215620031ac579160200282015b82811115620031ac5782518254600160a060020a031916600160a060020a03919091161782556020929092019160019091019062003173565b506200270692620016339250905b8082111562002706578054600160a060020a0319168155600101620031ba560060606040526000600555600060065560006007556000600b55341561002357600080fd5b60405160c080610a6283398101604052808051919060200180519190602001805191906020018051919060200180519190602001805191508590508484846000600160a060020a038516151561007857600080fd5b42831015801561008757508282115b151561009257600080fd5b60008054600160a060020a03968716600160a060020a03199182161790915560018054959096169416939093179093556002556003919091556008805460ff199081169091556004805492151592909116919091179055600a95909555505050600b919091555061095a806101086000396000f3006060604052600436106100e25763ffffffff60e060020a6000350416632c24909c81146100e75780633197cbb61461010c578063361810261461011f57806341fdade61461014657806343c14b22146101595780634b9f5c981461016e57806364a90292146101865780636f6a97621461019957806378e97925146101ac57806380322cbd146101bf578063a7491b48146101d2578063b3a2273f14610217578063b3f05b971461022a578063c734f9171461023d578063d74689e41461025f578063e82bef2914610272578063fc0c546a146102a1578063fd221031146102b4575b600080fd5b34156100f257600080fd5b6100fa6102c7565b60405190815260200160405180910390f35b341561011757600080fd5b6100fa610345565b341561012a57600080fd5b61013261034b565b604051901515815260200160405180910390f35b341561015157600080fd5b6100fa610393565b341561016457600080fd5b61016c610399565b005b341561017957600080fd5b61016c6004351515610458565b341561019157600080fd5b6100fa6105ee565b34156101a457600080fd5b6100fa6105f4565b34156101b757600080fd5b6100fa6105fa565b34156101ca57600080fd5b610132610600565b34156101dd57600080fd5b6101f1600160a060020a036004351661060a565b604051928352602083019190915215156040808301919091526060909101905180910390f35b341561022257600080fd5b6100fa61062e565b341561023557600080fd5b610132610634565b341561024857600080fd5b61016c600160a060020a036004351660243561063d565b341561026a57600080fd5b6100fa610814565b341561027d57600080fd5b61028561081a565b604051600160a060020a03909116815260200160405180910390f35b34156102ac57600080fd5b610285610829565b34156102bf57600080fd5b6100fa610838565b600061033f6102e46102dd60055460065461083e565b6064610854565b600054600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561032357600080fd5b5af1151561033057600080fd5b50505060405180519050610878565b90505b90565b60035481565b60085460009060ff161561035e57600080fd5b60035442101561037057506000610342565b6008805460ff1916600117905561038d61038861088f565b6108b1565b50600190565b6103e881565b60008060025442101580156103b057506003544211155b15156103bb57600080fd5b600160a060020a033316600090815260096020526040812054116103de57600080fd5b5050600160a060020a033316600090815260096020526040812060018082018054600284018054948690559490915560ff19831690935560075460ff909216916104279161091c565b60075580156104445761043c6005548361091c565b600555610454565b6104506006548361091c565b6006555b5050565b600080600254421015801561046f57506003544211155b151561047a57600080fd5b600160a060020a0333166000908152600960205260409020541561049d57600080fd5b600054600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156104ed57600080fd5b5af115156104fa57600080fd5b50505060405180516000549093506105689150600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561054957600080fd5b5af1151561055657600080fd5b505050604051805190506103e8610878565b905080821115610578578061057a565b815b915082156105965761058e6005548361083e565b6005556105a6565b6105a26006548361083e565b6006555b33600160a060020a0316600090815260096020526040902042815560018082018490556002909101805460ff19168515151790556007546105e69161083e565b600755505050565b60065481565b600b5481565b60025481565b600061033f61088f565b60096020526000908152604090208054600182015460029092015490919060ff1683565b60075481565b60085460ff1681565b60015460009033600160a060020a0390811691161461065b57600080fd5b600160a060020a038316600090815260096020526040902054151561067f5761080f565b60045460ff1615156106b25760085460ff16806106a857506002544210806106a8575060035442115b156106b25761080f565b600160a060020a03808416600090815260096020526040808220600101549154919291909116906370a082319086905160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561071d57600080fd5b5af1151561072a57600080fd5b505050604051805190501015156107405761080f565b50600160a060020a03821660009081526009602052604090206001015481908111156107845750600160a060020a0382166000908152600960205260409020600101545b600160a060020a03831660009081526009602052604090206002015460ff16156107bc576107b46005548261091c565b6005556107cc565b6107c86006548261091c565b6006555b600160a060020a0383166000908152600960205260409020600101546107f2908261091c565b600160a060020a0384166000908152600960205260409020600101555b505050565b60055481565b600154600160a060020a031681565b600054600160a060020a031681565b600a5481565b60008282018381101561084d57fe5b9392505050565b6000828202831580610870575082848281151561086d57fe5b04145b151561084d57fe5b600080828481151561088657fe5b04949350505050565b600060065460055411801561033f5750600b546108aa6102c7565b1015905090565b600154600a54600160a060020a039091169081906329c90b6390849060405160e060020a63ffffffff851602815291151560048301526024820152604401600060405180830381600087803b151561090857600080fd5b5af1151561091557600080fd5b5050505050565b60008183101561092857fe5b509003905600a165627a7a7230582059b9e61e8cd64d75d9fd9707882faf208afa8c2a4a99bc7f4ed6dd90ad40be26002960606040526000600555600060065560006007556000600a55341561002357600080fd5b60405160c0806109de833981016040528080519190602001805191906020018051919060200180519190602001805191906020018051915086905085858584600160a060020a038516151561007757600080fd5b42831015801561008657508282115b151561009157600080fd5b60008054600160a060020a03968716600160a060020a03199182161790915560018054959096169416939093179093556002556003919091556008805460ff19908116909155600480549215159290911691909117905550600a55505050506108df806100ff6000396000f3006060604052600436106100cc5763ffffffff60e060020a6000350416633197cbb681146100d157806336181026146100f657806341fdade61461011d57806343c14b22146101305780634b9f5c981461014557806364a902921461015d578063728b482b1461017057806378e979251461018357806380322cbd14610196578063a7491b48146101a9578063b3a2273f146101ee578063b3f05b9714610201578063c734f91714610214578063d74689e414610236578063e82bef2914610249578063fc0c546a14610278575b600080fd5b34156100dc57600080fd5b6100e461028b565b60405190815260200160405180910390f35b341561010157600080fd5b610109610291565b604051901515815260200160405180910390f35b341561012857600080fd5b6100e46102f2565b341561013b57600080fd5b6101436102f8565b005b341561015057600080fd5b61014360043515156103b7565b341561016857600080fd5b6100e461054d565b341561017b57600080fd5b6100e4610553565b341561018e57600080fd5b6100e4610559565b34156101a157600080fd5b61010961055f565b34156101b457600080fd5b6101c8600160a060020a036004351661056e565b604051928352602083019190915215156040808301919091526060909101905180910390f35b34156101f957600080fd5b6100e4610592565b341561020c57600080fd5b610109610598565b341561021f57600080fd5b610143600160a060020a03600435166024356105a1565b341561024157600080fd5b6100e4610778565b341561025457600080fd5b61025c61077e565b604051600160a060020a03909116815260200160405180910390f35b341561028357600080fd5b61025c61078d565b60035481565b600080600a541180156102a75750600354600a54115b156102c057600a544210156102bb57600080fd5b6102cf565b6003544210156102cf57600080fd5b6008805460ff191660011790556102ec6102e761079c565b610817565b50600190565b6103e881565b600080600254421015801561030f57506003544211155b151561031a57600080fd5b600160a060020a0333166000908152600960205260408120541161033d57600080fd5b5050600160a060020a033316600090815260096020526040812060018082018054600284018054948690559490915560ff19831690935560075460ff9092169161038691610874565b60075580156103a35761039b60055483610874565b6005556103b3565b6103af60065483610874565b6006555b5050565b60008060025442101580156103ce57506003544211155b15156103d957600080fd5b600160a060020a033316600090815260096020526040902054156103fc57600080fd5b600054600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561044c57600080fd5b5af1151561045957600080fd5b50505060405180516000549093506104c79150600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156104a857600080fd5b5af115156104b557600080fd5b505050604051805190506103e8610886565b9050808211156104d757806104d9565b815b915082156104f5576104ed6005548361089d565b600555610505565b6105016006548361089d565b6006555b33600160a060020a0316600090815260096020526040902042815560018082018490556002909101805460ff19168515151790556007546105459161089d565b600755505050565b60065481565b600a5481565b60025481565b600061056961079c565b905090565b60096020526000908152604090208054600182015460029092015490919060ff1683565b60075481565b60085460ff1681565b60015460009033600160a060020a039081169116146105bf57600080fd5b600160a060020a03831660009081526009602052604090205415156105e357610773565b60045460ff1615156106165760085460ff168061060c575060025442108061060c575060035442115b1561061657610773565b600160a060020a03808416600090815260096020526040808220600101549154919291909116906370a082319086905160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561068157600080fd5b5af1151561068e57600080fd5b505050604051805190501015156106a457610773565b50600160a060020a03821660009081526009602052604090206001015481908111156106e85750600160a060020a0382166000908152600960205260409020600101545b600160a060020a03831660009081526009602052604090206002015460ff16156107205761071860055482610874565b600555610730565b61072c60065482610874565b6006555b600160a060020a0383166000908152600960205260409020600101546107569082610874565b600160a060020a0384166000908152600960205260409020600101555b505050565b60055481565b600154600160a060020a031681565b600054600160a060020a031681565b6000600654600554118015610569575060005461080d90600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156107ef57600080fd5b5af115156107fc57600080fd5b505050604051805190506003610886565b6005541015905090565b600154600160a060020a0316806389ea2cb78360405160e060020a63ffffffff84160281529015156004820152602401600060405180830381600087803b151561086057600080fd5b5af1151561086d57600080fd5b5050505050565b60008183101561088057fe5b50900390565b600080828481151561089457fe5b04949350505050565b6000828201838110156108ac57fe5b93925050505600a165627a7a7230582008913de14f0f24c71050379b6997cb6e8d4ff163e3e8f3e73edbd6069a08d95f0029a165627a7a72305820933a469c477da45183c7ccef2cc51e8cce1c9f6715277e653a22eb77386679c70029

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

000000000000000000000000e45f9c10f3e4647ac922b0128e688e8e1f220f5f000000000000000000000000f759cae90459c72bb3668fcd8e674f9e1eb9c2c30000000000000000000000009496dbbb9bc9fd78d4735b954569a54fe2a0d9f30000000000000000000000005686508abbff20db6a582643280601ef53b58ddf000000000000000000000000a1568c501e650c83337f8119b6276c0de4aabb0f00000000000000000000000073c2d67e4181ad1926b4b47b56d3d2c198b8760400000000000000000000000011f21536f888def8c7d2c4785f3f70b3ddbca1b90000000000000000000000002d2edbfa6c22c276263dacf1252eb0611bde751d000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010000000000000000000000005eaf0a37346ff992199fbc4480c9ccc4137d9c1f

-----Decoded View---------------
Arg [0] : _teamWallet (address): 0xE45f9c10F3E4647AC922b0128e688e8E1F220f5F
Arg [1] : _referralTokenWallet (address): 0xF759CaE90459C72bB3668fcd8e674f9E1eb9C2C3
Arg [2] : _foundationTokenWallet (address): 0x9496DbBB9bC9fd78D4735b954569A54Fe2A0D9F3
Arg [3] : _companyTokenWallet (address): 0x5686508AbBFF20Db6A582643280601ef53B58DdF
Arg [4] : _reserveTokenWallet (address): 0xa1568c501E650c83337f8119b6276c0de4aABb0f
Arg [5] : _bountyTokenWallet (address): 0x73c2D67e4181aD1926B4B47b56D3d2C198b87604
Arg [6] : _advisorTokenWallet (address): 0x11F21536f888dEF8c7d2C4785F3F70b3DDBCa1B9
Arg [7] : _refundManager (address): 0x2D2EdbfA6C22c276263DacF1252Eb0611BdE751D
Arg [8] : _owners (address[]): 0x5EaF0a37346Ff992199fbc4480c9ccc4137d9c1f

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 000000000000000000000000e45f9c10f3e4647ac922b0128e688e8e1f220f5f
Arg [1] : 000000000000000000000000f759cae90459c72bb3668fcd8e674f9e1eb9c2c3
Arg [2] : 0000000000000000000000009496dbbb9bc9fd78d4735b954569a54fe2a0d9f3
Arg [3] : 0000000000000000000000005686508abbff20db6a582643280601ef53b58ddf
Arg [4] : 000000000000000000000000a1568c501e650c83337f8119b6276c0de4aabb0f
Arg [5] : 00000000000000000000000073c2d67e4181ad1926b4b47b56d3d2c198b87604
Arg [6] : 00000000000000000000000011f21536f888def8c7d2c4785f3f70b3ddbca1b9
Arg [7] : 0000000000000000000000002d2edbfa6c22c276263dacf1252eb0611bde751d
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [10] : 0000000000000000000000005eaf0a37346ff992199fbc4480c9ccc4137d9c1f


Swarm Source

bzzr://933a469c477da45183c7ccef2cc51e8cce1c9f6715277e653a22eb77386679c7

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.