contract DozerDollV2 is ERC721Full, ERC721Mintable, ERC721MetadataMintable, ERC721Burnable, Ownable {
  using SafeMath for uint256;

  event DollSell(address _to, uint256 tokenId);

  constructor (
    string memory _name,
    string memory _symbol,
    string memory _baseURI
  )
    ERC721Mintable()
    ERC721Full(_name, _symbol) public {
    _setBaseURI(_baseURI);
  }


  function mintUniqueTokenTo (
    address _to,
    uint256 _tokenId
  ) public onlyOwner {
      _mint(_to, _tokenId);
      _setTokenURI(_tokenId, uint2str(_tokenId));
  }


  function mintMulti (
    address[] memory _to,
    uint256[] memory _tokenId
  ) public onlyOwner{
    for (uint256 i = 0 ; i < _tokenId.length; i++) {
      mintUniqueTokenTo(_to[i], _tokenId[i]);
    }
  }


  function dollSell (
    uint256 _tokenId
  ) public {
    burn(_tokenId);

    emit DollSell(msg.sender, _tokenId);
  }

  function dollSellMulti (
    uint256[] memory _tokenId
  ) public {
    for (uint256 i = 0 ; i < _tokenId.length; i++) {
      dollSell(_tokenId[i]);
    }
  }


  // erc-721 transfer
  function transfer (
    address _to,
    uint256 _tokenId
  ) public {
    safeTransferFrom(msg.sender, _to, _tokenId);
  }

  // erc-721 transferAll
  function transferAll (
    address _to,
    uint256[] memory _tokenId
  ) public {
    for (uint i = 0; i < _tokenId.length; i++) {
      safeTransferFrom(msg.sender, _to, _tokenId[i]);
    }
  }


  function setBaseURI (
    string memory _baseURI
  ) public onlyOwner {
    _setBaseURI(_baseURI);
  }

  function uint2str (
    uint _i
  ) internal pure returns (string memory _uintAsString) {
    if (_i == 0) {
        return "0";
    }
    uint j = _i;
    uint len;
    while (j != 0) {
        len++;
        j /= 10;
    }
    bytes memory bstr = new bytes(len);
    uint k = len - 1;
    while (_i != 0) {
        bstr[k--] = byte(uint8(48 + _i % 10));
        _i /= 10;
    }
    return string(bstr);
  }
}
function transfer (
  address _to,
  uint256 _tokenId
) public {
  safeTransferFrom(msg.sender, _to, _tokenId);
}

// erc-721 transfer