Contract 0x096D7Ce60278E623C0B5763A0D04Fde844d2C537 2

 

Contract Overview

Balance:
0.‍137 Ether

EtherValue:
$256.11 (@ $1,869.43/ETH)

Token:
Txn Hash
Method
Block
From
To
Value
0x8cb59e894a5c104c45d70687b409ec9aff8178a5777f0e8fde54ea13601fba5fBuy87349552019-10-13 19:29:471040 days 2 hrs ago0xc7f82ebe773bd890bc9b5291334fd04e98ffd0e3 IN  0x096d7ce60278e623c0b5763a0d04fde844d2c5370.‍0005 Ether0.‍000128341.‍2
0xf800f89018774ae50945a9ee6fa85961c2210c9fa107b43a9a3de4ce12d89746Buy82082002019-07-23 17:16:461122 days 5 hrs ago0x78fcdc80c96fc680e976d2be0557c3deb65631ee IN  0x096d7ce60278e623c0b5763a0d04fde844d2c5370.‍0005 Ether0.‍000106951
0x4dd45d66aa8486282c4dae8fa41851d457ca701b473c9e9c3e118fa9d99b5927Buy81234972019-07-10 12:27:421135 days 9 hrs ago0x78fcdc80c96fc680e976d2be0557c3deb65631ee IN  0x096d7ce60278e623c0b5763a0d04fde844d2c5370.‍0005 Ether0.‍000106951
0x8d83a68949495d9dd2dbb988cbbb4e524b502f044b2f4752a4e7d20f68dab14dBuy78940372019-06-04 16:55:221171 days 5 hrs ago0x33b93205bd310068ef0fec1702f938380a19e294 IN  0x096d7ce60278e623c0b5763a0d04fde844d2c5370.‍0005 Ether0.‍000507654
0x05a4bc44f715696bff6c482d969912f3cb7b248de28758ce274b4b477d791fbaBuy74130402019-03-21 15:52:091246 days 6 hrs ago0x14a544d46fd6bb6add792feaceb9800277dfdf31 IN  0x096d7ce60278e623c0b5763a0d04fde844d2c5370.‍0005 Ether0.‍00021392
0x38b29abc21e96daf722aaaa0e65063c04fd6e910cccec45111c1ad87c51c4f3eBuy74130052019-03-21 15:45:171246 days 6 hrs ago0x14a544d46fd6bb6add792feaceb9800277dfdf31 IN  0x096d7ce60278e623c0b5763a0d04fde844d2c5370.‍0005 Ether0.‍00021392
0xc8067351c0a49920a4d510f34e056737f320e08a56ac5d957bd3fb567378a939Buy74054122019-03-20 11:12:541247 days 11 hrs ago0x14a544d46fd6bb6add792feaceb9800277dfdf31 IN  0x096d7ce60278e623c0b5763a0d04fde844d2c5370.‍0005 Ether0.‍00021392
0x703ae84703a2915a59a3bda1e39a7cd4f526676a627bffb7b03c69d09f38366aBuy74054122019-03-20 11:12:541247 days 11 hrs ago0x14a544d46fd6bb6add792feaceb9800277dfdf31 IN  0x096d7ce60278e623c0b5763a0d04fde844d2c5370.‍0005 Ether0.‍00021392
0xbeff4a3064e2099fbd716be118c6da483336a7ed18ec910002a24ac34f95c6eaBuy73293512019-03-08 15:14:481259 days 7 hrs ago0xd9e64ff4cce6b16cba53b7d423a70ad32bdb01bb IN  0x096d7ce60278e623c0b5763a0d04fde844d2c5370.‍0005 Ether0.‍000320853
0xdb06570d4983b734d6723f0d957196f190e8a4f0114baf9f9efc18b0d027a25bBuy71699972019-02-03 20:23:311292 days 2 hrs ago0x5264f5112ba20ca4bb7668a198e6169697c86f4b IN  0x096d7ce60278e623c0b5763a0d04fde844d2c5370.‍0005 Ether0.‍000320853
0xfa6f73b2e656962122d177d910cf2b226ef005c39d24d6935deff3797f632216Buy71540402019-01-31 13:57:241295 days 8 hrs ago0xb7ce9f7914d0b4a7be49d8cfa0740a9db42760e1 IN  0x096d7ce60278e623c0b5763a0d04fde844d2c5370.‍0005 Ether0.‍000534755
0x8d64e95f7df9ef5b03e494baa289cee54bf4a3b20484407afc8a4a3a3f8d31eaBuy66954412018-11-13 6:52:001374 days 15 hrs ago0x03c4dcdbd7efc4fd32e2c0e92d4e1f8b778e1a56 IN  0x096d7ce60278e623c0b5763a0d04fde844d2c5370.‍0005 Ether0.‍000320853
0x9153d3a29660cbb8dbff898fbfd7ddeeeb5bdc4dc064491a6a029b19f7576da3Buy66884262018-11-12 3:36:021375 days 18 hrs ago0x03c4dcdbd7efc4fd32e2c0e92d4e1f8b778e1a56 IN  0x096d7ce60278e623c0b5763a0d04fde844d2c5370.‍0005 Ether0.‍000534755
0xb4f206238818a9b5de5ca0e78550f2b44723fc61bf54fb9dd360deb940284b9bBuy65735072018-10-24 7:46:291394 days 14 hrs ago0x2c31638afaf03c69bfdff53d450ce5f9c9ed8a73 IN  0x096d7ce60278e623c0b5763a0d04fde844d2c5370.‍0005 Ether0.‍000214122
0x9cb2cbc6530e2b9db08ec75940a116342ef484083a32f8f9439a0fc830f88e83Buy1062512252018-09-01 7:29:261447 days 14 hrs ago0xbd3bda2f95f23a2fed1efefb8ed91d9240b4ac75 IN  0x096d7ce60278e623c0b5763a0d04fde844d2c5370.‍005 Ether0.‍002601443
0xbd4f051f9d538bba930bf16553a504de6a773a9e4cd638a142cb7e327613da80Buy1061763972018-08-19 16:13:091460 days 6 hrs ago0xb13874b5bde62ee189c74f03e85f9c4d27cfa878 IN  0x096d7ce60278e623c0b5763a0d04fde844d2c5370.‍005 Ether0.‍001734292
0xba666a65e83e32488321c7d79c5a4376fc7b0425771222559ce458af8f8b663fBuy60393042018-07-27 12:48:381483 days 9 hrs ago0xd43bbf1a392cd16010f7a2d5de0af3da49aec20a IN  0x096d7ce60278e623c0b5763a0d04fde844d2c5370.‍0005 Ether0.‍000106951
0x5ab2ec482b782040491a88813f3df410da430d35d2af0ef776de1b00a3b51a74Buy60392882018-07-27 12:44:491483 days 9 hrs ago0xd43bbf1a392cd16010f7a2d5de0af3da49aec20a IN  0x096d7ce60278e623c0b5763a0d04fde844d2c5370.‍0005 Ether0.‍000106951
0xa04b04bcd1ef27623d21c4dff4cda74f0ae5379401df850caa43ba55821faba9Buy58413042018-06-23 17:30:031517 days 4 hrs ago0x0221c7b9a2900867dbfcb58aa77b0ac24f95f2f2 IN  0x096d7ce60278e623c0b5763a0d04fde844d2c5370.‍0005 Ether0.‍000106951
0xd1f1bef7eed517106f93d4906e1c601ea11bd001769aab72ed5d8e4f690801beBuy56590522018-05-22 19:19:011549 days 3 hrs ago0x2a19eadc6bb1c7b90fdc791af51318a753dcf705 IN  0x096d7ce60278e623c0b5763a0d04fde844d2c5370.‍0005 Ether0.‍0013903513
0x9c0d8c945339a8797a23b154e2e7f231f9b534049f23ae459beff449cfc087f7Buy56589322018-05-22 18:46:171549 days 3 hrs ago0x2a19eadc6bb1c7b90fdc791af51318a753dcf705 IN  0x096d7ce60278e623c0b5763a0d04fde844d2c5370.‍0005 Ether0.‍001283412
0xff7c848b050c1b32167668e90cba2a04c5f2f66ed766febf5e15d83b9e953b53Buy54470032018-04-15 20:35:081586 days 1 hr ago0xe47d315a0e6a8148016625f827b4b6220a354878 IN  0x096d7ce60278e623c0b5763a0d04fde844d2c5370.‍0005 Ether0.‍000106951
0x29efa050450a40931c6cba6e14a2d3ed1d95f9daa0d6981b726cb16c7d1e1803End Auction53951722018-04-07 4:36:181594 days 17 hrs ago0x52506061d2b378278bd2957dc0d8053d66e95c68 IN  0x096d7ce60278e623c0b5763a0d04fde844d2c5370 Ether0.‍000086511
0x29df2aeb929472233f2e8c77420266fe27697772742ba5ae90ac6050ea86434fPlace Bid53890762018-04-06 4:15:221595 days 18 hrs ago0x52506061d2b378278bd2957dc0d8053d66e95c68 IN  0x096d7ce60278e623c0b5763a0d04fde844d2c5370.‍000015 Ether0.‍000072621
0xf01b4c4b4cc28fc2a171b5004c8c89353e07157cdab045d7778b8d728d4818ceCreate Auction53508302018-03-30 20:19:081602 days 2 hrs ago0x95d896cb40413ce1cdd9fef1f07f0ed8730477be IN  0x096d7ce60278e623c0b5763a0d04fde844d2c5370 Ether0.‍000087892
[ Download CSV Export 
Latest 7 internal transactions
Parent Txn Hash Block From To Value
0x8d83a68949495d9dd2dbb988cbbb4e524b502f044b2f4752a4e7d20f68dab14d78940372019-06-04 16:55:221171 days 5 hrs ago 0x096d7ce60278e623c0b5763a0d04fde844d2c5370xb13874b5bde62ee189c74f03e85f9c4d27cfa8780.‍005 Ether
0x29efa050450a40931c6cba6e14a2d3ed1d95f9daa0d6981b726cb16c7d1e180353951722018-04-07 4:36:181594 days 17 hrs ago 0x096d7ce60278e623c0b5763a0d04fde844d2c5370x95d896cb40413ce1cdd9fef1f07f0ed8730477be0.‍0000144 Ether
0x29efa050450a40931c6cba6e14a2d3ed1d95f9daa0d6981b726cb16c7d1e180353951722018-04-07 4:36:181594 days 17 hrs ago 0x096d7ce60278e623c0b5763a0d04fde844d2c5370x7c43e84bab6507e217c38af6ba6bb777cfbc6a2e0.‍0000006 Ether
0x94c5da1dbc2f3375fcad850d4f1bf2a95cd04973ec3c70f404e9e9c804dc52c050964092018-02-15 19:37:101645 days 2 hrs ago 0x096d7ce60278e623c0b5763a0d04fde844d2c5370x9739fff24dcbc0dec87a4897e8f375f27919aead0.‍005 Ether
0x19e97388244a91ed6e23c8b36c18d1f4410a22955f615394a2863c407407df3e50563722018-02-09 2:00:511651 days 20 hrs ago 0x096d7ce60278e623c0b5763a0d04fde844d2c5370x299cdd1a1c8b9203806036b297e60b1f1486a3d00.‍005 Ether
0xf52ec7ef414b12a0cc0fd3310ba28780803dfe0d64029c2c9a32ac39739adc2050445052018-02-07 2:10:411653 days 20 hrs ago 0x096d7ce60278e623c0b5763a0d04fde844d2c5370xa796fc49c5aa95a6524c2ca48f15158ab60539370.‍000528 Ether
0xf52ec7ef414b12a0cc0fd3310ba28780803dfe0d64029c2c9a32ac39739adc2050445052018-02-07 2:10:411653 days 20 hrs ago 0x096d7ce60278e623c0b5763a0d04fde844d2c5370x7c43e84bab6507e217c38af6ba6bb777cfbc6a2e0.‍000022 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Billiontix

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

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

pragma solidity ^0.4.18;

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
 
library SafeMath {
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

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

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


/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
 
contract Ownable {
  address public owner;


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  function Ownable() public {
    owner = msg.sender;
  }


  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }


  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
   
  function transferOwnership(address newOwner) onlyOwner public{
    if (newOwner != address(0)) {
      owner = newOwner;
    }
  }

}




/**
 * Interface for required functionality in the ERC721 standard
 * for non-fungible tokens.
 * Borrowed from Token Standard discussion board
 *
 * 
 */
 
contract ERC721 {
    // Function
    function totalSupply() public view returns (uint256 _totalSupply);
    function balanceOf(address _owner) public view returns (uint256 _balance);
    function ownerOf(uint _tokenId) public view returns (address _owner);
    function transfer(address _to, uint _tokenId) internal;
    function implementsERC721() public view returns (bool _implementsERC721);

  
    function approve(address _to, uint _tokenId) internal;
    function transferFrom(address _from, address _to, uint _tokenId) internal;

   
    // Events
    event Transfer(address indexed _from, address indexed _to, uint256 _tokenId);
    event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId);
}

