ETH Price: $3,418.89 (-0.63%)
Gas: 3 Gwei

Token

BFH:Sphere (BFHS)
 

Overview

Max Total Supply

6,294 BFHS

Holders

763

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
cybourgeoisie.eth
Balance
1 BFHS
0x9eE5E3Ff06425CF972E77c195F70Ecb18aC23d7f
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Extremely successful mobile game BRAVE FRONTIER turns into Blockchian Game

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BFHSphere

Compiler Version
v0.5.12+commit.7709ece9

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-01-21
*/

pragma solidity 0.5.12;

// Copyright (c) 2018-2020 double jump.tokyo inc.

interface IApprovalProxy {
  function setApprovalForAll(address _owner, address _spender, bool _approved) external;
  function isApprovedForAll(address _owner, address _spender, bool _original) external view returns (bool);
}
library Address {

    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    function toPayable(address account) internal pure returns (address payable) {
        return address(uint160(account));
    }

    function toHex(address account) internal pure returns (string memory) {
        bytes32 value = bytes32(uint256(account));
        bytes memory alphabet = "0123456789abcdef";

        bytes memory str = new bytes(42);
        str[0] = '0';
        str[1] = 'x';
        for (uint i = 0; i < 20; i++) {
            str[2+i*2] = alphabet[uint(uint8(value[i + 12] >> 4))];
            str[3+i*2] = alphabet[uint(uint8(value[i + 12] & 0x0f))];
        }
        return string(str);
    }
}
library Roles {
    struct Role {
        mapping (address => bool) bearer;
    }

    function add(Role storage role, address account) internal {
        require(!has(role, account), "role already has the account");
        role.bearer[account] = true;
    }

    function remove(Role storage role, address account) internal {
        require(has(role, account), "role dosen't have the account");
        role.bearer[account] = false;
    }

    function has(Role storage role, address account) internal view returns (bool) {
        return role.bearer[account];
    }
}

library Uint256 {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(a >= b, "subtraction overflow");
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0, "division by 0");
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0, "modulo by 0");
        return a % b;
    }

    function toString(uint256 a) internal pure returns (string memory) {
        bytes32 retBytes32;
        uint256 len = 0;
        if (a == 0) {
            retBytes32 = "0";
            len++;
        } else {
            uint256 value = a;
            while (value > 0) {
                retBytes32 = bytes32(uint256(retBytes32) / (2 ** 8));
                retBytes32 |= bytes32(((value % 10) + 48) * 2 ** (8 * 31));
                value /= 10;
                len++;
            }
        }

        bytes memory ret = new bytes(len);
        uint256 i;

        for (i = 0; i < len; i++) {
            ret[i] = retBytes32[i];
        }
        return string(ret);
    }
}

interface IERC721TokenReceiver {
    /// @notice Handle the receipt of an NFT
    /// @dev The ERC721 smart contract calls this function on the recipient
    ///  after a `transfer`. This function MAY throw to revert and reject the
    ///  transfer. Return of other than the magic value MUST result in the
    ///  transaction being reverted.
    ///  Note: the contract address is always the message sender.
    /// @param _operator The address which called `safeTransferFrom` function
    /// @param _from The address which previously owned the token
    /// @param _tokenId The NFT identifier which is being transferred
    /// @param _data Additional data with no specified format
    /// @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
    ///  unless throwing
    function onERC721Received(
        address _operator,
        address _from,
        uint256 _tokenId,
        bytes calldata _data
    )
        external
        returns(bytes4);
}

interface IERC721Metadata /* is ERC721 */ {
    /// @notice A descriptive name for a collection of NFTs in this contract
    function name() external view returns (string memory _name);

    /// @notice An abbreviated name for NFTs in this contract
    function symbol() external view returns (string memory _symbol);

    /// @notice A distinct Uniform Resource Identifier (URI) for a given asset.
    /// @dev Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC
    ///  3986. The URI may point to a JSON file that conforms to the "ERC721
    ///  Metadata JSON Schema".
    function tokenURI(uint256 _tokenId) external view returns (string memory);
}

interface IERC165 {
    function supportsInterface(bytes4 interfaceID) external view returns (bool);
}

/// @title ERC-165 Standard Interface Detection
/// @dev See https://eips.ethereum.org/EIPS/eip-165
contract ERC165 is IERC165 {
    bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;
    mapping(bytes4 => bool) private _supportedInterfaces;

    constructor () internal {
        _registerInterface(_INTERFACE_ID_ERC165);
    }

    function supportsInterface(bytes4 interfaceId) external view returns (bool) {
        return _supportedInterfaces[interfaceId];
    }

    function _registerInterface(bytes4 interfaceId) internal {
        require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
        _supportedInterfaces[interfaceId] = true;
    }
}

interface IERC721 /* 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) external view returns (uint256);
    function ownerOf(uint256 _tokenId) external view returns (address);
    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes calldata data) external payable;
    function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;
    function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
    function approve(address _approved, uint256 _tokenId) external payable;
    function setApprovalForAll(address _operator, bool _approved) external;
    function getApproved(uint256 _tokenId) external view returns (address);
    function isApprovedForAll(address _owner, address _operator) external view returns (bool);
}

library Uint32 {

    function add(uint32 a, uint32 b) internal pure returns (uint32) {
        uint32 c = a + b;
        require(c >= a, "addition overflow");
        return c;
    }

    function sub(uint32 a, uint32 b) internal pure returns (uint32) {
        require(a >= b, "subtraction overflow");
        return a - b;
    }

    function mul(uint32 a, uint32 b) internal pure returns (uint32) {
        if (a == 0) {
            return 0;
        }
        uint32 c = a * b;
        require(c / a == b, "multiplication overflow");
        return c;
    }

    function div(uint32 a, uint32 b) internal pure returns (uint32) {
        require(b != 0, "division by 0");
        return a / b;
    }

    function mod(uint32 a, uint32 b) internal pure returns (uint32) {
        require(b != 0, "modulo by 0");
        return a % b;
    }

}

library String {

    function compare(string memory _a, string memory _b) public pure returns (bool) {
        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));
    }

    function cut(string memory _s, uint256 _from, uint256 _range) public pure returns (string memory) {
        bytes memory s = bytes(_s);
        require(s.length >= _from + _range, "_s length must be longer than _from + _range");
        bytes memory ret = new bytes(_range);

        for (uint256 i = 0; i < _range; i++) {
            ret[i] = s[_from+i];
        }
        return string(ret);
    }

    function concat(string memory _a, string memory _b) internal pure returns (string memory) {
        return string(abi.encodePacked(_a, _b));
    }
}

contract ERC721 is IERC721, ERC165 {
    using Uint256 for uint256;
    using Address for address;

    bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;
    bytes4 private constant _InterfaceId_ERC721 = 0x80ac58cd;

    mapping (uint256 => address) private _tokenOwner;
    mapping (address => uint256) private _balance;
    mapping (uint256 => address) private _tokenApproved;
    mapping (address => mapping (address => bool)) private _operatorApprovals;

    constructor () public {
        _registerInterface(_InterfaceId_ERC721);
    }

    function balanceOf(address _owner) public view returns (uint256) {
        return _balance[_owner];
    }

    function ownerOf(uint256 _tokenId) public view returns (address) {
        require(_exist(_tokenId),
                "`_tokenId` is not a valid NFT.");
        return _tokenOwner[_tokenId];
    }

    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory _data) public payable {
        require(_data.length == 0, "data is not implemented");
        safeTransferFrom(_from, _to, _tokenId);
    }

    function safeTransferFrom(address _from, address _to, uint256 _tokenId) public payable {
        require(_checkOnERC721Received(_from, _to, _tokenId, ""),
                "`_to` is a smart contract and onERC721Received is invalid");
        transferFrom(_from, _to, _tokenId);
    }

    function transferFrom(address _from, address _to, uint256 _tokenId) public payable {
        require(_transferable(msg.sender, _tokenId),
                "Unless `msg.sender` is the current owner, an authorized operator, or the approved address for this NFT."); // solhint-disable-line
        require(ownerOf(_tokenId) == _from,
                "`_from` is not the current owner.");
        require(_to != address(0),
                "`_to` is the zero address.");
        require(_exist(_tokenId),
                "`_tokenId` is not a valid NFT.");
        _transfer(_from, _to, _tokenId);
    }

    function approve(address _approved, uint256 _tokenId) public payable {
        address owner = ownerOf(_tokenId);
        require(msg.sender == owner || isApprovedForAll(owner, msg.sender),
                "Unless `msg.sender` is the current NFT owner, or an authorized operator of the current owner.");

        _tokenApproved[_tokenId] = _approved;
        emit Approval(msg.sender, _approved, _tokenId);
    }

    function setApprovalForAll(address _operator, bool _approved) public {
        _setApprovalForAll(msg.sender, _operator, _approved);
    }

    function _setApprovalForAll(address _owner, address _operator, bool _approved) internal {
        _operatorApprovals[_owner][_operator] = _approved;
        emit ApprovalForAll(_owner, _operator, _approved);
    }

    function getApproved(uint256 _tokenId) public view returns (address) {
        require(_exist(_tokenId),
                "`_tokenId` is not a valid NFT.");
        return _tokenApproved[_tokenId];
    }

    function isApprovedForAll(address _owner, address _operator) public view returns (bool) {
        return _isApprovedForAll(_owner, _operator);
    }
    
    function _isApprovedForAll(address _owner, address _operator) internal view returns (bool) {
        return _operatorApprovals[_owner][_operator];
    }

    function _transferable(address _spender, uint256 _tokenId) internal view returns (bool){
        address owner = ownerOf(_tokenId);
        return (_spender == owner || getApproved(_tokenId) == _spender || isApprovedForAll(owner, _spender));
    }

    function _transfer(address _from, address _to, uint256 _tokenId) internal {
        _clearApproval(_tokenId);
        _tokenOwner[_tokenId] = _to;
        _balance[_from] = _balance[_from].sub(1);
        _balance[_to] = _balance[_to].add(1);
        emit Transfer(_from, _to, _tokenId);
    }
  
    function _mint(address _to, uint256 _tokenId) internal {
        require(!_exist(_tokenId), "mint token already exists");
        _tokenOwner[_tokenId] = _to;
        _balance[_to] = _balance[_to].add(1);
        emit Transfer(address(0), _to, _tokenId);
    }
  
    function _burn(uint256 _tokenId) internal {
        require(_exist(_tokenId), "burn token does not already exists");
        address owner = ownerOf(_tokenId);
        _clearApproval(_tokenId);
        _tokenOwner[_tokenId] = address(0);
        _balance[owner] = _balance[owner].sub(1);
        emit Transfer(owner, address(0), _tokenId);
    }

    function _exist(uint256 _tokenId) internal view returns (bool) {
        address owner = _tokenOwner[_tokenId];
        return owner != address(0);
    }

    function _checkOnERC721Received(
        address _from,
        address _to,
        uint256 _tokenId,
        bytes memory _data
    ) 
        internal
        returns (bool) 
    {
        if (!_to.isContract()) {
            return true;
        }
        bytes4 retval = IERC721TokenReceiver(_to).onERC721Received(msg.sender, _from, _tokenId, _data);
        return (retval == _ERC721_RECEIVED);
    }

    function _clearApproval(uint256 tokenId) internal {
        if (_tokenApproved[tokenId] != address(0)) {
            _tokenApproved[tokenId] = address(0);
        }
    }
}

interface IERC173 /* is ERC165 */ {
    /// @dev This emits when ownership of a contract changes.
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /// @notice Get the address of the owner
    /// @return The address of the owner.
    function owner() external view returns (address);

    /// @notice Set the address of the new owner of the contract
    /// @param _newOwner The address of the new owner of the contract
    function transferOwnership(address _newOwner) external;
}

contract ERC173 is IERC173, ERC165  {
    address private _owner;

    constructor() public {
        _registerInterface(0x7f5828d0);
        _transferOwnership(msg.sender);
    }

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

    function owner() public view returns (address) {
        return _owner;
    }

    function transferOwnership(address _newOwner) public onlyOwner() {
        _transferOwnership(_newOwner);
    }

    function _transferOwnership(address _newOwner) internal {
        address previousOwner = owner();
	_owner = _newOwner;
        emit OwnershipTransferred(previousOwner, _newOwner);
    }
}

contract Operatable is ERC173 {
    using Roles for Roles.Role;

    event OperatorAdded(address indexed account);
    event OperatorRemoved(address indexed account);

    event Paused(address account);
    event Unpaused(address account);

    bool private _paused;
    Roles.Role private operators;

    constructor() public {
        operators.add(msg.sender);
        _paused = false;
    }

    modifier onlyOperator() {
        require(isOperator(msg.sender), "Must be operator");
        _;
    }

    modifier whenNotPaused() {
        require(!_paused, "Pausable: paused");
        _;
    }

    modifier whenPaused() {
        require(_paused, "Pausable: not paused");
        _;
    }

    function transferOwnership(address _newOwner) public onlyOperator() {
        _transferOwnership(_newOwner);
    }

    function isOperator(address account) public view returns (bool) {
        return operators.has(account);
    }

    function addOperator(address account) public onlyOperator() {
        operators.add(account);
        emit OperatorAdded(account);
    }

    function removeOperator(address account) public onlyOperator() {
        operators.remove(account);
        emit OperatorRemoved(account);
    }

    function paused() public view returns (bool) {
        return _paused;
    }

    function pause() public onlyOperator() whenNotPaused() {
        _paused = true;
        emit Paused(msg.sender);
    }

    function unpause() public onlyOperator() whenPaused() {
        _paused = false;
        emit Unpaused(msg.sender);
    }

    function withdrawEther() public onlyOperator() {
        msg.sender.transfer(address(this).balance);
    }

}

