ETH Price: $3,431.21 (-7.03%)

Token

AKAMA (AKAMA NFT)
 

Overview

Max Total Supply

220 AKAMA NFT

Holders

75

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
lgb349.eth
Balance
1 AKAMA NFT
0x6C9486f50545AE405ea6b882bdee105A5FB78459
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
AKAMA

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-25
*/

/**
 *Submitted for verification at Etherscan.io on 2022-08-22
*/

/**
 *Submitted for verification at polygonscan.com on 2022-04-12
*/

/**
 *Submitted for verification at polygonscan.com on 2022-04-08
*/

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

library MerkleProof {
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(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++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}
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;
    }
}

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 Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
 
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    constructor() {
        _transferOwnership(_msgSender());
    }
 
    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 {
        _transferOwnership(address(0));
    }
 
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }
 
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
 
library Address { 
    function isContract(address account) internal view returns (bool) { 
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    } 
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

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

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

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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
 
interface IERC721Receiver { 
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}


interface IERC165 { 
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
 
abstract contract ERC165 is IERC165 { 
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
} 
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);
} 
error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerQueryForNonexistentToken();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error URIQueryForNonexistentToken();

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..).
 *
 * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
 *
 * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256).
 */
contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, Ownable {
    using Address for address;
    using Strings for uint256;

    // Compiler will pack this into a single 256bit word.
    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
        // For miscellaneous variable(s) pertaining to the address
        // (e.g. number of whitelist mint slots used).
        // If there are multiple variables, please pack them into a uint64.
        uint64 aux;
    }

    // The tokenId of the next token to be minted.
    uint256 internal _currentIndex;

    // The number of tokens burned.
    uint256 internal _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

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

    /**
     * To change the starting tokenId, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    /**
     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
     */
    function totalSupply() public view returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex - _startTokenId() times
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to _startTokenId()
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        return _addressData[owner].aux;
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        _addressData[owner].aux = aux;
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr && curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    if (ownership.addr != address(0)) {
                        return ownership;
                    }
                    // Invariant:
                    // There will always be an ownership that has an address and is not burned
                    // before an ownership that does not have an address and is not burned.
                    // Hence, curr will not underflow.
                    while (true) {
                        curr--;
                        ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return _ownershipOf(tokenId).addr;
    }

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

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

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

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

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return '';
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) {
            revert ApprovalCallerNotOwnerNorApproved();
        }

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        if (operator == _msgSender()) revert ApproveToCaller();

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, '');
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        _transfer(from, to, tokenId);
        if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned;
    }

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

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity, _data, true);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

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

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (safe && to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex != end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex != end);
            }
            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();

        bool isApprovedOrOwner = (_msgSender() == from ||
            isApprovedForAll(from, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = to;
            currSlot.startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

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

    /**
     * @dev This is equivalent to _burn(tokenId, false)
     */
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        address from = prevOwnership.addr;

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSender() == from ||
                isApprovedForAll(from, _msgSender()) ||
                getApproved(tokenId) == _msgSender());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            AddressData storage addressData = _addressData[from];
            addressData.balance -= 1;
            addressData.numberBurned += 1;

            // Keep track of who burned the token, and the timestamp of burning.
            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = from;
            currSlot.startTimestamp = uint64(block.timestamp);
            currSlot.burned = true;

            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(
        address to,
        uint256 tokenId,
        address owner
    ) private {
        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        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 TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     * And also called before burning one token.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     * And also called after one token has been burned.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been
     * transferred to `to`.
     * - When `from` is zero, `tokenId` has been minted for `to`.
     * - When `to` is zero, `tokenId` has been burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

contract AKAMA is Ownable, ERC721A, ReentrancyGuard {
    using Strings for uint256;

  bytes32 public merkleRoot = 0xc8b93d3752fdcfb16104168fe41443c6524636f764e3b03f286b60c31a14198e;
  function setMerkleRoot(bytes32 m) public onlyOwner{
    merkleRoot = m;
  }



  uint256 public MAX_PER_Transtion = 3; // maximam amount that user can mint
  uint256 public MAX_PER_Address = 3; // maximam amount that user can mint

  uint256 public  PRICE = 0.035 ether;

  uint256 private constant TotalCollectionSize_ = 5555; // total number of nfts

  bool public _revelNFT = false;
  string public _baseTokenURI;
  string private _beforerevealURI;
  uint private stopat = 5555;
  uint private reserve = 0;

  uint public status = 0; //0-pause 1-whitelist 2-public 

  constructor() ERC721A("AKAMA","AKAMA NFT") {
    _beforerevealURI = "https://bafkreidegvtmgmu77bjgh5zyq32ezruqligyiolbclfrxvfg34x3w4x6vq.ipfs.nftstorage.link/";
}


  modifier callerIsUser() {
    require(tx.origin == msg.sender, "The caller is another contract");
    _;
  }
 
  function whitelistMint(uint256 quantity, bytes32[] calldata merkleproof) external payable callerIsUser {
    bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
    require(MerkleProof.verify( merkleproof, merkleRoot, leaf),"Not whitelisted");
    require(status == 1, "Whitelisting not started");
    require(totalSupply() + quantity <= TotalCollectionSize_ - reserve, "reached max supply");
    require( ( numberMinted(msg.sender) + quantity <= MAX_PER_Address ) , "Quantity exceeds allowed Mints" );
    require(  quantity <= MAX_PER_Transtion,"can not mint this many");
    require(msg.value >= PRICE * quantity, "Need to send more ETH.");
    _safeMint(msg.sender, quantity);
    if(totalSupply() >= stopat) {status = 0;} 
  }
  function mint(uint256 quantity) external payable callerIsUser {
    require(status == 2, "Sale is not Active");
    require(totalSupply() + quantity <= TotalCollectionSize_ - reserve, "reached max supply");
    require(numberMinted(msg.sender) + quantity <= MAX_PER_Address, "Quantity exceeds allowed Mints" );
    require(quantity <= MAX_PER_Transtion,"can not mint this many");
    require(msg.value >= PRICE * quantity, "Need to send more ETH.");
    _safeMint(msg.sender, quantity);   
    if(totalSupply() >= stopat) {status = 0;}
  }

   function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
    
    if(_revelNFT == true){
        require(_exists(tokenId),"ERC721Metadata: URI query for nonexistent token");
    string memory baseURI = _baseURI();
    return
      bytes(baseURI).length > 0
        ? string(abi.encodePacked(_baseTokenURI, tokenId.toString(),".json"))
        : "";
    }
    else if(_revelNFT == false){
        require(_exists(tokenId),"ERC721Metadata: URI query for nonexistent token");
    string memory baseURI = _beforerevealURI;
    return
      bytes(baseURI).length > 0
        ? string(abi.encodePacked(_beforerevealURI)): "";
    }
  }





  function setBaseURI(string memory baseURI) external onlyOwner {
    _baseTokenURI = baseURI;
  }
  function _baseURI() internal view virtual override returns (string memory) {
    return _baseTokenURI;
  }
  function numberMinted(address owner) public view returns (uint256) {
    return _numberMinted(owner);
  }
  function getOwnershipData(uint256 tokenId)
    external
    view
    returns (TokenOwnership memory)
  {
    return _ownershipOf(tokenId);
  }
  function withdrawMoney() external onlyOwner nonReentrant {
    (bool success, ) = msg.sender.call{value: address(this).balance}("");
    require(success, "Transfer failed.");
  }
  function changeRevelStatus() external onlyOwner {
    _revelNFT = !_revelNFT;
  }
  function changeMintPrice(uint256 _newPrice) external onlyOwner
  {
      PRICE = _newPrice;
  }
  function changeMAX_PER_Transtion(uint256 q) external onlyOwner
  {
      MAX_PER_Transtion = q;
  }
  function changeMAX_PER_Address(uint256 q) external onlyOwner
  {
      MAX_PER_Address = q;
  }
  function setStatus(uint256 s)external onlyOwner{
      status = s;
  }
  function getStatus()public view returns(uint){
      return status;
  }
  function getPrice()public view returns(uint){
      return PRICE;
  }
  function giveaway(address a, uint q)public onlyOwner{
    _safeMint(a, q);
  }
    function setStop(uint256 s)external onlyOwner{
      stopat = s;
  }
  function setReserve(uint256 r)external onlyOwner{
      reserve = r;
  }
     function configuration(uint256 Status , uint256 MPA , uint256 MPT , uint256 Price, uint256 Stop )external onlyOwner{
      status = Status;
      stopat = Stop;
      PRICE = Price;
      MAX_PER_Address = MPA;
      MAX_PER_Transtion = MPT;
  }
  function _startTokenId() internal view override returns (uint256) {
        return 1;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"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":[],"name":"MAX_PER_Address","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_Transtion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_revelNFT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"q","type":"uint256"}],"name":"changeMAX_PER_Address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"q","type":"uint256"}],"name":"changeMAX_PER_Transtion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"changeMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"changeRevelStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Status","type":"uint256"},{"internalType":"uint256","name":"MPA","type":"uint256"},{"internalType":"uint256","name":"MPT","type":"uint256"},{"internalType":"uint256","name":"Price","type":"uint256"},{"internalType":"uint256","name":"Stop","type":"uint256"}],"name":"configuration","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":"bool","name":"burned","type":"bool"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStatus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"uint256","name":"q","type":"uint256"}],"name":"giveaway","outputs":[],"stateMutability":"nonpayable","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":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"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":"m","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"r","type":"uint256"}],"name":"setReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"s","type":"uint256"}],"name":"setStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"s","type":"uint256"}],"name":"setStop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"status","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"merkleproof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040527fc8b93d3752fdcfb16104168fe41443c6524636f764e3b03f286b60c31a14198e60001b600a556003600b556003600c55667c585087238000600d556000600e60006101000a81548160ff0219169083151502179055506115b3601155600060125560006013553480156200007857600080fd5b506040518060400160405280600581526020017f414b414d410000000000000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f414b414d41204e4654000000000000000000000000000000000000000000000081525062000105620000f96200018f60201b60201c565b6200019760201b60201c565b81600390805190602001906200011d92919062000264565b5080600490805190602001906200013692919062000264565b50620001476200025b60201b60201c565b6001819055505050600160098190555060405180608001604052806059815260200162004cfc60599139601090805190602001906200018892919062000264565b5062000379565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006001905090565b828054620002729062000314565b90600052602060002090601f016020900481019282620002965760008555620002e2565b82601f10620002b157805160ff1916838001178555620002e2565b82800160010185558215620002e2579182015b82811115620002e1578251825591602001919060010190620002c4565b5b509050620002f19190620002f5565b5090565b5b8082111562000310576000816000905550600101620002f6565b5090565b600060028204905060018216806200032d57607f821691505b602082108114156200034457620003436200034a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61497380620003896000396000f3fe6080604052600436106102515760003560e01c80637cb6475911610139578063b88d4fde116100b6578063d04950a11161007a578063d04950a114610867578063d2cab05614610892578063dc33e681146108ae578063e985e9c5146108eb578063f2fde38b14610928578063fb7f05401461095157610251565b8063b88d4fde14610796578063bd0a8439146107bf578063c1f127e2146107d6578063c87b56dd146107ff578063cfc86f7b1461083c57610251565b806398d5fdca116100fd57806398d5fdca146106e6578063a0712d6814610711578063a22cb4651461072d578063ac44600214610756578063af7b26e91461076d57610251565b80637cb64759146105ff5780638d859f3e146106285780638da5cb5b146106535780639231ab2a1461067e57806395d89b41146106bb57610251565b80632f2ffc57116101d257806355f804b31161019657806355f804b3146104f157806362c6f7b91461051a5780636352211e1461054557806369ba1a751461058257806370a08231146105ab578063715018a6146105e857610251565b80632f2ffc57146104205780633fd173661461044b5780634256dbe31461047457806342842e0e1461049d5780634e69d560146104c657610251565b8063095ea7b311610219578063095ea7b31461034d57806318160ddd14610376578063200d2ed2146103a157806323b872dd146103cc5780632eb4a7ab146103f557610251565b80630199e3471461025657806301ffc9a71461027f578063050225ea146102bc57806306fdde03146102e5578063081812fc14610310575b600080fd5b34801561026257600080fd5b5061027d6004803603810190610278919061393e565b61097a565b005b34801561028b57600080fd5b506102a660048036038101906102a1919061389b565b610a00565b6040516102b39190613f14565b60405180910390f35b3480156102c857600080fd5b506102e360048036038101906102de919061382e565b610ae2565b005b3480156102f157600080fd5b506102fa610b6c565b6040516103079190613f4a565b60405180910390f35b34801561031c57600080fd5b506103376004803603810190610332919061393e565b610bfe565b6040516103449190613ead565b60405180910390f35b34801561035957600080fd5b50610374600480360381019061036f919061382e565b610c7a565b005b34801561038257600080fd5b5061038b610d85565b6040516103989190614127565b60405180910390f35b3480156103ad57600080fd5b506103b6610d9c565b6040516103c39190614127565b60405180910390f35b3480156103d857600080fd5b506103f360048036038101906103ee9190613718565b610da2565b005b34801561040157600080fd5b5061040a610db2565b6040516104179190613f2f565b60405180910390f35b34801561042c57600080fd5b50610435610db8565b6040516104429190614127565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d919061393e565b610dbe565b005b34801561048057600080fd5b5061049b6004803603810190610496919061393e565b610e44565b005b3480156104a957600080fd5b506104c460048036038101906104bf9190613718565b610eca565b005b3480156104d257600080fd5b506104db610eea565b6040516104e89190614127565b60405180910390f35b3480156104fd57600080fd5b50610518600480360381019061051391906138f5565b610ef4565b005b34801561052657600080fd5b5061052f610f8a565b60405161053c9190613f14565b60405180910390f35b34801561055157600080fd5b5061056c6004803603810190610567919061393e565b610f9d565b6040516105799190613ead565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a4919061393e565b610fb3565b005b3480156105b757600080fd5b506105d260048036038101906105cd91906136ab565b611039565b6040516105df9190614127565b60405180910390f35b3480156105f457600080fd5b506105fd611109565b005b34801561060b57600080fd5b506106266004803603810190610621919061386e565b611191565b005b34801561063457600080fd5b5061063d611217565b60405161064a9190614127565b60405180910390f35b34801561065f57600080fd5b5061066861121d565b6040516106759190613ead565b60405180910390f35b34801561068a57600080fd5b506106a560048036038101906106a0919061393e565b611246565b6040516106b2919061410c565b60405180910390f35b3480156106c757600080fd5b506106d061125e565b6040516106dd9190613f4a565b60405180910390f35b3480156106f257600080fd5b506106fb6112f0565b6040516107089190614127565b60405180910390f35b61072b6004803603810190610726919061393e565b6112fa565b005b34801561073957600080fd5b50610754600480360381019061074f91906137ee565b611524565b005b34801561076257600080fd5b5061076b61169c565b005b34801561077957600080fd5b50610794600480360381019061078f919061393e565b61181d565b005b3480156107a257600080fd5b506107bd60048036038101906107b8919061376b565b6118a3565b005b3480156107cb57600080fd5b506107d461191f565b005b3480156107e257600080fd5b506107fd60048036038101906107f8919061393e565b6119c7565b005b34801561080b57600080fd5b506108266004803603810190610821919061393e565b611a4d565b6040516108339190613f4a565b60405180910390f35b34801561084857600080fd5b50610851611c52565b60405161085e9190613f4a565b60405180910390f35b34801561087357600080fd5b5061087c611ce0565b6040516108899190614127565b60405180910390f35b6108ac60048036038101906108a7919061396b565b611ce6565b005b3480156108ba57600080fd5b506108d560048036038101906108d091906136ab565b611fcb565b6040516108e29190614127565b60405180910390f35b3480156108f757600080fd5b50610912600480360381019061090d91906136d8565b611fdd565b60405161091f9190613f14565b60405180910390f35b34801561093457600080fd5b5061094f600480360381019061094a91906136ab565b612071565b005b34801561095d57600080fd5b50610978600480360381019061097391906139cb565b612169565b005b61098261220f565b73ffffffffffffffffffffffffffffffffffffffff166109a061121d565b73ffffffffffffffffffffffffffffffffffffffff16146109f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ed9061404c565b60405180910390fd5b80600c8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610acb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610adb5750610ada82612217565b5b9050919050565b610aea61220f565b73ffffffffffffffffffffffffffffffffffffffff16610b0861121d565b73ffffffffffffffffffffffffffffffffffffffff1614610b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b559061404c565b60405180910390fd5b610b688282612281565b5050565b606060038054610b7b90614415565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba790614415565b8015610bf45780601f10610bc957610100808354040283529160200191610bf4565b820191906000526020600020905b815481529060010190602001808311610bd757829003601f168201915b5050505050905090565b6000610c098261229f565b610c3f576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c8582610f9d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ced576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d0c61220f565b73ffffffffffffffffffffffffffffffffffffffff1614158015610d3e5750610d3c81610d3761220f565b611fdd565b155b15610d75576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d808383836122ed565b505050565b6000610d8f61239f565b6002546001540303905090565b60135481565b610dad8383836123a8565b505050565b600a5481565b600c5481565b610dc661220f565b73ffffffffffffffffffffffffffffffffffffffff16610de461121d565b73ffffffffffffffffffffffffffffffffffffffff1614610e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e319061404c565b60405180910390fd5b80600d8190555050565b610e4c61220f565b73ffffffffffffffffffffffffffffffffffffffff16610e6a61121d565b73ffffffffffffffffffffffffffffffffffffffff1614610ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb79061404c565b60405180910390fd5b8060128190555050565b610ee5838383604051806020016040528060008152506118a3565b505050565b6000601354905090565b610efc61220f565b73ffffffffffffffffffffffffffffffffffffffff16610f1a61121d565b73ffffffffffffffffffffffffffffffffffffffff1614610f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f679061404c565b60405180910390fd5b80600f9080519060200190610f86929190613411565b5050565b600e60009054906101000a900460ff1681565b6000610fa88261285e565b600001519050919050565b610fbb61220f565b73ffffffffffffffffffffffffffffffffffffffff16610fd961121d565b73ffffffffffffffffffffffffffffffffffffffff161461102f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110269061404c565b60405180910390fd5b8060138190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110a1576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61111161220f565b73ffffffffffffffffffffffffffffffffffffffff1661112f61121d565b73ffffffffffffffffffffffffffffffffffffffff1614611185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117c9061404c565b60405180910390fd5b61118f6000612aed565b565b61119961220f565b73ffffffffffffffffffffffffffffffffffffffff166111b761121d565b73ffffffffffffffffffffffffffffffffffffffff161461120d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112049061404c565b60405180910390fd5b80600a8190555050565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61124e613497565b6112578261285e565b9050919050565b60606004805461126d90614415565b80601f016020809104026020016040519081016040528092919081815260200182805461129990614415565b80156112e65780601f106112bb576101008083540402835291602001916112e6565b820191906000526020600020905b8154815290600101906020018083116112c957829003601f168201915b5050505050905090565b6000600d54905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135f90613fcc565b60405180910390fd5b6002601354146113ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a490613fac565b60405180910390fd5b6012546115b36113bd919061430d565b816113c6610d85565b6113d0919061422c565b1115611411576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114089061402c565b60405180910390fd5b600c548161141e33611fcb565b611428919061422c565b1115611469576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114609061400c565b60405180910390fd5b600b548111156114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a5906140cc565b60405180910390fd5b80600d546114bc91906142b3565b3410156114fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f5906140ac565b60405180910390fd5b6115083382612281565b601154611513610d85565b106115215760006013819055505b50565b61152c61220f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611591576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806008600061159e61220f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661164b61220f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116909190613f14565b60405180910390a35050565b6116a461220f565b73ffffffffffffffffffffffffffffffffffffffff166116c261121d565b73ffffffffffffffffffffffffffffffffffffffff1614611718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170f9061404c565b60405180910390fd5b6002600954141561175e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611755906140ec565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161178c90613e98565b60006040518083038185875af1925050503d80600081146117c9576040519150601f19603f3d011682016040523d82523d6000602084013e6117ce565b606091505b5050905080611812576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118099061408c565b60405180910390fd5b506001600981905550565b61182561220f565b73ffffffffffffffffffffffffffffffffffffffff1661184361121d565b73ffffffffffffffffffffffffffffffffffffffff1614611899576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118909061404c565b60405180910390fd5b80600b8190555050565b6118ae8484846123a8565b6118cd8373ffffffffffffffffffffffffffffffffffffffff16612bb1565b80156118e257506118e084848484612bc4565b155b15611919576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b61192761220f565b73ffffffffffffffffffffffffffffffffffffffff1661194561121d565b73ffffffffffffffffffffffffffffffffffffffff161461199b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119929061404c565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b6119cf61220f565b73ffffffffffffffffffffffffffffffffffffffff166119ed61121d565b73ffffffffffffffffffffffffffffffffffffffff1614611a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3a9061404c565b60405180910390fd5b8060118190555050565b606060011515600e60009054906101000a900460ff1615151415611b1157611a748261229f565b611ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaa9061406c565b60405180910390fd5b6000611abd612d24565b90506000815111611add5760405180602001604052806000815250611b09565b600f611ae884612db6565b604051602001611af9929190613e69565b6040516020818303038152906040525b915050611c4d565b60001515600e60009054906101000a900460ff1615151415611c4c57611b368261229f565b611b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6c9061406c565b60405180910390fd5b600060108054611b8490614415565b80601f0160208091040260200160405190810160405280929190818152602001828054611bb090614415565b8015611bfd5780601f10611bd257610100808354040283529160200191611bfd565b820191906000526020600020905b815481529060010190602001808311611be057829003601f168201915b505050505090506000815111611c225760405180602001604052806000815250611c44565b6010604051602001611c349190613e52565b6040516020818303038152906040525b915050611c4d565b5b919050565b600f8054611c5f90614415565b80601f0160208091040260200160405190810160405280929190818152602001828054611c8b90614415565b8015611cd85780601f10611cad57610100808354040283529160200191611cd8565b820191906000526020600020905b815481529060010190602001808311611cbb57829003601f168201915b505050505081565b600b5481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4b90613fcc565b60405180910390fd5b600033604051602001611d679190613e37565b604051602081830303815290604052805190602001209050611dcd838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600a5483612f17565b611e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0390613fec565b60405180910390fd5b600160135414611e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4890613f8c565b60405180910390fd5b6012546115b3611e61919061430d565b84611e6a610d85565b611e74919061422c565b1115611eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eac9061402c565b60405180910390fd5b600c5484611ec233611fcb565b611ecc919061422c565b1115611f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f049061400c565b60405180910390fd5b600b54841115611f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f49906140cc565b60405180910390fd5b83600d54611f6091906142b3565b341015611fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f99906140ac565b60405180910390fd5b611fac3385612281565b601154611fb7610d85565b10611fc55760006013819055505b50505050565b6000611fd682612f2e565b9050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61207961220f565b73ffffffffffffffffffffffffffffffffffffffff1661209761121d565b73ffffffffffffffffffffffffffffffffffffffff16146120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e49061404c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561215d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215490613f6c565b60405180910390fd5b61216681612aed565b50565b61217161220f565b73ffffffffffffffffffffffffffffffffffffffff1661218f61121d565b73ffffffffffffffffffffffffffffffffffffffff16146121e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dc9061404c565b60405180910390fd5b846013819055508060118190555081600d8190555083600c8190555082600b819055505050505050565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61229b828260405180602001604052806000815250612f98565b5050565b6000816122aa61239f565b111580156122b9575060015482105b80156122e6575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b60006123b38261285e565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461241e576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff1661243f61220f565b73ffffffffffffffffffffffffffffffffffffffff16148061246e575061246d8561246861220f565b611fdd565b5b806124b3575061247c61220f565b73ffffffffffffffffffffffffffffffffffffffff1661249b84610bfe565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806124ec576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612553576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125608585856001612faa565b61256c600084876122ed565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156127ec5760015482146127eb57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128578585856001612fb0565b5050505050565b612866613497565b60008290508061287461239f565b11158015612883575060015481105b15612ab6576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612ab457600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612998578092505050612ae8565b5b600115612ab357818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612aae578092505050612ae8565b612999565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080823b905060008111915050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612bea61220f565b8786866040518563ffffffff1660e01b8152600401612c0c9493929190613ec8565b602060405180830381600087803b158015612c2657600080fd5b505af1925050508015612c5757506040513d601f19601f82011682018060405250810190612c5491906138c8565b60015b612cd1573d8060008114612c87576040519150601f19603f3d011682016040523d82523d6000602084013e612c8c565b606091505b50600081511415612cc9576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600f8054612d3390614415565b80601f0160208091040260200160405190810160405280929190818152602001828054612d5f90614415565b8015612dac5780601f10612d8157610100808354040283529160200191612dac565b820191906000526020600020905b815481529060010190602001808311612d8f57829003601f168201915b5050505050905090565b60606000821415612dfe576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f12565b600082905060005b60008214612e30578080612e1990614478565b915050600a82612e299190614282565b9150612e06565b60008167ffffffffffffffff811115612e4c57612e4b6145d2565b5b6040519080825280601f01601f191660200182016040528015612e7e5781602001600182028036833780820191505090505b5090505b60008514612f0b57600182612e97919061430d565b9150600a85612ea691906144e5565b6030612eb2919061422c565b60f81b818381518110612ec857612ec76145a3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f049190614282565b9450612e82565b8093505050505b919050565b600082612f248584612fb6565b1490509392505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b612fa5838383600161302b565b505050565b50505050565b50505050565b60008082905060005b8451811015613020576000858281518110612fdd57612fdc6145a3565b5b60200260200101519050808311612fff57612ff883826133fa565b925061300c565b61300981846133fa565b92505b50808061301890614478565b915050612fbf565b508091505092915050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613099576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008414156130d4576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6130e16000868387612faa565b83600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600085820190508380156132ab57506132aa8773ffffffffffffffffffffffffffffffffffffffff16612bb1565b5b15613371575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46133206000888480600101955088612bc4565b613356576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808214156132b157826001541461336c57600080fd5b6133dd565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613372575b8160018190555050506133f36000868387612fb0565b5050505050565b600082600052816020526040600020905092915050565b82805461341d90614415565b90600052602060002090601f01602090048101928261343f5760008555613486565b82601f1061345857805160ff1916838001178555613486565b82800160010185558215613486579182015b8281111561348557825182559160200191906001019061346a565b5b50905061349391906134da565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156134f35760008160009055506001016134db565b5090565b600061350a61350584614167565b614142565b90508281526020810184848401111561352657613525614610565b5b6135318482856143d3565b509392505050565b600061354c61354784614198565b614142565b90508281526020810184848401111561356857613567614610565b5b6135738482856143d3565b509392505050565b60008135905061358a816148ca565b92915050565b60008083601f8401126135a6576135a5614606565b5b8235905067ffffffffffffffff8111156135c3576135c2614601565b5b6020830191508360208202830111156135df576135de61460b565b5b9250929050565b6000813590506135f5816148e1565b92915050565b60008135905061360a816148f8565b92915050565b60008135905061361f8161490f565b92915050565b6000815190506136348161490f565b92915050565b600082601f83011261364f5761364e614606565b5b813561365f8482602086016134f7565b91505092915050565b600082601f83011261367d5761367c614606565b5b813561368d848260208601613539565b91505092915050565b6000813590506136a581614926565b92915050565b6000602082840312156136c1576136c061461a565b5b60006136cf8482850161357b565b91505092915050565b600080604083850312156136ef576136ee61461a565b5b60006136fd8582860161357b565b925050602061370e8582860161357b565b9150509250929050565b6000806000606084860312156137315761373061461a565b5b600061373f8682870161357b565b93505060206137508682870161357b565b925050604061376186828701613696565b9150509250925092565b600080600080608085870312156137855761378461461a565b5b60006137938782880161357b565b94505060206137a48782880161357b565b93505060406137b587828801613696565b925050606085013567ffffffffffffffff8111156137d6576137d5614615565b5b6137e28782880161363a565b91505092959194509250565b600080604083850312156138055761380461461a565b5b60006138138582860161357b565b9250506020613824858286016135e6565b9150509250929050565b600080604083850312156138455761384461461a565b5b60006138538582860161357b565b925050602061386485828601613696565b9150509250929050565b6000602082840312156138845761388361461a565b5b6000613892848285016135fb565b91505092915050565b6000602082840312156138b1576138b061461a565b5b60006138bf84828501613610565b91505092915050565b6000602082840312156138de576138dd61461a565b5b60006138ec84828501613625565b91505092915050565b60006020828403121561390b5761390a61461a565b5b600082013567ffffffffffffffff81111561392957613928614615565b5b61393584828501613668565b91505092915050565b6000602082840312156139545761395361461a565b5b600061396284828501613696565b91505092915050565b6000806000604084860312156139845761398361461a565b5b600061399286828701613696565b935050602084013567ffffffffffffffff8111156139b3576139b2614615565b5b6139bf86828701613590565b92509250509250925092565b600080600080600060a086880312156139e7576139e661461a565b5b60006139f588828901613696565b9550506020613a0688828901613696565b9450506040613a1788828901613696565b9350506060613a2888828901613696565b9250506080613a3988828901613696565b9150509295509295909350565b613a4f81614341565b82525050565b613a5e81614341565b82525050565b613a75613a7082614341565b6144c1565b82525050565b613a8481614353565b82525050565b613a9381614353565b82525050565b613aa28161435f565b82525050565b6000613ab3826141de565b613abd81856141f4565b9350613acd8185602086016143e2565b613ad68161461f565b840191505092915050565b6000613aec826141e9565b613af68185614210565b9350613b068185602086016143e2565b613b0f8161461f565b840191505092915050565b6000613b25826141e9565b613b2f8185614221565b9350613b3f8185602086016143e2565b80840191505092915050565b60008154613b5881614415565b613b628186614221565b94506001821660008114613b7d5760018114613b8e57613bc1565b60ff19831686528186019350613bc1565b613b97856141c9565b60005b83811015613bb957815481890152600182019150602081019050613b9a565b838801955050505b50505092915050565b6000613bd7602683614210565b9150613be28261463d565b604082019050919050565b6000613bfa601883614210565b9150613c058261468c565b602082019050919050565b6000613c1d601283614210565b9150613c28826146b5565b602082019050919050565b6000613c40601e83614210565b9150613c4b826146de565b602082019050919050565b6000613c63600f83614210565b9150613c6e82614707565b602082019050919050565b6000613c86601e83614210565b9150613c9182614730565b602082019050919050565b6000613ca9601283614210565b9150613cb482614759565b602082019050919050565b6000613ccc600583614221565b9150613cd782614782565b600582019050919050565b6000613cef602083614210565b9150613cfa826147ab565b602082019050919050565b6000613d12602f83614210565b9150613d1d826147d4565b604082019050919050565b6000613d35600083614205565b9150613d4082614823565b600082019050919050565b6000613d58601083614210565b9150613d6382614826565b602082019050919050565b6000613d7b601683614210565b9150613d868261484f565b602082019050919050565b6000613d9e601683614210565b9150613da982614878565b602082019050919050565b6000613dc1601f83614210565b9150613dcc826148a1565b602082019050919050565b606082016000820151613ded6000850182613a46565b506020820151613e006020850182613e28565b506040820151613e136040850182613a7b565b50505050565b613e22816143b5565b82525050565b613e31816143bf565b82525050565b6000613e438284613a64565b60148201915081905092915050565b6000613e5e8284613b4b565b915081905092915050565b6000613e758285613b4b565b9150613e818284613b1a565b9150613e8c82613cbf565b91508190509392505050565b6000613ea382613d28565b9150819050919050565b6000602082019050613ec26000830184613a55565b92915050565b6000608082019050613edd6000830187613a55565b613eea6020830186613a55565b613ef76040830185613e19565b8181036060830152613f098184613aa8565b905095945050505050565b6000602082019050613f296000830184613a8a565b92915050565b6000602082019050613f446000830184613a99565b92915050565b60006020820190508181036000830152613f648184613ae1565b905092915050565b60006020820190508181036000830152613f8581613bca565b9050919050565b60006020820190508181036000830152613fa581613bed565b9050919050565b60006020820190508181036000830152613fc581613c10565b9050919050565b60006020820190508181036000830152613fe581613c33565b9050919050565b6000602082019050818103600083015261400581613c56565b9050919050565b6000602082019050818103600083015261402581613c79565b9050919050565b6000602082019050818103600083015261404581613c9c565b9050919050565b6000602082019050818103600083015261406581613ce2565b9050919050565b6000602082019050818103600083015261408581613d05565b9050919050565b600060208201905081810360008301526140a581613d4b565b9050919050565b600060208201905081810360008301526140c581613d6e565b9050919050565b600060208201905081810360008301526140e581613d91565b9050919050565b6000602082019050818103600083015261410581613db4565b9050919050565b60006060820190506141216000830184613dd7565b92915050565b600060208201905061413c6000830184613e19565b92915050565b600061414c61415d565b90506141588282614447565b919050565b6000604051905090565b600067ffffffffffffffff821115614182576141816145d2565b5b61418b8261461f565b9050602081019050919050565b600067ffffffffffffffff8211156141b3576141b26145d2565b5b6141bc8261461f565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614237826143b5565b9150614242836143b5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561427757614276614516565b5b828201905092915050565b600061428d826143b5565b9150614298836143b5565b9250826142a8576142a7614545565b5b828204905092915050565b60006142be826143b5565b91506142c9836143b5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561430257614301614516565b5b828202905092915050565b6000614318826143b5565b9150614323836143b5565b92508282101561433657614335614516565b5b828203905092915050565b600061434c82614395565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156144005780820151818401526020810190506143e5565b8381111561440f576000848401525b50505050565b6000600282049050600182168061442d57607f821691505b6020821081141561444157614440614574565b5b50919050565b6144508261461f565b810181811067ffffffffffffffff8211171561446f5761446e6145d2565b5b80604052505050565b6000614483826143b5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144b6576144b5614516565b5b600182019050919050565b60006144cc826144d3565b9050919050565b60006144de82614630565b9050919050565b60006144f0826143b5565b91506144fb836143b5565b92508261450b5761450a614545565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f57686974656c697374696e67206e6f7420737461727465640000000000000000600082015250565b7f53616c65206973206e6f74204163746976650000000000000000000000000000600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f4e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b7f5175616e74697479206578636565647320616c6c6f776564204d696e74730000600082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6148d381614341565b81146148de57600080fd5b50565b6148ea81614353565b81146148f557600080fd5b50565b6149018161435f565b811461490c57600080fd5b50565b61491881614369565b811461492357600080fd5b50565b61492f816143b5565b811461493a57600080fd5b5056fea2646970667358221220c1d411b0cff381a15df8b0cf0e655b1a03011c98680db2a598966f5e784fc12564736f6c6343000807003368747470733a2f2f6261666b72656964656776746d676d753737626a6768357a79713332657a7275716c696779696f6c62636c667278766667333478337734783676712e697066732e6e667473746f726167652e6c696e6b2f