/**
 * Interface for optional functionality in the ERC721 standard
 * for non-fungible tokens.
 *
 *  
 * Borrowed in part from Token Standard discussion board
 */
 
contract DetailedERC721 is ERC721 {
    function name() public view returns (string _name);
    function symbol() public view returns (string _symbol);
   // function tokenMetadata(uint _tokenId) public view returns (string _infoUrl);
    function tokenOfOwnerByIndex(address _owner, uint _index) public view returns (uint _tokenId);
}

/**
 * @title NonFungibleToken
 *
 * Generic implementation for both required and optional functionality in
 * the ERC721 standard for non-fungible tokens.
 *
 * Borrowed in part from Token Standard discussion board
 */
 
contract NonFungibleToken is DetailedERC721 {
    string public name;
    string public symbol;

    uint public numTokensTotal;
    uint public currentTokenIdNumber;

    mapping(uint => address) internal tokenIdToOwner;
    mapping(uint => address) internal tokenIdNumber;
    mapping(uint => address) internal tokenIdToApprovedAddress;
   // mapping(uint => string) internal tokenIdToMetadata;
    mapping(address => uint[]) internal ownerToTokensOwned;
    mapping(uint => uint) internal tokenIdToOwnerArrayIndex;

    event Transfer(
        address indexed _from,
        address indexed _to,
        uint256 _tokenId
    );

    event Approval(
        address indexed _owner,
        address indexed _approved,
        uint256 _tokenId
    );

    modifier onlyExtantToken(uint _tokenId) {
        require(ownerOf(_tokenId) != address(0));
        _;
    }

    function name()
        public
        view
        returns (string _name)
    {
        return name;
    }

    function symbol()
        public
        view
        returns (string _symbol)
    {
        return symbol;
    }

    function totalSupply()
        public
        view
        returns (uint256 _totalSupply)
    {
        return numTokensTotal;
    }
    
    function currentIDnumber()
        public
        view
        returns (uint256 _tokenId)
    {
        return currentTokenIdNumber;
    }

    function balanceOf(address _owner)
        public
        view
        returns (uint _balance)
    {
        return ownerToTokensOwned[_owner].length;
    }

    function ownerOf(uint _tokenId)
        public
        view
        returns (address _owner)
    {
        return _ownerOf(_tokenId);
    }
    
   /*  NOT USED
    function tokenMetadata(uint _tokenId)
        public
        view
        returns (string _infoUrl)
    {
        return tokenIdToMetadata[_tokenId];
    }
 */
    function approve(address _to, uint _tokenId)
        internal
        onlyExtantToken(_tokenId)
    {
        require(msg.sender == ownerOf(_tokenId));
        require(msg.sender != _to);

        if (_getApproved(_tokenId) != address(0) ||
                _to != address(0)) {
            _approve(_to, _tokenId);
            Approval(msg.sender, _to, _tokenId);
        }
    }

  
    function transferFrom(address _from, address _to, uint _tokenId)
        internal
        onlyExtantToken(_tokenId)
    {
        require(getApproved(_tokenId) == msg.sender);
        require(ownerOf(_tokenId) == _from);
        require(_to != address(0));

        _clearApprovalAndTransfer(_from, _to, _tokenId);

        Approval(_from, 0, _tokenId);
        Transfer(_from, _to, _tokenId);
    }

    function auctiontransfer(address _currentowner, address _to, uint _tokenId)
        internal
        onlyExtantToken(_tokenId)
    {
        require(ownerOf(_tokenId) == _currentowner);
        require(_to != address(0));

        _clearApprovalAndTransfer(_currentowner, _to, _tokenId);

        Approval(_currentowner, 0, _tokenId);
        Transfer(_currentowner, _to, _tokenId);
    }
   

    function transfer(address _to, uint _tokenId)
        internal 
        onlyExtantToken(_tokenId)
    {
        require(ownerOf(_tokenId) == msg.sender);
        require(_to != address(0));

        _clearApprovalAndTransfer(msg.sender, _to, _tokenId);

        Approval(msg.sender, 0, _tokenId);
        Transfer(msg.sender, _to, _tokenId);
    }

    function tokenOfOwnerByIndex(address _owner, uint _index)
        public
        view
        returns (uint _tokenId)
    {
        return _getOwnerTokenByIndex(_owner, _index);
    }

    function getOwnerTokens(address _owner)
        public
        view
        returns (uint[] _tokenIds)
    {
        return _getOwnerTokens(_owner);
    }

    function implementsERC721()
        public
        view
        returns (bool _implementsERC721)
    {
        return true;
    }

    function getApproved(uint _tokenId)
        public
        view
        returns (address _approved)
    {
        return _getApproved(_tokenId);
    }

    function _clearApprovalAndTransfer(address _from, address _to, uint _tokenId)
        internal
    {
        _clearTokenApproval(_tokenId);
        _removeTokenFromOwnersList(_from, _tokenId);
        _setTokenOwner(_tokenId, _to);
        _addTokenToOwnersList(_to, _tokenId);
    }

    function _ownerOf(uint _tokenId)
        internal
        view
        returns (address _owner)
    {
        return tokenIdToOwner[_tokenId];
    }

   
    function _approve(address _to, uint _tokenId)
        internal
    {
        tokenIdToApprovedAddress[_tokenId] = _to;
    }

    function _getApproved(uint _tokenId)
        internal
        view
        returns (address _approved)
    {
        return tokenIdToApprovedAddress[_tokenId];
    }

    function _getOwnerTokens(address _owner)
        internal
        view
        returns (uint[] _tokens)
    {
        return ownerToTokensOwned[_owner];
    }

    function _getOwnerTokenByIndex(address _owner, uint _index)
        internal
        view
        returns (uint _tokens)
    {
        return ownerToTokensOwned[_owner][_index];
    }


    function _clearTokenApproval(uint _tokenId)
        internal
    {
        tokenIdToApprovedAddress[_tokenId] = address(0);
    }


    function _setTokenOwner(uint _tokenId, address _owner)
        internal
    {
        tokenIdToOwner[_tokenId] = _owner;
    }

    function _addTokenToOwnersList(address _owner, uint _tokenId)
        internal
    {
        ownerToTokensOwned[_owner].push(_tokenId);
        tokenIdToOwnerArrayIndex[_tokenId] =
            ownerToTokensOwned[_owner].length - 1;
    }

    function _removeTokenFromOwnersList(address _owner, uint _tokenId)
        internal
    {
        uint length = ownerToTokensOwned[_owner].length;
        uint index = tokenIdToOwnerArrayIndex[_tokenId];
        uint swapToken = ownerToTokensOwned[_owner][length - 1];

        ownerToTokensOwned[_owner][index] = swapToken;
        tokenIdToOwnerArrayIndex[swapToken] = index;

        delete ownerToTokensOwned[_owner][length - 1];
        ownerToTokensOwned[_owner].length--;
    }

/* Not Used
    function _insertTokenMetadata(uint _tokenId, string _metadata)
        internal
    {
        tokenIdToMetadata[_tokenId] = _metadata;
    }
   
 */  
}

/**
 * @title MintableNonFungibleToken
 *
 * Superset of the ERC721 standard that allows for the minting
 * of non-fungible tokens.
 * Borrowed from Token Standard discussion board
 */
 
contract MintableNonFungibleToken is NonFungibleToken {
    using SafeMath for uint;

    event Mint(address indexed _to, uint256 indexed _tokenId);

    modifier onlyNonexistentToken(uint _tokenId) {
        require(tokenIdToOwner[_tokenId] == address(0));
        _;
    }

    function mint(address _owner, uint256 _tokenId)
        internal
        onlyNonexistentToken(_tokenId)
    {
        _setTokenOwner(_tokenId, _owner);
        _addTokenToOwnersList(_owner, _tokenId);
        //_insertTokenMetadata(_tokenId, _metadata);

        numTokensTotal = numTokensTotal.add(1);

        Mint(_owner, _tokenId);
    }
   
    
}

/**
 * @title Auction
 *
 * BillionTix proprietary Auction 
 * of BillionTix
 * Developed Exclusively for and by BillionTix Jan 31 2018
 */
 