interface IERC721Mintable {
    event MinterAdded(address indexed account);
    event MinterRemoved(address indexed account);
    function exist(uint256 _tokenId) external view returns (bool);
    function mint(address _to, uint256 _tokenId) external;
    function isMinter(address account) external view returns (bool);
    function addMinter(address account) external;
    function removeMinter(address account) external;
}

contract ERC721Mintable is ERC721, IERC721Mintable, Operatable {
    using Roles for Roles.Role;
    Roles.Role private minters;

    constructor() public {
        addMinter(msg.sender);
    }

    modifier onlyMinter() {
        require(isMinter(msg.sender), "Must be minter");
        _;
    }

    function isMinter(address account) public view returns (bool) {
        return minters.has(account);
    }

    function addMinter(address account) public onlyOperator() {
        minters.add(account);
        emit MinterAdded(account);
    }

    function removeMinter(address account) public onlyOperator() {
        minters.remove(account);
        emit MinterRemoved(account);
    }
    
    function exist(uint256 tokenId) public view returns (bool) {
        return _exist(tokenId);
    }

    function mint(address to, uint256 tokenId) public onlyMinter() {
        _mint(to, tokenId);
    }
}
contract ERC721Metadata is IERC721Metadata, ERC721, Operatable {
    using Uint256 for uint256;
    using String for string;

    event UpdateTokenURIPrefix(
        string tokenUriPrefix
    );

    // Metadata
    string private __name;
    string private __symbol;
    string private __tokenUriPrefix;

    constructor(string memory _name,
                string memory _symbol,
                string memory _tokenUriPrefix) public {
        // ERC721Metadata
        __name = _name;
        __symbol = _symbol;
        setTokenURIPrefix(_tokenUriPrefix);
    }

    function setTokenURIPrefix(string memory _tokenUriPrefix) public onlyOperator() {
        __tokenUriPrefix = _tokenUriPrefix;
        emit UpdateTokenURIPrefix(_tokenUriPrefix);
    }

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

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

    function tokenURI(uint256 _tokenId) public view returns (string memory) {
        return __tokenUriPrefix.concat(_tokenId.toString());
    }
}

contract ERC721TokenPausable is ERC721,Operatable {
    using Roles for Roles.Role;
    Roles.Role private tokenPauser;

    event TokenPauserAdded(address indexed account);
    event TokenPauserRemoved(address indexed account);

    event TokenPaused(uint256 indexed tokenId);
    event TokenUnpaused(uint256 indexed tokenId);

    mapping (uint256 => bool) private _tokenPaused;

    constructor() public {
        tokenPauser.add(msg.sender);
    }

    modifier onlyTokenPauser() {
        require(isTokenPauser(msg.sender), "Only token pauser can call this method");
        _;
    }

    modifier whenNotTokenPaused(uint256 _tokenId) {
        require(!isTokenPaused(_tokenId), "TokenPausable: paused");
        _;
    }

    modifier whenTokenPaused(uint256 _tokenId) {
        require(isTokenPaused(_tokenId), "TokenPausable: not paused");
        _;
    }

    function pauseToken(uint256 _tokenId) public onlyTokenPauser() {
        require(!isTokenPaused(_tokenId), "Token is already paused");
        _tokenPaused[_tokenId] = true;
        emit TokenPaused(_tokenId);
    }

    function unpauseToken(uint256 _tokenId) public onlyTokenPauser() {
        require(isTokenPaused(_tokenId), "Token is not paused");
        _tokenPaused[_tokenId] = false;
        emit TokenUnpaused(_tokenId);
    }

    function isTokenPaused(uint256 _tokenId) public view returns (bool) {
        return _tokenPaused[_tokenId];
    }

    function isTokenPauser(address account) public view returns (bool) {
        return tokenPauser.has(account);
    }

    function addTokenPauser(address account) public onlyOperator() {
        tokenPauser.add(account);
        emit TokenPauserAdded(account);
    }

    function removeTokenPauser(address account) public onlyOperator() {
        tokenPauser.remove(account);
        emit TokenPauserRemoved(account);
    }

    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory _data) public payable
                            whenNotPaused() whenNotTokenPaused(_tokenId) {
        super.safeTransferFrom(_from, _to, _tokenId, _data);
    }

    function safeTransferFrom(address _from, address _to, uint256 _tokenId) public payable
                            whenNotPaused() whenNotTokenPaused(_tokenId) {
        super.safeTransferFrom(_from, _to, _tokenId);
    }

    function transferFrom(address _from, address _to, uint256 _tokenId) public payable
                            whenNotPaused() whenNotTokenPaused(_tokenId) {
        super.transferFrom(_from, _to, _tokenId);
    }
}

interface IERC721CappedSupply /* IERC721Mintable, IERC721 */ {
    event SetUnitCap(uint32 _assetType, uint32 _unitCap);
    event SetTypeCap(uint256 _typeCap);
    function totalSupply() external view returns (uint256);
    function getTypeOffset() external view returns (uint256);
    function getTypeCap() external view returns (uint256);
    function setTypeCap(uint32 _newTypeCap) external;
    function getTypeCount() external view returns (uint256);
    function existingType(uint32 _assetType) external view returns (bool);
    function getUnitCap(uint32 _assetType) external view returns (uint32);
    function setUnitCap(uint32 _assetType, uint32 _newUnitCap) external;
    function mint(address _to, uint256 _tokenId) external;
}

/// @title ERC-721 Capped Supply
/// @author double jump.tokyo inc.
/// @dev see https://medium.com/@makzent/ca1008866871
contract ERC721CappedSupply is IERC721CappedSupply, ERC721Mintable {
    using Uint256 for uint256;
    using Uint32 for uint32;

    uint32 private assetTypeOffset;
    mapping(uint32 => uint32) private unitCap;
    mapping(uint32 => uint32) private unitCount;
    mapping(uint32 => bool) private unitCapIsSet;
    uint256 private assetTypeCap = 2**256-1;
    uint256 private assetTypeCount = 0;
    uint256 private totalCount = 0;

    constructor(uint32 _assetTypeOffset) public {
        setTypeOffset(_assetTypeOffset);
    }

    function isValidOffset(uint32 _offset) private pure returns (bool) {
        for (uint32 i = _offset; i > 0; i = i.div(10)) {
            if (i == 10) {
                return true;
            }
            if (i.mod(10) != 0) {
                return false;
            }
        }
        return false;
    }

    function totalSupply() public view returns (uint256) {
        return totalCount;
    }

    function setTypeOffset(uint32 _assetTypeOffset) private {
        require(isValidOffset(_assetTypeOffset),  "Offset is invalid");
        assetTypeCap = assetTypeCap / _assetTypeOffset;
        assetTypeOffset = _assetTypeOffset;
    }

    function getTypeOffset() public view returns (uint256) {
        return assetTypeOffset;
    }

    function setTypeCap(uint32 _newTypeCap) public onlyMinter() {
        require(_newTypeCap < assetTypeCap, "New type cap cannot be less than existing type cap");
        require(_newTypeCap >= assetTypeCount, "New type cap must be more than current type count");
        assetTypeCap = _newTypeCap;
        emit SetTypeCap(_newTypeCap);
    }

    function getTypeCap() public view returns (uint256) {
        return assetTypeCap;
    }

    function getTypeCount() public view returns (uint256) {
        return assetTypeCount;
    }

    function existingType(uint32 _assetType) public view returns (bool) {
        return unitCapIsSet[_assetType];
    }

    function setUnitCap(uint32 _assetType, uint32 _newUnitCap) public onlyMinter() {
        require(_assetType != 0, "Asset Type must not be 0");
        require(_newUnitCap < assetTypeOffset, "New unit cap must be less than asset type offset");

        if (!existingType(_assetType)) {
            unitCapIsSet[_assetType] = true;
            assetTypeCount = assetTypeCount.add(1);
            require(assetTypeCount <= assetTypeCap, "Asset type cap is exceeded");
        } else {
            require(_newUnitCap < getUnitCap(_assetType), "New unit cap must be less than previous unit cap");
            require(_newUnitCap >= getUnitCount(_assetType), "New unit cap must be more than current unit count");
        }

        unitCap[_assetType] = _newUnitCap;
        emit SetUnitCap(_assetType, _newUnitCap);
    }

    function getUnitCap(uint32 _assetType) public view returns (uint32) {
        require(existingType(_assetType), "Asset type does not exist");
        return unitCap[_assetType];
    }

    function getUnitCount(uint32 _assetType) public view returns (uint32) {
        return unitCount[_assetType];
    }

    function mint(address _to, uint256 _tokenId) public onlyMinter() {
        require(_tokenId.mod(assetTypeOffset) != 0, "Index must not be 0");
        uint32 assetType = uint32(_tokenId.div(assetTypeOffset));
        unitCount[assetType] = unitCount[assetType].add(1);
        totalCount = totalCount.add(1);
        require(unitCount[assetType] <= getUnitCap(assetType), "Asset unit cap is exceed");
        super.mint(_to, _tokenId);
    }
}

contract BFHSphere is
                    ERC721TokenPausable,
                    ERC721CappedSupply(10000),
                    ERC721Metadata("BFH:Sphere", "BFHS", "https://bravefrontierheroes.com/metadata/spheres/")
                    {

    event UpdateApprovalProxy(address _newProxyContract);
    IApprovalProxy public approvalProxy;
    constructor(address _approvalProxy) public {
        setApprovalProxy(_approvalProxy);
    }

    function setApprovalProxy(address _new) public onlyOperator() {
        approvalProxy = IApprovalProxy(_new);
        emit UpdateApprovalProxy(_new);
    }

    function setApprovalForAll(address _spender, bool _approved) public {
        if (address(approvalProxy) != address(0x0) && _spender.isContract()) {
            approvalProxy.setApprovalForAll(msg.sender, _spender, _approved);
        }
        super.setApprovalForAll(_spender, _approved);
    }

    function isApprovedForAll(address _owner, address _spender) public view returns (bool) {
        bool original = super.isApprovedForAll(_owner, _spender);
        if (address(approvalProxy) != address(0x0)) {
            return approvalProxy.isApprovedForAll(_owner, _spender, original);
        }
        return original;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_approvalProxy","type":"address"}],"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":true,"internalType":"address","name":"account","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"MinterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"OperatorAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"OperatorRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_typeCap","type":"uint256"}],"name":"SetTypeCap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"_assetType","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"_unitCap","type":"uint32"}],"name":"SetUnitCap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"TokenPaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"TokenPauserAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"TokenPauserRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"TokenUnpaused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_newProxyContract","type":"address"}],"name":"UpdateApprovalProxy","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"tokenUriPrefix","type":"string"}],"name":"UpdateTokenURIPrefix","type":"event"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addTokenPauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"approvalProxy","outputs":[{"internalType":"contract IApprovalProxy","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_approved","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":true,"stateMutability":"payable","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":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"exist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint32","name":"_assetType","type":"uint32"}],"name":"existingType","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","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":[],"name":"getTypeCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTypeCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTypeOffset","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint32","name":"_assetType","type":"uint32"}],"name":"getUnitCap","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint32","name":"_assetType","type":"uint32"}],"name":"getUnitCount","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"isTokenPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isTokenPauser","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"mint","outputs":[],"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":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"pauseToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeTokenPauser","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":true,"stateMutability":"payable","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":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new","type":"address"}],"name":"setApprovalProxy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"_tokenUriPrefix","type":"string"}],"name":"setTokenURIPrefix","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint32","name":"_newTypeCap","type":"uint32"}],"name":"setTypeCap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint32","name":"_assetType","type":"uint32"},{"internalType":"uint32","name":"_newUnitCap","type":"uint32"}],"name":"setUnitCap","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":"_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":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"unpauseToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

