ETH Price: $3,397.89 (-1.46%)
Gas: 2 Gwei

Contract

0xF3ff64b9477b19adcf15e71945282DFAc1a1703b
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Safe Transfer Fr...199555382024-05-26 17:27:2333 days ago1716744443IN
0xF3ff64b9...Ac1a1703b
0 ETH0.000331726.10095774
Transfer From199403362024-05-24 14:27:5935 days ago1716560879IN
0xF3ff64b9...Ac1a1703b
0 ETH0.0007609211.92969909
Set Approval For...199001852024-05-18 23:43:2341 days ago1716075803IN
0xF3ff64b9...Ac1a1703b
0 ETH0.000123832.65257057
Safe Transfer Fr...198793612024-05-16 1:48:5944 days ago1715824139IN
0xF3ff64b9...Ac1a1703b
0 ETH0.000274383.83909681
Set Approval For...196911472024-04-19 18:04:2370 days ago1713549863IN
0xF3ff64b9...Ac1a1703b
0 ETH0.000512110.96935532
Set Approval For...195965902024-04-06 12:09:1183 days ago1712405351IN
0xF3ff64b9...Ac1a1703b
0 ETH0.0005548411.8847706
Set Approval For...192079882024-02-11 23:08:47138 days ago1707692927IN
0xF3ff64b9...Ac1a1703b
0 ETH0.0012399326.55954063
Set Approval For...190874742024-01-26 1:22:11155 days ago1706232131IN
0xF3ff64b9...Ac1a1703b
0 ETH0.0004877219.6876931
Set Approval For...190874742024-01-26 1:22:11155 days ago1706232131IN
0xF3ff64b9...Ac1a1703b
0 ETH0.0004893719.6876931
Transfer From189796342024-01-10 22:50:23170 days ago1704927023IN
0xF3ff64b9...Ac1a1703b
0 ETH0.0028229644.25818537
Safe Transfer Fr...189069922023-12-31 17:37:47180 days ago1704044267IN
0xF3ff64b9...Ac1a1703b
0 ETH0.0010073515.10906468
Set Base URI189044452023-12-31 9:03:35181 days ago1704013415IN
0xF3ff64b9...Ac1a1703b
0 ETH0.0005194812.78737908
Safe Transfer Fr...188966972023-12-30 6:56:11182 days ago1703919371IN
0xF3ff64b9...Ac1a1703b
0 ETH0.0006142412.39105294
Set Approval For...188910932023-12-29 11:59:23182 days ago1703851163IN
0xF3ff64b9...Ac1a1703b
0 ETH0.0008345417.87609096
Safe Transfer Fr...188037612023-12-17 5:46:11195 days ago1702791971IN
0xF3ff64b9...Ac1a1703b
0 ETH0.0020409828.48430944
Safe Transfer Fr...188027062023-12-17 2:13:23195 days ago1702779203IN
0xF3ff64b9...Ac1a1703b
0 ETH0.0026478137.04062113
Safe Transfer Fr...188026922023-12-17 2:10:35195 days ago1702779035IN
0xF3ff64b9...Ac1a1703b
0 ETH0.0034248537.08926483
Send Gifts To Ow...188016832023-12-16 22:46:59195 days ago1702766819IN
0xF3ff64b9...Ac1a1703b
0 ETH0.0028672841.45146096
Setmax Token188016552023-12-16 22:41:23195 days ago1702766483IN
0xF3ff64b9...Ac1a1703b
0 ETH0.0011748940.62441391
Set Base URI188016522023-12-16 22:40:47195 days ago1702766447IN
0xF3ff64b9...Ac1a1703b
0 ETH0.001665841.00444912
Set Approval For...187917262023-12-15 13:10:35196 days ago1702645835IN
0xF3ff64b9...Ac1a1703b
0 ETH0.0030481565.29202803
Set Approval For...187415502023-12-08 12:30:11203 days ago1702038611IN
0xF3ff64b9...Ac1a1703b
0 ETH0.0015910534.08069536
Set Approval For...187291432023-12-06 18:45:11205 days ago1701888311IN
0xF3ff64b9...Ac1a1703b
0 ETH0.0015410762.20786005
Safe Transfer Fr...187092062023-12-03 23:43:11208 days ago1701646991IN
0xF3ff64b9...Ac1a1703b
0 ETH0.0021921930.6720905
Transfer From186632942023-11-27 13:31:59214 days ago1701091919IN
0xF3ff64b9...Ac1a1703b
0 ETH0.0019577930.7056802
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PIGEONSOFNEWYORK

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-09-28
*/

// SPDX-License-Identifier: MIT

//Developer Info:
//Written by Blockchainguy.net
//Email: [email protected]
//Instagram: @sheraz.manzoor


pragma solidity ^0.8.0;
interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
pragma solidity ^0.8.0;
interface IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}
pragma solidity ^0.8.0;
interface IERC721 is IERC165 {
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed tokenId
    );
    event Approval(
        address indexed owner,
        address indexed approved,
        uint256 indexed tokenId
    );
    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );
    function balanceOf(address owner) external view returns (uint256 balance);
    function ownerOf(uint256 tokenId) external view returns (address owner);
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
    function approve(address to, uint256 tokenId) external;
    function getApproved(uint256 tokenId)
        external
        view
        returns (address operator);
    function setApprovalForAll(address operator, bool _approved) external;
    function isApprovedForAll(address owner, address operator)
        external
        view
        returns (bool);
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}
pragma solidity ^0.8.0;
interface IERC721Metadata is IERC721 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
}
pragma solidity ^0.8.0;
interface IERC721Enumerable is IERC721 {
    function totalSupply() external view returns (uint256);
    function tokenOfOwnerByIndex(address owner, uint256 index)
        external
        view
        returns (uint256);
    function tokenByIndex(uint256 index) external view returns (uint256);
}
pragma solidity ^0.8.1;
library Address {
    function isContract(address account) internal view returns (bool) {

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

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

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

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

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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

pragma solidity ^0.8.0;

abstract contract Ownable is Context {
    address private _owner;

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)
pragma solidity ^0.8.0;
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    function toString(uint256 value) internal pure returns (string memory) {
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        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);
    }
}
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;
abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override
        returns (bool)
    {
        return interfaceId == type(IERC165).interfaceId;
    }
}

pragma solidity ^0.8.0;

abstract contract ReentrancyGuard {
    // word because each write operation emits an extra SLOAD to first read the
    // back. This is the compiler's defense against contract upgrades and

    // but in exchange the refund on every call to nonReentrant will be lower in
    // transaction's gas, it is best to keep them low in cases like this one, to
    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;

        _;
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

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

    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
    }

    struct AddressData {
        uint128 balance;
        uint128 numberMinted;
    }

    uint256 private currentIndex = 0;

    uint256 internal immutable collectionSize;
    uint256 internal immutable maxBatchSize;
    string private _name;
    string private _symbol;
    // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) private _ownerships;
    mapping(address => AddressData) private _addressData;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;
    constructor(
        string memory name_,
        string memory symbol_,
        uint256 maxBatchSize_,
        uint256 collectionSize_
    ) {
        require(
            collectionSize_ > 0,
            "ERC721A: collection must have a nonzero supply"
        );
        require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
        _name = name_;
        _symbol = symbol_;
        maxBatchSize = maxBatchSize_;
        collectionSize = collectionSize_;
    }
    function totalSupply() public view override returns (uint256) {
        return currentIndex;
    }
    function tokenByIndex(uint256 index)
        public
        view
        override
        returns (uint256)
    {
        require(index < totalSupply(), "ERC721A: global index out of bounds");
        return index;
    }
    function tokenOfOwnerByIndex(address owner, uint256 index)
        public
        view
        override
        returns (uint256)
    {
        require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
        uint256 numMintedSoFar = totalSupply();
        uint256 tokenIdsIdx = 0;
        address currOwnershipAddr = address(0);
        for (uint256 i = 0; i < numMintedSoFar; i++) {
            TokenOwnership memory ownership = _ownerships[i];
            if (ownership.addr != address(0)) {
                currOwnershipAddr = ownership.addr;
            }
            if (currOwnershipAddr == owner) {
                if (tokenIdsIdx == index) {
                    return i;
                }
                tokenIdsIdx++;
            }
        }
        revert("ERC721A: unable to get token of owner by index");
    }
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override(ERC165, IERC165)
        returns (bool)
    {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            interfaceId == type(IERC721Enumerable).interfaceId ||
            super.supportsInterface(interfaceId);
    }
    function balanceOf(address owner) public view override returns (uint256) {
        require(
            owner != address(0),
            "ERC721A: balance query for the zero address"
        );
        return uint256(_addressData[owner].balance);
    }

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

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

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

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

        revert("ERC721A: unable to determine the owner of token");
    }
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return ownershipOf(tokenId).addr;
    }
    function name() public view virtual override returns (string memory) {
        return _name;
    }
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );

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

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

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

        return _tokenApprovals[tokenId];
    }
    function setApprovalForAll(address operator, bool approved)
        public
        override
    {
        require(operator != _msgSender(), "ERC721A: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }
    function isApprovedForAll(address owner, address operator)
        public
        view
        virtual
        override
        returns (bool)
    {
        return _operatorApprovals[owner][operator];
    }
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public override {
        _transfer(from, to, tokenId);
    }
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public override {
        safeTransferFrom(from, to, tokenId, "");
    }
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public override {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            "ERC721A: transfer to non ERC721Receiver implementer"
        );
    }
    function _exists(uint256 tokenId) internal view returns (bool) {
        return tokenId < currentIndex;
    }

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

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

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

        uint256 updatedIndex = startTokenId;

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

        currentIndex = updatedIndex;
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

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

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

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

        _beforeTokenTransfers(from, to, tokenId, 1);
        _approve(address(0), tokenId, prevOwnership.addr);

        _addressData[from].balance -= 1;
        _addressData[to].balance += 1;
        _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp));
        // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
        uint256 nextTokenId = tokenId + 1;
        if (_ownerships[nextTokenId].addr == address(0)) {
            if (_exists(nextTokenId)) {
                _ownerships[nextTokenId] = TokenOwnership(
                    prevOwnership.addr,
                    prevOwnership.startTimestamp
                );
            }
        }

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

    uint256 public nextOwnerToExplicitlySet = 0;
    function _setOwnersExplicit(uint256 quantity) internal {
        uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
        require(quantity > 0, "quantity must be nonzero");
        uint256 endIndex = oldNextOwnerToSet + quantity - 1;
        if (endIndex > collectionSize - 1) {
            endIndex = collectionSize - 1;
        }
        require(_exists(endIndex), "not enough minted yet for this cleanup");
        for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
            if (_ownerships[i].addr == address(0)) {
                TokenOwnership memory ownership = ownershipOf(i);
                _ownerships[i] = TokenOwnership(
                    ownership.addr,
                    ownership.startTimestamp
                );
            }
        }
        nextOwnerToExplicitlySet = endIndex + 1;
    }
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try
                IERC721Receiver(to).onERC721Received(
                    _msgSender(),
                    from,
                    tokenId,
                    _data
                )
            returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert(
                        "ERC721A: transfer to non ERC721Receiver implementer"
                    );
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

