ETH Price: $3,433.82 (-4.09%)
 

Overview

Max Total Supply

3,333 DOG

Holders

483

Transfers

-
0

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
E741V1Token

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at basescan.org on 2024-03-19
*/

// DOG.741.GG
// Fungible Non-Fungible Dog

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


// libraries to separate ERC20 and ERC721 events, and certain signature-specific functions
// ERC20 events
library libES20 {
    event Transfer(address indexed from, address indexed to, uint amount);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    function emitTransfer(address _from, address _to, uint _amount) internal { emit Transfer(_from, _to, _amount); }
    function emitApproval(address _owner, address _spender, uint _value) internal { emit Approval(_owner, _spender, _value); }
}

// ERC721 events
library libES721 {
    event Transfer(address indexed _from, address indexed _to, uint indexed _tokenId);
    event Approval(address indexed _owner, address indexed _approved, uint indexed _tokenId);
    event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);
    function emitTransfer(address _from, address _to, uint _tokenId) internal { emit Transfer(_from, _to, _tokenId); }
    function emitApproval(address _owner, address _approve, uint _tokenId) internal { emit Approval(_owner, _approve, _tokenId); }
    function emitApprovalForAll(address _owner, address _operator, bool _approved) internal { emit ApprovalForAll(_owner, _operator, _approved); }
}

// ERC165 https://eips.ethereum.org/EIPS/eip-721
interface IERC165 {
    function supportsInterface(bytes4 interfaceID) external view returns (bool);
}

// ERC20 https://eips.ethereum.org/EIPS/eip-20
interface IERC20 {
    function balanceOf(address account) external view returns (uint256);
    function totalSupply() external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
    function decimals() external view returns (uint);
}

// ERC721 https://eips.ethereum.org/EIPS/eip-721
interface IERC721 is IERC165 {
    function balanceOf(address account) external view returns (uint256);
    function ownerOf(uint256 _tokenId) external view returns (address);
    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory data) external payable;
    function safeTransferFrom(address _from, address _to, 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);
    // payable removed for erc20 etherscan compatibility
    function approve(address spender, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

interface IE741 is IERC20, IERC721 {
    // supportsInterface 0x5a46575f 
    // library transfers can not be included in the interface
    // incorporate them directly with library
    // libES20.Transfer
    // libES20.Approval
    // libES721.Transfer
    // libES721.Approval
    // libES721.ApprovalForAll
    function balanceOf(address account) external override(IERC20, IERC721) view returns (uint256);
    function approve(address spender, uint256 value) external override(IERC20, IERC721) returns (bool);
    function transferFrom(address from, address to, uint256 value) external override(IERC20, IERC721) returns (bool);
}

interface IERC721Metadata {
    function name() external view returns (string memory _name);
    function symbol() external view returns (string memory _symbol);
    function tokenURI(uint256 _tokenId) external view returns (string memory);
}

interface IERC7572 {
    function contractURI() external view returns (string memory);
    event ContractURIUpdated();
}

interface IERC20Metadata {
    function name() external view returns (string memory _name);
    function symbol() external view returns (string memory _symbol);
    function tokenURI(uint256 _tokenId) external view returns (string memory);
}

interface IDevable {
    function initialize(bytes memory encodedParameters) external returns (address);
    function dev() external returns (address dev);
    function setContractURI(string memory newContractURI) external;
    function setBaseURI(string memory newBaseURI) external;
    function changeDev(address newDev) external;
    function toggelNFTinterface() external;
    function withdraw() external;
    function setExtension(string memory newExtension) external;
    function setTelegram(string memory newTelegram) external;
    function setSkipMintingGlobal(bool newSkipMintingGlobal) external;
}

// ERC721 Token Receiver https://eips.ethereum.org/EIPS/eip-721
interface IERC721TokenReceiver {
    function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes memory _data) external returns(bytes4);
}

contract ERC721TokenReceiver is IERC721TokenReceiver {
    function onERC721Received(address, address, uint256, bytes memory) external virtual returns(bytes4) {
        return IERC721TokenReceiver.onERC721Received.selector;
    }
}

abstract contract E741V1Base is IDevable, ERC721TokenReceiver, IE741  {

    address public constant BROKEN_ADDRESS = address(0x5e7ec);
    address public constant DEPOSIT_ADDRESS = address(0x0);
    address public constant MINT_ADDRESS = address(0x0);

    string public baseURI;
    string internal _contractURI;
    string public extension;
    string public telegram;
    string internal _name;
    string internal _symbol;
    uint internal _decimals;
    uint internal _totalIds;
    uint internal _totalSupply;
    uint internal ONE; // 1.0 token(s)
    uint internal MAXID; // e.g. 1.00000001 : 1.00007777 is the range for NFT IDs
    uint64 public minted; // number of unique ID mints + ONE
    address public dev;
    bool public supportsNFTinterface;
    bool public skipMintingGlobal = false;

    mapping(address => mapping(address => bool)) private _operatorApprovals;
    mapping(address => mapping(address => uint)) internal _allowance;
    mapping(uint256 tokenId => address) public ownerOf;
    mapping(uint256 => address) private _nftApprovals;
    mapping(address => uint) internal _balanceOf;
    mapping(address => uint64[]) public ownedNFTs; // broken NFTs stored in limbo list are at ownedNFTs[BROKEN_ADDRESS]
    mapping(uint64 => uint256) internal idToIndex; 
    mapping(address => bool) internal skipMintingUser;

    error UnsupportedReceiver();

    modifier onlyDev() {
        require(msg.sender == dev, "Not the developer");
        _;
    }

    constructor() {
        dev = msg.sender;
    }

    function initialize(bytes memory encodedParameters) public override virtual returns (address underlyingToken);
    function deposit(uint[] memory amounts) public virtual;
    function withdraw(uint[] memory amounts) public payable virtual;

    function name() public view virtual returns (string memory) { return _name; }
    function symbol() public view virtual returns (string memory) { return _symbol; }
    function decimals() public view virtual returns (uint) { return _decimals; }
    function totalSupply() public view virtual returns (uint) { return _totalSupply; }
    function maxSupply() public view virtual returns (uint) { return _totalIds * ONE; }
    function balanceOf( address account) public view override returns (uint) { return _balanceOf[account]; }
    function allowance(address owner, address spender) public view override returns (uint) { return _allowance[owner][spender]; }
    function setBaseURI(string memory newBaseURI) public onlyDev override {baseURI = newBaseURI;}
    function setContractURI(string memory newContractURI) public onlyDev override virtual {_contractURI = newContractURI; emit IERC7572.ContractURIUpdated();}
    function setExtension(string memory newExtension) public onlyDev override virtual {extension = newExtension;}
    function setTelegram(string memory newTelegram) public onlyDev virtual {telegram = newTelegram;}
    function changeDev(address newDev) public onlyDev override  {dev = newDev;}//simple function to change developer address, or revoke ownership (with address(0))
    // @DEV toggleNFTinterface is for the small possibility of frontend system changes leading the contract to favor enabling the disabled supportsNFTinterface flag
    // don't waste it, as frontends don't typically change classification of contracts
    // probably never to be used.
    function toggelNFTinterface() public onlyDev override {supportsNFTinterface = !supportsNFTinterface;}
    function tokensOfOwner(address owner) public view returns (uint64[] memory){return ownedNFTs[owner];}
    function nftBalanceOf(address account) public view returns (uint) {return ownedNFTs[account].length;}
    function contractURI() public view virtual returns (string memory) {return _contractURI;}
    function setSkipMintingGlobal(bool newSkipMintingGlobal) public override virtual onlyDev { skipMintingGlobal = newSkipMintingGlobal; } 
    function setSkipMinting(bool newSkipMinting) public virtual { skipMintingUser[msg.sender] = newSkipMinting; }

    function approve(address spender, uint amount) public override returns (bool) {

        // if the amount is greater than one token, and within range of IDs for NFTs 
        // then set NFT approval for the given ID
        if(amount >= ONE && amount <= MAXID) {
            address owner = ownerOf[amount]; // getting the owner of token ID via the `amount` input
            if (msg.sender != owner && !isApprovedForAll(owner, msg.sender)) revert("E741: You are not approved");
            _nftApprovals[amount] = spender; // calling nft approval for the token and spender
            libES721.emitApproval(owner, spender, amount);
            return true;
        }
        
        // else set the ERC20 allowance
        // the NFT ID range being set within a limited subset of ONE token(s)
        // allows for non-clashing interactions
        _allowance[msg.sender][spender] = amount;
        libES20.emitApproval(msg.sender, spender, amount);
        return true;
    }

    function _transfer741(address from, address to, uint amount) internal virtual {
        
        require(_balanceOf[from] >= amount, "E741: transfer amount exceeds balance");
        
        // checking the decimal amount of tokens owned before transaction for both participants
        uint256 fromDecimalsPre = _balanceOf[from] % ONE;
        uint256 toDecimalsPre = _balanceOf[to] % ONE;
        
        // simple erc20 balance operations
        _transfer20(from, to, amount);

        // checking the decimal amount of tokens after transaction for both partcipants
        uint256 fromDecimalsPost = _balanceOf[from] % ONE;
        uint256 toDecimalsPost = _balanceOf[to] % ONE;

        // stores the NFT IDs owned by `from`, enabling NFT management for that address.
        uint64[] storage ownedNFTsArray = ownedNFTs[from];

        // references NFTs marked as "broken", tracking these special state NFTs.
        uint64[] storage brokenIDsArray = ownedNFTs[BROKEN_ADDRESS];
        

        // if sender has higher decimal count after transaction, then they "roll under" and break an NFT
        if (fromDecimalsPre < fromDecimalsPost) {

            if(ownedNFTsArray.length > 0) { // if the sender has an nft to send
                //pushes the last nft in the owned list into the "broken list" for limbo NFTs
                _transfer721Pop(from, BROKEN_ADDRESS, ownedNFTsArray); //transfers the NFT ID ownership to BROKEN address for stewardship
            }
        }

        // if receiver has lower decimal count after transaction then they "roll over" and will "remake" an nft 
        if (toDecimalsPre > toDecimalsPost) {

            if(brokenIDsArray.length > 0) { // recover an id from broken list

                _transfer721Pop(BROKEN_ADDRESS, to, brokenIDsArray);
            }
            else { // mint new id
                _mint(to);
            }
            
        }
        
        // amount of tokens - amount of whole tokens being processed in int
        uint amountInTokens = amount / ONE;

        uint len = ownedNFTsArray.length; //len is the length, or number of NFTs in the addresses's owned array

        // ignore minting nfts from dev when they call -- this allows for gas-efficient team operations
        // @DEV if dev gathers NFTs, use the ERC721 transferFrom method to extract
        // @DEV be careful, don't let the wallet fall to some convoluted transferFrom scam to do something unexpected
        if(skipMintingGlobal || from == DEPOSIT_ADDRESS || skipMintingUser[to] || skipMintingUser[from] || from == dev) {
            //  When skipping minting the nft holder can only send out the tokens they hold (reduce gas)
            amountInTokens = amountInTokens < len ? amountInTokens : len;
        }

        if(amountInTokens > 0) {
            
            len = amountInTokens < len ? amountInTokens : len;
            // transfers owned NFTs from `from` to `to` until either all are transferred or the desired amount is reached
            // Subtracts transferred NFT count from `amountInTokens` to update remaining transfers
            for (uint i = 0; i < len; i++) {
                _transfer721Pop(from, to, ownedNFTsArray); 
            }
            amountInTokens -= len;
            len = brokenIDsArray.length;
            len = amountInTokens < len ? amountInTokens : len;
            
            // recovers NFTs from the broken state to `to`, or mints new ones if not enough broken NFTs are available
            // if any tokens remain to be allocated, it mints new NFTs to `to` for the remaining balance
            for (uint i = 0; i < len; i++) {        
                _transfer721Pop(BROKEN_ADDRESS, to, brokenIDsArray);
            }

            _mintBatch(to, amountInTokens - len);

        }
    }

    function _mintBatch(address to, uint256 amount) internal virtual {
        if(amount == 0) return; // Exit if no NFTs to mint

        if(amount == 1) { // Optimize single mint process
            _mint(to);
            return;
        }
        uint64 id = minted; // Start ID from last minted value
        uint256 ownedLen = ownedNFTs[to].length; // Current number of NFTs owned by 'to'
        for(uint i = 0; i < amount;) {
            unchecked {
                id++; // Increment ID for each new NFT
            }
            ownerOf[id] = to; // Assign new NFT to owner.
            idToIndex[id] = ownedLen; // Map NFT ID to its index in owner's array
            ownedNFTs[to].push(id); // Add new NFT ID to owner's list

            libES721.emitTransfer(MINT_ADDRESS, to, id); // Emit NFT transfer event

            unchecked {
                ownedLen++; // Increment count of owned NFTs
                i++; // Move to next NFT
            }
        }
        unchecked {
            minted += uint64(amount); // Update total minted count
        }
    }


    function _mint(address to) internal virtual returns(uint64 tokenId){
        unchecked {
            minted++; // Increment the total number of minted tokens
        }
        tokenId = minted; // Assign the newly minted token ID

        ownerOf[tokenId] = to; // Set ownership of the new token to 'to'
        idToIndex[tokenId] = ownedNFTs[to].length; // Map the new token ID to its index in the owner's list
        ownedNFTs[to].push(tokenId); // Add the new token ID to the owner's list of owned tokens
        
        libES721.emitTransfer(MINT_ADDRESS, to, tokenId); // Emit an event for the token transfer
    }


    // Updates the mappings and arrays managing ownership and index of NFTs after a transfer
    function _updateOwnedNFTs(address from, address to, uint64 tokenId) internal { 
        uint256 index = idToIndex[tokenId]; // Get current index of the token in the owner's list
        uint64[] storage nftArray = ownedNFTs[from]; // Reference to the list of NFTs owned by 'from'
        uint256 len = nftArray.length; // Current number of NFTs owned by 'from'
        uint64 lastTokenId = nftArray[len - 1]; // Last token in the 'from' array to swap with transferred token
        
        nftArray[index] = lastTokenId; // Replace the transferred token with the last token in the array
        nftArray.pop(); // Remove the last element, effectively deleting the transferred token from 'from'
        
        if(len - 1 != 0){ 
            idToIndex[lastTokenId] = index; // Update the index of the swapped token
        } 
    
        ownedNFTs[to].push(tokenId); // Add the transferred token to the 'to' array
        idToIndex[tokenId] = ownedNFTs[to].length - 1; // Update the index mapping for the transferred token
    }

    // Executes a simple ERC20 token transfer.
    function _transfer20(address from, address to, uint256 amount) internal {
        _balanceOf[from] -= amount; // Deduct the amount from the sender's balance
        unchecked {
            _balanceOf[to] += amount; // Add the amount to the recipient's balance
        }
        libES20.emitTransfer(from, to, amount); // Emit an ERC20 transfer event
    }

    // Handles the transfer of an ERC721 token, ensuring proper ownership and event emission
    function _transfer721(address from, address to, uint64 tokenId) internal virtual {
        require(from == ownerOf[tokenId], "E741: Incorrect owner"); // Ensure 'from' is the current owner
        
        delete _nftApprovals[tokenId]; // Clear any approvals for this token
        ownerOf[tokenId] = to; // Transfer ownership of the token to 'to'
        _updateOwnedNFTs(from, to, tokenId); // Update ownership tracking structures
        libES721.emitTransfer(from, to, tokenId); // Emit an ERC721 transfer event
    }

    // Handles the transfer of an ERC721 token, ensuring proper ownership and event emission
    function _transfer721Pop(address from, address to, uint64[] storage nftArray) internal virtual {
        uint64 tokenId = nftArray[nftArray.length - 1];
        
        delete _nftApprovals[tokenId]; // Clear any approvals for this token
        ownerOf[tokenId] = to; // Transfer ownership of the token to 'to'
        
        // update owned nfts pop edition
        nftArray.pop(); // Remove the last element, effectively deleting the transferred token from 'from'    
        ownedNFTs[to].push(tokenId); // Add the transferred token to the 'to' array
        idToIndex[tokenId] = ownedNFTs[to].length - 1; // Update the index mapping for the transferred token

        libES721.emitTransfer(from, to, tokenId); // Emit an ERC721 transfer event
    }


    // only erc20 calls this
    // if amount is a token id owned my the caller send as an NFT
    // else transfer741
    function transfer(address to, uint amount) public override returns (bool) {
        if(ownerOf[amount] == msg.sender) {
            _transfer721(msg.sender, to, uint64(amount));
            _transfer20(msg.sender, to, ONE);
            return true;
        }
        _transfer741(msg.sender, to, amount);
        return true;
    }

    // erc20 and erc721 call this
    function transferFrom(address from, address to, uint amount) public override returns (bool) {

        //if amount is within the NFT id range, then a simple NFT transfer + token amount (ONE)
        if(amount >= ONE && amount <= MAXID) {
            require(
                //require from is the msg caller, or that caller is approved for that specific NFT, or all NFTs 
                msg.sender == from || msg.sender == getApproved(amount) || isApprovedForAll(from, msg.sender),
                "E741: You don't have the right"
                );

            _transfer721(from, to, uint64(amount));
            _transfer20(from, to, ONE);
            return true;
        }

        _spendAllowance(from, msg.sender, amount);
        _transfer741(from, to, amount);
        return true;

    }

    // erc721
    function safeTransferFrom(address from, address to, uint256 tokenId) public payable override {
        require(
                msg.sender == from || msg.sender == getApproved(tokenId) || isApprovedForAll(from, msg.sender),
                "E741: You don't have the right"
            );
        _transfer721(from, to, uint64(tokenId)); 
        _transfer20(from, to, ONE);

        if (
            to.code.length != 0 &&
            IERC721TokenReceiver(to).onERC721Received(msg.sender, from, tokenId, "") !=
            IERC721TokenReceiver.onERC721Received.selector
        ) {
            revert UnsupportedReceiver();
        }
    }

    // erc721
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public payable override {
        require(
                msg.sender == from || msg.sender == getApproved(tokenId) || isApprovedForAll(from, msg.sender),
                "E741: You don't have the right"
            );
        _transfer721(from, to, uint64(tokenId)); 
        _transfer20(from, to, ONE);

        if (
            to.code.length != 0 &&
            IERC721TokenReceiver(to).onERC721Received(msg.sender, from, tokenId, data) !=
            IERC721TokenReceiver.onERC721Received.selector
        ) {
            revert UnsupportedReceiver();
        }
    }

    function _spendAllowance(address owner, address spender, uint amount) internal virtual {
        require(_allowance[owner][spender] >= amount, "E741: insufficient allowance");
        _allowance[owner][spender] -= amount;
    }

    function getApproved(uint256 tokenId) public view override returns (address) {
        if (ownerOf[tokenId] == address(0)) revert();
        return _nftApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved) public override {
        _operatorApprovals[msg.sender][operator] = approved;
        libES721.emitApprovalForAll(msg.sender, operator, approved);
    }

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

    function tokenURI(uint256 tokenId) public view virtual returns (string memory) {
        require(tokenId <= MAXID, "E741: invalid id");
        if (bytes(baseURI).length == 0) {return "";}
        return string(abi.encodePacked(baseURI, toString(tokenId - ONE), extension));
    }

    function toString(uint256 value) internal pure returns (string memory) {
        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(value % 10) + 48); value /= 10;}
        return string(buffer);
    }

    function withdraw() external onlyDev override {
        (bool success,) = payable(dev).call{value: address(this).balance}("");
        require(success);
    }

    function supportsInterface(bytes4 interfaceId) public view override returns (bool) {
        return
            // Even though we support ERC721 and should return true, etherscan wants to treat us as ERC721 instead of ERC20
            // @DEV ERC165 for ERC721 can be toggled on for reasons of frontend/dapp/script implementations, but is very specific
            (supportsNFTinterface && interfaceId == 0x80ac58cd) || // ERC165 interface ID for ERC721
            interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165
            interfaceId == 0x36372b07 || // ERC165 interface ID for ERC20
            interfaceId == 0x150b7a02 || // ERC165 interface ID for IERC721TokenReceiver
            interfaceId == 0x5a46575f;   // ERC165 interface ID for IE741
            
    }
}

