ETH Price: $2,433.50 (-2.22%)

Contract

0xcCD3CBcc6d1135A69D0327440596D6D20cb49984
 
Transaction Hash
Method
Block
From
To
Set Approval For...191494412024-02-03 17:54:11247 days ago1706982851IN
Chad & Brad Family Collection: CHADNFT Token
0 ETH0.0008804418.85929022
Set Approval For...190678422024-01-23 7:18:47258 days ago1705994327IN
Chad & Brad Family Collection: CHADNFT Token
0 ETH0.000450839.65706013
Set Approval For...190666272024-01-23 3:12:47258 days ago1705979567IN
Chad & Brad Family Collection: CHADNFT Token
0 ETH0.000456199.77168251
Set Approval For...190526212024-01-21 3:42:47260 days ago1705808567IN
Chad & Brad Family Collection: CHADNFT Token
0 ETH0.0003051512.3178828
Set Approval For...189286212024-01-03 18:30:11278 days ago1704306611IN
Chad & Brad Family Collection: CHADNFT Token
0 ETH0.0012036125.78154051
Set Approval For...187380322023-12-08 0:41:11305 days ago1701996071IN
Chad & Brad Family Collection: CHADNFT Token
0 ETH0.0012269249.35916816
Set Approval For...186155892023-11-20 21:10:35322 days ago1700514635IN
Chad & Brad Family Collection: CHADNFT Token
0 ETH0.0024289852.02922543
Withdraw185869392023-11-16 20:48:47326 days ago1700167727IN
Chad & Brad Family Collection: CHADNFT Token
0 ETH0.001051634.46526573
Set Approval For...184461142023-10-28 3:47:23345 days ago1698464843IN
Chad & Brad Family Collection: CHADNFT Token
0 ETH0.0006084913.03408052
Set Approval For...182601242023-10-02 3:20:59371 days ago1696216859IN
Chad & Brad Family Collection: CHADNFT Token
0 ETH0.00029416.29983511
Set Approval For...182407772023-09-29 10:28:47374 days ago1695983327IN
Chad & Brad Family Collection: CHADNFT Token
0 ETH0.000162726.56856462
Set Approval For...181214162023-09-12 16:23:47391 days ago1694535827IN
Chad & Brad Family Collection: CHADNFT Token
0 ETH0.0011146623.87629929
Set Approval For...180931382023-09-08 17:18:47395 days ago1694193527IN
Chad & Brad Family Collection: CHADNFT Token
0 ETH0.0012779827.32538891
Set Approval For...180832872023-09-07 8:12:47396 days ago1694074367IN
Chad & Brad Family Collection: CHADNFT Token
0 ETH0.000563712.07455752
Set Approval For...179146692023-08-14 17:46:11420 days ago1692035171IN
Chad & Brad Family Collection: CHADNFT Token
0 ETH0.0017126336.68486662
Set Approval For...178720182023-08-08 18:34:11426 days ago1691519651IN
Chad & Brad Family Collection: CHADNFT Token
0 ETH0.0016804635.99585975
Set Approval For...178373862023-08-03 22:16:23431 days ago1691100983IN
Chad & Brad Family Collection: CHADNFT Token
0 ETH0.0008285417.7474596
Safe Transfer Fr...178176292023-08-01 4:00:47433 days ago1690862447IN
Chad & Brad Family Collection: CHADNFT Token
0 ETH0.0013881419.06981575
Mint176343162023-07-06 10:48:47459 days ago1688640527IN
Chad & Brad Family Collection: CHADNFT Token
0.07 ETH0.0017521822.39248084
Set Approval For...176148642023-07-03 17:17:11462 days ago1688404631IN
Chad & Brad Family Collection: CHADNFT Token
0 ETH0.0016455135.2471363
Mint By Owner176088412023-07-02 20:56:59463 days ago1688331419IN
Chad & Brad Family Collection: CHADNFT Token
0 ETH0.001001911.95792618
Mint By Owner176088382023-07-02 20:56:23463 days ago1688331383IN
Chad & Brad Family Collection: CHADNFT Token
0 ETH0.000928612.10408876
Set Approval For...175636132023-06-26 12:31:23469 days ago1687782683IN
Chad & Brad Family Collection: CHADNFT Token
0 ETH0.0003651914.74159425
Mint175034162023-06-18 1:31:47477 days ago1687051907IN
Chad & Brad Family Collection: CHADNFT Token
0.035 ETH0.0014064812.79311818
Set Approval For...173753682023-05-31 0:41:11496 days ago1685493671IN
Chad & Brad Family Collection: CHADNFT Token
0 ETH0.0014941932.00583071
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
185869392023-11-16 20:48:47326 days ago1700167727
Chad & Brad Family Collection: CHADNFT Token
0.105 ETH
173095062023-05-21 18:25:59505 days ago1684693559
Chad & Brad Family Collection: CHADNFT Token
0.14 ETH
172283502023-05-10 6:53:11516 days ago1683701591
Chad & Brad Family Collection: CHADNFT Token
0.21 ETH
168646502023-03-19 22:13:11568 days ago1679263991
Chad & Brad Family Collection: CHADNFT Token
0.245 ETH
163706152023-01-09 17:03:35637 days ago1673283815
Chad & Brad Family Collection: CHADNFT Token
0.7 ETH
163078112022-12-31 22:44:11646 days ago1672526651
Chad & Brad Family Collection: CHADNFT Token
0.14 ETH
162531182022-12-24 7:31:59653 days ago1671867119
Chad & Brad Family Collection: CHADNFT Token
0.035 ETH
162199972022-12-19 16:40:35658 days ago1671468035
Chad & Brad Family Collection: CHADNFT Token
0.035 ETH
161927452022-12-15 21:21:23662 days ago1671139283
Chad & Brad Family Collection: CHADNFT Token
0.105 ETH
161841572022-12-14 16:34:11663 days ago1671035651
Chad & Brad Family Collection: CHADNFT Token
0.21 ETH
161224982022-12-06 1:34:47671 days ago1670290487
Chad & Brad Family Collection: CHADNFT Token
0.14 ETH
160703082022-11-28 18:34:23679 days ago1669660463
Chad & Brad Family Collection: CHADNFT Token
0.28 ETH
159986292022-11-18 18:16:11689 days ago1668795371
Chad & Brad Family Collection: CHADNFT Token
0.21 ETH
159484502022-11-11 18:05:35696 days ago1668189935
Chad & Brad Family Collection: CHADNFT Token
0.385 ETH
158499262022-10-28 23:45:11710 days ago1667000711
Chad & Brad Family Collection: CHADNFT Token
0.105 ETH
158262262022-10-25 16:15:59713 days ago1666714559
Chad & Brad Family Collection: CHADNFT Token
0.49 ETH
157835632022-10-19 17:11:59719 days ago1666199519
Chad & Brad Family Collection: CHADNFT Token
0.42 ETH
156471322022-09-30 15:45:23738 days ago1664552723
Chad & Brad Family Collection: CHADNFT Token
2.52 ETH
156074022022-09-25 2:28:59743 days ago1664072939
Chad & Brad Family Collection: CHADNFT Token
0.3 ETH
155334682022-09-14 14:36:37754 days ago1663166197
Chad & Brad Family Collection: CHADNFT Token
0.35 ETH
154788772022-09-05 16:32:48763 days ago1662395568
Chad & Brad Family Collection: CHADNFT Token
0.3 ETH
154616022022-09-02 21:50:50766 days ago1662155450
Chad & Brad Family Collection: CHADNFT Token
0.25 ETH
153469842022-08-15 16:08:26784 days ago1660579706
Chad & Brad Family Collection: CHADNFT Token
0.75 ETH
152702322022-08-03 15:26:43796 days ago1659540403
Chad & Brad Family Collection: CHADNFT Token
3.13 ETH
151625892022-07-17 21:39:25813 days ago1658093965
Chad & Brad Family Collection: CHADNFT Token
0.2 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ChadFamily

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-16
*/

// SPDX-License-Identifier: MIT

// File @openzeppelin/contracts/utils/[email protected]
pragma solidity ^0.8.0;

library Address {

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File @openzeppelin/contracts/utils/[email protected]
pragma solidity ^0.8.0;

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

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

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

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

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


// File @openzeppelin/contracts/utils/[email protected]
pragma solidity ^0.8.0;

library Counters {
    struct Counter {
        
        uint256 _value; // default: 0
    }

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

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

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

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

// File @openzeppelin/contracts/utils/introspection/[email protected]
pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC721/[email protected]
pragma solidity ^0.8.0;

interface IERC721 is IERC165 {
    
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

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

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

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

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

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

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

    function approve(address to, uint256 tokenId) external;

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

    function setApprovalForAll(address operator, bool _approved) external;

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

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


// File @openzeppelin/contracts/token/ERC721/[email protected]
pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]
pragma solidity ^0.8.0;

interface IERC721Metadata is IERC721 {
    
    function name() external view returns (string memory);

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

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





// File @openzeppelin/contracts/utils/[email protected]
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;
    }
}


// File @openzeppelin/contracts/utils/introspection/[email protected]
pragma solidity ^0.8.0;

abstract contract ERC165 is IERC165 {

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


// File @openzeppelin/contracts/token/ERC721/[email protected]
pragma solidity ^0.8.0;

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

    string private _name;

    string private _symbol;

    mapping(uint256 => address) private _owners;

    mapping(address => uint256) private _balances;

    mapping(uint256 => address) private _tokenApprovals;

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(address(0), tokenId);

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

        _approve(address(0), tokenId);

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

        emit Transfer(from, to, tokenId);
    }

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

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

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


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]


pragma solidity ^0.8.0;

interface IERC721Enumerable is IERC721 {
    
    function totalSupply() external view returns (uint256);

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

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


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]


pragma solidity ^0.8.0;

abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    mapping(uint256 => uint256) private _ownedTokensIndex;

    uint256[] private _allTokens;

    mapping(uint256 => uint256) private _allTokensIndex;

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

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

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

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

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

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

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

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

    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {

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

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

            _ownedTokens[from][tokenIndex] = lastTokenId;
            _ownedTokensIndex[lastTokenId] = tokenIndex;
        }

        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; 
        _allTokensIndex[lastTokenId] = tokenIndex; 

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

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

    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
    }

    struct AddressData {
        uint128 balance;
        uint128 numberMinted;
    }

    uint256 private currentIndex = 0;

     uint256 internal immutable maxBatchSize;

    string private _name;

    string private _symbol;

    mapping(uint256 => TokenOwnership) private _ownerships;

    mapping(address => AddressData) private _addressData;

    mapping(uint256 => address) private _tokenApprovals;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId, owner);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

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

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public override {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            "ERC721A: transfer to non ERC721Receiver implementer"
        );
    }

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

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

    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        uint256 startTokenId = currentIndex;
        require(to != address(0), "ERC721A: mint to the zero address");
        require(!_exists(startTokenId), "ERC721A: token already minted");
        require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high");

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

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

        uint256 updatedIndex = startTokenId;

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

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

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

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

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

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

        _beforeTokenTransfers(from, to, tokenId, 1);

        _approve(address(0), tokenId, prevOwnership.addr);

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

        uint256 nextTokenId = tokenId + 1;
        if (_ownerships[nextTokenId].addr == address(0)) {
            if (_exists(nextTokenId)) {
                _ownerships[nextTokenId] = TokenOwnership(prevOwnership.addr, prevOwnership.startTimestamp);
            }
        }

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

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

    uint256 public nextOwnerToExplicitlySet = 0;

    function _setOwnersExplicit(uint256 quantity) internal {
        uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
        require(quantity > 0, "quantity must be nonzero");
        uint256 endIndex = oldNextOwnerToSet + quantity - 1;
        if (endIndex > currentIndex - 1) {
            endIndex = currentIndex - 1;
        }
        require(_exists(endIndex), "not enough minted yet for this cleanup");
        for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
            if (_ownerships[i].addr == address(0)) {
                TokenOwnership memory ownership = ownershipOf(i);
                _ownerships[i] = TokenOwnership(ownership.addr, ownership.startTimestamp);
            }
        }
        nextOwnerToExplicitlySet = endIndex + 1;
    }

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

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

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

pragma solidity ^0.8.0;

