ETH Price: $3,482.78 (+2.19%)
Gas: 7 Gwei

Contract

0x6976Af8b25C97A090769Fa97ca9359c891353f61
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Set Approval For...201706732024-06-25 19:05:355 days ago1719342335IN
0x6976Af8b...891353f61
0 ETH0.000362947.77843269
Transfer From201363442024-06-20 23:54:2310 days ago1718927663IN
0x6976Af8b...891353f61
0 ETH0.0002253.26332025
Set Approval For...199747952024-05-29 10:02:2333 days ago1716976943IN
0x6976Af8b...891353f61
0 ETH0.0004762710.20737913
Set Approval For...199741342024-05-29 7:49:4733 days ago1716968987IN
0x6976Af8b...891353f61
0 ETH0.000361557.74881632
Transfer From199554662024-05-26 17:12:5936 days ago1716743579IN
0x6976Af8b...891353f61
0 ETH0.000557338.08322868
Set Approval For...199427002024-05-24 22:24:1137 days ago1716589451IN
0x6976Af8b...891353f61
0 ETH0.000260395.58074592
Safe Transfer Fr...198801932024-05-16 4:36:2346 days ago1715834183IN
0x6976Af8b...891353f61
0 ETH0.000346016.32874775
Safe Transfer Fr...198780632024-05-15 21:27:1146 days ago1715808431IN
0x6976Af8b...891353f61
0 ETH0.000434776.05753764
Safe Transfer Fr...198429062024-05-10 23:26:1151 days ago1715383571IN
0x6976Af8b...891353f61
0 ETH0.000359875.00958966
Set Approval For...198428172024-05-10 23:08:1151 days ago1715382491IN
0x6976Af8b...891353f61
0 ETH0.000288136.17516808
Set Approval For...198357632024-05-09 23:27:5952 days ago1715297279IN
0x6976Af8b...891353f61
0 ETH0.000164823.53246071
Set Approval For...198357632024-05-09 23:27:5952 days ago1715297279IN
0x6976Af8b...891353f61
0 ETH0.000165123.53246071
Set Approval For...198357502024-05-09 23:25:2352 days ago1715297123IN
0x6976Af8b...891353f61
0 ETH0.00018233.90013008
Set Approval For...197299102024-04-25 4:10:4767 days ago1714018247IN
0x6976Af8b...891353f61
0 ETH0.000345537.40534926
Set Approval For...197243262024-04-24 9:24:2368 days ago1713950663IN
0x6976Af8b...891353f61
0 ETH0.000400258.57821046
Set Approval For...197068342024-04-21 22:42:1170 days ago1713739331IN
0x6976Af8b...891353f61
0 ETH0.000279595.98288319
Set Approval For...196966672024-04-20 12:36:5972 days ago1713616619IN
0x6976Af8b...891353f61
0 ETH0.000389248.32715111
Transfer From196902782024-04-19 15:08:4773 days ago1713539327IN
0x6976Af8b...891353f61
0 ETH0.0006785213.18402383
Set Approval For...196778992024-04-17 21:33:3574 days ago1713389615IN
0x6976Af8b...891353f61
0 ETH0.000453019.70893683
Safe Transfer Fr...196767432024-04-17 17:39:4775 days ago1713375587IN
0x6976Af8b...891353f61
0 ETH0.0013019919.54892635
Safe Transfer Fr...196716302024-04-17 0:31:5975 days ago1713313919IN
0x6976Af8b...891353f61
0 ETH0.000612918.58404407
Set Approval For...195174862024-03-26 8:40:1197 days ago1711442411IN
0x6976Af8b...891353f61
0 ETH0.0009769120.93691315
Safe Transfer Fr...195172662024-03-26 7:56:1197 days ago1711439771IN
0x6976Af8b...891353f61
0 ETH0.0011648221.45566726
Transfer From195115232024-03-25 12:34:1198 days ago1711370051IN
0x6976Af8b...891353f61
0 ETH0.0009611918.68073954
Transfer From195115212024-03-25 12:33:4798 days ago1711370027IN
0x6976Af8b...891353f61
0 ETH0.0012958718.89965966
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ERC721NFT

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

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

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

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

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;
}

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

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


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

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

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }
    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return verifyCallResult(success, returndata, errorMessage);
    }
    function functionStaticCall(address target, bytes memory data)
        internal
        view
        returns (bytes memory)
    {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
    function functionDelegateCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

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

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

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

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

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);
    }
}

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

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;
    constructor() {
        _status = _NOT_ENTERED;
    }
    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}


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 collectionSize;
    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_,
        uint256 collectionSize_
    ) {
        require(
            collectionSize_ > 0,
            "ERC721A: collection must have a nonzero supply"
        );
        require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
        _name = name_;
        _symbol = symbol_;
        maxBatchSize = maxBatchSize_;
        collectionSize = collectionSize_;
    }
    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));
        // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
        uint256 nextTokenId = tokenId + 1;
        if (_ownerships[nextTokenId].addr == address(0)) {
            if (_exists(nextTokenId)) {
                _ownerships[nextTokenId] = TokenOwnership(
                    prevOwnership.addr,
                    prevOwnership.startTimestamp
                );
            }
        }

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

    uint256 public nextOwnerToExplicitlySet = 0;
    function _setOwnersExplicit(uint256 quantity) internal {
        uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
        require(quantity > 0, "quantity must be nonzero");
        uint256 endIndex = oldNextOwnerToSet + quantity - 1;
        if (endIndex > collectionSize - 1) {
            endIndex = collectionSize - 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 {}
}

library MerkleProof {

    function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }
    function verifyCalldata(bytes32[] calldata proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
        return processProofCalldata(proof, leaf) == root;
    }
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }
    function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }
    function multiProofVerify(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProof(proof, proofFlags, leaves) == root;
    }
    function processMultiProof(
        bytes32[] memory proof,
        bool[]    memory proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;
        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i]
                ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])
                : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }
        if (totalHashes > 0) {
            unchecked {
                return hashes[totalHashes - 1];
            }
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }
    function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
        return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
    }
    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

interface IERC20 {
    function balanceOf(address account) external view returns (uint256);
}