Deployed Bytecode

0x6080604052600436106102515760003560e01c80637cb6475911610139578063b88d4fde116100b6578063d04950a11161007a578063d04950a114610867578063d2cab05614610892578063dc33e681146108ae578063e985e9c5146108eb578063f2fde38b14610928578063fb7f05401461095157610251565b8063b88d4fde14610796578063bd0a8439146107bf578063c1f127e2146107d6578063c87b56dd146107ff578063cfc86f7b1461083c57610251565b806398d5fdca116100fd57806398d5fdca146106e6578063a0712d6814610711578063a22cb4651461072d578063ac44600214610756578063af7b26e91461076d57610251565b80637cb64759146105ff5780638d859f3e146106285780638da5cb5b146106535780639231ab2a1461067e57806395d89b41146106bb57610251565b80632f2ffc57116101d257806355f804b31161019657806355f804b3146104f157806362c6f7b91461051a5780636352211e1461054557806369ba1a751461058257806370a08231146105ab578063715018a6146105e857610251565b80632f2ffc57146104205780633fd173661461044b5780634256dbe31461047457806342842e0e1461049d5780634e69d560146104c657610251565b8063095ea7b311610219578063095ea7b31461034d57806318160ddd14610376578063200d2ed2146103a157806323b872dd146103cc5780632eb4a7ab146103f557610251565b80630199e3471461025657806301ffc9a71461027f578063050225ea146102bc57806306fdde03146102e5578063081812fc14610310575b600080fd5b34801561026257600080fd5b5061027d6004803603810190610278919061393e565b61097a565b005b34801561028b57600080fd5b506102a660048036038101906102a1919061389b565b610a00565b6040516102b39190613f14565b60405180910390f35b3480156102c857600080fd5b506102e360048036038101906102de919061382e565b610ae2565b005b3480156102f157600080fd5b506102fa610b6c565b6040516103079190613f4a565b60405180910390f35b34801561031c57600080fd5b506103376004803603810190610332919061393e565b610bfe565b6040516103449190613ead565b60405180910390f35b34801561035957600080fd5b50610374600480360381019061036f919061382e565b610c7a565b005b34801561038257600080fd5b5061038b610d85565b6040516103989190614127565b60405180910390f35b3480156103ad57600080fd5b506103b6610d9c565b6040516103c39190614127565b60405180910390f35b3480156103d857600080fd5b506103f360048036038101906103ee9190613718565b610da2565b005b34801561040157600080fd5b5061040a610db2565b6040516104179190613f2f565b60405180910390f35b34801561042c57600080fd5b50610435610db8565b6040516104429190614127565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d919061393e565b610dbe565b005b34801561048057600080fd5b5061049b6004803603810190610496919061393e565b610e44565b005b3480156104a957600080fd5b506104c460048036038101906104bf9190613718565b610eca565b005b3480156104d257600080fd5b506104db610eea565b6040516104e89190614127565b60405180910390f35b3480156104fd57600080fd5b50610518600480360381019061051391906138f5565b610ef4565b005b34801561052657600080fd5b5061052f610f8a565b60405161053c9190613f14565b60405180910390f35b34801561055157600080fd5b5061056c6004803603810190610567919061393e565b610f9d565b6040516105799190613ead565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a4919061393e565b610fb3565b005b3480156105b757600080fd5b506105d260048036038101906105cd91906136ab565b611039565b6040516105df9190614127565b60405180910390f35b3480156105f457600080fd5b506105fd611109565b005b34801561060b57600080fd5b506106266004803603810190610621919061386e565b611191565b005b34801561063457600080fd5b5061063d611217565b60405161064a9190614127565b60405180910390f35b34801561065f57600080fd5b5061066861121d565b6040516106759190613ead565b60405180910390f35b34801561068a57600080fd5b506106a560048036038101906106a0919061393e565b611246565b6040516106b2919061410c565b60405180910390f35b3480156106c757600080fd5b506106d061125e565b6040516106dd9190613f4a565b60405180910390f35b3480156106f257600080fd5b506106fb6112f0565b6040516107089190614127565b60405180910390f35b61072b6004803603810190610726919061393e565b6112fa565b005b34801561073957600080fd5b50610754600480360381019061074f91906137ee565b611524565b005b34801561076257600080fd5b5061076b61169c565b005b34801561077957600080fd5b50610794600480360381019061078f919061393e565b61181d565b005b3480156107a257600080fd5b506107bd60048036038101906107b8919061376b565b6118a3565b005b3480156107cb57600080fd5b506107d461191f565b005b3480156107e257600080fd5b506107fd60048036038101906107f8919061393e565b6119c7565b005b34801561080b57600080fd5b506108266004803603810190610821919061393e565b611a4d565b6040516108339190613f4a565b60405180910390f35b34801561084857600080fd5b50610851611c52565b60405161085e9190613f4a565b60405180910390f35b34801561087357600080fd5b5061087c611ce0565b6040516108899190614127565b60405180910390f35b6108ac60048036038101906108a7919061396b565b611ce6565b005b3480156108ba57600080fd5b506108d560048036038101906108d091906136ab565b611fcb565b6040516108e29190614127565b60405180910390f35b3480156108f757600080fd5b50610912600480360381019061090d91906136d8565b611fdd565b60405161091f9190613f14565b60405180910390f35b34801561093457600080fd5b5061094f600480360381019061094a91906136ab565b612071565b005b34801561095d57600080fd5b50610978600480360381019061097391906139cb565b612169565b005b61098261220f565b73ffffffffffffffffffffffffffffffffffffffff166109a061121d565b73ffffffffffffffffffffffffffffffffffffffff16146109f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ed9061404c565b60405180910390fd5b80600c8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610acb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610adb5750610ada82612217565b5b9050919050565b610aea61220f565b73ffffffffffffffffffffffffffffffffffffffff16610b0861121d565b73ffffffffffffffffffffffffffffffffffffffff1614610b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b559061404c565b60405180910390fd5b610b688282612281565b5050565b606060038054610b7b90614415565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba790614415565b8015610bf45780601f10610bc957610100808354040283529160200191610bf4565b820191906000526020600020905b815481529060010190602001808311610bd757829003601f168201915b5050505050905090565b6000610c098261229f565b610c3f576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c8582610f9d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ced576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d0c61220f565b73ffffffffffffffffffffffffffffffffffffffff1614158015610d3e5750610d3c81610d3761220f565b611fdd565b155b15610d75576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d808383836122ed565b505050565b6000610d8f61239f565b6002546001540303905090565b60135481565b610dad8383836123a8565b505050565b600a5481565b600c5481565b610dc661220f565b73ffffffffffffffffffffffffffffffffffffffff16610de461121d565b73ffffffffffffffffffffffffffffffffffffffff1614610e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e319061404c565b60405180910390fd5b80600d8190555050565b610e4c61220f565b73ffffffffffffffffffffffffffffffffffffffff16610e6a61121d565b73ffffffffffffffffffffffffffffffffffffffff1614610ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb79061404c565b60405180910390fd5b8060128190555050565b610ee5838383604051806020016040528060008152506118a3565b505050565b6000601354905090565b610efc61220f565b73ffffffffffffffffffffffffffffffffffffffff16610f1a61121d565b73ffffffffffffffffffffffffffffffffffffffff1614610f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f679061404c565b60405180910390fd5b80600f9080519060200190610f86929190613411565b5050565b600e60009054906101000a900460ff1681565b6000610fa88261285e565b600001519050919050565b610fbb61220f565b73ffffffffffffffffffffffffffffffffffffffff16610fd961121d565b73ffffffffffffffffffffffffffffffffffffffff161461102f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110269061404c565b60405180910390fd5b8060138190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110a1576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61111161220f565b73ffffffffffffffffffffffffffffffffffffffff1661112f61121d565b73ffffffffffffffffffffffffffffffffffffffff1614611185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117c9061404c565b60405180910390fd5b61118f6000612aed565b565b61119961220f565b73ffffffffffffffffffffffffffffffffffffffff166111b761121d565b73ffffffffffffffffffffffffffffffffffffffff161461120d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112049061404c565b60405180910390fd5b80600a8190555050565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61124e613497565b6112578261285e565b9050919050565b60606004805461126d90614415565b80601f016020809104026020016040519081016040528092919081815260200182805461129990614415565b80156112e65780601f106112bb576101008083540402835291602001916112e6565b820191906000526020600020905b8154815290600101906020018083116112c957829003601f168201915b5050505050905090565b6000600d54905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135f90613fcc565b60405180910390fd5b6002601354146113ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a490613fac565b60405180910390fd5b6012546115b36113bd919061430d565b816113c6610d85565b6113d0919061422c565b1115611411576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114089061402c565b60405180910390fd5b600c548161141e33611fcb565b611428919061422c565b1115611469576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114609061400c565b60405180910390fd5b600b548111156114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a5906140cc565b60405180910390fd5b80600d546114bc91906142b3565b3410156114fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f5906140ac565b60405180910390fd5b6115083382612281565b601154611513610d85565b106115215760006013819055505b50565b61152c61220f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611591576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806008600061159e61220f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661164b61220f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116909190613f14565b60405180910390a35050565b6116a461220f565b73ffffffffffffffffffffffffffffffffffffffff166116c261121d565b73ffffffffffffffffffffffffffffffffffffffff1614611718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170f9061404c565b60405180910390fd5b6002600954141561175e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611755906140ec565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161178c90613e98565b60006040518083038185875af1925050503d80600081146117c9576040519150601f19603f3d011682016040523d82523d6000602084013e6117ce565b606091505b5050905080611812576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118099061408c565b60405180910390fd5b506001600981905550565b61182561220f565b73ffffffffffffffffffffffffffffffffffffffff1661184361121d565b73ffffffffffffffffffffffffffffffffffffffff1614611899576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118909061404c565b60405180910390fd5b80600b8190555050565b6118ae8484846123a8565b6118cd8373ffffffffffffffffffffffffffffffffffffffff16612bb1565b80156118e257506118e084848484612bc4565b155b15611919576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b61192761220f565b73ffffffffffffffffffffffffffffffffffffffff1661194561121d565b73ffffffffffffffffffffffffffffffffffffffff161461199b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119929061404c565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b6119cf61220f565b73ffffffffffffffffffffffffffffffffffffffff166119ed61121d565b73ffffffffffffffffffffffffffffffffffffffff1614611a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3a9061404c565b60405180910390fd5b8060118190555050565b606060011515600e60009054906101000a900460ff1615151415611b1157611a748261229f565b611ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaa9061406c565b60405180910390fd5b6000611abd612d24565b90506000815111611add5760405180602001604052806000815250611b09565b600f611ae884612db6565b604051602001611af9929190613e69565b6040516020818303038152906040525b915050611c4d565b60001515600e60009054906101000a900460ff1615151415611c4c57611b368261229f565b611b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6c9061406c565b60405180910390fd5b600060108054611b8490614415565b80601f0160208091040260200160405190810160405280929190818152602001828054611bb090614415565b8015611bfd5780601f10611bd257610100808354040283529160200191611bfd565b820191906000526020600020905b815481529060010190602001808311611be057829003601f168201915b505050505090506000815111611c225760405180602001604052806000815250611c44565b6010604051602001611c349190613e52565b6040516020818303038152906040525b915050611c4d565b5b919050565b600f8054611c5f90614415565b80601f0160208091040260200160405190810160405280929190818152602001828054611c8b90614415565b8015611cd85780601f10611cad57610100808354040283529160200191611cd8565b820191906000526020600020905b815481529060010190602001808311611cbb57829003601f168201915b505050505081565b600b5481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4b90613fcc565b60405180910390fd5b600033604051602001611d679190613e37565b604051602081830303815290604052805190602001209050611dcd838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600a5483612f17565b611e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0390613fec565b60405180910390fd5b600160135414611e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4890613f8c565b60405180910390fd5b6012546115b3611e61919061430d565b84611e6a610d85565b611e74919061422c565b1115611eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eac9061402c565b60405180910390fd5b600c5484611ec233611fcb565b611ecc919061422c565b1115611f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f049061400c565b60405180910390fd5b600b54841115611f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f49906140cc565b60405180910390fd5b83600d54611f6091906142b3565b341015611fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f99906140ac565b60405180910390fd5b611fac3385612281565b601154611fb7610d85565b10611fc55760006013819055505b50505050565b6000611fd682612f2e565b9050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61207961220f565b73ffffffffffffffffffffffffffffffffffffffff1661209761121d565b73ffffffffffffffffffffffffffffffffffffffff16146120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e49061404c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561215d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215490613f6c565b60405180910390fd5b61216681612aed565b50565b61217161220f565b73ffffffffffffffffffffffffffffffffffffffff1661218f61121d565b73ffffffffffffffffffffffffffffffffffffffff16146121e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dc9061404c565b60405180910390fd5b846013819055508060118190555081600d8190555083600c8190555082600b819055505050505050565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61229b828260405180602001604052806000815250612f98565b5050565b6000816122aa61239f565b111580156122b9575060015482105b80156122e6575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b60006123b38261285e565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461241e576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff1661243f61220f565b73ffffffffffffffffffffffffffffffffffffffff16148061246e575061246d8561246861220f565b611fdd565b5b806124b3575061247c61220f565b73ffffffffffffffffffffffffffffffffffffffff1661249b84610bfe565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806124ec576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612553576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125608585856001612faa565b61256c600084876122ed565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156127ec5760015482146127eb57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128578585856001612fb0565b5050505050565b612866613497565b60008290508061287461239f565b11158015612883575060015481105b15612ab6576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612ab457600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612998578092505050612ae8565b5b600115612ab357818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612aae578092505050612ae8565b612999565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080823b905060008111915050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612bea61220f565b8786866040518563ffffffff1660e01b8152600401612c0c9493929190613ec8565b602060405180830381600087803b158015612c2657600080fd5b505af1925050508015612c5757506040513d601f19601f82011682018060405250810190612c5491906138c8565b60015b612cd1573d8060008114612c87576040519150601f19603f3d011682016040523d82523d6000602084013e612c8c565b606091505b50600081511415612cc9576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600f8054612d3390614415565b80601f0160208091040260200160405190810160405280929190818152602001828054612d5f90614415565b8015612dac5780601f10612d8157610100808354040283529160200191612dac565b820191906000526020600020905b815481529060010190602001808311612d8f57829003601f168201915b5050505050905090565b60606000821415612dfe576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f12565b600082905060005b60008214612e30578080612e1990614478565b915050600a82612e299190614282565b9150612e06565b60008167ffffffffffffffff811115612e4c57612e4b6145d2565b5b6040519080825280601f01601f191660200182016040528015612e7e5781602001600182028036833780820191505090505b5090505b60008514612f0b57600182612e97919061430d565b9150600a85612ea691906144e5565b6030612eb2919061422c565b60f81b818381518110612ec857612ec76145a3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f049190614282565b9450612e82565b8093505050505b919050565b600082612f248584612fb6565b1490509392505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b612fa5838383600161302b565b505050565b50505050565b50505050565b60008082905060005b8451811015613020576000858281518110612fdd57612fdc6145a3565b5b60200260200101519050808311612fff57612ff883826133fa565b925061300c565b61300981846133fa565b92505b50808061301890614478565b915050612fbf565b508091505092915050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613099576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008414156130d4576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6130e16000868387612faa565b83600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600085820190508380156132ab57506132aa8773ffffffffffffffffffffffffffffffffffffffff16612bb1565b5b15613371575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46133206000888480600101955088612bc4565b613356576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808214156132b157826001541461336c57600080fd5b6133dd565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613372575b8160018190555050506133f36000868387612fb0565b5050505050565b600082600052816020526040600020905092915050565b82805461341d90614415565b90600052602060002090601f01602090048101928261343f5760008555613486565b82601f1061345857805160ff1916838001178555613486565b82800160010185558215613486579182015b8281111561348557825182559160200191906001019061346a565b5b50905061349391906134da565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156134f35760008160009055506001016134db565b5090565b600061350a61350584614167565b614142565b90508281526020810184848401111561352657613525614610565b5b6135318482856143d3565b509392505050565b600061354c61354784614198565b614142565b90508281526020810184848401111561356857613567614610565b5b6135738482856143d3565b509392505050565b60008135905061358a816148ca565b92915050565b60008083601f8401126135a6576135a5614606565b5b8235905067ffffffffffffffff8111156135c3576135c2614601565b5b6020830191508360208202830111156135df576135de61460b565b5b9250929050565b6000813590506135f5816148e1565b92915050565b60008135905061360a816148f8565b92915050565b60008135905061361f8161490f565b92915050565b6000815190506136348161490f565b92915050565b600082601f83011261364f5761364e614606565b5b813561365f8482602086016134f7565b91505092915050565b600082601f83011261367d5761367c614606565b5b813561368d848260208601613539565b91505092915050565b6000813590506136a581614926565b92915050565b6000602082840312156136c1576136c061461a565b5b60006136cf8482850161357b565b91505092915050565b600080604083850312156136ef576136ee61461a565b5b60006136fd8582860161357b565b925050602061370e8582860161357b565b9150509250929050565b6000806000606084860312156137315761373061461a565b5b600061373f8682870161357b565b93505060206137508682870161357b565b925050604061376186828701613696565b9150509250925092565b600080600080608085870312156137855761378461461a565b5b60006137938782880161357b565b94505060206137a48782880161357b565b93505060406137b587828801613696565b925050606085013567ffffffffffffffff8111156137d6576137d5614615565b5b6137e28782880161363a565b91505092959194509250565b600080604083850312156138055761380461461a565b5b60006138138582860161357b565b9250506020613824858286016135e6565b9150509250929050565b600080604083850312156138455761384461461a565b5b60006138538582860161357b565b925050602061386485828601613696565b9150509250929050565b6000602082840312156138845761388361461a565b5b6000613892848285016135fb565b91505092915050565b6000602082840312156138b1576138b061461a565b5b60006138bf84828501613610565b91505092915050565b6000602082840312156138de576138dd61461a565b5b60006138ec84828501613625565b91505092915050565b60006020828403121561390b5761390a61461a565b5b600082013567ffffffffffffffff81111561392957613928614615565b5b61393584828501613668565b91505092915050565b6000602082840312156139545761395361461a565b5b600061396284828501613696565b91505092915050565b6000806000604084860312156139845761398361461a565b5b600061399286828701613696565b935050602084013567ffffffffffffffff8111156139b3576139b2614615565b5b6139bf86828701613590565b92509250509250925092565b600080600080600060a086880312156139e7576139e661461a565b5b60006139f588828901613696565b9550506020613a0688828901613696565b9450506040613a1788828901613696565b9350506060613a2888828901613696565b9250506080613a3988828901613696565b9150509295509295909350565b613a4f81614341565b82525050565b613a5e81614341565b82525050565b613a75613a7082614341565b6144c1565b82525050565b613a8481614353565b82525050565b613a9381614353565b82525050565b613aa28161435f565b82525050565b6000613ab3826141de565b613abd81856141f4565b9350613acd8185602086016143e2565b613ad68161461f565b840191505092915050565b6000613aec826141e9565b613af68185614210565b9350613b068185602086016143e2565b613b0f8161461f565b840191505092915050565b6000613b25826141e9565b613b2f8185614221565b9350613b3f8185602086016143e2565b80840191505092915050565b60008154613b5881614415565b613b628186614221565b94506001821660008114613b7d5760018114613b8e57613bc1565b60ff19831686528186019350613bc1565b613b97856141c9565b60005b83811015613bb957815481890152600182019150602081019050613b9a565b838801955050505b50505092915050565b6000613bd7602683614210565b9150613be28261463d565b604082019050919050565b6000613bfa601883614210565b9150613c058261468c565b602082019050919050565b6000613c1d601283614210565b9150613c28826146b5565b602082019050919050565b6000613c40601e83614210565b9150613c4b826146de565b602082019050919050565b6000613c63600f83614210565b9150613c6e82614707565b602082019050919050565b6000613c86601e83614210565b9150613c9182614730565b602082019050919050565b6000613ca9601283614210565b9150613cb482614759565b602082019050919050565b6000613ccc600583614221565b9150613cd782614782565b600582019050919050565b6000613cef602083614210565b9150613cfa826147ab565b602082019050919050565b6000613d12602f83614210565b9150613d1d826147d4565b604082019050919050565b6000613d35600083614205565b9150613d4082614823565b600082019050919050565b6000613d58601083614210565b9150613d6382614826565b602082019050919050565b6000613d7b601683614210565b9150613d868261484f565b602082019050919050565b6000613d9e601683614210565b9150613da982614878565b602082019050919050565b6000613dc1601f83614210565b9150613dcc826148a1565b602082019050919050565b606082016000820151613ded6000850182613a46565b506020820151613e006020850182613e28565b506040820151613e136040850182613a7b565b50505050565b613e22816143b5565b82525050565b613e31816143bf565b82525050565b6000613e438284613a64565b60148201915081905092915050565b6000613e5e8284613b4b565b915081905092915050565b6000613e758285613b4b565b9150613e818284613b1a565b9150613e8c82613cbf565b91508190509392505050565b6000613ea382613d28565b9150819050919050565b6000602082019050613ec26000830184613a55565b92915050565b6000608082019050613edd6000830187613a55565b613eea6020830186613a55565b613ef76040830185613e19565b8181036060830152613f098184613aa8565b905095945050505050565b6000602082019050613f296000830184613a8a565b92915050565b6000602082019050613f446000830184613a99565b92915050565b60006020820190508181036000830152613f648184613ae1565b905092915050565b60006020820190508181036000830152613f8581613bca565b9050919050565b60006020820190508181036000830152613fa581613bed565b9050919050565b60006020820190508181036000830152613fc581613c10565b9050919050565b60006020820190508181036000830152613fe581613c33565b9050919050565b6000602082019050818103600083015261400581613c56565b9050919050565b6000602082019050818103600083015261402581613c79565b9050919050565b6000602082019050818103600083015261404581613c9c565b9050919050565b6000602082019050818103600083015261406581613ce2565b9050919050565b6000602082019050818103600083015261408581613d05565b9050919050565b600060208201905081810360008301526140a581613d4b565b9050919050565b600060208201905081810360008301526140c581613d6e565b9050919050565b600060208201905081810360008301526140e581613d91565b9050919050565b6000602082019050818103600083015261410581613db4565b9050919050565b60006060820190506141216000830184613dd7565b92915050565b600060208201905061413c6000830184613e19565b92915050565b600061414c61415d565b90506141588282614447565b919050565b6000604051905090565b600067ffffffffffffffff821115614182576141816145d2565b5b61418b8261461f565b9050602081019050919050565b600067ffffffffffffffff8211156141b3576141b26145d2565b5b6141bc8261461f565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614237826143b5565b9150614242836143b5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561427757614276614516565b5b828201905092915050565b600061428d826143b5565b9150614298836143b5565b9250826142a8576142a7614545565b5b828204905092915050565b60006142be826143b5565b91506142c9836143b5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561430257614301614516565b5b828202905092915050565b6000614318826143b5565b9150614323836143b5565b92508282101561433657614335614516565b5b828203905092915050565b600061434c82614395565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156144005780820151818401526020810190506143e5565b8381111561440f576000848401525b50505050565b6000600282049050600182168061442d57607f821691505b6020821081141561444157614440614574565b5b50919050565b6144508261461f565b810181811067ffffffffffffffff8211171561446f5761446e6145d2565b5b80604052505050565b6000614483826143b5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144b6576144b5614516565b5b600182019050919050565b60006144cc826144d3565b9050919050565b60006144de82614630565b9050919050565b60006144f0826143b5565b91506144fb836143b5565b92508261450b5761450a614545565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f57686974656c697374696e67206e6f7420737461727465640000000000000000600082015250565b7f53616c65206973206e6f74204163746976650000000000000000000000000000600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f4e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b7f5175616e74697479206578636565647320616c6c6f776564204d696e74730000600082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6148d381614341565b81146148de57600080fd5b50565b6148ea81614353565b81146148f557600080fd5b50565b6149018161435f565b811461490c57600080fd5b50565b61491881614369565b811461492357600080fd5b50565b61492f816143b5565b811461493a57600080fd5b5056fea2646970667358221220c1d411b0cff381a15df8b0cf0e655b1a03011c98680db2a598966f5e784fc12564736f6c63430008070033