6080604052600019600e556000600f5560006010553480156200002157600080fd5b5060405162003cd938038062003cd9833981810160405260208110156200004757600080fd5b5051604080518082018252600a81527f4246483a5370686572650000000000000000000000000000000000000000000060208281019190915282518084018452600481527f424648530000000000000000000000000000000000000000000000000000000081830152835160608101909452603180855292939092909162003ca890830139612710620001037f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b036200024416565b620001377f80ac58cd000000000000000000000000000000000000000000000000000000006001600160e01b036200024416565b6200016b7f7f5828d0000000000000000000000000000000000000000000000000000000006001600160e01b036200024416565b6200017f336001600160e01b036200031316565b6200019a3360066200037c60201b620027131790919060201c565b6005805460ff60a01b19169055620001c06007336200037c602090811b6200271317901c565b620001d4336001600160e01b036200042316565b620001e8816001600160e01b03620004f516565b508251620001fe906011906020860190620009c0565b50815162000214906012906020850190620009c0565b5062000229816001600160e01b03620005a716565b5050506200023d81620006dc60201b60201c565b5062000a62565b7fffffffff000000000000000000000000000000000000000000000000000000008082161415620002d657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b7fffffffff00000000000000000000000000000000000000000000000000000000166000908152602081905260409020805460ff19166001179055565b6000620003286001600160e01b03620007b016565b600580546001600160a01b0319166001600160a01b0385811691821790925560405192935091908316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200039182826001600160e01b03620007c016565b15620003fe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f726f6c6520616c72656164792068617320746865206163636f756e7400000000604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b62000437336001600160e01b03620007df16565b620004a357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4d757374206265206f70657261746f7200000000000000000000000000000000604482015290519081900360640190fd5b620004be8160096200037c60201b620027131790919060201c565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b62000509816001600160e01b036200080416565b6200057557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4f666673657420697320696e76616c6964000000000000000000000000000000604482015290519081900360640190fd5b8063ffffffff16600e54816200058757fe5b04600e55600a805463ffffffff191663ffffffff92909216919091179055565b620005bb336001600160e01b03620007df16565b6200062757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4d757374206265206f70657261746f7200000000000000000000000000000000604482015290519081900360640190fd5b80516200063c906013906020840190620009c0565b507fd5e477fc51908e22673125c3b4666c4a72f49feb8665fd3875e224a58ca9659a816040518080602001828103825283818151815260200191508051906020019080838360005b838110156200069e57818101518382015260200162000684565b50505050905090810190601f168015620006cc5780820380516001836020036101000a031916815260200191505b509250505060405180910390a150565b620006f0336001600160e01b03620007df16565b6200075c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4d757374206265206f70657261746f7200000000000000000000000000000000604482015290519081900360640190fd5b601480546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f12be4820d03362d1f48434d870b2fc1549b3a3d16d891eeaac7c3073f3ded8b79181900360200190a150565b6005546001600160a01b03165b90565b6001600160a01b03166000908152602091909152604090205460ff1690565b6000620007fc826006620007c060201b620026f41790919060201c565b90505b919050565b6000815b63ffffffff81161562000891578063ffffffff16600a141562000830576001915050620007ff565b62000851600a8263ffffffff166200089a60201b62002f0d1790919060201c565b63ffffffff161562000868576000915050620007ff565b62000889600a8263ffffffff166200092d60201b62002f6a1790919060201c565b905062000808565b50600092915050565b600063ffffffff82166200090f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6d6f64756c6f2062792030000000000000000000000000000000000000000000604482015290519081900360640190fd5b8163ffffffff168363ffffffff16816200092557fe5b069392505050565b600063ffffffff8216620009a257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6469766973696f6e206279203000000000000000000000000000000000000000604482015290519081900360640190fd5b8163ffffffff168363ffffffff1681620009b857fe5b049392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000a0357805160ff191683800117855562000a33565b8280016001018555821562000a33579182015b8281111562000a3357825182559160200191906001019062000a16565b5062000a4192915062000a45565b5090565b620007bd91905b8082111562000a41576000815560010162000a4c565b6132368062000a726000396000f3fe6080604052600436106102725760003560e01c8063776ab6341161014f578063ac8a584a116100c1578063ca1728fd1161007a578063ca1728fd14610a8e578063d644736814610ac6578063e985e9c514610af0578063ed841bf114610b2b578063f2fde38b14610b5e578063fbd395f814610b9157610272565b8063ac8a584a146108f3578063b88d4fde14610926578063b97d7895146109ec578063c000582714610a1c578063c2508c4614610a31578063c87b56dd14610a6457610272565b8063983b2d5611610113578063983b2d56146107395780639870d7fe1461076c57806399e0dd7c1461079f5780639bb5c9c314610852578063a22cb46514610885578063aa271e1a146108c057610272565b8063776ab634146106bb5780637d02b1a3146106e55780638456cb59146106fa5780638da5cb5b1461070f57806395d89b411461072457610272565b80634dd09f33116101e85780636352211e116101ac5780636352211e146105b35780636d70f7ae146105dd57806370a08231146106105780637362377b14610643578063739f66871461065857806374db07d81461068857610272565b80634dd09f33146104e65780634ebbc92a146104fb578063532efe60146105255780635c975abb1461056e57806362977e2c1461058357610272565b806323b872dd1161023a57806323b872dd146103e45780632cff5b391461041a5780633092afd51461042f5780633f4ba83a1461046257806340c10f191461047757806342842e0e146104b057610272565b806301ffc9a71461027757806306fdde03146102bf578063081812fc14610349578063095ea7b31461038f57806318160ddd146103bd575b600080fd5b34801561028357600080fd5b506102ab6004803603602081101561029a57600080fd5b50356001600160e01b031916610bbb565b604080519115158252519081900360200190f35b3480156102cb57600080fd5b506102d4610bda565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561030e5781810151838201526020016102f6565b50505050905090810190601f16801561033b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561035557600080fd5b506103736004803603602081101561036c57600080fd5b5035610c71565b604080516001600160a01b039092168252519081900360200190f35b6103bb600480360360408110156103a557600080fd5b506001600160a01b038135169060200135610ce9565b005b3480156103c957600080fd5b506103d2610da7565b60408051918252519081900360200190f35b6103bb600480360360608110156103fa57600080fd5b506001600160a01b03813581169160208101359091169060400135610dad565b34801561042657600080fd5b506103d2610e64565b34801561043b57600080fd5b506103bb6004803603602081101561045257600080fd5b50356001600160a01b0316610e6a565b34801561046e57600080fd5b506103bb610eff565b34801561048357600080fd5b506103bb6004803603604081101561049a57600080fd5b506001600160a01b038135169060200135610fe3565b6103bb600480360360608110156104c657600080fd5b506001600160a01b03813581169160208101359091169060400135611195565b3480156104f257600080fd5b50610373611246565b34801561050757600080fd5b506102ab6004803603602081101561051e57600080fd5b5035611255565b34801561053157600080fd5b506105556004803603602081101561054857600080fd5b503563ffffffff16611266565b6040805163ffffffff9092168252519081900360200190f35b34801561057a57600080fd5b506102ab611281565b34801561058f57600080fd5b506103bb600480360360208110156105a657600080fd5b503563ffffffff16611291565b3480156105bf57600080fd5b50610373600480360360208110156105d657600080fd5b50356113aa565b3480156105e957600080fd5b506102ab6004803603602081101561060057600080fd5b50356001600160a01b0316611422565b34801561061c57600080fd5b506103d26004803603602081101561063357600080fd5b50356001600160a01b0316611435565b34801561064f57600080fd5b506103bb611450565b34801561066457600080fd5b506105556004803603602081101561067b57600080fd5b503563ffffffff166114cd565b34801561069457600080fd5b506103bb600480360360208110156106ab57600080fd5b50356001600160a01b0316611545565b3480156106c757600080fd5b506103bb600480360360208110156106de57600080fd5b50356115da565b3480156106f157600080fd5b506103d26116ae565b34801561070657600080fd5b506103bb6116b4565b34801561071b57600080fd5b5061037361179b565b34801561073057600080fd5b506102d46117aa565b34801561074557600080fd5b506103bb6004803603602081101561075c57600080fd5b50356001600160a01b031661180b565b34801561077857600080fd5b506103bb6004803603602081101561078f57600080fd5b50356001600160a01b03166118a0565b3480156107ab57600080fd5b506103bb600480360360208110156107c257600080fd5b8101906020810181356401000000008111156107dd57600080fd5b8201836020820111156107ef57600080fd5b8035906020019184600183028401116401000000008311171561081157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611935945050505050565b34801561085e57600080fd5b506103bb6004803603602081101561087557600080fd5b50356001600160a01b0316611a32565b34801561089157600080fd5b506103bb600480360360408110156108a857600080fd5b506001600160a01b0381351690602001351515611ad3565b3480156108cc57600080fd5b506102ab600480360360208110156108e357600080fd5b50356001600160a01b0316611b82565b3480156108ff57600080fd5b506103bb6004803603602081101561091657600080fd5b50356001600160a01b0316611b95565b6103bb6004803603608081101561093c57600080fd5b6001600160a01b0382358116926020810135909116916040820135919081019060808101606082013564010000000081111561097757600080fd5b82018360208201111561098957600080fd5b803590602001918460018302840111640100000000831117156109ab57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611c2a945050505050565b3480156109f857600080fd5b506102ab60048036036020811015610a0f57600080fd5b503563ffffffff16611ce3565b348015610a2857600080fd5b506103d2611cfe565b348015610a3d57600080fd5b506103bb60048036036020811015610a5457600080fd5b50356001600160a01b0316611d0a565b348015610a7057600080fd5b506102d460048036036020811015610a8757600080fd5b5035611d9f565b348015610a9a57600080fd5b506103bb60048036036040811015610ab157600080fd5b5063ffffffff81358116916020013516611e46565b348015610ad257600080fd5b506102ab60048036036020811015610ae957600080fd5b50356120e0565b348015610afc57600080fd5b506102ab60048036036040811015610b1357600080fd5b506001600160a01b03813581169160200135166120f5565b348015610b3757600080fd5b506102ab60048036036020811015610b4e57600080fd5b50356001600160a01b03166121af565b348015610b6a57600080fd5b506103bb60048036036020811015610b8157600080fd5b50356001600160a01b03166121c2565b348015610b9d57600080fd5b506103bb60048036036020811015610bb457600080fd5b5035612218565b6001600160e01b03191660009081526020819052604090205460ff1690565b60118054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c665780601f10610c3b57610100808354040283529160200191610c66565b820191906000526020600020905b815481529060010190602001808311610c4957829003601f168201915b505050505090505b90565b6000610c7c826122fa565b610ccd576040805162461bcd60e51b815260206004820152601e60248201527f605f746f6b656e496460206973206e6f7420612076616c6964204e46542e0000604482015290519081900360640190fd5b506000908152600360205260409020546001600160a01b031690565b6000610cf4826113aa565b9050336001600160a01b0382161480610d125750610d1281336120f5565b610d4d5760405162461bcd60e51b815260040180806020018281038252605d8152602001806130fb605d913960600191505060405180910390fd5b60008281526003602052604080822080546001600160a01b0319166001600160a01b0387169081179091559051849233917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a4505050565b60105490565b600554600160a01b900460ff1615610dff576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b80610e09816120e0565b15610e53576040805162461bcd60e51b8152602060048201526015602482015274151bdad95b94185d5cd8589b194e881c185d5cd959605a1b604482015290519081900360640190fd5b610e5e848484612317565b50505050565b600e5490565b610e7333611422565b610eb7576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b610ec860098263ffffffff61247416565b6040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b610f0833611422565b610f4c576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b600554600160a01b900460ff16610fa1576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6005805460ff60a01b191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b610fec33611b82565b61102e576040805162461bcd60e51b815260206004820152600e60248201526d26bab9ba1031329036b4b73a32b960911b604482015290519081900360640190fd5b600a5461104690829063ffffffff908116906124f116565b61108d576040805162461bcd60e51b81526020600482015260136024820152720496e646578206d757374206e6f74206265203606c1b604482015290519081900360640190fd5b600a546000906110a890839063ffffffff9081169061254416565b63ffffffff8082166000908152600c60205260409020549192506110d29181169060019061259916565b63ffffffff8281166000908152600c60205260409020805463ffffffff19169282169290921790915560105461110b916001906125f016565b601055611117816114cd565b63ffffffff8281166000908152600c602052604090205491811691161115611186576040805162461bcd60e51b815260206004820152601860248201527f417373657420756e697420636170206973206578636565640000000000000000604482015290519081900360640190fd5b611190838361263e565b505050565b600554600160a01b900460ff16156111e7576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b806111f1816120e0565b1561123b576040805162461bcd60e51b8152602060048201526015602482015274151bdad95b94185d5cd8589b194e881c185d5cd959605a1b604482015290519081900360640190fd5b610e5e848484612693565b6014546001600160a01b031681565b6000611260826122fa565b92915050565b63ffffffff9081166000908152600c60205260409020541690565b600554600160a01b900460ff1690565b61129a33611b82565b6112dc576040805162461bcd60e51b815260206004820152600e60248201526d26bab9ba1031329036b4b73a32b960911b604482015290519081900360640190fd5b600e548163ffffffff16106113225760405162461bcd60e51b81526004018080602001828103825260328152602001806131796032913960400191505060405180910390fd5b600f548163ffffffff1610156113695760405162461bcd60e51b81526004018080602001828103825260318152602001806131ab6031913960400191505060405180910390fd5b63ffffffff8116600e81905560408051918252517fcffe07c9e7982b6c56cb569d21caedd78c8fbc68a0cbdc4d963c21eae6e8f9109181900360200190a150565b60006113b5826122fa565b611406576040805162461bcd60e51b815260206004820152601e60248201527f605f746f6b656e496460206973206e6f7420612076616c6964204e46542e0000604482015290519081900360640190fd5b506000908152600160205260409020546001600160a01b031690565b600061126060068363ffffffff6126f416565b6001600160a01b031660009081526002602052604090205490565b61145933611422565b61149d576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b6040513390303180156108fc02916000818181858888f193505050501580156114ca573d6000803e3d6000fd5b50565b60006114d882611ce3565b611529576040805162461bcd60e51b815260206004820152601960248201527f4173736574207479706520646f6573206e6f7420657869737400000000000000604482015290519081900360640190fd5b5063ffffffff9081166000908152600b60205260409020541690565b61154e33611422565b611592576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b6115a360078263ffffffff61271316565b6040516001600160a01b038216907fff12d576e2fecf516eb406e6618d5e97bcc8046690863b984069b15ada11d61290600090a250565b6115e3336121af565b61161e5760405162461bcd60e51b81526004018080602001828103825260268152602001806131dc6026913960400191505060405180910390fd5b611627816120e0565b61166e576040805162461bcd60e51b8152602060048201526013602482015272151bdad95b881a5cc81b9bdd081c185d5cd959606a1b604482015290519081900360640190fd5b600081815260086020526040808220805460ff191690555182917f0cfa9cc56bacd896c88effb6a4051b954fcaaf2de7ae98882e39f294ea65184391a250565b600f5490565b6116bd33611422565b611701576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b600554600160a01b900460ff1615611753576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6005805460ff60a01b1916600160a01b1790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a1565b6005546001600160a01b031690565b60128054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c665780601f10610c3b57610100808354040283529160200191610c66565b61181433611422565b611858576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b61186960098263ffffffff61271316565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b6118a933611422565b6118ed576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b6118fe60068263ffffffff61271316565b6040516001600160a01b038216907fac6fa858e9350a46cec16539926e0fde25b7629f84b5a72bffaae4df888ae86d90600090a250565b61193e33611422565b611982576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b8051611995906013906020840190612e75565b507fd5e477fc51908e22673125c3b4666c4a72f49feb8665fd3875e224a58ca9659a816040518080602001828103825283818151815260200191508051906020019080838360005b838110156119f55781810151838201526020016119dd565b50505050905090810190601f168015611a225780820380516001836020036101000a031916815260200191505b509250505060405180910390a150565b611a3b33611422565b611a7f576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b601480546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f12be4820d03362d1f48434d870b2fc1549b3a3d16d891eeaac7c3073f3ded8b79181900360200190a150565b6014546001600160a01b031615801590611afa5750611afa826001600160a01b0316612794565b15611b745760145460408051631b3b02e560e11b81523360048201526001600160a01b03858116602483015284151560448301529151919092169163367605ca91606480830192600092919082900301818387803b158015611b5b57600080fd5b505af1158015611b6f573d6000803e3d6000fd5b505050505b611b7e828261279a565b5050565b600061126060098363ffffffff6126f416565b611b9e33611422565b611be2576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b611bf360068263ffffffff61247416565b6040516001600160a01b038216907f80c0b871b97b595b16a7741c1b06fed0c6f6f558639f18ccbce50724325dc40d90600090a250565b600554600160a01b900460ff1615611c7c576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b81611c86816120e0565b15611cd0576040805162461bcd60e51b8152602060048201526015602482015274151bdad95b94185d5cd8589b194e881c185d5cd959605a1b604482015290519081900360640190fd5b611cdc858585856127a5565b5050505050565b63ffffffff166000908152600d602052604090205460ff1690565b600a5463ffffffff1690565b611d1333611422565b611d57576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b611d6860078263ffffffff61247416565b6040516001600160a01b038216907f2186c7d8e4b2d6a73790355b1a465872175798d2366146e638fc885d54460b8590600090a250565b6060611260611dad83612804565b6013805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015611e335780601f10611e0857610100808354040283529160200191611e33565b820191906000526020600020905b815481529060010190602001808311611e1657829003601f168201915b50505050506128d990919063ffffffff16565b611e4f33611b82565b611e91576040805162461bcd60e51b815260206004820152600e60248201526d26bab9ba1031329036b4b73a32b960911b604482015290519081900360640190fd5b63ffffffff8216611ee9576040805162461bcd60e51b815260206004820152601860248201527f41737365742054797065206d757374206e6f7420626520300000000000000000604482015290519081900360640190fd5b600a5463ffffffff90811690821610611f335760405162461bcd60e51b81526004018080602001828103825260308152602001806130cb6030913960400191505060405180910390fd5b611f3c82611ce3565b611fd45763ffffffff8083166000908152600d60205260409020805460ff19166001908117909155600f54611f74929091906125f016565b600f819055600e541015611fcf576040805162461bcd60e51b815260206004820152601a60248201527f4173736574207479706520636170206973206578636565646564000000000000604482015290519081900360640190fd5b612079565b611fdd826114cd565b63ffffffff168163ffffffff16106120265760405162461bcd60e51b81526004018080602001828103825260308152602001806130316030913960400191505060405180910390fd5b61202f82611266565b63ffffffff168163ffffffff1610156120795760405162461bcd60e51b815260040180806020018281038252603181526020018061309a6031913960400191505060405180910390fd5b63ffffffff8281166000818152600b6020908152604091829020805463ffffffff19169486169485179055815192835282019290925281517f30525f07d1d2ff6b7c2b1817c13c37935c691304253dd353909b5c0381a9dc40929181900390910190a15050565b60009081526008602052604090205460ff1690565b6000806121028484612994565b6014549091506001600160a01b0316156121a857601454604080516346e67e2960e11b81526001600160a01b0387811660048301528681166024830152841515604483015291519190921691638dccfc52916064808301926020929190829003018186803b15801561217357600080fd5b505afa158015612187573d6000803e3d6000fd5b505050506040513d602081101561219d57600080fd5b505191506112609050565b9392505050565b600061126060078363ffffffff6126f416565b6121cb33611422565b61220f576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b6114ca816129a0565b612221336121af565b61225c5760405162461bcd60e51b81526004018080602001828103825260268152602001806131dc6026913960400191505060405180910390fd5b612265816120e0565b156122b7576040805162461bcd60e51b815260206004820152601760248201527f546f6b656e20697320616c726561647920706175736564000000000000000000604482015290519081900360640190fd5b600081815260086020526040808220805460ff191660011790555182917fc2d830ac158eec7b589dfadf012044c95b8646222991556ab4cd311e38bc77d191a250565b6000908152600160205260409020546001600160a01b0316151590565b61232133826129fe565b61235c5760405162461bcd60e51b8152600401808060200182810382526067815260200180612fca6067913960800191505060405180910390fd5b826001600160a01b031661236f826113aa565b6001600160a01b0316146123b45760405162461bcd60e51b81526004018080602001828103825260218152602001806131586021913960400191505060405180910390fd5b6001600160a01b03821661240f576040805162461bcd60e51b815260206004820152601a60248201527f605f746f6020697320746865207a65726f20616464726573732e000000000000604482015290519081900360640190fd5b612418816122fa565b612469576040805162461bcd60e51b815260206004820152601e60248201527f605f746f6b656e496460206973206e6f7420612076616c6964204e46542e0000604482015290519081900360640190fd5b611190838383612a5d565b61247e82826126f4565b6124cf576040805162461bcd60e51b815260206004820152601d60248201527f726f6c6520646f73656e2774206861766520746865206163636f756e74000000604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b600081612533576040805162461bcd60e51b815260206004820152600b60248201526a06d6f64756c6f20627920360ac1b604482015290519081900360640190fd5b81838161253c57fe5b069392505050565b600081612588576040805162461bcd60e51b815260206004820152600d60248201526c06469766973696f6e206279203609c1b604482015290519081900360640190fd5b81838161259157fe5b049392505050565b600082820163ffffffff80851690821610156121a8576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b6000828201838110156121a8576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b61264733611b82565b612689576040805162461bcd60e51b815260206004820152600e60248201526d26bab9ba1031329036b4b73a32b960911b604482015290519081900360640190fd5b611b7e8282612b30565b6126ae83838360405180602001604052806000815250612c17565b6126e95760405162461bcd60e51b81526004018080602001828103825260398152602001806130616039913960400191505060405180910390fd5b611190838383610dad565b6001600160a01b03166000908152602091909152604090205460ff1690565b61271d82826126f4565b1561276f576040805162461bcd60e51b815260206004820152601c60248201527f726f6c6520616c72656164792068617320746865206163636f756e7400000000604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b3b151590565b611b7e338383612d4a565b8051156127f9576040805162461bcd60e51b815260206004820152601760248201527f64617461206973206e6f7420696d706c656d656e746564000000000000000000604482015290519081900360640190fd5b610e5e848484611195565b60606000808361281d57600360fc1b915060010161285a565b835b80156128585761010083049250600a8106603001600160f81b0260001b83179250600a818161284a57fe5b60019093019204905061281f565b505b6060816040519080825280601f01601f191660200182016040528015612887576020820181803883390190505b50905060005b828110156128d0578381602081106128a157fe5b1a60f81b8282815181106128b157fe5b60200101906001600160f81b031916908160001a90535060010161288d565b50949350505050565b606082826040516020018083805190602001908083835b6020831061290f5780518252601f1990920191602091820191016128f0565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106129575780518252601f199092019160209182019101612938565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052905092915050565b60006121a88383612db8565b60006129aa61179b565b600580546001600160a01b0319166001600160a01b0385811691821790925560405192935091908316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080612a0a836113aa565b9050806001600160a01b0316846001600160a01b03161480612a455750836001600160a01b0316612a3a84610c71565b6001600160a01b0316145b80612a555750612a5581856120f5565b949350505050565b612a6681612de6565b600081815260016020818152604080842080546001600160a01b0319166001600160a01b038881169190911790915587168452600290915290912054612aab91612e21565b6001600160a01b038085166000908152600260205260408082209390935590841681522054612ae190600163ffffffff6125f016565b6001600160a01b03808416600081815260026020526040808220949094559251849391928716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b612b39816122fa565b15612b8b576040805162461bcd60e51b815260206004820152601960248201527f6d696e7420746f6b656e20616c72656164792065786973747300000000000000604482015290519081900360640190fd5b600081815260016020818152604080842080546001600160a01b0319166001600160a01b0388169081179091558452600290915290912054612bcc916125f0565b6001600160a01b0383166000818152600260205260408082209390935591518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000612c2b846001600160a01b0316612794565b612c3757506001612a55565b604051630a85bd0160e11b815233600482018181526001600160a01b03888116602485015260448401879052608060648501908152865160848601528651600095928a169463150b7a029490938c938b938b939260a4019060208501908083838e5b83811015612cb1578181015183820152602001612c99565b50505050905090810190601f168015612cde5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015612d0057600080fd5b505af1158015612d14573d6000803e3d6000fd5b505050506040513d6020811015612d2a57600080fd5b50516001600160e01b031916630a85bd0160e11b14915050949350505050565b6001600160a01b03838116600081815260046020908152604080832094871680845294825291829020805460ff1916861515908117909155825190815291517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319281900390910190a3505050565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b6000818152600360205260409020546001600160a01b0316156114ca57600090815260036020526040902080546001600160a01b0319169055565b600081831015612e6f576040805162461bcd60e51b81526020600482015260146024820152737375627472616374696f6e206f766572666c6f7760601b604482015290519081900360640190fd5b50900390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612eb657805160ff1916838001178555612ee3565b82800160010185558215612ee3579182015b82811115612ee3578251825591602001919060010190612ec8565b50612eef929150612ef3565b5090565b610c6e91905b80821115612eef5760008155600101612ef9565b600063ffffffff8216612f55576040805162461bcd60e51b815260206004820152600b60248201526a06d6f64756c6f20627920360ac1b604482015290519081900360640190fd5b8163ffffffff168363ffffffff168161253c57fe5b600063ffffffff8216612fb4576040805162461bcd60e51b815260206004820152600d60248201526c06469766973696f6e206279203609c1b604482015290519081900360640190fd5b8163ffffffff168363ffffffff168161259157fefe556e6c65737320606d73672e73656e64657260206973207468652063757272656e74206f776e65722c20616e20617574686f72697a6564206f70657261746f722c206f722074686520617070726f766564206164647265737320666f722074686973204e46542e4e657720756e697420636170206d757374206265206c657373207468616e2070726576696f757320756e697420636170605f746f60206973206120736d61727420636f6e747261637420616e64206f6e455243373231526563656976656420697320696e76616c69644e657720756e697420636170206d757374206265206d6f7265207468616e2063757272656e7420756e697420636f756e744e657720756e697420636170206d757374206265206c657373207468616e2061737365742074797065206f6666736574556e6c65737320606d73672e73656e64657260206973207468652063757272656e74204e4654206f776e65722c206f7220616e20617574686f72697a6564206f70657261746f72206f66207468652063757272656e74206f776e65722e605f66726f6d60206973206e6f74207468652063757272656e74206f776e65722e4e65772074797065206361702063616e6e6f74206265206c657373207468616e206578697374696e672074797065206361704e6577207479706520636170206d757374206265206d6f7265207468616e2063757272656e74207479706520636f756e744f6e6c7920746f6b656e207061757365722063616e2063616c6c2074686973206d6574686f64a265627a7a723158206b3b4f7ebc3669a9bd1825f180b7b912271e188990be2d302965d1c48aa7453664736f6c634300050c003268747470733a2f2f627261766566726f6e746965726865726f65732e636f6d2f6d657461646174612f737068657265732f000000000000000000000000aa06e5c117dbe8bc52dbaa18aaf447eda556b13c