contract ERC721NFT is Ownable, ERC721A, ReentrancyGuard {
    bool public publicSale = false;
    bytes32 private root;
    uint256 public maxToken = 5000;
    string private _baseTokenURI;
    mapping(address => bool) public whitelistUsed;
    address[] public erc20TokenList = [
        0x4521C9aD6A3D4230803aB752Ed238BE11F8B342F, // sani
        0xFeeeef4D7b4Bf3cc8BD012D02D32Ba5fD3D51e31, // tail
        0x73024e43905fEd661C6c1843aB9750fD3db4f9b7, // xlptaileth
        0x2cC22D385903A51306bCBED351d90f6C12127Df4, // xlpsanieth
        0x2E4b02Dc74d5383253e9dFc1bE6ef9848A4dd689, // xlponesani
        0xA76D77F960c9065D97a598Ef47C2DFd7F67D40Ee, // xlponetail
        0x7131671885Ea3c8eE7C2fF2344cE48ab398b5432, // xtail
        0x9e614Cb7696fb47DCA5F1620a0384f1942e32710, // xsani
        0xE5e6f0c26629F70f5865278DbF19Bc95e81Ffc1D // xlpsanitail
        ];
    function tokensOfOwner(address _owner) external view returns(uint256[] memory) {
        uint tokenCount = balanceOf(_owner);
        uint256[] memory tokensId = new uint256[](tokenCount);
        for(uint i = 0; i < tokenCount; i++){
            tokensId[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return tokensId;
    }
    function balanceCheck(address addr) public view returns (bool) {
        bool result = false;
        for(uint i = 0; i < erc20TokenList.length; i ++ ) {
                IERC20(erc20TokenList[i]).balanceOf(addr) > 0 
                ? result = true
                : result = result;
        }
        return result;
    }
    function accessCheck (address addr) public view returns (uint256) {
        uint accessResult = 0;
        if (whitelistUsed[addr] == true) {
            accessResult = 1;
        } else {
            if (balanceCheck(addr) == false){
            accessResult = 2;
            }
        }
        return accessResult;
    }
    constructor(string memory _NAME, string memory _SYMBOL, string memory baseTokenURI)
        ERC721A(_NAME, _SYMBOL, 1000, maxToken)
    {
        _baseTokenURI = baseTokenURI;
       
    }
    function verify(
        bytes32[] memory proof,
        address addr,
        uint256 amount
    ) public view returns (bool) {
        bytes32 leaf = keccak256(bytes.concat(keccak256(abi.encode(addr, amount))));
        require(MerkleProof.verify(proof, root, leaf), "INVALID PROOF");
        return true;
    }
    function mint(bytes32[] memory proof) external payable callerIsUser {
        address _to = msg.sender;
        require(publicSale, "SALE_HAS_NOT_STARTED_YET");
        require(verify(proof, _to, 1 ), "NOT_IN_THE_WHITE_LIST");
        require(whitelistUsed[_to] == false, "ALREADY_USED");
        require(balanceCheck(_to)  == true, "NO_REQUIRED_TOKENS_ON_BALANCE");
        require(totalSupply() + 1 <= maxToken, "NOT_ENOUGH_SUPPLY_TO_MINT");
        _safeMint(_to, 1);
        whitelistUsed[_to] = true;
    }
    modifier callerIsUser() {
        require(tx.origin == msg.sender, "The caller is another contract");
        _;
    }
    function numberMinted(address owner) public view returns (uint256) {
        return _numberMinted(owner);
    }
    function getOwnershipData(uint256 tokenId)
        external
        view
        returns (TokenOwnership memory)
    {
        return ownershipOf(tokenId);
    }
    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );
        string memory _tokenURI = super.tokenURI(tokenId);
        return
            bytes(_tokenURI).length > 0
                ? string(abi.encodePacked(_tokenURI, ".json"))
                : "";
    }
    function _baseURI() internal view virtual override returns (string memory) {
        return _baseTokenURI;
    }
    function flipPublicSaleState() external onlyOwner {
        publicSale = !publicSale;
    }
    function setBaseURI(string calldata baseURI) external onlyOwner {
        _baseTokenURI = baseURI;
    }
    function setRoot(bytes32 _root) external onlyOwner {
        root = _root;
    }
    function withdraw() external onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_NAME","type":"string"},{"internalType":"string","name":"_SYMBOL","type":"string"},{"internalType":"string","name":"baseTokenURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"accessCheck","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"addr","type":"address"}],"name":"balanceCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"erc20TokenList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipPublicSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"mint","outputs":[],"stateMutability":"payable","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":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","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":"publicSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_root","type":"bytes32"}],"name":"setRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"verify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistUsed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c0604052600060015560006008556000600a60006101000a81548160ff021916908315150217905550611388600c55604051806101200160405280734521c9ad6a3d4230803ab752ed238be11f8b342f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173feeeef4d7b4bf3cc8bd012d02d32ba5fd3d51e3173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020017373024e43905fed661c6c1843ab9750fd3db4f9b773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001732cc22d385903a51306bcbed351d90f6c12127df473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001732e4b02dc74d5383253e9dfc1be6ef9848a4dd68973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173a76d77f960c9065d97a598ef47c2dfd7f67d40ee73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001737131671885ea3c8ee7c2ff2344ce48ab398b543273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001739e614cb7696fb47dca5f1620a0384f1942e3271073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173e5e6f0c26629f70f5865278dbf19bc95e81ffc1d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250600f906009620002c1929190620004d0565b50348015620002cf57600080fd5b5060405162005ef038038062005ef08339818101604052810190620002f5919062000711565b82826103e8600c546200031d620003116200040460201b60201c565b6200040c60201b60201c565b6000811162000363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200035a9062000851565b60405180910390fd5b60008211620003a9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003a090620008e9565b60405180910390fd5b8360029081620003ba919062000b56565b508260039081620003cc919062000b56565b508160a08181525050806080818152505050505050600160098190555080600d9081620003fa919062000b56565b5050505062000c3d565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280548282559060005260206000209081019282156200054c579160200282015b828111156200054b5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190620004f1565b5b5090506200055b91906200055f565b5090565b5b808211156200057a57600081600090555060010162000560565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620005e7826200059c565b810181811067ffffffffffffffff82111715620006095762000608620005ad565b5b80604052505050565b60006200061e6200057e565b90506200062c8282620005dc565b919050565b600067ffffffffffffffff8211156200064f576200064e620005ad565b5b6200065a826200059c565b9050602081019050919050565b60005b83811015620006875780820151818401526020810190506200066a565b60008484015250505050565b6000620006aa620006a48462000631565b62000612565b905082815260208101848484011115620006c957620006c862000597565b5b620006d684828562000667565b509392505050565b600082601f830112620006f657620006f562000592565b5b81516200070884826020860162000693565b91505092915050565b6000806000606084860312156200072d576200072c62000588565b5b600084015167ffffffffffffffff8111156200074e576200074d6200058d565b5b6200075c86828701620006de565b935050602084015167ffffffffffffffff81111562000780576200077f6200058d565b5b6200078e86828701620006de565b925050604084015167ffffffffffffffff811115620007b257620007b16200058d565b5b620007c086828701620006de565b9150509250925092565b600082825260208201905092915050565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b600062000839602e83620007ca565b91506200084682620007db565b604082019050919050565b600060208201905081810360008301526200086c816200082a565b9050919050565b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b6000620008d1602783620007ca565b9150620008de8262000873565b604082019050919050565b600060208201905081810360008301526200090481620008c2565b9050919050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200095e57607f821691505b60208210810362000974576200097362000916565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009de7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200099f565b620009ea86836200099f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000a3762000a3162000a2b8462000a02565b62000a0c565b62000a02565b9050919050565b6000819050919050565b62000a538362000a16565b62000a6b62000a628262000a3e565b848454620009ac565b825550505050565b600090565b62000a8262000a73565b62000a8f81848462000a48565b505050565b5b8181101562000ab75762000aab60008262000a78565b60018101905062000a95565b5050565b601f82111562000b065762000ad0816200097a565b62000adb846200098f565b8101602085101562000aeb578190505b62000b0362000afa856200098f565b83018262000a94565b50505b505050565b600082821c905092915050565b600062000b2b6000198460080262000b0b565b1980831691505092915050565b600062000b46838362000b18565b9150826002028217905092915050565b62000b61826200090b565b67ffffffffffffffff81111562000b7d5762000b7c620005ad565b5b62000b89825462000945565b62000b9682828562000abb565b600060209050601f83116001811462000bce576000841562000bb9578287015190505b62000bc5858262000b38565b86555062000c35565b601f19841662000bde866200097a565b60005b8281101562000c085784890151825560018201915060208501945060208101905062000be1565b8683101562000c28578489015162000c24601f89168262000b18565b8355505b6001600288020188555050505b505050505050565b60805160a05161528262000c6e6000396000818161250b015281816125340152612bd50152600050506152826000f3fe6080604052600436106102045760003560e01c8063715018a611610118578063b77a147b116100a0578063d7224ba01161006f578063d7224ba0146107b8578063dab5f340146107e3578063dc33e6811461080c578063e985e9c514610849578063f2fde38b1461088657610204565b8063b77a147b1461070b578063b88d4fde14610727578063c87b56dd14610750578063ca69e3231461078d57610204565b806395d89b41116100e757806395d89b4114610626578063a10866ef14610651578063a22cb46514610668578063ac18b53414610691578063afc6c649146106ce57610204565b8063715018a61461056a5780638462151c146105815780638da5cb5b146105be5780639231ab2a146105e957610204565b80632f745c591161019b5780634f6ccce71161016a5780634f6ccce71461044d57806355f804b31461048a5780636352211e146104b35780636dc6cf90146104f057806370a082311461052d57610204565b80632f745c59146103a557806333bc1c5c146103e25780633ccfd60b1461040d57806342842e0e1461042457610204565b8063095ea7b3116101d7578063095ea7b3146102eb57806318160ddd1461031457806321328f9e1461033f57806323b872dd1461037c57610204565b806301ffc9a71461020957806304b38ce01461024657806306fdde0314610283578063081812fc146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b91906132f0565b6108af565b60405161023d9190613338565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190613576565b6109f9565b60405161027a9190613338565b60405180910390f35b34801561028f57600080fd5b50610298610aa5565b6040516102a59190613664565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190613686565b610b37565b6040516102e291906136c2565b60405180910390f35b3480156102f757600080fd5b50610312600480360381019061030d91906136dd565b610bbc565b005b34801561032057600080fd5b50610329610cd4565b604051610336919061372c565b60405180910390f35b34801561034b57600080fd5b5061036660048036038101906103619190613747565b610cde565b6040516103739190613338565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190613774565b610cfe565b005b3480156103b157600080fd5b506103cc60048036038101906103c791906136dd565b610d0e565b6040516103d9919061372c565b60405180910390f35b3480156103ee57600080fd5b506103f7610f0a565b6040516104049190613338565b60405180910390f35b34801561041957600080fd5b50610422610f1d565b005b34801561043057600080fd5b5061044b60048036038101906104469190613774565b610fe2565b005b34801561045957600080fd5b50610474600480360381019061046f9190613686565b611002565b604051610481919061372c565b60405180910390f35b34801561049657600080fd5b506104b160048036038101906104ac9190613822565b611055565b005b3480156104bf57600080fd5b506104da60048036038101906104d59190613686565b6110e7565b6040516104e791906136c2565b60405180910390f35b3480156104fc57600080fd5b5061051760048036038101906105129190613747565b6110fd565b604051610524919061372c565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f9190613747565b611188565b604051610561919061372c565b60405180910390f35b34801561057657600080fd5b5061057f611270565b005b34801561058d57600080fd5b506105a860048036038101906105a39190613747565b6112f8565b6040516105b5919061392d565b60405180910390f35b3480156105ca57600080fd5b506105d36113a6565b6040516105e091906136c2565b60405180910390f35b3480156105f557600080fd5b50610610600480360381019061060b9190613686565b6113cf565b60405161061d91906139b0565b60405180910390f35b34801561063257600080fd5b5061063b6113e7565b6040516106489190613664565b60405180910390f35b34801561065d57600080fd5b50610666611479565b005b34801561067457600080fd5b5061068f600480360381019061068a91906139f7565b611521565b005b34801561069d57600080fd5b506106b860048036038101906106b39190613686565b6116a1565b6040516106c591906136c2565b60405180910390f35b3480156106da57600080fd5b506106f560048036038101906106f09190613747565b6116e0565b6040516107029190613338565b60405180910390f35b61072560048036038101906107209190613a37565b6117e0565b005b34801561073357600080fd5b5061074e60048036038101906107499190613b35565b611a8e565b005b34801561075c57600080fd5b5061077760048036038101906107729190613686565b611aea565b6040516107849190613664565b60405180910390f35b34801561079957600080fd5b506107a2611b88565b6040516107af919061372c565b60405180910390f35b3480156107c457600080fd5b506107cd611b8e565b6040516107da919061372c565b60405180910390f35b3480156107ef57600080fd5b5061080a60048036038101906108059190613bb8565b611b94565b005b34801561081857600080fd5b50610833600480360381019061082e9190613747565b611c1a565b604051610840919061372c565b60405180910390f35b34801561085557600080fd5b50610870600480360381019061086b9190613be5565b611c2c565b60405161087d9190613338565b60405180910390f35b34801561089257600080fd5b506108ad60048036038101906108a89190613747565b611cc0565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061097a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109e257507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109f257506109f182611db7565b5b9050919050565b6000808383604051602001610a0f929190613c25565b60405160208183030381529060405280519060200120604051602001610a359190613c6f565b604051602081830303815290604052805190602001209050610a5a85600b5483611e21565b610a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9090613cd6565b60405180910390fd5b60019150509392505050565b606060028054610ab490613d25565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae090613d25565b8015610b2d5780601f10610b0257610100808354040283529160200191610b2d565b820191906000526020600020905b815481529060010190602001808311610b1057829003601f168201915b5050505050905090565b6000610b4282611e38565b610b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7890613dc8565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bc7826110e7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2e90613e5a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c56611e46565b73ffffffffffffffffffffffffffffffffffffffff161480610c855750610c8481610c7f611e46565b611c2c565b5b610cc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbb90613eec565b60405180910390fd5b610ccf838383611e4e565b505050565b6000600154905090565b600e6020528060005260406000206000915054906101000a900460ff1681565b610d09838383611f00565b505050565b6000610d1983611188565b8210610d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5190613f7e565b60405180910390fd5b6000610d64610cd4565b905060008060005b83811015610ec8576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610e5e57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610eb457868403610ea5578195505050505050610f04565b8380610eb090613fcd565b9450505b508080610ec090613fcd565b915050610d6c565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efb90614087565b60405180910390fd5b92915050565b600a60009054906101000a900460ff1681565b610f25611e46565b73ffffffffffffffffffffffffffffffffffffffff16610f436113a6565b73ffffffffffffffffffffffffffffffffffffffff1614610f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f90906140f3565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610fdf573d6000803e3d6000fd5b50565b610ffd83838360405180602001604052806000815250611a8e565b505050565b600061100c610cd4565b821061104d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104490614185565b60405180910390fd5b819050919050565b61105d611e46565b73ffffffffffffffffffffffffffffffffffffffff1661107b6113a6565b73ffffffffffffffffffffffffffffffffffffffff16146110d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c8906140f3565b60405180910390fd5b8181600d91826110e292919061435c565b505050565b60006110f2826124b7565b600001519050919050565b6000806000905060011515600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611165576001905061117f565b60001515611172846116e0565b15150361117e57600290505b5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ef9061449e565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611278611e46565b73ffffffffffffffffffffffffffffffffffffffff166112966113a6565b73ffffffffffffffffffffffffffffffffffffffff16146112ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e3906140f3565b60405180910390fd5b6112f660006126ba565b565b6060600061130583611188565b905060008167ffffffffffffffff81111561132357611322613369565b5b6040519080825280602002602001820160405280156113515781602001602082028036833780820191505090505b50905060005b8281101561139b576113698582610d0e565b82828151811061137c5761137b6144be565b5b602002602001018181525050808061139390613fcd565b915050611357565b508092505050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113d761324a565b6113e0826124b7565b9050919050565b6060600380546113f690613d25565b80601f016020809104026020016040519081016040528092919081815260200182805461142290613d25565b801561146f5780601f106114445761010080835404028352916020019161146f565b820191906000526020600020905b81548152906001019060200180831161145257829003601f168201915b5050505050905090565b611481611e46565b73ffffffffffffffffffffffffffffffffffffffff1661149f6113a6565b73ffffffffffffffffffffffffffffffffffffffff16146114f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ec906140f3565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b611529611e46565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158d90614539565b60405180910390fd5b80600760006115a3611e46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611650611e46565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116959190613338565b60405180910390a35050565b600f81815481106116b157600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000905060005b600f805490508110156117d6576000600f828154811061170d5761170c6144be565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b815260040161177091906136c2565b602060405180830381865afa15801561178d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b1919061456e565b116117bc57816117c2565b60019150815b5080806117ce90613fcd565b9150506116ea565b5080915050919050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461184e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611845906145e7565b60405180910390fd5b6000339050600a60009054906101000a900460ff166118a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189990614653565b60405180910390fd5b6118ae828260016109f9565b6118ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e4906146bf565b60405180910390fd5b60001515600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611980576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119779061472b565b60405180910390fd5b6001151561198d826116e0565b1515146119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c690614797565b60405180910390fd5b600c5460016119dc610cd4565b6119e691906147b7565b1115611a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1e90614837565b60405180910390fd5b611a3281600161277e565b6001600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611a99848484611f00565b611aa58484848461279c565b611ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adb906148c9565b60405180910390fd5b50505050565b6060611af582611e38565b611b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2b9061495b565b60405180910390fd5b6000611b3f83612923565b90506000815111611b5f5760405180602001604052806000815250611b80565b80604051602001611b709190614a03565b6040516020818303038152906040525b915050919050565b600c5481565b60085481565b611b9c611e46565b73ffffffffffffffffffffffffffffffffffffffff16611bba6113a6565b73ffffffffffffffffffffffffffffffffffffffff1614611c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c07906140f3565b60405180910390fd5b80600b8190555050565b6000611c25826129ca565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611cc8611e46565b73ffffffffffffffffffffffffffffffffffffffff16611ce66113a6565b73ffffffffffffffffffffffffffffffffffffffff1614611d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d33906140f3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611dab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da290614a97565b60405180910390fd5b611db4816126ba565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600082611e2e8584612ab2565b1490509392505050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611f0b826124b7565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611f32611e46565b73ffffffffffffffffffffffffffffffffffffffff161480611f8e5750611f57611e46565b73ffffffffffffffffffffffffffffffffffffffff16611f7684610b37565b73ffffffffffffffffffffffffffffffffffffffff16145b80611faa5750611fa98260000151611fa4611e46565b611c2c565b5b905080611fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe390614b29565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461205e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205590614bbb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036120cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c490614c4d565b60405180910390fd5b6120da8585856001612b08565b6120ea6000848460000151611e4e565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166121589190614c89565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166121fc9190614ccd565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461230291906147b7565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036124475761237781611e38565b15612446576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124af8686866001612b0e565b505050505050565b6124bf61324a565b6124c882611e38565b612507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fe90614d83565b60405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000000831061256b5760017f00000000000000000000000000000000000000000000000000000000000000008461255e9190614da3565b61256891906147b7565b90505b60008390505b818110612679576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612665578093505050506126b5565b50808061267190614dd7565b915050612571565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ac90614e72565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612798828260405180602001604052806000815250612b14565b5050565b60006127bd8473ffffffffffffffffffffffffffffffffffffffff16612ff3565b15612916578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127e6611e46565b8786866040518563ffffffff1660e01b81526004016128089493929190614ee7565b6020604051808303816000875af192505050801561284457506040513d601f19601f820116820180604052508101906128419190614f48565b60015b6128c6573d8060008114612874576040519150601f19603f3d011682016040523d82523d6000602084013e612879565b606091505b5060008151036128be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b5906148c9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061291b565b600190505b949350505050565b606061292e82611e38565b61296d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129649061495b565b60405180910390fd5b6000612977613016565b9050600081511161299757604051806020016040528060008152506129c2565b806129a1846130a8565b6040516020016129b2929190614f75565b6040516020818303038152906040525b915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a319061500b565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60008082905060005b8451811015612afd57612ae882868381518110612adb57612ada6144be565b5b6020026020010151613208565b91508080612af590613fcd565b915050612abb565b508091505092915050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b819061509d565b60405180910390fd5b612b9381611e38565b15612bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bca90615109565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115612c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2d9061519b565b60405180910390fd5b612c436000858386612b08565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612d409190614ccd565b6fffffffffffffffffffffffffffffffff168152602001858360200151612d679190614ccd565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612fd657818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612f76600088848861279c565b612fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fac906148c9565b60405180910390fd5b8180612fc090613fcd565b9250508080612fce90613fcd565b915050612f05565b5080600181905550612feb6000878588612b0e565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6060600d805461302590613d25565b80601f016020809104026020016040519081016040528092919081815260200182805461305190613d25565b801561309e5780601f106130735761010080835404028352916020019161309e565b820191906000526020600020905b81548152906001019060200180831161308157829003601f168201915b5050505050905090565b6060600082036130ef576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613203565b600082905060005b6000821461312157808061310a90613fcd565b915050600a8261311a91906151ea565b91506130f7565b60008167ffffffffffffffff81111561313d5761313c613369565b5b6040519080825280601f01601f19166020018201604052801561316f5781602001600182028036833780820191505090505b5090505b600085146131fc576001826131889190614da3565b9150600a85613197919061521b565b60306131a391906147b7565b60f81b8183815181106131b9576131b86144be565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131f591906151ea565b9450613173565b8093505050505b919050565b60008183106132205761321b8284613233565b61322b565b61322a8383613233565b5b905092915050565b600082600052816020526040600020905092915050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6132cd81613298565b81146132d857600080fd5b50565b6000813590506132ea816132c4565b92915050565b6000602082840312156133065761330561328e565b5b6000613314848285016132db565b91505092915050565b60008115159050919050565b6133328161331d565b82525050565b600060208201905061334d6000830184613329565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6133a182613358565b810181811067ffffffffffffffff821117156133c0576133bf613369565b5b80604052505050565b60006133d3613284565b90506133df8282613398565b919050565b600067ffffffffffffffff8211156133ff576133fe613369565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b61342881613415565b811461343357600080fd5b50565b6000813590506134458161341f565b92915050565b600061345e613459846133e4565b6133c9565b9050808382526020820190506020840283018581111561348157613480613410565b5b835b818110156134aa57806134968882613436565b845260208401935050602081019050613483565b5050509392505050565b600082601f8301126134c9576134c8613353565b5b81356134d984826020860161344b565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061350d826134e2565b9050919050565b61351d81613502565b811461352857600080fd5b50565b60008135905061353a81613514565b92915050565b6000819050919050565b61355381613540565b811461355e57600080fd5b50565b6000813590506135708161354a565b92915050565b60008060006060848603121561358f5761358e61328e565b5b600084013567ffffffffffffffff8111156135ad576135ac613293565b5b6135b9868287016134b4565b93505060206135ca8682870161352b565b92505060406135db86828701613561565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60005b8381101561361f578082015181840152602081019050613604565b60008484015250505050565b6000613636826135e5565b61364081856135f0565b9350613650818560208601613601565b61365981613358565b840191505092915050565b6000602082019050818103600083015261367e818461362b565b905092915050565b60006020828403121561369c5761369b61328e565b5b60006136aa84828501613561565b91505092915050565b6136bc81613502565b82525050565b60006020820190506136d760008301846136b3565b92915050565b600080604083850312156136f4576136f361328e565b5b60006137028582860161352b565b925050602061371385828601613561565b9150509250929050565b61372681613540565b82525050565b6000602082019050613741600083018461371d565b92915050565b60006020828403121561375d5761375c61328e565b5b600061376b8482850161352b565b91505092915050565b60008060006060848603121561378d5761378c61328e565b5b600061379b8682870161352b565b93505060206137ac8682870161352b565b92505060406137bd86828701613561565b9150509250925092565b600080fd5b60008083601f8401126137e2576137e1613353565b5b8235905067ffffffffffffffff8111156137ff576137fe6137c7565b5b60208301915083600182028301111561381b5761381a613410565b5b9250929050565b600080602083850312156138395761383861328e565b5b600083013567ffffffffffffffff81111561385757613856613293565b5b613863858286016137cc565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6138a481613540565b82525050565b60006138b6838361389b565b60208301905092915050565b6000602082019050919050565b60006138da8261386f565b6138e4818561387a565b93506138ef8361388b565b8060005b8381101561392057815161390788826138aa565b9750613912836138c2565b9250506001810190506138f3565b5085935050505092915050565b6000602082019050818103600083015261394781846138cf565b905092915050565b61395881613502565b82525050565b600067ffffffffffffffff82169050919050565b61397b8161395e565b82525050565b604082016000820151613997600085018261394f565b5060208201516139aa6020850182613972565b50505050565b60006040820190506139c56000830184613981565b92915050565b6139d48161331d565b81146139df57600080fd5b50565b6000813590506139f1816139cb565b92915050565b60008060408385031215613a0e57613a0d61328e565b5b6000613a1c8582860161352b565b9250506020613a2d858286016139e2565b9150509250929050565b600060208284031215613a4d57613a4c61328e565b5b600082013567ffffffffffffffff811115613a6b57613a6a613293565b5b613a77848285016134b4565b91505092915050565b600080fd5b600067ffffffffffffffff821115613aa057613a9f613369565b5b613aa982613358565b9050602081019050919050565b82818337600083830152505050565b6000613ad8613ad384613a85565b6133c9565b905082815260208101848484011115613af457613af3613a80565b5b613aff848285613ab6565b509392505050565b600082601f830112613b1c57613b1b613353565b5b8135613b2c848260208601613ac5565b91505092915050565b60008060008060808587031215613b4f57613b4e61328e565b5b6000613b5d8782880161352b565b9450506020613b6e8782880161352b565b9350506040613b7f87828801613561565b925050606085013567ffffffffffffffff811115613ba057613b9f613293565b5b613bac87828801613b07565b91505092959194509250565b600060208284031215613bce57613bcd61328e565b5b6000613bdc84828501613436565b91505092915050565b60008060408385031215613bfc57613bfb61328e565b5b6000613c0a8582860161352b565b9250506020613c1b8582860161352b565b9150509250929050565b6000604082019050613c3a60008301856136b3565b613c47602083018461371d565b9392505050565b6000819050919050565b613c69613c6482613415565b613c4e565b82525050565b6000613c7b8284613c58565b60208201915081905092915050565b7f494e56414c49442050524f4f4600000000000000000000000000000000000000600082015250565b6000613cc0600d836135f0565b9150613ccb82613c8a565b602082019050919050565b60006020820190508181036000830152613cef81613cb3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d3d57607f821691505b602082108103613d5057613d4f613cf6565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b6000613db2602d836135f0565b9150613dbd82613d56565b604082019050919050565b60006020820190508181036000830152613de181613da5565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e446022836135f0565b9150613e4f82613de8565b604082019050919050565b60006020820190508181036000830152613e7381613e37565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b6000613ed66039836135f0565b9150613ee182613e7a565b604082019050919050565b60006020820190508181036000830152613f0581613ec9565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f686022836135f0565b9150613f7382613f0c565b604082019050919050565b60006020820190508181036000830152613f9781613f5b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613fd882613540565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361400a57614009613f9e565b5b600182019050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b6000614071602e836135f0565b915061407c82614015565b604082019050919050565b600060208201905081810360008301526140a081614064565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006140dd6020836135f0565b91506140e8826140a7565b602082019050919050565b6000602082019050818103600083015261410c816140d0565b9050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b600061416f6023836135f0565b915061417a82614113565b604082019050919050565b6000602082019050818103600083015261419e81614162565b9050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026142127fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826141d5565b61421c86836141d5565b95508019841693508086168417925050509392505050565b6000819050919050565b600061425961425461424f84613540565b614234565b613540565b9050919050565b6000819050919050565b6142738361423e565b61428761427f82614260565b8484546141e2565b825550505050565b600090565b61429c61428f565b6142a781848461426a565b505050565b5b818110156142cb576142c0600082614294565b6001810190506142ad565b5050565b601f821115614310576142e1816141b0565b6142ea846141c5565b810160208510156142f9578190505b61430d614305856141c5565b8301826142ac565b50505b505050565b600082821c905092915050565b600061433360001984600802614315565b1980831691505092915050565b600061434c8383614322565b9150826002028217905092915050565b61436683836141a5565b67ffffffffffffffff81111561437f5761437e613369565b5b6143898254613d25565b6143948282856142cf565b6000601f8311600181146143c357600084156143b1578287013590505b6143bb8582614340565b865550614423565b601f1984166143d1866141b0565b60005b828110156143f9578489013582556001820191506020850194506020810190506143d4565b868310156144165784890135614412601f891682614322565b8355505b6001600288020188555050505b50505050505050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000614488602b836135f0565b91506144938261442c565b604082019050919050565b600060208201905081810360008301526144b78161447b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b6000614523601a836135f0565b915061452e826144ed565b602082019050919050565b6000602082019050818103600083015261455281614516565b9050919050565b6000815190506145688161354a565b92915050565b6000602082840312156145845761458361328e565b5b600061459284828501614559565b91505092915050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b60006145d1601e836135f0565b91506145dc8261459b565b602082019050919050565b60006020820190508181036000830152614600816145c4565b9050919050565b7f53414c455f4841535f4e4f545f535441525445445f5945540000000000000000600082015250565b600061463d6018836135f0565b915061464882614607565b602082019050919050565b6000602082019050818103600083015261466c81614630565b9050919050565b7f4e4f545f494e5f5448455f57484954455f4c4953540000000000000000000000600082015250565b60006146a96015836135f0565b91506146b482614673565b602082019050919050565b600060208201905081810360008301526146d88161469c565b9050919050565b7f414c52454144595f555345440000000000000000000000000000000000000000600082015250565b6000614715600c836135f0565b9150614720826146df565b602082019050919050565b6000602082019050818103600083015261474481614708565b9050919050565b7f4e4f5f52455155495245445f544f4b454e535f4f4e5f42414c414e4345000000600082015250565b6000614781601d836135f0565b915061478c8261474b565b602082019050919050565b600060208201905081810360008301526147b081614774565b9050919050565b60006147c282613540565b91506147cd83613540565b92508282019050808211156147e5576147e4613f9e565b5b92915050565b7f4e4f545f454e4f5547485f535550504c595f544f5f4d494e5400000000000000600082015250565b60006148216019836135f0565b915061482c826147eb565b602082019050919050565b6000602082019050818103600083015261485081614814565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b60006148b36033836135f0565b91506148be82614857565b604082019050919050565b600060208201905081810360008301526148e2816148a6565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614945602f836135f0565b9150614950826148e9565b604082019050919050565b6000602082019050818103600083015261497481614938565b9050919050565b600081905092915050565b6000614991826135e5565b61499b818561497b565b93506149ab818560208601613601565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b60006149ed60058361497b565b91506149f8826149b7565b600582019050919050565b6000614a0f8284614986565b9150614a1a826149e0565b915081905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a816026836135f0565b9150614a8c82614a25565b604082019050919050565b60006020820190508181036000830152614ab081614a74565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000614b136032836135f0565b9150614b1e82614ab7565b604082019050919050565b60006020820190508181036000830152614b4281614b06565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b6000614ba56026836135f0565b9150614bb082614b49565b604082019050919050565b60006020820190508181036000830152614bd481614b98565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c376025836135f0565b9150614c4282614bdb565b604082019050919050565b60006020820190508181036000830152614c6681614c2a565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6000614c9482614c6d565b9150614c9f83614c6d565b925082820390506fffffffffffffffffffffffffffffffff811115614cc757614cc6613f9e565b5b92915050565b6000614cd882614c6d565b9150614ce383614c6d565b925082820190506fffffffffffffffffffffffffffffffff811115614d0b57614d0a613f9e565b5b92915050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b6000614d6d602a836135f0565b9150614d7882614d11565b604082019050919050565b60006020820190508181036000830152614d9c81614d60565b9050919050565b6000614dae82613540565b9150614db983613540565b9250828203905081811115614dd157614dd0613f9e565b5b92915050565b6000614de282613540565b915060008203614df557614df4613f9e565b5b600182039050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b6000614e5c602f836135f0565b9150614e6782614e00565b604082019050919050565b60006020820190508181036000830152614e8b81614e4f565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614eb982614e92565b614ec38185614e9d565b9350614ed3818560208601613601565b614edc81613358565b840191505092915050565b6000608082019050614efc60008301876136b3565b614f0960208301866136b3565b614f16604083018561371d565b8181036060830152614f288184614eae565b905095945050505050565b600081519050614f42816132c4565b92915050565b600060208284031215614f5e57614f5d61328e565b5b6000614f6c84828501614f33565b91505092915050565b6000614f818285614986565b9150614f8d8284614986565b91508190509392505050565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b6000614ff56031836135f0565b915061500082614f99565b604082019050919050565b6000602082019050818103600083015261502481614fe8565b9050919050565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006150876021836135f0565b91506150928261502b565b604082019050919050565b600060208201905081810360008301526150b68161507a565b9050919050565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b60006150f3601d836135f0565b91506150fe826150bd565b602082019050919050565b60006020820190508181036000830152615122816150e6565b9050919050565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b60006151856022836135f0565b915061519082615129565b604082019050919050565b600060208201905081810360008301526151b481615178565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151f582613540565b915061520083613540565b9250826152105761520f6151bb565b5b828204905092915050565b600061522682613540565b915061523183613540565b925082615241576152406151bb565b5b82820690509291505056fea264697066735822122060f8bef84ef39c58c2b032de239c1e9c09070271430f917d270586ea57af0d5664736f6c63430008120033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000653616e7368690000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000653414e534849000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012f00000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102045760003560e01c8063715018a611610118578063b77a147b116100a0578063d7224ba01161006f578063d7224ba0146107b8578063dab5f340146107e3578063dc33e6811461080c578063e985e9c514610849578063f2fde38b1461088657610204565b8063b77a147b1461070b578063b88d4fde14610727578063c87b56dd14610750578063ca69e3231461078d57610204565b806395d89b41116100e757806395d89b4114610626578063a10866ef14610651578063a22cb46514610668578063ac18b53414610691578063afc6c649146106ce57610204565b8063715018a61461056a5780638462151c146105815780638da5cb5b146105be5780639231ab2a146105e957610204565b80632f745c591161019b5780634f6ccce71161016a5780634f6ccce71461044d57806355f804b31461048a5780636352211e146104b35780636dc6cf90146104f057806370a082311461052d57610204565b80632f745c59146103a557806333bc1c5c146103e25780633ccfd60b1461040d57806342842e0e1461042457610204565b8063095ea7b3116101d7578063095ea7b3146102eb57806318160ddd1461031457806321328f9e1461033f57806323b872dd1461037c57610204565b806301ffc9a71461020957806304b38ce01461024657806306fdde0314610283578063081812fc146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b91906132f0565b6108af565b60405161023d9190613338565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190613576565b6109f9565b60405161027a9190613338565b60405180910390f35b34801561028f57600080fd5b50610298610aa5565b6040516102a59190613664565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190613686565b610b37565b6040516102e291906136c2565b60405180910390f35b3480156102f757600080fd5b50610312600480360381019061030d91906136dd565b610bbc565b005b34801561032057600080fd5b50610329610cd4565b604051610336919061372c565b60405180910390f35b34801561034b57600080fd5b5061036660048036038101906103619190613747565b610cde565b6040516103739190613338565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190613774565b610cfe565b005b3480156103b157600080fd5b506103cc60048036038101906103c791906136dd565b610d0e565b6040516103d9919061372c565b60405180910390f35b3480156103ee57600080fd5b506103f7610f0a565b6040516104049190613338565b60405180910390f35b34801561041957600080fd5b50610422610f1d565b005b34801561043057600080fd5b5061044b60048036038101906104469190613774565b610fe2565b005b34801561045957600080fd5b50610474600480360381019061046f9190613686565b611002565b604051610481919061372c565b60405180910390f35b34801561049657600080fd5b506104b160048036038101906104ac9190613822565b611055565b005b3480156104bf57600080fd5b506104da60048036038101906104d59190613686565b6110e7565b6040516104e791906136c2565b60405180910390f35b3480156104fc57600080fd5b5061051760048036038101906105129190613747565b6110fd565b604051610524919061372c565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f9190613747565b611188565b604051610561919061372c565b60405180910390f35b34801561057657600080fd5b5061057f611270565b005b34801561058d57600080fd5b506105a860048036038101906105a39190613747565b6112f8565b6040516105b5919061392d565b60405180910390f35b3480156105ca57600080fd5b506105d36113a6565b6040516105e091906136c2565b60405180910390f35b3480156105f557600080fd5b50610610600480360381019061060b9190613686565b6113cf565b60405161061d91906139b0565b60405180910390f35b34801561063257600080fd5b5061063b6113e7565b6040516106489190613664565b60405180910390f35b34801561065d57600080fd5b50610666611479565b005b34801561067457600080fd5b5061068f600480360381019061068a91906139f7565b611521565b005b34801561069d57600080fd5b506106b860048036038101906106b39190613686565b6116a1565b6040516106c591906136c2565b60405180910390f35b3480156106da57600080fd5b506106f560048036038101906106f09190613747565b6116e0565b6040516107029190613338565b60405180910390f35b61072560048036038101906107209190613a37565b6117e0565b005b34801561073357600080fd5b5061074e60048036038101906107499190613b35565b611a8e565b005b34801561075c57600080fd5b5061077760048036038101906107729190613686565b611aea565b6040516107849190613664565b60405180910390f35b34801561079957600080fd5b506107a2611b88565b6040516107af919061372c565b60405180910390f35b3480156107c457600080fd5b506107cd611b8e565b6040516107da919061372c565b60405180910390f35b3480156107ef57600080fd5b5061080a60048036038101906108059190613bb8565b611b94565b005b34801561081857600080fd5b50610833600480360381019061082e9190613747565b611c1a565b604051610840919061372c565b60405180910390f35b34801561085557600080fd5b50610870600480360381019061086b9190613be5565b611c2c565b60405161087d9190613338565b60405180910390f35b34801561089257600080fd5b506108ad60048036038101906108a89190613747565b611cc0565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061097a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109e257507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109f257506109f182611db7565b5b9050919050565b6000808383604051602001610a0f929190613c25565b60405160208183030381529060405280519060200120604051602001610a359190613c6f565b604051602081830303815290604052805190602001209050610a5a85600b5483611e21565b610a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9090613cd6565b60405180910390fd5b60019150509392505050565b606060028054610ab490613d25565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae090613d25565b8015610b2d5780601f10610b0257610100808354040283529160200191610b2d565b820191906000526020600020905b815481529060010190602001808311610b1057829003601f168201915b5050505050905090565b6000610b4282611e38565b610b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7890613dc8565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bc7826110e7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2e90613e5a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c56611e46565b73ffffffffffffffffffffffffffffffffffffffff161480610c855750610c8481610c7f611e46565b611c2c565b5b610cc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbb90613eec565b60405180910390fd5b610ccf838383611e4e565b505050565b6000600154905090565b600e6020528060005260406000206000915054906101000a900460ff1681565b610d09838383611f00565b505050565b6000610d1983611188565b8210610d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5190613f7e565b60405180910390fd5b6000610d64610cd4565b905060008060005b83811015610ec8576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610e5e57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610eb457868403610ea5578195505050505050610f04565b8380610eb090613fcd565b9450505b508080610ec090613fcd565b915050610d6c565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efb90614087565b60405180910390fd5b92915050565b600a60009054906101000a900460ff1681565b610f25611e46565b73ffffffffffffffffffffffffffffffffffffffff16610f436113a6565b73ffffffffffffffffffffffffffffffffffffffff1614610f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f90906140f3565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610fdf573d6000803e3d6000fd5b50565b610ffd83838360405180602001604052806000815250611a8e565b505050565b600061100c610cd4565b821061104d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104490614185565b60405180910390fd5b819050919050565b61105d611e46565b73ffffffffffffffffffffffffffffffffffffffff1661107b6113a6565b73ffffffffffffffffffffffffffffffffffffffff16146110d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c8906140f3565b60405180910390fd5b8181600d91826110e292919061435c565b505050565b60006110f2826124b7565b600001519050919050565b6000806000905060011515600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611165576001905061117f565b60001515611172846116e0565b15150361117e57600290505b5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ef9061449e565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611278611e46565b73ffffffffffffffffffffffffffffffffffffffff166112966113a6565b73ffffffffffffffffffffffffffffffffffffffff16146112ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e3906140f3565b60405180910390fd5b6112f660006126ba565b565b6060600061130583611188565b905060008167ffffffffffffffff81111561132357611322613369565b5b6040519080825280602002602001820160405280156113515781602001602082028036833780820191505090505b50905060005b8281101561139b576113698582610d0e565b82828151811061137c5761137b6144be565b5b602002602001018181525050808061139390613fcd565b915050611357565b508092505050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113d761324a565b6113e0826124b7565b9050919050565b6060600380546113f690613d25565b80601f016020809104026020016040519081016040528092919081815260200182805461142290613d25565b801561146f5780601f106114445761010080835404028352916020019161146f565b820191906000526020600020905b81548152906001019060200180831161145257829003601f168201915b5050505050905090565b611481611e46565b73ffffffffffffffffffffffffffffffffffffffff1661149f6113a6565b73ffffffffffffffffffffffffffffffffffffffff16146114f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ec906140f3565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b611529611e46565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158d90614539565b60405180910390fd5b80600760006115a3611e46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611650611e46565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116959190613338565b60405180910390a35050565b600f81815481106116b157600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000905060005b600f805490508110156117d6576000600f828154811061170d5761170c6144be565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b815260040161177091906136c2565b602060405180830381865afa15801561178d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b1919061456e565b116117bc57816117c2565b60019150815b5080806117ce90613fcd565b9150506116ea565b5080915050919050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461184e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611845906145e7565b60405180910390fd5b6000339050600a60009054906101000a900460ff166118a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189990614653565b60405180910390fd5b6118ae828260016109f9565b6118ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e4906146bf565b60405180910390fd5b60001515600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611980576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119779061472b565b60405180910390fd5b6001151561198d826116e0565b1515146119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c690614797565b60405180910390fd5b600c5460016119dc610cd4565b6119e691906147b7565b1115611a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1e90614837565b60405180910390fd5b611a3281600161277e565b6001600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611a99848484611f00565b611aa58484848461279c565b611ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adb906148c9565b60405180910390fd5b50505050565b6060611af582611e38565b611b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2b9061495b565b60405180910390fd5b6000611b3f83612923565b90506000815111611b5f5760405180602001604052806000815250611b80565b80604051602001611b709190614a03565b6040516020818303038152906040525b915050919050565b600c5481565b60085481565b611b9c611e46565b73ffffffffffffffffffffffffffffffffffffffff16611bba6113a6565b73ffffffffffffffffffffffffffffffffffffffff1614611c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c07906140f3565b60405180910390fd5b80600b8190555050565b6000611c25826129ca565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611cc8611e46565b73ffffffffffffffffffffffffffffffffffffffff16611ce66113a6565b73ffffffffffffffffffffffffffffffffffffffff1614611d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d33906140f3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611dab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da290614a97565b60405180910390fd5b611db4816126ba565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600082611e2e8584612ab2565b1490509392505050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611f0b826124b7565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611f32611e46565b73ffffffffffffffffffffffffffffffffffffffff161480611f8e5750611f57611e46565b73ffffffffffffffffffffffffffffffffffffffff16611f7684610b37565b73ffffffffffffffffffffffffffffffffffffffff16145b80611faa5750611fa98260000151611fa4611e46565b611c2c565b5b905080611fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe390614b29565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461205e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205590614bbb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036120cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c490614c4d565b60405180910390fd5b6120da8585856001612b08565b6120ea6000848460000151611e4e565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166121589190614c89565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166121fc9190614ccd565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461230291906147b7565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036124475761237781611e38565b15612446576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124af8686866001612b0e565b505050505050565b6124bf61324a565b6124c882611e38565b612507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fe90614d83565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000003e8831061256b5760017f00000000000000000000000000000000000000000000000000000000000003e88461255e9190614da3565b61256891906147b7565b90505b60008390505b818110612679576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612665578093505050506126b5565b50808061267190614dd7565b915050612571565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ac90614e72565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612798828260405180602001604052806000815250612b14565b5050565b60006127bd8473ffffffffffffffffffffffffffffffffffffffff16612ff3565b15612916578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127e6611e46565b8786866040518563ffffffff1660e01b81526004016128089493929190614ee7565b6020604051808303816000875af192505050801561284457506040513d601f19601f820116820180604052508101906128419190614f48565b60015b6128c6573d8060008114612874576040519150601f19603f3d011682016040523d82523d6000602084013e612879565b606091505b5060008151036128be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b5906148c9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061291b565b600190505b949350505050565b606061292e82611e38565b61296d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129649061495b565b60405180910390fd5b6000612977613016565b9050600081511161299757604051806020016040528060008152506129c2565b806129a1846130a8565b6040516020016129b2929190614f75565b6040516020818303038152906040525b915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a319061500b565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60008082905060005b8451811015612afd57612ae882868381518110612adb57612ada6144be565b5b6020026020010151613208565b91508080612af590613fcd565b915050612abb565b508091505092915050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b819061509d565b60405180910390fd5b612b9381611e38565b15612bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bca90615109565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000003e8831115612c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2d9061519b565b60405180910390fd5b612c436000858386612b08565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612d409190614ccd565b6fffffffffffffffffffffffffffffffff168152602001858360200151612d679190614ccd565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612fd657818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612f76600088848861279c565b612fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fac906148c9565b60405180910390fd5b8180612fc090613fcd565b9250508080612fce90613fcd565b915050612f05565b5080600181905550612feb6000878588612b0e565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6060600d805461302590613d25565b80601f016020809104026020016040519081016040528092919081815260200182805461305190613d25565b801561309e5780601f106130735761010080835404028352916020019161309e565b820191906000526020600020905b81548152906001019060200180831161308157829003601f168201915b5050505050905090565b6060600082036130ef576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613203565b600082905060005b6000821461312157808061310a90613fcd565b915050600a8261311a91906151ea565b91506130f7565b60008167ffffffffffffffff81111561313d5761313c613369565b5b6040519080825280601f01601f19166020018201604052801561316f5781602001600182028036833780820191505090505b5090505b600085146131fc576001826131889190614da3565b9150600a85613197919061521b565b60306131a391906147b7565b60f81b8183815181106131b9576131b86144be565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131f591906151ea565b9450613173565b8093505050505b919050565b60008183106132205761321b8284613233565b61322b565b61322a8383613233565b5b905092915050565b600082600052816020526040600020905092915050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6132cd81613298565b81146132d857600080fd5b50565b6000813590506132ea816132c4565b92915050565b6000602082840312156133065761330561328e565b5b6000613314848285016132db565b91505092915050565b60008115159050919050565b6133328161331d565b82525050565b600060208201905061334d6000830184613329565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6133a182613358565b810181811067ffffffffffffffff821117156133c0576133bf613369565b5b80604052505050565b60006133d3613284565b90506133df8282613398565b919050565b600067ffffffffffffffff8211156133ff576133fe613369565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b61342881613415565b811461343357600080fd5b50565b6000813590506134458161341f565b92915050565b600061345e613459846133e4565b6133c9565b9050808382526020820190506020840283018581111561348157613480613410565b5b835b818110156134aa57806134968882613436565b845260208401935050602081019050613483565b5050509392505050565b600082601f8301126134c9576134c8613353565b5b81356134d984826020860161344b565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061350d826134e2565b9050919050565b61351d81613502565b811461352857600080fd5b50565b60008135905061353a81613514565b92915050565b6000819050919050565b61355381613540565b811461355e57600080fd5b50565b6000813590506135708161354a565b92915050565b60008060006060848603121561358f5761358e61328e565b5b600084013567ffffffffffffffff8111156135ad576135ac613293565b5b6135b9868287016134b4565b93505060206135ca8682870161352b565b92505060406135db86828701613561565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60005b8381101561361f578082015181840152602081019050613604565b60008484015250505050565b6000613636826135e5565b61364081856135f0565b9350613650818560208601613601565b61365981613358565b840191505092915050565b6000602082019050818103600083015261367e818461362b565b905092915050565b60006020828403121561369c5761369b61328e565b5b60006136aa84828501613561565b91505092915050565b6136bc81613502565b82525050565b60006020820190506136d760008301846136b3565b92915050565b600080604083850312156136f4576136f361328e565b5b60006137028582860161352b565b925050602061371385828601613561565b9150509250929050565b61372681613540565b82525050565b6000602082019050613741600083018461371d565b92915050565b60006020828403121561375d5761375c61328e565b5b600061376b8482850161352b565b91505092915050565b60008060006060848603121561378d5761378c61328e565b5b600061379b8682870161352b565b93505060206137ac8682870161352b565b92505060406137bd86828701613561565b9150509250925092565b600080fd5b60008083601f8401126137e2576137e1613353565b5b8235905067ffffffffffffffff8111156137ff576137fe6137c7565b5b60208301915083600182028301111561381b5761381a613410565b5b9250929050565b600080602083850312156138395761383861328e565b5b600083013567ffffffffffffffff81111561385757613856613293565b5b613863858286016137cc565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6138a481613540565b82525050565b60006138b6838361389b565b60208301905092915050565b6000602082019050919050565b60006138da8261386f565b6138e4818561387a565b93506138ef8361388b565b8060005b8381101561392057815161390788826138aa565b9750613912836138c2565b9250506001810190506138f3565b5085935050505092915050565b6000602082019050818103600083015261394781846138cf565b905092915050565b61395881613502565b82525050565b600067ffffffffffffffff82169050919050565b61397b8161395e565b82525050565b604082016000820151613997600085018261394f565b5060208201516139aa6020850182613972565b50505050565b60006040820190506139c56000830184613981565b92915050565b6139d48161331d565b81146139df57600080fd5b50565b6000813590506139f1816139cb565b92915050565b60008060408385031215613a0e57613a0d61328e565b5b6000613a1c8582860161352b565b9250506020613a2d858286016139e2565b9150509250929050565b600060208284031215613a4d57613a4c61328e565b5b600082013567ffffffffffffffff811115613a6b57613a6a613293565b5b613a77848285016134b4565b91505092915050565b600080fd5b600067ffffffffffffffff821115613aa057613a9f613369565b5b613aa982613358565b9050602081019050919050565b82818337600083830152505050565b6000613ad8613ad384613a85565b6133c9565b905082815260208101848484011115613af457613af3613a80565b5b613aff848285613ab6565b509392505050565b600082601f830112613b1c57613b1b613353565b5b8135613b2c848260208601613ac5565b91505092915050565b60008060008060808587031215613b4f57613b4e61328e565b5b6000613b5d8782880161352b565b9450506020613b6e8782880161352b565b9350506040613b7f87828801613561565b925050606085013567ffffffffffffffff811115613ba057613b9f613293565b5b613bac87828801613b07565b91505092959194509250565b600060208284031215613bce57613bcd61328e565b5b6000613bdc84828501613436565b91505092915050565b60008060408385031215613bfc57613bfb61328e565b5b6000613c0a8582860161352b565b9250506020613c1b8582860161352b565b9150509250929050565b6000604082019050613c3a60008301856136b3565b613c47602083018461371d565b9392505050565b6000819050919050565b613c69613c6482613415565b613c4e565b82525050565b6000613c7b8284613c58565b60208201915081905092915050565b7f494e56414c49442050524f4f4600000000000000000000000000000000000000600082015250565b6000613cc0600d836135f0565b9150613ccb82613c8a565b602082019050919050565b60006020820190508181036000830152613cef81613cb3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d3d57607f821691505b602082108103613d5057613d4f613cf6565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b6000613db2602d836135f0565b9150613dbd82613d56565b604082019050919050565b60006020820190508181036000830152613de181613da5565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e446022836135f0565b9150613e4f82613de8565b604082019050919050565b60006020820190508181036000830152613e7381613e37565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b6000613ed66039836135f0565b9150613ee182613e7a565b604082019050919050565b60006020820190508181036000830152613f0581613ec9565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f686022836135f0565b9150613f7382613f0c565b604082019050919050565b60006020820190508181036000830152613f9781613f5b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613fd882613540565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361400a57614009613f9e565b5b600182019050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b6000614071602e836135f0565b915061407c82614015565b604082019050919050565b600060208201905081810360008301526140a081614064565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006140dd6020836135f0565b91506140e8826140a7565b602082019050919050565b6000602082019050818103600083015261410c816140d0565b9050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b600061416f6023836135f0565b915061417a82614113565b604082019050919050565b6000602082019050818103600083015261419e81614162565b9050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026142127fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826141d5565b61421c86836141d5565b95508019841693508086168417925050509392505050565b6000819050919050565b600061425961425461424f84613540565b614234565b613540565b9050919050565b6000819050919050565b6142738361423e565b61428761427f82614260565b8484546141e2565b825550505050565b600090565b61429c61428f565b6142a781848461426a565b505050565b5b818110156142cb576142c0600082614294565b6001810190506142ad565b5050565b601f821115614310576142e1816141b0565b6142ea846141c5565b810160208510156142f9578190505b61430d614305856141c5565b8301826142ac565b50505b505050565b600082821c905092915050565b600061433360001984600802614315565b1980831691505092915050565b600061434c8383614322565b9150826002028217905092915050565b61436683836141a5565b67ffffffffffffffff81111561437f5761437e613369565b5b6143898254613d25565b6143948282856142cf565b6000601f8311600181146143c357600084156143b1578287013590505b6143bb8582614340565b865550614423565b601f1984166143d1866141b0565b60005b828110156143f9578489013582556001820191506020850194506020810190506143d4565b868310156144165784890135614412601f891682614322565b8355505b6001600288020188555050505b50505050505050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000614488602b836135f0565b91506144938261442c565b604082019050919050565b600060208201905081810360008301526144b78161447b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b6000614523601a836135f0565b915061452e826144ed565b602082019050919050565b6000602082019050818103600083015261455281614516565b9050919050565b6000815190506145688161354a565b92915050565b6000602082840312156145845761458361328e565b5b600061459284828501614559565b91505092915050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b60006145d1601e836135f0565b91506145dc8261459b565b602082019050919050565b60006020820190508181036000830152614600816145c4565b9050919050565b7f53414c455f4841535f4e4f545f535441525445445f5945540000000000000000600082015250565b600061463d6018836135f0565b915061464882614607565b602082019050919050565b6000602082019050818103600083015261466c81614630565b9050919050565b7f4e4f545f494e5f5448455f57484954455f4c4953540000000000000000000000600082015250565b60006146a96015836135f0565b91506146b482614673565b602082019050919050565b600060208201905081810360008301526146d88161469c565b9050919050565b7f414c52454144595f555345440000000000000000000000000000000000000000600082015250565b6000614715600c836135f0565b9150614720826146df565b602082019050919050565b6000602082019050818103600083015261474481614708565b9050919050565b7f4e4f5f52455155495245445f544f4b454e535f4f4e5f42414c414e4345000000600082015250565b6000614781601d836135f0565b915061478c8261474b565b602082019050919050565b600060208201905081810360008301526147b081614774565b9050919050565b60006147c282613540565b91506147cd83613540565b92508282019050808211156147e5576147e4613f9e565b5b92915050565b7f4e4f545f454e4f5547485f535550504c595f544f5f4d494e5400000000000000600082015250565b60006148216019836135f0565b915061482c826147eb565b602082019050919050565b6000602082019050818103600083015261485081614814565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b60006148b36033836135f0565b91506148be82614857565b604082019050919050565b600060208201905081810360008301526148e2816148a6565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614945602f836135f0565b9150614950826148e9565b604082019050919050565b6000602082019050818103600083015261497481614938565b9050919050565b600081905092915050565b6000614991826135e5565b61499b818561497b565b93506149ab818560208601613601565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b60006149ed60058361497b565b91506149f8826149b7565b600582019050919050565b6000614a0f8284614986565b9150614a1a826149e0565b915081905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a816026836135f0565b9150614a8c82614a25565b604082019050919050565b60006020820190508181036000830152614ab081614a74565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000614b136032836135f0565b9150614b1e82614ab7565b604082019050919050565b60006020820190508181036000830152614b4281614b06565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b6000614ba56026836135f0565b9150614bb082614b49565b604082019050919050565b60006020820190508181036000830152614bd481614b98565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c376025836135f0565b9150614c4282614bdb565b604082019050919050565b60006020820190508181036000830152614c6681614c2a565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6000614c9482614c6d565b9150614c9f83614c6d565b925082820390506fffffffffffffffffffffffffffffffff811115614cc757614cc6613f9e565b5b92915050565b6000614cd882614c6d565b9150614ce383614c6d565b925082820190506fffffffffffffffffffffffffffffffff811115614d0b57614d0a613f9e565b5b92915050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b6000614d6d602a836135f0565b9150614d7882614d11565b604082019050919050565b60006020820190508181036000830152614d9c81614d60565b9050919050565b6000614dae82613540565b9150614db983613540565b9250828203905081811115614dd157614dd0613f9e565b5b92915050565b6000614de282613540565b915060008203614df557614df4613f9e565b5b600182039050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b6000614e5c602f836135f0565b9150614e6782614e00565b604082019050919050565b60006020820190508181036000830152614e8b81614e4f565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614eb982614e92565b614ec38185614e9d565b9350614ed3818560208601613601565b614edc81613358565b840191505092915050565b6000608082019050614efc60008301876136b3565b614f0960208301866136b3565b614f16604083018561371d565b8181036060830152614f288184614eae565b905095945050505050565b600081519050614f42816132c4565b92915050565b600060208284031215614f5e57614f5d61328e565b5b6000614f6c84828501614f33565b91505092915050565b6000614f818285614986565b9150614f8d8284614986565b91508190509392505050565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b6000614ff56031836135f0565b915061500082614f99565b604082019050919050565b6000602082019050818103600083015261502481614fe8565b9050919050565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006150876021836135f0565b91506150928261502b565b604082019050919050565b600060208201905081810360008301526150b68161507a565b9050919050565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b60006150f3601d836135f0565b91506150fe826150bd565b602082019050919050565b60006020820190508181036000830152615122816150e6565b9050919050565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b60006151856022836135f0565b915061519082615129565b604082019050919050565b600060208201905081810360008301526151b481615178565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151f582613540565b915061520083613540565b9250826152105761520f6151bb565b5b828204905092915050565b600061522682613540565b915061523183613540565b925082615241576152406151bb565b5b82820690509291505056fea264697066735822122060f8bef84ef39c58c2b032de239c1e9c09070271430f917d270586ea57af0d5664736f6c63430008120033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000653616e7368690000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000653414e534849000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012f00000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _NAME (string): Sanshi
