ETH Price: $3,186.14 (+0.95%)
 

Overview

Max Total Supply

7,777 HATS

Holders

9

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
85.547 HATS

Value
$0.00
0x778f275ca42685bce22239b05d9dbee6ca31cfd4
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:
SJ741

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

//  ██████  █████  █████     ███   ██                   
// ██          ██     ██   ██ ██  ███                   
// ██████      ██    ██  ██   ██   ██⠀                    
//      ██ ██  ██   ██   ████████  ██⠀                    
// ██████   ████    ██        ██  ████

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

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

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

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

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

// ERC721 https://eips.ethereum.org/EIPS/eip-721
interface IERC721 is IERC165 {
    function balanceOf(address account) external view returns (uint256);
    function ownerOf(uint256 _tokenId) external view returns (address);
    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory data) external payable;
    function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;
    function setApprovalForAll(address _operator, bool _approved) external;
    function getApproved(uint256 _tokenId) external view returns (address);
    function isApprovedForAll(address _owner, address _operator) external view returns (bool);
    // payable removed for erc20 etherscan compatibility
    function approve(address spender, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

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

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

contract SJ741 is ISJ741 {

    string public baseURI = "ipfs://QmTzW7QX8KFBdE6K8FUnM9a4hPj8oMGL5bC7bqdWE89Rid";
    string internal constant _name = "SJ741 Party Hats";
    string internal constant _symbol = "HATS";

    uint internal constant _decimals = 8;
    uint internal constant _totalIds = 7777;
    uint internal constant _totalSupply = _totalIds * 10**_decimals; 
    uint internal constant ONE = 10**_decimals; // 1.0 token(s)
    uint internal constant MAXID = ONE + _totalIds;  // 1.00000001 : 1.00007777 is the range for NFT IDs

    uint32 public minted; // number of unique ID mints
    uint32[] private broken; // broken NFTs stored in limbo list 

    address public dev;
    bool public supportsNFTinterface;

    mapping(address => mapping(address => bool)) private _operatorApprovals;
    mapping(address => mapping(address => uint)) internal _allowance;
    mapping(uint256 tokenId => address) public ownerOf;
    mapping(uint256 => address) private _nftApprovals;
    mapping(address => uint) internal _balanceOf;
    mapping(address => uint32[]) public ownedNFTs;
    mapping(uint32 => uint256) private idToIndex; 

    error UnsupportedReceiver();

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

    constructor() {
        //set minted at ONE to ensure correct operation within range of IDs
        minted = uint32(ONE);

        //the message sender receives the entire supply, and is set as "dev"
        _balanceOf[msg.sender] = _totalSupply; 
        dev = msg.sender;
    }

    function name() public view virtual returns (string memory) { return _name; }
    function symbol() public view virtual returns (string memory) { return _symbol; }
    function decimals() public view virtual returns (uint) { return _decimals; }
    function totalSupply() public pure override returns (uint) { return _totalSupply; }
    function balanceOf( address account) public view override returns (uint) { return _balanceOf[account]; }
    function allowance(address owner, address spender) public view override returns (uint) { return _allowance[owner][spender]; }
    function setBaseURI(string memory newBaseURI) public onlyDev {baseURI = newBaseURI;}
    function changeDev(address newDev) public onlyDev {dev = newDev;}//simple function to change developer address, or revoke ownership (with address(0))
    // @DEV toggleNFTinterface is for the small possibility of frontend system changes leading the contract to favor enabling the disabled supportsNFTinterface flag
    // don't waste it, as frontends don't typically change classification of contracts
    // probably never to be used.
    function toggelNFTinterface() public onlyDev {supportsNFTinterface = !supportsNFTinterface;}


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

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

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

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

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

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

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

            if(ownedNFTsArray.length > 0) { // if the sender has an nft to send

                uint32 tokenId = ownedNFTsArray[0];//selects the user's first NFT from the list

                brokenIDsArray.push(tokenId);//pushes the nft into the "broken list" for limbo NFTs
                _transfer721(from, address(0), tokenId);//transfers the NFT ID ownership to (0) address for stewardship
            }
        }

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

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

                _transfer721(address(0), to, brokenIDsArray[brokenIDsArray.length - 1]);
                brokenIDsArray.pop();
            }
            else { // mint new id
                _mint(to);
            }
            
        }
        
        // amount of tokens - amount of whole tokens being processed in int
        uint amountInTokens = amount / ONE;

        // ignore minting nfts from dev when they call -- this allows for gas-efficient team operations
        // @DEV if dev gathers NFTs, use the ERC721 transferFrom method to extract
        // @DEV be careful, don't let the wallet fall to some convoluted transferFrom scam to do something unexpected
        if(from == dev) return;


        if(amountInTokens > 0) {

            uint len = ownedNFTsArray.length; //len is the length, or number of NFTs in the addresses's owned array
            len = amountInTokens < len ? amountInTokens : len;
            // transfers owned NFTs from `from` to `to` until either all are transferred or the desired amount is reached
            // Subtracts transferred NFT count from `amountInTokens` to update remaining transfers
            for (uint i = 0; i < len; i++) {
                _transfer721(from, to, ownedNFTsArray[0]); 
            }
            amountInTokens -= len;
            len = brokenIDsArray.length;
            len = amountInTokens < len ? amountInTokens : len;
            
            // recovers NFTs from the broken state to `to`, or mints new ones if not enough broken NFTs are available
            // if any tokens remain to be allocated, it mints new NFTs to `to` for the remaining balance
            for (uint i = 0; i < len; i++) {        
                _transfer721(address(0), to, brokenIDsArray[brokenIDsArray.length - 1]);
                brokenIDsArray.pop();
            }

            _mintBatch(to, amountInTokens - len);

        }
    }

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

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

            libSJ721.emitTransfer(address(0), to, id); // Emit NFT transfer event

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


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

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


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

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

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


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

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

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

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

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

    }

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

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

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

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

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

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

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

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

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

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

    function withdraw() external onlyDev {
        payable(dev).transfer(address(this).balance);
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"UnsupportedReceiver","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newDev","type":"address"}],"name":"changeDev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dev","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"minted","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownedNFTs","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"supportsNFTinterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggelNFTinterface","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052604051806060016040528060358152602001620042a5603591395f90816200002d919062000374565b503480156200003a575f80fd5b506008600a6200004b9190620005d5565b60015f6101000a81548163ffffffff021916908363ffffffff1602179055506008600a6200007a9190620005d5565b611e6162000089919062000625565b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503360035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200066f565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200018c57607f821691505b602082108103620001a257620001a162000147565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620002067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620001c9565b620002128683620001c9565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6200025c6200025662000250846200022a565b62000233565b6200022a565b9050919050565b5f819050919050565b62000277836200023c565b6200028f620002868262000263565b848454620001d5565b825550505050565b5f90565b620002a562000297565b620002b28184846200026c565b505050565b5b81811015620002d957620002cd5f826200029b565b600181019050620002b8565b5050565b601f8211156200032857620002f281620001a8565b620002fd84620001ba565b810160208510156200030d578190505b620003256200031c85620001ba565b830182620002b7565b50505b505050565b5f82821c905092915050565b5f6200034a5f19846008026200032d565b1980831691505092915050565b5f62000364838362000339565b9150826002028217905092915050565b6200037f8262000110565b67ffffffffffffffff8111156200039b576200039a6200011a565b5b620003a7825462000174565b620003b4828285620002dd565b5f60209050601f831160018114620003ea575f8415620003d5578287015190505b620003e1858262000357565b86555062000450565b601f198416620003fa86620001a8565b5f5b828110156200042357848901518255600182019150602085019450602081019050620003fc565b868310156200044357848901516200043f601f89168262000339565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115620004e257808604811115620004ba57620004b962000458565b5b6001851615620004ca5780820291505b8081029050620004da8562000485565b94506200049a565b94509492505050565b5f82620004fc5760019050620005ce565b816200050b575f9050620005ce565b81600181146200052457600281146200052f5762000565565b6001915050620005ce565b60ff84111562000544576200054362000458565b5b8360020a9150848211156200055e576200055d62000458565b5b50620005ce565b5060208310610133831016604e8410600b84101617156200059f5782820a90508381111562000599576200059862000458565b5b620005ce565b620005ae848484600162000491565b92509050818404811115620005c857620005c762000458565b5b81810290505b9392505050565b5f620005e1826200022a565b9150620005ee836200022a565b92506200061d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620004eb565b905092915050565b5f62000631826200022a565b91506200063e836200022a565b92508282026200064e816200022a565b9150828204841483151762000668576200066762000458565b5b5092915050565b613c28806200067d5f395ff3fe608060405260043610610180575f3560e01c80636bcef9a6116100d0578063a22cb46511610089578063b88d4fde11610063578063b88d4fde14610574578063c87b56dd14610590578063dd62ed3e146105cc578063e985e9c51461060857610180565b8063a22cb465146104e6578063a563833b1461050e578063a9059cbb1461053857610180565b80636bcef9a6146103ee5780636c0360eb1461040457806370a082311461042e57806388a8c95c1461046a57806391cca3db1461049257806395d89b41146104bc57610180565b806323b872dd1161013d57806342842e0e1161011757806342842e0e146103445780634f02c4201461036057806355f804b31461038a5780636352211e146103b257610180565b806323b872dd146102c8578063313ce567146103045780633ccfd60b1461032e57610180565b806301ffc9a71461018457806306fdde03146101c0578063081812fc146101ea578063095ea7b31461022657806318160ddd146102625780631a72b87d1461028c575b5f80fd5b34801561018f575f80fd5b506101aa60048036038101906101a591906129c1565b610644565b6040516101b79190612a06565b60405180910390f35b3480156101cb575f80fd5b506101d46106ed565b6040516101e19190612aa9565b60405180910390f35b3480156101f5575f80fd5b50610210600480360381019061020b9190612afc565b61072a565b60405161021d9190612b66565b60405180910390f35b348015610231575f80fd5b5061024c60048036038101906102479190612ba9565b6107ca565b6040516102599190612a06565b60405180910390f35b34801561026d575f80fd5b506102766109b4565b6040516102839190612bf6565b60405180910390f35b348015610297575f80fd5b506102b260048036038101906102ad9190612ba9565b6109d5565b6040516102bf9190612c2d565b60405180910390f35b3480156102d3575f80fd5b506102ee60048036038101906102e99190612c46565b610a19565b6040516102fb9190612a06565b60405180910390f35b34801561030f575f80fd5b50610318610b60565b6040516103259190612bf6565b60405180910390f35b348015610339575f80fd5b50610342610b68565b005b61035e60048036038101906103599190612c46565b610c5e565b005b34801561036b575f80fd5b50610374610e62565b6040516103819190612c2d565b60405180910390f35b348015610395575f80fd5b506103b060048036038101906103ab9190612dc2565b610e77565b005b3480156103bd575f80fd5b506103d860048036038101906103d39190612afc565b610f18565b6040516103e59190612b66565b60405180910390f35b3480156103f9575f80fd5b50610402610f48565b005b34801561040f575f80fd5b50610418611003565b6040516104259190612aa9565b60405180910390f35b348015610439575f80fd5b50610454600480360381019061044f9190612e09565b61108e565b6040516104619190612bf6565b60405180910390f35b348015610475575f80fd5b50610490600480360381019061048b9190612e09565b6110d4565b005b34801561049d575f80fd5b506104a66111a6565b6040516104b39190612b66565b60405180910390f35b3480156104c7575f80fd5b506104d06111cb565b6040516104dd9190612aa9565b60405180910390f35b3480156104f1575f80fd5b5061050c60048036038101906105079190612e5e565b611208565b005b348015610519575f80fd5b506105226112a6565b60405161052f9190612a06565b60405180910390f35b348015610543575f80fd5b5061055e60048036038101906105599190612ba9565b6112b9565b60405161056b9190612a06565b60405180910390f35b61058e60048036038101906105899190612f3a565b61135f565b005b34801561059b575f80fd5b506105b660048036038101906105b19190612afc565b611566565b6040516105c39190612aa9565b60405180910390f35b3480156105d7575f80fd5b506105f260048036038101906105ed9190612fba565b611639565b6040516105ff9190612bf6565b60405180910390f35b348015610613575f80fd5b5061062e60048036038101906106299190612fba565b6116bb565b60405161063b9190612a06565b60405180910390f35b5f600360149054906101000a900460ff16801561068657506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106b657506301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106e657506336372b0760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606040518060400160405280601081526020017f534a373431205061727479204861747300000000000000000000000000000000815250905090565b5f8073ffffffffffffffffffffffffffffffffffffffff1660065f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610792575f80fd5b60075f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f6008600a6107d99190613154565b821180156108015750611e616008600a6107f39190613154565b6107fd919061319e565b8211155b15610921575f60065f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561087d575061087b81336116bb565b155b156108bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b49061321b565b60405180910390fd5b8360075f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610917818585611749565b60019150506109ae565b8160055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506109a93384846117a9565b600190505b92915050565b5f6008600a6109c39190613154565b611e616109d09190613239565b905090565b6009602052815f5260405f2081815481106109ee575f80fd5b905f5260205f209060089182820401919006600402915091509054906101000a900463ffffffff1681565b5f6008600a610a289190613154565b82118015610a505750611e616008600a610a429190613154565b610a4c919061319e565b8211155b15610b3e578373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ac25750610a938261072a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610ad35750610ad284336116bb565b5b610b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b09906132c4565b60405180910390fd5b610b1d848484611813565b610b3584846008600a610b309190613154565b611966565b60019050610b59565b610b49843384611a13565b610b54848484611b61565b600190505b9392505050565b5f6008905090565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bee9061332c565b60405180910390fd5b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610c5b573d5f803e3d5ffd5b50565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ccb5750610c9c8161072a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610cdc5750610cdb83336116bb565b5b610d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d12906132c4565b60405180910390fd5b610d26838383611813565b610d3e83836008600a610d399190613154565b611966565b5f8273ffffffffffffffffffffffffffffffffffffffff163b14158015610e26575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b8152600401610dc49392919061337d565b6020604051808303815f875af1158015610de0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e0491906133d9565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15610e5d576040517f75b24d4000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60015f9054906101000a900463ffffffff1681565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efd9061332c565b60405180910390fd5b805f9081610f1491906135fe565b5050565b6006602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fce9061332c565b60405180910390fd5b600360149054906101000a900460ff1615600360146101000a81548160ff021916908315150217905550565b5f805461100f90613431565b80601f016020809104026020016040519081016040528092919081815260200182805461103b90613431565b80156110865780601f1061105d57610100808354040283529160200191611086565b820191905f5260205f20905b81548152906001019060200180831161106957829003601f168201915b505050505081565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115a9061332c565b60405180910390fd5b8060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600481526020017f4841545300000000000000000000000000000000000000000000000000000000815250905090565b8060045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506112a23383836120d9565b5050565b600360149054906101000a900460ff1681565b5f3373ffffffffffffffffffffffffffffffffffffffff1660065f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361134957611328338484611813565b61134033846008600a61133b9190613154565b611966565b60019050611359565b611354338484611b61565b600190505b92915050565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113cc575061139d8261072a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806113dd57506113dc84336116bb565b5b61141c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611413906132c4565b60405180910390fd5b611427848484611813565b61143f84846008600a61143a9190613154565b611966565b5f8373ffffffffffffffffffffffffffffffffffffffff163b14158015611529575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016114c7949392919061370f565b6020604051808303815f875af11580156114e3573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061150791906133d9565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611560576040517f75b24d4000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6060611e616008600a6115799190613154565b611583919061319e565b8211156115c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bc906137a3565b60405180910390fd5b5f8080546115d290613431565b9050036115ef5760405180602001604052805f8152509050611634565b5f6116116008600a6116019190613154565b8461160c91906137c1565b612143565b6040516020016116229291906138f8565b60405160208183030381529060405290505b919050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118069190612bf6565b60405180910390a3505050565b60065f8263ffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146118b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ae90613970565b60405180910390fd5b60075f8263ffffffff1681526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690558160065f8363ffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061195083838361229c565b61196183838363ffffffff16612503565b505050565b8060085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546119b291906137c1565b925050819055508060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540192505081905550611a0e838383612563565b505050565b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac5906139d8565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611b5591906137c1565b92505081905550505050565b8060085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015611be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd890613a66565b60405180910390fd5b5f6008600a611bf09190613154565b60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611c389190613ab1565b90505f6008600a611c499190613154565b60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611c919190613ab1565b9050611c9e858585611966565b5f6008600a611cad9190613154565b60085f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611cf59190613ab1565b90505f6008600a611d069190613154565b60085f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611d4e9190613ab1565b90505f60095f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f6002905083861015611e3c575f82805490501115611e3b575f825f81548110611dbd57611dbc613ae1565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff1690508181908060018154018082558091505060019003905f5260205f2090600891828204019190066004029091909190916101000a81548163ffffffff021916908363ffffffff160217905550611e398a5f83611813565b505b5b82851115611ef1575f81805490501115611ee557611ea15f898360018580549050611e6791906137c1565b81548110611e7857611e77613ae1565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff16611813565b80805480611eb257611eb1613b0e565b5b600190038181905f5260205f2090600891828204019190066004026101000a81549063ffffffff02191690559055611ef0565b611eee886125cd565b505b5b5f6008600a611f009190613154565b88611f0b9190613b3b565b905060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1603611f6d57505050505050506120d4565b5f8111156120cc575f83805490509050808210611f8a5780611f8c565b815b90505f5b81811015611fe657611fd98c8c875f81548110611fb057611faf613ae1565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff16611813565b8080600101915050611f90565b508082611ff391906137c1565b915082805490509050808210612009578061200b565b815b90505f5b818110156120b4576120685f8c866001888054905061202e91906137c1565b8154811061203f5761203e613ae1565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff16611813565b8380548061207957612078613b0e565b5b600190038181905f5260205f2090600891828204019190066004026101000a81549063ffffffff02191690559055808060010191505061200f565b506120ca8a82846120c591906137c1565b612770565b505b505050505050505b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121369190612a06565b60405180910390a3505050565b60605f8203612189576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612297565b5f8290505f5b5f82146121b85780806121a190613b6b565b915050600a826121b19190613b3b565b915061218f565b5f8167ffffffffffffffff8111156121d3576121d2612c9e565b5b6040519080825280601f01601f1916602001820160405280156122055781602001600182028036833780820191505090505b5090505b5f85146122905760018261221d91906137c1565b91506030600a8661222e9190613ab1565b6122389190613bbe565b60f81b81838151811061224e5761224d613ae1565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a856122899190613b3b565b9450612209565b8093505050505b919050565b5f600a5f8363ffffffff1663ffffffff1681526020019081526020015f205490505f60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f818054905090505f8260018361231491906137c1565b8154811061232557612324613ae1565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff1690508083858154811061235f5761235e613ae1565b5b905f5260205f2090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550828054806123a1576123a0613b0e565b5b600190038181905f5260205f2090600891828204019190066004026101000a81549063ffffffff021916905590555f6001836123dd91906137c1565b146124055783600a5f8363ffffffff1663ffffffff1681526020019081526020015f20819055505b60095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2085908060018154018082558091505060019003905f5260205f2090600891828204019190066004029091909190916101000a81548163ffffffff021916908363ffffffff160217905550600160095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506124d991906137c1565b600a5f8763ffffffff1663ffffffff1681526020019081526020015f208190555050505050505050565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516125c09190612bf6565b60405180910390a3505050565b5f60015f81819054906101000a900463ffffffff168092919060010191906101000a81548163ffffffff021916908363ffffffff1602179055505060015f9054906101000a900463ffffffff1690508160065f8363ffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050600a5f8363ffffffff1663ffffffff1681526020019081526020015f208190555060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081908060018154018082558091505060019003905f5260205f2090600891828204019190066004029091909190916101000a81548163ffffffff021916908363ffffffff16021790555061276b5f838363ffffffff16612503565b919050565b5f810315612957576001810361278f57612789826125cd565b50612957565b5f60015f9054906101000a900463ffffffff1690505f60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905090505f5b8381101561291e5782806001019350508460065f8563ffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600a5f8563ffffffff1663ffffffff1681526020019081526020015f208190555060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2083908060018154018082558091505060019003905f5260205f2090600891828204019190066004029091909190916101000a81548163ffffffff021916908363ffffffff1602179055506129095f868563ffffffff16612503565b818060010192505080806001019150506127ea565b508260015f8282829054906101000a900463ffffffff160192506101000a81548163ffffffff021916908363ffffffff16021790555050505b5050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6129a08161296c565b81146129aa575f80fd5b50565b5f813590506129bb81612997565b92915050565b5f602082840312156129d6576129d5612964565b5b5f6129e3848285016129ad565b91505092915050565b5f8115159050919050565b612a00816129ec565b82525050565b5f602082019050612a195f8301846129f7565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612a56578082015181840152602081019050612a3b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612a7b82612a1f565b612a858185612a29565b9350612a95818560208601612a39565b612a9e81612a61565b840191505092915050565b5f6020820190508181035f830152612ac18184612a71565b905092915050565b5f819050919050565b612adb81612ac9565b8114612ae5575f80fd5b50565b5f81359050612af681612ad2565b92915050565b5f60208284031215612b1157612b10612964565b5b5f612b1e84828501612ae8565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612b5082612b27565b9050919050565b612b6081612b46565b82525050565b5f602082019050612b795f830184612b57565b92915050565b612b8881612b46565b8114612b92575f80fd5b50565b5f81359050612ba381612b7f565b92915050565b5f8060408385031215612bbf57612bbe612964565b5b5f612bcc85828601612b95565b9250506020612bdd85828601612ae8565b9150509250929050565b612bf081612ac9565b82525050565b5f602082019050612c095f830184612be7565b92915050565b5f63ffffffff82169050919050565b612c2781612c0f565b82525050565b5f602082019050612c405f830184612c1e565b92915050565b5f805f60608486031215612c5d57612c5c612964565b5b5f612c6a86828701612b95565b9350506020612c7b86828701612b95565b9250506040612c8c86828701612ae8565b9150509250925092565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612cd482612a61565b810181811067ffffffffffffffff82111715612cf357612cf2612c9e565b5b80604052505050565b5f612d0561295b565b9050612d118282612ccb565b919050565b5f67ffffffffffffffff821115612d3057612d2f612c9e565b5b612d3982612a61565b9050602081019050919050565b828183375f83830152505050565b5f612d66612d6184612d16565b612cfc565b905082815260208101848484011115612d8257612d81612c9a565b5b612d8d848285612d46565b509392505050565b5f82601f830112612da957612da8612c96565b5b8135612db9848260208601612d54565b91505092915050565b5f60208284031215612dd757612dd6612964565b5b5f82013567ffffffffffffffff811115612df457612df3612968565b5b612e0084828501612d95565b91505092915050565b5f60208284031215612e1e57612e1d612964565b5b5f612e2b84828501612b95565b91505092915050565b612e3d816129ec565b8114612e47575f80fd5b50565b5f81359050612e5881612e34565b92915050565b5f8060408385031215612e7457612e73612964565b5b5f612e8185828601612b95565b9250506020612e9285828601612e4a565b9150509250929050565b5f67ffffffffffffffff821115612eb657612eb5612c9e565b5b612ebf82612a61565b9050602081019050919050565b5f612ede612ed984612e9c565b612cfc565b905082815260208101848484011115612efa57612ef9612c9a565b5b612f05848285612d46565b509392505050565b5f82601f830112612f2157612f20612c96565b5b8135612f31848260208601612ecc565b91505092915050565b5f805f8060808587031215612f5257612f51612964565b5b5f612f5f87828801612b95565b9450506020612f7087828801612b95565b9350506040612f8187828801612ae8565b925050606085013567ffffffffffffffff811115612fa257612fa1612968565b5b612fae87828801612f0d565b91505092959194509250565b5f8060408385031215612fd057612fcf612964565b5b5f612fdd85828601612b95565b9250506020612fee85828601612b95565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111561307a5780860481111561305657613055612ff8565b5b60018516156130655780820291505b808102905061307385613025565b945061303a565b94509492505050565b5f82613092576001905061314d565b8161309f575f905061314d565b81600181146130b557600281146130bf576130ee565b600191505061314d565b60ff8411156130d1576130d0612ff8565b5b8360020a9150848211156130e8576130e7612ff8565b5b5061314d565b5060208310610133831016604e8410600b84101617156131235782820a90508381111561311e5761311d612ff8565b5b61314d565b6131308484846001613031565b9250905081840481111561314757613146612ff8565b5b81810290505b9392505050565b5f61315e82612ac9565b915061316983612ac9565b92506131967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613083565b905092915050565b5f6131a882612ac9565b91506131b383612ac9565b92508282019050808211156131cb576131ca612ff8565b5b92915050565b7f534a3734313a20596f7520617265206e6f7420617070726f76656400000000005f82015250565b5f613205601b83612a29565b9150613210826131d1565b602082019050919050565b5f6020820190508181035f830152613232816131f9565b9050919050565b5f61324382612ac9565b915061324e83612ac9565b925082820261325c81612ac9565b9150828204841483151761327357613272612ff8565b5b5092915050565b7f534a3734313a20596f7520646f6e2774206861766520746865207269676874005f82015250565b5f6132ae601f83612a29565b91506132b98261327a565b602082019050919050565b5f6020820190508181035f8301526132db816132a2565b9050919050565b7f4e6f742074686520646576656c6f7065720000000000000000000000000000005f82015250565b5f613316601183612a29565b9150613321826132e2565b602082019050919050565b5f6020820190508181035f8301526133438161330a565b9050919050565b5f82825260208201905092915050565b50565b5f6133685f8361334a565b91506133738261335a565b5f82019050919050565b5f6080820190506133905f830186612b57565b61339d6020830185612b57565b6133aa6040830184612be7565b81810360608301526133bb8161335d565b9050949350505050565b5f815190506133d381612997565b92915050565b5f602082840312156133ee576133ed612964565b5b5f6133fb848285016133c5565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061344857607f821691505b60208210810361345b5761345a613404565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026134bd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613482565b6134c78683613482565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6135026134fd6134f884612ac9565b6134df565b612ac9565b9050919050565b5f819050919050565b61351b836134e8565b61352f61352782613509565b84845461348e565b825550505050565b5f90565b613543613537565b61354e818484613512565b505050565b5b81811015613571576135665f8261353b565b600181019050613554565b5050565b601f8211156135b65761358781613461565b61359084613473565b8101602085101561359f578190505b6135b36135ab85613473565b830182613553565b50505b505050565b5f82821c905092915050565b5f6135d65f19846008026135bb565b1980831691505092915050565b5f6135ee83836135c7565b9150826002028217905092915050565b61360782612a1f565b67ffffffffffffffff8111156136205761361f612c9e565b5b61362a8254613431565b613635828285613575565b5f60209050601f831160018114613666575f8415613654578287015190505b61365e85826135e3565b8655506136c5565b601f19841661367486613461565b5f5b8281101561369b57848901518255600182019150602085019450602081019050613676565b868310156136b857848901516136b4601f8916826135c7565b8355505b6001600288020188555050505b505050505050565b5f81519050919050565b5f6136e1826136cd565b6136eb818561334a565b93506136fb818560208601612a39565b61370481612a61565b840191505092915050565b5f6080820190506137225f830187612b57565b61372f6020830186612b57565b61373c6040830185612be7565b818103606083015261374e81846136d7565b905095945050505050565b7f534a3734313a20696e76616c69642069640000000000000000000000000000005f82015250565b5f61378d601183612a29565b915061379882613759565b602082019050919050565b5f6020820190508181035f8301526137ba81613781565b9050919050565b5f6137cb82612ac9565b91506137d683612ac9565b92508282039050818111156137ee576137ed612ff8565b5b92915050565b5f81905092915050565b5f815461380a81613431565b61381481866137f4565b9450600182165f811461382e576001811461384357613875565b60ff1983168652811515820286019350613875565b61384c85613461565b5f5b8381101561386d5781548189015260018201915060208101905061384e565b838801955050505b50505092915050565b5f61388882612a1f565b61389281856137f4565b93506138a2818560208601612a39565b80840191505092915050565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000005f82015250565b5f6138e26005836137f4565b91506138ed826138ae565b600582019050919050565b5f61390382856137fe565b915061390f828461387e565b915061391a826138d6565b91508190509392505050565b7f534a3734313a20496e636f7272656374206f776e6572000000000000000000005f82015250565b5f61395a601683612a29565b915061396582613926565b602082019050919050565b5f6020820190508181035f8301526139878161394e565b9050919050565b7f534a3734313a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f6139c2601d83612a29565b91506139cd8261398e565b602082019050919050565b5f6020820190508181035f8301526139ef816139b6565b9050919050565b7f534a3734313a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613a50602683612a29565b9150613a5b826139f6565b604082019050919050565b5f6020820190508181035f830152613a7d81613a44565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613abb82612ac9565b9150613ac683612ac9565b925082613ad657613ad5613a84565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f613b4582612ac9565b9150613b5083612ac9565b925082613b6057613b5f613a84565b5b828204905092915050565b5f613b7582612ac9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ba757613ba6612ff8565b5b600182019050919050565b5f60ff82169050919050565b5f613bc882613bb2565b9150613bd383613bb2565b9250828201905060ff811115613bec57613beb612ff8565b5b9291505056fea26469706673582212202a89daed28b1c4e11c0f779fa86ed6c4c9f8a2a760545c292d9bbc85ea39112364736f6c63430008180033697066733a2f2f516d547a57375158384b46426445364b3846556e4d39613468506a386f4d474c3562433762716457453839526964