Deployed Bytecode Sourcemap

31755:4948:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35781:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14010:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36111:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17123:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18626:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18189:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13259:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32477:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19491:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31846:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32110:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35573:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36271:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19732:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35959:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34824:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32313:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16931:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35883:72;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14379:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3823:103;;;;;;;;;;;;;:::i;:::-;;31945:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32188:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3600:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35149:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17292:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36036:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33577:547;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18902:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35301:181;;;;;;;;;;;;;:::i;:::-;;35675:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19988:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35486:83;;;;;;;;;;;;;:::i;:::-;;36197:70;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34131:679;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32347:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32032:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32828:745;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35038:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19260:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3935:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36352:251;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35781:98;3745:12;:10;:12::i;:::-;3734:23;;:7;:5;:7::i;:::-;:23;;;3726:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35872:1:::1;35854:15;:19;;;;35781:98:::0;:::o;14010:305::-;14112:4;14164:25;14149:40;;;:11;:40;;;;:105;;;;14221:33;14206:48;;;:11;:48;;;;14149:105;:158;;;;14271:36;14295:11;14271:23;:36::i;:::-;14149:158;14129:178;;14010:305;;;:::o;36111:80::-;3745:12;:10;:12::i;:::-;3734:23;;:7;:5;:7::i;:::-;:23;;;3726:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36170:15:::1;36180:1;36183;36170:9;:15::i;:::-;36111:80:::0;;:::o;17123:100::-;17177:13;17210:5;17203:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17123:100;:::o;18626:204::-;18694:7;18719:16;18727:7;18719;:16::i;:::-;18714:64;;18744:34;;;;;;;;;;;;;;18714:64;18798:15;:24;18814:7;18798:24;;;;;;;;;;;;;;;;;;;;;18791:31;;18626:204;;;:::o;18189:371::-;18262:13;18278:24;18294:7;18278:15;:24::i;:::-;18262:40;;18323:5;18317:11;;:2;:11;;;18313:48;;;18337:24;;;;;;;;;;;;;;18313:48;18394:5;18378:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;18404:37;18421:5;18428:12;:10;:12::i;:::-;18404:16;:37::i;:::-;18403:38;18378:63;18374:138;;;18465:35;;;;;;;;;;;;;;18374:138;18524:28;18533:2;18537:7;18546:5;18524:8;:28::i;:::-;18251:309;18189:371;;:::o;13259:303::-;13303:7;13528:15;:13;:15::i;:::-;13513:12;;13497:13;;:28;:46;13490:53;;13259:303;:::o;32477:22::-;;;;:::o;19491:170::-;19625:28;19635:4;19641:2;19645:7;19625:9;:28::i;:::-;19491:170;;;:::o;31846:94::-;;;;:::o;32110:34::-;;;;:::o;35573:98::-;3745:12;:10;:12::i;:::-;3734:23;;:7;:5;:7::i;:::-;:23;;;3726:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35656:9:::1;35648:5;:17;;;;35573:98:::0;:::o;36271:74::-;3745:12;:10;:12::i;:::-;3734:23;;:7;:5;:7::i;:::-;:23;;;3726:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36338:1:::1;36328:7;:11;;;;36271:74:::0;:::o;19732:185::-;19870:39;19887:4;19893:2;19897:7;19870:39;;;;;;;;;;;;:16;:39::i;:::-;19732:185;;;:::o;35959:73::-;35999:4;36020:6;;36013:13;;35959:73;:::o;34824:98::-;3745:12;:10;:12::i;:::-;3734:23;;:7;:5;:7::i;:::-;:23;;;3726:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34909:7:::1;34893:13;:23;;;;;;;;;;;;:::i;:::-;;34824:98:::0;:::o;32313:29::-;;;;;;;;;;;;;:::o;16931:125::-;16995:7;17022:21;17035:7;17022:12;:21::i;:::-;:26;;;17015:33;;16931:125;;;:::o;35883:72::-;3745:12;:10;:12::i;:::-;3734:23;;:7;:5;:7::i;:::-;:23;;;3726:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35948:1:::1;35939:6;:10;;;;35883:72:::0;:::o;14379:206::-;14443:7;14484:1;14467:19;;:5;:19;;;14463:60;;;14495:28;;;;;;;;;;;;;;14463:60;14549:12;:19;14562:5;14549:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;14541:36;;14534:43;;14379:206;;;:::o;3823:103::-;3745:12;:10;:12::i;:::-;3734:23;;:7;:5;:7::i;:::-;:23;;;3726:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3888:30:::1;3915:1;3888:18;:30::i;:::-;3823:103::o:0;31945:77::-;3745:12;:10;:12::i;:::-;3734:23;;:7;:5;:7::i;:::-;:23;;;3726:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32015:1:::1;32002:10;:14;;;;31945:77:::0;:::o;32188:35::-;;;;:::o;3600:87::-;3646:7;3673:6;;;;;;;;;;;3666:13;;3600:87;:::o;35149:148::-;35230:21;;:::i;:::-;35270;35283:7;35270:12;:21::i;:::-;35263:28;;35149:148;;;:::o;17292:104::-;17348:13;17381:7;17374:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17292:104;:::o;36036:71::-;36075:4;36096:5;;36089:12;;36036:71;:::o;33577:547::-;32762:10;32749:23;;:9;:23;;;32741:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33664:1:::1;33654:6;;:11;33646:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;33754:7;;32278:4;33731:30;;;;:::i;:::-;33719:8;33703:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:58;;33695:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;33838:15;;33826:8;33799:24;33812:10;33799:12;:24::i;:::-;:35;;;;:::i;:::-;:54;;33791:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;33916:17;;33904:8;:29;;33896:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;33995:8;33987:5;;:16;;;;:::i;:::-;33974:9;:29;;33966:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34037:31;34047:10;34059:8;34037:9;:31::i;:::-;34098:6;;34081:13;:11;:13::i;:::-;:23;34078:41;;34116:1;34107:6;:10;;;;34078:41;33577:547:::0;:::o;18902:287::-;19013:12;:10;:12::i;:::-;19001:24;;:8;:24;;;18997:54;;;19034:17;;;;;;;;;;;;;;18997:54;19109:8;19064:18;:32;19083:12;:10;:12::i;:::-;19064:32;;;;;;;;;;;;;;;:42;19097:8;19064:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;19162:8;19133:48;;19148:12;:10;:12::i;:::-;19133:48;;;19172:8;19133:48;;;;;;:::i;:::-;;;;;;;;18902:287;;:::o;35301:181::-;3745:12;:10;:12::i;:::-;3734:23;;:7;:5;:7::i;:::-;:23;;;3726:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1382:1:::1;1528:7;;:19;;1520:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1382:1;1589:7;:18;;;;35366:12:::2;35384:10;:15;;35407:21;35384:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35365:68;;;35448:7;35440:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;35358:124;1338:1:::1;1632:7;:22;;;;35301:181::o:0;35675:102::-;3745:12;:10;:12::i;:::-;3734:23;;:7;:5;:7::i;:::-;:23;;;3726:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35770:1:::1;35750:17;:21;;;;35675:102:::0;:::o;19988:369::-;20155:28;20165:4;20171:2;20175:7;20155:9;:28::i;:::-;20198:15;:2;:13;;;:15::i;:::-;:76;;;;;20218:56;20249:4;20255:2;20259:7;20268:5;20218:30;:56::i;:::-;20217:57;20198:76;20194:156;;;20298:40;;;;;;;;;;;;;;20194:156;19988:369;;;;:::o;35486:83::-;3745:12;:10;:12::i;:::-;3734:23;;:7;:5;:7::i;:::-;:23;;;3726:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35554:9:::1;;;;;;;;;;;35553:10;35541:9;;:22;;;;;;;;;;;;;;;;;;35486:83::o:0;36197:70::-;3745:12;:10;:12::i;:::-;3734:23;;:7;:5;:7::i;:::-;:23;;;3726:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36260:1:::1;36251:6;:10;;;;36197:70:::0;:::o;34131:679::-;34204:13;34248:4;34235:17;;:9;;;;;;;;;;;:17;;;34232:573;;;34272:16;34280:7;34272;:16::i;:::-;34264:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;34346:21;34370:10;:8;:10::i;:::-;34346:34;;34425:1;34407:7;34401:21;:25;:118;;;;;;;;;;;;;;;;;34462:13;34477:18;:7;:16;:18::i;:::-;34445:59;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34401:118;34387:132;;;;;34232:573;34554:5;34541:18;;:9;;;;;;;;;;;:18;;;34538:267;;;34579:16;34587:7;34579;:16::i;:::-;34571:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;34653:21;34677:16;34653:40;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34738:1;34720:7;34714:21;:25;:83;;;;;;;;;;;;;;;;;34775:16;34758:34;;;;;;;;:::i;:::-;;;;;;;;;;;;;34714:83;34700:97;;;;;34538:267;34131:679;;;;:::o;32347:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32032:36::-;;;;:::o;32828:745::-;32762:10;32749:23;;:9;:23;;;32741:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32938:12:::1;32980:10;32963:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;32953:39;;;;;;32938:54;;33007:50;33027:11;;33007:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33040:10;;33052:4;33007:18;:50::i;:::-;32999:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;33101:1;33091:6;;:11;33083:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;33197:7;;32278:4;33174:30;;;;:::i;:::-;33162:8;33146:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:58;;33138:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;33284:15;;33272:8;33245:24;33258:10;33245:12;:24::i;:::-;:35;;;;:::i;:::-;:54;;33234:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;33367:17;;33355:8;:29;;33345:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33446:8;33438:5;;:16;;;;:::i;:::-;33425:9;:29;;33417:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33488:31;33498:10;33510:8;33488:9;:31::i;:::-;33546:6;;33529:13;:11;:13::i;:::-;:23;33526:41;;33564:1;33555:6;:10;;;;33526:41;32931:642;32828:745:::0;;;:::o;35038:107::-;35096:7;35119:20;35133:5;35119:13;:20::i;:::-;35112:27;;35038:107;;;:::o;19260:164::-;19357:4;19381:18;:25;19400:5;19381:25;;;;;;;;;;;;;;;:35;19407:8;19381:35;;;;;;;;;;;;;;;;;;;;;;;;;19374:42;;19260:164;;;;:::o;3935:201::-;3745:12;:10;:12::i;:::-;3734:23;;:7;:5;:7::i;:::-;:23;;;3726:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4044:1:::1;4024:22;;:8;:22;;;;4016:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4100:28;4119:8;4100:18;:28::i;:::-;3935:201:::0;:::o;36352:251::-;3745:12;:10;:12::i;:::-;3734:23;;:7;:5;:7::i;:::-;:23;;;3726:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36485:6:::1;36476;:15;;;;36509:4;36500:6;:13;;;;36530:5;36522;:13;;;;36562:3;36544:15;:21;;;;36594:3;36574:17;:23;;;;36352:251:::0;;;;;:::o;3143:98::-;3196:7;3223:10;3216:17;;3143:98;:::o;8254:157::-;8339:4;8378:25;8363:40;;;:11;:40;;;;8356:47;;8254:157;;;:::o;20794:104::-;20863:27;20873:2;20877:8;20863:27;;;;;;;;;;;;:9;:27::i;:::-;20794:104;;:::o;20612:174::-;20669:4;20712:7;20693:15;:13;:15::i;:::-;:26;;:53;;;;;20733:13;;20723:7;:23;20693:53;:85;;;;;20751:11;:20;20763:7;20751:20;;;;;;;;;;;:27;;;;;;;;;;;;20750:28;20693:85;20686:92;;20612:174;;;:::o;28769:196::-;28911:2;28884:15;:24;28900:7;28884:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;28949:7;28945:2;28929:28;;28938:5;28929:28;;;;;;;;;;;;28769:196;;;:::o;36607:93::-;36664:7;36691:1;36684:8;;36607:93;:::o;23712:2130::-;23827:35;23865:21;23878:7;23865:12;:21::i;:::-;23827:59;;23925:4;23903:26;;:13;:18;;;:26;;;23899:67;;23938:28;;;;;;;;;;;;;;23899:67;23979:22;24021:4;24005:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;24042:36;24059:4;24065:12;:10;:12::i;:::-;24042:16;:36::i;:::-;24005:73;:126;;;;24119:12;:10;:12::i;:::-;24095:36;;:20;24107:7;24095:11;:20::i;:::-;:36;;;24005:126;23979:153;;24150:17;24145:66;;24176:35;;;;;;;;;;;;;;24145:66;24240:1;24226:16;;:2;:16;;;24222:52;;;24251:23;;;;;;;;;;;;;;24222:52;24287:43;24309:4;24315:2;24319:7;24328:1;24287:21;:43::i;:::-;24395:35;24412:1;24416:7;24425:4;24395:8;:35::i;:::-;24756:1;24726:12;:18;24739:4;24726:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24800:1;24772:12;:16;24785:2;24772:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24818:31;24852:11;:20;24864:7;24852:20;;;;;;;;;;;24818:54;;24903:2;24887:8;:13;;;:18;;;;;;;;;;;;;;;;;;24953:15;24920:8;:23;;;:49;;;;;;;;;;;;;;;;;;25221:19;25253:1;25243:7;:11;25221:33;;25269:31;25303:11;:24;25315:11;25303:24;;;;;;;;;;;25269:58;;25371:1;25346:27;;:8;:13;;;;;;;;;;;;:27;;;25342:384;;;25556:13;;25541:11;:28;25537:174;;25610:4;25594:8;:13;;;:20;;;;;;;;;;;;;;;;;;25663:13;:28;;;25637:8;:23;;;:54;;;;;;;;;;;;;;;;;;25537:174;25342:384;24701:1036;;;25773:7;25769:2;25754:27;;25763:4;25754:27;;;;;;;;;;;;25792:42;25813:4;25819:2;25823:7;25832:1;25792:20;:42::i;:::-;23816:2026;;23712:2130;;;:::o;15760:1109::-;15822:21;;:::i;:::-;15856:12;15871:7;15856:22;;15939:4;15920:15;:13;:15::i;:::-;:23;;:47;;;;;15954:13;;15947:4;:20;15920:47;15916:886;;;15988:31;16022:11;:17;16034:4;16022:17;;;;;;;;;;;15988:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16063:9;:16;;;16058:729;;16134:1;16108:28;;:9;:14;;;:28;;;16104:101;;16172:9;16165:16;;;;;;16104:101;16507:261;16514:4;16507:261;;;16547:6;;;;;;;;16592:11;:17;16604:4;16592:17;;;;;;;;;;;16580:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16666:1;16640:28;;:9;:14;;;:28;;;16636:109;;16708:9;16701:16;;;;;;16636:109;16507:261;;;16058:729;15969:833;15916:886;16830:31;;;;;;;;;;;;;;15760:1109;;;;:::o;4145:191::-;4219:16;4238:6;;;;;;;;;;;4219:25;;4264:8;4255:6;;:17;;;;;;;;;;;;;;;;;;4319:8;4288:40;;4309:8;4288:40;;;;;;;;;;;;4208:128;4145:191;:::o;4368:197::-;4428:4;4446:12;4513:7;4501:20;4493:28;;4556:1;4549:4;:8;4542:15;;;4368:197;;;:::o;29457:667::-;29620:4;29657:2;29641:36;;;29678:12;:10;:12::i;:::-;29692:4;29698:7;29707:5;29641:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;29637:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29892:1;29875:6;:13;:18;29871:235;;;29921:40;;;;;;;;;;;;;;29871:235;30064:6;30058:13;30049:6;30045:2;30041:15;30034:38;29637:480;29770:45;;;29760:55;;;:6;:55;;;;29753:62;;;29457:667;;;;;;:::o;34926:108::-;34986:13;35015;35008:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34926:108;:::o;1760:533::-;1816:13;1856:1;1847:5;:10;1843:53;;;1874:10;;;;;;;;;;;;;;;;;;;;;1843:53;1906:12;1921:5;1906:20;;1937:14;1962:78;1977:1;1969:4;:9;1962:78;;1995:8;;;;;:::i;:::-;;;;2026:2;2018:10;;;;;:::i;:::-;;;1962:78;;;2050:19;2082:6;2072:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2050:39;;2100:154;2116:1;2107:5;:10;2100:154;;2144:1;2134:11;;;;;:::i;:::-;;;2211:2;2203:5;:10;;;;:::i;:::-;2190:2;:24;;;;:::i;:::-;2177:39;;2160:6;2167;2160:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2240:2;2231:11;;;;;:::i;:::-;;;2100:154;;;2278:6;2264:21;;;;;1760:533;;;;:::o;307:190::-;432:4;485;456:25;469:5;476:4;456:12;:25::i;:::-;:33;449:40;;307:190;;;;;:::o;14667:137::-;14728:7;14763:12;:19;14776:5;14763:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;14755:41;;14748:48;;14667:137;;;:::o;21261:163::-;21384:32;21390:2;21394:8;21404:5;21411:4;21384:5;:32::i;:::-;21261:163;;;:::o;30772:159::-;;;;;:::o;31590:158::-;;;;;:::o;502:517::-;585:7;605:20;628:4;605:27;;648:9;643:339;667:5;:12;663:1;:16;643:339;;;701:20;724:5;730:1;724:8;;;;;;;;:::i;:::-;;;;;;;;701:31;;767:12;751;:28;747:224;;815:42;830:12;844;815:14;:42::i;:::-;800:57;;747:224;;;913:42;928:12;942;913:14;:42::i;:::-;898:57;;747:224;686:296;681:3;;;;;:::i;:::-;;;;643:339;;;;999:12;992:19;;;502:517;;;;:::o;21683:1775::-;21822:20;21845:13;;21822:36;;21887:1;21873:16;;:2;:16;;;21869:48;;;21898:19;;;;;;;;;;;;;;21869:48;21944:1;21932:8;:13;21928:44;;;21954:18;;;;;;;;;;;;;;21928:44;21985:61;22015:1;22019:2;22023:12;22037:8;21985:21;:61::i;:::-;22358:8;22323:12;:16;22336:2;22323:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22422:8;22382:12;:16;22395:2;22382:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22481:2;22448:11;:25;22460:12;22448:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;22548:15;22498:11;:25;22510:12;22498:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;22581:20;22604:12;22581:35;;22631:11;22660:8;22645:12;:23;22631:37;;22689:4;:23;;;;;22697:15;:2;:13;;;:15::i;:::-;22689:23;22685:641;;;22733:314;22789:12;22785:2;22764:38;;22781:1;22764:38;;;;;;;;;;;;22830:69;22869:1;22873:2;22877:14;;;;;;22893:5;22830:30;:69::i;:::-;22825:174;;22935:40;;;;;;;;;;;;;;22825:174;23042:3;23026:12;:19;;22733:314;;23128:12;23111:13;;:29;23107:43;;23142:8;;;23107:43;22685:641;;;23191:120;23247:14;;;;;;23243:2;23222:40;;23239:1;23222:40;;;;;;;;;;;;23306:3;23290:12;:19;;23191:120;;22685:641;23356:12;23340:13;:28;;;;22298:1082;;23390:60;23419:1;23423:2;23427:12;23441:8;23390:20;:60::i;:::-;21811:1647;21683:1775;;;;:::o;1027:224::-;1095:13;1158:1;1152:4;1145:15;1187:1;1181:4;1174:15;1228:4;1222;1212:21;1203:30;;1027:224;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:139::-;1762:5;1800:6;1787:20;1778:29;;1816:33;1843:5;1816:33;:::i;:::-;1716:139;;;;:::o;1861:137::-;1906:5;1944:6;1931:20;1922:29;;1960:32;1986:5;1960:32;:::i;:::-;1861:137;;;;:::o;2004:141::-;2060:5;2091:6;2085:13;2076:22;;2107:32;2133:5;2107:32;:::i;:::-;2004:141;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2522:340::-;2578:5;2627:3;2620:4;2612:6;2608:17;2604:27;2594:122;;2635:79;;:::i;:::-;2594:122;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2584:278;2522:340;;;;:::o;2868:139::-;2914:5;2952:6;2939:20;2930:29;;2968:33;2995:5;2968:33;:::i;:::-;2868:139;;;;:::o;3013:329::-;3072:6;3121:2;3109:9;3100:7;3096:23;3092:32;3089:119;;;3127:79;;:::i;:::-;3089:119;3247:1;3272:53;3317:7;3308:6;3297:9;3293:22;3272:53;:::i;:::-;3262:63;;3218:117;3013:329;;;;:::o;3348:474::-;3416:6;3424;3473:2;3461:9;3452:7;3448:23;3444:32;3441:119;;;3479:79;;:::i;:::-;3441:119;3599:1;3624:53;3669:7;3660:6;3649:9;3645:22;3624:53;:::i;:::-;3614:63;;3570:117;3726:2;3752:53;3797:7;3788:6;3777:9;3773:22;3752:53;:::i;:::-;3742:63;;3697:118;3348:474;;;;;:::o;3828:619::-;3905:6;3913;3921;3970:2;3958:9;3949:7;3945:23;3941:32;3938:119;;;3976:79;;:::i;:::-;3938:119;4096:1;4121:53;4166:7;4157:6;4146:9;4142:22;4121:53;:::i;:::-;4111:63;;4067:117;4223:2;4249:53;4294:7;4285:6;4274:9;4270:22;4249:53;:::i;:::-;4239:63;;4194:118;4351:2;4377:53;4422:7;4413:6;4402:9;4398:22;4377:53;:::i;:::-;4367:63;;4322:118;3828:619;;;;;:::o;4453:943::-;4548:6;4556;4564;4572;4621:3;4609:9;4600:7;4596:23;4592:33;4589:120;;;4628:79;;:::i;:::-;4589:120;4748:1;4773:53;4818:7;4809:6;4798:9;4794:22;4773:53;:::i;:::-;4763:63;;4719:117;4875:2;4901:53;4946:7;4937:6;4926:9;4922:22;4901:53;:::i;:::-;4891:63;;4846:118;5003:2;5029:53;5074:7;5065:6;5054:9;5050:22;5029:53;:::i;:::-;5019:63;;4974:118;5159:2;5148:9;5144:18;5131:32;5190:18;5182:6;5179:30;5176:117;;;5212:79;;:::i;:::-;5176:117;5317:62;5371:7;5362:6;5351:9;5347:22;5317:62;:::i;:::-;5307:72;;5102:287;4453:943;;;;;;;:::o;5402:468::-;5467:6;5475;5524:2;5512:9;5503:7;5499:23;5495:32;5492:119;;;5530:79;;:::i;:::-;5492:119;5650:1;5675:53;5720:7;5711:6;5700:9;5696:22;5675:53;:::i;:::-;5665:63;;5621:117;5777:2;5803:50;5845:7;5836:6;5825:9;5821:22;5803:50;:::i;:::-;5793:60;;5748:115;5402:468;;;;;:::o;5876:474::-;5944:6;5952;6001:2;5989:9;5980:7;5976:23;5972:32;5969:119;;;6007:79;;:::i;:::-;5969:119;6127:1;6152:53;6197:7;6188:6;6177:9;6173:22;6152:53;:::i;:::-;6142:63;;6098:117;6254:2;6280:53;6325:7;6316:6;6305:9;6301:22;6280:53;:::i;:::-;6270:63;;6225:118;5876:474;;;;;:::o;6356:329::-;6415:6;6464:2;6452:9;6443:7;6439:23;6435:32;6432:119;;;6470:79;;:::i;:::-;6432:119;6590:1;6615:53;6660:7;6651:6;6640:9;6636:22;6615:53;:::i;:::-;6605:63;;6561:117;6356:329;;;;:::o;6691:327::-;6749:6;6798:2;6786:9;6777:7;6773:23;6769:32;6766:119;;;6804:79;;:::i;:::-;6766:119;6924:1;6949:52;6993:7;6984:6;6973:9;6969:22;6949:52;:::i;:::-;6939:62;;6895:116;6691:327;;;;:::o;7024:349::-;7093:6;7142:2;7130:9;7121:7;7117:23;7113:32;7110:119;;;7148:79;;:::i;:::-;7110:119;7268:1;7293:63;7348:7;7339:6;7328:9;7324:22;7293:63;:::i;:::-;7283:73;;7239:127;7024:349;;;;:::o;7379:509::-;7448:6;7497:2;7485:9;7476:7;7472:23;7468:32;7465:119;;;7503:79;;:::i;:::-;7465:119;7651:1;7640:9;7636:17;7623:31;7681:18;7673:6;7670:30;7667:117;;;7703:79;;:::i;:::-;7667:117;7808:63;7863:7;7854:6;7843:9;7839:22;7808:63;:::i;:::-;7798:73;;7594:287;7379:509;;;;:::o;7894:329::-;7953:6;8002:2;7990:9;7981:7;7977:23;7973:32;7970:119;;;8008:79;;:::i;:::-;7970:119;8128:1;8153:53;8198:7;8189:6;8178:9;8174:22;8153:53;:::i;:::-;8143:63;;8099:117;7894:329;;;;:::o;8229:704::-;8324:6;8332;8340;8389:2;8377:9;8368:7;8364:23;8360:32;8357:119;;;8395:79;;:::i;:::-;8357:119;8515:1;8540:53;8585:7;8576:6;8565:9;8561:22;8540:53;:::i;:::-;8530:63;;8486:117;8670:2;8659:9;8655:18;8642:32;8701:18;8693:6;8690:30;8687:117;;;8723:79;;:::i;:::-;8687:117;8836:80;8908:7;8899:6;8888:9;8884:22;8836:80;:::i;:::-;8818:98;;;;8613:313;8229:704;;;;;:::o;8939:911::-;9034:6;9042;9050;9058;9066;9115:3;9103:9;9094:7;9090:23;9086:33;9083:120;;;9122:79;;:::i;:::-;9083:120;9242:1;9267:53;9312:7;9303:6;9292:9;9288:22;9267:53;:::i;:::-;9257:63;;9213:117;9369:2;9395:53;9440:7;9431:6;9420:9;9416:22;9395:53;:::i;:::-;9385:63;;9340:118;9497:2;9523:53;9568:7;9559:6;9548:9;9544:22;9523:53;:::i;:::-;9513:63;;9468:118;9625:2;9651:53;9696:7;9687:6;9676:9;9672:22;9651:53;:::i;:::-;9641:63;;9596:118;9753:3;9780:53;9825:7;9816:6;9805:9;9801:22;9780:53;:::i;:::-;9770:63;;9724:119;8939:911;;;;;;;;:::o;9856:108::-;9933:24;9951:5;9933:24;:::i;:::-;9928:3;9921:37;9856:108;;:::o;9970:118::-;10057:24;10075:5;10057:24;:::i;:::-;10052:3;10045:37;9970:118;;:::o;10094:157::-;10199:45;10219:24;10237:5;10219:24;:::i;:::-;10199:45;:::i;:::-;10194:3;10187:58;10094:157;;:::o;10257:99::-;10328:21;10343:5;10328:21;:::i;:::-;10323:3;10316:34;10257:99;;:::o;10362:109::-;10443:21;10458:5;10443:21;:::i;:::-;10438:3;10431:34;10362:109;;:::o;10477:118::-;10564:24;10582:5;10564:24;:::i;:::-;10559:3;10552:37;10477:118;;:::o;10601:360::-;10687:3;10715:38;10747:5;10715:38;:::i;:::-;10769:70;10832:6;10827:3;10769:70;:::i;:::-;10762:77;;10848:52;10893:6;10888:3;10881:4;10874:5;10870:16;10848:52;:::i;:::-;10925:29;10947:6;10925:29;:::i;:::-;10920:3;10916:39;10909:46;;10691:270;10601:360;;;;:::o;10967:364::-;11055:3;11083:39;11116:5;11083:39;:::i;:::-;11138:71;11202:6;11197:3;11138:71;:::i;:::-;11131:78;;11218:52;11263:6;11258:3;11251:4;11244:5;11240:16;11218:52;:::i;:::-;11295:29;11317:6;11295:29;:::i;:::-;11290:3;11286:39;11279:46;;11059:272;10967:364;;;;:::o;11337:377::-;11443:3;11471:39;11504:5;11471:39;:::i;:::-;11526:89;11608:6;11603:3;11526:89;:::i;:::-;11519:96;;11624:52;11669:6;11664:3;11657:4;11650:5;11646:16;11624:52;:::i;:::-;11701:6;11696:3;11692:16;11685:23;;11447:267;11337:377;;;;:::o;11744:845::-;11847:3;11884:5;11878:12;11913:36;11939:9;11913:36;:::i;:::-;11965:89;12047:6;12042:3;11965:89;:::i;:::-;11958:96;;12085:1;12074:9;12070:17;12101:1;12096:137;;;;12247:1;12242:341;;;;12063:520;;12096:137;12180:4;12176:9;12165;12161:25;12156:3;12149:38;12216:6;12211:3;12207:16;12200:23;;12096:137;;12242:341;12309:38;12341:5;12309:38;:::i;:::-;12369:1;12383:154;12397:6;12394:1;12391:13;12383:154;;;12471:7;12465:14;12461:1;12456:3;12452:11;12445:35;12521:1;12512:7;12508:15;12497:26;;12419:4;12416:1;12412:12;12407:17;;12383:154;;;12566:6;12561:3;12557:16;12550:23;;12249:334;;12063:520;;11851:738;;11744:845;;;;:::o;12595:366::-;12737:3;12758:67;12822:2;12817:3;12758:67;:::i;:::-;12751:74;;12834:93;12923:3;12834:93;:::i;:::-;12952:2;12947:3;12943:12;12936:19;;12595:366;;;:::o;12967:::-;13109:3;13130:67;13194:2;13189:3;13130:67;:::i;:::-;13123:74;;13206:93;13295:3;13206:93;:::i;:::-;13324:2;13319:3;13315:12;13308:19;;12967:366;;;:::o;13339:::-;13481:3;13502:67;13566:2;13561:3;13502:67;:::i;:::-;13495:74;;13578:93;13667:3;13578:93;:::i;:::-;13696:2;13691:3;13687:12;13680:19;;13339:366;;;:::o;13711:::-;13853:3;13874:67;13938:2;13933:3;13874:67;:::i;:::-;13867:74;;13950:93;14039:3;13950:93;:::i;:::-;14068:2;14063:3;14059:12;14052:19;;13711:366;;;:::o;14083:::-;14225:3;14246:67;14310:2;14305:3;14246:67;:::i;:::-;14239:74;;14322:93;14411:3;14322:93;:::i;:::-;14440:2;14435:3;14431:12;14424:19;;14083:366;;;:::o;14455:::-;14597:3;14618:67;14682:2;14677:3;14618:67;:::i;:::-;14611:74;;14694:93;14783:3;14694:93;:::i;:::-;14812:2;14807:3;14803:12;14796:19;;14455:366;;;:::o;14827:::-;14969:3;14990:67;15054:2;15049:3;14990:67;:::i;:::-;14983:74;;15066:93;15155:3;15066:93;:::i;:::-;15184:2;15179:3;15175:12;15168:19;;14827:366;;;:::o;15199:400::-;15359:3;15380:84;15462:1;15457:3;15380:84;:::i;:::-;15373:91;;15473:93;15562:3;15473:93;:::i;:::-;15591:1;15586:3;15582:11;15575:18;;15199:400;;;:::o;15605:366::-;15747:3;15768:67;15832:2;15827:3;15768:67;:::i;:::-;15761:74;;15844:93;15933:3;15844:93;:::i;:::-;15962:2;15957:3;15953:12;15946:19;;15605:366;;;:::o;15977:::-;16119:3;16140:67;16204:2;16199:3;16140:67;:::i;:::-;16133:74;;16216:93;16305:3;16216:93;:::i;:::-;16334:2;16329:3;16325:12;16318:19;;15977:366;;;:::o;16349:398::-;16508:3;16529:83;16610:1;16605:3;16529:83;:::i;:::-;16522:90;;16621:93;16710:3;16621:93;:::i;:::-;16739:1;16734:3;16730:11;16723:18;;16349:398;;;:::o;16753:366::-;16895:3;16916:67;16980:2;16975:3;16916:67;:::i;:::-;16909:74;;16992:93;17081:3;16992:93;:::i;:::-;17110:2;17105:3;17101:12;17094:19;;16753:366;;;:::o;17125:::-;17267:3;17288:67;17352:2;17347:3;17288:67;:::i;:::-;17281:74;;17364:93;17453:3;17364:93;:::i;:::-;17482:2;17477:3;17473:12;17466:19;;17125:366;;;:::o;17497:::-;17639:3;17660:67;17724:2;17719:3;17660:67;:::i;:::-;17653:74;;17736:93;17825:3;17736:93;:::i;:::-;17854:2;17849:3;17845:12;17838:19;;17497:366;;;:::o;17869:::-;18011:3;18032:67;18096:2;18091:3;18032:67;:::i;:::-;18025:74;;18108:93;18197:3;18108:93;:::i;:::-;18226:2;18221:3;18217:12;18210:19;;17869:366;;;:::o;18311:697::-;18470:4;18465:3;18461:14;18557:4;18550:5;18546:16;18540:23;18576:63;18633:4;18628:3;18624:14;18610:12;18576:63;:::i;:::-;18485:164;18741:4;18734:5;18730:16;18724:23;18760:61;18815:4;18810:3;18806:14;18792:12;18760:61;:::i;:::-;18659:172;18915:4;18908:5;18904:16;18898:23;18934:57;18985:4;18980:3;18976:14;18962:12;18934:57;:::i;:::-;18841:160;18439:569;18311:697;;:::o;19014:118::-;19101:24;19119:5;19101:24;:::i;:::-;19096:3;19089:37;19014:118;;:::o;19138:105::-;19213:23;19230:5;19213:23;:::i;:::-;19208:3;19201:36;19138:105;;:::o;19249:256::-;19361:3;19376:75;19447:3;19438:6;19376:75;:::i;:::-;19476:2;19471:3;19467:12;19460:19;;19496:3;19489:10;;19249:256;;;;:::o;19511:269::-;19640:3;19662:92;19750:3;19741:6;19662:92;:::i;:::-;19655:99;;19771:3;19764:10;;19511:269;;;;:::o;19786:695::-;20064:3;20086:92;20174:3;20165:6;20086:92;:::i;:::-;20079:99;;20195:95;20286:3;20277:6;20195:95;:::i;:::-;20188:102;;20307:148;20451:3;20307:148;:::i;:::-;20300:155;;20472:3;20465:10;;19786:695;;;;;:::o;20487:379::-;20671:3;20693:147;20836:3;20693:147;:::i;:::-;20686:154;;20857:3;20850:10;;20487:379;;;:::o;20872:222::-;20965:4;21003:2;20992:9;20988:18;20980:26;;21016:71;21084:1;21073:9;21069:17;21060:6;21016:71;:::i;:::-;20872:222;;;;:::o;21100:640::-;21295:4;21333:3;21322:9;21318:19;21310:27;;21347:71;21415:1;21404:9;21400:17;21391:6;21347:71;:::i;:::-;21428:72;21496:2;21485:9;21481:18;21472:6;21428:72;:::i;:::-;21510;21578:2;21567:9;21563:18;21554:6;21510:72;:::i;:::-;21629:9;21623:4;21619:20;21614:2;21603:9;21599:18;21592:48;21657:76;21728:4;21719:6;21657:76;:::i;:::-;21649:84;;21100:640;;;;;;;:::o;21746:210::-;21833:4;21871:2;21860:9;21856:18;21848:26;;21884:65;21946:1;21935:9;21931:17;21922:6;21884:65;:::i;:::-;21746:210;;;;:::o;21962:222::-;22055:4;22093:2;22082:9;22078:18;22070:26;;22106:71;22174:1;22163:9;22159:17;22150:6;22106:71;:::i;:::-;21962:222;;;;:::o;22190:313::-;22303:4;22341:2;22330:9;22326:18;22318:26;;22390:9;22384:4;22380:20;22376:1;22365:9;22361:17;22354:47;22418:78;22491:4;22482:6;22418:78;:::i;:::-;22410:86;;22190:313;;;;:::o;22509:419::-;22675:4;22713:2;22702:9;22698:18;22690:26;;22762:9;22756:4;22752:20;22748:1;22737:9;22733:17;22726:47;22790:131;22916:4;22790:131;:::i;:::-;22782:139;;22509:419;;;:::o;22934:::-;23100:4;23138:2;23127:9;23123:18;23115:26;;23187:9;23181:4;23177:20;23173:1;23162:9;23158:17;23151:47;23215:131;23341:4;23215:131;:::i;:::-;23207:139;;22934:419;;;:::o;23359:::-;23525:4;23563:2;23552:9;23548:18;23540:26;;23612:9;23606:4;23602:20;23598:1;23587:9;23583:17;23576:47;23640:131;23766:4;23640:131;:::i;:::-;23632:139;;23359:419;;;:::o;23784:::-;23950:4;23988:2;23977:9;23973:18;23965:26;;24037:9;24031:4;24027:20;24023:1;24012:9;24008:17;24001:47;24065:131;24191:4;24065:131;:::i;:::-;24057:139;;23784:419;;;:::o;24209:::-;24375:4;24413:2;24402:9;24398:18;24390:26;;24462:9;24456:4;24452:20;24448:1;24437:9;24433:17;24426:47;24490:131;24616:4;24490:131;:::i;:::-;24482:139;;24209:419;;;:::o;24634:::-;24800:4;24838:2;24827:9;24823:18;24815:26;;24887:9;24881:4;24877:20;24873:1;24862:9;24858:17;24851:47;24915:131;25041:4;24915:131;:::i;:::-;24907:139;;24634:419;;;:::o;25059:::-;25225:4;25263:2;25252:9;25248:18;25240:26;;25312:9;25306:4;25302:20;25298:1;25287:9;25283:17;25276:47;25340:131;25466:4;25340:131;:::i;:::-;25332:139;;25059:419;;;:::o;25484:::-;25650:4;25688:2;25677:9;25673:18;25665:26;;25737:9;25731:4;25727:20;25723:1;25712:9;25708:17;25701:47;25765:131;25891:4;25765:131;:::i;:::-;25757:139;;25484:419;;;:::o;25909:::-;26075:4;26113:2;26102:9;26098:18;26090:26;;26162:9;26156:4;26152:20;26148:1;26137:9;26133:17;26126:47;26190:131;26316:4;26190:131;:::i;:::-;26182:139;;25909:419;;;:::o;26334:::-;26500:4;26538:2;26527:9;26523:18;26515:26;;26587:9;26581:4;26577:20;26573:1;26562:9;26558:17;26551:47;26615:131;26741:4;26615:131;:::i;:::-;26607:139;;26334:419;;;:::o;26759:::-;26925:4;26963:2;26952:9;26948:18;26940:26;;27012:9;27006:4;27002:20;26998:1;26987:9;26983:17;26976:47;27040:131;27166:4;27040:131;:::i;:::-;27032:139;;26759:419;;;:::o;27184:::-;27350:4;27388:2;27377:9;27373:18;27365:26;;27437:9;27431:4;27427:20;27423:1;27412:9;27408:17;27401:47;27465:131;27591:4;27465:131;:::i;:::-;27457:139;;27184:419;;;:::o;27609:::-;27775:4;27813:2;27802:9;27798:18;27790:26;;27862:9;27856:4;27852:20;27848:1;27837:9;27833:17;27826:47;27890:131;28016:4;27890:131;:::i;:::-;27882:139;;27609:419;;;:::o;28034:346::-;28189:4;28227:2;28216:9;28212:18;28204:26;;28240:133;28370:1;28359:9;28355:17;28346:6;28240:133;:::i;:::-;28034:346;;;;:::o;28386:222::-;28479:4;28517:2;28506:9;28502:18;28494:26;;28530:71;28598:1;28587:9;28583:17;28574:6;28530:71;:::i;:::-;28386:222;;;;:::o;28614:129::-;28648:6;28675:20;;:::i;:::-;28665:30;;28704:33;28732:4;28724:6;28704:33;:::i;:::-;28614:129;;;:::o;28749:75::-;28782:6;28815:2;28809:9;28799:19;;28749:75;:::o;28830:307::-;28891:4;28981:18;28973:6;28970:30;28967:56;;;29003:18;;:::i;:::-;28967:56;29041:29;29063:6;29041:29;:::i;:::-;29033:37;;29125:4;29119;29115:15;29107:23;;28830:307;;;:::o;29143:308::-;29205:4;29295:18;29287:6;29284:30;29281:56;;;29317:18;;:::i;:::-;29281:56;29355:29;29377:6;29355:29;:::i;:::-;29347:37;;29439:4;29433;29429:15;29421:23;;29143:308;;;:::o;29457:141::-;29506:4;29529:3;29521:11;;29552:3;29549:1;29542:14;29586:4;29583:1;29573:18;29565:26;;29457:141;;;:::o;29604:98::-;29655:6;29689:5;29683:12;29673:22;;29604:98;;;:::o;29708:99::-;29760:6;29794:5;29788:12;29778:22;;29708:99;;;:::o;29813:168::-;29896:11;29930:6;29925:3;29918:19;29970:4;29965:3;29961:14;29946:29;;29813:168;;;;:::o;29987:147::-;30088:11;30125:3;30110:18;;29987:147;;;;:::o;30140:169::-;30224:11;30258:6;30253:3;30246:19;30298:4;30293:3;30289:14;30274:29;;30140:169;;;;:::o;30315:148::-;30417:11;30454:3;30439:18;;30315:148;;;;:::o;30469:305::-;30509:3;30528:20;30546:1;30528:20;:::i;:::-;30523:25;;30562:20;30580:1;30562:20;:::i;:::-;30557:25;;30716:1;30648:66;30644:74;30641:1;30638:81;30635:107;;;30722:18;;:::i;:::-;30635:107;30766:1;30763;30759:9;30752:16;;30469:305;;;;:::o;30780:185::-;30820:1;30837:20;30855:1;30837:20;:::i;:::-;30832:25;;30871:20;30889:1;30871:20;:::i;:::-;30866:25;;30910:1;30900:35;;30915:18;;:::i;:::-;30900:35;30957:1;30954;30950:9;30945:14;;30780:185;;;;:::o;30971:348::-;31011:7;31034:20;31052:1;31034:20;:::i;:::-;31029:25;;31068:20;31086:1;31068:20;:::i;:::-;31063:25;;31256:1;31188:66;31184:74;31181:1;31178:81;31173:1;31166:9;31159:17;31155:105;31152:131;;;31263:18;;:::i;:::-;31152:131;31311:1;31308;31304:9;31293:20;;30971:348;;;;:::o;31325:191::-;31365:4;31385:20;31403:1;31385:20;:::i;:::-;31380:25;;31419:20;31437:1;31419:20;:::i;:::-;31414:25;;31458:1;31455;31452:8;31449:34;;;31463:18;;:::i;:::-;31449:34;31508:1;31505;31501:9;31493:17;;31325:191;;;;:::o;31522:96::-;31559:7;31588:24;31606:5;31588:24;:::i;:::-;31577:35;;31522:96;;;:::o;31624:90::-;31658:7;31701:5;31694:13;31687:21;31676:32;;31624:90;;;:::o;31720:77::-;31757:7;31786:5;31775:16;;31720:77;;;:::o;31803:149::-;31839:7;31879:66;31872:5;31868:78;31857:89;;31803:149;;;:::o;31958:126::-;31995:7;32035:42;32028:5;32024:54;32013:65;;31958:126;;;:::o;32090:77::-;32127:7;32156:5;32145:16;;32090:77;;;:::o;32173:101::-;32209:7;32249:18;32242:5;32238:30;32227:41;;32173:101;;;:::o;32280:154::-;32364:6;32359:3;32354;32341:30;32426:1;32417:6;32412:3;32408:16;32401:27;32280:154;;;:::o;32440:307::-;32508:1;32518:113;32532:6;32529:1;32526:13;32518:113;;;32617:1;32612:3;32608:11;32602:18;32598:1;32593:3;32589:11;32582:39;32554:2;32551:1;32547:10;32542:15;;32518:113;;;32649:6;32646:1;32643:13;32640:101;;;32729:1;32720:6;32715:3;32711:16;32704:27;32640:101;32489:258;32440:307;;;:::o;32753:320::-;32797:6;32834:1;32828:4;32824:12;32814:22;;32881:1;32875:4;32871:12;32902:18;32892:81;;32958:4;32950:6;32946:17;32936:27;;32892:81;33020:2;33012:6;33009:14;32989:18;32986:38;32983:84;;;33039:18;;:::i;:::-;32983:84;32804:269;32753:320;;;:::o;33079:281::-;33162:27;33184:4;33162:27;:::i;:::-;33154:6;33150:40;33292:6;33280:10;33277:22;33256:18;33244:10;33241:34;33238:62;33235:88;;;33303:18;;:::i;:::-;33235:88;33343:10;33339:2;33332:22;33122:238;33079:281;;:::o;33366:233::-;33405:3;33428:24;33446:5;33428:24;:::i;:::-;33419:33;;33474:66;33467:5;33464:77;33461:103;;;33544:18;;:::i;:::-;33461:103;33591:1;33584:5;33580:13;33573:20;;33366:233;;;:::o;33605:100::-;33644:7;33673:26;33693:5;33673:26;:::i;:::-;33662:37;;33605:100;;;:::o;33711:94::-;33750:7;33779:20;33793:5;33779:20;:::i;:::-;33768:31;;33711:94;;;:::o;33811:176::-;33843:1;33860:20;33878:1;33860:20;:::i;:::-;33855:25;;33894:20;33912:1;33894:20;:::i;:::-;33889:25;;33933:1;33923:35;;33938:18;;:::i;:::-;33923:35;33979:1;33976;33972:9;33967:14;;33811:176;;;;:::o;33993:180::-;34041:77;34038:1;34031:88;34138:4;34135:1;34128:15;34162:4;34159:1;34152:15;34179:180;34227:77;34224:1;34217:88;34324:4;34321:1;34314:15;34348:4;34345:1;34338:15;34365:180;34413:77;34410:1;34403:88;34510:4;34507:1;34500:15;34534:4;34531:1;34524:15;34551:180;34599:77;34596:1;34589:88;34696:4;34693:1;34686:15;34720:4;34717:1;34710:15;34737:180;34785:77;34782:1;34775:88;34882:4;34879:1;34872:15;34906:4;34903:1;34896:15;34923:117;35032:1;35029;35022:12;35046:117;35155:1;35152;35145:12;35169:117;35278:1;35275;35268:12;35292:117;35401:1;35398;35391:12;35415:117;35524:1;35521;35514:12;35538:117;35647:1;35644;35637:12;35661:102;35702:6;35753:2;35749:7;35744:2;35737:5;35733:14;35729:28;35719:38;;35661:102;;;:::o;35769:94::-;35802:8;35850:5;35846:2;35842:14;35821:35;;35769:94;;;:::o;35869:225::-;36009:34;36005:1;35997:6;35993:14;35986:58;36078:8;36073:2;36065:6;36061:15;36054:33;35869:225;:::o;36100:174::-;36240:26;36236:1;36228:6;36224:14;36217:50;36100:174;:::o;36280:168::-;36420:20;36416:1;36408:6;36404:14;36397:44;36280:168;:::o;36454:180::-;36594:32;36590:1;36582:6;36578:14;36571:56;36454:180;:::o;36640:165::-;36780:17;36776:1;36768:6;36764:14;36757:41;36640:165;:::o;36811:180::-;36951:32;36947:1;36939:6;36935:14;36928:56;36811:180;:::o;36997:168::-;37137:20;37133:1;37125:6;37121:14;37114:44;36997:168;:::o;37171:155::-;37311:7;37307:1;37299:6;37295:14;37288:31;37171:155;:::o;37332:182::-;37472:34;37468:1;37460:6;37456:14;37449:58;37332:182;:::o;37520:234::-;37660:34;37656:1;37648:6;37644:14;37637:58;37729:17;37724:2;37716:6;37712:15;37705:42;37520:234;:::o;37760:114::-;;:::o;37880:166::-;38020:18;38016:1;38008:6;38004:14;37997:42;37880:166;:::o;38052:172::-;38192:24;38188:1;38180:6;38176:14;38169:48;38052:172;:::o;38230:::-;38370:24;38366:1;38358:6;38354:14;38347:48;38230:172;:::o;38408:181::-;38548:33;38544:1;38536:6;38532:14;38525:57;38408:181;:::o;38595:122::-;38668:24;38686:5;38668:24;:::i;:::-;38661:5;38658:35;38648:63;;38707:1;38704;38697:12;38648:63;38595:122;:::o;38723:116::-;38793:21;38808:5;38793:21;:::i;:::-;38786:5;38783:32;38773:60;;38829:1;38826;38819:12;38773:60;38723:116;:::o;38845:122::-;38918:24;38936:5;38918:24;:::i;:::-;38911:5;38908:35;38898:63;;38957:1;38954;38947:12;38898:63;38845:122;:::o;38973:120::-;39045:23;39062:5;39045:23;:::i;:::-;39038:5;39035:34;39025:62;;39083:1;39080;39073:12;39025:62;38973:120;:::o;39099:122::-;39172:24;39190:5;39172:24;:::i;:::-;39165:5;39162:35;39152:63;;39211:1;39208;39201:12;39152:63;39099:122;:::o

Swarm Source

ipfs://c1d411b0cff381a15df8b0cf0e655b1a03011c98680db2a598966f5e784fc125
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.