ETH Price: $3,082.12 (-0.64%)
Gas: 4 Gwei

Token

Punked Coin (PCN)
 

Overview

Max Total Supply

0 PCN

Holders

122

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
101 PCN
0x269616d549d7e8eaa82dfb17028d0b212d11232a
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
PunkedCoins

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-03-15
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0; 

library Strings {
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Caller is not the owner");
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "New owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

interface IERC721Receiver {
    function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);
}

// Interface for interacting with the CryptoPunksMarket contract
interface ICryptoPunksMarket {
    function punkIndexToAddress(uint256 punkIndex) external view returns (address);
    function balanceOf(address _owner) external view returns (uint256);
}

// PunkedCoins contract inheriting from ERC165 for interface detection and Ownable for ownership management
contract PunkedCoins is ERC165, Ownable {
    // External interface used for interacting with the CryptoPunksMarket contract
    ICryptoPunksMarket private _cryptoPunksMarket;
    
    // Constants defining key parameters for ERC721 interface IDs
    bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;
    bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;
    
    uint256 private constant _MASTER_BALANCE = 10000;           // Total supply of master tokens (inherited from CryptoPunks) 
    uint256 private constant _MINT_COOLDOWN = 30 days;          // Cooldown period between minting actions
    uint256 private constant _PRICE_INCREMENT = 0.02 ether;     // Price increment for unsealing tokens

    string private _gateway;        // Base URI for token metadata
    string private _masterCID;      // Content identifier for Mater token metadata
    string private _sealedCID;      // Content identifier for sealed Mater token metadata
    string private _instanceCID;    // Content identifier for individual token metadata

    uint256 private _currentIndex = 10000;      // Tracks the current token index for minting
    uint256 private _unsealPrice = 0.1 ether;   // Initial price to unseal a token

    mapping(uint256 => address) private _tokenOwner;                            // Token ID to owner address
    mapping(address => uint256) private _ownedTokensCount;                      // Owner address to token count
    mapping(uint256 => address) private _tokenApprovals;                        // Token ID to approved address
    mapping(address => mapping(address => bool)) private _operatorApprovals;    // Owner to operator approvals
    mapping(uint256 => uint256) private _tokenMaster;                           // Token ID to its master token ID
    mapping(uint256 => uint256) private _lastMintTime;                          // Token ID to last mint time for cooldown management
    mapping(uint256 => bool) private _sealed;                                   // Token ID to sealed status

    // Events for marketplace synchronization
    event Locked(uint256 tokenId);
    event MetadataUpdate(uint256 _tokenId);
    event BatchMetadataUpdate(uint256 _fromTokenId, uint256 _toTokenId);

    // Event for logging all Ether transactions within the contract
    event EtherTransaction(address indexed sender, address indexed receiver, uint256 amount, string transactionType);

    // ERC721 events
    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);

    // Contract constructor
    constructor(address _cryptoPunksMarketAddress) {
        _cryptoPunksMarket = ICryptoPunksMarket(_cryptoPunksMarketAddress);
    }

    // Administrative functions
    function setGateway(string memory newGateway) public onlyOwner {
        _gateway = newGateway;
    }

    function setCID(string memory masterCID, string memory sealedCID, string memory instanceCID) public onlyOwner {
        _masterCID = masterCID;
        _sealedCID = sealedCID;
        _instanceCID = instanceCID;
    }

    function broadcastBatchMetadataUpdate(uint256 fromTokenId, uint256 toTokenId) public onlyOwner {
        emit BatchMetadataUpdate(fromTokenId, toTokenId);
    }  

    function initOwnershipStatus(uint256 fromTokenId, uint256 toTokenId) public onlyOwner {
        require(isMaster(toTokenId), "Non existent token");        
        for (uint256 tokenId = fromTokenId; tokenId <= toTokenId; tokenId++) {
            emit Transfer(address(0), address(0), tokenId);
        }
    }

    // ERC721, ERC721Metadata
    function name() public pure returns (string memory) {
        return "Punked Coin";
    }

    function symbol() public pure returns (string memory) {
        return "PCN";
    }

    function balanceOf(address owner) public view returns (uint256) {
        return _ownedTokensCount[owner] + _cryptoPunksMarket.balanceOf(owner) ;
    }

    function ownerOf(uint256 tokenId) public view returns (address owner) {
        if (isMaster(tokenId))
            owner =  _ownerOfMaster(tokenId);
        else
            owner = _tokenOwner[tokenId];
    }

    function tokenURI(uint256 tokenId) public view returns (string memory) {
        require(isMaster(tokenId) || _exists(tokenId), "Non existent token");

        string memory cid;
        if (isMaster(tokenId)) {
            cid = _sealed[tokenId] ? _sealedCID : _masterCID;
        } else {
            cid = _instanceCID;
        }

        string memory template = isMaster(tokenId) ? Strings.toString(tokenId) : Strings.toString(_tokenMaster[tokenId]);

        return string(abi.encodePacked(_gateway, cid, "/", template, ".json"));
    }

    // Token approval and transfer
    function approve(address to, uint256 tokenId) public {
        require(!isMaster(tokenId), "Cannot approve master");
        address owner = ownerOf(tokenId);
        require(to != owner, "Approval to current owner");
        require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "Caller is not owner nor approved for all");

        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    function getApproved(uint256 tokenId) public view returns (address) {
        require(!isMaster(tokenId), "Cannot approve master");
        require(_exists(tokenId), "Non existent token");
        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved) public {
        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    function isApprovedForAll(address owner, address operator) public view returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    function transferFrom(address from, address to, uint256 tokenId) public {
        _transfer(from, to, tokenId);        
    }

    function safeTransferFrom(address from, address to, uint256 tokenId) public {
        safeTransferFrom(from, to, tokenId, "");
    }

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, data), "Transfer to non ERC721Receiver implementer");
    }

    // Emits events to simulate the minting process for Master tokens.
    // This method is used for external platforms to recognize token ownership without altering any state.
    function broadcastCoinOwnershipStatus(uint256 tokenId) public {
        require(isMaster(tokenId), "Token is not master");        

        // Emit a Transfer event from a 0 address to the owner to mimic the minting process
        emit Transfer(address(0), _ownerOfMaster(tokenId), tokenId);
        // Emit the Locked event to indicate that the token is not tradable on marketplaces.
        emit Locked(tokenId);
    }    

    // Minting and sealing
    function mint(uint256 masterId) external {
        require(canMint(masterId), "Can not be minted");
        require(_ownerOfMaster(masterId) == _msgSender(), "Caller is not the owner");
        require(!_isContract(_msgSender()), "Only EOAs can mint");

        _mint(_msgSender(), _currentIndex);
        _tokenMaster[_currentIndex] = masterId;
        _lastMintTime[masterId] = block.timestamp;

        unchecked {
            _currentIndex += 1;
        }        

        // Seal master on every 5th token or 25% randomness
        _sealed[masterId] = _currentIndex % 5 == 0 || _random() % 4 == 0;
        emit MetadataUpdate(masterId);
    }

    function unseal(uint256 tokenId) public payable {
        require(_sealed[tokenId], "Token is not sealed");
        require(msg.value == _unsealPrice, "Exact payment required"); 
        require(!_isContract(_msgSender()), "Only EOAs can unseal");

        // Unseal the token
        _sealed[tokenId] = false;
        unchecked {
            _unsealPrice += _PRICE_INCREMENT;
        }

        emit MetadataUpdate(_tokenMaster[_currentIndex]);
        emit EtherTransaction(msg.sender, address(this), msg.value, "Unsealed");        
    }    

    function unsealPrice() public view returns (uint256) {
        return _unsealPrice;
    }    

    function canMint(uint256 masterId) public view returns (bool) {
        return !isSealed(masterId) && block.timestamp >= getNextMintTime(masterId);
    }
        
    function isMaster(uint256 tokenId) public pure returns (bool) {
        return tokenId < _MASTER_BALANCE;
    }  

    function isSealed(uint256 masterId) public view returns (bool) {
        require(isMaster(masterId), "Invalid masterId");
        return _sealed[masterId];
    }    

    function getNextMintTime(uint256 masterId) public view returns (uint256) {
        return _lastMintTime[masterId] + _MINT_COOLDOWN;
    }

    // Private and internal utility functions
    function _ownerOfMaster(uint256 masterId) private view returns (address) {
        // Obtain the owner address from the CryptoPunksMarket contract
        return _cryptoPunksMarket.punkIndexToAddress(masterId);
    }

    function _exists(uint256 tokenId) private view returns (bool) {
        return _tokenOwner[tokenId] != address(0);
    }

    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) {
        require(_exists(tokenId), "Non existent token");

        address owner = ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "Mint to the zero address");
        require(!_exists(tokenId), "Token already minted");

        unchecked {
            _ownedTokensCount[to] += 1;
        }
        _tokenOwner[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
        emit MetadataUpdate(tokenId);
    }

    function _transfer(address from, address to, uint256 tokenId) internal {
        require(!isMaster(tokenId), "Cannot transfer master");
        require(_isApprovedOrOwner(_msgSender(), tokenId), "Caller is not owner nor approved");        
        require(ownerOf(tokenId) == from, "Transfer from incorrect owner");

        // Clear approvals from the previous owner
        approve(address(0), tokenId);

        unchecked {
            _ownedTokensCount[from] -= 1;
            _ownedTokensCount[to] += 1;
        }
        _tokenOwner[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }


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

    function _random() private view returns (uint) {
        return uint(keccak256(abi.encodePacked(block.timestamp, blockhash(block.number - 1), _msgSender())));
    }

    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) {
        if (_isContract(to)) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("Transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    // Withdrawal function for contract owner
    function withdrawAll() public onlyOwner {
        uint256 amount = address(this).balance;
        require(amount > 0, "No Ether left to withdraw");

        (bool success, ) = owner().call{value: amount}("");
        require(success, "Transfer failed");
 
        emit EtherTransaction(address(this), owner(), amount, "Withdrawal");
    }     

    // Fallback and receive functions
    receive() external payable {
        emit EtherTransaction(msg.sender, address(this), msg.value, "Received");
    }

    fallback() external payable {
        emit EtherTransaction(msg.sender, address(this), msg.value, "Received");
    }

    // ERC165 Compliance
    function supportsInterface(bytes4 interfaceId) public view override returns (bool) {
        return interfaceId == _INTERFACE_ID_ERC721
            || interfaceId == _INTERFACE_ID_ERC721_METADATA
            || super.supportsInterface(interfaceId);
    }	
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_cryptoPunksMarketAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_toTokenId","type":"uint256"}],"name":"BatchMetadataUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"transactionType","type":"string"}],"name":"EtherTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Locked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"MetadataUpdate","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":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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"fromTokenId","type":"uint256"},{"internalType":"uint256","name":"toTokenId","type":"uint256"}],"name":"broadcastBatchMetadataUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"broadcastCoinOwnershipStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"masterId","type":"uint256"}],"name":"canMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"masterId","type":"uint256"}],"name":"getNextMintTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"fromTokenId","type":"uint256"},{"internalType":"uint256","name":"toTokenId","type":"uint256"}],"name":"initOwnershipStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isMaster","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"masterId","type":"uint256"}],"name":"isSealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"masterId","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"masterCID","type":"string"},{"internalType":"string","name":"sealedCID","type":"string"},{"internalType":"string","name":"instanceCID","type":"string"}],"name":"setCID","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newGateway","type":"string"}],"name":"setGateway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"unseal","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"unsealPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405261271060065567016345785d8a0000600755348015610021575f80fd5b506040516122b63803806122b6833981016040819052610040916100bd565b6100493361006e565b600180546001600160a01b0319166001600160a01b03929092169190911790556100ea565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f602082840312156100cd575f80fd5b81516001600160a01b03811681146100e3575f80fd5b9392505050565b6121bf806100f75f395ff3fe6080604052600436106101c5575f3560e01c80636352211e116100f6578063a22cb46511610094578063dc02abd111610063578063dc02abd114610595578063e44a2d70146105b4578063e985e9c5146105d3578063f2fde38b146105f257610217565b8063a22cb46514610517578063a3c6b12714610536578063b88d4fde14610557578063c87b56dd1461057657610217565b8063853828b6116100d0578063853828b61461049d5780638da5cb5b146104b157806395d89b41146104cd578063a0712d68146104f857610217565b80636352211e1461044b57806370a082311461046a578063715018a61461048957610217565b806322a268e7116101635780633eb382781161013d5780633eb38278146103cf57806342842e0e146103ee578063531144ce1461040d5780635dd871a31461042c57610217565b806322a268e71461037e57806323b872dd146103915780632c1758c1146103b057610217565b8063095ea7b31161019f578063095ea7b3146103015780630f94399b1461032257806310ddce1a146103405780631e2dae851461035f57610217565b806301ffc9a71461025a57806306fdde031461028e578063081812fc146102ca57610217565b3661021757604051309033905f8051602061214a8339815191529061020d9034815260406020820181905260089082015267149958d95a5d995960c21b606082015260800190565b60405180910390a3005b604051309033905f8051602061214a8339815191529061020d9034815260406020820181905260089082015267149958d95a5d995960c21b606082015260800190565b348015610265575f80fd5b50610279610274366004611a43565b610611565b60405190151581526020015b60405180910390f35b348015610299575f80fd5b5060408051808201909152600b81526a283ab735b2b21021b7b4b760a91b60208201525b6040516102859190611a93565b3480156102d5575f80fd5b506102e96102e4366004611aa5565b610662565b6040516001600160a01b039091168152602001610285565b34801561030c575f80fd5b5061032061031b366004611ad0565b610706565b005b34801561032d575f80fd5b506007545b604051908152602001610285565b34801561034b575f80fd5b5061032061035a366004611b9f565b610897565b34801561036a575f80fd5b50610320610379366004611c21565b6108cb565b61032061038c366004611aa5565b610911565b34801561039c575f80fd5b506103206103ab366004611c41565b610ab0565b3480156103bb575f80fd5b506102796103ca366004611aa5565b610ac0565b3480156103da575f80fd5b506103206103e9366004611aa5565b610b20565b3480156103f9575f80fd5b50610320610408366004611c41565b610bda565b348015610418575f80fd5b50610332610427366004611aa5565b610bf4565b348015610437575f80fd5b50610279610446366004611aa5565b610c10565b348015610456575f80fd5b506102e9610465366004611aa5565b610c34565b348015610475575f80fd5b50610332610484366004611c7f565b610c69565b348015610494575f80fd5b50610320610cf7565b3480156104a8575f80fd5b50610320610d0a565b3480156104bc575f80fd5b505f546001600160a01b03166102e9565b3480156104d8575f80fd5b506040805180820190915260038152622821a760e91b60208201526102bd565b348015610503575f80fd5b50610320610512366004611aa5565b610e5c565b348015610522575f80fd5b50610320610531366004611c9a565b610ff9565b348015610541575f80fd5b50610279610550366004611aa5565b6127101190565b348015610562575f80fd5b50610320610571366004611cd5565b61105d565b348015610581575f80fd5b506102bd610590366004611aa5565b611090565b3480156105a0575f80fd5b506103206105af366004611c21565b611289565b3480156105bf575f80fd5b506103206105ce366004611d50565b6112ee565b3480156105de575f80fd5b506102796105ed366004611d82565b611306565b3480156105fd575f80fd5b5061032061060c366004611c7f565b611333565b5f6001600160e01b031982166380ac58cd60e01b148061064157506001600160e01b03198216635b5e139f60e01b145b8061065c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f61066e826127101190565b156106b85760405162461bcd60e51b815260206004820152601560248201527421b0b73737ba1030b8383937bb329036b0b9ba32b960591b60448201526064015b60405180910390fd5b5f828152600860205260409020546001600160a01b03166106eb5760405162461bcd60e51b81526004016106af90611dae565b505f908152600a60205260409020546001600160a01b031690565b610711816127101190565b156107565760405162461bcd60e51b815260206004820152601560248201527421b0b73737ba1030b8383937bb329036b0b9ba32b960591b60448201526064016106af565b5f61076082610c34565b9050806001600160a01b0316836001600160a01b0316036107c35760405162461bcd60e51b815260206004820152601960248201527f417070726f76616c20746f2063757272656e74206f776e65720000000000000060448201526064016106af565b336001600160a01b03821614806107df57506107df8133611306565b61083c5760405162461bcd60e51b815260206004820152602860248201527f43616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656460448201526708199bdc88185b1b60c21b60648201526084016106af565b5f828152600a602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b61089f61139d565b60036108ab8482611e5d565b5060046108b88382611e5d565b5060056108c58282611e5d565b50505050565b6108d361139d565b60408051838152602081018390527f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c91015b60405180910390a15050565b5f818152600e602052604090205460ff166109645760405162461bcd60e51b8152602060048201526013602482015272151bdad95b881a5cc81b9bdd081cd9585b1959606a1b60448201526064016106af565b60075434146109ae5760405162461bcd60e51b8152602060048201526016602482015275115e1858dd081c185e5b595b9d081c995c5d5a5c995960521b60448201526064016106af565b6109b9335b3b151590565b156109fd5760405162461bcd60e51b815260206004820152601460248201527313db9b1e481153d05cc818d85b881d5b9cd9585b60621b60448201526064016106af565b5f818152600e60209081526040808320805460ff191690556007805466470de4df8200000190556006548352600c8252918290205491519182527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7910160405180910390a1604051309033905f8051602061214a83398151915290610aa59034815260406020820181905260089082015267155b9cd9585b195960c21b606082015260800190565b60405180910390a350565b610abb8383836113f0565b505050565b5f610acc826127101190565b610b0b5760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081b585cdd195c925960821b60448201526064016106af565b505f908152600e602052604090205460ff1690565b610b2b816127101190565b610b6d5760405162461bcd60e51b81526020600482015260136024820152722a37b5b2b71034b9903737ba1036b0b9ba32b960691b60448201526064016106af565b80610b7782611572565b6001600160a01b03165f6001600160a01b03165f8051602061216a83398151915260405160405180910390a46040518181527f032bc66be43dbccb7487781d168eb7bda224628a3b2c3388bdf69b532a3a1611906020015b60405180910390a150565b610abb83838360405180602001604052805f81525061105d565b5f818152600d602052604081205461065c9062278d0090611f31565b5f610c1a82610ac0565b15801561065c5750610c2b82610bf4565b42101592915050565b5f610c40826127101190565b15610c4e5761065c82611572565b505f908152600860205260409020546001600160a01b031690565b6001546040516370a0823160e01b81526001600160a01b0383811660048301525f9216906370a0823190602401602060405180830381865afa158015610cb1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cd59190611f44565b6001600160a01b0383165f9081526009602052604090205461065c9190611f31565b610cff61139d565b610d085f6115dd565b565b610d1261139d565b4780610d605760405162461bcd60e51b815260206004820152601960248201527f4e6f204574686572206c65667420746f2077697468647261770000000000000060448201526064016106af565b5f80546040516001600160a01b039091169083908381818185875af1925050503d805f8114610daa576040519150601f19603f3d011682016040523d82523d5f602084013e610daf565b606091505b5050905080610df25760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064016106af565b5f546001600160a01b03166001600160a01b0316306001600160a01b03165f8051602061214a83398151915284604051610e50918152604060208201819052600a908201526915da5d1a191c985dd85b60b21b606082015260800190565b60405180910390a35050565b610e6581610c10565b610ea55760405162461bcd60e51b815260206004820152601160248201527010d85b881b9bdd081899481b5a5b9d1959607a1b60448201526064016106af565b33610eaf82611572565b6001600160a01b031614610eff5760405162461bcd60e51b815260206004820152601760248201527621b0b63632b91034b9903737ba103a34329037bbb732b960491b60448201526064016106af565b610f08336109b3565b15610f4a5760405162461bcd60e51b815260206004820152601260248201527113db9b1e481153d05cc818d85b881b5a5b9d60721b60448201526064016106af565b610f563360065461162c565b600680545f908152600c60209081526040808320859055848352600d9091529020429055805460010190819055610f8f90600590611f6f565b1580610fac57506004610fa0611760565b610faa9190611f6f565b155b5f828152600e6020908152604091829020805460ff191693151593909317909255518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79101610bcf565b335f818152600b602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319101610e50565b6110688484846113f0565b611074848484846117b4565b6108c55760405162461bcd60e51b81526004016106af90611f82565b606061109d826127101190565b806110bd57505f828152600860205260409020546001600160a01b031615155b6110d95760405162461bcd60e51b81526004016106af90611dae565b60606110e6836127101190565b15611198575f838152600e602052604090205460ff1661110757600361110a565b60045b805461111590611dda565b80601f016020809104026020016040519081016040528092919081815260200182805461114190611dda565b801561118c5780601f106111635761010080835404028352916020019161118c565b820191905f5260205f20905b81548152906001019060200180831161116f57829003601f168201915b50505050509050611224565b600580546111a590611dda565b80601f01602080910402602001604051908101604052809291908181526020018280546111d190611dda565b801561121c5780601f106111f35761010080835404028352916020019161121c565b820191905f5260205f20905b8154815290600101906020018083116111ff57829003601f168201915b505050505090505b5f611230846127101190565b611250575f848152600c602052604090205461124b906118a9565b611259565b611259846118a9565b90506002828260405160200161127193929190611fe3565b60405160208183030381529060405292505050919050565b61129161139d565b61129c816127101190565b6112b85760405162461bcd60e51b81526004016106af90611dae565b815b818111610abb5760405181905f9081905f8051602061216a833981519152908290a4806112e681612085565b9150506112ba565b6112f661139d565b60026113028282611e5d565b5050565b6001600160a01b039182165f908152600b6020908152604080832093909416825291909152205460ff1690565b61133b61139d565b6001600160a01b0381166113915760405162461bcd60e51b815260206004820152601d60248201527f4e6577206f776e657220697320746865207a65726f206164647265737300000060448201526064016106af565b61139a816115dd565b50565b5f546001600160a01b03163314610d085760405162461bcd60e51b815260206004820152601760248201527621b0b63632b91034b9903737ba103a34329037bbb732b960491b60448201526064016106af565b6113fb816127101190565b156114415760405162461bcd60e51b815260206004820152601660248201527521b0b73737ba103a3930b739b332b91036b0b9ba32b960511b60448201526064016106af565b61144b33826119a6565b6114975760405162461bcd60e51b815260206004820181905260248201527f43616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656460448201526064016106af565b826001600160a01b03166114aa82610c34565b6001600160a01b0316146115005760405162461bcd60e51b815260206004820152601d60248201527f5472616e736665722066726f6d20696e636f7272656374206f776e657200000060448201526064016106af565b61150a5f82610706565b6001600160a01b038084165f81815260096020908152604080832080545f1901905593861680835284832080546001019055858352600890915283822080546001600160a01b031916821790559251849392915f8051602061216a83398151915291a4505050565b600154604051630b02f02d60e31b8152600481018390525f916001600160a01b031690635817816890602401602060405180830381865afa1580156115b9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061065c919061209d565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0382166116825760405162461bcd60e51b815260206004820152601860248201527f4d696e7420746f20746865207a65726f2061646472657373000000000000000060448201526064016106af565b5f818152600860205260409020546001600160a01b0316156116dd5760405162461bcd60e51b8152602060048201526014602482015273151bdad95b88185b1c9958591e481b5a5b9d195960621b60448201526064016106af565b6001600160a01b0382165f81815260096020908152604080832080546001019055848352600890915280822080546001600160a01b0319168417905551839291905f8051602061216a833981519152908290a46040518181527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce790602001610905565b5f4261176d6001436120b8565b6040805160208082019490945291408282015233606090811b6bffffffffffffffffffffffff19169083015280516054818403018152607490920190528051910120919050565b5f833b1561189d57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906117ee9033908990889088906004016120cb565b6020604051808303815f875af1925050508015611828575060408051601f3d908101601f1916820190925261182591810190612107565b60015b611883573d808015611855576040519150601f19603f3d011682016040523d82523d5f602084013e61185a565b606091505b5080515f0361187b5760405162461bcd60e51b81526004016106af90611f82565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506118a1565b5060015b949350505050565b6060815f036118cf5750506040805180820190915260018152600360fc1b602082015290565b815f5b81156118f857806118e281612085565b91506118f19050600a83612122565b91506118d2565b5f8167ffffffffffffffff81111561191257611912611afa565b6040519080825280601f01601f19166020018201604052801561193c576020820181803683370190505b5090505b84156118a1576119516001836120b8565b915061195e600a86611f6f565b611969906030611f31565b60f81b81838151811061197e5761197e612135565b60200101906001600160f81b03191690815f1a90535061199f600a86612122565b9450611940565b5f818152600860205260408120546001600160a01b03166119d95760405162461bcd60e51b81526004016106af90611dae565b5f6119e383610c34565b9050806001600160a01b0316846001600160a01b03161480611a1e5750836001600160a01b0316611a1384610662565b6001600160a01b0316145b806118a157506118a18185611306565b6001600160e01b03198116811461139a575f80fd5b5f60208284031215611a53575f80fd5b8135611a5e81611a2e565b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611a5e6020830184611a65565b5f60208284031215611ab5575f80fd5b5035919050565b6001600160a01b038116811461139a575f80fd5b5f8060408385031215611ae1575f80fd5b8235611aec81611abc565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b5f67ffffffffffffffff80841115611b2857611b28611afa565b604051601f8501601f19908116603f01168101908282118183101715611b5057611b50611afa565b81604052809350858152868686011115611b68575f80fd5b858560208301375f602087830101525050509392505050565b5f82601f830112611b90575f80fd5b611a5e83833560208501611b0e565b5f805f60608486031215611bb1575f80fd5b833567ffffffffffffffff80821115611bc8575f80fd5b611bd487838801611b81565b94506020860135915080821115611be9575f80fd5b611bf587838801611b81565b93506040860135915080821115611c0a575f80fd5b50611c1786828701611b81565b9150509250925092565b5f8060408385031215611c32575f80fd5b50508035926020909101359150565b5f805f60608486031215611c53575f80fd5b8335611c5e81611abc565b92506020840135611c6e81611abc565b929592945050506040919091013590565b5f60208284031215611c8f575f80fd5b8135611a5e81611abc565b5f8060408385031215611cab575f80fd5b8235611cb681611abc565b915060208301358015158114611cca575f80fd5b809150509250929050565b5f805f8060808587031215611ce8575f80fd5b8435611cf381611abc565b93506020850135611d0381611abc565b925060408501359150606085013567ffffffffffffffff811115611d25575f80fd5b8501601f81018713611d35575f80fd5b611d4487823560208401611b0e565b91505092959194509250565b5f60208284031215611d60575f80fd5b813567ffffffffffffffff811115611d76575f80fd5b6118a184828501611b81565b5f8060408385031215611d93575f80fd5b8235611d9e81611abc565b91506020830135611cca81611abc565b6020808252601290820152712737b71032bc34b9ba32b73a103a37b5b2b760711b604082015260600190565b600181811c90821680611dee57607f821691505b602082108103611e0c57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610abb57805f5260205f20601f840160051c81016020851015611e375750805b601f840160051c820191505b81811015611e56575f8155600101611e43565b5050505050565b815167ffffffffffffffff811115611e7757611e77611afa565b611e8b81611e858454611dda565b84611e12565b602080601f831160018114611ebe575f8415611ea75750858301515b5f19600386901b1c1916600185901b178555611f15565b5f85815260208120601f198616915b82811015611eec57888601518255948401946001909101908401611ecd565b5085821015611f0957878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561065c5761065c611f1d565b5f60208284031215611f54575f80fd5b5051919050565b634e487b7160e01b5f52601260045260245ffd5b5f82611f7d57611f7d611f5b565b500690565b6020808252602a908201527f5472616e7366657220746f206e6f6e204552433732315265636569766572206960408201526936b83632b6b2b73a32b960b11b606082015260800190565b5f81518060208401855e5f93019283525090919050565b5f808554611ff081611dda565b60018281168015612008576001811461201d57612049565b60ff1984168752821515830287019450612049565b895f526020805f205f5b858110156120405781548a820152908401908201612027565b50505082870194505b505050506120578186611fcc565b9050602f60f81b815261206d6001820185611fcc565b64173539b7b760d91b81526005019695505050505050565b5f6001820161209657612096611f1d565b5060010190565b5f602082840312156120ad575f80fd5b8151611a5e81611abc565b8181038181111561065c5761065c611f1d565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f906120fd90830184611a65565b9695505050505050565b5f60208284031215612117575f80fd5b8151611a5e81611a2e565b5f8261213057612130611f5b565b500490565b634e487b7160e01b5f52603260045260245ffdfe67f51473f47c77d02fc86dfb06bf8073d8b31d095abf615ac54adca92a59c3adddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220f8bcd2607a4feccf268974aae94433c07fbf593b52fd018d8dd47fb60427d81c64736f6c63430008190033000000000000000000000000b47e3cd837ddf8e4c57f05d70ab865de6e193bbb

