contract ERC721 {
    // Required methods
    function implementsERC721() public pure returns (bool);
    // ERC20 compatible methods
    function name() public pure returns (string);
    function symbol() public pure returns (string);
    function balanceOf(address _owner) public view returns (uint256 balance);
    function totalSupply() public view returns (uint256 total);
    // Methods defining ownership
    function ownerOf(uint256 _tokenId) public view returns (address addr);
    function approve(address _to, uint256 _tokenId) public;
    function takeOwnership(uint256 _tokenId) public;
    function transferFrom(address _from, address _to, uint256 _tokenId) public;
    function transfer(address _to, uint256 _tokenId) public;
    // Events
    event Transfer(address indexed from, address indexed to, uint256 tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 tokenId);
}
/// @title Interface for contracts conforming to ERC-721: Non-Fungible Tokens
/// @author Dieter Shirley <dete@axiomzen.co> (https://github.com/dete)
function name() public pure returns (string);
// ERC20 compatible methods