ETH Price: $3,485.06 (+3.66%)
Gas: 2 Gwei

Token

SatoshiMysteryAvatars (SMA)
 

Overview

Max Total Supply

1,000 SMA

Holders

576

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
4 SMA
0xe97B5678d00cCCab3a3d74B6277bB6dfEe781316
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
SatoshiAvas

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-16
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9 <0.9.0;

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }
	
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

library Counters {
    struct Counter {
        uint256 _value;
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

    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(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

library MerkleProof {
    function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    function verifyCalldata(bytes32[] calldata proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
        return processProofCalldata(proof, leaf) == root;
    }

    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    function multiProofVerify(bytes32[] memory proof, bool[] memory proofFlags, bytes32 root, bytes32[] memory leaves) internal pure returns (bool) {
        return processMultiProof(proof, proofFlags, leaves) == root;
    }

    function multiProofVerifyCalldata(bytes32[] calldata proof, bool[] calldata proofFlags, bytes32 root, bytes32[] memory leaves) internal pure returns (bool) {
        return processMultiProofCalldata(proof, proofFlags, leaves) == root;
    }

    function processMultiProof(bytes32[] memory proof, bool[] memory proofFlags, bytes32[] memory leaves) internal pure returns (bytes32 merkleRoot) {
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;
        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;

        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function processMultiProofCalldata(bytes32[] calldata proof, bool[] calldata proofFlags, bytes32[] memory leaves) internal pure returns (bytes32 merkleRoot) {
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;
        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
        return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

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

interface IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    function balanceOf(address owner) external view returns (uint256 balance);
    function ownerOf(uint256 tokenId) external view returns (address owner);
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
    function safeTransferFrom(address from, address to, uint256 tokenId) external;
    function transferFrom(address from, address to, uint256 tokenId) external;
    function approve(address to, uint256 tokenId) external;
    function setApprovalForAll(address operator, bool _approved) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

interface IOperatorFilterRegistry {
    function isOperatorAllowed(address registrant, address operator) external view returns (bool);
    function register(address registrant) external;
    function registerAndSubscribe(address registrant, address subscription) external;
    function registerAndCopyEntries(address registrant, address registrantToCopy) external;
    function unregister(address addr) external;
    function updateOperator(address registrant, address operator, bool filtered) external;
    function updateOperators(address registrant, address[] calldata operators, bool filtered) external;
    function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external;
    function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external;
    function subscribe(address registrant, address registrantToSubscribe) external;
    function unsubscribe(address registrant, bool copyExistingEntries) external;
    function subscriptionOf(address addr) external returns (address registrant);
    function subscribers(address registrant) external returns (address[] memory);
    function subscriberAt(address registrant, uint256 index) external returns (address);
    function copyEntriesOf(address registrant, address registrantToCopy) external;
    function isOperatorFiltered(address registrant, address operator) external returns (bool);
    function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool);
    function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool);
    function filteredOperators(address addr) external returns (address[] memory);
    function filteredCodeHashes(address addr) external returns (bytes32[] memory);
    function filteredOperatorAt(address registrant, uint256 index) external returns (address);
    function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32);
    function isRegistered(address addr) external returns (bool);
    function codeHashOf(address addr) external returns (bytes32);
}

interface IERC721Metadata is IERC721 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

abstract contract OperatorFilterer {
    error OperatorNotAllowed(address operator);
    IOperatorFilterRegistry constant operatorFilterRegistry = IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E);
    
	constructor(address subscriptionOrRegistrantToCopy, bool subscribe) {
        if (address(operatorFilterRegistry).code.length > 0) {
            if (subscribe) {
                operatorFilterRegistry.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy);
            } else {
                if (subscriptionOrRegistrantToCopy != address(0)) {
                    operatorFilterRegistry.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy);
                } else {
                    operatorFilterRegistry.register(address(this));
                }
            }
        }
    }

    modifier onlyAllowedOperator(address from) virtual {
        if (address(operatorFilterRegistry).code.length > 0) {
            if (from == msg.sender) {
                _;
                return;
            }
            if (
                !(
                    operatorFilterRegistry.isOperatorAllowed(address(this), msg.sender)
                        && operatorFilterRegistry.isOperatorAllowed(address(this), from)
                )
            ) {
                revert OperatorNotAllowed(msg.sender);
            }
        }
        _;
    }
}

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

abstract contract DefaultOperatorFilterer is OperatorFilterer {
    address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6);
    constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {}
}

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    string private _name;
    string private _symbol;
    mapping(uint256 => address) private _owners;
    mapping(address => uint256) private _balances;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: address zero is not a valid owner");
        return _balances[owner];
    }

    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: invalid token ID");
        return owner;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        _requireMinted(tokenId);
        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString(), ".json")) : "";
    }

    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");
        require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not token owner nor approved for all");
        _approve(to, tokenId);
    }

    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        _requireMinted(tokenId);
        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

    function transferFrom(address from, address to, uint256 tokenId) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");
        _transfer(from, to, tokenId);
    }

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

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");
        _safeTransfer(from, to, tokenId, data);
    }

    function _safeTransfer(address from, address to, uint256 tokenId, bytes memory data) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
    }

    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    function _safeMint(address to, uint256 tokenId, bytes memory data) internal virtual {
        _mint(to, tokenId);
        require(_checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");
        _beforeTokenTransfer(address(0), to, tokenId);
        _balances[to] += 1;
        _owners[tokenId] = to;
        emit Transfer(address(0), to, tokenId);
        _afterTokenTransfer(address(0), to, tokenId);
    }

    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);
        _beforeTokenTransfer(owner, address(0), tokenId);
        _approve(address(0), tokenId);
        _balances[owner] -= 1;
        delete _owners[tokenId];
        emit Transfer(owner, address(0), tokenId);
        _afterTokenTransfer(owner, address(0), tokenId);
    }

    function _transfer(address from, address to, uint256 tokenId) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");
        _beforeTokenTransfer(from, to, tokenId);
        _approve(address(0), tokenId);
        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;
        emit Transfer(from, to, tokenId);
        _afterTokenTransfer(from, to, tokenId);
    }

    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    function _setApprovalForAll(address owner, address operator, bool approved) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }

    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory data) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
    function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual {}
    function _afterTokenTransfer(address from, address to, uint256 tokenId) internal virtual {}
}