contract Auction is NonFungibleToken, Ownable {
            using SafeMath for uint256;

    
    struct ActiveAuctionsStruct {
    address auctionOwner;
    uint isBeingAuctioned; 
    //1=Being Auctioned 0=Not Being Auctioned
    uint startingPrice;
    uint buynowPrice;
    uint highestBid;
    uint numberofBids;
    uint auctionEnd;
    uint lastSellingPrice;
    address winningBidder;
    
  }
  
  struct ActiveAuctionsByAddressStruct {
      
      uint tixNumberforSale;
      
  }
  
 
    mapping(uint => ActiveAuctionsStruct) private activeAuctionsStructs;
    mapping(address => uint[]) private activeAuctionsByAddressStructs;

    event LiveAuctionEvent (address auctionowner, uint indexed tixNumberforSale, uint indexed startingPrice, uint indexed buynowPrice, uint auctionLength);
    event RunningAuctionsEvent (address auctionowner, uint indexed tixNumberforSale, uint indexed isBeingAuctioned, uint auctionLength);
    event SuccessAuctionEvent (address auctionowner, address auctionwinner, uint indexed tixNumberforSale, uint indexed winningPrice);
    event CanceledAuctionEvent (address auctionowner, address highestbidder, uint indexed tixNumberforSale, uint indexed highestbid);
    event BuyNowEvent (address auctionowner, address ticketbuyer, uint indexed tixNumberforSale, uint indexed purchaseprice);
    event LogBid (address auctionowner, address highestbidder, uint indexed tixNumberforSale, uint indexed highestbid, uint indexed bidnumber);
    event LogRefund (address losingbidder, uint indexed tixNumberforSale, uint indexed refundedamount);
    event CreationFailedEvent (address auctionrequestedby, uint indexed tixNumberforSale, string approvalstatus);
    event BidFailedEvent (address bidder, uint tixNumberforSale, string bidfailure);

    
    address ticketownwer;
    address public auctionleader;

    string public approval = "Auction Approved";
    string public notapproved = "You Do Not Own This Ticket or Ticket is Already For Sale";
    string public bidfailure ="Bid Failure";
   
    uint public tixNumberforSale;
    uint public leadingBid;
    uint public startingPrice;
    uint public winningPrice;
    uint public buynowPrice;
    uint public auctionLength;
    uint256 public ownerCut;
    uint256 public cancelCost;
    
    uint[] public runningauctions;
 
    function Auction() public {
        //Only called once when contract created.  Put initialization constructs here if needed
    }
    

    function createAuction (uint _startprice, uint _buynowprice, uint _tixforsale, uint _auctiontime) public  {
        
        require (_startprice >= 0);
        require (_buynowprice >= 0);
        require (_tixforsale > 0);
        require (_auctiontime > 0);
        
        address auctionowner = msg.sender;
        tixNumberforSale = _tixforsale;
        ticketownwer = ownerOf(tixNumberforSale);
        auctionLength = _auctiontime;
         
        var auctionDetails = activeAuctionsStructs[tixNumberforSale];

        uint auctionstatus = auctionDetails.isBeingAuctioned;


        if (auctionowner == ticketownwer && auctionstatus != 1) {
         
         startingPrice = _startprice;
         buynowPrice = _buynowprice;
         auctionDetails.auctionOwner = auctionowner;
         auctionDetails.startingPrice = startingPrice;
         auctionDetails.buynowPrice = buynowPrice;
         auctionDetails.highestBid = startingPrice;
         auctionDetails.isBeingAuctioned = 1;
         auctionDetails.numberofBids = 0;
         auctionDetails.auctionEnd = now + auctionLength;
         runningauctions.push(tixNumberforSale);

     
         activeAuctionsByAddressStructs[auctionowner].push(tixNumberforSale);
         LiveAuctionEvent(auctionowner, tixNumberforSale, startingPrice, buynowPrice, auctionDetails.auctionEnd);

       
        } else {
            
        CreationFailedEvent(msg.sender, tixNumberforSale, notapproved);
        revert();

        }
    
    }
   
    function placeBid(uint _tixforsale) payable public{
       

      var auctionDetails = activeAuctionsStructs[_tixforsale];
      uint auctionavailable = auctionDetails.isBeingAuctioned;
      uint leadbid = auctionDetails.highestBid;
      uint bidtotal = auctionDetails.numberofBids;
      address auctionowner = auctionDetails.auctionOwner;
      address leadingbidder = auctionDetails.winningBidder;
      uint endofauction = auctionDetails.auctionEnd;
      
      require (now <= endofauction);
      require (auctionavailable == 1);
      require (msg.value > leadbid);
      
        if (msg.value > leadbid) {
           
            auctionDetails.winningBidder = msg.sender;
            auctionDetails.highestBid = msg.value;
            auctionDetails.numberofBids++;
            uint bidnumber = auctionDetails.numberofBids;
            
             if (bidtotal > 0) {
            returnPrevBid(leadingbidder, leadbid, _tixforsale);
           }
            LogBid(auctionowner, auctionDetails.winningBidder, _tixforsale, auctionDetails.highestBid, bidnumber);
        }
        else {
            
            BidFailedEvent(msg.sender, _tixforsale, bidfailure);
            revert();
            
        }
    
    
        
    }
   
    function returnPrevBid(address _highestbidder, uint _leadbid, uint _tixnumberforsale) internal {
      
        if (_highestbidder != 0 && _leadbid > 0) {
           
            _highestbidder.transfer(_leadbid);
            
            LogRefund(_highestbidder, _tixnumberforsale, _leadbid);
        
        }
    }
    
    function setOwnerCut(uint256 _ownercut) onlyOwner public {
       
       ownerCut = _ownercut;
       
       
   }
   
   function setCostToCancel(uint256 _cancelcost) onlyOwner public {
       
       cancelCost = _cancelcost;
       
       
   }
   
    function getCostToCancel() view public returns (uint256) {
       
       return cancelCost;
       
       
   }
    

    //END AUCTION FUNCTION CAN BE CALLED AFTER AUCTION TIME IS UP BY EITHER SELLER OR WINNING PARTY
    
    function endAuction(uint _tixnumberforsale) public {
        

      var auctionDetails = activeAuctionsStructs[_tixnumberforsale];
      uint auctionEnd = auctionDetails.auctionEnd;
      address auctionowner = auctionDetails.auctionOwner;
      address auctionwinner = auctionDetails.winningBidder;
      uint256 winningBid = auctionDetails.highestBid;
      uint numberofBids = auctionDetails.numberofBids;

        require (now > auctionEnd);

       if ((msg.sender == auctionowner || msg.sender == auctionwinner) && numberofBids > 0 && winningBid > 0) {
          

           uint256 ownersCut = winningBid * ownerCut / 10000;
        
           owner.transfer(ownersCut);
           auctionowner.transfer(auctionDetails.highestBid - ownersCut);
           auctiontransfer(auctionowner, auctionwinner, _tixnumberforsale);
           auctionDetails.isBeingAuctioned = 0;
           auctionDetails.auctionEnd = 0;
           auctionDetails.numberofBids = 0;
           auctionDetails.highestBid = 0;
           auctionDetails.buynowPrice = 0;
           auctionDetails.startingPrice = 0;
           removeByValue(_tixnumberforsale);
           SuccessAuctionEvent(auctionowner, auctionwinner, _tixnumberforsale, winningBid);
           
       }
       
       if (msg.sender == auctionowner && numberofBids == 0) {
          

           auctionDetails.isBeingAuctioned = 0;
           auctionDetails.auctionEnd = 0;
           auctionDetails.numberofBids = 0;
           auctionDetails.highestBid = 0;
           auctionDetails.buynowPrice = 0;
           auctionDetails.startingPrice = 0;

           removeByValue(_tixnumberforsale);

           SuccessAuctionEvent(auctionowner, auctionwinner, _tixnumberforsale, winningBid);
           
       }
       
       
       
       
   }
   
   
  

   //CANCEL AUCTION CAN ONLY BE CALLED BY AUCTION OWNER - ALL MONEY RETURNED TO HIGHEST BIDDER. COSTS ETHER
   
   function cancelAuction(uint _tixnumberforsale) payable public {
       
            
        var auctionDetails = activeAuctionsStructs[_tixnumberforsale];
        uint auctionEnd = auctionDetails.auctionEnd;
        uint numberofBids = auctionDetails.numberofBids;

        require (now < auctionEnd);
        
        
        
         uint256 highestBid = auctionDetails.highestBid;
         address auctionwinner = auctionDetails.winningBidder;
         address auctionowner = auctionDetails.auctionOwner;
         
                if (msg.sender == auctionowner && msg.value >= cancelCost && numberofBids > 0) {

        
                        auctionwinner.transfer(highestBid);
                        LogRefund(auctionwinner, _tixnumberforsale, highestBid);

                        owner.transfer(cancelCost);
                        
                        auctionDetails.isBeingAuctioned = 0;
                        auctionDetails.auctionEnd = 0;
                        auctionDetails.numberofBids = 0;
                        auctionDetails.highestBid = 0;
                        auctionDetails.buynowPrice = 0;
                        auctionDetails.startingPrice = 0;

                        removeByValue(_tixnumberforsale);


              CanceledAuctionEvent(auctionowner, auctionwinner, _tixnumberforsale, highestBid);

                } 
                
                if (msg.sender == auctionowner && msg.value >= cancelCost && numberofBids == 0) {

                        owner.transfer(cancelCost);
                        
                        auctionDetails.isBeingAuctioned = 0;
                        auctionDetails.auctionEnd = 0;
                        auctionDetails.numberofBids = 0;
                        auctionDetails.highestBid = 0;
                        auctionDetails.buynowPrice = 0;
                        auctionDetails.startingPrice = 0;

                        removeByValue(_tixnumberforsale);


              CanceledAuctionEvent(auctionowner, auctionwinner, _tixnumberforsale, highestBid);

                }

       
   }
   

   //Buy Now Cancels Auction with no Penalty and returns all placed bids.  Contract takes cut of buy now price

   function buyNow(uint _tixnumberforsale) payable public {
       

     var auctionDetails = activeAuctionsStructs[_tixnumberforsale];
      uint auctionEnd = auctionDetails.auctionEnd;
      address auctionowner = auctionDetails.auctionOwner;
      address auctionlead = auctionDetails.winningBidder;
      uint256 highestBid = auctionDetails.highestBid;
      uint256 buynowprice = auctionDetails.buynowPrice;
      
      uint256 buynowcut = ownerCut;
    
      uint256 buynowownersCut = buynowPrice * buynowcut / 10000;


      require(buynowprice > 0);
      require(now < auctionEnd);
        
      if (msg.value == buynowPrice) {
          

          auctionowner.transfer(buynowPrice - buynowownersCut);
          owner.transfer(buynowownersCut);
         
         
          auctiontransfer(auctionowner, msg.sender, _tixnumberforsale);
          auctionDetails.isBeingAuctioned = 0;
          auctionDetails.auctionEnd = 0;
          auctionDetails.numberofBids = 0;
          auctionDetails.highestBid = 0;
          auctionDetails.buynowPrice = 0;
          auctionDetails.startingPrice = 0;

          removeByValue(_tixnumberforsale);


          BuyNowEvent(auctionowner, msg.sender, _tixnumberforsale, msg.value);
          
           if (auctionDetails.numberofBids > 0) {
         
          returnPrevBid(auctionlead, highestBid, _tixnumberforsale);

         }
          
          
      } else {
          
          revert();
      }
       
   }
   
    function withdraw(address forwardAddress, uint amount) public onlyOwner {

        forwardAddress.transfer(amount);

}
   
 
    function getAuctionDetails(uint tixnumberforsale)
        public
        view
        returns (uint _startingprice, uint _buynowprice, uint _numberofBids, uint _highestBid, uint _auctionEnd, address winningBidder, address _auctionOwner)
    {
        return (
         activeAuctionsStructs[tixnumberforsale].startingPrice,
         activeAuctionsStructs[tixnumberforsale].buynowPrice,
         activeAuctionsStructs[tixnumberforsale].numberofBids,
         activeAuctionsStructs[tixnumberforsale].highestBid,
         activeAuctionsStructs[tixnumberforsale].auctionEnd,
         activeAuctionsStructs[tixnumberforsale].winningBidder,
         activeAuctionsStructs[tixnumberforsale].auctionOwner);
         

    }
    
    //Had to split due to stack limitations of Solidity - Pull back together in UI
    
    function getMoreAuctionDetails(uint tixnumberforsale) public view returns (uint _auctionstatus, uint _auctionEnd, address _auctionOwner) {
        
     return (
                    
                    activeAuctionsStructs[tixnumberforsale].isBeingAuctioned,
                    activeAuctionsStructs[tixnumberforsale].auctionEnd,
                    activeAuctionsStructs[tixnumberforsale].auctionOwner);
        
    }
   
    
     function getOwnerAuctions(address _auctionowner)
        public
        view
        returns (uint[] _auctions)
    {
       
        return activeAuctionsByAddressStructs[_auctionowner];
    }
  
    
  //FUNCTIONS USED TO KEEP ACCURATE ARRAY OF LIVE AUCTIONS
  
  function find(uint value) view public returns(uint) {
        uint i = 0;
        while (runningauctions[i] != value) {
            i++;
        }
        return i;
    }

    function removeByValue(uint value) internal {
        uint i = find(value);
        removeByIndex(i);
    }

    function removeByIndex(uint i) internal {
        while (i<runningauctions.length-1) {
            runningauctions[i] = runningauctions[i+1];
            i++;
        }
        runningauctions.length--;
    }

    function getRunningAuctions() constant public returns(uint[]) {
        return runningauctions;
    }


     function() payable public {}

   
}


