ETH Price: $3,500.80 (-0.25%)
Gas: 2 Gwei

Token

Doctor Who - Worlds Apart (DWWA)
 

Overview

Max Total Supply

406 DWWA

Holders

94

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
twicecollector.eth
Balance
2 DWWA
0x39f2fcfdd65573d4c1e6dc2d16c161d160e1e5e6
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

**Doctor Who: Worlds Apart** is an officially licensed trading card game from Reality Gaming Group and the BBC Studios. Collect your favourite characters from the iconic British television series. Players can build powerful decks containing any assortment of Doctors, companions, creatures, items, and more. Challenge your opponents to battle in time and space with innovative gameplay and features.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BaseERC721

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 2 of 18: BaseERC721.sol
pragma solidity 0.5.17;

import "./ERC721Token.sol";
import "./ERC20Interface.sol";
import "./Freezable.sol";

/**
 * @title Base ERC721 token
 * @author Prashant Prabhakar Singh [[email protected]]
 * This contract implements basic ERC721 token functionality with bulk functionalities
 */
contract BaseERC721 is ERC721Token, Freezable {

  constructor(string memory name, string memory symbol, string memory _baseTokenURI) public  ERC721Token(name, symbol){
    baseTokenURI = _baseTokenURI;
  }

  /**
   * @dev Updates the base URL of token
   * Reverts if the sender is not owner
   * @param _newURI New base URL
   */
  function updateBaseTokenURI(string memory _newURI)
    public
    onlyOwner
    noEmergencyFreeze
  {
    baseTokenURI = _newURI;
  }

  /**
   * @dev Mints new token on blockchain
   * Reverts if the sender is not operator with level 1
   * @param _id Id of NFT to be minted
   * @dev URI is not provided because URI will be deducted based on baseURL
   */
  function mint(uint256 _id, address _to)
    public
    onlyDeputyOrOwner
    noEmergencyFreeze
    returns (bool)
  {
    super._mint(_to, _id);
    return true;
  }

  function bulkMint(uint[] memory _ids, address[] memory _users)
    public
    onlyDeputyOrOwner
    noEmergencyFreeze
    returns (bool)
  {
    require(_ids.length == _users.length, "Invalid params");
    for(uint i=0; i<_ids.length; i++) {
      super._mint(_users[i], _ids[i]);
    }
    return true;
  }

  /**
   * @dev Transfer tokens (similar to ERC-20 transfer)
   * Reverts if the sender is not owner of the NFT or approved
   * @param _to address to which token is transferred
   * @param _tokenId Id of NFT being transferred
   */
  function transfer(address _to, uint256 _tokenId)
    public
    noEmergencyFreeze
    returns (bool)
  {
    safeTransferFrom(msg.sender, _to, _tokenId);
    return true;
  }

  /**
   * @dev Burn an existing NFT
   * @param _id Id of NFT to be burned
   */
  function burn(uint _id)
    public
    noEmergencyFreeze
    returns (bool)
  {
    super._burn(msg.sender, _id);
    return true;
  }

  //////////////////////////////////////////
  // PUBLICLY ACCESSIBLE METHODS (CONSTANT)
  //////////////////////////////////////////

}

File 1 of 18: Addresses.sol
pragma solidity 0.5.17;

/**
 * Utility library of inline functions on addresses
 */
library Address {
  

  /**
   * Returns whether the target address is a contract
   * @dev This function will return false if invoked during the constructor of a contract,
   * as the code is not actually created until after the constructor finishes.
   * @param account address to check
   * @return whether the target address is a contract
   */
  function isContract(address account) internal view returns (bool) {
      // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
      // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
      // for accounts without code, i.e. `keccak256('')`
      bytes32 codehash;
      bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
      // solhint-disable-next-line no-inline-assembly
      assembly { codehash := extcodehash(account) }
      return (codehash != accountHash && codehash != 0x0);
  }

}

File 3 of 18: CustomERC721.sol
/**
 * This is custom ERC-721 token with some add on functionalities
*/

pragma solidity 0.5.17;

import "./BaseERC721.sol";

/**
 * @title CustomERC721
 * @author Prashant Prabhakar Singh [[email protected]]
 */
contract CustomERC721 is BaseERC721 {

  // mapping for replay protection
  mapping(address => uint) private userNonce;

  bool public isNormalUserAllowed; // can normal user access advanced features
  
  constructor(string memory name, string memory symbol, string memory baseURI) public BaseERC721(name, symbol, baseURI) {
    isNormalUserAllowed = false;
  }

  modifier canAccessProvableFunctions() {
    require(isNormalUserAllowed || msg.sender == owner || isDeputyOwner[msg.sender], "Not allowed to access provable fns");
    _;
  }

  /**
   * @dev Allows normal users to call provable fns
   * Reverts if the sender is not owner of contract
   * @param _perm permission to users
   */
  function allowNormalUser(bool _perm)
    public 
    onlyOwner
  {
    isNormalUserAllowed = _perm;
  }
  
  /**
   * @dev Allows submitting already signed transaction
   * Reverts if the signed data is incorrect
   * @param message signed message by user
   * @param r signature
   * @param s signature
   * @param v recovery id of signature
   * @param spender address which is approved
   * @param approved bool value for status of approval
   * message should be hash(functionWord, contractAddress, nonce, fnParams)
   */
  function provable_setApprovalForAll(bytes32 message, bytes32 r, bytes32 s, uint8 v, address spender, bool approved)
    public
    noEmergencyFreeze
    canAccessProvableFunctions
  {
    address signer = getSigner(message, r, s, v);
    require (signer != address(0), "Invalid signer");

    bytes32 proof = getMessageSetApprovalForAll(signer, spender, approved);
    require(proof == message, "Invalid proof");

    // perform the original set Approval
    operatorApprovals[signer][spender] = approved;
    emit ApprovalForAll(signer, spender, approved);
    userNonce[signer] = userNonce[signer].add(1);
  }

  /**
   * @dev Allows submitting already signed transaction for NFT transfer
   * Reverts if the signed data is incorrect
   * @param message signed message by user
   * @param r signature
   * @param s signature
   * @param v recovery id of signature
   * @param to recipient address
   * @param tokenId ID of NFT
   * message should be hash(functionWord, contractAddress, nonce, fnParams)
   */
  function provable_transfer(bytes32 message, bytes32 r, bytes32 s, uint8 v, address to, uint tokenId)
    public 
    noEmergencyFreeze
    canAccessProvableFunctions
  {
    address signer = getSigner(message, r, s, v);
    require (signer != address(0),"Invalid signer");

    bytes32 proof = getMessageTransfer(signer, to, tokenId);
    require (proof == message, "Invalid proof");
    
    // Execute original function
    require(to != address(0), "Zero address not allowed");
    clearApproval(signer, tokenId);
    removeTokenFrom(signer, tokenId);
    addTokenTo(to, tokenId);
    emit Transfer(signer, to, tokenId);

    // update state variables
    userNonce[signer] = userNonce[signer].add(1);
  }

  /**
   * @dev Check signer of a message
   * @param message signed message by user
   * @param r signature
   * @param s signature
   * @param v recovery id of signature
   * @return signer of message
   */
  function getSigner(bytes32 message, bytes32 r, bytes32 s,  uint8 v) public pure returns (address){
    bytes memory prefix = "\x19Ethereum Signed Message:\n32";
    bytes32 prefixedHash = keccak256(abi.encodePacked(prefix, message));
    address signer = ecrecover(prefixedHash,v,r,s);
    return signer;
  }

  /**
   * @dev Get message to be signed for transfer
   * @param signer of message
   * @param to recipient address
   * @param id NFT id
   * @return hash of (functionWord, contractAddress, nonce, ...fnParams)
   */
  function getMessageTransfer(address signer, address to, uint id)
    public
    view
    returns (bytes32) 
  {
    return keccak256(abi.encodePacked(
      bytes4(0xb483afd3),
      address(this),
      userNonce[signer],
      to,
      id
    ));
  }

  /**
   * @dev Get message to be signed for set Approval
   * @param signer of message
   * @param spender address which is approved
   * @param approved bool value for status of approval
   * @return hash of (functionWord, contractAddress, nonce, ...fnParams)
   */
  function getMessageSetApprovalForAll(address signer, address spender, bool approved)
    public 
    view 
    returns (bytes32)
  {
    bytes32 proof = keccak256(abi.encodePacked(
      bytes4(0xbad4c8ea),
      address(this),
      userNonce[signer],
      spender,
      approved
    ));
    return proof;
  }

  /**
  * returns nonce of user to be used for next signing
  */
  function getUserNonce(address user) public view returns (uint) {
    return userNonce[user];
  }

  /**
   * @dev Owner can transfer out any accidentally sent ERC20 tokens
   * @param contractAddress ERC20 contract address
   * @param to withdrawal address
   * @param value no of tokens to be withdrawan
   */
  function transferAnyERC20Token(address contractAddress, address to,  uint value) public onlyOwner {
    ERC20Interface(contractAddress).transfer(to, value);
  }

  /**
   * @dev Owner can transfer out any accidentally sent ERC721 tokens
   * @param contractAddress ERC721 contract address
   * @param to withdrawal address
   * @param tokenId Id of 721 token
   */
  function withdrawAnyERC721Token(address contractAddress, address to, uint tokenId) public onlyOwner {
    ERC721Basic(contractAddress).safeTransferFrom(address(this), to, tokenId);
  }

  /**
   * @dev Owner kill the smart contract
   * @param message Confirmation message to prevent accidebtal calling
   * @notice BE VERY CAREFULL BEFORE CALLING THIS FUNCTION
   * Better pause the contract
   * DO CALL "transferAnyERC20Token" before TO WITHDRAW ANY ERC-2O's FROM CONTRACT
   */
  function kill(uint message) public onlyOwner {
    require (message == 123456789987654321, "Invalid code");
    // Transfer Eth to owner and terminate contract
    selfdestruct(msg.sender);
  }

}

File 4 of 18: ERC165.sol
pragma solidity 0.5.17;

/**
 * @title ERC165
 * @author Prashant Prabhakar Singh [[email protected]]
 * @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md
 */
interface ERC165 {

  /**
   * @notice Query if a contract implements an interface
   * @param _interfaceId The interface identifier, as specified in ERC-165
   * @dev Interface identification is specified in ERC-165. This function
   * uses less than 30,000 gas.
   */
  function supportsInterface(bytes4 _interfaceId)
    external
    view
    returns (bool);
}

File 5 of 18: ERC20Interface.sol
pragma solidity ^0.5.17;

contract ERC20Interface {
  function transfer(address to, uint tokens) public returns (bool success);
  function balanceOf(address _sender) public view returns (uint _bal);
  function allowance(address tokenOwner, address spender) public view returns (uint remaining);
  event Transfer(address indexed from, address indexed to, uint tokens);
  event Approval(address indexed owner, address indexed spender, uint256 value);
  function transferFrom(address from, address to, uint tokens) public returns (bool success);
}

File 6 of 18: ERC721.sol
pragma solidity 0.5.17;

import "./ERC721Basic.sol";
import "./ERC721Enumerable.sol";
import "./ERC721Metadata.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, full implementation interface
 * @author Prashant Prabhakar Singh [[email protected]]
 * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract ERC721 is ERC721Basic, ERC721Enumerable, ERC721Metadata {

}

File 7 of 18: ERC721Basic.sol
pragma solidity 0.5.17;

import "./ERC165.sol";