Deployed Bytecode

0x6080604052600436106101c5575f3560e01c80636352211e116100f6578063a22cb46511610094578063dc02abd111610063578063dc02abd114610595578063e44a2d70146105b4578063e985e9c5146105d3578063f2fde38b146105f257610217565b8063a22cb46514610517578063a3c6b12714610536578063b88d4fde14610557578063c87b56dd1461057657610217565b8063853828b6116100d0578063853828b61461049d5780638da5cb5b146104b157806395d89b41146104cd578063a0712d68146104f857610217565b80636352211e1461044b57806370a082311461046a578063715018a61461048957610217565b806322a268e7116101635780633eb382781161013d5780633eb38278146103cf57806342842e0e146103ee578063531144ce1461040d5780635dd871a31461042c57610217565b806322a268e71461037e57806323b872dd146103915780632c1758c1146103b057610217565b8063095ea7b31161019f578063095ea7b3146103015780630f94399b1461032257806310ddce1a146103405780631e2dae851461035f57610217565b806301ffc9a71461025a57806306fdde031461028e578063081812fc146102ca57610217565b3661021757604051309033905f8051602061214a8339815191529061020d9034815260406020820181905260089082015267149958d95a5d995960c21b606082015260800190565b60405180910390a3005b604051309033905f8051602061214a8339815191529061020d9034815260406020820181905260089082015267149958d95a5d995960c21b606082015260800190565b348015610265575f80fd5b50610279610274366004611a43565b610611565b60405190151581526020015b60405180910390f35b348015610299575f80fd5b5060408051808201909152600b81526a283ab735b2b21021b7b4b760a91b60208201525b6040516102859190611a93565b3480156102d5575f80fd5b506102e96102e4366004611aa5565b610662565b6040516001600160a01b039091168152602001610285565b34801561030c575f80fd5b5061032061031b366004611ad0565b610706565b005b34801561032d575f80fd5b506007545b604051908152602001610285565b34801561034b575f80fd5b5061032061035a366004611b9f565b610897565b34801561036a575f80fd5b50610320610379366004611c21565b6108cb565b61032061038c366004611aa5565b610911565b34801561039c575f80fd5b506103206103ab366004611c41565b610ab0565b3480156103bb575f80fd5b506102796103ca366004611aa5565b610ac0565b3480156103da575f80fd5b506103206103e9366004611aa5565b610b20565b3480156103f9575f80fd5b50610320610408366004611c41565b610bda565b348015610418575f80fd5b50610332610427366004611aa5565b610bf4565b348015610437575f80fd5b50610279610446366004611aa5565b610c10565b348015610456575f80fd5b506102e9610465366004611aa5565b610c34565b348015610475575f80fd5b50610332610484366004611c7f565b610c69565b348015610494575f80fd5b50610320610cf7565b3480156104a8575f80fd5b50610320610d0a565b3480156104bc575f80fd5b505f546001600160a01b03166102e9565b3480156104d8575f80fd5b506040805180820190915260038152622821a760e91b60208201526102bd565b348015610503575f80fd5b50610320610512366004611aa5565b610e5c565b348015610522575f80fd5b50610320610531366004611c9a565b610ff9565b348015610541575f80fd5b50610279610550366004611aa5565b6127101190565b348015610562575f80fd5b50610320610571366004611cd5565b61105d565b348015610581575f80fd5b506102bd610590366004611aa5565b611090565b3480156105a0575f80fd5b506103206105af366004611c21565b611289565b3480156105bf575f80fd5b506103206105ce366004611d50565b6112ee565b3480156105de575f80fd5b506102796105ed366004611d82565b611306565b3480156105fd575f80fd5b5061032061060c366004611c7f565b611333565b5f6001600160e01b031982166380ac58cd60e01b148061064157506001600160e01b03198216635b5e139f60e01b145b8061065c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f61066e826127101190565b156106b85760405162461bcd60e51b815260206004820152601560248201527421b0b73737ba1030b8383937bb329036b0b9ba32b960591b60448201526064015b60405180910390fd5b5f828152600860205260409020546001600160a01b03166106eb5760405162461bcd60e51b81526004016106af90611dae565b505f908152600a60205260409020546001600160a01b031690565b610711816127101190565b156107565760405162461bcd60e51b815260206004820152601560248201527421b0b73737ba1030b8383937bb329036b0b9ba32b960591b60448201526064016106af565b5f61076082610c34565b9050806001600160a01b0316836001600160a01b0316036107c35760405162461bcd60e51b815260206004820152601960248201527f417070726f76616c20746f2063757272656e74206f776e65720000000000000060448201526064016106af565b336001600160a01b03821614806107df57506107df8133611306565b61083c5760405162461bcd60e51b815260206004820152602860248201527f43616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656460448201526708199bdc88185b1b60c21b60648201526084016106af565b5f828152600a602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b61089f61139d565b60036108ab8482611e5d565b5060046108b88382611e5d565b5060056108c58282611e5d565b50505050565b6108d361139d565b60408051838152602081018390527f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c91015b60405180910390a15050565b5f818152600e602052604090205460ff166109645760405162461bcd60e51b8152602060048201526013602482015272151bdad95b881a5cc81b9bdd081cd9585b1959606a1b60448201526064016106af565b60075434146109ae5760405162461bcd60e51b8152602060048201526016602482015275115e1858dd081c185e5b595b9d081c995c5d5a5c995960521b60448201526064016106af565b6109b9335b3b151590565b156109fd5760405162461bcd60e51b815260206004820152601460248201527313db9b1e481153d05cc818d85b881d5b9cd9585b60621b60448201526064016106af565b5f818152600e60209081526040808320805460ff191690556007805466470de4df8200000190556006548352600c8252918290205491519182527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7910160405180910390a1604051309033905f8051602061214a83398151915290610aa59034815260406020820181905260089082015267155b9cd9585b195960c21b606082015260800190565b60405180910390a350565b610abb8383836113f0565b505050565b5f610acc826127101190565b610b0b5760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081b585cdd195c925960821b60448201526064016106af565b505f908152600e602052604090205460ff1690565b610b2b816127101190565b610b6d5760405162461bcd60e51b81526020600482015260136024820152722a37b5b2b71034b9903737ba1036b0b9ba32b960691b60448201526064016106af565b80610b7782611572565b6001600160a01b03165f6001600160a01b03165f8051602061216a83398151915260405160405180910390a46040518181527f032bc66be43dbccb7487781d168eb7bda224628a3b2c3388bdf69b532a3a1611906020015b60405180910390a150565b610abb83838360405180602001604052805f81525061105d565b5f818152600d602052604081205461065c9062278d0090611f31565b5f610c1a82610ac0565b15801561065c5750610c2b82610bf4565b42101592915050565b5f610c40826127101190565b15610c4e5761065c82611572565b505f908152600860205260409020546001600160a01b031690565b6001546040516370a0823160e01b81526001600160a01b0383811660048301525f9216906370a0823190602401602060405180830381865afa158015610cb1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cd59190611f44565b6001600160a01b0383165f9081526009602052604090205461065c9190611f31565b610cff61139d565b610d085f6115dd565b565b610d1261139d565b4780610d605760405162461bcd60e51b815260206004820152601960248201527f4e6f204574686572206c65667420746f2077697468647261770000000000000060448201526064016106af565b5f80546040516001600160a01b039091169083908381818185875af1925050503d805f8114610daa576040519150601f19603f3d011682016040523d82523d5f602084013e610daf565b606091505b5050905080610df25760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064016106af565b5f546001600160a01b03166001600160a01b0316306001600160a01b03165f8051602061214a83398151915284604051610e50918152604060208201819052600a908201526915da5d1a191c985dd85b60b21b606082015260800190565b60405180910390a35050565b610e6581610c10565b610ea55760405162461bcd60e51b815260206004820152601160248201527010d85b881b9bdd081899481b5a5b9d1959607a1b60448201526064016106af565b33610eaf82611572565b6001600160a01b031614610eff5760405162461bcd60e51b815260206004820152601760248201527621b0b63632b91034b9903737ba103a34329037bbb732b960491b60448201526064016106af565b610f08336109b3565b15610f4a5760405162461bcd60e51b815260206004820152601260248201527113db9b1e481153d05cc818d85b881b5a5b9d60721b60448201526064016106af565b610f563360065461162c565b600680545f908152600c60209081526040808320859055848352600d9091529020429055805460010190819055610f8f90600590611f6f565b1580610fac57506004610fa0611760565b610faa9190611f6f565b155b5f828152600e6020908152604091829020805460ff191693151593909317909255518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79101610bcf565b335f818152600b602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319101610e50565b6110688484846113f0565b611074848484846117b4565b6108c55760405162461bcd60e51b81526004016106af90611f82565b606061109d826127101190565b806110bd57505f828152600860205260409020546001600160a01b031615155b6110d95760405162461bcd60e51b81526004016106af90611dae565b60606110e6836127101190565b15611198575f838152600e602052604090205460ff1661110757600361110a565b60045b805461111590611dda565b80601f016020809104026020016040519081016040528092919081815260200182805461114190611dda565b801561118c5780601f106111635761010080835404028352916020019161118c565b820191905f5260205f20905b81548152906001019060200180831161116f57829003601f168201915b50505050509050611224565b600580546111a590611dda565b80601f01602080910402602001604051908101604052809291908181526020018280546111d190611dda565b801561121c5780601f106111f35761010080835404028352916020019161121c565b820191905f5260205f20905b8154815290600101906020018083116111ff57829003601f168201915b505050505090505b5f611230846127101190565b611250575f848152600c602052604090205461124b906118a9565b611259565b611259846118a9565b90506002828260405160200161127193929190611fe3565b60405160208183030381529060405292505050919050565b61129161139d565b61129c816127101190565b6112b85760405162461bcd60e51b81526004016106af90611dae565b815b818111610abb5760405181905f9081905f8051602061216a833981519152908290a4806112e681612085565b9150506112ba565b6112f661139d565b60026113028282611e5d565b5050565b6001600160a01b039182165f908152600b6020908152604080832093909416825291909152205460ff1690565b61133b61139d565b6001600160a01b0381166113915760405162461bcd60e51b815260206004820152601d60248201527f4e6577206f776e657220697320746865207a65726f206164647265737300000060448201526064016106af565b61139a816115dd565b50565b5f546001600160a01b03163314610d085760405162461bcd60e51b815260206004820152601760248201527621b0b63632b91034b9903737ba103a34329037bbb732b960491b60448201526064016106af565b6113fb816127101190565b156114415760405162461bcd60e51b815260206004820152601660248201527521b0b73737ba103a3930b739b332b91036b0b9ba32b960511b60448201526064016106af565b61144b33826119a6565b6114975760405162461bcd60e51b815260206004820181905260248201527f43616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656460448201526064016106af565b826001600160a01b03166114aa82610c34565b6001600160a01b0316146115005760405162461bcd60e51b815260206004820152601d60248201527f5472616e736665722066726f6d20696e636f7272656374206f776e657200000060448201526064016106af565b61150a5f82610706565b6001600160a01b038084165f81815260096020908152604080832080545f1901905593861680835284832080546001019055858352600890915283822080546001600160a01b031916821790559251849392915f8051602061216a83398151915291a4505050565b600154604051630b02f02d60e31b8152600481018390525f916001600160a01b031690635817816890602401602060405180830381865afa1580156115b9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061065c919061209d565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0382166116825760405162461bcd60e51b815260206004820152601860248201527f4d696e7420746f20746865207a65726f2061646472657373000000000000000060448201526064016106af565b5f818152600860205260409020546001600160a01b0316156116dd5760405162461bcd60e51b8152602060048201526014602482015273151bdad95b88185b1c9958591e481b5a5b9d195960621b60448201526064016106af565b6001600160a01b0382165f81815260096020908152604080832080546001019055848352600890915280822080546001600160a01b0319168417905551839291905f8051602061216a833981519152908290a46040518181527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce790602001610905565b5f4261176d6001436120b8565b6040805160208082019490945291408282015233606090811b6bffffffffffffffffffffffff19169083015280516054818403018152607490920190528051910120919050565b5f833b1561189d57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906117ee9033908990889088906004016120cb565b6020604051808303815f875af1925050508015611828575060408051601f3d908101601f1916820190925261182591810190612107565b60015b611883573d808015611855576040519150601f19603f3d011682016040523d82523d5f602084013e61185a565b606091505b5080515f0361187b5760405162461bcd60e51b81526004016106af90611f82565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506118a1565b5060015b949350505050565b6060815f036118cf5750506040805180820190915260018152600360fc1b602082015290565b815f5b81156118f857806118e281612085565b91506118f19050600a83612122565b91506118d2565b5f8167ffffffffffffffff81111561191257611912611afa565b6040519080825280601f01601f19166020018201604052801561193c576020820181803683370190505b5090505b84156118a1576119516001836120b8565b915061195e600a86611f6f565b611969906030611f31565b60f81b81838151811061197e5761197e612135565b60200101906001600160f81b03191690815f1a90535061199f600a86612122565b9450611940565b5f818152600860205260408120546001600160a01b03166119d95760405162461bcd60e51b81526004016106af90611dae565b5f6119e383610c34565b9050806001600160a01b0316846001600160a01b03161480611a1e5750836001600160a01b0316611a1384610662565b6001600160a01b0316145b806118a157506118a18185611306565b6001600160e01b03198116811461139a575f80fd5b5f60208284031215611a53575f80fd5b8135611a5e81611a2e565b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611a5e6020830184611a65565b5f60208284031215611ab5575f80fd5b5035919050565b6001600160a01b038116811461139a575f80fd5b5f8060408385031215611ae1575f80fd5b8235611aec81611abc565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b5f67ffffffffffffffff80841115611b2857611b28611afa565b604051601f8501601f19908116603f01168101908282118183101715611b5057611b50611afa565b81604052809350858152868686011115611b68575f80fd5b858560208301375f602087830101525050509392505050565b5f82601f830112611b90575f80fd5b611a5e83833560208501611b0e565b5f805f60608486031215611bb1575f80fd5b833567ffffffffffffffff80821115611bc8575f80fd5b611bd487838801611b81565b94506020860135915080821115611be9575f80fd5b611bf587838801611b81565b93506040860135915080821115611c0a575f80fd5b50611c1786828701611b81565b9150509250925092565b5f8060408385031215611c32575f80fd5b50508035926020909101359150565b5f805f60608486031215611c53575f80fd5b8335611c5e81611abc565b92506020840135611c6e81611abc565b929592945050506040919091013590565b5f60208284031215611c8f575f80fd5b8135611a5e81611abc565b5f8060408385031215611cab575f80fd5b8235611cb681611abc565b915060208301358015158114611cca575f80fd5b809150509250929050565b5f805f8060808587031215611ce8575f80fd5b8435611cf381611abc565b93506020850135611d0381611abc565b925060408501359150606085013567ffffffffffffffff811115611d25575f80fd5b8501601f81018713611d35575f80fd5b611d4487823560208401611b0e565b91505092959194509250565b5f60208284031215611d60575f80fd5b813567ffffffffffffffff811115611d76575f80fd5b6118a184828501611b81565b5f8060408385031215611d93575f80fd5b8235611d9e81611abc565b91506020830135611cca81611abc565b6020808252601290820152712737b71032bc34b9ba32b73a103a37b5b2b760711b604082015260600190565b600181811c90821680611dee57607f821691505b602082108103611e0c57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610abb57805f5260205f20601f840160051c81016020851015611e375750805b601f840160051c820191505b81811015611e56575f8155600101611e43565b5050505050565b815167ffffffffffffffff811115611e7757611e77611afa565b611e8b81611e858454611dda565b84611e12565b602080601f831160018114611ebe575f8415611ea75750858301515b5f19600386901b1c1916600185901b178555611f15565b5f85815260208120601f198616915b82811015611eec57888601518255948401946001909101908401611ecd565b5085821015611f0957878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561065c5761065c611f1d565b5f60208284031215611f54575f80fd5b5051919050565b634e487b7160e01b5f52601260045260245ffd5b5f82611f7d57611f7d611f5b565b500690565b6020808252602a908201527f5472616e7366657220746f206e6f6e204552433732315265636569766572206960408201526936b83632b6b2b73a32b960b11b606082015260800190565b5f81518060208401855e5f93019283525090919050565b5f808554611ff081611dda565b60018281168015612008576001811461201d57612049565b60ff1984168752821515830287019450612049565b895f526020805f205f5b858110156120405781548a820152908401908201612027565b50505082870194505b505050506120578186611fcc565b9050602f60f81b815261206d6001820185611fcc565b64173539b7b760d91b81526005019695505050505050565b5f6001820161209657612096611f1d565b5060010190565b5f602082840312156120ad575f80fd5b8151611a5e81611abc565b8181038181111561065c5761065c611f1d565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f906120fd90830184611a65565b9695505050505050565b5f60208284031215612117575f80fd5b8151611a5e81611a2e565b5f8261213057612130611f5b565b500490565b634e487b7160e01b5f52603260045260245ffdfe67f51473f47c77d02fc86dfb06bf8073d8b31d095abf615ac54adca92a59c3adddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220f8bcd2607a4feccf268974aae94433c07fbf593b52fd018d8dd47fb60427d81c64736f6c63430008190033

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