contract ChadFamily is ERC721A
{
    using Strings for uint256;

    string public baseURI;
    uint256 public cost;
    uint256 public maxSupply;
    uint256 public maxMintAmount = 100;
    uint256 public maxMintPerTransaction = 100;
    address public owner;
    bool public preSaleLive;
    bool public mintLive;

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

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

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

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

    constructor(string memory defaultBaseURI) ERC721A("Chad & Brad Family Collection", "CHADNFT", maxMintAmount) {
        owner = msg.sender;
        baseURI = defaultBaseURI;
        maxSupply = 5555;
        maxMintPerTransaction;
        cost = 100000000000000000;
    }

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

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

    function setCost(uint256 _newCost) public onlyOwner {
        cost = _newCost;
    }

    function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner {
        maxMintAmount = _newmaxMintAmount;
    }

    function setmaxMintPerTransaction(uint256 _newmaxMintPerTransaction) public onlyOwner {
        maxMintPerTransaction = _newmaxMintPerTransaction;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    fallback() external payable { }

    receive() external payable { }
}

Contract Security Audit

Contract ABI

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

60a06040526000805560006007556064600b556064600c553480156200002457600080fd5b50604051620058c2380380620058c283398181016040528101906200004a9190620002e3565b6040518060400160405280601d81526020017f43686164202620427261642046616d696c7920436f6c6c656374696f6e0000008152506040518060400160405280600781526020017f434841444e465400000000000000000000000000000000000000000000000000815250600b5460008111620000ff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000f6906200035b565b60405180910390fd5b826001908051906020019062000117929190620001b5565b50816002908051906020019062000130929190620001b5565b50806080818152505050505033600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806008908051906020019062000195929190620001b5565b506115b3600a8190555067016345785d8a00006009819055505062000561565b828054620001c39062000423565b90600052602060002090601f016020900481019282620001e7576000855562000233565b82601f106200020257805160ff191683800117855562000233565b8280016001018555821562000233579182015b828111156200023257825182559160200191906001019062000215565b5b50905062000242919062000246565b5090565b5b808211156200026157600081600090555060010162000247565b5090565b60006200027c6200027684620003a6565b6200037d565b9050828152602081018484840111156200029b576200029a620004f2565b5b620002a8848285620003ed565b509392505050565b600082601f830112620002c857620002c7620004ed565b5b8151620002da84826020860162000265565b91505092915050565b600060208284031215620002fc57620002fb620004fc565b5b600082015167ffffffffffffffff8111156200031d576200031c620004f7565b5b6200032b84828501620002b0565b91505092915050565b600062000343602783620003dc565b9150620003508262000512565b604082019050919050565b60006020820190508181036000830152620003768162000334565b9050919050565b6000620003896200039c565b905062000397828262000459565b919050565b6000604051905090565b600067ffffffffffffffff821115620003c457620003c3620004be565b5b620003cf8262000501565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200040d578082015181840152602081019050620003f0565b838111156200041d576000848401525b50505050565b600060028204905060018216806200043c57607f821691505b602082108114156200045357620004526200048f565b5b50919050565b620004648262000501565b810181811067ffffffffffffffff82111715620004865762000485620004be565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b60805161531b620005a7600039600081816111250152818161116a015281816111a5015281816111cb01528181612d0801528181612d31015261330e015261531b6000f3fe6080604052600436106102345760003560e01c80635bd90b761161012e5780638da5cb5b116100ab578063c87b56dd1161006f578063c87b56dd14610804578063d5abeb0114610841578063d7224ba01461086c578063e8656fcc14610897578063e985e9c5146108c25761023b565b80638da5cb5b1461074057806395d89b411461076b578063a0712d6814610796578063a22cb465146107b2578063b88d4fde146107db5761023b565b8063740d73f3116100f2578063740d73f3146106925780637835c635146106bb57806378835f42146106d75780637f00c7a61461070057806389bdeec6146107295761023b565b80635bd90b76146105855780636352211e146105b05780636c0360eb146105ed5780636f9170f61461061857806370a08231146106555761023b565b806323b872dd116101bc5780633ccfd60b116101805780633ccfd60b146104c357806342842e0e146104cd57806344a0d68a146104f65780634f6ccce71461051f57806355f804b31461055c5761023b565b806323b872dd146103ce5780632d20fb60146103f75780632f745c59146104205780633542aee21461045d57806337351b0f146104865761023b565b8063095ea7b311610203578063095ea7b31461030d578063105739b81461033657806313faede61461034d57806318160ddd14610378578063239c70ae146103a35761023b565b806301f569971461023d57806301ffc9a71461026857806306fdde03146102a5578063081812fc146102d05761023b565b3661023b57005b005b34801561024957600080fd5b506102526108ff565b60405161025f919061460f565b60405180910390f35b34801561027457600080fd5b5061028f600480360381019061028a9190613bcb565b610905565b60405161029c9190614232565b60405180910390f35b3480156102b157600080fd5b506102ba610a4f565b6040516102c7919061424d565b60405180910390f35b3480156102dc57600080fd5b506102f760048036038101906102f29190613c6e565b610ae1565b60405161030491906141cb565b60405180910390f35b34801561031957600080fd5b50610334600480360381019061032f9190613b3e565b610b66565b005b34801561034257600080fd5b5061034b610c7f565b005b34801561035957600080fd5b50610362610d7d565b60405161036f919061460f565b60405180910390f35b34801561038457600080fd5b5061038d610d83565b60405161039a919061460f565b60405180910390f35b3480156103af57600080fd5b506103b8610d8c565b6040516103c5919061460f565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f09190613a28565b610d92565b005b34801561040357600080fd5b5061041e60048036038101906104199190613c6e565b610da2565b005b34801561042c57600080fd5b5061044760048036038101906104429190613b3e565b610e3e565b604051610454919061460f565b60405180910390f35b34801561046957600080fd5b50610484600480360381019061047f9190613b3e565b61103c565b005b34801561049257600080fd5b506104ad60048036038101906104a891906139bb565b611202565b6040516104ba919061460f565b60405180910390f35b6104cb61124b565b005b3480156104d957600080fd5b506104f460048036038101906104ef9190613a28565b61138a565b005b34801561050257600080fd5b5061051d60048036038101906105189190613c6e565b6113aa565b005b34801561052b57600080fd5b5061054660048036038101906105419190613c6e565b611444565b604051610553919061460f565b60405180910390f35b34801561056857600080fd5b50610583600480360381019061057e9190613c25565b611497565b005b34801561059157600080fd5b5061059a611541565b6040516105a79190614232565b60405180910390f35b3480156105bc57600080fd5b506105d760048036038101906105d29190613c6e565b611554565b6040516105e491906141cb565b60405180910390f35b3480156105f957600080fd5b5061060261156a565b60405161060f919061424d565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a91906139bb565b6115f8565b60405161064c9190614232565b60405180910390f35b34801561066157600080fd5b5061067c600480360381019061067791906139bb565b61164e565b604051610689919061460f565b60405180910390f35b34801561069e57600080fd5b506106b960048036038101906106b49190613b7e565b611737565b005b6106d560048036038101906106d09190613c6e565b61186c565b005b3480156106e357600080fd5b506106fe60048036038101906106f99190613c6e565b611ae5565b005b34801561070c57600080fd5b5061072760048036038101906107229190613c6e565b611b7f565b005b34801561073557600080fd5b5061073e611c19565b005b34801561074c57600080fd5b50610755611cfc565b60405161076291906141cb565b60405180910390f35b34801561077757600080fd5b50610780611d22565b60405161078d919061424d565b60405180910390f35b6107b060048036038101906107ab9190613c6e565b611db4565b005b3480156107be57600080fd5b506107d960048036038101906107d49190613afe565b611fe6565b005b3480156107e757600080fd5b5061080260048036038101906107fd9190613a7b565b612167565b005b34801561081057600080fd5b5061082b60048036038101906108269190613c6e565b6121c3565b604051610838919061424d565b60405180910390f35b34801561084d57600080fd5b506108566122a7565b604051610863919061460f565b60405180910390f35b34801561087857600080fd5b506108816122ad565b60405161088e919061460f565b60405180910390f35b3480156108a357600080fd5b506108ac6122b3565b6040516108b99190614232565b60405180910390f35b3480156108ce57600080fd5b506108e960048036038101906108e491906139e8565b6122c6565b6040516108f69190614232565b60405180910390f35b600c5481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109d057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a3857507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a485750610a478261235a565b5b9050919050565b606060018054610a5e9061498a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8a9061498a565b8015610ad75780601f10610aac57610100808354040283529160200191610ad7565b820191906000526020600020905b815481529060010190602001808311610aba57829003601f168201915b5050505050905090565b6000610aec826123c4565b610b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b22906145cf565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b7182611554565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd99061444f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c016123d1565b73ffffffffffffffffffffffffffffffffffffffff161480610c305750610c2f81610c2a6123d1565b6122c6565b5b610c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c669061434f565b60405180910390fd5b610c7a8383836123d9565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d06906145af565b60405180910390fd5b600d60159054906101000a900460ff1615610d44576000600d60156101000a81548160ff021916908315150217905550610d7b565b6000600d60146101000a81548160ff0219169083151502179055506001600d60156101000a81548160ff0219169083151502179055505b565b60095481565b60008054905090565b600b5481565b610d9d83838361248b565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e29906145af565b60405180910390fd5b610e3b81612a44565b50565b6000610e498361164e565b8210610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e819061426f565b60405180910390fd5b6000610e94610d83565b905060008060005b83811015610ffa576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610f8e57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fe65786841415610fd7578195505050505050611036565b8380610fe2906149ed565b9450505b508080610ff2906149ed565b915050610e9c565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102d9061454f565b60405180910390fd5b92915050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c3906145af565b60405180910390fd5b600a54816110d8610d83565b6110e29190614745565b1115611123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111a906144cf565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008111611159576111548282612c96565b6111fe565b60008190505b60008111156111fc577f0000000000000000000000000000000000000000000000000000000000000000811161119f576111998382612c96565b506111fe565b6111c9837f0000000000000000000000000000000000000000000000000000000000000000612c96565b7f0000000000000000000000000000000000000000000000000000000000000000816111f5919061485a565b905061115f565b505b5050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d2906145af565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051611301906141b6565b60006040518083038185875af1925050503d806000811461133e576040519150601f19603f3d011682016040523d82523d6000602084013e611343565b606091505b5050905080611387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137e906142af565b60405180910390fd5b50565b6113a583838360405180602001604052806000815250612167565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461143a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611431906145af565b60405180910390fd5b8060098190555050565b600061144e610d83565b821061148f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611486906142ef565b60405180910390fd5b819050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151e906145af565b60405180910390fd5b806008908051906020019061153d92919061373f565b5050565b600d60149054906101000a900460ff1681565b600061155f82612cb4565b600001519050919050565b600880546115779061498a565b80601f01602080910402602001604051908101604052809291908181526020018280546115a39061498a565b80156115f05780601f106115c5576101008083540402835291602001916115f0565b820191906000526020600020905b8154815290600101906020018083116115d357829003601f168201915b505050505081565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b69061438f565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117be906145af565b60405180910390fd5b60005b82829050811015611867576001600e60008585858181106117ee576117ed614af4565b5b905060200201602081019061180391906139bb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061185f906149ed565b9150506117ca565b505050565b600d60149054906101000a900460ff166118bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b29061452f565b60405180910390fd5b60003390506000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611990576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119879061450f565b60405180910390fd5b600b54838261199f9190614745565b11156119e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d79061442f565b60405180910390fd5b600a54836119ec610d83565b6119f69190614745565b1115611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e906144cf565b60405180910390fd5b82600954611a4591906147cc565b341015611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7e9061446f565b60405180910390fd5b8281611a939190614745565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611ae03384612c96565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6c906145af565b60405180910390fd5b80600c8190555050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c06906145af565b60405180910390fd5b80600b8190555050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca0906145af565b60405180910390fd5b600d60149054906101000a900460ff1615611cde576000600d60146101000a81548160ff021916908315150217905550611cfa565b6001600d60146101000a81548160ff0219169083151502179055505b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060028054611d319061498a565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5d9061498a565b8015611daa5780601f10611d7f57610100808354040283529160200191611daa565b820191906000526020600020905b815481529060010190602001808311611d8d57829003601f168201915b5050505050905090565b600d60159054906101000a900460ff16611e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfa9061432f565b60405180910390fd5b60003390506000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600b548382611e5b9190614745565b1115611e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e939061442f565b60405180910390fd5b600c54831115611ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed8906143cf565b60405180910390fd5b600a5483611eed610d83565b611ef79190614745565b1115611f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2f906144cf565b60405180910390fd5b82600954611f4691906147cc565b341015611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f9061446f565b60405180910390fd5b8281611f949190614745565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611fe13384612c96565b505050565b611fee6123d1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561205c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612053906143ef565b60405180910390fd5b80600660006120696123d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166121166123d1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161215b9190614232565b60405180910390a35050565b61217284848461248b565b61217e84848484612eb7565b6121bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b49061448f565b60405180910390fd5b50505050565b60606121ce826123c4565b61220d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122049061428f565b60405180910390fd5b600061221761304e565b905060006040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525090506000825111612271576040518060200160405280600081525061229e565b8161227b856130e0565b8260405160200161228e93929190614185565b6040516020818303038152906040525b92505050919050565b600a5481565b60075481565b600d60159054906101000a900460ff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061249682612cb4565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166124bd6123d1565b73ffffffffffffffffffffffffffffffffffffffff16148061251957506124e26123d1565b73ffffffffffffffffffffffffffffffffffffffff1661250184610ae1565b73ffffffffffffffffffffffffffffffffffffffff16145b806125355750612534826000015161252f6123d1565b6122c6565b5b905080612577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256e9061440f565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146125e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e0906143af565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612659576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126509061430f565b60405180910390fd5b6126668585856001613241565b61267660008484600001516123d9565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166126e49190614826565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661278891906146ff565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461288e9190614745565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156129d457612904816123c4565b156129d3576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a3c8686866001613247565b505050505050565b6000600754905060008211612a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a859061436f565b60405180910390fd5b600060018383612a9e9190614745565b612aa8919061485a565b90506001600054612ab9919061485a565b811115612ad2576001600054612acf919061485a565b90505b612adb816123c4565b612b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b119061456f565b60405180910390fd5b60008290505b818111612c7d57600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612c6a576000612b9d82612cb4565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612c75906149ed565b915050612b20565b50600181612c8b9190614745565b600781905550505050565b612cb082826040518060200160405280600081525061324d565b5050565b612cbc6137c5565b612cc5826123c4565b612d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfb906142cf565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310612d685760017f000000000000000000000000000000000000000000000000000000000000000084612d5b919061485a565b612d659190614745565b90505b60008390505b818110612e76576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e6257809350505050612eb2565b508080612e6e90614960565b915050612d6e565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea99061458f565b60405180910390fd5b919050565b6000612ed88473ffffffffffffffffffffffffffffffffffffffff1661372c565b15613041578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f016123d1565b8786866040518563ffffffff1660e01b8152600401612f2394939291906141e6565b602060405180830381600087803b158015612f3d57600080fd5b505af1925050508015612f6e57506040513d601f19601f82011682018060405250810190612f6b9190613bf8565b60015b612ff1573d8060008114612f9e576040519150601f19603f3d011682016040523d82523d6000602084013e612fa3565b606091505b50600081511415612fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe09061448f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613046565b600190505b949350505050565b60606008805461305d9061498a565b80601f01602080910402602001604051908101604052809291908181526020018280546130899061498a565b80156130d65780601f106130ab576101008083540402835291602001916130d6565b820191906000526020600020905b8154815290600101906020018083116130b957829003601f168201915b5050505050905090565b60606000821415613128576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061323c565b600082905060005b6000821461315a578080613143906149ed565b915050600a82613153919061479b565b9150613130565b60008167ffffffffffffffff81111561317657613175614b23565b5b6040519080825280601f01601f1916602001820160405280156131a85781602001600182028036833780820191505090505b5090505b60008514613235576001826131c1919061485a565b9150600a856131d09190614a36565b60306131dc9190614745565b60f81b8183815181106131f2576131f1614af4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561322e919061479b565b94506131ac565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156132c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ba906144ef565b60405180910390fd5b6132cc816123c4565b1561330c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613303906144af565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000083111561336f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613366906145ef565b60405180910390fd5b61337c6000858386613241565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161347991906146ff565b6fffffffffffffffffffffffffffffffff1681526020018583602001516134a091906146ff565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561370f57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136af6000888488612eb7565b6136ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136e59061448f565b60405180910390fd5b81806136f9906149ed565b9250508080613707906149ed565b91505061363e565b50806000819055506137246000878588613247565b505050505050565b600080823b905060008111915050919050565b82805461374b9061498a565b90600052602060002090601f01602090048101928261376d57600085556137b4565b82601f1061378657805160ff19168380011785556137b4565b828001600101855582156137b4579182015b828111156137b3578251825591602001919060010190613798565b5b5090506137c191906137ff565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613818576000816000905550600101613800565b5090565b600061382f61382a8461464f565b61462a565b90508281526020810184848401111561384b5761384a614b61565b5b61385684828561491e565b509392505050565b600061387161386c84614680565b61462a565b90508281526020810184848401111561388d5761388c614b61565b5b61389884828561491e565b509392505050565b6000813590506138af81615289565b92915050565b60008083601f8401126138cb576138ca614b57565b5b8235905067ffffffffffffffff8111156138e8576138e7614b52565b5b60208301915083602082028301111561390457613903614b5c565b5b9250929050565b60008135905061391a816152a0565b92915050565b60008135905061392f816152b7565b92915050565b600081519050613944816152b7565b92915050565b600082601f83011261395f5761395e614b57565b5b813561396f84826020860161381c565b91505092915050565b600082601f83011261398d5761398c614b57565b5b813561399d84826020860161385e565b91505092915050565b6000813590506139b5816152ce565b92915050565b6000602082840312156139d1576139d0614b6b565b5b60006139df848285016138a0565b91505092915050565b600080604083850312156139ff576139fe614b6b565b5b6000613a0d858286016138a0565b9250506020613a1e858286016138a0565b9150509250929050565b600080600060608486031215613a4157613a40614b6b565b5b6000613a4f868287016138a0565b9350506020613a60868287016138a0565b9250506040613a71868287016139a6565b9150509250925092565b60008060008060808587031215613a9557613a94614b6b565b5b6000613aa3878288016138a0565b9450506020613ab4878288016138a0565b9350506040613ac5878288016139a6565b925050606085013567ffffffffffffffff811115613ae657613ae5614b66565b5b613af28782880161394a565b91505092959194509250565b60008060408385031215613b1557613b14614b6b565b5b6000613b23858286016138a0565b9250506020613b348582860161390b565b9150509250929050565b60008060408385031215613b5557613b54614b6b565b5b6000613b63858286016138a0565b9250506020613b74858286016139a6565b9150509250929050565b60008060208385031215613b9557613b94614b6b565b5b600083013567ffffffffffffffff811115613bb357613bb2614b66565b5b613bbf858286016138b5565b92509250509250929050565b600060208284031215613be157613be0614b6b565b5b6000613bef84828501613920565b91505092915050565b600060208284031215613c0e57613c0d614b6b565b5b6000613c1c84828501613935565b91505092915050565b600060208284031215613c3b57613c3a614b6b565b5b600082013567ffffffffffffffff811115613c5957613c58614b66565b5b613c6584828501613978565b91505092915050565b600060208284031215613c8457613c83614b6b565b5b6000613c92848285016139a6565b91505092915050565b613ca48161488e565b82525050565b613cb3816148a0565b82525050565b6000613cc4826146b1565b613cce81856146c7565b9350613cde81856020860161492d565b613ce781614b70565b840191505092915050565b6000613cfd826146bc565b613d0781856146e3565b9350613d1781856020860161492d565b613d2081614b70565b840191505092915050565b6000613d36826146bc565b613d4081856146f4565b9350613d5081856020860161492d565b80840191505092915050565b6000613d696022836146e3565b9150613d7482614b81565b604082019050919050565b6000613d8c601f836146e3565b9150613d9782614bd0565b602082019050919050565b6000613daf600f836146e3565b9150613dba82614bf9565b602082019050919050565b6000613dd2602a836146e3565b9150613ddd82614c22565b604082019050919050565b6000613df56023836146e3565b9150613e0082614c71565b604082019050919050565b6000613e186025836146e3565b9150613e2382614cc0565b604082019050919050565b6000613e3b600d836146e3565b9150613e4682614d0f565b602082019050919050565b6000613e5e6039836146e3565b9150613e6982614d38565b604082019050919050565b6000613e816018836146e3565b9150613e8c82614d87565b602082019050919050565b6000613ea4602b836146e3565b9150613eaf82614db0565b604082019050919050565b6000613ec76026836146e3565b9150613ed282614dff565b604082019050919050565b6000613eea6011836146e3565b9150613ef582614e4e565b602082019050919050565b6000613f0d601a836146e3565b9150613f1882614e77565b602082019050919050565b6000613f306032836146e3565b9150613f3b82614ea0565b604082019050919050565b6000613f53600d836146e3565b9150613f5e82614eef565b602082019050919050565b6000613f766022836146e3565b9150613f8182614f18565b604082019050919050565b6000613f996000836146d8565b9150613fa482614f67565b600082019050919050565b6000613fbc6012836146e3565b9150613fc782614f6a565b602082019050919050565b6000613fdf6033836146e3565b9150613fea82614f93565b604082019050919050565b6000614002601d836146e3565b915061400d82614fe2565b602082019050919050565b60006140256010836146e3565b91506140308261500b565b602082019050919050565b60006140486021836146e3565b915061405382615034565b604082019050919050565b600061406b600f836146e3565b915061407682615083565b602082019050919050565b600061408e6010836146e3565b9150614099826150ac565b602082019050919050565b60006140b1602e836146e3565b91506140bc826150d5565b604082019050919050565b60006140d46026836146e3565b91506140df82615124565b604082019050919050565b60006140f7602f836146e3565b915061410282615173565b604082019050919050565b600061411a6009836146e3565b9150614125826151c2565b602082019050919050565b600061413d602d836146e3565b9150614148826151eb565b604082019050919050565b60006141606022836146e3565b915061416b8261523a565b604082019050919050565b61417f81614914565b82525050565b60006141918286613d2b565b915061419d8285613d2b565b91506141a98284613d2b565b9150819050949350505050565b60006141c182613f8c565b9150819050919050565b60006020820190506141e06000830184613c9b565b92915050565b60006080820190506141fb6000830187613c9b565b6142086020830186613c9b565b6142156040830185614176565b81810360608301526142278184613cb9565b905095945050505050565b60006020820190506142476000830184613caa565b92915050565b600060208201905081810360008301526142678184613cf2565b905092915050565b6000602082019050818103600083015261428881613d5c565b9050919050565b600060208201905081810360008301526142a881613d7f565b9050919050565b600060208201905081810360008301526142c881613da2565b9050919050565b600060208201905081810360008301526142e881613dc5565b9050919050565b6000602082019050818103600083015261430881613de8565b9050919050565b6000602082019050818103600083015261432881613e0b565b9050919050565b6000602082019050818103600083015261434881613e2e565b9050919050565b6000602082019050818103600083015261436881613e51565b9050919050565b6000602082019050818103600083015261438881613e74565b9050919050565b600060208201905081810360008301526143a881613e97565b9050919050565b600060208201905081810360008301526143c881613eba565b9050919050565b600060208201905081810360008301526143e881613edd565b9050919050565b6000602082019050818103600083015261440881613f00565b9050919050565b6000602082019050818103600083015261442881613f23565b9050919050565b6000602082019050818103600083015261444881613f46565b9050919050565b6000602082019050818103600083015261446881613f69565b9050919050565b6000602082019050818103600083015261448881613faf565b9050919050565b600060208201905081810360008301526144a881613fd2565b9050919050565b600060208201905081810360008301526144c881613ff5565b9050919050565b600060208201905081810360008301526144e881614018565b9050919050565b600060208201905081810360008301526145088161403b565b9050919050565b600060208201905081810360008301526145288161405e565b9050919050565b6000602082019050818103600083015261454881614081565b9050919050565b60006020820190508181036000830152614568816140a4565b9050919050565b60006020820190508181036000830152614588816140c7565b9050919050565b600060208201905081810360008301526145a8816140ea565b9050919050565b600060208201905081810360008301526145c88161410d565b9050919050565b600060208201905081810360008301526145e881614130565b9050919050565b6000602082019050818103600083015261460881614153565b9050919050565b60006020820190506146246000830184614176565b92915050565b6000614634614645565b905061464082826149bc565b919050565b6000604051905090565b600067ffffffffffffffff82111561466a57614669614b23565b5b61467382614b70565b9050602081019050919050565b600067ffffffffffffffff82111561469b5761469a614b23565b5b6146a482614b70565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061470a826148d8565b9150614715836148d8565b9250826fffffffffffffffffffffffffffffffff0382111561473a57614739614a67565b5b828201905092915050565b600061475082614914565b915061475b83614914565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147905761478f614a67565b5b828201905092915050565b60006147a682614914565b91506147b183614914565b9250826147c1576147c0614a96565b5b828204905092915050565b60006147d782614914565b91506147e283614914565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561481b5761481a614a67565b5b828202905092915050565b6000614831826148d8565b915061483c836148d8565b92508282101561484f5761484e614a67565b5b828203905092915050565b600061486582614914565b915061487083614914565b92508282101561488357614882614a67565b5b828203905092915050565b6000614899826148f4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561494b578082015181840152602081019050614930565b8381111561495a576000848401525b50505050565b600061496b82614914565b9150600082141561497f5761497e614a67565b5b600182039050919050565b600060028204905060018216806149a257607f821691505b602082108114156149b6576149b5614ac5565b5b50919050565b6149c582614b70565b810181811067ffffffffffffffff821117156149e4576149e3614b23565b5b80604052505050565b60006149f882614914565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a2b57614a2a614a67565b5b600182019050919050565b6000614a4182614914565b9150614a4c83614914565b925082614a5c57614a5b614a96565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00600082015250565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f6d696e74206e6f74206c69766500000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f616d6f756e74206d757374203c206d6178000000000000000000000000000000600082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f6d696e74206f766572206d617800000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f6d696e74206f76657220737570706c7900000000000000000000000000000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f6e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b7f70726553616c65206e6f74206c69766500000000000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f6e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6152928161488e565b811461529d57600080fd5b50565b6152a9816148a0565b81146152b457600080fd5b50565b6152c0816148ac565b81146152cb57600080fd5b50565b6152d781614914565b81146152e257600080fd5b5056fea264697066735822122027afc98e0670e94d0d673ff788b367075a8af77517ff4aba3ea9f59cc949275864736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d59796148364335706a784a6b4a775755375676524e474c58376936653338613776704b4a4855745066364a4b2f00000000000000000000

Deployed Bytecode

0x6080604052600436106102345760003560e01c80635bd90b761161012e5780638da5cb5b116100ab578063c87b56dd1161006f578063c87b56dd14610804578063d5abeb0114610841578063d7224ba01461086c578063e8656fcc14610897578063e985e9c5146108c25761023b565b80638da5cb5b1461074057806395d89b411461076b578063a0712d6814610796578063a22cb465146107b2578063b88d4fde146107db5761023b565b8063740d73f3116100f2578063740d73f3146106925780637835c635146106bb57806378835f42146106d75780637f00c7a61461070057806389bdeec6146107295761023b565b80635bd90b76146105855780636352211e146105b05780636c0360eb146105ed5780636f9170f61461061857806370a08231146106555761023b565b806323b872dd116101bc5780633ccfd60b116101805780633ccfd60b146104c357806342842e0e146104cd57806344a0d68a146104f65780634f6ccce71461051f57806355f804b31461055c5761023b565b806323b872dd146103ce5780632d20fb60146103f75780632f745c59146104205780633542aee21461045d57806337351b0f146104865761023b565b8063095ea7b311610203578063095ea7b31461030d578063105739b81461033657806313faede61461034d57806318160ddd14610378578063239c70ae146103a35761023b565b806301f569971461023d57806301ffc9a71461026857806306fdde03146102a5578063081812fc146102d05761023b565b3661023b57005b005b34801561024957600080fd5b506102526108ff565b60405161025f919061460f565b60405180910390f35b34801561027457600080fd5b5061028f600480360381019061028a9190613bcb565b610905565b60405161029c9190614232565b60405180910390f35b3480156102b157600080fd5b506102ba610a4f565b6040516102c7919061424d565b60405180910390f35b3480156102dc57600080fd5b506102f760048036038101906102f29190613c6e565b610ae1565b60405161030491906141cb565b60405180910390f35b34801561031957600080fd5b50610334600480360381019061032f9190613b3e565b610b66565b005b34801561034257600080fd5b5061034b610c7f565b005b34801561035957600080fd5b50610362610d7d565b60405161036f919061460f565b60405180910390f35b34801561038457600080fd5b5061038d610d83565b60405161039a919061460f565b60405180910390f35b3480156103af57600080fd5b506103b8610d8c565b6040516103c5919061460f565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f09190613a28565b610d92565b005b34801561040357600080fd5b5061041e60048036038101906104199190613c6e565b610da2565b005b34801561042c57600080fd5b5061044760048036038101906104429190613b3e565b610e3e565b604051610454919061460f565b60405180910390f35b34801561046957600080fd5b50610484600480360381019061047f9190613b3e565b61103c565b005b34801561049257600080fd5b506104ad60048036038101906104a891906139bb565b611202565b6040516104ba919061460f565b60405180910390f35b6104cb61124b565b005b3480156104d957600080fd5b506104f460048036038101906104ef9190613a28565b61138a565b005b34801561050257600080fd5b5061051d60048036038101906105189190613c6e565b6113aa565b005b34801561052b57600080fd5b5061054660048036038101906105419190613c6e565b611444565b604051610553919061460f565b60405180910390f35b34801561056857600080fd5b50610583600480360381019061057e9190613c25565b611497565b005b34801561059157600080fd5b5061059a611541565b6040516105a79190614232565b60405180910390f35b3480156105bc57600080fd5b506105d760048036038101906105d29190613c6e565b611554565b6040516105e491906141cb565b60405180910390f35b3480156105f957600080fd5b5061060261156a565b60405161060f919061424d565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a91906139bb565b6115f8565b60405161064c9190614232565b60405180910390f35b34801561066157600080fd5b5061067c600480360381019061067791906139bb565b61164e565b604051610689919061460f565b60405180910390f35b34801561069e57600080fd5b506106b960048036038101906106b49190613b7e565b611737565b005b6106d560048036038101906106d09190613c6e565b61186c565b005b3480156106e357600080fd5b506106fe60048036038101906106f99190613c6e565b611ae5565b005b34801561070c57600080fd5b5061072760048036038101906107229190613c6e565b611b7f565b005b34801561073557600080fd5b5061073e611c19565b005b34801561074c57600080fd5b50610755611cfc565b60405161076291906141cb565b60405180910390f35b34801561077757600080fd5b50610780611d22565b60405161078d919061424d565b60405180910390f35b6107b060048036038101906107ab9190613c6e565b611db4565b005b3480156107be57600080fd5b506107d960048036038101906107d49190613afe565b611fe6565b005b3480156107e757600080fd5b5061080260048036038101906107fd9190613a7b565b612167565b005b34801561081057600080fd5b5061082b60048036038101906108269190613c6e565b6121c3565b604051610838919061424d565b60405180910390f35b34801561084d57600080fd5b506108566122a7565b604051610863919061460f565b60405180910390f35b34801561087857600080fd5b506108816122ad565b60405161088e919061460f565b60405180910390f35b3480156108a357600080fd5b506108ac6122b3565b6040516108b99190614232565b60405180910390f35b3480156108ce57600080fd5b506108e960048036038101906108e491906139e8565b6122c6565b6040516108f69190614232565b60405180910390f35b600c5481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109d057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a3857507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a485750610a478261235a565b5b9050919050565b606060018054610a5e9061498a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8a9061498a565b8015610ad75780601f10610aac57610100808354040283529160200191610ad7565b820191906000526020600020905b815481529060010190602001808311610aba57829003601f168201915b5050505050905090565b6000610aec826123c4565b610b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b22906145cf565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b7182611554565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd99061444f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c016123d1565b73ffffffffffffffffffffffffffffffffffffffff161480610c305750610c2f81610c2a6123d1565b6122c6565b5b610c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c669061434f565b60405180910390fd5b610c7a8383836123d9565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d06906145af565b60405180910390fd5b600d60159054906101000a900460ff1615610d44576000600d60156101000a81548160ff021916908315150217905550610d7b565b6000600d60146101000a81548160ff0219169083151502179055506001600d60156101000a81548160ff0219169083151502179055505b565b60095481565b60008054905090565b600b5481565b610d9d83838361248b565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e29906145af565b60405180910390fd5b610e3b81612a44565b50565b6000610e498361164e565b8210610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e819061426f565b60405180910390fd5b6000610e94610d83565b905060008060005b83811015610ffa576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610f8e57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fe65786841415610fd7578195505050505050611036565b8380610fe2906149ed565b9450505b508080610ff2906149ed565b915050610e9c565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102d9061454f565b60405180910390fd5b92915050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c3906145af565b60405180910390fd5b600a54816110d8610d83565b6110e29190614745565b1115611123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111a906144cf565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000648111611159576111548282612c96565b6111fe565b60008190505b60008111156111fc577f0000000000000000000000000000000000000000000000000000000000000064811161119f576111998382612c96565b506111fe565b6111c9837f0000000000000000000000000000000000000000000000000000000000000064612c96565b7f0000000000000000000000000000000000000000000000000000000000000064816111f5919061485a565b905061115f565b505b5050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d2906145af565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051611301906141b6565b60006040518083038185875af1925050503d806000811461133e576040519150601f19603f3d011682016040523d82523d6000602084013e611343565b606091505b5050905080611387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137e906142af565b60405180910390fd5b50565b6113a583838360405180602001604052806000815250612167565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461143a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611431906145af565b60405180910390fd5b8060098190555050565b600061144e610d83565b821061148f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611486906142ef565b60405180910390fd5b819050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151e906145af565b60405180910390fd5b806008908051906020019061153d92919061373f565b5050565b600d60149054906101000a900460ff1681565b600061155f82612cb4565b600001519050919050565b600880546115779061498a565b80601f01602080910402602001604051908101604052809291908181526020018280546115a39061498a565b80156115f05780601f106115c5576101008083540402835291602001916115f0565b820191906000526020600020905b8154815290600101906020018083116115d357829003601f168201915b505050505081565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b69061438f565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117be906145af565b60405180910390fd5b60005b82829050811015611867576001600e60008585858181106117ee576117ed614af4565b5b905060200201602081019061180391906139bb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061185f906149ed565b9150506117ca565b505050565b600d60149054906101000a900460ff166118bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b29061452f565b60405180910390fd5b60003390506000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611990576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119879061450f565b60405180910390fd5b600b54838261199f9190614745565b11156119e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d79061442f565b60405180910390fd5b600a54836119ec610d83565b6119f69190614745565b1115611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e906144cf565b60405180910390fd5b82600954611a4591906147cc565b341015611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7e9061446f565b60405180910390fd5b8281611a939190614745565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611ae03384612c96565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6c906145af565b60405180910390fd5b80600c8190555050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c06906145af565b60405180910390fd5b80600b8190555050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca0906145af565b60405180910390fd5b600d60149054906101000a900460ff1615611cde576000600d60146101000a81548160ff021916908315150217905550611cfa565b6001600d60146101000a81548160ff0219169083151502179055505b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060028054611d319061498a565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5d9061498a565b8015611daa5780601f10611d7f57610100808354040283529160200191611daa565b820191906000526020600020905b815481529060010190602001808311611d8d57829003601f168201915b5050505050905090565b600d60159054906101000a900460ff16611e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfa9061432f565b60405180910390fd5b60003390506000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600b548382611e5b9190614745565b1115611e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e939061442f565b60405180910390fd5b600c54831115611ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed8906143cf565b60405180910390fd5b600a5483611eed610d83565b611ef79190614745565b1115611f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2f906144cf565b60405180910390fd5b82600954611f4691906147cc565b341015611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f9061446f565b60405180910390fd5b8281611f949190614745565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611fe13384612c96565b505050565b611fee6123d1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561205c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612053906143ef565b60405180910390fd5b80600660006120696123d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166121166123d1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161215b9190614232565b60405180910390a35050565b61217284848461248b565b61217e84848484612eb7565b6121bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b49061448f565b60405180910390fd5b50505050565b60606121ce826123c4565b61220d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122049061428f565b60405180910390fd5b600061221761304e565b905060006040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525090506000825111612271576040518060200160405280600081525061229e565b8161227b856130e0565b8260405160200161228e93929190614185565b6040516020818303038152906040525b92505050919050565b600a5481565b60075481565b600d60159054906101000a900460ff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061249682612cb4565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166124bd6123d1565b73ffffffffffffffffffffffffffffffffffffffff16148061251957506124e26123d1565b73ffffffffffffffffffffffffffffffffffffffff1661250184610ae1565b73ffffffffffffffffffffffffffffffffffffffff16145b806125355750612534826000015161252f6123d1565b6122c6565b5b905080612577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256e9061440f565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146125e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e0906143af565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612659576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126509061430f565b60405180910390fd5b6126668585856001613241565b61267660008484600001516123d9565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166126e49190614826565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661278891906146ff565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461288e9190614745565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156129d457612904816123c4565b156129d3576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a3c8686866001613247565b505050505050565b6000600754905060008211612a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a859061436f565b60405180910390fd5b600060018383612a9e9190614745565b612aa8919061485a565b90506001600054612ab9919061485a565b811115612ad2576001600054612acf919061485a565b90505b612adb816123c4565b612b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b119061456f565b60405180910390fd5b60008290505b818111612c7d57600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612c6a576000612b9d82612cb4565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612c75906149ed565b915050612b20565b50600181612c8b9190614745565b600781905550505050565b612cb082826040518060200160405280600081525061324d565b5050565b612cbc6137c5565b612cc5826123c4565b612d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfb906142cf565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000648310612d685760017f000000000000000000000000000000000000000000000000000000000000006484612d5b919061485a565b612d659190614745565b90505b60008390505b818110612e76576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e6257809350505050612eb2565b508080612e6e90614960565b915050612d6e565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea99061458f565b60405180910390fd5b919050565b6000612ed88473ffffffffffffffffffffffffffffffffffffffff1661372c565b15613041578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f016123d1565b8786866040518563ffffffff1660e01b8152600401612f2394939291906141e6565b602060405180830381600087803b158015612f3d57600080fd5b505af1925050508015612f6e57506040513d601f19601f82011682018060405250810190612f6b9190613bf8565b60015b612ff1573d8060008114612f9e576040519150601f19603f3d011682016040523d82523d6000602084013e612fa3565b606091505b50600081511415612fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe09061448f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613046565b600190505b949350505050565b60606008805461305d9061498a565b80601f01602080910402602001604051908101604052809291908181526020018280546130899061498a565b80156130d65780601f106130ab576101008083540402835291602001916130d6565b820191906000526020600020905b8154815290600101906020018083116130b957829003601f168201915b5050505050905090565b60606000821415613128576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061323c565b600082905060005b6000821461315a578080613143906149ed565b915050600a82613153919061479b565b9150613130565b60008167ffffffffffffffff81111561317657613175614b23565b5b6040519080825280601f01601f1916602001820160405280156131a85781602001600182028036833780820191505090505b5090505b60008514613235576001826131c1919061485a565b9150600a856131d09190614a36565b60306131dc9190614745565b60f81b8183815181106131f2576131f1614af4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561322e919061479b565b94506131ac565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156132c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ba906144ef565b60405180910390fd5b6132cc816123c4565b1561330c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613303906144af565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000006483111561336f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613366906145ef565b60405180910390fd5b61337c6000858386613241565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161347991906146ff565b6fffffffffffffffffffffffffffffffff1681526020018583602001516134a091906146ff565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561370f57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136af6000888488612eb7565b6136ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136e59061448f565b60405180910390fd5b81806136f9906149ed565b9250508080613707906149ed565b91505061363e565b50806000819055506137246000878588613247565b505050505050565b600080823b905060008111915050919050565b82805461374b9061498a565b90600052602060002090601f01602090048101928261376d57600085556137b4565b82601f1061378657805160ff19168380011785556137b4565b828001600101855582156137b4579182015b828111156137b3578251825591602001919060010190613798565b5b5090506137c191906137ff565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613818576000816000905550600101613800565b5090565b600061382f61382a8461464f565b61462a565b90508281526020810184848401111561384b5761384a614b61565b5b61385684828561491e565b509392505050565b600061387161386c84614680565b61462a565b90508281526020810184848401111561388d5761388c614b61565b5b61389884828561491e565b509392505050565b6000813590506138af81615289565b92915050565b60008083601f8401126138cb576138ca614b57565b5b8235905067ffffffffffffffff8111156138e8576138e7614b52565b5b60208301915083602082028301111561390457613903614b5c565b5b9250929050565b60008135905061391a816152a0565b92915050565b60008135905061392f816152b7565b92915050565b600081519050613944816152b7565b92915050565b600082601f83011261395f5761395e614b57565b5b813561396f84826020860161381c565b91505092915050565b600082601f83011261398d5761398c614b57565b5b813561399d84826020860161385e565b91505092915050565b6000813590506139b5816152ce565b92915050565b6000602082840312156139d1576139d0614b6b565b5b60006139df848285016138a0565b91505092915050565b600080604083850312156139ff576139fe614b6b565b5b6000613a0d858286016138a0565b9250506020613a1e858286016138a0565b9150509250929050565b600080600060608486031215613a4157613a40614b6b565b5b6000613a4f868287016138a0565b9350506020613a60868287016138a0565b9250506040613a71868287016139a6565b9150509250925092565b60008060008060808587031215613a9557613a94614b6b565b5b6000613aa3878288016138a0565b9450506020613ab4878288016138a0565b9350506040613ac5878288016139a6565b925050606085013567ffffffffffffffff811115613ae657613ae5614b66565b5b613af28782880161394a565b91505092959194509250565b60008060408385031215613b1557613b14614b6b565b5b6000613b23858286016138a0565b9250506020613b348582860161390b565b9150509250929050565b60008060408385031215613b5557613b54614b6b565b5b6000613b63858286016138a0565b9250506020613b74858286016139a6565b9150509250929050565b60008060208385031215613b9557613b94614b6b565b5b600083013567ffffffffffffffff811115613bb357613bb2614b66565b5b613bbf858286016138b5565b92509250509250929050565b600060208284031215613be157613be0614b6b565b5b6000613bef84828501613920565b91505092915050565b600060208284031215613c0e57613c0d614b6b565b5b6000613c1c84828501613935565b91505092915050565b600060208284031215613c3b57613c3a614b6b565b5b600082013567ffffffffffffffff811115613c5957613c58614b66565b5b613c6584828501613978565b91505092915050565b600060208284031215613c8457613c83614b6b565b5b6000613c92848285016139a6565b91505092915050565b613ca48161488e565b82525050565b613cb3816148a0565b82525050565b6000613cc4826146b1565b613cce81856146c7565b9350613cde81856020860161492d565b613ce781614b70565b840191505092915050565b6000613cfd826146bc565b613d0781856146e3565b9350613d1781856020860161492d565b613d2081614b70565b840191505092915050565b6000613d36826146bc565b613d4081856146f4565b9350613d5081856020860161492d565b80840191505092915050565b6000613d696022836146e3565b9150613d7482614b81565b604082019050919050565b6000613d8c601f836146e3565b9150613d9782614bd0565b602082019050919050565b6000613daf600f836146e3565b9150613dba82614bf9565b602082019050919050565b6000613dd2602a836146e3565b9150613ddd82614c22565b604082019050919050565b6000613df56023836146e3565b9150613e0082614c71565b604082019050919050565b6000613e186025836146e3565b9150613e2382614cc0565b604082019050919050565b6000613e3b600d836146e3565b9150613e4682614d0f565b602082019050919050565b6000613e5e6039836146e3565b9150613e6982614d38565b604082019050919050565b6000613e816018836146e3565b9150613e8c82614d87565b602082019050919050565b6000613ea4602b836146e3565b9150613eaf82614db0565b604082019050919050565b6000613ec76026836146e3565b9150613ed282614dff565b604082019050919050565b6000613eea6011836146e3565b9150613ef582614e4e565b602082019050919050565b6000613f0d601a836146e3565b9150613f1882614e77565b602082019050919050565b6000613f306032836146e3565b9150613f3b82614ea0565b604082019050919050565b6000613f53600d836146e3565b9150613f5e82614eef565b602082019050919050565b6000613f766022836146e3565b9150613f8182614f18565b604082019050919050565b6000613f996000836146d8565b9150613fa482614f67565b600082019050919050565b6000613fbc6012836146e3565b9150613fc782614f6a565b602082019050919050565b6000613fdf6033836146e3565b9150613fea82614f93565b604082019050919050565b6000614002601d836146e3565b915061400d82614fe2565b602082019050919050565b60006140256010836146e3565b91506140308261500b565b602082019050919050565b60006140486021836146e3565b915061405382615034565b604082019050919050565b600061406b600f836146e3565b915061407682615083565b602082019050919050565b600061408e6010836146e3565b9150614099826150ac565b602082019050919050565b60006140b1602e836146e3565b91506140bc826150d5565b604082019050919050565b60006140d46026836146e3565b91506140df82615124565b604082019050919050565b60006140f7602f836146e3565b915061410282615173565b604082019050919050565b600061411a6009836146e3565b9150614125826151c2565b602082019050919050565b600061413d602d836146e3565b9150614148826151eb565b604082019050919050565b60006141606022836146e3565b915061416b8261523a565b604082019050919050565b61417f81614914565b82525050565b60006141918286613d2b565b915061419d8285613d2b565b91506141a98284613d2b565b9150819050949350505050565b60006141c182613f8c565b9150819050919050565b60006020820190506141e06000830184613c9b565b92915050565b60006080820190506141fb6000830187613c9b565b6142086020830186613c9b565b6142156040830185614176565b81810360608301526142278184613cb9565b905095945050505050565b60006020820190506142476000830184613caa565b92915050565b600060208201905081810360008301526142678184613cf2565b905092915050565b6000602082019050818103600083015261428881613d5c565b9050919050565b600060208201905081810360008301526142a881613d7f565b9050919050565b600060208201905081810360008301526142c881613da2565b9050919050565b600060208201905081810360008301526142e881613dc5565b9050919050565b6000602082019050818103600083015261430881613de8565b9050919050565b6000602082019050818103600083015261432881613e0b565b9050919050565b6000602082019050818103600083015261434881613e2e565b9050919050565b6000602082019050818103600083015261436881613e51565b9050919050565b6000602082019050818103600083015261438881613e74565b9050919050565b600060208201905081810360008301526143a881613e97565b9050919050565b600060208201905081810360008301526143c881613eba565b9050919050565b600060208201905081810360008301526143e881613edd565b9050919050565b6000602082019050818103600083015261440881613f00565b9050919050565b6000602082019050818103600083015261442881613f23565b9050919050565b6000602082019050818103600083015261444881613f46565b9050919050565b6000602082019050818103600083015261446881613f69565b9050919050565b6000602082019050818103600083015261448881613faf565b9050919050565b600060208201905081810360008301526144a881613fd2565b9050919050565b600060208201905081810360008301526144c881613ff5565b9050919050565b600060208201905081810360008301526144e881614018565b9050919050565b600060208201905081810360008301526145088161403b565b9050919050565b600060208201905081810360008301526145288161405e565b9050919050565b6000602082019050818103600083015261454881614081565b9050919050565b60006020820190508181036000830152614568816140a4565b9050919050565b60006020820190508181036000830152614588816140c7565b9050919050565b600060208201905081810360008301526145a8816140ea565b9050919050565b600060208201905081810360008301526145c88161410d565b9050919050565b600060208201905081810360008301526145e881614130565b9050919050565b6000602082019050818103600083015261460881614153565b9050919050565b60006020820190506146246000830184614176565b92915050565b6000614634614645565b905061464082826149bc565b919050565b6000604051905090565b600067ffffffffffffffff82111561466a57614669614b23565b5b61467382614b70565b9050602081019050919050565b600067ffffffffffffffff82111561469b5761469a614b23565b5b6146a482614b70565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061470a826148d8565b9150614715836148d8565b9250826fffffffffffffffffffffffffffffffff0382111561473a57614739614a67565b5b828201905092915050565b600061475082614914565b915061475b83614914565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147905761478f614a67565b5b828201905092915050565b60006147a682614914565b91506147b183614914565b9250826147c1576147c0614a96565b5b828204905092915050565b60006147d782614914565b91506147e283614914565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561481b5761481a614a67565b5b828202905092915050565b6000614831826148d8565b915061483c836148d8565b92508282101561484f5761484e614a67565b5b828203905092915050565b600061486582614914565b915061487083614914565b92508282101561488357614882614a67565b5b828203905092915050565b6000614899826148f4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561494b578082015181840152602081019050614930565b8381111561495a576000848401525b50505050565b600061496b82614914565b9150600082141561497f5761497e614a67565b5b600182039050919050565b600060028204905060018216806149a257607f821691505b602082108114156149b6576149b5614ac5565b5b50919050565b6149c582614b70565b810181811067ffffffffffffffff821117156149e4576149e3614b23565b5b80604052505050565b60006149f882614914565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a2b57614a2a614a67565b5b600182019050919050565b6000614a4182614914565b9150614a4c83614914565b925082614a5c57614a5b614a96565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00600082015250565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f6d696e74206e6f74206c69766500000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f616d6f756e74206d757374203c206d6178000000000000000000000000000000600082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f6d696e74206f766572206d617800000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f6d696e74206f76657220737570706c7900000000000000000000000000000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f6e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b7f70726553616c65206e6f74206c69766500000000000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f6e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6152928161488e565b811461529d57600080fd5b50565b6152a9816148a0565b81146152b457600080fd5b50565b6152c0816148ac565b81146152cb57600080fd5b50565b6152d781614914565b81146152e257600080fd5b5056fea264697066735822122027afc98e0670e94d0d673ff788b367075a8af77517ff4aba3ea9f59cc949275864736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d59796148364335706a784a6b4a775755375676524e474c58376936653338613776704b4a4855745066364a4b2f00000000000000000000

-----Decoded View---------------
Arg [0] : defaultBaseURI (string): ipfs://QmYyaH6C5pjxJkJwWU7VvRNGLX7i6e38a7vpKJHUtPf6JK/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d59796148364335706a784a6b4a775755375676524e474c
Arg [3] : 58376936653338613776704b4a4855745066364a4b2f00000000000000000000


Deployed Bytecode Sourcemap

31563:4977:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31762:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22402:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24038:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25123:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24702:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35319:197;;;;;;;;;;;;;:::i;:::-;;31664:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21268:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31721:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25813:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35818:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21571:823;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34316:606;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32704:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35630:180;;;:::i;:::-;;25983:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32834:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21376:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35524:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31838:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23906:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31636:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32584:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22782:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34930:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33775:533;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33058:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32928:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35132:179;;;;;;;;;;;;;:::i;:::-;;31811:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24146:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33220:547;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25345:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26168:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35937:407;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31690:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29552:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31868:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25641:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31762:42;;;;:::o;22402:372::-;22504:4;22556:25;22541:40;;;:11;:40;;;;:105;;;;22613:33;22598:48;;;:11;:48;;;;22541:105;:172;;;;22678:35;22663:50;;;:11;:50;;;;22541:172;:225;;;;22730:36;22754:11;22730:23;:36::i;:::-;22541:225;22521:245;;22402:372;;;:::o;24038:100::-;24092:13;24125:5;24118:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24038:100;:::o;25123:214::-;25191:7;25219:16;25227:7;25219;:16::i;:::-;25211:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25305:15;:24;25321:7;25305:24;;;;;;;;;;;;;;;;;;;;;25298:31;;25123:214;;;:::o;24702:413::-;24775:13;24791:24;24807:7;24791:15;:24::i;:::-;24775:40;;24840:5;24834:11;;:2;:11;;;;24826:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;24935:5;24919:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24944:37;24961:5;24968:12;:10;:12::i;:::-;24944:16;:37::i;:::-;24919:62;24897:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;25079:28;25088:2;25092:7;25101:5;25079:8;:28::i;:::-;24764:351;24702:413;;:::o;35319:197::-;32049:10;32040:19;;:5;;;;;;;;;;;:19;;;32032:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;35379:8:::1;;;;;;;;;;;35375:78;;;35415:5;35404:8;;:16;;;;;;;;;;;;;;;;;;35435:7;;35375:78;35477:5;35463:11;;:19;;;;;;;;;;;;;;;;;;35504:4;35493:8;;:15;;;;;;;;;;;;;;;;;;32084:1;35319:197::o:0;31664:19::-;;;;:::o;21268:100::-;21321:7;21348:12;;21341:19;;21268:100;:::o;31721:34::-;;;;:::o;25813:162::-;25939:28;25949:4;25955:2;25959:7;25939:9;:28::i;:::-;25813:162;;;:::o;35818:111::-;32049:10;32040:19;;:5;;;;;;;;;;;:19;;;32032:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;35893:28:::1;35912:8;35893:18;:28::i;:::-;35818:111:::0;:::o;21571:823::-;21660:7;21696:16;21706:5;21696:9;:16::i;:::-;21688:5;:24;21680:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;21762:22;21787:13;:11;:13::i;:::-;21762:38;;21811:19;21845:25;21899:9;21894:426;21918:14;21914:1;:18;21894:426;;;21954:31;21988:11;:14;22000:1;21988:14;;;;;;;;;;;21954:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22047:1;22021:28;;:9;:14;;;:28;;;22017:103;;22090:9;:14;;;22070:34;;22017:103;22159:5;22138:26;;:17;:26;;;22134:175;;;22204:5;22189:11;:20;22185:77;;;22241:1;22234:8;;;;;;;;;22185:77;22280:13;;;;;:::i;:::-;;;;22134:175;21939:381;21934:3;;;;;:::i;:::-;;;;21894:426;;;;22330:56;;;;;;;;;;:::i;:::-;;;;;;;;21571:823;;;;;:::o;34316:606::-;32049:10;32040:19;;:5;;;;;;;;;;;:19;;;32032:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;34440:9:::1;;34425:11;34409:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;34401:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;34500:12;34485:11;:27;34481:108;;34529:27;34539:3;34544:11;34529:9;:27::i;:::-;34571:7;;34481:108;34609:18;34630:11;34609:32;;34652:263;34672:1;34659:10;:14;34652:263;;;34708:12;34694:10;:26;34690:118;;34741:26;34751:3;34756:10;34741:9;:26::i;:::-;34786:7;;;34690:118;34822:28;34832:3;34837:12;34822:9;:28::i;:::-;34891:12;34878:10;:25;;;;:::i;:::-;34865:38;;34652:263;;;34390:532;32084:1;34316:606:::0;;:::o;32704:122::-;32773:7;32799:9;:19;32809:8;32799:19;;;;;;;;;;;;;;;;32792:26;;32704:122;;;:::o;35630:180::-;32049:10;32040:19;;:5;;;;;;;;;;;:19;;;32032:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;35689:12:::1;35707:10;:15;;35730:21;35707:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35688:68;;;35775:7;35767:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;35677:133;35630:180::o:0;25983:177::-;26113:39;26130:4;26136:2;26140:7;26113:39;;;;;;;;;;;;:16;:39::i;:::-;25983:177;;;:::o;32834:86::-;32049:10;32040:19;;:5;;;;;;;;;;;:19;;;32032:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;32904:8:::1;32897:4;:15;;;;32834:86:::0;:::o;21376:187::-;21443:7;21479:13;:11;:13::i;:::-;21471:5;:21;21463:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;21550:5;21543:12;;21376:187;;;:::o;35524:98::-;32049:10;32040:19;;:5;;;;;;;;;;;:19;;;32032:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;35607:7:::1;35597;:17;;;;;;;;;;;;:::i;:::-;;35524:98:::0;:::o;31838:23::-;;;;;;;;;;;;;:::o;23906:124::-;23970:7;23997:20;24009:7;23997:11;:20::i;:::-;:25;;;23990:32;;23906:124;;;:::o;31636:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32584:112::-;32646:4;32669:9;:19;32679:8;32669:19;;;;;;;;;;;;;;;;;;;;;;;;;32662:26;;32584:112;;;:::o;22782:221::-;22846:7;22891:1;22874:19;;:5;:19;;;;22866:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;22967:12;:19;22980:5;22967:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;22959:36;;22952:43;;22782:221;;;:::o;34930:194::-;32049:10;32040:19;;:5;;;;;;;;;;;:19;;;32032:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;35020:9:::1;35015:102;35035:10;;:17;;35031:1;:21;35015:102;;;35101:4;35074:9;:24;35084:10;;35095:1;35084:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;35074:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;35054:3;;;;;:::i;:::-;;;;35015:102;;;;34930:194:::0;;:::o;33775:533::-;32145:11;;;;;;;;;;;32137:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;33859:11:::1;33873:10;33859:24;;33894:14;33911:9;:14;33921:3;33911:14;;;;;;;;;;;;;;;;33894:31;;33944:9;:14;33954:3;33944:14;;;;;;;;;;;;;;;;;;;;;;;;;33936:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;34021:13;;34006:11;33997:6;:20;;;;:::i;:::-;:37;;33989:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;34102:9;;34087:11;34071:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;34063:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;34171:11;34164:4;;:18;;;;:::i;:::-;34151:9;:31;;34143:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34244:11;34235:6;:20;;;;:::i;:::-;34218:9;:14;34228:3;34218:14;;;;;;;;;;;;;;;:37;;;;34266:34;34276:10;34288:11;34266:9;:34::i;:::-;33848:460;;33775:533:::0;:::o;33058:154::-;32049:10;32040:19;;:5;;;;;;;;;;;:19;;;32032:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;33179:25:::1;33155:21;:49;;;;33058:154:::0;:::o;32928:122::-;32049:10;32040:19;;:5;;;;;;;;;;;:19;;;32032:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;33025:17:::1;33009:13;:33;;;;32928:122:::0;:::o;35132:179::-;32049:10;32040:19;;:5;;;;;;;;;;;:19;;;32032:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;35195:11:::1;;;;;;;;;;;35191:84;;;35237:5;35223:11;;:19;;;;;;;;;;;;;;;;;;35257:7;;35191:84;35299:4;35285:11;;:18;;;;;;;;;;;;;;;;;;32084:1;35132:179::o:0;31811:20::-;;;;;;;;;;;;;:::o;24146:104::-;24202:13;24235:7;24228:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24146:104;:::o;33220:547::-;32246:8;;;;;;;;;;;32238:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;33294:11:::1;33308:10;33294:24;;33329:14;33346:9;:14;33356:3;33346:14;;;;;;;;;;;;;;;;33329:31;;33403:13;;33388:11;33379:6;:20;;;;:::i;:::-;:37;;33371:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;33468:21;;33453:11;:36;;33445:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33561:9;;33546:11;33530:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;33522:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;33630:11;33623:4;;:18;;;;:::i;:::-;33610:9;:31;;33602:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33703:11;33694:6;:20;;;;:::i;:::-;33677:9;:14;33687:3;33677:14;;;;;;;;;;;;;;;:37;;;;33725:34;33735:10;33747:11;33725:9;:34::i;:::-;33283:484;;33220:547:::0;:::o;25345:288::-;25452:12;:10;:12::i;:::-;25440:24;;:8;:24;;;;25432:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;25553:8;25508:18;:32;25527:12;:10;:12::i;:::-;25508:32;;;;;;;;;;;;;;;:42;25541:8;25508:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25606:8;25577:48;;25592:12;:10;:12::i;:::-;25577:48;;;25616:8;25577:48;;;;;;:::i;:::-;;;;;;;;25345:288;;:::o;26168:355::-;26327:28;26337:4;26343:2;26347:7;26327:9;:28::i;:::-;26388:48;26411:4;26417:2;26421:7;26430:5;26388:22;:48::i;:::-;26366:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;26168:355;;;;:::o;35937:407::-;36011:13;36045:17;36053:8;36045:7;:17::i;:::-;36037:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36111:26;36140:10;:8;:10::i;:::-;36111:39;;36161:18;:28;;;;;;;;;;;;;;;;;;;36236:1;36213:12;36207:26;:30;:129;;;;;;;;;;;;;;;;;36277:12;36291:19;:8;:17;:19::i;:::-;36312:4;36260:57;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36207:129;36200:136;;;;35937:407;;;:::o;31690:24::-;;;;:::o;29552:43::-;;;;:::o;31868:20::-;;;;;;;;;;;;;:::o;25641:164::-;25738:4;25762:18;:25;25781:5;25762:25;;;;;;;;;;;;;;;:35;25788:8;25762:35;;;;;;;;;;;;;;;;;;;;;;;;;25755:42;;25641:164;;;;:::o;8652:157::-;8737:4;8776:25;8761:40;;;:11;:40;;;;8754:47;;8652:157;;;:::o;26531:111::-;26588:4;26622:12;;26612:7;:22;26605:29;;26531:111;;;:::o;8293:98::-;8346:7;8373:10;8366:17;;8293:98;:::o;29348:196::-;29490:2;29463:15;:24;29479:7;29463:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29528:7;29524:2;29508:28;;29517:5;29508:28;;;;;;;;;;;;29348:196;;;:::o;28045:1295::-;28160:35;28198:20;28210:7;28198:11;:20::i;:::-;28160:58;;28231:22;28273:13;:18;;;28257:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;28332:12;:10;:12::i;:::-;28308:36;;:20;28320:7;28308:11;:20::i;:::-;:36;;;28257:87;:154;;;;28361:50;28378:13;:18;;;28398:12;:10;:12::i;:::-;28361:16;:50::i;:::-;28257:154;28231:181;;28433:17;28425:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;28548:4;28526:26;;:13;:18;;;:26;;;28518:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;28628:1;28614:16;;:2;:16;;;;28606:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28685:43;28707:4;28713:2;28717:7;28726:1;28685:21;:43::i;:::-;28741:49;28758:1;28762:7;28771:13;:18;;;28741:8;:49::i;:::-;28833:1;28803:12;:18;28816:4;28803:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28873:1;28845:12;:16;28858:2;28845:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28908:43;;;;;;;;28923:2;28908:43;;;;;;28934:15;28908:43;;;;;28885:11;:20;28897:7;28885:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28964:19;28996:1;28986:7;:11;;;;:::i;:::-;28964:33;;29053:1;29012:43;;:11;:24;29024:11;29012:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;29008:227;;;29076:20;29084:11;29076:7;:20::i;:::-;29072:152;;;29144:64;;;;;;;;29159:13;:18;;;29144:64;;;;;;29179:13;:28;;;29144:64;;;;;29117:11;:24;29129:11;29117:24;;;;;;;;;;;:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29072:152;29008:227;29271:7;29267:2;29252:27;;29261:4;29252:27;;;;;;;;;;;;29290:42;29311:4;29317:2;29321:7;29330:1;29290:20;:42::i;:::-;28149:1191;;;28045:1295;;;:::o;29604:780::-;29670:25;29698:24;;29670:52;;29752:1;29741:8;:12;29733:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;29793:16;29843:1;29832:8;29812:17;:28;;;;:::i;:::-;:32;;;;:::i;:::-;29793:51;;29885:1;29870:12;;:16;;;;:::i;:::-;29859:8;:27;29855:87;;;29929:1;29914:12;;:16;;;;:::i;:::-;29903:27;;29855:87;29960:17;29968:8;29960:7;:17::i;:::-;29952:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30036:9;30048:17;30036:29;;30031:296;30072:8;30067:1;:13;30031:296;;30137:1;30106:33;;:11;:14;30118:1;30106:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;30102:214;;;30160:31;30194:14;30206:1;30194:11;:14::i;:::-;30160:48;;30244:56;;;;;;;;30259:9;:14;;;30244:56;;;;;;30275:9;:24;;;30244:56;;;;;30227:11;:14;30239:1;30227:14;;;;;;;;;;;:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30141:175;30102:214;30082:3;;;;;:::i;:::-;;;;30031:296;;;;30375:1;30364:8;:12;;;;:::i;:::-;30337:24;:39;;;;29659:725;;29604:780;:::o;26650:104::-;26719:27;26729:2;26733:8;26719:27;;;;;;;;;;;;:9;:27::i;:::-;26650:104;;:::o;23248:650::-;23309:21;;:::i;:::-;23351:16;23359:7;23351;:16::i;:::-;23343:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23427:26;23479:12;23468:7;:23;23464:103;;23554:1;23539:12;23529:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;23508:47;;23464:103;23584:12;23599:7;23584:22;;23579:242;23616:18;23608:4;:26;23579:242;;23659:31;23693:11;:17;23705:4;23693:17;;;;;;;;;;;23659:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23755:1;23729:28;;:9;:14;;;:28;;;23725:85;;23785:9;23778:16;;;;;;;23725:85;23644:177;23636:6;;;;;:::i;:::-;;;;23579:242;;;;23833:57;;;;;;;;;;:::i;:::-;;;;;;;;23248:650;;;;:::o;30392:804::-;30547:4;30568:15;:2;:13;;;:15::i;:::-;30564:625;;;30620:2;30604:36;;;30641:12;:10;:12::i;:::-;30655:4;30661:7;30670:5;30604:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30600:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30867:1;30850:6;:13;:18;30846:273;;;30893:61;;;;;;;;;;:::i;:::-;;;;;;;;30846:273;31069:6;31063:13;31054:6;31050:2;31046:15;31039:38;30600:534;30737:45;;;30727:55;;;:6;:55;;;;30720:62;;;;;30564:625;31173:4;31166:11;;30392:804;;;;;;;:::o;36352:108::-;36412:13;36445:7;36438:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36352:108;:::o;3852:534::-;3908:13;3949:1;3940:5;:10;3936:53;;;3967:10;;;;;;;;;;;;;;;;;;;;;3936:53;3999:12;4014:5;3999:20;;4030:14;4055:78;4070:1;4062:4;:9;4055:78;;4088:8;;;;;:::i;:::-;;;;4119:2;4111:10;;;;;:::i;:::-;;;4055:78;;;4143:19;4175:6;4165:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4143:39;;4193:154;4209:1;4200:5;:10;4193:154;;4237:1;4227:11;;;;;:::i;:::-;;;4304:2;4296:5;:10;;;;:::i;:::-;4283:2;:24;;;;:::i;:::-;4270:39;;4253:6;4260;4253:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;4333:2;4324:11;;;;;:::i;:::-;;;4193:154;;;4371:6;4357:21;;;;;3852:534;;;;:::o;31204:159::-;;;;;:::o;31371:158::-;;;;;:::o;26762:1275::-;26885:20;26908:12;;26885:35;;26953:1;26939:16;;:2;:16;;;;26931:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27013:21;27021:12;27013:7;:21::i;:::-;27012:22;27004:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27099:12;27087:8;:24;;27079:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27163:61;27193:1;27197:2;27201:12;27215:8;27163:21;:61::i;:::-;27237:30;27270:12;:16;27283:2;27270:16;;;;;;;;;;;;;;;27237:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27316:135;;;;;;;;27372:8;27342:11;:19;;;:39;;;;:::i;:::-;27316:135;;;;;;27431:8;27396:11;:24;;;:44;;;;:::i;:::-;27316:135;;;;;27297:12;:16;27310:2;27297:16;;;;;;;;;;;;;;;:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27490:43;;;;;;;;27505:2;27490:43;;;;;;27516:15;27490:43;;;;;27462:11;:25;27474:12;27462:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27546:20;27569:12;27546:35;;27599:9;27594:325;27618:8;27614:1;:12;27594:325;;;27678:12;27674:2;27653:38;;27670:1;27653:38;;;;;;;;;;;;27732:59;27763:1;27767:2;27771:12;27785:5;27732:22;:59::i;:::-;27706:172;;;;;;;;;;;;:::i;:::-;;;;;;;;;27893:14;;;;;:::i;:::-;;;;27628:3;;;;;:::i;:::-;;;;27594:325;;;;27946:12;27931;:27;;;;27969:60;27998:1;28002:2;28006:12;28020:8;27969:20;:60::i;:::-;26874:1163;;;26762:1275;;;:::o;145:198::-;205:4;224:12;291:7;279:20;271:28;;334:1;327:4;:8;320:15;;;145:198;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:327::-;6834:6;6883:2;6871:9;6862:7;6858:23;6854:32;6851:119;;;6889:79;;:::i;:::-;6851:119;7009:1;7034:52;7078:7;7069:6;7058:9;7054:22;7034:52;:::i;:::-;7024:62;;6980:116;6776:327;;;;:::o;7109:349::-;7178:6;7227:2;7215:9;7206:7;7202:23;7198:32;7195:119;;;7233:79;;:::i;:::-;7195:119;7353:1;7378:63;7433:7;7424:6;7413:9;7409:22;7378:63;:::i;:::-;7368:73;;7324:127;7109:349;;;;:::o;7464:509::-;7533:6;7582:2;7570:9;7561:7;7557:23;7553:32;7550:119;;;7588:79;;:::i;:::-;7550:119;7736:1;7725:9;7721:17;7708:31;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:63;7948:7;7939:6;7928:9;7924:22;7893:63;:::i;:::-;7883:73;;7679:287;7464:509;;;;:::o;7979:329::-;8038:6;8087:2;8075:9;8066:7;8062:23;8058:32;8055:119;;;8093:79;;:::i;:::-;8055:119;8213:1;8238:53;8283:7;8274:6;8263:9;8259:22;8238:53;:::i;:::-;8228:63;;8184:117;7979:329;;;;:::o;8314:118::-;8401:24;8419:5;8401:24;:::i;:::-;8396:3;8389:37;8314:118;;:::o;8438:109::-;8519:21;8534:5;8519:21;:::i;:::-;8514:3;8507:34;8438:109;;:::o;8553:360::-;8639:3;8667:38;8699:5;8667:38;:::i;:::-;8721:70;8784:6;8779:3;8721:70;:::i;:::-;8714:77;;8800:52;8845:6;8840:3;8833:4;8826:5;8822:16;8800:52;:::i;:::-;8877:29;8899:6;8877:29;:::i;:::-;8872:3;8868:39;8861:46;;8643:270;8553:360;;;;:::o;8919:364::-;9007:3;9035:39;9068:5;9035:39;:::i;:::-;9090:71;9154:6;9149:3;9090:71;:::i;:::-;9083:78;;9170:52;9215:6;9210:3;9203:4;9196:5;9192:16;9170:52;:::i;:::-;9247:29;9269:6;9247:29;:::i;:::-;9242:3;9238:39;9231:46;;9011:272;8919:364;;;;:::o;9289:377::-;9395:3;9423:39;9456:5;9423:39;:::i;:::-;9478:89;9560:6;9555:3;9478:89;:::i;:::-;9471:96;;9576:52;9621:6;9616:3;9609:4;9602:5;9598:16;9576:52;:::i;:::-;9653:6;9648:3;9644:16;9637:23;;9399:267;9289:377;;;;:::o;9672:366::-;9814:3;9835:67;9899:2;9894:3;9835:67;:::i;:::-;9828:74;;9911:93;10000:3;9911:93;:::i;:::-;10029:2;10024:3;10020:12;10013:19;;9672:366;;;:::o;10044:::-;10186:3;10207:67;10271:2;10266:3;10207:67;:::i;:::-;10200:74;;10283:93;10372:3;10283:93;:::i;:::-;10401:2;10396:3;10392:12;10385:19;;10044:366;;;:::o;10416:::-;10558:3;10579:67;10643:2;10638:3;10579:67;:::i;:::-;10572:74;;10655:93;10744:3;10655:93;:::i;:::-;10773:2;10768:3;10764:12;10757:19;;10416:366;;;:::o;10788:::-;10930:3;10951:67;11015:2;11010:3;10951:67;:::i;:::-;10944:74;;11027:93;11116:3;11027:93;:::i;:::-;11145:2;11140:3;11136:12;11129:19;;10788:366;;;:::o;11160:::-;11302:3;11323:67;11387:2;11382:3;11323:67;:::i;:::-;11316:74;;11399:93;11488:3;11399:93;:::i;:::-;11517:2;11512:3;11508:12;11501:19;;11160:366;;;:::o;11532:::-;11674:3;11695:67;11759:2;11754:3;11695:67;:::i;:::-;11688:74;;11771:93;11860:3;11771:93;:::i;:::-;11889:2;11884:3;11880:12;11873:19;;11532:366;;;:::o;11904:::-;12046:3;12067:67;12131:2;12126:3;12067:67;:::i;:::-;12060:74;;12143:93;12232:3;12143:93;:::i;:::-;12261:2;12256:3;12252:12;12245:19;;11904:366;;;:::o;12276:::-;12418:3;12439:67;12503:2;12498:3;12439:67;:::i;:::-;12432:74;;12515:93;12604:3;12515:93;:::i;:::-;12633:2;12628:3;12624:12;12617:19;;12276:366;;;:::o;12648:::-;12790:3;12811:67;12875:2;12870:3;12811:67;:::i;:::-;12804:74;;12887:93;12976:3;12887:93;:::i;:::-;13005:2;13000:3;12996:12;12989:19;;12648:366;;;:::o;13020:::-;13162:3;13183:67;13247:2;13242:3;13183:67;:::i;:::-;13176:74;;13259:93;13348:3;13259:93;:::i;:::-;13377:2;13372:3;13368:12;13361:19;;13020:366;;;:::o;13392:::-;13534:3;13555:67;13619:2;13614:3;13555:67;:::i;:::-;13548:74;;13631:93;13720:3;13631:93;:::i;:::-;13749:2;13744:3;13740:12;13733:19;;13392:366;;;:::o;13764:::-;13906:3;13927:67;13991:2;13986:3;13927:67;:::i;:::-;13920:74;;14003:93;14092:3;14003:93;:::i;:::-;14121:2;14116:3;14112:12;14105:19;;13764:366;;;:::o;14136:::-;14278:3;14299:67;14363:2;14358:3;14299:67;:::i;:::-;14292:74;;14375:93;14464:3;14375:93;:::i;:::-;14493:2;14488:3;14484:12;14477:19;;14136:366;;;:::o;14508:::-;14650:3;14671:67;14735:2;14730:3;14671:67;:::i;:::-;14664:74;;14747:93;14836:3;14747:93;:::i;:::-;14865:2;14860:3;14856:12;14849:19;;14508:366;;;:::o;14880:::-;15022:3;15043:67;15107:2;15102:3;15043:67;:::i;:::-;15036:74;;15119:93;15208:3;15119:93;:::i;:::-;15237:2;15232:3;15228:12;15221:19;;14880:366;;;:::o;15252:::-;15394:3;15415:67;15479:2;15474:3;15415:67;:::i;:::-;15408:74;;15491:93;15580:3;15491:93;:::i;:::-;15609:2;15604:3;15600:12;15593:19;;15252:366;;;:::o;15624:398::-;15783:3;15804:83;15885:1;15880:3;15804:83;:::i;:::-;15797:90;;15896:93;15985:3;15896:93;:::i;:::-;16014:1;16009:3;16005:11;15998:18;;15624:398;;;:::o;16028:366::-;16170:3;16191:67;16255:2;16250:3;16191:67;:::i;:::-;16184:74;;16267:93;16356:3;16267:93;:::i;:::-;16385:2;16380:3;16376:12;16369:19;;16028:366;;;:::o;16400:::-;16542:3;16563:67;16627:2;16622:3;16563:67;:::i;:::-;16556:74;;16639:93;16728:3;16639:93;:::i;:::-;16757:2;16752:3;16748:12;16741:19;;16400:366;;;:::o;16772:::-;16914:3;16935:67;16999:2;16994:3;16935:67;:::i;:::-;16928:74;;17011:93;17100:3;17011:93;:::i;:::-;17129:2;17124:3;17120:12;17113:19;;16772:366;;;:::o;17144:::-;17286:3;17307:67;17371:2;17366:3;17307:67;:::i;:::-;17300:74;;17383:93;17472:3;17383:93;:::i;:::-;17501:2;17496:3;17492:12;17485:19;;17144:366;;;:::o;17516:::-;17658:3;17679:67;17743:2;17738:3;17679:67;:::i;:::-;17672:74;;17755:93;17844:3;17755:93;:::i;:::-;17873:2;17868:3;17864:12;17857:19;;17516:366;;;:::o;17888:::-;18030:3;18051:67;18115:2;18110:3;18051:67;:::i;:::-;18044:74;;18127:93;18216:3;18127:93;:::i;:::-;18245:2;18240:3;18236:12;18229:19;;17888:366;;;:::o;18260:::-;18402:3;18423:67;18487:2;18482:3;18423:67;:::i;:::-;18416:74;;18499:93;18588:3;18499:93;:::i;:::-;18617:2;18612:3;18608:12;18601:19;;18260:366;;;:::o;18632:::-;18774:3;18795:67;18859:2;18854:3;18795:67;:::i;:::-;18788:74;;18871:93;18960:3;18871:93;:::i;:::-;18989:2;18984:3;18980:12;18973:19;;18632:366;;;:::o;19004:::-;19146:3;19167:67;19231:2;19226:3;19167:67;:::i;:::-;19160:74;;19243:93;19332:3;19243:93;:::i;:::-;19361:2;19356:3;19352:12;19345:19;;19004:366;;;:::o;19376:::-;19518:3;19539:67;19603:2;19598:3;19539:67;:::i;:::-;19532:74;;19615:93;19704:3;19615:93;:::i;:::-;19733:2;19728:3;19724:12;19717:19;;19376:366;;;:::o;19748:365::-;19890:3;19911:66;19975:1;19970:3;19911:66;:::i;:::-;19904:73;;19986:93;20075:3;19986:93;:::i;:::-;20104:2;20099:3;20095:12;20088:19;;19748:365;;;:::o;20119:366::-;20261:3;20282:67;20346:2;20341:3;20282:67;:::i;:::-;20275:74;;20358:93;20447:3;20358:93;:::i;:::-;20476:2;20471:3;20467:12;20460:19;;20119:366;;;:::o;20491:::-;20633:3;20654:67;20718:2;20713:3;20654:67;:::i;:::-;20647:74;;20730:93;20819:3;20730:93;:::i;:::-;20848:2;20843:3;20839:12;20832:19;;20491:366;;;:::o;20863:118::-;20950:24;20968:5;20950:24;:::i;:::-;20945:3;20938:37;20863:118;;:::o;20987:595::-;21215:3;21237:95;21328:3;21319:6;21237:95;:::i;:::-;21230:102;;21349:95;21440:3;21431:6;21349:95;:::i;:::-;21342:102;;21461:95;21552:3;21543:6;21461:95;:::i;:::-;21454:102;;21573:3;21566:10;;20987:595;;;;;;:::o;21588:379::-;21772:3;21794:147;21937:3;21794:147;:::i;:::-;21787:154;;21958:3;21951:10;;21588:379;;;:::o;21973:222::-;22066:4;22104:2;22093:9;22089:18;22081:26;;22117:71;22185:1;22174:9;22170:17;22161:6;22117:71;:::i;:::-;21973:222;;;;:::o;22201:640::-;22396:4;22434:3;22423:9;22419:19;22411:27;;22448:71;22516:1;22505:9;22501:17;22492:6;22448:71;:::i;:::-;22529:72;22597:2;22586:9;22582:18;22573:6;22529:72;:::i;:::-;22611;22679:2;22668:9;22664:18;22655:6;22611:72;:::i;:::-;22730:9;22724:4;22720:20;22715:2;22704:9;22700:18;22693:48;22758:76;22829:4;22820:6;22758:76;:::i;:::-;22750:84;;22201:640;;;;;;;:::o;22847:210::-;22934:4;22972:2;22961:9;22957:18;22949:26;;22985:65;23047:1;23036:9;23032:17;23023:6;22985:65;:::i;:::-;22847:210;;;;:::o;23063:313::-;23176:4;23214:2;23203:9;23199:18;23191:26;;23263:9;23257:4;23253:20;23249:1;23238:9;23234:17;23227:47;23291:78;23364:4;23355:6;23291:78;:::i;:::-;23283:86;;23063:313;;;;:::o;23382:419::-;23548:4;23586:2;23575:9;23571:18;23563:26;;23635:9;23629:4;23625:20;23621:1;23610:9;23606:17;23599:47;23663:131;23789:4;23663:131;:::i;:::-;23655:139;;23382:419;;;:::o;23807:::-;23973:4;24011:2;24000:9;23996:18;23988:26;;24060:9;24054:4;24050:20;24046:1;24035:9;24031:17;24024:47;24088:131;24214:4;24088:131;:::i;:::-;24080:139;;23807:419;;;:::o;24232:::-;24398:4;24436:2;24425:9;24421:18;24413:26;;24485:9;24479:4;24475:20;24471:1;24460:9;24456:17;24449:47;24513:131;24639:4;24513:131;:::i;:::-;24505:139;;24232:419;;;:::o;24657:::-;24823:4;24861:2;24850:9;24846:18;24838:26;;24910:9;24904:4;24900:20;24896:1;24885:9;24881:17;24874:47;24938:131;25064:4;24938:131;:::i;:::-;24930:139;;24657:419;;;:::o;25082:::-;25248:4;25286:2;25275:9;25271:18;25263:26;;25335:9;25329:4;25325:20;25321:1;25310:9;25306:17;25299:47;25363:131;25489:4;25363:131;:::i;:::-;25355:139;;25082:419;;;:::o;25507:::-;25673:4;25711:2;25700:9;25696:18;25688:26;;25760:9;25754:4;25750:20;25746:1;25735:9;25731:17;25724:47;25788:131;25914:4;25788:131;:::i;:::-;25780:139;;25507:419;;;:::o;25932:::-;26098:4;26136:2;26125:9;26121:18;26113:26;;26185:9;26179:4;26175:20;26171:1;26160:9;26156:17;26149:47;26213:131;26339:4;26213:131;:::i;:::-;26205:139;;25932:419;;;:::o;26357:::-;26523:4;26561:2;26550:9;26546:18;26538:26;;26610:9;26604:4;26600:20;26596:1;26585:9;26581:17;26574:47;26638:131;26764:4;26638:131;:::i;:::-;26630:139;;26357:419;;;:::o;26782:::-;26948:4;26986:2;26975:9;26971:18;26963:26;;27035:9;27029:4;27025:20;27021:1;27010:9;27006:17;26999:47;27063:131;27189:4;27063:131;:::i;:::-;27055:139;;26782:419;;;:::o;27207:::-;27373:4;27411:2;27400:9;27396:18;27388:26;;27460:9;27454:4;27450:20;27446:1;27435:9;27431:17;27424:47;27488:131;27614:4;27488:131;:::i;:::-;27480:139;;27207:419;;;:::o;27632:::-;27798:4;27836:2;27825:9;27821:18;27813:26;;27885:9;27879:4;27875:20;27871:1;27860:9;27856:17;27849:47;27913:131;28039:4;27913:131;:::i;:::-;27905:139;;27632:419;;;:::o;28057:::-;28223:4;28261:2;28250:9;28246:18;28238:26;;28310:9;28304:4;28300:20;28296:1;28285:9;28281:17;28274:47;28338:131;28464:4;28338:131;:::i;:::-;28330:139;;28057:419;;;:::o;28482:::-;28648:4;28686:2;28675:9;28671:18;28663:26;;28735:9;28729:4;28725:20;28721:1;28710:9;28706:17;28699:47;28763:131;28889:4;28763:131;:::i;:::-;28755:139;;28482:419;;;:::o;28907:::-;29073:4;29111:2;29100:9;29096:18;29088:26;;29160:9;29154:4;29150:20;29146:1;29135:9;29131:17;29124:47;29188:131;29314:4;29188:131;:::i;:::-;29180:139;;28907:419;;;:::o;29332:::-;29498:4;29536:2;29525:9;29521:18;29513:26;;29585:9;29579:4;29575:20;29571:1;29560:9;29556:17;29549:47;29613:131;29739:4;29613:131;:::i;:::-;29605:139;;29332:419;;;:::o;29757:::-;29923:4;29961:2;29950:9;29946:18;29938:26;;30010:9;30004:4;30000:20;29996:1;29985:9;29981:17;29974:47;30038:131;30164:4;30038:131;:::i;:::-;30030:139;;29757:419;;;:::o;30182:::-;30348:4;30386:2;30375:9;30371:18;30363:26;;30435:9;30429:4;30425:20;30421:1;30410:9;30406:17;30399:47;30463:131;30589:4;30463:131;:::i;:::-;30455:139;;30182:419;;;:::o;30607:::-;30773:4;30811:2;30800:9;30796:18;30788:26;;30860:9;30854:4;30850:20;30846:1;30835:9;30831:17;30824:47;30888:131;31014:4;30888:131;:::i;:::-;30880:139;;30607:419;;;:::o;31032:::-;31198:4;31236:2;31225:9;31221:18;31213:26;;31285:9;31279:4;31275:20;31271:1;31260:9;31256:17;31249:47;31313:131;31439:4;31313:131;:::i;:::-;31305:139;;31032:419;;;:::o;31457:::-;31623:4;31661:2;31650:9;31646:18;31638:26;;31710:9;31704:4;31700:20;31696:1;31685:9;31681:17;31674:47;31738:131;31864:4;31738:131;:::i;:::-;31730:139;;31457:419;;;:::o;31882:::-;32048:4;32086:2;32075:9;32071:18;32063:26;;32135:9;32129:4;32125:20;32121:1;32110:9;32106:17;32099:47;32163:131;32289:4;32163:131;:::i;:::-;32155:139;;31882:419;;;:::o;32307:::-;32473:4;32511:2;32500:9;32496:18;32488:26;;32560:9;32554:4;32550:20;32546:1;32535:9;32531:17;32524:47;32588:131;32714:4;32588:131;:::i;:::-;32580:139;;32307:419;;;:::o;32732:::-;32898:4;32936:2;32925:9;32921:18;32913:26;;32985:9;32979:4;32975:20;32971:1;32960:9;32956:17;32949:47;33013:131;33139:4;33013:131;:::i;:::-;33005:139;;32732:419;;;:::o;33157:::-;33323:4;33361:2;33350:9;33346:18;33338:26;;33410:9;33404:4;33400:20;33396:1;33385:9;33381:17;33374:47;33438:131;33564:4;33438:131;:::i;:::-;33430:139;;33157:419;;;:::o;33582:::-;33748:4;33786:2;33775:9;33771:18;33763:26;;33835:9;33829:4;33825:20;33821:1;33810:9;33806:17;33799:47;33863:131;33989:4;33863:131;:::i;:::-;33855:139;;33582:419;;;:::o;34007:::-;34173:4;34211:2;34200:9;34196:18;34188:26;;34260:9;34254:4;34250:20;34246:1;34235:9;34231:17;34224:47;34288:131;34414:4;34288:131;:::i;:::-;34280:139;;34007:419;;;:::o;34432:::-;34598:4;34636:2;34625:9;34621:18;34613:26;;34685:9;34679:4;34675:20;34671:1;34660:9;34656:17;34649:47;34713:131;34839:4;34713:131;:::i;:::-;34705:139;;34432:419;;;:::o;34857:::-;35023:4;35061:2;35050:9;35046:18;35038:26;;35110:9;35104:4;35100:20;35096:1;35085:9;35081:17;35074:47;35138:131;35264:4;35138:131;:::i;:::-;35130:139;;34857:419;;;:::o;35282:::-;35448:4;35486:2;35475:9;35471:18;35463:26;;35535:9;35529:4;35525:20;35521:1;35510:9;35506:17;35499:47;35563:131;35689:4;35563:131;:::i;:::-;35555:139;;35282:419;;;:::o;35707:222::-;35800:4;35838:2;35827:9;35823:18;35815:26;;35851:71;35919:1;35908:9;35904:17;35895:6;35851:71;:::i;:::-;35707:222;;;;:::o;35935:129::-;35969:6;35996:20;;:::i;:::-;35986:30;;36025:33;36053:4;36045:6;36025:33;:::i;:::-;35935:129;;;:::o;36070:75::-;36103:6;36136:2;36130:9;36120:19;;36070:75;:::o;36151:307::-;36212:4;36302:18;36294:6;36291:30;36288:56;;;36324:18;;:::i;:::-;36288:56;36362:29;36384:6;36362:29;:::i;:::-;36354:37;;36446:4;36440;36436:15;36428:23;;36151:307;;;:::o;36464:308::-;36526:4;36616:18;36608:6;36605:30;36602:56;;;36638:18;;:::i;:::-;36602:56;36676:29;36698:6;36676:29;:::i;:::-;36668:37;;36760:4;36754;36750:15;36742:23;;36464:308;;;:::o;36778:98::-;36829:6;36863:5;36857:12;36847:22;;36778:98;;;:::o;36882:99::-;36934:6;36968:5;36962:12;36952:22;;36882:99;;;:::o;36987:168::-;37070:11;37104:6;37099:3;37092:19;37144:4;37139:3;37135:14;37120:29;;36987:168;;;;:::o;37161:147::-;37262:11;37299:3;37284:18;;37161:147;;;;:::o;37314:169::-;37398:11;37432:6;37427:3;37420:19;37472:4;37467:3;37463:14;37448:29;;37314:169;;;;:::o;37489:148::-;37591:11;37628:3;37613:18;;37489:148;;;;:::o;37643:273::-;37683:3;37702:20;37720:1;37702:20;:::i;:::-;37697:25;;37736:20;37754:1;37736:20;:::i;:::-;37731:25;;37858:1;37822:34;37818:42;37815:1;37812:49;37809:75;;;37864:18;;:::i;:::-;37809:75;37908:1;37905;37901:9;37894:16;;37643:273;;;;:::o;37922:305::-;37962:3;37981:20;37999:1;37981:20;:::i;:::-;37976:25;;38015:20;38033:1;38015:20;:::i;:::-;38010:25;;38169:1;38101:66;38097:74;38094:1;38091:81;38088:107;;;38175:18;;:::i;:::-;38088:107;38219:1;38216;38212:9;38205:16;;37922:305;;;;:::o;38233:185::-;38273:1;38290:20;38308:1;38290:20;:::i;:::-;38285:25;;38324:20;38342:1;38324:20;:::i;:::-;38319:25;;38363:1;38353:35;;38368:18;;:::i;:::-;38353:35;38410:1;38407;38403:9;38398:14;;38233:185;;;;:::o;38424:348::-;38464:7;38487:20;38505:1;38487:20;:::i;:::-;38482:25;;38521:20;38539:1;38521:20;:::i;:::-;38516:25;;38709:1;38641:66;38637:74;38634:1;38631:81;38626:1;38619:9;38612:17;38608:105;38605:131;;;38716:18;;:::i;:::-;38605:131;38764:1;38761;38757:9;38746:20;;38424:348;;;;:::o;38778:191::-;38818:4;38838:20;38856:1;38838:20;:::i;:::-;38833:25;;38872:20;38890:1;38872:20;:::i;:::-;38867:25;;38911:1;38908;38905:8;38902:34;;;38916:18;;:::i;:::-;38902:34;38961:1;38958;38954:9;38946:17;;38778:191;;;;:::o;38975:::-;39015:4;39035:20;39053:1;39035:20;:::i;:::-;39030:25;;39069:20;39087:1;39069:20;:::i;:::-;39064:25;;39108:1;39105;39102:8;39099:34;;;39113:18;;:::i;:::-;39099:34;39158:1;39155;39151:9;39143:17;;38975:191;;;;:::o;39172:96::-;39209:7;39238:24;39256:5;39238:24;:::i;:::-;39227:35;;39172:96;;;:::o;39274:90::-;39308:7;39351:5;39344:13;39337:21;39326:32;;39274:90;;;:::o;39370:149::-;39406:7;39446:66;39439:5;39435:78;39424:89;;39370:149;;;:::o;39525:118::-;39562:7;39602:34;39595:5;39591:46;39580:57;;39525:118;;;:::o;39649:126::-;39686:7;39726:42;39719:5;39715:54;39704:65;;39649:126;;;:::o;39781:77::-;39818:7;39847:5;39836:16;;39781:77;;;:::o;39864:154::-;39948:6;39943:3;39938;39925:30;40010:1;40001:6;39996:3;39992:16;39985:27;39864:154;;;:::o;40024:307::-;40092:1;40102:113;40116:6;40113:1;40110:13;40102:113;;;40201:1;40196:3;40192:11;40186:18;40182:1;40177:3;40173:11;40166:39;40138:2;40135:1;40131:10;40126:15;;40102:113;;;40233:6;40230:1;40227:13;40224:101;;;40313:1;40304:6;40299:3;40295:16;40288:27;40224:101;40073:258;40024:307;;;:::o;40337:171::-;40376:3;40399:24;40417:5;40399:24;:::i;:::-;40390:33;;40445:4;40438:5;40435:15;40432:41;;;40453:18;;:::i;:::-;40432:41;40500:1;40493:5;40489:13;40482:20;;40337:171;;;:::o;40514:320::-;40558:6;40595:1;40589:4;40585:12;40575:22;;40642:1;40636:4;40632:12;40663:18;40653:81;;40719:4;40711:6;40707:17;40697:27;;40653:81;40781:2;40773:6;40770:14;40750:18;40747:38;40744:84;;;40800:18;;:::i;:::-;40744:84;40565:269;40514:320;;;:::o;40840:281::-;40923:27;40945:4;40923:27;:::i;:::-;40915:6;40911:40;41053:6;41041:10;41038:22;41017:18;41005:10;41002:34;40999:62;40996:88;;;41064:18;;:::i;:::-;40996:88;41104:10;41100:2;41093:22;40883:238;40840:281;;:::o;41127:233::-;41166:3;41189:24;41207:5;41189:24;:::i;:::-;41180:33;;41235:66;41228:5;41225:77;41222:103;;;41305:18;;:::i;:::-;41222:103;41352:1;41345:5;41341:13;41334:20;;41127:233;;;:::o;41366:176::-;41398:1;41415:20;41433:1;41415:20;:::i;:::-;41410:25;;41449:20;41467:1;41449:20;:::i;:::-;41444:25;;41488:1;41478:35;;41493:18;;:::i;:::-;41478:35;41534:1;41531;41527:9;41522:14;;41366:176;;;;:::o;41548:180::-;41596:77;41593:1;41586:88;41693:4;41690:1;41683:15;41717:4;41714:1;41707:15;41734:180;41782:77;41779:1;41772:88;41879:4;41876:1;41869:15;41903:4;41900:1;41893:15;41920:180;41968:77;41965:1;41958:88;42065:4;42062:1;42055:15;42089:4;42086:1;42079:15;42106:180;42154:77;42151:1;42144:88;42251:4;42248:1;42241:15;42275:4;42272:1;42265:15;42292:180;42340:77;42337:1;42330:88;42437:4;42434:1;42427:15;42461:4;42458:1;42451:15;42478:117;42587:1;42584;42577:12;42601:117;42710:1;42707;42700:12;42724:117;42833:1;42830;42823:12;42847:117;42956:1;42953;42946:12;42970:117;43079:1;43076;43069:12;43093:117;43202:1;43199;43192:12;43216:102;43257:6;43308:2;43304:7;43299:2;43292:5;43288:14;43284:28;43274:38;;43216:102;;;:::o;43324:221::-;43464:34;43460:1;43452:6;43448:14;43441:58;43533:4;43528:2;43520:6;43516:15;43509:29;43324:221;:::o;43551:181::-;43691:33;43687:1;43679:6;43675:14;43668:57;43551:181;:::o;43738:165::-;43878:17;43874:1;43866:6;43862:14;43855:41;43738:165;:::o;43909:229::-;44049:34;44045:1;44037:6;44033:14;44026:58;44118:12;44113:2;44105:6;44101:15;44094:37;43909:229;:::o;44144:222::-;44284:34;44280:1;44272:6;44268:14;44261:58;44353:5;44348:2;44340:6;44336:15;44329:30;44144:222;:::o;44372:224::-;44512:34;44508:1;44500:6;44496:14;44489:58;44581:7;44576:2;44568:6;44564:15;44557:32;44372:224;:::o;44602:163::-;44742:15;44738:1;44730:6;44726:14;44719:39;44602:163;:::o;44771:244::-;44911:34;44907:1;44899:6;44895:14;44888:58;44980:27;44975:2;44967:6;44963:15;44956:52;44771:244;:::o;45021:174::-;45161:26;45157:1;45149:6;45145:14;45138:50;45021:174;:::o;45201:230::-;45341:34;45337:1;45329:6;45325:14;45318:58;45410:13;45405:2;45397:6;45393:15;45386:38;45201:230;:::o;45437:225::-;45577:34;45573:1;45565:6;45561:14;45554:58;45646:8;45641:2;45633:6;45629:15;45622:33;45437:225;:::o;45668:167::-;45808:19;45804:1;45796:6;45792:14;45785:43;45668:167;:::o;45841:176::-;45981:28;45977:1;45969:6;45965:14;45958:52;45841:176;:::o;46023:237::-;46163:34;46159:1;46151:6;46147:14;46140:58;46232:20;46227:2;46219:6;46215:15;46208:45;46023:237;:::o;46266:163::-;46406:15;46402:1;46394:6;46390:14;46383:39;46266:163;:::o;46435:221::-;46575:34;46571:1;46563:6;46559:14;46552:58;46644:4;46639:2;46631:6;46627:15;46620:29;46435:221;:::o;46662:114::-;;:::o;46782:168::-;46922:20;46918:1;46910:6;46906:14;46899:44;46782:168;:::o;46956:238::-;47096:34;47092:1;47084:6;47080:14;47073:58;47165:21;47160:2;47152:6;47148:15;47141:46;46956:238;:::o;47200:179::-;47340:31;47336:1;47328:6;47324:14;47317:55;47200:179;:::o;47385:166::-;47525:18;47521:1;47513:6;47509:14;47502:42;47385:166;:::o;47557:220::-;47697:34;47693:1;47685:6;47681:14;47674:58;47766:3;47761:2;47753:6;47749:15;47742:28;47557:220;:::o;47783:165::-;47923:17;47919:1;47911:6;47907:14;47900:41;47783:165;:::o;47954:166::-;48094:18;48090:1;48082:6;48078:14;48071:42;47954:166;:::o;48126:233::-;48266:34;48262:1;48254:6;48250:14;48243:58;48335:16;48330:2;48322:6;48318:15;48311:41;48126:233;:::o;48365:225::-;48505:34;48501:1;48493:6;48489:14;48482:58;48574:8;48569:2;48561:6;48557:15;48550:33;48365:225;:::o;48596:234::-;48736:34;48732:1;48724:6;48720:14;48713:58;48805:17;48800:2;48792:6;48788:15;48781:42;48596:234;:::o;48836:159::-;48976:11;48972:1;48964:6;48960:14;48953:35;48836:159;:::o;49001:232::-;49141:34;49137:1;49129:6;49125:14;49118:58;49210:15;49205:2;49197:6;49193:15;49186:40;49001:232;:::o;49239:221::-;49379:34;49375:1;49367:6;49363:14;49356:58;49448:4;49443:2;49435:6;49431:15;49424:29;49239:221;:::o;49466:122::-;49539:24;49557:5;49539:24;:::i;:::-;49532:5;49529:35;49519:63;;49578:1;49575;49568:12;49519:63;49466:122;:::o;49594:116::-;49664:21;49679:5;49664:21;:::i;:::-;49657:5;49654:32;49644:60;;49700:1;49697;49690:12;49644:60;49594:116;:::o;49716:120::-;49788:23;49805:5;49788:23;:::i;:::-;49781:5;49778:34;49768:62;;49826:1;49823;49816:12;49768:62;49716:120;:::o;49842:122::-;49915:24;49933:5;49915:24;:::i;:::-;49908:5;49905:35;49895:63;;49954:1;49951;49944:12;49895:63;49842:122;:::o

Swarm Source

ipfs://27afc98e0670e94d0d673ff788b367075a8af77517ff4aba3ea9f59cc9492758

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

OVERVIEW

Chad & Brad Family NFT Collection is a group of 5,555 unique characters focused on the famous Chad & Brad stereotypes that are currently plaguing the cannabis industry. The 5 main characters that are here to take over are Chad, Brad, Chad's little brother Thad, Brad's little b...

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.