contract ERC721F is Ownable, ERC721, DefaultOperatorFilterer {
    using Counters for Counters.Counter;

    Counters.Counter private _tokenSupply;

    string private _baseTokenURI;

    constructor(string memory name_, string memory symbol_) ERC721(name_, symbol_) {
    }

    function walletOfOwner(address _owner) external view returns (uint256[] memory){
        uint256 ownerTokenCount = balanceOf(_owner);
        uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
        uint256 currentTokenId = _startTokenId();
        uint256 ownedTokenIndex = 0;

        while (ownedTokenIndex < ownerTokenCount && currentTokenId < _tokenSupply.current()) {
            if (ownerOf(currentTokenId) == _owner) {
                ownedTokenIds[ownedTokenIndex] = currentTokenId;
                unchecked{ ownedTokenIndex++;}
            }
            unchecked{ currentTokenId++;}
        }
        return ownedTokenIds;
    }
    
    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    function _baseURI() internal view virtual override returns (string memory) {
        return _baseTokenURI;
    }

    function setBaseTokenURI(string memory baseURI) public onlyOwner {
        _baseTokenURI = baseURI;
    }

    function _mint(address to, uint256 tokenId) internal virtual override {
        super._mint(to, tokenId);
        _tokenSupply.increment();
    }
	
    function transferFrom(address from, address to, uint256 tokenId) public override onlyAllowedOperator(from) {
        super.transferFrom(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId) public override onlyAllowedOperator(from) {
        super.safeTransferFrom(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public override onlyAllowedOperator(from) {
        super.safeTransferFrom(from, to, tokenId, data);
    }
	
    function totalSupply() public view returns (uint256) {
        return _tokenSupply.current();
    }
}

abstract contract ERC721Payable {
    function _withdraw(address _address, uint256 _amount) internal {
        (bool success, ) = _address.call{ value: _amount }("");
        require(success, "Failed to withdraw Ether");
    }
    receive() external payable { }
}

contract ERC721FCOMMON is ERC721F, ERC721Payable {
    constructor(string memory name_, string memory symbol_) ERC721F(name_, symbol_) {
    }
}

contract SatoshiAvas is ERC721FCOMMON {
    uint256 public tokenPrice = 0.006 ether; 
    uint256 public constant MAX_TOKENS = 1000;
	uint public constant MAX_RESERVE = 10;
    uint public saleState;
    bytes32 public claimlistMerkleRoot;
	mapping(address => uint256) private userBalanceSaleMint;
    mapping(address => uint256) private userBalanceClaim;
    
    constructor() ERC721FCOMMON("SatoshiMysteryAvatars", "SMA") {
        setBaseTokenURI("https://mint.ordersatoshi.com/avatars/meta/");
        _mint(msg.sender, 0);
    }

    function airdrop(address to, uint256 numberOfTokens) public onlyOwner {    
        uint supply = totalSupply();
		require(numberOfTokens != 0, "numberOfNfts cannot be 0");
        require(supply + numberOfTokens <= MAX_RESERVE, "Airdrop would exceed max reserve value");
        for (uint i = 0; i < numberOfTokens;) {
            _safeMint(to, supply + i);
            unchecked{ i++;}
        }
    }

    function setMintPrice(uint256 price) external onlyOwner {
        tokenPrice = price;
    }
		
    function setMerkleRoot(bytes32 _newRoot) external onlyOwner {
        claimlistMerkleRoot = _newRoot;
    }

    function setSaleState(uint256 _id) external onlyOwner {
        require(_id < 4, "!id");
        saleState=_id;
    }

    function mint() external payable {
        require(saleState==2, "$_sat_$Sale is not active$$_sat_$$");
        require(userBalanceSaleMint[msg.sender]<2,"$_sat_$Max mint amount is 2 tokens for 1 address$$_sat_$$");
        require(msg.sender == tx.origin, "$_sat_$No Contracts allowed$$_sat_$$");
        require(tokenPrice <= msg.value, "$_sat_$ETH value sent is not correct$$_sat_$$");
        uint256 supply = totalSupply();
        require(supply < MAX_TOKENS, "$_sat_$All collection tokens have been already minted$$_sat_$$");
        userBalanceSaleMint[msg.sender] += 1;
        _mint(msg.sender, supply);
    }

    function claim(bytes32[] calldata merkleProof) external {
        require(saleState==1, "$_sat_$Claim is not active$$_sat_$$");
        require(userBalanceClaim[msg.sender] < 1,"$_sat_$Max claim amount is 1 token for 1 address$$_sat_$$");
        require(msg.sender == tx.origin, "$_sat_$No Contracts allowed$$_sat_$$");
        uint256 supply = totalSupply();
        require(supply < MAX_TOKENS, "$_sat_$All collection tokens have been already minted$$_sat_$$");
        require(checkValidity(merkleProof), "$_sat_$Invalid Merkle Proof$$_sat_$$");
        userBalanceClaim[msg.sender] = 1;
        _mint(msg.sender, supply);
    }

    function checkValidity(bytes32[] calldata merkleProof) internal view returns (bool) {
        bytes32 leafToCheck = keccak256(abi.encodePacked(msg.sender));
        return MerkleProof.verify(merkleProof, claimlistMerkleRoot, leafToCheck);
    }

    function withdraw() external onlyOwner {
        uint256 balance = address(this).balance;
        require(balance > 0, "Insufficient balance");
        _withdraw(owner(), address(this).balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_RESERVE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimlistMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":"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":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleState","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"baseURI","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_newRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"setSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052661550f7dca700006009553480156200001c57600080fd5b506040518060400160405280601581526020017f5361746f7368694d79737465727941766174617273000000000000000000000081525060405180604001604052806003815260200162534d4160e81b8152508181733cc6cdda760b79bafa08df41ecfa224f810dceb660018383620000a46200009e6200024660201b60201c565b6200024a565b6001620000b2838262000540565b506002620000c1828262000540565b5050506daaeb6d7670e522a718067333cd4e3b15620002095780156200015757604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b1580156200013857600080fd5b505af11580156200014d573d6000803e3d6000fd5b5050505062000209565b6001600160a01b03821615620001a85760405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af2903906044016200011d565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e48690602401600060405180830381600087803b158015620001ef57600080fd5b505af115801562000204573d6000803e3d6000fd5b505050505b505050505050620002336040518060600160405280602b815260200162002ca0602b91396200029a565b62000240336000620002b6565b62000634565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620002a4620002e4565b6008620002b2828262000540565b5050565b620002cd82826200034660201b620014091760201c565b620002b260076200048e60201b6200154b1760201c565b6000546001600160a01b03163314620003445760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b565b6001600160a01b0382166200039e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016200033b565b6000818152600360205260409020546001600160a01b031615620004055760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016200033b565b6001600160a01b0382166000908152600460205260408120805460019290620004309084906200060c565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b80546001019055565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620004c757607f821691505b602082108103620004e857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200049757600081815260208120601f850160051c81016020861015620005175750805b601f850160051c820191505b81811015620005385782815560010162000523565b505050505050565b81516001600160401b038111156200055c576200055c6200049c565b62000574816200056d8454620004b2565b84620004ee565b602080601f831160018114620005ac5760008415620005935750858301515b600019600386901b1c1916600185901b17855562000538565b600085815260208120601f198616915b82811015620005dd57888601518255948401946001909101908401620005bc565b5085821015620005fc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200062e57634e487b7160e01b600052601160045260246000fd5b92915050565b61265c80620006446000396000f3fe6080604052600436106101dc5760003560e01c806370a0823111610102578063b391c50811610095578063eff31e9e11610064578063eff31e9e14610530578063f2fde38b14610545578063f47c84c514610565578063f4a0a5281461057b57600080fd5b8063b391c508146104b0578063b88d4fde146104d0578063c87b56dd146104f0578063e985e9c51461051057600080fd5b80638ba4cc3c116100d15780638ba4cc3c1461043d5780638da5cb5b1461045d57806395d89b411461047b578063a22cb4651461049057600080fd5b806370a08231146103d2578063715018a6146103f25780637cb64759146104075780637ff9b5961461042757600080fd5b806323b872dd1161017a57806342842e0e1161014957806342842e0e1461034f578063438b63001461036f578063603f4d521461039c5780636352211e146103b257600080fd5b806323b872dd146102e45780632560e3761461030457806330176e131461031a5780633ccfd60b1461033a57600080fd5b8063084c4088116101b6578063084c408814610277578063095ea7b3146102995780631249c58b146102b957806318160ddd146102c157600080fd5b806301ffc9a7146101e857806306fdde031461021d578063081812fc1461023f57600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b50610208610203366004611e86565b61059b565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b506102326105ed565b6040516102149190611ef3565b34801561024b57600080fd5b5061025f61025a366004611f06565b61067f565b6040516001600160a01b039091168152602001610214565b34801561028357600080fd5b50610297610292366004611f06565b6106a6565b005b3480156102a557600080fd5b506102976102b4366004611f3b565b6106ee565b610297610803565b3480156102cd57600080fd5b506102d66109cc565b604051908152602001610214565b3480156102f057600080fd5b506102976102ff366004611f65565b6109dc565b34801561031057600080fd5b506102d6600b5481565b34801561032657600080fd5b5061029761033536600461202d565b610b38565b34801561034657600080fd5b50610297610b50565b34801561035b57600080fd5b5061029761036a366004611f65565b610bb8565b34801561037b57600080fd5b5061038f61038a366004612076565b610d09565b6040516102149190612091565b3480156103a857600080fd5b506102d6600a5481565b3480156103be57600080fd5b5061025f6103cd366004611f06565b610dd0565b3480156103de57600080fd5b506102d66103ed366004612076565b610e30565b3480156103fe57600080fd5b50610297610eb6565b34801561041357600080fd5b50610297610422366004611f06565b610eca565b34801561043357600080fd5b506102d660095481565b34801561044957600080fd5b50610297610458366004611f3b565b610ed7565b34801561046957600080fd5b506000546001600160a01b031661025f565b34801561048757600080fd5b50610232610fca565b34801561049c57600080fd5b506102976104ab3660046120e3565b610fd9565b3480156104bc57600080fd5b506102976104cb36600461211a565b610fe4565b3480156104dc57600080fd5b506102976104eb36600461218f565b611192565b3480156104fc57600080fd5b5061023261050b366004611f06565b6112f1565b34801561051c57600080fd5b5061020861052b36600461220b565b611358565b34801561053c57600080fd5b506102d6600a81565b34801561055157600080fd5b50610297610560366004612076565b611386565b34801561057157600080fd5b506102d66103e881565b34801561058757600080fd5b50610297610596366004611f06565b6113fc565b60006001600160e01b031982166380ac58cd60e01b14806105cc57506001600160e01b03198216635b5e139f60e01b145b806105e757506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600180546105fc9061223e565b80601f01602080910402602001604051908101604052809291908181526020018280546106289061223e565b80156106755780601f1061064a57610100808354040283529160200191610675565b820191906000526020600020905b81548152906001019060200180831161065857829003601f168201915b5050505050905090565b600061068a82611554565b506000908152600560205260409020546001600160a01b031690565b6106ae6115b3565b600481106106e95760405162461bcd60e51b8152602060048201526003602482015262085a5960ea1b60448201526064015b60405180910390fd5b600a55565b60006106f982610dd0565b9050806001600160a01b0316836001600160a01b0316036107665760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016106e0565b336001600160a01b038216148061078257506107828133611358565b6107f45760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c000060648201526084016106e0565b6107fe838361160d565b505050565b600a546002146108605760405162461bcd60e51b815260206004820152602260248201527f245f7361745f2453616c65206973206e6f742061637469766524245f7361745f604482015261090960f21b60648201526084016106e0565b336000908152600c60205260409020546002116108e55760405162461bcd60e51b815260206004820152603960248201527f245f7361745f244d6178206d696e7420616d6f756e74206973203220746f6b6560448201527f6e7320666f722031206164647265737324245f7361745f24240000000000000060648201526084016106e0565b3332146109045760405162461bcd60e51b81526004016106e090612278565b34600954111561096c5760405162461bcd60e51b815260206004820152602d60248201527f245f7361745f244554482076616c75652073656e74206973206e6f7420636f7260448201526c1c9958dd090917dcd85d17c909609a1b60648201526084016106e0565b60006109766109cc565b90506103e881106109995760405162461bcd60e51b81526004016106e0906122bc565b336000908152600c602052604081208054600192906109b990849061232f565b909155506109c99050338261167b565b50565b60006109d760075490565b905090565b826daaeb6d7670e522a718067333cd4e3b15610b2757336001600160a01b03821603610a1257610a0d848484611693565b610b32565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610a61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a859190612342565b8015610b085750604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610ae4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b089190612342565b610b2757604051633b79c77360e21b81523360048201526024016106e0565b610b32848484611693565b50505050565b610b406115b3565b6008610b4c82826123ad565b5050565b610b586115b3565b4780610b9d5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b60448201526064016106e0565b6109c9610bb26000546001600160a01b031690565b476116c4565b826daaeb6d7670e522a718067333cd4e3b15610cfe57336001600160a01b03821603610be957610a0d848484611767565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610c38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5c9190612342565b8015610cdf5750604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610cbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdf9190612342565b610cfe57604051633b79c77360e21b81523360048201526024016106e0565b610b32848484611767565b60606000610d1683610e30565b905060008167ffffffffffffffff811115610d3357610d33611fa1565b604051908082528060200260200182016040528015610d5c578160200160208202803683370190505b5090506000805b8381108015610d73575060075482105b15610dc657856001600160a01b0316610d8b83610dd0565b6001600160a01b031603610dbb5781838281518110610dac57610dac61246d565b60209081029190910101526001015b600190910190610d63565b5090949350505050565b6000818152600360205260408120546001600160a01b0316806105e75760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016106e0565b60006001600160a01b038216610e9a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016106e0565b506001600160a01b031660009081526004602052604090205490565b610ebe6115b3565b610ec86000611782565b565b610ed26115b3565b600b55565b610edf6115b3565b6000610ee96109cc565b905081600003610f3b5760405162461bcd60e51b815260206004820152601860248201527f6e756d6265724f664e6674732063616e6e6f742062652030000000000000000060448201526064016106e0565b600a610f47838361232f565b1115610fa45760405162461bcd60e51b815260206004820152602660248201527f41697264726f7020776f756c6420657863656564206d617820726573657276656044820152652076616c756560d01b60648201526084016106e0565b60005b82811015610b3257610fc284610fbd838561232f565b6117d2565b600101610fa7565b6060600280546105fc9061223e565b610b4c3383836117ec565b600a546001146110425760405162461bcd60e51b815260206004820152602360248201527f245f7361745f24436c61696d206973206e6f742061637469766524245f73617460448201526217c90960ea1b60648201526084016106e0565b336000908152600d60205260409020546001116110c75760405162461bcd60e51b815260206004820152603960248201527f245f7361745f244d617820636c61696d20616d6f756e74206973203120746f6b60448201527f656e20666f722031206164647265737324245f7361745f24240000000000000060648201526084016106e0565b3332146110e65760405162461bcd60e51b81526004016106e090612278565b60006110f06109cc565b90506103e881106111135760405162461bcd60e51b81526004016106e0906122bc565b61111d83836118ba565b6111755760405162461bcd60e51b8152602060048201526024808201527f245f7361745f24496e76616c6964204d65726b6c652050726f6f6624245f73616044820152631d17c90960e21b60648201526084016106e0565b336000818152600d60205260409020600190556107fe908261167b565b836daaeb6d7670e522a718067333cd4e3b156112de57336001600160a01b038216036111c9576111c48585858561193e565b6112ea565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015611218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123c9190612342565b80156112bf5750604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa15801561129b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112bf9190612342565b6112de57604051633b79c77360e21b81523360048201526024016106e0565b6112ea8585858561193e565b5050505050565b60606112fc82611554565b6000611306611970565b905060008151116113265760405180602001604052806000815250611351565b806113308461197f565b604051602001611341929190612483565b6040516020818303038152906040525b9392505050565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b61138e6115b3565b6001600160a01b0381166113f35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106e0565b6109c981611782565b6114046115b3565b600955565b6001600160a01b03821661145f5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106e0565b6000818152600360205260409020546001600160a01b0316156114c45760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106e0565b6001600160a01b03821660009081526004602052604081208054600192906114ed90849061232f565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b80546001019055565b6000818152600360205260409020546001600160a01b03166109c95760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016106e0565b6000546001600160a01b03163314610ec85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106e0565b600081815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061164282610dd0565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6116858282611409565b610b4c600780546001019055565b61169d3382611a80565b6116b95760405162461bcd60e51b81526004016106e0906124c2565b6107fe838383611ade565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611711576040519150601f19603f3d011682016040523d82523d6000602084013e611716565b606091505b50509050806107fe5760405162461bcd60e51b815260206004820152601860248201527f4661696c656420746f207769746864726177204574686572000000000000000060448201526064016106e0565b6107fe83838360405180602001604052806000815250611192565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610b4c828260405180602001604052806000815250611c7a565b816001600160a01b0316836001600160a01b03160361184d5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106e0565b6001600160a01b03838116600081815260066020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6040516bffffffffffffffffffffffff193360601b166020820152600090819060340160405160208183030381529060405280519060200120905061193684848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600b549150849050611cad565b949350505050565b6119483383611a80565b6119645760405162461bcd60e51b81526004016106e0906124c2565b610b3284848484611cc3565b6060600880546105fc9061223e565b6060816000036119a65750506040805180820190915260018152600360fc1b602082015290565b8160005b81156119d057806119ba81612510565b91506119c99050600a8361253f565b91506119aa565b60008167ffffffffffffffff8111156119eb576119eb611fa1565b6040519080825280601f01601f191660200182016040528015611a15576020820181803683370190505b5090505b841561193657611a2a600183612553565b9150611a37600a86612566565b611a4290603061232f565b60f81b818381518110611a5757611a5761246d565b60200101906001600160f81b031916908160001a905350611a79600a8661253f565b9450611a19565b600080611a8c83610dd0565b9050806001600160a01b0316846001600160a01b03161480611ab35750611ab38185611358565b806119365750836001600160a01b0316611acc8461067f565b6001600160a01b031614949350505050565b826001600160a01b0316611af182610dd0565b6001600160a01b031614611b555760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016106e0565b6001600160a01b038216611bb75760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016106e0565b611bc260008261160d565b6001600160a01b0383166000908152600460205260408120805460019290611beb908490612553565b90915550506001600160a01b0382166000908152600460205260408120805460019290611c1990849061232f565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b611c84838361167b565b611c916000848484611cf6565b6107fe5760405162461bcd60e51b81526004016106e09061257a565b600082611cba8584611df7565b14949350505050565b611cce848484611ade565b611cda84848484611cf6565b610b325760405162461bcd60e51b81526004016106e09061257a565b60006001600160a01b0384163b15611dec57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d3a9033908990889088906004016125cc565b6020604051808303816000875af1925050508015611d75575060408051601f3d908101601f19168201909252611d7291810190612609565b60015b611dd2573d808015611da3576040519150601f19603f3d011682016040523d82523d6000602084013e611da8565b606091505b508051600003611dca5760405162461bcd60e51b81526004016106e09061257a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611936565b506001949350505050565b600081815b8451811015611e3c57611e2882868381518110611e1b57611e1b61246d565b6020026020010151611e44565b915080611e3481612510565b915050611dfc565b509392505050565b6000818310611e60576000828152602084905260409020611351565b5060009182526020526040902090565b6001600160e01b0319811681146109c957600080fd5b600060208284031215611e9857600080fd5b813561135181611e70565b60005b83811015611ebe578181015183820152602001611ea6565b50506000910152565b60008151808452611edf816020860160208601611ea3565b601f01601f19169290920160200192915050565b6020815260006113516020830184611ec7565b600060208284031215611f1857600080fd5b5035919050565b80356001600160a01b0381168114611f3657600080fd5b919050565b60008060408385031215611f4e57600080fd5b611f5783611f1f565b946020939093013593505050565b600080600060608486031215611f7a57600080fd5b611f8384611f1f565b9250611f9160208501611f1f565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611fd257611fd2611fa1565b604051601f8501601f19908116603f01168101908282118183101715611ffa57611ffa611fa1565b8160405280935085815286868601111561201357600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561203f57600080fd5b813567ffffffffffffffff81111561205657600080fd5b8201601f8101841361206757600080fd5b61193684823560208401611fb7565b60006020828403121561208857600080fd5b61135182611f1f565b6020808252825182820181905260009190848201906040850190845b818110156120c9578351835292840192918401916001016120ad565b50909695505050505050565b80151581146109c957600080fd5b600080604083850312156120f657600080fd5b6120ff83611f1f565b9150602083013561210f816120d5565b809150509250929050565b6000806020838503121561212d57600080fd5b823567ffffffffffffffff8082111561214557600080fd5b818501915085601f83011261215957600080fd5b81358181111561216857600080fd5b8660208260051b850101111561217d57600080fd5b60209290920196919550909350505050565b600080600080608085870312156121a557600080fd5b6121ae85611f1f565b93506121bc60208601611f1f565b925060408501359150606085013567ffffffffffffffff8111156121df57600080fd5b8501601f810187136121f057600080fd5b6121ff87823560208401611fb7565b91505092959194509250565b6000806040838503121561221e57600080fd5b61222783611f1f565b915061223560208401611f1f565b90509250929050565b600181811c9082168061225257607f821691505b60208210810361227257634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526024908201527f245f7361745f244e6f20436f6e74726163747320616c6c6f77656424245f73616040820152631d17c90960e21b606082015260800190565b6020808252603e908201527f245f7361745f24416c6c20636f6c6c656374696f6e20746f6b656e732068617660408201527f65206265656e20616c7265616479206d696e74656424245f7361745f24240000606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156105e7576105e7612319565b60006020828403121561235457600080fd5b8151611351816120d5565b601f8211156107fe57600081815260208120601f850160051c810160208610156123865750805b601f850160051c820191505b818110156123a557828155600101612392565b505050505050565b815167ffffffffffffffff8111156123c7576123c7611fa1565b6123db816123d5845461223e565b8461235f565b602080601f83116001811461241057600084156123f85750858301515b600019600386901b1c1916600185901b1785556123a5565b600085815260208120601f198616915b8281101561243f57888601518255948401946001909101908401612420565b508582101561245d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b60008351612495818460208801611ea3565b8351908301906124a9818360208801611ea3565b64173539b7b760d91b9101908152600501949350505050565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b60006001820161252257612522612319565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261254e5761254e612529565b500490565b818103818111156105e7576105e7612319565b60008261257557612575612529565b500690565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906125ff90830184611ec7565b9695505050505050565b60006020828403121561261b57600080fd5b815161135181611e7056fea2646970667358221220e78757eb743a3b4ef7c62f0d167afb0d454073ae365ac390aeb5e96fe3deb29b64736f6c6343000812003368747470733a2f2f6d696e742e6f726465727361746f7368692e636f6d2f617661746172732f6d6574612f

Deployed Bytecode

0x6080604052600436106101dc5760003560e01c806370a0823111610102578063b391c50811610095578063eff31e9e11610064578063eff31e9e14610530578063f2fde38b14610545578063f47c84c514610565578063f4a0a5281461057b57600080fd5b8063b391c508146104b0578063b88d4fde146104d0578063c87b56dd146104f0578063e985e9c51461051057600080fd5b80638ba4cc3c116100d15780638ba4cc3c1461043d5780638da5cb5b1461045d57806395d89b411461047b578063a22cb4651461049057600080fd5b806370a08231146103d2578063715018a6146103f25780637cb64759146104075780637ff9b5961461042757600080fd5b806323b872dd1161017a57806342842e0e1161014957806342842e0e1461034f578063438b63001461036f578063603f4d521461039c5780636352211e146103b257600080fd5b806323b872dd146102e45780632560e3761461030457806330176e131461031a5780633ccfd60b1461033a57600080fd5b8063084c4088116101b6578063084c408814610277578063095ea7b3146102995780631249c58b146102b957806318160ddd146102c157600080fd5b806301ffc9a7146101e857806306fdde031461021d578063081812fc1461023f57600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b50610208610203366004611e86565b61059b565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b506102326105ed565b6040516102149190611ef3565b34801561024b57600080fd5b5061025f61025a366004611f06565b61067f565b6040516001600160a01b039091168152602001610214565b34801561028357600080fd5b50610297610292366004611f06565b6106a6565b005b3480156102a557600080fd5b506102976102b4366004611f3b565b6106ee565b610297610803565b3480156102cd57600080fd5b506102d66109cc565b604051908152602001610214565b3480156102f057600080fd5b506102976102ff366004611f65565b6109dc565b34801561031057600080fd5b506102d6600b5481565b34801561032657600080fd5b5061029761033536600461202d565b610b38565b34801561034657600080fd5b50610297610b50565b34801561035b57600080fd5b5061029761036a366004611f65565b610bb8565b34801561037b57600080fd5b5061038f61038a366004612076565b610d09565b6040516102149190612091565b3480156103a857600080fd5b506102d6600a5481565b3480156103be57600080fd5b5061025f6103cd366004611f06565b610dd0565b3480156103de57600080fd5b506102d66103ed366004612076565b610e30565b3480156103fe57600080fd5b50610297610eb6565b34801561041357600080fd5b50610297610422366004611f06565b610eca565b34801561043357600080fd5b506102d660095481565b34801561044957600080fd5b50610297610458366004611f3b565b610ed7565b34801561046957600080fd5b506000546001600160a01b031661025f565b34801561048757600080fd5b50610232610fca565b34801561049c57600080fd5b506102976104ab3660046120e3565b610fd9565b3480156104bc57600080fd5b506102976104cb36600461211a565b610fe4565b3480156104dc57600080fd5b506102976104eb36600461218f565b611192565b3480156104fc57600080fd5b5061023261050b366004611f06565b6112f1565b34801561051c57600080fd5b5061020861052b36600461220b565b611358565b34801561053c57600080fd5b506102d6600a81565b34801561055157600080fd5b50610297610560366004612076565b611386565b34801561057157600080fd5b506102d66103e881565b34801561058757600080fd5b50610297610596366004611f06565b6113fc565b60006001600160e01b031982166380ac58cd60e01b14806105cc57506001600160e01b03198216635b5e139f60e01b145b806105e757506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600180546105fc9061223e565b80601f01602080910402602001604051908101604052809291908181526020018280546106289061223e565b80156106755780601f1061064a57610100808354040283529160200191610675565b820191906000526020600020905b81548152906001019060200180831161065857829003601f168201915b5050505050905090565b600061068a82611554565b506000908152600560205260409020546001600160a01b031690565b6106ae6115b3565b600481106106e95760405162461bcd60e51b8152602060048201526003602482015262085a5960ea1b60448201526064015b60405180910390fd5b600a55565b60006106f982610dd0565b9050806001600160a01b0316836001600160a01b0316036107665760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016106e0565b336001600160a01b038216148061078257506107828133611358565b6107f45760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c000060648201526084016106e0565b6107fe838361160d565b505050565b600a546002146108605760405162461bcd60e51b815260206004820152602260248201527f245f7361745f2453616c65206973206e6f742061637469766524245f7361745f604482015261090960f21b60648201526084016106e0565b336000908152600c60205260409020546002116108e55760405162461bcd60e51b815260206004820152603960248201527f245f7361745f244d6178206d696e7420616d6f756e74206973203220746f6b6560448201527f6e7320666f722031206164647265737324245f7361745f24240000000000000060648201526084016106e0565b3332146109045760405162461bcd60e51b81526004016106e090612278565b34600954111561096c5760405162461bcd60e51b815260206004820152602d60248201527f245f7361745f244554482076616c75652073656e74206973206e6f7420636f7260448201526c1c9958dd090917dcd85d17c909609a1b60648201526084016106e0565b60006109766109cc565b90506103e881106109995760405162461bcd60e51b81526004016106e0906122bc565b336000908152600c602052604081208054600192906109b990849061232f565b909155506109c99050338261167b565b50565b60006109d760075490565b905090565b826daaeb6d7670e522a718067333cd4e3b15610b2757336001600160a01b03821603610a1257610a0d848484611693565b610b32565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610a61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a859190612342565b8015610b085750604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610ae4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b089190612342565b610b2757604051633b79c77360e21b81523360048201526024016106e0565b610b32848484611693565b50505050565b610b406115b3565b6008610b4c82826123ad565b5050565b610b586115b3565b4780610b9d5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b60448201526064016106e0565b6109c9610bb26000546001600160a01b031690565b476116c4565b826daaeb6d7670e522a718067333cd4e3b15610cfe57336001600160a01b03821603610be957610a0d848484611767565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610c38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5c9190612342565b8015610cdf5750604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610cbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdf9190612342565b610cfe57604051633b79c77360e21b81523360048201526024016106e0565b610b32848484611767565b60606000610d1683610e30565b905060008167ffffffffffffffff811115610d3357610d33611fa1565b604051908082528060200260200182016040528015610d5c578160200160208202803683370190505b5090506000805b8381108015610d73575060075482105b15610dc657856001600160a01b0316610d8b83610dd0565b6001600160a01b031603610dbb5781838281518110610dac57610dac61246d565b60209081029190910101526001015b600190910190610d63565b5090949350505050565b6000818152600360205260408120546001600160a01b0316806105e75760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016106e0565b60006001600160a01b038216610e9a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016106e0565b506001600160a01b031660009081526004602052604090205490565b610ebe6115b3565b610ec86000611782565b565b610ed26115b3565b600b55565b610edf6115b3565b6000610ee96109cc565b905081600003610f3b5760405162461bcd60e51b815260206004820152601860248201527f6e756d6265724f664e6674732063616e6e6f742062652030000000000000000060448201526064016106e0565b600a610f47838361232f565b1115610fa45760405162461bcd60e51b815260206004820152602660248201527f41697264726f7020776f756c6420657863656564206d617820726573657276656044820152652076616c756560d01b60648201526084016106e0565b60005b82811015610b3257610fc284610fbd838561232f565b6117d2565b600101610fa7565b6060600280546105fc9061223e565b610b4c3383836117ec565b600a546001146110425760405162461bcd60e51b815260206004820152602360248201527f245f7361745f24436c61696d206973206e6f742061637469766524245f73617460448201526217c90960ea1b60648201526084016106e0565b336000908152600d60205260409020546001116110c75760405162461bcd60e51b815260206004820152603960248201527f245f7361745f244d617820636c61696d20616d6f756e74206973203120746f6b60448201527f656e20666f722031206164647265737324245f7361745f24240000000000000060648201526084016106e0565b3332146110e65760405162461bcd60e51b81526004016106e090612278565b60006110f06109cc565b90506103e881106111135760405162461bcd60e51b81526004016106e0906122bc565b61111d83836118ba565b6111755760405162461bcd60e51b8152602060048201526024808201527f245f7361745f24496e76616c6964204d65726b6c652050726f6f6624245f73616044820152631d17c90960e21b60648201526084016106e0565b336000818152600d60205260409020600190556107fe908261167b565b836daaeb6d7670e522a718067333cd4e3b156112de57336001600160a01b038216036111c9576111c48585858561193e565b6112ea565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015611218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123c9190612342565b80156112bf5750604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa15801561129b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112bf9190612342565b6112de57604051633b79c77360e21b81523360048201526024016106e0565b6112ea8585858561193e565b5050505050565b60606112fc82611554565b6000611306611970565b905060008151116113265760405180602001604052806000815250611351565b806113308461197f565b604051602001611341929190612483565b6040516020818303038152906040525b9392505050565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b61138e6115b3565b6001600160a01b0381166113f35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106e0565b6109c981611782565b6114046115b3565b600955565b6001600160a01b03821661145f5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106e0565b6000818152600360205260409020546001600160a01b0316156114c45760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106e0565b6001600160a01b03821660009081526004602052604081208054600192906114ed90849061232f565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b80546001019055565b6000818152600360205260409020546001600160a01b03166109c95760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016106e0565b6000546001600160a01b03163314610ec85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106e0565b600081815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061164282610dd0565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6116858282611409565b610b4c600780546001019055565b61169d3382611a80565b6116b95760405162461bcd60e51b81526004016106e0906124c2565b6107fe838383611ade565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611711576040519150601f19603f3d011682016040523d82523d6000602084013e611716565b606091505b50509050806107fe5760405162461bcd60e51b815260206004820152601860248201527f4661696c656420746f207769746864726177204574686572000000000000000060448201526064016106e0565b6107fe83838360405180602001604052806000815250611192565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610b4c828260405180602001604052806000815250611c7a565b816001600160a01b0316836001600160a01b03160361184d5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106e0565b6001600160a01b03838116600081815260066020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6040516bffffffffffffffffffffffff193360601b166020820152600090819060340160405160208183030381529060405280519060200120905061193684848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600b549150849050611cad565b949350505050565b6119483383611a80565b6119645760405162461bcd60e51b81526004016106e0906124c2565b610b3284848484611cc3565b6060600880546105fc9061223e565b6060816000036119a65750506040805180820190915260018152600360fc1b602082015290565b8160005b81156119d057806119ba81612510565b91506119c99050600a8361253f565b91506119aa565b60008167ffffffffffffffff8111156119eb576119eb611fa1565b6040519080825280601f01601f191660200182016040528015611a15576020820181803683370190505b5090505b841561193657611a2a600183612553565b9150611a37600a86612566565b611a4290603061232f565b60f81b818381518110611a5757611a5761246d565b60200101906001600160f81b031916908160001a905350611a79600a8661253f565b9450611a19565b600080611a8c83610dd0565b9050806001600160a01b0316846001600160a01b03161480611ab35750611ab38185611358565b806119365750836001600160a01b0316611acc8461067f565b6001600160a01b031614949350505050565b826001600160a01b0316611af182610dd0565b6001600160a01b031614611b555760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016106e0565b6001600160a01b038216611bb75760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016106e0565b611bc260008261160d565b6001600160a01b0383166000908152600460205260408120805460019290611beb908490612553565b90915550506001600160a01b0382166000908152600460205260408120805460019290611c1990849061232f565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b611c84838361167b565b611c916000848484611cf6565b6107fe5760405162461bcd60e51b81526004016106e09061257a565b600082611cba8584611df7565b14949350505050565b611cce848484611ade565b611cda84848484611cf6565b610b325760405162461bcd60e51b81526004016106e09061257a565b60006001600160a01b0384163b15611dec57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d3a9033908990889088906004016125cc565b6020604051808303816000875af1925050508015611d75575060408051601f3d908101601f19168201909252611d7291810190612609565b60015b611dd2573d808015611da3576040519150601f19603f3d011682016040523d82523d6000602084013e611da8565b606091505b508051600003611dca5760405162461bcd60e51b81526004016106e09061257a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611936565b506001949350505050565b600081815b8451811015611e3c57611e2882868381518110611e1b57611e1b61246d565b6020026020010151611e44565b915080611e3481612510565b915050611dfc565b509392505050565b6000818310611e60576000828152602084905260409020611351565b5060009182526020526040902090565b6001600160e01b0319811681146109c957600080fd5b600060208284031215611e9857600080fd5b813561135181611e70565b60005b83811015611ebe578181015183820152602001611ea6565b50506000910152565b60008151808452611edf816020860160208601611ea3565b601f01601f19169290920160200192915050565b6020815260006113516020830184611ec7565b600060208284031215611f1857600080fd5b5035919050565b80356001600160a01b0381168114611f3657600080fd5b919050565b60008060408385031215611f4e57600080fd5b611f5783611f1f565b946020939093013593505050565b600080600060608486031215611f7a57600080fd5b611f8384611f1f565b9250611f9160208501611f1f565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611fd257611fd2611fa1565b604051601f8501601f19908116603f01168101908282118183101715611ffa57611ffa611fa1565b8160405280935085815286868601111561201357600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561203f57600080fd5b813567ffffffffffffffff81111561205657600080fd5b8201601f8101841361206757600080fd5b61193684823560208401611fb7565b60006020828403121561208857600080fd5b61135182611f1f565b6020808252825182820181905260009190848201906040850190845b818110156120c9578351835292840192918401916001016120ad565b50909695505050505050565b80151581146109c957600080fd5b600080604083850312156120f657600080fd5b6120ff83611f1f565b9150602083013561210f816120d5565b809150509250929050565b6000806020838503121561212d57600080fd5b823567ffffffffffffffff8082111561214557600080fd5b818501915085601f83011261215957600080fd5b81358181111561216857600080fd5b8660208260051b850101111561217d57600080fd5b60209290920196919550909350505050565b600080600080608085870312156121a557600080fd5b6121ae85611f1f565b93506121bc60208601611f1f565b925060408501359150606085013567ffffffffffffffff8111156121df57600080fd5b8501601f810187136121f057600080fd5b6121ff87823560208401611fb7565b91505092959194509250565b6000806040838503121561221e57600080fd5b61222783611f1f565b915061223560208401611f1f565b90509250929050565b600181811c9082168061225257607f821691505b60208210810361227257634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526024908201527f245f7361745f244e6f20436f6e74726163747320616c6c6f77656424245f73616040820152631d17c90960e21b606082015260800190565b6020808252603e908201527f245f7361745f24416c6c20636f6c6c656374696f6e20746f6b656e732068617660408201527f65206265656e20616c7265616479206d696e74656424245f7361745f24240000606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156105e7576105e7612319565b60006020828403121561235457600080fd5b8151611351816120d5565b601f8211156107fe57600081815260208120601f850160051c810160208610156123865750805b601f850160051c820191505b818110156123a557828155600101612392565b505050505050565b815167ffffffffffffffff8111156123c7576123c7611fa1565b6123db816123d5845461223e565b8461235f565b602080601f83116001811461241057600084156123f85750858301515b600019600386901b1c1916600185901b1785556123a5565b600085815260208120601f198616915b8281101561243f57888601518255948401946001909101908401612420565b508582101561245d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b60008351612495818460208801611ea3565b8351908301906124a9818360208801611ea3565b64173539b7b760d91b9101908152600501949350505050565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b60006001820161252257612522612319565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261254e5761254e612529565b500490565b818103818111156105e7576105e7612319565b60008261257557612575612529565b500690565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906125ff90830184611ec7565b9695505050505050565b60006020828403121561261b57600080fd5b815161135181611e7056fea2646970667358221220e78757eb743a3b4ef7c62f0d167afb0d454073ae365ac390aeb5e96fe3deb29b64736f6c63430008120033

Deployed Bytecode Sourcemap

26500:3068:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16990:305;;;;;;;;;;-1:-1:-1;16990:305:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;16990:305:0;;;;;;;;17748:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18750:169::-;;;;;;;;;;-1:-1:-1;18750:169:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1697:32:1;;;1679:51;;1667:2;1652:18;18750:169:0;1533:203:1;27693:120:0;;;;;;;;;;-1:-1:-1;27693:120:0;;;;;:::i;:::-;;:::i;:::-;;18366:376;;;;;;;;;;-1:-1:-1;18366:376:0;;;;;:::i;:::-;;:::i;27821:628::-;;;:::i;25968:101::-;;;;;;;;;;;;;:::i;:::-;;;2324:25:1;;;2312:2;2297:18;25968:101:0;2178:177:1;25413:163:0;;;;;;;;;;-1:-1:-1;25413:163:0;;;;;:::i;:::-;;:::i;26709:34::-;;;;;;;;;;;;;;;;25141:107;;;;;;;;;;-1:-1:-1;25141:107:0;;;;;:::i;:::-;;:::i;29361:204::-;;;;;;;;;;;;;:::i;25584:171::-;;;;;;;;;;-1:-1:-1;25584:171:0;;;;;:::i;:::-;;:::i;24237:670::-;;;;;;;;;;-1:-1:-1;24237:670:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;26681:21::-;;;;;;;;;;;;;;;;17518:222;;;;;;;;;;-1:-1:-1;17518:222:0;;;;;:::i;:::-;;:::i;17303:207::-;;;;;;;;;;-1:-1:-1;17303:207:0;;;;;:::i;:::-;;:::i;14041:103::-;;;;;;;;;;;;;:::i;27576:109::-;;;;;;;;;;-1:-1:-1;27576:109:0;;;;;:::i;:::-;;:::i;26545:39::-;;;;;;;;;;;;;;;;27054:411;;;;;;;;;;-1:-1:-1;27054:411:0;;;;;:::i;:::-;;:::i;13806:87::-;;;;;;;;;;-1:-1:-1;13852:7:0;13879:6;-1:-1:-1;;;;;13879:6:0;13806:87;;17856:104;;;;;;;;;;;;;:::i;18927:155::-;;;;;;;;;;-1:-1:-1;18927:155:0;;;;;:::i;:::-;;:::i;28457:641::-;;;;;;;;;;-1:-1:-1;28457:641:0;;;;;:::i;:::-;;:::i;25763:196::-;;;;;;;;;;-1:-1:-1;25763:196:0;;;;;:::i;:::-;;:::i;17968:288::-;;;;;;;;;;-1:-1:-1;17968:288:0;;;;;:::i;:::-;;:::i;19087:155::-;;;;;;;;;;-1:-1:-1;19087:155:0;;;;;:::i;:::-;;:::i;26637:37::-;;;;;;;;;;;;26672:2;26637:37;;14152:201;;;;;;;;;;-1:-1:-1;14152:201:0;;;;;:::i;:::-;;:::i;26592:41::-;;;;;;;;;;;;26629:4;26592:41;;27473:93;;;;;;;;;;-1:-1:-1;27473:93:0;;;;;:::i;:::-;;:::i;16990:305::-;17092:4;-1:-1:-1;;;;;;17129:40:0;;-1:-1:-1;;;17129:40:0;;:105;;-1:-1:-1;;;;;;;17186:48:0;;-1:-1:-1;;;17186:48:0;17129:105;:158;;;-1:-1:-1;;;;;;;;;;16146:40:0;;;17251:36;17109:178;16990:305;-1:-1:-1;;16990:305:0:o;17748:100::-;17802:13;17835:5;17828:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17748:100;:::o;18750:169::-;18826:7;18846:23;18861:7;18846:14;:23::i;:::-;-1:-1:-1;18887:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;18887:24:0;;18750:169::o;27693:120::-;13765:13;:11;:13::i;:::-;27772:1:::1;27766:3;:7;27758:23;;;::::0;-1:-1:-1;;;27758:23:0;;7700:2:1;27758:23:0::1;::::0;::::1;7682:21:1::0;7739:1;7719:18;;;7712:29;-1:-1:-1;;;7757:18:1;;;7750:33;7800:18;;27758:23:0::1;;;;;;;;;27792:9;:13:::0;27693:120::o;18366:376::-;18447:13;18463:23;18478:7;18463:14;:23::i;:::-;18447:39;;18511:5;-1:-1:-1;;;;;18505:11:0;:2;-1:-1:-1;;;;;18505:11:0;;18497:57;;;;-1:-1:-1;;;18497:57:0;;8031:2:1;18497:57:0;;;8013:21:1;8070:2;8050:18;;;8043:30;8109:34;8089:18;;;8082:62;-1:-1:-1;;;8160:18:1;;;8153:31;8201:19;;18497:57:0;7829:397:1;18497:57:0;13359:10;-1:-1:-1;;;;;18573:21:0;;;;:62;;-1:-1:-1;18598:37:0;18615:5;13359:10;19087:155;:::i;18598:37::-;18565:137;;;;-1:-1:-1;;;18565:137:0;;8433:2:1;18565:137:0;;;8415:21:1;8472:2;8452:18;;;8445:30;8511:34;8491:18;;;8484:62;8582:32;8562:18;;;8555:60;8632:19;;18565:137:0;8231:426:1;18565:137:0;18713:21;18722:2;18726:7;18713:8;:21::i;:::-;18436:306;18366:376;;:::o;27821:628::-;27873:9;;27884:1;27873:12;27865:59;;;;-1:-1:-1;;;27865:59:0;;8864:2:1;27865:59:0;;;8846:21:1;8903:2;8883:18;;;8876:30;8942:34;8922:18;;;8915:62;-1:-1:-1;;;8993:18:1;;;8986:32;9035:19;;27865:59:0;8662:398:1;27865:59:0;27963:10;27943:31;;;;:19;:31;;;;;;27975:1;-1:-1:-1;27935:102:0;;;;-1:-1:-1;;;27935:102:0;;9267:2:1;27935:102:0;;;9249:21:1;9306:2;9286:18;;;9279:30;9345:34;9325:18;;;9318:62;9416:27;9396:18;;;9389:55;9461:19;;27935:102:0;9065:421:1;27935:102:0;28056:10;28070:9;28056:23;28048:72;;;;-1:-1:-1;;;28048:72:0;;;;;;;:::i;:::-;28153:9;28139:10;;:23;;28131:81;;;;-1:-1:-1;;;28131:81:0;;10098:2:1;28131:81:0;;;10080:21:1;10137:2;10117:18;;;10110:30;10176:34;10156:18;;;10149:62;-1:-1:-1;;;10227:18:1;;;10220:43;10280:19;;28131:81:0;9896:409:1;28131:81:0;28223:14;28240:13;:11;:13::i;:::-;28223:30;;26629:4;28272:6;:19;28264:94;;;;-1:-1:-1;;;28264:94:0;;;;;;;:::i;:::-;28389:10;28369:31;;;;:19;:31;;;;;:36;;28404:1;;28369:31;:36;;28404:1;;28369:36;:::i;:::-;;;;-1:-1:-1;28416:25:0;;-1:-1:-1;28422:10:0;28434:6;28416:5;:25::i;:::-;27854:595;27821:628::o;25968:101::-;26012:7;26039:22;:12;3483:14;;3391:114;26039:22;26032:29;;25968:101;:::o;25413:163::-;25514:4;14732:42;15484:43;:47;15480:488;;15560:10;-1:-1:-1;;;;;15552:18:0;;;15548:85;;25531:37:::1;25550:4;25556:2;25560:7;25531:18;:37::i;:::-;15611:7:::0;;15548:85;15693:67;;-1:-1:-1;;;15693:67:0;;15742:4;15693:67;;;11215:34:1;15749:10:0;11265:18:1;;;11258:43;14732:42:0;;15693:40;;11150:18:1;;15693:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:157;;;;-1:-1:-1;15789:61:0;;-1:-1:-1;;;15789:61:0;;15838:4;15789:61;;;11215:34:1;-1:-1:-1;;;;;11285:15:1;;11265:18;;;11258:43;14732:42:0;;15789:40;;11150:18:1;;15789:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15647:310;;15911:30;;-1:-1:-1;;;15911:30:0;;15930:10;15911:30;;;1679:51:1;1652:18;;15911:30:0;1533:203:1;15647:310:0;25531:37:::1;25550:4;25556:2;25560:7;25531:18;:37::i;:::-;25413:163:::0;;;;:::o;25141:107::-;13765:13;:11;:13::i;:::-;25217::::1;:23;25233:7:::0;25217:13;:23:::1;:::i;:::-;;25141:107:::0;:::o;29361:204::-;13765:13;:11;:13::i;:::-;29429:21:::1;29469:11:::0;29461:44:::1;;;::::0;-1:-1:-1;;;29461:44:0;;13968:2:1;29461:44:0::1;::::0;::::1;13950:21:1::0;14007:2;13987:18;;;13980:30;-1:-1:-1;;;14026:18:1;;;14019:50;14086:18;;29461:44:0::1;13766:344:1::0;29461:44:0::1;29516:41;29526:7;13852::::0;13879:6;-1:-1:-1;;;;;13879:6:0;;13806:87;29526:7:::1;29535:21;29516:9;:41::i;25584:171::-:0;25689:4;14732:42;15484:43;:47;15480:488;;15560:10;-1:-1:-1;;;;;15552:18:0;;;15548:85;;25706:41:::1;25729:4;25735:2;25739:7;25706:22;:41::i;15548:85::-:0;15693:67;;-1:-1:-1;;;15693:67:0;;15742:4;15693:67;;;11215:34:1;15749:10:0;11265:18:1;;;11258:43;14732:42:0;;15693:40;;11150:18:1;;15693:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:157;;;;-1:-1:-1;15789:61:0;;-1:-1:-1;;;15789:61:0;;15838:4;15789:61;;;11215:34:1;-1:-1:-1;;;;;11285:15:1;;11265:18;;;11258:43;14732:42:0;;15789:40;;11150:18:1;;15789:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15647:310;;15911:30;;-1:-1:-1;;;15911:30:0;;15930:10;15911:30;;;1679:51:1;1652:18;;15911:30:0;1533:203:1;15647:310:0;25706:41:::1;25729:4;25735:2;25739:7;25706:22;:41::i;24237:670::-:0;24299:16;24327:23;24353:17;24363:6;24353:9;:17::i;:::-;24327:43;;24381:30;24428:15;24414:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24414:30:0;-1:-1:-1;24381:63:0;-1:-1:-1;24455:22:0;24506:23;24546:323;24571:15;24553;:33;:76;;;;-1:-1:-1;24607:12:0;3483:14;24590;:39;24553:76;24546:323;;;24677:6;-1:-1:-1;;;;;24650:33:0;:23;24658:14;24650:7;:23::i;:::-;-1:-1:-1;;;;;24650:33:0;;24646:169;;24737:14;24704:13;24718:15;24704:30;;;;;;;;:::i;:::-;;;;;;;;;;:47;24781:17;;24646:169;24840:16;;;;;24546:323;;;-1:-1:-1;24886:13:0;;24237:670;-1:-1:-1;;;;24237:670:0:o;17518:222::-;17590:7;17626:16;;;:7;:16;;;;;;-1:-1:-1;;;;;17626:16:0;;17653:56;;;;-1:-1:-1;;;17653:56:0;;14449:2:1;17653:56:0;;;14431:21:1;14488:2;14468:18;;;14461:30;-1:-1:-1;;;14507:18:1;;;14500:54;14571:18;;17653:56:0;14247:348:1;17303:207:0;17375:7;-1:-1:-1;;;;;17403:19:0;;17395:73;;;;-1:-1:-1;;;17395:73:0;;14802:2:1;17395:73:0;;;14784:21:1;14841:2;14821:18;;;14814:30;14880:34;14860:18;;;14853:62;-1:-1:-1;;;14931:18:1;;;14924:39;14980:19;;17395:73:0;14600:405:1;17395:73:0;-1:-1:-1;;;;;;17486:16:0;;;;;:9;:16;;;;;;;17303:207::o;14041:103::-;13765:13;:11;:13::i;:::-;14106:30:::1;14133:1;14106:18;:30::i;:::-;14041:103::o:0;27576:109::-;13765:13;:11;:13::i;:::-;27647:19:::1;:30:::0;27576:109::o;27054:411::-;13765:13;:11;:13::i;:::-;27139:11:::1;27153:13;:11;:13::i;:::-;27139:27;;27179:14;27197:1;27179:19:::0;27171:56:::1;;;::::0;-1:-1:-1;;;27171:56:0;;15212:2:1;27171:56:0::1;::::0;::::1;15194:21:1::0;15251:2;15231:18;;;15224:30;15290:26;15270:18;;;15263:54;15334:18;;27171:56:0::1;15010:348:1::0;27171:56:0::1;26672:2;27246:23;27255:14:::0;27246:6;:23:::1;:::i;:::-;:38;;27238:89;;;::::0;-1:-1:-1;;;27238:89:0;;15565:2:1;27238:89:0::1;::::0;::::1;15547:21:1::0;15604:2;15584:18;;;15577:30;15643:34;15623:18;;;15616:62;-1:-1:-1;;;15694:18:1;;;15687:36;15740:19;;27238:89:0::1;15363:402:1::0;27238:89:0::1;27343:6;27338:120;27359:14;27355:1;:18;27338:120;;;27391:25;27401:2:::0;27405:10:::1;27414:1:::0;27405:6;:10:::1;:::i;:::-;27391:9;:25::i;:::-;27442:3;;27338:120;;17856:104:::0;17912:13;17945:7;17938:14;;;;;:::i;18927:155::-;19022:52;13359:10;19055:8;19065;19022:18;:52::i;28457:641::-;28532:9;;28543:1;28532:12;28524:60;;;;-1:-1:-1;;;28524:60:0;;15972:2:1;28524:60:0;;;15954:21:1;16011:2;15991:18;;;15984:30;16050:34;16030:18;;;16023:62;-1:-1:-1;;;16101:18:1;;;16094:33;16144:19;;28524:60:0;15770:399:1;28524:60:0;28620:10;28603:28;;;;:16;:28;;;;;;28634:1;-1:-1:-1;28595:101:0;;;;-1:-1:-1;;;28595:101:0;;16376:2:1;28595:101:0;;;16358:21:1;16415:2;16395:18;;;16388:30;16454:34;16434:18;;;16427:62;16525:27;16505:18;;;16498:55;16570:19;;28595:101:0;16174:421:1;28595:101:0;28715:10;28729:9;28715:23;28707:72;;;;-1:-1:-1;;;28707:72:0;;;;;;;:::i;:::-;28790:14;28807:13;:11;:13::i;:::-;28790:30;;26629:4;28839:6;:19;28831:94;;;;-1:-1:-1;;;28831:94:0;;;;;;;:::i;:::-;28944:26;28958:11;;28944:13;:26::i;:::-;28936:75;;;;-1:-1:-1;;;28936:75:0;;16802:2:1;28936:75:0;;;16784:21:1;16841:2;16821:18;;;16814:30;16880:34;16860:18;;;16853:62;-1:-1:-1;;;16931:18:1;;;16924:34;16975:19;;28936:75:0;16600:400:1;28936:75:0;29039:10;29022:28;;;;:16;:28;;;;;29053:1;29022:32;;29065:25;;29083:6;29065:5;:25::i;25763:196::-;25887:4;14732:42;15484:43;:47;15480:488;;15560:10;-1:-1:-1;;;;;15552:18:0;;;15548:85;;25904:47:::1;25927:4;25933:2;25937:7;25946:4;25904:22;:47::i;:::-;15611:7:::0;;15548:85;15693:67;;-1:-1:-1;;;15693:67:0;;15742:4;15693:67;;;11215:34:1;15749:10:0;11265:18:1;;;11258:43;14732:42:0;;15693:40;;11150:18:1;;15693:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:157;;;;-1:-1:-1;15789:61:0;;-1:-1:-1;;;15789:61:0;;15838:4;15789:61;;;11215:34:1;-1:-1:-1;;;;;11285:15:1;;11265:18;;;11258:43;14732:42:0;;15789:40;;11150:18:1;;15789:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15647:310;;15911:30;;-1:-1:-1;;;15911:30:0;;15930:10;15911:30;;;1679:51:1;1652:18;;15911:30:0;1533:203:1;15647:310:0;25904:47:::1;25927:4;25933:2;25937:7;25946:4;25904:22;:47::i;:::-;25763:196:::0;;;;;:::o;17968:288::-;18041:13;18067:23;18082:7;18067:14;:23::i;:::-;18101:21;18125:10;:8;:10::i;:::-;18101:34;;18177:1;18159:7;18153:21;:25;:95;;;;;;;;;;;;;;;;;18205:7;18214:18;:7;:16;:18::i;:::-;18188:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18153:95;18146:102;17968:288;-1:-1:-1;;;17968:288:0:o;19087:155::-;-1:-1:-1;;;;;19202:25:0;;;19184:4;19202:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;19087:155::o;14152:201::-;13765:13;:11;:13::i;:::-;-1:-1:-1;;;;;14241:22:0;::::1;14233:73;;;::::0;-1:-1:-1;;;14233:73:0;;17875:2:1;14233:73:0::1;::::0;::::1;17857:21:1::0;17914:2;17894:18;;;17887:30;17953:34;17933:18;;;17926:62;-1:-1:-1;;;18004:18:1;;;17997:36;18050:19;;14233:73:0::1;17673:402:1::0;14233:73:0::1;14317:28;14336:8;14317:18;:28::i;27473:93::-:0;13765:13;:11;:13::i;:::-;27540:10:::1;:18:::0;27473:93::o;21011:431::-;-1:-1:-1;;;;;21091:16:0;;21083:61;;;;-1:-1:-1;;;21083:61:0;;18282:2:1;21083:61:0;;;18264:21:1;;;18301:18;;;18294:30;18360:34;18340:18;;;18333:62;18412:18;;21083:61:0;18080:356:1;21083:61:0;20295:4;20319:16;;;:7;:16;;;;;;-1:-1:-1;;;;;20319:16:0;:30;21155:58;;;;-1:-1:-1;;;21155:58:0;;18643:2:1;21155:58:0;;;18625:21:1;18682:2;18662:18;;;18655:30;18721;18701:18;;;18694:58;18769:18;;21155:58:0;18441:352:1;21155:58:0;-1:-1:-1;;;;;21280:13:0;;;;;;:9;:13;;;;;:18;;21297:1;;21280:13;:18;;21297:1;;21280:18;:::i;:::-;;;;-1:-1:-1;;21309:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;21309:21:0;-1:-1:-1;;;;;21309:21:0;;;;;;;;21346:33;;21309:16;;;21346:33;;21309:16;;21346:33;25217:23:::1;25141:107:::0;:::o;3513:127::-;3602:19;;3620:1;3602:19;;;3513:127::o;22848:135::-;20295:4;20319:16;;;:7;:16;;;;;;-1:-1:-1;;;;;20319:16:0;22922:53;;;;-1:-1:-1;;;22922:53:0;;14449:2:1;22922:53:0;;;14431:21:1;14488:2;14468:18;;;14461:30;-1:-1:-1;;;14507:18:1;;;14500:54;14571:18;;22922:53:0;14247:348:1;13901:132:0;13852:7;13879:6;-1:-1:-1;;;;;13879:6:0;13359:10;13965:23;13957:68;;;;-1:-1:-1;;;13957:68:0;;19000:2:1;13957:68:0;;;18982:21:1;;;19019:18;;;19012:30;19078:34;19058:18;;;19051:62;19130:18;;13957:68:0;18798:356:1;22377:174:0;22452:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;22452:29:0;-1:-1:-1;;;;;22452:29:0;;;;;;;;:24;;22506:23;22452:24;22506:14;:23::i;:::-;-1:-1:-1;;;;;22497:46:0;;;;;;;;;;;22377:174;;:::o;25256:148::-;25337:24;25349:2;25353:7;25337:11;:24::i;:::-;25372;:12;3602:19;;3620:1;3602:19;;;3513:127;19250:247;19358:41;13359:10;19391:7;19358:18;:41::i;:::-;19350:100;;;;-1:-1:-1;;;19350:100:0;;;;;;;:::i;:::-;19461:28;19471:4;19477:2;19481:7;19461:9;:28::i;26115:191::-;26190:12;26208:8;-1:-1:-1;;;;;26208:13:0;26230:7;26208:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26189:54;;;26262:7;26254:44;;;;-1:-1:-1;;;26254:44:0;;19986:2:1;26254:44:0;;;19968:21:1;20025:2;20005:18;;;19998:30;20064:26;20044:18;;;20037:54;20108:18;;26254:44:0;19784:348:1;19505:151:0;19609:39;19626:4;19632:2;19636:7;19609:39;;;;;;;;;;;;:16;:39::i;14361:191::-;14435:16;14454:6;;-1:-1:-1;;;;;14471:17:0;;;-1:-1:-1;;;;;;14471:17:0;;;;;;14504:40;;14454:6;;;;;;;14504:40;;14435:16;14504:40;14424:128;14361:191;:::o;20637:110::-;20713:26;20723:2;20727:7;20713:26;;;;;;;;;;;;:9;:26::i;22559:281::-;22680:8;-1:-1:-1;;;;;22671:17:0;:5;-1:-1:-1;;;;;22671:17:0;;22663:55;;;;-1:-1:-1;;;22663:55:0;;20339:2:1;22663:55:0;;;20321:21:1;20378:2;20358:18;;;20351:30;20417:27;20397:18;;;20390:55;20462:18;;22663:55:0;20137:349:1;22663:55:0;-1:-1:-1;;;;;22729:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;22729:46:0;;;;;;;;;;22791:41;;540::1;;;22791::0;;513:18:1;22791:41:0;;;;;;;22559:281;;;:::o;29106:247::-;29233:28;;-1:-1:-1;;29250:10:0;20640:2:1;20636:15;20632:53;29233:28:0;;;20620:66:1;29184:4:0;;;;20702:12:1;;29233:28:0;;;;;;;;;;;;29223:39;;;;;;29201:61;;29280:65;29299:11;;29280:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29312:19:0;;;-1:-1:-1;29333:11:0;;-1:-1:-1;29280:18:0;:65::i;:::-;29273:72;29106:247;-1:-1:-1;;;;29106:247:0:o;19664:280::-;19795:41;13359:10;19828:7;19795:18;:41::i;:::-;19787:100;;;;-1:-1:-1;;;19787:100:0;;;;;;;:::i;:::-;19898:38;19912:4;19918:2;19922:7;19931:4;19898:13;:38::i;25019:114::-;25079:13;25112;25105:20;;;;;:::i;4124:532::-;4180:13;4210:5;4219:1;4210:10;4206:53;;-1:-1:-1;;4237:10:0;;;;;;;;;;;;-1:-1:-1;;;4237:10:0;;;;;4124:532::o;4206:53::-;4284:5;4269:12;4325:78;4332:9;;4325:78;;4358:8;;;;:::i;:::-;;-1:-1:-1;4381:10:0;;-1:-1:-1;4389:2:0;4381:10;;:::i;:::-;;;4325:78;;;4413:19;4445:6;4435:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4435:17:0;;4413:39;;4463:154;4470:10;;4463:154;;4497:11;4507:1;4497:11;;:::i;:::-;;-1:-1:-1;4566:10:0;4574:2;4566:5;:10;:::i;:::-;4553:24;;:2;:24;:::i;:::-;4540:39;;4523:6;4530;4523:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;4523:56:0;;;;;;;;-1:-1:-1;4594:11:0;4603:2;4594:11;;:::i;:::-;;;4463:154;;20365:264;20458:4;20475:13;20491:23;20506:7;20491:14;:23::i;:::-;20475:39;;20544:5;-1:-1:-1;;;;;20533:16:0;:7;-1:-1:-1;;;;;20533:16:0;;:52;;;;20553:32;20570:5;20577:7;20553:16;:32::i;:::-;20533:87;;;;20613:7;-1:-1:-1;;;;;20589:31:0;:20;20601:7;20589:11;:20::i;:::-;-1:-1:-1;;;;;20589:31:0;;;20365:264;-1:-1:-1;;;;20365:264:0:o;21840:529::-;21965:4;-1:-1:-1;;;;;21938:31:0;:23;21953:7;21938:14;:23::i;:::-;-1:-1:-1;;;;;21938:31:0;;21930:81;;;;-1:-1:-1;;;21930:81:0;;21574:2:1;21930:81:0;;;21556:21:1;21613:2;21593:18;;;21586:30;21652:34;21632:18;;;21625:62;-1:-1:-1;;;21703:18:1;;;21696:35;21748:19;;21930:81:0;21372:401:1;21930:81:0;-1:-1:-1;;;;;22030:16:0;;22022:65;;;;-1:-1:-1;;;22022:65:0;;21980:2:1;22022:65:0;;;21962:21:1;22019:2;21999:18;;;21992:30;22058:34;22038:18;;;22031:62;-1:-1:-1;;;22109:18:1;;;22102:34;22153:19;;22022:65:0;21778:400:1;22022:65:0;22148:29;22165:1;22169:7;22148:8;:29::i;:::-;-1:-1:-1;;;;;22188:15:0;;;;;;:9;:15;;;;;:20;;22207:1;;22188:15;:20;;22207:1;;22188:20;:::i;:::-;;;;-1:-1:-1;;;;;;;22219:13:0;;;;;;:9;:13;;;;;:18;;22236:1;;22219:13;:18;;22236:1;;22219:18;:::i;:::-;;;;-1:-1:-1;;22248:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;22248:21:0;-1:-1:-1;;;;;22248:21:0;;;;;;;;;22285:27;;22248:16;;22285:27;;;;;;;18436:306;18366:376;;:::o;20755:248::-;20850:18;20856:2;20860:7;20850:5;:18::i;:::-;20887:53;20918:1;20922:2;20926:7;20935:4;20887:22;:53::i;:::-;20879:116;;;;-1:-1:-1;;;20879:116:0;;;;;;;:::i;5656:156::-;5747:4;5800;5771:25;5784:5;5791:4;5771:12;:25::i;:::-;:33;;5656:156;-1:-1:-1;;;;5656:156:0:o;19952:270::-;20065:28;20075:4;20081:2;20085:7;20065:9;:28::i;:::-;20112:47;20135:4;20141:2;20145:7;20154:4;20112:22;:47::i;:::-;20104:110;;;;-1:-1:-1;;;20104:110:0;;;;;;;:::i;22991:754::-;23102:4;-1:-1:-1;;;;;23123:13:0;;174:19;:23;23119:619;;23159:71;;-1:-1:-1;;;23159:71:0;;-1:-1:-1;;;;;23159:36:0;;;;;:71;;13359:10;;23210:4;;23216:7;;23225:4;;23159:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23159:71:0;;;;;;;;-1:-1:-1;;23159:71:0;;;;;;;;;;;;:::i;:::-;;;23155:528;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23400:6;:13;23417:1;23400:18;23396:272;;23443:60;;-1:-1:-1;;;23443:60:0;;;;;;;:::i;23396:272::-;23618:6;23612:13;23603:6;23599:2;23595:15;23588:38;23155:528;-1:-1:-1;;;;;;23281:51:0;-1:-1:-1;;;23281:51:0;;-1:-1:-1;23274:58:0;;23119:619;-1:-1:-1;23722:4:0;22991:754;;;;;;:::o;6002:296::-;6085:7;6128:4;6085:7;6143:118;6167:5;:12;6163:1;:16;6143:118;;;6216:33;6226:12;6240:5;6246:1;6240:8;;;;;;;;:::i;:::-;;;;;;;6216:9;:33::i;:::-;6201:48;-1:-1:-1;6181:3:0;;;;:::i;:::-;;;;6143:118;;;-1:-1:-1;6278:12:0;6002:296;-1:-1:-1;;;6002:296:0:o;9172:149::-;9235:7;9266:1;9262;:5;:51;;9397:13;9447:15;;;9483:4;9476:15;;;9530:4;9514:21;;9262:51;;;-1:-1:-1;9397:13:0;9447:15;;;9483:4;9476:15;9530:4;9514:21;;;9172:149::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;1838:70;1741:173;;;:::o;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;2360:328::-;2437:6;2445;2453;2506:2;2494:9;2485:7;2481:23;2477:32;2474:52;;;2522:1;2519;2512:12;2474:52;2545:29;2564:9;2545:29;:::i;:::-;2535:39;;2593:38;2627:2;2616:9;2612:18;2593:38;:::i;:::-;2583:48;;2678:2;2667:9;2663:18;2650:32;2640:42;;2360:328;;;;;:::o;2875:127::-;2936:10;2931:3;2927:20;2924:1;2917:31;2967:4;2964:1;2957:15;2991:4;2988:1;2981:15;3007:632;3072:5;3102:18;3143:2;3135:6;3132:14;3129:40;;;3149:18;;:::i;:::-;3224:2;3218:9;3192:2;3278:15;;-1:-1:-1;;3274:24:1;;;3300:2;3270:33;3266:42;3254:55;;;3324:18;;;3344:22;;;3321:46;3318:72;;;3370:18;;:::i;:::-;3410:10;3406:2;3399:22;3439:6;3430:15;;3469:6;3461;3454:22;3509:3;3500:6;3495:3;3491:16;3488:25;3485:45;;;3526:1;3523;3516:12;3485:45;3576:6;3571:3;3564:4;3556:6;3552:17;3539:44;3631:1;3624:4;3615:6;3607;3603:19;3599:30;3592:41;;;;3007:632;;;;;:::o;3644:451::-;3713:6;3766:2;3754:9;3745:7;3741:23;3737:32;3734:52;;;3782:1;3779;3772:12;3734:52;3822:9;3809:23;3855:18;3847:6;3844:30;3841:50;;;3887:1;3884;3877:12;3841:50;3910:22;;3963:4;3955:13;;3951:27;-1:-1:-1;3941:55:1;;3992:1;3989;3982:12;3941:55;4015:74;4081:7;4076:2;4063:16;4058:2;4054;4050:11;4015:74;:::i;4100:186::-;4159:6;4212:2;4200:9;4191:7;4187:23;4183:32;4180:52;;;4228:1;4225;4218:12;4180:52;4251:29;4270:9;4251:29;:::i;4291:632::-;4462:2;4514:21;;;4584:13;;4487:18;;;4606:22;;;4433:4;;4462:2;4685:15;;;;4659:2;4644:18;;;4433:4;4728:169;4742:6;4739:1;4736:13;4728:169;;;4803:13;;4791:26;;4872:15;;;;4837:12;;;;4764:1;4757:9;4728:169;;;-1:-1:-1;4914:3:1;;4291:632;-1:-1:-1;;;;;;4291:632:1:o;5113:118::-;5199:5;5192:13;5185:21;5178:5;5175:32;5165:60;;5221:1;5218;5211:12;5236:315;5301:6;5309;5362:2;5350:9;5341:7;5337:23;5333:32;5330:52;;;5378:1;5375;5368:12;5330:52;5401:29;5420:9;5401:29;:::i;:::-;5391:39;;5480:2;5469:9;5465:18;5452:32;5493:28;5515:5;5493:28;:::i;:::-;5540:5;5530:15;;;5236:315;;;;;:::o;5556:615::-;5642:6;5650;5703:2;5691:9;5682:7;5678:23;5674:32;5671:52;;;5719:1;5716;5709:12;5671:52;5759:9;5746:23;5788:18;5829:2;5821:6;5818:14;5815:34;;;5845:1;5842;5835:12;5815:34;5883:6;5872:9;5868:22;5858:32;;5928:7;5921:4;5917:2;5913:13;5909:27;5899:55;;5950:1;5947;5940:12;5899:55;5990:2;5977:16;6016:2;6008:6;6005:14;6002:34;;;6032:1;6029;6022:12;6002:34;6085:7;6080:2;6070:6;6067:1;6063:14;6059:2;6055:23;6051:32;6048:45;6045:65;;;6106:1;6103;6096:12;6045:65;6137:2;6129:11;;;;;6159:6;;-1:-1:-1;5556:615:1;;-1:-1:-1;;;;5556:615:1:o;6176:667::-;6271:6;6279;6287;6295;6348:3;6336:9;6327:7;6323:23;6319:33;6316:53;;;6365:1;6362;6355:12;6316:53;6388:29;6407:9;6388:29;:::i;:::-;6378:39;;6436:38;6470:2;6459:9;6455:18;6436:38;:::i;:::-;6426:48;;6521:2;6510:9;6506:18;6493:32;6483:42;;6576:2;6565:9;6561:18;6548:32;6603:18;6595:6;6592:30;6589:50;;;6635:1;6632;6625:12;6589:50;6658:22;;6711:4;6703:13;;6699:27;-1:-1:-1;6689:55:1;;6740:1;6737;6730:12;6689:55;6763:74;6829:7;6824:2;6811:16;6806:2;6802;6798:11;6763:74;:::i;:::-;6753:84;;;6176:667;;;;;;;:::o;6848:260::-;6916:6;6924;6977:2;6965:9;6956:7;6952:23;6948:32;6945:52;;;6993:1;6990;6983:12;6945:52;7016:29;7035:9;7016:29;:::i;:::-;7006:39;;7064:38;7098:2;7087:9;7083:18;7064:38;:::i;:::-;7054:48;;6848:260;;;;;:::o;7113:380::-;7192:1;7188:12;;;;7235;;;7256:61;;7310:4;7302:6;7298:17;7288:27;;7256:61;7363:2;7355:6;7352:14;7332:18;7329:38;7326:161;;7409:10;7404:3;7400:20;7397:1;7390:31;7444:4;7441:1;7434:15;7472:4;7469:1;7462:15;7326:161;;7113:380;;;:::o;9491:400::-;9693:2;9675:21;;;9732:2;9712:18;;;9705:30;9771:34;9766:2;9751:18;;9744:62;-1:-1:-1;;;9837:2:1;9822:18;;9815:34;9881:3;9866:19;;9491:400::o;10310:426::-;10512:2;10494:21;;;10551:2;10531:18;;;10524:30;10590:34;10585:2;10570:18;;10563:62;10661:32;10656:2;10641:18;;10634:60;10726:3;10711:19;;10310:426::o;10741:127::-;10802:10;10797:3;10793:20;10790:1;10783:31;10833:4;10830:1;10823:15;10857:4;10854:1;10847:15;10873:125;10938:9;;;10959:10;;;10956:36;;;10972:18;;:::i;11312:245::-;11379:6;11432:2;11420:9;11411:7;11407:23;11403:32;11400:52;;;11448:1;11445;11438:12;11400:52;11480:9;11474:16;11499:28;11521:5;11499:28;:::i;11688:545::-;11790:2;11785:3;11782:11;11779:448;;;11826:1;11851:5;11847:2;11840:17;11896:4;11892:2;11882:19;11966:2;11954:10;11950:19;11947:1;11943:27;11937:4;11933:38;12002:4;11990:10;11987:20;11984:47;;;-1:-1:-1;12025:4:1;11984:47;12080:2;12075:3;12071:12;12068:1;12064:20;12058:4;12054:31;12044:41;;12135:82;12153:2;12146:5;12143:13;12135:82;;;12198:17;;;12179:1;12168:13;12135:82;;;12139:3;;;11688:545;;;:::o;12409:1352::-;12535:3;12529:10;12562:18;12554:6;12551:30;12548:56;;;12584:18;;:::i;:::-;12613:97;12703:6;12663:38;12695:4;12689:11;12663:38;:::i;:::-;12657:4;12613:97;:::i;:::-;12765:4;;12829:2;12818:14;;12846:1;12841:663;;;;13548:1;13565:6;13562:89;;;-1:-1:-1;13617:19:1;;;13611:26;13562:89;-1:-1:-1;;12366:1:1;12362:11;;;12358:24;12354:29;12344:40;12390:1;12386:11;;;12341:57;13664:81;;12811:944;;12841:663;11635:1;11628:14;;;11672:4;11659:18;;-1:-1:-1;;12877:20:1;;;12995:236;13009:7;13006:1;13003:14;12995:236;;;13098:19;;;13092:26;13077:42;;13190:27;;;;13158:1;13146:14;;;;13025:19;;12995:236;;;12999:3;13259:6;13250:7;13247:19;13244:201;;;13320:19;;;13314:26;-1:-1:-1;;13403:1:1;13399:14;;;13415:3;13395:24;13391:37;13387:42;13372:58;13357:74;;13244:201;-1:-1:-1;;;;;13491:1:1;13475:14;;;13471:22;13458:36;;-1:-1:-1;12409:1352:1:o;14115:127::-;14176:10;14171:3;14167:20;14164:1;14157:31;14207:4;14204:1;14197:15;14231:4;14228:1;14221:15;17005:663;17285:3;17323:6;17317:13;17339:66;17398:6;17393:3;17386:4;17378:6;17374:17;17339:66;:::i;:::-;17468:13;;17427:16;;;;17490:70;17468:13;17427:16;17537:4;17525:17;;17490:70;:::i;:::-;-1:-1:-1;;;17582:20:1;;17611:22;;;17660:1;17649:13;;17005:663;-1:-1:-1;;;;17005:663:1:o;19159:410::-;19361:2;19343:21;;;19400:2;19380:18;;;19373:30;19439:34;19434:2;19419:18;;19412:62;-1:-1:-1;;;19505:2:1;19490:18;;19483:44;19559:3;19544:19;;19159:410::o;20725:135::-;20764:3;20785:17;;;20782:43;;20805:18;;:::i;:::-;-1:-1:-1;20852:1:1;20841:13;;20725:135::o;20865:127::-;20926:10;20921:3;20917:20;20914:1;20907:31;20957:4;20954:1;20947:15;20981:4;20978:1;20971:15;20997:120;21037:1;21063;21053:35;;21068:18;;:::i;:::-;-1:-1:-1;21102:9:1;;20997:120::o;21122:128::-;21189:9;;;21210:11;;;21207:37;;;21224:18;;:::i;21255:112::-;21287:1;21313;21303:35;;21318:18;;:::i;:::-;-1:-1:-1;21352:9:1;;21255:112::o;22183:414::-;22385:2;22367:21;;;22424:2;22404:18;;;22397:30;22463:34;22458:2;22443:18;;22436:62;-1:-1:-1;;;22529:2:1;22514:18;;22507:48;22587:3;22572:19;;22183:414::o;22602:489::-;-1:-1:-1;;;;;22871:15:1;;;22853:34;;22923:15;;22918:2;22903:18;;22896:43;22970:2;22955:18;;22948:34;;;23018:3;23013:2;22998:18;;22991:31;;;22796:4;;23039:46;;23065:19;;23057:6;23039:46;:::i;:::-;23031:54;22602:489;-1:-1:-1;;;;;;22602:489:1:o;23096:249::-;23165:6;23218:2;23206:9;23197:7;23193:23;23189:32;23186:52;;;23234:1;23231;23224:12;23186:52;23266:9;23260:16;23285:30;23309:5;23285:30;:::i

Swarm Source

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