/**
 * @title BillionTix
 *
 * Main BillionTix Contract. Controls creation of BillionTix and  
 * selecting and Paying Giveaway Winners
 * Developed Exclusively for and by BillionTix Jan 31 2018
 */
 
contract Billiontix is MintableNonFungibleToken, Auction {
   address owner;

    string public name = 'BillionTix';
    string public symbol = 'BTIX';
   
    string internal TenTimesEther = "0.005 Ether";
    string internal OneHundredTimesEther = "0.05 Ether";
    string internal OneThousandTimesEther = "0.5 Ether";
    string internal TenThousandTimesEther = "5 Ether";
    string internal OneHundredThousandTimesEther = "50 Ether";
    string internal OneMillionTimesEther = "500 Ether";
    string internal TenMillionTimesEther = "5,000 Ether";
    string internal OneHundredMillionTimesEther = "50,000 Ether";
    string internal OneBillionTimesEther = "500,000 Ether";
   
   
    //SET THESE PRICES IN WEI
    
    uint256 public buyPrice =      500000000000000;
    uint256 public buy5Price =    2500000000000000;
    uint256 public buy10Price =   5000000000000000;
    uint256 public buy20Price =  10000000000000000;
    uint256 public buy50Price =  25000000000000000;
    uint256 public buy100Price = 50000000000000000;

    address public winner;
  
   //These are the supertix numbers. They will NOT CHANGE
   
    uint[] supertixarray = [10000,100000,500000,1000000,5000000,10000000,50000000,100000000,500000000,750000000];

 
    mapping(address => uint256) public balanceOf; 
    
    event PayoutEvent (uint indexed WinningNumber, address indexed _to, uint indexed value);
    event WinningNumbersEvent (uint256 indexed WinningNumber, string AmountWon); 
    event WinnerPaidEvent (address indexed Winner, string AmountWon);
    


  function buy () payable public 
   onlyNonexistentToken(_tokenId)
    {
       
       if ((msg.value) == buyPrice) {
           
           
        uint256 _tokenId = numTokensTotal +1;
        _setTokenOwner(_tokenId, msg.sender);
        _addTokenToOwnersList(msg.sender, _tokenId);
       // _insertTokenMetadata(_tokenId, _metadata);

       numTokensTotal = numTokensTotal.add(1);

        Mint(msg.sender, _tokenId);          

       if (numTokensTotal > 1 && numTokensTotal < 10000000002) {
       playDraw();
       playDraw2();
       supertixdraw();
       } else { }


       }
       else {
          
       }
       
   }
   
   
     function buy5 () payable public 
   onlyNonexistentToken(_tokenId)
    {
       for (uint i = 0; i < 5; i++) {
       if ((msg.value) == buy5Price) {
           
        uint256 _tokenId = numTokensTotal +1;
        _setTokenOwner(_tokenId, msg.sender);
        _addTokenToOwnersList(msg.sender, _tokenId);
       // _insertTokenMetadata(_tokenId, _metadata);

       numTokensTotal = numTokensTotal.add(1);

        Mint(msg.sender, _tokenId);          

       if (numTokensTotal > 1 && numTokensTotal < 10000000002) {
       playDraw();
       playDraw2();
       supertixdraw();

       } else { 
       }
       
       }
       else {
       }
       }
   }


  function buy10 () payable public 
   onlyNonexistentToken(_tokenId)
    {
       for (uint i = 0; i < 10; i++) {
       if ((msg.value) == buy10Price) {
           
        uint256 _tokenId = numTokensTotal +1;
        _setTokenOwner(_tokenId, msg.sender);
        _addTokenToOwnersList(msg.sender, _tokenId);
       // _insertTokenMetadata(_tokenId, _metadata);

       numTokensTotal = numTokensTotal.add(1);

        Mint(msg.sender, _tokenId);          

       if (numTokensTotal > 1 && numTokensTotal < 10000000002) {
       playDraw();
       playDraw2();
       supertixdraw();

       } else { }
       }
       else {
          
       }
       }
   }
      
    function buy20 () payable public 
   onlyNonexistentToken(_tokenId)
    {
       for (uint i = 0; i < 20; i++) {
       if ((msg.value) == buy20Price) {
           
        uint256 _tokenId = numTokensTotal +1;
        _setTokenOwner(_tokenId, msg.sender);
        _addTokenToOwnersList(msg.sender, _tokenId);
       // _insertTokenMetadata(_tokenId, _metadata);

       numTokensTotal = numTokensTotal.add(1);

        Mint(msg.sender, _tokenId);          

       if (numTokensTotal > 1 && numTokensTotal < 10000000002) {
       playDraw();
       playDraw2();
        supertixdraw();
        
      } else { }
       }
       else {
          
       }
       }
   }
   
    function buy50 () payable public 
   onlyNonexistentToken(_tokenId)
    {
       for (uint i = 0; i < 50; i++) {
       if ((msg.value) == buy50Price) {
           
         uint256 _tokenId = numTokensTotal +1;
        _setTokenOwner(_tokenId, msg.sender);
        _addTokenToOwnersList(msg.sender, _tokenId);
       // _insertTokenMetadata(_tokenId, _metadata);

       numTokensTotal = numTokensTotal.add(1);

        Mint(msg.sender, _tokenId);          

       if (numTokensTotal > 1 && numTokensTotal < 10000000002) {
       playDraw();
       playDraw2();
        supertixdraw();
   
       } else { }
       }
       else {
          
       }
       }
   }
   
    function buy100 () payable public 
   onlyNonexistentToken(_tokenId)
    {
       for (uint i = 0; i < 100; i++) {
       if ((msg.value) == buy100Price) {
           
        uint256 _tokenId = numTokensTotal +1;
        _setTokenOwner(_tokenId, msg.sender);
        _addTokenToOwnersList(msg.sender, _tokenId);
       // _insertTokenMetadata(_tokenId, _metadata);

       numTokensTotal = numTokensTotal.add(1);

        Mint(msg.sender, _tokenId);          

       if (numTokensTotal > 1 && numTokensTotal < 10000000002) {
       playDraw();
       playDraw2();
       supertixdraw();

       } else { }
       }
       else {
          
       }
       }
   }

   
 function playDraw() internal returns (uint winningrandomNumber1, 
 uint winningrandomNumber2, 
 uint winningrandomNumber3, 
 uint winningrandomNumber4, 
 uint winningrandomNumber5)  {
     

     uint A = ((numTokensTotal / 1) % 10);
     uint B = ((numTokensTotal / 10) % 10);
     uint C = ((numTokensTotal / 100) % 10);
     uint D = ((numTokensTotal / 1000) % 10);
     uint E = ((numTokensTotal / 10000) % 10);
     uint F = ((numTokensTotal / 100000) % 10);
     uint G = ((numTokensTotal / 1000000) % 10);
     uint H = ((numTokensTotal / 10000000) % 10);
     uint I = ((numTokensTotal / 100000000) % 10);
     uint J = ((numTokensTotal / 1000000000) % 10);

  
     
       if (A == 1 && B == 0) {
         
         winningrandomNumber1 = (uint(keccak256(block.blockhash(block.number-1), numTokensTotal + 1))%100 + (1000000000 * J) + (100000000 * I) + (10000000 * H) + (1000000 * G) + (100000 * F) + (10000 * E) + (1000 * D) + (100 * (C - 1)));
        
         WinningNumbersEvent(winningrandomNumber1, TenTimesEther);
         

        // PAY OUT THE WINNER HERE AFTER LOGGING WINNING NUMBER IN EVENT Pays 10x Ether - 0.005

         winner = ownerOf(winningrandomNumber1);
         payWinner(winner, 5000000000000000); 
         
         WinnerPaidEvent(winner, TenTimesEther);

        
     } else {
         //Do stuff here with non winning ticket if needed
     }

 if (A == 1 && B == 0 && C == 0) {
         
         winningrandomNumber2 = (uint(keccak256(block.blockhash(block.number-1), numTokensTotal + 2))%1000 + (1000000000 * J) + (100000000 * I) + (10000000 * H) + (1000000 * G) + (100000 * F) + (10000 * E) + (1000 * (D - 1)));
             
         WinningNumbersEvent(winningrandomNumber2, OneHundredTimesEther);


        // PAY OUT THE WINNER HERE AFTER LOGGING WINNING NUMBER IN EVENT
        // PAYS 100x Ether

         winner = ownerOf(winningrandomNumber2);
         payWinner(winner, 50000000000000000); 
         payBilliontixOwner();

         WinnerPaidEvent(winner, OneHundredTimesEther);
  
     
     } else {
         //Do stuff here with non winning ticket if needed
     }
 
 if (A == 1 && B == 0 && C == 0 && D == 0) {
         
          winningrandomNumber3 = (uint(keccak256(block.blockhash(block.number-1), numTokensTotal + 3))%10000 + (1000000000 * J) + (100000000 * I) + (10000000 * H) + (1000000 * G) + (100000 * F) + (10000 * (E - 1)));
          WinningNumbersEvent(winningrandomNumber3, OneThousandTimesEther);


      // PAY OUT THE WINNER HERE AFTER LOGGING WINNING NUMBER IN EVENT
      // PAYS 1,000x Ether   
      
        winner = ownerOf(winningrandomNumber3);
        payWinner(winner, 500000000000000000); 
        WinnerPaidEvent(winner, OneThousandTimesEther);


     } else {
         //Do stuff here with non winning ticket if needed
     }

     if (A == 1 && B == 0 && C == 0 && D == 0 && E == 0) {
         
          winningrandomNumber4 = (uint(keccak256(block.blockhash(block.number-1), numTokensTotal + 4))%100000 + (1000000000 * J) + (100000000 * I) + (10000000 * H) + (1000000 * G) + (100000 * (F - 1)));
          WinningNumbersEvent(winningrandomNumber4, TenThousandTimesEther);


      // PAY OUT THE WINNER HERE AFTER LOGGING WINNING NUMBER IN EVENT
      // PAYS 10,000x Ether
         
         winner = ownerOf(winningrandomNumber4);
         payWinner(winner, 5000000000000000000); 
         
         WinnerPaidEvent(winner, TenThousandTimesEther);

         
     } else {
         //Do stuff here with non winning ticket if needed
     }
     
  if (A == 1 && B == 0 && C == 0 && D == 0 && E == 0 && F == 0) {
         
          winningrandomNumber5 = (uint(keccak256(block.blockhash(block.number-1), numTokensTotal + 5))%1000000 + (1000000000 * J) + (100000000 * I) + (10000000 * H) + (1000000 * (G - 1)));
          WinningNumbersEvent(winningrandomNumber5, OneHundredThousandTimesEther);

        // PAY OUT THE WINNER HERE AFTER LOGGING WINNING NUMBER IN EVENT
        // PAYS 100,000x Ether

         winner = ownerOf(winningrandomNumber5);
         payWinner(winner, 50000000000000000000); 
         
        WinnerPaidEvent(winner, OneHundredThousandTimesEther);

         
     } else {
         //Do stuff here with non winning ticket if needed
     }
  
     
 }
 
 function playDraw2() internal returns (
 uint winningrandomNumber6,
 uint winningrandomNumber7,
 uint winningrandomNumber8,
 uint billiondollarwinningNumber) {
     

     uint A = ((numTokensTotal / 1) % 10);
     uint B = ((numTokensTotal / 10) % 10);
     uint C = ((numTokensTotal / 100) % 10);
     uint D = ((numTokensTotal / 1000) % 10);
     uint E = ((numTokensTotal / 10000) % 10);
     uint F = ((numTokensTotal / 100000) % 10);
     uint G = ((numTokensTotal / 1000000) % 10);
     uint H = ((numTokensTotal / 10000000) % 10);
     uint I = ((numTokensTotal / 100000000) % 10);
     uint J = ((numTokensTotal / 1000000000) % 10);
     uint K = ((numTokensTotal / 10000000000) % 10);

   
  
  if (A == 1 && B == 0 && C == 0 && D == 0 && E == 0 && F == 0 && G == 0) {
         
          winningrandomNumber6 = (uint(keccak256(block.blockhash(block.number-1), numTokensTotal + 6))%10000000 + (1000000000 * J) + (100000000 * I) + (10000000 * (H - 1)));
          WinningNumbersEvent(winningrandomNumber6, OneMillionTimesEther);


        // PAY OUT THE WINNER HERE AFTER LOGGING WINNING NUMBER IN EVENT
        // PAYS 1,000,000x Ether

         winner = ownerOf(winningrandomNumber6);
         payWinner(winner, 500000000000000000000); 
         
         WinnerPaidEvent(winner, OneMillionTimesEther);


     } else {
         //Do stuff here with non winning ticket if needed
     }
     
      if (A == 1 && B == 0 && C == 0 && D == 0 && E == 0 && F == 0 && G == 0 && H == 0) {
         
         winningrandomNumber7 = (uint(keccak256(block.blockhash(block.number-1), numTokensTotal + 7))%100000000 + (1000000000 * J) + (100000000 * (I - 1)));
         WinningNumbersEvent(winningrandomNumber7, TenMillionTimesEther);


       // PAY OUT THE WINNER HERE AFTER LOGGING WINNING NUMBER IN EVENT
       // PAYS 10,000,000x Ether
        
         winner = ownerOf(winningrandomNumber7);
         payWinner(winner, 5000000000000000000000);
         
         WinnerPaidEvent(winner, TenMillionTimesEther);


     
     } else {
         //Do stuff here with non winning ticket if needed
     }
 
     if (A == 1 && B == 0 && C == 0 && D == 0 && E == 0 && F == 0 && G == 0 && H == 0 && I == 0) {
         
          winningrandomNumber8 = (uint(keccak256(block.blockhash(block.number-1), numTokensTotal + 8))%1000000000 + (1000000000 * (J - 1)));
          WinningNumbersEvent(winningrandomNumber8, OneHundredMillionTimesEther);

        // PAY OUT THE WINNER HERE AFTER LOGGING WINNING NUMBER IN ARRAY
        // PAYS 100,000,000x Ether
        
         winner = ownerOf(winningrandomNumber8);
         payWinner(winner, 50000000000000000000000);
         
         WinnerPaidEvent(winner, OneHundredMillionTimesEther);

        
     } else {
         //Do stuff here with non winning ticket if needed
     }
     
     if (A == 1 && B == 0 && C == 0 && D == 0 && E == 0 && F == 0 && G == 0 && H == 0 && I == 0 && J == 0 && K == 1) {
         
         billiondollarwinningNumber = (uint(keccak256(block.blockhash(block.number-1), numTokensTotal + 9))%10000000000);
         WinningNumbersEvent(billiondollarwinningNumber, OneBillionTimesEther);


        //PAY OUT THE WINNER HERE AFTER LOGGING WINNING NUMBER IN EVENT
        // PAYS 1,000,000,000x Ether
    
         winner = ownerOf(billiondollarwinningNumber);
         payWinner(winner, 500000000000000000000000);
         
         WinnerPaidEvent(winner, OneBillionTimesEther);


     } else {
         //Do stuff here with non winning ticket if needed
     }

   
     
 }
 
 function supertixdraw()  internal returns (uint winningsupertixnumber) {

     uint A = ((numTokensTotal / 1) % 10);
     uint B = ((numTokensTotal / 10) % 10);
     uint C = ((numTokensTotal / 100) % 10);
     uint D = ((numTokensTotal / 1000) % 10);
     uint E = ((numTokensTotal / 10000) % 10);
     uint F = ((numTokensTotal / 100000) % 10);
     uint G = ((numTokensTotal / 1000000) % 10);
     uint H = ((numTokensTotal / 10000000) % 10);
     uint I = ((numTokensTotal / 100000000) % 10);
     uint J = ((numTokensTotal / 1000000000) % 10);
     
   
     
      if (A == 1 && B == 0 && C == 0 && D == 0 && E == 0 && F == 0 && G == 0 && H == 0 && I == 0 && J==1) {
          
          //AT TICKET 1Billion and 1 Sold - Give Away 10Million times Ether to SuperTix holder
          
           uint randomsupertixnumber = (uint(keccak256(block.blockhash(block.number-1), numTokensTotal + 2))%10);

           winningsupertixnumber = supertixarray[randomsupertixnumber];
       
           WinningNumbersEvent(winningsupertixnumber, TenMillionTimesEther);

         winner = ownerOf(winningsupertixnumber);
         payWinner(winner, 5000000000000000000000);
         
         WinnerPaidEvent(winner, TenMillionTimesEther);

        
     } else {
         //Do stuff here with non winning ticket if needed
     }
     
     
 }

 function Billiontix() public {
      owner = msg.sender;
   }
  
 function transferEther(address forwardAddress, uint amount) public onlyOwner {

        forwardAddress.transfer(amount);

}
 

  function payWinner(address winnerAddress, uint amount) internal {
      
        winnerAddress.transfer(amount);

}
 
 function payBilliontixOwner () internal {
     
     //This is Called at Every 1000 Level Giveaway to Give BillionTix Their Cut in Wei
     
      owner.transfer(50000000000000000);
     
 }
 

   function kill() public onlyOwner {
      if(msg.sender == owner)
         selfdestruct(owner);
   }
   
      function() payable public {}
      
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[],"name":"buy20","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"forwardAddress","type":"address"},{"name":"amount","type":"uint256"}],"name":"transferEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"leadingBid","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"name":"_approved","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tixnumberforsale","type":"uint256"}],"name":"buyNow","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"buy10","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"implementsERC721","outputs":[{"name":"_implementsERC721","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getRunningAuctions","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"_totalSupply","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"name":"_tokenId","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"auctionLength","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"approval","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"value","type":"uint256"}],"name":"find","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"kill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_startprice","type":"uint256"},{"name":"_buynowprice","type":"uint256"},{"name":"_tixforsale","type":"uint256"},{"name":"_auctiontime","type":"uint256"}],"name":"createAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"buy50Price","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"buy5Price","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"_owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tixnumberforsale","type":"uint256"}],"name":"getMoreAuctionDetails","outputs":[{"name":"_auctionstatus","type":"uint256"},{"name":"_auctionEnd","type":"uint256"},{"name":"_auctionOwner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_ownercut","type":"uint256"}],"name":"setOwnerCut","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ownerCut","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"buy100Price","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"buyPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCostToCancel","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tixNumberforSale","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cancelCost","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tixnumberforsale","type":"uint256"}],"name":"cancelAuction","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_tixforsale","type":"uint256"}],"name":"placeBid","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"notapproved","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_cancelcost","type":"uint256"}],"name":"setCostToCancel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"buy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"buynowPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numTokensTotal","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tixnumberforsale","type":"uint256"}],"name":"endAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"buy20Price","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentIDnumber","outputs":[{"name":"_tokenId","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"winningPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentTokenIdNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"buy100","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"getOwnerTokens","outputs":[{"name":"_tokenIds","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"startingPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"buy5","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"buy50","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"buy10Price","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"winner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_auctionowner","type":"address"}],"name":"getOwnerAuctions","outputs":[{"name":"_auctions","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"auctionleader","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bidfailure","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"runningauctions","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tixnumberforsale","type":"uint256"}],"name":"getAuctionDetails","outputs":[{"name":"_startingprice","type":"uint256"},{"name":"_buynowprice","type":"uint256"},{"name":"_numberofBids","type":"uint256"},{"name":"_highestBid","type":"uint256"},{"name":"_auctionEnd","type":"uint256"},{"name":"winningBidder","type":"address"},{"name":"_auctionOwner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"forwardAddress","type":"address"},{"name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"WinningNumber","type":"uint256"},{"indexed":true,"name":"_to","type":"address"},{"indexed":true,"name":"value","type":"uint256"}],"name":"PayoutEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"WinningNumber","type":"uint256"},{"indexed":false,"name":"AmountWon","type":"string"}],"name":"WinningNumbersEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"Winner","type":"address"},{"indexed":false,"name":"AmountWon","type":"string"}],"name":"WinnerPaidEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"auctionowner","type":"address"},{"indexed":true,"name":"tixNumberforSale","type":"uint256"},{"indexed":true,"name":"startingPrice","type":"uint256"},{"indexed":true,"name":"buynowPrice","type":"uint256"},{"indexed":false,"name":"auctionLength","type":"uint256"}],"name":"LiveAuctionEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"auctionowner","type":"address"},{"indexed":true,"name":"tixNumberforSale","type":"uint256"},{"indexed":true,"name":"isBeingAuctioned","type":"uint256"},{"indexed":false,"name":"auctionLength","type":"uint256"}],"name":"RunningAuctionsEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"auctionowner","type":"address"},{"indexed":false,"name":"auctionwinner","type":"address"},{"indexed":true,"name":"tixNumberforSale","type":"uint256"},{"indexed":true,"name":"winningPrice","type":"uint256"}],"name":"SuccessAuctionEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"auctionowner","type":"address"},{"indexed":false,"name":"highestbidder","type":"address"},{"indexed":true,"name":"tixNumberforSale","type":"uint256"},{"indexed":true,"name":"highestbid","type":"uint256"}],"name":"CanceledAuctionEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"auctionowner","type":"address"},{"indexed":false,"name":"ticketbuyer","type":"address"},{"indexed":true,"name":"tixNumberforSale","type":"uint256"},{"indexed":true,"name":"purchaseprice","type":"uint256"}],"name":"BuyNowEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"auctionowner","type":"address"},{"indexed":false,"name":"highestbidder","type":"address"},{"indexed":true,"name":"tixNumberforSale","type":"uint256"},{"indexed":true,"name":"highestbid","type":"uint256"},{"indexed":true,"name":"bidnumber","type":"uint256"}],"name":"LogBid","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"losingbidder","type":"address"},{"indexed":true,"name":"tixNumberforSale","type":"uint256"},{"indexed":true,"name":"refundedamount","type":"uint256"}],"name":"LogRefund","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"auctionrequestedby","type":"address"},{"indexed":true,"name":"tixNumberforSale","type":"uint256"},{"indexed":false,"name":"approvalstatus","type":"string"}],"name":"CreationFailedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"bidder","type":"address"},{"indexed":false,"name":"tixNumberforSale","type":"uint256"},{"indexed":false,"name":"bidfailure","type":"string"}],"name":"BidFailedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_to","type":"address"},{"indexed":true,"name":"_tokenId","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_approved","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"}]