000000000000000000000000b47e3cd837ddf8e4c57f05d70ab865de6e193bbb

-----Decoded View---------------
Arg [0] : _cryptoPunksMarketAddress (address): 0xb47e3cd837dDF8e4c57F05d70Ab865de6e193BBB

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


Deployed Bytecode Sourcemap

2956:13071:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15531:66;;15568:4;;15548:10;;-1:-1:-1;;;;;;;;;;;15531:66:0;;;15575:9;226:25:1;;287:2;282;267:18;;260:30;;;326:1;306:18;;;299:29;-1:-1:-1;;;359:2:1;344:18;;337:38;407:3;392:19;;14:403;15531:66:0;;;;;;;;2956:13071;;15657:66;;15694:4;;15674:10;;-1:-1:-1;;;;;;;;;;;15657:66:0;;;15701:9;226:25:1;;287:2;282;267:18;;260:30;;;326:1;306:18;;;299:29;-1:-1:-1;;;359:2:1;344:18;;337:38;407:3;392:19;;14:403;15765:258:0;;;;;;;;;;-1:-1:-1;15765:258:0;;;;;:::i;:::-;;:::i;:::-;;;973:14:1;;966:22;948:41;;936:2;921:18;15765:258:0;;;;;;;;6784:91;;;;;;;;;;-1:-1:-1;6847:20:0;;;;;;;;;;;;-1:-1:-1;;;6847:20:0;;;;6784:91;;;;;;;:::i;8418:239::-;;;;;;;;;;-1:-1:-1;8418:239:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1890:32:1;;;1872:51;;1860:2;1845:18;8418:239:0;1726:203:1;7958:452:0;;;;;;;;;;-1:-1:-1;7958:452:0;;;;;:::i;:::-;;:::i;:::-;;11455:91;;;;;;;;;;-1:-1:-1;11526:12:0;;11455:91;;;2536:25:1;;;2524:2;2509:18;11455:91:0;2390:177:1;6029:221:0;;;;;;;;;;-1:-1:-1;6029:221:0;;;;;:::i;:::-;;:::i;6258:162::-;;;;;;;;;;-1:-1:-1;6258:162:0;;;;;:::i;:::-;;:::i;10890:553::-;;;;;;:::i;:::-;;:::i;9031:127::-;;;;;;;;;;-1:-1:-1;9031:127:0;;;;;:::i;:::-;;:::i;11852:164::-;;;;;;;;;;-1:-1:-1;11852:164:0;;;;;:::i;:::-;;:::i;9751:428::-;;;;;;;;;;-1:-1:-1;9751:428:0;;;;;:::i;:::-;;:::i;9166:134::-;;;;;;;;;;-1:-1:-1;9166:134:0;;;;;:::i;:::-;;:::i;12028:139::-;;;;;;;;;;-1:-1:-1;12028:139:0;;;;;:::i;:::-;;:::i;11558:155::-;;;;;;;;;;-1:-1:-1;11558:155:0;;;;;:::i;:::-;;:::i;7137:214::-;;;;;;;;;;-1:-1:-1;7137:214:0;;;;;:::i;:::-;;:::i;6976:153::-;;;;;;;;;;-1:-1:-1;6976:153:0;;;;;:::i;:::-;;:::i;1600:103::-;;;;;;;;;;;;;:::i;15090:346::-;;;;;;;;;;;;;:::i;1374:87::-;;;;;;;;;;-1:-1:-1;1420:7:0;1447:6;-1:-1:-1;;;;;1447:6:0;1374:87;;6883:85;;;;;;;;;;-1:-1:-1;6948:12:0;;;;;;;;;;;;-1:-1:-1;;;6948:12:0;;;;6883:85;;10219:663;;;;;;;;;;-1:-1:-1;10219:663:0;;;;;:::i;:::-;;:::i;8665:203::-;;;;;;;;;;-1:-1:-1;8665:203:0;;;;;:::i;:::-;;:::i;11729:113::-;;;;;;;;;;-1:-1:-1;11729:113:0;;;;;:::i;:::-;3398:5;-1:-1:-1;11809:25:0;11729:113;9308:255;;;;;;;;;;-1:-1:-1;9308:255:0;;;;;:::i;:::-;;:::i;7359:555::-;;;;;;;;;;-1:-1:-1;7359:555:0;;;;;:::i;:::-;;:::i;6430:315::-;;;;;;;;;;-1:-1:-1;6430:315:0;;;;;:::i;:::-;;:::i;5918:103::-;;;;;;;;;;-1:-1:-1;5918:103:0;;;;;:::i;:::-;;:::i;8876:147::-;;;;;;;;;;-1:-1:-1;8876:147:0;;;;;:::i;:::-;;:::i;1711:192::-;;;;;;;;;;-1:-1:-1;1711:192:0;;;;;:::i;:::-;;:::i;15765:258::-;15842:4;-1:-1:-1;;;;;;15866:35:0;;-1:-1:-1;;;15866:35:0;;:96;;-1:-1:-1;;;;;;;15918:44:0;;-1:-1:-1;;;15918:44:0;15866:96;:149;;;-1:-1:-1;;;;;;;;;;2369:40:0;;;15979:36;15859:156;15765:258;-1:-1:-1;;15765:258:0:o;8418:239::-;8477:7;8506:17;8515:7;3398:5;-1:-1:-1;11809:25:0;11729:113;8506:17;8505:18;8497:52;;;;-1:-1:-1;;;8497:52:0;;7425:2:1;8497:52:0;;;7407:21:1;7464:2;7444:18;;;7437:30;-1:-1:-1;;;7483:18:1;;;7476:51;7544:18;;8497:52:0;;;;;;;;;12505:4;12529:20;;;:11;:20;;;;;;-1:-1:-1;;;;;12529:20:0;8560:47;;;;-1:-1:-1;;;8560:47:0;;;;;;;:::i;:::-;-1:-1:-1;8625:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;8625:24:0;;8418:239::o;7958:452::-;8031:17;8040:7;3398:5;-1:-1:-1;11809:25:0;11729:113;8031:17;8030:18;8022:52;;;;-1:-1:-1;;;8022:52:0;;7425:2:1;8022:52:0;;;7407:21:1;7464:2;7444:18;;;7437:30;-1:-1:-1;;;7483:18:1;;;7476:51;7544:18;;8022:52:0;7223:345:1;8022:52:0;8085:13;8101:16;8109:7;8101;:16::i;:::-;8085:32;;8142:5;-1:-1:-1;;;;;8136:11:0;:2;-1:-1:-1;;;;;8136:11:0;;8128:49;;;;-1:-1:-1;;;8128:49:0;;8122:2:1;8128:49:0;;;8104:21:1;8161:2;8141:18;;;8134:30;8200:27;8180:18;;;8173:55;8245:18;;8128:49:0;7920:349:1;8128:49:0;927:10;-1:-1:-1;;;;;8196:21:0;;;;:62;;-1:-1:-1;8221:37:0;8238:5;927:10;8876:147;:::i;8221:37::-;8188:128;;;;-1:-1:-1;;;8188:128:0;;8476:2:1;8188:128:0;;;8458:21:1;8515:2;8495:18;;;8488:30;8554:34;8534:18;;;8527:62;-1:-1:-1;;;8605:18:1;;;8598:38;8653:19;;8188:128:0;8274:404:1;8188:128:0;8329:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;8329:29:0;-1:-1:-1;;;;;8329:29:0;;;;;;;;;8374:28;;8329:24;;8374:28;;;;;;;8011:399;7958:452;;:::o;6029:221::-;1333:13;:11;:13::i;:::-;6150:10:::1;:22;6163:9:::0;6150:10;:22:::1;:::i;:::-;-1:-1:-1::0;6183:10:0::1;:22;6196:9:::0;6183:10;:22:::1;:::i;:::-;-1:-1:-1::0;6216:12:0::1;:26;6231:11:::0;6216:12;:26:::1;:::i;:::-;;6029:221:::0;;;:::o;6258:162::-;1333:13;:11;:13::i;:::-;6369:43:::1;::::0;;11412:25:1;;;11468:2;11453:18;;11446:34;;;6369:43:0::1;::::0;11385:18:1;6369:43:0::1;;;;;;;;6258:162:::0;;:::o;10890:553::-;10957:16;;;;:7;:16;;;;;;;;10949:48;;;;-1:-1:-1;;;10949:48:0;;11693:2:1;10949:48:0;;;11675:21:1;11732:2;11712:18;;;11705:30;-1:-1:-1;;;11751:18:1;;;11744:49;11810:18;;10949:48:0;11491:343:1;10949:48:0;11029:12;;11016:9;:25;11008:60;;;;-1:-1:-1;;;11008:60:0;;12041:2:1;11008:60:0;;;12023:21:1;12080:2;12060:18;;;12053:30;-1:-1:-1;;;12099:18:1;;;12092:52;12161:18;;11008:60:0;11839:346:1;11008:60:0;11089:25;927:10;11101:12;14046:20;14085:8;;;13926:175;11089:25;11088:26;11080:59;;;;-1:-1:-1;;;11080:59:0;;12392:2:1;11080:59:0;;;12374:21:1;12431:2;12411:18;;;12404:30;-1:-1:-1;;;12450:18:1;;;12443:50;12510:18;;11080:59:0;12190:344:1;11080:59:0;11200:5;11181:16;;;:7;:16;;;;;;;;:24;;-1:-1:-1;;11181:24:0;;;11241:12;:32;;3635:10;11241:32;;;11330:13;;11317:27;;:12;:27;;;;;;;11302:43;;2536:25:1;;;11302:43:0;;2509:18:1;11302:43:0;;;;;;;11361:66;;11398:4;;11378:10;;-1:-1:-1;;;;;;;;;;;11361:66:0;;;11405:9;12751:25:1;;12812:2;12807;12792:18;;12785:30;;;12851:1;12831:18;;;12824:29;-1:-1:-1;;;12884:2:1;12869:18;;12862:38;12932:3;12917:19;;12539:403;11361:66:0;;;;;;;;10890:553;:::o;9031:127::-;9114:28;9124:4;9130:2;9134:7;9114:9;:28::i;:::-;9031:127;;;:::o;11852:164::-;11909:4;11934:18;11943:8;3398:5;-1:-1:-1;11809:25:0;11729:113;11934:18;11926:47;;;;-1:-1:-1;;;11926:47:0;;13149:2:1;11926:47:0;;;13131:21:1;13188:2;13168:18;;;13161:30;-1:-1:-1;;;13207:18:1;;;13200:46;13263:18;;11926:47:0;12947:340:1;11926:47:0;-1:-1:-1;11991:17:0;;;;:7;:17;;;;;;;;;11852:164::o;9751:428::-;9832:17;9841:7;3398:5;-1:-1:-1;11809:25:0;11729:113;9832:17;9824:49;;;;-1:-1:-1;;;9824:49:0;;13494:2:1;9824:49:0;;;13476:21:1;13533:2;13513:18;;;13506:30;-1:-1:-1;;;13552:18:1;;;13545:49;13611:18;;9824:49:0;13292:343:1;9824:49:0;10038:7;10013:23;10028:7;10013:14;:23::i;:::-;-1:-1:-1;;;;;9992:54:0;10009:1;-1:-1:-1;;;;;9992:54:0;-1:-1:-1;;;;;;;;;;;9992:54:0;;;;;;;;;10156:15;;2536:25:1;;;10156:15:0;;2524:2:1;2509:18;10156:15:0;;;;;;;;9751:428;:::o;9166:134::-;9253:39;9270:4;9276:2;9280:7;9253:39;;;;;;;;;;;;:16;:39::i;12028:139::-;12092:7;12119:23;;;:13;:23;;;;;;:40;;3525:7;;12119:40;:::i;11558:155::-;11614:4;11639:18;11648:8;11639;:18::i;:::-;11638:19;:67;;;;;11680:25;11696:8;11680:15;:25::i;:::-;11661:15;:44;;11631:74;11558:155;-1:-1:-1;;11558:155:0:o;7137:214::-;7192:13;7222:17;7231:7;3398:5;-1:-1:-1;11809:25:0;11729:113;7222:17;7218:125;;;7263:23;7278:7;7263:14;:23::i;7218:125::-;-1:-1:-1;7323:20:0;;;;:11;:20;;;;;;-1:-1:-1;;;;;7323:20:0;;7137:214::o;6976:153::-;7085:18;;:35;;-1:-1:-1;;;7085:35:0;;-1:-1:-1;;;;;1890:32:1;;;7085:35:0;;;1872:51:1;7031:7:0;;7085:18;;:28;;1845:18:1;;7085:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7058:24:0;;;;;;:17;:24;;;;;;:62;;;;:::i;1600:103::-;1333:13;:11;:13::i;:::-;1665:30:::1;1692:1;1665:18;:30::i;:::-;1600:103::o:0;15090:346::-;1333:13;:11;:13::i;:::-;15158:21:::1;15198:10:::0;15190:48:::1;;;::::0;-1:-1:-1;;;15190:48:0;;14293:2:1;15190:48:0::1;::::0;::::1;14275:21:1::0;14332:2;14312:18;;;14305:30;14371:27;14351:18;;;14344:55;14416:18;;15190:48:0::1;14091:349:1::0;15190:48:0::1;15252:12;1447:6:::0;;15270:31:::1;::::0;-1:-1:-1;;;;;1447:6:0;;;;15290;;15252:12;15270:31;15252:12;15270:31;15290:6;1447;15270:31:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15251:50;;;15320:7;15312:35;;;::::0;-1:-1:-1;;;15312:35:0;;14857:2:1;15312:35:0::1;::::0;::::1;14839:21:1::0;14896:2;14876:18;;;14869:30;-1:-1:-1;;;14915:18:1;;;14908:45;14970:18;;15312:35:0::1;14655:339:1::0;15312:35:0::1;1420:7:::0;1447:6;-1:-1:-1;;;;;1447:6:0;-1:-1:-1;;;;;15366:62:0::1;15391:4;-1:-1:-1::0;;;;;15366:62:0::1;-1:-1:-1::0;;;;;;;;;;;15407:6:0::1;15366:62;;;;15211:25:1::0;;15272:2;15267;15252:18;;15245:30;;;15311:2;15291:18;;;15284:30;-1:-1:-1;;;15345:2:1;15330:18;;15323:40;15395:3;15380:19;;14999:406;15366:62:0::1;;;;;;;;15130:306;;15090:346::o:0;10219:663::-;10279:17;10287:8;10279:7;:17::i;:::-;10271:47;;;;-1:-1:-1;;;10271:47:0;;15612:2:1;10271:47:0;;;15594:21:1;15651:2;15631:18;;;15624:30;-1:-1:-1;;;15670:18:1;;;15663:47;15727:18;;10271:47:0;15410:341:1;10271:47:0;927:10;10337:24;10352:8;10337:14;:24::i;:::-;-1:-1:-1;;;;;10337:40:0;;10329:76;;;;-1:-1:-1;;;10329:76:0;;15958:2:1;10329:76:0;;;15940:21:1;15997:2;15977:18;;;15970:30;-1:-1:-1;;;16016:18:1;;;16009:53;16079:18;;10329:76:0;15756:347:1;10329:76:0;10425:25;927:10;10437:12;847:98;10425:25;10424:26;10416:57;;;;-1:-1:-1;;;10416:57:0;;16310:2:1;10416:57:0;;;16292:21:1;16349:2;16329:18;;;16322:30;-1:-1:-1;;;16368:18:1;;;16361:48;16426:18;;10416:57:0;16108:342:1;10416:57:0;10486:34;927:10;10506:13;;10486:5;:34::i;:::-;10544:13;;;10531:27;;;;:12;:27;;;;;;;;:38;;;10580:23;;;:13;:23;;;;;10606:15;10580:41;;10659:18;;10676:1;10659:18;;;;;10790:17;;10806:1;;10790:17;:::i;:::-;:22;;:44;;;10828:1;10816:9;:7;:9::i;:::-;:13;;;;:::i;:::-;:18;10790:44;10770:17;;;;:7;:17;;;;;;;;;:64;;-1:-1:-1;;10770:64:0;;;;;;;;;;;10850:24;2536:25:1;;;10850:24:0;;2509:18:1;10850:24:0;2390:177:1;8665:203:0;927:10;8743:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;8743:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;8743:53:0;;;;;;;;;;8812:48;;948:41:1;;;8743:42:0;;927:10;8812:48;;921:18:1;8812:48:0;808:187:1;9308:255:0;9414:28;9424:4;9430:2;9434:7;9414:9;:28::i;:::-;9461:47;9484:4;9490:2;9494:7;9503:4;9461:22;:47::i;:::-;9453:102;;;;-1:-1:-1;;;9453:102:0;;;;;;;:::i;7359:555::-;7415:13;7449:17;7458:7;3398:5;-1:-1:-1;11809:25:0;11729:113;7449:17;:37;;;-1:-1:-1;12505:4:0;12529:20;;;:11;:20;;;;;;-1:-1:-1;;;;;12529:20:0;:34;;7470:16;7441:68;;;;-1:-1:-1;;;7441:68:0;;;;;;;:::i;:::-;7522:17;7554;7563:7;3398:5;-1:-1:-1;11809:25:0;11729:113;7554:17;7550:149;;;7594:16;;;;:7;:16;;;;;;;;:42;;7626:10;7594:42;;;7613:10;7594:42;7588:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7550:149;;;7675:12;7669:18;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7550:149;7711:22;7736:17;7745:7;3398:5;-1:-1:-1;11809:25:0;11729:113;7736:17;:87;;7801:21;;;;:12;:21;;;;;;7784:39;;:16;:39::i;:::-;7736:87;;;7756:25;7773:7;7756:16;:25::i;:::-;7711:112;;7867:8;7877:3;7887:8;7850:55;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7836:70;;;;7359:555;;;:::o;6430:315::-;1333:13;:11;:13::i;:::-;6535:19:::1;6544:9;3398:5:::0;-1:-1:-1;11809:25:0;11729:113;6535:19:::1;6527:50;;;;-1:-1:-1::0;;;6527:50:0::1;;;;;;;:::i;:::-;6619:11:::0;6596:142:::1;6643:9;6632:7;:20;6596:142;;6685:41;::::0;6718:7;;6714:1:::1;::::0;;;-1:-1:-1;;;;;;;;;;;6685:41:0;6714:1;;6685:41:::1;6654:9:::0;::::1;::::0;::::1;:::i;:::-;;;;6596:142;;5918:103:::0;1333:13;:11;:13::i;:::-;5992:8:::1;:21;6003:10:::0;5992:8;:21:::1;:::i;:::-;;5918:103:::0;:::o;8876:147::-;-1:-1:-1;;;;;8980:25:0;;;8956:4;8980:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;8876:147::o;1711:192::-;1333:13;:11;:13::i;:::-;-1:-1:-1;;;;;1800:22:0;::::1;1792:64;;;::::0;-1:-1:-1;;;1792:64:0;;18984:2:1;1792:64:0::1;::::0;::::1;18966:21:1::0;19023:2;19003:18;;;18996:30;19062:31;19042:18;;;19035:59;19111:18;;1792:64:0::1;18782:353:1::0;1792:64:0::1;1867:28;1886:8;1867:18;:28::i;:::-;1711:192:::0;:::o;1469:123::-;1420:7;1447:6;-1:-1:-1;;;;;1447:6:0;927:10;1533:23;1525:59;;;;-1:-1:-1;;;1525:59:0;;15958:2:1;1525:59:0;;;15940:21:1;15997:2;15977:18;;;15970:30;-1:-1:-1;;;16016:18:1;;;16009:53;16079:18;;1525:59:0;15756:347:1;13299:617:0;13390:17;13399:7;3398:5;-1:-1:-1;11809:25:0;11729:113;13390:17;13389:18;13381:53;;;;-1:-1:-1;;;13381:53:0;;19342:2:1;13381:53:0;;;19324:21:1;19381:2;19361:18;;;19354:30;-1:-1:-1;;;19400:18:1;;;19393:52;19462:18;;13381:53:0;19140:346:1;13381:53:0;13453:41;927:10;13486:7;13453:18;:41::i;:::-;13445:86;;;;-1:-1:-1;;;13445:86:0;;19693:2:1;13445:86:0;;;19675:21:1;;;19712:18;;;19705:30;19771:34;19751:18;;;19744:62;19823:18;;13445:86:0;19491:356:1;13445:86:0;13578:4;-1:-1:-1;;;;;13558:24:0;:16;13566:7;13558;:16::i;:::-;-1:-1:-1;;;;;13558:24:0;;13550:66;;;;-1:-1:-1;;;13550:66:0;;20054:2:1;13550:66:0;;;20036:21:1;20093:2;20073:18;;;20066:30;20132:31;20112:18;;;20105:59;20181:18;;13550:66:0;19852:353:1;13550:66:0;13681:28;13697:1;13701:7;13681;:28::i;:::-;-1:-1:-1;;;;;13747:23:0;;;;;;;:17;:23;;;;;;;;:28;;-1:-1:-1;;13747:28:0;;;13790:21;;;;;;;;;:26;;13774:1;13790:26;;;13838:20;;;:11;:20;;;;;;:25;;-1:-1:-1;;;;;;13838:25:0;;;;;13881:27;;13850:7;;13790:21;13747:23;-1:-1:-1;;;;;;;;;;;13881:27:0;;13299:617;;;:::o;12222:219::-;12386:18;;:47;;-1:-1:-1;;;12386:47:0;;;;;2536:25:1;;;12286:7:0;;-1:-1:-1;;;;;12386:18:0;;:37;;2509:18:1;;12386:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1911:191::-;1985:16;2004:6;;-1:-1:-1;;;;;2021:17:0;;;-1:-1:-1;;;;;;2021:17:0;;;;;;2054:40;;2004:6;;;;;;;2054:40;;1985:16;2054:40;1974:128;1911:191;:::o;12896:395::-;-1:-1:-1;;;;;12976:16:0;;12968:53;;;;-1:-1:-1;;;12968:53:0;;20668:2:1;12968:53:0;;;20650:21:1;20707:2;20687:18;;;20680:30;20746:26;20726:18;;;20719:54;20790:18;;12968:53:0;20466:348:1;12968:53:0;12505:4;12529:20;;;:11;:20;;;;;;-1:-1:-1;;;;;12529:20:0;:34;13032:50;;;;-1:-1:-1;;;13032:50:0;;21021:2:1;13032:50:0;;;21003:21:1;21060:2;21040:18;;;21033:30;-1:-1:-1;;;21079:18:1;;;21072:50;21139:18;;13032:50:0;20819:344:1;13032:50:0;-1:-1:-1;;;;;13120:21:0;;;;;;:17;:21;;;;;;;;:26;;13145:1;13120:26;;;13168:20;;;:11;:20;;;;;;:25;;-1:-1:-1;;;;;;13168:25:0;;;;;13211:33;13180:7;;13120:21;;-1:-1:-1;;;;;;;;;;;13211:33:0;13120:21;;13211:33;13260:23;;2536:25:1;;;13260:23:0;;2524:2:1;2509:18;13260:23:0;2390:177:1;14113:166:0;14154:4;14210:15;14237:16;14252:1;14237:12;:16;:::i;:::-;14193:76;;;;;;;21486:19:1;;;;14227:27:0;;21521:12:1;;;21514:28;927:10:0;21580:2:1;21576:15;;;-1:-1:-1;;21572:53:1;21558:12;;;21551:75;14193:76:0;;;;;;;;;21642:12:1;;;;14193:76:0;;14183:87;;;;;;14113:166;-1:-1:-1;14113:166:0:o;14287:748::-;14399:4;14046:20;;14085:8;14416:612;;14456:72;;-1:-1:-1;;;14456:72:0;;-1:-1:-1;;;;;14456:36:0;;;;;:72;;927:10;;14507:4;;14513:7;;14522:5;;14456:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14456:72:0;;;;;;;;-1:-1:-1;;14456:72:0;;;;;;;;;;;;:::i;:::-;;;14452:521;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14698:6;:13;14715:1;14698:18;14694:264;;14741:52;;-1:-1:-1;;;14741:52:0;;;;;;;:::i;14694:264::-;14908:6;14902:13;14893:6;14889:2;14885:15;14878:38;14452:521;-1:-1:-1;;;;;;14579:51:0;-1:-1:-1;;;14579:51:0;;-1:-1:-1;14572:58:0;;14416:612;-1:-1:-1;15012:4:0;14416:612;14287:748;;;;;;:::o;84:723::-;140:13;361:5;370:1;361:10;357:53;;-1:-1:-1;;388:10:0;;;;;;;;;;;;-1:-1:-1;;;388:10:0;;;;;84:723::o;357:53::-;435:5;420:12;476:78;483:9;;476:78;;509:8;;;;:::i;:::-;;-1:-1:-1;532:10:0;;-1:-1:-1;540:2:0;532:10;;:::i;:::-;;;476:78;;;564:19;596:6;586:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;586:17:0;;564:39;;614:154;621:10;;614:154;;648:11;658:1;648:11;;:::i;:::-;;-1:-1:-1;717:10:0;725:2;717:5;:10;:::i;:::-;704:24;;:2;:24;:::i;:::-;691:39;;674:6;681;674:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;674:56:0;;;;;;;;-1:-1:-1;745:11:0;754:2;745:11;;:::i;:::-;;;614:154;;12579:309;12664:4;12529:20;;;:11;:20;;;;;;-1:-1:-1;;;;;12529:20:0;12681:47;;;;-1:-1:-1;;;12681:47:0;;;;;;;:::i;:::-;12741:13;12757:16;12765:7;12757;:16::i;:::-;12741:32;;12803:5;-1:-1:-1;;;;;12792:16:0;:7;-1:-1:-1;;;;;12792:16:0;;:51;;;;12836:7;-1:-1:-1;;;;;12812:31:0;:20;12824:7;12812:11;:20::i;:::-;-1:-1:-1;;;;;12812:31:0;;12792:51;:87;;;;12847:32;12864:5;12871:7;12847:16;:32::i;422:131:1:-;-1:-1:-1;;;;;;496:32:1;;486:43;;476:71;;543:1;540;533:12;558:245;616:6;669:2;657:9;648:7;644:23;640:32;637:52;;;685:1;682;675:12;637:52;724:9;711:23;743:30;767:5;743:30;:::i;:::-;792:5;558:245;-1:-1:-1;;;558:245:1:o;1000:300::-;1053:3;1091:5;1085:12;1118:6;1113:3;1106:19;1174:6;1167:4;1160:5;1156:16;1149:4;1144:3;1140:14;1134:47;1226:1;1219:4;1210:6;1205:3;1201:16;1197:27;1190:38;1289:4;1282:2;1278:7;1273:2;1265:6;1261:15;1257:29;1252:3;1248:39;1244:50;1237:57;;;1000:300;;;;:::o;1305:231::-;1454:2;1443:9;1436:21;1417:4;1474:56;1526:2;1515:9;1511:18;1503:6;1474:56;:::i;1541:180::-;1600:6;1653:2;1641:9;1632:7;1628:23;1624:32;1621:52;;;1669:1;1666;1659:12;1621:52;-1:-1:-1;1692:23:1;;1541:180;-1:-1:-1;1541:180:1:o;1934:131::-;-1:-1:-1;;;;;2009:31:1;;1999:42;;1989:70;;2055:1;2052;2045:12;2070:315;2138:6;2146;2199:2;2187:9;2178:7;2174:23;2170:32;2167:52;;;2215:1;2212;2205:12;2167:52;2254:9;2241:23;2273:31;2298:5;2273:31;:::i;:::-;2323:5;2375:2;2360:18;;;;2347:32;;-1:-1:-1;;;2070:315:1:o;2572:127::-;2633:10;2628:3;2624:20;2621:1;2614:31;2664:4;2661:1;2654:15;2688:4;2685:1;2678:15;2704:632;2769:5;2799:18;2840:2;2832:6;2829:14;2826:40;;;2846:18;;:::i;:::-;2921:2;2915:9;2889:2;2975:15;;-1:-1:-1;;2971:24:1;;;2997:2;2967:33;2963:42;2951:55;;;3021:18;;;3041:22;;;3018:46;3015:72;;;3067:18;;:::i;:::-;3107:10;3103:2;3096:22;3136:6;3127:15;;3166:6;3158;3151:22;3206:3;3197:6;3192:3;3188:16;3185:25;3182:45;;;3223:1;3220;3213:12;3182:45;3273:6;3268:3;3261:4;3253:6;3249:17;3236:44;3328:1;3321:4;3312:6;3304;3300:19;3296:30;3289:41;;;;2704:632;;;;;:::o;3341:222::-;3384:5;3437:3;3430:4;3422:6;3418:17;3414:27;3404:55;;3455:1;3452;3445:12;3404:55;3477:80;3553:3;3544:6;3531:20;3524:4;3516:6;3512:17;3477:80;:::i;3568:743::-;3675:6;3683;3691;3744:2;3732:9;3723:7;3719:23;3715:32;3712:52;;;3760:1;3757;3750:12;3712:52;3800:9;3787:23;3829:18;3870:2;3862:6;3859:14;3856:34;;;3886:1;3883;3876:12;3856:34;3909:50;3951:7;3942:6;3931:9;3927:22;3909:50;:::i;:::-;3899:60;;4012:2;4001:9;3997:18;3984:32;3968:48;;4041:2;4031:8;4028:16;4025:36;;;4057:1;4054;4047:12;4025:36;4080:52;4124:7;4113:8;4102:9;4098:24;4080:52;:::i;:::-;4070:62;;4185:2;4174:9;4170:18;4157:32;4141:48;;4214:2;4204:8;4201:16;4198:36;;;4230:1;4227;4220:12;4198:36;;4253:52;4297:7;4286:8;4275:9;4271:24;4253:52;:::i;:::-;4243:62;;;3568:743;;;;;:::o;4316:248::-;4384:6;4392;4445:2;4433:9;4424:7;4420:23;4416:32;4413:52;;;4461:1;4458;4451:12;4413:52;-1:-1:-1;;4484:23:1;;;4554:2;4539:18;;;4526:32;;-1:-1:-1;4316:248:1:o;4569:456::-;4646:6;4654;4662;4715:2;4703:9;4694:7;4690:23;4686:32;4683:52;;;4731:1;4728;4721:12;4683:52;4770:9;4757:23;4789:31;4814:5;4789:31;:::i;:::-;4839:5;-1:-1:-1;4896:2:1;4881:18;;4868:32;4909:33;4868:32;4909:33;:::i;:::-;4569:456;;4961:7;;-1:-1:-1;;;5015:2:1;5000:18;;;;4987:32;;4569:456::o;5030:247::-;5089:6;5142:2;5130:9;5121:7;5117:23;5113:32;5110:52;;;5158:1;5155;5148:12;5110:52;5197:9;5184:23;5216:31;5241:5;5216:31;:::i;5282:416::-;5347:6;5355;5408:2;5396:9;5387:7;5383:23;5379:32;5376:52;;;5424:1;5421;5414:12;5376:52;5463:9;5450:23;5482:31;5507:5;5482:31;:::i;:::-;5532:5;-1:-1:-1;5589:2:1;5574:18;;5561:32;5631:15;;5624:23;5612:36;;5602:64;;5662:1;5659;5652:12;5602:64;5685:7;5675:17;;;5282:416;;;;;:::o;5703:795::-;5798:6;5806;5814;5822;5875:3;5863:9;5854:7;5850:23;5846:33;5843:53;;;5892:1;5889;5882:12;5843:53;5931:9;5918:23;5950:31;5975:5;5950:31;:::i;:::-;6000:5;-1:-1:-1;6057:2:1;6042:18;;6029:32;6070:33;6029:32;6070:33;:::i;:::-;6122:7;-1:-1:-1;6176:2:1;6161:18;;6148:32;;-1:-1:-1;6231:2:1;6216:18;;6203:32;6258:18;6247:30;;6244:50;;;6290:1;6287;6280:12;6244:50;6313:22;;6366:4;6358:13;;6354:27;-1:-1:-1;6344:55:1;;6395:1;6392;6385:12;6344:55;6418:74;6484:7;6479:2;6466:16;6461:2;6457;6453:11;6418:74;:::i;:::-;6408:84;;;5703:795;;;;;;;:::o;6503:322::-;6572:6;6625:2;6613:9;6604:7;6600:23;6596:32;6593:52;;;6641:1;6638;6631:12;6593:52;6681:9;6668:23;6714:18;6706:6;6703:30;6700:50;;;6746:1;6743;6736:12;6700:50;6769;6811:7;6802:6;6791:9;6787:22;6769:50;:::i;6830:388::-;6898:6;6906;6959:2;6947:9;6938:7;6934:23;6930:32;6927:52;;;6975:1;6972;6965:12;6927:52;7014:9;7001:23;7033:31;7058:5;7033:31;:::i;:::-;7083:5;-1:-1:-1;7140:2:1;7125:18;;7112:32;7153:33;7112:32;7153:33;:::i;7573:342::-;7775:2;7757:21;;;7814:2;7794:18;;;7787:30;-1:-1:-1;;;7848:2:1;7833:18;;7826:48;7906:2;7891:18;;7573:342::o;8683:380::-;8762:1;8758:12;;;;8805;;;8826:61;;8880:4;8872:6;8868:17;8858:27;;8826:61;8933:2;8925:6;8922:14;8902:18;8899:38;8896:161;;8979:10;8974:3;8970:20;8967:1;8960:31;9014:4;9011:1;9004:15;9042:4;9039:1;9032:15;8896:161;;8683:380;;;:::o;9194:518::-;9296:2;9291:3;9288:11;9285:421;;;9332:5;9329:1;9322:16;9376:4;9373:1;9363:18;9446:2;9434:10;9430:19;9427:1;9423:27;9417:4;9413:38;9482:4;9470:10;9467:20;9464:47;;;-1:-1:-1;9505:4:1;9464:47;9560:2;9555:3;9551:12;9548:1;9544:20;9538:4;9534:31;9524:41;;9615:81;9633:2;9626:5;9623:13;9615:81;;;9692:1;9678:16;;9659:1;9648:13;9615:81;;;9619:3;;9194:518;;;:::o;9888:1345::-;10014:3;10008:10;10041:18;10033:6;10030:30;10027:56;;;10063:18;;:::i;:::-;10092:97;10182:6;10142:38;10174:4;10168:11;10142:38;:::i;:::-;10136:4;10092:97;:::i;:::-;10244:4;;10301:2;10290:14;;10318:1;10313:663;;;;11020:1;11037:6;11034:89;;;-1:-1:-1;11089:19:1;;;11083:26;11034:89;-1:-1:-1;;9845:1:1;9841:11;;;9837:24;9833:29;9823:40;9869:1;9865:11;;;9820:57;11136:81;;10283:944;;10313:663;9141:1;9134:14;;;9178:4;9165:18;;-1:-1:-1;;10349:20:1;;;10467:236;10481:7;10478:1;10475:14;10467:236;;;10570:19;;;10564:26;10549:42;;10662:27;;;;10630:1;10618:14;;;;10497:19;;10467:236;;;10471:3;10731:6;10722:7;10719:19;10716:201;;;10792:19;;;10786:26;-1:-1:-1;;10875:1:1;10871:14;;;10887:3;10867:24;10863:37;10859:42;10844:58;10829:74;;10716:201;;;10963:1;10954:6;10951:1;10947:14;10943:22;10937:4;10930:36;10283:944;;;;;9888:1345;;:::o;13640:127::-;13701:10;13696:3;13692:20;13689:1;13682:31;13732:4;13729:1;13722:15;13756:4;13753:1;13746:15;13772:125;13837:9;;;13858:10;;;13855:36;;;13871:18;;:::i;13902:184::-;13972:6;14025:2;14013:9;14004:7;14000:23;13996:32;13993:52;;;14041:1;14038;14031:12;13993:52;-1:-1:-1;14064:16:1;;13902:184;-1:-1:-1;13902:184:1:o;16455:127::-;16516:10;16511:3;16507:20;16504:1;16497:31;16547:4;16544:1;16537:15;16571:4;16568:1;16561:15;16587:112;16619:1;16645;16635:35;;16650:18;;:::i;:::-;-1:-1:-1;16684:9:1;;16587:112::o;16704:406::-;16906:2;16888:21;;;16945:2;16925:18;;;16918:30;16984:34;16979:2;16964:18;;16957:62;-1:-1:-1;;;17050:2:1;17035:18;;17028:40;17100:3;17085:19;;16704:406::o;17115:212::-;17157:3;17195:5;17189:12;17239:6;17232:4;17225:5;17221:16;17216:3;17210:36;17301:1;17265:16;;17290:13;;;-1:-1:-1;17265:16:1;;17115:212;-1:-1:-1;17115:212:1:o;17332:1305::-;17758:3;17787:1;17820:6;17814:13;17850:36;17876:9;17850:36;:::i;:::-;17905:1;17922:17;;;17948:133;;;;18095:1;18090:358;;;;17915:533;;17948:133;-1:-1:-1;;17981:24:1;;17969:37;;18054:14;;18047:22;18035:35;;18026:45;;;-1:-1:-1;17948:133:1;;18090:358;18121:6;18118:1;18111:17;18151:4;18196;18193:1;18183:18;18223:1;18237:165;18251:6;18248:1;18245:13;18237:165;;;18329:14;;18316:11;;;18309:35;18372:16;;;;18266:10;;18237:165;;;18241:3;;;18431:6;18426:3;18422:16;18415:23;;17915:533;;;;;18467:30;18493:3;18485:6;18467:30;:::i;:::-;18457:40;;-1:-1:-1;;;18513:2:1;18506:15;18540:37;18574:1;18570:2;18566:10;18558:6;18540:37;:::i;:::-;-1:-1:-1;;;18586:19:1;;18629:1;18621:10;;17332:1305;-1:-1:-1;;;;;;17332:1305:1:o;18642:135::-;18681:3;18702:17;;;18699:43;;18722:18;;:::i;:::-;-1:-1:-1;18769:1:1;18758:13;;18642:135::o;20210:251::-;20280:6;20333:2;20321:9;20312:7;20308:23;20304:32;20301:52;;;20349:1;20346;20339:12;20301:52;20381:9;20375:16;20400:31;20425:5;20400:31;:::i;21168:128::-;21235:9;;;21256:11;;;21253:37;;;21270:18;;:::i;21665:500::-;-1:-1:-1;;;;;21934:15:1;;;21916:34;;21986:15;;21981:2;21966:18;;21959:43;22033:2;22018:18;;22011:34;;;22081:3;22076:2;22061:18;;22054:31;;;21859:4;;22102:57;;22139:19;;22131:6;22102:57;:::i;:::-;22094:65;21665:500;-1:-1:-1;;;;;;21665:500:1:o;22170:249::-;22239:6;22292:2;22280:9;22271:7;22267:23;22263:32;22260:52;;;22308:1;22305;22298:12;22260:52;22340:9;22334:16;22359:30;22383:5;22359:30;:::i;22424:120::-;22464:1;22490;22480:35;;22495:18;;:::i;:::-;-1:-1:-1;22529:9:1;;22424:120::o;22549:127::-;22610:10;22605:3;22601:20;22598:1;22591:31;22641:4;22638:1;22631:15;22665:4;22662:1;22655:15

Swarm Source

ipfs://f8bcd2607a4feccf268974aae94433c07fbf593b52fd018d8dd47fb60427d81c
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.