contract PIGEONSOFNEWYORK is Ownable, ERC721A, ReentrancyGuard {
    uint256 public maxToken = 356;

    string private _baseTokenURI= "https://www.crumbos.live/api/phase1/";
    string public _extension = "";

    constructor()  ERC721A("PIGEONS OF NEW YORK", "PONY", 1000, maxToken)
    {}

    modifier callerIsUser() {
        require(tx.origin == msg.sender, "The caller is another contract");
        _;
    }
   function sendGiftsToOwner(address _wallet, uint256 _num) external onlyOwner{
            require(totalSupply() + _num <= maxToken, "Max Supply Reached.");
            _safeMint(_wallet, _num);
    }
    function sendGifts(address _wallet, uint256 _num) external onlyOwner{
            _safeMint(_wallet, _num);
    }


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

    function setBaseURI(string calldata baseURI) external onlyOwner {
        _baseTokenURI = baseURI;
    }

    function withdraw() external onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }
    function setmaxToken(uint _temp) onlyOwner public {
        maxToken = _temp;
    }
    function updateExtension(string memory _temp) onlyOwner public {
        _extension = _temp;
    }
    function numberMinted(address owner) public view returns (uint256) {
        return _numberMinted(owner);
    }

    function getOwnershipData(uint256 tokenId)
        external
        view
        returns (TokenOwnership memory)
    {
        return ownershipOf(tokenId);
    }

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

        string memory _tokenURI = super.tokenURI(tokenId);
        return
            bytes(_tokenURI).length > 0
                ? string(abi.encodePacked(_tokenURI, _extension))
                : "";
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_extension","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"_wallet","type":"address"},{"internalType":"uint256","name":"_num","type":"uint256"}],"name":"sendGifts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"uint256","name":"_num","type":"uint256"}],"name":"sendGiftsToOwner","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":"uint256","name":"_temp","type":"uint256"}],"name":"setmaxToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_temp","type":"string"}],"name":"updateExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c060405260006001556000600855610164600a5560405180606001604052806024815260200162004a4660249139600b908051906020019062000045929190620002ba565b5060405180602001604052806000815250600c90805190602001906200006d929190620002ba565b503480156200007b57600080fd5b506040518060400160405280601381526020017f504947454f4e53204f46204e455720594f524b000000000000000000000000008152506040518060400160405280600481526020017f504f4e59000000000000000000000000000000000000000000000000000000008152506103e8600a546200010e62000102620001ee60201b60201c565b620001f660201b60201c565b6000811162000154576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200014b90620003da565b60405180910390fd5b600082116200019a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200019190620003b8565b60405180910390fd5b8360029080519060200190620001b2929190620002ba565b508260039080519060200190620001cb929190620002ba565b508160a08181525050806080818152505050505050600160098190555062000510565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002c8906200040d565b90600052602060002090601f016020900481019282620002ec576000855562000338565b82601f106200030757805160ff191683800117855562000338565b8280016001018555821562000338579182015b82811115620003375782518255916020019190600101906200031a565b5b5090506200034791906200034b565b5090565b5b80821115620003665760008160009055506001016200034c565b5090565b600062000379602783620003fc565b9150620003868262000472565b604082019050919050565b6000620003a0602e83620003fc565b9150620003ad82620004c1565b604082019050919050565b60006020820190508181036000830152620003d3816200036a565b9050919050565b60006020820190508181036000830152620003f58162000391565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200042657607f821691505b602082108114156200043d576200043c62000443565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b60805160a0516145056200054160003960008181611e2801528181611e5101526124840152600050506145056000f3fe608060405234801561001057600080fd5b50600436106101d95760003560e01c8063715018a611610104578063ae7ae3de116100a2578063d7224ba011610071578063d7224ba01461053e578063dc33e6811461055c578063e985e9c51461058c578063f2fde38b146105bc576101d9565b8063ae7ae3de146104b8578063b88d4fde146104d4578063c87b56dd146104f0578063ca69e32314610520576101d9565b80638da5cb5b116100de5780638da5cb5b146104305780639231ab2a1461044e57806395d89b411461047e578063a22cb4651461049c576101d9565b8063715018a6146103ee5780637abc8f05146103f85780637e6182d914610414576101d9565b80632f745c591161017c5780634f6ccce71161014b5780634f6ccce71461034257806355f804b3146103725780636352211e1461038e57806370a08231146103be576101d9565b80632f745c59146102ce5780633ae1dd9d146102fe5780633ccfd60b1461031c57806342842e0e14610326576101d9565b8063081812fc116101b8578063081812fc14610248578063095ea7b31461027857806318160ddd1461029457806323b872dd146102b2576101d9565b806247c745146101de57806301ffc9a7146101fa57806306fdde031461022a575b600080fd5b6101f860048036038101906101f39190612f49565b6105d8565b005b610214600480360381019061020f9190612f89565b610662565b60405161022191906135f3565b60405180910390f35b6102326107ac565b60405161023f919061360e565b60405180910390f35b610262600480360381019061025d9190613079565b61083e565b60405161026f919061358c565b60405180910390f35b610292600480360381019061028d9190612f49565b6108c3565b005b61029c6109dc565b6040516102a9919061390b565b60405180910390f35b6102cc60048036038101906102c79190612e33565b6109e6565b005b6102e860048036038101906102e39190612f49565b6109f6565b6040516102f5919061390b565b60405180910390f35b610306610bf4565b604051610313919061360e565b60405180910390f35b610324610c82565b005b610340600480360381019061033b9190612e33565b610d47565b005b61035c60048036038101906103579190613079565b610d67565b604051610369919061390b565b60405180910390f35b61038c60048036038101906103879190612fe3565b610dba565b005b6103a860048036038101906103a39190613079565b610e4c565b6040516103b5919061358c565b60405180910390f35b6103d860048036038101906103d39190612dc6565b610e62565b6040516103e5919061390b565b60405180910390f35b6103f6610f4b565b005b610412600480360381019061040d9190612f49565b610fd3565b005b61042e60048036038101906104299190613030565b6110b4565b005b61043861114a565b604051610445919061358c565b60405180910390f35b61046860048036038101906104639190613079565b611173565b60405161047591906138f0565b60405180910390f35b61048661118b565b604051610493919061360e565b60405180910390f35b6104b660048036038101906104b19190612f09565b61121d565b005b6104d260048036038101906104cd9190613079565b61139e565b005b6104ee60048036038101906104e99190612e86565b611424565b005b61050a60048036038101906105059190613079565b611480565b604051610517919061360e565b60405180910390f35b610528611521565b604051610535919061390b565b60405180910390f35b610546611527565b604051610553919061390b565b60405180910390f35b61057660048036038101906105719190612dc6565b61152d565b604051610583919061390b565b60405180910390f35b6105a660048036038101906105a19190612df3565b61153f565b6040516105b391906135f3565b60405180910390f35b6105d660048036038101906105d19190612dc6565b6115d3565b005b6105e06116cb565b73ffffffffffffffffffffffffffffffffffffffff166105fe61114a565b73ffffffffffffffffffffffffffffffffffffffff1614610654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064b90613750565b60405180910390fd5b61065e82826116d3565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061072d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061079557507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107a557506107a4826116f1565b5b9050919050565b6060600280546107bb90613c4a565b80601f01602080910402602001604051908101604052809291908181526020018280546107e790613c4a565b80156108345780601f1061080957610100808354040283529160200191610834565b820191906000526020600020905b81548152906001019060200180831161081757829003601f168201915b5050505050905090565b60006108498261175b565b610888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f906138b0565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108ce82610e4c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561093f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610936906137d0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661095e6116cb565b73ffffffffffffffffffffffffffffffffffffffff16148061098d575061098c816109876116cb565b61153f565b5b6109cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c3906136f0565b60405180910390fd5b6109d7838383611769565b505050565b6000600154905090565b6109f183838361181b565b505050565b6000610a0183610e62565b8210610a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3990613630565b60405180910390fd5b6000610a4c6109dc565b905060008060005b83811015610bb2576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610b4657806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b9e5786841415610b8f578195505050505050610bee565b8380610b9a90613cad565b9450505b508080610baa90613cad565b915050610a54565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be590613870565b60405180910390fd5b92915050565b600c8054610c0190613c4a565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2d90613c4a565b8015610c7a5780601f10610c4f57610100808354040283529160200191610c7a565b820191906000526020600020905b815481529060010190602001808311610c5d57829003601f168201915b505050505081565b610c8a6116cb565b73ffffffffffffffffffffffffffffffffffffffff16610ca861114a565b73ffffffffffffffffffffffffffffffffffffffff1614610cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf590613750565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610d44573d6000803e3d6000fd5b50565b610d6283838360405180602001604052806000815250611424565b505050565b6000610d716109dc565b8210610db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da990613690565b60405180910390fd5b819050919050565b610dc26116cb565b73ffffffffffffffffffffffffffffffffffffffff16610de061114a565b73ffffffffffffffffffffffffffffffffffffffff1614610e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2d90613750565b60405180910390fd5b8181600b9190610e47929190612ac4565b505050565b6000610e5782611dd4565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eca90613710565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b610f536116cb565b73ffffffffffffffffffffffffffffffffffffffff16610f7161114a565b73ffffffffffffffffffffffffffffffffffffffff1614610fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbe90613750565b60405180910390fd5b610fd16000611fd7565b565b610fdb6116cb565b73ffffffffffffffffffffffffffffffffffffffff16610ff961114a565b73ffffffffffffffffffffffffffffffffffffffff161461104f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104690613750565b60405180910390fd5b600a548161105b6109dc565b6110659190613a4b565b11156110a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109d90613850565b60405180910390fd5b6110b082826116d3565b5050565b6110bc6116cb565b73ffffffffffffffffffffffffffffffffffffffff166110da61114a565b73ffffffffffffffffffffffffffffffffffffffff1614611130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112790613750565b60405180910390fd5b80600c9080519060200190611146929190612b4a565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61117b612bd0565b61118482611dd4565b9050919050565b60606003805461119a90613c4a565b80601f01602080910402602001604051908101604052809291908181526020018280546111c690613c4a565b80156112135780601f106111e857610100808354040283529160200191611213565b820191906000526020600020905b8154815290600101906020018083116111f657829003601f168201915b5050505050905090565b6112256116cb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128a90613790565b60405180910390fd5b80600760006112a06116cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661134d6116cb565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161139291906135f3565b60405180910390a35050565b6113a66116cb565b73ffffffffffffffffffffffffffffffffffffffff166113c461114a565b73ffffffffffffffffffffffffffffffffffffffff161461141a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141190613750565b60405180910390fd5b80600a8190555050565b61142f84848461181b565b61143b8484848461209b565b61147a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611471906137f0565b60405180910390fd5b50505050565b606061148b8261175b565b6114ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c190613770565b60405180910390fd5b60006114d583612232565b905060008151116114f55760405180602001604052806000815250611519565b80600c604051602001611509929190613568565b6040516020818303038152906040525b915050919050565b600a5481565b60085481565b6000611538826122d9565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115db6116cb565b73ffffffffffffffffffffffffffffffffffffffff166115f961114a565b73ffffffffffffffffffffffffffffffffffffffff161461164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690613750565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b690613650565b60405180910390fd5b6116c881611fd7565b50565b600033905090565b6116ed8282604051806020016040528060008152506123c2565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061182682611dd4565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661184d6116cb565b73ffffffffffffffffffffffffffffffffffffffff1614806118a957506118726116cb565b73ffffffffffffffffffffffffffffffffffffffff166118918461083e565b73ffffffffffffffffffffffffffffffffffffffff16145b806118c557506118c482600001516118bf6116cb565b61153f565b5b905080611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fe906137b0565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197090613730565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156119e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e0906136b0565b60405180910390fd5b6119f685858560016128a2565b611a066000848460000151611769565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611a749190613ad2565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611b189190613a05565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184611c1e9190613a4b565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611d6457611c948161175b565b15611d63576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611dcc86868660016128a8565b505050505050565b611ddc612bd0565b611de58261175b565b611e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1b90613670565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310611e885760017f000000000000000000000000000000000000000000000000000000000000000084611e7b9190613b06565b611e859190613a4b565b90505b60008390505b818110611f96576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611f8257809350505050611fd2565b508080611f8e90613c20565b915050611e8e565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc990613890565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006120bc8473ffffffffffffffffffffffffffffffffffffffff166128ae565b15612225578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120e56116cb565b8786866040518563ffffffff1660e01b815260040161210794939291906135a7565b602060405180830381600087803b15801561212157600080fd5b505af192505050801561215257506040513d601f19601f8201168201806040525081019061214f9190612fb6565b60015b6121d5573d8060008114612182576040519150601f19603f3d011682016040523d82523d6000602084013e612187565b606091505b506000815114156121cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c4906137f0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061222a565b600190505b949350505050565b606061223d8261175b565b61227c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227390613770565b60405180910390fd5b60006122866128d1565b905060008151116122a657604051806020016040528060008152506122d1565b806122b084612963565b6040516020016122c1929190613544565b6040516020818303038152906040525b915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561234a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612341906136d0565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243090613830565b60405180910390fd5b6124428161175b565b15612482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247990613810565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008311156124e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dc906138d0565b60405180910390fd5b6124f260008583866128a2565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516125ef9190613a05565b6fffffffffffffffffffffffffffffffff1681526020018583602001516126169190613a05565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561288557818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612825600088848861209b565b612864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285b906137f0565b60405180910390fd5b818061286f90613cad565b925050808061287d90613cad565b9150506127b4565b508060018190555061289a60008785886128a8565b505050505050565b50505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6060600b80546128e090613c4a565b80601f016020809104026020016040519081016040528092919081815260200182805461290c90613c4a565b80156129595780601f1061292e57610100808354040283529160200191612959565b820191906000526020600020905b81548152906001019060200180831161293c57829003601f168201915b5050505050905090565b606060008214156129ab576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612abf565b600082905060005b600082146129dd5780806129c690613cad565b915050600a826129d69190613aa1565b91506129b3565b60008167ffffffffffffffff8111156129f9576129f8613de3565b5b6040519080825280601f01601f191660200182016040528015612a2b5781602001600182028036833780820191505090505b5090505b60008514612ab857600182612a449190613b06565b9150600a85612a539190613cf6565b6030612a5f9190613a4b565b60f81b818381518110612a7557612a74613db4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ab19190613aa1565b9450612a2f565b8093505050505b919050565b828054612ad090613c4a565b90600052602060002090601f016020900481019282612af25760008555612b39565b82601f10612b0b57803560ff1916838001178555612b39565b82800160010185558215612b39579182015b82811115612b38578235825591602001919060010190612b1d565b5b509050612b469190612c0a565b5090565b828054612b5690613c4a565b90600052602060002090601f016020900481019282612b785760008555612bbf565b82601f10612b9157805160ff1916838001178555612bbf565b82800160010185558215612bbf579182015b82811115612bbe578251825591602001919060010190612ba3565b5b509050612bcc9190612c0a565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612c23576000816000905550600101612c0b565b5090565b6000612c3a612c358461394b565b613926565b905082815260208101848484011115612c5657612c55613e21565b5b612c61848285613bde565b509392505050565b6000612c7c612c778461397c565b613926565b905082815260208101848484011115612c9857612c97613e21565b5b612ca3848285613bde565b509392505050565b600081359050612cba81614473565b92915050565b600081359050612ccf8161448a565b92915050565b600081359050612ce4816144a1565b92915050565b600081519050612cf9816144a1565b92915050565b600082601f830112612d1457612d13613e17565b5b8135612d24848260208601612c27565b91505092915050565b60008083601f840112612d4357612d42613e17565b5b8235905067ffffffffffffffff811115612d6057612d5f613e12565b5b602083019150836001820283011115612d7c57612d7b613e1c565b5b9250929050565b600082601f830112612d9857612d97613e17565b5b8135612da8848260208601612c69565b91505092915050565b600081359050612dc0816144b8565b92915050565b600060208284031215612ddc57612ddb613e2b565b5b6000612dea84828501612cab565b91505092915050565b60008060408385031215612e0a57612e09613e2b565b5b6000612e1885828601612cab565b9250506020612e2985828601612cab565b9150509250929050565b600080600060608486031215612e4c57612e4b613e2b565b5b6000612e5a86828701612cab565b9350506020612e6b86828701612cab565b9250506040612e7c86828701612db1565b9150509250925092565b60008060008060808587031215612ea057612e9f613e2b565b5b6000612eae87828801612cab565b9450506020612ebf87828801612cab565b9350506040612ed087828801612db1565b925050606085013567ffffffffffffffff811115612ef157612ef0613e26565b5b612efd87828801612cff565b91505092959194509250565b60008060408385031215612f2057612f1f613e2b565b5b6000612f2e85828601612cab565b9250506020612f3f85828601612cc0565b9150509250929050565b60008060408385031215612f6057612f5f613e2b565b5b6000612f6e85828601612cab565b9250506020612f7f85828601612db1565b9150509250929050565b600060208284031215612f9f57612f9e613e2b565b5b6000612fad84828501612cd5565b91505092915050565b600060208284031215612fcc57612fcb613e2b565b5b6000612fda84828501612cea565b91505092915050565b60008060208385031215612ffa57612ff9613e2b565b5b600083013567ffffffffffffffff81111561301857613017613e26565b5b61302485828601612d2d565b92509250509250929050565b60006020828403121561304657613045613e2b565b5b600082013567ffffffffffffffff81111561306457613063613e26565b5b61307084828501612d83565b91505092915050565b60006020828403121561308f5761308e613e2b565b5b600061309d84828501612db1565b91505092915050565b6130af81613b3a565b82525050565b6130be81613b3a565b82525050565b6130cd81613b4c565b82525050565b60006130de826139c2565b6130e881856139d8565b93506130f8818560208601613bed565b61310181613e30565b840191505092915050565b6000613117826139cd565b61312181856139e9565b9350613131818560208601613bed565b61313a81613e30565b840191505092915050565b6000613150826139cd565b61315a81856139fa565b935061316a818560208601613bed565b80840191505092915050565b6000815461318381613c4a565b61318d81866139fa565b945060018216600081146131a857600181146131b9576131ec565b60ff198316865281860193506131ec565b6131c2856139ad565b60005b838110156131e4578154818901526001820191506020810190506131c5565b838801955050505b50505092915050565b60006132026022836139e9565b915061320d82613e41565b604082019050919050565b60006132256026836139e9565b915061323082613e90565b604082019050919050565b6000613248602a836139e9565b915061325382613edf565b604082019050919050565b600061326b6023836139e9565b915061327682613f2e565b604082019050919050565b600061328e6025836139e9565b915061329982613f7d565b604082019050919050565b60006132b16031836139e9565b91506132bc82613fcc565b604082019050919050565b60006132d46039836139e9565b91506132df8261401b565b604082019050919050565b60006132f7602b836139e9565b91506133028261406a565b604082019050919050565b600061331a6026836139e9565b9150613325826140b9565b604082019050919050565b600061333d6020836139e9565b915061334882614108565b602082019050919050565b6000613360602f836139e9565b915061336b82614131565b604082019050919050565b6000613383601a836139e9565b915061338e82614180565b602082019050919050565b60006133a66032836139e9565b91506133b1826141a9565b604082019050919050565b60006133c96022836139e9565b91506133d4826141f8565b604082019050919050565b60006133ec6033836139e9565b91506133f782614247565b604082019050919050565b600061340f601d836139e9565b915061341a82614296565b602082019050919050565b60006134326021836139e9565b915061343d826142bf565b604082019050919050565b60006134556013836139e9565b91506134608261430e565b602082019050919050565b6000613478602e836139e9565b915061348382614337565b604082019050919050565b600061349b602f836139e9565b91506134a682614386565b604082019050919050565b60006134be602d836139e9565b91506134c9826143d5565b604082019050919050565b60006134e16022836139e9565b91506134ec82614424565b604082019050919050565b60408201600082015161350d60008501826130a6565b5060208201516135206020850182613535565b50505050565b61352f81613bc0565b82525050565b61353e81613bca565b82525050565b60006135508285613145565b915061355c8284613145565b91508190509392505050565b60006135748285613145565b91506135808284613176565b91508190509392505050565b60006020820190506135a160008301846130b5565b92915050565b60006080820190506135bc60008301876130b5565b6135c960208301866130b5565b6135d66040830185613526565b81810360608301526135e881846130d3565b905095945050505050565b600060208201905061360860008301846130c4565b92915050565b60006020820190508181036000830152613628818461310c565b905092915050565b60006020820190508181036000830152613649816131f5565b9050919050565b6000602082019050818103600083015261366981613218565b9050919050565b600060208201905081810360008301526136898161323b565b9050919050565b600060208201905081810360008301526136a98161325e565b9050919050565b600060208201905081810360008301526136c981613281565b9050919050565b600060208201905081810360008301526136e9816132a4565b9050919050565b60006020820190508181036000830152613709816132c7565b9050919050565b60006020820190508181036000830152613729816132ea565b9050919050565b600060208201905081810360008301526137498161330d565b9050919050565b6000602082019050818103600083015261376981613330565b9050919050565b6000602082019050818103600083015261378981613353565b9050919050565b600060208201905081810360008301526137a981613376565b9050919050565b600060208201905081810360008301526137c981613399565b9050919050565b600060208201905081810360008301526137e9816133bc565b9050919050565b60006020820190508181036000830152613809816133df565b9050919050565b6000602082019050818103600083015261382981613402565b9050919050565b6000602082019050818103600083015261384981613425565b9050919050565b6000602082019050818103600083015261386981613448565b9050919050565b600060208201905081810360008301526138898161346b565b9050919050565b600060208201905081810360008301526138a98161348e565b9050919050565b600060208201905081810360008301526138c9816134b1565b9050919050565b600060208201905081810360008301526138e9816134d4565b9050919050565b600060408201905061390560008301846134f7565b92915050565b60006020820190506139206000830184613526565b92915050565b6000613930613941565b905061393c8282613c7c565b919050565b6000604051905090565b600067ffffffffffffffff82111561396657613965613de3565b5b61396f82613e30565b9050602081019050919050565b600067ffffffffffffffff82111561399757613996613de3565b5b6139a082613e30565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613a1082613b84565b9150613a1b83613b84565b9250826fffffffffffffffffffffffffffffffff03821115613a4057613a3f613d27565b5b828201905092915050565b6000613a5682613bc0565b9150613a6183613bc0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a9657613a95613d27565b5b828201905092915050565b6000613aac82613bc0565b9150613ab783613bc0565b925082613ac757613ac6613d56565b5b828204905092915050565b6000613add82613b84565b9150613ae883613b84565b925082821015613afb57613afa613d27565b5b828203905092915050565b6000613b1182613bc0565b9150613b1c83613bc0565b925082821015613b2f57613b2e613d27565b5b828203905092915050565b6000613b4582613ba0565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015613c0b578082015181840152602081019050613bf0565b83811115613c1a576000848401525b50505050565b6000613c2b82613bc0565b91506000821415613c3f57613c3e613d27565b5b600182039050919050565b60006002820490506001821680613c6257607f821691505b60208210811415613c7657613c75613d85565b5b50919050565b613c8582613e30565b810181811067ffffffffffffffff82111715613ca457613ca3613de3565b5b80604052505050565b6000613cb882613bc0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ceb57613cea613d27565b5b600182019050919050565b6000613d0182613bc0565b9150613d0c83613bc0565b925082613d1c57613d1b613d56565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d617820537570706c7920526561636865642e00000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b61447c81613b3a565b811461448757600080fd5b50565b61449381613b4c565b811461449e57600080fd5b50565b6144aa81613b58565b81146144b557600080fd5b50565b6144c181613bc0565b81146144cc57600080fd5b5056fea2646970667358221220e49add4c75692dd266debcf03d126f48bd3b8c6415001da213141e81b5b1aaff64736f6c6343000807003368747470733a2f2f7777772e6372756d626f732e6c6976652f6170692f7068617365312f

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101d95760003560e01c8063715018a611610104578063ae7ae3de116100a2578063d7224ba011610071578063d7224ba01461053e578063dc33e6811461055c578063e985e9c51461058c578063f2fde38b146105bc576101d9565b8063ae7ae3de146104b8578063b88d4fde146104d4578063c87b56dd146104f0578063ca69e32314610520576101d9565b80638da5cb5b116100de5780638da5cb5b146104305780639231ab2a1461044e57806395d89b411461047e578063a22cb4651461049c576101d9565b8063715018a6146103ee5780637abc8f05146103f85780637e6182d914610414576101d9565b80632f745c591161017c5780634f6ccce71161014b5780634f6ccce71461034257806355f804b3146103725780636352211e1461038e57806370a08231146103be576101d9565b80632f745c59146102ce5780633ae1dd9d146102fe5780633ccfd60b1461031c57806342842e0e14610326576101d9565b8063081812fc116101b8578063081812fc14610248578063095ea7b31461027857806318160ddd1461029457806323b872dd146102b2576101d9565b806247c745146101de57806301ffc9a7146101fa57806306fdde031461022a575b600080fd5b6101f860048036038101906101f39190612f49565b6105d8565b005b610214600480360381019061020f9190612f89565b610662565b60405161022191906135f3565b60405180910390f35b6102326107ac565b60405161023f919061360e565b60405180910390f35b610262600480360381019061025d9190613079565b61083e565b60405161026f919061358c565b60405180910390f35b610292600480360381019061028d9190612f49565b6108c3565b005b61029c6109dc565b6040516102a9919061390b565b60405180910390f35b6102cc60048036038101906102c79190612e33565b6109e6565b005b6102e860048036038101906102e39190612f49565b6109f6565b6040516102f5919061390b565b60405180910390f35b610306610bf4565b604051610313919061360e565b60405180910390f35b610324610c82565b005b610340600480360381019061033b9190612e33565b610d47565b005b61035c60048036038101906103579190613079565b610d67565b604051610369919061390b565b60405180910390f35b61038c60048036038101906103879190612fe3565b610dba565b005b6103a860048036038101906103a39190613079565b610e4c565b6040516103b5919061358c565b60405180910390f35b6103d860048036038101906103d39190612dc6565b610e62565b6040516103e5919061390b565b60405180910390f35b6103f6610f4b565b005b610412600480360381019061040d9190612f49565b610fd3565b005b61042e60048036038101906104299190613030565b6110b4565b005b61043861114a565b604051610445919061358c565b60405180910390f35b61046860048036038101906104639190613079565b611173565b60405161047591906138f0565b60405180910390f35b61048661118b565b604051610493919061360e565b60405180910390f35b6104b660048036038101906104b19190612f09565b61121d565b005b6104d260048036038101906104cd9190613079565b61139e565b005b6104ee60048036038101906104e99190612e86565b611424565b005b61050a60048036038101906105059190613079565b611480565b604051610517919061360e565b60405180910390f35b610528611521565b604051610535919061390b565b60405180910390f35b610546611527565b604051610553919061390b565b60405180910390f35b61057660048036038101906105719190612dc6565b61152d565b604051610583919061390b565b60405180910390f35b6105a660048036038101906105a19190612df3565b61153f565b6040516105b391906135f3565b60405180910390f35b6105d660048036038101906105d19190612dc6565b6115d3565b005b6105e06116cb565b73ffffffffffffffffffffffffffffffffffffffff166105fe61114a565b73ffffffffffffffffffffffffffffffffffffffff1614610654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064b90613750565b60405180910390fd5b61065e82826116d3565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061072d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061079557507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107a557506107a4826116f1565b5b9050919050565b6060600280546107bb90613c4a565b80601f01602080910402602001604051908101604052809291908181526020018280546107e790613c4a565b80156108345780601f1061080957610100808354040283529160200191610834565b820191906000526020600020905b81548152906001019060200180831161081757829003601f168201915b5050505050905090565b60006108498261175b565b610888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f906138b0565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108ce82610e4c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561093f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610936906137d0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661095e6116cb565b73ffffffffffffffffffffffffffffffffffffffff16148061098d575061098c816109876116cb565b61153f565b5b6109cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c3906136f0565b60405180910390fd5b6109d7838383611769565b505050565b6000600154905090565b6109f183838361181b565b505050565b6000610a0183610e62565b8210610a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3990613630565b60405180910390fd5b6000610a4c6109dc565b905060008060005b83811015610bb2576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610b4657806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b9e5786841415610b8f578195505050505050610bee565b8380610b9a90613cad565b9450505b508080610baa90613cad565b915050610a54565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be590613870565b60405180910390fd5b92915050565b600c8054610c0190613c4a565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2d90613c4a565b8015610c7a5780601f10610c4f57610100808354040283529160200191610c7a565b820191906000526020600020905b815481529060010190602001808311610c5d57829003601f168201915b505050505081565b610c8a6116cb565b73ffffffffffffffffffffffffffffffffffffffff16610ca861114a565b73ffffffffffffffffffffffffffffffffffffffff1614610cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf590613750565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610d44573d6000803e3d6000fd5b50565b610d6283838360405180602001604052806000815250611424565b505050565b6000610d716109dc565b8210610db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da990613690565b60405180910390fd5b819050919050565b610dc26116cb565b73ffffffffffffffffffffffffffffffffffffffff16610de061114a565b73ffffffffffffffffffffffffffffffffffffffff1614610e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2d90613750565b60405180910390fd5b8181600b9190610e47929190612ac4565b505050565b6000610e5782611dd4565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eca90613710565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b610f536116cb565b73ffffffffffffffffffffffffffffffffffffffff16610f7161114a565b73ffffffffffffffffffffffffffffffffffffffff1614610fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbe90613750565b60405180910390fd5b610fd16000611fd7565b565b610fdb6116cb565b73ffffffffffffffffffffffffffffffffffffffff16610ff961114a565b73ffffffffffffffffffffffffffffffffffffffff161461104f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104690613750565b60405180910390fd5b600a548161105b6109dc565b6110659190613a4b565b11156110a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109d90613850565b60405180910390fd5b6110b082826116d3565b5050565b6110bc6116cb565b73ffffffffffffffffffffffffffffffffffffffff166110da61114a565b73ffffffffffffffffffffffffffffffffffffffff1614611130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112790613750565b60405180910390fd5b80600c9080519060200190611146929190612b4a565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61117b612bd0565b61118482611dd4565b9050919050565b60606003805461119a90613c4a565b80601f01602080910402602001604051908101604052809291908181526020018280546111c690613c4a565b80156112135780601f106111e857610100808354040283529160200191611213565b820191906000526020600020905b8154815290600101906020018083116111f657829003601f168201915b5050505050905090565b6112256116cb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128a90613790565b60405180910390fd5b80600760006112a06116cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661134d6116cb565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161139291906135f3565b60405180910390a35050565b6113a66116cb565b73ffffffffffffffffffffffffffffffffffffffff166113c461114a565b73ffffffffffffffffffffffffffffffffffffffff161461141a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141190613750565b60405180910390fd5b80600a8190555050565b61142f84848461181b565b61143b8484848461209b565b61147a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611471906137f0565b60405180910390fd5b50505050565b606061148b8261175b565b6114ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c190613770565b60405180910390fd5b60006114d583612232565b905060008151116114f55760405180602001604052806000815250611519565b80600c604051602001611509929190613568565b6040516020818303038152906040525b915050919050565b600a5481565b60085481565b6000611538826122d9565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115db6116cb565b73ffffffffffffffffffffffffffffffffffffffff166115f961114a565b73ffffffffffffffffffffffffffffffffffffffff161461164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690613750565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b690613650565b60405180910390fd5b6116c881611fd7565b50565b600033905090565b6116ed8282604051806020016040528060008152506123c2565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061182682611dd4565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661184d6116cb565b73ffffffffffffffffffffffffffffffffffffffff1614806118a957506118726116cb565b73ffffffffffffffffffffffffffffffffffffffff166118918461083e565b73ffffffffffffffffffffffffffffffffffffffff16145b806118c557506118c482600001516118bf6116cb565b61153f565b5b905080611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fe906137b0565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197090613730565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156119e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e0906136b0565b60405180910390fd5b6119f685858560016128a2565b611a066000848460000151611769565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611a749190613ad2565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611b189190613a05565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184611c1e9190613a4b565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611d6457611c948161175b565b15611d63576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611dcc86868660016128a8565b505050505050565b611ddc612bd0565b611de58261175b565b611e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1b90613670565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000003e88310611e885760017f00000000000000000000000000000000000000000000000000000000000003e884611e7b9190613b06565b611e859190613a4b565b90505b60008390505b818110611f96576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611f8257809350505050611fd2565b508080611f8e90613c20565b915050611e8e565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc990613890565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006120bc8473ffffffffffffffffffffffffffffffffffffffff166128ae565b15612225578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120e56116cb565b8786866040518563ffffffff1660e01b815260040161210794939291906135a7565b602060405180830381600087803b15801561212157600080fd5b505af192505050801561215257506040513d601f19601f8201168201806040525081019061214f9190612fb6565b60015b6121d5573d8060008114612182576040519150601f19603f3d011682016040523d82523d6000602084013e612187565b606091505b506000815114156121cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c4906137f0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061222a565b600190505b949350505050565b606061223d8261175b565b61227c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227390613770565b60405180910390fd5b60006122866128d1565b905060008151116122a657604051806020016040528060008152506122d1565b806122b084612963565b6040516020016122c1929190613544565b6040516020818303038152906040525b915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561234a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612341906136d0565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243090613830565b60405180910390fd5b6124428161175b565b15612482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247990613810565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000003e88311156124e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dc906138d0565b60405180910390fd5b6124f260008583866128a2565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516125ef9190613a05565b6fffffffffffffffffffffffffffffffff1681526020018583602001516126169190613a05565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561288557818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612825600088848861209b565b612864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285b906137f0565b60405180910390fd5b818061286f90613cad565b925050808061287d90613cad565b9150506127b4565b508060018190555061289a60008785886128a8565b505050505050565b50505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6060600b80546128e090613c4a565b80601f016020809104026020016040519081016040528092919081815260200182805461290c90613c4a565b80156129595780601f1061292e57610100808354040283529160200191612959565b820191906000526020600020905b81548152906001019060200180831161293c57829003601f168201915b5050505050905090565b606060008214156129ab576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612abf565b600082905060005b600082146129dd5780806129c690613cad565b915050600a826129d69190613aa1565b91506129b3565b60008167ffffffffffffffff8111156129f9576129f8613de3565b5b6040519080825280601f01601f191660200182016040528015612a2b5781602001600182028036833780820191505090505b5090505b60008514612ab857600182612a449190613b06565b9150600a85612a539190613cf6565b6030612a5f9190613a4b565b60f81b818381518110612a7557612a74613db4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ab19190613aa1565b9450612a2f565b8093505050505b919050565b828054612ad090613c4a565b90600052602060002090601f016020900481019282612af25760008555612b39565b82601f10612b0b57803560ff1916838001178555612b39565b82800160010185558215612b39579182015b82811115612b38578235825591602001919060010190612b1d565b5b509050612b469190612c0a565b5090565b828054612b5690613c4a565b90600052602060002090601f016020900481019282612b785760008555612bbf565b82601f10612b9157805160ff1916838001178555612bbf565b82800160010185558215612bbf579182015b82811115612bbe578251825591602001919060010190612ba3565b5b509050612bcc9190612c0a565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612c23576000816000905550600101612c0b565b5090565b6000612c3a612c358461394b565b613926565b905082815260208101848484011115612c5657612c55613e21565b5b612c61848285613bde565b509392505050565b6000612c7c612c778461397c565b613926565b905082815260208101848484011115612c9857612c97613e21565b5b612ca3848285613bde565b509392505050565b600081359050612cba81614473565b92915050565b600081359050612ccf8161448a565b92915050565b600081359050612ce4816144a1565b92915050565b600081519050612cf9816144a1565b92915050565b600082601f830112612d1457612d13613e17565b5b8135612d24848260208601612c27565b91505092915050565b60008083601f840112612d4357612d42613e17565b5b8235905067ffffffffffffffff811115612d6057612d5f613e12565b5b602083019150836001820283011115612d7c57612d7b613e1c565b5b9250929050565b600082601f830112612d9857612d97613e17565b5b8135612da8848260208601612c69565b91505092915050565b600081359050612dc0816144b8565b92915050565b600060208284031215612ddc57612ddb613e2b565b5b6000612dea84828501612cab565b91505092915050565b60008060408385031215612e0a57612e09613e2b565b5b6000612e1885828601612cab565b9250506020612e2985828601612cab565b9150509250929050565b600080600060608486031215612e4c57612e4b613e2b565b5b6000612e5a86828701612cab565b9350506020612e6b86828701612cab565b9250506040612e7c86828701612db1565b9150509250925092565b60008060008060808587031215612ea057612e9f613e2b565b5b6000612eae87828801612cab565b9450506020612ebf87828801612cab565b9350506040612ed087828801612db1565b925050606085013567ffffffffffffffff811115612ef157612ef0613e26565b5b612efd87828801612cff565b91505092959194509250565b60008060408385031215612f2057612f1f613e2b565b5b6000612f2e85828601612cab565b9250506020612f3f85828601612cc0565b9150509250929050565b60008060408385031215612f6057612f5f613e2b565b5b6000612f6e85828601612cab565b9250506020612f7f85828601612db1565b9150509250929050565b600060208284031215612f9f57612f9e613e2b565b5b6000612fad84828501612cd5565b91505092915050565b600060208284031215612fcc57612fcb613e2b565b5b6000612fda84828501612cea565b91505092915050565b60008060208385031215612ffa57612ff9613e2b565b5b600083013567ffffffffffffffff81111561301857613017613e26565b5b61302485828601612d2d565b92509250509250929050565b60006020828403121561304657613045613e2b565b5b600082013567ffffffffffffffff81111561306457613063613e26565b5b61307084828501612d83565b91505092915050565b60006020828403121561308f5761308e613e2b565b5b600061309d84828501612db1565b91505092915050565b6130af81613b3a565b82525050565b6130be81613b3a565b82525050565b6130cd81613b4c565b82525050565b60006130de826139c2565b6130e881856139d8565b93506130f8818560208601613bed565b61310181613e30565b840191505092915050565b6000613117826139cd565b61312181856139e9565b9350613131818560208601613bed565b61313a81613e30565b840191505092915050565b6000613150826139cd565b61315a81856139fa565b935061316a818560208601613bed565b80840191505092915050565b6000815461318381613c4a565b61318d81866139fa565b945060018216600081146131a857600181146131b9576131ec565b60ff198316865281860193506131ec565b6131c2856139ad565b60005b838110156131e4578154818901526001820191506020810190506131c5565b838801955050505b50505092915050565b60006132026022836139e9565b915061320d82613e41565b604082019050919050565b60006132256026836139e9565b915061323082613e90565b604082019050919050565b6000613248602a836139e9565b915061325382613edf565b604082019050919050565b600061326b6023836139e9565b915061327682613f2e565b604082019050919050565b600061328e6025836139e9565b915061329982613f7d565b604082019050919050565b60006132b16031836139e9565b91506132bc82613fcc565b604082019050919050565b60006132d46039836139e9565b91506132df8261401b565b604082019050919050565b60006132f7602b836139e9565b91506133028261406a565b604082019050919050565b600061331a6026836139e9565b9150613325826140b9565b604082019050919050565b600061333d6020836139e9565b915061334882614108565b602082019050919050565b6000613360602f836139e9565b915061336b82614131565b604082019050919050565b6000613383601a836139e9565b915061338e82614180565b602082019050919050565b60006133a66032836139e9565b91506133b1826141a9565b604082019050919050565b60006133c96022836139e9565b91506133d4826141f8565b604082019050919050565b60006133ec6033836139e9565b91506133f782614247565b604082019050919050565b600061340f601d836139e9565b915061341a82614296565b602082019050919050565b60006134326021836139e9565b915061343d826142bf565b604082019050919050565b60006134556013836139e9565b91506134608261430e565b602082019050919050565b6000613478602e836139e9565b915061348382614337565b604082019050919050565b600061349b602f836139e9565b91506134a682614386565b604082019050919050565b60006134be602d836139e9565b91506134c9826143d5565b604082019050919050565b60006134e16022836139e9565b91506134ec82614424565b604082019050919050565b60408201600082015161350d60008501826130a6565b5060208201516135206020850182613535565b50505050565b61352f81613bc0565b82525050565b61353e81613bca565b82525050565b60006135508285613145565b915061355c8284613145565b91508190509392505050565b60006135748285613145565b91506135808284613176565b91508190509392505050565b60006020820190506135a160008301846130b5565b92915050565b60006080820190506135bc60008301876130b5565b6135c960208301866130b5565b6135d66040830185613526565b81810360608301526135e881846130d3565b905095945050505050565b600060208201905061360860008301846130c4565b92915050565b60006020820190508181036000830152613628818461310c565b905092915050565b60006020820190508181036000830152613649816131f5565b9050919050565b6000602082019050818103600083015261366981613218565b9050919050565b600060208201905081810360008301526136898161323b565b9050919050565b600060208201905081810360008301526136a98161325e565b9050919050565b600060208201905081810360008301526136c981613281565b9050919050565b600060208201905081810360008301526136e9816132a4565b9050919050565b60006020820190508181036000830152613709816132c7565b9050919050565b60006020820190508181036000830152613729816132ea565b9050919050565b600060208201905081810360008301526137498161330d565b9050919050565b6000602082019050818103600083015261376981613330565b9050919050565b6000602082019050818103600083015261378981613353565b9050919050565b600060208201905081810360008301526137a981613376565b9050919050565b600060208201905081810360008301526137c981613399565b9050919050565b600060208201905081810360008301526137e9816133bc565b9050919050565b60006020820190508181036000830152613809816133df565b9050919050565b6000602082019050818103600083015261382981613402565b9050919050565b6000602082019050818103600083015261384981613425565b9050919050565b6000602082019050818103600083015261386981613448565b9050919050565b600060208201905081810360008301526138898161346b565b9050919050565b600060208201905081810360008301526138a98161348e565b9050919050565b600060208201905081810360008301526138c9816134b1565b9050919050565b600060208201905081810360008301526138e9816134d4565b9050919050565b600060408201905061390560008301846134f7565b92915050565b60006020820190506139206000830184613526565b92915050565b6000613930613941565b905061393c8282613c7c565b919050565b6000604051905090565b600067ffffffffffffffff82111561396657613965613de3565b5b61396f82613e30565b9050602081019050919050565b600067ffffffffffffffff82111561399757613996613de3565b5b6139a082613e30565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613a1082613b84565b9150613a1b83613b84565b9250826fffffffffffffffffffffffffffffffff03821115613a4057613a3f613d27565b5b828201905092915050565b6000613a5682613bc0565b9150613a6183613bc0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a9657613a95613d27565b5b828201905092915050565b6000613aac82613bc0565b9150613ab783613bc0565b925082613ac757613ac6613d56565b5b828204905092915050565b6000613add82613b84565b9150613ae883613b84565b925082821015613afb57613afa613d27565b5b828203905092915050565b6000613b1182613bc0565b9150613b1c83613bc0565b925082821015613b2f57613b2e613d27565b5b828203905092915050565b6000613b4582613ba0565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015613c0b578082015181840152602081019050613bf0565b83811115613c1a576000848401525b50505050565b6000613c2b82613bc0565b91506000821415613c3f57613c3e613d27565b5b600182039050919050565b60006002820490506001821680613c6257607f821691505b60208210811415613c7657613c75613d85565b5b50919050565b613c8582613e30565b810181811067ffffffffffffffff82111715613ca457613ca3613de3565b5b80604052505050565b6000613cb882613bc0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ceb57613cea613d27565b5b600182019050919050565b6000613d0182613bc0565b9150613d0c83613bc0565b925082613d1c57613d1b613d56565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d617820537570706c7920526561636865642e00000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b61447c81613b3a565b811461448757600080fd5b50565b61449381613b4c565b811461449e57600080fd5b50565b6144aa81613b58565b81146144b557600080fd5b50565b6144c181613bc0565b81146144cc57600080fd5b5056fea2646970667358221220e49add4c75692dd266debcf03d126f48bd3b8c6415001da213141e81b5b1aaff64736f6c63430008070033

