ETH Price: $2,276.68 (-2.87%)

Contract

0xa2278Eb738673efA0b2C0D9DD4CEd60B49681E34
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Mint178715492023-08-08 16:59:35395 days ago1691513975IN
0xa2278Eb7...B49681E34
1 ETH0.0067890530.87296153
Mint169839792023-04-05 17:13:47520 days ago1680714827IN
0xa2278Eb7...B49681E34
0.1 ETH0.0084325639.91541202
Mint169697172023-04-03 16:36:35522 days ago1680539795IN
0xa2278Eb7...B49681E34
0.1 ETH0.0072002234.08212431
Mint169480282023-03-31 15:20:11525 days ago1680276011IN
0xa2278Eb7...B49681E34
0.1 ETH0.007670336.30724104
Mint168802602023-03-22 2:48:23535 days ago1679453303IN
0xa2278Eb7...B49681E34
0.1 ETH0.0026746612.66049773
Mint168783982023-03-21 20:31:47535 days ago1679430707IN
0xa2278Eb7...B49681E34
0.15 ETH0.0045479821.09629291
Mint168781882023-03-21 19:49:47535 days ago1679428187IN
0xa2278Eb7...B49681E34
0.1 ETH0.0040227518.79256868
Mint168781722023-03-21 19:46:35535 days ago1679427995IN
0xa2278Eb7...B49681E34
1 ETH0.0045740920.53900166
Mint168781612023-03-21 19:43:59535 days ago1679427839IN
0xa2278Eb7...B49681E34
0.1 ETH0.0035959416.79870394
Mint168781582023-03-21 19:43:23535 days ago1679427803IN
0xa2278Eb7...B49681E34
0.1 ETH0.0037509517.52282302
Mint168781552023-03-21 19:42:47535 days ago1679427767IN
0xa2278Eb7...B49681E34
0.1 ETH0.0033372815.59033783
Mint168781502023-03-21 19:41:47535 days ago1679427707IN
0xa2278Eb7...B49681E34
0.1 ETH0.0032727715.49161717
Mint168701412023-03-20 16:41:59536 days ago1679330519IN
0xa2278Eb7...B49681E34
0.1 ETH0.0049915923.9449931
Set Prices168701252023-03-20 16:38:47536 days ago1679330327IN
0xa2278Eb7...B49681E34
0 ETH0.0010382926.2507664
Enable Minting168700612023-03-20 16:25:59536 days ago1679329559IN
0xa2278Eb7...B49681E34
0 ETH0.0013963930.5524049
Disable Minting168686622023-03-20 11:43:11536 days ago1679312591IN
0xa2278Eb7...B49681E34
0 ETH0.0003348714.07931921
0x60806040168685552023-03-20 11:21:35536 days ago1679311295IN
 Create: CatMoney
0 ETH0.0756548618.44090496

Latest 13 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
178715492023-08-08 16:59:35395 days ago1691513975
0xa2278Eb7...B49681E34
1 ETH
169839792023-04-05 17:13:47520 days ago1680714827
0xa2278Eb7...B49681E34
0.1 ETH
169697172023-04-03 16:36:35522 days ago1680539795
0xa2278Eb7...B49681E34
0.1 ETH
169480282023-03-31 15:20:11525 days ago1680276011
0xa2278Eb7...B49681E34
0.1 ETH
168802602023-03-22 2:48:23535 days ago1679453303
0xa2278Eb7...B49681E34
0.1 ETH
168783982023-03-21 20:31:47535 days ago1679430707
0xa2278Eb7...B49681E34
0.15 ETH
168781882023-03-21 19:49:47535 days ago1679428187
0xa2278Eb7...B49681E34
0.1 ETH
168781722023-03-21 19:46:35535 days ago1679427995
0xa2278Eb7...B49681E34
1 ETH
168781612023-03-21 19:43:59535 days ago1679427839
0xa2278Eb7...B49681E34
0.1 ETH
168781582023-03-21 19:43:23535 days ago1679427803
0xa2278Eb7...B49681E34
0.1 ETH
168781552023-03-21 19:42:47535 days ago1679427767
0xa2278Eb7...B49681E34
0.1 ETH
168781502023-03-21 19:41:47535 days ago1679427707
0xa2278Eb7...B49681E34
0.1 ETH
168701412023-03-20 16:41:59536 days ago1679330519
0xa2278Eb7...B49681E34
0.1 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CatMoney

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-20
*/