/**
 * @title ERC721 Non-Fungible Token Standard basic interface
 * @author Prashant Prabhakar Singh [[email protected]]
 * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract ERC721Basic is ERC165 {
  event Transfer(
    address indexed _from,
    address indexed _to,
    uint256 indexed _tokenId
  );
  event Approval(
    address indexed _owner,
    address indexed _approved,
    uint256 indexed _tokenId
  );
  event ApprovalForAll(
    address indexed _owner,
    address indexed _operator,
    bool _approved
  );

  function balanceOf(address _owner) public view returns (uint256 _balance);
  function ownerOf(uint256 _tokenId) public view returns (address _owner);
  function exists(uint256 _tokenId) public view returns (bool _exists);

  function approve(address _to, uint256 _tokenId) public;
  function getApproved(uint256 _tokenId)
    public view returns (address _operator);

  function setApprovalForAll(address _operator, bool _approved) public;
  function isApprovedForAll(address _owner, address _operator)
    public view returns (bool);

  function transferFrom(address _from, address _to, uint256 _tokenId) public;
  function safeTransferFrom(address _from, address _to, uint256 _tokenId)
    public;

  function safeTransferFrom(
    address _from,
    address _to,
    uint256 _tokenId,
    bytes memory _data
  )
    public;
}

File 8 of 18: ERC721BasicToken.sol
pragma solidity 0.5.17;

import "./SupportsInterfaceWithLookup.sol";
import "./ERC721Basic.sol";
import "./ERC721Receiver.sol";

import "./SafeMath.sol";
import "./Addresses.sol";

/**
 * @title ERC721 Non-Fungible Token Standard basic implementation
 * @author Prashant Prabhakar Singh [[email protected]]
 * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract ERC721BasicToken is SupportsInterfaceWithLookup, ERC721Basic {

  bytes4 private constant InterfaceId_ERC721 = 0x80ac58cd;
  /*
   * 0x80ac58cd ===
   *   bytes4(keccak256('balanceOf(address)')) ^
   *   bytes4(keccak256('ownerOf(uint256)')) ^
   *   bytes4(keccak256('approve(address,uint256)')) ^
   *   bytes4(keccak256('getApproved(uint256)')) ^
   *   bytes4(keccak256('setApprovalForAll(address,bool)')) ^
   *   bytes4(keccak256('isApprovedForAll(address,address)')) ^
   *   bytes4(keccak256('transferFrom(address,address,uint256)')) ^
   *   bytes4(keccak256('safeTransferFrom(address,address,uint256)')) ^
   *   bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)'))
   */

  bytes4 private constant InterfaceId_ERC721Exists = 0x4f558e79;
  /*
   * 0x4f558e79 ===
   *   bytes4(keccak256('exists(uint256)'))
   */

  using SafeMath for uint256;
  using Address for address;

  // Equals to `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`
  // which can be also obtained as `ERC721Receiver(0).onERC721Received.selector`
  bytes4 private constant ERC721_RECEIVED = 0xf0b9e5ba;

  // Mapping from token ID to owner
  mapping (uint256 => address) internal tokenOwner;

  // Mapping from token ID to approved address
  mapping (uint256 => address) internal tokenApprovals;

  // Mapping from owner to number of owned token
  mapping (address => uint256) internal ownedTokensCount;

  // Mapping from owner to operator approvals
  mapping (address => mapping (address => bool)) internal operatorApprovals;

  /**
   * @dev Guarantees msg.sender is owner of the given token
   * @param _tokenId uint256 ID of the token to validate its ownership belongs to msg.sender
   */
  modifier onlyOwnerOf(uint256 _tokenId) {
    require(ownerOf(_tokenId) == msg.sender, "Only asset owner is allowed");
    _;
  }

  /**
   * @dev Checks msg.sender can transfer a token, by being owner, approved, or operator
   * @param _tokenId uint256 ID of the token to validate
   */
  modifier canTransfer(uint256 _tokenId) {
    require(isApprovedOrOwner(msg.sender, _tokenId), "Can not transfer");
    _;
  }

  constructor()
    public
  {
    // register the supported interfaces to conform to ERC721 via ERC165
    _registerInterface(InterfaceId_ERC721);
    _registerInterface(InterfaceId_ERC721Exists);
  }

  /**
   * @dev Gets the balance of the specified address
   * @param _owner address to query the balance of
   * @return uint256 representing the amount owned by the passed address
   */
  function balanceOf(address _owner) public view returns (uint256) {
    require(_owner != address(0), "Zero address not allowed");
    return ownedTokensCount[_owner];
  }

  /**
   * @dev Gets the owner of the specified token ID
   * @param _tokenId uint256 ID of the token to query the owner of
   * @return owner address currently marked as the owner of the given token ID
   */
  function ownerOf(uint256 _tokenId) public view returns (address) {
    address owner = tokenOwner[_tokenId];
    require(owner != address(0), "Zero address not allowed");
    return owner;
  }

  /**
   * @dev Returns whether the specified token exists
   * @param _tokenId uint256 ID of the token to query the existence of
   * @return whether the token exists
   */
  function exists(uint256 _tokenId) public view returns (bool) {
    address owner = tokenOwner[_tokenId];
    return owner != address(0);
  }

  /**
   * @dev Approves another address to transfer the given token ID
   * The zero address indicates there is no approved address.
   * There can only be one approved address per token at a given time.
   * Can only be called by the token owner or an approved operator.
   * @param _to address to be approved for the given token ID
   * @param _tokenId uint256 ID of the token to be approved
   */
  function approve(address _to, uint256 _tokenId) public {
    address owner = ownerOf(_tokenId);
    require(_to != owner, "Can not approve to self");
    require(msg.sender == owner || isApprovedForAll(owner, msg.sender), "Not allowed to update approvals");

    tokenApprovals[_tokenId] = _to;
    emit Approval(owner, _to, _tokenId);
  }

  /**
   * @dev Gets the approved address for a token ID, or zero if no address set
   * @param _tokenId uint256 ID of the token to query the approval of
   * @return address currently approved for the given token ID
   */
  function getApproved(uint256 _tokenId) public view returns (address) {
    return tokenApprovals[_tokenId];
  }

  /**
   * @dev Sets or unsets the approval of a given operator
   * An operator is allowed to transfer all tokens of the sender on their behalf
   * @param _to operator address to set the approval
   * @param _approved representing the status of the approval to be set
   */
  function setApprovalForAll(address _to, bool _approved) public {
    require(_to != msg.sender, "Can not approve to self");
    operatorApprovals[msg.sender][_to] = _approved;
    emit ApprovalForAll(msg.sender, _to, _approved);
  }

  /**
   * @dev Tells whether an operator is approved by a given owner
   * @param _owner owner address which you want to query the approval of
   * @param _operator operator address which you want to query the approval of
   * @return bool whether the given operator is approved by the given owner
   */
  function isApprovedForAll(
    address _owner,
    address _operator
  )
    public
    view
    returns (bool)
  {
    return operatorApprovals[_owner][_operator];
  }

  /**
   * @dev Transfers the ownership of a given token ID to another address
   * Usage of this method is discouraged, use `safeTransferFrom` whenever possible
   * Requires the msg sender to be the owner, approved, or operator
   * @param _from current owner of the token
   * @param _to address to receive the ownership of the given token ID
   * @param _tokenId uint256 ID of the token to be transferred
  */
  function transferFrom(
    address _from,
    address _to,
    uint256 _tokenId
  )
    public
    canTransfer(_tokenId)
  
  {
    require(_from != address(0), "Zero address not allowed");
    require(_to != address(0), "Zero address not allowed");

    clearApproval(_from, _tokenId);
    removeTokenFrom(_from, _tokenId);
    addTokenTo(_to, _tokenId);

    emit Transfer(_from, _to, _tokenId);
  }

  /**
   * @dev Safely transfers the ownership of a given token ID to another address
   * If the target address is a contract, it must implement `onERC721Received`,
   * which is called upon a safe transfer, and return the magic value
   * `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`; otherwise,
   * the transfer is reverted.
   *
   * Requires the msg sender to be the owner, approved, or operator
   * @param _from current owner of the token
   * @param _to address to receive the ownership of the given token ID
   * @param _tokenId uint256 ID of the token to be transferred
  */
  function safeTransferFrom(
    address _from,
    address _to,
    uint256 _tokenId
  )
    public
    canTransfer(_tokenId)
  
  {
    // solium-disable-next-line arg-overflow
    safeTransferFrom(_from, _to, _tokenId, "");
  }

  /**
   * @dev Safely transfers the ownership of a given token ID to another address
   * If the target address is a contract, it must implement `onERC721Received`,
   * which is called upon a safe transfer, and return the magic value
   * `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`; otherwise,
   * the transfer is reverted.
   * Requires the msg sender to be the owner, approved, or operator
   * @param _from current owner of the token
   * @param _to address to receive the ownership of the given token ID
   * @param _tokenId uint256 ID of the token to be transferred
   * @param _data bytes data to send along with a safe transfer check
   */
  function safeTransferFrom(
    address _from,
    address _to,
    uint256 _tokenId,
    bytes memory _data
  )
    public
    canTransfer(_tokenId)
  {
    transferFrom(_from, _to, _tokenId);
    // solium-disable-next-line arg-overflow
    require(checkAndCallSafeTransfer(_from, _to, _tokenId, _data), "Safe Transfer failed");
  }

  /**
   * @dev Returns whether the given spender can transfer a given token ID
   * @param _spender address of the spender to query
   * @param _tokenId uint256 ID of the token to be transferred
   * @return bool whether the msg.sender is approved for the given token ID,
   *  is an operator of the owner, or is the owner of the token
   */
  function isApprovedOrOwner(
    address _spender,
    uint256 _tokenId
  )
    internal
    view
    returns (bool)
  {
    address owner = ownerOf(_tokenId);
    // Disable solium check because of
    // https://github.com/duaraghav8/Solium/issues/175
    // solium-disable-next-line operator-whitespace
    return (
      _spender == owner ||
      getApproved(_tokenId) == _spender ||
      isApprovedForAll(owner, _spender)
    );
  }

  /**
   * @dev Internal function to mint a new token
   * Reverts if the given token ID already exists
   * @param _to The address that will own the minted token
   * @param _tokenId uint256 ID of the token to be minted by the msg.sender
   */
  function _mint(address _to, uint256 _tokenId) internal {
    require(_to != address(0), "Zero address not allowed");
    addTokenTo(_to, _tokenId);
    emit Transfer(address(0), _to, _tokenId);
  }

  /**
   * @dev Internal function to burn a specific token
   * Reverts if the token does not exist
   * @param _tokenId uint256 ID of the token being burned by the msg.sender
   */
  function _burn(address _owner, uint256 _tokenId) internal {
    clearApproval(_owner, _tokenId);
    removeTokenFrom(_owner, _tokenId);
    emit Transfer(_owner, address(0), _tokenId);
  }

  /**
   * @dev Internal function to clear current approval of a given token ID
   * Reverts if the given address is not indeed the owner of the token
   * @param _owner owner of the token
   * @param _tokenId uint256 ID of the token to be transferred
   */
  function clearApproval(address _owner, uint256 _tokenId) internal {
    require(ownerOf(_tokenId) == _owner, "Asset does not belong to given owmer");
    if (tokenApprovals[_tokenId] != address(0)) {
      tokenApprovals[_tokenId] = address(0);
      emit Approval(_owner, address(0), _tokenId);
    }
  }

  /**
   * @dev Internal function to add a token ID to the list of a given address
   * @param _to address representing the new owner of the given token ID
   * @param _tokenId uint256 ID of the token to be added to the tokens list of the given address
   */
  function addTokenTo(address _to, uint256 _tokenId) internal {
    require(tokenOwner[_tokenId] == address(0), "Asset already exists");
    tokenOwner[_tokenId] = _to;
    ownedTokensCount[_to] = ownedTokensCount[_to].add(1);
  }

  /**
   * @dev Internal function to remove a token ID from the list of a given address
   * @param _from address representing the previous owner of the given token ID
   * @param _tokenId uint256 ID of the token to be removed from the tokens list of the given address
   */
  function removeTokenFrom(address _from, uint256 _tokenId) internal {
    require(ownerOf(_tokenId) == _from, "Asset does not belong to given owmer");
    ownedTokensCount[_from] = ownedTokensCount[_from].sub(1);
    tokenOwner[_tokenId] = address(0);
  }

  /**
   * @dev Internal function to invoke `onERC721Received` on a target address
   * The call is not executed if the target address is not a contract
   * @param _from address representing the previous owner of the given token ID
   * @param _to target address that will receive the tokens
   * @param _tokenId uint256 ID of the token to be transferred
   * @param _data bytes optional data to send along with the call
   * @return whether the call correctly returned the expected magic value
   */
  function checkAndCallSafeTransfer(
    address _from,
    address _to,
    uint256 _tokenId,
    bytes memory _data
  )
    internal
    returns (bool)
  {
    if (!_to.isContract()) {
      return true;
    }
    bytes4 retval = ERC721Receiver(_to).onERC721Received(
      _from, _tokenId, _data);
    return (retval == ERC721_RECEIVED);
  }
}

File 9 of 18: ERC721Enumerable.sol
pragma solidity 0.5.17;

import "./ERC721Basic.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @author Prashant Prabhakar Singh [[email protected]]
 * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract ERC721Enumerable is ERC721Basic {
  function totalSupply() public view returns (uint256);
  function tokenOfOwnerByIndex(
    address _owner,
    uint256 _index
  )
    public
    view
    returns (uint256 _tokenId);

  function tokenByIndex(uint256 _index) public view returns (uint256);
}

File 10 of 18: ERC721Metadata.sol
pragma solidity 0.5.17;

import "./ERC721Basic.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata 
 * @author Prashant Prabhakar Singh [[email protected]]
 * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract ERC721Metadata is ERC721Basic {
  function name() external view returns (string memory _name);
  function symbol() external view returns (string memory _symbol);
  function tokenURI(uint256 _tokenId) public view returns (string memory);
}

File 11 of 18: ERC721Receiver.sol
pragma solidity 0.5.17;

/**
 * @title ERC721 token receiver interface
 * @author Prashant Prabhakar Singh [[email protected]]
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
contract ERC721Receiver {
  /**
   * @dev Magic value to be returned upon successful reception of an NFT
   *  Equals to `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`,
   *  which can be also obtained as `ERC721Receiver(0).onERC721Received.selector`
   */
  bytes4 internal constant ERC721_RECEIVED = 0xf0b9e5ba;

  /**
   * @notice Handle the receipt of an NFT
   * @dev The ERC721 smart contract calls this function on the recipient
   * after a `safetransfer`. This function MAY throw to revert and reject the
   * transfer. This function MUST use 50,000 gas or less. Return of other
   * than the magic value MUST result in the transaction being reverted.
   * Note: the contract address is always the message sender.
   * @param _from The sending address
   * @param _tokenId The NFT identifier which is being transfered
   * @param _data Additional data with no specified format
   * @return `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`
   */
  function onERC721Received(
    address _from,
    uint256 _tokenId,
    bytes memory _data
  )
    public
    returns(bytes4);
}

File 12 of 18: ERC721Token.sol
pragma solidity 0.5.17;