Deployed Bytecode

0x6080604052600436106102725760003560e01c8063776ab6341161014f578063ac8a584a116100c1578063ca1728fd1161007a578063ca1728fd14610a8e578063d644736814610ac6578063e985e9c514610af0578063ed841bf114610b2b578063f2fde38b14610b5e578063fbd395f814610b9157610272565b8063ac8a584a146108f3578063b88d4fde14610926578063b97d7895146109ec578063c000582714610a1c578063c2508c4614610a31578063c87b56dd14610a6457610272565b8063983b2d5611610113578063983b2d56146107395780639870d7fe1461076c57806399e0dd7c1461079f5780639bb5c9c314610852578063a22cb46514610885578063aa271e1a146108c057610272565b8063776ab634146106bb5780637d02b1a3146106e55780638456cb59146106fa5780638da5cb5b1461070f57806395d89b411461072457610272565b80634dd09f33116101e85780636352211e116101ac5780636352211e146105b35780636d70f7ae146105dd57806370a08231146106105780637362377b14610643578063739f66871461065857806374db07d81461068857610272565b80634dd09f33146104e65780634ebbc92a146104fb578063532efe60146105255780635c975abb1461056e57806362977e2c1461058357610272565b806323b872dd1161023a57806323b872dd146103e45780632cff5b391461041a5780633092afd51461042f5780633f4ba83a1461046257806340c10f191461047757806342842e0e146104b057610272565b806301ffc9a71461027757806306fdde03146102bf578063081812fc14610349578063095ea7b31461038f57806318160ddd146103bd575b600080fd5b34801561028357600080fd5b506102ab6004803603602081101561029a57600080fd5b50356001600160e01b031916610bbb565b604080519115158252519081900360200190f35b3480156102cb57600080fd5b506102d4610bda565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561030e5781810151838201526020016102f6565b50505050905090810190601f16801561033b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561035557600080fd5b506103736004803603602081101561036c57600080fd5b5035610c71565b604080516001600160a01b039092168252519081900360200190f35b6103bb600480360360408110156103a557600080fd5b506001600160a01b038135169060200135610ce9565b005b3480156103c957600080fd5b506103d2610da7565b60408051918252519081900360200190f35b6103bb600480360360608110156103fa57600080fd5b506001600160a01b03813581169160208101359091169060400135610dad565b34801561042657600080fd5b506103d2610e64565b34801561043b57600080fd5b506103bb6004803603602081101561045257600080fd5b50356001600160a01b0316610e6a565b34801561046e57600080fd5b506103bb610eff565b34801561048357600080fd5b506103bb6004803603604081101561049a57600080fd5b506001600160a01b038135169060200135610fe3565b6103bb600480360360608110156104c657600080fd5b506001600160a01b03813581169160208101359091169060400135611195565b3480156104f257600080fd5b50610373611246565b34801561050757600080fd5b506102ab6004803603602081101561051e57600080fd5b5035611255565b34801561053157600080fd5b506105556004803603602081101561054857600080fd5b503563ffffffff16611266565b6040805163ffffffff9092168252519081900360200190f35b34801561057a57600080fd5b506102ab611281565b34801561058f57600080fd5b506103bb600480360360208110156105a657600080fd5b503563ffffffff16611291565b3480156105bf57600080fd5b50610373600480360360208110156105d657600080fd5b50356113aa565b3480156105e957600080fd5b506102ab6004803603602081101561060057600080fd5b50356001600160a01b0316611422565b34801561061c57600080fd5b506103d26004803603602081101561063357600080fd5b50356001600160a01b0316611435565b34801561064f57600080fd5b506103bb611450565b34801561066457600080fd5b506105556004803603602081101561067b57600080fd5b503563ffffffff166114cd565b34801561069457600080fd5b506103bb600480360360208110156106ab57600080fd5b50356001600160a01b0316611545565b3480156106c757600080fd5b506103bb600480360360208110156106de57600080fd5b50356115da565b3480156106f157600080fd5b506103d26116ae565b34801561070657600080fd5b506103bb6116b4565b34801561071b57600080fd5b5061037361179b565b34801561073057600080fd5b506102d46117aa565b34801561074557600080fd5b506103bb6004803603602081101561075c57600080fd5b50356001600160a01b031661180b565b34801561077857600080fd5b506103bb6004803603602081101561078f57600080fd5b50356001600160a01b03166118a0565b3480156107ab57600080fd5b506103bb600480360360208110156107c257600080fd5b8101906020810181356401000000008111156107dd57600080fd5b8201836020820111156107ef57600080fd5b8035906020019184600183028401116401000000008311171561081157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611935945050505050565b34801561085e57600080fd5b506103bb6004803603602081101561087557600080fd5b50356001600160a01b0316611a32565b34801561089157600080fd5b506103bb600480360360408110156108a857600080fd5b506001600160a01b0381351690602001351515611ad3565b3480156108cc57600080fd5b506102ab600480360360208110156108e357600080fd5b50356001600160a01b0316611b82565b3480156108ff57600080fd5b506103bb6004803603602081101561091657600080fd5b50356001600160a01b0316611b95565b6103bb6004803603608081101561093c57600080fd5b6001600160a01b0382358116926020810135909116916040820135919081019060808101606082013564010000000081111561097757600080fd5b82018360208201111561098957600080fd5b803590602001918460018302840111640100000000831117156109ab57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611c2a945050505050565b3480156109f857600080fd5b506102ab60048036036020811015610a0f57600080fd5b503563ffffffff16611ce3565b348015610a2857600080fd5b506103d2611cfe565b348015610a3d57600080fd5b506103bb60048036036020811015610a5457600080fd5b50356001600160a01b0316611d0a565b348015610a7057600080fd5b506102d460048036036020811015610a8757600080fd5b5035611d9f565b348015610a9a57600080fd5b506103bb60048036036040811015610ab157600080fd5b5063ffffffff81358116916020013516611e46565b348015610ad257600080fd5b506102ab60048036036020811015610ae957600080fd5b50356120e0565b348015610afc57600080fd5b506102ab60048036036040811015610b1357600080fd5b506001600160a01b03813581169160200135166120f5565b348015610b3757600080fd5b506102ab60048036036020811015610b4e57600080fd5b50356001600160a01b03166121af565b348015610b6a57600080fd5b506103bb60048036036020811015610b8157600080fd5b50356001600160a01b03166121c2565b348015610b9d57600080fd5b506103bb60048036036020811015610bb457600080fd5b5035612218565b6001600160e01b03191660009081526020819052604090205460ff1690565b60118054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c665780601f10610c3b57610100808354040283529160200191610c66565b820191906000526020600020905b815481529060010190602001808311610c4957829003601f168201915b505050505090505b90565b6000610c7c826122fa565b610ccd576040805162461bcd60e51b815260206004820152601e60248201527f605f746f6b656e496460206973206e6f7420612076616c6964204e46542e0000604482015290519081900360640190fd5b506000908152600360205260409020546001600160a01b031690565b6000610cf4826113aa565b9050336001600160a01b0382161480610d125750610d1281336120f5565b610d4d5760405162461bcd60e51b815260040180806020018281038252605d8152602001806130fb605d913960600191505060405180910390fd5b60008281526003602052604080822080546001600160a01b0319166001600160a01b0387169081179091559051849233917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a4505050565b60105490565b600554600160a01b900460ff1615610dff576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b80610e09816120e0565b15610e53576040805162461bcd60e51b8152602060048201526015602482015274151bdad95b94185d5cd8589b194e881c185d5cd959605a1b604482015290519081900360640190fd5b610e5e848484612317565b50505050565b600e5490565b610e7333611422565b610eb7576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b610ec860098263ffffffff61247416565b6040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b610f0833611422565b610f4c576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b600554600160a01b900460ff16610fa1576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6005805460ff60a01b191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b610fec33611b82565b61102e576040805162461bcd60e51b815260206004820152600e60248201526d26bab9ba1031329036b4b73a32b960911b604482015290519081900360640190fd5b600a5461104690829063ffffffff908116906124f116565b61108d576040805162461bcd60e51b81526020600482015260136024820152720496e646578206d757374206e6f74206265203606c1b604482015290519081900360640190fd5b600a546000906110a890839063ffffffff9081169061254416565b63ffffffff8082166000908152600c60205260409020549192506110d29181169060019061259916565b63ffffffff8281166000908152600c60205260409020805463ffffffff19169282169290921790915560105461110b916001906125f016565b601055611117816114cd565b63ffffffff8281166000908152600c602052604090205491811691161115611186576040805162461bcd60e51b815260206004820152601860248201527f417373657420756e697420636170206973206578636565640000000000000000604482015290519081900360640190fd5b611190838361263e565b505050565b600554600160a01b900460ff16156111e7576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b806111f1816120e0565b1561123b576040805162461bcd60e51b8152602060048201526015602482015274151bdad95b94185d5cd8589b194e881c185d5cd959605a1b604482015290519081900360640190fd5b610e5e848484612693565b6014546001600160a01b031681565b6000611260826122fa565b92915050565b63ffffffff9081166000908152600c60205260409020541690565b600554600160a01b900460ff1690565b61129a33611b82565b6112dc576040805162461bcd60e51b815260206004820152600e60248201526d26bab9ba1031329036b4b73a32b960911b604482015290519081900360640190fd5b600e548163ffffffff16106113225760405162461bcd60e51b81526004018080602001828103825260328152602001806131796032913960400191505060405180910390fd5b600f548163ffffffff1610156113695760405162461bcd60e51b81526004018080602001828103825260318152602001806131ab6031913960400191505060405180910390fd5b63ffffffff8116600e81905560408051918252517fcffe07c9e7982b6c56cb569d21caedd78c8fbc68a0cbdc4d963c21eae6e8f9109181900360200190a150565b60006113b5826122fa565b611406576040805162461bcd60e51b815260206004820152601e60248201527f605f746f6b656e496460206973206e6f7420612076616c6964204e46542e0000604482015290519081900360640190fd5b506000908152600160205260409020546001600160a01b031690565b600061126060068363ffffffff6126f416565b6001600160a01b031660009081526002602052604090205490565b61145933611422565b61149d576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b6040513390303180156108fc02916000818181858888f193505050501580156114ca573d6000803e3d6000fd5b50565b60006114d882611ce3565b611529576040805162461bcd60e51b815260206004820152601960248201527f4173736574207479706520646f6573206e6f7420657869737400000000000000604482015290519081900360640190fd5b5063ffffffff9081166000908152600b60205260409020541690565b61154e33611422565b611592576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b6115a360078263ffffffff61271316565b6040516001600160a01b038216907fff12d576e2fecf516eb406e6618d5e97bcc8046690863b984069b15ada11d61290600090a250565b6115e3336121af565b61161e5760405162461bcd60e51b81526004018080602001828103825260268152602001806131dc6026913960400191505060405180910390fd5b611627816120e0565b61166e576040805162461bcd60e51b8152602060048201526013602482015272151bdad95b881a5cc81b9bdd081c185d5cd959606a1b604482015290519081900360640190fd5b600081815260086020526040808220805460ff191690555182917f0cfa9cc56bacd896c88effb6a4051b954fcaaf2de7ae98882e39f294ea65184391a250565b600f5490565b6116bd33611422565b611701576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b600554600160a01b900460ff1615611753576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6005805460ff60a01b1916600160a01b1790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a1565b6005546001600160a01b031690565b60128054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c665780601f10610c3b57610100808354040283529160200191610c66565b61181433611422565b611858576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b61186960098263ffffffff61271316565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b6118a933611422565b6118ed576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b6118fe60068263ffffffff61271316565b6040516001600160a01b038216907fac6fa858e9350a46cec16539926e0fde25b7629f84b5a72bffaae4df888ae86d90600090a250565b61193e33611422565b611982576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b8051611995906013906020840190612e75565b507fd5e477fc51908e22673125c3b4666c4a72f49feb8665fd3875e224a58ca9659a816040518080602001828103825283818151815260200191508051906020019080838360005b838110156119f55781810151838201526020016119dd565b50505050905090810190601f168015611a225780820380516001836020036101000a031916815260200191505b509250505060405180910390a150565b611a3b33611422565b611a7f576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b601480546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f12be4820d03362d1f48434d870b2fc1549b3a3d16d891eeaac7c3073f3ded8b79181900360200190a150565b6014546001600160a01b031615801590611afa5750611afa826001600160a01b0316612794565b15611b745760145460408051631b3b02e560e11b81523360048201526001600160a01b03858116602483015284151560448301529151919092169163367605ca91606480830192600092919082900301818387803b158015611b5b57600080fd5b505af1158015611b6f573d6000803e3d6000fd5b505050505b611b7e828261279a565b5050565b600061126060098363ffffffff6126f416565b611b9e33611422565b611be2576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b611bf360068263ffffffff61247416565b6040516001600160a01b038216907f80c0b871b97b595b16a7741c1b06fed0c6f6f558639f18ccbce50724325dc40d90600090a250565b600554600160a01b900460ff1615611c7c576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b81611c86816120e0565b15611cd0576040805162461bcd60e51b8152602060048201526015602482015274151bdad95b94185d5cd8589b194e881c185d5cd959605a1b604482015290519081900360640190fd5b611cdc858585856127a5565b5050505050565b63ffffffff166000908152600d602052604090205460ff1690565b600a5463ffffffff1690565b611d1333611422565b611d57576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b611d6860078263ffffffff61247416565b6040516001600160a01b038216907f2186c7d8e4b2d6a73790355b1a465872175798d2366146e638fc885d54460b8590600090a250565b6060611260611dad83612804565b6013805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015611e335780601f10611e0857610100808354040283529160200191611e33565b820191906000526020600020905b815481529060010190602001808311611e1657829003601f168201915b50505050506128d990919063ffffffff16565b611e4f33611b82565b611e91576040805162461bcd60e51b815260206004820152600e60248201526d26bab9ba1031329036b4b73a32b960911b604482015290519081900360640190fd5b63ffffffff8216611ee9576040805162461bcd60e51b815260206004820152601860248201527f41737365742054797065206d757374206e6f7420626520300000000000000000604482015290519081900360640190fd5b600a5463ffffffff90811690821610611f335760405162461bcd60e51b81526004018080602001828103825260308152602001806130cb6030913960400191505060405180910390fd5b611f3c82611ce3565b611fd45763ffffffff8083166000908152600d60205260409020805460ff19166001908117909155600f54611f74929091906125f016565b600f819055600e541015611fcf576040805162461bcd60e51b815260206004820152601a60248201527f4173736574207479706520636170206973206578636565646564000000000000604482015290519081900360640190fd5b612079565b611fdd826114cd565b63ffffffff168163ffffffff16106120265760405162461bcd60e51b81526004018080602001828103825260308152602001806130316030913960400191505060405180910390fd5b61202f82611266565b63ffffffff168163ffffffff1610156120795760405162461bcd60e51b815260040180806020018281038252603181526020018061309a6031913960400191505060405180910390fd5b63ffffffff8281166000818152600b6020908152604091829020805463ffffffff19169486169485179055815192835282019290925281517f30525f07d1d2ff6b7c2b1817c13c37935c691304253dd353909b5c0381a9dc40929181900390910190a15050565b60009081526008602052604090205460ff1690565b6000806121028484612994565b6014549091506001600160a01b0316156121a857601454604080516346e67e2960e11b81526001600160a01b0387811660048301528681166024830152841515604483015291519190921691638dccfc52916064808301926020929190829003018186803b15801561217357600080fd5b505afa158015612187573d6000803e3d6000fd5b505050506040513d602081101561219d57600080fd5b505191506112609050565b9392505050565b600061126060078363ffffffff6126f416565b6121cb33611422565b61220f576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b6114ca816129a0565b612221336121af565b61225c5760405162461bcd60e51b81526004018080602001828103825260268152602001806131dc6026913960400191505060405180910390fd5b612265816120e0565b156122b7576040805162461bcd60e51b815260206004820152601760248201527f546f6b656e20697320616c726561647920706175736564000000000000000000604482015290519081900360640190fd5b600081815260086020526040808220805460ff191660011790555182917fc2d830ac158eec7b589dfadf012044c95b8646222991556ab4cd311e38bc77d191a250565b6000908152600160205260409020546001600160a01b0316151590565b61232133826129fe565b61235c5760405162461bcd60e51b8152600401808060200182810382526067815260200180612fca6067913960800191505060405180910390fd5b826001600160a01b031661236f826113aa565b6001600160a01b0316146123b45760405162461bcd60e51b81526004018080602001828103825260218152602001806131586021913960400191505060405180910390fd5b6001600160a01b03821661240f576040805162461bcd60e51b815260206004820152601a60248201527f605f746f6020697320746865207a65726f20616464726573732e000000000000604482015290519081900360640190fd5b612418816122fa565b612469576040805162461bcd60e51b815260206004820152601e60248201527f605f746f6b656e496460206973206e6f7420612076616c6964204e46542e0000604482015290519081900360640190fd5b611190838383612a5d565b61247e82826126f4565b6124cf576040805162461bcd60e51b815260206004820152601d60248201527f726f6c6520646f73656e2774206861766520746865206163636f756e74000000604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b600081612533576040805162461bcd60e51b815260206004820152600b60248201526a06d6f64756c6f20627920360ac1b604482015290519081900360640190fd5b81838161253c57fe5b069392505050565b600081612588576040805162461bcd60e51b815260206004820152600d60248201526c06469766973696f6e206279203609c1b604482015290519081900360640190fd5b81838161259157fe5b049392505050565b600082820163ffffffff80851690821610156121a8576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b6000828201838110156121a8576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b61264733611b82565b612689576040805162461bcd60e51b815260206004820152600e60248201526d26bab9ba1031329036b4b73a32b960911b604482015290519081900360640190fd5b611b7e8282612b30565b6126ae83838360405180602001604052806000815250612c17565b6126e95760405162461bcd60e51b81526004018080602001828103825260398152602001806130616039913960400191505060405180910390fd5b611190838383610dad565b6001600160a01b03166000908152602091909152604090205460ff1690565b61271d82826126f4565b1561276f576040805162461bcd60e51b815260206004820152601c60248201527f726f6c6520616c72656164792068617320746865206163636f756e7400000000604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b3b151590565b611b7e338383612d4a565b8051156127f9576040805162461bcd60e51b815260206004820152601760248201527f64617461206973206e6f7420696d706c656d656e746564000000000000000000604482015290519081900360640190fd5b610e5e848484611195565b60606000808361281d57600360fc1b915060010161285a565b835b80156128585761010083049250600a8106603001600160f81b0260001b83179250600a818161284a57fe5b60019093019204905061281f565b505b6060816040519080825280601f01601f191660200182016040528015612887576020820181803883390190505b50905060005b828110156128d0578381602081106128a157fe5b1a60f81b8282815181106128b157fe5b60200101906001600160f81b031916908160001a90535060010161288d565b50949350505050565b606082826040516020018083805190602001908083835b6020831061290f5780518252601f1990920191602091820191016128f0565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106129575780518252601f199092019160209182019101612938565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052905092915050565b60006121a88383612db8565b60006129aa61179b565b600580546001600160a01b0319166001600160a01b0385811691821790925560405192935091908316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080612a0a836113aa565b9050806001600160a01b0316846001600160a01b03161480612a455750836001600160a01b0316612a3a84610c71565b6001600160a01b0316145b80612a555750612a5581856120f5565b949350505050565b612a6681612de6565b600081815260016020818152604080842080546001600160a01b0319166001600160a01b038881169190911790915587168452600290915290912054612aab91612e21565b6001600160a01b038085166000908152600260205260408082209390935590841681522054612ae190600163ffffffff6125f016565b6001600160a01b03808416600081815260026020526040808220949094559251849391928716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b612b39816122fa565b15612b8b576040805162461bcd60e51b815260206004820152601960248201527f6d696e7420746f6b656e20616c72656164792065786973747300000000000000604482015290519081900360640190fd5b600081815260016020818152604080842080546001600160a01b0319166001600160a01b0388169081179091558452600290915290912054612bcc916125f0565b6001600160a01b0383166000818152600260205260408082209390935591518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000612c2b846001600160a01b0316612794565b612c3757506001612a55565b604051630a85bd0160e11b815233600482018181526001600160a01b03888116602485015260448401879052608060648501908152865160848601528651600095928a169463150b7a029490938c938b938b939260a4019060208501908083838e5b83811015612cb1578181015183820152602001612c99565b50505050905090810190601f168015612cde5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015612d0057600080fd5b505af1158015612d14573d6000803e3d6000fd5b505050506040513d6020811015612d2a57600080fd5b50516001600160e01b031916630a85bd0160e11b14915050949350505050565b6001600160a01b03838116600081815260046020908152604080832094871680845294825291829020805460ff1916861515908117909155825190815291517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319281900390910190a3505050565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b6000818152600360205260409020546001600160a01b0316156114ca57600090815260036020526040902080546001600160a01b0319169055565b600081831015612e6f576040805162461bcd60e51b81526020600482015260146024820152737375627472616374696f6e206f766572666c6f7760601b604482015290519081900360640190fd5b50900390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612eb657805160ff1916838001178555612ee3565b82800160010185558215612ee3579182015b82811115612ee3578251825591602001919060010190612ec8565b50612eef929150612ef3565b5090565b610c6e91905b80821115612eef5760008155600101612ef9565b600063ffffffff8216612f55576040805162461bcd60e51b815260206004820152600b60248201526a06d6f64756c6f20627920360ac1b604482015290519081900360640190fd5b8163ffffffff168363ffffffff168161253c57fe5b600063ffffffff8216612fb4576040805162461bcd60e51b815260206004820152600d60248201526c06469766973696f6e206279203609c1b604482015290519081900360640190fd5b8163ffffffff168363ffffffff168161259157fefe556e6c65737320606d73672e73656e64657260206973207468652063757272656e74206f776e65722c20616e20617574686f72697a6564206f70657261746f722c206f722074686520617070726f766564206164647265737320666f722074686973204e46542e4e657720756e697420636170206d757374206265206c657373207468616e2070726576696f757320756e697420636170605f746f60206973206120736d61727420636f6e747261637420616e64206f6e455243373231526563656976656420697320696e76616c69644e657720756e697420636170206d757374206265206d6f7265207468616e2063757272656e7420756e697420636f756e744e657720756e697420636170206d757374206265206c657373207468616e2061737365742074797065206f6666736574556e6c65737320606d73672e73656e64657260206973207468652063757272656e74204e4654206f776e65722c206f7220616e20617574686f72697a6564206f70657261746f72206f66207468652063757272656e74206f776e65722e605f66726f6d60206973206e6f74207468652063757272656e74206f776e65722e4e65772074797065206361702063616e6e6f74206265206c657373207468616e206578697374696e672074797065206361704e6577207479706520636170206d757374206265206d6f7265207468616e2063757272656e74207479706520636f756e744f6e6c7920746f6b656e207061757365722063616e2063616c6c2074686973206d6574686f64a265627a7a723158206b3b4f7ebc3669a9bd1825f180b7b912271e188990be2d302965d1c48aa7453664736f6c634300050c0032

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