/** This NFT Contract was made by @devzeeri **/
// SPDX-License-Identifier: MIT
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;
    }
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );
    constructor() {
        _transferOwnership(_msgSender());
    }
    modifier onlyOwner() {
        _checkOwner();
        _;
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

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

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

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

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

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

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }
    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionCallWithValue(
                target,
                data,
                0,
                "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"
        );
        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return
            verifyCallResultFromTarget(
                target,
                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) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return
            verifyCallResultFromTarget(
                target,
                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) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage)
        private
        pure
    {
        if (returndata.length > 0) {
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

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

library Math {
    enum Rounding {
        Down, // Toward negative infinity
        Up, // Toward infinity
        Zero // Toward zero
    }
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a > b ? a : b;
    }
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        return (a & b) + (a ^ b) / 2;
    }
    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        return a == 0 ? 0 : (a - 1) / b + 1;
    }
    function mulDiv(
        uint256 x,
        uint256 y,
        uint256 denominator
    ) internal pure returns (uint256 result) {
        unchecked {
            uint256 prod0; // Least significant 256 bits of the product
            uint256 prod1; // Most significant 256 bits of the product
            assembly {
                let mm := mulmod(x, y, not(0))
                prod0 := mul(x, y)
                prod1 := sub(sub(mm, prod0), lt(mm, prod0))
            }
            if (prod1 == 0) {
                return prod0 / denominator;
            }
            require(denominator > prod1);

            uint256 remainder;
            assembly {
                remainder := mulmod(x, y, denominator)
                prod1 := sub(prod1, gt(remainder, prod0))
                prod0 := sub(prod0, remainder)
            }
            uint256 twos = denominator & (~denominator + 1);
            assembly {
                denominator := div(denominator, twos)
                prod0 := div(prod0, twos)
                twos := add(div(sub(0, twos), twos), 1)
            }
            prod0 |= prod1 * twos;
            uint256 inverse = (3 * denominator) ^ 2;
            inverse *= 2 - denominator * inverse; // inverse mod 2^8
            inverse *= 2 - denominator * inverse; // inverse mod 2^16
            inverse *= 2 - denominator * inverse; // inverse mod 2^32
            inverse *= 2 - denominator * inverse; // inverse mod 2^64
            inverse *= 2 - denominator * inverse; // inverse mod 2^128
            inverse *= 2 - denominator * inverse; // inverse mod 2^256
            result = prod0 * inverse;
            return result;
        }
    }
    function mulDiv(
        uint256 x,
        uint256 y,
        uint256 denominator,
        Rounding rounding
    ) internal pure returns (uint256) {
        uint256 result = mulDiv(x, y, denominator);
        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {
            result += 1;
        }
        return result;
    }
    function sqrt(uint256 a) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`
        uint256 result = 1 << (log2(a) >> 1);
        unchecked {
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            return min(result, a / result);
        }
    }
    function sqrt(uint256 a, Rounding rounding)
        internal
        pure
        returns (uint256)
    {
        unchecked {
            uint256 result = sqrt(a);
            return
                result +
                (rounding == Rounding.Up && result * result < a ? 1 : 0);
        }
    }
    function log2(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 128;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 64;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 32;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 16;
            }
            if (value >> 8 > 0) {
                value >>= 8;
                result += 8;
            }
            if (value >> 4 > 0) {
                value >>= 4;
                result += 4;
            }
            if (value >> 2 > 0) {
                value >>= 2;
                result += 2;
            }
            if (value >> 1 > 0) {
                result += 1;
            }
        }
        return result;
    }
    function log2(uint256 value, Rounding rounding)
        internal
        pure
        returns (uint256)
    {
        unchecked {
            uint256 result = log2(value);
            return
                result +
                (rounding == Rounding.Up && 1 << result < value ? 1 : 0);
        }
    }
    function log10(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >= 10**64) {
                value /= 10**64;
                result += 64;
            }
            if (value >= 10**32) {
                value /= 10**32;
                result += 32;
            }
            if (value >= 10**16) {
                value /= 10**16;
                result += 16;
            }
            if (value >= 10**8) {
                value /= 10**8;
                result += 8;
            }
            if (value >= 10**4) {
                value /= 10**4;
                result += 4;
            }
            if (value >= 10**2) {
                value /= 10**2;
                result += 2;
            }
            if (value >= 10**1) {
                result += 1;
            }
        }
        return result;
    }
    function log10(uint256 value, Rounding rounding)
        internal
        pure
        returns (uint256)
    {
        unchecked {
            uint256 result = log10(value);
            return
                result +
                (rounding == Rounding.Up && 10**result < value ? 1 : 0);
        }
    }
    function log256(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 16;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 8;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 4;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 2;
            }
            if (value >> 8 > 0) {
                result += 1;
            }
        }
        return result;
    }
    function log256(uint256 value, Rounding rounding)
        internal
        pure
        returns (uint256)
    {
        unchecked {
            uint256 result = log256(value);
            return
                result +
                (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);
        }
    }
}

library Strings {
    bytes16 private constant _SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;
    function toString(uint256 value) internal pure returns (string memory) {
        unchecked {
            uint256 length = Math.log10(value) + 1;
            string memory buffer = new string(length);
            uint256 ptr;
            assembly {
                ptr := add(buffer, add(32, length))
            }
            while (true) {
                ptr--;
                assembly {
                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))
                }
                value /= 10;
                if (value == 0) break;
            }
            return buffer;
        }
    }
    function toHexString(uint256 value) internal pure returns (string memory) {
        unchecked {
            return toHexString(value, Math.log256(value) + 1);
        }
    }
    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] = _SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;
    string private _name;
    string private _symbol;
    mapping(uint256 => address) private _owners;
    mapping(address => uint256) private _balances;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override(ERC165, IERC165)
        returns (bool)
    {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }
    function balanceOf(address owner)
        public
        view
        virtual
        override
        returns (uint256)
    {
        require(
            owner != address(0),
            "ERC721: address zero is not a valid owner"
        );
        return _balances[owner];
    }
    function ownerOf(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        address owner = _ownerOf(tokenId);
        require(owner != address(0), "ERC721: invalid token ID");
        return owner;
    }
    function name() public view virtual override returns (string memory) {
        return _name;
    }
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        _requireMinted(tokenId);

        string memory baseURI = _baseURI();
        return
            bytes(baseURI).length > 0
                ? string(abi.encodePacked(baseURI, tokenId.toString(), ".json"))
                : "";
    }
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

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

        _approve(to, tokenId);
    }
    function getApproved(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        _requireMinted(tokenId);

        return _tokenApprovals[tokenId];
    }
    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        _setApprovalForAll(_msgSender(), operator, approved);
    }
    function isApprovedForAll(address owner, address operator)
        public
        view
        virtual
        override
        returns (bool)
    {
        return _operatorApprovals[owner][operator];
    }
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        require(
            _isApprovedOrOwner(_msgSender(), tokenId),
            "ERC721: caller is not token owner or approved"
        );

        _transfer(from, to, tokenId);
    }
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) public virtual override {
        require(
            _isApprovedOrOwner(_msgSender(), tokenId),
            "ERC721: caller is not token owner or 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 _ownerOf(uint256 tokenId) internal view virtual returns (address) {
        return _owners[tokenId];
    }
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _ownerOf(tokenId) != address(0);
    }
    function _isApprovedOrOwner(address spender, uint256 tokenId)
        internal
        view
        virtual
        returns (bool)
    {
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner ||
            isApprovedForAll(owner, spender) ||
            getApproved(tokenId) == spender);
    }
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId, 1);
        require(!_exists(tokenId), "ERC721: token already minted");

        unchecked {
            _balances[to] += 1;
        }

        _owners[tokenId] = to;

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

        _afterTokenTransfer(address(0), to, tokenId, 1);
    }
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId, 1);
        owner = ERC721.ownerOf(tokenId);
        delete _tokenApprovals[tokenId];

        unchecked {
            _balances[owner] -= 1;
        }
        delete _owners[tokenId];

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

        _afterTokenTransfer(owner, address(0), tokenId, 1);
    }
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(
            ERC721.ownerOf(tokenId) == from,
            "ERC721: transfer from incorrect owner"
        );
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId, 1);
        require(
            ERC721.ownerOf(tokenId) == from,
            "ERC721: transfer from incorrect owner"
        );
        delete _tokenApprovals[tokenId];

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId, 1);
    }
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }
    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) private returns (bool) {
        if (to.isContract()) {
            try
                IERC721Receiver(to).onERC721Received(
                    _msgSender(),
                    from,
                    tokenId,
                    data
                )
            returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert(
                        "ERC721: transfer to non ERC721Receiver implementer"
                    );
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 firstTokenId,
        uint256 batchSize
    ) internal virtual {}
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 firstTokenId,
        uint256 batchSize
    ) internal virtual {}
    function __unsafe_increaseBalance(address account, uint256 amount)
        internal
    {
        _balances[account] += amount;
    }
}

interface IERC721Enumerable is IERC721 {
    function totalSupply() external view returns (uint256);
    function tokenOfOwnerByIndex(address owner, uint256 index)
        external
        view
        returns (uint256);
    function tokenByIndex(uint256 index) external view returns (uint256);
}

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 firstTokenId,
        uint256 batchSize
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, firstTokenId, batchSize);

        if (batchSize > 1) {
            revert("ERC721Enumerable: consecutive transfers not supported");
        }

        uint256 tokenId = firstTokenId;

        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 CatMoney is ERC721Enumerable, Ownable {
    address private feeAddress;

    uint256 public goldTier1 = 150000000 gwei; // 0.15 eth
    uint256 public goldTier2 = 200000000 gwei; // 0.2 eth
    uint256 public platinumTier = 1 ether; // 1 eth
    uint256 public diamondTier = 2 ether; // 2 eth

    uint256[2] private goldTier1Range = [1, 83];
    uint256[2] private goldTier2Range = [84, 166];
    uint256[2] private platinumTierRange = [167, 282];
    uint256[2] private diamondTierRange = [283, 333];

    uint256 maxSupply = 333;

    mapping(uint256 => bool) private nftSoldStatus;
    mapping(uint256 => address) private nftOwner;

    string private baseURI;

    bool canMint = true;

    constructor(address _feeAddress, string memory _metadataBaseURL)
        ERC721("Cat Money Collection", "Cat Money")
    {
        feeAddress = _feeAddress;
        baseURI = _metadataBaseURL;
    }

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

    function mint(uint256 _tokenId) external payable {
        require(canMint, "Mint is disabled");
        uint256 mintPrice = getMintPrice(_tokenId);
        require(mintPrice == msg.value, "Insufficient balance");

        nftSoldStatus[_tokenId] = true;
        nftOwner[_tokenId] = msg.sender;

        _mint(msg.sender, _tokenId);
        (bool response, ) = feeAddress.call{value: mintPrice}("");
        require(response);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 firstTokenId,
        uint256 batchSize
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, firstTokenId, batchSize);
        nftSoldStatus[firstTokenId] = true;
        nftOwner[firstTokenId] = to;
    }

    function getMintPrice(uint256 _tokenId) public view returns (uint256) {
        require(_tokenId <= maxSupply, "Invalid token id");

        if (_tokenId >= goldTier1Range[0] && _tokenId <= goldTier1Range[1]) {
            return goldTier1;
        }
        if (_tokenId >= goldTier2Range[0] && _tokenId <= goldTier2Range[1]) {
            return goldTier2;
        }
        if (
            _tokenId >= platinumTierRange[0] && _tokenId <= platinumTierRange[1]
        ) {
            return platinumTier;
        }
        if (
            _tokenId >= diamondTierRange[0] && _tokenId <= diamondTierRange[1]
        ) {
            return diamondTier;
        }
        return 0;
    }

    function getNFTSoldStatus() external view returns (bool[333] memory) {
        bool[333] memory data;

        for (uint256 x = 0; x < 333; x++) {
            data[x] = nftSoldStatus[x + 1];
        }

        return data;
    }

    function getNFTOwner() external view returns (address[333] memory) {
        address[333] memory data;

        for (uint256 x = 0; x < 333; x++) {
            data[x] = nftOwner[x + 1];
        }

        return data;
    }

    function setFeeAddress(address _feeAddress) external onlyOwner {
        feeAddress = _feeAddress;
    }

    function setPrices(
        uint256 _goldTier1,
        uint256 _goldTier2,
        uint256 _platinumTier,
        uint256 _diamondTier
    ) external onlyOwner {
        goldTier1 = _goldTier1;
        goldTier2 = _goldTier2;
        platinumTier = _platinumTier;
        diamondTier = _diamondTier;
    }

    function disableMinting() external onlyOwner {
        canMint = false;
    }

    function enableMinting() external onlyOwner {
        canMint = true;
    }

    function setBaseURI(string memory _metadataBaseURL) external onlyOwner {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_feeAddress","type":"address"},{"internalType":"string","name":"_metadataBaseURL","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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":"diamondTier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNFTOwner","outputs":[{"internalType":"address[333]","name":"","type":"address[333]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNFTSoldStatus","outputs":[{"internalType":"bool[333]","name":"","type":"bool[333]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"goldTier1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"goldTier2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"_tokenId","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"platinumTier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_metadataBaseURL","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeAddress","type":"address"}],"name":"setFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_goldTier1","type":"uint256"},{"internalType":"uint256","name":"_goldTier2","type":"uint256"},{"internalType":"uint256","name":"_platinumTier","type":"uint256"},{"internalType":"uint256","name":"_diamondTier","type":"uint256"}],"name":"setPrices","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":[{"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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052670214e8348c4f0000600c556702c68af0bb140000600d55670de0b6b3a7640000600e55671bc16d674ec80000600f556040518060400160405280600160ff168152602001605360ff168152506010906002620000639291906200032a565b506040518060400160405280605460ff16815260200160a660ff168152506012906002620000939291906200032a565b50604051806040016040528060a761ffff16815260200161011a61ffff168152506014906002620000c692919062000374565b50604051806040016040528061011b61ffff16815260200161014d61ffff168152506016906002620000fa92919062000374565b5061014d6018556001601c60006101000a81548160ff0219169083151502179055503480156200012957600080fd5b50604051620049de380380620049de83398181016040528101906200014f9190620005d6565b6040518060400160405280601481526020017f436174204d6f6e657920436f6c6c656374696f6e0000000000000000000000008152506040518060400160405280600981526020017f436174204d6f6e657900000000000000000000000000000000000000000000008152508160009081620001cc919062000887565b508060019081620001de919062000887565b50505062000201620001f56200025c60201b60201c565b6200026460201b60201c565b81600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601b908162000253919062000887565b5050506200096e565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b826002810192821562000361579160200282015b8281111562000360578251829060ff169055916020019190600101906200033e565b5b509050620003709190620003bf565b5090565b8260028101928215620003ac579160200282015b82811115620003ab578251829061ffff1690559160200191906001019062000388565b5b509050620003bb9190620003bf565b5090565b5b80821115620003da576000816000905550600101620003c0565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200041f82620003f2565b9050919050565b620004318162000412565b81146200043d57600080fd5b50565b600081519050620004518162000426565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004ac8262000461565b810181811067ffffffffffffffff82111715620004ce57620004cd62000472565b5b80604052505050565b6000620004e3620003de565b9050620004f18282620004a1565b919050565b600067ffffffffffffffff82111562000514576200051362000472565b5b6200051f8262000461565b9050602081019050919050565b60005b838110156200054c5780820151818401526020810190506200052f565b60008484015250505050565b60006200056f6200056984620004f6565b620004d7565b9050828152602081018484840111156200058e576200058d6200045c565b5b6200059b8482856200052c565b509392505050565b600082601f830112620005bb57620005ba62000457565b5b8151620005cd84826020860162000558565b91505092915050565b60008060408385031215620005f057620005ef620003e8565b5b6000620006008582860162000440565b925050602083015167ffffffffffffffff811115620006245762000623620003ed565b5b6200063285828601620005a3565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200068f57607f821691505b602082108103620006a557620006a462000647565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200070f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620006d0565b6200071b8683620006d0565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000768620007626200075c8462000733565b6200073d565b62000733565b9050919050565b6000819050919050565b620007848362000747565b6200079c62000793826200076f565b848454620006dd565b825550505050565b600090565b620007b3620007a4565b620007c081848462000779565b505050565b5b81811015620007e857620007dc600082620007a9565b600181019050620007c6565b5050565b601f82111562000837576200080181620006ab565b6200080c84620006c0565b810160208510156200081c578190505b620008346200082b85620006c0565b830182620007c5565b50505b505050565b600082821c905092915050565b60006200085c600019846008026200083c565b1980831691505092915050565b600062000877838362000849565b9150826002028217905092915050565b62000892826200063c565b67ffffffffffffffff811115620008ae57620008ad62000472565b5b620008ba825462000676565b620008c7828285620007ec565b600060209050601f831160018114620008ff5760008415620008ea578287015190505b620008f6858262000869565b86555062000966565b601f1984166200090f86620006ab565b60005b82811015620009395784890151825560018201915060208501945060208101905062000912565b8683101562000959578489015162000955601f89168262000849565b8355505b6001600288020188555050505b505050505050565b614060806200097e6000396000f3fe6080604052600436106101e35760003560e01c80637e5cd5c111610102578063b88d4fde11610095578063d8e8685411610064578063d8e86854146106e7578063e797ec1b14610710578063e985e9c514610727578063f2fde38b14610764576101e3565b8063b88d4fde1461062b578063bede64ba14610654578063c87b56dd1461067f578063d0a6efb0146106bc576101e3565b8063a0712d68116100d1578063a0712d6814610590578063a13709f8146105ac578063a22cb465146105d7578063b091aca614610600576101e3565b80637e5cd5c1146104fa5780638705fcd4146105115780638da5cb5b1461053a57806395d89b4114610565576101e3565b806342842e0e1161017a5780635b5a0636116101495780635b5a06361461043e5780636352211e1461046957806370a08231146104a6578063715018a6146104e3576101e3565b806342842e0e146103725780634f6ccce71461039b578063559e775b146103d857806355f804b314610415576101e3565b806318160ddd116101b657806318160ddd146102b657806323b872dd146102e15780632f745c591461030a5780633e98dee414610347576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190612aa9565b61078d565b60405161021c9190612af1565b60405180910390f35b34801561023157600080fd5b5061023a610807565b6040516102479190612b9c565b60405180910390f35b34801561025c57600080fd5b5061027760048036038101906102729190612bf4565b610899565b6040516102849190612c62565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af9190612ca9565b6108df565b005b3480156102c257600080fd5b506102cb6109f6565b6040516102d89190612cf8565b60405180910390f35b3480156102ed57600080fd5b5061030860048036038101906103039190612d13565b610a03565b005b34801561031657600080fd5b50610331600480360381019061032c9190612ca9565b610a63565b60405161033e9190612cf8565b60405180910390f35b34801561035357600080fd5b5061035c610b08565b6040516103699190612cf8565b60405180910390f35b34801561037e57600080fd5b5061039960048036038101906103949190612d13565b610b0e565b005b3480156103a757600080fd5b506103c260048036038101906103bd9190612bf4565b610b2e565b6040516103cf9190612cf8565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa9190612bf4565b610b9f565b60405161040c9190612cf8565b60405180910390f35b34801561042157600080fd5b5061043c60048036038101906104379190612e9b565b610d1c565b005b34801561044a57600080fd5b50610453610d27565b6040516104609190612cf8565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b9190612bf4565b610d2d565b60405161049d9190612c62565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c89190612ee4565b610db3565b6040516104da9190612cf8565b60405180910390f35b3480156104ef57600080fd5b506104f8610e6a565b005b34801561050657600080fd5b5061050f610e7e565b005b34801561051d57600080fd5b5061053860048036038101906105339190612ee4565b610ea3565b005b34801561054657600080fd5b5061054f610eef565b60405161055c9190612c62565b60405180910390f35b34801561057157600080fd5b5061057a610f19565b6040516105879190612b9c565b60405180910390f35b6105aa60048036038101906105a59190612bf4565b610fab565b005b3480156105b857600080fd5b506105c161116e565b6040516105ce9190612fbd565b60405180910390f35b3480156105e357600080fd5b506105fe60048036038101906105f99190613005565b6111f6565b005b34801561060c57600080fd5b5061061561120c565b6040516106229190612cf8565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d91906130e6565b611212565b005b34801561066057600080fd5b50610669611274565b6040516106769190613215565b60405180910390f35b34801561068b57600080fd5b506106a660048036038101906106a19190612bf4565b611337565b6040516106b39190612b9c565b60405180910390f35b3480156106c857600080fd5b506106d161139f565b6040516106de9190612cf8565b60405180910390f35b3480156106f357600080fd5b5061070e60048036038101906107099190613231565b6113a5565b005b34801561071c57600080fd5b506107256113cf565b005b34801561073357600080fd5b5061074e60048036038101906107499190613298565b6113f4565b60405161075b9190612af1565b60405180910390f35b34801561077057600080fd5b5061078b60048036038101906107869190612ee4565b611488565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061080057506107ff8261150b565b5b9050919050565b60606000805461081690613307565b80601f016020809104026020016040519081016040528092919081815260200182805461084290613307565b801561088f5780601f106108645761010080835404028352916020019161088f565b820191906000526020600020905b81548152906001019060200180831161087257829003601f168201915b5050505050905090565b60006108a4826115ed565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108ea82610d2d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361095a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610951906133aa565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610979611638565b73ffffffffffffffffffffffffffffffffffffffff1614806109a857506109a7816109a2611638565b6113f4565b5b6109e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109de9061343c565b60405180910390fd5b6109f18383611640565b505050565b6000600880549050905090565b610a14610a0e611638565b826116f9565b610a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4a906134ce565b60405180910390fd5b610a5e83838361178e565b505050565b6000610a6e83610db3565b8210610aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa690613560565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600c5481565b610b2983838360405180602001604052806000815250611212565b505050565b6000610b386109f6565b8210610b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b70906135f2565b60405180910390fd5b60088281548110610b8d57610b8c613612565b5b90600052602060002001549050919050565b6000601854821115610be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdd9061368d565b60405180910390fd5b6010600060028110610bfb57610bfa613612565b5b01548210158015610c2257506010600160028110610c1c57610c1b613612565b5b01548211155b15610c3157600c549050610d17565b6012600060028110610c4657610c45613612565b5b01548210158015610c6d57506012600160028110610c6757610c66613612565b5b01548211155b15610c7c57600d549050610d17565b6014600060028110610c9157610c90613612565b5b01548210158015610cb857506014600160028110610cb257610cb1613612565b5b01548211155b15610cc757600e549050610d17565b6016600060028110610cdc57610cdb613612565b5b01548210158015610d0357506016600160028110610cfd57610cfc613612565b5b01548211155b15610d1257600f549050610d17565b600090505b919050565b610d24611a87565b50565b600e5481565b600080610d3983611b05565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da1906136f9565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1a9061378b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e72611a87565b610e7c6000611b42565b565b610e86611a87565b6000601c60006101000a81548160ff021916908315150217905550565b610eab611a87565b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610f2890613307565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5490613307565b8015610fa15780601f10610f7657610100808354040283529160200191610fa1565b820191906000526020600020905b815481529060010190602001808311610f8457829003601f168201915b5050505050905090565b601c60009054906101000a900460ff16610ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff1906137f7565b60405180910390fd5b600061100582610b9f565b9050348114611049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104090613863565b60405180910390fd5b60016019600084815260200190815260200160002060006101000a81548160ff02191690831515021790555033601a600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506110d13383611c08565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611119906138b4565b60006040518083038185875af1925050503d8060008114611156576040519150601f19603f3d011682016040523d82523d6000602084013e61115b565b606091505b505090508061116957600080fd5b505050565b6111766129f5565b61117e6129f5565b60005b61014d8110156111ee576019600060018361119c91906138f8565b815260200190815260200160002060009054906101000a900460ff16828261014d81106111cc576111cb613612565b5b60200201901515908115158152505080806111e69061392c565b915050611181565b508091505090565b611208611201611638565b8383611e25565b5050565b600f5481565b61122361121d611638565b836116f9565b611262576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611259906134ce565b60405180910390fd5b61126e84848484611f91565b50505050565b61127c612a19565b611284612a19565b60005b61014d81101561132f57601a60006001836112a291906138f8565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828261014d81106112e5576112e4613612565b5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806113279061392c565b915050611287565b508091505090565b6060611342826115ed565b600061134c611fed565b9050600081511161136c5760405180602001604052806000815250611397565b806113768461207f565b6040516020016113879291906139fc565b6040516020818303038152906040525b915050919050565b600d5481565b6113ad611a87565b83600c8190555082600d8190555081600e8190555080600f8190555050505050565b6113d7611a87565b6001601c60006101000a81548160ff021916908315150217905550565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611490611a87565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f690613a9d565b60405180910390fd5b61150881611b42565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806115d657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806115e657506115e58261214d565b5b9050919050565b6115f6816121b7565b611635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162c906136f9565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166116b383610d2d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061170583610d2d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611747575061174681856113f4565b5b8061178557508373ffffffffffffffffffffffffffffffffffffffff1661176d84610899565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166117ae82610d2d565b73ffffffffffffffffffffffffffffffffffffffff1614611804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fb90613b2f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186a90613bc1565b60405180910390fd5b61188083838360016121f8565b8273ffffffffffffffffffffffffffffffffffffffff166118a082610d2d565b73ffffffffffffffffffffffffffffffffffffffff16146118f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ed90613b2f565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611a828383836001612288565b505050565b611a8f611638565b73ffffffffffffffffffffffffffffffffffffffff16611aad610eef565b73ffffffffffffffffffffffffffffffffffffffff1614611b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afa90613c2d565b60405180910390fd5b565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6e90613c99565b60405180910390fd5b611c80816121b7565b15611cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb790613d05565b60405180910390fd5b611cce6000838360016121f8565b611cd7816121b7565b15611d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0e90613d05565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611e21600083836001612288565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8a90613d71565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f849190612af1565b60405180910390a3505050565b611f9c84848461178e565b611fa88484848461228e565b611fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fde90613e03565b60405180910390fd5b50505050565b6060601b8054611ffc90613307565b80601f016020809104026020016040519081016040528092919081815260200182805461202890613307565b80156120755780601f1061204a57610100808354040283529160200191612075565b820191906000526020600020905b81548152906001019060200180831161205857829003601f168201915b5050505050905090565b60606000600161208e84612415565b01905060008167ffffffffffffffff8111156120ad576120ac612d70565b5b6040519080825280601f01601f1916602001820160405280156120df5781602001600182028036833780820191505090505b509050600082602001820190505b600115612142578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161213657612135613e23565b5b049450600085036120ed575b819350505050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166121d983611b05565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b61220484848484612568565b60016019600084815260200190815260200160002060006101000a81548160ff02191690831515021790555082601a600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b50505050565b60006122af8473ffffffffffffffffffffffffffffffffffffffff166126c6565b15612408578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026122d8611638565b8786866040518563ffffffff1660e01b81526004016122fa9493929190613ea7565b6020604051808303816000875af192505050801561233657506040513d601f19601f820116820180604052508101906123339190613f08565b60015b6123b8573d8060008114612366576040519150601f19603f3d011682016040523d82523d6000602084013e61236b565b606091505b5060008151036123b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a790613e03565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061240d565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612473577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161246957612468613e23565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106124b0576d04ee2d6d415b85acef810000000083816124a6576124a5613e23565b5b0492506020810190505b662386f26fc1000083106124df57662386f26fc1000083816124d5576124d4613e23565b5b0492506010810190505b6305f5e1008310612508576305f5e10083816124fe576124fd613e23565b5b0492506008810190505b612710831061252d57612710838161252357612522613e23565b5b0492506004810190505b60648310612550576064838161254657612545613e23565b5b0492506002810190505b600a831061255f576001810190505b80915050919050565b612574848484846126e9565b60018111156125b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125af90613fa7565b60405180910390fd5b6000829050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036125ff576125fa816126ef565b61263e565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161461263d5761263c8582612738565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036126805761267b816128a5565b6126bf565b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146126be576126bd8482612976565b5b5b5050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b50505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161274584610db3565b61274f9190613fc7565b9050600060076000848152602001908152602001600020549050818114612834576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506128b99190613fc7565b90506000600960008481526020019081526020016000205490506000600883815481106128e9576128e8613612565b5b90600052602060002001549050806008838154811061290b5761290a613612565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061295a57612959613ffb565b5b6001900381819060005260206000200160009055905550505050565b600061298183610db3565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b604051806129a0016040528061014d90602082028036833780820191505090505090565b604051806129a0016040528061014d90602082028036833780820191505090505090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612a8681612a51565b8114612a9157600080fd5b50565b600081359050612aa381612a7d565b92915050565b600060208284031215612abf57612abe612a47565b5b6000612acd84828501612a94565b91505092915050565b60008115159050919050565b612aeb81612ad6565b82525050565b6000602082019050612b066000830184612ae2565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b46578082015181840152602081019050612b2b565b60008484015250505050565b6000601f19601f8301169050919050565b6000612b6e82612b0c565b612b788185612b17565b9350612b88818560208601612b28565b612b9181612b52565b840191505092915050565b60006020820190508181036000830152612bb68184612b63565b905092915050565b6000819050919050565b612bd181612bbe565b8114612bdc57600080fd5b50565b600081359050612bee81612bc8565b92915050565b600060208284031215612c0a57612c09612a47565b5b6000612c1884828501612bdf565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c4c82612c21565b9050919050565b612c5c81612c41565b82525050565b6000602082019050612c776000830184612c53565b92915050565b612c8681612c41565b8114612c9157600080fd5b50565b600081359050612ca381612c7d565b92915050565b60008060408385031215612cc057612cbf612a47565b5b6000612cce85828601612c94565b9250506020612cdf85828601612bdf565b9150509250929050565b612cf281612bbe565b82525050565b6000602082019050612d0d6000830184612ce9565b92915050565b600080600060608486031215612d2c57612d2b612a47565b5b6000612d3a86828701612c94565b9350506020612d4b86828701612c94565b9250506040612d5c86828701612bdf565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612da882612b52565b810181811067ffffffffffffffff82111715612dc757612dc6612d70565b5b80604052505050565b6000612dda612a3d565b9050612de68282612d9f565b919050565b600067ffffffffffffffff821115612e0657612e05612d70565b5b612e0f82612b52565b9050602081019050919050565b82818337600083830152505050565b6000612e3e612e3984612deb565b612dd0565b905082815260208101848484011115612e5a57612e59612d6b565b5b612e65848285612e1c565b509392505050565b600082601f830112612e8257612e81612d66565b5b8135612e92848260208601612e2b565b91505092915050565b600060208284031215612eb157612eb0612a47565b5b600082013567ffffffffffffffff811115612ecf57612ece612a4c565b5b612edb84828501612e6d565b91505092915050565b600060208284031215612efa57612ef9612a47565b5b6000612f0884828501612c94565b91505092915050565b600061014d9050919050565b600081905092915050565b6000819050919050565b612f3b81612ad6565b82525050565b6000612f4d8383612f32565b60208301905092915050565b6000602082019050919050565b612f6f81612f11565b612f798184612f1d565b9250612f8482612f28565b8060005b83811015612fb5578151612f9c8782612f41565b9650612fa783612f59565b925050600181019050612f88565b505050505050565b60006129a082019050612fd36000830184612f66565b92915050565b612fe281612ad6565b8114612fed57600080fd5b50565b600081359050612fff81612fd9565b92915050565b6000806040838503121561301c5761301b612a47565b5b600061302a85828601612c94565b925050602061303b85828601612ff0565b9150509250929050565b600067ffffffffffffffff8211156130605761305f612d70565b5b61306982612b52565b9050602081019050919050565b600061308961308484613045565b612dd0565b9050828152602081018484840111156130a5576130a4612d6b565b5b6130b0848285612e1c565b509392505050565b600082601f8301126130cd576130cc612d66565b5b81356130dd848260208601613076565b91505092915050565b60008060008060808587031215613100576130ff612a47565b5b600061310e87828801612c94565b945050602061311f87828801612c94565b935050604061313087828801612bdf565b925050606085013567ffffffffffffffff81111561315157613150612a4c565b5b61315d878288016130b8565b91505092959194509250565b600061014d9050919050565b600081905092915050565b6000819050919050565b61319381612c41565b82525050565b60006131a5838361318a565b60208301905092915050565b6000602082019050919050565b6131c781613169565b6131d18184613175565b92506131dc82613180565b8060005b8381101561320d5781516131f48782613199565b96506131ff836131b1565b9250506001810190506131e0565b505050505050565b60006129a08201905061322b60008301846131be565b92915050565b6000806000806080858703121561324b5761324a612a47565b5b600061325987828801612bdf565b945050602061326a87828801612bdf565b935050604061327b87828801612bdf565b925050606061328c87828801612bdf565b91505092959194509250565b600080604083850312156132af576132ae612a47565b5b60006132bd85828601612c94565b92505060206132ce85828601612c94565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061331f57607f821691505b602082108103613332576133316132d8565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613394602183612b17565b915061339f82613338565b604082019050919050565b600060208201905081810360008301526133c381613387565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000613426603d83612b17565b9150613431826133ca565b604082019050919050565b6000602082019050818103600083015261345581613419565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b60006134b8602d83612b17565b91506134c38261345c565b604082019050919050565b600060208201905081810360008301526134e7816134ab565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b600061354a602b83612b17565b9150613555826134ee565b604082019050919050565b600060208201905081810360008301526135798161353d565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b60006135dc602c83612b17565b91506135e782613580565b604082019050919050565b6000602082019050818103600083015261360b816135cf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f496e76616c696420746f6b656e20696400000000000000000000000000000000600082015250565b6000613677601083612b17565b915061368282613641565b602082019050919050565b600060208201905081810360008301526136a68161366a565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b60006136e3601883612b17565b91506136ee826136ad565b602082019050919050565b60006020820190508181036000830152613712816136d6565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000613775602983612b17565b915061378082613719565b604082019050919050565b600060208201905081810360008301526137a481613768565b9050919050565b7f4d696e742069732064697361626c656400000000000000000000000000000000600082015250565b60006137e1601083612b17565b91506137ec826137ab565b602082019050919050565b60006020820190508181036000830152613810816137d4565b9050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b600061384d601483612b17565b915061385882613817565b602082019050919050565b6000602082019050818103600083015261387c81613840565b9050919050565b600081905092915050565b50565b600061389e600083613883565b91506138a98261388e565b600082019050919050565b60006138bf82613891565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061390382612bbe565b915061390e83612bbe565b9250828201905080821115613926576139256138c9565b5b92915050565b600061393782612bbe565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613969576139686138c9565b5b600182019050919050565b600081905092915050565b600061398a82612b0c565b6139948185613974565b93506139a4818560208601612b28565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b60006139e6600583613974565b91506139f1826139b0565b600582019050919050565b6000613a08828561397f565b9150613a14828461397f565b9150613a1f826139d9565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a87602683612b17565b9150613a9282613a2b565b604082019050919050565b60006020820190508181036000830152613ab681613a7a565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000613b19602583612b17565b9150613b2482613abd565b604082019050919050565b60006020820190508181036000830152613b4881613b0c565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613bab602483612b17565b9150613bb682613b4f565b604082019050919050565b60006020820190508181036000830152613bda81613b9e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c17602083612b17565b9150613c2282613be1565b602082019050919050565b60006020820190508181036000830152613c4681613c0a565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613c83602083612b17565b9150613c8e82613c4d565b602082019050919050565b60006020820190508181036000830152613cb281613c76565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613cef601c83612b17565b9150613cfa82613cb9565b602082019050919050565b60006020820190508181036000830152613d1e81613ce2565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613d5b601983612b17565b9150613d6682613d25565b602082019050919050565b60006020820190508181036000830152613d8a81613d4e565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613ded603283612b17565b9150613df882613d91565b604082019050919050565b60006020820190508181036000830152613e1c81613de0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000613e7982613e52565b613e838185613e5d565b9350613e93818560208601612b28565b613e9c81612b52565b840191505092915050565b6000608082019050613ebc6000830187612c53565b613ec96020830186612c53565b613ed66040830185612ce9565b8181036060830152613ee88184613e6e565b905095945050505050565b600081519050613f0281612a7d565b92915050565b600060208284031215613f1e57613f1d612a47565b5b6000613f2c84828501613ef3565b91505092915050565b7f455243373231456e756d657261626c653a20636f6e736563757469766520747260008201527f616e7366657273206e6f7420737570706f727465640000000000000000000000602082015250565b6000613f91603583612b17565b9150613f9c82613f35565b604082019050919050565b60006020820190508181036000830152613fc081613f84565b9050919050565b6000613fd282612bbe565b9150613fdd83612bbe565b9250828203905081811115613ff557613ff46138c9565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212202d1def5aa3d708f43ec358ed6796aa287f33c6b09bb8bb3437d394ee3f194ca164736f6c63430008130033000000000000000000000000cc4cef22c65cb9615dacf0c95253a036d3fcf7ab0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002c68747470733a2f2f6e696e6566692d6361746d6f6e65792e76657263656c2e6170702f6e66742d6a736f6e2f0000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101e35760003560e01c80637e5cd5c111610102578063b88d4fde11610095578063d8e8685411610064578063d8e86854146106e7578063e797ec1b14610710578063e985e9c514610727578063f2fde38b14610764576101e3565b8063b88d4fde1461062b578063bede64ba14610654578063c87b56dd1461067f578063d0a6efb0146106bc576101e3565b8063a0712d68116100d1578063a0712d6814610590578063a13709f8146105ac578063a22cb465146105d7578063b091aca614610600576101e3565b80637e5cd5c1146104fa5780638705fcd4146105115780638da5cb5b1461053a57806395d89b4114610565576101e3565b806342842e0e1161017a5780635b5a0636116101495780635b5a06361461043e5780636352211e1461046957806370a08231146104a6578063715018a6146104e3576101e3565b806342842e0e146103725780634f6ccce71461039b578063559e775b146103d857806355f804b314610415576101e3565b806318160ddd116101b657806318160ddd146102b657806323b872dd146102e15780632f745c591461030a5780633e98dee414610347576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190612aa9565b61078d565b60405161021c9190612af1565b60405180910390f35b34801561023157600080fd5b5061023a610807565b6040516102479190612b9c565b60405180910390f35b34801561025c57600080fd5b5061027760048036038101906102729190612bf4565b610899565b6040516102849190612c62565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af9190612ca9565b6108df565b005b3480156102c257600080fd5b506102cb6109f6565b6040516102d89190612cf8565b60405180910390f35b3480156102ed57600080fd5b5061030860048036038101906103039190612d13565b610a03565b005b34801561031657600080fd5b50610331600480360381019061032c9190612ca9565b610a63565b60405161033e9190612cf8565b60405180910390f35b34801561035357600080fd5b5061035c610b08565b6040516103699190612cf8565b60405180910390f35b34801561037e57600080fd5b5061039960048036038101906103949190612d13565b610b0e565b005b3480156103a757600080fd5b506103c260048036038101906103bd9190612bf4565b610b2e565b6040516103cf9190612cf8565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa9190612bf4565b610b9f565b60405161040c9190612cf8565b60405180910390f35b34801561042157600080fd5b5061043c60048036038101906104379190612e9b565b610d1c565b005b34801561044a57600080fd5b50610453610d27565b6040516104609190612cf8565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b9190612bf4565b610d2d565b60405161049d9190612c62565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c89190612ee4565b610db3565b6040516104da9190612cf8565b60405180910390f35b3480156104ef57600080fd5b506104f8610e6a565b005b34801561050657600080fd5b5061050f610e7e565b005b34801561051d57600080fd5b5061053860048036038101906105339190612ee4565b610ea3565b005b34801561054657600080fd5b5061054f610eef565b60405161055c9190612c62565b60405180910390f35b34801561057157600080fd5b5061057a610f19565b6040516105879190612b9c565b60405180910390f35b6105aa60048036038101906105a59190612bf4565b610fab565b005b3480156105b857600080fd5b506105c161116e565b6040516105ce9190612fbd565b60405180910390f35b3480156105e357600080fd5b506105fe60048036038101906105f99190613005565b6111f6565b005b34801561060c57600080fd5b5061061561120c565b6040516106229190612cf8565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d91906130e6565b611212565b005b34801561066057600080fd5b50610669611274565b6040516106769190613215565b60405180910390f35b34801561068b57600080fd5b506106a660048036038101906106a19190612bf4565b611337565b6040516106b39190612b9c565b60405180910390f35b3480156106c857600080fd5b506106d161139f565b6040516106de9190612cf8565b60405180910390f35b3480156106f357600080fd5b5061070e60048036038101906107099190613231565b6113a5565b005b34801561071c57600080fd5b506107256113cf565b005b34801561073357600080fd5b5061074e60048036038101906107499190613298565b6113f4565b60405161075b9190612af1565b60405180910390f35b34801561077057600080fd5b5061078b60048036038101906107869190612ee4565b611488565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061080057506107ff8261150b565b5b9050919050565b60606000805461081690613307565b80601f016020809104026020016040519081016040528092919081815260200182805461084290613307565b801561088f5780601f106108645761010080835404028352916020019161088f565b820191906000526020600020905b81548152906001019060200180831161087257829003601f168201915b5050505050905090565b60006108a4826115ed565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108ea82610d2d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361095a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610951906133aa565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610979611638565b73ffffffffffffffffffffffffffffffffffffffff1614806109a857506109a7816109a2611638565b6113f4565b5b6109e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109de9061343c565b60405180910390fd5b6109f18383611640565b505050565b6000600880549050905090565b610a14610a0e611638565b826116f9565b610a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4a906134ce565b60405180910390fd5b610a5e83838361178e565b505050565b6000610a6e83610db3565b8210610aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa690613560565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600c5481565b610b2983838360405180602001604052806000815250611212565b505050565b6000610b386109f6565b8210610b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b70906135f2565b60405180910390fd5b60088281548110610b8d57610b8c613612565b5b90600052602060002001549050919050565b6000601854821115610be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdd9061368d565b60405180910390fd5b6010600060028110610bfb57610bfa613612565b5b01548210158015610c2257506010600160028110610c1c57610c1b613612565b5b01548211155b15610c3157600c549050610d17565b6012600060028110610c4657610c45613612565b5b01548210158015610c6d57506012600160028110610c6757610c66613612565b5b01548211155b15610c7c57600d549050610d17565b6014600060028110610c9157610c90613612565b5b01548210158015610cb857506014600160028110610cb257610cb1613612565b5b01548211155b15610cc757600e549050610d17565b6016600060028110610cdc57610cdb613612565b5b01548210158015610d0357506016600160028110610cfd57610cfc613612565b5b01548211155b15610d1257600f549050610d17565b600090505b919050565b610d24611a87565b50565b600e5481565b600080610d3983611b05565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da1906136f9565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1a9061378b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e72611a87565b610e7c6000611b42565b565b610e86611a87565b6000601c60006101000a81548160ff021916908315150217905550565b610eab611a87565b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610f2890613307565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5490613307565b8015610fa15780601f10610f7657610100808354040283529160200191610fa1565b820191906000526020600020905b815481529060010190602001808311610f8457829003601f168201915b5050505050905090565b601c60009054906101000a900460ff16610ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff1906137f7565b60405180910390fd5b600061100582610b9f565b9050348114611049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104090613863565b60405180910390fd5b60016019600084815260200190815260200160002060006101000a81548160ff02191690831515021790555033601a600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506110d13383611c08565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611119906138b4565b60006040518083038185875af1925050503d8060008114611156576040519150601f19603f3d011682016040523d82523d6000602084013e61115b565b606091505b505090508061116957600080fd5b505050565b6111766129f5565b61117e6129f5565b60005b61014d8110156111ee576019600060018361119c91906138f8565b815260200190815260200160002060009054906101000a900460ff16828261014d81106111cc576111cb613612565b5b60200201901515908115158152505080806111e69061392c565b915050611181565b508091505090565b611208611201611638565b8383611e25565b5050565b600f5481565b61122361121d611638565b836116f9565b611262576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611259906134ce565b60405180910390fd5b61126e84848484611f91565b50505050565b61127c612a19565b611284612a19565b60005b61014d81101561132f57601a60006001836112a291906138f8565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828261014d81106112e5576112e4613612565b5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806113279061392c565b915050611287565b508091505090565b6060611342826115ed565b600061134c611fed565b9050600081511161136c5760405180602001604052806000815250611397565b806113768461207f565b6040516020016113879291906139fc565b6040516020818303038152906040525b915050919050565b600d5481565b6113ad611a87565b83600c8190555082600d8190555081600e8190555080600f8190555050505050565b6113d7611a87565b6001601c60006101000a81548160ff021916908315150217905550565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611490611a87565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f690613a9d565b60405180910390fd5b61150881611b42565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806115d657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806115e657506115e58261214d565b5b9050919050565b6115f6816121b7565b611635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162c906136f9565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166116b383610d2d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061170583610d2d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611747575061174681856113f4565b5b8061178557508373ffffffffffffffffffffffffffffffffffffffff1661176d84610899565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166117ae82610d2d565b73ffffffffffffffffffffffffffffffffffffffff1614611804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fb90613b2f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186a90613bc1565b60405180910390fd5b61188083838360016121f8565b8273ffffffffffffffffffffffffffffffffffffffff166118a082610d2d565b73ffffffffffffffffffffffffffffffffffffffff16146118f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ed90613b2f565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611a828383836001612288565b505050565b611a8f611638565b73ffffffffffffffffffffffffffffffffffffffff16611aad610eef565b73ffffffffffffffffffffffffffffffffffffffff1614611b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afa90613c2d565b60405180910390fd5b565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6e90613c99565b60405180910390fd5b611c80816121b7565b15611cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb790613d05565b60405180910390fd5b611cce6000838360016121f8565b611cd7816121b7565b15611d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0e90613d05565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611e21600083836001612288565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8a90613d71565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f849190612af1565b60405180910390a3505050565b611f9c84848461178e565b611fa88484848461228e565b611fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fde90613e03565b60405180910390fd5b50505050565b6060601b8054611ffc90613307565b80601f016020809104026020016040519081016040528092919081815260200182805461202890613307565b80156120755780601f1061204a57610100808354040283529160200191612075565b820191906000526020600020905b81548152906001019060200180831161205857829003601f168201915b5050505050905090565b60606000600161208e84612415565b01905060008167ffffffffffffffff8111156120ad576120ac612d70565b5b6040519080825280601f01601f1916602001820160405280156120df5781602001600182028036833780820191505090505b509050600082602001820190505b600115612142578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161213657612135613e23565b5b049450600085036120ed575b819350505050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166121d983611b05565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b61220484848484612568565b60016019600084815260200190815260200160002060006101000a81548160ff02191690831515021790555082601a600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b50505050565b60006122af8473ffffffffffffffffffffffffffffffffffffffff166126c6565b15612408578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026122d8611638565b8786866040518563ffffffff1660e01b81526004016122fa9493929190613ea7565b6020604051808303816000875af192505050801561233657506040513d601f19601f820116820180604052508101906123339190613f08565b60015b6123b8573d8060008114612366576040519150601f19603f3d011682016040523d82523d6000602084013e61236b565b606091505b5060008151036123b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a790613e03565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061240d565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612473577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161246957612468613e23565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106124b0576d04ee2d6d415b85acef810000000083816124a6576124a5613e23565b5b0492506020810190505b662386f26fc1000083106124df57662386f26fc1000083816124d5576124d4613e23565b5b0492506010810190505b6305f5e1008310612508576305f5e10083816124fe576124fd613e23565b5b0492506008810190505b612710831061252d57612710838161252357612522613e23565b5b0492506004810190505b60648310612550576064838161254657612545613e23565b5b0492506002810190505b600a831061255f576001810190505b80915050919050565b612574848484846126e9565b60018111156125b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125af90613fa7565b60405180910390fd5b6000829050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036125ff576125fa816126ef565b61263e565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161461263d5761263c8582612738565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036126805761267b816128a5565b6126bf565b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146126be576126bd8482612976565b5b5b5050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b50505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161274584610db3565b61274f9190613fc7565b9050600060076000848152602001908152602001600020549050818114612834576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506128b99190613fc7565b90506000600960008481526020019081526020016000205490506000600883815481106128e9576128e8613612565b5b90600052602060002001549050806008838154811061290b5761290a613612565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061295a57612959613ffb565b5b6001900381819060005260206000200160009055905550505050565b600061298183610db3565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b604051806129a0016040528061014d90602082028036833780820191505090505090565b604051806129a0016040528061014d90602082028036833780820191505090505090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612a8681612a51565b8114612a9157600080fd5b50565b600081359050612aa381612a7d565b92915050565b600060208284031215612abf57612abe612a47565b5b6000612acd84828501612a94565b91505092915050565b60008115159050919050565b612aeb81612ad6565b82525050565b6000602082019050612b066000830184612ae2565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b46578082015181840152602081019050612b2b565b60008484015250505050565b6000601f19601f8301169050919050565b6000612b6e82612b0c565b612b788185612b17565b9350612b88818560208601612b28565b612b9181612b52565b840191505092915050565b60006020820190508181036000830152612bb68184612b63565b905092915050565b6000819050919050565b612bd181612bbe565b8114612bdc57600080fd5b50565b600081359050612bee81612bc8565b92915050565b600060208284031215612c0a57612c09612a47565b5b6000612c1884828501612bdf565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c4c82612c21565b9050919050565b612c5c81612c41565b82525050565b6000602082019050612c776000830184612c53565b92915050565b612c8681612c41565b8114612c9157600080fd5b50565b600081359050612ca381612c7d565b92915050565b60008060408385031215612cc057612cbf612a47565b5b6000612cce85828601612c94565b9250506020612cdf85828601612bdf565b9150509250929050565b612cf281612bbe565b82525050565b6000602082019050612d0d6000830184612ce9565b92915050565b600080600060608486031215612d2c57612d2b612a47565b5b6000612d3a86828701612c94565b9350506020612d4b86828701612c94565b9250506040612d5c86828701612bdf565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612da882612b52565b810181811067ffffffffffffffff82111715612dc757612dc6612d70565b5b80604052505050565b6000612dda612a3d565b9050612de68282612d9f565b919050565b600067ffffffffffffffff821115612e0657612e05612d70565b5b612e0f82612b52565b9050602081019050919050565b82818337600083830152505050565b6000612e3e612e3984612deb565b612dd0565b905082815260208101848484011115612e5a57612e59612d6b565b5b612e65848285612e1c565b509392505050565b600082601f830112612e8257612e81612d66565b5b8135612e92848260208601612e2b565b91505092915050565b600060208284031215612eb157612eb0612a47565b5b600082013567ffffffffffffffff811115612ecf57612ece612a4c565b5b612edb84828501612e6d565b91505092915050565b600060208284031215612efa57612ef9612a47565b5b6000612f0884828501612c94565b91505092915050565b600061014d9050919050565b600081905092915050565b6000819050919050565b612f3b81612ad6565b82525050565b6000612f4d8383612f32565b60208301905092915050565b6000602082019050919050565b612f6f81612f11565b612f798184612f1d565b9250612f8482612f28565b8060005b83811015612fb5578151612f9c8782612f41565b9650612fa783612f59565b925050600181019050612f88565b505050505050565b60006129a082019050612fd36000830184612f66565b92915050565b612fe281612ad6565b8114612fed57600080fd5b50565b600081359050612fff81612fd9565b92915050565b6000806040838503121561301c5761301b612a47565b5b600061302a85828601612c94565b925050602061303b85828601612ff0565b9150509250929050565b600067ffffffffffffffff8211156130605761305f612d70565b5b61306982612b52565b9050602081019050919050565b600061308961308484613045565b612dd0565b9050828152602081018484840111156130a5576130a4612d6b565b5b6130b0848285612e1c565b509392505050565b600082601f8301126130cd576130cc612d66565b5b81356130dd848260208601613076565b91505092915050565b60008060008060808587031215613100576130ff612a47565b5b600061310e87828801612c94565b945050602061311f87828801612c94565b935050604061313087828801612bdf565b925050606085013567ffffffffffffffff81111561315157613150612a4c565b5b61315d878288016130b8565b91505092959194509250565b600061014d9050919050565b600081905092915050565b6000819050919050565b61319381612c41565b82525050565b60006131a5838361318a565b60208301905092915050565b6000602082019050919050565b6131c781613169565b6131d18184613175565b92506131dc82613180565b8060005b8381101561320d5781516131f48782613199565b96506131ff836131b1565b9250506001810190506131e0565b505050505050565b60006129a08201905061322b60008301846131be565b92915050565b6000806000806080858703121561324b5761324a612a47565b5b600061325987828801612bdf565b945050602061326a87828801612bdf565b935050604061327b87828801612bdf565b925050606061328c87828801612bdf565b91505092959194509250565b600080604083850312156132af576132ae612a47565b5b60006132bd85828601612c94565b92505060206132ce85828601612c94565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061331f57607f821691505b602082108103613332576133316132d8565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613394602183612b17565b915061339f82613338565b604082019050919050565b600060208201905081810360008301526133c381613387565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000613426603d83612b17565b9150613431826133ca565b604082019050919050565b6000602082019050818103600083015261345581613419565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b60006134b8602d83612b17565b91506134c38261345c565b604082019050919050565b600060208201905081810360008301526134e7816134ab565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b600061354a602b83612b17565b9150613555826134ee565b604082019050919050565b600060208201905081810360008301526135798161353d565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b60006135dc602c83612b17565b91506135e782613580565b604082019050919050565b6000602082019050818103600083015261360b816135cf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f496e76616c696420746f6b656e20696400000000000000000000000000000000600082015250565b6000613677601083612b17565b915061368282613641565b602082019050919050565b600060208201905081810360008301526136a68161366a565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b60006136e3601883612b17565b91506136ee826136ad565b602082019050919050565b60006020820190508181036000830152613712816136d6565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000613775602983612b17565b915061378082613719565b604082019050919050565b600060208201905081810360008301526137a481613768565b9050919050565b7f4d696e742069732064697361626c656400000000000000000000000000000000600082015250565b60006137e1601083612b17565b91506137ec826137ab565b602082019050919050565b60006020820190508181036000830152613810816137d4565b9050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b600061384d601483612b17565b915061385882613817565b602082019050919050565b6000602082019050818103600083015261387c81613840565b9050919050565b600081905092915050565b50565b600061389e600083613883565b91506138a98261388e565b600082019050919050565b60006138bf82613891565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061390382612bbe565b915061390e83612bbe565b9250828201905080821115613926576139256138c9565b5b92915050565b600061393782612bbe565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613969576139686138c9565b5b600182019050919050565b600081905092915050565b600061398a82612b0c565b6139948185613974565b93506139a4818560208601612b28565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b60006139e6600583613974565b91506139f1826139b0565b600582019050919050565b6000613a08828561397f565b9150613a14828461397f565b9150613a1f826139d9565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a87602683612b17565b9150613a9282613a2b565b604082019050919050565b60006020820190508181036000830152613ab681613a7a565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000613b19602583612b17565b9150613b2482613abd565b604082019050919050565b60006020820190508181036000830152613b4881613b0c565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613bab602483612b17565b9150613bb682613b4f565b604082019050919050565b60006020820190508181036000830152613bda81613b9e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c17602083612b17565b9150613c2282613be1565b602082019050919050565b60006020820190508181036000830152613c4681613c0a565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613c83602083612b17565b9150613c8e82613c4d565b602082019050919050565b60006020820190508181036000830152613cb281613c76565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613cef601c83612b17565b9150613cfa82613cb9565b602082019050919050565b60006020820190508181036000830152613d1e81613ce2565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613d5b601983612b17565b9150613d6682613d25565b602082019050919050565b60006020820190508181036000830152613d8a81613d4e565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613ded603283612b17565b9150613df882613d91565b604082019050919050565b60006020820190508181036000830152613e1c81613de0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000613e7982613e52565b613e838185613e5d565b9350613e93818560208601612b28565b613e9c81612b52565b840191505092915050565b6000608082019050613ebc6000830187612c53565b613ec96020830186612c53565b613ed66040830185612ce9565b8181036060830152613ee88184613e6e565b905095945050505050565b600081519050613f0281612a7d565b92915050565b600060208284031215613f1e57613f1d612a47565b5b6000613f2c84828501613ef3565b91505092915050565b7f455243373231456e756d657261626c653a20636f6e736563757469766520747260008201527f616e7366657273206e6f7420737570706f727465640000000000000000000000602082015250565b6000613f91603583612b17565b9150613f9c82613f35565b604082019050919050565b60006020820190508181036000830152613fc081613f84565b9050919050565b6000613fd282612bbe565b9150613fdd83612bbe565b9250828203905081811115613ff557613ff46138c9565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212202d1def5aa3d708f43ec358ed6796aa287f33c6b09bb8bb3437d394ee3f194ca164736f6c63430008130033

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

000000000000000000000000cc4cef22c65cb9615dacf0c95253a036d3fcf7ab0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002c68747470733a2f2f6e696e6566692d6361746d6f6e65792e76657263656c2e6170702f6e66742d6a736f6e2f0000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _feeAddress (address): 0xCc4CEF22c65Cb9615DACF0C95253a036D3Fcf7ab
Arg [1] : _metadataBaseURL (string): https://ninefi-catmoney.vercel.app/nft-json/

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000cc4cef22c65cb9615dacf0c95253a036d3fcf7ab
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 000000000000000000000000000000000000000000000000000000000000002c
Arg [3] : 68747470733a2f2f6e696e6566692d6361746d6f6e65792e76657263656c2e61
Arg [4] : 70702f6e66742d6a736f6e2f0000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

30801:3728:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27309:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18730:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19861:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19439:416;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27964:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20501:319;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27615:343;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30890:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20826:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28083:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32644:707;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34453:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31009:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18451:273;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18151:294;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;919:103;;;;;;;;;;;;;:::i;:::-;;34281:79;;;;;;;;;;;;;:::i;:::-;;33843:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;688:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18836:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31855:444;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33359:236;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20088:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31062:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21017:359;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33603:232;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18946:387;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30950:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33957:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34368:77;;;;;;;;;;;;;:::i;:::-;;20281:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1028:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27309:300;27456:4;27513:35;27498:50;;;:11;:50;;;;:103;;;;27565:36;27589:11;27565:23;:36::i;:::-;27498:103;27478:123;;27309:300;;;:::o;18730:100::-;18784:13;18817:5;18810:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18730:100;:::o;19861:221::-;19982:7;20007:23;20022:7;20007:14;:23::i;:::-;20050:15;:24;20066:7;20050:24;;;;;;;;;;;;;;;;;;;;;20043:31;;19861:221;;;:::o;19439:416::-;19520:13;19536:23;19551:7;19536:14;:23::i;:::-;19520:39;;19584:5;19578:11;;:2;:11;;;19570:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;19678:5;19662:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;19687:37;19704:5;19711:12;:10;:12::i;:::-;19687:16;:37::i;:::-;19662:62;19640:173;;;;;;;;;;;;:::i;:::-;;;;;;;;;19826:21;19835:2;19839:7;19826:8;:21::i;:::-;19509:346;19439:416;;:::o;27964:113::-;28025:7;28052:10;:17;;;;28045:24;;27964:113;:::o;20501:319::-;20657:41;20676:12;:10;:12::i;:::-;20690:7;20657:18;:41::i;:::-;20635:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;20784:28;20794:4;20800:2;20804:7;20784:9;:28::i;:::-;20501:319;;;:::o;27615:343::-;27757:7;27812:23;27829:5;27812:16;:23::i;:::-;27804:5;:31;27782:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;27924:12;:19;27937:5;27924:19;;;;;;;;;;;;;;;:26;27944:5;27924:26;;;;;;;;;;;;27917:33;;27615:343;;;;:::o;30890:41::-;;;;:::o;20826:185::-;20964:39;20981:4;20987:2;20991:7;20964:39;;;;;;;;;;;;:16;:39::i;:::-;20826:185;;;:::o;28083:320::-;28203:7;28258:30;:28;:30::i;:::-;28250:5;:38;28228:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;28378:10;28389:5;28378:17;;;;;;;;:::i;:::-;;;;;;;;;;28371:24;;28083:320;;;:::o;32644:707::-;32705:7;32745:9;;32733:8;:21;;32725:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;32804:14;32819:1;32804:17;;;;;;;:::i;:::-;;;;32792:8;:29;;:62;;;;;32837:14;32852:1;32837:17;;;;;;;:::i;:::-;;;;32825:8;:29;;32792:62;32788:111;;;32878:9;;32871:16;;;;32788:111;32925:14;32940:1;32925:17;;;;;;;:::i;:::-;;;;32913:8;:29;;:62;;;;;32958:14;32973:1;32958:17;;;;;;;:::i;:::-;;;;32946:8;:29;;32913:62;32909:111;;;32999:9;;32992:16;;;;32909:111;33060:17;33078:1;33060:20;;;;;;;:::i;:::-;;;;33048:8;:32;;:68;;;;;33096:17;33114:1;33096:20;;;;;;;:::i;:::-;;;;33084:8;:32;;33048:68;33030:144;;;33150:12;;33143:19;;;;33030:144;33214:16;33231:1;33214:19;;;;;;;:::i;:::-;;;;33202:8;:31;;:66;;;;;33249:16;33266:1;33249:19;;;;;;;:::i;:::-;;;;33237:8;:31;;33202:66;33184:141;;;33302:11;;33295:18;;;;33184:141;33342:1;33335:8;;32644:707;;;;:::o;34453:73::-;649:13;:11;:13::i;:::-;34453:73;:::o;31009:37::-;;;;:::o;18451:273::-;18568:7;18593:13;18609:17;18618:7;18609:8;:17::i;:::-;18593:33;;18662:1;18645:19;;:5;:19;;;18637:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18711:5;18704:12;;;18451:273;;;:::o;18151:294::-;18268:7;18332:1;18315:19;;:5;:19;;;18293:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;18421:9;:16;18431:5;18421:16;;;;;;;;;;;;;;;;18414:23;;18151:294;;;:::o;919:103::-;649:13;:11;:13::i;:::-;984:30:::1;1011:1;984:18;:30::i;:::-;919:103::o:0;34281:79::-;649:13;:11;:13::i;:::-;34347:5:::1;34337:7;;:15;;;;;;;;;;;;;;;;;;34281:79::o:0;33843:106::-;649:13;:11;:13::i;:::-;33930:11:::1;33917:10;;:24;;;;;;;;;;;;;;;;;;33843:106:::0;:::o;688:87::-;734:7;761:6;;;;;;;;;;;754:13;;688:87;:::o;18836:104::-;18892:13;18925:7;18918:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18836:104;:::o;31855:444::-;31923:7;;;;;;;;;;;31915:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;31962:17;31982:22;31995:8;31982:12;:22::i;:::-;31962:42;;32036:9;32023;:22;32015:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;32109:4;32083:13;:23;32097:8;32083:23;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;32145:10;32124:8;:18;32133:8;32124:18;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;32168:27;32174:10;32186:8;32168:5;:27::i;:::-;32207:13;32226:10;;;;;;;;;;;:15;;32249:9;32226:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32206:57;;;32282:8;32274:17;;;;;;31904:395;;31855:444;:::o;33359:236::-;33410:16;;:::i;:::-;33439:21;;:::i;:::-;33478:9;33473:91;33497:3;33493:1;:7;33473:91;;;33532:13;:20;33550:1;33546;:5;;;;:::i;:::-;33532:20;;;;;;;;;;;;;;;;;;;;;33522:4;33527:1;33522:7;;;;;;;:::i;:::-;;;;;:30;;;;;;;;;;;33502:3;;;;;:::i;:::-;;;;33473:91;;;;33583:4;33576:11;;;33359:236;:::o;20088:187::-;20215:52;20234:12;:10;:12::i;:::-;20248:8;20258;20215:18;:52::i;:::-;20088:187;;:::o;31062:36::-;;;;:::o;21017:359::-;21205:41;21224:12;:10;:12::i;:::-;21238:7;21205:18;:41::i;:::-;21183:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;21330:38;21344:4;21350:2;21354:7;21363:4;21330:13;:38::i;:::-;21017:359;;;;:::o;33603:232::-;33649:19;;:::i;:::-;33681:24;;:::i;:::-;33723:9;33718:86;33742:3;33738:1;:7;33718:86;;;33777:8;:15;33790:1;33786;:5;;;;:::i;:::-;33777:15;;;;;;;;;;;;;;;;;;;;;33767:4;33772:1;33767:7;;;;;;;:::i;:::-;;;;;:25;;;;;;;;;;;33747:3;;;;;:::i;:::-;;;;33718:86;;;;33823:4;33816:11;;;33603:232;:::o;18946:387::-;19064:13;19095:23;19110:7;19095:14;:23::i;:::-;19131:21;19155:10;:8;:10::i;:::-;19131:34;;19220:1;19202:7;19196:21;:25;:129;;;;;;;;;;;;;;;;;19265:7;19274:18;:7;:16;:18::i;:::-;19248:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19196:129;19176:149;;;18946:387;;;:::o;30950:41::-;;;;:::o;33957:316::-;649:13;:11;:13::i;:::-;34146:10:::1;34134:9;:22;;;;34179:10;34167:9;:22;;;;34215:13;34200:12;:28;;;;34253:12;34239:11;:26;;;;33957:316:::0;;;;:::o;34368:77::-;649:13;:11;:13::i;:::-;34433:4:::1;34423:7;;:14;;;;;;;;;;;;;;;;;;34368:77::o:0;20281:214::-;20423:4;20452:18;:25;20471:5;20452:25;;;;;;;;;;;;;;;:35;20478:8;20452:35;;;;;;;;;;;;;;;;;;;;;;;;;20445:42;;20281:214;;;;:::o;1028:238::-;649:13;:11;:13::i;:::-;1151:1:::1;1131:22;;:8;:22;;::::0;1109:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1230:28;1249:8;1230:18;:28::i;:::-;1028:238:::0;:::o;17790:355::-;17937:4;17994:25;17979:40;;;:11;:40;;;;:105;;;;18051:33;18036:48;;;:11;:48;;;;17979:105;:158;;;;18101:36;18125:11;18101:23;:36::i;:::-;17979:158;17959:178;;17790:355;;;:::o;25105:135::-;25187:16;25195:7;25187;:16::i;:::-;25179:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;25105:135;:::o;142:98::-;195:7;222:10;215:17;;142:98;:::o;24604:174::-;24706:2;24679:15;:24;24695:7;24679:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;24762:7;24758:2;24724:46;;24733:23;24748:7;24733:14;:23::i;:::-;24724:46;;;;;;;;;;;;24604:174;;:::o;21995:331::-;22124:4;22146:13;22162:23;22177:7;22162:14;:23::i;:::-;22146:39;;22215:5;22204:16;;:7;:16;;;:65;;;;22237:32;22254:5;22261:7;22237:16;:32::i;:::-;22204:65;:113;;;;22310:7;22286:31;;:20;22298:7;22286:11;:20::i;:::-;:31;;;22204:113;22196:122;;;21995:331;;;;:::o;23813:785::-;23986:4;23959:31;;:23;23974:7;23959:14;:23::i;:::-;:31;;;23937:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;24088:1;24074:16;;:2;:16;;;24066:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;24144:42;24165:4;24171:2;24175:7;24184:1;24144:20;:42::i;:::-;24246:4;24219:31;;:23;24234:7;24219:14;:23::i;:::-;:31;;;24197:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;24333:15;:24;24349:7;24333:24;;;;;;;;;;;;24326:31;;;;;;;;;;;24414:1;24395:9;:15;24405:4;24395:15;;;;;;;;;;;;;;;;:20;;;;;;;;;;;24447:1;24430:9;:13;24440:2;24430:13;;;;;;;;;;;;;;;;:18;;;;;;;;;;;24489:2;24470:7;:16;24478:7;24470:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;24528:7;24524:2;24509:27;;24518:4;24509:27;;;;;;;;;;;;24549:41;24569:4;24575:2;24579:7;24588:1;24549:19;:41::i;:::-;23813:785;;;:::o;781:132::-;856:12;:10;:12::i;:::-;845:23;;:7;:5;:7::i;:::-;:23;;;837:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;781:132::o;21738:117::-;21804:7;21831;:16;21839:7;21831:16;;;;;;;;;;;;;;;;;;;;;21824:23;;21738:117;;;:::o;1272:191::-;1346:16;1365:6;;;;;;;;;;;1346:25;;1391:8;1382:6;;:17;;;;;;;;;;;;;;;;;;1446:8;1415:40;;1436:8;1415:40;;;;;;;;;;;;1335:128;1272:191;:::o;22773:552::-;22867:1;22853:16;;:2;:16;;;22845:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22926:16;22934:7;22926;:16::i;:::-;22925:17;22917:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;22988:48;23017:1;23021:2;23025:7;23034:1;22988:20;:48::i;:::-;23056:16;23064:7;23056;:16::i;:::-;23055:17;23047:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;23160:1;23143:9;:13;23153:2;23143:13;;;;;;;;;;;;;;;;:18;;;;;;;;;;;23204:2;23185:7;:16;23193:7;23185:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;23249:7;23245:2;23224:33;;23241:1;23224:33;;;;;;;;;;;;23270:47;23298:1;23302:2;23306:7;23315:1;23270:19;:47::i;:::-;22773:552;;:::o;24784:315::-;24939:8;24930:17;;:5;:17;;;24922:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;25026:8;24988:18;:25;25007:5;24988:25;;;;;;;;;;;;;;;:35;25014:8;24988:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;25072:8;25050:41;;25065:5;25050:41;;;25082:8;25050:41;;;;;;:::i;:::-;;;;;;;;24784:315;;;:::o;21382:350::-;21538:28;21548:4;21554:2;21558:7;21538:9;:28::i;:::-;21599:47;21622:4;21628:2;21632:7;21641:4;21599:22;:47::i;:::-;21577:147;;;;;;;;;;;;:::i;:::-;;;;;;;;;21382:350;;;;:::o;31739:108::-;31799:13;31832:7;31825:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31739:108;:::o;15793:616::-;15849:13;15900:14;15937:1;15917:17;15928:5;15917:10;:17::i;:::-;:21;15900:38;;15953:20;15987:6;15976:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15953:41;;16009:11;16090:6;16086:2;16082:15;16074:6;16070:28;16063:35;;16127:236;16134:4;16127:236;;;16159:5;;;;;;;;16249:8;16244:2;16237:5;16233:14;16228:30;16223:3;16215:44;16305:2;16296:11;;;;;;:::i;:::-;;;;;16339:1;16330:5;:10;16127:236;16326:21;16127:236;16384:6;16377:13;;;;;15793:616;;;:::o;8134:207::-;8264:4;8308:25;8293:40;;;:11;:40;;;;8286:47;;8134:207;;;:::o;21861:128::-;21926:4;21979:1;21950:31;;:17;21959:7;21950:8;:17::i;:::-;:31;;;;21943:38;;21861:128;;;:::o;32307:329::-;32484:61;32511:4;32517:2;32521:12;32535:9;32484:26;:61::i;:::-;32586:4;32556:13;:27;32570:12;32556:27;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;32626:2;32601:8;:22;32610:12;32601:22;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;32307:329;;;;:::o;26395:158::-;;;;;:::o;25246:978::-;25400:4;25421:15;:2;:13;;;:15::i;:::-;25417:800;;;25490:2;25474:36;;;25533:12;:10;:12::i;:::-;25568:4;25595:7;25625:4;25474:174;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;25453:709;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25848:1;25831:6;:13;:18;25827:320;;25874:108;;;;;;;;;;:::i;:::-;;;;;;;;25827:320;26097:6;26091:13;26082:6;26078:2;26074:15;26067:38;25453:709;25722:41;;;25712:51;;;:6;:51;;;;25705:58;;;;;25417:800;26201:4;26194:11;;25246:978;;;;;;;:::o;13382:922::-;13435:7;13455:14;13472:1;13455:18;;13522:6;13513:5;:15;13509:102;;13558:6;13549:15;;;;;;:::i;:::-;;;;;13593:2;13583:12;;;;13509:102;13638:6;13629:5;:15;13625:102;;13674:6;13665:15;;;;;;:::i;:::-;;;;;13709:2;13699:12;;;;13625:102;13754:6;13745:5;:15;13741:102;;13790:6;13781:15;;;;;;:::i;:::-;;;;;13825:2;13815:12;;;;13741:102;13870:5;13861;:14;13857:99;;13905:5;13896:14;;;;;;:::i;:::-;;;;;13939:1;13929:11;;;;13857:99;13983:5;13974;:14;13970:99;;14018:5;14009:14;;;;;;:::i;:::-;;;;;14052:1;14042:11;;;;13970:99;14096:5;14087;:14;14083:99;;14131:5;14122:14;;;;;;:::i;:::-;;;;;14165:1;14155:11;;;;14083:99;14209:5;14200;:14;14196:66;;14245:1;14235:11;;;;14196:66;14290:6;14283:13;;;13382:922;;;:::o;28409:802::-;28586:61;28613:4;28619:2;28623:12;28637:9;28586:26;:61::i;:::-;28676:1;28664:9;:13;28660:109;;;28694:63;;;;;;;;;;:::i;:::-;;;;;;;;28660:109;28781:15;28799:12;28781:30;;28844:1;28828:18;;:4;:18;;;28824:187;;28863:40;28895:7;28863:31;:40::i;:::-;28824:187;;;28933:2;28925:10;;:4;:10;;;28921:90;;28952:47;28985:4;28991:7;28952:32;:47::i;:::-;28921:90;28824:187;29039:1;29025:16;;:2;:16;;;29021:183;;29058:45;29095:7;29058:36;:45::i;:::-;29021:183;;;29131:4;29125:10;;:2;:10;;;29121:83;;29152:40;29180:2;29184:7;29152:27;:40::i;:::-;29121:83;29021:183;28575:636;28409:802;;;;:::o;3373:117::-;3433:4;3481:1;3459:7;:19;;;:23;3452:30;;3373:117;;;:::o;26230:159::-;;;;;:::o;29444:164::-;29548:10;:17;;;;29521:15;:24;29537:7;29521:24;;;;;;;;;;;:44;;;;29576:10;29592:7;29576:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29444:164;:::o;29614:659::-;29722:22;29772:1;29747:22;29764:4;29747:16;:22::i;:::-;:26;;;;:::i;:::-;29722:51;;29784:18;29805:17;:26;29823:7;29805:26;;;;;;;;;;;;29784:47;;29860:14;29846:10;:28;29842:328;;29891:19;29913:12;:18;29926:4;29913:18;;;;;;;;;;;;;;;:34;29932:14;29913:34;;;;;;;;;;;;29891:56;;29997:11;29964:12;:18;29977:4;29964:18;;;;;;;;;;;;;;;:30;29983:10;29964:30;;;;;;;;;;;:44;;;;30114:10;30081:17;:30;30099:11;30081:30;;;;;;;;;;;:43;;;;29876:294;29842:328;30187:17;:26;30205:7;30187:26;;;;;;;;;;;30180:33;;;30231:12;:18;30244:4;30231:18;;;;;;;;;;;;;;;:34;30250:14;30231:34;;;;;;;;;;;30224:41;;;29709:564;;29614:659;;:::o;30279:515::-;30363:22;30408:1;30388:10;:17;;;;:21;;;;:::i;:::-;30363:46;;30420:18;30441:15;:24;30457:7;30441:24;;;;;;;;;;;;30420:45;;30476:19;30498:10;30509:14;30498:26;;;;;;;;:::i;:::-;;;;;;;;;;30476:48;;30562:11;30537:10;30548;30537:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;30673:10;30642:15;:28;30658:11;30642:28;;;;;;;;;;;:41;;;;30735:15;:24;30751:7;30735:24;;;;;;;;;;;30728:31;;;30770:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30350:444;;;30279:515;:::o;29217:221::-;29302:14;29319:20;29336:2;29319:16;:20::i;:::-;29302:37;;29377:7;29350:12;:16;29363:2;29350:16;;;;;;;;;;;;;;;:24;29367:6;29350:24;;;;;;;;;;;:34;;;;29424:6;29395:17;:26;29413:7;29395:26;;;;;;;;;;;:35;;;;29291:147;29217:221;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:118::-;4977:24;4995:5;4977:24;:::i;:::-;4972:3;4965:37;4890:118;;:::o;5014:222::-;5107:4;5145:2;5134:9;5130:18;5122:26;;5158:71;5226:1;5215:9;5211:17;5202:6;5158:71;:::i;:::-;5014:222;;;;:::o;5242:619::-;5319:6;5327;5335;5384:2;5372:9;5363:7;5359:23;5355:32;5352:119;;;5390:79;;:::i;:::-;5352:119;5510:1;5535:53;5580:7;5571:6;5560:9;5556:22;5535:53;:::i;:::-;5525:63;;5481:117;5637:2;5663:53;5708:7;5699:6;5688:9;5684:22;5663:53;:::i;:::-;5653:63;;5608:118;5765:2;5791:53;5836:7;5827:6;5816:9;5812:22;5791:53;:::i;:::-;5781:63;;5736:118;5242:619;;;;;:::o;5867:117::-;5976:1;5973;5966:12;5990:117;6099:1;6096;6089:12;6113:180;6161:77;6158:1;6151:88;6258:4;6255:1;6248:15;6282:4;6279:1;6272:15;6299:281;6382:27;6404:4;6382:27;:::i;:::-;6374:6;6370:40;6512:6;6500:10;6497:22;6476:18;6464:10;6461:34;6458:62;6455:88;;;6523:18;;:::i;:::-;6455:88;6563:10;6559:2;6552:22;6342:238;6299:281;;:::o;6586:129::-;6620:6;6647:20;;:::i;:::-;6637:30;;6676:33;6704:4;6696:6;6676:33;:::i;:::-;6586:129;;;:::o;6721:308::-;6783:4;6873:18;6865:6;6862:30;6859:56;;;6895:18;;:::i;:::-;6859:56;6933:29;6955:6;6933:29;:::i;:::-;6925:37;;7017:4;7011;7007:15;6999:23;;6721:308;;;:::o;7035:146::-;7132:6;7127:3;7122;7109:30;7173:1;7164:6;7159:3;7155:16;7148:27;7035:146;;;:::o;7187:425::-;7265:5;7290:66;7306:49;7348:6;7306:49;:::i;:::-;7290:66;:::i;:::-;7281:75;;7379:6;7372:5;7365:21;7417:4;7410:5;7406:16;7455:3;7446:6;7441:3;7437:16;7434:25;7431:112;;;7462:79;;:::i;:::-;7431:112;7552:54;7599:6;7594:3;7589;7552:54;:::i;:::-;7271:341;7187:425;;;;;:::o;7632:340::-;7688:5;7737:3;7730:4;7722:6;7718:17;7714:27;7704:122;;7745:79;;:::i;:::-;7704:122;7862:6;7849:20;7887:79;7962:3;7954:6;7947:4;7939:6;7935:17;7887:79;:::i;:::-;7878:88;;7694:278;7632:340;;;;:::o;7978:509::-;8047:6;8096:2;8084:9;8075:7;8071:23;8067:32;8064:119;;;8102:79;;:::i;:::-;8064:119;8250:1;8239:9;8235:17;8222:31;8280:18;8272:6;8269:30;8266:117;;;8302:79;;:::i;:::-;8266:117;8407:63;8462:7;8453:6;8442:9;8438:22;8407:63;:::i;:::-;8397:73;;8193:287;7978:509;;;;:::o;8493:329::-;8552:6;8601:2;8589:9;8580:7;8576:23;8572:32;8569:119;;;8607:79;;:::i;:::-;8569:119;8727:1;8752:53;8797:7;8788:6;8777:9;8773:22;8752:53;:::i;:::-;8742:63;;8698:117;8493:329;;;;:::o;8828:105::-;8892:6;8920;8910:16;;8828:105;;;:::o;8939:142::-;9035:11;9072:3;9057:18;;8939:142;;;;:::o;9087:97::-;9151:4;9174:3;9166:11;;9087:97;;;:::o;9190:99::-;9261:21;9276:5;9261:21;:::i;:::-;9256:3;9249:34;9190:99;;:::o;9295:167::-;9358:10;9379:40;9415:3;9407:6;9379:40;:::i;:::-;9451:4;9446:3;9442:14;9428:28;;9295:167;;;;:::o;9468:110::-;9535:4;9567;9562:3;9558:14;9550:22;;9468:110;;;:::o;9614:682::-;9748:51;9793:5;9748:51;:::i;:::-;9815:83;9891:6;9886:3;9815:83;:::i;:::-;9808:90;;9922:53;9969:5;9922:53;:::i;:::-;9998:7;10029:1;10014:275;10039:6;10036:1;10033:13;10014:275;;;10115:6;10109:13;10142:57;10195:3;10180:13;10142:57;:::i;:::-;10135:64;;10222:57;10272:6;10222:57;:::i;:::-;10212:67;;10074:215;10061:1;10058;10054:9;10049:14;;10014:275;;;10018:14;9724:572;;;9614:682;;:::o;10302:313::-;10439:4;10477:5;10466:9;10462:21;10454:29;;10493:115;10605:1;10594:9;10590:17;10581:6;10493:115;:::i;:::-;10302:313;;;;:::o;10621:116::-;10691:21;10706:5;10691:21;:::i;:::-;10684:5;10681:32;10671:60;;10727:1;10724;10717:12;10671:60;10621:116;:::o;10743:133::-;10786:5;10824:6;10811:20;10802:29;;10840:30;10864:5;10840:30;:::i;:::-;10743:133;;;;:::o;10882:468::-;10947:6;10955;11004:2;10992:9;10983:7;10979:23;10975:32;10972:119;;;11010:79;;:::i;:::-;10972:119;11130:1;11155:53;11200:7;11191:6;11180:9;11176:22;11155:53;:::i;:::-;11145:63;;11101:117;11257:2;11283:50;11325:7;11316:6;11305:9;11301:22;11283:50;:::i;:::-;11273:60;;11228:115;10882:468;;;;;:::o;11356:307::-;11417:4;11507:18;11499:6;11496:30;11493:56;;;11529:18;;:::i;:::-;11493:56;11567:29;11589:6;11567:29;:::i;:::-;11559:37;;11651:4;11645;11641:15;11633:23;;11356:307;;;:::o;11669:423::-;11746:5;11771:65;11787:48;11828:6;11787:48;:::i;:::-;11771:65;:::i;:::-;11762:74;;11859:6;11852:5;11845:21;11897:4;11890:5;11886:16;11935:3;11926:6;11921:3;11917:16;11914:25;11911:112;;;11942:79;;:::i;:::-;11911:112;12032:54;12079:6;12074:3;12069;12032:54;:::i;:::-;11752:340;11669:423;;;;;:::o;12111:338::-;12166:5;12215:3;12208:4;12200:6;12196:17;12192:27;12182:122;;12223:79;;:::i;:::-;12182:122;12340:6;12327:20;12365:78;12439:3;12431:6;12424:4;12416:6;12412:17;12365:78;:::i;:::-;12356:87;;12172:277;12111:338;;;;:::o;12455:943::-;12550:6;12558;12566;12574;12623:3;12611:9;12602:7;12598:23;12594:33;12591:120;;;12630:79;;:::i;:::-;12591:120;12750:1;12775:53;12820:7;12811:6;12800:9;12796:22;12775:53;:::i;:::-;12765:63;;12721:117;12877:2;12903:53;12948:7;12939:6;12928:9;12924:22;12903:53;:::i;:::-;12893:63;;12848:118;13005:2;13031:53;13076:7;13067:6;13056:9;13052:22;13031:53;:::i;:::-;13021:63;;12976:118;13161:2;13150:9;13146:18;13133:32;13192:18;13184:6;13181:30;13178:117;;;13214:79;;:::i;:::-;13178:117;13319:62;13373:7;13364:6;13353:9;13349:22;13319:62;:::i;:::-;13309:72;;13104:287;12455:943;;;;;;;:::o;13404:108::-;13471:6;13499;13489:16;;13404:108;;;:::o;13518:145::-;13617:11;13654:3;13639:18;;13518:145;;;;:::o;13669:100::-;13736:4;13759:3;13751:11;;13669:100;;;:::o;13775:108::-;13852:24;13870:5;13852:24;:::i;:::-;13847:3;13840:37;13775:108;;:::o;13889:179::-;13958:10;13979:46;14021:3;14013:6;13979:46;:::i;:::-;14057:4;14052:3;14048:14;14034:28;;13889:179;;;;:::o;14074:113::-;14144:4;14176;14171:3;14167:14;14159:22;;14074:113;;;:::o;14229:706::-;14369:54;14417:5;14369:54;:::i;:::-;14439:86;14518:6;14513:3;14439:86;:::i;:::-;14432:93;;14549:56;14599:5;14549:56;:::i;:::-;14628:7;14659:1;14644:284;14669:6;14666:1;14663:13;14644:284;;;14745:6;14739:13;14772:63;14831:3;14816:13;14772:63;:::i;:::-;14765:70;;14858:60;14911:6;14858:60;:::i;:::-;14848:70;;14704:224;14691:1;14688;14684:9;14679:14;;14644:284;;;14648:14;14345:590;;;14229:706;;:::o;14941:325::-;15084:4;15122:5;15111:9;15107:21;15099:29;;15138:121;15256:1;15245:9;15241:17;15232:6;15138:121;:::i;:::-;14941:325;;;;:::o;15272:765::-;15358:6;15366;15374;15382;15431:3;15419:9;15410:7;15406:23;15402:33;15399:120;;;15438:79;;:::i;:::-;15399:120;15558:1;15583:53;15628:7;15619:6;15608:9;15604:22;15583:53;:::i;:::-;15573:63;;15529:117;15685:2;15711:53;15756:7;15747:6;15736:9;15732:22;15711:53;:::i;:::-;15701:63;;15656:118;15813:2;15839:53;15884:7;15875:6;15864:9;15860:22;15839:53;:::i;:::-;15829:63;;15784:118;15941:2;15967:53;16012:7;16003:6;15992:9;15988:22;15967:53;:::i;:::-;15957:63;;15912:118;15272:765;;;;;;;:::o;16043:474::-;16111:6;16119;16168:2;16156:9;16147:7;16143:23;16139:32;16136:119;;;16174:79;;:::i;:::-;16136:119;16294:1;16319:53;16364:7;16355:6;16344:9;16340:22;16319:53;:::i;:::-;16309:63;;16265:117;16421:2;16447:53;16492:7;16483:6;16472:9;16468:22;16447:53;:::i;:::-;16437:63;;16392:118;16043:474;;;;;:::o;16523:180::-;16571:77;16568:1;16561:88;16668:4;16665:1;16658:15;16692:4;16689:1;16682:15;16709:320;16753:6;16790:1;16784:4;16780:12;16770:22;;16837:1;16831:4;16827:12;16858:18;16848:81;;16914:4;16906:6;16902:17;16892:27;;16848:81;16976:2;16968:6;16965:14;16945:18;16942:38;16939:84;;16995:18;;:::i;:::-;16939:84;16760:269;16709:320;;;:::o;17035:220::-;17175:34;17171:1;17163:6;17159:14;17152:58;17244:3;17239:2;17231:6;17227:15;17220:28;17035:220;:::o;17261:366::-;17403:3;17424:67;17488:2;17483:3;17424:67;:::i;:::-;17417:74;;17500:93;17589:3;17500:93;:::i;:::-;17618:2;17613:3;17609:12;17602:19;;17261:366;;;:::o;17633:419::-;17799:4;17837:2;17826:9;17822:18;17814:26;;17886:9;17880:4;17876:20;17872:1;17861:9;17857:17;17850:47;17914:131;18040:4;17914:131;:::i;:::-;17906:139;;17633:419;;;:::o;18058:248::-;18198:34;18194:1;18186:6;18182:14;18175:58;18267:31;18262:2;18254:6;18250:15;18243:56;18058:248;:::o;18312:366::-;18454:3;18475:67;18539:2;18534:3;18475:67;:::i;:::-;18468:74;;18551:93;18640:3;18551:93;:::i;:::-;18669:2;18664:3;18660:12;18653:19;;18312:366;;;:::o;18684:419::-;18850:4;18888:2;18877:9;18873:18;18865:26;;18937:9;18931:4;18927:20;18923:1;18912:9;18908:17;18901:47;18965:131;19091:4;18965:131;:::i;:::-;18957:139;;18684:419;;;:::o;19109:232::-;19249:34;19245:1;19237:6;19233:14;19226:58;19318:15;19313:2;19305:6;19301:15;19294:40;19109:232;:::o;19347:366::-;19489:3;19510:67;19574:2;19569:3;19510:67;:::i;:::-;19503:74;;19586:93;19675:3;19586:93;:::i;:::-;19704:2;19699:3;19695:12;19688:19;;19347:366;;;:::o;19719:419::-;19885:4;19923:2;19912:9;19908:18;19900:26;;19972:9;19966:4;19962:20;19958:1;19947:9;19943:17;19936:47;20000:131;20126:4;20000:131;:::i;:::-;19992:139;;19719:419;;;:::o;20144:230::-;20284:34;20280:1;20272:6;20268:14;20261:58;20353:13;20348:2;20340:6;20336:15;20329:38;20144:230;:::o;20380:366::-;20522:3;20543:67;20607:2;20602:3;20543:67;:::i;:::-;20536:74;;20619:93;20708:3;20619:93;:::i;:::-;20737:2;20732:3;20728:12;20721:19;;20380:366;;;:::o;20752:419::-;20918:4;20956:2;20945:9;20941:18;20933:26;;21005:9;20999:4;20995:20;20991:1;20980:9;20976:17;20969:47;21033:131;21159:4;21033:131;:::i;:::-;21025:139;;20752:419;;;:::o;21177:231::-;21317:34;21313:1;21305:6;21301:14;21294:58;21386:14;21381:2;21373:6;21369:15;21362:39;21177:231;:::o;21414:366::-;21556:3;21577:67;21641:2;21636:3;21577:67;:::i;:::-;21570:74;;21653:93;21742:3;21653:93;:::i;:::-;21771:2;21766:3;21762:12;21755:19;;21414:366;;;:::o;21786:419::-;21952:4;21990:2;21979:9;21975:18;21967:26;;22039:9;22033:4;22029:20;22025:1;22014:9;22010:17;22003:47;22067:131;22193:4;22067:131;:::i;:::-;22059:139;;21786:419;;;:::o;22211:180::-;22259:77;22256:1;22249:88;22356:4;22353:1;22346:15;22380:4;22377:1;22370:15;22397:166;22537:18;22533:1;22525:6;22521:14;22514:42;22397:166;:::o;22569:366::-;22711:3;22732:67;22796:2;22791:3;22732:67;:::i;:::-;22725:74;;22808:93;22897:3;22808:93;:::i;:::-;22926:2;22921:3;22917:12;22910:19;;22569:366;;;:::o;22941:419::-;23107:4;23145:2;23134:9;23130:18;23122:26;;23194:9;23188:4;23184:20;23180:1;23169:9;23165:17;23158:47;23222:131;23348:4;23222:131;:::i;:::-;23214:139;;22941:419;;;:::o;23366:174::-;23506:26;23502:1;23494:6;23490:14;23483:50;23366:174;:::o;23546:366::-;23688:3;23709:67;23773:2;23768:3;23709:67;:::i;:::-;23702:74;;23785:93;23874:3;23785:93;:::i;:::-;23903:2;23898:3;23894:12;23887:19;;23546:366;;;:::o;23918:419::-;24084:4;24122:2;24111:9;24107:18;24099:26;;24171:9;24165:4;24161:20;24157:1;24146:9;24142:17;24135:47;24199:131;24325:4;24199:131;:::i;:::-;24191:139;;23918:419;;;:::o;24343:228::-;24483:34;24479:1;24471:6;24467:14;24460:58;24552:11;24547:2;24539:6;24535:15;24528:36;24343:228;:::o;24577:366::-;24719:3;24740:67;24804:2;24799:3;24740:67;:::i;:::-;24733:74;;24816:93;24905:3;24816:93;:::i;:::-;24934:2;24929:3;24925:12;24918:19;;24577:366;;;:::o;24949:419::-;25115:4;25153:2;25142:9;25138:18;25130:26;;25202:9;25196:4;25192:20;25188:1;25177:9;25173:17;25166:47;25230:131;25356:4;25230:131;:::i;:::-;25222:139;;24949:419;;;:::o;25374:166::-;25514:18;25510:1;25502:6;25498:14;25491:42;25374:166;:::o;25546:366::-;25688:3;25709:67;25773:2;25768:3;25709:67;:::i;:::-;25702:74;;25785:93;25874:3;25785:93;:::i;:::-;25903:2;25898:3;25894:12;25887:19;;25546:366;;;:::o;25918:419::-;26084:4;26122:2;26111:9;26107:18;26099:26;;26171:9;26165:4;26161:20;26157:1;26146:9;26142:17;26135:47;26199:131;26325:4;26199:131;:::i;:::-;26191:139;;25918:419;;;:::o;26343:170::-;26483:22;26479:1;26471:6;26467:14;26460:46;26343:170;:::o;26519:366::-;26661:3;26682:67;26746:2;26741:3;26682:67;:::i;:::-;26675:74;;26758:93;26847:3;26758:93;:::i;:::-;26876:2;26871:3;26867:12;26860:19;;26519:366;;;:::o;26891:419::-;27057:4;27095:2;27084:9;27080:18;27072:26;;27144:9;27138:4;27134:20;27130:1;27119:9;27115:17;27108:47;27172:131;27298:4;27172:131;:::i;:::-;27164:139;;26891:419;;;:::o;27316:147::-;27417:11;27454:3;27439:18;;27316:147;;;;:::o;27469:114::-;;:::o;27589:398::-;27748:3;27769:83;27850:1;27845:3;27769:83;:::i;:::-;27762:90;;27861:93;27950:3;27861:93;:::i;:::-;27979:1;27974:3;27970:11;27963:18;;27589:398;;;:::o;27993:379::-;28177:3;28199:147;28342:3;28199:147;:::i;:::-;28192:154;;28363:3;28356:10;;27993:379;;;:::o;28378:180::-;28426:77;28423:1;28416:88;28523:4;28520:1;28513:15;28547:4;28544:1;28537:15;28564:191;28604:3;28623:20;28641:1;28623:20;:::i;:::-;28618:25;;28657:20;28675:1;28657:20;:::i;:::-;28652:25;;28700:1;28697;28693:9;28686:16;;28721:3;28718:1;28715:10;28712:36;;;28728:18;;:::i;:::-;28712:36;28564:191;;;;:::o;28761:233::-;28800:3;28823:24;28841:5;28823:24;:::i;:::-;28814:33;;28869:66;28862:5;28859:77;28856:103;;28939:18;;:::i;:::-;28856:103;28986:1;28979:5;28975:13;28968:20;;28761:233;;;:::o;29000:148::-;29102:11;29139:3;29124:18;;29000:148;;;;:::o;29154:390::-;29260:3;29288:39;29321:5;29288:39;:::i;:::-;29343:89;29425:6;29420:3;29343:89;:::i;:::-;29336:96;;29441:65;29499:6;29494:3;29487:4;29480:5;29476:16;29441:65;:::i;:::-;29531:6;29526:3;29522:16;29515:23;;29264:280;29154:390;;;;:::o;29550:155::-;29690:7;29686:1;29678:6;29674:14;29667:31;29550:155;:::o;29711:400::-;29871:3;29892:84;29974:1;29969:3;29892:84;:::i;:::-;29885:91;;29985:93;30074:3;29985:93;:::i;:::-;30103:1;30098:3;30094:11;30087:18;;29711:400;;;:::o;30117:701::-;30398:3;30420:95;30511:3;30502:6;30420:95;:::i;:::-;30413:102;;30532:95;30623:3;30614:6;30532:95;:::i;:::-;30525:102;;30644:148;30788:3;30644:148;:::i;:::-;30637:155;;30809:3;30802:10;;30117:701;;;;;:::o;30824:225::-;30964:34;30960:1;30952:6;30948:14;30941:58;31033:8;31028:2;31020:6;31016:15;31009:33;30824:225;:::o;31055:366::-;31197:3;31218:67;31282:2;31277:3;31218:67;:::i;:::-;31211:74;;31294:93;31383:3;31294:93;:::i;:::-;31412:2;31407:3;31403:12;31396:19;;31055:366;;;:::o;31427:419::-;31593:4;31631:2;31620:9;31616:18;31608:26;;31680:9;31674:4;31670:20;31666:1;31655:9;31651:17;31644:47;31708:131;31834:4;31708:131;:::i;:::-;31700:139;;31427:419;;;:::o;31852:224::-;31992:34;31988:1;31980:6;31976:14;31969:58;32061:7;32056:2;32048:6;32044:15;32037:32;31852:224;:::o;32082:366::-;32224:3;32245:67;32309:2;32304:3;32245:67;:::i;:::-;32238:74;;32321:93;32410:3;32321:93;:::i;:::-;32439:2;32434:3;32430:12;32423:19;;32082:366;;;:::o;32454:419::-;32620:4;32658:2;32647:9;32643:18;32635:26;;32707:9;32701:4;32697:20;32693:1;32682:9;32678:17;32671:47;32735:131;32861:4;32735:131;:::i;:::-;32727:139;;32454:419;;;:::o;32879:223::-;33019:34;33015:1;33007:6;33003:14;32996:58;33088:6;33083:2;33075:6;33071:15;33064:31;32879:223;:::o;33108:366::-;33250:3;33271:67;33335:2;33330:3;33271:67;:::i;:::-;33264:74;;33347:93;33436:3;33347:93;:::i;:::-;33465:2;33460:3;33456:12;33449:19;;33108:366;;;:::o;33480:419::-;33646:4;33684:2;33673:9;33669:18;33661:26;;33733:9;33727:4;33723:20;33719:1;33708:9;33704:17;33697:47;33761:131;33887:4;33761:131;:::i;:::-;33753:139;;33480:419;;;:::o;33905:182::-;34045:34;34041:1;34033:6;34029:14;34022:58;33905:182;:::o;34093:366::-;34235:3;34256:67;34320:2;34315:3;34256:67;:::i;:::-;34249:74;;34332:93;34421:3;34332:93;:::i;:::-;34450:2;34445:3;34441:12;34434:19;;34093:366;;;:::o;34465:419::-;34631:4;34669:2;34658:9;34654:18;34646:26;;34718:9;34712:4;34708:20;34704:1;34693:9;34689:17;34682:47;34746:131;34872:4;34746:131;:::i;:::-;34738:139;;34465:419;;;:::o;34890:182::-;35030:34;35026:1;35018:6;35014:14;35007:58;34890:182;:::o;35078:366::-;35220:3;35241:67;35305:2;35300:3;35241:67;:::i;:::-;35234:74;;35317:93;35406:3;35317:93;:::i;:::-;35435:2;35430:3;35426:12;35419:19;;35078:366;;;:::o;35450:419::-;35616:4;35654:2;35643:9;35639:18;35631:26;;35703:9;35697:4;35693:20;35689:1;35678:9;35674:17;35667:47;35731:131;35857:4;35731:131;:::i;:::-;35723:139;;35450:419;;;:::o;35875:178::-;36015:30;36011:1;36003:6;35999:14;35992:54;35875:178;:::o;36059:366::-;36201:3;36222:67;36286:2;36281:3;36222:67;:::i;:::-;36215:74;;36298:93;36387:3;36298:93;:::i;:::-;36416:2;36411:3;36407:12;36400:19;;36059:366;;;:::o;36431:419::-;36597:4;36635:2;36624:9;36620:18;36612:26;;36684:9;36678:4;36674:20;36670:1;36659:9;36655:17;36648:47;36712:131;36838:4;36712:131;:::i;:::-;36704:139;;36431:419;;;:::o;36856:175::-;36996:27;36992:1;36984:6;36980:14;36973:51;36856:175;:::o;37037:366::-;37179:3;37200:67;37264:2;37259:3;37200:67;:::i;:::-;37193:74;;37276:93;37365:3;37276:93;:::i;:::-;37394:2;37389:3;37385:12;37378:19;;37037:366;;;:::o;37409:419::-;37575:4;37613:2;37602:9;37598:18;37590:26;;37662:9;37656:4;37652:20;37648:1;37637:9;37633:17;37626:47;37690:131;37816:4;37690:131;:::i;:::-;37682:139;;37409:419;;;:::o;37834:237::-;37974:34;37970:1;37962:6;37958:14;37951:58;38043:20;38038:2;38030:6;38026:15;38019:45;37834:237;:::o;38077:366::-;38219:3;38240:67;38304:2;38299:3;38240:67;:::i;:::-;38233:74;;38316:93;38405:3;38316:93;:::i;:::-;38434:2;38429:3;38425:12;38418:19;;38077:366;;;:::o;38449:419::-;38615:4;38653:2;38642:9;38638:18;38630:26;;38702:9;38696:4;38692:20;38688:1;38677:9;38673:17;38666:47;38730:131;38856:4;38730:131;:::i;:::-;38722:139;;38449:419;;;:::o;38874:180::-;38922:77;38919:1;38912:88;39019:4;39016:1;39009:15;39043:4;39040:1;39033:15;39060:98;39111:6;39145:5;39139:12;39129:22;;39060:98;;;:::o;39164:168::-;39247:11;39281:6;39276:3;39269:19;39321:4;39316:3;39312:14;39297:29;;39164:168;;;;:::o;39338:373::-;39424:3;39452:38;39484:5;39452:38;:::i;:::-;39506:70;39569:6;39564:3;39506:70;:::i;:::-;39499:77;;39585:65;39643:6;39638:3;39631:4;39624:5;39620:16;39585:65;:::i;:::-;39675:29;39697:6;39675:29;:::i;:::-;39670:3;39666:39;39659:46;;39428:283;39338:373;;;;:::o;39717:640::-;39912:4;39950:3;39939:9;39935:19;39927:27;;39964:71;40032:1;40021:9;40017:17;40008:6;39964:71;:::i;:::-;40045:72;40113:2;40102:9;40098:18;40089:6;40045:72;:::i;:::-;40127;40195:2;40184:9;40180:18;40171:6;40127:72;:::i;:::-;40246:9;40240:4;40236:20;40231:2;40220:9;40216:18;40209:48;40274:76;40345:4;40336:6;40274:76;:::i;:::-;40266:84;;39717:640;;;;;;;:::o;40363:141::-;40419:5;40450:6;40444:13;40435:22;;40466:32;40492:5;40466:32;:::i;:::-;40363:141;;;;:::o;40510:349::-;40579:6;40628:2;40616:9;40607:7;40603:23;40599:32;40596:119;;;40634:79;;:::i;:::-;40596:119;40754:1;40779:63;40834:7;40825:6;40814:9;40810:22;40779:63;:::i;:::-;40769:73;;40725:127;40510:349;;;;:::o;40865:240::-;41005:34;41001:1;40993:6;40989:14;40982:58;41074:23;41069:2;41061:6;41057:15;41050:48;40865:240;:::o;41111:366::-;41253:3;41274:67;41338:2;41333:3;41274:67;:::i;:::-;41267:74;;41350:93;41439:3;41350:93;:::i;:::-;41468:2;41463:3;41459:12;41452:19;;41111:366;;;:::o;41483:419::-;41649:4;41687:2;41676:9;41672:18;41664:26;;41736:9;41730:4;41726:20;41722:1;41711:9;41707:17;41700:47;41764:131;41890:4;41764:131;:::i;:::-;41756:139;;41483:419;;;:::o;41908:194::-;41948:4;41968:20;41986:1;41968:20;:::i;:::-;41963:25;;42002:20;42020:1;42002:20;:::i;:::-;41997:25;;42046:1;42043;42039:9;42031:17;;42070:1;42064:4;42061:11;42058:37;;;42075:18;;:::i;:::-;42058:37;41908:194;;;;:::o;42108:180::-;42156:77;42153:1;42146:88;42253:4;42250:1;42243:15;42277:4;42274:1;42267:15

Swarm Source

ipfs://2d1def5aa3d708f43ec358ed6796aa287f33c6b09bb8bb3437d394ee3f194ca1

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.