Deployed Bytecode

0x608060405260043610610180575f3560e01c80636bcef9a6116100d0578063a22cb46511610089578063b88d4fde11610063578063b88d4fde14610574578063c87b56dd14610590578063dd62ed3e146105cc578063e985e9c51461060857610180565b8063a22cb465146104e6578063a563833b1461050e578063a9059cbb1461053857610180565b80636bcef9a6146103ee5780636c0360eb1461040457806370a082311461042e57806388a8c95c1461046a57806391cca3db1461049257806395d89b41146104bc57610180565b806323b872dd1161013d57806342842e0e1161011757806342842e0e146103445780634f02c4201461036057806355f804b31461038a5780636352211e146103b257610180565b806323b872dd146102c8578063313ce567146103045780633ccfd60b1461032e57610180565b806301ffc9a71461018457806306fdde03146101c0578063081812fc146101ea578063095ea7b31461022657806318160ddd146102625780631a72b87d1461028c575b5f80fd5b34801561018f575f80fd5b506101aa60048036038101906101a591906129c1565b610644565b6040516101b79190612a06565b60405180910390f35b3480156101cb575f80fd5b506101d46106ed565b6040516101e19190612aa9565b60405180910390f35b3480156101f5575f80fd5b50610210600480360381019061020b9190612afc565b61072a565b60405161021d9190612b66565b60405180910390f35b348015610231575f80fd5b5061024c60048036038101906102479190612ba9565b6107ca565b6040516102599190612a06565b60405180910390f35b34801561026d575f80fd5b506102766109b4565b6040516102839190612bf6565b60405180910390f35b348015610297575f80fd5b506102b260048036038101906102ad9190612ba9565b6109d5565b6040516102bf9190612c2d565b60405180910390f35b3480156102d3575f80fd5b506102ee60048036038101906102e99190612c46565b610a19565b6040516102fb9190612a06565b60405180910390f35b34801561030f575f80fd5b50610318610b60565b6040516103259190612bf6565b60405180910390f35b348015610339575f80fd5b50610342610b68565b005b61035e60048036038101906103599190612c46565b610c5e565b005b34801561036b575f80fd5b50610374610e62565b6040516103819190612c2d565b60405180910390f35b348015610395575f80fd5b506103b060048036038101906103ab9190612dc2565b610e77565b005b3480156103bd575f80fd5b506103d860048036038101906103d39190612afc565b610f18565b6040516103e59190612b66565b60405180910390f35b3480156103f9575f80fd5b50610402610f48565b005b34801561040f575f80fd5b50610418611003565b6040516104259190612aa9565b60405180910390f35b348015610439575f80fd5b50610454600480360381019061044f9190612e09565b61108e565b6040516104619190612bf6565b60405180910390f35b348015610475575f80fd5b50610490600480360381019061048b9190612e09565b6110d4565b005b34801561049d575f80fd5b506104a66111a6565b6040516104b39190612b66565b60405180910390f35b3480156104c7575f80fd5b506104d06111cb565b6040516104dd9190612aa9565b60405180910390f35b3480156104f1575f80fd5b5061050c60048036038101906105079190612e5e565b611208565b005b348015610519575f80fd5b506105226112a6565b60405161052f9190612a06565b60405180910390f35b348015610543575f80fd5b5061055e60048036038101906105599190612ba9565b6112b9565b60405161056b9190612a06565b60405180910390f35b61058e60048036038101906105899190612f3a565b61135f565b005b34801561059b575f80fd5b506105b660048036038101906105b19190612afc565b611566565b6040516105c39190612aa9565b60405180910390f35b3480156105d7575f80fd5b506105f260048036038101906105ed9190612fba565b611639565b6040516105ff9190612bf6565b60405180910390f35b348015610613575f80fd5b5061062e60048036038101906106299190612fba565b6116bb565b60405161063b9190612a06565b60405180910390f35b5f600360149054906101000a900460ff16801561068657506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106b657506301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106e657506336372b0760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606040518060400160405280601081526020017f534a373431205061727479204861747300000000000000000000000000000000815250905090565b5f8073ffffffffffffffffffffffffffffffffffffffff1660065f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610792575f80fd5b60075f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f6008600a6107d99190613154565b821180156108015750611e616008600a6107f39190613154565b6107fd919061319e565b8211155b15610921575f60065f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561087d575061087b81336116bb565b155b156108bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b49061321b565b60405180910390fd5b8360075f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610917818585611749565b60019150506109ae565b8160055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506109a93384846117a9565b600190505b92915050565b5f6008600a6109c39190613154565b611e616109d09190613239565b905090565b6009602052815f5260405f2081815481106109ee575f80fd5b905f5260205f209060089182820401919006600402915091509054906101000a900463ffffffff1681565b5f6008600a610a289190613154565b82118015610a505750611e616008600a610a429190613154565b610a4c919061319e565b8211155b15610b3e578373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ac25750610a938261072a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610ad35750610ad284336116bb565b5b610b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b09906132c4565b60405180910390fd5b610b1d848484611813565b610b3584846008600a610b309190613154565b611966565b60019050610b59565b610b49843384611a13565b610b54848484611b61565b600190505b9392505050565b5f6008905090565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bee9061332c565b60405180910390fd5b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610c5b573d5f803e3d5ffd5b50565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ccb5750610c9c8161072a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610cdc5750610cdb83336116bb565b5b610d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d12906132c4565b60405180910390fd5b610d26838383611813565b610d3e83836008600a610d399190613154565b611966565b5f8273ffffffffffffffffffffffffffffffffffffffff163b14158015610e26575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b8152600401610dc49392919061337d565b6020604051808303815f875af1158015610de0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e0491906133d9565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15610e5d576040517f75b24d4000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60015f9054906101000a900463ffffffff1681565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efd9061332c565b60405180910390fd5b805f9081610f1491906135fe565b5050565b6006602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fce9061332c565b60405180910390fd5b600360149054906101000a900460ff1615600360146101000a81548160ff021916908315150217905550565b5f805461100f90613431565b80601f016020809104026020016040519081016040528092919081815260200182805461103b90613431565b80156110865780601f1061105d57610100808354040283529160200191611086565b820191905f5260205f20905b81548152906001019060200180831161106957829003601f168201915b505050505081565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115a9061332c565b60405180910390fd5b8060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600481526020017f4841545300000000000000000000000000000000000000000000000000000000815250905090565b8060045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506112a23383836120d9565b5050565b600360149054906101000a900460ff1681565b5f3373ffffffffffffffffffffffffffffffffffffffff1660065f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361134957611328338484611813565b61134033846008600a61133b9190613154565b611966565b60019050611359565b611354338484611b61565b600190505b92915050565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113cc575061139d8261072a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806113dd57506113dc84336116bb565b5b61141c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611413906132c4565b60405180910390fd5b611427848484611813565b61143f84846008600a61143a9190613154565b611966565b5f8373ffffffffffffffffffffffffffffffffffffffff163b14158015611529575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016114c7949392919061370f565b6020604051808303815f875af11580156114e3573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061150791906133d9565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611560576040517f75b24d4000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6060611e616008600a6115799190613154565b611583919061319e565b8211156115c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bc906137a3565b60405180910390fd5b5f8080546115d290613431565b9050036115ef5760405180602001604052805f8152509050611634565b5f6116116008600a6116019190613154565b8461160c91906137c1565b612143565b6040516020016116229291906138f8565b60405160208183030381529060405290505b919050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118069190612bf6565b60405180910390a3505050565b60065f8263ffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146118b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ae90613970565b60405180910390fd5b60075f8263ffffffff1681526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690558160065f8363ffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061195083838361229c565b61196183838363ffffffff16612503565b505050565b8060085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546119b291906137c1565b925050819055508060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540192505081905550611a0e838383612563565b505050565b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac5906139d8565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611b5591906137c1565b92505081905550505050565b8060085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015611be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd890613a66565b60405180910390fd5b5f6008600a611bf09190613154565b60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611c389190613ab1565b90505f6008600a611c499190613154565b60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611c919190613ab1565b9050611c9e858585611966565b5f6008600a611cad9190613154565b60085f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611cf59190613ab1565b90505f6008600a611d069190613154565b60085f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611d4e9190613ab1565b90505f60095f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f6002905083861015611e3c575f82805490501115611e3b575f825f81548110611dbd57611dbc613ae1565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff1690508181908060018154018082558091505060019003905f5260205f2090600891828204019190066004029091909190916101000a81548163ffffffff021916908363ffffffff160217905550611e398a5f83611813565b505b5b82851115611ef1575f81805490501115611ee557611ea15f898360018580549050611e6791906137c1565b81548110611e7857611e77613ae1565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff16611813565b80805480611eb257611eb1613b0e565b5b600190038181905f5260205f2090600891828204019190066004026101000a81549063ffffffff02191690559055611ef0565b611eee886125cd565b505b5b5f6008600a611f009190613154565b88611f0b9190613b3b565b905060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1603611f6d57505050505050506120d4565b5f8111156120cc575f83805490509050808210611f8a5780611f8c565b815b90505f5b81811015611fe657611fd98c8c875f81548110611fb057611faf613ae1565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff16611813565b8080600101915050611f90565b508082611ff391906137c1565b915082805490509050808210612009578061200b565b815b90505f5b818110156120b4576120685f8c866001888054905061202e91906137c1565b8154811061203f5761203e613ae1565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff16611813565b8380548061207957612078613b0e565b5b600190038181905f5260205f2090600891828204019190066004026101000a81549063ffffffff02191690559055808060010191505061200f565b506120ca8a82846120c591906137c1565b612770565b505b505050505050505b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121369190612a06565b60405180910390a3505050565b60605f8203612189576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612297565b5f8290505f5b5f82146121b85780806121a190613b6b565b915050600a826121b19190613b3b565b915061218f565b5f8167ffffffffffffffff8111156121d3576121d2612c9e565b5b6040519080825280601f01601f1916602001820160405280156122055781602001600182028036833780820191505090505b5090505b5f85146122905760018261221d91906137c1565b91506030600a8661222e9190613ab1565b6122389190613bbe565b60f81b81838151811061224e5761224d613ae1565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a856122899190613b3b565b9450612209565b8093505050505b919050565b5f600a5f8363ffffffff1663ffffffff1681526020019081526020015f205490505f60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f818054905090505f8260018361231491906137c1565b8154811061232557612324613ae1565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff1690508083858154811061235f5761235e613ae1565b5b905f5260205f2090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550828054806123a1576123a0613b0e565b5b600190038181905f5260205f2090600891828204019190066004026101000a81549063ffffffff021916905590555f6001836123dd91906137c1565b146124055783600a5f8363ffffffff1663ffffffff1681526020019081526020015f20819055505b60095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2085908060018154018082558091505060019003905f5260205f2090600891828204019190066004029091909190916101000a81548163ffffffff021916908363ffffffff160217905550600160095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506124d991906137c1565b600a5f8763ffffffff1663ffffffff1681526020019081526020015f208190555050505050505050565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516125c09190612bf6565b60405180910390a3505050565b5f60015f81819054906101000a900463ffffffff168092919060010191906101000a81548163ffffffff021916908363ffffffff1602179055505060015f9054906101000a900463ffffffff1690508160065f8363ffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050600a5f8363ffffffff1663ffffffff1681526020019081526020015f208190555060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081908060018154018082558091505060019003905f5260205f2090600891828204019190066004029091909190916101000a81548163ffffffff021916908363ffffffff16021790555061276b5f838363ffffffff16612503565b919050565b5f810315612957576001810361278f57612789826125cd565b50612957565b5f60015f9054906101000a900463ffffffff1690505f60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905090505f5b8381101561291e5782806001019350508460065f8563ffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600a5f8563ffffffff1663ffffffff1681526020019081526020015f208190555060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2083908060018154018082558091505060019003905f5260205f2090600891828204019190066004029091909190916101000a81548163ffffffff021916908363ffffffff1602179055506129095f868563ffffffff16612503565b818060010192505080806001019150506127ea565b508260015f8282829054906101000a900463ffffffff160192506101000a81548163ffffffff021916908363ffffffff16021790555050505b5050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6129a08161296c565b81146129aa575f80fd5b50565b5f813590506129bb81612997565b92915050565b5f602082840312156129d6576129d5612964565b5b5f6129e3848285016129ad565b91505092915050565b5f8115159050919050565b612a00816129ec565b82525050565b5f602082019050612a195f8301846129f7565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612a56578082015181840152602081019050612a3b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612a7b82612a1f565b612a858185612a29565b9350612a95818560208601612a39565b612a9e81612a61565b840191505092915050565b5f6020820190508181035f830152612ac18184612a71565b905092915050565b5f819050919050565b612adb81612ac9565b8114612ae5575f80fd5b50565b5f81359050612af681612ad2565b92915050565b5f60208284031215612b1157612b10612964565b5b5f612b1e84828501612ae8565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612b5082612b27565b9050919050565b612b6081612b46565b82525050565b5f602082019050612b795f830184612b57565b92915050565b612b8881612b46565b8114612b92575f80fd5b50565b5f81359050612ba381612b7f565b92915050565b5f8060408385031215612bbf57612bbe612964565b5b5f612bcc85828601612b95565b9250506020612bdd85828601612ae8565b9150509250929050565b612bf081612ac9565b82525050565b5f602082019050612c095f830184612be7565b92915050565b5f63ffffffff82169050919050565b612c2781612c0f565b82525050565b5f602082019050612c405f830184612c1e565b92915050565b5f805f60608486031215612c5d57612c5c612964565b5b5f612c6a86828701612b95565b9350506020612c7b86828701612b95565b9250506040612c8c86828701612ae8565b9150509250925092565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612cd482612a61565b810181811067ffffffffffffffff82111715612cf357612cf2612c9e565b5b80604052505050565b5f612d0561295b565b9050612d118282612ccb565b919050565b5f67ffffffffffffffff821115612d3057612d2f612c9e565b5b612d3982612a61565b9050602081019050919050565b828183375f83830152505050565b5f612d66612d6184612d16565b612cfc565b905082815260208101848484011115612d8257612d81612c9a565b5b612d8d848285612d46565b509392505050565b5f82601f830112612da957612da8612c96565b5b8135612db9848260208601612d54565b91505092915050565b5f60208284031215612dd757612dd6612964565b5b5f82013567ffffffffffffffff811115612df457612df3612968565b5b612e0084828501612d95565b91505092915050565b5f60208284031215612e1e57612e1d612964565b5b5f612e2b84828501612b95565b91505092915050565b612e3d816129ec565b8114612e47575f80fd5b50565b5f81359050612e5881612e34565b92915050565b5f8060408385031215612e7457612e73612964565b5b5f612e8185828601612b95565b9250506020612e9285828601612e4a565b9150509250929050565b5f67ffffffffffffffff821115612eb657612eb5612c9e565b5b612ebf82612a61565b9050602081019050919050565b5f612ede612ed984612e9c565b612cfc565b905082815260208101848484011115612efa57612ef9612c9a565b5b612f05848285612d46565b509392505050565b5f82601f830112612f2157612f20612c96565b5b8135612f31848260208601612ecc565b91505092915050565b5f805f8060808587031215612f5257612f51612964565b5b5f612f5f87828801612b95565b9450506020612f7087828801612b95565b9350506040612f8187828801612ae8565b925050606085013567ffffffffffffffff811115612fa257612fa1612968565b5b612fae87828801612f0d565b91505092959194509250565b5f8060408385031215612fd057612fcf612964565b5b5f612fdd85828601612b95565b9250506020612fee85828601612b95565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111561307a5780860481111561305657613055612ff8565b5b60018516156130655780820291505b808102905061307385613025565b945061303a565b94509492505050565b5f82613092576001905061314d565b8161309f575f905061314d565b81600181146130b557600281146130bf576130ee565b600191505061314d565b60ff8411156130d1576130d0612ff8565b5b8360020a9150848211156130e8576130e7612ff8565b5b5061314d565b5060208310610133831016604e8410600b84101617156131235782820a90508381111561311e5761311d612ff8565b5b61314d565b6131308484846001613031565b9250905081840481111561314757613146612ff8565b5b81810290505b9392505050565b5f61315e82612ac9565b915061316983612ac9565b92506131967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613083565b905092915050565b5f6131a882612ac9565b91506131b383612ac9565b92508282019050808211156131cb576131ca612ff8565b5b92915050565b7f534a3734313a20596f7520617265206e6f7420617070726f76656400000000005f82015250565b5f613205601b83612a29565b9150613210826131d1565b602082019050919050565b5f6020820190508181035f830152613232816131f9565b9050919050565b5f61324382612ac9565b915061324e83612ac9565b925082820261325c81612ac9565b9150828204841483151761327357613272612ff8565b5b5092915050565b7f534a3734313a20596f7520646f6e2774206861766520746865207269676874005f82015250565b5f6132ae601f83612a29565b91506132b98261327a565b602082019050919050565b5f6020820190508181035f8301526132db816132a2565b9050919050565b7f4e6f742074686520646576656c6f7065720000000000000000000000000000005f82015250565b5f613316601183612a29565b9150613321826132e2565b602082019050919050565b5f6020820190508181035f8301526133438161330a565b9050919050565b5f82825260208201905092915050565b50565b5f6133685f8361334a565b91506133738261335a565b5f82019050919050565b5f6080820190506133905f830186612b57565b61339d6020830185612b57565b6133aa6040830184612be7565b81810360608301526133bb8161335d565b9050949350505050565b5f815190506133d381612997565b92915050565b5f602082840312156133ee576133ed612964565b5b5f6133fb848285016133c5565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061344857607f821691505b60208210810361345b5761345a613404565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026134bd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613482565b6134c78683613482565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6135026134fd6134f884612ac9565b6134df565b612ac9565b9050919050565b5f819050919050565b61351b836134e8565b61352f61352782613509565b84845461348e565b825550505050565b5f90565b613543613537565b61354e818484613512565b505050565b5b81811015613571576135665f8261353b565b600181019050613554565b5050565b601f8211156135b65761358781613461565b61359084613473565b8101602085101561359f578190505b6135b36135ab85613473565b830182613553565b50505b505050565b5f82821c905092915050565b5f6135d65f19846008026135bb565b1980831691505092915050565b5f6135ee83836135c7565b9150826002028217905092915050565b61360782612a1f565b67ffffffffffffffff8111156136205761361f612c9e565b5b61362a8254613431565b613635828285613575565b5f60209050601f831160018114613666575f8415613654578287015190505b61365e85826135e3565b8655506136c5565b601f19841661367486613461565b5f5b8281101561369b57848901518255600182019150602085019450602081019050613676565b868310156136b857848901516136b4601f8916826135c7565b8355505b6001600288020188555050505b505050505050565b5f81519050919050565b5f6136e1826136cd565b6136eb818561334a565b93506136fb818560208601612a39565b61370481612a61565b840191505092915050565b5f6080820190506137225f830187612b57565b61372f6020830186612b57565b61373c6040830185612be7565b818103606083015261374e81846136d7565b905095945050505050565b7f534a3734313a20696e76616c69642069640000000000000000000000000000005f82015250565b5f61378d601183612a29565b915061379882613759565b602082019050919050565b5f6020820190508181035f8301526137ba81613781565b9050919050565b5f6137cb82612ac9565b91506137d683612ac9565b92508282039050818111156137ee576137ed612ff8565b5b92915050565b5f81905092915050565b5f815461380a81613431565b61381481866137f4565b9450600182165f811461382e576001811461384357613875565b60ff1983168652811515820286019350613875565b61384c85613461565b5f5b8381101561386d5781548189015260018201915060208101905061384e565b838801955050505b50505092915050565b5f61388882612a1f565b61389281856137f4565b93506138a2818560208601612a39565b80840191505092915050565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000005f82015250565b5f6138e26005836137f4565b91506138ed826138ae565b600582019050919050565b5f61390382856137fe565b915061390f828461387e565b915061391a826138d6565b91508190509392505050565b7f534a3734313a20496e636f7272656374206f776e6572000000000000000000005f82015250565b5f61395a601683612a29565b915061396582613926565b602082019050919050565b5f6020820190508181035f8301526139878161394e565b9050919050565b7f534a3734313a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f6139c2601d83612a29565b91506139cd8261398e565b602082019050919050565b5f6020820190508181035f8301526139ef816139b6565b9050919050565b7f534a3734313a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613a50602683612a29565b9150613a5b826139f6565b604082019050919050565b5f6020820190508181035f830152613a7d81613a44565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613abb82612ac9565b9150613ac683612ac9565b925082613ad657613ad5613a84565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f613b4582612ac9565b9150613b5083612ac9565b925082613b6057613b5f613a84565b5b828204905092915050565b5f613b7582612ac9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ba757613ba6612ff8565b5b600182019050919050565b5f60ff82169050919050565b5f613bc882613bb2565b9150613bd383613bb2565b9250828201905060ff811115613bec57613beb612ff8565b5b9291505056fea26469706673582212202a89daed28b1c4e11c0f779fa86ed6c4c9f8a2a760545c292d9bbc85ea39112364736f6c63430008180033