import "./ERC721.sol";
import "./ERC721BasicToken.sol";
import "./SupportsInterfaceWithLookup.sol";
import "./Strings.sol";


/**
 * @title Full ERC721 Token
 * @author Prashant Prabhakar Singh [[email protected]]
 * This implementation includes all the required and some optional functionality of the ERC721 standard
 * Moreover, it includes approve all functionality using operator terminology
 * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract ERC721Token is SupportsInterfaceWithLookup, ERC721BasicToken, ERC721 {

  bytes4 private constant InterfaceId_ERC721Enumerable = 0x780e9d63;
  /**
   * 0x780e9d63 ===
   *   bytes4(keccak256('totalSupply()')) ^
   *   bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) ^
   *   bytes4(keccak256('tokenByIndex(uint256)'))
   */

  bytes4 private constant InterfaceId_ERC721Metadata = 0x5b5e139f;
  /**
   * 0x5b5e139f ===
   *   bytes4(keccak256('name()')) ^
   *   bytes4(keccak256('symbol()')) ^
   *   bytes4(keccak256('tokenURI(uint256)'))
   */

  // Token name
  string internal name_;

  // Token symbol
  string internal symbol_;

  // to store base URL
  string internal baseTokenURI;

  // Mapping from owner to list of owned token IDs
  mapping(address => uint256[]) internal ownedTokens;

  // Mapping from token ID to index of the owner tokens list
  mapping(uint256 => uint256) internal ownedTokensIndex;

  // Array with all token ids, used for enumeration
  uint256[] internal allTokens;

  // Mapping from token id to position in the allTokens array
  mapping(uint256 => uint256) internal allTokensIndex;

  /**
   * @dev Constructor function
   */
  constructor(string memory _name, string memory _symbol) public {
    name_ = _name;
    symbol_ = _symbol;

    // register the supported interfaces to conform to ERC721 via ERC165
    _registerInterface(InterfaceId_ERC721Enumerable);
    _registerInterface(InterfaceId_ERC721Metadata);
  }

  /**
   * @dev Gets the token name
   * @return string representing the token name
   */
  function name() external view returns (string memory) {
    return name_;
  }

  /**
   * @dev Gets the token symbol
   * @return string representing the token symbol
   */
  function symbol() external view returns (string memory) {
    return symbol_;
  }

  /**
   * @dev Returns an URI for a given token ID
   * Throws if the token ID does not exist. May return an empty string.
   * @param _tokenId uint256 ID of the token to query
   */
  function tokenURI(uint256 _tokenId) public view returns (string memory) {
    require(exists(_tokenId), "Asset does not exist");
    return string(abi.encodePacked(baseTokenURI, Strings.toString(_tokenId)));
  }

  /**
   * @dev Gets the token ID at a given index of the tokens list of the requested owner
   * @param _owner address owning the tokens list to be accessed
   * @param _index uint256 representing the index to be accessed of the requested tokens list
   * @return uint256 token ID at the given index of the tokens list owned by the requested address
   */
  function tokenOfOwnerByIndex(
    address _owner,
    uint256 _index
  )
    public
    view
    returns (uint256)
  {
    require(_index < balanceOf(_owner), "Invalid index");
    return ownedTokens[_owner][_index];
  }

  /**
   * @dev Gets the total amount of tokens stored by the contract
   * @return uint256 representing the total amount of tokens
   */
  function totalSupply() public view returns (uint256) {
    return allTokens.length;
  }

  /**
   * @dev Gets the token ID at a given index of all the tokens in this contract
   * Reverts if the index is greater or equal to the total number of tokens
   * @param _index uint256 representing the index to be accessed of the tokens list
   * @return uint256 token ID at the given index of the tokens list
   */
  function tokenByIndex(uint256 _index) public view returns (uint256) {
    require(_index < totalSupply(), "Invalid index");
    return allTokens[_index];
  }

  // @dev This function is not needed as token URI will be created automatically based in base URL
  // /**
  //  * @dev Internal function to set the token URI for a given token
  //  * Reverts if the token ID does not exist
  //  * @param _tokenId uint256 ID of the token to set its URI
  //  * @param _uri string URI to assign
  //  */
  // function _setTokenURI(uint256 _tokenId, string memory _uri) internal {
  //   require(exists(_tokenId));
  //   tokenURI[_tokenId] = _uri;
  // }

  /**
   * @dev Internal function to add a token ID to the list of a given address
   * @param _to address representing the new owner of the given token ID
   * @param _tokenId uint256 ID of the token to be added to the tokens list of the given address
   */
  function addTokenTo(address _to, uint256 _tokenId) internal {
    super.addTokenTo(_to, _tokenId);
    uint256 length = ownedTokens[_to].length;
    ownedTokens[_to].push(_tokenId);
    ownedTokensIndex[_tokenId] = length;
  }

  /**
   * @dev Internal function to remove a token ID from the list of a given address
   * @param _from address representing the previous owner of the given token ID
   * @param _tokenId uint256 ID of the token to be removed from the tokens list of the given address
   */
  function removeTokenFrom(address _from, uint256 _tokenId) internal {
    super.removeTokenFrom(_from, _tokenId);

    uint256 tokenIndex = ownedTokensIndex[_tokenId];
    uint256 lastTokenIndex = ownedTokens[_from].length.sub(1);
    uint256 lastToken = ownedTokens[_from][lastTokenIndex];

    ownedTokens[_from][tokenIndex] = lastToken;
    ownedTokens[_from][lastTokenIndex] = 0;
    // Note that this will handle single-element arrays. In that case, both tokenIndex and lastTokenIndex are going to
    // be zero. Then we can make sure that we will remove _tokenId from the ownedTokens list since we are first swapping
    // the lastToken to the first position, and then dropping the element placed in the last position of the list

    ownedTokens[_from].length--;
    ownedTokensIndex[_tokenId] = 0;
    ownedTokensIndex[lastToken] = tokenIndex;
  }

  /**
   * @dev Internal function to mint a new token
   * Reverts if the given token ID already exists
   * @param _to address the beneficiary that will own the minted token
   * @param _tokenId uint256 ID of the token to be minted by the msg.sender
   */
  function _mint(address _to, uint256 _tokenId) internal {
    super._mint(_to, _tokenId);

    allTokensIndex[_tokenId] = allTokens.length;
    allTokens.push(_tokenId);
  }

  /**
   * @dev Internal function to burn a specific token
   * Reverts if the token does not exist
   * @param _owner owner of the token to burn
   * @param _tokenId uint256 ID of the token being burned by the msg.sender
   */
  function _burn(address _owner, uint256 _tokenId) internal {
    super._burn(_owner, _tokenId);

    // Clear metadata (if any)
    // if (bytes(tokenURI[_tokenId]).length != 0) {
    //   delete tokenURIs[_tokenId];
    // }

    // Reorg all tokens array
    uint256 tokenIndex = allTokensIndex[_tokenId];
    uint256 lastTokenIndex = allTokens.length.sub(1);
    uint256 lastToken = allTokens[lastTokenIndex];

    allTokens[tokenIndex] = lastToken;
    allTokens[lastTokenIndex] = 0;

    allTokens.length--;
    allTokensIndex[_tokenId] = 0;
    allTokensIndex[lastToken] = tokenIndex;
  }
}

File 13 of 18: Freezable.sol
pragma solidity 0.5.17;

import "./Ownership.sol";

contract Freezable is Ownership {
    
    mapping (address => bool) frozen;
    bool public emergencyFreeze = false;

    event Freezed(address targetAddress, bool frozen);
    event EmerygencyFreezed(bool emergencyFreezeStatus);

    modifier unfreezed(address _account) { 
        require(!frozen[_account]);
        _;  
    }
    
    modifier noEmergencyFreeze() { 
        require(!emergencyFreeze);
        _; 
    }

    // ------------------------------------------------------------------------
    // Freeze account - onlyOwner
    // ------------------------------------------------------------------------
    function freezeAccount (address _target, bool _freeze) public onlyOwner returns(bool) {
        frozen[_target] = _freeze;
        emit Freezed(_target, _freeze);
        return true;
    }

    // ------------------------------------------------------------------------
    // Emerygency freeze - onlyOwner
    // ------------------------------------------------------------------------
    function emergencyFreezeAllAccounts (bool _freeze) public onlyOwner returns(bool) {
        emergencyFreeze = _freeze;
        emit EmerygencyFreezed(_freeze);
        return true;
    }

    // ------------------------------------------------------------------------
    // Get Freeze Status : Constant
    // ------------------------------------------------------------------------
    function isFreezed(address _targetAddress) public view returns (bool) {
        return frozen[_targetAddress]; 
    }

}

File 14 of 18: Ownership.sol
pragma solidity 0.5.17;

contract Ownership {

  address public owner;
  address[] public deputyOwners;

  mapping(address => bool) public isDeputyOwner;

  event OwnershipUpdated(address oldOwner, address newOwner);
  event DeputyOwnerUpdated(address _do, bool _isAdded);

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

  modifier onlyOwner() {
    require(msg.sender == owner, "Not owner");
    _;
  }

  modifier onlyDeputyOrOwner() {
    require(msg.sender == owner || isDeputyOwner[msg.sender], "Only owner or deputy owner is allowed");
    _;
  }


  /**
   * @dev Transfer the ownership to some other address.
   * new owner can not be a zero address.
   * Only owner can call this function
   * @param _newOwner Address to which ownership is being transferred
   */
  function updateOwner(address _newOwner)
    public
    onlyOwner
  {
    require(_newOwner != address(0x0), "Invalid address");
    owner = _newOwner;
    emit OwnershipUpdated(msg.sender, owner);
  }

  /**
    * @dev Add new deputy owner.
    * Only Owner can call this function
    * New Deputy should not be zero address
    * New Deputy should not be be already exisitng
    * emit DeputyOwnerUdpatd event
    * @param _newDO Address of new deputy owner
   */
  function addDeputyOwner(address _newDO)
    public
    onlyOwner
  {
    require(!isDeputyOwner[_newDO], "Deputy Owner already exists");
    require(_newDO != address(0), "Zero address not allowed");
    deputyOwners.push(_newDO);
    isDeputyOwner[_newDO] = true;
    emit DeputyOwnerUpdated(_newDO, true);
  }

  /**
    * @dev Remove an existing deputy owner.
    * Only Owner can call this function
    * Given address should be a deputy owner
    * emit DeputyOwnerUdpatd event
    * @param _existingDO Address of existing deputy owner
   */
  function removeDeputyOwner(address _existingDO)
    public
    onlyOwner
  {
    require(isDeputyOwner[_existingDO], "Deputy Owner does not exits");
    uint existingId;
    for(uint i=0; i<deputyOwners.length; i++) {
      if(deputyOwners[i] == _existingDO) existingId=i;
    }

    // swap this with last element
    deputyOwners[existingId] = deputyOwners[deputyOwners.length-1];
    delete deputyOwners[deputyOwners.length-1];
    deputyOwners.length--;
    isDeputyOwner[_existingDO] = false;
    emit DeputyOwnerUpdated(_existingDO, false);
  }

  /**
   * @dev Renounce the ownership.
   * This will leave the contract without any owner.
   * Only owner can call this function
   * @param _validationCode A code to prevent aaccidental calling of this function
   */
  function renounceOwnership(uint _validationCode)
    public
    onlyOwner
  {
    require(_validationCode == 123456789, "Invalid code");
    owner = address(0);
    emit OwnershipUpdated(msg.sender, owner);
  }
}

File 15 of 18: SafeMath.sol
pragma solidity ^0.5.17;

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 && c>=b);
    return c;
  }
}

File 16 of 18: Strings.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.5.17;

/**
 * @dev String operations.
 */