60606040526040805190810160405280601081526020017f41756374696f6e20417070726f76656400000000000000000000000000000000815250600e908051906020019062000051929190620005fc565b50606060405190810160405280603881526020017f596f7520446f204e6f74204f776e2054686973205469636b6574206f7220546981526020017f636b657420697320416c726561647920466f722053616c650000000000000000815250600f9080519060200190620000c6929190620005fc565b506040805190810160405280600b81526020017f426964204661696c7572650000000000000000000000000000000000000000008152506010908051906020019062000114929190620005fc565b506040805190810160405280600a81526020017f42696c6c696f6e54697800000000000000000000000000000000000000000000815250601b908051906020019062000162929190620005fc565b506040805190810160405280600481526020017f4254495800000000000000000000000000000000000000000000000000000000815250601c9080519060200190620001b0929190620005fc565b506040805190810160405280600b81526020017f302e303035204574686572000000000000000000000000000000000000000000815250601d9080519060200190620001fe929190620005fc565b506040805190810160405280600a81526020017f302e303520457468657200000000000000000000000000000000000000000000815250601e90805190602001906200024c929190620005fc565b506040805190810160405280600981526020017f302e352045746865720000000000000000000000000000000000000000000000815250601f90805190602001906200029a929190620005fc565b506040805190810160405280600781526020017f352045746865720000000000000000000000000000000000000000000000000081525060209080519060200190620002e8929190620005fc565b506040805190810160405280600881526020017f35302045746865720000000000000000000000000000000000000000000000008152506021908051906020019062000336929190620005fc565b506040805190810160405280600981526020017f35303020457468657200000000000000000000000000000000000000000000008152506022908051906020019062000384929190620005fc565b506040805190810160405280600b81526020017f352c30303020457468657200000000000000000000000000000000000000000081525060239080519060200190620003d2929190620005fc565b506040805190810160405280600c81526020017f35302c30303020457468657200000000000000000000000000000000000000008152506024908051906020019062000420929190620005fc565b506040805190810160405280600d81526020017f3530302c30303020457468657200000000000000000000000000000000000000815250602590805190602001906200046e929190620005fc565b506601c6bf526340006026556608e1bc9bf040006027556611c37937e08000602855662386f26fc100006029556658d15e17628000602a5566b1a2bc2ec50000602b556101406040519081016040528061271063ffffffff168152602001620186a063ffffffff1681526020016207a12063ffffffff168152602001620f424063ffffffff168152602001624c4b4063ffffffff1681526020016298968063ffffffff1681526020016302faf08063ffffffff1681526020016305f5e10063ffffffff168152602001631dcd650063ffffffff168152602001632cb4178063ffffffff16815250602d90600a6200056792919062000683565b5034156200057457600080fd5b33600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000705565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200063f57805160ff191683800117855562000670565b8280016001018555821562000670579182015b828111156200066f57825182559160200191906001019062000652565b5b5090506200067f9190620006dd565b5090565b828054828255906000526020600020908101928215620006ca579160200282015b82811115620006c9578251829063ffffffff16905591602001919060010190620006a4565b5b509050620006d99190620006dd565b5090565b6200070291905b80821115620006fe576000816000905550600101620006e4565b5090565b90565b615f5780620007156000396000f30060606040526004361061029e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806304b1af75146102a057806305b1137b146102aa57806306fdde03146102ec578063074b52701461037a578063081812fc146103a357806308a0f32f146104065780630cd9f2711461041e5780631051db34146104285780631245f45e1461045557806318160ddd146104bf5780632f745c59146104e8578063325c25a21461053e57806339788bc8146105675780633e530e5b146105f557806341c0e1b51461062c578063431f21da146106415780635f54ae171461067f5780635f788531146106a85780636352211e146106d15780636ea381991461073457806370a08231146107a5578063757de573146107f257806383b5ff8b14610815578063851e6b3a1461083e5780638620410b146108675780638da5cb5b146108905780638ef22afe146108e55780639080c78c1461090e57806395d89b411461093757806395f17bce146109c557806396b5a755146109ee5780639979ef4514610a065780639ca67a6e14610a1e5780639db8d39314610aac578063a6f2ae3a14610acf578063a87595ce14610ad9578063af129dc214610b02578063b9a2de3a14610b2b578063be754ba414610b4e578063c047288914610b77578063c1f5260414610ba0578063c4d3926a14610bc9578063ce89b5de14610bf2578063d63d4af014610bfc578063d6fbf20214610c8a578063d84201bf14610cb3578063da5b1f5c14610cbd578063de5f3ec614610cc7578063dfbf53ae14610cf0578063ebaa447014610d45578063ed49196b14610dd3578063ee2d249014610e28578063f1c6c52014610eb6578063f20e5e3514610eed578063f2fde38b14610fa6578063f3fef3a314610fdf575b005b6102a8611021565b005b34156102b557600080fd5b6102ea600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611184565b005b34156102f757600080fd5b6102ff611224565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033f578082015181840152602081019050610324565b50505050905090810190601f16801561036c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561038557600080fd5b61038d6112c2565b6040518082815260200191505060405180910390f35b34156103ae57600080fd5b6103c460048080359060200190919050506112c8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61041c60048080359060200190919050506112da565b005b61042661155b565b005b341561043357600080fd5b61043b6116be565b604051808215151515815260200191505060405180910390f35b341561046057600080fd5b6104686116c7565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156104ab578082015181840152602081019050610490565b505050509050019250505060405180910390f35b34156104ca57600080fd5b6104d2611725565b6040518082815260200191505060405180910390f35b34156104f357600080fd5b610528600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061172f565b6040518082815260200191505060405180910390f35b341561054957600080fd5b610551611743565b6040518082815260200191505060405180910390f35b341561057257600080fd5b61057a611749565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105ba57808201518184015260208101905061059f565b50505050905090810190601f1680156105e75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561060057600080fd5b61061660048080359060200190919050506117e7565b6040518082815260200191505060405180910390f35b341561063757600080fd5b61063f611828565b005b341561064c57600080fd5b61067d6004808035906020019091908035906020019091908035906020019091908035906020019091905050611917565b005b341561068a57600080fd5b610692611cd8565b6040518082815260200191505060405180910390f35b34156106b357600080fd5b6106bb611cde565b6040518082815260200191505060405180910390f35b34156106dc57600080fd5b6106f26004808035906020019091905050611ce4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561073f57600080fd5b6107556004808035906020019091905050611cf6565b604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390f35b34156107b057600080fd5b6107dc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611d6d565b6040518082815260200191505060405180910390f35b34156107fd57600080fd5b6108136004808035906020019091905050611d85565b005b341561082057600080fd5b610828611deb565b6040518082815260200191505060405180910390f35b341561084957600080fd5b610851611df1565b6040518082815260200191505060405180910390f35b341561087257600080fd5b61087a611df7565b6040518082815260200191505060405180910390f35b341561089b57600080fd5b6108a3611dfd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156108f057600080fd5b6108f8611e23565b6040518082815260200191505060405180910390f35b341561091957600080fd5b610921611e2d565b6040518082815260200191505060405180910390f35b341561094257600080fd5b61094a611e33565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561098a57808201518184015260208101905061096f565b50505050905090810190601f1680156109b75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156109d057600080fd5b6109d8611ed1565b6040518082815260200191505060405180910390f35b610a046004808035906020019091905050611ed7565b005b610a1c6004808035906020019091905050612336565b005b3415610a2957600080fd5b610a3161263e565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a71578082015181840152602081019050610a56565b50505050905090810190601f168015610a9e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3415610ab757600080fd5b610acd60048080359060200190919050506126dc565b005b610ad7612742565b005b3415610ae457600080fd5b610aec612888565b6040518082815260200191505060405180910390f35b3415610b0d57600080fd5b610b1561288e565b6040518082815260200191505060405180910390f35b3415610b3657600080fd5b610b4c6004808035906020019091905050612894565b005b3415610b5957600080fd5b610b61612c76565b6040518082815260200191505060405180910390f35b3415610b8257600080fd5b610b8a612c7c565b6040518082815260200191505060405180910390f35b3415610bab57600080fd5b610bb3612c86565b6040518082815260200191505060405180910390f35b3415610bd457600080fd5b610bdc612c8c565b6040518082815260200191505060405180910390f35b610bfa612c92565b005b3415610c0757600080fd5b610c33600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612df5565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610c76578082015181840152602081019050610c5b565b505050509050019250505060405180910390f35b3415610c9557600080fd5b610c9d612e0d565b6040518082815260200191505060405180910390f35b610cbb612e13565b005b610cc5612f76565b005b3415610cd257600080fd5b610cda6130d9565b6040518082815260200191505060405180910390f35b3415610cfb57600080fd5b610d036130df565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610d5057600080fd5b610d7c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050613105565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610dbf578082015181840152602081019050610da4565b505050509050019250505060405180910390f35b3415610dde57600080fd5b610de66131a2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610e3357600080fd5b610e3b6131c8565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610e7b578082015181840152602081019050610e60565b50505050905090810190601f168015610ea85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3415610ec157600080fd5b610ed76004808035906020019091905050613266565b6040518082815260200191505060405180910390f35b3415610ef857600080fd5b610f0e600480803590602001909190505061328a565b604051808881526020018781526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200197505050505050505060405180910390f35b3415610fb157600080fd5b610fdd600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061338f565b005b3415610fea57600080fd5b61101f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050613466565b005b60008080600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561109357600080fd5b600092505b601483101561117f576029543414156111715760016002540191506110bd8233613506565b6110c7338361355c565b6110dd600160025461362390919063ffffffff16565b600281905550813373ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688560405160405180910390a3600160025411801561113f57506402540be402600254105b1561116b5761114c613641565b50505050506111596145a3565b505050506111656152c6565b5061116c565b5b611172565b5b8280600101935050611098565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156111e057600080fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561122057600080fd5b5050565b601b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112ba5780601f1061128f576101008083540402835291602001916112ba565b820191906000526020600020905b81548152906001019060200180831161129d57829003601f168201915b505050505081565b60125481565b60006112d38261571a565b9050919050565b600080600080600080600080600a60008a81526020019081526020016000209750876006015496508760000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1695508760080160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16945087600401549350876003015492506017549150612710826015540281151561137457fe5b04905060008311151561138657600080fd5b864210151561139457600080fd5b60155434141561154b578573ffffffffffffffffffffffffffffffffffffffff166108fc82601554039081150290604051600060405180830381858888f1935050505015156113e257600080fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561144457600080fd5b61144f86338b615757565b600088600101819055506000886006018190555060008860050181905550600088600401819055506000886003018190555060008860020181905550611494896158e0565b34897f3829111fd748557557c567283460a311bf5097ec7b993c012f4c399def8a968a8833604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a36000886005015411156115465761154585858b6158fa565b5b611550565b600080fd5b505050505050505050565b60008080600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156115cd57600080fd5b600092505b600a8310156116b9576028543414156116ab5760016002540191506115f78233613506565b611601338361355c565b611617600160025461362390919063ffffffff16565b600281905550813373ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688560405160405180910390a3600160025411801561167957506402540be402600254105b156116a557611686613641565b50505050506116936145a3565b5050505061169f6152c6565b506116a6565b5b6116ac565b5b82806001019350506115d2565b505050565b60006001905090565b6116cf615e9a565b601980548060200260200160405190810160405280929190818152602001828054801561171b57602002820191906000526020600020905b815481526020019060010190808311611707575b5050505050905090565b6000600254905090565b600061173b83836159d1565b905092915050565b60165481565b600e8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156117df5780601f106117b4576101008083540402835291602001916117df565b820191906000526020600020905b8154815290600101906020018083116117c257829003601f168201915b505050505081565b600080600090505b826019828154811015156117ff57fe5b90600052602060002090015414151561181f5780806001019150506117ef565b80915050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561188457600080fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561191557601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b565b600080600080871015151561192b57600080fd5b6000861015151561193b57600080fd5b60008511151561194a57600080fd5b60008411151561195957600080fd5b3392508460118190555061196e601154611ce4565b600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083601681905550600a60006011548152602001908152602001600020915081600101549050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611a31575060018114155b15611bd9578660138190555085601581905550828260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060135482600201819055506015548260030181905550601354826004018190555060018260010181905550600082600501819055506016544201826006018190555060198054806001018281611add9190615eae565b9160005260206000209001600060115490919091505550600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806001018281611b459190615eae565b91600052602060002090016000601154909190915055506015546013546011547fb0402d36f99f9d98e41a93efe3cbcc3b25aa11da0aed2bd474189163c75c11b5868660060154604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a4611ccf565b6011547faa3633f3e479cbc405c22e004855d4ed1a5cceee5ac16471141a7f882bb6eb1533600f604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818154600181600116156101000203166002900481526020019150805460018160011615610100020316600290048015611cbb5780601f10611c9057610100808354040283529160200191611cbb565b820191906000526020600020905b815481529060010190602001808311611c9e57829003601f168201915b5050935050505060405180910390a2600080fd5b50505050505050565b602a5481565b60275481565b6000611cef82615a33565b9050919050565b6000806000600a600085815260200190815260200160002060010154600a600086815260200190815260200160002060060154600a600087815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169250925092509193909250565b602e6020528060005260406000206000915090505481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611de157600080fd5b8060178190555050565b60175481565b602b5481565b60265481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b60115481565b601c8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611ec95780601f10611e9e57610100808354040283529160200191611ec9565b820191906000526020600020905b815481529060010190602001808311611eac57829003601f168201915b505050505081565b60185481565b600080600080600080600a6000888152602001908152602001600020955085600601549450856005015493508442101515611f1157600080fd5b856004015492508560080160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015611fa357506018543410155b8015611faf5750600084115b1561219c578173ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501515611ff457600080fd5b82877fd4b15ee0724fec3829ddfdba102b0b2056d212596a309b0e5667c22b1506553a84604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a3600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6018549081150290604051600060405180830381858888f1935050505015156120bd57600080fd5b600086600101819055506000866006018190555060008660050181905550600086600401819055506000866003018190555060008660020181905550612102876158e0565b82877f0e28bc4acc43dae85789a3974bc64f408924e0c8fb84fd47fff50effb7b6ffa98385604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a35b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156121d957506018543410155b80156121e55750600084145b1561232d57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6018549081150290604051600060405180830381858888f19350505050151561224e57600080fd5b600086600101819055506000866006018190555060008660050181905550600086600401819055506000866003018190555060008660020181905550612293876158e0565b82877f0e28bc4acc43dae85789a3974bc64f408924e0c8fb84fd47fff50effb7b6ffa98385604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a35b50505050505050565b600080600080600080600080600a60008a815260200190815260200160002097508760010154965087600401549550876005015494508760000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1693508760080160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169250876006015491508142111515156123d057600080fd5b6001871415156123df57600080fd5b85341115156123ed57600080fd5b8534111561253857338860080160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034886004018190555087600501600081548092919060010191905055508760050154905060008511156124715761247083878b6158fa565b5b8088600401548a7f5c5a8ad57f01e42c59ba9ab0c38f8513540581ff28853db5bd8ff7dd35433874878c60080160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a4612633565b7f6a9ecd21ae5ccfbd2dbc77ea6dfbb0f85bd7176a960875a246fa6b26233feb5c338a6010604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018060200182810382528381815460018160011615610100020316600290048152602001915080546001816001161561010002031660029004801561261e5780601f106125f35761010080835404028352916020019161261e565b820191906000526020600020905b81548152906001019060200180831161260157829003601f168201915b505094505050505060405180910390a1600080fd5b505050505050505050565b600f8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156126d45780601f106126a9576101008083540402835291602001916126d4565b820191906000526020600020905b8154815290600101906020018083116126b757829003601f168201915b505050505081565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561273857600080fd5b8060188190555050565b600080600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156127b357600080fd5b6026543414156128835760016002540191506127cf8233613506565b6127d9338361355c565b6127ef600160025461362390919063ffffffff16565b600281905550813373ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688560405160405180910390a3600160025411801561285157506402540be402600254105b1561287d5761285e613641565b505050505061286b6145a3565b505050506128776152c6565b5061287e565b5b612884565b5b5050565b60155481565b60025481565b6000806000806000806000600a60008981526020019081526020016000209650866006015495508660000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1694508660080160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1693508660040154925086600501549150854211151561292557600080fd5b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061298a57508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80156129965750600082115b80156129a25750600083115b15612b4d5761271060175484028115156129b857fe5b049050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515612a1d57600080fd5b8473ffffffffffffffffffffffffffffffffffffffff166108fc828960040154039081150290604051600060405180830381858888f193505050501515612a6357600080fd5b612a6e85858a615757565b600087600101819055506000876006018190555060008760050181905550600087600401819055506000876003018190555060008760020181905550612ab3886158e0565b82887f4f1bbc4d7bc9eb604422f11810ceb414baf54871b3b6f28d7bb6845ee4f422418787604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a35b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015612b885750600082145b15612c6c57600087600101819055506000876006018190555060008760050181905550600087600401819055506000876003018190555060008760020181905550612bd2886158e0565b82887f4f1bbc4d7bc9eb604422f11810ceb414baf54871b3b6f28d7bb6845ee4f422418787604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a35b5050505050505050565b60295481565b6000600354905090565b60145481565b60035481565b60008080600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612d0457600080fd5b600092505b6064831015612df057602b54341415612de2576001600254019150612d2e8233613506565b612d38338361355c565b612d4e600160025461362390919063ffffffff16565b600281905550813373ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688560405160405180910390a36001600254118015612db057506402540be402600254105b15612ddc57612dbd613641565b5050505050612dca6145a3565b50505050612dd66152c6565b50612ddd565b5b612de3565b5b8280600101935050612d09565b505050565b612dfd615e9a565b612e0682615a70565b9050919050565b60135481565b60008080600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612e8557600080fd5b600092505b6005831015612f7157602754341415612f63576001600254019150612eaf8233613506565b612eb9338361355c565b612ecf600160025461362390919063ffffffff16565b600281905550813373ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688560405160405180910390a36001600254118015612f3157506402540be402600254105b15612f5d57612f3e613641565b5050505050612f4b6145a3565b50505050612f576152c6565b50612f5e565b5b612f64565b5b8280600101935050612e8a565b505050565b60008080600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612fe857600080fd5b600092505b60328310156130d457602a543414156130c65760016002540191506130128233613506565b61301c338361355c565b613032600160025461362390919063ffffffff16565b600281905550813373ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688560405160405180910390a3600160025411801561309457506402540be402600254105b156130c0576130a1613641565b50505050506130ae6145a3565b505050506130ba6152c6565b506130c1565b5b6130c7565b5b8280600101935050612fed565b505050565b60285481565b602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61310d615e9a565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561319657602002820191906000526020600020905b815481526020019060010190808311613182575b50505050509050919050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60108054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561325e5780601f106132335761010080835404028352916020019161325e565b820191906000526020600020905b81548152906001019060200180831161324157829003601f168201915b505050505081565b60198181548110151561327557fe5b90600052602060002090016000915090505481565b6000806000806000806000600a600089815260200190815260200160002060020154600a60008a815260200190815260200160002060030154600a60008b815260200190815260200160002060050154600a60008c815260200190815260200160002060040154600a60008d815260200190815260200160002060060154600a60008e815260200190815260200160002060080160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a60008f815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169650965096509650965096509650919395979092949650565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156133eb57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415156134635780600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156134c257600080fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561350257600080fd5b5050565b806004600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060010182816135ad9190615eae565b9160005260206000209001600083909190915055506001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490500360086000838152602001908152602001600020819055505050565b600080828401905083811015151561363757fe5b8091505092915050565b6000806000806000806000806000806000806000806000600a600160025481151561366857fe5b0481151561367257fe5b069950600a8060025481151561368457fe5b0481151561368e57fe5b069850600a60646002548115156136a157fe5b048115156136ab57fe5b069750600a6103e86002548115156136bf57fe5b048115156136c957fe5b069650600a6127106002548115156136dd57fe5b048115156136e757fe5b069550600a620186a06002548115156136fc57fe5b0481151561370657fe5b069450600a620f424060025481151561371b57fe5b0481151561372557fe5b069350600a6298968060025481151561373a57fe5b0481151561374457fe5b069250600a6305f5e10060025481151561375a57fe5b0481151561376457fe5b069150600a633b9aca0060025481151561377a57fe5b0481151561378457fe5b06905060018a1480156137975750600089145b15613a455760018803606402876103e802876127100287620186a00287620f424002876298968002876305f5e1000287633b9aca0002606460014303406001600254016040518083600019166000191681526020018281526020019250505060405180910390206001900481151561380b57fe5b0601010101010101019e508e7f478bdce24734482fb03b91a8356e4e5dea6d68ae577e3b5b1dd440d455717a78601d60405180806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156138c35780601f10613898576101008083540402835291602001916138c3565b820191906000526020600020905b8154815290600101906020018083116138a657829003601f168201915b50509250505060405180910390a26138da8f611ce4565b602c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061394d602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166611c37937e08000615b0d565b602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1278cec469b82f9c2bc3acd49264fd19f0a3866e8f74a0823000d568924b7ee8601d6040518080602001828103825283818154600181600116156101000203166002900481526020019150805460018160011615610100020316600290048015613a325780601f10613a0757610100808354040283529160200191613a32565b820191906000526020600020905b815481529060010190602001808311613a1557829003601f168201915b50509250505060405180910390a2613a46565b5b60018a148015613a565750600089145b8015613a625750600088145b15613d1357600187036103e802866127100286620186a00286620f424002866298968002866305f5e1000286633b9aca00026103e86001430340600280540160405180836000191660001916815260200182815260200192505050604051809103902060019004811515613ad257fe5b06010101010101019d508d7f478bdce24734482fb03b91a8356e4e5dea6d68ae577e3b5b1dd440d455717a78601e6040518080602001828103825283818154600181600116156101000203166002900481526020019150805460018160011615610100020316600290048015613b895780601f10613b5e57610100808354040283529160200191613b89565b820191906000526020600020905b815481529060010190602001808311613b6c57829003601f168201915b50509250505060405180910390a2613ba08e611ce4565b602c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613c13602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1666b1a2bc2ec50000615b0d565b613c1b615b51565b602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1278cec469b82f9c2bc3acd49264fd19f0a3866e8f74a0823000d568924b7ee8601e6040518080602001828103825283818154600181600116156101000203166002900481526020019150805460018160011615610100020316600290048015613d005780601f10613cd557610100808354040283529160200191613d00565b820191906000526020600020905b815481529060010190602001808311613ce357829003601f168201915b50509250505060405180910390a2613d14565b5b60018a148015613d245750600089145b8015613d305750600088145b8015613d3c5750600087145b15613fe157600186036127100285620186a00285620f424002856298968002856305f5e1000285633b9aca0002612710600143034060036002540160405180836000191660001916815260200182815260200192505050604051809103902060019004811515613da857fe5b060101010101019c508c7f478bdce24734482fb03b91a8356e4e5dea6d68ae577e3b5b1dd440d455717a78601f6040518080602001828103825283818154600181600116156101000203166002900481526020019150805460018160011615610100020316600290048015613e5e5780601f10613e3357610100808354040283529160200191613e5e565b820191906000526020600020905b815481529060010190602001808311613e4157829003601f168201915b50509250505060405180910390a2613e758d611ce4565b602c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613ee9602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166706f05b59d3b20000615b0d565b602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1278cec469b82f9c2bc3acd49264fd19f0a3866e8f74a0823000d568924b7ee8601f6040518080602001828103825283818154600181600116156101000203166002900481526020019150805460018160011615610100020316600290048015613fce5780601f10613fa357610100808354040283529160200191613fce565b820191906000526020600020905b815481529060010190602001808311613fb157829003601f168201915b50509250505060405180910390a2613fe2565b5b60018a148015613ff25750600089145b8015613ffe5750600088145b801561400a5750600087145b80156140165750600086145b156142b65760018503620186a00284620f424002846298968002846305f5e1000284633b9aca0002620186a060014303406004600254016040518083600019166000191681526020018281526020019250505060405180910390206001900481151561407e57fe5b0601010101019b508b7f478bdce24734482fb03b91a8356e4e5dea6d68ae577e3b5b1dd440d455717a78602060405180806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156141335780601f1061410857610100808354040283529160200191614133565b820191906000526020600020905b81548152906001019060200180831161411657829003601f168201915b50509250505060405180910390a261414a8c611ce4565b602c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506141be602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16674563918244f40000615b0d565b602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1278cec469b82f9c2bc3acd49264fd19f0a3866e8f74a0823000d568924b7ee8602060405180806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156142a35780601f10614278576101008083540402835291602001916142a3565b820191906000526020600020905b81548152906001019060200180831161428657829003601f168201915b50509250505060405180910390a26142b7565b5b60018a1480156142c75750600089145b80156142d35750600088145b80156142df5750600087145b80156142eb5750600086145b80156142f75750600085145b156145915760018403620f424002836298968002836305f5e1000283633b9aca0002620f424060014303406005600254016040518083600019166000191681526020018281526020019250505060405180910390206001900481151561435957fe5b06010101019a508a7f478bdce24734482fb03b91a8356e4e5dea6d68ae577e3b5b1dd440d455717a786021604051808060200182810382528381815460018160011615610100020316600290048152602001915080546001816001161561010002031660029004801561440d5780601f106143e25761010080835404028352916020019161440d565b820191906000526020600020905b8154815290600101906020018083116143f057829003601f168201915b50509250505060405180910390a26144248b611ce4565b602c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614499602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166802b5e3af16b1880000615b0d565b602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1278cec469b82f9c2bc3acd49264fd19f0a3866e8f74a0823000d568924b7ee86021604051808060200182810382528381815460018160011615610100020316600290048152602001915080546001816001161561010002031660029004801561457e5780601f106145535761010080835404028352916020019161457e565b820191906000526020600020905b81548152906001019060200180831161456157829003601f168201915b50509250505060405180910390a2614592565b5b505050505050505050509091929394565b6000806000806000806000806000806000806000806000600a60016002548115156145ca57fe5b048115156145d457fe5b069a50600a806002548115156145e657fe5b048115156145f057fe5b069950600a606460025481151561460357fe5b0481151561460d57fe5b069850600a6103e860025481151561462157fe5b0481151561462b57fe5b069750600a61271060025481151561463f57fe5b0481151561464957fe5b069650600a620186a060025481151561465e57fe5b0481151561466857fe5b069550600a620f424060025481151561467d57fe5b0481151561468757fe5b069450600a6298968060025481151561469c57fe5b048115156146a657fe5b069350600a6305f5e1006002548115156146bc57fe5b048115156146c657fe5b069250600a633b9aca006002548115156146dc57fe5b048115156146e657fe5b069150600a6402540be4006002548115156146fd57fe5b0481151561470757fe5b06905060018b14801561471a575060008a145b80156147265750600089145b80156147325750600088145b801561473e5750600087145b801561474a5750600086145b80156147565750600085145b156149e957600184036298968002836305f5e1000283633b9aca0002629896806001430340600660025401604051808360001916600019168152602001828152602001925050506040518091039020600190048115156147b257fe5b060101019e508e7f478bdce24734482fb03b91a8356e4e5dea6d68ae577e3b5b1dd440d455717a78602260405180806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156148655780601f1061483a57610100808354040283529160200191614865565b820191906000526020600020905b81548152906001019060200180831161484857829003601f168201915b50509250505060405180910390a261487c8f611ce4565b602c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506148f1602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16681b1ae4d6e2ef500000615b0d565b602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1278cec469b82f9c2bc3acd49264fd19f0a3866e8f74a0823000d568924b7ee8602260405180806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156149d65780601f106149ab576101008083540402835291602001916149d6565b820191906000526020600020905b8154815290600101906020018083116149b957829003601f168201915b50509250505060405180910390a26149ea565b5b60018b1480156149fa575060008a145b8015614a065750600089145b8015614a125750600088145b8015614a1e5750600087145b8015614a2a5750600086145b8015614a365750600085145b8015614a425750600084145b15614cd057600183036305f5e1000282633b9aca00026305f5e100600143034060076002540160405180836000191660001916815260200182815260200192505050604051809103902060019004811515614a9957fe5b0601019d508d7f478bdce24734482fb03b91a8356e4e5dea6d68ae577e3b5b1dd440d455717a7860236040518080602001828103825283818154600181600116156101000203166002900481526020019150805460018160011615610100020316600290048015614b4b5780601f10614b2057610100808354040283529160200191614b4b565b820191906000526020600020905b815481529060010190602001808311614b2e57829003601f168201915b50509250505060405180910390a2614b628e611ce4565b602c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614bd8602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669010f0cf064dd59200000615b0d565b602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1278cec469b82f9c2bc3acd49264fd19f0a3866e8f74a0823000d568924b7ee860236040518080602001828103825283818154600181600116156101000203166002900481526020019150805460018160011615610100020316600290048015614cbd5780601f10614c9257610100808354040283529160200191614cbd565b820191906000526020600020905b815481529060010190602001808311614ca057829003601f168201915b50509250505060405180910390a2614cd1565b5b60018b148015614ce1575060008a145b8015614ced5750600089145b8015614cf95750600088145b8015614d055750600087145b8015614d115750600086145b8015614d1d5750600085145b8015614d295750600084145b8015614d355750600083145b15614fbb5760018203633b9aca0002633b9aca00600143034060086002540160405180836000191660001916815260200182815260200192505050604051809103902060019004811515614d8557fe5b06019c508c7f478bdce24734482fb03b91a8356e4e5dea6d68ae577e3b5b1dd440d455717a7860246040518080602001828103825283818154600181600116156101000203166002900481526020019150805460018160011615610100020316600290048015614e365780601f10614e0b57610100808354040283529160200191614e36565b820191906000526020600020905b815481529060010190602001808311614e1957829003601f168201915b50509250505060405180910390a2614e4d8d611ce4565b602c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614ec3602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16690a968163f0a57b400000615b0d565b602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1278cec469b82f9c2bc3acd49264fd19f0a3866e8f74a0823000d568924b7ee860246040518080602001828103825283818154600181600116156101000203166002900481526020019150805460018160011615610100020316600290048015614fa85780601f10614f7d57610100808354040283529160200191614fa8565b820191906000526020600020905b815481529060010190602001808311614f8b57829003601f168201915b50509250505060405180910390a2614fbc565b5b60018b148015614fcc575060008a145b8015614fd85750600089145b8015614fe45750600088145b8015614ff05750600087145b8015614ffc5750600086145b80156150085750600085145b80156150145750600084145b80156150205750600083145b801561502c5750600082145b80156150385750600181145b156152b4576402540be40060014303406009600254016040518083600019166000191681526020018281526020019250505060405180910390206001900481151561507f57fe5b069b508b7f478bdce24734482fb03b91a8356e4e5dea6d68ae577e3b5b1dd440d455717a786025604051808060200182810382528381815460018160011615610100020316600290048152602001915080546001816001161561010002031660029004801561512f5780601f106151045761010080835404028352916020019161512f565b820191906000526020600020905b81548152906001019060200180831161511257829003601f168201915b50509250505060405180910390a26151468c611ce4565b602c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506151bc602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166969e10de76676d0800000615b0d565b602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1278cec469b82f9c2bc3acd49264fd19f0a3866e8f74a0823000d568924b7ee8602560405180806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156152a15780601f10615276576101008083540402835291602001916152a1565b820191906000526020600020905b81548152906001019060200180831161528457829003601f168201915b50509250505060405180910390a26152b5565b5b505050505050505050505090919293565b600080600080600080600080600080600080600a60016002548115156152e857fe5b048115156152f257fe5b069a50600a8060025481151561530457fe5b0481151561530e57fe5b069950600a606460025481151561532157fe5b0481151561532b57fe5b069850600a6103e860025481151561533f57fe5b0481151561534957fe5b069750600a61271060025481151561535d57fe5b0481151561536757fe5b069650600a620186a060025481151561537c57fe5b0481151561538657fe5b069550600a620f424060025481151561539b57fe5b048115156153a557fe5b069450600a629896806002548115156153ba57fe5b048115156153c457fe5b069350600a6305f5e1006002548115156153da57fe5b048115156153e457fe5b069250600a633b9aca006002548115156153fa57fe5b0481151561540457fe5b06915060018b148015615417575060008a145b80156154235750600089145b801561542f5750600088145b801561543b5750600087145b80156154475750600086145b80156154535750600085145b801561545f5750600084145b801561546b5750600083145b80156154775750600182145b1561570b57600a60014303406002805401604051808360001916600019168152602001828152602001925050506040518091039020600190048115156154b957fe5b069050602d818154811015156154cb57fe5b9060005260206000209001549b508b7f478bdce24734482fb03b91a8356e4e5dea6d68ae577e3b5b1dd440d455717a78602360405180806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156155865780601f1061555b57610100808354040283529160200191615586565b820191906000526020600020905b81548152906001019060200180831161556957829003601f168201915b50509250505060405180910390a261559d8c611ce4565b602c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550615613602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669010f0cf064dd59200000615b0d565b602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1278cec469b82f9c2bc3acd49264fd19f0a3866e8f74a0823000d568924b7ee8602360405180806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156156f85780601f106156cd576101008083540402835291602001916156f8565b820191906000526020600020905b8154815290600101906020018083116156db57829003601f168201915b50509250505060405180910390a261570c565b5b505050505050505050505090565b60006006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80600073ffffffffffffffffffffffffffffffffffffffff1661577982611ce4565b73ffffffffffffffffffffffffffffffffffffffff161415151561579c57600080fd5b8373ffffffffffffffffffffffffffffffffffffffff166157bc83611ce4565b73ffffffffffffffffffffffffffffffffffffffff161415156157de57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561581a57600080fd5b615825848484615bbc565b60008473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a38273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050565b60006158eb826117e7565b90506158f681615be8565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff16141580156159215750600082115b156159cc578273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050151561596657600080fd5b81817fd4b15ee0724fec3829ddfdba102b0b2056d212596a309b0e5667c22b1506553a85604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a35b505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481101515615a1f57fe5b906000526020600020900154905092915050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b615a78615e9a565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015615b0157602002820191906000526020600020905b815481526020019060010190808311615aed575b50505050509050919050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515615b4d57600080fd5b5050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc66b1a2bc2ec500009081150290604051600060405180830381858888f193505050501515615bba57600080fd5b565b615bc581615c5b565b615bcf8382615cb1565b615bd98183613506565b615be3828261355c565b505050565b5b600160198054905003811015615c4257601960018201815481101515615c0b57fe5b906000526020600020900154601982815481101515615c2657fe5b9060005260206000209001819055508080600101915050615be9565b6019805480919060019003615c579190615eda565b5050565b60006006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050925060086000858152602001908152602001600020549150600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060018403815481101515615d6057fe5b906000526020600020900154905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481101515615dbb57fe5b906000526020600020900181905550816008600083815260200190815260200160002081905550600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060018403815481101515615e3157fe5b906000526020600020900160009055600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003615e929190615eda565b505050505050565b602060405190810160405280600081525090565b815481835581811511615ed557818360005260206000209182019101615ed49190615f06565b5b505050565b815481835581811511615f0157818360005260206000209182019101615f009190615f06565b5b505050565b615f2891905b80821115615f24576000816000905550600101615f0c565b5090565b905600a165627a7a72305820c2502202b39d8845335841990faa680e1fe8066de95b4d3dd707ea4556edbfcc0029

Swarm Source

bzzr://c2502202b39d8845335841990faa680e1fe8066de95b4d3dd707ea4556edbfcc
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

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.