ETH Price: $3,380.23 (-0.80%)
Gas: 4 Gwei

Token

Street Gang (SG)
 

Overview

Max Total Supply

2,000 SG

Holders

1,945

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 SG
0x970bccc4979d3652d8834080973b47af28fef1b8
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:
StreetGang

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-27
*/

/**
 
██████╗░░█████╗░██████╗░███████╗  ░██████╗██╗░░██╗██╗████████╗
██╔══██╗██╔══██╗██╔══██╗██╔════╝  ██╔════╝██║░░██║██║╚══██╔══╝
██║░░██║██║░░██║██████╔╝█████╗░░  ╚█████╗░███████║██║░░░██║░░░
██║░░██║██║░░██║██╔═══╝░██╔══╝░░  ░╚═══██╗██╔══██║██║░░░██║░░░
██████╔╝╚█████╔╝██║░░░░░███████╗  ██████╔╝██║░░██║██║░░░██║░░░
╚═════╝░░╚════╝░╚═╝░░░░░╚══════╝  ╚═════╝░╚═╝░░╚═╝╚═╝░░░╚═╝░░░
 
 #GANGFOLLOWGANG
 #STREETGANG

*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library Address {

    function isContract(address account) internal view returns (bool) {

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address : insufficient balance");

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

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

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

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

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

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

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

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

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

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

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

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

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

pragma solidity ^0.8.0;

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

    function toString(uint256 value) internal pure returns (string memory) {

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

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

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


pragma solidity ^0.8.0;

library Counters {
    struct Counter {

        uint256 _value; // default: 0
    }

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

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

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

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

pragma solidity ^0.8.0;

interface IERC165 {

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


pragma solidity ^0.8.0;

interface IERC721 is IERC165 {

    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    function balanceOf(address owner) external view returns (uint256 balance);

    function ownerOf(uint256 tokenId) external view returns (address owner);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function approve(address to, uint256 tokenId) external;

    function getApproved(uint256 tokenId) external view returns (address operator);

    function setApprovalForAll(address operator, bool _approved) external;

    function isApprovedForAll(address owner, address operator) external view returns (bool);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}


pragma solidity ^0.8.0;

interface IERC721Receiver {

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


pragma solidity ^0.8.0;

interface IERC721Metadata is IERC721 {

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function tokenURI(uint256 tokenId) external view returns (string memory);
}


pragma solidity ^0.8.0;

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

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


pragma solidity ^0.8.0;

abstract contract ERC165 is IERC165 {

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


pragma solidity ^0.8.0;

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

    string private _name;

    string private _symbol;

    mapping(uint256 => address) private _owners;

    mapping(address => uint256) private _balances;

    mapping(uint256 => address) private _tokenApprovals;

    mapping(address => mapping(address => bool)) private _operatorApprovals;

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

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

    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721 :Balance query for the zero address");
        return _balances[owner];
    }

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

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

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

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata : URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

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

    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721 : approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721 : approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721 : approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }


    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721 : approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721 : transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

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

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

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

    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721 : operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

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

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

    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721 : mint to the zero address");
        require(!_exists(tokenId), "ERC721 : token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

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

    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721 : Transfer of token that is not own");
        require(to != address(0), "ERC721 : Transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

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

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

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

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

pragma solidity ^0.8.0;

interface IERC721Enumerable is IERC721 {

    function totalSupply() external view returns (uint256);

    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    function tokenByIndex(uint256 index) external view returns (uint256);
}


pragma solidity ^0.8.0;

abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {

    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    mapping(uint256 => uint256) private _ownedTokensIndex;

    uint256[] private _allTokens;

    mapping(uint256 => uint256) private _allTokensIndex;

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

    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable : owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable : global index out of bounds");
        return _allTokens[index];
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

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

    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
    }

    struct AddressData {
        uint128 balance;
        uint128 numberMinted;
    }

    uint256 private currentIndex = 0;

    uint256 internal immutable maxBatchSize;

    string private _name;

    string private _symbol;

    mapping(uint256 => TokenOwnership) private _ownerships;

    mapping(address => AddressData) private _addressData;

    mapping(uint256 => address) private _tokenApprovals;

    mapping(address => mapping(address => bool)) private _operatorApprovals;

    constructor(
        string memory name_,
        string memory symbol_,
        uint256 maxBatchSize_
    ) {
        require(maxBatchSize_ > 0, "ERC721A : Max batch size must be nonzero");
        _name = name_;
        _symbol = symbol_;
        maxBatchSize = maxBatchSize_;
    }

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

    function tokenByIndex(uint256 index) public view override returns (uint256) {
        require(index < totalSupply(), "ERC721A : Global index out of bounds");
        return index;
    }

    function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) {
        require(index < balanceOf(owner), "ERC721A : Owner index out of bounds");
        uint256 numMintedSoFar = totalSupply();
        uint256 tokenIdsIdx = 0;
        address currOwnershipAddr = address(0);
        for (uint256 i = 0; i < numMintedSoFar; i++) {
            TokenOwnership memory ownership = _ownerships[i];
            if (ownership.addr != address(0)) {
                currOwnershipAddr = ownership.addr;
            }
            if (currOwnershipAddr == owner) {
                if (tokenIdsIdx == index) {
                    return i;
                }
                tokenIdsIdx++;
            }
        }
        revert("ERC721A : Unable to get token of owner by index");
    }

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

    function balanceOf(address owner) public view override returns (uint256) {
        require(owner != address(0), "ERC721A : Balance query for the zero address");
        return uint256(_addressData[owner].balance);
    }

    function _numberMinted(address owner) internal view returns (uint256) {
        require(owner != address(0), "ERC721A : Number minted query for the zero address");
        return uint256(_addressData[owner].numberMinted);
    }

    function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        require(_exists(tokenId), "ERC721A : Owner query for nonexistent token");

        uint256 lowestTokenToCheck;
        if (tokenId >= maxBatchSize) {
            lowestTokenToCheck = tokenId - maxBatchSize + 1;
        }

        for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) {
            TokenOwnership memory ownership = _ownerships[curr];
            if (ownership.addr != address(0)) {
                return ownership;
            }
        }

        revert("ERC721A : Unable to determine the owner of token");
    }

    function ownerOf(uint256 tokenId) public view override returns (address) {
        return ownershipOf(tokenId).addr;
    }

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

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

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata : URI Query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

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

    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        require(to != owner, "ERC721A : Approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721A : Approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        require(_exists(tokenId), "ERC721A : Approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public override {
        require(operator != _msgSender(), "ERC721A : Approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

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

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public override {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            "ERC721A : Transfer to non ERC721Receiver implementer"
        );
    }

    function _exists(uint256 tokenId) internal view returns (bool) {
        return tokenId < currentIndex;
    }

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

    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        uint256 startTokenId = currentIndex;
        require(to != address(0), "ERC721A : Mint to the zero address");
        // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering.
        require(!_exists(startTokenId), "ERC721A : Token already minted");
        require(quantity <= maxBatchSize, "ERC721A : Quantity to mint too high");

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        AddressData memory addressData = _addressData[to];
        _addressData[to] = AddressData(
            addressData.balance + uint128(quantity),
            addressData.numberMinted + uint128(quantity)
        );
        _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp));

        uint256 updatedIndex = startTokenId;

        for (uint256 i = 0; i < quantity; i++) {
            emit Transfer(address(0), to, updatedIndex);
            require(
                _checkOnERC721Received(address(0), to, updatedIndex, _data),
                "ERC721A : Transfer to non ERC721Receiver implementer"
            );
            updatedIndex++;
        }

        currentIndex = updatedIndex;
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

        bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
            getApproved(tokenId) == _msgSender() ||
            isApprovedForAll(prevOwnership.addr, _msgSender()));

        require(isApprovedOrOwner, "ERC721A : Transfer caller is not owner nor approved");

        require(prevOwnership.addr == from, "ERC721A : Transfer from incorrect owner");
        require(to != address(0), "ERC721A : Transfer to the zero address");

        _beforeTokenTransfers(from, to, tokenId, 1);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId, prevOwnership.addr);

        _addressData[from].balance -= 1;
        _addressData[to].balance += 1;
        _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp));

        // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
        // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
        uint256 nextTokenId = tokenId + 1;
        if (_ownerships[nextTokenId].addr == address(0)) {
            if (_exists(nextTokenId)) {
                _ownerships[nextTokenId] = TokenOwnership(prevOwnership.addr, prevOwnership.startTimestamp);
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

    function _approve(
        address to,
        uint256 tokenId,
        address owner
    ) private {
        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    uint256 public nextOwnerToExplicitlySet = 0;

    function _setOwnersExplicit(uint256 quantity) internal {
        uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
        require(quantity > 0, "Quantity must be nonzero ");
        uint256 endIndex = oldNextOwnerToSet + quantity - 1;
        if (endIndex > currentIndex - 1) {
            endIndex = currentIndex - 1;
        }
        // We know if the last one in the group exists, all in the group exist, due to serial ordering.
        require(_exists(endIndex), "Not enough minted yet for this cleanup ");
        for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
            if (_ownerships[i].addr == address(0)) {
                TokenOwnership memory ownership = ownershipOf(i);
                _ownerships[i] = TokenOwnership(ownership.addr, ownership.startTimestamp);
            }
        }
        nextOwnerToExplicitlySet = endIndex + 1;
    }

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

    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

pragma solidity ^0.8.9;

contract StreetGang is ERC721A
{
    using Strings for uint256;

    string public baseURI;
    uint256 public cost;
    uint256 public maxSupply;
    uint256 public maxMintAmount = 1;
    uint256 public maxMintPerTransaction;
    uint256 private warAwardsCount;
    address public owner;
    bool public preSaleLive;
    bool public mintLive;

    mapping(address => bool) private whiteList;
    mapping(address => uint256) private mintCount;
    mapping(uint256 => string) private warAwards;

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

    modifier preSaleIsLive() {
        require(preSaleLive, "preSale not Live");
        _;
    }

    modifier mintIsLive() {
        require(mintLive, "mint not Live");
        _;
    }

    constructor(string memory defaultBaseURI) ERC721A("Street Gang", "SG", maxMintAmount) {
        owner = msg.sender;
        baseURI = defaultBaseURI;
        maxSupply = 2000;
        maxMintPerTransaction = 1;
        cost = 0 ether;
        warAwardsCount = 0;
    }

    function isWhiteListed(address _address) public view returns (bool){
        return whiteList[_address];
    }

    function mintedByAddressCount(address _address) public view returns (uint256){
        return mintCount[_address];
    }

    function mint(uint256 _mintAmount) external payable mintIsLive {
        address _to = msg.sender;
        uint256 minted = mintCount[_to];
        require(minted + _mintAmount <= maxMintAmount, "mint over max ");
        require(_mintAmount <= maxMintPerTransaction, "amount must < max ");
        require(totalSupply() + _mintAmount <= maxSupply, "mint over supply ");
        require(msg.value >= cost * _mintAmount, "insufficient funds ");

        mintCount[_to] = minted + _mintAmount;
        _safeMint(msg.sender, _mintAmount);
    }

    function preSaleMint(uint256 _mintAmount) external payable preSaleIsLive {
        address _to = msg.sender;
        uint256 minted = mintCount[_to];
        require(whiteList[_to], "Not whitelisted ");
        require(minted + _mintAmount <= maxMintAmount, "Mint over max ");
        require(totalSupply() + _mintAmount <= maxSupply, "Mint over supply ");
        require(msg.value >= cost * _mintAmount, "Insufficient funds ");

        mintCount[_to] = minted + _mintAmount;
        _safeMint(msg.sender, _mintAmount);
    }

    // Only Owner executable functions
    function mintByOwner(address _to, uint256 _mintAmount) external onlyOwner {
        require(totalSupply() + _mintAmount <= maxSupply, "mint over supply ");
        if (_mintAmount <= maxBatchSize) {
            _safeMint(_to, _mintAmount);
            return;
        }
        
        uint256 leftToMint = _mintAmount;
        while (leftToMint > 0) {
            if (leftToMint <= maxBatchSize) {
                _safeMint(_to, leftToMint);
                return;
            }
            _safeMint(_to, maxBatchSize);
            leftToMint = leftToMint - maxBatchSize;
        }
    }

    function addToWhiteList(address[] calldata _addresses) external onlyOwner {
        for (uint256 i; i < _addresses.length; i++) {
            whiteList[_addresses[i]] = true;
        }
    }

    function togglePreSaleLive() external onlyOwner {
        if (preSaleLive) {
            preSaleLive = false;
            return;
        }
        preSaleLive = true;
    }

    function toggleMintLive() external onlyOwner {
        if (mintLive) {
            mintLive = false;
            return;
        }
        preSaleLive = false;
        mintLive = true;
    }

    function setBaseURI(string memory _newURI) external onlyOwner {
        baseURI = _newURI;
    }

    function withdraw() external payable onlyOwner {
        (bool success, ) = msg.sender.call{value: address(this).balance}("");
        require(success, "Transfer failed ");
    }

    function setOwnersExplicit(uint256 quantity) external onlyOwner {
        _setOwnersExplicit(quantity);
    }

    // token URI functionality
    function setWarAwardTokenURI(uint256 _tokenId, string memory _tokenURI) external onlyOwner {
        require(_tokenId < warAwardsCount, "tokenId above max awards ");
        warAwards[_tokenId] = _tokenURI;
    }

    function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) {
        require(_exists(_tokenId), "URI query for nonexistent token ");

        if (bytes(warAwards[_tokenId]).length > 0) {
            return warAwards[_tokenId];
        }

        string memory baseTokenURI = _baseURI();
        string memory json = ".json";
        return bytes(baseTokenURI).length > 0
            ? string(abi.encodePacked(baseTokenURI, _tokenId.toString(), json))
            : '';
    }

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

    fallback() external payable { }

    receive() external payable { }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"defaultBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"addToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"_address","type":"address"}],"name":"isWhiteListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintPerTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintByOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"mintedByAddressCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"preSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"setWarAwardTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleMintLive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePreSaleLive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526000805560006007556001600b553480156200001f57600080fd5b5060405162005aeb38038062005aeb833981810160405281019062000045919062000406565b6040518060400160405280600b81526020017f5374726565742047616e670000000000000000000000000000000000000000008152506040518060400160405280600281526020017f5347000000000000000000000000000000000000000000000000000000000000815250600b5460008111620000fa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000f190620004de565b60405180910390fd5b826001908051906020019062000112929190620001b9565b5081600290805190602001906200012b929190620001b9565b50806080818152505050505033600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806008908051906020019062000190929190620001b9565b506107d0600a819055506001600c8190555060006009819055506000600d819055505062000565565b828054620001c7906200052f565b90600052602060002090601f016020900481019282620001eb576000855562000237565b82601f106200020657805160ff191683800117855562000237565b8280016001018555821562000237579182015b828111156200023657825182559160200191906001019062000219565b5b5090506200024691906200024a565b5090565b5b80821115620002655760008160009055506001016200024b565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620002d28262000287565b810181811067ffffffffffffffff82111715620002f457620002f362000298565b5b80604052505050565b60006200030962000269565b9050620003178282620002c7565b919050565b600067ffffffffffffffff8211156200033a576200033962000298565b5b620003458262000287565b9050602081019050919050565b60005b838110156200037257808201518184015260208101905062000355565b8381111562000382576000848401525b50505050565b60006200039f62000399846200031c565b620002fd565b905082815260208101848484011115620003be57620003bd62000282565b5b620003cb84828562000352565b509392505050565b600082601f830112620003eb57620003ea6200027d565b5b8151620003fd84826020860162000388565b91505092915050565b6000602082840312156200041f576200041e62000273565b5b600082015167ffffffffffffffff81111562000440576200043f62000278565b5b6200044e84828501620003d3565b91505092915050565b600082825260208201905092915050565b7f45524337323141203a204d61782062617463682073697a65206d75737420626560008201527f206e6f6e7a65726f000000000000000000000000000000000000000000000000602082015250565b6000620004c660288362000457565b9150620004d38262000468565b604082019050919050565b60006020820190508181036000830152620004f981620004b7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200054857607f821691505b602082108114156200055f576200055e62000500565b5b50919050565b608051615540620005ab600039600081816110bd015281816111020152818161113d0152818161116301528181612c9e01528181612cc7015261329501526155406000f3fe60806040526004361061021e5760003560e01c806359d6d067116101235780638da5cb5b116100ab578063c87b56dd1161006f578063c87b56dd1461079c578063d5abeb01146107d9578063d7224ba014610804578063e8656fcc1461082f578063e985e9c51461085a57610225565b80638da5cb5b146106d857806395d89b4114610703578063a0712d681461072e578063a22cb4651461074a578063b88d4fde1461077357610225565b80636f9170f6116100f25780636f9170f61461060257806370a082311461063f578063740d73f31461067c5780637835c635146106a557806389bdeec6146106c157610225565b806359d6d067146105465780635bd90b761461056f5780636352211e1461059a5780636c0360eb146105d757610225565b806323b872dd116101a657806337351b0f1161017557806337351b0f146104705780633ccfd60b146104ad57806342842e0e146104b75780634f6ccce7146104e057806355f804b31461051d57610225565b806323b872dd146103b85780632d20fb60146103e15780632f745c591461040a5780633542aee21461044757610225565b8063095ea7b3116101ed578063095ea7b3146102f7578063105739b81461032057806313faede61461033757806318160ddd14610362578063239c70ae1461038d57610225565b806301f569971461022757806301ffc9a71461025257806306fdde031461028f578063081812fc146102ba57610225565b3661022557005b005b34801561023357600080fd5b5061023c610897565b60405161024991906137bc565b60405180910390f35b34801561025e57600080fd5b5061027960048036038101906102749190613843565b61089d565b604051610286919061388b565b60405180910390f35b34801561029b57600080fd5b506102a46109e7565b6040516102b1919061393f565b60405180910390f35b3480156102c657600080fd5b506102e160048036038101906102dc919061398d565b610a79565b6040516102ee91906139fb565b60405180910390f35b34801561030357600080fd5b5061031e60048036038101906103199190613a42565b610afe565b005b34801561032c57600080fd5b50610335610c17565b005b34801561034357600080fd5b5061034c610d15565b60405161035991906137bc565b60405180910390f35b34801561036e57600080fd5b50610377610d1b565b60405161038491906137bc565b60405180910390f35b34801561039957600080fd5b506103a2610d24565b6040516103af91906137bc565b60405180910390f35b3480156103c457600080fd5b506103df60048036038101906103da9190613a82565b610d2a565b005b3480156103ed57600080fd5b506104086004803603810190610403919061398d565b610d3a565b005b34801561041657600080fd5b50610431600480360381019061042c9190613a42565b610dd6565b60405161043e91906137bc565b60405180910390f35b34801561045357600080fd5b5061046e60048036038101906104699190613a42565b610fd4565b005b34801561047c57600080fd5b5061049760048036038101906104929190613ad5565b61119a565b6040516104a491906137bc565b60405180910390f35b6104b56111e3565b005b3480156104c357600080fd5b506104de60048036038101906104d99190613a82565b611322565b005b3480156104ec57600080fd5b506105076004803603810190610502919061398d565b611342565b60405161051491906137bc565b60405180910390f35b34801561052957600080fd5b50610544600480360381019061053f9190613c37565b611395565b005b34801561055257600080fd5b5061056d60048036038101906105689190613c80565b61143f565b005b34801561057b57600080fd5b5061058461153f565b604051610591919061388b565b60405180910390f35b3480156105a657600080fd5b506105c160048036038101906105bc919061398d565b611552565b6040516105ce91906139fb565b60405180910390f35b3480156105e357600080fd5b506105ec611568565b6040516105f9919061393f565b60405180910390f35b34801561060e57600080fd5b5061062960048036038101906106249190613ad5565b6115f6565b604051610636919061388b565b60405180910390f35b34801561064b57600080fd5b5061066660048036038101906106619190613ad5565b61164c565b60405161067391906137bc565b60405180910390f35b34801561068857600080fd5b506106a3600480360381019061069e9190613d3c565b611735565b005b6106bf60048036038101906106ba919061398d565b61186a565b005b3480156106cd57600080fd5b506106d6611ae3565b005b3480156106e457600080fd5b506106ed611bc6565b6040516106fa91906139fb565b60405180910390f35b34801561070f57600080fd5b50610718611bec565b604051610725919061393f565b60405180910390f35b6107486004803603810190610743919061398d565b611c7e565b005b34801561075657600080fd5b50610771600480360381019061076c9190613db5565b611eb0565b005b34801561077f57600080fd5b5061079a60048036038101906107959190613e96565b612031565b005b3480156107a857600080fd5b506107c360048036038101906107be919061398d565b61208d565b6040516107d0919061393f565b60405180910390f35b3480156107e557600080fd5b506107ee61223d565b6040516107fb91906137bc565b60405180910390f35b34801561081057600080fd5b50610819612243565b60405161082691906137bc565b60405180910390f35b34801561083b57600080fd5b50610844612249565b604051610851919061388b565b60405180910390f35b34801561086657600080fd5b50610881600480360381019061087c9190613f19565b61225c565b60405161088e919061388b565b60405180910390f35b600c5481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061096857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109d057507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109e057506109df826122f0565b5b9050919050565b6060600180546109f690613f88565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2290613f88565b8015610a6f5780601f10610a4457610100808354040283529160200191610a6f565b820191906000526020600020905b815481529060010190602001808311610a5257829003601f168201915b5050505050905090565b6000610a848261235a565b610ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aba9061402c565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b0982611552565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b71906140be565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b99612367565b73ffffffffffffffffffffffffffffffffffffffff161480610bc85750610bc781610bc2612367565b61225c565b5b610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe90614150565b60405180910390fd5b610c1283838361236f565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e906141bc565b60405180910390fd5b600e60159054906101000a900460ff1615610cdc576000600e60156101000a81548160ff021916908315150217905550610d13565b6000600e60146101000a81548160ff0219169083151502179055506001600e60156101000a81548160ff0219169083151502179055505b565b60095481565b60008054905090565b600b5481565b610d35838383612421565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc1906141bc565b60405180910390fd5b610dd3816129da565b50565b6000610de18361164c565b8210610e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e199061424e565b60405180910390fd5b6000610e2c610d1b565b905060008060005b83811015610f92576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610f2657806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f7e5786841415610f6f578195505050505050610fce565b8380610f7a9061429d565b9450505b508080610f8a9061429d565b915050610e34565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc590614358565b60405180910390fd5b92915050565b3373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b906141bc565b60405180910390fd5b600a5481611070610d1b565b61107a9190614378565b11156110bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b29061441a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081116110f1576110ec8282612c2c565b611196565b60008190505b6000811115611194577f00000000000000000000000000000000000000000000000000000000000000008111611137576111318382612c2c565b50611196565b611161837f0000000000000000000000000000000000000000000000000000000000000000612c2c565b7f00000000000000000000000000000000000000000000000000000000000000008161118d919061443a565b90506110f7565b505b5050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a906141bc565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516112999061449f565b60006040518083038185875af1925050503d80600081146112d6576040519150601f19603f3d011682016040523d82523d6000602084013e6112db565b606091505b505090508061131f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131690614500565b60405180910390fd5b50565b61133d83838360405180602001604052806000815250612031565b505050565b600061134c610d1b565b821061138d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138490614592565b60405180910390fd5b819050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c906141bc565b60405180910390fd5b806008908051906020019061143b9291906136c6565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c6906141bc565b60405180910390fd5b600d548210611513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150a906145fe565b60405180910390fd5b8060116000848152602001908152602001600020908051906020019061153a9291906136c6565b505050565b600e60149054906101000a900460ff1681565b600061155d82612c4a565b600001519050919050565b6008805461157590613f88565b80601f01602080910402602001604051908101604052809291908181526020018280546115a190613f88565b80156115ee5780601f106115c3576101008083540402835291602001916115ee565b820191906000526020600020905b8154815290600101906020018083116115d157829003601f168201915b505050505081565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b490614690565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bc906141bc565b60405180910390fd5b60005b82829050811015611865576001600f60008585858181106117ec576117eb6146b0565b5b90506020020160208101906118019190613ad5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061185d9061429d565b9150506117c8565b505050565b600e60149054906101000a900460ff166118b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b09061472b565b60405180910390fd5b60003390506000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661198e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198590614797565b60405180910390fd5b600b54838261199d9190614378565b11156119de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d590614803565b60405180910390fd5b600a54836119ea610d1b565b6119f49190614378565b1115611a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2c9061486f565b60405180910390fd5b82600954611a43919061488f565b341015611a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7c90614935565b60405180910390fd5b8281611a919190614378565b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611ade3384612c2c565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6a906141bc565b60405180910390fd5b600e60149054906101000a900460ff1615611ba8576000600e60146101000a81548160ff021916908315150217905550611bc4565b6001600e60146101000a81548160ff0219169083151502179055505b565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060028054611bfb90613f88565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2790613f88565b8015611c745780601f10611c4957610100808354040283529160200191611c74565b820191906000526020600020905b815481529060010190602001808311611c5757829003601f168201915b5050505050905090565b600e60159054906101000a900460ff16611ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc4906149a1565b60405180910390fd5b60003390506000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600b548382611d259190614378565b1115611d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5d90614a0d565b60405180910390fd5b600c54831115611dab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da290614a79565b60405180910390fd5b600a5483611db7610d1b565b611dc19190614378565b1115611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df99061441a565b60405180910390fd5b82600954611e10919061488f565b341015611e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4990614ae5565b60405180910390fd5b8281611e5e9190614378565b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611eab3384612c2c565b505050565b611eb8612367565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1d90614b51565b60405180910390fd5b8060066000611f33612367565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611fe0612367565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612025919061388b565b60405180910390a35050565b61203c848484612421565b61204884848484612e4d565b612087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207e90614be3565b60405180910390fd5b50505050565b60606120988261235a565b6120d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ce90614c4f565b60405180910390fd5b60006011600084815260200190815260200160002080546120f790613f88565b905011156121a25760116000838152602001908152602001600020805461211d90613f88565b80601f016020809104026020016040519081016040528092919081815260200182805461214990613f88565b80156121965780601f1061216b57610100808354040283529160200191612196565b820191906000526020600020905b81548152906001019060200180831161217957829003601f168201915b50505050509050612238565b60006121ac612fd5565b905060006040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250905060008251116122065760405180602001604052806000815250612233565b8161221085613067565b8260405160200161222393929190614cab565b6040516020818303038152906040525b925050505b919050565b600a5481565b60075481565b600e60159054906101000a900460ff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061242c82612c4a565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612453612367565b73ffffffffffffffffffffffffffffffffffffffff1614806124af5750612478612367565b73ffffffffffffffffffffffffffffffffffffffff1661249784610a79565b73ffffffffffffffffffffffffffffffffffffffff16145b806124cb57506124ca82600001516124c5612367565b61225c565b5b90508061250d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250490614d4e565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461257f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257690614de0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156125ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e690614e72565b60405180910390fd5b6125fc85858560016131c8565b61260c600084846000015161236f565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661267a9190614eae565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661271e9190614ee2565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846128249190614378565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561296a5761289a8161235a565b15612969576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129d286868660016131ce565b505050505050565b6000600754905060008211612a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1b90614f74565b60405180910390fd5b600060018383612a349190614378565b612a3e919061443a565b90506001600054612a4f919061443a565b811115612a68576001600054612a65919061443a565b90505b612a718161235a565b612ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa790615006565b60405180910390fd5b60008290505b818111612c1357600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612c00576000612b3382612c4a565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612c0b9061429d565b915050612ab6565b50600181612c219190614378565b600781905550505050565b612c468282604051806020016040528060008152506131d4565b5050565b612c5261374c565b612c5b8261235a565b612c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9190615098565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310612cfe5760017f000000000000000000000000000000000000000000000000000000000000000084612cf1919061443a565b612cfb9190614378565b90505b60008390505b818110612e0c576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612df857809350505050612e48565b508080612e04906150b8565b915050612d04565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3f90615154565b60405180910390fd5b919050565b6000612e6e8473ffffffffffffffffffffffffffffffffffffffff166136b3565b15612fc8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e97612367565b8786866040518563ffffffff1660e01b8152600401612eb994939291906151c9565b6020604051808303816000875af1925050508015612ef557506040513d601f19601f82011682018060405250810190612ef2919061522a565b60015b612f78573d8060008114612f25576040519150601f19603f3d011682016040523d82523d6000602084013e612f2a565b606091505b50600081511415612f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f67906152c9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612fcd565b600190505b949350505050565b606060088054612fe490613f88565b80601f016020809104026020016040519081016040528092919081815260200182805461301090613f88565b801561305d5780601f106130325761010080835404028352916020019161305d565b820191906000526020600020905b81548152906001019060200180831161304057829003601f168201915b5050505050905090565b606060008214156130af576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506131c3565b600082905060005b600082146130e15780806130ca9061429d565b915050600a826130da9190615318565b91506130b7565b60008167ffffffffffffffff8111156130fd576130fc613b0c565b5b6040519080825280601f01601f19166020018201604052801561312f5781602001600182028036833780820191505090505b5090505b600085146131bc57600182613148919061443a565b9150600a856131579190615349565b60306131639190614378565b60f81b818381518110613179576131786146b0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131b59190615318565b9450613133565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561324a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613241906153ec565b60405180910390fd5b6132538161235a565b15613293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328a90615458565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008311156132f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ed906154ea565b60405180910390fd5b61330360008583866131c8565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516134009190614ee2565b6fffffffffffffffffffffffffffffffff1681526020018583602001516134279190614ee2565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561369657818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136366000888488612e4d565b613675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366c90614be3565b60405180910390fd5b81806136809061429d565b925050808061368e9061429d565b9150506135c5565b50806000819055506136ab60008785886131ce565b505050505050565b600080823b905060008111915050919050565b8280546136d290613f88565b90600052602060002090601f0160209004810192826136f4576000855561373b565b82601f1061370d57805160ff191683800117855561373b565b8280016001018555821561373b579182015b8281111561373a57825182559160200191906001019061371f565b5b5090506137489190613786565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561379f576000816000905550600101613787565b5090565b6000819050919050565b6137b6816137a3565b82525050565b60006020820190506137d160008301846137ad565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613820816137eb565b811461382b57600080fd5b50565b60008135905061383d81613817565b92915050565b600060208284031215613859576138586137e1565b5b60006138678482850161382e565b91505092915050565b60008115159050919050565b61388581613870565b82525050565b60006020820190506138a0600083018461387c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156138e05780820151818401526020810190506138c5565b838111156138ef576000848401525b50505050565b6000601f19601f8301169050919050565b6000613911826138a6565b61391b81856138b1565b935061392b8185602086016138c2565b613934816138f5565b840191505092915050565b600060208201905081810360008301526139598184613906565b905092915050565b61396a816137a3565b811461397557600080fd5b50565b60008135905061398781613961565b92915050565b6000602082840312156139a3576139a26137e1565b5b60006139b184828501613978565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139e5826139ba565b9050919050565b6139f5816139da565b82525050565b6000602082019050613a1060008301846139ec565b92915050565b613a1f816139da565b8114613a2a57600080fd5b50565b600081359050613a3c81613a16565b92915050565b60008060408385031215613a5957613a586137e1565b5b6000613a6785828601613a2d565b9250506020613a7885828601613978565b9150509250929050565b600080600060608486031215613a9b57613a9a6137e1565b5b6000613aa986828701613a2d565b9350506020613aba86828701613a2d565b9250506040613acb86828701613978565b9150509250925092565b600060208284031215613aeb57613aea6137e1565b5b6000613af984828501613a2d565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613b44826138f5565b810181811067ffffffffffffffff82111715613b6357613b62613b0c565b5b80604052505050565b6000613b766137d7565b9050613b828282613b3b565b919050565b600067ffffffffffffffff821115613ba257613ba1613b0c565b5b613bab826138f5565b9050602081019050919050565b82818337600083830152505050565b6000613bda613bd584613b87565b613b6c565b905082815260208101848484011115613bf657613bf5613b07565b5b613c01848285613bb8565b509392505050565b600082601f830112613c1e57613c1d613b02565b5b8135613c2e848260208601613bc7565b91505092915050565b600060208284031215613c4d57613c4c6137e1565b5b600082013567ffffffffffffffff811115613c6b57613c6a6137e6565b5b613c7784828501613c09565b91505092915050565b60008060408385031215613c9757613c966137e1565b5b6000613ca585828601613978565b925050602083013567ffffffffffffffff811115613cc657613cc56137e6565b5b613cd285828601613c09565b9150509250929050565b600080fd5b600080fd5b60008083601f840112613cfc57613cfb613b02565b5b8235905067ffffffffffffffff811115613d1957613d18613cdc565b5b602083019150836020820283011115613d3557613d34613ce1565b5b9250929050565b60008060208385031215613d5357613d526137e1565b5b600083013567ffffffffffffffff811115613d7157613d706137e6565b5b613d7d85828601613ce6565b92509250509250929050565b613d9281613870565b8114613d9d57600080fd5b50565b600081359050613daf81613d89565b92915050565b60008060408385031215613dcc57613dcb6137e1565b5b6000613dda85828601613a2d565b9250506020613deb85828601613da0565b9150509250929050565b600067ffffffffffffffff821115613e1057613e0f613b0c565b5b613e19826138f5565b9050602081019050919050565b6000613e39613e3484613df5565b613b6c565b905082815260208101848484011115613e5557613e54613b07565b5b613e60848285613bb8565b509392505050565b600082601f830112613e7d57613e7c613b02565b5b8135613e8d848260208601613e26565b91505092915050565b60008060008060808587031215613eb057613eaf6137e1565b5b6000613ebe87828801613a2d565b9450506020613ecf87828801613a2d565b9350506040613ee087828801613978565b925050606085013567ffffffffffffffff811115613f0157613f006137e6565b5b613f0d87828801613e68565b91505092959194509250565b60008060408385031215613f3057613f2f6137e1565b5b6000613f3e85828601613a2d565b9250506020613f4f85828601613a2d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613fa057607f821691505b60208210811415613fb457613fb3613f59565b5b50919050565b7f45524337323141203a20417070726f76656420717565727920666f72206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b6000614016602e836138b1565b915061402182613fba565b604082019050919050565b6000602082019050818103600083015261404581614009565b9050919050565b7f45524337323141203a20417070726f76616c20746f2063757272656e74206f7760008201527f6e65720000000000000000000000000000000000000000000000000000000000602082015250565b60006140a86023836138b1565b91506140b38261404c565b604082019050919050565b600060208201905081810360008301526140d78161409b565b9050919050565b7f45524337323141203a20417070726f76652063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000602082015250565b600061413a603a836138b1565b9150614145826140de565b604082019050919050565b600060208201905081810360008301526141698161412d565b9050919050565b7f4e6f74204f776e65720000000000000000000000000000000000000000000000600082015250565b60006141a66009836138b1565b91506141b182614170565b602082019050919050565b600060208201905081810360008301526141d581614199565b9050919050565b7f45524337323141203a204f776e657220696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b60006142386023836138b1565b9150614243826141dc565b604082019050919050565b600060208201905081810360008301526142678161422b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006142a8826137a3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142db576142da61426e565b5b600182019050919050565b7f45524337323141203a20556e61626c6520746f2067657420746f6b656e206f6660008201527f206f776e657220627920696e6465780000000000000000000000000000000000602082015250565b6000614342602f836138b1565b915061434d826142e6565b604082019050919050565b6000602082019050818103600083015261437181614335565b9050919050565b6000614383826137a3565b915061438e836137a3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143c3576143c261426e565b5b828201905092915050565b7f6d696e74206f76657220737570706c7920000000000000000000000000000000600082015250565b60006144046011836138b1565b915061440f826143ce565b602082019050919050565b60006020820190508181036000830152614433816143f7565b9050919050565b6000614445826137a3565b9150614450836137a3565b9250828210156144635761446261426e565b5b828203905092915050565b600081905092915050565b50565b600061448960008361446e565b915061449482614479565b600082019050919050565b60006144aa8261447c565b9150819050919050565b7f5472616e73666572206661696c65642000000000000000000000000000000000600082015250565b60006144ea6010836138b1565b91506144f5826144b4565b602082019050919050565b60006020820190508181036000830152614519816144dd565b9050919050565b7f45524337323141203a20476c6f62616c20696e646578206f7574206f6620626f60008201527f756e647300000000000000000000000000000000000000000000000000000000602082015250565b600061457c6024836138b1565b915061458782614520565b604082019050919050565b600060208201905081810360008301526145ab8161456f565b9050919050565b7f746f6b656e49642061626f7665206d6178206177617264732000000000000000600082015250565b60006145e86019836138b1565b91506145f3826145b2565b602082019050919050565b60006020820190508181036000830152614617816145db565b9050919050565b7f45524337323141203a2042616c616e636520717565727920666f72207468652060008201527f7a65726f20616464726573730000000000000000000000000000000000000000602082015250565b600061467a602c836138b1565b91506146858261461e565b604082019050919050565b600060208201905081810360008301526146a98161466d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f70726553616c65206e6f74204c69766500000000000000000000000000000000600082015250565b60006147156010836138b1565b9150614720826146df565b602082019050919050565b6000602082019050818103600083015261474481614708565b9050919050565b7f4e6f742077686974656c69737465642000000000000000000000000000000000600082015250565b60006147816010836138b1565b915061478c8261474b565b602082019050919050565b600060208201905081810360008301526147b081614774565b9050919050565b7f4d696e74206f766572206d617820000000000000000000000000000000000000600082015250565b60006147ed600e836138b1565b91506147f8826147b7565b602082019050919050565b6000602082019050818103600083015261481c816147e0565b9050919050565b7f4d696e74206f76657220737570706c7920000000000000000000000000000000600082015250565b60006148596011836138b1565b915061486482614823565b602082019050919050565b600060208201905081810360008301526148888161484c565b9050919050565b600061489a826137a3565b91506148a5836137a3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148de576148dd61426e565b5b828202905092915050565b7f496e73756666696369656e742066756e64732000000000000000000000000000600082015250565b600061491f6013836138b1565b915061492a826148e9565b602082019050919050565b6000602082019050818103600083015261494e81614912565b9050919050565b7f6d696e74206e6f74204c69766500000000000000000000000000000000000000600082015250565b600061498b600d836138b1565b915061499682614955565b602082019050919050565b600060208201905081810360008301526149ba8161497e565b9050919050565b7f6d696e74206f766572206d617820000000000000000000000000000000000000600082015250565b60006149f7600e836138b1565b9150614a02826149c1565b602082019050919050565b60006020820190508181036000830152614a26816149ea565b9050919050565b7f616d6f756e74206d757374203c206d6178200000000000000000000000000000600082015250565b6000614a636012836138b1565b9150614a6e82614a2d565b602082019050919050565b60006020820190508181036000830152614a9281614a56565b9050919050565b7f696e73756666696369656e742066756e64732000000000000000000000000000600082015250565b6000614acf6013836138b1565b9150614ada82614a99565b602082019050919050565b60006020820190508181036000830152614afe81614ac2565b9050919050565b7f45524337323141203a20417070726f766520746f2063616c6c65720000000000600082015250565b6000614b3b601b836138b1565b9150614b4682614b05565b602082019050919050565b60006020820190508181036000830152614b6a81614b2e565b9050919050565b7f45524337323141203a205472616e7366657220746f206e6f6e2045524337323160008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000614bcd6034836138b1565b9150614bd882614b71565b604082019050919050565b60006020820190508181036000830152614bfc81614bc0565b9050919050565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e20600082015250565b6000614c396020836138b1565b9150614c4482614c03565b602082019050919050565b60006020820190508181036000830152614c6881614c2c565b9050919050565b600081905092915050565b6000614c85826138a6565b614c8f8185614c6f565b9350614c9f8185602086016138c2565b80840191505092915050565b6000614cb78286614c7a565b9150614cc38285614c7a565b9150614ccf8284614c7a565b9150819050949350505050565b7f45524337323141203a205472616e736665722063616c6c6572206973206e6f7460008201527f206f776e6572206e6f7220617070726f76656400000000000000000000000000602082015250565b6000614d386033836138b1565b9150614d4382614cdc565b604082019050919050565b60006020820190508181036000830152614d6781614d2b565b9050919050565b7f45524337323141203a205472616e736665722066726f6d20696e636f7272656360008201527f74206f776e657200000000000000000000000000000000000000000000000000602082015250565b6000614dca6027836138b1565b9150614dd582614d6e565b604082019050919050565b60006020820190508181036000830152614df981614dbd565b9050919050565b7f45524337323141203a205472616e7366657220746f20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e5c6026836138b1565b9150614e6782614e00565b604082019050919050565b60006020820190508181036000830152614e8b81614e4f565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6000614eb982614e92565b9150614ec483614e92565b925082821015614ed757614ed661426e565b5b828203905092915050565b6000614eed82614e92565b9150614ef883614e92565b9250826fffffffffffffffffffffffffffffffff03821115614f1d57614f1c61426e565b5b828201905092915050565b7f5175616e74697479206d757374206265206e6f6e7a65726f2000000000000000600082015250565b6000614f5e6019836138b1565b9150614f6982614f28565b602082019050919050565b60006020820190508181036000830152614f8d81614f51565b9050919050565b7f4e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75702000000000000000000000000000000000000000000000000000602082015250565b6000614ff06027836138b1565b9150614ffb82614f94565b604082019050919050565b6000602082019050818103600083015261501f81614fe3565b9050919050565b7f45524337323141203a204f776e657220717565727920666f72206e6f6e65786960008201527f7374656e7420746f6b656e000000000000000000000000000000000000000000602082015250565b6000615082602b836138b1565b915061508d82615026565b604082019050919050565b600060208201905081810360008301526150b181615075565b9050919050565b60006150c3826137a3565b915060008214156150d7576150d661426e565b5b600182039050919050565b7f45524337323141203a20556e61626c6520746f2064657465726d696e6520746860008201527f65206f776e6572206f6620746f6b656e00000000000000000000000000000000602082015250565b600061513e6030836138b1565b9150615149826150e2565b604082019050919050565b6000602082019050818103600083015261516d81615131565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061519b82615174565b6151a5818561517f565b93506151b58185602086016138c2565b6151be816138f5565b840191505092915050565b60006080820190506151de60008301876139ec565b6151eb60208301866139ec565b6151f860408301856137ad565b818103606083015261520a8184615190565b905095945050505050565b60008151905061522481613817565b92915050565b6000602082840312156152405761523f6137e1565b5b600061524e84828501615215565b91505092915050565b7f455243373231413a205472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b60006152b36033836138b1565b91506152be82615257565b604082019050919050565b600060208201905081810360008301526152e2816152a6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615323826137a3565b915061532e836137a3565b92508261533e5761533d6152e9565b5b828204905092915050565b6000615354826137a3565b915061535f836137a3565b92508261536f5761536e6152e9565b5b828206905092915050565b7f45524337323141203a204d696e7420746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006153d66022836138b1565b91506153e18261537a565b604082019050919050565b60006020820190508181036000830152615405816153c9565b9050919050565b7f45524337323141203a20546f6b656e20616c7265616479206d696e7465640000600082015250565b6000615442601e836138b1565b915061544d8261540c565b602082019050919050565b6000602082019050818103600083015261547181615435565b9050919050565b7f45524337323141203a205175616e7469747920746f206d696e7420746f6f206860008201527f6967680000000000000000000000000000000000000000000000000000000000602082015250565b60006154d46023836138b1565b91506154df82615478565b604082019050919050565b60006020820190508181036000830152615503816154c7565b905091905056fea2646970667358221220ab0bb0a8c6b5f418704ead3c2bc0c71f8ddbb0183ae0e476ed430f8eeea6a9ac64736f6c634300080a00330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001868747470733a2f2f6170692e61736170636c75622e696f2f0000000000000000

Deployed Bytecode

0x60806040526004361061021e5760003560e01c806359d6d067116101235780638da5cb5b116100ab578063c87b56dd1161006f578063c87b56dd1461079c578063d5abeb01146107d9578063d7224ba014610804578063e8656fcc1461082f578063e985e9c51461085a57610225565b80638da5cb5b146106d857806395d89b4114610703578063a0712d681461072e578063a22cb4651461074a578063b88d4fde1461077357610225565b80636f9170f6116100f25780636f9170f61461060257806370a082311461063f578063740d73f31461067c5780637835c635146106a557806389bdeec6146106c157610225565b806359d6d067146105465780635bd90b761461056f5780636352211e1461059a5780636c0360eb146105d757610225565b806323b872dd116101a657806337351b0f1161017557806337351b0f146104705780633ccfd60b146104ad57806342842e0e146104b75780634f6ccce7146104e057806355f804b31461051d57610225565b806323b872dd146103b85780632d20fb60146103e15780632f745c591461040a5780633542aee21461044757610225565b8063095ea7b3116101ed578063095ea7b3146102f7578063105739b81461032057806313faede61461033757806318160ddd14610362578063239c70ae1461038d57610225565b806301f569971461022757806301ffc9a71461025257806306fdde031461028f578063081812fc146102ba57610225565b3661022557005b005b34801561023357600080fd5b5061023c610897565b60405161024991906137bc565b60405180910390f35b34801561025e57600080fd5b5061027960048036038101906102749190613843565b61089d565b604051610286919061388b565b60405180910390f35b34801561029b57600080fd5b506102a46109e7565b6040516102b1919061393f565b60405180910390f35b3480156102c657600080fd5b506102e160048036038101906102dc919061398d565b610a79565b6040516102ee91906139fb565b60405180910390f35b34801561030357600080fd5b5061031e60048036038101906103199190613a42565b610afe565b005b34801561032c57600080fd5b50610335610c17565b005b34801561034357600080fd5b5061034c610d15565b60405161035991906137bc565b60405180910390f35b34801561036e57600080fd5b50610377610d1b565b60405161038491906137bc565b60405180910390f35b34801561039957600080fd5b506103a2610d24565b6040516103af91906137bc565b60405180910390f35b3480156103c457600080fd5b506103df60048036038101906103da9190613a82565b610d2a565b005b3480156103ed57600080fd5b506104086004803603810190610403919061398d565b610d3a565b005b34801561041657600080fd5b50610431600480360381019061042c9190613a42565b610dd6565b60405161043e91906137bc565b60405180910390f35b34801561045357600080fd5b5061046e60048036038101906104699190613a42565b610fd4565b005b34801561047c57600080fd5b5061049760048036038101906104929190613ad5565b61119a565b6040516104a491906137bc565b60405180910390f35b6104b56111e3565b005b3480156104c357600080fd5b506104de60048036038101906104d99190613a82565b611322565b005b3480156104ec57600080fd5b506105076004803603810190610502919061398d565b611342565b60405161051491906137bc565b60405180910390f35b34801561052957600080fd5b50610544600480360381019061053f9190613c37565b611395565b005b34801561055257600080fd5b5061056d60048036038101906105689190613c80565b61143f565b005b34801561057b57600080fd5b5061058461153f565b604051610591919061388b565b60405180910390f35b3480156105a657600080fd5b506105c160048036038101906105bc919061398d565b611552565b6040516105ce91906139fb565b60405180910390f35b3480156105e357600080fd5b506105ec611568565b6040516105f9919061393f565b60405180910390f35b34801561060e57600080fd5b5061062960048036038101906106249190613ad5565b6115f6565b604051610636919061388b565b60405180910390f35b34801561064b57600080fd5b5061066660048036038101906106619190613ad5565b61164c565b60405161067391906137bc565b60405180910390f35b34801561068857600080fd5b506106a3600480360381019061069e9190613d3c565b611735565b005b6106bf60048036038101906106ba919061398d565b61186a565b005b3480156106cd57600080fd5b506106d6611ae3565b005b3480156106e457600080fd5b506106ed611bc6565b6040516106fa91906139fb565b60405180910390f35b34801561070f57600080fd5b50610718611bec565b604051610725919061393f565b60405180910390f35b6107486004803603810190610743919061398d565b611c7e565b005b34801561075657600080fd5b50610771600480360381019061076c9190613db5565b611eb0565b005b34801561077f57600080fd5b5061079a60048036038101906107959190613e96565b612031565b005b3480156107a857600080fd5b506107c360048036038101906107be919061398d565b61208d565b6040516107d0919061393f565b60405180910390f35b3480156107e557600080fd5b506107ee61223d565b6040516107fb91906137bc565b60405180910390f35b34801561081057600080fd5b50610819612243565b60405161082691906137bc565b60405180910390f35b34801561083b57600080fd5b50610844612249565b604051610851919061388b565b60405180910390f35b34801561086657600080fd5b50610881600480360381019061087c9190613f19565b61225c565b60405161088e919061388b565b60405180910390f35b600c5481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061096857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109d057507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109e057506109df826122f0565b5b9050919050565b6060600180546109f690613f88565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2290613f88565b8015610a6f5780601f10610a4457610100808354040283529160200191610a6f565b820191906000526020600020905b815481529060010190602001808311610a5257829003601f168201915b5050505050905090565b6000610a848261235a565b610ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aba9061402c565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b0982611552565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b71906140be565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b99612367565b73ffffffffffffffffffffffffffffffffffffffff161480610bc85750610bc781610bc2612367565b61225c565b5b610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe90614150565b60405180910390fd5b610c1283838361236f565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e906141bc565b60405180910390fd5b600e60159054906101000a900460ff1615610cdc576000600e60156101000a81548160ff021916908315150217905550610d13565b6000600e60146101000a81548160ff0219169083151502179055506001600e60156101000a81548160ff0219169083151502179055505b565b60095481565b60008054905090565b600b5481565b610d35838383612421565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc1906141bc565b60405180910390fd5b610dd3816129da565b50565b6000610de18361164c565b8210610e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e199061424e565b60405180910390fd5b6000610e2c610d1b565b905060008060005b83811015610f92576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610f2657806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f7e5786841415610f6f578195505050505050610fce565b8380610f7a9061429d565b9450505b508080610f8a9061429d565b915050610e34565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc590614358565b60405180910390fd5b92915050565b3373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b906141bc565b60405180910390fd5b600a5481611070610d1b565b61107a9190614378565b11156110bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b29061441a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000181116110f1576110ec8282612c2c565b611196565b60008190505b6000811115611194577f00000000000000000000000000000000000000000000000000000000000000018111611137576111318382612c2c565b50611196565b611161837f0000000000000000000000000000000000000000000000000000000000000001612c2c565b7f00000000000000000000000000000000000000000000000000000000000000018161118d919061443a565b90506110f7565b505b5050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a906141bc565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516112999061449f565b60006040518083038185875af1925050503d80600081146112d6576040519150601f19603f3d011682016040523d82523d6000602084013e6112db565b606091505b505090508061131f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131690614500565b60405180910390fd5b50565b61133d83838360405180602001604052806000815250612031565b505050565b600061134c610d1b565b821061138d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138490614592565b60405180910390fd5b819050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c906141bc565b60405180910390fd5b806008908051906020019061143b9291906136c6565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c6906141bc565b60405180910390fd5b600d548210611513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150a906145fe565b60405180910390fd5b8060116000848152602001908152602001600020908051906020019061153a9291906136c6565b505050565b600e60149054906101000a900460ff1681565b600061155d82612c4a565b600001519050919050565b6008805461157590613f88565b80601f01602080910402602001604051908101604052809291908181526020018280546115a190613f88565b80156115ee5780601f106115c3576101008083540402835291602001916115ee565b820191906000526020600020905b8154815290600101906020018083116115d157829003601f168201915b505050505081565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b490614690565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bc906141bc565b60405180910390fd5b60005b82829050811015611865576001600f60008585858181106117ec576117eb6146b0565b5b90506020020160208101906118019190613ad5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061185d9061429d565b9150506117c8565b505050565b600e60149054906101000a900460ff166118b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b09061472b565b60405180910390fd5b60003390506000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661198e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198590614797565b60405180910390fd5b600b54838261199d9190614378565b11156119de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d590614803565b60405180910390fd5b600a54836119ea610d1b565b6119f49190614378565b1115611a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2c9061486f565b60405180910390fd5b82600954611a43919061488f565b341015611a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7c90614935565b60405180910390fd5b8281611a919190614378565b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611ade3384612c2c565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6a906141bc565b60405180910390fd5b600e60149054906101000a900460ff1615611ba8576000600e60146101000a81548160ff021916908315150217905550611bc4565b6001600e60146101000a81548160ff0219169083151502179055505b565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060028054611bfb90613f88565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2790613f88565b8015611c745780601f10611c4957610100808354040283529160200191611c74565b820191906000526020600020905b815481529060010190602001808311611c5757829003601f168201915b5050505050905090565b600e60159054906101000a900460ff16611ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc4906149a1565b60405180910390fd5b60003390506000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600b548382611d259190614378565b1115611d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5d90614a0d565b60405180910390fd5b600c54831115611dab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da290614a79565b60405180910390fd5b600a5483611db7610d1b565b611dc19190614378565b1115611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df99061441a565b60405180910390fd5b82600954611e10919061488f565b341015611e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4990614ae5565b60405180910390fd5b8281611e5e9190614378565b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611eab3384612c2c565b505050565b611eb8612367565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1d90614b51565b60405180910390fd5b8060066000611f33612367565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611fe0612367565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612025919061388b565b60405180910390a35050565b61203c848484612421565b61204884848484612e4d565b612087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207e90614be3565b60405180910390fd5b50505050565b60606120988261235a565b6120d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ce90614c4f565b60405180910390fd5b60006011600084815260200190815260200160002080546120f790613f88565b905011156121a25760116000838152602001908152602001600020805461211d90613f88565b80601f016020809104026020016040519081016040528092919081815260200182805461214990613f88565b80156121965780601f1061216b57610100808354040283529160200191612196565b820191906000526020600020905b81548152906001019060200180831161217957829003601f168201915b50505050509050612238565b60006121ac612fd5565b905060006040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250905060008251116122065760405180602001604052806000815250612233565b8161221085613067565b8260405160200161222393929190614cab565b6040516020818303038152906040525b925050505b919050565b600a5481565b60075481565b600e60159054906101000a900460ff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061242c82612c4a565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612453612367565b73ffffffffffffffffffffffffffffffffffffffff1614806124af5750612478612367565b73ffffffffffffffffffffffffffffffffffffffff1661249784610a79565b73ffffffffffffffffffffffffffffffffffffffff16145b806124cb57506124ca82600001516124c5612367565b61225c565b5b90508061250d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250490614d4e565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461257f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257690614de0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156125ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e690614e72565b60405180910390fd5b6125fc85858560016131c8565b61260c600084846000015161236f565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661267a9190614eae565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661271e9190614ee2565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846128249190614378565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561296a5761289a8161235a565b15612969576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129d286868660016131ce565b505050505050565b6000600754905060008211612a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1b90614f74565b60405180910390fd5b600060018383612a349190614378565b612a3e919061443a565b90506001600054612a4f919061443a565b811115612a68576001600054612a65919061443a565b90505b612a718161235a565b612ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa790615006565b60405180910390fd5b60008290505b818111612c1357600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612c00576000612b3382612c4a565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612c0b9061429d565b915050612ab6565b50600181612c219190614378565b600781905550505050565b612c468282604051806020016040528060008152506131d4565b5050565b612c5261374c565b612c5b8261235a565b612c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9190615098565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000018310612cfe5760017f000000000000000000000000000000000000000000000000000000000000000184612cf1919061443a565b612cfb9190614378565b90505b60008390505b818110612e0c576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612df857809350505050612e48565b508080612e04906150b8565b915050612d04565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3f90615154565b60405180910390fd5b919050565b6000612e6e8473ffffffffffffffffffffffffffffffffffffffff166136b3565b15612fc8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e97612367565b8786866040518563ffffffff1660e01b8152600401612eb994939291906151c9565b6020604051808303816000875af1925050508015612ef557506040513d601f19601f82011682018060405250810190612ef2919061522a565b60015b612f78573d8060008114612f25576040519150601f19603f3d011682016040523d82523d6000602084013e612f2a565b606091505b50600081511415612f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f67906152c9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612fcd565b600190505b949350505050565b606060088054612fe490613f88565b80601f016020809104026020016040519081016040528092919081815260200182805461301090613f88565b801561305d5780601f106130325761010080835404028352916020019161305d565b820191906000526020600020905b81548152906001019060200180831161304057829003601f168201915b5050505050905090565b606060008214156130af576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506131c3565b600082905060005b600082146130e15780806130ca9061429d565b915050600a826130da9190615318565b91506130b7565b60008167ffffffffffffffff8111156130fd576130fc613b0c565b5b6040519080825280601f01601f19166020018201604052801561312f5781602001600182028036833780820191505090505b5090505b600085146131bc57600182613148919061443a565b9150600a856131579190615349565b60306131639190614378565b60f81b818381518110613179576131786146b0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131b59190615318565b9450613133565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561324a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613241906153ec565b60405180910390fd5b6132538161235a565b15613293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328a90615458565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000018311156132f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ed906154ea565b60405180910390fd5b61330360008583866131c8565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516134009190614ee2565b6fffffffffffffffffffffffffffffffff1681526020018583602001516134279190614ee2565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561369657818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136366000888488612e4d565b613675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366c90614be3565b60405180910390fd5b81806136809061429d565b925050808061368e9061429d565b9150506135c5565b50806000819055506136ab60008785886131ce565b505050505050565b600080823b905060008111915050919050565b8280546136d290613f88565b90600052602060002090601f0160209004810192826136f4576000855561373b565b82601f1061370d57805160ff191683800117855561373b565b8280016001018555821561373b579182015b8281111561373a57825182559160200191906001019061371f565b5b5090506137489190613786565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561379f576000816000905550600101613787565b5090565b6000819050919050565b6137b6816137a3565b82525050565b60006020820190506137d160008301846137ad565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613820816137eb565b811461382b57600080fd5b50565b60008135905061383d81613817565b92915050565b600060208284031215613859576138586137e1565b5b60006138678482850161382e565b91505092915050565b60008115159050919050565b61388581613870565b82525050565b60006020820190506138a0600083018461387c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156138e05780820151818401526020810190506138c5565b838111156138ef576000848401525b50505050565b6000601f19601f8301169050919050565b6000613911826138a6565b61391b81856138b1565b935061392b8185602086016138c2565b613934816138f5565b840191505092915050565b600060208201905081810360008301526139598184613906565b905092915050565b61396a816137a3565b811461397557600080fd5b50565b60008135905061398781613961565b92915050565b6000602082840312156139a3576139a26137e1565b5b60006139b184828501613978565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139e5826139ba565b9050919050565b6139f5816139da565b82525050565b6000602082019050613a1060008301846139ec565b92915050565b613a1f816139da565b8114613a2a57600080fd5b50565b600081359050613a3c81613a16565b92915050565b60008060408385031215613a5957613a586137e1565b5b6000613a6785828601613a2d565b9250506020613a7885828601613978565b9150509250929050565b600080600060608486031215613a9b57613a9a6137e1565b5b6000613aa986828701613a2d565b9350506020613aba86828701613a2d565b9250506040613acb86828701613978565b9150509250925092565b600060208284031215613aeb57613aea6137e1565b5b6000613af984828501613a2d565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613b44826138f5565b810181811067ffffffffffffffff82111715613b6357613b62613b0c565b5b80604052505050565b6000613b766137d7565b9050613b828282613b3b565b919050565b600067ffffffffffffffff821115613ba257613ba1613b0c565b5b613bab826138f5565b9050602081019050919050565b82818337600083830152505050565b6000613bda613bd584613b87565b613b6c565b905082815260208101848484011115613bf657613bf5613b07565b5b613c01848285613bb8565b509392505050565b600082601f830112613c1e57613c1d613b02565b5b8135613c2e848260208601613bc7565b91505092915050565b600060208284031215613c4d57613c4c6137e1565b5b600082013567ffffffffffffffff811115613c6b57613c6a6137e6565b5b613c7784828501613c09565b91505092915050565b60008060408385031215613c9757613c966137e1565b5b6000613ca585828601613978565b925050602083013567ffffffffffffffff811115613cc657613cc56137e6565b5b613cd285828601613c09565b9150509250929050565b600080fd5b600080fd5b60008083601f840112613cfc57613cfb613b02565b5b8235905067ffffffffffffffff811115613d1957613d18613cdc565b5b602083019150836020820283011115613d3557613d34613ce1565b5b9250929050565b60008060208385031215613d5357613d526137e1565b5b600083013567ffffffffffffffff811115613d7157613d706137e6565b5b613d7d85828601613ce6565b92509250509250929050565b613d9281613870565b8114613d9d57600080fd5b50565b600081359050613daf81613d89565b92915050565b60008060408385031215613dcc57613dcb6137e1565b5b6000613dda85828601613a2d565b9250506020613deb85828601613da0565b9150509250929050565b600067ffffffffffffffff821115613e1057613e0f613b0c565b5b613e19826138f5565b9050602081019050919050565b6000613e39613e3484613df5565b613b6c565b905082815260208101848484011115613e5557613e54613b07565b5b613e60848285613bb8565b509392505050565b600082601f830112613e7d57613e7c613b02565b5b8135613e8d848260208601613e26565b91505092915050565b60008060008060808587031215613eb057613eaf6137e1565b5b6000613ebe87828801613a2d565b9450506020613ecf87828801613a2d565b9350506040613ee087828801613978565b925050606085013567ffffffffffffffff811115613f0157613f006137e6565b5b613f0d87828801613e68565b91505092959194509250565b60008060408385031215613f3057613f2f6137e1565b5b6000613f3e85828601613a2d565b9250506020613f4f85828601613a2d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613fa057607f821691505b60208210811415613fb457613fb3613f59565b5b50919050565b7f45524337323141203a20417070726f76656420717565727920666f72206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b6000614016602e836138b1565b915061402182613fba565b604082019050919050565b6000602082019050818103600083015261404581614009565b9050919050565b7f45524337323141203a20417070726f76616c20746f2063757272656e74206f7760008201527f6e65720000000000000000000000000000000000000000000000000000000000602082015250565b60006140a86023836138b1565b91506140b38261404c565b604082019050919050565b600060208201905081810360008301526140d78161409b565b9050919050565b7f45524337323141203a20417070726f76652063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000602082015250565b600061413a603a836138b1565b9150614145826140de565b604082019050919050565b600060208201905081810360008301526141698161412d565b9050919050565b7f4e6f74204f776e65720000000000000000000000000000000000000000000000600082015250565b60006141a66009836138b1565b91506141b182614170565b602082019050919050565b600060208201905081810360008301526141d581614199565b9050919050565b7f45524337323141203a204f776e657220696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b60006142386023836138b1565b9150614243826141dc565b604082019050919050565b600060208201905081810360008301526142678161422b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006142a8826137a3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142db576142da61426e565b5b600182019050919050565b7f45524337323141203a20556e61626c6520746f2067657420746f6b656e206f6660008201527f206f776e657220627920696e6465780000000000000000000000000000000000602082015250565b6000614342602f836138b1565b915061434d826142e6565b604082019050919050565b6000602082019050818103600083015261437181614335565b9050919050565b6000614383826137a3565b915061438e836137a3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143c3576143c261426e565b5b828201905092915050565b7f6d696e74206f76657220737570706c7920000000000000000000000000000000600082015250565b60006144046011836138b1565b915061440f826143ce565b602082019050919050565b60006020820190508181036000830152614433816143f7565b9050919050565b6000614445826137a3565b9150614450836137a3565b9250828210156144635761446261426e565b5b828203905092915050565b600081905092915050565b50565b600061448960008361446e565b915061449482614479565b600082019050919050565b60006144aa8261447c565b9150819050919050565b7f5472616e73666572206661696c65642000000000000000000000000000000000600082015250565b60006144ea6010836138b1565b91506144f5826144b4565b602082019050919050565b60006020820190508181036000830152614519816144dd565b9050919050565b7f45524337323141203a20476c6f62616c20696e646578206f7574206f6620626f60008201527f756e647300000000000000000000000000000000000000000000000000000000602082015250565b600061457c6024836138b1565b915061458782614520565b604082019050919050565b600060208201905081810360008301526145ab8161456f565b9050919050565b7f746f6b656e49642061626f7665206d6178206177617264732000000000000000600082015250565b60006145e86019836138b1565b91506145f3826145b2565b602082019050919050565b60006020820190508181036000830152614617816145db565b9050919050565b7f45524337323141203a2042616c616e636520717565727920666f72207468652060008201527f7a65726f20616464726573730000000000000000000000000000000000000000602082015250565b600061467a602c836138b1565b91506146858261461e565b604082019050919050565b600060208201905081810360008301526146a98161466d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f70726553616c65206e6f74204c69766500000000000000000000000000000000600082015250565b60006147156010836138b1565b9150614720826146df565b602082019050919050565b6000602082019050818103600083015261474481614708565b9050919050565b7f4e6f742077686974656c69737465642000000000000000000000000000000000600082015250565b60006147816010836138b1565b915061478c8261474b565b602082019050919050565b600060208201905081810360008301526147b081614774565b9050919050565b7f4d696e74206f766572206d617820000000000000000000000000000000000000600082015250565b60006147ed600e836138b1565b91506147f8826147b7565b602082019050919050565b6000602082019050818103600083015261481c816147e0565b9050919050565b7f4d696e74206f76657220737570706c7920000000000000000000000000000000600082015250565b60006148596011836138b1565b915061486482614823565b602082019050919050565b600060208201905081810360008301526148888161484c565b9050919050565b600061489a826137a3565b91506148a5836137a3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148de576148dd61426e565b5b828202905092915050565b7f496e73756666696369656e742066756e64732000000000000000000000000000600082015250565b600061491f6013836138b1565b915061492a826148e9565b602082019050919050565b6000602082019050818103600083015261494e81614912565b9050919050565b7f6d696e74206e6f74204c69766500000000000000000000000000000000000000600082015250565b600061498b600d836138b1565b915061499682614955565b602082019050919050565b600060208201905081810360008301526149ba8161497e565b9050919050565b7f6d696e74206f766572206d617820000000000000000000000000000000000000600082015250565b60006149f7600e836138b1565b9150614a02826149c1565b602082019050919050565b60006020820190508181036000830152614a26816149ea565b9050919050565b7f616d6f756e74206d757374203c206d6178200000000000000000000000000000600082015250565b6000614a636012836138b1565b9150614a6e82614a2d565b602082019050919050565b60006020820190508181036000830152614a9281614a56565b9050919050565b7f696e73756666696369656e742066756e64732000000000000000000000000000600082015250565b6000614acf6013836138b1565b9150614ada82614a99565b602082019050919050565b60006020820190508181036000830152614afe81614ac2565b9050919050565b7f45524337323141203a20417070726f766520746f2063616c6c65720000000000600082015250565b6000614b3b601b836138b1565b9150614b4682614b05565b602082019050919050565b60006020820190508181036000830152614b6a81614b2e565b9050919050565b7f45524337323141203a205472616e7366657220746f206e6f6e2045524337323160008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000614bcd6034836138b1565b9150614bd882614b71565b604082019050919050565b60006020820190508181036000830152614bfc81614bc0565b9050919050565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e20600082015250565b6000614c396020836138b1565b9150614c4482614c03565b602082019050919050565b60006020820190508181036000830152614c6881614c2c565b9050919050565b600081905092915050565b6000614c85826138a6565b614c8f8185614c6f565b9350614c9f8185602086016138c2565b80840191505092915050565b6000614cb78286614c7a565b9150614cc38285614c7a565b9150614ccf8284614c7a565b9150819050949350505050565b7f45524337323141203a205472616e736665722063616c6c6572206973206e6f7460008201527f206f776e6572206e6f7220617070726f76656400000000000000000000000000602082015250565b6000614d386033836138b1565b9150614d4382614cdc565b604082019050919050565b60006020820190508181036000830152614d6781614d2b565b9050919050565b7f45524337323141203a205472616e736665722066726f6d20696e636f7272656360008201527f74206f776e657200000000000000000000000000000000000000000000000000602082015250565b6000614dca6027836138b1565b9150614dd582614d6e565b604082019050919050565b60006020820190508181036000830152614df981614dbd565b9050919050565b7f45524337323141203a205472616e7366657220746f20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e5c6026836138b1565b9150614e6782614e00565b604082019050919050565b60006020820190508181036000830152614e8b81614e4f565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6000614eb982614e92565b9150614ec483614e92565b925082821015614ed757614ed661426e565b5b828203905092915050565b6000614eed82614e92565b9150614ef883614e92565b9250826fffffffffffffffffffffffffffffffff03821115614f1d57614f1c61426e565b5b828201905092915050565b7f5175616e74697479206d757374206265206e6f6e7a65726f2000000000000000600082015250565b6000614f5e6019836138b1565b9150614f6982614f28565b602082019050919050565b60006020820190508181036000830152614f8d81614f51565b9050919050565b7f4e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75702000000000000000000000000000000000000000000000000000602082015250565b6000614ff06027836138b1565b9150614ffb82614f94565b604082019050919050565b6000602082019050818103600083015261501f81614fe3565b9050919050565b7f45524337323141203a204f776e657220717565727920666f72206e6f6e65786960008201527f7374656e7420746f6b656e000000000000000000000000000000000000000000602082015250565b6000615082602b836138b1565b915061508d82615026565b604082019050919050565b600060208201905081810360008301526150b181615075565b9050919050565b60006150c3826137a3565b915060008214156150d7576150d661426e565b5b600182039050919050565b7f45524337323141203a20556e61626c6520746f2064657465726d696e6520746860008201527f65206f776e6572206f6620746f6b656e00000000000000000000000000000000602082015250565b600061513e6030836138b1565b9150615149826150e2565b604082019050919050565b6000602082019050818103600083015261516d81615131565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061519b82615174565b6151a5818561517f565b93506151b58185602086016138c2565b6151be816138f5565b840191505092915050565b60006080820190506151de60008301876139ec565b6151eb60208301866139ec565b6151f860408301856137ad565b818103606083015261520a8184615190565b905095945050505050565b60008151905061522481613817565b92915050565b6000602082840312156152405761523f6137e1565b5b600061524e84828501615215565b91505092915050565b7f455243373231413a205472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b60006152b36033836138b1565b91506152be82615257565b604082019050919050565b600060208201905081810360008301526152e2816152a6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615323826137a3565b915061532e836137a3565b92508261533e5761533d6152e9565b5b828204905092915050565b6000615354826137a3565b915061535f836137a3565b92508261536f5761536e6152e9565b5b828206905092915050565b7f45524337323141203a204d696e7420746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006153d66022836138b1565b91506153e18261537a565b604082019050919050565b60006020820190508181036000830152615405816153c9565b9050919050565b7f45524337323141203a20546f6b656e20616c7265616479206d696e7465640000600082015250565b6000615442601e836138b1565b915061544d8261540c565b602082019050919050565b6000602082019050818103600083015261547181615435565b9050919050565b7f45524337323141203a205175616e7469747920746f206d696e7420746f6f206860008201527f6967680000000000000000000000000000000000000000000000000000000000602082015250565b60006154d46023836138b1565b91506154df82615478565b604082019050919050565b60006020820190508181036000830152615503816154c7565b905091905056fea2646970667358221220ab0bb0a8c6b5f418704ead3c2bc0c71f8ddbb0183ae0e476ed430f8eeea6a9ac64736f6c634300080a0033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001868747470733a2f2f6170692e61736170636c75622e696f2f0000000000000000

-----Decoded View---------------
Arg [0] : defaultBaseURI (string): https://api.asapclub.io/

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000018
Arg [2] : 68747470733a2f2f6170692e61736170636c75622e696f2f0000000000000000


Deployed Bytecode Sourcemap

33028:5084:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33225:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23091:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24731:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25877:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25396:415;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36526:197;;;;;;;;;;;;;:::i;:::-;;33129:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21954:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33186:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26696:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37026:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22258:825;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35522:607;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34248:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36837:181;;;:::i;:::-;;26866:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22062:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36731:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37177:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33332:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24599:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33101:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34128:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23471:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36137:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34937:537;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36339:179;;;;;;;;;;;;;:::i;:::-;;33305:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24839:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34378:551;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26164:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27114:356;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37400:516;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33155:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30910:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33362:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26524:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33225:36;;;;:::o;23091:372::-;23193:4;23245:25;23230:40;;;:11;:40;;;;:105;;;;23302:33;23287:48;;;:11;:48;;;;23230:105;:172;;;;23367:35;23352:50;;;:11;:50;;;;23230:172;:225;;;;23419:36;23443:11;23419:23;:36::i;:::-;23230:225;23210:245;;23091:372;;;:::o;24731:100::-;24785:13;24818:5;24811:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24731:100;:::o;25877:215::-;25945:7;25973:16;25981:7;25973;:16::i;:::-;25965:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;26060:15;:24;26076:7;26060:24;;;;;;;;;;;;;;;;;;;;;26053:31;;25877:215;;;:::o;25396:415::-;25469:13;25485:24;25501:7;25485:15;:24::i;:::-;25469:40;;25534:5;25528:11;;:2;:11;;;;25520:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;25630:5;25614:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;25639:37;25656:5;25663:12;:10;:12::i;:::-;25639:16;:37::i;:::-;25614:62;25592:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;25775:28;25784:2;25788:7;25797:5;25775:8;:28::i;:::-;25458:353;25396:415;;:::o;36526:197::-;33594:10;33585:19;;:5;;;;;;;;;;;:19;;;33577:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;36586:8:::1;;;;;;;;;;;36582:78;;;36622:5;36611:8;;:16;;;;;;;;;;;;;;;;;;36642:7;;36582:78;36684:5;36670:11;;:19;;;;;;;;;;;;;;;;;;36711:4;36700:8;;:15;;;;;;;;;;;;;;;;;;33629:1;36526:197::o:0;33129:19::-;;;;:::o;21954:100::-;22007:7;22034:12;;22027:19;;21954:100;:::o;33186:32::-;;;;:::o;26696:162::-;26822:28;26832:4;26838:2;26842:7;26822:9;:28::i;:::-;26696:162;;;:::o;37026:111::-;33594:10;33585:19;;:5;;;;;;;;;;;:19;;;33577:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;37101:28:::1;37120:8;37101:18;:28::i;:::-;37026:111:::0;:::o;22258:825::-;22347:7;22383:16;22393:5;22383:9;:16::i;:::-;22375:5;:24;22367:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;22450:22;22475:13;:11;:13::i;:::-;22450:38;;22499:19;22533:25;22587:9;22582:426;22606:14;22602:1;:18;22582:426;;;22642:31;22676:11;:14;22688:1;22676:14;;;;;;;;;;;22642:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22735:1;22709:28;;:9;:14;;;:28;;;22705:103;;22778:9;:14;;;22758:34;;22705:103;22847:5;22826:26;;:17;:26;;;22822:175;;;22892:5;22877:11;:20;22873:77;;;22929:1;22922:8;;;;;;;;;22873:77;22968:13;;;;;:::i;:::-;;;;22822:175;22627:381;22622:3;;;;;:::i;:::-;;;;22582:426;;;;23018:57;;;;;;;;;;:::i;:::-;;;;;;;;22258:825;;;;;:::o;35522:607::-;33594:10;33585:19;;:5;;;;;;;;;;;:19;;;33577:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;35646:9:::1;;35631:11;35615:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;35607:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;35707:12;35692:11;:27;35688:108;;35736:27;35746:3;35751:11;35736:9;:27::i;:::-;35778:7;;35688:108;35816:18;35837:11;35816:32;;35859:263;35879:1;35866:10;:14;35859:263;;;35915:12;35901:10;:26;35897:118;;35948:26;35958:3;35963:10;35948:9;:26::i;:::-;35993:7;;;35897:118;36029:28;36039:3;36044:12;36029:9;:28::i;:::-;36098:12;36085:10;:25;;;;:::i;:::-;36072:38;;35859:263;;;35596:533;33629:1;35522:607:::0;;:::o;34248:122::-;34317:7;34343:9;:19;34353:8;34343:19;;;;;;;;;;;;;;;;34336:26;;34248:122;;;:::o;36837:181::-;33594:10;33585:19;;:5;;;;;;;;;;;:19;;;33577:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;36896:12:::1;36914:10;:15;;36937:21;36914:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36895:68;;;36982:7;36974:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;36884:134;36837:181::o:0;26866:177::-;26996:39;27013:4;27019:2;27023:7;26996:39;;;;;;;;;;;;:16;:39::i;:::-;26866:177;;;:::o;22062:188::-;22129:7;22165:13;:11;:13::i;:::-;22157:5;:21;22149:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;22237:5;22230:12;;22062:188;;;:::o;36731:98::-;33594:10;33585:19;;:5;;;;;;;;;;;:19;;;33577:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;36814:7:::1;36804;:17;;;;;;;;;;;;:::i;:::-;;36731:98:::0;:::o;37177:215::-;33594:10;33585:19;;:5;;;;;;;;;;;:19;;;33577:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;37298:14:::1;;37287:8;:25;37279:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;37375:9;37353;:19;37363:8;37353:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;37177:215:::0;;:::o;33332:23::-;;;;;;;;;;;;;:::o;24599:124::-;24663:7;24690:20;24702:7;24690:11;:20::i;:::-;:25;;;24683:32;;24599:124;;;:::o;33101:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34128:112::-;34190:4;34213:9;:19;34223:8;34213:19;;;;;;;;;;;;;;;;;;;;;;;;;34206:26;;34128:112;;;:::o;23471:222::-;23535:7;23580:1;23563:19;;:5;:19;;;;23555:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23657:12;:19;23670:5;23657:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;23649:36;;23642:43;;23471:222;;;:::o;36137:194::-;33594:10;33585:19;;:5;;;;;;;;;;;:19;;;33577:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;36227:9:::1;36222:102;36242:10;;:17;;36238:1;:21;36222:102;;;36308:4;36281:9;:24;36291:10;;36302:1;36291:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;36281:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;36261:3;;;;;:::i;:::-;;;;36222:102;;;;36137:194:::0;;:::o;34937:537::-;33690:11;;;;;;;;;;;33682:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;35021:11:::1;35035:10;35021:24;;35056:14;35073:9;:14;35083:3;35073:14;;;;;;;;;;;;;;;;35056:31;;35106:9;:14;35116:3;35106:14;;;;;;;;;;;;;;;;;;;;;;;;;35098:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;35184:13;;35169:11;35160:6;:20;;;;:::i;:::-;:37;;35152:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35266:9;;35251:11;35235:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;35227:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;35336:11;35329:4;;:18;;;;:::i;:::-;35316:9;:31;;35308:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;35410:11;35401:6;:20;;;;:::i;:::-;35384:9;:14;35394:3;35384:14;;;;;;;;;;;;;;;:37;;;;35432:34;35442:10;35454:11;35432:9;:34::i;:::-;35010:464;;34937:537:::0;:::o;36339:179::-;33594:10;33585:19;;:5;;;;;;;;;;;:19;;;33577:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;36402:11:::1;;;;;;;;;;;36398:84;;;36444:5;36430:11;;:19;;;;;;;;;;;;;;;;;;36464:7;;36398:84;36506:4;36492:11;;:18;;;;;;;;;;;;;;;;;;33629:1;36339:179::o:0;33305:20::-;;;;;;;;;;;;;:::o;24839:104::-;24895:13;24928:7;24921:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24839:104;:::o;34378:551::-;33791:8;;;;;;;;;;;33783:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;34452:11:::1;34466:10;34452:24;;34487:14;34504:9;:14;34514:3;34504:14;;;;;;;;;;;;;;;;34487:31;;34561:13;;34546:11;34537:6;:20;;;;:::i;:::-;:37;;34529:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34627:21;;34612:11;:36;;34604:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34721:9;;34706:11;34690:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;34682:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;34791:11;34784:4;;:18;;;;:::i;:::-;34771:9;:31;;34763:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;34865:11;34856:6;:20;;;;:::i;:::-;34839:9;:14;34849:3;34839:14;;;;;;;;;;;;;;;:37;;;;34887:34;34897:10;34909:11;34887:9;:34::i;:::-;34441:488;;34378:551:::0;:::o;26164:289::-;26271:12;:10;:12::i;:::-;26259:24;;:8;:24;;;;26251:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26373:8;26328:18;:32;26347:12;:10;:12::i;:::-;26328:32;;;;;;;;;;;;;;;:42;26361:8;26328:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26426:8;26397:48;;26412:12;:10;:12::i;:::-;26397:48;;;26436:8;26397:48;;;;;;:::i;:::-;;;;;;;;26164:289;;:::o;27114:356::-;27273:28;27283:4;27289:2;27293:7;27273:9;:28::i;:::-;27334:48;27357:4;27363:2;27367:7;27376:5;27334:22;:48::i;:::-;27312:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;27114:356;;;;:::o;37400:516::-;37474:13;37508:17;37516:8;37508:7;:17::i;:::-;37500:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;37615:1;37585:9;:19;37595:8;37585:19;;;;;;;;;;;37579:33;;;;;:::i;:::-;;;:37;37575:96;;;37640:9;:19;37650:8;37640:19;;;;;;;;;;;37633:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37575:96;37683:26;37712:10;:8;:10::i;:::-;37683:39;;37733:18;:28;;;;;;;;;;;;;;;;;;;37808:1;37785:12;37779:26;:30;:129;;;;;;;;;;;;;;;;;37849:12;37863:19;:8;:17;:19::i;:::-;37884:4;37832:57;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37779:129;37772:136;;;;37400:516;;;;:::o;33155:24::-;;;;:::o;30910:43::-;;;;:::o;33362:20::-;;;;;;;;;;;;;:::o;26524:164::-;26621:4;26645:18;:25;26664:5;26645:25;;;;;;;;;;;;;;;:35;26671:8;26645:35;;;;;;;;;;;;;;;;;;;;;;;;;26638:42;;26524:164;;;;:::o;9201:157::-;9286:4;9325:25;9310:40;;;:11;:40;;;;9303:47;;9201:157;;;:::o;27478:111::-;27535:4;27569:12;;27559:7;:22;27552:29;;27478:111;;;:::o;8913:98::-;8966:7;8993:10;8986:17;;8913:98;:::o;30706:196::-;30848:2;30821:15;:24;30837:7;30821:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30886:7;30882:2;30866:28;;30875:5;30866:28;;;;;;;;;;;;30706:196;;;:::o;29121:1577::-;29236:35;29274:20;29286:7;29274:11;:20::i;:::-;29236:58;;29307:22;29349:13;:18;;;29333:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;29408:12;:10;:12::i;:::-;29384:36;;:20;29396:7;29384:11;:20::i;:::-;:36;;;29333:87;:154;;;;29437:50;29454:13;:18;;;29474:12;:10;:12::i;:::-;29437:16;:50::i;:::-;29333:154;29307:181;;29509:17;29501:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29625:4;29603:26;;:13;:18;;;:26;;;29595:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;29706:1;29692:16;;:2;:16;;;;29684:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29764:43;29786:4;29792:2;29796:7;29805:1;29764:21;:43::i;:::-;29872:49;29889:1;29893:7;29902:13;:18;;;29872:8;:49::i;:::-;29964:1;29934:12;:18;29947:4;29934:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30004:1;29976:12;:16;29989:2;29976:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30039:43;;;;;;;;30054:2;30039:43;;;;;;30065:15;30039:43;;;;;30016:11;:20;30028:7;30016:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30322:19;30354:1;30344:7;:11;;;;:::i;:::-;30322:33;;30411:1;30370:43;;:11;:24;30382:11;30370:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;30366:227;;;30434:20;30442:11;30434:7;:20::i;:::-;30430:152;;;30502:64;;;;;;;;30517:13;:18;;;30502:64;;;;;;30537:13;:28;;;30502:64;;;;;30475:11;:24;30487:11;30475:24;;;;;;;;;;;:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30430:152;30366:227;30629:7;30625:2;30610:27;;30619:4;30610:27;;;;;;;;;;;;30648:42;30669:4;30675:2;30679:7;30688:1;30648:20;:42::i;:::-;29225:1473;;;29121:1577;;;:::o;30962:887::-;31028:25;31056:24;;31028:52;;31110:1;31099:8;:12;31091:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;31152:16;31202:1;31191:8;31171:17;:28;;;;:::i;:::-;:32;;;;:::i;:::-;31152:51;;31244:1;31229:12;;:16;;;;:::i;:::-;31218:8;:27;31214:87;;;31288:1;31273:12;;:16;;;;:::i;:::-;31262:27;;31214:87;31424:17;31432:8;31424:7;:17::i;:::-;31416:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;31501:9;31513:17;31501:29;;31496:296;31537:8;31532:1;:13;31496:296;;31602:1;31571:33;;:11;:14;31583:1;31571:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;31567:214;;;31625:31;31659:14;31671:1;31659:11;:14::i;:::-;31625:48;;31709:56;;;;;;;;31724:9;:14;;;31709:56;;;;;;31740:9;:24;;;31709:56;;;;;31692:11;:14;31704:1;31692:14;;;;;;;;;;;:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31606:175;31567:214;31547:3;;;;;:::i;:::-;;;;31496:296;;;;31840:1;31829:8;:12;;;;:::i;:::-;31802:24;:39;;;;31017:832;;30962:887;:::o;27597:104::-;27666:27;27676:2;27680:8;27666:27;;;;;;;;;;;;:9;:27::i;:::-;27597:104;;:::o;23939:652::-;24000:21;;:::i;:::-;24042:16;24050:7;24042;:16::i;:::-;24034:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;24119:26;24171:12;24160:7;:23;24156:103;;24246:1;24231:12;24221:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;24200:47;;24156:103;24276:12;24291:7;24276:22;;24271:242;24308:18;24300:4;:26;24271:242;;24351:31;24385:11;:17;24397:4;24385:17;;;;;;;;;;;24351:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24447:1;24421:28;;:9;:14;;;:28;;;24417:85;;24477:9;24470:16;;;;;;;24417:85;24336:177;24328:6;;;;;:::i;:::-;;;;24271:242;;;;24525:58;;;;;;;;;;:::i;:::-;;;;;;;;23939:652;;;;:::o;31857:804::-;32012:4;32033:15;:2;:13;;;:15::i;:::-;32029:625;;;32085:2;32069:36;;;32106:12;:10;:12::i;:::-;32120:4;32126:7;32135:5;32069:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32065:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32332:1;32315:6;:13;:18;32311:273;;;32358:61;;;;;;;;;;:::i;:::-;;;;;;;;32311:273;32534:6;32528:13;32519:6;32515:2;32511:15;32504:38;32065:534;32202:45;;;32192:55;;;:6;:55;;;;32185:62;;;;;32029:625;32638:4;32631:11;;31857:804;;;;;;;:::o;37924:108::-;37984:13;38017:7;38010:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37924:108;:::o;4911:534::-;4967:13;5008:1;4999:5;:10;4995:53;;;5026:10;;;;;;;;;;;;;;;;;;;;;4995:53;5058:12;5073:5;5058:20;;5089:14;5114:78;5129:1;5121:4;:9;5114:78;;5147:8;;;;;:::i;:::-;;;;5178:2;5170:10;;;;;:::i;:::-;;;5114:78;;;5202:19;5234:6;5224:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5202:39;;5252:154;5268:1;5259:5;:10;5252:154;;5296:1;5286:11;;;;;:::i;:::-;;;5363:2;5355:5;:10;;;;:::i;:::-;5342:2;:24;;;;:::i;:::-;5329:39;;5312:6;5319;5312:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;5392:2;5383:11;;;;;:::i;:::-;;;5252:154;;;5430:6;5416:21;;;;;4911:534;;;;:::o;32669:159::-;;;;;:::o;32836:158::-;;;;;:::o;27709:1404::-;27832:20;27855:12;;27832:35;;27900:1;27886:16;;:2;:16;;;;27878:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;28086:21;28094:12;28086:7;:21::i;:::-;28085:22;28077:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28173:12;28161:8;:24;;28153:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;28238:61;28268:1;28272:2;28276:12;28290:8;28238:21;:61::i;:::-;28312:30;28345:12;:16;28358:2;28345:16;;;;;;;;;;;;;;;28312:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28391:135;;;;;;;;28447:8;28417:11;:19;;;:39;;;;:::i;:::-;28391:135;;;;;;28506:8;28471:11;:24;;;:44;;;;:::i;:::-;28391:135;;;;;28372:12;:16;28385:2;28372:16;;;;;;;;;;;;;;;:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28565:43;;;;;;;;28580:2;28565:43;;;;;;28591:15;28565:43;;;;;28537:11;:25;28549:12;28537:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28621:20;28644:12;28621:35;;28674:9;28669:326;28693:8;28689:1;:12;28669:326;;;28753:12;28749:2;28728:38;;28745:1;28728:38;;;;;;;;;;;;28807:59;28838:1;28842:2;28846:12;28860:5;28807:22;:59::i;:::-;28781:173;;;;;;;;;;;;:::i;:::-;;;;;;;;;28969:14;;;;;:::i;:::-;;;;28703:3;;;;;:::i;:::-;;;;28669:326;;;;29022:12;29007;:27;;;;29045:60;29074:1;29078:2;29082:12;29096:8;29045:20;:60::i;:::-;27821:1292;;;27709:1404;;;:::o;1266:198::-;1326:4;1345:12;1412:7;1400:20;1392:28;;1455:1;1448:4;:8;1441:15;;;1266:198;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:75::-;475:6;508:2;502:9;492:19;;442:75;:::o;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:149;805:7;845:66;838:5;834:78;823:89;;769:149;;;:::o;924:120::-;996:23;1013:5;996:23;:::i;:::-;989:5;986:34;976:62;;1034:1;1031;1024:12;976:62;924:120;:::o;1050:137::-;1095:5;1133:6;1120:20;1111:29;;1149:32;1175:5;1149:32;:::i;:::-;1050:137;;;;:::o;1193:327::-;1251:6;1300:2;1288:9;1279:7;1275:23;1271:32;1268:119;;;1306:79;;:::i;:::-;1268:119;1426:1;1451:52;1495:7;1486:6;1475:9;1471:22;1451:52;:::i;:::-;1441:62;;1397:116;1193:327;;;;:::o;1526:90::-;1560:7;1603:5;1596:13;1589:21;1578:32;;1526:90;;;:::o;1622:109::-;1703:21;1718:5;1703:21;:::i;:::-;1698:3;1691:34;1622:109;;:::o;1737:210::-;1824:4;1862:2;1851:9;1847:18;1839:26;;1875:65;1937:1;1926:9;1922:17;1913:6;1875:65;:::i;:::-;1737:210;;;;:::o;1953:99::-;2005:6;2039:5;2033:12;2023:22;;1953:99;;;:::o;2058:169::-;2142:11;2176:6;2171:3;2164:19;2216:4;2211:3;2207:14;2192:29;;2058:169;;;;:::o;2233:307::-;2301:1;2311:113;2325:6;2322:1;2319:13;2311:113;;;2410:1;2405:3;2401:11;2395:18;2391:1;2386:3;2382:11;2375:39;2347:2;2344:1;2340:10;2335:15;;2311:113;;;2442:6;2439:1;2436:13;2433:101;;;2522:1;2513:6;2508:3;2504:16;2497:27;2433:101;2282:258;2233:307;;;:::o;2546:102::-;2587:6;2638:2;2634:7;2629:2;2622:5;2618:14;2614:28;2604:38;;2546:102;;;:::o;2654:364::-;2742:3;2770:39;2803:5;2770:39;:::i;:::-;2825:71;2889:6;2884:3;2825:71;:::i;:::-;2818:78;;2905:52;2950:6;2945:3;2938:4;2931:5;2927:16;2905:52;:::i;:::-;2982:29;3004:6;2982:29;:::i;:::-;2977:3;2973:39;2966:46;;2746:272;2654:364;;;;:::o;3024:313::-;3137:4;3175:2;3164:9;3160:18;3152:26;;3224:9;3218:4;3214:20;3210:1;3199:9;3195:17;3188:47;3252:78;3325:4;3316:6;3252:78;:::i;:::-;3244:86;;3024:313;;;;:::o;3343:122::-;3416:24;3434:5;3416:24;:::i;:::-;3409:5;3406:35;3396:63;;3455:1;3452;3445:12;3396:63;3343:122;:::o;3471:139::-;3517:5;3555:6;3542:20;3533:29;;3571:33;3598:5;3571:33;:::i;:::-;3471:139;;;;:::o;3616:329::-;3675:6;3724:2;3712:9;3703:7;3699:23;3695:32;3692:119;;;3730:79;;:::i;:::-;3692:119;3850:1;3875:53;3920:7;3911:6;3900:9;3896:22;3875:53;:::i;:::-;3865:63;;3821:117;3616:329;;;;:::o;3951:126::-;3988:7;4028:42;4021:5;4017:54;4006:65;;3951:126;;;:::o;4083:96::-;4120:7;4149:24;4167:5;4149:24;:::i;:::-;4138:35;;4083:96;;;:::o;4185:118::-;4272:24;4290:5;4272:24;:::i;:::-;4267:3;4260:37;4185:118;;:::o;4309:222::-;4402:4;4440:2;4429:9;4425:18;4417:26;;4453:71;4521:1;4510:9;4506:17;4497:6;4453:71;:::i;:::-;4309:222;;;;:::o;4537:122::-;4610:24;4628:5;4610:24;:::i;:::-;4603:5;4600:35;4590:63;;4649:1;4646;4639:12;4590:63;4537:122;:::o;4665:139::-;4711:5;4749:6;4736:20;4727:29;;4765:33;4792:5;4765:33;:::i;:::-;4665:139;;;;:::o;4810:474::-;4878:6;4886;4935:2;4923:9;4914:7;4910:23;4906:32;4903:119;;;4941:79;;:::i;:::-;4903:119;5061:1;5086:53;5131:7;5122:6;5111:9;5107:22;5086:53;:::i;:::-;5076:63;;5032:117;5188:2;5214:53;5259:7;5250:6;5239:9;5235:22;5214:53;:::i;:::-;5204:63;;5159:118;4810:474;;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:329::-;5974:6;6023:2;6011:9;6002:7;5998:23;5994:32;5991:119;;;6029:79;;:::i;:::-;5991:119;6149:1;6174:53;6219:7;6210:6;6199:9;6195:22;6174:53;:::i;:::-;6164:63;;6120:117;5915:329;;;;:::o;6250:117::-;6359:1;6356;6349:12;6373:117;6482:1;6479;6472:12;6496:180;6544:77;6541:1;6534:88;6641:4;6638:1;6631:15;6665:4;6662:1;6655:15;6682:281;6765:27;6787:4;6765:27;:::i;:::-;6757:6;6753:40;6895:6;6883:10;6880:22;6859:18;6847:10;6844:34;6841:62;6838:88;;;6906:18;;:::i;:::-;6838:88;6946:10;6942:2;6935:22;6725:238;6682:281;;:::o;6969:129::-;7003:6;7030:20;;:::i;:::-;7020:30;;7059:33;7087:4;7079:6;7059:33;:::i;:::-;6969:129;;;:::o;7104:308::-;7166:4;7256:18;7248:6;7245:30;7242:56;;;7278:18;;:::i;:::-;7242:56;7316:29;7338:6;7316:29;:::i;:::-;7308:37;;7400:4;7394;7390:15;7382:23;;7104:308;;;:::o;7418:154::-;7502:6;7497:3;7492;7479:30;7564:1;7555:6;7550:3;7546:16;7539:27;7418:154;;;:::o;7578:412::-;7656:5;7681:66;7697:49;7739:6;7697:49;:::i;:::-;7681:66;:::i;:::-;7672:75;;7770:6;7763:5;7756:21;7808:4;7801:5;7797:16;7846:3;7837:6;7832:3;7828:16;7825:25;7822:112;;;7853:79;;:::i;:::-;7822:112;7943:41;7977:6;7972:3;7967;7943:41;:::i;:::-;7662:328;7578:412;;;;;:::o;8010:340::-;8066:5;8115:3;8108:4;8100:6;8096:17;8092:27;8082:122;;8123:79;;:::i;:::-;8082:122;8240:6;8227:20;8265:79;8340:3;8332:6;8325:4;8317:6;8313:17;8265:79;:::i;:::-;8256:88;;8072:278;8010:340;;;;:::o;8356:509::-;8425:6;8474:2;8462:9;8453:7;8449:23;8445:32;8442:119;;;8480:79;;:::i;:::-;8442:119;8628:1;8617:9;8613:17;8600:31;8658:18;8650:6;8647:30;8644:117;;;8680:79;;:::i;:::-;8644:117;8785:63;8840:7;8831:6;8820:9;8816:22;8785:63;:::i;:::-;8775:73;;8571:287;8356:509;;;;:::o;8871:654::-;8949:6;8957;9006:2;8994:9;8985:7;8981:23;8977:32;8974:119;;;9012:79;;:::i;:::-;8974:119;9132:1;9157:53;9202:7;9193:6;9182:9;9178:22;9157:53;:::i;:::-;9147:63;;9103:117;9287:2;9276:9;9272:18;9259:32;9318:18;9310:6;9307:30;9304:117;;;9340:79;;:::i;:::-;9304:117;9445:63;9500:7;9491:6;9480:9;9476:22;9445:63;:::i;:::-;9435:73;;9230:288;8871:654;;;;;:::o;9531:117::-;9640:1;9637;9630:12;9654:117;9763:1;9760;9753:12;9794:568;9867:8;9877:6;9927:3;9920:4;9912:6;9908:17;9904:27;9894:122;;9935:79;;:::i;:::-;9894:122;10048:6;10035:20;10025:30;;10078:18;10070:6;10067:30;10064:117;;;10100:79;;:::i;:::-;10064:117;10214:4;10206:6;10202:17;10190:29;;10268:3;10260:4;10252:6;10248:17;10238:8;10234:32;10231:41;10228:128;;;10275:79;;:::i;:::-;10228:128;9794:568;;;;;:::o;10368:559::-;10454:6;10462;10511:2;10499:9;10490:7;10486:23;10482:32;10479:119;;;10517:79;;:::i;:::-;10479:119;10665:1;10654:9;10650:17;10637:31;10695:18;10687:6;10684:30;10681:117;;;10717:79;;:::i;:::-;10681:117;10830:80;10902:7;10893:6;10882:9;10878:22;10830:80;:::i;:::-;10812:98;;;;10608:312;10368:559;;;;;:::o;10933:116::-;11003:21;11018:5;11003:21;:::i;:::-;10996:5;10993:32;10983:60;;11039:1;11036;11029:12;10983:60;10933:116;:::o;11055:133::-;11098:5;11136:6;11123:20;11114:29;;11152:30;11176:5;11152:30;:::i;:::-;11055:133;;;;:::o;11194:468::-;11259:6;11267;11316:2;11304:9;11295:7;11291:23;11287:32;11284:119;;;11322:79;;:::i;:::-;11284:119;11442:1;11467:53;11512:7;11503:6;11492:9;11488:22;11467:53;:::i;:::-;11457:63;;11413:117;11569:2;11595:50;11637:7;11628:6;11617:9;11613:22;11595:50;:::i;:::-;11585:60;;11540:115;11194:468;;;;;:::o;11668:307::-;11729:4;11819:18;11811:6;11808:30;11805:56;;;11841:18;;:::i;:::-;11805:56;11879:29;11901:6;11879:29;:::i;:::-;11871:37;;11963:4;11957;11953:15;11945:23;;11668:307;;;:::o;11981:410::-;12058:5;12083:65;12099:48;12140:6;12099:48;:::i;:::-;12083:65;:::i;:::-;12074:74;;12171:6;12164:5;12157:21;12209:4;12202:5;12198:16;12247:3;12238:6;12233:3;12229:16;12226:25;12223:112;;;12254:79;;:::i;:::-;12223:112;12344:41;12378:6;12373:3;12368;12344:41;:::i;:::-;12064:327;11981:410;;;;;:::o;12410:338::-;12465:5;12514:3;12507:4;12499:6;12495:17;12491:27;12481:122;;12522:79;;:::i;:::-;12481:122;12639:6;12626:20;12664:78;12738:3;12730:6;12723:4;12715:6;12711:17;12664:78;:::i;:::-;12655:87;;12471:277;12410:338;;;;:::o;12754:943::-;12849:6;12857;12865;12873;12922:3;12910:9;12901:7;12897:23;12893:33;12890:120;;;12929:79;;:::i;:::-;12890:120;13049:1;13074:53;13119:7;13110:6;13099:9;13095:22;13074:53;:::i;:::-;13064:63;;13020:117;13176:2;13202:53;13247:7;13238:6;13227:9;13223:22;13202:53;:::i;:::-;13192:63;;13147:118;13304:2;13330:53;13375:7;13366:6;13355:9;13351:22;13330:53;:::i;:::-;13320:63;;13275:118;13460:2;13449:9;13445:18;13432:32;13491:18;13483:6;13480:30;13477:117;;;13513:79;;:::i;:::-;13477:117;13618:62;13672:7;13663:6;13652:9;13648:22;13618:62;:::i;:::-;13608:72;;13403:287;12754:943;;;;;;;:::o;13703:474::-;13771:6;13779;13828:2;13816:9;13807:7;13803:23;13799:32;13796:119;;;13834:79;;:::i;:::-;13796:119;13954:1;13979:53;14024:7;14015:6;14004:9;14000:22;13979:53;:::i;:::-;13969:63;;13925:117;14081:2;14107:53;14152:7;14143:6;14132:9;14128:22;14107:53;:::i;:::-;14097:63;;14052:118;13703:474;;;;;:::o;14183:180::-;14231:77;14228:1;14221:88;14328:4;14325:1;14318:15;14352:4;14349:1;14342:15;14369:320;14413:6;14450:1;14444:4;14440:12;14430:22;;14497:1;14491:4;14487:12;14518:18;14508:81;;14574:4;14566:6;14562:17;14552:27;;14508:81;14636:2;14628:6;14625:14;14605:18;14602:38;14599:84;;;14655:18;;:::i;:::-;14599:84;14420:269;14369:320;;;:::o;14695:233::-;14835:34;14831:1;14823:6;14819:14;14812:58;14904:16;14899:2;14891:6;14887:15;14880:41;14695:233;:::o;14934:366::-;15076:3;15097:67;15161:2;15156:3;15097:67;:::i;:::-;15090:74;;15173:93;15262:3;15173:93;:::i;:::-;15291:2;15286:3;15282:12;15275:19;;14934:366;;;:::o;15306:419::-;15472:4;15510:2;15499:9;15495:18;15487:26;;15559:9;15553:4;15549:20;15545:1;15534:9;15530:17;15523:47;15587:131;15713:4;15587:131;:::i;:::-;15579:139;;15306:419;;;:::o;15731:222::-;15871:34;15867:1;15859:6;15855:14;15848:58;15940:5;15935:2;15927:6;15923:15;15916:30;15731:222;:::o;15959:366::-;16101:3;16122:67;16186:2;16181:3;16122:67;:::i;:::-;16115:74;;16198:93;16287:3;16198:93;:::i;:::-;16316:2;16311:3;16307:12;16300:19;;15959:366;;;:::o;16331:419::-;16497:4;16535:2;16524:9;16520:18;16512:26;;16584:9;16578:4;16574:20;16570:1;16559:9;16555:17;16548:47;16612:131;16738:4;16612:131;:::i;:::-;16604:139;;16331:419;;;:::o;16756:245::-;16896:34;16892:1;16884:6;16880:14;16873:58;16965:28;16960:2;16952:6;16948:15;16941:53;16756:245;:::o;17007:366::-;17149:3;17170:67;17234:2;17229:3;17170:67;:::i;:::-;17163:74;;17246:93;17335:3;17246:93;:::i;:::-;17364:2;17359:3;17355:12;17348:19;;17007:366;;;:::o;17379:419::-;17545:4;17583:2;17572:9;17568:18;17560:26;;17632:9;17626:4;17622:20;17618:1;17607:9;17603:17;17596:47;17660:131;17786:4;17660:131;:::i;:::-;17652:139;;17379:419;;;:::o;17804:159::-;17944:11;17940:1;17932:6;17928:14;17921:35;17804:159;:::o;17969:365::-;18111:3;18132:66;18196:1;18191:3;18132:66;:::i;:::-;18125:73;;18207:93;18296:3;18207:93;:::i;:::-;18325:2;18320:3;18316:12;18309:19;;17969:365;;;:::o;18340:419::-;18506:4;18544:2;18533:9;18529:18;18521:26;;18593:9;18587:4;18583:20;18579:1;18568:9;18564:17;18557:47;18621:131;18747:4;18621:131;:::i;:::-;18613:139;;18340:419;;;:::o;18765:222::-;18905:34;18901:1;18893:6;18889:14;18882:58;18974:5;18969:2;18961:6;18957:15;18950:30;18765:222;:::o;18993:366::-;19135:3;19156:67;19220:2;19215:3;19156:67;:::i;:::-;19149:74;;19232:93;19321:3;19232:93;:::i;:::-;19350:2;19345:3;19341:12;19334:19;;18993:366;;;:::o;19365:419::-;19531:4;19569:2;19558:9;19554:18;19546:26;;19618:9;19612:4;19608:20;19604:1;19593:9;19589:17;19582:47;19646:131;19772:4;19646:131;:::i;:::-;19638:139;;19365:419;;;:::o;19790:180::-;19838:77;19835:1;19828:88;19935:4;19932:1;19925:15;19959:4;19956:1;19949:15;19976:233;20015:3;20038:24;20056:5;20038:24;:::i;:::-;20029:33;;20084:66;20077:5;20074:77;20071:103;;;20154:18;;:::i;:::-;20071:103;20201:1;20194:5;20190:13;20183:20;;19976:233;;;:::o;20215:234::-;20355:34;20351:1;20343:6;20339:14;20332:58;20424:17;20419:2;20411:6;20407:15;20400:42;20215:234;:::o;20455:366::-;20597:3;20618:67;20682:2;20677:3;20618:67;:::i;:::-;20611:74;;20694:93;20783:3;20694:93;:::i;:::-;20812:2;20807:3;20803:12;20796:19;;20455:366;;;:::o;20827:419::-;20993:4;21031:2;21020:9;21016:18;21008:26;;21080:9;21074:4;21070:20;21066:1;21055:9;21051:17;21044:47;21108:131;21234:4;21108:131;:::i;:::-;21100:139;;20827:419;;;:::o;21252:305::-;21292:3;21311:20;21329:1;21311:20;:::i;:::-;21306:25;;21345:20;21363:1;21345:20;:::i;:::-;21340:25;;21499:1;21431:66;21427:74;21424:1;21421:81;21418:107;;;21505:18;;:::i;:::-;21418:107;21549:1;21546;21542:9;21535:16;;21252:305;;;;:::o;21563:167::-;21703:19;21699:1;21691:6;21687:14;21680:43;21563:167;:::o;21736:366::-;21878:3;21899:67;21963:2;21958:3;21899:67;:::i;:::-;21892:74;;21975:93;22064:3;21975:93;:::i;:::-;22093:2;22088:3;22084:12;22077:19;;21736:366;;;:::o;22108:419::-;22274:4;22312:2;22301:9;22297:18;22289:26;;22361:9;22355:4;22351:20;22347:1;22336:9;22332:17;22325:47;22389:131;22515:4;22389:131;:::i;:::-;22381:139;;22108:419;;;:::o;22533:191::-;22573:4;22593:20;22611:1;22593:20;:::i;:::-;22588:25;;22627:20;22645:1;22627:20;:::i;:::-;22622:25;;22666:1;22663;22660:8;22657:34;;;22671:18;;:::i;:::-;22657:34;22716:1;22713;22709:9;22701:17;;22533:191;;;;:::o;22730:147::-;22831:11;22868:3;22853:18;;22730:147;;;;:::o;22883:114::-;;:::o;23003:398::-;23162:3;23183:83;23264:1;23259:3;23183:83;:::i;:::-;23176:90;;23275:93;23364:3;23275:93;:::i;:::-;23393:1;23388:3;23384:11;23377:18;;23003:398;;;:::o;23407:379::-;23591:3;23613:147;23756:3;23613:147;:::i;:::-;23606:154;;23777:3;23770:10;;23407:379;;;:::o;23792:166::-;23932:18;23928:1;23920:6;23916:14;23909:42;23792:166;:::o;23964:366::-;24106:3;24127:67;24191:2;24186:3;24127:67;:::i;:::-;24120:74;;24203:93;24292:3;24203:93;:::i;:::-;24321:2;24316:3;24312:12;24305:19;;23964:366;;;:::o;24336:419::-;24502:4;24540:2;24529:9;24525:18;24517:26;;24589:9;24583:4;24579:20;24575:1;24564:9;24560:17;24553:47;24617:131;24743:4;24617:131;:::i;:::-;24609:139;;24336:419;;;:::o;24761:223::-;24901:34;24897:1;24889:6;24885:14;24878:58;24970:6;24965:2;24957:6;24953:15;24946:31;24761:223;:::o;24990:366::-;25132:3;25153:67;25217:2;25212:3;25153:67;:::i;:::-;25146:74;;25229:93;25318:3;25229:93;:::i;:::-;25347:2;25342:3;25338:12;25331:19;;24990:366;;;:::o;25362:419::-;25528:4;25566:2;25555:9;25551:18;25543:26;;25615:9;25609:4;25605:20;25601:1;25590:9;25586:17;25579:47;25643:131;25769:4;25643:131;:::i;:::-;25635:139;;25362:419;;;:::o;25787:175::-;25927:27;25923:1;25915:6;25911:14;25904:51;25787:175;:::o;25968:366::-;26110:3;26131:67;26195:2;26190:3;26131:67;:::i;:::-;26124:74;;26207:93;26296:3;26207:93;:::i;:::-;26325:2;26320:3;26316:12;26309:19;;25968:366;;;:::o;26340:419::-;26506:4;26544:2;26533:9;26529:18;26521:26;;26593:9;26587:4;26583:20;26579:1;26568:9;26564:17;26557:47;26621:131;26747:4;26621:131;:::i;:::-;26613:139;;26340:419;;;:::o;26765:231::-;26905:34;26901:1;26893:6;26889:14;26882:58;26974:14;26969:2;26961:6;26957:15;26950:39;26765:231;:::o;27002:366::-;27144:3;27165:67;27229:2;27224:3;27165:67;:::i;:::-;27158:74;;27241:93;27330:3;27241:93;:::i;:::-;27359:2;27354:3;27350:12;27343:19;;27002:366;;;:::o;27374:419::-;27540:4;27578:2;27567:9;27563:18;27555:26;;27627:9;27621:4;27617:20;27613:1;27602:9;27598:17;27591:47;27655:131;27781:4;27655:131;:::i;:::-;27647:139;;27374:419;;;:::o;27799:180::-;27847:77;27844:1;27837:88;27944:4;27941:1;27934:15;27968:4;27965:1;27958:15;27985:166;28125:18;28121:1;28113:6;28109:14;28102:42;27985:166;:::o;28157:366::-;28299:3;28320:67;28384:2;28379:3;28320:67;:::i;:::-;28313:74;;28396:93;28485:3;28396:93;:::i;:::-;28514:2;28509:3;28505:12;28498:19;;28157:366;;;:::o;28529:419::-;28695:4;28733:2;28722:9;28718:18;28710:26;;28782:9;28776:4;28772:20;28768:1;28757:9;28753:17;28746:47;28810:131;28936:4;28810:131;:::i;:::-;28802:139;;28529:419;;;:::o;28954:166::-;29094:18;29090:1;29082:6;29078:14;29071:42;28954:166;:::o;29126:366::-;29268:3;29289:67;29353:2;29348:3;29289:67;:::i;:::-;29282:74;;29365:93;29454:3;29365:93;:::i;:::-;29483:2;29478:3;29474:12;29467:19;;29126:366;;;:::o;29498:419::-;29664:4;29702:2;29691:9;29687:18;29679:26;;29751:9;29745:4;29741:20;29737:1;29726:9;29722:17;29715:47;29779:131;29905:4;29779:131;:::i;:::-;29771:139;;29498:419;;;:::o;29923:164::-;30063:16;30059:1;30051:6;30047:14;30040:40;29923:164;:::o;30093:366::-;30235:3;30256:67;30320:2;30315:3;30256:67;:::i;:::-;30249:74;;30332:93;30421:3;30332:93;:::i;:::-;30450:2;30445:3;30441:12;30434:19;;30093:366;;;:::o;30465:419::-;30631:4;30669:2;30658:9;30654:18;30646:26;;30718:9;30712:4;30708:20;30704:1;30693:9;30689:17;30682:47;30746:131;30872:4;30746:131;:::i;:::-;30738:139;;30465:419;;;:::o;30890:167::-;31030:19;31026:1;31018:6;31014:14;31007:43;30890:167;:::o;31063:366::-;31205:3;31226:67;31290:2;31285:3;31226:67;:::i;:::-;31219:74;;31302:93;31391:3;31302:93;:::i;:::-;31420:2;31415:3;31411:12;31404:19;;31063:366;;;:::o;31435:419::-;31601:4;31639:2;31628:9;31624:18;31616:26;;31688:9;31682:4;31678:20;31674:1;31663:9;31659:17;31652:47;31716:131;31842:4;31716:131;:::i;:::-;31708:139;;31435:419;;;:::o;31860:348::-;31900:7;31923:20;31941:1;31923:20;:::i;:::-;31918:25;;31957:20;31975:1;31957:20;:::i;:::-;31952:25;;32145:1;32077:66;32073:74;32070:1;32067:81;32062:1;32055:9;32048:17;32044:105;32041:131;;;32152:18;;:::i;:::-;32041:131;32200:1;32197;32193:9;32182:20;;31860:348;;;;:::o;32214:169::-;32354:21;32350:1;32342:6;32338:14;32331:45;32214:169;:::o;32389:366::-;32531:3;32552:67;32616:2;32611:3;32552:67;:::i;:::-;32545:74;;32628:93;32717:3;32628:93;:::i;:::-;32746:2;32741:3;32737:12;32730:19;;32389:366;;;:::o;32761:419::-;32927:4;32965:2;32954:9;32950:18;32942:26;;33014:9;33008:4;33004:20;33000:1;32989:9;32985:17;32978:47;33042:131;33168:4;33042:131;:::i;:::-;33034:139;;32761:419;;;:::o;33186:163::-;33326:15;33322:1;33314:6;33310:14;33303:39;33186:163;:::o;33355:366::-;33497:3;33518:67;33582:2;33577:3;33518:67;:::i;:::-;33511:74;;33594:93;33683:3;33594:93;:::i;:::-;33712:2;33707:3;33703:12;33696:19;;33355:366;;;:::o;33727:419::-;33893:4;33931:2;33920:9;33916:18;33908:26;;33980:9;33974:4;33970:20;33966:1;33955:9;33951:17;33944:47;34008:131;34134:4;34008:131;:::i;:::-;34000:139;;33727:419;;;:::o;34152:164::-;34292:16;34288:1;34280:6;34276:14;34269:40;34152:164;:::o;34322:366::-;34464:3;34485:67;34549:2;34544:3;34485:67;:::i;:::-;34478:74;;34561:93;34650:3;34561:93;:::i;:::-;34679:2;34674:3;34670:12;34663:19;;34322:366;;;:::o;34694:419::-;34860:4;34898:2;34887:9;34883:18;34875:26;;34947:9;34941:4;34937:20;34933:1;34922:9;34918:17;34911:47;34975:131;35101:4;34975:131;:::i;:::-;34967:139;;34694:419;;;:::o;35119:168::-;35259:20;35255:1;35247:6;35243:14;35236:44;35119:168;:::o;35293:366::-;35435:3;35456:67;35520:2;35515:3;35456:67;:::i;:::-;35449:74;;35532:93;35621:3;35532:93;:::i;:::-;35650:2;35645:3;35641:12;35634:19;;35293:366;;;:::o;35665:419::-;35831:4;35869:2;35858:9;35854:18;35846:26;;35918:9;35912:4;35908:20;35904:1;35893:9;35889:17;35882:47;35946:131;36072:4;35946:131;:::i;:::-;35938:139;;35665:419;;;:::o;36090:169::-;36230:21;36226:1;36218:6;36214:14;36207:45;36090:169;:::o;36265:366::-;36407:3;36428:67;36492:2;36487:3;36428:67;:::i;:::-;36421:74;;36504:93;36593:3;36504:93;:::i;:::-;36622:2;36617:3;36613:12;36606:19;;36265:366;;;:::o;36637:419::-;36803:4;36841:2;36830:9;36826:18;36818:26;;36890:9;36884:4;36880:20;36876:1;36865:9;36861:17;36854:47;36918:131;37044:4;36918:131;:::i;:::-;36910:139;;36637:419;;;:::o;37062:177::-;37202:29;37198:1;37190:6;37186:14;37179:53;37062:177;:::o;37245:366::-;37387:3;37408:67;37472:2;37467:3;37408:67;:::i;:::-;37401:74;;37484:93;37573:3;37484:93;:::i;:::-;37602:2;37597:3;37593:12;37586:19;;37245:366;;;:::o;37617:419::-;37783:4;37821:2;37810:9;37806:18;37798:26;;37870:9;37864:4;37860:20;37856:1;37845:9;37841:17;37834:47;37898:131;38024:4;37898:131;:::i;:::-;37890:139;;37617:419;;;:::o;38042:239::-;38182:34;38178:1;38170:6;38166:14;38159:58;38251:22;38246:2;38238:6;38234:15;38227:47;38042:239;:::o;38287:366::-;38429:3;38450:67;38514:2;38509:3;38450:67;:::i;:::-;38443:74;;38526:93;38615:3;38526:93;:::i;:::-;38644:2;38639:3;38635:12;38628:19;;38287:366;;;:::o;38659:419::-;38825:4;38863:2;38852:9;38848:18;38840:26;;38912:9;38906:4;38902:20;38898:1;38887:9;38883:17;38876:47;38940:131;39066:4;38940:131;:::i;:::-;38932:139;;38659:419;;;:::o;39084:182::-;39224:34;39220:1;39212:6;39208:14;39201:58;39084:182;:::o;39272:366::-;39414:3;39435:67;39499:2;39494:3;39435:67;:::i;:::-;39428:74;;39511:93;39600:3;39511:93;:::i;:::-;39629:2;39624:3;39620:12;39613:19;;39272:366;;;:::o;39644:419::-;39810:4;39848:2;39837:9;39833:18;39825:26;;39897:9;39891:4;39887:20;39883:1;39872:9;39868:17;39861:47;39925:131;40051:4;39925:131;:::i;:::-;39917:139;;39644:419;;;:::o;40069:148::-;40171:11;40208:3;40193:18;;40069:148;;;;:::o;40223:377::-;40329:3;40357:39;40390:5;40357:39;:::i;:::-;40412:89;40494:6;40489:3;40412:89;:::i;:::-;40405:96;;40510:52;40555:6;40550:3;40543:4;40536:5;40532:16;40510:52;:::i;:::-;40587:6;40582:3;40578:16;40571:23;;40333:267;40223:377;;;;:::o;40606:595::-;40834:3;40856:95;40947:3;40938:6;40856:95;:::i;:::-;40849:102;;40968:95;41059:3;41050:6;40968:95;:::i;:::-;40961:102;;41080:95;41171:3;41162:6;41080:95;:::i;:::-;41073:102;;41192:3;41185:10;;40606:595;;;;;;:::o;41207:238::-;41347:34;41343:1;41335:6;41331:14;41324:58;41416:21;41411:2;41403:6;41399:15;41392:46;41207:238;:::o;41451:366::-;41593:3;41614:67;41678:2;41673:3;41614:67;:::i;:::-;41607:74;;41690:93;41779:3;41690:93;:::i;:::-;41808:2;41803:3;41799:12;41792:19;;41451:366;;;:::o;41823:419::-;41989:4;42027:2;42016:9;42012:18;42004:26;;42076:9;42070:4;42066:20;42062:1;42051:9;42047:17;42040:47;42104:131;42230:4;42104:131;:::i;:::-;42096:139;;41823:419;;;:::o;42248:226::-;42388:34;42384:1;42376:6;42372:14;42365:58;42457:9;42452:2;42444:6;42440:15;42433:34;42248:226;:::o;42480:366::-;42622:3;42643:67;42707:2;42702:3;42643:67;:::i;:::-;42636:74;;42719:93;42808:3;42719:93;:::i;:::-;42837:2;42832:3;42828:12;42821:19;;42480:366;;;:::o;42852:419::-;43018:4;43056:2;43045:9;43041:18;43033:26;;43105:9;43099:4;43095:20;43091:1;43080:9;43076:17;43069:47;43133:131;43259:4;43133:131;:::i;:::-;43125:139;;42852:419;;;:::o;43277:225::-;43417:34;43413:1;43405:6;43401:14;43394:58;43486:8;43481:2;43473:6;43469:15;43462:33;43277:225;:::o;43508:366::-;43650:3;43671:67;43735:2;43730:3;43671:67;:::i;:::-;43664:74;;43747:93;43836:3;43747:93;:::i;:::-;43865:2;43860:3;43856:12;43849:19;;43508:366;;;:::o;43880:419::-;44046:4;44084:2;44073:9;44069:18;44061:26;;44133:9;44127:4;44123:20;44119:1;44108:9;44104:17;44097:47;44161:131;44287:4;44161:131;:::i;:::-;44153:139;;43880:419;;;:::o;44305:118::-;44342:7;44382:34;44375:5;44371:46;44360:57;;44305:118;;;:::o;44429:191::-;44469:4;44489:20;44507:1;44489:20;:::i;:::-;44484:25;;44523:20;44541:1;44523:20;:::i;:::-;44518:25;;44562:1;44559;44556:8;44553:34;;;44567:18;;:::i;:::-;44553:34;44612:1;44609;44605:9;44597:17;;44429:191;;;;:::o;44626:273::-;44666:3;44685:20;44703:1;44685:20;:::i;:::-;44680:25;;44719:20;44737:1;44719:20;:::i;:::-;44714:25;;44841:1;44805:34;44801:42;44798:1;44795:49;44792:75;;;44847:18;;:::i;:::-;44792:75;44891:1;44888;44884:9;44877:16;;44626:273;;;;:::o;44905:175::-;45045:27;45041:1;45033:6;45029:14;45022:51;44905:175;:::o;45086:366::-;45228:3;45249:67;45313:2;45308:3;45249:67;:::i;:::-;45242:74;;45325:93;45414:3;45325:93;:::i;:::-;45443:2;45438:3;45434:12;45427:19;;45086:366;;;:::o;45458:419::-;45624:4;45662:2;45651:9;45647:18;45639:26;;45711:9;45705:4;45701:20;45697:1;45686:9;45682:17;45675:47;45739:131;45865:4;45739:131;:::i;:::-;45731:139;;45458:419;;;:::o;45883:226::-;46023:34;46019:1;46011:6;46007:14;46000:58;46092:9;46087:2;46079:6;46075:15;46068:34;45883:226;:::o;46115:366::-;46257:3;46278:67;46342:2;46337:3;46278:67;:::i;:::-;46271:74;;46354:93;46443:3;46354:93;:::i;:::-;46472:2;46467:3;46463:12;46456:19;;46115:366;;;:::o;46487:419::-;46653:4;46691:2;46680:9;46676:18;46668:26;;46740:9;46734:4;46730:20;46726:1;46715:9;46711:17;46704:47;46768:131;46894:4;46768:131;:::i;:::-;46760:139;;46487:419;;;:::o;46912:230::-;47052:34;47048:1;47040:6;47036:14;47029:58;47121:13;47116:2;47108:6;47104:15;47097:38;46912:230;:::o;47148:366::-;47290:3;47311:67;47375:2;47370:3;47311:67;:::i;:::-;47304:74;;47387:93;47476:3;47387:93;:::i;:::-;47505:2;47500:3;47496:12;47489:19;;47148:366;;;:::o;47520:419::-;47686:4;47724:2;47713:9;47709:18;47701:26;;47773:9;47767:4;47763:20;47759:1;47748:9;47744:17;47737:47;47801:131;47927:4;47801:131;:::i;:::-;47793:139;;47520:419;;;:::o;47945:171::-;47984:3;48007:24;48025:5;48007:24;:::i;:::-;47998:33;;48053:4;48046:5;48043:15;48040:41;;;48061:18;;:::i;:::-;48040:41;48108:1;48101:5;48097:13;48090:20;;47945:171;;;:::o;48122:235::-;48262:34;48258:1;48250:6;48246:14;48239:58;48331:18;48326:2;48318:6;48314:15;48307:43;48122:235;:::o;48363:366::-;48505:3;48526:67;48590:2;48585:3;48526:67;:::i;:::-;48519:74;;48602:93;48691:3;48602:93;:::i;:::-;48720:2;48715:3;48711:12;48704:19;;48363:366;;;:::o;48735:419::-;48901:4;48939:2;48928:9;48924:18;48916:26;;48988:9;48982:4;48978:20;48974:1;48963:9;48959:17;48952:47;49016:131;49142:4;49016:131;:::i;:::-;49008:139;;48735:419;;;:::o;49160:98::-;49211:6;49245:5;49239:12;49229:22;;49160:98;;;:::o;49264:168::-;49347:11;49381:6;49376:3;49369:19;49421:4;49416:3;49412:14;49397:29;;49264:168;;;;:::o;49438:360::-;49524:3;49552:38;49584:5;49552:38;:::i;:::-;49606:70;49669:6;49664:3;49606:70;:::i;:::-;49599:77;;49685:52;49730:6;49725:3;49718:4;49711:5;49707:16;49685:52;:::i;:::-;49762:29;49784:6;49762:29;:::i;:::-;49757:3;49753:39;49746:46;;49528:270;49438:360;;;;:::o;49804:640::-;49999:4;50037:3;50026:9;50022:19;50014:27;;50051:71;50119:1;50108:9;50104:17;50095:6;50051:71;:::i;:::-;50132:72;50200:2;50189:9;50185:18;50176:6;50132:72;:::i;:::-;50214;50282:2;50271:9;50267:18;50258:6;50214:72;:::i;:::-;50333:9;50327:4;50323:20;50318:2;50307:9;50303:18;50296:48;50361:76;50432:4;50423:6;50361:76;:::i;:::-;50353:84;;49804:640;;;;;;;:::o;50450:141::-;50506:5;50537:6;50531:13;50522:22;;50553:32;50579:5;50553:32;:::i;:::-;50450:141;;;;:::o;50597:349::-;50666:6;50715:2;50703:9;50694:7;50690:23;50686:32;50683:119;;;50721:79;;:::i;:::-;50683:119;50841:1;50866:63;50921:7;50912:6;50901:9;50897:22;50866:63;:::i;:::-;50856:73;;50812:127;50597:349;;;;:::o;50952:238::-;51092:34;51088:1;51080:6;51076:14;51069:58;51161:21;51156:2;51148:6;51144:15;51137:46;50952:238;:::o;51196:366::-;51338:3;51359:67;51423:2;51418:3;51359:67;:::i;:::-;51352:74;;51435:93;51524:3;51435:93;:::i;:::-;51553:2;51548:3;51544:12;51537:19;;51196:366;;;:::o;51568:419::-;51734:4;51772:2;51761:9;51757:18;51749:26;;51821:9;51815:4;51811:20;51807:1;51796:9;51792:17;51785:47;51849:131;51975:4;51849:131;:::i;:::-;51841:139;;51568:419;;;:::o;51993:180::-;52041:77;52038:1;52031:88;52138:4;52135:1;52128:15;52162:4;52159:1;52152:15;52179:185;52219:1;52236:20;52254:1;52236:20;:::i;:::-;52231:25;;52270:20;52288:1;52270:20;:::i;:::-;52265:25;;52309:1;52299:35;;52314:18;;:::i;:::-;52299:35;52356:1;52353;52349:9;52344:14;;52179:185;;;;:::o;52370:176::-;52402:1;52419:20;52437:1;52419:20;:::i;:::-;52414:25;;52453:20;52471:1;52453:20;:::i;:::-;52448:25;;52492:1;52482:35;;52497:18;;:::i;:::-;52482:35;52538:1;52535;52531:9;52526:14;;52370:176;;;;:::o;52552:221::-;52692:34;52688:1;52680:6;52676:14;52669:58;52761:4;52756:2;52748:6;52744:15;52737:29;52552:221;:::o;52779:366::-;52921:3;52942:67;53006:2;53001:3;52942:67;:::i;:::-;52935:74;;53018:93;53107:3;53018:93;:::i;:::-;53136:2;53131:3;53127:12;53120:19;;52779:366;;;:::o;53151:419::-;53317:4;53355:2;53344:9;53340:18;53332:26;;53404:9;53398:4;53394:20;53390:1;53379:9;53375:17;53368:47;53432:131;53558:4;53432:131;:::i;:::-;53424:139;;53151:419;;;:::o;53576:180::-;53716:32;53712:1;53704:6;53700:14;53693:56;53576:180;:::o;53762:366::-;53904:3;53925:67;53989:2;53984:3;53925:67;:::i;:::-;53918:74;;54001:93;54090:3;54001:93;:::i;:::-;54119:2;54114:3;54110:12;54103:19;;53762:366;;;:::o;54134:419::-;54300:4;54338:2;54327:9;54323:18;54315:26;;54387:9;54381:4;54377:20;54373:1;54362:9;54358:17;54351:47;54415:131;54541:4;54415:131;:::i;:::-;54407:139;;54134:419;;;:::o;54559:222::-;54699:34;54695:1;54687:6;54683:14;54676:58;54768:5;54763:2;54755:6;54751:15;54744:30;54559:222;:::o;54787:366::-;54929:3;54950:67;55014:2;55009:3;54950:67;:::i;:::-;54943:74;;55026:93;55115:3;55026:93;:::i;:::-;55144:2;55139:3;55135:12;55128:19;;54787:366;;;:::o;55159:419::-;55325:4;55363:2;55352:9;55348:18;55340:26;;55412:9;55406:4;55402:20;55398:1;55387:9;55383:17;55376:47;55440:131;55566:4;55440:131;:::i;:::-;55432:139;;55159:419;;;:::o

Swarm Source

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