library Strings {
    /**
     * @dev Converts a `uint256` to its ASCII `string` representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        uint256 index = digits - 1;
        temp = value;
        while (temp != 0) {
            buffer[index--] = byte(uint8(48 + temp % 10));
            temp /= 10;
        }
        return string(buffer);
    }
}

File 17 of 18: SupportsInterfaceWithLookup.sol
pragma solidity 0.5.17;

import "./ERC165.sol";

/**
 * @title SupportsInterfaceWithLookup
 * @author Prashant Prabhakar Singh [[email protected]]
 * @dev Implements ERC165 using a lookup table.
 */
contract SupportsInterfaceWithLookup is ERC165 {
  bytes4 public constant InterfaceId_ERC165 = 0x01ffc9a7;
  /**
   * 0x01ffc9a7 ===
   *   bytes4(keccak256('supportsInterface(bytes4)'))
   */

  /**
   * @dev a mapping of interface id to whether or not it's supported
   */
  mapping(bytes4 => bool) internal supportedInterfaces;

  /**
   * @dev A contract implementing SupportsInterfaceWithLookup
   * implement ERC165 itself
   */
  constructor()
    public
  {
    _registerInterface(InterfaceId_ERC165);
  }

  /**
   * @dev implement supportsInterface(bytes4) using a lookup table
   */
  function supportsInterface(bytes4 _interfaceId)
    external
    view
    returns (bool)
  {
    return supportedInterfaces[_interfaceId];
  }

  /**
   * @dev private method for registering an interface
   */
  function _registerInterface(bytes4 _interfaceId)
    internal
  {
    require(_interfaceId != 0xffffffff);
    supportedInterfaces[_interfaceId] = true;
  }
}

File 18 of 18: UserMintableNFT.sol
/**
 * This is enhancement over custom NFT allowing users to mint tokens approved by admin
 * This contract will be used as enhanced version of NFT (v2)
*/

pragma solidity 0.5.17;

import "./CustomERC721.sol";

contract UserMintableNFT is CustomERC721 {

  mapping(address => mapping(uint => bool)) isNonceUsed;

  constructor(string memory name, string memory symbol, string memory baseURI) public CustomERC721(name, symbol, baseURI)
  {

  }

  /**
   * @dev Allows anyone to mint token signed by admin
   * Reverts if admin has not signed for `tokenId` or `to`
   * @param r signature
   * @param s signature
   * @param v recovery id of signature
   * @param tokenId tokenId to be minted
   * @param to address to which tokens needs to be minted
   * @param _signerNonce non-sequential nonce of signer to avoid replay protection
   * @return bool true when operation is successful

   */
  function userMint(
    bytes32 r, bytes32 s, uint8 v,
    uint256 tokenId,
    address to,
    uint256 _signerNonce
  )
    public
    noEmergencyFreeze
    returns (bool)
  {
    
    bytes32 message = keccak256(abi.encodePacked(
      bytes4(0x8cd49589), // Keccak-256 hash of "userMint"
      address(this),
      _signerNonce,
      to,
      tokenId
    ));
    address signer = getSigner(message, r, s, v);
    require(signer == owner || isDeputyOwner[signer], "Admin should sign message");
    require(isNonceUsed[signer][_signerNonce], "nonce already used");
    super._mint(to, tokenId);
    isNonceUsed[signer][_signerNonce] = true;
    return true;
  }

  /**
   * @dev Allows anyone to mint tokens signed by admin
   * Reverts if admin has not signed for `tokenIds` or `to`
   * @param r signature
   * @param s signature
   * @param v recovery id of signature
   * @param tokenIds tokenIds to be minted
   * @param to address to which tokens needs to be minted
   * @param _signerNonce non-sequential nonce of signer to avoid replay protection
   * @return bool true when operation is successful
   */
  function userBulkMint(
    bytes32 r, bytes32 s, uint8 v,
    uint256[] memory tokenIds,
    address to,
    uint256 _signerNonce
  )
    public
    noEmergencyFreeze
    returns (bool)
  {
    bytes32 message = keccak256(abi.encodePacked(
      bytes4(0x5827c1ff), // Keccak-256 hash of "userBulkMint"
      address(this),
      _signerNonce,
      to,
      tokenIds
    ));
    address signer = getSigner(message, r, s, v);
    require(signer == owner || isDeputyOwner[signer], "Admin should sign message");
    require(isNonceUsed[signer][_signerNonce], "nonce already used");
    for(uint256 i=0; i<tokenIds.length; i++) {
      super._mint(to, tokenIds[i]);
    }
    isNonceUsed[signer][_signerNonce] = true;
    return true;
  }
  
}


Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"_baseTokenURI","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_do","type":"address"},{"indexed":false,"internalType":"bool","name":"_isAdded","type":"bool"}],"name":"DeputyOwnerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"emergencyFreezeStatus","type":"bool"}],"name":"EmerygencyFreezed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"targetAddress","type":"address"},{"indexed":false,"internalType":"bool","name":"frozen","type":"bool"}],"name":"Freezed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[],"name":"InterfaceId_ERC165","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newDO","type":"address"}],"name":"addDeputyOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"bulkMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"deputyOwners","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"emergencyFreeze","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"_freeze","type":"bool"}],"name":"emergencyFreezeAllAccounts","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"bool","name":"_freeze","type":"bool"}],"name":"freezeAccount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDeputyOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_targetAddress","type":"address"}],"name":"isFreezed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_existingDO","type":"address"}],"name":"removeDeputyOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_validationCode","type":"uint256"}],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes4","name":"_interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"_newURI","type":"string"}],"name":"updateBaseTokenURI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"updateOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