000000000000000000000000Aa06e5c117dbe8bC52dBaa18AaF447eDA556B13c

-----Decoded View---------------
Arg [0] : _approvalProxy (address): 0xAa06e5c117dbe8bC52dBaa18AaF447eDA556B13c

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000Aa06e5c117dbe8bC52dBaa18AaF447eDA556B13c


Deployed Bytecode Sourcemap

26574:1268:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5497:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5497:135:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5497:135:0;-1:-1:-1;;;;;;5497:135:0;;:::i;:::-;;;;;;;;;;;;;;;;;;19097:84;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19097:84:0;;;:::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;19097:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11432:206;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11432:206:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11432:206:0;;:::i;:::-;;;;-1:-1:-1;;;;;11432:206:0;;;;;;;;;;;;;;10633:419;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;10633:419:0;;;;;;;;:::i;:::-;;23832:89;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23832:89:0;;;:::i;:::-;;;;;;;;;;;;;;;;21847:216;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21847:216:0;;;;;;;;;;;;;;;;;:::i;24634:90::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24634:90:0;;;:::i;17944:141::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17944:141:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17944:141:0;-1:-1:-1;;;;;17944:141:0;;:::i;16686:124::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16686:124:0;;;:::i;26119:448::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26119:448:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;26119:448:0;;;;;;;;:::i;21615:224::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21615:224:0;;;;;;;;;;;;;;;;;:::i;26886:35::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26886:35:0;;;:::i;18097:100::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18097:100:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18097:100:0;;:::i;25994:117::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25994:117:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25994:117:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16470:78;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16470:78:0;;;:::i;24280:346::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24280:346:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24280:346:0;;;;:::i;9281:199::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9281:199:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9281:199:0;;:::i;16048:112::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16048:112:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16048:112:0;-1:-1:-1;;;;;16048:112:0;;:::i;9166:107::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9166:107:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9166:107:0;-1:-1:-1;;;;;9166:107:0;;:::i;16818:108::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16818:108:0;;;:::i;25800:186::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25800:186:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25800:186:0;;;;:::i;21038:147::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21038:147:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21038:147:0;-1:-1:-1;;;;;21038:147:0;;:::i;20562:219::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20562:219:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20562:219:0;;:::i;24732:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24732:94:0;;;:::i;16556:122::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16556:122:0;;;:::i;14786:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14786:79:0;;;:::i;19189:88::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19189:88:0;;;:::i;17803:133::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17803:133:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17803:133:0;-1:-1:-1;;;;;17803:133:0;;:::i;16168:139::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16168:139:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16168:139:0;-1:-1:-1;;;;;16168:139:0;;:::i;18903:186::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18903:186:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18903:186:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;18903:186:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;18903:186:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;18903:186:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;18903:186:0;;-1:-1:-1;18903:186:0;;-1:-1:-1;;;;;18903:186:0:i;27030:158::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27030:158:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27030:158:0;-1:-1:-1;;;;;27030:158:0;;:::i;27196:301::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27196:301:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;27196:301:0;;;;;;;;;;:::i;17687:108::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17687:108:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17687:108:0;-1:-1:-1;;;;;17687:108:0;;:::i;16315:147::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16315:147:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16315:147:0;-1:-1:-1;;;;;16315:147:0;;:::i;21356:251::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;21356:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;21356:251:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;21356:251:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;21356:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;21356:251:0;;-1:-1:-1;21356:251:0;;-1:-1:-1;;;;;21356:251:0:i;24834:118::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24834:118:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24834:118:0;;;;:::i;24176:96::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24176:96:0;;;:::i;21193:155::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21193:155:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21193:155:0;-1:-1:-1;;;;;21193:155:0;;:::i;19285:142::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19285:142:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19285:142:0;;:::i;24960:832::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24960:832:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24960:832:0;;;;;;;;;;;:::i;20789:116::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20789:116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20789:116:0;;:::i;27505:334::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27505:334:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;27505:334:0;;;;;;;;;;:::i;20913:117::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20913:117:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20913:117:0;-1:-1:-1;;;;;20913:117:0;;:::i;15924:116::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15924:116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15924:116:0;-1:-1:-1;;;;;15924:116:0;;:::i;20335:219::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20335:219:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20335:219:0;;:::i;5497:135::-;-1:-1:-1;;;;;;5591:33:0;5567:4;5591:33;;;;;;;;;;;;;;5497:135::o;19097:84::-;19167:6;19160:13;;;;;;;;-1:-1:-1;;19160:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19134;;19160;;19167:6;;19160:13;;19167:6;19160:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19097:84;;:::o;11432:206::-;11492:7;11520:16;11527:8;11520:6;:16::i;:::-;11512:76;;;;;-1:-1:-1;;;11512:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11606:24:0;;;;:14;:24;;;;;;-1:-1:-1;;;;;11606:24:0;;11432:206::o;10633:419::-;10713:13;10729:17;10737:8;10729:7;:17::i;:::-;10713:33;-1:-1:-1;10765:10:0;-1:-1:-1;;;;;10765:19:0;;;;:58;;;10788:35;10805:5;10812:10;10788:16;:35::i;:::-;10757:181;;;;-1:-1:-1;;;10757:181:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10951:24;;;;:14;:24;;;;;;:36;;-1:-1:-1;;;;;;10951:36:0;-1:-1:-1;;;;;10951:36:0;;;;;;;;11003:41;;10951:24;;11012:10;;11003:41;;10951:24;11003:41;10633:419;;;:::o;23832:89::-;23903:10;;23832:89;:::o;21847:216::-;15767:7;;-1:-1:-1;;;15767:7:0;;;;15766:8;15758:37;;;;;-1:-1:-1;;;15758:37:0;;;;;;;;;;;;-1:-1:-1;;;15758:37:0;;;;;;;;;;;;;;;21994:8;20115:23;20129:8;20115:13;:23::i;:::-;20114:24;20106:58;;;;;-1:-1:-1;;;20106:58:0;;;;;;;;;;;;-1:-1:-1;;;20106:58:0;;;;;;;;;;;;;;;22015:40;22034:5;22041:3;22046:8;22015:18;:40::i;:::-;15806:1;21847:216;;;:::o;24634:90::-;24704:12;;24634:90;:::o;17944:141::-;15651:22;15662:10;15651;:22::i;:::-;15643:51;;;;;-1:-1:-1;;;15643:51:0;;;;;;;;;;;;-1:-1:-1;;;15643:51:0;;;;;;;;;;;;;;;18016:23;:7;18031;18016:23;:14;:23;:::i;:::-;18055:22;;-1:-1:-1;;;;;18055:22:0;;;;;;;;17944:141;:::o;16686:124::-;15651:22;15662:10;15651;:22::i;:::-;15643:51;;;;;-1:-1:-1;;;15643:51:0;;;;;;;;;;;;-1:-1:-1;;;15643:51:0;;;;;;;;;;;;;;;15864:7;;-1:-1:-1;;;15864:7:0;;;;15856:40;;;;;-1:-1:-1;;;15856:40:0;;;;;;;;;;;;-1:-1:-1;;;15856:40:0;;;;;;;;;;;;;;;16751:7;:15;;-1:-1:-1;;;;16751:15:0;;;16782:20;;;16791:10;16782:20;;;;;;;;;;;;;16686:124::o;26119:448::-;17620:20;17629:10;17620:8;:20::i;:::-;17612:47;;;;;-1:-1:-1;;;17612:47:0;;;;;;;;;;;;-1:-1:-1;;;17612:47:0;;;;;;;;;;;;;;;26216:15;;26203:29;;:8;;26216:15;;;;;26203:12;:29;:::i;:::-;26195:66;;;;;-1:-1:-1;;;26195:66:0;;;;;;;;;;;;-1:-1:-1;;;26195:66:0;;;;;;;;;;;;;;;26311:15;;26272:16;;26298:29;;:8;;26311:15;;;;;26298:12;:29;:::i;:::-;26362:20;;;;;;;;:9;:20;;;;;;26272:56;;-1:-1:-1;26362:27:0;;:20;;;26387:1;;26362:24;:27;:::i;:::-;26339:20;;;;;;;;:9;:20;;;;;:50;;-1:-1:-1;;26339:50:0;;;;;;;;;;;26413:10;;:17;;-1:-1:-1;;26413:14:0;:17;:::i;:::-;26400:10;:30;26473:21;26484:9;26473:10;:21::i;:::-;26449:45;:20;;;;;;;:9;:20;;;;;;:45;;;:20;;:45;;26441:82;;;;;-1:-1:-1;;;26441:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26534:25;26545:3;26550:8;26534:10;:25::i;:::-;17670:1;26119:448;;:::o;21615:224::-;15767:7;;-1:-1:-1;;;15767:7:0;;;;15766:8;15758:37;;;;;-1:-1:-1;;;15758:37:0;;;;;;;;;;;;-1:-1:-1;;;15758:37:0;;;;;;;;;;;;;;;21766:8;20115:23;20129:8;20115:13;:23::i;:::-;20114:24;20106:58;;;;;-1:-1:-1;;;20106:58:0;;;;;;;;;;;;-1:-1:-1;;;20106:58:0;;;;;;;;;;;;;;;21787:44;21810:5;21817:3;21822:8;21787:22;:44::i;26886:35::-;;;-1:-1:-1;;;;;26886:35:0;;:::o;18097:100::-;18150:4;18174:15;18181:7;18174:6;:15::i;:::-;18167:22;18097:100;-1:-1:-1;;18097:100:0:o;25994:117::-;26082:21;;;;26056:6;26082:21;;;:9;:21;;;;;;;;25994:117::o;16470:78::-;16533:7;;-1:-1:-1;;;16533:7:0;;;;;16470:78::o;24280:346::-;17620:20;17629:10;17620:8;:20::i;:::-;17612:47;;;;;-1:-1:-1;;;17612:47:0;;;;;;;;;;;;-1:-1:-1;;;17612:47:0;;;;;;;;;;;;;;;24373:12;;24359:11;:26;;;24351:89;;;;-1:-1:-1;;;24351:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24474:14;;24459:11;:29;;;;24451:91;;;;-1:-1:-1;;;24451:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24553:26;;;:12;:26;;;24595:23;;;;;;;;;;;;;;;;24280:346;:::o;9281:199::-;9337:7;9365:16;9372:8;9365:6;:16::i;:::-;9357:76;;;;;-1:-1:-1;;;9357:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9451:21:0;;;;:11;:21;;;;;;-1:-1:-1;;;;;9451:21:0;;9281:199::o;16048:112::-;16106:4;16130:22;:9;16144:7;16130:22;:13;:22;:::i;9166:107::-;-1:-1:-1;;;;;9249:16:0;9222:7;9249:16;;;:8;:16;;;;;;;9166:107::o;16818:108::-;15651:22;15662:10;15651;:22::i;:::-;15643:51;;;;;-1:-1:-1;;;15643:51:0;;;;;;;;;;;;-1:-1:-1;;;15643:51:0;;;;;;;;;;;;;;;16876:42;;:10;;16904:4;16896:21;16876:42;;;;;;;;;16896:21;16876:10;:42;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16876:42:0;16818:108::o;25800:186::-;25860:6;25887:24;25900:10;25887:12;:24::i;:::-;25879:62;;;;;-1:-1:-1;;;25879:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25959:19:0;;;;;;;;:7;:19;;;;;;;;25800:186::o;21038:147::-;15651:22;15662:10;15651;:22::i;:::-;15643:51;;;;;-1:-1:-1;;;15643:51:0;;;;;;;;;;;;-1:-1:-1;;;15643:51:0;;;;;;;;;;;;;;;21112:24;:11;21128:7;21112:24;:15;:24;:::i;:::-;21152:25;;-1:-1:-1;;;;;21152:25:0;;;;;;;;21038:147;:::o;20562:219::-;19953:25;19967:10;19953:13;:25::i;:::-;19945:76;;;;-1:-1:-1;;;19945:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20646:23;20660:8;20646:13;:23::i;:::-;20638:55;;;;;-1:-1:-1;;;20638:55:0;;;;;;;;;;;;-1:-1:-1;;;20638:55:0;;;;;;;;;;;;;;;20729:5;20704:22;;;:12;:22;;;;;;:30;;-1:-1:-1;;20704:30:0;;;20750:23;20717:8;;20750:23;;;20562:219;:::o;24732:94::-;24804:14;;24732:94;:::o;16556:122::-;15651:22;15662:10;15651;:22::i;:::-;15643:51;;;;;-1:-1:-1;;;15643:51:0;;;;;;;;;;;;-1:-1:-1;;;15643:51:0;;;;;;;;;;;;;;;15767:7;;-1:-1:-1;;;15767:7:0;;;;15766:8;15758:37;;;;;-1:-1:-1;;;15758:37:0;;;;;;;;;;;;-1:-1:-1;;;15758:37:0;;;;;;;;;;;;;;;16622:7;:14;;-1:-1:-1;;;;16622:14:0;-1:-1:-1;;;16622:14:0;;;16652:18;;;16659:10;16652:18;;;;;;;;;;;;;16556:122::o;14786:79::-;14851:6;;-1:-1:-1;;;;;14851:6:0;14786:79;:::o;19189:88::-;19261:8;19254:15;;;;;;;;-1:-1:-1;;19254:15:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19228:13;;19254:15;;19261:8;;19254:15;;19261:8;19254:15;;;;;;;;;;;;;;;;;;;;;;;;17803:133;15651:22;15662:10;15651;:22::i;:::-;15643:51;;;;;-1:-1:-1;;;15643:51:0;;;;;;;;;;;;-1:-1:-1;;;15643:51:0;;;;;;;;;;;;;;;17872:20;:7;17884;17872:20;:11;:20;:::i;:::-;17908;;-1:-1:-1;;;;;17908:20:0;;;;;;;;17803:133;:::o;16168:139::-;15651:22;15662:10;15651;:22::i;:::-;15643:51;;;;;-1:-1:-1;;;15643:51:0;;;;;;;;;;;;-1:-1:-1;;;15643:51:0;;;;;;;;;;;;;;;16239:22;:9;16253:7;16239:22;:13;:22;:::i;:::-;16277;;-1:-1:-1;;;;;16277:22:0;;;;;;;;16168:139;:::o;18903:186::-;15651:22;15662:10;15651;:22::i;:::-;15643:51;;;;;-1:-1:-1;;;15643:51:0;;;;;;;;;;;;-1:-1:-1;;;15643:51:0;;;;;;;;;;;;;;;18994:34;;;;:16;;:34;;;;;:::i;:::-;;19044:37;19065:15;19044:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;19044:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18903:186;:::o;27030:158::-;15651:22;15662:10;15651;:22::i;:::-;15643:51;;;;;-1:-1:-1;;;15643:51:0;;;;;;;;;;;;-1:-1:-1;;;15643:51:0;;;;;;;;;;;;;;;27103:13;:36;;-1:-1:-1;;;;;27103:36:0;;-1:-1:-1;;;;;;27103:36:0;;;;;;;;27155:25;;;;;;;;;;;;;;;;27030:158;:::o;27196:301::-;27287:13;;-1:-1:-1;;;;;27287:13:0;27279:38;;;;:63;;;27321:21;:8;-1:-1:-1;;;;;27321:19:0;;:21::i;:::-;27275:160;;;27359:13;;:64;;;-1:-1:-1;;;27359:64:0;;27391:10;27359:64;;;;-1:-1:-1;;;;;27359:64:0;;;;;;;;;;;;;;;;:13;;;;;:31;;:64;;;;;:13;;:64;;;;;;;:13;;:64;;;5:2:-1;;;;30:1;27;20:12;5:2;27359:64:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27359:64:0;;;;27275:160;27445:44;27469:8;27479:9;27445:23;:44::i;:::-;27196:301;;:::o;17687:108::-;17743:4;17767:20;:7;17779;17767:20;:11;:20;:::i;16315:147::-;15651:22;15662:10;15651;:22::i;:::-;15643:51;;;;;-1:-1:-1;;;15643:51:0;;;;;;;;;;;;-1:-1:-1;;;15643:51:0;;;;;;;;;;;;;;;16389:25;:9;16406:7;16389:25;:16;:25;:::i;:::-;16430:24;;-1:-1:-1;;;;;16430:24:0;;;;;;;;16315:147;:::o;21356:251::-;15767:7;;-1:-1:-1;;;15767:7:0;;;;15766:8;15758:37;;;;;-1:-1:-1;;;15758:37:0;;;;;;;;;;;;-1:-1:-1;;;15758:37:0;;;;;;;;;;;;;;;21527:8;20115:23;20129:8;20115:13;:23::i;:::-;20114:24;20106:58;;;;;-1:-1:-1;;;20106:58:0;;;;;;;;;;;;-1:-1:-1;;;20106:58:0;;;;;;;;;;;;;;;21548:51;21571:5;21578:3;21583:8;21593:5;21548:22;:51::i;:::-;15806:1;21356:251;;;;:::o;24834:118::-;24920:24;;24896:4;24920:24;;;:12;:24;;;;;;;;;24834:118::o;24176:96::-;24249:15;;;;24176:96;:::o;21193:155::-;15651:22;15662:10;15651;:22::i;:::-;15643:51;;;;;-1:-1:-1;;;15643:51:0;;;;;;;;;;;;-1:-1:-1;;;15643:51:0;;;;;;;;;;;;;;;21270:27;:11;21289:7;21270:27;:18;:27;:::i;:::-;21313;;-1:-1:-1;;;;;21313:27:0;;;;;;;;21193:155;:::o;19285:142::-;19342:13;19375:44;19399:19;:8;:17;:19::i;:::-;19375:16;:23;;;;;;;;;;;;;-1:-1:-1;;19375:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:16;:23;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;:::i;24960:832::-;17620:20;17629:10;17620:8;:20::i;:::-;17612:47;;;;;-1:-1:-1;;;17612:47:0;;;;;;;;;;;;-1:-1:-1;;;17612:47:0;;;;;;;;;;;;;;;25058:15;;;25050:52;;;;;-1:-1:-1;;;25050:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;25135:15;;;;;;25121:29;;;;25113:90;;;;-1:-1:-1;;;25113:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25221:24;25234:10;25221:12;:24::i;:::-;25216:472;;25262:24;;;;;;;;:12;:24;;;;;:31;;-1:-1:-1;;25262:31:0;25289:4;25262:31;;;;;;25325:14;;:21;;:14;;25289:4;25325:18;:21;:::i;:::-;25308:14;:38;;;25387:12;;-1:-1:-1;25369:30:0;25361:69;;;;;-1:-1:-1;;;25361:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;25216:472;;;25485:22;25496:10;25485;:22::i;:::-;25471:36;;:11;:36;;;25463:97;;;;-1:-1:-1;;;25463:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25598:24;25611:10;25598:12;:24::i;:::-;25583:39;;:11;:39;;;;25575:101;;;;-1:-1:-1;;;25575:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25700:19;;;;;;;;:7;:19;;;;;;;;;:33;;-1:-1:-1;;25700:33:0;;;;;;;;;25749:35;;;;;;;;;;;;;;;;;;;;;;;;24960:832;;:::o;20789:116::-;20851:4;20875:22;;;:12;:22;;;;;;;;;20789:116::o;27505:334::-;27586:4;27603:13;27619:40;27642:6;27650:8;27619:22;:40::i;:::-;27682:13;;27603:56;;-1:-1:-1;;;;;;27682:13:0;27674:38;27670:136;;27736:13;;:58;;;-1:-1:-1;;;27736:58:0;;-1:-1:-1;;;;;27736:58:0;;;;;;;;;;;;;;;;;;;;;;;:13;;;;;:30;;:58;;;;;;;;;;;;;;:13;:58;;;5:2:-1;;;;30:1;27;20:12;5:2;27736:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27736:58:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27736:58:0;;-1:-1:-1;27729:65:0;;-1:-1:-1;27729:65:0;27670:136;27823:8;27505:334;-1:-1:-1;;;27505:334:0:o;20913:117::-;20974:4;20998:24;:11;21014:7;20998:24;:15;:24;:::i;15924:116::-;15651:22;15662:10;15651;:22::i;:::-;15643:51;;;;;-1:-1:-1;;;15643:51:0;;;;;;;;;;;;-1:-1:-1;;;15643:51:0;;;;;;;;;;;;;;;16003:29;16022:9;16003:18;:29::i;20335:219::-;19953:25;19967:10;19953:13;:25::i;:::-;19945:76;;;;-1:-1:-1;;;19945:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20418:23;20432:8;20418:13;:23::i;:::-;20417:24;20409:60;;;;;-1:-1:-1;;;20409:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20480:22;;;;:12;:22;;;;;;:29;;-1:-1:-1;;20480:29:0;20505:4;20480:29;;;20525:21;20493:8;;20525:21;;;20335:219;:::o;13172:156::-;13229:4;13262:21;;;:11;:21;;;;;;-1:-1:-1;;;;;13262:21:0;13301:19;;;13172:156::o;10018:607::-;10120:35;10134:10;10146:8;10120:13;:35::i;:::-;10112:168;;;;-1:-1:-1;;;10112:168:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10344:5;-1:-1:-1;;;;;10323:26:0;:17;10331:8;10323:7;:17::i;:::-;-1:-1:-1;;;;;10323:26:0;;10315:89;;;;-1:-1:-1;;;10315:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10423:17:0;;10415:73;;;;;-1:-1:-1;;;10415:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10507:16;10514:8;10507:6;:16::i;:::-;10499:76;;;;;-1:-1:-1;;;10499:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10586:31;10596:5;10603:3;10608:8;10586:9;:31::i;1427:179::-;1507:18;1511:4;1517:7;1507:3;:18::i;:::-;1499:60;;;;;-1:-1:-1;;;1499:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1570:20:0;1593:5;1570:20;;;;;;;;;;;:28;;-1:-1:-1;;1570:28:0;;;1427:179::o;2496:139::-;2554:7;2582:6;2574:30;;;;;-1:-1:-1;;;2574:30:0;;;;;;;;;;;;-1:-1:-1;;;2574:30:0;;;;;;;;;;;;;;;2626:1;2622;:5;;;;;;;2496:139;-1:-1:-1;;;2496:139:0:o;2347:141::-;2405:7;2433:6;2425:32;;;;;-1:-1:-1;;;2425:32:0;;;;;;;;;;;;-1:-1:-1;;;2425:32:0;;;;;;;;;;;;;;;2479:1;2475;:5;;;;;;;2347:141;-1:-1:-1;;;2347:141:0:o;6964:165::-;7020:6;7050:5;;;7074:6;;;;;;;;;7066:36;;;;;-1:-1:-1;;;7066:36:0;;;;;;;;;;;;-1:-1:-1;;;7066:36:0;;;;;;;;;;;;;;1770:169;1828:7;1860:5;;;1884:6;;;;1876:36;;;;;-1:-1:-1;;;1876:36:0;;;;;;;;;;;;-1:-1:-1;;;1876:36:0;;;;;;;;;;;;;;18205:100;17620:20;17629:10;17620:8;:20::i;:::-;17612:47;;;;;-1:-1:-1;;;17612:47:0;;;;;;;;;;;;-1:-1:-1;;;17612:47:0;;;;;;;;;;;;;;;18279:18;18285:2;18289:7;18279:5;:18::i;9724:286::-;9830:48;9853:5;9860:3;9865:8;9830:48;;;;;;;;;;;;:22;:48::i;:::-;9822:135;;;;-1:-1:-1;;;9822:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9968:34;9981:5;9988:3;9993:8;9968:12;:34::i;1614:124::-;-1:-1:-1;;;;;1710:20:0;1686:4;1710:20;;;;;;;;;;;;;;;1614:124::o;1244:175::-;1322:18;1326:4;1332:7;1322:3;:18::i;:::-;1321:19;1313:60;;;;;-1:-1:-1;;;1313:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1384:20:0;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;1384:27:0;1407:4;1384:27;;;1244:175::o;335:174::-;454:20;493:8;;;335:174::o;11060:140::-;11140:52;11159:10;11171:9;11182;11140:18;:52::i;9488:228::-;9614:12;;:17;9606:53;;;;;-1:-1:-1;;;9606:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9670:38;9687:5;9694:3;9699:8;9670:16;:38::i;2643:697::-;2695:13;2721:18;;2780:6;2776:375;;-1:-1:-1;;;2803:16:0;-1:-1:-1;2834:5:0;;2776:375;;;2888:1;2904:236;2911:9;;2904:236;;2985:6;2970:10;2962:30;;-1:-1:-1;3044:2:0;3036:5;:10;3050:2;3035:17;-1:-1:-1;;;3034:35:0;3026:44;;3012:58;;;;3098:2;3089:11;;;;;;3119:5;;;;;3089:11;;-1:-1:-1;2904:236:0;;;2776:375;;3163:16;3192:3;3182:14;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;3182:14:0;87:34:-1;135:17;;-1:-1;3182:14:0;-1:-1:-1;3163:33:0;-1:-1:-1;3207:9:0;3229:75;3245:3;3241:1;:7;3229:75;;;3279:10;3290:1;3279:13;;;;;;;;;;3270:3;3274:1;3270:6;;;;;;;;;;;:22;-1:-1:-1;;;;;3270:22:0;;;;;;;;-1:-1:-1;3250:3:0;;3229:75;;;-1:-1:-1;3328:3:0;2643:697;-1:-1:-1;;;;2643:697:0:o;8443:148::-;8518:13;8575:2;8579;8558:24;;;;;;;;;;;;;;;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;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;8558:24:0;;;;;;;;;;-1:-1:-1;8558:24:0;;;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;;;8558:24:0;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;8558:24:0;;;8544:39;;8443:148;;;;:::o;11646:150::-;11728:4;11752:36;11770:6;11778:9;11752:17;:36::i;14994:190::-;15061:21;15085:7;:5;:7::i;:::-;15096:6;:18;;-1:-1:-1;;;;;;15096:18:0;-1:-1:-1;;;;;15096:18:0;;;;;;;;;15130:46;;15061:31;;-1:-1:-1;15096:18:0;15130:46;;;;;;-1:-1:-1;;15130:46:0;14994:190;;:::o;11970:250::-;12052:4;12068:13;12084:17;12092:8;12084:7;:17::i;:::-;12068:33;;12132:5;-1:-1:-1;;;;;12120:17:0;:8;-1:-1:-1;;;;;12120:17:0;;:54;;;;12166:8;-1:-1:-1;;;;;12141:33:0;:21;12153:8;12141:11;:21::i;:::-;-1:-1:-1;;;;;12141:33:0;;12120:54;:91;;;;12178:33;12195:5;12202:8;12178:16;:33::i;:::-;12112:100;11970:250;-1:-1:-1;;;;11970:250:0:o;12228:299::-;12313:24;12328:8;12313:14;:24::i;:::-;12348:21;;;;:11;:21;;;;;;;;:27;;-1:-1:-1;;;;;;12348:27:0;-1:-1:-1;;;;;12348:27:0;;;;;;;;;;12404:15;;;;:8;:15;;;;;;;:22;;:19;:22::i;:::-;-1:-1:-1;;;;;12386:15:0;;;;;;;:8;:15;;;;;;:40;;;;12453:13;;;;;;;:20;;12471:1;12453:20;:17;:20;:::i;:::-;-1:-1:-1;;;;;12437:13:0;;;;;;;:8;:13;;;;;;:36;;;;12489:30;;12510:8;;12437:13;;12489:30;;;;;;12228:299;;;:::o;12537:265::-;12612:16;12619:8;12612:6;:16::i;:::-;12611:17;12603:55;;;;;-1:-1:-1;;;12603:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12669:21;;;;:11;:21;;;;;;;;:27;;-1:-1:-1;;;;;;12669:27:0;-1:-1:-1;;;;;12669:27:0;;;;;;;;12723:13;;:8;:13;;;;;;;:20;;:17;:20::i;:::-;-1:-1:-1;;;;;12707:13:0;;;;;;:8;:13;;;;;;:36;;;;12759:35;;12785:8;;12707:13;12759:35;;12707:13;;12759:35;12537:265;;:::o;13336:420::-;13514:4;13542:16;:3;-1:-1:-1;;;;;13542:14:0;;:16::i;:::-;13537:61;;-1:-1:-1;13582:4:0;13575:11;;13537:61;13624:78;;-1:-1:-1;;;13624:78:0;;13667:10;13624:78;;;;;;-1:-1:-1;;;;;13624:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13608:13;;13624:42;;;;;;13667:10;;13679:5;;13686:8;;13696:5;;13624:78;;;;;;;;;;;13608: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;13624:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13624:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13624:78:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13624:78:0;-1:-1:-1;;;;;;13721:26:0;-1:-1:-1;;;13721:26:0;;-1:-1:-1;;13336:420:0;;;;;;:::o;11208:216::-;-1:-1:-1;;;;;11307:26:0;;;;;;;:18;:26;;;;;;;;:37;;;;;;;;;;;;;:49;;-1:-1:-1;;11307:49:0;;;;;;;;;;11372:44;;;;;;;;;;;;;;;;;11208:216;;;:::o;11808:154::-;-1:-1:-1;;;;;11917:26:0;;;11893:4;11917:26;;;:18;:26;;;;;;;;:37;;;;;;;;;;;;;;;11808:154::o;13764:174::-;13864:1;13829:23;;;:14;:23;;;;;;-1:-1:-1;;;;;13829:23:0;:37;13825:106;;13917:1;13883:23;;;:14;:23;;;;;:36;;-1:-1:-1;;;;;;13883:36:0;;;13764:174::o;1947:148::-;2005:7;2038:1;2033;:6;;2025:39;;;;;-1:-1:-1;;;2025:39:0;;;;;;;;;;;;-1:-1:-1;;;2025:39:0;;;;;;;;;;;;;;;-1:-1:-1;2082:5:0;;;1947:148::o;26574:1268::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26574:1268:0;;;-1:-1:-1;26574:1268:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;7676:136;7732:6;7759;;;7751:30;;;;;-1:-1:-1;;;7751:30:0;;;;;;;;;;;;-1:-1:-1;;;7751:30:0;;;;;;;;;;;;;;;7803:1;7799:5;;:1;:5;;;;;;7530:138;7586:6;7613;;;7605:32;;;;;-1:-1:-1;;;7605:32:0;;;;;;;;;;;;-1:-1:-1;;;7605:32:0;;;;;;;;;;;;;;;7659:1;7655:5;;:1;:5;;;;;

Swarm Source

bzzr://6b3b4f7ebc3669a9bd1825f180b7b912271e188990be2d302965d1c48aa74536
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.