contract LimitedTransferToken is ERC20 {

    /**
     * @dev Checks whether it can transfer or otherwise throws.
     */
    modifier canTransferLimitedTransferToken(address _sender, uint256 _value) {
        require(_value <= transferableTokens(_sender, uint64(now)));
        _;
    }

    /**
     * @dev Default transferable tokens function returns all tokens for a holder (no limit).
     * @dev Overwriting transferableTokens(address holder, uint64 time) is the way to provide the
     * specific logic for limiting token transferability for a holder over time.
     */
    function transferableTokens(address holder, uint64 time) public constant returns (uint256) {
        return balanceOf(holder);
    }
}
function transferableTokens(address holder, uint64 time) public constant returns (uint256) {
    return balanceOf(holder);
}

/**
 * @dev Default transferable tokens function returns all tokens for a holder (no limit).
 * @dev Overwriting transferableTokens(address holder, uint64 time) is the way to provide the
 * specific logic for limiting token transferability for a holder over time.
 */