60806040526010805460ff191690553480156200001b57600080fd5b5060405162002a5438038062002a54833981810160405260608110156200004157600080fd5b81019080805160405193929190846401000000008211156200006257600080fd5b9083019060208201858111156200007857600080fd5b82516401000000008111828201881017156200009357600080fd5b82525081516020918201929091019080838360005b83811015620000c2578181015183820152602001620000a8565b50505050905090810190601f168015620000f05780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011457600080fd5b9083019060208201858111156200012a57600080fd5b82516401000000008111828201881017156200014557600080fd5b82525081516020918201929091019080838360005b83811015620001745781810151838201526020016200015a565b50505050905090810190601f168015620001a25780820380516001836020036101000a031916815260200191505b5060405260200180516040519392919084640100000000821115620001c657600080fd5b908301906020820185811115620001dc57600080fd5b8251640100000000811182820188101715620001f757600080fd5b82525081516020918201929091019080838360005b83811015620002265781810151838201526020016200020c565b50505050905090810190601f168015620002545780820380516001836020036101000a031916815260200191505b50604052508491508390506200027a6301ffc9a760e01b6001600160e01b036200036716565b620002956380ac58cd60e01b6001600160e01b036200036716565b620002b0634f558e7960e01b6001600160e01b036200036716565b8151620002c5906005906020850190620003a4565b508051620002db906006906020840190620003a4565b50620002f763780e9d6360e01b6001600160e01b036200036716565b62000312635b5e139f60e01b6001600160e01b036200036716565b5050600c80546001600160a01b0319163390811790915560408051602081019091529081526200034790600d90600162000429565b5080516200035d906007906020840190620003a4565b50505050620004d6565b6001600160e01b031980821614156200037f57600080fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620003e757805160ff191683800117855562000417565b8280016001018555821562000417579182015b8281111562000417578251825591602001919060010190620003fa565b50620004259291506200048f565b5090565b82805482825590600052602060002090810192821562000481579160200282015b828111156200048157825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906200044a565b5062000425929150620004af565b620004ac91905b8082111562000425576000815560010162000496565b90565b620004ac91905b80821115620004255780546001600160a01b0319168155600101620004b6565b61256e80620004e66000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c806376c16f991161011a578063a22cb465116100ad578063c400956a1161007c578063c400956a146108b6578063c87b56dd146108d3578063e724529c146108f0578063e985e9c51461091e578063f3d4b9421461094c57610206565b8063a22cb46514610772578063a33cdc41146107a0578063a9059cbb146107c6578063b88d4fde146107f257610206565b8063880cdc31116100e9578063880cdc31146107105780638da5cb5b1461073657806394bf804d1461073e57806395d89b411461076a57610206565b806376c16f99146106885780637898278f146106ae5780637d654c7f146106cd5780638111f24e146106ea57610206565b806323b872dd1161019d5780634f558e791161016c5780634f558e79146105675780634f6ccce7146105845780636352211e146105a1578063655391c9146105be57806370a082311461066257610206565b806323b872dd146104b25780632f745c59146104e857806342842e0e1461051457806342966c681461054a57610206565b80631505780e116101d95780631505780e1461032a57806315761f0e1461044d57806318160ddd1461047357806319fa8f501461048d57610206565b806301ffc9a71461020b57806306fdde0314610246578063081812fc146102c3578063095ea7b3146102fc575b600080fd5b6102326004803603602081101561022157600080fd5b50356001600160e01b031916610954565b604080519115158252519081900360200190f35b61024e610977565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610288578181015183820152602001610270565b50505050905090810190601f1680156102b55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e0600480360360208110156102d957600080fd5b5035610a0e565b604080516001600160a01b039092168252519081900360200190f35b6103286004803603604081101561031257600080fd5b506001600160a01b038135169060200135610a29565b005b6102326004803603604081101561034057600080fd5b810190602081018135600160201b81111561035a57600080fd5b82018360208201111561036c57600080fd5b803590602001918460208302840111600160201b8311171561038d57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156103dc57600080fd5b8201836020820111156103ee57600080fd5b803590602001918460208302840111600160201b8311171561040f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610b60945050505050565b6102326004803603602081101561046357600080fd5b50356001600160a01b0316610c6b565b61047b610c80565b60408051918252519081900360200190f35b610495610c86565b604080516001600160e01b03199092168252519081900360200190f35b610328600480360360608110156104c857600080fd5b506001600160a01b03813581169160208101359091169060400135610c91565b61047b600480360360408110156104fe57600080fd5b506001600160a01b038135169060200135610dd7565b6103286004803603606081101561052a57600080fd5b506001600160a01b03813581169160208101359091169060400135610e5c565b6102326004803603602081101561056057600080fd5b5035610ecc565b6102326004803603602081101561057d57600080fd5b5035610ef1565b61047b6004803603602081101561059a57600080fd5b5035610f0e565b6102e0600480360360208110156105b757600080fd5b5035610f7a565b610328600480360360208110156105d457600080fd5b810190602081018135600160201b8111156105ee57600080fd5b82018360208201111561060057600080fd5b803590602001918460018302840111600160201b8311171561062157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610fd8945050505050565b61047b6004803603602081101561067857600080fd5b50356001600160a01b031661104a565b6103286004803603602081101561069e57600080fd5b50356001600160a01b03166110b1565b610232600480360360208110156106c457600080fd5b503515156112b5565b610328600480360360208110156106e357600080fd5b503561134f565b6102326004803603602081101561070057600080fd5b50356001600160a01b031661142f565b6103286004803603602081101561072657600080fd5b50356001600160a01b031661144d565b6102e0611545565b6102326004803603604081101561075457600080fd5b50803590602001356001600160a01b0316611554565b61024e6115dd565b6103286004803603604081101561078857600080fd5b506001600160a01b038135169060200135151561163e565b610328600480360360208110156107b657600080fd5b50356001600160a01b0316611704565b610232600480360360408110156107dc57600080fd5b506001600160a01b0381351690602001356118a7565b6103286004803603608081101561080857600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561084257600080fd5b82018360208201111561085457600080fd5b803590602001918460018302840111600160201b8311171561087557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506118c5945050505050565b6102e0600480360360208110156108cc57600080fd5b503561197a565b61024e600480360360208110156108e957600080fd5b50356119a1565b6102326004803603604081101561090657600080fd5b506001600160a01b0381351690602001351515611ac5565b6102326004803603604081101561093457600080fd5b506001600160a01b0381358116916020013516611b7c565b610232611baa565b6001600160e01b0319811660009081526020819052604090205460ff165b919050565b60058054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a035780601f106109d857610100808354040283529160200191610a03565b820191906000526020600020905b8154815290600101906020018083116109e657829003601f168201915b505050505090505b90565b6000908152600260205260409020546001600160a01b031690565b6000610a3482610f7a565b9050806001600160a01b0316836001600160a01b03161415610a97576040805162461bcd60e51b815260206004820152601760248201527621b0b7103737ba1030b8383937bb32903a379039b2b63360491b604482015290519081900360640190fd5b336001600160a01b0382161480610ab35750610ab38133611b7c565b610b04576040805162461bcd60e51b815260206004820152601f60248201527f4e6f7420616c6c6f77656420746f2075706461746520617070726f76616c7300604482015290519081900360640190fd5b60008281526002602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600c546000906001600160a01b0316331480610b8b5750336000908152600e602052604090205460ff165b610bc65760405162461bcd60e51b81526004018080602001828103825260258152602001806124d16025913960400191505060405180910390fd5b60105460ff1615610bd657600080fd5b8151835114610c1d576040805162461bcd60e51b815260206004820152600e60248201526d496e76616c696420706172616d7360901b604482015290519081900360640190fd5b60005b8351811015610c6157610c59838281518110610c3857fe5b6020026020010151858381518110610c4c57fe5b6020026020010151611bb3565b600101610c20565b5060019392505050565b600e6020526000908152604090205460ff1681565b600a5490565b6301ffc9a760e01b81565b80610c9c3382611c02565b610ce0576040805162461bcd60e51b815260206004820152601060248201526f21b0b7103737ba103a3930b739b332b960811b604482015290519081900360640190fd5b6001600160a01b038416610d29576040805162461bcd60e51b8152602060048201526018602482015260008051602061251a833981519152604482015290519081900360640190fd5b6001600160a01b038316610d72576040805162461bcd60e51b8152602060048201526018602482015260008051602061251a833981519152604482015290519081900360640190fd5b610d7c8483611c61565b610d868483611d2b565b610d908383611e5d565b81836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450505050565b6000610de28361104a565b8210610e25576040805162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b604482015290519081900360640190fd5b6001600160a01b0383166000908152600860205260409020805483908110610e4957fe5b9060005260206000200154905092915050565b80610e673382611c02565b610eab576040805162461bcd60e51b815260206004820152601060248201526f21b0b7103737ba103a3930b739b332b960811b604482015290519081900360640190fd5b610ec6848484604051806020016040528060008152506118c5565b50505050565b60105460009060ff1615610edf57600080fd5b610ee93383611ea3565b506001919050565b6000908152600160205260409020546001600160a01b0316151590565b6000610f18610c80565b8210610f5b576040805162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b604482015290519081900360640190fd5b600a8281548110610f6857fe5b90600052602060002001549050919050565b6000818152600160205260408120546001600160a01b031680610fd2576040805162461bcd60e51b8152602060048201526018602482015260008051602061251a833981519152604482015290519081900360640190fd5b92915050565b600c546001600160a01b03163314611023576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60105460ff161561103357600080fd5b805161104690600790602084019061240f565b5050565b60006001600160a01b038216611095576040805162461bcd60e51b8152602060048201526018602482015260008051602061251a833981519152604482015290519081900360640190fd5b506001600160a01b031660009081526003602052604090205490565b600c546001600160a01b031633146110fc576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b0381166000908152600e602052604090205460ff16611169576040805162461bcd60e51b815260206004820152601b60248201527f446570757479204f776e657220646f6573206e6f742065786974730000000000604482015290519081900360640190fd5b6000805b600d548110156111b557826001600160a01b0316600d828154811061118e57fe5b6000918252602090912001546001600160a01b031614156111ad578091505b60010161116d565b50600d805460001981019081106111c857fe5b600091825260209091200154600d80546001600160a01b0390921691839081106111ee57fe5b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055600d8054600019810190811061122957fe5b600091825260209091200180546001600160a01b0319169055600d80549061125590600019830161248d565b506001600160a01b0382166000818152600e60209081526040808320805460ff1916905580519384529083019190915280517f3c3909677f69a0291b873bdd830b78dfb231df51c82872fde8d546da7cf855339281900390910190a15050565b600c546000906001600160a01b03163314611303576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6010805483151560ff19909116811790915560408051918252517f20cab5a89e9642fc2f3e47bcd2c27f01489aa2e5f76f1a2e673d2e1358dbfdf59181900360200190a1506001919050565b600c546001600160a01b0316331461139a576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b8063075bcd15146113e1576040805162461bcd60e51b815260206004820152600c60248201526b496e76616c696420636f646560a01b604482015290519081900360640190fd5b600c80546001600160a01b0319169055604080513381526000602082015281517f4c19d31874b3f8325813d90efdd10758f703ab99b84367f07276ecd2cd69c95d929181900390910190a150565b6001600160a01b03166000908152600f602052604090205460ff1690565b600c546001600160a01b03163314611498576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b0381166114e5576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b604482015290519081900360640190fd5b600c80546001600160a01b0319166001600160a01b0383811691909117918290556040805133815292909116602083015280517f4c19d31874b3f8325813d90efdd10758f703ab99b84367f07276ecd2cd69c95d9281900390910190a150565b600c546001600160a01b031681565b600c546000906001600160a01b031633148061157f5750336000908152600e602052604090205460ff165b6115ba5760405162461bcd60e51b81526004018080602001828103825260258152602001806124d16025913960400191505060405180910390fd5b60105460ff16156115ca57600080fd5b6115d48284611bb3565b50600192915050565b60068054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a035780601f106109d857610100808354040283529160200191610a03565b6001600160a01b038216331415611696576040805162461bcd60e51b815260206004820152601760248201527621b0b7103737ba1030b8383937bb32903a379039b2b63360491b604482015290519081900360640190fd5b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b600c546001600160a01b0316331461174f576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b0381166000908152600e602052604090205460ff16156117bd576040805162461bcd60e51b815260206004820152601b60248201527f446570757479204f776e657220616c7265616479206578697374730000000000604482015290519081900360640190fd5b6001600160a01b038116611806576040805162461bcd60e51b8152602060048201526018602482015260008051602061251a833981519152604482015290519081900360640190fd5b600d805460018082019092557fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319166001600160a01b0384169081179091556000818152600e6020908152604091829020805460ff191685179055815192835282019290925281517f3c3909677f69a0291b873bdd830b78dfb231df51c82872fde8d546da7cf85533929181900390910190a150565b60105460009060ff16156118ba57600080fd5b6115d4338484610e5c565b816118d03382611c02565b611914576040805162461bcd60e51b815260206004820152601060248201526f21b0b7103737ba103a3930b739b332b960811b604482015290519081900360640190fd5b61191f858585610c91565b61192b85858585611f59565b611973576040805162461bcd60e51b815260206004820152601460248201527314d8599948151c985b9cd9995c8819985a5b195960621b604482015290519081900360640190fd5b5050505050565b600d818154811061198757fe5b6000918252602090912001546001600160a01b0316905081565b60606119ac82610ef1565b6119f4576040805162461bcd60e51b8152602060048201526014602482015273105cdcd95d08191bd95cc81b9bdd08195e1a5cdd60621b604482015290519081900360640190fd5b60076119ff83612082565b6040516020018083805460018160011615610100020316600290048015611a5d5780601f10611a3b576101008083540402835291820191611a5d565b820191906000526020600020905b815481529060010190602001808311611a49575b5050825160208401908083835b60208310611a895780518252601f199092019160209182019101611a6a565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529050919050565b600c546000906001600160a01b03163314611b13576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b0383166000818152600f6020908152604091829020805460ff191686151590811790915582519384529083015280517f8e0072eb5b566b3db642c008c48eecb43223b42000750a06f59acbbc58580aed9281900390910190a150600192915050565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b60105460ff1681565b611bbd8282612146565b600a80546000838152600b60205260408120829055600182018355919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8015550565b600080611c0e83610f7a565b9050806001600160a01b0316846001600160a01b03161480611c495750836001600160a01b0316611c3e84610a0e565b6001600160a01b0316145b80611c595750611c598185611b7c565b949350505050565b816001600160a01b0316611c7482610f7a565b6001600160a01b031614611cb95760405162461bcd60e51b81526004018080602001828103825260248152602001806124f66024913960400191505060405180910390fd5b6000818152600260205260409020546001600160a01b0316156110465760008181526002602052604080822080546001600160a01b0319169055518291906001600160a01b038516907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925908390a45050565b611d3582826121d5565b6000818152600960209081526040808320546001600160a01b03861684526008909252822054909190611d6f90600163ffffffff61229016565b6001600160a01b03851660009081526008602052604081208054929350909183908110611d9857fe5b906000526020600020015490508060086000876001600160a01b03166001600160a01b031681526020019081526020016000208481548110611dd657fe5b60009182526020808320909101929092556001600160a01b0387168152600890915260408120805484908110611e0857fe5b60009182526020808320909101929092556001600160a01b0387168152600890915260409020805490611e3f90600019830161248d565b50600093845260096020526040808520859055908452909220555050565b611e6782826122a2565b6001600160a01b039091166000908152600860209081526040808320805460018101825590845282842081018590559383526009909152902055565b611ead8282612364565b6000818152600b6020526040812054600a54909190611ed390600163ffffffff61229016565b90506000600a8281548110611ee457fe5b9060005260206000200154905080600a8481548110611eff57fe5b90600052602060002001819055506000600a8381548110611f1c57fe5b600091825260209091200155600a805490611f3b90600019830161248d565b506000938452600b6020526040808520859055908452909220555050565b6000611f6d846001600160a01b03166123b4565b611f7957506001611c59565b60405163785cf2dd60e11b81526001600160a01b0386811660048301908152602483018690526060604484019081528551606485015285516000949389169363f0b9e5ba938b938a938a936084019060208501908083838d5b83811015611fea578181015183820152602001611fd2565b50505050905090810190601f1680156120175780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15801561203857600080fd5b505af115801561204c573d6000803e3d6000fd5b505050506040513d602081101561206257600080fd5b50516001600160e01b03191663785cf2dd60e11b14915050949350505050565b6060816120a757506040805180820190915260018152600360fc1b6020820152610972565b8160005b81156120bf57600101600a820491506120ab565b6060816040519080825280601f01601f1916602001820160405280156120ec576020820181803883390190505b50859350905060001982015b831561213d57600a840660300160f81b8282806001900393508151811061211b57fe5b60200101906001600160f81b031916908160001a905350600a840493506120f8565b50949350505050565b6001600160a01b03821661218f576040805162461bcd60e51b8152602060048201526018602482015260008051602061251a833981519152604482015290519081900360640190fd5b6121998282611e5d565b60405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b816001600160a01b03166121e882610f7a565b6001600160a01b03161461222d5760405162461bcd60e51b81526004018080602001828103825260248152602001806124f66024913960400191505060405180910390fd5b6001600160a01b03821660009081526003602052604090205461225790600163ffffffff61229016565b6001600160a01b0390921660009081526003602090815260408083209490945591815260019091522080546001600160a01b0319169055565b60008282111561229c57fe5b50900390565b6000818152600160205260409020546001600160a01b031615612303576040805162461bcd60e51b8152602060048201526014602482015273417373657420616c72656164792065786973747360601b604482015290519081900360640190fd5b600081815260016020818152604080842080546001600160a01b0319166001600160a01b0388169081179091558452600390915290912054612344916123ed565b6001600160a01b0390921660009081526003602052604090209190915550565b61236e8282611c61565b6123788282611d2b565b60405181906000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611c59575050151592915050565b60008282018381108015906124025750828110155b61240857fe5b9392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061245057805160ff191683800117855561247d565b8280016001018555821561247d579182015b8281111561247d578251825591602001919060010190612462565b506124899291506124b6565b5090565b8154818355818111156124b1576000838152602090206124b19181019083016124b6565b505050565b610a0b91905b8082111561248957600081556001016124bc56fe4f6e6c79206f776e6572206f7220646570757479206f776e657220697320616c6c6f776564417373657420646f6573206e6f742062656c6f6e6720746f20676976656e206f776d65725a65726f2061646472657373206e6f7420616c6c6f7765640000000000000000a265627a7a723158202629ada9d4e32422862f1866b3fbdf659a683171356fa694c87c1a1a775f4bd864736f6c63430005110032000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000019446f63746f722057686f202d20576f726c64732041706172740000000000000000000000000000000000000000000000000000000000000000000000000000044457574100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003968747470733a2f2f646f63746f7277686f2d776f726c647361706172742e636f6d2f647277686f2f61737365742f64657461696c732f69642f00000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102065760003560e01c806376c16f991161011a578063a22cb465116100ad578063c400956a1161007c578063c400956a146108b6578063c87b56dd146108d3578063e724529c146108f0578063e985e9c51461091e578063f3d4b9421461094c57610206565b8063a22cb46514610772578063a33cdc41146107a0578063a9059cbb146107c6578063b88d4fde146107f257610206565b8063880cdc31116100e9578063880cdc31146107105780638da5cb5b1461073657806394bf804d1461073e57806395d89b411461076a57610206565b806376c16f99146106885780637898278f146106ae5780637d654c7f146106cd5780638111f24e146106ea57610206565b806323b872dd1161019d5780634f558e791161016c5780634f558e79146105675780634f6ccce7146105845780636352211e146105a1578063655391c9146105be57806370a082311461066257610206565b806323b872dd146104b25780632f745c59146104e857806342842e0e1461051457806342966c681461054a57610206565b80631505780e116101d95780631505780e1461032a57806315761f0e1461044d57806318160ddd1461047357806319fa8f501461048d57610206565b806301ffc9a71461020b57806306fdde0314610246578063081812fc146102c3578063095ea7b3146102fc575b600080fd5b6102326004803603602081101561022157600080fd5b50356001600160e01b031916610954565b604080519115158252519081900360200190f35b61024e610977565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610288578181015183820152602001610270565b50505050905090810190601f1680156102b55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e0600480360360208110156102d957600080fd5b5035610a0e565b604080516001600160a01b039092168252519081900360200190f35b6103286004803603604081101561031257600080fd5b506001600160a01b038135169060200135610a29565b005b6102326004803603604081101561034057600080fd5b810190602081018135600160201b81111561035a57600080fd5b82018360208201111561036c57600080fd5b803590602001918460208302840111600160201b8311171561038d57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156103dc57600080fd5b8201836020820111156103ee57600080fd5b803590602001918460208302840111600160201b8311171561040f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610b60945050505050565b6102326004803603602081101561046357600080fd5b50356001600160a01b0316610c6b565b61047b610c80565b60408051918252519081900360200190f35b610495610c86565b604080516001600160e01b03199092168252519081900360200190f35b610328600480360360608110156104c857600080fd5b506001600160a01b03813581169160208101359091169060400135610c91565b61047b600480360360408110156104fe57600080fd5b506001600160a01b038135169060200135610dd7565b6103286004803603606081101561052a57600080fd5b506001600160a01b03813581169160208101359091169060400135610e5c565b6102326004803603602081101561056057600080fd5b5035610ecc565b6102326004803603602081101561057d57600080fd5b5035610ef1565b61047b6004803603602081101561059a57600080fd5b5035610f0e565b6102e0600480360360208110156105b757600080fd5b5035610f7a565b610328600480360360208110156105d457600080fd5b810190602081018135600160201b8111156105ee57600080fd5b82018360208201111561060057600080fd5b803590602001918460018302840111600160201b8311171561062157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610fd8945050505050565b61047b6004803603602081101561067857600080fd5b50356001600160a01b031661104a565b6103286004803603602081101561069e57600080fd5b50356001600160a01b03166110b1565b610232600480360360208110156106c457600080fd5b503515156112b5565b610328600480360360208110156106e357600080fd5b503561134f565b6102326004803603602081101561070057600080fd5b50356001600160a01b031661142f565b6103286004803603602081101561072657600080fd5b50356001600160a01b031661144d565b6102e0611545565b6102326004803603604081101561075457600080fd5b50803590602001356001600160a01b0316611554565b61024e6115dd565b6103286004803603604081101561078857600080fd5b506001600160a01b038135169060200135151561163e565b610328600480360360208110156107b657600080fd5b50356001600160a01b0316611704565b610232600480360360408110156107dc57600080fd5b506001600160a01b0381351690602001356118a7565b6103286004803603608081101561080857600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561084257600080fd5b82018360208201111561085457600080fd5b803590602001918460018302840111600160201b8311171561087557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506118c5945050505050565b6102e0600480360360208110156108cc57600080fd5b503561197a565b61024e600480360360208110156108e957600080fd5b50356119a1565b6102326004803603604081101561090657600080fd5b506001600160a01b0381351690602001351515611ac5565b6102326004803603604081101561093457600080fd5b506001600160a01b0381358116916020013516611b7c565b610232611baa565b6001600160e01b0319811660009081526020819052604090205460ff165b919050565b60058054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a035780601f106109d857610100808354040283529160200191610a03565b820191906000526020600020905b8154815290600101906020018083116109e657829003601f168201915b505050505090505b90565b6000908152600260205260409020546001600160a01b031690565b6000610a3482610f7a565b9050806001600160a01b0316836001600160a01b03161415610a97576040805162461bcd60e51b815260206004820152601760248201527621b0b7103737ba1030b8383937bb32903a379039b2b63360491b604482015290519081900360640190fd5b336001600160a01b0382161480610ab35750610ab38133611b7c565b610b04576040805162461bcd60e51b815260206004820152601f60248201527f4e6f7420616c6c6f77656420746f2075706461746520617070726f76616c7300604482015290519081900360640190fd5b60008281526002602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600c546000906001600160a01b0316331480610b8b5750336000908152600e602052604090205460ff165b610bc65760405162461bcd60e51b81526004018080602001828103825260258152602001806124d16025913960400191505060405180910390fd5b60105460ff1615610bd657600080fd5b8151835114610c1d576040805162461bcd60e51b815260206004820152600e60248201526d496e76616c696420706172616d7360901b604482015290519081900360640190fd5b60005b8351811015610c6157610c59838281518110610c3857fe5b6020026020010151858381518110610c4c57fe5b6020026020010151611bb3565b600101610c20565b5060019392505050565b600e6020526000908152604090205460ff1681565b600a5490565b6301ffc9a760e01b81565b80610c9c3382611c02565b610ce0576040805162461bcd60e51b815260206004820152601060248201526f21b0b7103737ba103a3930b739b332b960811b604482015290519081900360640190fd5b6001600160a01b038416610d29576040805162461bcd60e51b8152602060048201526018602482015260008051602061251a833981519152604482015290519081900360640190fd5b6001600160a01b038316610d72576040805162461bcd60e51b8152602060048201526018602482015260008051602061251a833981519152604482015290519081900360640190fd5b610d7c8483611c61565b610d868483611d2b565b610d908383611e5d565b81836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450505050565b6000610de28361104a565b8210610e25576040805162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b604482015290519081900360640190fd5b6001600160a01b0383166000908152600860205260409020805483908110610e4957fe5b9060005260206000200154905092915050565b80610e673382611c02565b610eab576040805162461bcd60e51b815260206004820152601060248201526f21b0b7103737ba103a3930b739b332b960811b604482015290519081900360640190fd5b610ec6848484604051806020016040528060008152506118c5565b50505050565b60105460009060ff1615610edf57600080fd5b610ee93383611ea3565b506001919050565b6000908152600160205260409020546001600160a01b0316151590565b6000610f18610c80565b8210610f5b576040805162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b604482015290519081900360640190fd5b600a8281548110610f6857fe5b90600052602060002001549050919050565b6000818152600160205260408120546001600160a01b031680610fd2576040805162461bcd60e51b8152602060048201526018602482015260008051602061251a833981519152604482015290519081900360640190fd5b92915050565b600c546001600160a01b03163314611023576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60105460ff161561103357600080fd5b805161104690600790602084019061240f565b5050565b60006001600160a01b038216611095576040805162461bcd60e51b8152602060048201526018602482015260008051602061251a833981519152604482015290519081900360640190fd5b506001600160a01b031660009081526003602052604090205490565b600c546001600160a01b031633146110fc576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b0381166000908152600e602052604090205460ff16611169576040805162461bcd60e51b815260206004820152601b60248201527f446570757479204f776e657220646f6573206e6f742065786974730000000000604482015290519081900360640190fd5b6000805b600d548110156111b557826001600160a01b0316600d828154811061118e57fe5b6000918252602090912001546001600160a01b031614156111ad578091505b60010161116d565b50600d805460001981019081106111c857fe5b600091825260209091200154600d80546001600160a01b0390921691839081106111ee57fe5b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055600d8054600019810190811061122957fe5b600091825260209091200180546001600160a01b0319169055600d80549061125590600019830161248d565b506001600160a01b0382166000818152600e60209081526040808320805460ff1916905580519384529083019190915280517f3c3909677f69a0291b873bdd830b78dfb231df51c82872fde8d546da7cf855339281900390910190a15050565b600c546000906001600160a01b03163314611303576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6010805483151560ff19909116811790915560408051918252517f20cab5a89e9642fc2f3e47bcd2c27f01489aa2e5f76f1a2e673d2e1358dbfdf59181900360200190a1506001919050565b600c546001600160a01b0316331461139a576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b8063075bcd15146113e1576040805162461bcd60e51b815260206004820152600c60248201526b496e76616c696420636f646560a01b604482015290519081900360640190fd5b600c80546001600160a01b0319169055604080513381526000602082015281517f4c19d31874b3f8325813d90efdd10758f703ab99b84367f07276ecd2cd69c95d929181900390910190a150565b6001600160a01b03166000908152600f602052604090205460ff1690565b600c546001600160a01b03163314611498576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b0381166114e5576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b604482015290519081900360640190fd5b600c80546001600160a01b0319166001600160a01b0383811691909117918290556040805133815292909116602083015280517f4c19d31874b3f8325813d90efdd10758f703ab99b84367f07276ecd2cd69c95d9281900390910190a150565b600c546001600160a01b031681565b600c546000906001600160a01b031633148061157f5750336000908152600e602052604090205460ff165b6115ba5760405162461bcd60e51b81526004018080602001828103825260258152602001806124d16025913960400191505060405180910390fd5b60105460ff16156115ca57600080fd5b6115d48284611bb3565b50600192915050565b60068054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a035780601f106109d857610100808354040283529160200191610a03565b6001600160a01b038216331415611696576040805162461bcd60e51b815260206004820152601760248201527621b0b7103737ba1030b8383937bb32903a379039b2b63360491b604482015290519081900360640190fd5b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b600c546001600160a01b0316331461174f576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b0381166000908152600e602052604090205460ff16156117bd576040805162461bcd60e51b815260206004820152601b60248201527f446570757479204f776e657220616c7265616479206578697374730000000000604482015290519081900360640190fd5b6001600160a01b038116611806576040805162461bcd60e51b8152602060048201526018602482015260008051602061251a833981519152604482015290519081900360640190fd5b600d805460018082019092557fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319166001600160a01b0384169081179091556000818152600e6020908152604091829020805460ff191685179055815192835282019290925281517f3c3909677f69a0291b873bdd830b78dfb231df51c82872fde8d546da7cf85533929181900390910190a150565b60105460009060ff16156118ba57600080fd5b6115d4338484610e5c565b816118d03382611c02565b611914576040805162461bcd60e51b815260206004820152601060248201526f21b0b7103737ba103a3930b739b332b960811b604482015290519081900360640190fd5b61191f858585610c91565b61192b85858585611f59565b611973576040805162461bcd60e51b815260206004820152601460248201527314d8599948151c985b9cd9995c8819985a5b195960621b604482015290519081900360640190fd5b5050505050565b600d818154811061198757fe5b6000918252602090912001546001600160a01b0316905081565b60606119ac82610ef1565b6119f4576040805162461bcd60e51b8152602060048201526014602482015273105cdcd95d08191bd95cc81b9bdd08195e1a5cdd60621b604482015290519081900360640190fd5b60076119ff83612082565b6040516020018083805460018160011615610100020316600290048015611a5d5780601f10611a3b576101008083540402835291820191611a5d565b820191906000526020600020905b815481529060010190602001808311611a49575b5050825160208401908083835b60208310611a895780518252601f199092019160209182019101611a6a565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529050919050565b600c546000906001600160a01b03163314611b13576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b0383166000818152600f6020908152604091829020805460ff191686151590811790915582519384529083015280517f8e0072eb5b566b3db642c008c48eecb43223b42000750a06f59acbbc58580aed9281900390910190a150600192915050565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b60105460ff1681565b611bbd8282612146565b600a80546000838152600b60205260408120829055600182018355919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8015550565b600080611c0e83610f7a565b9050806001600160a01b0316846001600160a01b03161480611c495750836001600160a01b0316611c3e84610a0e565b6001600160a01b0316145b80611c595750611c598185611b7c565b949350505050565b816001600160a01b0316611c7482610f7a565b6001600160a01b031614611cb95760405162461bcd60e51b81526004018080602001828103825260248152602001806124f66024913960400191505060405180910390fd5b6000818152600260205260409020546001600160a01b0316156110465760008181526002602052604080822080546001600160a01b0319169055518291906001600160a01b038516907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925908390a45050565b611d3582826121d5565b6000818152600960209081526040808320546001600160a01b03861684526008909252822054909190611d6f90600163ffffffff61229016565b6001600160a01b03851660009081526008602052604081208054929350909183908110611d9857fe5b906000526020600020015490508060086000876001600160a01b03166001600160a01b031681526020019081526020016000208481548110611dd657fe5b60009182526020808320909101929092556001600160a01b0387168152600890915260408120805484908110611e0857fe5b60009182526020808320909101929092556001600160a01b0387168152600890915260409020805490611e3f90600019830161248d565b50600093845260096020526040808520859055908452909220555050565b611e6782826122a2565b6001600160a01b039091166000908152600860209081526040808320805460018101825590845282842081018590559383526009909152902055565b611ead8282612364565b6000818152600b6020526040812054600a54909190611ed390600163ffffffff61229016565b90506000600a8281548110611ee457fe5b9060005260206000200154905080600a8481548110611eff57fe5b90600052602060002001819055506000600a8381548110611f1c57fe5b600091825260209091200155600a805490611f3b90600019830161248d565b506000938452600b6020526040808520859055908452909220555050565b6000611f6d846001600160a01b03166123b4565b611f7957506001611c59565b60405163785cf2dd60e11b81526001600160a01b0386811660048301908152602483018690526060604484019081528551606485015285516000949389169363f0b9e5ba938b938a938a936084019060208501908083838d5b83811015611fea578181015183820152602001611fd2565b50505050905090810190601f1680156120175780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15801561203857600080fd5b505af115801561204c573d6000803e3d6000fd5b505050506040513d602081101561206257600080fd5b50516001600160e01b03191663785cf2dd60e11b14915050949350505050565b6060816120a757506040805180820190915260018152600360fc1b6020820152610972565b8160005b81156120bf57600101600a820491506120ab565b6060816040519080825280601f01601f1916602001820160405280156120ec576020820181803883390190505b50859350905060001982015b831561213d57600a840660300160f81b8282806001900393508151811061211b57fe5b60200101906001600160f81b031916908160001a905350600a840493506120f8565b50949350505050565b6001600160a01b03821661218f576040805162461bcd60e51b8152602060048201526018602482015260008051602061251a833981519152604482015290519081900360640190fd5b6121998282611e5d565b60405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b816001600160a01b03166121e882610f7a565b6001600160a01b03161461222d5760405162461bcd60e51b81526004018080602001828103825260248152602001806124f66024913960400191505060405180910390fd5b6001600160a01b03821660009081526003602052604090205461225790600163ffffffff61229016565b6001600160a01b0390921660009081526003602090815260408083209490945591815260019091522080546001600160a01b0319169055565b60008282111561229c57fe5b50900390565b6000818152600160205260409020546001600160a01b031615612303576040805162461bcd60e51b8152602060048201526014602482015273417373657420616c72656164792065786973747360601b604482015290519081900360640190fd5b600081815260016020818152604080842080546001600160a01b0319166001600160a01b0388169081179091558452600390915290912054612344916123ed565b6001600160a01b0390921660009081526003602052604090209190915550565b61236e8282611c61565b6123788282611d2b565b60405181906000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611c59575050151592915050565b60008282018381108015906124025750828110155b61240857fe5b9392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061245057805160ff191683800117855561247d565b8280016001018555821561247d579182015b8281111561247d578251825591602001919060010190612462565b506124899291506124b6565b5090565b8154818355818111156124b1576000838152602090206124b19181019083016124b6565b505050565b610a0b91905b8082111561248957600081556001016124bc56fe4f6e6c79206f776e6572206f7220646570757479206f776e657220697320616c6c6f776564417373657420646f6573206e6f742062656c6f6e6720746f20676976656e206f776d65725a65726f2061646472657373206e6f7420616c6c6f7765640000000000000000a265627a7a723158202629ada9d4e32422862f1866b3fbdf659a683171356fa694c87c1a1a775f4bd864736f6c63430005110032

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000019446f63746f722057686f202d20576f726c64732041706172740000000000000000000000000000000000000000000000000000000000000000000000000000044457574100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003968747470733a2f2f646f63746f7277686f2d776f726c647361706172742e636f6d2f647277686f2f61737365742f64657461696c732f69642f00000000000000