Deployed Bytecode Sourcemap

23249:2090:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23888:115;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13225:422;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15011:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16220:292;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15801:413;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12015:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17055:162;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12355:864;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23432:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24249:109;;;:::i;:::-;;17223:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12121:228;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24135:106;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14881:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13653:258;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7209:94;;;:::i;:::-;;23681:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24455:100;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6990:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24682:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15117:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16518:311;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24364:85;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17406:355;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24857:479;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23319:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21027:43;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24561:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16835:214;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7309:229;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23888:115;7134:12;:10;:12::i;:::-;7123:23;;:7;:5;:7::i;:::-;:23;;;7115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23971:24:::1;23981:7;23990:4;23971:9;:24::i;:::-;23888:115:::0;;:::o;13225:422::-;13372:4;13429:25;13414:40;;;:11;:40;;;;:105;;;;13486:33;13471:48;;;:11;:48;;;;13414:105;:172;;;;13551:35;13536:50;;;:11;:50;;;;13414:172;:225;;;;13603:36;13627:11;13603:23;:36::i;:::-;13414:225;13394:245;;13225:422;;;:::o;15011:100::-;15065:13;15098:5;15091:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15011:100;:::o;16220:292::-;16324:7;16371:16;16379:7;16371;:16::i;:::-;16349:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;16480:15;:24;16496:7;16480:24;;;;;;;;;;;;;;;;;;;;;16473:31;;16220:292;;;:::o;15801:413::-;15874:13;15890:24;15906:7;15890:15;:24::i;:::-;15874:40;;15939:5;15933:11;;:2;:11;;;;15925:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;16034:5;16018:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;16043:37;16060:5;16067:12;:10;:12::i;:::-;16043:16;:37::i;:::-;16018:62;15996:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;16178:28;16187:2;16191:7;16200:5;16178:8;:28::i;:::-;15863:351;15801:413;;:::o;12015:100::-;12068:7;12095:12;;12088:19;;12015:100;:::o;17055:162::-;17181:28;17191:4;17197:2;17201:7;17181:9;:28::i;:::-;17055:162;;;:::o;12355:864::-;12480:7;12521:16;12531:5;12521:9;:16::i;:::-;12513:5;:24;12505:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12587:22;12612:13;:11;:13::i;:::-;12587:38;;12636:19;12670:25;12724:9;12719:426;12743:14;12739:1;:18;12719:426;;;12779:31;12813:11;:14;12825:1;12813:14;;;;;;;;;;;12779:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12872:1;12846:28;;:9;:14;;;:28;;;12842:103;;12915:9;:14;;;12895:34;;12842:103;12984:5;12963:26;;:17;:26;;;12959:175;;;13029:5;13014:11;:20;13010:77;;;13066:1;13059:8;;;;;;;;;13010:77;13105:13;;;;;:::i;:::-;;;;12959:175;12764:381;12759:3;;;;;:::i;:::-;;;;12719:426;;;;13155:56;;;;;;;;;;:::i;:::-;;;;;;;;12355:864;;;;;:::o;23432:29::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24249:109::-;7134:12;:10;:12::i;:::-;7123:23;;:7;:5;:7::i;:::-;:23;;;7115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24307:10:::1;24299:28;;:51;24328:21;24299:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;24249:109::o:0;17223:177::-;17353:39;17370:4;17376:2;17380:7;17353:39;;;;;;;;;;;;:16;:39::i;:::-;17223:177;;;:::o;12121:228::-;12224:7;12265:13;:11;:13::i;:::-;12257:5;:21;12249:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;12336:5;12329:12;;12121:228;;;:::o;24135:106::-;7134:12;:10;:12::i;:::-;7123:23;;:7;:5;:7::i;:::-;:23;;;7115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24226:7:::1;;24210:13;:23;;;;;;;:::i;:::-;;24135:106:::0;;:::o;14881:124::-;14945:7;14972:20;14984:7;14972:11;:20::i;:::-;:25;;;14965:32;;14881:124;;;:::o;13653:258::-;13717:7;13776:1;13759:19;;:5;:19;;;;13737:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;13875:12;:19;13888:5;13875:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;13867:36;;13860:43;;13653:258;;;:::o;7209:94::-;7134:12;:10;:12::i;:::-;7123:23;;:7;:5;:7::i;:::-;:23;;;7115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7274:21:::1;7292:1;7274:9;:21::i;:::-;7209:94::o:0;23681:201::-;7134:12;:10;:12::i;:::-;7123:23;;:7;:5;:7::i;:::-;:23;;;7115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23803:8:::1;;23795:4;23779:13;:11;:13::i;:::-;:20;;;;:::i;:::-;:32;;23771:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23850:24;23860:7;23869:4;23850:9;:24::i;:::-;23681:201:::0;;:::o;24455:100::-;7134:12;:10;:12::i;:::-;7123:23;;:7;:5;:7::i;:::-;:23;;;7115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24542:5:::1;24529:10;:18;;;;;;;;;;;;:::i;:::-;;24455:100:::0;:::o;6990:87::-;7036:7;7063:6;;;;;;;;;;;7056:13;;6990:87;:::o;24682:167::-;24775:21;;:::i;:::-;24821:20;24833:7;24821:11;:20::i;:::-;24814:27;;24682:167;;;:::o;15117:104::-;15173:13;15206:7;15199:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15117:104;:::o;16518:311::-;16648:12;:10;:12::i;:::-;16636:24;;:8;:24;;;;16628:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;16749:8;16704:18;:32;16723:12;:10;:12::i;:::-;16704:32;;;;;;;;;;;;;;;:42;16737:8;16704:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;16802:8;16773:48;;16788:12;:10;:12::i;:::-;16773:48;;;16812:8;16773:48;;;;;;:::i;:::-;;;;;;;;16518:311;;:::o;24364:85::-;7134:12;:10;:12::i;:::-;7123:23;;:7;:5;:7::i;:::-;:23;;;7115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24436:5:::1;24425:8;:16;;;;24364:85:::0;:::o;17406:355::-;17565:28;17575:4;17581:2;17585:7;17565:9;:28::i;:::-;17626:48;17649:4;17655:2;17659:7;17668:5;17626:22;:48::i;:::-;17604:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;17406:355;;;;:::o;24857:479::-;24975:13;25028:16;25036:7;25028;:16::i;:::-;25006:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;25132:23;25158;25173:7;25158:14;:23::i;:::-;25132:49;;25238:1;25218:9;25212:23;:27;:116;;;;;;;;;;;;;;;;;25283:9;25294:10;25266:39;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25212:116;25192:136;;;24857:479;;;:::o;23319:29::-;;;;:::o;21027:43::-;;;;:::o;24561:113::-;24619:7;24646:20;24660:5;24646:13;:20::i;:::-;24639:27;;24561:113;;;:::o;16835:214::-;16977:4;17006:18;:25;17025:5;17006:25;;;;;;;;;;;;;;;:35;17032:8;17006:35;;;;;;;;;;;;;;;;;;;;;;;;;16999:42;;16835:214;;;;:::o;7309:229::-;7134:12;:10;:12::i;:::-;7123:23;;:7;:5;:7::i;:::-;:23;;;7115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7432:1:::1;7412:22;;:8;:22;;;;7390:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;7511:19;7521:8;7511:9;:19::i;:::-;7309:229:::0;:::o;6497:98::-;6550:7;6577:10;6570:17;;6497:98;:::o;17886:104::-;17955:27;17965:2;17969:8;17955:27;;;;;;;;;;;;:9;:27::i;:::-;17886:104;;:::o;9522:207::-;9652:4;9696:25;9681:40;;;:11;:40;;;;9674:47;;9522:207;;;:::o;17767:111::-;17824:4;17858:12;;17848:7;:22;17841:29;;17767:111;;;:::o;20823:196::-;20965:2;20938:15;:24;20954:7;20938:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;21003:7;20999:2;20983:28;;20992:5;20983:28;;;;;;;;;;;;20823:196;;;:::o;19277:1540::-;19392:35;19430:20;19442:7;19430:11;:20::i;:::-;19392:58;;19463:22;19505:13;:18;;;19489:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;19564:12;:10;:12::i;:::-;19540:36;;:20;19552:7;19540:11;:20::i;:::-;:36;;;19489:87;:154;;;;19593:50;19610:13;:18;;;19630:12;:10;:12::i;:::-;19593:16;:50::i;:::-;19489:154;19463:181;;19679:17;19657:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;19831:4;19809:26;;:13;:18;;;:26;;;19787:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;19934:1;19920:16;;:2;:16;;;;19912:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;19991:43;20013:4;20019:2;20023:7;20032:1;19991:21;:43::i;:::-;20045:49;20062:1;20066:7;20075:13;:18;;;20045:8;:49::i;:::-;20137:1;20107:12;:18;20120:4;20107:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20177:1;20149:12;:16;20162:2;20149:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20212:43;;;;;;;;20227:2;20212:43;;;;;;20238:15;20212:43;;;;;20189:11;:20;20201:7;20189:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20380:19;20412:1;20402:7;:11;;;;:::i;:::-;20380:33;;20469:1;20428:43;;:11;:24;20440:11;20428:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;20424:288;;;20492:20;20500:11;20492:7;:20::i;:::-;20488:213;;;20560:125;;;;;;;;20597:13;:18;;;20560:125;;;;;;20638:13;:28;;;20560:125;;;;;20533:11;:24;20545:11;20533:24;;;;;;;;;;;:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20488:213;20424:288;20748:7;20744:2;20729:27;;20738:4;20729:27;;;;;;;;;;;;20767:42;20788:4;20794:2;20798:7;20807:1;20767:20;:42::i;:::-;19381:1436;;;19277:1540;;;:::o;14193:682::-;14281:21;;:::i;:::-;14328:16;14336:7;14328;:16::i;:::-;14320:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14404:26;14456:12;14445:7;:23;14441:103;;14531:1;14516:12;14506:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;14485:47;;14441:103;14561:12;14576:7;14561:22;;14556:242;14593:18;14585:4;:26;14556:242;;14636:31;14670:11;:17;14682:4;14670:17;;;;;;;;;;;14636:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14732:1;14706:28;;:9;:14;;;:28;;;14702:85;;14762:9;14755:16;;;;;;;14702:85;14621:177;14613:6;;;;;:::i;:::-;;;;14556:242;;;;14810:57;;;;;;;;;;:::i;:::-;;;;;;;;14193:682;;;;:::o;7546:173::-;7602:16;7621:6;;;;;;;;;;;7602:25;;7647:8;7638:6;;:17;;;;;;;;;;;;;;;;;;7702:8;7671:40;;7692:8;7671:40;;;;;;;;;;;;7591:128;7546:173;:::o;21928:985::-;22083:4;22104:15;:2;:13;;;:15::i;:::-;22100:806;;;22173:2;22157:36;;;22216:12;:10;:12::i;:::-;22251:4;22278:7;22308:5;22157:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;22136:715;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22536:1;22519:6;:13;:18;22515:321;;;22562:109;;;;;;;;;;:::i;:::-;;;;;;;;22515:321;22786:6;22780:13;22771:6;22767:2;22763:15;22756:38;22136:715;22406:45;;;22396:55;;;:6;:55;;;;22389:62;;;;;22100:806;22890:4;22883:11;;21928:985;;;;;;;:::o;15227:468::-;15345:13;15398:16;15406:7;15398;:16::i;:::-;15376:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;15502:21;15526:10;:8;:10::i;:::-;15502:34;;15591:1;15573:7;15567:21;:25;:120;;;;;;;;;;;;;;;;;15636:7;15645:18;:7;:16;:18::i;:::-;15619:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;15567:120;15547:140;;;15227:468;;;:::o;13919:266::-;13980:7;14039:1;14022:19;;:5;:19;;;;14000:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;14144:12;:19;14157:5;14144:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;14136:41;;14129:48;;13919:266;;;:::o;17996:1275::-;18119:20;18142:12;;18119:35;;18187:1;18173:16;;:2;:16;;;;18165:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;18247:21;18255:12;18247:7;:21::i;:::-;18246:22;18238:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;18333:12;18321:8;:24;;18313:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;18397:61;18427:1;18431:2;18435:12;18449:8;18397:21;:61::i;:::-;18471:30;18504:12;:16;18517:2;18504:16;;;;;;;;;;;;;;;18471:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18550:135;;;;;;;;18606:8;18576:11;:19;;;:39;;;;:::i;:::-;18550:135;;;;;;18665:8;18630:11;:24;;;:44;;;;:::i;:::-;18550:135;;;;;18531:12;:16;18544:2;18531:16;;;;;;;;;;;;;;;:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18724:43;;;;;;;;18739:2;18724:43;;;;;;18750:15;18724:43;;;;;18696:11;:25;18708:12;18696:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18780:20;18803:12;18780:35;;18833:9;18828:325;18852:8;18848:1;:12;18828:325;;;18912:12;18908:2;18887:38;;18904:1;18887:38;;;;;;;;;;;;18966:59;18997:1;19001:2;19005:12;19019:5;18966:22;:59::i;:::-;18940:172;;;;;;;;;;;;:::i;:::-;;;;;;;;;19127:14;;;;;:::i;:::-;;;;18862:3;;;;;:::i;:::-;;;;18828:325;;;;19180:12;19165;:27;;;;19203:60;19232:1;19236:2;19240:12;19254:8;19203:20;:60::i;:::-;18108:1163;;;17996:1275;;;:::o;22919:159::-;;;;;:::o;23084:158::-;;;;;:::o;2503:117::-;2563:4;2611:1;2589:7;:19;;;:23;2582:30;;2503:117;;;:::o;24013:114::-;24073:13;24106;24099:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24013:114;:::o;7891:656::-;7947:13;8110:1;8101:5;:10;8097:53;;;8128:10;;;;;;;;;;;;;;;;;;;;;8097:53;8160:12;8175:5;8160:20;;8191:14;8216:78;8231:1;8223:4;:9;8216:78;;8249:8;;;;;:::i;:::-;;;;8280:2;8272:10;;;;;:::i;:::-;;;8216:78;;;8304:19;8336:6;8326:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8304:39;;8354:154;8370:1;8361:5;:10;8354:154;;8398:1;8388:11;;;;;:::i;:::-;;;8465:2;8457:5;:10;;;;:::i;:::-;8444:2;:24;;;;:::i;:::-;8431:39;;8414:6;8421;8414:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;8494:2;8485:11;;;;;:::i;:::-;;;8354:154;;;8532:6;8518:21;;;;;7891:656;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::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;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:553::-;1844:8;1854:6;1904:3;1897:4;1889:6;1885:17;1881:27;1871:122;;1912:79;;:::i;:::-;1871:122;2025:6;2012:20;2002:30;;2055:18;2047:6;2044:30;2041:117;;;2077:79;;:::i;:::-;2041:117;2191:4;2183:6;2179:17;2167:29;;2245:3;2237:4;2229:6;2225:17;2215:8;2211:32;2208:41;2205:128;;;2252:79;;:::i;:::-;2205:128;1786:553;;;;;:::o;2359:340::-;2415:5;2464:3;2457:4;2449:6;2445:17;2441:27;2431:122;;2472:79;;:::i;:::-;2431:122;2589:6;2576:20;2614:79;2689:3;2681:6;2674:4;2666:6;2662:17;2614:79;:::i;:::-;2605:88;;2421:278;2359:340;;;;:::o;2705:139::-;2751:5;2789:6;2776:20;2767:29;;2805:33;2832:5;2805:33;:::i;:::-;2705:139;;;;:::o;2850:329::-;2909:6;2958:2;2946:9;2937:7;2933:23;2929:32;2926:119;;;2964:79;;:::i;:::-;2926:119;3084:1;3109:53;3154:7;3145:6;3134:9;3130:22;3109:53;:::i;:::-;3099:63;;3055:117;2850:329;;;;:::o;3185:474::-;3253:6;3261;3310:2;3298:9;3289:7;3285:23;3281:32;3278:119;;;3316:79;;:::i;:::-;3278:119;3436:1;3461:53;3506:7;3497:6;3486:9;3482:22;3461:53;:::i;:::-;3451:63;;3407:117;3563:2;3589:53;3634:7;3625:6;3614:9;3610:22;3589:53;:::i;:::-;3579:63;;3534:118;3185:474;;;;;:::o;3665:619::-;3742:6;3750;3758;3807:2;3795:9;3786:7;3782:23;3778:32;3775:119;;;3813:79;;:::i;:::-;3775:119;3933:1;3958:53;4003:7;3994:6;3983:9;3979:22;3958:53;:::i;:::-;3948:63;;3904:117;4060:2;4086:53;4131:7;4122:6;4111:9;4107:22;4086:53;:::i;:::-;4076:63;;4031:118;4188:2;4214:53;4259:7;4250:6;4239:9;4235:22;4214:53;:::i;:::-;4204:63;;4159:118;3665:619;;;;;:::o;4290:943::-;4385:6;4393;4401;4409;4458:3;4446:9;4437:7;4433:23;4429:33;4426:120;;;4465:79;;:::i;:::-;4426:120;4585:1;4610:53;4655:7;4646:6;4635:9;4631:22;4610:53;:::i;:::-;4600:63;;4556:117;4712:2;4738:53;4783:7;4774:6;4763:9;4759:22;4738:53;:::i;:::-;4728:63;;4683:118;4840:2;4866:53;4911:7;4902:6;4891:9;4887:22;4866:53;:::i;:::-;4856:63;;4811:118;4996:2;4985:9;4981:18;4968:32;5027:18;5019:6;5016:30;5013:117;;;5049:79;;:::i;:::-;5013:117;5154:62;5208:7;5199:6;5188:9;5184:22;5154:62;:::i;:::-;5144:72;;4939:287;4290:943;;;;;;;:::o;5239:468::-;5304:6;5312;5361:2;5349:9;5340:7;5336:23;5332:32;5329:119;;;5367:79;;:::i;:::-;5329:119;5487:1;5512:53;5557:7;5548:6;5537:9;5533:22;5512:53;:::i;:::-;5502:63;;5458:117;5614:2;5640:50;5682:7;5673:6;5662:9;5658:22;5640:50;:::i;:::-;5630:60;;5585:115;5239:468;;;;;:::o;5713:474::-;5781:6;5789;5838:2;5826:9;5817:7;5813:23;5809:32;5806:119;;;5844:79;;:::i;:::-;5806:119;5964:1;5989:53;6034:7;6025:6;6014:9;6010:22;5989:53;:::i;:::-;5979:63;;5935:117;6091:2;6117:53;6162:7;6153:6;6142:9;6138:22;6117:53;:::i;:::-;6107:63;;6062:118;5713:474;;;;;:::o;6193:327::-;6251:6;6300:2;6288:9;6279:7;6275:23;6271:32;6268:119;;;6306:79;;:::i;:::-;6268:119;6426:1;6451:52;6495:7;6486:6;6475:9;6471:22;6451:52;:::i;:::-;6441:62;;6397:116;6193:327;;;;:::o;6526:349::-;6595:6;6644:2;6632:9;6623:7;6619:23;6615:32;6612:119;;;6650:79;;:::i;:::-;6612:119;6770:1;6795:63;6850:7;6841:6;6830:9;6826:22;6795:63;:::i;:::-;6785:73;;6741:127;6526:349;;;;:::o;6881:529::-;6952:6;6960;7009:2;6997:9;6988:7;6984:23;6980:32;6977:119;;;7015:79;;:::i;:::-;6977:119;7163:1;7152:9;7148:17;7135:31;7193:18;7185:6;7182:30;7179:117;;;7215:79;;:::i;:::-;7179:117;7328:65;7385:7;7376:6;7365:9;7361:22;7328:65;:::i;:::-;7310:83;;;;7106:297;6881:529;;;;;:::o;7416:509::-;7485:6;7534:2;7522:9;7513:7;7509:23;7505:32;7502:119;;;7540:79;;:::i;:::-;7502:119;7688:1;7677:9;7673:17;7660:31;7718:18;7710:6;7707:30;7704:117;;;7740:79;;:::i;:::-;7704:117;7845:63;7900:7;7891:6;7880:9;7876:22;7845:63;:::i;:::-;7835:73;;7631:287;7416:509;;;;:::o;7931:329::-;7990:6;8039:2;8027:9;8018:7;8014:23;8010:32;8007:119;;;8045:79;;:::i;:::-;8007:119;8165:1;8190:53;8235:7;8226:6;8215:9;8211:22;8190:53;:::i;:::-;8180:63;;8136:117;7931:329;;;;:::o;8266:108::-;8343:24;8361:5;8343:24;:::i;:::-;8338:3;8331:37;8266:108;;:::o;8380:118::-;8467:24;8485:5;8467:24;:::i;:::-;8462:3;8455:37;8380:118;;:::o;8504:109::-;8585:21;8600:5;8585:21;:::i;:::-;8580:3;8573:34;8504:109;;:::o;8619:360::-;8705:3;8733:38;8765:5;8733:38;:::i;:::-;8787:70;8850:6;8845:3;8787:70;:::i;:::-;8780:77;;8866:52;8911:6;8906:3;8899:4;8892:5;8888:16;8866:52;:::i;:::-;8943:29;8965:6;8943:29;:::i;:::-;8938:3;8934:39;8927:46;;8709:270;8619:360;;;;:::o;8985:364::-;9073:3;9101:39;9134:5;9101:39;:::i;:::-;9156:71;9220:6;9215:3;9156:71;:::i;:::-;9149:78;;9236:52;9281:6;9276:3;9269:4;9262:5;9258:16;9236:52;:::i;:::-;9313:29;9335:6;9313:29;:::i;:::-;9308:3;9304:39;9297:46;;9077:272;8985:364;;;;:::o;9355:377::-;9461:3;9489:39;9522:5;9489:39;:::i;:::-;9544:89;9626:6;9621:3;9544:89;:::i;:::-;9537:96;;9642:52;9687:6;9682:3;9675:4;9668:5;9664:16;9642:52;:::i;:::-;9719:6;9714:3;9710:16;9703:23;;9465:267;9355:377;;;;:::o;9762:845::-;9865:3;9902:5;9896:12;9931:36;9957:9;9931:36;:::i;:::-;9983:89;10065:6;10060:3;9983:89;:::i;:::-;9976:96;;10103:1;10092:9;10088:17;10119:1;10114:137;;;;10265:1;10260:341;;;;10081:520;;10114:137;10198:4;10194:9;10183;10179:25;10174:3;10167:38;10234:6;10229:3;10225:16;10218:23;;10114:137;;10260:341;10327:38;10359:5;10327:38;:::i;:::-;10387:1;10401:154;10415:6;10412:1;10409:13;10401:154;;;10489:7;10483:14;10479:1;10474:3;10470:11;10463:35;10539:1;10530:7;10526:15;10515:26;;10437:4;10434:1;10430:12;10425:17;;10401:154;;;10584:6;10579:3;10575:16;10568:23;;10267:334;;10081:520;;9869:738;;9762:845;;;;:::o;10613:366::-;10755:3;10776:67;10840:2;10835:3;10776:67;:::i;:::-;10769:74;;10852:93;10941:3;10852:93;:::i;:::-;10970:2;10965:3;10961:12;10954:19;;10613:366;;;:::o;10985:::-;11127:3;11148:67;11212:2;11207:3;11148:67;:::i;:::-;11141:74;;11224:93;11313:3;11224:93;:::i;:::-;11342:2;11337:3;11333:12;11326:19;;10985:366;;;:::o;11357:::-;11499:3;11520:67;11584:2;11579:3;11520:67;:::i;:::-;11513:74;;11596:93;11685:3;11596:93;:::i;:::-;11714:2;11709:3;11705:12;11698:19;;11357:366;;;:::o;11729:::-;11871:3;11892:67;11956:2;11951:3;11892:67;:::i;:::-;11885:74;;11968:93;12057:3;11968:93;:::i;:::-;12086:2;12081:3;12077:12;12070:19;;11729:366;;;:::o;12101:::-;12243:3;12264:67;12328:2;12323:3;12264:67;:::i;:::-;12257:74;;12340:93;12429:3;12340:93;:::i;:::-;12458:2;12453:3;12449:12;12442:19;;12101:366;;;:::o;12473:::-;12615:3;12636:67;12700:2;12695:3;12636:67;:::i;:::-;12629:74;;12712:93;12801:3;12712:93;:::i;:::-;12830:2;12825:3;12821:12;12814:19;;12473:366;;;:::o;12845:::-;12987:3;13008:67;13072:2;13067:3;13008:67;:::i;:::-;13001:74;;13084:93;13173:3;13084:93;:::i;:::-;13202:2;13197:3;13193:12;13186:19;;12845:366;;;:::o;13217:::-;13359:3;13380:67;13444:2;13439:3;13380:67;:::i;:::-;13373:74;;13456:93;13545:3;13456:93;:::i;:::-;13574:2;13569:3;13565:12;13558:19;;13217:366;;;:::o;13589:::-;13731:3;13752:67;13816:2;13811:3;13752:67;:::i;:::-;13745:74;;13828:93;13917:3;13828:93;:::i;:::-;13946:2;13941:3;13937:12;13930:19;;13589:366;;;:::o;13961:::-;14103:3;14124:67;14188:2;14183:3;14124:67;:::i;:::-;14117:74;;14200:93;14289:3;14200:93;:::i;:::-;14318:2;14313:3;14309:12;14302:19;;13961:366;;;:::o;14333:::-;14475:3;14496:67;14560:2;14555:3;14496:67;:::i;:::-;14489:74;;14572:93;14661:3;14572:93;:::i;:::-;14690:2;14685:3;14681:12;14674:19;;14333:366;;;:::o;14705:::-;14847:3;14868:67;14932:2;14927:3;14868:67;:::i;:::-;14861:74;;14944:93;15033:3;14944:93;:::i;:::-;15062:2;15057:3;15053:12;15046:19;;14705:366;;;:::o;15077:::-;15219:3;15240:67;15304:2;15299:3;15240:67;:::i;:::-;15233:74;;15316:93;15405:3;15316:93;:::i;:::-;15434:2;15429:3;15425:12;15418:19;;15077:366;;;:::o;15449:::-;15591:3;15612:67;15676:2;15671:3;15612:67;:::i;:::-;15605:74;;15688:93;15777:3;15688:93;:::i;:::-;15806:2;15801:3;15797:12;15790:19;;15449:366;;;:::o;15821:::-;15963:3;15984:67;16048:2;16043:3;15984:67;:::i;:::-;15977:74;;16060:93;16149:3;16060:93;:::i;:::-;16178:2;16173:3;16169:12;16162:19;;15821:366;;;:::o;16193:::-;16335:3;16356:67;16420:2;16415:3;16356:67;:::i;:::-;16349:74;;16432:93;16521:3;16432:93;:::i;:::-;16550:2;16545:3;16541:12;16534:19;;16193:366;;;:::o;16565:::-;16707:3;16728:67;16792:2;16787:3;16728:67;:::i;:::-;16721:74;;16804:93;16893:3;16804:93;:::i;:::-;16922:2;16917:3;16913:12;16906:19;;16565:366;;;:::o;16937:::-;17079:3;17100:67;17164:2;17159:3;17100:67;:::i;:::-;17093:74;;17176:93;17265:3;17176:93;:::i;:::-;17294:2;17289:3;17285:12;17278:19;;16937:366;;;:::o;17309:::-;17451:3;17472:67;17536:2;17531:3;17472:67;:::i;:::-;17465:74;;17548:93;17637:3;17548:93;:::i;:::-;17666:2;17661:3;17657:12;17650:19;;17309:366;;;:::o;17681:::-;17823:3;17844:67;17908:2;17903:3;17844:67;:::i;:::-;17837:74;;17920:93;18009:3;17920:93;:::i;:::-;18038:2;18033:3;18029:12;18022:19;;17681:366;;;:::o;18053:::-;18195:3;18216:67;18280:2;18275:3;18216:67;:::i;:::-;18209:74;;18292:93;18381:3;18292:93;:::i;:::-;18410:2;18405:3;18401:12;18394:19;;18053:366;;;:::o;18425:::-;18567:3;18588:67;18652:2;18647:3;18588:67;:::i;:::-;18581:74;;18664:93;18753:3;18664:93;:::i;:::-;18782:2;18777:3;18773:12;18766:19;;18425:366;;;:::o;18867:527::-;19026:4;19021:3;19017:14;19113:4;19106:5;19102:16;19096:23;19132:63;19189:4;19184:3;19180:14;19166:12;19132:63;:::i;:::-;19041:164;19297:4;19290:5;19286:16;19280:23;19316:61;19371:4;19366:3;19362:14;19348:12;19316:61;:::i;:::-;19215:172;18995:399;18867:527;;:::o;19400:118::-;19487:24;19505:5;19487:24;:::i;:::-;19482:3;19475:37;19400:118;;:::o;19524:105::-;19599:23;19616:5;19599:23;:::i;:::-;19594:3;19587:36;19524:105;;:::o;19635:435::-;19815:3;19837:95;19928:3;19919:6;19837:95;:::i;:::-;19830:102;;19949:95;20040:3;20031:6;19949:95;:::i;:::-;19942:102;;20061:3;20054:10;;19635:435;;;;;:::o;20076:429::-;20253:3;20275:95;20366:3;20357:6;20275:95;:::i;:::-;20268:102;;20387:92;20475:3;20466:6;20387:92;:::i;:::-;20380:99;;20496:3;20489:10;;20076:429;;;;;:::o;20511:222::-;20604:4;20642:2;20631:9;20627:18;20619:26;;20655:71;20723:1;20712:9;20708:17;20699:6;20655:71;:::i;:::-;20511:222;;;;:::o;20739:640::-;20934:4;20972:3;20961:9;20957:19;20949:27;;20986:71;21054:1;21043:9;21039:17;21030:6;20986:71;:::i;:::-;21067:72;21135:2;21124:9;21120:18;21111:6;21067:72;:::i;:::-;21149;21217:2;21206:9;21202:18;21193:6;21149:72;:::i;:::-;21268:9;21262:4;21258:20;21253:2;21242:9;21238:18;21231:48;21296:76;21367:4;21358:6;21296:76;:::i;:::-;21288:84;;20739:640;;;;;;;:::o;21385:210::-;21472:4;21510:2;21499:9;21495:18;21487:26;;21523:65;21585:1;21574:9;21570:17;21561:6;21523:65;:::i;:::-;21385:210;;;;:::o;21601:313::-;21714:4;21752:2;21741:9;21737:18;21729:26;;21801:9;21795:4;21791:20;21787:1;21776:9;21772:17;21765:47;21829:78;21902:4;21893:6;21829:78;:::i;:::-;21821:86;;21601:313;;;;:::o;21920:419::-;22086:4;22124:2;22113:9;22109:18;22101:26;;22173:9;22167:4;22163:20;22159:1;22148:9;22144:17;22137:47;22201:131;22327:4;22201:131;:::i;:::-;22193:139;;21920:419;;;:::o;22345:::-;22511:4;22549:2;22538:9;22534:18;22526:26;;22598:9;22592:4;22588:20;22584:1;22573:9;22569:17;22562:47;22626:131;22752:4;22626:131;:::i;:::-;22618:139;;22345:419;;;:::o;22770:::-;22936:4;22974:2;22963:9;22959:18;22951:26;;23023:9;23017:4;23013:20;23009:1;22998:9;22994:17;22987:47;23051:131;23177:4;23051:131;:::i;:::-;23043:139;;22770:419;;;:::o;23195:::-;23361:4;23399:2;23388:9;23384:18;23376:26;;23448:9;23442:4;23438:20;23434:1;23423:9;23419:17;23412:47;23476:131;23602:4;23476:131;:::i;:::-;23468:139;;23195:419;;;:::o;23620:::-;23786:4;23824:2;23813:9;23809:18;23801:26;;23873:9;23867:4;23863:20;23859:1;23848:9;23844:17;23837:47;23901:131;24027:4;23901:131;:::i;:::-;23893:139;;23620:419;;;:::o;24045:::-;24211:4;24249:2;24238:9;24234:18;24226:26;;24298:9;24292:4;24288:20;24284:1;24273:9;24269:17;24262:47;24326:131;24452:4;24326:131;:::i;:::-;24318:139;;24045:419;;;:::o;24470:::-;24636:4;24674:2;24663:9;24659:18;24651:26;;24723:9;24717:4;24713:20;24709:1;24698:9;24694:17;24687:47;24751:131;24877:4;24751:131;:::i;:::-;24743:139;;24470:419;;;:::o;24895:::-;25061:4;25099:2;25088:9;25084:18;25076:26;;25148:9;25142:4;25138:20;25134:1;25123:9;25119:17;25112:47;25176:131;25302:4;25176:131;:::i;:::-;25168:139;;24895:419;;;:::o;25320:::-;25486:4;25524:2;25513:9;25509:18;25501:26;;25573:9;25567:4;25563:20;25559:1;25548:9;25544:17;25537:47;25601:131;25727:4;25601:131;:::i;:::-;25593:139;;25320:419;;;:::o;25745:::-;25911:4;25949:2;25938:9;25934:18;25926:26;;25998:9;25992:4;25988:20;25984:1;25973:9;25969:17;25962:47;26026:131;26152:4;26026:131;:::i;:::-;26018:139;;25745:419;;;:::o;26170:::-;26336:4;26374:2;26363:9;26359:18;26351:26;;26423:9;26417:4;26413:20;26409:1;26398:9;26394:17;26387:47;26451:131;26577:4;26451:131;:::i;:::-;26443:139;;26170:419;;;:::o;26595:::-;26761:4;26799:2;26788:9;26784:18;26776:26;;26848:9;26842:4;26838:20;26834:1;26823:9;26819:17;26812:47;26876:131;27002:4;26876:131;:::i;:::-;26868:139;;26595:419;;;:::o;27020:::-;27186:4;27224:2;27213:9;27209:18;27201:26;;27273:9;27267:4;27263:20;27259:1;27248:9;27244:17;27237:47;27301:131;27427:4;27301:131;:::i;:::-;27293:139;;27020:419;;;:::o;27445:::-;27611:4;27649:2;27638:9;27634:18;27626:26;;27698:9;27692:4;27688:20;27684:1;27673:9;27669:17;27662:47;27726:131;27852:4;27726:131;:::i;:::-;27718:139;;27445:419;;;:::o;27870:::-;28036:4;28074:2;28063:9;28059:18;28051:26;;28123:9;28117:4;28113:20;28109:1;28098:9;28094:17;28087:47;28151:131;28277:4;28151:131;:::i;:::-;28143:139;;27870:419;;;:::o;28295:::-;28461:4;28499:2;28488:9;28484:18;28476:26;;28548:9;28542:4;28538:20;28534:1;28523:9;28519:17;28512:47;28576:131;28702:4;28576:131;:::i;:::-;28568:139;;28295:419;;;:::o;28720:::-;28886:4;28924:2;28913:9;28909:18;28901:26;;28973:9;28967:4;28963:20;28959:1;28948:9;28944:17;28937:47;29001:131;29127:4;29001:131;:::i;:::-;28993:139;;28720:419;;;:::o;29145:::-;29311:4;29349:2;29338:9;29334:18;29326:26;;29398:9;29392:4;29388:20;29384:1;29373:9;29369:17;29362:47;29426:131;29552:4;29426:131;:::i;:::-;29418:139;;29145:419;;;:::o;29570:::-;29736:4;29774:2;29763:9;29759:18;29751:26;;29823:9;29817:4;29813:20;29809:1;29798:9;29794:17;29787:47;29851:131;29977:4;29851:131;:::i;:::-;29843:139;;29570:419;;;:::o;29995:::-;30161:4;30199:2;30188:9;30184:18;30176:26;;30248:9;30242:4;30238:20;30234:1;30223:9;30219:17;30212:47;30276:131;30402:4;30276:131;:::i;:::-;30268:139;;29995:419;;;:::o;30420:::-;30586:4;30624:2;30613:9;30609:18;30601:26;;30673:9;30667:4;30663:20;30659:1;30648:9;30644:17;30637:47;30701:131;30827:4;30701:131;:::i;:::-;30693:139;;30420:419;;;:::o;30845:::-;31011:4;31049:2;31038:9;31034:18;31026:26;;31098:9;31092:4;31088:20;31084:1;31073:9;31069:17;31062:47;31126:131;31252:4;31126:131;:::i;:::-;31118:139;;30845:419;;;:::o;31270:346::-;31425:4;31463:2;31452:9;31448:18;31440:26;;31476:133;31606:1;31595:9;31591:17;31582:6;31476:133;:::i;:::-;31270:346;;;;:::o;31622:222::-;31715:4;31753:2;31742:9;31738:18;31730:26;;31766:71;31834:1;31823:9;31819:17;31810:6;31766:71;:::i;:::-;31622:222;;;;:::o;31850:129::-;31884:6;31911:20;;:::i;:::-;31901:30;;31940:33;31968:4;31960:6;31940:33;:::i;:::-;31850:129;;;:::o;31985:75::-;32018:6;32051:2;32045:9;32035:19;;31985:75;:::o;32066:307::-;32127:4;32217:18;32209:6;32206:30;32203:56;;;32239:18;;:::i;:::-;32203:56;32277:29;32299:6;32277:29;:::i;:::-;32269:37;;32361:4;32355;32351:15;32343:23;;32066:307;;;:::o;32379:308::-;32441:4;32531:18;32523:6;32520:30;32517:56;;;32553:18;;:::i;:::-;32517:56;32591:29;32613:6;32591:29;:::i;:::-;32583:37;;32675:4;32669;32665:15;32657:23;;32379:308;;;:::o;32693:141::-;32742:4;32765:3;32757:11;;32788:3;32785:1;32778:14;32822:4;32819:1;32809:18;32801:26;;32693:141;;;:::o;32840:98::-;32891:6;32925:5;32919:12;32909:22;;32840:98;;;:::o;32944:99::-;32996:6;33030:5;33024:12;33014:22;;32944:99;;;:::o;33049:168::-;33132:11;33166:6;33161:3;33154:19;33206:4;33201:3;33197:14;33182:29;;33049:168;;;;:::o;33223:169::-;33307:11;33341:6;33336:3;33329:19;33381:4;33376:3;33372:14;33357:29;;33223:169;;;;:::o;33398:148::-;33500:11;33537:3;33522:18;;33398:148;;;;:::o;33552:273::-;33592:3;33611:20;33629:1;33611:20;:::i;:::-;33606:25;;33645:20;33663:1;33645:20;:::i;:::-;33640:25;;33767:1;33731:34;33727:42;33724:1;33721:49;33718:75;;;33773:18;;:::i;:::-;33718:75;33817:1;33814;33810:9;33803:16;;33552:273;;;;:::o;33831:305::-;33871:3;33890:20;33908:1;33890:20;:::i;:::-;33885:25;;33924:20;33942:1;33924:20;:::i;:::-;33919:25;;34078:1;34010:66;34006:74;34003:1;34000:81;33997:107;;;34084:18;;:::i;:::-;33997:107;34128:1;34125;34121:9;34114:16;;33831:305;;;;:::o;34142:185::-;34182:1;34199:20;34217:1;34199:20;:::i;:::-;34194:25;;34233:20;34251:1;34233:20;:::i;:::-;34228:25;;34272:1;34262:35;;34277:18;;:::i;:::-;34262:35;34319:1;34316;34312:9;34307:14;;34142:185;;;;:::o;34333:191::-;34373:4;34393:20;34411:1;34393:20;:::i;:::-;34388:25;;34427:20;34445:1;34427:20;:::i;:::-;34422:25;;34466:1;34463;34460:8;34457:34;;;34471:18;;:::i;:::-;34457:34;34516:1;34513;34509:9;34501:17;;34333:191;;;;:::o;34530:::-;34570:4;34590:20;34608:1;34590:20;:::i;:::-;34585:25;;34624:20;34642:1;34624:20;:::i;:::-;34619:25;;34663:1;34660;34657:8;34654:34;;;34668:18;;:::i;:::-;34654:34;34713:1;34710;34706:9;34698:17;;34530:191;;;;:::o;34727:96::-;34764:7;34793:24;34811:5;34793:24;:::i;:::-;34782:35;;34727:96;;;:::o;34829:90::-;34863:7;34906:5;34899:13;34892:21;34881:32;;34829:90;;;:::o;34925:149::-;34961:7;35001:66;34994:5;34990:78;34979:89;;34925:149;;;:::o;35080:118::-;35117:7;35157:34;35150:5;35146:46;35135:57;;35080:118;;;:::o;35204:126::-;35241:7;35281:42;35274:5;35270:54;35259:65;;35204:126;;;:::o;35336:77::-;35373:7;35402:5;35391:16;;35336:77;;;:::o;35419:101::-;35455:7;35495:18;35488:5;35484:30;35473:41;;35419:101;;;:::o;35526:154::-;35610:6;35605:3;35600;35587:30;35672:1;35663:6;35658:3;35654:16;35647:27;35526:154;;;:::o;35686:307::-;35754:1;35764:113;35778:6;35775:1;35772:13;35764:113;;;35863:1;35858:3;35854:11;35848:18;35844:1;35839:3;35835:11;35828:39;35800:2;35797:1;35793:10;35788:15;;35764:113;;;35895:6;35892:1;35889:13;35886:101;;;35975:1;35966:6;35961:3;35957:16;35950:27;35886:101;35735:258;35686:307;;;:::o;35999:171::-;36038:3;36061:24;36079:5;36061:24;:::i;:::-;36052:33;;36107:4;36100:5;36097:15;36094:41;;;36115:18;;:::i;:::-;36094:41;36162:1;36155:5;36151:13;36144:20;;35999:171;;;:::o;36176:320::-;36220:6;36257:1;36251:4;36247:12;36237:22;;36304:1;36298:4;36294:12;36325:18;36315:81;;36381:4;36373:6;36369:17;36359:27;;36315:81;36443:2;36435:6;36432:14;36412:18;36409:38;36406:84;;;36462:18;;:::i;:::-;36406:84;36227:269;36176:320;;;:::o;36502:281::-;36585:27;36607:4;36585:27;:::i;:::-;36577:6;36573:40;36715:6;36703:10;36700:22;36679:18;36667:10;36664:34;36661:62;36658:88;;;36726:18;;:::i;:::-;36658:88;36766:10;36762:2;36755:22;36545:238;36502:281;;:::o;36789:233::-;36828:3;36851:24;36869:5;36851:24;:::i;:::-;36842:33;;36897:66;36890:5;36887:77;36884:103;;;36967:18;;:::i;:::-;36884:103;37014:1;37007:5;37003:13;36996:20;;36789:233;;;:::o;37028:176::-;37060:1;37077:20;37095:1;37077:20;:::i;:::-;37072:25;;37111:20;37129:1;37111:20;:::i;:::-;37106:25;;37150:1;37140:35;;37155:18;;:::i;:::-;37140:35;37196:1;37193;37189:9;37184:14;;37028:176;;;;:::o;37210:180::-;37258:77;37255:1;37248:88;37355:4;37352:1;37345:15;37379:4;37376:1;37369:15;37396:180;37444:77;37441:1;37434:88;37541:4;37538:1;37531:15;37565:4;37562:1;37555:15;37582:180;37630:77;37627:1;37620:88;37727:4;37724:1;37717:15;37751:4;37748:1;37741:15;37768:180;37816:77;37813:1;37806:88;37913:4;37910:1;37903:15;37937:4;37934:1;37927:15;37954:180;38002:77;37999:1;37992:88;38099:4;38096:1;38089:15;38123:4;38120:1;38113:15;38140:117;38249:1;38246;38239:12;38263:117;38372:1;38369;38362:12;38386:117;38495:1;38492;38485:12;38509:117;38618:1;38615;38608:12;38632:117;38741:1;38738;38731:12;38755:117;38864:1;38861;38854:12;38878:102;38919:6;38970:2;38966:7;38961:2;38954:5;38950:14;38946:28;38936:38;;38878:102;;;:::o;38986:221::-;39126:34;39122:1;39114:6;39110:14;39103:58;39195:4;39190:2;39182:6;39178:15;39171:29;38986:221;:::o;39213:225::-;39353:34;39349:1;39341:6;39337:14;39330:58;39422:8;39417:2;39409:6;39405:15;39398:33;39213:225;:::o;39444:229::-;39584:34;39580:1;39572:6;39568:14;39561:58;39653:12;39648:2;39640:6;39636:15;39629:37;39444:229;:::o;39679:222::-;39819:34;39815:1;39807:6;39803:14;39796:58;39888:5;39883:2;39875:6;39871:15;39864:30;39679:222;:::o;39907:224::-;40047:34;40043:1;40035:6;40031:14;40024:58;40116:7;40111:2;40103:6;40099:15;40092:32;39907:224;:::o;40137:236::-;40277:34;40273:1;40265:6;40261:14;40254:58;40346:19;40341:2;40333:6;40329:15;40322:44;40137:236;:::o;40379:244::-;40519:34;40515:1;40507:6;40503:14;40496:58;40588:27;40583:2;40575:6;40571:15;40564:52;40379:244;:::o;40629:230::-;40769:34;40765:1;40757:6;40753:14;40746:58;40838:13;40833:2;40825:6;40821:15;40814:38;40629:230;:::o;40865:225::-;41005:34;41001:1;40993:6;40989:14;40982:58;41074:8;41069:2;41061:6;41057:15;41050:33;40865:225;:::o;41096:182::-;41236:34;41232:1;41224:6;41220:14;41213:58;41096:182;:::o;41284:234::-;41424:34;41420:1;41412:6;41408:14;41401:58;41493:17;41488:2;41480:6;41476:15;41469:42;41284:234;:::o;41524:176::-;41664:28;41660:1;41652:6;41648:14;41641:52;41524:176;:::o;41706:237::-;41846:34;41842:1;41834:6;41830:14;41823:58;41915:20;41910:2;41902:6;41898:15;41891:45;41706:237;:::o;41949:221::-;42089:34;42085:1;42077:6;42073:14;42066:58;42158:4;42153:2;42145:6;42141:15;42134:29;41949:221;:::o;42176:238::-;42316:34;42312:1;42304:6;42300:14;42293:58;42385:21;42380:2;42372:6;42368:15;42361:46;42176:238;:::o;42420:179::-;42560:31;42556:1;42548:6;42544:14;42537:55;42420:179;:::o;42605:220::-;42745:34;42741:1;42733:6;42729:14;42722:58;42814:3;42809:2;42801:6;42797:15;42790:28;42605:220;:::o;42831:169::-;42971:21;42967:1;42959:6;42955:14;42948:45;42831:169;:::o;43006:233::-;43146:34;43142:1;43134:6;43130:14;43123:58;43215:16;43210:2;43202:6;43198:15;43191:41;43006:233;:::o;43245:234::-;43385:34;43381:1;43373:6;43369:14;43362:58;43454:17;43449:2;43441:6;43437:15;43430:42;43245:234;:::o;43485:232::-;43625:34;43621:1;43613:6;43609:14;43602:58;43694:15;43689:2;43681:6;43677:15;43670:40;43485:232;:::o;43723:221::-;43863:34;43859:1;43851:6;43847:14;43840:58;43932:4;43927:2;43919:6;43915:15;43908:29;43723:221;:::o;43950:122::-;44023:24;44041:5;44023:24;:::i;:::-;44016:5;44013:35;44003:63;;44062:1;44059;44052:12;44003:63;43950:122;:::o;44078:116::-;44148:21;44163:5;44148:21;:::i;:::-;44141:5;44138:32;44128:60;;44184:1;44181;44174:12;44128:60;44078:116;:::o;44200:120::-;44272:23;44289:5;44272:23;:::i;:::-;44265:5;44262:34;44252:62;;44310:1;44307;44300:12;44252:62;44200:120;:::o;44326:122::-;44399:24;44417:5;44399:24;:::i;:::-;44392:5;44389:35;44379:63;;44438:1;44435;44428:12;44379:63;44326:122;:::o

Swarm Source

ipfs://e49add4c75692dd266debcf03d126f48bd3b8c6415001da213141e81b5b1aaff

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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