contract E741V1Token is E741V1Base {

    constructor() {}

    function initialize(bytes memory encodedParameters) public override returns (address){
        require(_decimals == 0, "Already initialized");
        (_name, _symbol, _decimals, baseURI, _contractURI, _totalIds) = abi.decode(encodedParameters, (string,string,uint,string,string,uint));
        
        ONE = 10 ** _decimals;
        MAXID = ONE + _totalIds - 1;
        minted = uint64(ONE) - 1; // start minting from ID ONE-1 so you can get id 0

        _balanceOf[msg.sender] = totalSupply();

        require(ONE > _totalIds, "Not enough decimals for NFT count");
        return address(0);
    }

    function deposit(uint[] memory /*amountsArray20*/) public pure override {
        revert("Unsupported");
    }

    function withdraw(uint256[] memory /*_amounts741*/) public override payable {
        revert("Unsupported");
    }

    function totalSupply() public view override virtual returns (uint) {
         return maxSupply(); 
    }

}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"UnsupportedReceiver","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"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":[],"name":"ContractURIUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","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"},{"inputs":[],"name":"BROKEN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEPOSIT_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newDev","type":"address"}],"name":"changeDev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"name":"deposit","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dev","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"extension","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"bytes","name":"encodedParameters","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"nftBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownedNFTs","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"payable","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":"payable","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":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newContractURI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newExtension","type":"string"}],"name":"setExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newSkipMinting","type":"bool"}],"name":"setSkipMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newSkipMintingGlobal","type":"bool"}],"name":"setSkipMintingGlobal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newTelegram","type":"string"}],"name":"setTelegram","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"skipMintingGlobal","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"supportsNFTinterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"telegram","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggelNFTinterface","outputs":[],"stateMutability":"nonpayable","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":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint64[]","name":"","type":"uint64[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

6080604052600b805460ff60e81b1916905534801561001c575f80fd5b50600b8054600160401b600160e01b031916336801000000000000000002179055612b408061004a5f395ff3fe60806040526004361061026a575f3560e01c80636bcef9a61161014a578063a563833b116100be578063dd62ed3e11610078578063dd62ed3e14610756578063e8a3d4851461079a578063e8e81fe4146107ae578063e985e9c5146107cd578063f835ab00146107ec578063ff0d2c261461048e575f80fd5b8063a563833b146106b1578063a9059cbb146106d1578063b3720c34146106f0578063b88d4fde14610710578063c87b56dd14610723578063d5abeb0114610742575f80fd5b806388a8c95c1161010f57806388a8c95c1461060c57806391cca3db1461062b578063938e3d7b1461065157806395d89b4114610670578063983d95ce14610684578063a22cb46514610692575f80fd5b80636bcef9a6146105655780636c0360eb1461057957806370a082311461058d5780637e2285aa146105c15780638462151c146105e0575f80fd5b8063313ce567116101e157806347ecb665116101a657806347ecb665146104a15780634f02c420146104b557806355f804b3146104d4578063598b8e71146104f35780636352211e146105125780636a21f8e114610546575f80fd5b8063313ce567146104325780633ccfd60b1461044657806342842e0e1461045c578063439fab911461046f578063466c35fc1461048e575f80fd5b8063150b7a0211610232578063150b7a021461035b57806318160ddd1461039e5780631a72b87d146103b257806323b872dd146103e95780632d5537b0146104085780632ff3a2421461041c575f80fd5b806301ffc9a71461026e57806306fdde03146102a2578063081812fc146102c3578063095ea7b3146102fa5780630e313e9814610319575b5f80fd5b348015610279575f80fd5b5061028d610288366004612166565b610825565b60405190151581526020015b60405180910390f35b3480156102ad575f80fd5b506102b66108c2565b60405161029991906121ce565b3480156102ce575f80fd5b506102e26102dd3660046121e0565b610952565b6040516001600160a01b039091168152602001610299565b348015610305575f80fd5b5061028d61031436600461220d565b61098c565b348015610324575f80fd5b5061034d610333366004612235565b6001600160a01b03165f9081526011602052604090205490565b604051908152602001610299565b348015610366575f80fd5b50610385610375366004612311565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610299565b3480156103a9575f80fd5b5061034d610a9a565b3480156103bd575f80fd5b506103d16103cc36600461220d565b610aa8565b6040516001600160401b039091168152602001610299565b3480156103f4575f80fd5b5061028d610403366004612374565b610aef565b348015610413575f80fd5b506102b6610ba6565b348015610427575f80fd5b506102e26205e7ec81565b34801561043d575f80fd5b5060065461034d565b348015610451575f80fd5b5061045a610c32565b005b61045a61046a366004612374565b610cc9565b34801561047a575f80fd5b506102e26104893660046123ad565b610e08565b348015610499575f80fd5b506102e25f81565b3480156104ac575f80fd5b506102b6610f8d565b3480156104c0575f80fd5b50600b546103d1906001600160401b031681565b3480156104df575f80fd5b5061045a6104ee3660046123de565b610f9a565b3480156104fe575f80fd5b5061045a61050d366004612422565b610fda565b34801561051d575f80fd5b506102e261052c3660046121e0565b600e6020525f90815260409020546001600160a01b031681565b348015610551575f80fd5b5061045a6105603660046124d1565b611010565b348015610570575f80fd5b5061045a61105f565b348015610584575f80fd5b506102b66110b1565b348015610598575f80fd5b5061034d6105a7366004612235565b6001600160a01b03165f9081526010602052604090205490565b3480156105cc575f80fd5b5061045a6105db3660046123de565b6110bd565b3480156105eb575f80fd5b506105ff6105fa366004612235565b6110fa565b60405161029991906124ea565b348015610617575f80fd5b5061045a610626366004612235565b611194565b348015610636575f80fd5b50600b546102e290600160401b90046001600160a01b031681565b34801561065c575f80fd5b5061045a61066b3660046123de565b6111f6565b34801561067b575f80fd5b506102b661125f565b61045a61050d366004612422565b34801561069d575f80fd5b5061045a6106ac366004612536565b61126e565b3480156106bc575f80fd5b50600b5461028d90600160e01b900460ff1681565b3480156106dc575f80fd5b5061028d6106eb36600461220d565b6112a7565b3480156106fb575f80fd5b50600b5461028d90600160e81b900460ff1681565b61045a61071e366004612311565b6112f1565b34801561072e575f80fd5b506102b661073d3660046121e0565b61141e565b34801561074d575f80fd5b5061034d6114cd565b348015610761575f80fd5b5061034d610770366004612567565b6001600160a01b039182165f908152600d6020908152604080832093909416825291909152205490565b3480156107a5575f80fd5b506102b66114de565b3480156107b9575f80fd5b5061045a6107c83660046123de565b6114ed565b3480156107d8575f80fd5b5061028d6107e7366004612567565b61152a565b3480156107f7575f80fd5b5061045a6108063660046124d1565b335f908152601360205260409020805460ff1916911515919091179055565b600b545f90600160e01b900460ff16801561085057506380ac58cd60e01b6001600160e01b03198316145b8061086b57506301ffc9a760e01b6001600160e01b03198316145b8061088657506336372b0760e01b6001600160e01b03198316145b806108a15750630a85bd0160e11b6001600160e01b03198316145b806108bc5750635a46575f60e01b6001600160e01b03198316145b92915050565b6060600480546108d19061258f565b80601f01602080910402602001604051908101604052809291908181526020018280546108fd9061258f565b80156109485780601f1061091f57610100808354040283529160200191610948565b820191905f5260205f20905b81548152906001019060200180831161092b57829003601f168201915b5050505050905090565b5f818152600e60205260408120546001600160a01b0316610971575f80fd5b505f908152600f60205260409020546001600160a01b031690565b5f60095482101580156109a15750600a548211155b15610a61575f828152600e60205260409020546001600160a01b03163381148015906109d457506109d2813361152a565b155b15610a265760405162461bcd60e51b815260206004820152601a60248201527f453734313a20596f7520617265206e6f7420617070726f76656400000000000060448201526064015b60405180910390fd5b5f838152600f6020526040902080546001600160a01b0319166001600160a01b038616179055610a57818585611557565b60019150506108bc565b335f818152600d602090815260408083206001600160a01b03881684529091529020839055610a9190848461159d565b50600192915050565b5f610aa36114cd565b905090565b6011602052815f5260405f208181548110610ac1575f80fd5b905f5260205f209060049182820401919006600802915091509054906101000a90046001600160401b031681565b5f6009548210158015610b045750600a548211155b15610b8557336001600160a01b0385161480610b395750610b2482610952565b6001600160a01b0316336001600160a01b0316145b80610b495750610b49843361152a565b610b655760405162461bcd60e51b8152600401610a1d906125c7565b610b708484846115ef565b610b7d84846009546116bd565b506001610b9f565b610b90843384611711565b610b9b8484846117c5565b5060015b9392505050565b60028054610bb39061258f565b80601f0160208091040260200160405190810160405280929190818152602001828054610bdf9061258f565b8015610c2a5780601f10610c0157610100808354040283529160200191610c2a565b820191905f5260205f20905b815481529060010190602001808311610c0d57829003601f168201915b505050505081565b600b54600160401b90046001600160a01b03163314610c635760405162461bcd60e51b8152600401610a1d906125fe565b600b546040515f91600160401b90046001600160a01b03169047908381818185875af1925050503d805f8114610cb4576040519150601f19603f3d011682016040523d82523d5f602084013e610cb9565b606091505b5050905080610cc6575f80fd5b50565b336001600160a01b0384161480610cf95750610ce481610952565b6001600160a01b0316336001600160a01b0316145b80610d095750610d09833361152a565b610d255760405162461bcd60e51b8152600401610a1d906125c7565b610d308383836115ef565b610d3d83836009546116bd565b6001600160a01b0382163b15801590610de55750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401525f608484015290919084169063150b7a029060a4016020604051808303815f875af1158015610db4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dd89190612629565b6001600160e01b03191614155b15610e03576040516301d6c93560e61b815260040160405180910390fd5b505050565b5f6006545f14610e505760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610a1d565b81806020019051810190610e649190612686565b600781905560045f60058160068180806001610e808b82612787565b50610e8d90508a82612787565b505088905550610e9d8882612787565b50610eaa90508782612787565b50505050505050600654600a610ec0919061292b565b6009819055600754600191610ed59190612936565b610edf9190612949565b600a55600954610ef19060019061295c565b600b805467ffffffffffffffff19166001600160401b0392909216919091179055610f1a610a9a565b335f9081526010602052604090205560075460095411610f865760405162461bcd60e51b815260206004820152602160248201527f4e6f7420656e6f75676820646563696d616c7320666f72204e465420636f756e6044820152601d60fa1b6064820152608401610a1d565b505f919050565b60038054610bb39061258f565b600b54600160401b90046001600160a01b03163314610fcb5760405162461bcd60e51b8152600401610a1d906125fe565b5f610fd68282612787565b5050565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606401610a1d565b600b54600160401b90046001600160a01b031633146110415760405162461bcd60e51b8152600401610a1d906125fe565b600b8054911515600160e81b0260ff60e81b19909216919091179055565b600b54600160401b90046001600160a01b031633146110905760405162461bcd60e51b8152600401610a1d906125fe565b600b805460ff60e01b198116600160e01b9182900460ff1615909102179055565b5f8054610bb39061258f565b600b54600160401b90046001600160a01b031633146110ee5760405162461bcd60e51b8152600401610a1d906125fe565b6002610fd68282612787565b6001600160a01b0381165f9081526011602090815260409182902080548351818402810184019094528084526060939283018282801561118857602002820191905f5260205f20905f905b82829054906101000a90046001600160401b03166001600160401b0316815260200190600801906020826007010492830192600103820291508084116111455790505b50505050509050919050565b600b54600160401b90046001600160a01b031633146111c55760405162461bcd60e51b8152600401610a1d906125fe565b600b80546001600160a01b03909216600160401b0268010000000000000000600160e01b0319909216919091179055565b600b54600160401b90046001600160a01b031633146112275760405162461bcd60e51b8152600401610a1d906125fe565b60016112338282612787565b506040517fa5d4097edda6d87cb9329af83fb3712ef77eeb13738ffe43cc35a4ce305ad962905f90a150565b6060600580546108d19061258f565b335f818152600c602090815260408083206001600160a01b03871684529091529020805460ff1916831515179055610fd6908383611ab7565b5f818152600e6020526040812054336001600160a01b03909116036112e6576112d13384846115ef565b6112de33846009546116bd565b5060016108bc565b610a913384846117c5565b336001600160a01b0385161480611321575061130c82610952565b6001600160a01b0316336001600160a01b0316145b806113315750611331843361152a565b61134d5760405162461bcd60e51b8152600401610a1d906125c7565b6113588484846115ef565b61136584846009546116bd565b6001600160a01b0383163b158015906113fa5750604051630a85bd0160e11b808252906001600160a01b0385169063150b7a02906113ad903390899088908890600401612983565b6020604051808303815f875af11580156113c9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ed9190612629565b6001600160e01b03191614155b15611418576040516301d6c93560e61b815260040160405180910390fd5b50505050565b6060600a548211156114655760405162461bcd60e51b815260206004820152601060248201526f114dcd0c4e881a5b9d985b1a59081a5960821b6044820152606401610a1d565b5f80546114719061258f565b90505f0361148c57505060408051602081019091525f815290565b5f6114a36009548461149e9190612949565b611afe565b60026040516020016114b793929190612a2e565b6040516020818303038152906040529050919050565b5f600954600754610aa39190612a60565b6060600180546108d19061258f565b600b54600160401b90046001600160a01b0316331461151e5760405162461bcd60e51b8152600401610a1d906125fe565b6003610fd68282612787565b6001600160a01b039182165f908152600c6020908152604080832093909416825291909152205460ff1690565b80826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b816001600160a01b0316836001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115e291815260200190565b60405180910390a3505050565b6001600160401b0381165f908152600e60205260409020546001600160a01b038481169116146116595760405162461bcd60e51b8152602060048201526015602482015274229b9a189d1024b731b7b93932b1ba1037bbb732b960591b6044820152606401610a1d565b6001600160401b0381165f908152600f6020908152604080832080546001600160a01b0319908116909155600e90925290912080549091166001600160a01b0384161790556116a9838383611c02565b610e038383836001600160401b0316611db8565b6001600160a01b0383165f90815260106020526040812080548392906116e4908490612949565b90915550506001600160a01b0382165f908152601060205260409020805482019055610e03838383611dfe565b6001600160a01b038084165f908152600d60209081526040808320938616835292905220548111156117855760405162461bcd60e51b815260206004820152601c60248201527f453734313a20696e73756666696369656e7420616c6c6f77616e6365000000006044820152606401610a1d565b6001600160a01b038084165f908152600d60209081526040808320938616835292905290812080548392906117bb908490612949565b9091555050505050565b6001600160a01b0383165f9081526010602052604090205481111561183a5760405162461bcd60e51b815260206004820152602560248201527f453734313a207472616e7366657220616d6f756e7420657863656564732062616044820152646c616e636560d81b6064820152608401610a1d565b6009546001600160a01b0384165f90815260106020526040812054909161186091612a8b565b6009546001600160a01b0385165f90815260106020526040812054929350916118899190612a8b565b90506118968585856116bd565b6009546001600160a01b0386165f9081526010602052604081205490916118bc91612a8b565b6009546001600160a01b0387165f90815260106020526040812054929350916118e59190612a8b565b6001600160a01b0388165f9081526011602052604081206205e7ec9091529091507f1b6e7c417ed9cfc24ca11cc87b3bdb69a80c713b279159d52af44c081e616a17838610156119445781541561194457611944896205e7ec84611e43565b8285111561197157805415611966576119616205e7ec8983611e43565b611971565b61196f88611f93565b505b5f600954886119809190612a9e565b8354600b5491925090600160e81b900460ff16806119a557506001600160a01b038b16155b806119c757506001600160a01b038a165f9081526013602052604090205460ff165b806119e957506001600160a01b038b165f9081526013602052604090205460ff165b80611a085750600b546001600160a01b038c8116600160401b90920416145b15611a1f57808210611a1a5780611a1c565b815b91505b8115611aaa57808210611a325780611a34565b815b90505f5b81811015611a5357611a4b8c8c87611e43565b600101611a38565b50611a5e8183612949565b83549092509050808210611a725780611a74565b815b90505f5b81811015611a9657611a8e6205e7ec8c86611e43565b600101611a78565b50611aaa8a611aa58385612949565b612040565b5050505050505050505050565b816001600160a01b0316836001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115e2911515815260200190565b6060815f03611b245750506040805180820190915260018152600360fc1b602082015290565b815f5b8115611b4d5780611b3781612ab1565b9150611b469050600a83612a9e565b9150611b27565b5f816001600160401b03811115611b6657611b6661224e565b6040519080825280601f01601f191660200182016040528015611b90576020820181803683370190505b5090505b8415611bfa57611ba5600183612949565b9150611bb2600a86612a8b565b611bbd906030612ac9565b60f81b818381518110611bd257611bd2612ae2565b60200101906001600160f81b03191690815f1a905350611bf3600a86612a9e565b9450611b94565b949350505050565b6001600160401b0381165f908152601260209081526040808320546001600160a01b0387168452601190925282208054919290919082611c43600184612949565b81548110611c5357611c53612ae2565b905f5260205f2090600491828204019190066008029054906101000a90046001600160401b0316905080838581548110611c8f57611c8f612ae2565b905f5260205f2090600491828204019190066008026101000a8154816001600160401b0302191690836001600160401b0316021790555082805480611cd657611cd6612af6565b5f8281526020902060045f199092019182040180546001600160401b03600860038516026101000a02191690559055611d10600183612949565b15611d30576001600160401b0381165f9081526012602052604090208490555b6001600160a01b0386165f81815260116020908152604082208054600180820183558285529284206004820401805460039092166008026101000a6001600160401b0381810219909316928c1602919091179055929091529054611d949190612949565b6001600160401b039095165f90815260126020526040902094909455505050505050565b80826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115e291815260200190565b80545f908290611e5590600190612949565b81548110611e6557611e65612ae2565b5f918252602080832060048304015460039092166008026101000a9091046001600160401b0316808352600f8252604080842080546001600160a01b0319908116909155600e90935290922080549091166001600160a01b0386161790558254909150829080611ed757611ed7612af6565b5f828152602080822060045f1990940184810490910180546001600160401b0360086003808616820261010090810a840219909416909455939097556001600160a01b038a16808652601185526040862080546001818101835582895296882098810490980180548b8b169990951690950290920a968702969097021990911694909417905592905254611f6b9190612949565b6001600160401b0382165f818152601260205260409020919091556114189085908590611db8565b600b805467ffffffffffffffff19811660016001600160401b03928316810183169182179093555f818152600e6020908152604080832080546001600160a01b0319166001600160a01b03891690811790915583526011808352818420805486865260128552928520839055908352958101865594825281206004850401805460039095166008026101000a938402199094169282029290921790925561203b908383611db8565b919050565b805f0361204b575050565b8060010361205c57610e0382611f93565b600b546001600160a01b0383165f908152601160205260408120546001600160401b0390921691905b838110156121245760019283016001600160401b038181165f818152600e6020908152604080832080546001600160a01b0319166001600160a01b038d1690811790915560128352818420899055835260118252822080549889018155825281206004880401805460039098166008026101000a9384021990971692820292909217909555909361211891908790611db8565b60019182019101612085565b5050600b805467ffffffffffffffff1981166001600160401b039182169490940116929092179091555050565b6001600160e01b031981168114610cc6575f80fd5b5f60208284031215612176575f80fd5b8135610b9f81612151565b5f5b8381101561219b578181015183820152602001612183565b50505f910152565b5f81518084526121ba816020860160208601612181565b601f01601f19169290920160200192915050565b602081525f610b9f60208301846121a3565b5f602082840312156121f0575f80fd5b5035919050565b80356001600160a01b038116811461203b575f80fd5b5f806040838503121561221e575f80fd5b612227836121f7565b946020939093013593505050565b5f60208284031215612245575f80fd5b610b9f826121f7565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561228a5761228a61224e565b604052919050565b5f6001600160401b038211156122aa576122aa61224e565b50601f01601f191660200190565b5f6122ca6122c584612292565b612262565b90508281528383830111156122dd575f80fd5b828260208301375f602084830101529392505050565b5f82601f830112612302575f80fd5b610b9f838335602085016122b8565b5f805f8060808587031215612324575f80fd5b61232d856121f7565b935061233b602086016121f7565b92506040850135915060608501356001600160401b0381111561235c575f80fd5b612368878288016122f3565b91505092959194509250565b5f805f60608486031215612386575f80fd5b61238f846121f7565b925061239d602085016121f7565b9150604084013590509250925092565b5f602082840312156123bd575f80fd5b81356001600160401b038111156123d2575f80fd5b611bfa848285016122f3565b5f602082840312156123ee575f80fd5b81356001600160401b03811115612403575f80fd5b8201601f81018413612413575f80fd5b611bfa848235602084016122b8565b5f6020808385031215612433575f80fd5b82356001600160401b0380821115612449575f80fd5b818501915085601f83011261245c575f80fd5b81358181111561246e5761246e61224e565b8060051b915061247f848301612262565b8181529183018401918481019088841115612498575f80fd5b938501935b838510156124b65784358252938501939085019061249d565b98975050505050505050565b8035801515811461203b575f80fd5b5f602082840312156124e1575f80fd5b610b9f826124c2565b602080825282518282018190525f9190848201906040850190845b8181101561252a5783516001600160401b031683529284019291840191600101612505565b50909695505050505050565b5f8060408385031215612547575f80fd5b612550836121f7565b915061255e602084016124c2565b90509250929050565b5f8060408385031215612578575f80fd5b612581836121f7565b915061255e602084016121f7565b600181811c908216806125a357607f821691505b6020821081036125c157634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252601e908201527f453734313a20596f7520646f6e27742068617665207468652072696768740000604082015260600190565b6020808252601190820152702737ba103a3432903232bb32b637b832b960791b604082015260600190565b5f60208284031215612639575f80fd5b8151610b9f81612151565b5f82601f830112612653575f80fd5b81516126616122c582612292565b818152846020838601011115612675575f80fd5b611bfa826020830160208701612181565b5f805f805f8060c0878903121561269b575f80fd5b86516001600160401b03808211156126b1575f80fd5b6126bd8a838b01612644565b975060208901519150808211156126d2575f80fd5b6126de8a838b01612644565b96506040890151955060608901519150808211156126fa575f80fd5b6127068a838b01612644565b9450608089015191508082111561271b575f80fd5b5061272889828a01612644565b92505060a087015190509295509295509295565b601f821115610e0357805f5260205f20601f840160051c810160208510156127615750805b601f840160051c820191505b81811015612780575f815560010161276d565b5050505050565b81516001600160401b038111156127a0576127a061224e565b6127b4816127ae845461258f565b8461273c565b602080601f8311600181146127e7575f84156127d05750858301515b5f19600386901b1c1916600185901b17855561283e565b5f85815260208120601f198616915b82811015612815578886015182559484019460019091019084016127f6565b508582101561283257878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b8085111561289457815f190482111561287a5761287a612846565b8085161561288757918102915b93841c939080029061285f565b509250929050565b5f826128aa575060016108bc565b816128b657505f6108bc565b8160018114610a5757600281036128e35760ff8411156128d8576128d8612846565b50506001821b6108bc565b5060208310610133831016604e8410600b8410161715612906575081810a6108bc565b612910838361285a565b805f190482111561292357612923612846565b029392505050565b5f610b9f838361289c565b808201808211156108bc576108bc612846565b818103818111156108bc576108bc612846565b6001600160401b0382811682821603908082111561297c5761297c612846565b5092915050565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f906129b5908301846121a3565b9695505050505050565b5f81546129cb8161258f565b600182811680156129e357600181146129f857612a24565b60ff1984168752821515830287019450612a24565b855f526020805f205f5b85811015612a1b5781548a820152908401908201612a02565b50505082870194505b5050505092915050565b5f612a3982866129bf565b8451612a49818360208901612181565b612a55818301866129bf565b979650505050505050565b80820281158282048414176108bc576108bc612846565b634e487b7160e01b5f52601260045260245ffd5b5f82612a9957612a99612a77565b500690565b5f82612aac57612aac612a77565b500490565b5f60018201612ac257612ac2612846565b5060010190565b60ff81811683821601908111156108bc576108bc612846565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffdfea2646970667358221220259e0b2751dcfa8eb7c8c97871188823918458da3ccd8ad16b22cd269149b40164736f6c63430008180033

Deployed Bytecode

0x60806040526004361061026a575f3560e01c80636bcef9a61161014a578063a563833b116100be578063dd62ed3e11610078578063dd62ed3e14610756578063e8a3d4851461079a578063e8e81fe4146107ae578063e985e9c5146107cd578063f835ab00146107ec578063ff0d2c261461048e575f80fd5b8063a563833b146106b1578063a9059cbb146106d1578063b3720c34146106f0578063b88d4fde14610710578063c87b56dd14610723578063d5abeb0114610742575f80fd5b806388a8c95c1161010f57806388a8c95c1461060c57806391cca3db1461062b578063938e3d7b1461065157806395d89b4114610670578063983d95ce14610684578063a22cb46514610692575f80fd5b80636bcef9a6146105655780636c0360eb1461057957806370a082311461058d5780637e2285aa146105c15780638462151c146105e0575f80fd5b8063313ce567116101e157806347ecb665116101a657806347ecb665146104a15780634f02c420146104b557806355f804b3146104d4578063598b8e71146104f35780636352211e146105125780636a21f8e114610546575f80fd5b8063313ce567146104325780633ccfd60b1461044657806342842e0e1461045c578063439fab911461046f578063466c35fc1461048e575f80fd5b8063150b7a0211610232578063150b7a021461035b57806318160ddd1461039e5780631a72b87d146103b257806323b872dd146103e95780632d5537b0146104085780632ff3a2421461041c575f80fd5b806301ffc9a71461026e57806306fdde03146102a2578063081812fc146102c3578063095ea7b3146102fa5780630e313e9814610319575b5f80fd5b348015610279575f80fd5b5061028d610288366004612166565b610825565b60405190151581526020015b60405180910390f35b3480156102ad575f80fd5b506102b66108c2565b60405161029991906121ce565b3480156102ce575f80fd5b506102e26102dd3660046121e0565b610952565b6040516001600160a01b039091168152602001610299565b348015610305575f80fd5b5061028d61031436600461220d565b61098c565b348015610324575f80fd5b5061034d610333366004612235565b6001600160a01b03165f9081526011602052604090205490565b604051908152602001610299565b348015610366575f80fd5b50610385610375366004612311565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610299565b3480156103a9575f80fd5b5061034d610a9a565b3480156103bd575f80fd5b506103d16103cc36600461220d565b610aa8565b6040516001600160401b039091168152602001610299565b3480156103f4575f80fd5b5061028d610403366004612374565b610aef565b348015610413575f80fd5b506102b6610ba6565b348015610427575f80fd5b506102e26205e7ec81565b34801561043d575f80fd5b5060065461034d565b348015610451575f80fd5b5061045a610c32565b005b61045a61046a366004612374565b610cc9565b34801561047a575f80fd5b506102e26104893660046123ad565b610e08565b348015610499575f80fd5b506102e25f81565b3480156104ac575f80fd5b506102b6610f8d565b3480156104c0575f80fd5b50600b546103d1906001600160401b031681565b3480156104df575f80fd5b5061045a6104ee3660046123de565b610f9a565b3480156104fe575f80fd5b5061045a61050d366004612422565b610fda565b34801561051d575f80fd5b506102e261052c3660046121e0565b600e6020525f90815260409020546001600160a01b031681565b348015610551575f80fd5b5061045a6105603660046124d1565b611010565b348015610570575f80fd5b5061045a61105f565b348015610584575f80fd5b506102b66110b1565b348015610598575f80fd5b5061034d6105a7366004612235565b6001600160a01b03165f9081526010602052604090205490565b3480156105cc575f80fd5b5061045a6105db3660046123de565b6110bd565b3480156105eb575f80fd5b506105ff6105fa366004612235565b6110fa565b60405161029991906124ea565b348015610617575f80fd5b5061045a610626366004612235565b611194565b348015610636575f80fd5b50600b546102e290600160401b90046001600160a01b031681565b34801561065c575f80fd5b5061045a61066b3660046123de565b6111f6565b34801561067b575f80fd5b506102b661125f565b61045a61050d366004612422565b34801561069d575f80fd5b5061045a6106ac366004612536565b61126e565b3480156106bc575f80fd5b50600b5461028d90600160e01b900460ff1681565b3480156106dc575f80fd5b5061028d6106eb36600461220d565b6112a7565b3480156106fb575f80fd5b50600b5461028d90600160e81b900460ff1681565b61045a61071e366004612311565b6112f1565b34801561072e575f80fd5b506102b661073d3660046121e0565b61141e565b34801561074d575f80fd5b5061034d6114cd565b348015610761575f80fd5b5061034d610770366004612567565b6001600160a01b039182165f908152600d6020908152604080832093909416825291909152205490565b3480156107a5575f80fd5b506102b66114de565b3480156107b9575f80fd5b5061045a6107c83660046123de565b6114ed565b3480156107d8575f80fd5b5061028d6107e7366004612567565b61152a565b3480156107f7575f80fd5b5061045a6108063660046124d1565b335f908152601360205260409020805460ff1916911515919091179055565b600b545f90600160e01b900460ff16801561085057506380ac58cd60e01b6001600160e01b03198316145b8061086b57506301ffc9a760e01b6001600160e01b03198316145b8061088657506336372b0760e01b6001600160e01b03198316145b806108a15750630a85bd0160e11b6001600160e01b03198316145b806108bc5750635a46575f60e01b6001600160e01b03198316145b92915050565b6060600480546108d19061258f565b80601f01602080910402602001604051908101604052809291908181526020018280546108fd9061258f565b80156109485780601f1061091f57610100808354040283529160200191610948565b820191905f5260205f20905b81548152906001019060200180831161092b57829003601f168201915b5050505050905090565b5f818152600e60205260408120546001600160a01b0316610971575f80fd5b505f908152600f60205260409020546001600160a01b031690565b5f60095482101580156109a15750600a548211155b15610a61575f828152600e60205260409020546001600160a01b03163381148015906109d457506109d2813361152a565b155b15610a265760405162461bcd60e51b815260206004820152601a60248201527f453734313a20596f7520617265206e6f7420617070726f76656400000000000060448201526064015b60405180910390fd5b5f838152600f6020526040902080546001600160a01b0319166001600160a01b038616179055610a57818585611557565b60019150506108bc565b335f818152600d602090815260408083206001600160a01b03881684529091529020839055610a9190848461159d565b50600192915050565b5f610aa36114cd565b905090565b6011602052815f5260405f208181548110610ac1575f80fd5b905f5260205f209060049182820401919006600802915091509054906101000a90046001600160401b031681565b5f6009548210158015610b045750600a548211155b15610b8557336001600160a01b0385161480610b395750610b2482610952565b6001600160a01b0316336001600160a01b0316145b80610b495750610b49843361152a565b610b655760405162461bcd60e51b8152600401610a1d906125c7565b610b708484846115ef565b610b7d84846009546116bd565b506001610b9f565b610b90843384611711565b610b9b8484846117c5565b5060015b9392505050565b60028054610bb39061258f565b80601f0160208091040260200160405190810160405280929190818152602001828054610bdf9061258f565b8015610c2a5780601f10610c0157610100808354040283529160200191610c2a565b820191905f5260205f20905b815481529060010190602001808311610c0d57829003601f168201915b505050505081565b600b54600160401b90046001600160a01b03163314610c635760405162461bcd60e51b8152600401610a1d906125fe565b600b546040515f91600160401b90046001600160a01b03169047908381818185875af1925050503d805f8114610cb4576040519150601f19603f3d011682016040523d82523d5f602084013e610cb9565b606091505b5050905080610cc6575f80fd5b50565b336001600160a01b0384161480610cf95750610ce481610952565b6001600160a01b0316336001600160a01b0316145b80610d095750610d09833361152a565b610d255760405162461bcd60e51b8152600401610a1d906125c7565b610d308383836115ef565b610d3d83836009546116bd565b6001600160a01b0382163b15801590610de55750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401525f608484015290919084169063150b7a029060a4016020604051808303815f875af1158015610db4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dd89190612629565b6001600160e01b03191614155b15610e03576040516301d6c93560e61b815260040160405180910390fd5b505050565b5f6006545f14610e505760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610a1d565b81806020019051810190610e649190612686565b600781905560045f60058160068180806001610e808b82612787565b50610e8d90508a82612787565b505088905550610e9d8882612787565b50610eaa90508782612787565b50505050505050600654600a610ec0919061292b565b6009819055600754600191610ed59190612936565b610edf9190612949565b600a55600954610ef19060019061295c565b600b805467ffffffffffffffff19166001600160401b0392909216919091179055610f1a610a9a565b335f9081526010602052604090205560075460095411610f865760405162461bcd60e51b815260206004820152602160248201527f4e6f7420656e6f75676820646563696d616c7320666f72204e465420636f756e6044820152601d60fa1b6064820152608401610a1d565b505f919050565b60038054610bb39061258f565b600b54600160401b90046001600160a01b03163314610fcb5760405162461bcd60e51b8152600401610a1d906125fe565b5f610fd68282612787565b5050565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606401610a1d565b600b54600160401b90046001600160a01b031633146110415760405162461bcd60e51b8152600401610a1d906125fe565b600b8054911515600160e81b0260ff60e81b19909216919091179055565b600b54600160401b90046001600160a01b031633146110905760405162461bcd60e51b8152600401610a1d906125fe565b600b805460ff60e01b198116600160e01b9182900460ff1615909102179055565b5f8054610bb39061258f565b600b54600160401b90046001600160a01b031633146110ee5760405162461bcd60e51b8152600401610a1d906125fe565b6002610fd68282612787565b6001600160a01b0381165f9081526011602090815260409182902080548351818402810184019094528084526060939283018282801561118857602002820191905f5260205f20905f905b82829054906101000a90046001600160401b03166001600160401b0316815260200190600801906020826007010492830192600103820291508084116111455790505b50505050509050919050565b600b54600160401b90046001600160a01b031633146111c55760405162461bcd60e51b8152600401610a1d906125fe565b600b80546001600160a01b03909216600160401b0268010000000000000000600160e01b0319909216919091179055565b600b54600160401b90046001600160a01b031633146112275760405162461bcd60e51b8152600401610a1d906125fe565b60016112338282612787565b506040517fa5d4097edda6d87cb9329af83fb3712ef77eeb13738ffe43cc35a4ce305ad962905f90a150565b6060600580546108d19061258f565b335f818152600c602090815260408083206001600160a01b03871684529091529020805460ff1916831515179055610fd6908383611ab7565b5f818152600e6020526040812054336001600160a01b03909116036112e6576112d13384846115ef565b6112de33846009546116bd565b5060016108bc565b610a913384846117c5565b336001600160a01b0385161480611321575061130c82610952565b6001600160a01b0316336001600160a01b0316145b806113315750611331843361152a565b61134d5760405162461bcd60e51b8152600401610a1d906125c7565b6113588484846115ef565b61136584846009546116bd565b6001600160a01b0383163b158015906113fa5750604051630a85bd0160e11b808252906001600160a01b0385169063150b7a02906113ad903390899088908890600401612983565b6020604051808303815f875af11580156113c9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ed9190612629565b6001600160e01b03191614155b15611418576040516301d6c93560e61b815260040160405180910390fd5b50505050565b6060600a548211156114655760405162461bcd60e51b815260206004820152601060248201526f114dcd0c4e881a5b9d985b1a59081a5960821b6044820152606401610a1d565b5f80546114719061258f565b90505f0361148c57505060408051602081019091525f815290565b5f6114a36009548461149e9190612949565b611afe565b60026040516020016114b793929190612a2e565b6040516020818303038152906040529050919050565b5f600954600754610aa39190612a60565b6060600180546108d19061258f565b600b54600160401b90046001600160a01b0316331461151e5760405162461bcd60e51b8152600401610a1d906125fe565b6003610fd68282612787565b6001600160a01b039182165f908152600c6020908152604080832093909416825291909152205460ff1690565b80826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b816001600160a01b0316836001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115e291815260200190565b60405180910390a3505050565b6001600160401b0381165f908152600e60205260409020546001600160a01b038481169116146116595760405162461bcd60e51b8152602060048201526015602482015274229b9a189d1024b731b7b93932b1ba1037bbb732b960591b6044820152606401610a1d565b6001600160401b0381165f908152600f6020908152604080832080546001600160a01b0319908116909155600e90925290912080549091166001600160a01b0384161790556116a9838383611c02565b610e038383836001600160401b0316611db8565b6001600160a01b0383165f90815260106020526040812080548392906116e4908490612949565b90915550506001600160a01b0382165f908152601060205260409020805482019055610e03838383611dfe565b6001600160a01b038084165f908152600d60209081526040808320938616835292905220548111156117855760405162461bcd60e51b815260206004820152601c60248201527f453734313a20696e73756666696369656e7420616c6c6f77616e6365000000006044820152606401610a1d565b6001600160a01b038084165f908152600d60209081526040808320938616835292905290812080548392906117bb908490612949565b9091555050505050565b6001600160a01b0383165f9081526010602052604090205481111561183a5760405162461bcd60e51b815260206004820152602560248201527f453734313a207472616e7366657220616d6f756e7420657863656564732062616044820152646c616e636560d81b6064820152608401610a1d565b6009546001600160a01b0384165f90815260106020526040812054909161186091612a8b565b6009546001600160a01b0385165f90815260106020526040812054929350916118899190612a8b565b90506118968585856116bd565b6009546001600160a01b0386165f9081526010602052604081205490916118bc91612a8b565b6009546001600160a01b0387165f90815260106020526040812054929350916118e59190612a8b565b6001600160a01b0388165f9081526011602052604081206205e7ec9091529091507f1b6e7c417ed9cfc24ca11cc87b3bdb69a80c713b279159d52af44c081e616a17838610156119445781541561194457611944896205e7ec84611e43565b8285111561197157805415611966576119616205e7ec8983611e43565b611971565b61196f88611f93565b505b5f600954886119809190612a9e565b8354600b5491925090600160e81b900460ff16806119a557506001600160a01b038b16155b806119c757506001600160a01b038a165f9081526013602052604090205460ff165b806119e957506001600160a01b038b165f9081526013602052604090205460ff165b80611a085750600b546001600160a01b038c8116600160401b90920416145b15611a1f57808210611a1a5780611a1c565b815b91505b8115611aaa57808210611a325780611a34565b815b90505f5b81811015611a5357611a4b8c8c87611e43565b600101611a38565b50611a5e8183612949565b83549092509050808210611a725780611a74565b815b90505f5b81811015611a9657611a8e6205e7ec8c86611e43565b600101611a78565b50611aaa8a611aa58385612949565b612040565b5050505050505050505050565b816001600160a01b0316836001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115e2911515815260200190565b6060815f03611b245750506040805180820190915260018152600360fc1b602082015290565b815f5b8115611b4d5780611b3781612ab1565b9150611b469050600a83612a9e565b9150611b27565b5f816001600160401b03811115611b6657611b6661224e565b6040519080825280601f01601f191660200182016040528015611b90576020820181803683370190505b5090505b8415611bfa57611ba5600183612949565b9150611bb2600a86612a8b565b611bbd906030612ac9565b60f81b818381518110611bd257611bd2612ae2565b60200101906001600160f81b03191690815f1a905350611bf3600a86612a9e565b9450611b94565b949350505050565b6001600160401b0381165f908152601260209081526040808320546001600160a01b0387168452601190925282208054919290919082611c43600184612949565b81548110611c5357611c53612ae2565b905f5260205f2090600491828204019190066008029054906101000a90046001600160401b0316905080838581548110611c8f57611c8f612ae2565b905f5260205f2090600491828204019190066008026101000a8154816001600160401b0302191690836001600160401b0316021790555082805480611cd657611cd6612af6565b5f8281526020902060045f199092019182040180546001600160401b03600860038516026101000a02191690559055611d10600183612949565b15611d30576001600160401b0381165f9081526012602052604090208490555b6001600160a01b0386165f81815260116020908152604082208054600180820183558285529284206004820401805460039092166008026101000a6001600160401b0381810219909316928c1602919091179055929091529054611d949190612949565b6001600160401b039095165f90815260126020526040902094909455505050505050565b80826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115e291815260200190565b80545f908290611e5590600190612949565b81548110611e6557611e65612ae2565b5f918252602080832060048304015460039092166008026101000a9091046001600160401b0316808352600f8252604080842080546001600160a01b0319908116909155600e90935290922080549091166001600160a01b0386161790558254909150829080611ed757611ed7612af6565b5f828152602080822060045f1990940184810490910180546001600160401b0360086003808616820261010090810a840219909416909455939097556001600160a01b038a16808652601185526040862080546001818101835582895296882098810490980180548b8b169990951690950290920a968702969097021990911694909417905592905254611f6b9190612949565b6001600160401b0382165f818152601260205260409020919091556114189085908590611db8565b600b805467ffffffffffffffff19811660016001600160401b03928316810183169182179093555f818152600e6020908152604080832080546001600160a01b0319166001600160a01b03891690811790915583526011808352818420805486865260128552928520839055908352958101865594825281206004850401805460039095166008026101000a938402199094169282029290921790925561203b908383611db8565b919050565b805f0361204b575050565b8060010361205c57610e0382611f93565b600b546001600160a01b0383165f908152601160205260408120546001600160401b0390921691905b838110156121245760019283016001600160401b038181165f818152600e6020908152604080832080546001600160a01b0319166001600160a01b038d1690811790915560128352818420899055835260118252822080549889018155825281206004880401805460039098166008026101000a9384021990971692820292909217909555909361211891908790611db8565b60019182019101612085565b5050600b805467ffffffffffffffff1981166001600160401b039182169490940116929092179091555050565b6001600160e01b031981168114610cc6575f80fd5b5f60208284031215612176575f80fd5b8135610b9f81612151565b5f5b8381101561219b578181015183820152602001612183565b50505f910152565b5f81518084526121ba816020860160208601612181565b601f01601f19169290920160200192915050565b602081525f610b9f60208301846121a3565b5f602082840312156121f0575f80fd5b5035919050565b80356001600160a01b038116811461203b575f80fd5b5f806040838503121561221e575f80fd5b612227836121f7565b946020939093013593505050565b5f60208284031215612245575f80fd5b610b9f826121f7565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561228a5761228a61224e565b604052919050565b5f6001600160401b038211156122aa576122aa61224e565b50601f01601f191660200190565b5f6122ca6122c584612292565b612262565b90508281528383830111156122dd575f80fd5b828260208301375f602084830101529392505050565b5f82601f830112612302575f80fd5b610b9f838335602085016122b8565b5f805f8060808587031215612324575f80fd5b61232d856121f7565b935061233b602086016121f7565b92506040850135915060608501356001600160401b0381111561235c575f80fd5b612368878288016122f3565b91505092959194509250565b5f805f60608486031215612386575f80fd5b61238f846121f7565b925061239d602085016121f7565b9150604084013590509250925092565b5f602082840312156123bd575f80fd5b81356001600160401b038111156123d2575f80fd5b611bfa848285016122f3565b5f602082840312156123ee575f80fd5b81356001600160401b03811115612403575f80fd5b8201601f81018413612413575f80fd5b611bfa848235602084016122b8565b5f6020808385031215612433575f80fd5b82356001600160401b0380821115612449575f80fd5b818501915085601f83011261245c575f80fd5b81358181111561246e5761246e61224e565b8060051b915061247f848301612262565b8181529183018401918481019088841115612498575f80fd5b938501935b838510156124b65784358252938501939085019061249d565b98975050505050505050565b8035801515811461203b575f80fd5b5f602082840312156124e1575f80fd5b610b9f826124c2565b602080825282518282018190525f9190848201906040850190845b8181101561252a5783516001600160401b031683529284019291840191600101612505565b50909695505050505050565b5f8060408385031215612547575f80fd5b612550836121f7565b915061255e602084016124c2565b90509250929050565b5f8060408385031215612578575f80fd5b612581836121f7565b915061255e602084016121f7565b600181811c908216806125a357607f821691505b6020821081036125c157634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252601e908201527f453734313a20596f7520646f6e27742068617665207468652072696768740000604082015260600190565b6020808252601190820152702737ba103a3432903232bb32b637b832b960791b604082015260600190565b5f60208284031215612639575f80fd5b8151610b9f81612151565b5f82601f830112612653575f80fd5b81516126616122c582612292565b818152846020838601011115612675575f80fd5b611bfa826020830160208701612181565b5f805f805f8060c0878903121561269b575f80fd5b86516001600160401b03808211156126b1575f80fd5b6126bd8a838b01612644565b975060208901519150808211156126d2575f80fd5b6126de8a838b01612644565b96506040890151955060608901519150808211156126fa575f80fd5b6127068a838b01612644565b9450608089015191508082111561271b575f80fd5b5061272889828a01612644565b92505060a087015190509295509295509295565b601f821115610e0357805f5260205f20601f840160051c810160208510156127615750805b601f840160051c820191505b81811015612780575f815560010161276d565b5050505050565b81516001600160401b038111156127a0576127a061224e565b6127b4816127ae845461258f565b8461273c565b602080601f8311600181146127e7575f84156127d05750858301515b5f19600386901b1c1916600185901b17855561283e565b5f85815260208120601f198616915b82811015612815578886015182559484019460019091019084016127f6565b508582101561283257878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b8085111561289457815f190482111561287a5761287a612846565b8085161561288757918102915b93841c939080029061285f565b509250929050565b5f826128aa575060016108bc565b816128b657505f6108bc565b8160018114610a5757600281036128e35760ff8411156128d8576128d8612846565b50506001821b6108bc565b5060208310610133831016604e8410600b8410161715612906575081810a6108bc565b612910838361285a565b805f190482111561292357612923612846565b029392505050565b5f610b9f838361289c565b808201808211156108bc576108bc612846565b818103818111156108bc576108bc612846565b6001600160401b0382811682821603908082111561297c5761297c612846565b5092915050565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f906129b5908301846121a3565b9695505050505050565b5f81546129cb8161258f565b600182811680156129e357600181146129f857612a24565b60ff1984168752821515830287019450612a24565b855f526020805f205f5b85811015612a1b5781548a820152908401908201612a02565b50505082870194505b5050505092915050565b5f612a3982866129bf565b8451612a49818360208901612181565b612a55818301866129bf565b979650505050505050565b80820281158282048414176108bc576108bc612846565b634e487b7160e01b5f52601260045260245ffd5b5f82612a9957612a99612a77565b500690565b5f82612aac57612aac612a77565b500490565b5f60018201612ac257612ac2612846565b5060010190565b60ff81811683821601908111156108bc576108bc612846565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffdfea2646970667358221220259e0b2751dcfa8eb7c8c97871188823918458da3ccd8ad16b22cd269149b40164736f6c63430008180033

Deployed Bytecode Sourcemap

24395:1045:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23593:795;;;;;;;;;;-1:-1:-1;23593:795:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;23593:795:0;;;;;;;;7243:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22163:180::-;;;;;;;;;;-1:-1:-1;22163:180:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1697:32:1;;;1679:51;;1667:2;1652:18;22163:180:0;1533:203:1;9517:997:0;;;;;;;;;;-1:-1:-1;9517:997:0;;;;;:::i;:::-;;:::i;9057:101::-;;;;;;;;;;-1:-1:-1;9057:101:0;;;;;:::i;:::-;-1:-1:-1;;;;;9131:18:0;9117:4;9131:18;;;:9;:18;;;;;:25;;9057:101;;;;2515:25:1;;;2503:2;2488:18;9057:101:0;2369:177:1;5240:172:0;;;;;;;;;;-1:-1:-1;5240:172:0;;;;;:::i;:::-;-1:-1:-1;;;5240:172:0;;;;;;;;;;-1:-1:-1;;;;;;4424:33:1;;;4406:52;;4394:2;4379:18;5240:172:0;4262:202:1;25329:106:0;;;;;;;;;;;;;:::i;6564:45::-;;;;;;;;;;-1:-1:-1;6564:45:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;4631:31:1;;;4613:50;;4601:2;4586:18;6564:45:0;4469:200:1;19725:817:0;;;;;;;;;;-1:-1:-1;19725:817:0;;;;;:::i;:::-;;:::i;5746:23::-;;;;;;;;;;;;;:::i;5498:57::-;;;;;;;;;;;;5547:7;5498:57;;7413:76;;;;;;;;;;-1:-1:-1;7477:9:0;;7413:76;;23424:161;;;;;;;;;;;;;:::i;:::-;;20565:654;;;;;;:::i;:::-;;:::i;24463:614::-;;;;;;;;;;-1:-1:-1;24463:614:0;;;;;:::i;:::-;;:::i;5623:51::-;;;;;;;;;;;;5670:3;5623:51;;5776:22;;;;;;;;;;;;;:::i;6079:20::-;;;;;;;;;;-1:-1:-1;6079:20:0;;;;-1:-1:-1;;;;;6079:20:0;;;7913:93;;;;;;;;;;-1:-1:-1;7913:93:0;;;;;:::i;:::-;;:::i;25085:112::-;;;;;;;;;;-1:-1:-1;25085:112:0;;;;;:::i;:::-;;:::i;6400:50::-;;;;;;;;;;-1:-1:-1;6400:50:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;6400:50:0;;;9259:134;;;;;;;;;;-1:-1:-1;9259:134:0;;;;;:::i;:::-;;:::i;8843:101::-;;;;;;;;;;;;;:::i;5683:21::-;;;;;;;;;;;;;:::i;7672:104::-;;;;;;;;;;-1:-1:-1;7672:104:0;;;;;:::i;:::-;-1:-1:-1;;;;;7754:19:0;7739:4;7754:19;;;:10;:19;;;;;;;7672:104;8172:109;;;;;;;;;;-1:-1:-1;8172:109:0;;;;;:::i;:::-;;:::i;8950:101::-;;;;;;;;;;-1:-1:-1;8950:101:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;8389:75::-;;;;;;;;;;-1:-1:-1;8389:75:0;;;;;:::i;:::-;;:::i;6141:18::-;;;;;;;;;;-1:-1:-1;6141:18:0;;;;-1:-1:-1;;;6141:18:0;;-1:-1:-1;;;;;6141:18:0;;;8012:154;;;;;;;;;;-1:-1:-1;8012:154:0;;;;;:::i;:::-;;:::i;7326:81::-;;;;;;;;;;;;;:::i;25205:116::-;;;;;;:::i;22351:216::-;;;;;;;;;;-1:-1:-1;22351:216:0;;;;;:::i;:::-;;:::i;6166:32::-;;;;;;;;;;-1:-1:-1;6166:32:0;;;;-1:-1:-1;;;6166:32:0;;;;;;19343:339;;;;;;;;;;-1:-1:-1;19343:339:0;;;;;:::i;:::-;;:::i;6205:37::-;;;;;;;;;;-1:-1:-1;6205:37:0;;;;-1:-1:-1;;;6205:37:0;;;;;;21242:675;;;;;;:::i;:::-;;:::i;22739:284::-;;;;;;;;;;-1:-1:-1;22739:284:0;;;;;:::i;:::-;;:::i;7583:83::-;;;;;;;;;;;;;:::i;7782:125::-;;;;;;;;;;-1:-1:-1;7782:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;7878:17:0;;;7863:4;7878:17;;;:10;:17;;;;;;;;:26;;;;;;;;;;;;;7782:125;9164:89;;;;;;;;;;;;;:::i;8287:96::-;;;;;;;;;;-1:-1:-1;8287:96:0;;;;;:::i;:::-;;:::i;22575:156::-;;;;;;;;;;-1:-1:-1;22575:156:0;;;;;:::i;:::-;;:::i;9400:109::-;;;;;;;;;;-1:-1:-1;9400:109:0;;;;;:::i;:::-;9478:10;9462:27;;;;:15;:27;;;;;:44;;-1:-1:-1;;9462:44:0;;;;;;;;;;9400:109;23593:795;23964:20;;23670:4;;-1:-1:-1;;;23964:20:0;;;;:49;;;;-1:-1:-1;;;;;;;;;;23988:25:0;;;23964:49;23963:127;;;-1:-1:-1;;;;;;;;;;24065:25:0;;;23963:127;:203;;;-1:-1:-1;;;;;;;;;;24141:25:0;;;23963:203;:278;;;-1:-1:-1;;;;;;;;;;24216:25:0;;;23963:278;:368;;;-1:-1:-1;;;;;;;;;;24306:25:0;;;23963:368;23687:644;23593:795;-1:-1:-1;;23593:795:0:o;7243:77::-;7288:13;7312:5;7305:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7243:77;:::o;22163:180::-;22231:7;22255:16;;;:7;:16;;;;;;-1:-1:-1;;;;;22255:16:0;22251:44;;22287:8;;;22251:44;-1:-1:-1;22313:22:0;;;;:13;:22;;;;;;-1:-1:-1;;;;;22313:22:0;;22163:180::o;9517:997::-;9589:4;9759:3;;9749:6;:13;;:32;;;;;9776:5;;9766:6;:15;;9749:32;9746:449;;;9798:13;9814:15;;;:7;:15;;;;;;-1:-1:-1;;;;;9814:15:0;9904:10;:19;;;;;:59;;;9928:35;9945:5;9952:10;9928:16;:35::i;:::-;9927:36;9904:59;9900:101;;;9965:36;;-1:-1:-1;;;9965:36:0;;8859:2:1;9965:36:0;;;8841:21:1;8898:2;8878:18;;;8871:30;8937:28;8917:18;;;8910:56;8983:18;;9965:36:0;;;;;;;;9900:101;10016:21;;;;:13;:21;;;;;:31;;-1:-1:-1;;;;;;10016:31:0;-1:-1:-1;;;;;10016:31:0;;;;;10112:45;10134:5;10016:31;:21;10112;:45::i;:::-;10179:4;10172:11;;;;;9746:449;10395:10;10384:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;10384:31:0;;;;;;;;;:40;;;10435:49;;10407:7;10418:6;10435:20;:49::i;:::-;-1:-1:-1;10502:4:0;9517:997;;;;:::o;25329:106::-;25390:4;25415:11;:9;:11::i;:::-;25408:18;;25329:106;:::o;6564:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6564:45:0;;:::o;19725:817::-;19811:4;19940:3;;19930:6;:13;;:32;;;;;19957:5;;19947:6;:15;;19930:32;19927:489;;;20119:10;-1:-1:-1;;;;;20119:18:0;;;;:55;;;20155:19;20167:6;20155:11;:19::i;:::-;-1:-1:-1;;;;;20141:33:0;:10;-1:-1:-1;;;;;20141:33:0;;20119:55;:93;;;;20178:34;20195:4;20201:10;20178:16;:34::i;:::-;19979:303;;;;-1:-1:-1;;;19979:303:0;;;;;;;:::i;:::-;20299:38;20312:4;20318:2;20329:6;20299:12;:38::i;:::-;20352:26;20364:4;20370:2;20374:3;;20352:11;:26::i;:::-;-1:-1:-1;20400:4:0;20393:11;;19927:489;20428:41;20444:4;20450:10;20462:6;20428:15;:41::i;:::-;20480:30;20493:4;20499:2;20503:6;20480:12;:30::i;:::-;-1:-1:-1;20528:4:0;19725:817;;;;;;:::o;5746:23::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23424:161::-;6884:3;;-1:-1:-1;;;6884:3:0;;-1:-1:-1;;;;;6884:3:0;6870:10;:17;6862:47;;;;-1:-1:-1;;;6862:47:0;;;;;;;:::i;:::-;23507:3:::1;::::0;23499:51:::1;::::0;23482:12:::1;::::0;-1:-1:-1;;;23507:3:0;::::1;-1:-1:-1::0;;;;;23507:3:0::1;::::0;23524:21:::1;::::0;23482:12;23499:51;23482:12;23499:51;23524:21;23507:3;23499:51:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23481:69;;;23569:7;23561:16;;;::::0;::::1;;23470:115;23424:161::o:0;20565:654::-;20695:10;-1:-1:-1;;;;;20695:18:0;;;;:56;;;20731:20;20743:7;20731:11;:20::i;:::-;-1:-1:-1;;;;;20717:34:0;:10;-1:-1:-1;;;;;20717:34:0;;20695:56;:94;;;;20755:34;20772:4;20778:10;20755:16;:34::i;:::-;20669:186;;;;-1:-1:-1;;;20669:186:0;;;;;;;:::i;:::-;20866:39;20879:4;20885:2;20896:7;20866:12;:39::i;:::-;20917:26;20929:4;20935:2;20939:3;;20917:11;:26::i;:::-;-1:-1:-1;;;;;20974:14:0;;;:19;;;;:171;;-1:-1:-1;21010:72:0;;-1:-1:-1;;;21010:72:0;;;21052:10;21010:72;;;10232:34:1;-1:-1:-1;;;;;10302:15:1;;;10282:18;;;10275:43;10334:18;;;10327:34;;;10397:3;10377:18;;;10370:31;-1:-1:-1;10417:19:1;;;10410:30;21099:46:0;;21010:41;;;;21099:46;;10457:19:1;;21010:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;21010:135:0;;;20974:171;20956:256;;;21179:21;;-1:-1:-1;;;21179:21:0;;;;;;;;;;;20956:256;20565:654;;;:::o;24463:614::-;24540:7;24567:9;;24580:1;24567:14;24559:46;;;;-1:-1:-1;;;24559:46:0;;10943:2:1;24559:46:0;;;10925:21:1;10982:2;10962:18;;;10955:30;-1:-1:-1;;;11001:18:1;;;10994:49;11060:18;;24559:46:0;10741:343:1;24559:46:0;24691:17;24680:70;;;;;;;;;;;;:::i;:::-;24667:9;24616:134;;;24617:5;;24624:7;24617:5;24633:9;24617:5;;;24653:12;24616:134;;24653:12;24616:134;:::i;:::-;-1:-1:-1;24616:134:0;;-1:-1:-1;24616:134:0;;;:::i;:::-;-1:-1:-1;;24616:134:0;;;-1:-1:-1;24616:134:0;;;;:::i;:::-;-1:-1:-1;24616:134:0;;-1:-1:-1;24616:134:0;;;:::i;:::-;;;;;;;;24783:9;;24777:2;:15;;;;:::i;:::-;24771:3;:21;;;24817:9;;24829:1;;24811:15;;24817:9;24811:15;:::i;:::-;:19;;;;:::i;:::-;24803:5;:27;24857:3;;24850:15;;24864:1;;24850:15;:::i;:::-;24841:6;:24;;-1:-1:-1;;24841:24:0;-1:-1:-1;;;;;24841:24:0;;;;;;;;;;24954:13;:11;:13::i;:::-;24940:10;24929:22;;;;:10;:22;;;;;:38;24994:9;;24988:3;;:15;24980:61;;;;-1:-1:-1;;;24980:61:0;;16959:2:1;24980:61:0;;;16941:21:1;16998:2;16978:18;;;16971:30;17037:34;17017:18;;;17010:62;-1:-1:-1;;;17088:18:1;;;17081:31;17129:19;;24980:61:0;16757:397:1;24980:61:0;-1:-1:-1;25067:1:0;;24463:614;-1:-1:-1;24463:614:0:o;5776:22::-;;;;;;;:::i;7913:93::-;6884:3;;-1:-1:-1;;;6884:3:0;;-1:-1:-1;;;;;6884:3:0;6870:10;:17;6862:47;;;;-1:-1:-1;;;6862:47:0;;;;;;;:::i;:::-;7984:7:::1;:20;7994:10:::0;7984:7;:20:::1;:::i;:::-;;7913:93:::0;:::o;25085:112::-;25168:21;;-1:-1:-1;;;25168:21:0;;17361:2:1;25168:21:0;;;17343::1;17400:2;17380:18;;;17373:30;-1:-1:-1;;;17419:18:1;;;17412:41;17470:18;;25168:21:0;17159:335:1;9259:134:0;6884:3;;-1:-1:-1;;;6884:3:0;;-1:-1:-1;;;;;6884:3:0;6870:10;:17;6862:47;;;;-1:-1:-1;;;6862:47:0;;;;;;;:::i;:::-;9350:17:::1;:40:::0;;;::::1;;-1:-1:-1::0;;;9350:40:0::1;-1:-1:-1::0;;;;9350:40:0;;::::1;::::0;;;::::1;::::0;;9259:134::o;8843:101::-;6884:3;;-1:-1:-1;;;6884:3:0;;-1:-1:-1;;;;;6884:3:0;6870:10;:17;6862:47;;;;-1:-1:-1;;;6862:47:0;;;;;;;:::i;:::-;8922:20:::1;::::0;;-1:-1:-1;;;;8898:44:0;::::1;-1:-1:-1::0;;;8922:20:0;;;::::1;;;8921:21;8898:44:::0;;::::1;;::::0;;8843:101::o;5683:21::-;;;;;;;:::i;8172:109::-;6884:3;;-1:-1:-1;;;6884:3:0;;-1:-1:-1;;;;;6884:3:0;6870:10;:17;6862:47;;;;-1:-1:-1;;;6862:47:0;;;;;;;:::i;:::-;8255:9:::1;:24;8267:12:::0;8255:9;:24:::1;:::i;8950:101::-:0;-1:-1:-1;;;;;9033:16:0;;;;;;:9;:16;;;;;;;;;9026:23;;;;;;;;;;;;;;;;;9009:15;;9026:23;;;9033:16;9026:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9026:23:0;-1:-1:-1;;;;;9026:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8950:101;;;:::o;8389:75::-;6884:3;;-1:-1:-1;;;6884:3:0;;-1:-1:-1;;;;;6884:3:0;6870:10;:17;6862:47;;;;-1:-1:-1;;;6862:47:0;;;;;;;:::i;:::-;8450:3:::1;:12:::0;;-1:-1:-1;;;;;8450:12:0;;::::1;-1:-1:-1::0;;;8450:12:0::1;-1:-1:-1::0;;;;;;8450:12:0;;::::1;::::0;;;::::1;::::0;;8389:75::o;8012:154::-;6884:3;;-1:-1:-1;;;6884:3:0;;-1:-1:-1;;;;;6884:3:0;6870:10;:17;6862:47;;;;-1:-1:-1;;;6862:47:0;;;;;;;:::i;:::-;8099:12:::1;:29;8114:14:::0;8099:12;:29:::1;:::i;:::-;-1:-1:-1::0;8135:29:0::1;::::0;::::1;::::0;;;::::1;8012:154:::0;:::o;7326:81::-;7373:13;7397:7;7390:14;;;;;:::i;22351:216::-;22457:10;22438:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;22438:40:0;;;;;;;;;:51;;-1:-1:-1;;22438:51:0;;;;;;;22500:59;;22438:40;:51;22500:27;:59::i;19343:339::-;19411:4;19431:15;;;:7;:15;;;;;;19450:10;-1:-1:-1;;;;;19431:15:0;;;:29;19428:178;;19477:44;19490:10;19502:2;19513:6;19477:12;:44::i;:::-;19536:32;19548:10;19560:2;19564:3;;19536:11;:32::i;:::-;-1:-1:-1;19590:4:0;19583:11;;19428:178;19616:36;19629:10;19641:2;19645:6;19616:12;:36::i;21242:675::-;21391:10;-1:-1:-1;;;;;21391:18:0;;;;:56;;;21427:20;21439:7;21427:11;:20::i;:::-;-1:-1:-1;;;;;21413:34:0;:10;-1:-1:-1;;;;;21413:34:0;;21391:56;:94;;;;21451:34;21468:4;21474:10;21451:16;:34::i;:::-;21365:186;;;;-1:-1:-1;;;21365:186:0;;;;;;;:::i;:::-;21562:39;21575:4;21581:2;21592:7;21562:12;:39::i;:::-;21613:26;21625:4;21631:2;21635:3;;21613:11;:26::i;:::-;-1:-1:-1;;;;;21670:14:0;;;:19;;;;:173;;-1:-1:-1;21706:74:0;;-1:-1:-1;;;21706:74:0;;;21797:46;-1:-1:-1;;;;;21706:41:0;;;21797:46;;21706:74;;21748:10;;21760:4;;21766:7;;21775:4;;21706:74;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;21706:137:0;;;21670:173;21652:258;;;21877:21;;-1:-1:-1;;;21877:21:0;;;;;;;;;;;21652:258;21242:675;;;;:::o;22739:284::-;22803:13;22848:5;;22837:7;:16;;22829:45;;;;-1:-1:-1;;;22829:45:0;;18195:2:1;22829:45:0;;;18177:21:1;18234:2;18214:18;;;18207:30;-1:-1:-1;;;18253:18:1;;;18246:46;18309:18;;22829:45:0;17993:340:1;22829:45:0;22895:7;22889:21;;;;;:::i;:::-;;;22914:1;22889:26;22885:44;;-1:-1:-1;;22918:9:0;;;;;;;;;-1:-1:-1;22918:9:0;;;22739:284::o;22885:44::-;22970:7;22979:23;22998:3;;22988:7;:13;;;;:::i;:::-;22979:8;:23::i;:::-;23004:9;22953:61;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22939:76;;22739:284;;;:::o;7583:83::-;7633:4;7660:3;;7648:9;;:15;;;;:::i;9164:89::-;9216:13;9239:12;9232:19;;;;;:::i;8287:96::-;6884:3;;-1:-1:-1;;;6884:3:0;;-1:-1:-1;;;;;6884:3:0;6870:10;:17;6862:47;;;;-1:-1:-1;;;6862:47:0;;;;;;;:::i;:::-;8359:8:::1;:22;8370:11:::0;8359:8;:22:::1;:::i;22575:156::-:0;-1:-1:-1;;;;;22688:25:0;;;22664:4;22688:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;22575:156::o;1087:126::-;1201:8;1191;-1:-1:-1;;;;;1174:36:0;1183:6;-1:-1:-1;;;;;1174:36:0;;;;;;;;;;;1087:126;;;:::o;519:122::-;621:8;-1:-1:-1;;;;;604:34:0;613:6;-1:-1:-1;;;;;604:34:0;;631:6;604:34;;;;2515:25:1;;2503:2;2488:18;;2369:177;604:34:0;;;;;;;;519:122;;;:::o;17812:529::-;-1:-1:-1;;;;;17920:16:0;;;;;;:7;:16;;;;;;-1:-1:-1;;;;;17912:24:0;;;17920:16;;17912:24;17904:58;;;;-1:-1:-1;;;17904:58:0;;19915:2:1;17904:58:0;;;19897:21:1;19954:2;19934:18;;;19927:30;-1:-1:-1;;;19973:18:1;;;19966:51;20034:18;;17904:58:0;19713:345:1;17904:58:0;-1:-1:-1;;;;;18028:22:0;;;;;;:13;:22;;;;;;;;18021:29;;-1:-1:-1;;;;;;18021:29:0;;;;;;18099:7;:16;;;;;;:21;;;;;-1:-1:-1;;;;;18099:21:0;;;;;18174:35;18191:4;18099:21;18028:22;18174:16;:35::i;:::-;18260:40;18282:4;18288:2;18292:7;-1:-1:-1;;;;;18260:40:0;:21;:40::i;17349:361::-;-1:-1:-1;;;;;17432:16:0;;;;;;:10;:16;;;;;:26;;17452:6;;17432:16;:26;;17452:6;;17432:26;:::i;:::-;;;;-1:-1:-1;;;;;;;17541:14:0;;;;;;:10;:14;;;;;:24;;;;;;17632:38;17653:4;17552:2;17559:6;17632:20;:38::i;21925:230::-;-1:-1:-1;;;;;22031:17:0;;;;;;;:10;:17;;;;;;;;:26;;;;;;;;;;:36;-1:-1:-1;22031:36:0;22023:77;;;;-1:-1:-1;;;22023:77:0;;20265:2:1;22023:77:0;;;20247:21:1;20304:2;20284:18;;;20277:30;20343;20323:18;;;20316:58;20391:18;;22023:77:0;20063:352:1;22023:77:0;-1:-1:-1;;;;;22111:17:0;;;;;;;:10;:17;;;;;;;;:26;;;;;;;;;;;:36;;22141:6;;22111:17;:36;;22141:6;;22111:36;:::i;:::-;;;;-1:-1:-1;;;;;21925:230:0:o;10522:3875::-;-1:-1:-1;;;;;10629:16:0;;;;;;:10;:16;;;;;;:26;-1:-1:-1;10629:26:0;10621:76;;;;-1:-1:-1;;;10621:76:0;;20622:2:1;10621:76:0;;;20604:21:1;20661:2;20641:18;;;20634:30;20700:34;20680:18;;;20673:62;-1:-1:-1;;;20751:18:1;;;20744:35;20796:19;;10621:76:0;20420:401:1;10621:76:0;10860:3;;-1:-1:-1;;;;;10841:16:0;;10815:23;10841:16;;;:10;:16;;;;;;10815:23;;10841:22;;;:::i;:::-;10915:3;;-1:-1:-1;;;;;10898:14:0;;10874:21;10898:14;;;:10;:14;;;;;;10815:48;;-1:-1:-1;10874:21:0;10898:20;;10915:3;10898:20;:::i;:::-;10874:44;;10983:29;10995:4;11001:2;11005:6;10983:11;:29::i;:::-;11160:3;;-1:-1:-1;;;;;11141:16:0;;11114:24;11141:16;;;:10;:16;;;;;;11114:24;;11141:22;;;:::i;:::-;11216:3;;-1:-1:-1;;;;;11199:14:0;;11174:22;11199:14;;;:10;:14;;;;;;11114:49;;-1:-1:-1;11174:22:0;11199:20;;11216:3;11199:20;:::i;:::-;-1:-1:-1;;;;;11356:15:0;;11322:31;11356:15;;;:9;:15;;;;;5547:7;11501:25;;;11174:45;;-1:-1:-1;11501:25:0;11659:34;;;11655:384;;;11715:21;;:25;11712:316;;11892:53;11908:4;5547:7;11930:14;11892:15;:53::i;:::-;12185:14;12169:13;:30;12165:308;;;12221:21;;:25;12218:230;;12303:51;5547:7;12335:2;12339:14;12303:15;:51::i;:::-;12218:230;;;12423:9;12429:2;12423:5;:9::i;:::-;;12218:230;12570:19;12601:3;;12592:6;:12;;;;:::i;:::-;12628:21;;13043:17;;12570:34;;-1:-1:-1;12628:21:0;-1:-1:-1;;;13043:17:0;;;;;:44;;-1:-1:-1;;;;;;13064:23:0;;;13043:44;:67;;;-1:-1:-1;;;;;;13091:19:0;;;;;;:15;:19;;;;;;;;13043:67;:92;;;-1:-1:-1;;;;;;13114:21:0;;;;;;:15;:21;;;;;;;;13043:92;:107;;;-1:-1:-1;13147:3:0;;-1:-1:-1;;;;;13139:11:0;;;-1:-1:-1;;;13147:3:0;;;;13139:11;13043:107;13040:305;;;13307:3;13290:14;:20;:43;;13330:3;13290:43;;;13313:14;13290:43;13273:60;;13040:305;13360:18;;13357:1033;;13432:3;13415:14;:20;:43;;13455:3;13415:43;;;13438:14;13415:43;13409:49;;13701:6;13696:108;13717:3;13713:1;:7;13696:108;;;13746:41;13762:4;13768:2;13772:14;13746:15;:41::i;:::-;13722:3;;13696:108;;;-1:-1:-1;13818:21:0;13836:3;13818:21;;:::i;:::-;13860;;13818;;-1:-1:-1;13860:21:0;-1:-1:-1;13902:20:0;;;:43;;13942:3;13902:43;;;13925:14;13902:43;13896:49;;14204:6;14199:125;14220:3;14216:1;:7;14199:125;;;14257:51;5547:7;14289:2;14293:14;14257:15;:51::i;:::-;14225:3;;14199:125;;;-1:-1:-1;14340:36:0;14351:2;14355:20;14372:3;14355:14;:20;:::i;:::-;14340:10;:36::i;:::-;10600:3797;;;;;;;;10522:3875;;;:::o;1219:142::-;1337:9;-1:-1:-1;;;;;1314:44:0;1329:6;-1:-1:-1;;;;;1314:44:0;;1348:9;1314:44;;;;565:14:1;558:22;540:41;;528:2;513:18;;400:187;23031:385:0;23087:13;23117:5;23126:1;23117:10;23113:29;;-1:-1:-1;;23130:10:0;;;;;;;;;;;;-1:-1:-1;;;23130:10:0;;;;;23031:385::o;23113:29::-;23158:5;23143:12;23190:41;23197:9;;23190:41;;23209:8;;;;:::i;:::-;;-1:-1:-1;23219:10:0;;-1:-1:-1;23227:2:0;23219:10;;:::i;:::-;;;23190:41;;;23232:19;23264:6;-1:-1:-1;;;;;23254:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23254:17:0;;23232:39;;23282:95;23289:10;;23282:95;;23302:11;23312:1;23302:11;;:::i;:::-;;-1:-1:-1;23345:10:0;23353:2;23345:5;:10;:::i;:::-;23339:22;;23359:2;23339:22;:::i;:::-;23332:30;;23315:6;23322;23315:14;;;;;;;;:::i;:::-;;;;:47;-1:-1:-1;;;;;23315:47:0;;;;;;;;-1:-1:-1;23364:11:0;23373:2;23364:11;;:::i;:::-;;;23282:95;;;23401:6;23031:385;-1:-1:-1;;;;23031:385:0:o;16248:1045::-;-1:-1:-1;;;;;16353:18:0;;16337:13;16353:18;;;:9;:18;;;;;;;;;-1:-1:-1;;;;;16464:15:0;;;;:9;:15;;;;;16553;;16353:18;;16464:15;;16553;16464;16651:7;16657:1;16553:15;16651:7;:::i;:::-;16642:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16642:17:0;16621:38;;16763:11;16745:8;16754:5;16745:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:29;;;;;-1:-1:-1;;;;;16745:29:0;;;;;-1:-1:-1;;;;;16745:29:0;;;;;;16851:8;:14;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;16851:14:0;;;;;;;;;-1:-1:-1;;;;;16851:14:0;;;;;;;;;;;;;;16972:7;16851:14;16972:3;:7;:::i;:::-;:12;16969:115;;-1:-1:-1;;;;;17001:22:0;;;;;;:9;:22;;;;;:30;;;16969:115;-1:-1:-1;;;;;17101:13:0;;;;;;:9;:13;;;;;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17101:27:0;;;;;;;;;;;;;;;;;17207:13;;;;:20;;:24;;17101:27;17207:24;:::i;:::-;-1:-1:-1;;;;;17186:18:0;;;;;;;:9;:18;;;;;:45;;;;-1:-1:-1;;;;;;16248:1045:0:o;967:114::-;1069:8;1064:3;-1:-1:-1;;;;;1048:30:0;1057:5;-1:-1:-1;;;;;1048:30:0;;;;;;;;;;;967:114;;;:::o;401:112::-;497:3;-1:-1:-1;;;;;481:29:0;490:5;-1:-1:-1;;;;;481:29:0;;502:7;481:29;;;;2515:25:1;;2503:2;2488:18;;2369:177;18443:768:0;18575:15;;18549:14;;18566:8;;18575:19;;18593:1;;18575:19;:::i;:::-;18566:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18566:29:0;18623:22;;;:13;:22;;;;;;18616:29;;-1:-1:-1;;;;;;18616:29:0;;;;;;18694:7;:16;;;;;;:21;;;;;-1:-1:-1;;;;;18694:21:0;;;;;18821:14;;18566:29;;-1:-1:-1;18821:14:0;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;18821:14:0;;;;;;;;;;;-1:-1:-1;;;;;18821:14:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18933:13:0;;;;;:9;:13;;;;;:27;;18821:14;18933:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19039:13;;;:20;:24;;18821:14;19039:24;:::i;:::-;-1:-1:-1;;;;;19018:18:0;;;;;;:9;:18;;;;;:45;;;;19130:40;;19152:4;;19158:2;;19130:21;:40::i;15512:632::-;15615:6;:8;;-1:-1:-1;;15615:8:0;;;-1:-1:-1;;;;;15615:8:0;;;;;;;;;;;;;-1:-1:-1;15757:16:0;;;:7;:16;;;;;;;;:21;;-1:-1:-1;;;;;;15757:21:0;-1:-1:-1;;;;;15757:21:0;;;;;;;;15852:13;;:9;:13;;;;;;:20;;15831:18;;;:9;:18;;;;;:41;;;15940:13;;;:27;;;;;;;;;;;;;;;;;;;;;;15615:8;15940:27;;;;;;;;;;;;;;;;;;16048:48;;15757:21;15615:8;16048:21;:48::i;:::-;15512:632;;;:::o;14405:1097::-;14484:6;14494:1;14484:11;14481:23;;14405:1097;;:::o;14481:23::-;14546:6;14556:1;14546:11;14543:105;;14606:9;14612:2;14606:5;:9::i;14543:105::-;14670:6;;-1:-1:-1;;;;;14741:13:0;;14658:9;14741:13;;;:9;:13;;;;;:20;-1:-1:-1;;;;;14670:6:0;;;;14741:20;14812:583;14832:6;14828:1;:10;14812:583;;;14885:4;;;;-1:-1:-1;;;;;14952:11:0;;;;;;;:7;:11;;;;;;;;:16;;-1:-1:-1;;;;;;14952:16:0;-1:-1:-1;;;;;14952:16:0;;;;;;;;15011:9;:13;;;;;:24;;;15094:13;;:9;:13;;;;:22;;;;;;;;;;;;;;;;;;;;;;;14952:16;15094:22;;;;;;;;;;;;;;;;;;14885:4;;15167:43;;14952:11;:16;;15167:21;:43::i;:::-;15283:10;;;;;15345:3;14812:583;;;-1:-1:-1;;15430:6:0;:24;;-1:-1:-1;;15430:24:0;;-1:-1:-1;;;;;15430:24:0;;;;;;;;;;;;;;;-1:-1:-1;;14405:1097:0:o;14:131:1:-;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:250::-;677:1;687:113;701:6;698:1;695:13;687:113;;;777:11;;;771:18;758:11;;;751:39;723:2;716:10;687:113;;;-1:-1:-1;;834:1:1;816:16;;809:27;592:250::o;847:271::-;889:3;927:5;921:12;954:6;949:3;942:19;970:76;1039:6;1032:4;1027:3;1023:14;1016:4;1009:5;1005:16;970:76;:::i;:::-;1100:2;1079:15;-1:-1:-1;;1075:29:1;1066:39;;;;1107:4;1062:50;;847:271;-1:-1:-1;;847:271:1:o;1123:220::-;1272:2;1261:9;1254:21;1235:4;1292:45;1333:2;1322:9;1318:18;1310:6;1292:45;:::i;1348:180::-;1407:6;1460:2;1448:9;1439:7;1435:23;1431:32;1428:52;;;1476:1;1473;1466:12;1428:52;-1:-1:-1;1499:23:1;;1348:180;-1:-1:-1;1348:180:1:o;1741:173::-;1809:20;;-1:-1:-1;;;;;1858:31:1;;1848:42;;1838:70;;1904:1;1901;1894:12;1919:254;1987:6;1995;2048:2;2036:9;2027:7;2023:23;2019:32;2016:52;;;2064:1;2061;2054:12;2016:52;2087:29;2106:9;2087:29;:::i;:::-;2077:39;2163:2;2148:18;;;;2135:32;;-1:-1:-1;;;1919:254:1:o;2178:186::-;2237:6;2290:2;2278:9;2269:7;2265:23;2261:32;2258:52;;;2306:1;2303;2296:12;2258:52;2329:29;2348:9;2329:29;:::i;2551:127::-;2612:10;2607:3;2603:20;2600:1;2593:31;2643:4;2640:1;2633:15;2667:4;2664:1;2657:15;2683:275;2754:2;2748:9;2819:2;2800:13;;-1:-1:-1;;2796:27:1;2784:40;;-1:-1:-1;;;;;2839:34:1;;2875:22;;;2836:62;2833:88;;;2901:18;;:::i;:::-;2937:2;2930:22;2683:275;;-1:-1:-1;2683:275:1:o;2963:186::-;3011:4;-1:-1:-1;;;;;3036:6:1;3033:30;3030:56;;;3066:18;;:::i;:::-;-1:-1:-1;3132:2:1;3111:15;-1:-1:-1;;3107:29:1;3138:4;3103:40;;2963:186::o;3154:336::-;3218:5;3247:52;3263:35;3291:6;3263:35;:::i;:::-;3247:52;:::i;:::-;3238:61;;3322:6;3315:5;3308:21;3362:3;3353:6;3348:3;3344:16;3341:25;3338:45;;;3379:1;3376;3369:12;3338:45;3428:6;3423:3;3416:4;3409:5;3405:16;3392:43;3482:1;3475:4;3466:6;3459:5;3455:18;3451:29;3444:40;3154:336;;;;;:::o;3495:220::-;3537:5;3590:3;3583:4;3575:6;3571:17;3567:27;3557:55;;3608:1;3605;3598:12;3557:55;3630:79;3705:3;3696:6;3683:20;3676:4;3668:6;3664:17;3630:79;:::i;3720:537::-;3815:6;3823;3831;3839;3892:3;3880:9;3871:7;3867:23;3863:33;3860:53;;;3909:1;3906;3899:12;3860:53;3932:29;3951:9;3932:29;:::i;:::-;3922:39;;3980:38;4014:2;4003:9;3999:18;3980:38;:::i;:::-;3970:48;;4065:2;4054:9;4050:18;4037:32;4027:42;;4120:2;4109:9;4105:18;4092:32;-1:-1:-1;;;;;4139:6:1;4136:30;4133:50;;;4179:1;4176;4169:12;4133:50;4202:49;4243:7;4234:6;4223:9;4219:22;4202:49;:::i;:::-;4192:59;;;3720:537;;;;;;;:::o;4674:328::-;4751:6;4759;4767;4820:2;4808:9;4799:7;4795:23;4791:32;4788:52;;;4836:1;4833;4826:12;4788:52;4859:29;4878:9;4859:29;:::i;:::-;4849:39;;4907:38;4941:2;4930:9;4926:18;4907:38;:::i;:::-;4897:48;;4992:2;4981:9;4977:18;4964:32;4954:42;;4674:328;;;;;:::o;5007:320::-;5075:6;5128:2;5116:9;5107:7;5103:23;5099:32;5096:52;;;5144:1;5141;5134:12;5096:52;5184:9;5171:23;-1:-1:-1;;;;;5209:6:1;5206:30;5203:50;;;5249:1;5246;5239:12;5203:50;5272:49;5313:7;5304:6;5293:9;5289:22;5272:49;:::i;5332:450::-;5401:6;5454:2;5442:9;5433:7;5429:23;5425:32;5422:52;;;5470:1;5467;5460:12;5422:52;5510:9;5497:23;-1:-1:-1;;;;;5535:6:1;5532:30;5529:50;;;5575:1;5572;5565:12;5529:50;5598:22;;5651:4;5643:13;;5639:27;-1:-1:-1;5629:55:1;;5680:1;5677;5670:12;5629:55;5703:73;5768:7;5763:2;5750:16;5745:2;5741;5737:11;5703:73;:::i;5787:946::-;5871:6;5902:2;5945;5933:9;5924:7;5920:23;5916:32;5913:52;;;5961:1;5958;5951:12;5913:52;6001:9;5988:23;-1:-1:-1;;;;;6071:2:1;6063:6;6060:14;6057:34;;;6087:1;6084;6077:12;6057:34;6125:6;6114:9;6110:22;6100:32;;6170:7;6163:4;6159:2;6155:13;6151:27;6141:55;;6192:1;6189;6182:12;6141:55;6228:2;6215:16;6250:2;6246;6243:10;6240:36;;;6256:18;;:::i;:::-;6302:2;6299:1;6295:10;6285:20;;6325:28;6349:2;6345;6341:11;6325:28;:::i;:::-;6387:15;;;6457:11;;;6453:20;;;6418:12;;;;6485:19;;;6482:39;;;6517:1;6514;6507:12;6482:39;6541:11;;;;6561:142;6577:6;6572:3;6569:15;6561:142;;;6643:17;;6631:30;;6594:12;;;;6681;;;;6561:142;;;6722:5;5787:946;-1:-1:-1;;;;;;;;5787:946:1:o;6738:160::-;6803:20;;6859:13;;6852:21;6842:32;;6832:60;;6888:1;6885;6878:12;6903:180;6959:6;7012:2;7000:9;6991:7;6987:23;6983:32;6980:52;;;7028:1;7025;7018:12;6980:52;7051:26;7067:9;7051:26;:::i;7088:655::-;7257:2;7309:21;;;7379:13;;7282:18;;;7401:22;;;7228:4;;7257:2;7480:15;;;;7454:2;7439:18;;;7228:4;7523:194;7537:6;7534:1;7531:13;7523:194;;;7602:13;;-1:-1:-1;;;;;7598:38:1;7586:51;;7692:15;;;;7657:12;;;;7559:1;7552:9;7523:194;;;-1:-1:-1;7734:3:1;;7088:655;-1:-1:-1;;;;;;7088:655:1:o;7748:254::-;7813:6;7821;7874:2;7862:9;7853:7;7849:23;7845:32;7842:52;;;7890:1;7887;7880:12;7842:52;7913:29;7932:9;7913:29;:::i;:::-;7903:39;;7961:35;7992:2;7981:9;7977:18;7961:35;:::i;:::-;7951:45;;7748:254;;;;;:::o;8007:260::-;8075:6;8083;8136:2;8124:9;8115:7;8111:23;8107:32;8104:52;;;8152:1;8149;8142:12;8104:52;8175:29;8194:9;8175:29;:::i;:::-;8165:39;;8223:38;8257:2;8246:9;8242:18;8223:38;:::i;8272:380::-;8351:1;8347:12;;;;8394;;;8415:61;;8469:4;8461:6;8457:17;8447:27;;8415:61;8522:2;8514:6;8511:14;8491:18;8488:38;8485:161;;8568:10;8563:3;8559:20;8556:1;8549:31;8603:4;8600:1;8593:15;8631:4;8628:1;8621:15;8485:161;;8272:380;;;:::o;9012:354::-;9214:2;9196:21;;;9253:2;9233:18;;;9226:30;9292:32;9287:2;9272:18;;9265:60;9357:2;9342:18;;9012:354::o;9371:341::-;9573:2;9555:21;;;9612:2;9592:18;;;9585:30;-1:-1:-1;;;9646:2:1;9631:18;;9624:47;9703:2;9688:18;;9371:341::o;10487:249::-;10556:6;10609:2;10597:9;10588:7;10584:23;10580:32;10577:52;;;10625:1;10622;10615:12;10577:52;10657:9;10651:16;10676:30;10700:5;10676:30;:::i;11089:442::-;11143:5;11196:3;11189:4;11181:6;11177:17;11173:27;11163:55;;11214:1;11211;11204:12;11163:55;11243:6;11237:13;11274:48;11290:31;11318:2;11290:31;:::i;11274:48::-;11347:2;11338:7;11331:19;11393:3;11386:4;11381:2;11373:6;11369:15;11365:26;11362:35;11359:55;;;11410:1;11407;11400:12;11359:55;11423:77;11497:2;11490:4;11481:7;11477:18;11470:4;11462:6;11458:17;11423:77;:::i;11536:1095::-;11691:6;11699;11707;11715;11723;11731;11784:3;11772:9;11763:7;11759:23;11755:33;11752:53;;;11801:1;11798;11791:12;11752:53;11834:9;11828:16;-1:-1:-1;;;;;11904:2:1;11896:6;11893:14;11890:34;;;11920:1;11917;11910:12;11890:34;11943:61;11996:7;11987:6;11976:9;11972:22;11943:61;:::i;:::-;11933:71;;12050:2;12039:9;12035:18;12029:25;12013:41;;12079:2;12069:8;12066:16;12063:36;;;12095:1;12092;12085:12;12063:36;12118:63;12173:7;12162:8;12151:9;12147:24;12118:63;:::i;:::-;12108:73;;12221:2;12210:9;12206:18;12200:25;12190:35;;12271:2;12260:9;12256:18;12250:25;12234:41;;12300:2;12290:8;12287:16;12284:36;;;12316:1;12313;12306:12;12284:36;12339:63;12394:7;12383:8;12372:9;12368:24;12339:63;:::i;:::-;12329:73;;12448:3;12437:9;12433:19;12427:26;12411:42;;12478:2;12468:8;12465:16;12462:36;;;12494:1;12491;12484:12;12462:36;;12517:63;12572:7;12561:8;12550:9;12546:24;12517:63;:::i;:::-;12507:73;;;12620:3;12609:9;12605:19;12599:26;12589:36;;11536:1095;;;;;;;;:::o;12762:518::-;12864:2;12859:3;12856:11;12853:421;;;12900:5;12897:1;12890:16;12944:4;12941:1;12931:18;13014:2;13002:10;12998:19;12995:1;12991:27;12985:4;12981:38;13050:4;13038:10;13035:20;13032:47;;;-1:-1:-1;13073:4:1;13032:47;13128:2;13123:3;13119:12;13116:1;13112:20;13106:4;13102:31;13092:41;;13183:81;13201:2;13194:5;13191:13;13183:81;;;13260:1;13246:16;;13227:1;13216:13;13183:81;;;13187:3;;12762:518;;;:::o;13456:1345::-;13582:3;13576:10;-1:-1:-1;;;;;13601:6:1;13598:30;13595:56;;;13631:18;;:::i;:::-;13660:97;13750:6;13710:38;13742:4;13736:11;13710:38;:::i;:::-;13704:4;13660:97;:::i;:::-;13812:4;;13869:2;13858:14;;13886:1;13881:663;;;;14588:1;14605:6;14602:89;;;-1:-1:-1;14657:19:1;;;14651:26;14602:89;-1:-1:-1;;13413:1:1;13409:11;;;13405:24;13401:29;13391:40;13437:1;13433:11;;;13388:57;14704:81;;13851:944;;13881:663;12709:1;12702:14;;;12746:4;12733:18;;-1:-1:-1;;13917:20:1;;;14035:236;14049:7;14046:1;14043:14;14035:236;;;14138:19;;;14132:26;14117:42;;14230:27;;;;14198:1;14186:14;;;;14065:19;;14035:236;;;14039:3;14299:6;14290:7;14287:19;14284:201;;;14360:19;;;14354:26;-1:-1:-1;;14443:1:1;14439:14;;;14455:3;14435:24;14431:37;14427:42;14412:58;14397:74;;14284:201;;;14531:1;14522:6;14519:1;14515:14;14511:22;14505:4;14498:36;13851:944;;;;;13456:1345;;:::o;14806:127::-;14867:10;14862:3;14858:20;14855:1;14848:31;14898:4;14895:1;14888:15;14922:4;14919:1;14912:15;14938:416;15027:1;15064:5;15027:1;15078:270;15099:7;15089:8;15086:21;15078:270;;;15158:4;15154:1;15150:6;15146:17;15140:4;15137:27;15134:53;;;15167:18;;:::i;:::-;15217:7;15207:8;15203:22;15200:55;;;15237:16;;;;15200:55;15316:22;;;;15276:15;;;;15078:270;;;15082:3;14938:416;;;;;:::o;15359:806::-;15408:5;15438:8;15428:80;;-1:-1:-1;15479:1:1;15493:5;;15428:80;15527:4;15517:76;;-1:-1:-1;15564:1:1;15578:5;;15517:76;15609:4;15627:1;15622:59;;;;15695:1;15690:130;;15602:218;15690:130;15727:3;15717:8;15714:17;15711:43;;;15734:18;;:::i;:::-;-1:-1:-1;;15790:1:1;15776:16;;15805:5;;15602:218;;15904:2;15894:8;15891:16;15885:3;15879:4;15876:13;15872:36;15866:2;15856:8;15853:16;15848:2;15842:4;15839:12;15835:35;15832:77;15829:159;;;-1:-1:-1;15941:19:1;;;15973:5;;15829:159;16020:34;16045:8;16039:4;16020:34;:::i;:::-;16090:6;16086:1;16082:6;16078:19;16069:7;16066:32;16063:58;;;16101:18;;:::i;:::-;16139:20;;15359:806;-1:-1:-1;;;15359:806:1:o;16170:131::-;16230:5;16259:36;16286:8;16280:4;16259:36;:::i;16306:125::-;16371:9;;;16392:10;;;16389:36;;;16405:18;;:::i;16436:128::-;16503:9;;;16524:11;;;16521:37;;;16538:18;;:::i;16569:183::-;-1:-1:-1;;;;;16688:10:1;;;16676;;;16672:27;;16711:12;;;16708:38;;;16726:18;;:::i;:::-;16708:38;16569:183;;;;:::o;17499:489::-;-1:-1:-1;;;;;17768:15:1;;;17750:34;;17820:15;;17815:2;17800:18;;17793:43;17867:2;17852:18;;17845:34;;;17915:3;17910:2;17895:18;;17888:31;;;17693:4;;17936:46;;17962:19;;17954:6;17936:46;:::i;:::-;17928:54;17499:489;-1:-1:-1;;;;;;17499:489:1:o;18338:723::-;18388:3;18429:5;18423:12;18458:36;18484:9;18458:36;:::i;:::-;18513:1;18530:17;;;18556:133;;;;18703:1;18698:357;;;;18523:532;;18556:133;-1:-1:-1;;18589:24:1;;18577:37;;18662:14;;18655:22;18643:35;;18634:45;;;-1:-1:-1;18556:133:1;;18698:357;18729:5;18726:1;18719:16;18758:4;18803;18800:1;18790:18;18830:1;18844:165;18858:6;18855:1;18852:13;18844:165;;;18936:14;;18923:11;;;18916:35;18979:16;;;;18873:10;;18844:165;;;18848:3;;;19038:6;19033:3;19029:16;19022:23;;18523:532;;;;;18338:723;;;;:::o;19066:469::-;19287:3;19315:38;19349:3;19341:6;19315:38;:::i;:::-;19382:6;19376:13;19398:65;19456:6;19452:2;19445:4;19437:6;19433:17;19398:65;:::i;:::-;19479:50;19521:6;19517:2;19513:15;19505:6;19479:50;:::i;:::-;19472:57;19066:469;-1:-1:-1;;;;;;;19066:469:1:o;19540:168::-;19613:9;;;19644;;19661:15;;;19655:22;;19641:37;19631:71;;19682:18;;:::i;20826:127::-;20887:10;20882:3;20878:20;20875:1;20868:31;20918:4;20915:1;20908:15;20942:4;20939:1;20932:15;20958:112;20990:1;21016;21006:35;;21021:18;;:::i;:::-;-1:-1:-1;21055:9:1;;20958:112::o;21075:120::-;21115:1;21141;21131:35;;21146:18;;:::i;:::-;-1:-1:-1;21180:9:1;;21075:120::o;21200:135::-;21239:3;21260:17;;;21257:43;;21280:18;;:::i;:::-;-1:-1:-1;21327:1:1;21316:13;;21200:135::o;21340:148::-;21428:4;21407:12;;;21421;;;21403:31;;21446:13;;21443:39;;;21462:18;;:::i;21493:127::-;21554:10;21549:3;21545:20;21542:1;21535:31;21585:4;21582:1;21575:15;21609:4;21606:1;21599:15;21625:127;21686:10;21681:3;21677:20;21674:1;21667:31;21717:4;21714:1;21707:15;21741:4;21738:1;21731:15

Swarm Source

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