Arg [1] : _SYMBOL (string): SANSHI
Arg [2] : baseTokenURI (string): /

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [4] : 53616e7368690000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [6] : 53414e5348490000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [8] : 2f00000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

24988:4389:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12039:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27094:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13825:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15034:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14615:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10829:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25187:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15869:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11169:864;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25051:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29265:109;;;;;;;;;;;;;:::i;:::-;;16037:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10935:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29065:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13695:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26555:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12467:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6870:94;;;;;;;;;;;;;:::i;:::-;;25873:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6651:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28193:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13931:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28966:93;;;;;;;;;;;;;:::i;:::-;;15332:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25239:627;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26219:330;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27421:520;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16220:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28366:474;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25115:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19841:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29177:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28074:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15649:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6970:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12039:422;12186:4;12243:25;12228:40;;;:11;:40;;;;:105;;;;12300:33;12285:48;;;:11;:48;;;;12228:105;:172;;;;12365:35;12350:50;;;:11;:50;;;;12228:172;:225;;;;12417:36;12441:11;12417:23;:36::i;:::-;12228:225;12208:245;;12039:422;;;:::o;27094:321::-;27219:4;27236:12;27295:4;27301:6;27284:24;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27274:35;;;;;;27261:49;;;;;;;;:::i;:::-;;;;;;;;;;;;;27251:60;;;;;;27236:75;;27330:37;27349:5;27356:4;;27362;27330:18;:37::i;:::-;27322:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;27403:4;27396:11;;;27094:321;;;;;:::o;13825:100::-;13879:13;13912:5;13905:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13825:100;:::o;15034:292::-;15138:7;15185:16;15193:7;15185;:16::i;:::-;15163:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;15294:15;:24;15310:7;15294:24;;;;;;;;;;;;;;;;;;;;;15287:31;;15034:292;;;:::o;14615:413::-;14688:13;14704:24;14720:7;14704:15;:24::i;:::-;14688:40;;14753:5;14747:11;;:2;:11;;;14739:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;14848:5;14832:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;14857:37;14874:5;14881:12;:10;:12::i;:::-;14857:16;:37::i;:::-;14832:62;14810:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;14992:28;15001:2;15005:7;15014:5;14992:8;:28::i;:::-;14677:351;14615:413;;:::o;10829:100::-;10882:7;10909:12;;10902:19;;10829:100;:::o;25187:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;15869:162::-;15995:28;16005:4;16011:2;16015:7;15995:9;:28::i;:::-;15869:162;;;:::o;11169:864::-;11294:7;11335:16;11345:5;11335:9;:16::i;:::-;11327:5;:24;11319:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11401:22;11426:13;:11;:13::i;:::-;11401:38;;11450:19;11484:25;11538:9;11533:426;11557:14;11553:1;:18;11533:426;;;11593:31;11627:11;:14;11639:1;11627:14;;;;;;;;;;;11593:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11686:1;11660:28;;:9;:14;;;:28;;;11656:103;;11729:9;:14;;;11709:34;;11656:103;11798:5;11777:26;;:17;:26;;;11773:175;;11843:5;11828:11;:20;11824:77;;11880:1;11873:8;;;;;;;;;11824:77;11919:13;;;;;:::i;:::-;;;;11773:175;11578:381;11573:3;;;;;:::i;:::-;;;;11533:426;;;;11969:56;;;;;;;;;;:::i;:::-;;;;;;;;11169:864;;;;;:::o;25051:30::-;;;;;;;;;;;;;:::o;29265:109::-;6795:12;:10;:12::i;:::-;6784:23;;:7;:5;:7::i;:::-;:23;;;6776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29323:10:::1;29315:28;;:51;29344:21;29315:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;29265:109::o:0;16037:177::-;16167:39;16184:4;16190:2;16194:7;16167:39;;;;;;;;;;;;:16;:39::i;:::-;16037:177;;;:::o;10935:228::-;11038:7;11079:13;:11;:13::i;:::-;11071:5;:21;11063:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;11150:5;11143:12;;10935:228;;;:::o;29065:106::-;6795:12;:10;:12::i;:::-;6784:23;;:7;:5;:7::i;:::-;:23;;;6776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29156:7:::1;;29140:13;:23;;;;;;;:::i;:::-;;29065:106:::0;;:::o;13695:124::-;13759:7;13786:20;13798:7;13786:11;:20::i;:::-;:25;;;13779:32;;13695:124;;;:::o;26555:333::-;26612:7;26632:17;26652:1;26632:21;;26691:4;26668:27;;:13;:19;26682:4;26668:19;;;;;;;;;;;;;;;;;;;;;;;;;:27;;;26664:187;;26727:1;26712:16;;26664:187;;;26787:5;26765:27;;:18;26778:4;26765:12;:18::i;:::-;:27;;;26761:79;;26823:1;26808:16;;26761:79;26664:187;26868:12;26861:19;;;26555:333;;;:::o;12467:258::-;12531:7;12590:1;12573:19;;:5;:19;;;12551:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;12689:12;:19;12702:5;12689:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;12681:36;;12674:43;;12467:258;;;:::o;6870:94::-;6795:12;:10;:12::i;:::-;6784:23;;:7;:5;:7::i;:::-;:23;;;6776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6935:21:::1;6953:1;6935:9;:21::i;:::-;6870:94::o:0;25873:340::-;25934:16;25963:15;25981:17;25991:6;25981:9;:17::i;:::-;25963:35;;26009:25;26051:10;26037:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26009:53;;26077:6;26073:107;26093:10;26089:1;:14;26073:107;;;26138:30;26158:6;26166:1;26138:19;:30::i;:::-;26124:8;26133:1;26124:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;26105:3;;;;;:::i;:::-;;;;26073:107;;;;26197:8;26190:15;;;;25873:340;;;:::o;6651:87::-;6697:7;6724:6;;;;;;;;;;;6717:13;;6651:87;:::o;28193:167::-;28286:21;;:::i;:::-;28332:20;28344:7;28332:11;:20::i;:::-;28325:27;;28193:167;;;:::o;13931:104::-;13987:13;14020:7;14013:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13931:104;:::o;28966:93::-;6795:12;:10;:12::i;:::-;6784:23;;:7;:5;:7::i;:::-;:23;;;6776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29041:10:::1;;;;;;;;;;;29040:11;29027:10;;:24;;;;;;;;;;;;;;;;;;28966:93::o:0;15332:311::-;15462:12;:10;:12::i;:::-;15450:24;;:8;:24;;;15442:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;15563:8;15518:18;:32;15537:12;:10;:12::i;:::-;15518:32;;;;;;;;;;;;;;;:42;15551:8;15518:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;15616:8;15587:48;;15602:12;:10;:12::i;:::-;15587:48;;;15626:8;15587:48;;;;;;:::i;:::-;;;;;;;;15332:311;;:::o;25239:627::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26219:330::-;26276:4;26293:11;26307:5;26293:19;;26327:6;26323:195;26343:14;:21;;;;26339:1;:25;26323:195;;;26436:1;26399:14;26414:1;26399:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26392:35;;;26428:4;26392:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;:114;;26491:15;26392:114;;;26467:4;26458:13;;;26392:114;;26366:4;;;;;:::i;:::-;;;;26323:195;;;;26535:6;26528:13;;;26219:330;;;:::o;27421:520::-;28003:10;27990:23;;:9;:23;;;27982:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27500:11:::1;27514:10;27500:24;;27543:10;;;;;;;;;;;27535:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;27601:22;27608:5;27615:3;27620:1;27601:6;:22::i;:::-;27593:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;27690:5;27668:27;;:13;:18;27682:3;27668:18;;;;;;;;;;;;;;;;;;;;;;;;;:27;;;27660:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;27753:4;27731:26;;:17;27744:3;27731:12;:17::i;:::-;:26;;;27723:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27831:8;;27826:1;27810:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:29;;27802:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27880:17;27890:3;27895:1;27880:9;:17::i;:::-;27929:4;27908:13;:18;27922:3;27908:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;27489:452;27421:520:::0;:::o;16220:355::-;16379:28;16389:4;16395:2;16399:7;16379:9;:28::i;:::-;16440:48;16463:4;16469:2;16473:7;16482:5;16440:22;:48::i;:::-;16418:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;16220:355;;;;:::o;28366:474::-;28484:13;28537:16;28545:7;28537;:16::i;:::-;28515:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;28639:23;28665;28680:7;28665:14;:23::i;:::-;28639:49;;28745:1;28725:9;28719:23;:27;:113;;;;;;;;;;;;;;;;;28790:9;28773:36;;;;;;;;:::i;:::-;;;;;;;;;;;;;28719:113;28699:133;;;28366:474;;;:::o;25115:30::-;;;;:::o;19841:43::-;;;;:::o;29177:82::-;6795:12;:10;:12::i;:::-;6784:23;;:7;:5;:7::i;:::-;:23;;;6776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29246:5:::1;29239:4;:12;;;;29177:82:::0;:::o;28074:113::-;28132:7;28159:20;28173:5;28159:13;:20::i;:::-;28152:27;;28074:113;;;:::o;15649:214::-;15791:4;15820:18;:25;15839:5;15820:25;;;;;;;;;;;;;;;:35;15846:8;15820:35;;;;;;;;;;;;;;;;;;;;;;;;;15813:42;;15649:214;;;;:::o;6970:229::-;6795:12;:10;:12::i;:::-;6784:23;;:7;:5;:7::i;:::-;:23;;;6776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7093:1:::1;7073:22;;:8;:22;;::::0;7051:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7172:19;7182:8;7172:9;:19::i;:::-;6970:229:::0;:::o;8891:207::-;9021:4;9065:25;9050:40;;;:11;:40;;;;9043:47;;8891:207;;;:::o;22092:156::-;22183:4;22236;22207:25;22220:5;22227:4;22207:12;:25::i;:::-;:33;22200:40;;22092:156;;;;;:::o;16581:111::-;16638:4;16672:12;;16662:7;:22;16655:29;;16581:111;;;:::o;6189:98::-;6242:7;6269:10;6262:17;;6189:98;:::o;19637:196::-;19779:2;19752:15;:24;19768:7;19752:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;19817:7;19813:2;19797:28;;19806:5;19797:28;;;;;;;;;;;;19637:196;;;:::o;18091:1540::-;18206:35;18244:20;18256:7;18244:11;:20::i;:::-;18206:58;;18277:22;18319:13;:18;;;18303:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;18378:12;:10;:12::i;:::-;18354:36;;:20;18366:7;18354:11;:20::i;:::-;:36;;;18303:87;:154;;;;18407:50;18424:13;:18;;;18444:12;:10;:12::i;:::-;18407:16;:50::i;:::-;18303:154;18277:181;;18493:17;18471:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;18645:4;18623:26;;:13;:18;;;:26;;;18601:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;18748:1;18734:16;;:2;:16;;;18726:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;18805:43;18827:4;18833:2;18837:7;18846:1;18805:21;:43::i;:::-;18859:49;18876:1;18880:7;18889:13;:18;;;18859:8;:49::i;:::-;18951:1;18921:12;:18;18934:4;18921:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18991:1;18963:12;:16;18976:2;18963:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19026:43;;;;;;;;19041:2;19026:43;;;;;;19052:15;19026:43;;;;;19003:11;:20;19015:7;19003:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19194:19;19226:1;19216:7;:11;;;;:::i;:::-;19194:33;;19283:1;19242:43;;:11;:24;19254:11;19242:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;19238:288;;19306:20;19314:11;19306:7;:20::i;:::-;19302:213;;;19374:125;;;;;;;;19411:13;:18;;;19374:125;;;;;;19452:13;:28;;;19374:125;;;;;19347:11;:24;19359:11;19347:24;;;;;;;;;;;:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19302:213;19238:288;19562:7;19558:2;19543:27;;19552:4;19543:27;;;;;;;;;;;;19581:42;19602:4;19608:2;19612:7;19621:1;19581:20;:42::i;:::-;18195:1436;;;18091:1540;;;:::o;13007:682::-;13095:21;;:::i;:::-;13142:16;13150:7;13142;:16::i;:::-;13134:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13218:26;13270:12;13259:7;:23;13255:103;;13345:1;13330:12;13320:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;13299:47;;13255:103;13375:12;13390:7;13375:22;;13370:242;13407:18;13399:4;:26;13370:242;;13450:31;13484:11;:17;13496:4;13484:17;;;;;;;;;;;13450:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13546:1;13520:28;;:9;:14;;;:28;;;13516:85;;13576:9;13569:16;;;;;;;13516:85;13435:177;13427:6;;;;;:::i;:::-;;;;13370:242;;;;13624:57;;;;;;;;;;:::i;:::-;;;;;;;;13007:682;;;;:::o;7205:173::-;7261:16;7280:6;;;;;;;;;;;7261:25;;7306:8;7297:6;;:17;;;;;;;;;;;;;;;;;;7361:8;7330:40;;7351:8;7330:40;;;;;;;;;;;;7250:128;7205:173;:::o;16700:104::-;16769:27;16779:2;16783:8;16769:27;;;;;;;;;;;;:9;:27::i;:::-;16700:104;;:::o;20742:985::-;20897:4;20918:15;:2;:13;;;:15::i;:::-;20914:806;;;20987:2;20971:36;;;21030:12;:10;:12::i;:::-;21065:4;21092:7;21122:5;20971:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;20950:715;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21350:1;21333:6;:13;:18;21329:321;;21376:109;;;;;;;;;;:::i;:::-;;;;;;;;21329:321;21600:6;21594:13;21585:6;21581:2;21577:15;21570:38;20950:715;21220:45;;;21210:55;;;:6;:55;;;;21203:62;;;;;20914:806;21704:4;21697:11;;20742:985;;;;;;;:::o;14041:468::-;14159:13;14212:16;14220:7;14212;:16::i;:::-;14190:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;14316:21;14340:10;:8;:10::i;:::-;14316:34;;14405:1;14387:7;14381:21;:25;:120;;;;;;;;;;;;;;;;;14450:7;14459:18;:7;:16;:18::i;:::-;14433:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;14381:120;14361:140;;;14041:468;;;:::o;12733:266::-;12794:7;12853:1;12836:19;;:5;:19;;;12814:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;12958:12;:19;12971:5;12958:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;12950:41;;12943:48;;12733:266;;;:::o;22434:296::-;22517:7;22537:20;22560:4;22537:27;;22580:9;22575:118;22599:5;:12;22595:1;:16;22575:118;;;22648:33;22658:12;22672:5;22678:1;22672:8;;;;;;;;:::i;:::-;;;;;;;;22648:9;:33::i;:::-;22633:48;;22613:3;;;;;:::i;:::-;;;;22575:118;;;;22710:12;22703:19;;;22434:296;;;;:::o;21733:159::-;;;;;:::o;21898:158::-;;;;;:::o;16810:1275::-;16933:20;16956:12;;16933:35;;17001:1;16987:16;;:2;:16;;;16979:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;17061:21;17069:12;17061:7;:21::i;:::-;17060:22;17052:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;17147:12;17135:8;:24;;17127:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;17211:61;17241:1;17245:2;17249:12;17263:8;17211:21;:61::i;:::-;17285:30;17318:12;:16;17331:2;17318:16;;;;;;;;;;;;;;;17285:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17364:135;;;;;;;;17420:8;17390:11;:19;;;:39;;;;:::i;:::-;17364:135;;;;;;17479:8;17444:11;:24;;;:44;;;;:::i;:::-;17364:135;;;;;17345:12;:16;17358:2;17345:16;;;;;;;;;;;;;;;:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17538:43;;;;;;;;17553:2;17538:43;;;;;;17564:15;17538:43;;;;;17510:11;:25;17522:12;17510:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17594:20;17617:12;17594:35;;17647:9;17642:325;17666:8;17662:1;:12;17642:325;;;17726:12;17722:2;17701:38;;17718:1;17701:38;;;;;;;;;;;;17780:59;17811:1;17815:2;17819:12;17833:5;17780:22;:59::i;:::-;17754:172;;;;;;;;;;;;:::i;:::-;;;;;;;;;17941:14;;;;;:::i;:::-;;;;17676:3;;;;;:::i;:::-;;;;17642:325;;;;17994:12;17979;:27;;;;18017:60;18046:1;18050:2;18054:12;18068:8;18017:20;:60::i;:::-;16922:1163;;;16810:1275;;;:::o;2272:117::-;2332:4;2380:1;2358:7;:19;;;:23;2351:30;;2272:117;;;:::o;28846:114::-;28906:13;28939;28932:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28846:114;:::o;7473:533::-;7529:13;7569:1;7560:5;:10;7556:53;;7587:10;;;;;;;;;;;;;;;;;;;;;7556:53;7619:12;7634:5;7619:20;;7650:14;7675:78;7690:1;7682:4;:9;7675:78;;7708:8;;;;;:::i;:::-;;;;7739:2;7731:10;;;;;:::i;:::-;;;7675:78;;;7763:19;7795:6;7785:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7763:39;;7813:154;7829:1;7820:5;:10;7813:154;;7857:1;7847:11;;;;;:::i;:::-;;;7924:2;7916:5;:10;;;;:::i;:::-;7903:2;:24;;;;:::i;:::-;7890:39;;7873:6;7880;7873:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;7953:2;7944:11;;;;;:::i;:::-;;;7813:154;;;7991:6;7977:21;;;;;7473:533;;;;:::o;24459:149::-;24522:7;24553:1;24549;:5;:51;;24580:20;24595:1;24598;24580:14;:20::i;:::-;24549:51;;;24557:20;24572:1;24575;24557:14;:20::i;:::-;24549:51;24542:58;;24459:149;;;;:::o;24614:268::-;24682:13;24789:1;24783:4;24776:15;24818:1;24812:4;24805:15;24859:4;24853;24843:21;24834:30;;24614:268;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:117::-;1627:1;1624;1617:12;1641:102;1682:6;1733:2;1729:7;1724:2;1717:5;1713:14;1709:28;1699:38;;1641:102;;;:::o;1749:180::-;1797:77;1794:1;1787:88;1894:4;1891:1;1884:15;1918:4;1915:1;1908:15;1935:281;2018:27;2040:4;2018:27;:::i;:::-;2010:6;2006:40;2148:6;2136:10;2133:22;2112:18;2100:10;2097:34;2094:62;2091:88;;;2159:18;;:::i;:::-;2091:88;2199:10;2195:2;2188:22;1978:238;1935:281;;:::o;2222:129::-;2256:6;2283:20;;:::i;:::-;2273:30;;2312:33;2340:4;2332:6;2312:33;:::i;:::-;2222:129;;;:::o;2357:311::-;2434:4;2524:18;2516:6;2513:30;2510:56;;;2546:18;;:::i;:::-;2510:56;2596:4;2588:6;2584:17;2576:25;;2656:4;2650;2646:15;2638:23;;2357:311;;;:::o;2674:117::-;2783:1;2780;2773:12;2797:77;2834:7;2863:5;2852:16;;2797:77;;;:::o;2880:122::-;2953:24;2971:5;2953:24;:::i;:::-;2946:5;2943:35;2933:63;;2992:1;2989;2982:12;2933:63;2880:122;:::o;3008:139::-;3054:5;3092:6;3079:20;3070:29;;3108:33;3135:5;3108:33;:::i;:::-;3008:139;;;;:::o;3170:710::-;3266:5;3291:81;3307:64;3364:6;3307:64;:::i;:::-;3291:81;:::i;:::-;3282:90;;3392:5;3421:6;3414:5;3407:21;3455:4;3448:5;3444:16;3437:23;;3508:4;3500:6;3496:17;3488:6;3484:30;3537:3;3529:6;3526:15;3523:122;;;3556:79;;:::i;:::-;3523:122;3671:6;3654:220;3688:6;3683:3;3680:15;3654:220;;;3763:3;3792:37;3825:3;3813:10;3792:37;:::i;:::-;3787:3;3780:50;3859:4;3854:3;3850:14;3843:21;;3730:144;3714:4;3709:3;3705:14;3698:21;;3654:220;;;3658:21;3272:608;;3170:710;;;;;:::o;3903:370::-;3974:5;4023:3;4016:4;4008:6;4004:17;4000:27;3990:122;;4031:79;;:::i;:::-;3990:122;4148:6;4135:20;4173:94;4263:3;4255:6;4248:4;4240:6;4236:17;4173:94;:::i;:::-;4164:103;;3980:293;3903:370;;;;:::o;4279:126::-;4316:7;4356:42;4349:5;4345:54;4334:65;;4279:126;;;:::o;4411:96::-;4448:7;4477:24;4495:5;4477:24;:::i;:::-;4466:35;;4411:96;;;:::o;4513:122::-;4586:24;4604:5;4586:24;:::i;:::-;4579:5;4576:35;4566:63;;4625:1;4622;4615:12;4566:63;4513:122;:::o;4641:139::-;4687:5;4725:6;4712:20;4703:29;;4741:33;4768:5;4741:33;:::i;:::-;4641:139;;;;:::o;4786:77::-;4823:7;4852:5;4841:16;;4786:77;;;:::o;4869:122::-;4942:24;4960:5;4942:24;:::i;:::-;4935:5;4932:35;4922:63;;4981:1;4978;4971:12;4922:63;4869:122;:::o;4997:139::-;5043:5;5081:6;5068:20;5059:29;;5097:33;5124:5;5097:33;:::i;:::-;4997:139;;;;:::o;5142:829::-;5244:6;5252;5260;5309:2;5297:9;5288:7;5284:23;5280:32;5277:119;;;5315:79;;:::i;:::-;5277:119;5463:1;5452:9;5448:17;5435:31;5493:18;5485:6;5482:30;5479:117;;;5515:79;;:::i;:::-;5479:117;5620:78;5690:7;5681:6;5670:9;5666:22;5620:78;:::i;:::-;5610:88;;5406:302;5747:2;5773:53;5818:7;5809:6;5798:9;5794:22;5773:53;:::i;:::-;5763:63;;5718:118;5875:2;5901:53;5946:7;5937:6;5926:9;5922:22;5901:53;:::i;:::-;5891:63;;5846:118;5142:829;;;;;:::o;5977:99::-;6029:6;6063:5;6057:12;6047:22;;5977:99;;;:::o;6082:169::-;6166:11;6200:6;6195:3;6188:19;6240:4;6235:3;6231:14;6216:29;;6082:169;;;;:::o;6257:246::-;6338:1;6348:113;6362:6;6359:1;6356:13;6348:113;;;6447:1;6442:3;6438:11;6432:18;6428:1;6423:3;6419:11;6412:39;6384:2;6381:1;6377:10;6372:15;;6348:113;;;6495:1;6486:6;6481:3;6477:16;6470:27;6319:184;6257:246;;;:::o;6509:377::-;6597:3;6625:39;6658:5;6625:39;:::i;:::-;6680:71;6744:6;6739:3;6680:71;:::i;:::-;6673:78;;6760:65;6818:6;6813:3;6806:4;6799:5;6795:16;6760:65;:::i;:::-;6850:29;6872:6;6850:29;:::i;:::-;6845:3;6841:39;6834:46;;6601:285;6509:377;;;;:::o;6892:313::-;7005:4;7043:2;7032:9;7028:18;7020:26;;7092:9;7086:4;7082:20;7078:1;7067:9;7063:17;7056:47;7120:78;7193:4;7184:6;7120:78;:::i;:::-;7112:86;;6892:313;;;;:::o;7211:329::-;7270:6;7319:2;7307:9;7298:7;7294:23;7290:32;7287:119;;;7325:79;;:::i;:::-;7287:119;7445:1;7470:53;7515:7;7506:6;7495:9;7491:22;7470:53;:::i;:::-;7460:63;;7416:117;7211:329;;;;:::o;7546:118::-;7633:24;7651:5;7633:24;:::i;:::-;7628:3;7621:37;7546:118;;:::o;7670:222::-;7763:4;7801:2;7790:9;7786:18;7778:26;;7814:71;7882:1;7871:9;7867:17;7858:6;7814:71;:::i;:::-;7670:222;;;;:::o;7898:474::-;7966:6;7974;8023:2;8011:9;8002:7;7998:23;7994:32;7991:119;;;8029:79;;:::i;:::-;7991:119;8149:1;8174:53;8219:7;8210:6;8199:9;8195:22;8174:53;:::i;:::-;8164:63;;8120:117;8276:2;8302:53;8347:7;8338:6;8327:9;8323:22;8302:53;:::i;:::-;8292:63;;8247:118;7898:474;;;;;:::o;8378:118::-;8465:24;8483:5;8465:24;:::i;:::-;8460:3;8453:37;8378:118;;:::o;8502:222::-;8595:4;8633:2;8622:9;8618:18;8610:26;;8646:71;8714:1;8703:9;8699:17;8690:6;8646:71;:::i;:::-;8502:222;;;;:::o;8730:329::-;8789:6;8838:2;8826:9;8817:7;8813:23;8809:32;8806:119;;;8844:79;;:::i;:::-;8806:119;8964:1;8989:53;9034:7;9025:6;9014:9;9010:22;8989:53;:::i;:::-;8979:63;;8935:117;8730:329;;;;:::o;9065:619::-;9142:6;9150;9158;9207:2;9195:9;9186:7;9182:23;9178:32;9175:119;;;9213:79;;:::i;:::-;9175:119;9333:1;9358:53;9403:7;9394:6;9383:9;9379:22;9358:53;:::i;:::-;9348:63;;9304:117;9460:2;9486:53;9531:7;9522:6;9511:9;9507:22;9486:53;:::i;:::-;9476:63;;9431:118;9588:2;9614:53;9659:7;9650:6;9639:9;9635:22;9614:53;:::i;:::-;9604:63;;9559:118;9065:619;;;;;:::o;9690:117::-;9799:1;9796;9789:12;9827:553;9885:8;9895:6;9945:3;9938:4;9930:6;9926:17;9922:27;9912:122;;9953:79;;:::i;:::-;9912:122;10066:6;10053:20;10043:30;;10096:18;10088:6;10085:30;10082:117;;;10118:79;;:::i;:::-;10082:117;10232:4;10224:6;10220:17;10208:29;;10286:3;10278:4;10270:6;10266:17;10256:8;10252:32;10249:41;10246:128;;;10293:79;;:::i;:::-;10246:128;9827:553;;;;;:::o;10386:529::-;10457:6;10465;10514:2;10502:9;10493:7;10489:23;10485:32;10482:119;;;10520:79;;:::i;:::-;10482:119;10668:1;10657:9;10653:17;10640:31;10698:18;10690:6;10687:30;10684:117;;;10720:79;;:::i;:::-;10684:117;10833:65;10890:7;10881:6;10870:9;10866:22;10833:65;:::i;:::-;10815:83;;;;10611:297;10386:529;;;;;:::o;10921:114::-;10988:6;11022:5;11016:12;11006:22;;10921:114;;;:::o;11041:184::-;11140:11;11174:6;11169:3;11162:19;11214:4;11209:3;11205:14;11190:29;;11041:184;;;;:::o;11231:132::-;11298:4;11321:3;11313:11;;11351:4;11346:3;11342:14;11334:22;;11231:132;;;:::o;11369:108::-;11446:24;11464:5;11446:24;:::i;:::-;11441:3;11434:37;11369:108;;:::o;11483:179::-;11552:10;11573:46;11615:3;11607:6;11573:46;:::i;:::-;11651:4;11646:3;11642:14;11628:28;;11483:179;;;;:::o;11668:113::-;11738:4;11770;11765:3;11761:14;11753:22;;11668:113;;;:::o;11817:732::-;11936:3;11965:54;12013:5;11965:54;:::i;:::-;12035:86;12114:6;12109:3;12035:86;:::i;:::-;12028:93;;12145:56;12195:5;12145:56;:::i;:::-;12224:7;12255:1;12240:284;12265:6;12262:1;12259:13;12240:284;;;12341:6;12335:13;12368:63;12427:3;12412:13;12368:63;:::i;:::-;12361:70;;12454:60;12507:6;12454:60;:::i;:::-;12444:70;;12300:224;12287:1;12284;12280:9;12275:14;;12240:284;;;12244:14;12540:3;12533:10;;11941:608;;;11817:732;;;;:::o;12555:373::-;12698:4;12736:2;12725:9;12721:18;12713:26;;12785:9;12779:4;12775:20;12771:1;12760:9;12756:17;12749:47;12813:108;12916:4;12907:6;12813:108;:::i;:::-;12805:116;;12555:373;;;;:::o;12934:108::-;13011:24;13029:5;13011:24;:::i;:::-;13006:3;12999:37;12934:108;;:::o;13048:101::-;13084:7;13124:18;13117:5;13113:30;13102:41;;13048:101;;;:::o;13155:105::-;13230:23;13247:5;13230:23;:::i;:::-;13225:3;13218:36;13155:105;;:::o;13336:527::-;13495:4;13490:3;13486:14;13582:4;13575:5;13571:16;13565:23;13601:63;13658:4;13653:3;13649:14;13635:12;13601:63;:::i;:::-;13510:164;13766:4;13759:5;13755:16;13749:23;13785:61;13840:4;13835:3;13831:14;13817:12;13785:61;:::i;:::-;13684:172;13464:399;13336:527;;:::o;13869:346::-;14024:4;14062:2;14051:9;14047:18;14039:26;;14075:133;14205:1;14194:9;14190:17;14181:6;14075:133;:::i;:::-;13869:346;;;;:::o;14221:116::-;14291:21;14306:5;14291:21;:::i;:::-;14284:5;14281:32;14271:60;;14327:1;14324;14317:12;14271:60;14221:116;:::o;14343:133::-;14386:5;14424:6;14411:20;14402:29;;14440:30;14464:5;14440:30;:::i;:::-;14343:133;;;;:::o;14482:468::-;14547:6;14555;14604:2;14592:9;14583:7;14579:23;14575:32;14572:119;;;14610:79;;:::i;:::-;14572:119;14730:1;14755:53;14800:7;14791:6;14780:9;14776:22;14755:53;:::i;:::-;14745:63;;14701:117;14857:2;14883:50;14925:7;14916:6;14905:9;14901:22;14883:50;:::i;:::-;14873:60;;14828:115;14482:468;;;;;:::o;14956:539::-;15040:6;15089:2;15077:9;15068:7;15064:23;15060:32;15057:119;;;15095:79;;:::i;:::-;15057:119;15243:1;15232:9;15228:17;15215:31;15273:18;15265:6;15262:30;15259:117;;;15295:79;;:::i;:::-;15259:117;15400:78;15470:7;15461:6;15450:9;15446:22;15400:78;:::i;:::-;15390:88;;15186:302;14956:539;;;;:::o;15501:117::-;15610:1;15607;15600:12;15624:307;15685:4;15775:18;15767:6;15764:30;15761:56;;;15797:18;;:::i;:::-;15761:56;15835:29;15857:6;15835:29;:::i;:::-;15827:37;;15919:4;15913;15909:15;15901:23;;15624:307;;;:::o;15937:146::-;16034:6;16029:3;16024;16011:30;16075:1;16066:6;16061:3;16057:16;16050:27;15937:146;;;:::o;16089:423::-;16166:5;16191:65;16207:48;16248:6;16207:48;:::i;:::-;16191:65;:::i;:::-;16182:74;;16279:6;16272:5;16265:21;16317:4;16310:5;16306:16;16355:3;16346:6;16341:3;16337:16;16334:25;16331:112;;;16362:79;;:::i;:::-;16331:112;16452:54;16499:6;16494:3;16489;16452:54;:::i;:::-;16172:340;16089:423;;;;;:::o;16531:338::-;16586:5;16635:3;16628:4;16620:6;16616:17;16612:27;16602:122;;16643:79;;:::i;:::-;16602:122;16760:6;16747:20;16785:78;16859:3;16851:6;16844:4;16836:6;16832:17;16785:78;:::i;:::-;16776:87;;16592:277;16531:338;;;;:::o;16875:943::-;16970:6;16978;16986;16994;17043:3;17031:9;17022:7;17018:23;17014:33;17011:120;;;17050:79;;:::i;:::-;17011:120;17170:1;17195:53;17240:7;17231:6;17220:9;17216:22;17195:53;:::i;:::-;17185:63;;17141:117;17297:2;17323:53;17368:7;17359:6;17348:9;17344:22;17323:53;:::i;:::-;17313:63;;17268:118;17425:2;17451:53;17496:7;17487:6;17476:9;17472:22;17451:53;:::i;:::-;17441:63;;17396:118;17581:2;17570:9;17566:18;17553:32;17612:18;17604:6;17601:30;17598:117;;;17634:79;;:::i;:::-;17598:117;17739:62;17793:7;17784:6;17773:9;17769:22;17739:62;:::i;:::-;17729:72;;17524:287;16875:943;;;;;;;:::o;17824:329::-;17883:6;17932:2;17920:9;17911:7;17907:23;17903:32;17900:119;;;17938:79;;:::i;:::-;17900:119;18058:1;18083:53;18128:7;18119:6;18108:9;18104:22;18083:53;:::i;:::-;18073:63;;18029:117;17824:329;;;;:::o;18159:474::-;18227:6;18235;18284:2;18272:9;18263:7;18259:23;18255:32;18252:119;;;18290:79;;:::i;:::-;18252:119;18410:1;18435:53;18480:7;18471:6;18460:9;18456:22;18435:53;:::i;:::-;18425:63;;18381:117;18537:2;18563:53;18608:7;18599:6;18588:9;18584:22;18563:53;:::i;:::-;18553:63;;18508:118;18159:474;;;;;:::o;18639:332::-;18760:4;18798:2;18787:9;18783:18;18775:26;;18811:71;18879:1;18868:9;18864:17;18855:6;18811:71;:::i;:::-;18892:72;18960:2;18949:9;18945:18;18936:6;18892:72;:::i;:::-;18639:332;;;;;:::o;18977:79::-;19016:7;19045:5;19034:16;;18977:79;;;:::o;19062:157::-;19167:45;19187:24;19205:5;19187:24;:::i;:::-;19167:45;:::i;:::-;19162:3;19155:58;19062:157;;:::o;19225:256::-;19337:3;19352:75;19423:3;19414:6;19352:75;:::i;:::-;19452:2;19447:3;19443:12;19436:19;;19472:3;19465:10;;19225:256;;;;:::o;19487:163::-;19627:15;19623:1;19615:6;19611:14;19604:39;19487:163;:::o;19656:366::-;19798:3;19819:67;19883:2;19878:3;19819:67;:::i;:::-;19812:74;;19895:93;19984:3;19895:93;:::i;:::-;20013:2;20008:3;20004:12;19997:19;;19656:366;;;:::o;20028:419::-;20194:4;20232:2;20221:9;20217:18;20209:26;;20281:9;20275:4;20271:20;20267:1;20256:9;20252:17;20245:47;20309:131;20435:4;20309:131;:::i;:::-;20301:139;;20028:419;;;:::o;20453:180::-;20501:77;20498:1;20491:88;20598:4;20595:1;20588:15;20622:4;20619:1;20612:15;20639:320;20683:6;20720:1;20714:4;20710:12;20700:22;;20767:1;20761:4;20757:12;20788:18;20778:81;;20844:4;20836:6;20832:17;20822:27;;20778:81;20906:2;20898:6;20895:14;20875:18;20872:38;20869:84;;20925:18;;:::i;:::-;20869:84;20690:269;20639:320;;;:::o;20965:232::-;21105:34;21101:1;21093:6;21089:14;21082:58;21174:15;21169:2;21161:6;21157:15;21150:40;20965:232;:::o;21203:366::-;21345:3;21366:67;21430:2;21425:3;21366:67;:::i;:::-;21359:74;;21442:93;21531:3;21442:93;:::i;:::-;21560:2;21555:3;21551:12;21544:19;;21203:366;;;:::o;21575:419::-;21741:4;21779:2;21768:9;21764:18;21756:26;;21828:9;21822:4;21818:20;21814:1;21803:9;21799:17;21792:47;21856:131;21982:4;21856:131;:::i;:::-;21848:139;;21575:419;;;:::o;22000:221::-;22140:34;22136:1;22128:6;22124:14;22117:58;22209:4;22204:2;22196:6;22192:15;22185:29;22000:221;:::o;22227:366::-;22369:3;22390:67;22454:2;22449:3;22390:67;:::i;:::-;22383:74;;22466:93;22555:3;22466:93;:::i;:::-;22584:2;22579:3;22575:12;22568:19;;22227:366;;;:::o;22599:419::-;22765:4;22803:2;22792:9;22788:18;22780:26;;22852:9;22846:4;22842:20;22838:1;22827:9;22823:17;22816:47;22880:131;23006:4;22880:131;:::i;:::-;22872:139;;22599:419;;;:::o;23024:244::-;23164:34;23160:1;23152:6;23148:14;23141:58;23233:27;23228:2;23220:6;23216:15;23209:52;23024:244;:::o;23274:366::-;23416:3;23437:67;23501:2;23496:3;23437:67;:::i;:::-;23430:74;;23513:93;23602:3;23513:93;:::i;:::-;23631:2;23626:3;23622:12;23615:19;;23274:366;;;:::o;23646:419::-;23812:4;23850:2;23839:9;23835:18;23827:26;;23899:9;23893:4;23889:20;23885:1;23874:9;23870:17;23863:47;23927:131;24053:4;23927:131;:::i;:::-;23919:139;;23646:419;;;:::o;24071:221::-;24211:34;24207:1;24199:6;24195:14;24188:58;24280:4;24275:2;24267:6;24263:15;24256:29;24071:221;:::o;24298:366::-;24440:3;24461:67;24525:2;24520:3;24461:67;:::i;:::-;24454:74;;24537:93;24626:3;24537:93;:::i;:::-;24655:2;24650:3;24646:12;24639:19;;24298:366;;;:::o;24670:419::-;24836:4;24874:2;24863:9;24859:18;24851:26;;24923:9;24917:4;24913:20;24909:1;24898:9;24894:17;24887:47;24951:131;25077:4;24951:131;:::i;:::-;24943:139;;24670:419;;;:::o;25095:180::-;25143:77;25140:1;25133:88;25240:4;25237:1;25230:15;25264:4;25261:1;25254:15;25281:233;25320:3;25343:24;25361:5;25343:24;:::i;:::-;25334:33;;25389:66;25382:5;25379:77;25376:103;;25459:18;;:::i;:::-;25376:103;25506:1;25499:5;25495:13;25488:20;;25281:233;;;:::o;25520:::-;25660:34;25656:1;25648:6;25644:14;25637:58;25729:16;25724:2;25716:6;25712:15;25705:41;25520:233;:::o;25759:366::-;25901:3;25922:67;25986:2;25981:3;25922:67;:::i;:::-;25915:74;;25998:93;26087:3;25998:93;:::i;:::-;26116:2;26111:3;26107:12;26100:19;;25759:366;;;:::o;26131:419::-;26297:4;26335:2;26324:9;26320:18;26312:26;;26384:9;26378:4;26374:20;26370:1;26359:9;26355:17;26348:47;26412:131;26538:4;26412:131;:::i;:::-;26404:139;;26131:419;;;:::o;26556:182::-;26696:34;26692:1;26684:6;26680:14;26673:58;26556:182;:::o;26744:366::-;26886:3;26907:67;26971:2;26966:3;26907:67;:::i;:::-;26900:74;;26983:93;27072:3;26983:93;:::i;:::-;27101:2;27096:3;27092:12;27085:19;;26744:366;;;:::o;27116:419::-;27282:4;27320:2;27309:9;27305:18;27297:26;;27369:9;27363:4;27359:20;27355:1;27344:9;27340:17;27333:47;27397:131;27523:4;27397:131;:::i;:::-;27389:139;;27116:419;;;:::o;27541:222::-;27681:34;27677:1;27669:6;27665:14;27658:58;27750:5;27745:2;27737:6;27733:15;27726:30;27541:222;:::o;27769:366::-;27911:3;27932:67;27996:2;27991:3;27932:67;:::i;:::-;27925:74;;28008:93;28097:3;28008:93;:::i;:::-;28126:2;28121:3;28117:12;28110:19;;27769:366;;;:::o;28141:419::-;28307:4;28345:2;28334:9;28330:18;28322:26;;28394:9;28388:4;28384:20;28380:1;28369:9;28365:17;28358:47;28422:131;28548:4;28422:131;:::i;:::-;28414:139;;28141:419;;;:::o;28566:97::-;28625:6;28653:3;28643:13;;28566:97;;;;:::o;28669:141::-;28718:4;28741:3;28733:11;;28764:3;28761:1;28754:14;28798:4;28795:1;28785:18;28777:26;;28669:141;;;:::o;28816:93::-;28853:6;28900:2;28895;28888:5;28884:14;28880:23;28870:33;;28816:93;;;:::o;28915:107::-;28959:8;29009:5;29003:4;28999:16;28978:37;;28915:107;;;;:::o;29028:393::-;29097:6;29147:1;29135:10;29131:18;29170:97;29200:66;29189:9;29170:97;:::i;:::-;29288:39;29318:8;29307:9;29288:39;:::i;:::-;29276:51;;29360:4;29356:9;29349:5;29345:21;29336:30;;29409:4;29399:8;29395:19;29388:5;29385:30;29375:40;;29104:317;;29028:393;;;;;:::o;29427:60::-;29455:3;29476:5;29469:12;;29427:60;;;:::o;29493:142::-;29543:9;29576:53;29594:34;29603:24;29621:5;29603:24;:::i;:::-;29594:34;:::i;:::-;29576:53;:::i;:::-;29563:66;;29493:142;;;:::o;29641:75::-;29684:3;29705:5;29698:12;;29641:75;;;:::o;29722:269::-;29832:39;29863:7;29832:39;:::i;:::-;29893:91;29942:41;29966:16;29942:41;:::i;:::-;29934:6;29927:4;29921:11;29893:91;:::i;:::-;29887:4;29880:105;29798:193;29722:269;;;:::o;29997:73::-;30042:3;29997:73;:::o;30076:189::-;30153:32;;:::i;:::-;30194:65;30252:6;30244;30238:4;30194:65;:::i;:::-;30129:136;30076:189;;:::o;30271:186::-;30331:120;30348:3;30341:5;30338:14;30331:120;;;30402:39;30439:1;30432:5;30402:39;:::i;:::-;30375:1;30368:5;30364:13;30355:22;;30331:120;;;30271:186;;:::o;30463:543::-;30564:2;30559:3;30556:11;30553:446;;;30598:38;30630:5;30598:38;:::i;:::-;30682:29;30700:10;30682:29;:::i;:::-;30672:8;30668:44;30865:2;30853:10;30850:18;30847:49;;;30886:8;30871:23;;30847:49;30909:80;30965:22;30983:3;30965:22;:::i;:::-;30955:8;30951:37;30938:11;30909:80;:::i;:::-;30568:431;;30553:446;30463:543;;;:::o;31012:117::-;31066:8;31116:5;31110:4;31106:16;31085:37;;31012:117;;;;:::o;31135:169::-;31179:6;31212:51;31260:1;31256:6;31248:5;31245:1;31241:13;31212:51;:::i;:::-;31208:56;31293:4;31287;31283:15;31273:25;;31186:118;31135:169;;;;:::o;31309:295::-;31385:4;31531:29;31556:3;31550:4;31531:29;:::i;:::-;31523:37;;31593:3;31590:1;31586:11;31580:4;31577:21;31569:29;;31309:295;;;;:::o;31609:1403::-;31733:44;31773:3;31768;31733:44;:::i;:::-;31842:18;31834:6;31831:30;31828:56;;;31864:18;;:::i;:::-;31828:56;31908:38;31940:4;31934:11;31908:38;:::i;:::-;31993:67;32053:6;32045;32039:4;31993:67;:::i;:::-;32087:1;32116:2;32108:6;32105:14;32133:1;32128:632;;;;32804:1;32821:6;32818:84;;;32877:9;32872:3;32868:19;32855:33;32846:42;;32818:84;32928:67;32988:6;32981:5;32928:67;:::i;:::-;32922:4;32915:81;32777:229;32098:908;;32128:632;32180:4;32176:9;32168:6;32164:22;32214:37;32246:4;32214:37;:::i;:::-;32273:1;32287:215;32301:7;32298:1;32295:14;32287:215;;;32387:9;32382:3;32378:19;32365:33;32357:6;32350:49;32438:1;32430:6;32426:14;32416:24;;32485:2;32474:9;32470:18;32457:31;;32324:4;32321:1;32317:12;32312:17;;32287:215;;;32530:6;32521:7;32518:19;32515:186;;;32595:9;32590:3;32586:19;32573:33;32638:48;32680:4;32672:6;32668:17;32657:9;32638:48;:::i;:::-;32630:6;32623:64;32538:163;32515:186;32747:1;32743;32735:6;32731:14;32727:22;32721:4;32714:36;32135:625;;;32098:908;;31708:1304;;;31609:1403;;;:::o;33018:230::-;33158:34;33154:1;33146:6;33142:14;33135:58;33227:13;33222:2;33214:6;33210:15;33203:38;33018:230;:::o;33254:366::-;33396:3;33417:67;33481:2;33476:3;33417:67;:::i;:::-;33410:74;;33493:93;33582:3;33493:93;:::i;:::-;33611:2;33606:3;33602:12;33595:19;;33254:366;;;:::o;33626:419::-;33792:4;33830:2;33819:9;33815:18;33807:26;;33879:9;33873:4;33869:20;33865:1;33854:9;33850:17;33843:47;33907:131;34033:4;33907:131;:::i;:::-;33899:139;;33626:419;;;:::o;34051:180::-;34099:77;34096:1;34089:88;34196:4;34193:1;34186:15;34220:4;34217:1;34210:15;34237:176;34377:28;34373:1;34365:6;34361:14;34354:52;34237:176;:::o;34419:366::-;34561:3;34582:67;34646:2;34641:3;34582:67;:::i;:::-;34575:74;;34658:93;34747:3;34658:93;:::i;:::-;34776:2;34771:3;34767:12;34760:19;;34419:366;;;:::o;34791:419::-;34957:4;34995:2;34984:9;34980:18;34972:26;;35044:9;35038:4;35034:20;35030:1;35019:9;35015:17;35008:47;35072:131;35198:4;35072:131;:::i;:::-;35064:139;;34791:419;;;:::o;35216:143::-;35273:5;35304:6;35298:13;35289:22;;35320:33;35347:5;35320:33;:::i;:::-;35216:143;;;;:::o;35365:351::-;35435:6;35484:2;35472:9;35463:7;35459:23;35455:32;35452:119;;;35490:79;;:::i;:::-;35452:119;35610:1;35635:64;35691:7;35682:6;35671:9;35667:22;35635:64;:::i;:::-;35625:74;;35581:128;35365:351;;;;:::o;35722:180::-;35862:32;35858:1;35850:6;35846:14;35839:56;35722:180;:::o;35908:366::-;36050:3;36071:67;36135:2;36130:3;36071:67;:::i;:::-;36064:74;;36147:93;36236:3;36147:93;:::i;:::-;36265:2;36260:3;36256:12;36249:19;;35908:366;;;:::o;36280:419::-;36446:4;36484:2;36473:9;36469:18;36461:26;;36533:9;36527:4;36523:20;36519:1;36508:9;36504:17;36497:47;36561:131;36687:4;36561:131;:::i;:::-;36553:139;;36280:419;;;:::o;36705:174::-;36845:26;36841:1;36833:6;36829:14;36822:50;36705:174;:::o;36885:366::-;37027:3;37048:67;37112:2;37107:3;37048:67;:::i;:::-;37041:74;;37124:93;37213:3;37124:93;:::i;:::-;37242:2;37237:3;37233:12;37226:19;;36885:366;;;:::o;37257:419::-;37423:4;37461:2;37450:9;37446:18;37438:26;;37510:9;37504:4;37500:20;37496:1;37485:9;37481:17;37474:47;37538:131;37664:4;37538:131;:::i;:::-;37530:139;;37257:419;;;:::o;37682:171::-;37822:23;37818:1;37810:6;37806:14;37799:47;37682:171;:::o;37859:366::-;38001:3;38022:67;38086:2;38081:3;38022:67;:::i;:::-;38015:74;;38098:93;38187:3;38098:93;:::i;:::-;38216:2;38211:3;38207:12;38200:19;;37859:366;;;:::o;38231:419::-;38397:4;38435:2;38424:9;38420:18;38412:26;;38484:9;38478:4;38474:20;38470:1;38459:9;38455:17;38448:47;38512:131;38638:4;38512:131;:::i;:::-;38504:139;;38231:419;;;:::o;38656:162::-;38796:14;38792:1;38784:6;38780:14;38773:38;38656:162;:::o;38824:366::-;38966:3;38987:67;39051:2;39046:3;38987:67;:::i;:::-;38980:74;;39063:93;39152:3;39063:93;:::i;:::-;39181:2;39176:3;39172:12;39165:19;;38824:366;;;:::o;39196:419::-;39362:4;39400:2;39389:9;39385:18;39377:26;;39449:9;39443:4;39439:20;39435:1;39424:9;39420:17;39413:47;39477:131;39603:4;39477:131;:::i;:::-;39469:139;;39196:419;;;:::o;39621:179::-;39761:31;39757:1;39749:6;39745:14;39738:55;39621:179;:::o;39806:366::-;39948:3;39969:67;40033:2;40028:3;39969:67;:::i;:::-;39962:74;;40045:93;40134:3;40045:93;:::i;:::-;40163:2;40158:3;40154:12;40147:19;;39806:366;;;:::o;40178:419::-;40344:4;40382:2;40371:9;40367:18;40359:26;;40431:9;40425:4;40421:20;40417:1;40406:9;40402:17;40395:47;40459:131;40585:4;40459:131;:::i;:::-;40451:139;;40178:419;;;:::o;40603:191::-;40643:3;40662:20;40680:1;40662:20;:::i;:::-;40657:25;;40696:20;40714:1;40696:20;:::i;:::-;40691:25;;40739:1;40736;40732:9;40725:16;;40760:3;40757:1;40754:10;40751:36;;;40767:18;;:::i;:::-;40751:36;40603:191;;;;:::o;40800:175::-;40940:27;40936:1;40928:6;40924:14;40917:51;40800:175;:::o;40981:366::-;41123:3;41144:67;41208:2;41203:3;41144:67;:::i;:::-;41137:74;;41220:93;41309:3;41220:93;:::i;:::-;41338:2;41333:3;41329:12;41322:19;;40981:366;;;:::o;41353:419::-;41519:4;41557:2;41546:9;41542:18;41534:26;;41606:9;41600:4;41596:20;41592:1;41581:9;41577:17;41570:47;41634:131;41760:4;41634:131;:::i;:::-;41626:139;;41353:419;;;:::o;41778:238::-;41918:34;41914:1;41906:6;41902:14;41895:58;41987:21;41982:2;41974:6;41970:15;41963:46;41778:238;:::o;42022:366::-;42164:3;42185:67;42249:2;42244:3;42185:67;:::i;:::-;42178:74;;42261:93;42350:3;42261:93;:::i;:::-;42379:2;42374:3;42370:12;42363:19;;42022:366;;;:::o;42394:419::-;42560:4;42598:2;42587:9;42583:18;42575:26;;42647:9;42641:4;42637:20;42633:1;42622:9;42618:17;42611:47;42675:131;42801:4;42675:131;:::i;:::-;42667:139;;42394:419;;;:::o;42819:234::-;42959:34;42955:1;42947:6;42943:14;42936:58;43028:17;43023:2;43015:6;43011:15;43004:42;42819:234;:::o;43059:366::-;43201:3;43222:67;43286:2;43281:3;43222:67;:::i;:::-;43215:74;;43298:93;43387:3;43298:93;:::i;:::-;43416:2;43411:3;43407:12;43400:19;;43059:366;;;:::o;43431:419::-;43597:4;43635:2;43624:9;43620:18;43612:26;;43684:9;43678:4;43674:20;43670:1;43659:9;43655:17;43648:47;43712:131;43838:4;43712:131;:::i;:::-;43704:139;;43431:419;;;:::o;43856:148::-;43958:11;43995:3;43980:18;;43856:148;;;;:::o;44010:390::-;44116:3;44144:39;44177:5;44144:39;:::i;:::-;44199:89;44281:6;44276:3;44199:89;:::i;:::-;44192:96;;44297:65;44355:6;44350:3;44343:4;44336:5;44332:16;44297:65;:::i;:::-;44387:6;44382:3;44378:16;44371:23;;44120:280;44010:390;;;;:::o;44406:155::-;44546:7;44542:1;44534:6;44530:14;44523:31;44406:155;:::o;44567:400::-;44727:3;44748:84;44830:1;44825:3;44748:84;:::i;:::-;44741:91;;44841:93;44930:3;44841:93;:::i;:::-;44959:1;44954:3;44950:11;44943:18;;44567:400;;;:::o;44973:541::-;45206:3;45228:95;45319:3;45310:6;45228:95;:::i;:::-;45221:102;;45340:148;45484:3;45340:148;:::i;:::-;45333:155;;45505:3;45498:10;;44973:541;;;;:::o;45520:225::-;45660:34;45656:1;45648:6;45644:14;45637:58;45729:8;45724:2;45716:6;45712:15;45705:33;45520:225;:::o;45751:366::-;45893:3;45914:67;45978:2;45973:3;45914:67;:::i;:::-;45907:74;;45990:93;46079:3;45990:93;:::i;:::-;46108:2;46103:3;46099:12;46092:19;;45751:366;;;:::o;46123:419::-;46289:4;46327:2;46316:9;46312:18;46304:26;;46376:9;46370:4;46366:20;46362:1;46351:9;46347:17;46340:47;46404:131;46530:4;46404:131;:::i;:::-;46396:139;;46123:419;;;:::o;46548:237::-;46688:34;46684:1;46676:6;46672:14;46665:58;46757:20;46752:2;46744:6;46740:15;46733:45;46548:237;:::o;46791:366::-;46933:3;46954:67;47018:2;47013:3;46954:67;:::i;:::-;46947:74;;47030:93;47119:3;47030:93;:::i;:::-;47148:2;47143:3;47139:12;47132:19;;46791:366;;;:::o;47163:419::-;47329:4;47367:2;47356:9;47352:18;47344:26;;47416:9;47410:4;47406:20;47402:1;47391:9;47387:17;47380:47;47444:131;47570:4;47444:131;:::i;:::-;47436:139;;47163:419;;;:::o;47588:225::-;47728:34;47724:1;47716:6;47712:14;47705:58;47797:8;47792:2;47784:6;47780:15;47773:33;47588:225;:::o;47819:366::-;47961:3;47982:67;48046:2;48041:3;47982:67;:::i;:::-;47975:74;;48058:93;48147:3;48058:93;:::i;:::-;48176:2;48171:3;48167:12;48160:19;;47819:366;;;:::o;48191:419::-;48357:4;48395:2;48384:9;48380:18;48372:26;;48444:9;48438:4;48434:20;48430:1;48419:9;48415:17;48408:47;48472:131;48598:4;48472:131;:::i;:::-;48464:139;;48191:419;;;:::o;48616:224::-;48756:34;48752:1;48744:6;48740:14;48733:58;48825:7;48820:2;48812:6;48808:15;48801:32;48616:224;:::o;48846:366::-;48988:3;49009:67;49073:2;49068:3;49009:67;:::i;:::-;49002:74;;49085:93;49174:3;49085:93;:::i;:::-;49203:2;49198:3;49194:12;49187:19;;48846:366;;;:::o;49218:419::-;49384:4;49422:2;49411:9;49407:18;49399:26;;49471:9;49465:4;49461:20;49457:1;49446:9;49442:17;49435:47;49499:131;49625:4;49499:131;:::i;:::-;49491:139;;49218:419;;;:::o;49643:118::-;49680:7;49720:34;49713:5;49709:46;49698:57;;49643:118;;;:::o;49767:227::-;49807:4;49827:20;49845:1;49827:20;:::i;:::-;49822:25;;49861:20;49879:1;49861:20;:::i;:::-;49856:25;;49905:1;49902;49898:9;49890:17;;49929:34;49923:4;49920:44;49917:70;;;49967:18;;:::i;:::-;49917:70;49767:227;;;;:::o;50000:224::-;50040:3;50059:20;50077:1;50059:20;:::i;:::-;50054:25;;50093:20;50111:1;50093:20;:::i;:::-;50088:25;;50136:1;50133;50129:9;50122:16;;50159:34;50154:3;50151:43;50148:69;;;50197:18;;:::i;:::-;50148:69;50000:224;;;;:::o;50230:229::-;50370:34;50366:1;50358:6;50354:14;50347:58;50439:12;50434:2;50426:6;50422:15;50415:37;50230:229;:::o;50465:366::-;50607:3;50628:67;50692:2;50687:3;50628:67;:::i;:::-;50621:74;;50704:93;50793:3;50704:93;:::i;:::-;50822:2;50817:3;50813:12;50806:19;;50465:366;;;:::o;50837:419::-;51003:4;51041:2;51030:9;51026:18;51018:26;;51090:9;51084:4;51080:20;51076:1;51065:9;51061:17;51054:47;51118:131;51244:4;51118:131;:::i;:::-;51110:139;;50837:419;;;:::o;51262:194::-;51302:4;51322:20;51340:1;51322:20;:::i;:::-;51317:25;;51356:20;51374:1;51356:20;:::i;:::-;51351:25;;51400:1;51397;51393:9;51385:17;;51424:1;51418:4;51415:11;51412:37;;;51429:18;;:::i;:::-;51412:37;51262:194;;;;:::o;51462:171::-;51501:3;51524:24;51542:5;51524:24;:::i;:::-;51515:33;;51570:4;51563:5;51560:15;51557:41;;51578:18;;:::i;:::-;51557:41;51625:1;51618:5;51614:13;51607:20;;51462:171;;;:::o;51639:234::-;51779:34;51775:1;51767:6;51763:14;51756:58;51848:17;51843:2;51835:6;51831:15;51824:42;51639:234;:::o;51879:366::-;52021:3;52042:67;52106:2;52101:3;52042:67;:::i;:::-;52035:74;;52118:93;52207:3;52118:93;:::i;:::-;52236:2;52231:3;52227:12;52220:19;;51879:366;;;:::o;52251:419::-;52417:4;52455:2;52444:9;52440:18;52432:26;;52504:9;52498:4;52494:20;52490:1;52479:9;52475:17;52468:47;52532:131;52658:4;52532:131;:::i;:::-;52524:139;;52251:419;;;:::o;52676:98::-;52727:6;52761:5;52755:12;52745:22;;52676:98;;;:::o;52780:168::-;52863:11;52897:6;52892:3;52885:19;52937:4;52932:3;52928:14;52913:29;;52780:168;;;;:::o;52954:373::-;53040:3;53068:38;53100:5;53068:38;:::i;:::-;53122:70;53185:6;53180:3;53122:70;:::i;:::-;53115:77;;53201:65;53259:6;53254:3;53247:4;53240:5;53236:16;53201:65;:::i;:::-;53291:29;53313:6;53291:29;:::i;:::-;53286:3;53282:39;53275:46;;53044:283;52954:373;;;;:::o;53333:640::-;53528:4;53566:3;53555:9;53551:19;53543:27;;53580:71;53648:1;53637:9;53633:17;53624:6;53580:71;:::i;:::-;53661:72;53729:2;53718:9;53714:18;53705:6;53661:72;:::i;:::-;53743;53811:2;53800:9;53796:18;53787:6;53743:72;:::i;:::-;53862:9;53856:4;53852:20;53847:2;53836:9;53832:18;53825:48;53890:76;53961:4;53952:6;53890:76;:::i;:::-;53882:84;;53333:640;;;;;;;:::o;53979:141::-;54035:5;54066:6;54060:13;54051:22;;54082:32;54108:5;54082:32;:::i;:::-;53979:141;;;;:::o;54126:349::-;54195:6;54244:2;54232:9;54223:7;54219:23;54215:32;54212:119;;;54250:79;;:::i;:::-;54212:119;54370:1;54395:63;54450:7;54441:6;54430:9;54426:22;54395:63;:::i;:::-;54385:73;;54341:127;54126:349;;;;:::o;54481:435::-;54661:3;54683:95;54774:3;54765:6;54683:95;:::i;:::-;54676:102;;54795:95;54886:3;54877:6;54795:95;:::i;:::-;54788:102;;54907:3;54900:10;;54481:435;;;;;:::o;54922:236::-;55062:34;55058:1;55050:6;55046:14;55039:58;55131:19;55126:2;55118:6;55114:15;55107:44;54922:236;:::o;55164:366::-;55306:3;55327:67;55391:2;55386:3;55327:67;:::i;:::-;55320:74;;55403:93;55492:3;55403:93;:::i;:::-;55521:2;55516:3;55512:12;55505:19;;55164:366;;;:::o;55536:419::-;55702:4;55740:2;55729:9;55725:18;55717:26;;55789:9;55783:4;55779:20;55775:1;55764:9;55760:17;55753:47;55817:131;55943:4;55817:131;:::i;:::-;55809:139;;55536:419;;;:::o;55961:220::-;56101:34;56097:1;56089:6;56085:14;56078:58;56170:3;56165:2;56157:6;56153:15;56146:28;55961:220;:::o;56187:366::-;56329:3;56350:67;56414:2;56409:3;56350:67;:::i;:::-;56343:74;;56426:93;56515:3;56426:93;:::i;:::-;56544:2;56539:3;56535:12;56528:19;;56187:366;;;:::o;56559:419::-;56725:4;56763:2;56752:9;56748:18;56740:26;;56812:9;56806:4;56802:20;56798:1;56787:9;56783:17;56776:47;56840:131;56966:4;56840:131;:::i;:::-;56832:139;;56559:419;;;:::o;56984:179::-;57124:31;57120:1;57112:6;57108:14;57101:55;56984:179;:::o;57169:366::-;57311:3;57332:67;57396:2;57391:3;57332:67;:::i;:::-;57325:74;;57408:93;57497:3;57408:93;:::i;:::-;57526:2;57521:3;57517:12;57510:19;;57169:366;;;:::o;57541:419::-;57707:4;57745:2;57734:9;57730:18;57722:26;;57794:9;57788:4;57784:20;57780:1;57769:9;57765:17;57758:47;57822:131;57948:4;57822:131;:::i;:::-;57814:139;;57541:419;;;:::o;57966:221::-;58106:34;58102:1;58094:6;58090:14;58083:58;58175:4;58170:2;58162:6;58158:15;58151:29;57966:221;:::o;58193:366::-;58335:3;58356:67;58420:2;58415:3;58356:67;:::i;:::-;58349:74;;58432:93;58521:3;58432:93;:::i;:::-;58550:2;58545:3;58541:12;58534:19;;58193:366;;;:::o;58565:419::-;58731:4;58769:2;58758:9;58754:18;58746:26;;58818:9;58812:4;58808:20;58804:1;58793:9;58789:17;58782:47;58846:131;58972:4;58846:131;:::i;:::-;58838:139;;58565:419;;;:::o;58990:180::-;59038:77;59035:1;59028:88;59135:4;59132:1;59125:15;59159:4;59156:1;59149:15;59176:185;59216:1;59233:20;59251:1;59233:20;:::i;:::-;59228:25;;59267:20;59285:1;59267:20;:::i;:::-;59262:25;;59306:1;59296:35;;59311:18;;:::i;:::-;59296:35;59353:1;59350;59346:9;59341:14;;59176:185;;;;:::o;59367:176::-;59399:1;59416:20;59434:1;59416:20;:::i;:::-;59411:25;;59450:20;59468:1;59450:20;:::i;:::-;59445:25;;59489:1;59479:35;;59494:18;;:::i;:::-;59479:35;59535:1;59532;59528:9;59523:14;;59367:176;;;;:::o

Swarm Source

ipfs://60f8bef84ef39c58c2b032de239c1e9c09070271430f917d270586ea57af0d56

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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.