-----Decoded View---------------
Arg [0] : name (string): Doctor Who - Worlds Apart
Arg [1] : symbol (string): DWWA
Arg [2] : _baseTokenURI (string): https://doctorwho-worldsapart.com/drwho/asset/details/id/

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [4] : 446f63746f722057686f202d20576f726c647320417061727400000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 4457574100000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000039
Arg [8] : 68747470733a2f2f646f63746f7277686f2d776f726c647361706172742e636f
Arg [9] : 6d2f647277686f2f61737365742f64657461696c732f69642f00000000000000


Deployed Bytecode Sourcemap

303:1940:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;303:1940:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;808:142:16;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;808:142:16;-1:-1:-1;;;;;;808:142:16;;:::i;:::-;;;;;;;;;;;;;;;;;;2078:77:11;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2078:77:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4787:111:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4787:111:7;;:::i;:::-;;;;-1:-1:-1;;;;;4787:111:7;;;;;;;;;;;;;;4221:339;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;4221:339:7;;;;;;;;:::i;:::-;;1167:307:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1167:307:1;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;1167:307:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1167:307:1;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;1167:307:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1167:307:1;;;;;;;;-1:-1:-1;1167:307:1;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;1167:307:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1167:307:1;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;1167:307:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1167:307:1;;-1:-1:-1;1167:307:1;;-1:-1:-1;;;;;1167:307:1:i;107:45:13:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;107:45:13;-1:-1:-1;;;;;107:45:13;;:::i;3456:87:11:-;;;:::i;:::-;;;;;;;;;;;;;;;;263:54:16;;;:::i;:::-;;;;-1:-1:-1;;;;;;263:54:16;;;;;;;;;;;;;;6305:401:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;6305:401:7;;;;;;;;;;;;;;;;;:::i;3094:220:11:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3094:220:11;;;;;;;;:::i;7314:228:7:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7314:228:7;;;;;;;;;;;;;;;;;:::i;1971:134:1:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1971:134:1;;:::i;3676:140:7:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3676:140:7;;:::i;3867:157:11:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3867:157:11;;:::i;3306:192:7:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3306:192:7;;:::i;638:133:1:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;638:133:1;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;638:133:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;638:133:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;638:133:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;638:133:1;;-1:-1:-1;638:133:1;;-1:-1:-1;;;;;638:133:1:i;2923:170:7:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2923:170:7;-1:-1:-1;;;;;2923:170:7;;:::i;1832:550:13:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1832:550:13;-1:-1:-1;;;;;1832:550:13;;:::i;1068:186:12:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1068:186:12;;;;:::i;2607:210:13:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2607:210:13;;:::i;1456:117:12:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1456:117:12;-1:-1:-1;;;;;1456:117:12;;:::i;816:200:13:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;816:200:13;-1:-1:-1;;;;;816:200:13;;:::i;49:20::-;;;:::i;998:165:1:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;998:165:1;;;;;;-1:-1:-1;;;;;998:165:1;;:::i;2253:81:11:-;;;:::i;5178:232:7:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;5178:232:7;;;;;;;;;;:::i;1283:311:13:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1283:311:13;-1:-1:-1;;;;;1283:311:13;;:::i;1711:174:1:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1711:174:1;;;;;;;;:::i;8216:333:7:-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;8216:333:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;8216:333:7;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8216:333:7;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;8216:333:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;8216:333:7;;-1:-1:-1;8216:333:7;;-1:-1:-1;;;;;8216:333:7:i;73:29:13:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;73:29:13;;:::i;2522:211:11:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2522:211:11;;:::i;676:189:12:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;676:189:12;;;;;;;;;;:::i;5719:168:7:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;5719:168:7;;;;;;;;;;:::i;133:35:12:-;;;:::i;808:142:16:-;-1:-1:-1;;;;;;912:33:16;;891:4;912:33;;;;;;;;;;;;;808:142;;;;:::o;2078:77:11:-;2145:5;2138:12;;;;;;;;-1:-1:-1;;2138:12:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2117:13;;2138:12;;2145:5;;2138:12;;2145:5;2138:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2078:77;;:::o;4787:111:7:-;4847:7;4869:24;;;:14;:24;;;;;;-1:-1:-1;;;;;4869:24:7;;4787:111::o;4221:339::-;4282:13;4298:17;4306:8;4298:7;:17::i;:::-;4282:33;;4336:5;-1:-1:-1;;;;;4329:12:7;:3;-1:-1:-1;;;;;4329:12:7;;;4321:48;;;;;-1:-1:-1;;;4321:48:7;;;;;;;;;;;;-1:-1:-1;;;4321:48:7;;;;;;;;;;;;;;;4383:10;-1:-1:-1;;;;;4383:19:7;;;;:58;;;4406:35;4423:5;4430:10;4406:16;:35::i;:::-;4375:102;;;;;-1:-1:-1;;;4375:102:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;4484:24;;;;:14;:24;;;;;;:30;;-1:-1:-1;;;;;;4484:30:7;-1:-1:-1;;;;;4484:30:7;;;;;;;;;4525;;4484:24;;4525:30;;;;;;;4221:339;;;:::o;1167:307:1:-;504:5:13;;1298:4:1;;-1:-1:-1;;;;;504:5:13;490:10;:19;;:48;;-1:-1:-1;527:10:13;513:25;;;;:13;:25;;;;;;;;490:48;482:98;;;;-1:-1:-1;;;482:98:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;441:15:12;;;;440:16;432:25;;;;;;1335:6:1;:13;1320:4;:11;:28;1312:55;;;;;-1:-1:-1;;;1312:55:1;;;;;;;;;;;;-1:-1:-1;;;1312:55:1;;;;;;;;;;;;;;;1377:6;1373:80;1389:4;:11;1387:1;:13;1373:80;;;1415:31;1427:6;1434:1;1427:9;;;;;;;;;;;;;;1438:4;1443:1;1438:7;;;;;;;;;;;;;;1415:11;:31::i;:::-;1402:3;;1373:80;;;-1:-1:-1;1465:4:1;;1167:307;-1:-1:-1;;;1167:307:1:o;107:45:13:-;;;;;;;;;;;;;;;:::o;3456:87:11:-;3522:9;:16;3456:87;:::o;263:54:16:-;-1:-1:-1;;;263:54:16;:::o;6305:401:7:-;6416:8;2456:39;2474:10;2486:8;2456:17;:39::i;:::-;2448:68;;;;;-1:-1:-1;;;2448:68:7;;;;;;;;;;;;-1:-1:-1;;;2448:68:7;;;;;;;;;;;;;;;-1:-1:-1;;;;;6445:19:7;;6437:56;;;;;-1:-1:-1;;;6437:56:7;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6437:56:7;;;;;;;;;;;;;;;-1:-1:-1;;;;;6507:17:7;;6499:54;;;;;-1:-1:-1;;;6499:54:7;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6499:54:7;;;;;;;;;;;;;;;6560:30;6574:5;6581:8;6560:13;:30::i;:::-;6596:32;6612:5;6619:8;6596:15;:32::i;:::-;6634:25;6645:3;6650:8;6634:10;:25::i;:::-;6692:8;6687:3;-1:-1:-1;;;;;6671:30:7;6680:5;-1:-1:-1;;;;;6671:30:7;;;;;;;;;;;6305:401;;;;:::o;3094:220:11:-;3200:7;3234:17;3244:6;3234:9;:17::i;:::-;3225:6;:26;3217:52;;;;;-1:-1:-1;;;3217:52:11;;;;;;;;;;;;-1:-1:-1;;;3217:52:11;;;;;;;;;;;;;;;-1:-1:-1;;;;;3282:19:11;;;;;;:11;:19;;;;;:27;;3302:6;;3282:27;;;;;;;;;;;;;;3275:34;;3094:220;;;;:::o;7314:228:7:-;7429:8;2456:39;2474:10;2486:8;2456:17;:39::i;:::-;2448:68;;;;;-1:-1:-1;;;2448:68:7;;;;;;;;;;;;-1:-1:-1;;;2448:68:7;;;;;;;;;;;;;;;7495:42;7512:5;7519:3;7524:8;7495:42;;;;;;;;;;;;:16;:42::i;:::-;7314:228;;;;:::o;1971:134:1:-;441:15:12;;2041:4:1;;441:15:12;;440:16;432:25;;;;;;2055:28:1;2067:10;2079:3;2055:11;:28::i;:::-;-1:-1:-1;2096:4:1;1971:134;;;:::o;3676:140:7:-;3731:4;3759:20;;;:10;:20;;;;;;-1:-1:-1;;;;;3759:20:7;3792:19;;;3676:140::o;3867:157:11:-;3926:7;3958:13;:11;:13::i;:::-;3949:6;:22;3941:48;;;;;-1:-1:-1;;;3941:48:11;;;;;;;;;;;;-1:-1:-1;;;3941:48:11;;;;;;;;;;;;;;;4002:9;4012:6;4002:17;;;;;;;;;;;;;;;;3995:24;;3867:157;;;:::o;3306:192:7:-;3362:7;3393:20;;;:10;:20;;;;;;-1:-1:-1;;;;;3393:20:7;3427:19;3419:56;;;;;-1:-1:-1;;;3419:56:7;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3419:56:7;;;;;;;;;;;;;;;3488:5;3306:192;-1:-1:-1;;3306:192:7:o;638:133:1:-;412:5:13;;-1:-1:-1;;;;;412:5:13;398:10;:19;390:41;;;;;-1:-1:-1;;;390:41:13;;;;;;;;;;;;-1:-1:-1;;;390:41:13;;;;;;;;;;;;;;;441:15:12;;;;440:16;432:25;;;;;;744:22:1;;;;:12;;:22;;;;;:::i;:::-;;638:133;:::o;2923:170:7:-;2979:7;-1:-1:-1;;;;;3002:20:7;;2994:57;;;;;-1:-1:-1;;;2994:57:7;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2994:57:7;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3064:24:7;;;;;:16;:24;;;;;;;2923:170::o;1832:550:13:-;412:5;;-1:-1:-1;;;;;412:5:13;398:10;:19;390:41;;;;;-1:-1:-1;;;390:41:13;;;;;;;;;;;;-1:-1:-1;;;390:41:13;;;;;;;;;;;;;;;-1:-1:-1;;;;;1921:26:13;;;;;;:13;:26;;;;;;;;1913:66;;;;;-1:-1:-1;;;1913:66:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;1985:15;;2006:104;2022:12;:19;2020:21;;2006:104;;;2078:11;-1:-1:-1;;;;;2059:30:13;:12;2072:1;2059:15;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2059:15:13;:30;2056:47;;;2102:1;2091:12;;2056:47;2043:3;;2006:104;;;-1:-1:-1;2178:12:13;2191:19;;-1:-1:-1;;2191:21:13;;;2178:35;;;;;;;;;;;;;;;;2151:12;:24;;-1:-1:-1;;;;;2178:35:13;;;;2164:10;;2151:24;;;;;;;;;;;;;;;:62;;-1:-1:-1;;;;;;2151:62:13;-1:-1:-1;;;;;2151:62:13;;;;;;;;;;2226:12;2239:19;;-1:-1:-1;;2239:21:13;;;2226:35;;;;;;;;;;;;;;;2219:42;;-1:-1:-1;;;;;;2219:42:13;;;2267:12;:21;;;;;-1:-1:-1;;2267:21:13;;;:::i;:::-;-1:-1:-1;;;;;;2294:26:13;;2323:5;2294:26;;;:13;:26;;;;;;;;:34;;-1:-1:-1;;2294:34:13;;;2339:38;;;;;;;;;;;;;;;;;;;;;;;;437:1;1832:550;:::o;1068:186:12:-;412:5:13;;1144:4:12;;-1:-1:-1;;;;;412:5:13;398:10;:19;390:41;;;;;-1:-1:-1;;;390:41:13;;;;;;;;;;;;-1:-1:-1;;;390:41:13;;;;;;;;;;;;;;;1160:15:12;:25;;;;;-1:-1:-1;;1160:25:12;;;;;;;;1200:26;;;;;;;;;;;;;;;;-1:-1:-1;1243:4:12;1068:186;;;:::o;2607:210:13:-;412:5;;-1:-1:-1;;;;;412:5:13;398:10;:19;390:41;;;;;-1:-1:-1;;;390:41:13;;;;;;;;;;;;-1:-1:-1;;;390:41:13;;;;;;;;;;;;;;;2697:15;2716:9;2697:28;2689:53;;;;;-1:-1:-1;;;2689:53:13;;;;;;;;;;;;-1:-1:-1;;;2689:53:13;;;;;;;;;;;;;;;2748:5;:18;;-1:-1:-1;;;;;;2748:18:13;;;2777:35;;;2794:10;2777:35;;2764:1;2777:35;;;;;;;;;;;;;;;;;2607:210;:::o;1456:117:12:-;-1:-1:-1;;;;;1543:22:12;1520:4;1543:22;;;:6;:22;;;;;;;;;1456:117::o;816:200:13:-;412:5;;-1:-1:-1;;;;;412:5:13;398:10;:19;390:41;;;;;-1:-1:-1;;;390:41:13;;;;;;;;;;;;-1:-1:-1;;;390:41:13;;;;;;;;;;;;;;;-1:-1:-1;;;;;897:25:13;;889:53;;;;;-1:-1:-1;;;889:53:13;;;;;;;;;;;;-1:-1:-1;;;889:53:13;;;;;;;;;;;;;;;948:5;:17;;-1:-1:-1;;;;;;948:17:13;-1:-1:-1;;;;;948:17:13;;;;;;;;;;;976:35;;;993:10;976:35;;1005:5;;;;976:35;;;;;;;;;;;;;;;;816:200;:::o;49:20::-;;;-1:-1:-1;;;;;49:20:13;;:::o;998:165:1:-;504:5:13;;1106:4:1;;-1:-1:-1;;;;;504:5:13;490:10;:19;;:48;;-1:-1:-1;527:10:13;513:25;;;;:13;:25;;;;;;;;490:48;482:98;;;;-1:-1:-1;;;482:98:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;441:15:12;;;;440:16;432:25;;;;;;1120:21:1;1132:3;1137;1120:11;:21::i;:::-;-1:-1:-1;1154:4:1;998:165;;;;:::o;2253:81:11:-;2322:7;2315:14;;;;;;;;-1:-1:-1;;2315:14:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2294:13;;2315:14;;2322:7;;2315:14;;2322:7;2315:14;;;;;;;;;;;;;;;;;;;;;;;;5178:232:7;-1:-1:-1;;;;;5255:17:7;;5262:10;5255:17;;5247:53;;;;;-1:-1:-1;;;5247:53:7;;;;;;;;;;;;-1:-1:-1;;;5247:53:7;;;;;;;;;;;;;;;5324:10;5306:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;5306:34:7;;;;;;;;;;;;:46;;-1:-1:-1;;5306:46:7;;;;;;;;;;5363:42;;;;;;;5306:34;;5324:10;5363:42;;;;;;;;;;;5178:232;;:::o;1283:311:13:-;412:5;;-1:-1:-1;;;;;412:5:13;398:10;:19;390:41;;;;;-1:-1:-1;;;390:41:13;;;;;;;;;;;;-1:-1:-1;;;390:41:13;;;;;;;;;;;;;;;-1:-1:-1;;;;;1365:21:13;;;;;;:13;:21;;;;;;;;1364:22;1356:62;;;;;-1:-1:-1;;;1356:62:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1432:20:13;;1424:57;;;;;-1:-1:-1;;;1424:57:13;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1424:57:13;;;;;;;;;;;;;;;1487:12;27:10:-1;;39:1;23:18;;;45:23;;;1487:25:13;;;;-1:-1:-1;;;;;;1487:25:13;-1:-1:-1;;;;;1487:25:13;;;;;;;;-1:-1:-1;1518:21:13;;;:13;1487:25;1518:21;;;;;;;;:28;;-1:-1:-1;;1518:28:13;;;;;1557:32;;;;;;;;;;;;;;;;;;;;;;;;1283:311;:::o;1711:174:1:-;441:15:12;;1806:4:1;;441:15:12;;440:16;432:25;;;;;;1820:43:1;1837:10;1849:3;1854:8;1820:16;:43::i;8216:333:7:-;8355:8;2456:39;2474:10;2486:8;2456:17;:39::i;:::-;2448:68;;;;;-1:-1:-1;;;2448:68:7;;;;;;;;;;;;-1:-1:-1;;;2448:68:7;;;;;;;;;;;;;;;8373:34;8386:5;8393:3;8398:8;8373:12;:34::i;:::-;8466:53;8491:5;8498:3;8503:8;8513:5;8466:24;:53::i;:::-;8458:86;;;;;-1:-1:-1;;;8458:86:7;;;;;;;;;;;;-1:-1:-1;;;8458:86:7;;;;;;;;;;;;;;;8216:333;;;;;:::o;73:29:13:-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;73:29:13;;-1:-1:-1;73:29:13;:::o;2522:211:11:-;2579:13;2608:16;2615:8;2608:6;:16::i;:::-;2600:49;;;;;-1:-1:-1;;;2600:49:11;;;;;;;;;;;;-1:-1:-1;;;2600:49:11;;;;;;;;;;;;;;;2686:12;2700:26;2717:8;2700:16;:26::i;:::-;2669:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2669:58:11;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2669:58:11;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2669:58:11;;;2655:73;;2522:211;;;:::o;676:189:12:-;412:5:13;;756:4:12;;-1:-1:-1;;;;;412:5:13;398:10;:19;390:41;;;;;-1:-1:-1;;;390:41:13;;;;;;;;;;;;-1:-1:-1;;;390:41:13;;;;;;;;;;;;;;;-1:-1:-1;;;;;772:15:12;;;;;;:6;:15;;;;;;;;;:25;;-1:-1:-1;;772:25:12;;;;;;;;;;812;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;854:4:12;676:189;;;;:::o;5719:168:7:-;-1:-1:-1;;;;;5846:25:7;;;5825:4;5846:25;;;:17;:25;;;;;;;;:36;;;;;;;;;;;;;;;5719:168::o;133:35:12:-;;;;;;:::o;6399:172:11:-;6460:26;6472:3;6477:8;6460:11;:26::i;:::-;6520:9;:16;;6493:24;;;;:14;:24;;;;;:43;;;39:1:-1;23:18;;45:23;;6542:24:11;;;;;;;-1:-1:-1;6399:172:11:o;8896:438:7:-;9006:4;9020:13;9036:17;9044:8;9036:7;:17::i;:::-;9020:33;;9232:5;-1:-1:-1;;;;;9220:17:7;:8;-1:-1:-1;;;;;9220:17:7;;:60;;;;9272:8;-1:-1:-1;;;;;9247:33:7;:21;9259:8;9247:11;:21::i;:::-;-1:-1:-1;;;;;9247:33:7;;9220:60;:103;;;;9290:33;9307:5;9314:8;9290:16;:33::i;:::-;9205:124;8896:438;-1:-1:-1;;;;8896:438:7:o;10416:305::-;10517:6;-1:-1:-1;;;;;10496:27:7;:17;10504:8;10496:7;:17::i;:::-;-1:-1:-1;;;;;10496:27:7;;10488:76;;;;-1:-1:-1;;;10488:76:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10610:1;10574:24;;;:14;:24;;;;;;-1:-1:-1;;;;;10574:24:7;:38;10570:147;;10657:1;10622:24;;;:14;:24;;;;;;:37;;-1:-1:-1;;;;;;10622:37:7;;;10672:38;10637:8;;10657:1;-1:-1:-1;;;;;10672:38:7;;;;;10657:1;;10672:38;10416:305;;:::o;5282:856:11:-;5355:38;5377:5;5384:8;5355:21;:38::i;:::-;5400:18;5421:26;;;:16;:26;;;;;;;;;-1:-1:-1;;;;;5478:18:11;;;;:11;:18;;;;;:25;5421:26;;5400:18;5478:32;;5508:1;5478:32;:29;:32;:::i;:::-;-1:-1:-1;;;;;5536:18:11;;5516:17;5536:18;;;:11;:18;;;;;:34;;5453:57;;-1:-1:-1;5516:17:11;;5453:57;;5536:34;;;;;;;;;;;;;;5516:54;;5610:9;5577:11;:18;5589:5;-1:-1:-1;;;;;5577:18:11;-1:-1:-1;;;;;5577:18:11;;;;;;;;;;;;5596:10;5577:30;;;;;;;;;;;;;;;;;;;:42;;;;-1:-1:-1;;;;;5625:18:11;;;;:11;:18;;;;;;:34;;5644:14;;5625:34;;;;;;;;;;;;;;;;;:38;;;;-1:-1:-1;;;;;6024:18:11;;;;:11;:18;;;;;;:27;;;;;-1:-1:-1;;6024:27:11;;;:::i;:::-;-1:-1:-1;6086:1:11;6057:26;;;:16;:26;;;;;;:30;;;6093:27;;;;;;:40;-1:-1:-1;;5282:856:11:o;4777:226::-;4843:31;4860:3;4865:8;4843:16;:31::i;:::-;-1:-1:-1;;;;;4897:16:11;;;4880:14;4897:16;;;:11;:16;;;;;;;;:23;;39:1:-1;23:18;;45:23;;4926:31:11;;;;;;;;;;;4963:26;;;:16;:26;;;;;:35;4777:226::o;6803:593::-;6867:29;6879:6;6887:8;6867:11;:29::i;:::-;7063:18;7084:24;;;:14;:24;;;;;;7139:9;:16;7084:24;;7063:18;7139:23;;7160:1;7139:23;:20;:23;:::i;:::-;7114:48;;7168:17;7188:9;7198:14;7188:25;;;;;;;;;;;;;;;;7168:45;;7244:9;7220;7230:10;7220:21;;;;;;;;;;;;;;;:33;;;;7287:1;7259:9;7269:14;7259:25;;;;;;;;;;;;;;;;;:29;7295:9;:18;;;;;-1:-1:-1;;7295:18:11;;;:::i;:::-;-1:-1:-1;7346:1:11;7319:24;;;:14;:24;;;;;;:28;;;7353:25;;;;;;:38;-1:-1:-1;;6803:593:11:o;12251:342:7:-;12397:4;12416:16;:3;-1:-1:-1;;;;;12416:14:7;;:16::i;:::-;12411:49;;-1:-1:-1;12449:4:7;12442:11;;12411:49;12481:67;;-1:-1:-1;;;12481:67:7;;-1:-1:-1;;;;;12481:67:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12465:13;;12481:36;;;;;;12525:5;;12532:8;;12542:5;;12481:67;;;;;;;;;;12465:13;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;12481:67:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12481:67:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12481:67:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12481:67:7;-1:-1:-1;;;;;;12562:25:7;-1:-1:-1;;;12562:25:7;;-1:-1:-1;;12251:342:7;;;;;;:::o;203:723:15:-;259:13;476:10;472:51;;-1:-1:-1;502:10:15;;;;;;;;;;;;-1:-1:-1;;;502:10:15;;;;;;472:51;547:5;532:12;586:75;593:9;;586:75;;618:8;;648:2;640:10;;;;586:75;;;670:19;702:6;692:17;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;692:17:15;87:34:-1;135:17;;-1:-1;692:17:15;-1:-1:-1;762:5:15;;-1:-1:-1;670:39:15;-1:-1:-1;;;735:10:15;;777:112;784:9;;777:112;;850:2;843:4;:9;838:2;:14;827:27;;809:6;816:7;;;;;;;809:15;;;;;;;;;;;:45;-1:-1:-1;;;;;809:45:15;;;;;;;;-1:-1:-1;876:2:15;868:10;;;;777:112;;;-1:-1:-1;912:6:15;203:723;-1:-1:-1;;;;203:723:15:o;9583:197:7:-;-1:-1:-1;;;;;9652:17:7;;9644:54;;;;;-1:-1:-1;;;9644:54:7;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9644:54:7;;;;;;;;;;;;;;;9704:25;9715:3;9720:8;9704:10;:25::i;:::-;9740:35;;9766:8;;-1:-1:-1;;;;;9740:35:7;;;9757:1;;9740:35;;9757:1;;9740:35;9583:197;;:::o;11491:254::-;11593:5;-1:-1:-1;;;;;11572:26:7;:17;11580:8;11572:7;:17::i;:::-;-1:-1:-1;;;;;11572:26:7;;11564:75;;;;-1:-1:-1;;;11564:75:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11671:23:7;;;;;;:16;:23;;;;;;:30;;11699:1;11671:30;:27;:30;:::i;:::-;-1:-1:-1;;;;;11645:23:7;;;;;;;:16;:23;;;;;;;;:56;;;;11707:20;;;:10;:20;;;;:33;;-1:-1:-1;;;;;;11707:33:7;;;11491:254::o;491:110:14:-;549:7;576:1;571;:6;;564:14;;;;-1:-1:-1;591:5:14;;;491:110::o;10984:228:7:-;11090:1;11058:20;;;:10;:20;;;;;;-1:-1:-1;;;;;11058:20:7;:34;11050:67;;;;;-1:-1:-1;;;11050:67:7;;;;;;;;;;;;-1:-1:-1;;;11050:67:7;;;;;;;;;;;;;;;11123:20;;;;:10;:20;;;;;;;;:26;;-1:-1:-1;;;;;;11123:26:7;-1:-1:-1;;;;;11123:26:7;;;;;;;;11179:21;;:16;:21;;;;;;;:28;;:25;:28::i;:::-;-1:-1:-1;;;;;11155:21:7;;;;;;;:16;:21;;;;;:52;;;;-1:-1:-1;10984:228:7:o;9966:188::-;10030:31;10044:6;10052:8;10030:13;:31::i;:::-;10067:33;10083:6;10091:8;10067:15;:33::i;:::-;10111:38;;10140:8;;10136:1;;-1:-1:-1;;;;;10111:38:7;;;;;10136:1;;10111:38;9966:188;;:::o;436:592:0:-;496:4;943:20;;792:66;980:23;;;;;;:42;;-1:-1:-1;;1007:15:0;;;972:51;-1:-1:-1;;436:592:0:o;604:137:14:-;662:7;689:5;;;707:6;;;;;;:14;;;720:1;717;:4;;707:14;700:22;;;;735:1;604:137;-1:-1:-1;;;604:137:14:o;303:1940:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;303:1940:1;;;-1:-1:-1;303:1940:1;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://2629ada9d4e32422862f1866b3fbdf659a683171356fa694c87c1a1a775f4bd8
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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