Deployed Bytecode Sourcemap

4242:16460:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20083:616;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5848:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18715:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7066:997;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6100:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5307:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16274:817;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6018:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19975:100;;;;;;;;;;;;;:::i;:::-;;17114:655;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4803:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6430:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5143:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6964:92;;;;;;;;;;;;;:::i;:::-;;4276:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6189:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6520:65;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4928:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5931:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18903:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4953:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15892:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17792:676;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19291:283;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6299:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19127:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20083:616;20160:4;20454:20;;;;;;;;;;;:49;;;;;20493:10;20478:25;;:11;:25;;;;20454:49;20453:127;;;;20570:10;20555:25;;:11;:25;;;;20453:127;:203;;;;20646:10;20631:25;;:11;:25;;;;20453:203;20177:479;;20083:616;;;:::o;5848:77::-;5893:13;5917:5;;;;;;;;;;;;;;;;;5910:12;;5848:77;:::o;18715:180::-;18783:7;18835:1;18807:30;;:7;:16;18815:7;18807:16;;;;;;;;;;;;;;;;;;;;;:30;;;18803:44;;18839:8;;;18803:44;18865:13;:22;18879:7;18865:22;;;;;;;;;;;;;;;;;;;;;18858:29;;18715:180;;;:::o;7066:997::-;7138:4;4505:1;4659:2;:13;;;;:::i;:::-;7298:6;:12;:31;;;;;4548:4;4505:1;4659:2;:13;;;;:::i;:::-;4726:15;;;;:::i;:::-;7314:6;:15;;7298:31;7295:449;;;7346:13;7362:7;:15;7370:6;7362:15;;;;;;;;;;;;;;;;;;;;;7346:31;;7466:5;7452:19;;:10;:19;;;;:59;;;;;7476:35;7493:5;7500:10;7476:16;:35::i;:::-;7475:36;7452:59;7448:102;;;7513:37;;;;;;;;;;:::i;:::-;;;;;;;;7448:102;7589:7;7565:13;:21;7579:6;7565:21;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;7661:45;7683:5;7690:7;7699:6;7661:21;:45::i;:::-;7728:4;7721:11;;;;;7295:449;7967:6;7933:10;:22;7944:10;7933:22;;;;;;;;;;;;;;;:31;7956:7;7933:31;;;;;;;;;;;;;;;:40;;;;7984:49;8005:10;8017:7;8026:6;7984:20;:49::i;:::-;8051:4;8044:11;;7066:997;;;;;:::o;6100:83::-;6153:4;4505:1;4609:2;:13;;;;:::i;:::-;4548:4;4597:25;;;;:::i;:::-;6161:19;;6100:83;:::o;5307:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16274:817::-;16360:4;4505:1;4659:2;:13;;;;:::i;:::-;16479:6;:12;:31;;;;;4548:4;4505:1;4659:2;:13;;;;:::i;:::-;4726:15;;;;:::i;:::-;16495:6;:15;;16479:31;16476:489;;;16681:4;16667:18;;:10;:18;;;:55;;;;16703:19;16715:6;16703:11;:19::i;:::-;16689:33;;:10;:33;;;16667:55;:93;;;;16726:34;16743:4;16749:10;16726:16;:34::i;:::-;16667:93;16527:304;;;;;;;;;;;;:::i;:::-;;;;;;;;;16848:38;16861:4;16867:2;16878:6;16848:12;:38::i;:::-;16901:26;16913:4;16919:2;4505:1;4659:2;:13;;;;:::i;:::-;16901:11;:26::i;:::-;16949:4;16942:11;;;;16476:489;16977:41;16993:4;16999:10;17011:6;16977:15;:41::i;:::-;17029:30;17042:4;17048:2;17052:6;17029:12;:30::i;:::-;17077:4;17070:11;;16274:817;;;;;;:::o;6018:76::-;6067:4;4505:1;6075:16;;6018:76;:::o;19975:100::-;5501:3;;;;;;;;;;;5487:17;;:10;:17;;;5479:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;20031:3:::1;;;;;;;;;;;20023:21;;:44;20045:21;20023:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;19975:100::o:0;17114:655::-;17258:4;17244:18;;:10;:18;;;:56;;;;17280:20;17292:7;17280:11;:20::i;:::-;17266:34;;:10;:34;;;17244:56;:94;;;;17304:34;17321:4;17327:10;17304:16;:34::i;:::-;17244:94;17218:187;;;;;;;;;;;;:::i;:::-;;;;;;;;;17416:39;17429:4;17435:2;17446:7;17416:12;:39::i;:::-;17467:26;17479:4;17485:2;4505:1;4659:2;:13;;;;:::i;:::-;17467:11;:26::i;:::-;17542:1;17524:2;:14;;;:19;;:171;;;;;17649:46;;;17560:135;;;17581:2;17560:41;;;17602:10;17614:4;17620:7;17560:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:135;;;;;17524:171;17506:256;;;17729:21;;;;;;;;;;;;;;17506:256;17114:655;;;:::o;4803:20::-;;;;;;;;;;;;;:::o;6430:84::-;5501:3;;;;;;;;;;;5487:17;;:10;:17;;;5479:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;6502:10:::1;6492:7;:20;;;;;;:::i;:::-;;6430:84:::0;:::o;5143:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;6964:92::-;5501:3;;;;;;;;;;;5487:17;;:10;:17;;;5479:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;7034:20:::1;;;;;;;;;;;7033:21;7010:20;;:44;;;;;;;;;;;;;;;;;;6964:92::o:0;4276:79::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6189:104::-;6256:4;6271:10;:19;6282:7;6271:19;;;;;;;;;;;;;;;;6264:26;;6189:104;;;:::o;6520:65::-;5501:3;;;;;;;;;;;5487:17;;:10;:17;;;5479:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;6577:6:::1;6571:3;;:12;;;;;;;;;;;;;;;;;;6520:65:::0;:::o;4928:18::-;;;;;;;;;;;;;:::o;5931:81::-;5978:13;6002:7;;;;;;;;;;;;;;;;;5995:14;;5931:81;:::o;18903:216::-;19033:8;18990:18;:30;19009:10;18990:30;;;;;;;;;;;;;;;:40;19021:8;18990:40;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;19052:59;19080:10;19092:8;19102;19052:27;:59::i;:::-;18903:216;;:::o;4953:32::-;;;;;;;;;;;;;:::o;15892:339::-;15960:4;15999:10;15980:29;;:7;:15;15988:6;15980:15;;;;;;;;;;;;;;;;;;;;;:29;;;15977:178;;16026:44;16039:10;16051:2;16062:6;16026:12;:44::i;:::-;16085:32;16097:10;16109:2;4505:1;4659:2;:13;;;;:::i;:::-;16085:11;:32::i;:::-;16139:4;16132:11;;;;15977:178;16165:36;16178:10;16190:2;16194:6;16165:12;:36::i;:::-;16219:4;16212:11;;15892:339;;;;;:::o;17792:676::-;17955:4;17941:18;;:10;:18;;;:56;;;;17977:20;17989:7;17977:11;:20::i;:::-;17963:34;;:10;:34;;;17941:56;:94;;;;18001:34;18018:4;18024:10;18001:16;:34::i;:::-;17941:94;17915:187;;;;;;;;;;;;:::i;:::-;;;;;;;;;18113:39;18126:4;18132:2;18143:7;18113:12;:39::i;:::-;18164:26;18176:4;18182:2;4505:1;4659:2;:13;;;;:::i;:::-;18164:11;:26::i;:::-;18239:1;18221:2;:14;;;:19;;:173;;;;;18348:46;;;18257:137;;;18278:2;18257:41;;;18299:10;18311:4;18317:7;18326:4;18257:74;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:137;;;;;18221:173;18203:258;;;18428:21;;;;;;;;;;;;;;18203:258;17792:676;;;;:::o;19291:283::-;19355:13;4548:4;4505:1;4659:2;:13;;;;:::i;:::-;4726:15;;;;:::i;:::-;19389:7;:16;;19381:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;19467:1;19448:7;19442:21;;;;;:::i;:::-;;;:26;19438:44;;19471:9;;;;;;;;;;;;;;;;19438:44;19523:7;19532:23;4505:1;4659:2;:13;;;;:::i;:::-;19541:7;:13;;;;:::i;:::-;19532:8;:23::i;:::-;19506:59;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19492:74;;19291:283;;;;:::o;6299:125::-;6380:4;6395:10;:17;6406:5;6395:17;;;;;;;;;;;;;;;:26;6413:7;6395:26;;;;;;;;;;;;;;;;6388:33;;6299:125;;;;:::o;19127:156::-;19216:4;19240:18;:25;19259:5;19240:25;;;;;;;;;;;;;;;:35;19266:8;19240:35;;;;;;;;;;;;;;;;;;;;;;;;;19233:42;;19127:156;;;;:::o;1491:126::-;1605:8;1595;1578:36;;1587:6;1578:36;;;;;;;;;;;;1491:126;;;:::o;923:122::-;1025:8;1008:34;;1017:6;1008:34;;;1035:6;1008:34;;;;;;:::i;:::-;;;;;;;;923:122;;;:::o;15230:530::-;15338:7;:16;15346:7;15338:16;;;;;;;;;;;;;;;;;;;;;;;15330:24;;:4;:24;;;15322:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;15447:13;:22;15461:7;15447:22;;;;;;;;;;;;;;15440:29;;;;;;;;;;;15537:2;15518:7;:16;15526:7;15518:16;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;15593:35;15610:4;15616:2;15620:7;15593:16;:35::i;:::-;15679:40;15701:4;15707:2;15711:7;15679:40;;:21;:40::i;:::-;15230:530;;;:::o;14767:361::-;14870:6;14850:10;:16;14861:4;14850:16;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;14977:6;14959:10;:14;14970:2;14959:14;;;;;;;;;;;;;;;;:24;;;;;;;;;;;15050:38;15071:4;15077:2;15081:6;15050:20;:38::i;:::-;14767:361;;;:::o;18476:231::-;18612:6;18582:10;:17;18593:5;18582:17;;;;;;;;;;;;;;;:26;18600:7;18582:26;;;;;;;;;;;;;;;;:36;;18574:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;18693:6;18663:10;:17;18674:5;18663:17;;;;;;;;;;;;;;;:26;18681:7;18663:26;;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;;;;;;;18476:231;;;:::o;8071:3764::-;8198:6;8178:10;:16;8189:4;8178:16;;;;;;;;;;;;;;;;:26;;8170:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;8365:23;4505:1;4659:2;:13;;;;:::i;:::-;8391:10;:16;8402:4;8391:16;;;;;;;;;;;;;;;;:22;;;;:::i;:::-;8365:48;;8424:21;4505:1;4659:2;:13;;;;:::i;:::-;8448:10;:14;8459:2;8448:14;;;;;;;;;;;;;;;;:20;;;;:::i;:::-;8424:44;;8533:29;8545:4;8551:2;8555:6;8533:11;:29::i;:::-;8664:24;4505:1;4659:2;:13;;;;:::i;:::-;8691:10;:16;8702:4;8691:16;;;;;;;;;;;;;;;;:22;;;;:::i;:::-;8664:49;;8724:22;4505:1;4659:2;:13;;;;:::i;:::-;8749:10;:14;8760:2;8749:14;;;;;;;;;;;;;;;;:20;;;;:::i;:::-;8724:45;;8872:31;8906:9;:15;8916:4;8906:15;;;;;;;;;;;;;;;8872:49;;9017:31;9051:6;9017:40;;9198:16;9180:15;:34;9176:473;;;9260:1;9236:14;:21;;;;:25;9233:405;;;9320:14;9337;9352:1;9337:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9320:34;;9419:14;9439:7;9419:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9520:39;9533:4;9547:1;9551:7;9520:12;:39::i;:::-;9263:375;9233:405;9176:473;9795:14;9779:13;:30;9775:367;;;9855:1;9831:14;:21;;;;:25;9828:289;;;9913:71;9934:1;9938:2;9942:14;9981:1;9957:14;:21;;;;:25;;;;:::i;:::-;9942:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9913:12;:71::i;:::-;10003:14;:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9828:289;;;10092:9;10098:2;10092:5;:9::i;:::-;;9828:289;9775:367;10239:19;4505:1;4659:2;:13;;;;:::i;:::-;10261:6;:12;;;;:::i;:::-;10239:34;;10605:3;;;;;;;;;;;10597:11;;:4;:11;;;10594:23;;10610:7;;;;;;;;;10594:23;10651:1;10634:14;:18;10631:1197;;;10671:8;10682:14;:21;;;;10671:32;;10811:3;10794:14;:20;:43;;10834:3;10794:43;;;10817:14;10794:43;10788:49;;11080:6;11075:108;11096:3;11092:1;:7;11075:108;;;11125:41;11138:4;11144:2;11148:14;11163:1;11148:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11125:12;:41::i;:::-;11101:3;;;;;;;11075:108;;;;11215:3;11197:21;;;;;:::i;:::-;;;11239:14;:21;;;;11233:27;;11298:3;11281:14;:20;:43;;11321:3;11281:43;;;11304:14;11281:43;11275:49;;11583:6;11578:184;11599:3;11595:1;:7;11578:184;;;11636:71;11657:1;11661:2;11665:14;11704:1;11680:14;:21;;;;:25;;;;:::i;:::-;11665:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11636:12;:71::i;:::-;11726:14;:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11604:3;;;;;;;11578:184;;;;11778:36;11789:2;11810:3;11793:14;:20;;;;:::i;:::-;11778:10;:36::i;:::-;10654:1174;10631:1197;8149:3686;;;;;;;8071:3764;;;;:::o;1623:142::-;1741:9;1718:44;;1733:6;1718:44;;;1752:9;1718:44;;;;;;:::i;:::-;;;;;;;;1623:142;;;:::o;19582:385::-;19638:13;19677:1;19668:5;:10;19664:29;;19681:10;;;;;;;;;;;;;;;;;;;;;19664:29;19694:12;19709:5;19694:20;;19716:14;19741:41;19756:1;19748:4;:9;19741:41;;19760:8;;;;;:::i;:::-;;;;19778:2;19770:10;;;;;:::i;:::-;;;19741:41;;;19783:19;19815:6;19805:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19783:39;;19833:95;19849:1;19840:5;:10;19833:95;;19863:1;19853:11;;;;;:::i;:::-;;;19910:2;19904;19896:5;:10;;;;:::i;:::-;19890:22;;;;:::i;:::-;19883:30;;19866:6;19873;19866:14;;;;;;;;:::i;:::-;;;;;:47;;;;;;;;;;;19924:2;19915:11;;;;;:::i;:::-;;;19833:95;;;19952:6;19938:21;;;;;19582:385;;;;:::o;13666:1045::-;13755:13;13771:9;:18;13781:7;13771:18;;;;;;;;;;;;;;;;13755:34;;13854:25;13882:9;:15;13892:4;13882:15;;;;;;;;;;;;;;;13854:43;;13957:11;13971:8;:15;;;;13957:29;;14039:18;14060:8;14075:1;14069:3;:7;;;;:::i;:::-;14060:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14039:38;;14181:11;14163:8;14172:5;14163:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;14269:8;:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14401:1;14396;14390:3;:7;;;;:::i;:::-;:12;14387:115;;14444:5;14419:9;:22;14429:11;14419:22;;;;;;;;;;;;;;;:30;;;;14387:115;14519:9;:13;14529:2;14519:13;;;;;;;;;;;;;;;14538:7;14519:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14648:1;14625:9;:13;14635:2;14625:13;;;;;;;;;;;;;;;:20;;;;:24;;;;:::i;:::-;14604:9;:18;14614:7;14604:18;;;;;;;;;;;;;;;:45;;;;13743:968;;;;13666:1045;;;:::o;1371:114::-;1473:8;1468:3;1452:30;;1461:5;1452:30;;;;;;;;;;;;1371:114;;;:::o;805:112::-;901:3;885:29;;894:5;885:29;;;906:7;885:29;;;;;;:::i;:::-;;;;;;;;805:112;;;:::o;12940:622::-;12984:14;13035:6;;:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13122:6;;;;;;;;;;;13112:16;;13196:2;13177:7;:16;13185:7;13177:16;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;13272:9;:13;13282:2;13272:13;;;;;;;;;;;;;;;:20;;;;13251:9;:18;13261:7;13251:18;;;;;;;;;;;;;;;:41;;;;13360:9;:13;13370:2;13360:13;;;;;;;;;;;;;;;13379:7;13360:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13468:46;13498:1;13502:2;13506:7;13468:46;;:21;:46::i;:::-;12940:622;;;:::o;11843:1087::-;11924:1;11914:6;:11;11911:23;11927:7;11911:23;11986:1;11976:6;:11;11973:105;;12036:9;12042:2;12036:5;:9::i;:::-;;12060:7;;11973:105;12088:9;12100:6;;;;;;;;;;;12088:18;;12152:16;12171:9;:13;12181:2;12171:13;;;;;;;;;;;;;;;:20;;;;12152:39;;12246:6;12242:581;12262:6;12258:1;:10;12242:581;;;12315:4;;;;;;;12396:2;12382:7;:11;12390:2;12382:11;;;;;;;;;;;;;;:16;;;;;;;;;;;;;;;;;;12457:8;12441:9;:13;12451:2;12441:13;;;;;;;;;;;;;;;:24;;;;12524:9;:13;12534:2;12524:13;;;;;;;;;;;;;;;12543:2;12524:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12597:41;12627:1;12631:2;12635;12597:41;;:21;:41::i;:::-;12711:10;;;;;;;12773:3;;;;;;;12242:581;;;;12875:6;12858;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11900:1030;;11843:1087;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:118::-;4977:24;4995:5;4977:24;:::i;:::-;4972:3;4965:37;4890:118;;:::o;5014:222::-;5107:4;5145:2;5134:9;5130:18;5122:26;;5158:71;5226:1;5215:9;5211:17;5202:6;5158:71;:::i;:::-;5014:222;;;;:::o;5242:93::-;5278:7;5318:10;5311:5;5307:22;5296:33;;5242:93;;;:::o;5341:115::-;5426:23;5443:5;5426:23;:::i;:::-;5421:3;5414:36;5341:115;;:::o;5462:218::-;5553:4;5591:2;5580:9;5576:18;5568:26;;5604:69;5670:1;5659:9;5655:17;5646:6;5604:69;:::i;:::-;5462:218;;;;:::o;5686:619::-;5763:6;5771;5779;5828:2;5816:9;5807:7;5803:23;5799:32;5796:119;;;5834:79;;:::i;:::-;5796:119;5954:1;5979:53;6024:7;6015:6;6004:9;6000:22;5979:53;:::i;:::-;5969:63;;5925:117;6081:2;6107:53;6152:7;6143:6;6132:9;6128:22;6107:53;:::i;:::-;6097:63;;6052:118;6209:2;6235:53;6280:7;6271:6;6260:9;6256:22;6235:53;:::i;:::-;6225:63;;6180:118;5686:619;;;;;:::o;6311:117::-;6420:1;6417;6410:12;6434:117;6543:1;6540;6533:12;6557:180;6605:77;6602:1;6595:88;6702:4;6699:1;6692:15;6726:4;6723:1;6716:15;6743:281;6826:27;6848:4;6826:27;:::i;:::-;6818:6;6814:40;6956:6;6944:10;6941:22;6920:18;6908:10;6905:34;6902:62;6899:88;;;6967:18;;:::i;:::-;6899:88;7007:10;7003:2;6996:22;6786:238;6743:281;;:::o;7030:129::-;7064:6;7091:20;;:::i;:::-;7081:30;;7120:33;7148:4;7140:6;7120:33;:::i;:::-;7030:129;;;:::o;7165:308::-;7227:4;7317:18;7309:6;7306:30;7303:56;;;7339:18;;:::i;:::-;7303:56;7377:29;7399:6;7377:29;:::i;:::-;7369:37;;7461:4;7455;7451:15;7443:23;;7165:308;;;:::o;7479:146::-;7576:6;7571:3;7566;7553:30;7617:1;7608:6;7603:3;7599:16;7592:27;7479:146;;;:::o;7631:425::-;7709:5;7734:66;7750:49;7792:6;7750:49;:::i;:::-;7734:66;:::i;:::-;7725:75;;7823:6;7816:5;7809:21;7861:4;7854:5;7850:16;7899:3;7890:6;7885:3;7881:16;7878:25;7875:112;;;7906:79;;:::i;:::-;7875:112;7996:54;8043:6;8038:3;8033;7996:54;:::i;:::-;7715:341;7631:425;;;;;:::o;8076:340::-;8132:5;8181:3;8174:4;8166:6;8162:17;8158:27;8148:122;;8189:79;;:::i;:::-;8148:122;8306:6;8293:20;8331:79;8406:3;8398:6;8391:4;8383:6;8379:17;8331:79;:::i;:::-;8322:88;;8138:278;8076:340;;;;:::o;8422:509::-;8491:6;8540:2;8528:9;8519:7;8515:23;8511:32;8508:119;;;8546:79;;:::i;:::-;8508:119;8694:1;8683:9;8679:17;8666:31;8724:18;8716:6;8713:30;8710:117;;;8746:79;;:::i;:::-;8710:117;8851:63;8906:7;8897:6;8886:9;8882:22;8851:63;:::i;:::-;8841:73;;8637:287;8422:509;;;;:::o;8937:329::-;8996:6;9045:2;9033:9;9024:7;9020:23;9016:32;9013:119;;;9051:79;;:::i;:::-;9013:119;9171:1;9196:53;9241:7;9232:6;9221:9;9217:22;9196:53;:::i;:::-;9186:63;;9142:117;8937:329;;;;:::o;9272:116::-;9342:21;9357:5;9342:21;:::i;:::-;9335:5;9332:32;9322:60;;9378:1;9375;9368:12;9322:60;9272:116;:::o;9394:133::-;9437:5;9475:6;9462:20;9453:29;;9491:30;9515:5;9491:30;:::i;:::-;9394:133;;;;:::o;9533:468::-;9598:6;9606;9655:2;9643:9;9634:7;9630:23;9626:32;9623:119;;;9661:79;;:::i;:::-;9623:119;9781:1;9806:53;9851:7;9842:6;9831:9;9827:22;9806:53;:::i;:::-;9796:63;;9752:117;9908:2;9934:50;9976:7;9967:6;9956:9;9952:22;9934:50;:::i;:::-;9924:60;;9879:115;9533:468;;;;;:::o;10007:307::-;10068:4;10158:18;10150:6;10147:30;10144:56;;;10180:18;;:::i;:::-;10144:56;10218:29;10240:6;10218:29;:::i;:::-;10210:37;;10302:4;10296;10292:15;10284:23;;10007:307;;;:::o;10320:423::-;10397:5;10422:65;10438:48;10479:6;10438:48;:::i;:::-;10422:65;:::i;:::-;10413:74;;10510:6;10503:5;10496:21;10548:4;10541:5;10537:16;10586:3;10577:6;10572:3;10568:16;10565:25;10562:112;;;10593:79;;:::i;:::-;10562:112;10683:54;10730:6;10725:3;10720;10683:54;:::i;:::-;10403:340;10320:423;;;;;:::o;10762:338::-;10817:5;10866:3;10859:4;10851:6;10847:17;10843:27;10833:122;;10874:79;;:::i;:::-;10833:122;10991:6;10978:20;11016:78;11090:3;11082:6;11075:4;11067:6;11063:17;11016:78;:::i;:::-;11007:87;;10823:277;10762:338;;;;:::o;11106:943::-;11201:6;11209;11217;11225;11274:3;11262:9;11253:7;11249:23;11245:33;11242:120;;;11281:79;;:::i;:::-;11242:120;11401:1;11426:53;11471:7;11462:6;11451:9;11447:22;11426:53;:::i;:::-;11416:63;;11372:117;11528:2;11554:53;11599:7;11590:6;11579:9;11575:22;11554:53;:::i;:::-;11544:63;;11499:118;11656:2;11682:53;11727:7;11718:6;11707:9;11703:22;11682:53;:::i;:::-;11672:63;;11627:118;11812:2;11801:9;11797:18;11784:32;11843:18;11835:6;11832:30;11829:117;;;11865:79;;:::i;:::-;11829:117;11970:62;12024:7;12015:6;12004:9;12000:22;11970:62;:::i;:::-;11960:72;;11755:287;11106:943;;;;;;;:::o;12055:474::-;12123:6;12131;12180:2;12168:9;12159:7;12155:23;12151:32;12148:119;;;12186:79;;:::i;:::-;12148:119;12306:1;12331:53;12376:7;12367:6;12356:9;12352:22;12331:53;:::i;:::-;12321:63;;12277:117;12433:2;12459:53;12504:7;12495:6;12484:9;12480:22;12459:53;:::i;:::-;12449:63;;12404:118;12055:474;;;;;:::o;12535:180::-;12583:77;12580:1;12573:88;12680:4;12677:1;12670:15;12704:4;12701:1;12694:15;12721:102;12763:8;12810:5;12807:1;12803:13;12782:34;;12721:102;;;:::o;12829:848::-;12890:5;12897:4;12921:6;12912:15;;12945:5;12936:14;;12959:712;12980:1;12970:8;12967:15;12959:712;;;13075:4;13070:3;13066:14;13060:4;13057:24;13054:50;;;13084:18;;:::i;:::-;13054:50;13134:1;13124:8;13120:16;13117:451;;;13549:4;13542:5;13538:16;13529:25;;13117:451;13599:4;13593;13589:15;13581:23;;13629:32;13652:8;13629:32;:::i;:::-;13617:44;;12959:712;;;12829:848;;;;;;;:::o;13683:1073::-;13737:5;13928:8;13918:40;;13949:1;13940:10;;13951:5;;13918:40;13977:4;13967:36;;13994:1;13985:10;;13996:5;;13967:36;14063:4;14111:1;14106:27;;;;14147:1;14142:191;;;;14056:277;;14106:27;14124:1;14115:10;;14126:5;;;14142:191;14187:3;14177:8;14174:17;14171:43;;;14194:18;;:::i;:::-;14171:43;14243:8;14240:1;14236:16;14227:25;;14278:3;14271:5;14268:14;14265:40;;;14285:18;;:::i;:::-;14265:40;14318:5;;;14056:277;;14442:2;14432:8;14429:16;14423:3;14417:4;14414:13;14410:36;14392:2;14382:8;14379:16;14374:2;14368:4;14365:12;14361:35;14345:111;14342:246;;;14498:8;14492:4;14488:19;14479:28;;14533:3;14526:5;14523:14;14520:40;;;14540:18;;:::i;:::-;14520:40;14573:5;;14342:246;14613:42;14651:3;14641:8;14635:4;14632:1;14613:42;:::i;:::-;14598:57;;;;14687:4;14682:3;14678:14;14671:5;14668:25;14665:51;;;14696:18;;:::i;:::-;14665:51;14745:4;14738:5;14734:16;14725:25;;13683:1073;;;;;;:::o;14762:285::-;14822:5;14846:23;14864:4;14846:23;:::i;:::-;14838:31;;14890:27;14908:8;14890:27;:::i;:::-;14878:39;;14936:104;14973:66;14963:8;14957:4;14936:104;:::i;:::-;14927:113;;14762:285;;;;:::o;15053:191::-;15093:3;15112:20;15130:1;15112:20;:::i;:::-;15107:25;;15146:20;15164:1;15146:20;:::i;:::-;15141:25;;15189:1;15186;15182:9;15175:16;;15210:3;15207:1;15204:10;15201:36;;;15217:18;;:::i;:::-;15201:36;15053:191;;;;:::o;15250:177::-;15390:29;15386:1;15378:6;15374:14;15367:53;15250:177;:::o;15433:366::-;15575:3;15596:67;15660:2;15655:3;15596:67;:::i;:::-;15589:74;;15672:93;15761:3;15672:93;:::i;:::-;15790:2;15785:3;15781:12;15774:19;;15433:366;;;:::o;15805:419::-;15971:4;16009:2;15998:9;15994:18;15986:26;;16058:9;16052:4;16048:20;16044:1;16033:9;16029:17;16022:47;16086:131;16212:4;16086:131;:::i;:::-;16078:139;;15805:419;;;:::o;16230:410::-;16270:7;16293:20;16311:1;16293:20;:::i;:::-;16288:25;;16327:20;16345:1;16327:20;:::i;:::-;16322:25;;16382:1;16379;16375:9;16404:30;16422:11;16404:30;:::i;:::-;16393:41;;16583:1;16574:7;16570:15;16567:1;16564:22;16544:1;16537:9;16517:83;16494:139;;16613:18;;:::i;:::-;16494:139;16278:362;16230:410;;;;:::o;16646:181::-;16786:33;16782:1;16774:6;16770:14;16763:57;16646:181;:::o;16833:366::-;16975:3;16996:67;17060:2;17055:3;16996:67;:::i;:::-;16989:74;;17072:93;17161:3;17072:93;:::i;:::-;17190:2;17185:3;17181:12;17174:19;;16833:366;;;:::o;17205:419::-;17371:4;17409:2;17398:9;17394:18;17386:26;;17458:9;17452:4;17448:20;17444:1;17433:9;17429:17;17422:47;17486:131;17612:4;17486:131;:::i;:::-;17478:139;;17205:419;;;:::o;17630:167::-;17770:19;17766:1;17758:6;17754:14;17747:43;17630:167;:::o;17803:366::-;17945:3;17966:67;18030:2;18025:3;17966:67;:::i;:::-;17959:74;;18042:93;18131:3;18042:93;:::i;:::-;18160:2;18155:3;18151:12;18144:19;;17803:366;;;:::o;18175:419::-;18341:4;18379:2;18368:9;18364:18;18356:26;;18428:9;18422:4;18418:20;18414:1;18403:9;18399:17;18392:47;18456:131;18582:4;18456:131;:::i;:::-;18448:139;;18175:419;;;:::o;18600:168::-;18683:11;18717:6;18712:3;18705:19;18757:4;18752:3;18748:14;18733:29;;18600:168;;;;:::o;18774:114::-;;:::o;18894:362::-;19035:3;19056:65;19119:1;19114:3;19056:65;:::i;:::-;19049:72;;19130:93;19219:3;19130:93;:::i;:::-;19248:1;19243:3;19239:11;19232:18;;18894:362;;;:::o;19262:748::-;19511:4;19549:3;19538:9;19534:19;19526:27;;19563:71;19631:1;19620:9;19616:17;19607:6;19563:71;:::i;:::-;19644:72;19712:2;19701:9;19697:18;19688:6;19644:72;:::i;:::-;19726;19794:2;19783:9;19779:18;19770:6;19726:72;:::i;:::-;19845:9;19839:4;19835:20;19830:2;19819:9;19815:18;19808:48;19873:130;19998:4;19873:130;:::i;:::-;19865:138;;19262:748;;;;;;:::o;20016:141::-;20072:5;20103:6;20097:13;20088:22;;20119:32;20145:5;20119:32;:::i;:::-;20016:141;;;;:::o;20163:349::-;20232:6;20281:2;20269:9;20260:7;20256:23;20252:32;20249:119;;;20287:79;;:::i;:::-;20249:119;20407:1;20432:63;20487:7;20478:6;20467:9;20463:22;20432:63;:::i;:::-;20422:73;;20378:127;20163:349;;;;:::o;20518:180::-;20566:77;20563:1;20556:88;20663:4;20660:1;20653:15;20687:4;20684:1;20677:15;20704:320;20748:6;20785:1;20779:4;20775:12;20765:22;;20832:1;20826:4;20822:12;20853:18;20843:81;;20909:4;20901:6;20897:17;20887:27;;20843:81;20971:2;20963:6;20960:14;20940:18;20937:38;20934:84;;20990:18;;:::i;:::-;20934:84;20755:269;20704:320;;;:::o;21030:141::-;21079:4;21102:3;21094:11;;21125:3;21122:1;21115:14;21159:4;21156:1;21146:18;21138:26;;21030:141;;;:::o;21177:93::-;21214:6;21261:2;21256;21249:5;21245:14;21241:23;21231:33;;21177:93;;;:::o;21276:107::-;21320:8;21370:5;21364:4;21360:16;21339:37;;21276:107;;;;:::o;21389:393::-;21458:6;21508:1;21496:10;21492:18;21531:97;21561:66;21550:9;21531:97;:::i;:::-;21649:39;21679:8;21668:9;21649:39;:::i;:::-;21637:51;;21721:4;21717:9;21710:5;21706:21;21697:30;;21770:4;21760:8;21756:19;21749:5;21746:30;21736:40;;21465:317;;21389:393;;;;;:::o;21788:60::-;21816:3;21837:5;21830:12;;21788:60;;;:::o;21854:142::-;21904:9;21937:53;21955:34;21964:24;21982:5;21964:24;:::i;:::-;21955:34;:::i;:::-;21937:53;:::i;:::-;21924:66;;21854:142;;;:::o;22002:75::-;22045:3;22066:5;22059:12;;22002:75;;;:::o;22083:269::-;22193:39;22224:7;22193:39;:::i;:::-;22254:91;22303:41;22327:16;22303:41;:::i;:::-;22295:6;22288:4;22282:11;22254:91;:::i;:::-;22248:4;22241:105;22159:193;22083:269;;;:::o;22358:73::-;22403:3;22358:73;:::o;22437:189::-;22514:32;;:::i;:::-;22555:65;22613:6;22605;22599:4;22555:65;:::i;:::-;22490:136;22437:189;;:::o;22632:186::-;22692:120;22709:3;22702:5;22699:14;22692:120;;;22763:39;22800:1;22793:5;22763:39;:::i;:::-;22736:1;22729:5;22725:13;22716:22;;22692:120;;;22632:186;;:::o;22824:543::-;22925:2;22920:3;22917:11;22914:446;;;22959:38;22991:5;22959:38;:::i;:::-;23043:29;23061:10;23043:29;:::i;:::-;23033:8;23029:44;23226:2;23214:10;23211:18;23208:49;;;23247:8;23232:23;;23208:49;23270:80;23326:22;23344:3;23326:22;:::i;:::-;23316:8;23312:37;23299:11;23270:80;:::i;:::-;22929:431;;22914:446;22824:543;;;:::o;23373:117::-;23427:8;23477:5;23471:4;23467:16;23446:37;;23373:117;;;;:::o;23496:169::-;23540:6;23573:51;23621:1;23617:6;23609:5;23606:1;23602:13;23573:51;:::i;:::-;23569:56;23654:4;23648;23644:15;23634:25;;23547:118;23496:169;;;;:::o;23670:295::-;23746:4;23892:29;23917:3;23911:4;23892:29;:::i;:::-;23884:37;;23954:3;23951:1;23947:11;23941:4;23938:21;23930:29;;23670:295;;;;:::o;23970:1395::-;24087:37;24120:3;24087:37;:::i;:::-;24189:18;24181:6;24178:30;24175:56;;;24211:18;;:::i;:::-;24175:56;24255:38;24287:4;24281:11;24255:38;:::i;:::-;24340:67;24400:6;24392;24386:4;24340:67;:::i;:::-;24434:1;24458:4;24445:17;;24490:2;24482:6;24479:14;24507:1;24502:618;;;;25164:1;25181:6;25178:77;;;25230:9;25225:3;25221:19;25215:26;25206:35;;25178:77;25281:67;25341:6;25334:5;25281:67;:::i;:::-;25275:4;25268:81;25137:222;24472:887;;24502:618;24554:4;24550:9;24542:6;24538:22;24588:37;24620:4;24588:37;:::i;:::-;24647:1;24661:208;24675:7;24672:1;24669:14;24661:208;;;24754:9;24749:3;24745:19;24739:26;24731:6;24724:42;24805:1;24797:6;24793:14;24783:24;;24852:2;24841:9;24837:18;24824:31;;24698:4;24695:1;24691:12;24686:17;;24661:208;;;24897:6;24888:7;24885:19;24882:179;;;24955:9;24950:3;24946:19;24940:26;24998:48;25040:4;25032:6;25028:17;25017:9;24998:48;:::i;:::-;24990:6;24983:64;24905:156;24882:179;25107:1;25103;25095:6;25091:14;25087:22;25081:4;25074:36;24509:611;;;24472:887;;24062:1303;;;23970:1395;;:::o;25371:98::-;25422:6;25456:5;25450:12;25440:22;;25371:98;;;:::o;25475:373::-;25561:3;25589:38;25621:5;25589:38;:::i;:::-;25643:70;25706:6;25701:3;25643:70;:::i;:::-;25636:77;;25722:65;25780:6;25775:3;25768:4;25761:5;25757:16;25722:65;:::i;:::-;25812:29;25834:6;25812:29;:::i;:::-;25807:3;25803:39;25796:46;;25565:283;25475:373;;;;:::o;25854:640::-;26049:4;26087:3;26076:9;26072:19;26064:27;;26101:71;26169:1;26158:9;26154:17;26145:6;26101:71;:::i;:::-;26182:72;26250:2;26239:9;26235:18;26226:6;26182:72;:::i;:::-;26264;26332:2;26321:9;26317:18;26308:6;26264:72;:::i;:::-;26383:9;26377:4;26373:20;26368:2;26357:9;26353:18;26346:48;26411:76;26482:4;26473:6;26411:76;:::i;:::-;26403:84;;25854:640;;;;;;;:::o;26500:167::-;26640:19;26636:1;26628:6;26624:14;26617:43;26500:167;:::o;26673:366::-;26815:3;26836:67;26900:2;26895:3;26836:67;:::i;:::-;26829:74;;26912:93;27001:3;26912:93;:::i;:::-;27030:2;27025:3;27021:12;27014:19;;26673:366;;;:::o;27045:419::-;27211:4;27249:2;27238:9;27234:18;27226:26;;27298:9;27292:4;27288:20;27284:1;27273:9;27269:17;27262:47;27326:131;27452:4;27326:131;:::i;:::-;27318:139;;27045:419;;;:::o;27470:194::-;27510:4;27530:20;27548:1;27530:20;:::i;:::-;27525:25;;27564:20;27582:1;27564:20;:::i;:::-;27559:25;;27608:1;27605;27601:9;27593:17;;27632:1;27626:4;27623:11;27620:37;;;27637:18;;:::i;:::-;27620:37;27470:194;;;;:::o;27670:148::-;27772:11;27809:3;27794:18;;27670:148;;;;:::o;27848:874::-;27951:3;27988:5;27982:12;28017:36;28043:9;28017:36;:::i;:::-;28069:89;28151:6;28146:3;28069:89;:::i;:::-;28062:96;;28189:1;28178:9;28174:17;28205:1;28200:166;;;;28380:1;28375:341;;;;28167:549;;28200:166;28284:4;28280:9;28269;28265:25;28260:3;28253:38;28346:6;28339:14;28332:22;28324:6;28320:35;28315:3;28311:45;28304:52;;28200:166;;28375:341;28442:38;28474:5;28442:38;:::i;:::-;28502:1;28516:154;28530:6;28527:1;28524:13;28516:154;;;28604:7;28598:14;28594:1;28589:3;28585:11;28578:35;28654:1;28645:7;28641:15;28630:26;;28552:4;28549:1;28545:12;28540:17;;28516:154;;;28699:6;28694:3;28690:16;28683:23;;28382:334;;28167:549;;27955:767;;27848:874;;;;:::o;28728:390::-;28834:3;28862:39;28895:5;28862:39;:::i;:::-;28917:89;28999:6;28994:3;28917:89;:::i;:::-;28910:96;;29015:65;29073:6;29068:3;29061:4;29054:5;29050:16;29015:65;:::i;:::-;29105:6;29100:3;29096:16;29089:23;;28838:280;28728:390;;;;:::o;29124:155::-;29264:7;29260:1;29252:6;29248:14;29241:31;29124:155;:::o;29285:400::-;29445:3;29466:84;29548:1;29543:3;29466:84;:::i;:::-;29459:91;;29559:93;29648:3;29559:93;:::i;:::-;29677:1;29672:3;29668:11;29661:18;;29285:400;;;:::o;29691:695::-;29969:3;29991:92;30079:3;30070:6;29991:92;:::i;:::-;29984:99;;30100:95;30191:3;30182:6;30100:95;:::i;:::-;30093:102;;30212:148;30356:3;30212:148;:::i;:::-;30205:155;;30377:3;30370:10;;29691:695;;;;;:::o;30392:172::-;30532:24;30528:1;30520:6;30516:14;30509:48;30392:172;:::o;30570:366::-;30712:3;30733:67;30797:2;30792:3;30733:67;:::i;:::-;30726:74;;30809:93;30898:3;30809:93;:::i;:::-;30927:2;30922:3;30918:12;30911:19;;30570:366;;;:::o;30942:419::-;31108:4;31146:2;31135:9;31131:18;31123:26;;31195:9;31189:4;31185:20;31181:1;31170:9;31166:17;31159:47;31223:131;31349:4;31223:131;:::i;:::-;31215:139;;30942:419;;;:::o;31367:179::-;31507:31;31503:1;31495:6;31491:14;31484:55;31367:179;:::o;31552:366::-;31694:3;31715:67;31779:2;31774:3;31715:67;:::i;:::-;31708:74;;31791:93;31880:3;31791:93;:::i;:::-;31909:2;31904:3;31900:12;31893:19;;31552:366;;;:::o;31924:419::-;32090:4;32128:2;32117:9;32113:18;32105:26;;32177:9;32171:4;32167:20;32163:1;32152:9;32148:17;32141:47;32205:131;32331:4;32205:131;:::i;:::-;32197:139;;31924:419;;;:::o;32349:225::-;32489:34;32485:1;32477:6;32473:14;32466:58;32558:8;32553:2;32545:6;32541:15;32534:33;32349:225;:::o;32580:366::-;32722:3;32743:67;32807:2;32802:3;32743:67;:::i;:::-;32736:74;;32819:93;32908:3;32819:93;:::i;:::-;32937:2;32932:3;32928:12;32921:19;;32580:366;;;:::o;32952:419::-;33118:4;33156:2;33145:9;33141:18;33133:26;;33205:9;33199:4;33195:20;33191:1;33180:9;33176:17;33169:47;33233:131;33359:4;33233:131;:::i;:::-;33225:139;;32952:419;;;:::o;33377:180::-;33425:77;33422:1;33415:88;33522:4;33519:1;33512:15;33546:4;33543:1;33536:15;33563:176;33595:1;33612:20;33630:1;33612:20;:::i;:::-;33607:25;;33646:20;33664:1;33646:20;:::i;:::-;33641:25;;33685:1;33675:35;;33690:18;;:::i;:::-;33675:35;33731:1;33728;33724:9;33719:14;;33563:176;;;;:::o;33745:180::-;33793:77;33790:1;33783:88;33890:4;33887:1;33880:15;33914:4;33911:1;33904:15;33931:180;33979:77;33976:1;33969:88;34076:4;34073:1;34066:15;34100:4;34097:1;34090:15;34117:185;34157:1;34174:20;34192:1;34174:20;:::i;:::-;34169:25;;34208:20;34226:1;34208:20;:::i;:::-;34203:25;;34247:1;34237:35;;34252:18;;:::i;:::-;34237:35;34294:1;34291;34287:9;34282:14;;34117:185;;;;:::o;34308:233::-;34347:3;34370:24;34388:5;34370:24;:::i;:::-;34361:33;;34416:66;34409:5;34406:77;34403:103;;34486:18;;:::i;:::-;34403:103;34533:1;34526:5;34522:13;34515:20;;34308:233;;;:::o;34547:86::-;34582:7;34622:4;34615:5;34611:16;34600:27;;34547:86;;;:::o;34639:188::-;34677:3;34696:18;34712:1;34696:18;:::i;:::-;34691:23;;34728:18;34744:1;34728:18;:::i;:::-;34723:23;;34769:1;34766;34762:9;34755:16;;34792:4;34787:3;34784:13;34781:39;;;34800:18;;:::i;:::-;34781:39;34639:188;;;;:::o

Swarm Source

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