Token

 

Overview

Max Total Supply:
0

Holders:
0

Transfers:
-

 
Loading
[ Download CSV Export  ] 
Loading
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Journey

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
File 1 of 13 : Journey.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.10;
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "@openzeppelin/contracts/security/Pausable.sol";
import "../shared/interfaces/RealmsToken.sol";
import "../shared/interfaces/LordsToken.sol";

contract Journey is ERC721Holder, Ownable, ReentrancyGuard, Pausable {
    event StakeRealms(uint256[] tokenIds, address player);
    event UnStakeRealms(uint256[] tokenIds, address player);

    mapping(address => uint256) epochClaimed;
    mapping(uint256 => address) ownership;
    mapping(address => mapping(uint256 => uint256)) public realmsStaked;

    LordsToken lordsToken;
    RealmsToken realmsToken;

    // contracts
    address bridge;

    // consts
    uint256 lordsPerRealm;
    uint256 genesis;
    uint256 epoch;
    uint256 finalAge;

    constructor(
        uint256 _lordsPerRealm,
        uint256 _epoch,
        address _realmsAddress,
        address _lordsToken
    ) {
        genesis = block.timestamp;
        lordsPerRealm = _lordsPerRealm;
        epoch = _epoch;

        lordsToken = LordsToken(_lordsToken);
        realmsToken = RealmsToken(_realmsAddress);
    }

    /**
     * @notice Set's Lords Issuance in gwei per staked realm
     */
    function lordsIssuance(uint256 _new) external onlyOwner {
        lordsPerRealm = _new * 10**18; // converted into decimals
    }

    function updateRealmsAddress(address _newRealms) external onlyOwner {
        realmsToken = RealmsToken(_newRealms);
    }

    function updateLordsAddress(address _newLords) external onlyOwner {
        lordsToken = LordsToken(_newLords);
    }

    function updateEpochLength(uint256 _newEpoch) external onlyOwner {
        epoch = _newEpoch;
    }

    function setBridge(address _newBridge) external onlyOwner {
        bridge = _newBridge;
    }

    function pause() external onlyOwner {
        _pause();
    }

    function unpause() external onlyOwner {
        _unpause();
    }

    function setFinalAge(uint256 _finalAge) external onlyOwner {
        finalAge = _finalAge;
    }

    /**
     * @notice Set's epoch to epoch * 1 hour.
     */
    function _epochNum() internal view returns (uint256) {
        if (finalAge != 0) {
            return finalAge;
        } else {
            return (block.timestamp - genesis) / (epoch * 3600); // hours
        }
        // return 5;
    }

    /**
     * @notice Boards the Ship (Stakes). Sets ownership of Token to Staker. Transfers NFT to Contract. Set's epoch date, Set's number of Realms staked in the Epoch.
     * @param _tokenIds Ids of Realms
     */
    function boardShip(uint256[] memory _tokenIds)
        external
        whenNotPaused
        nonReentrant
    {
        for (uint256 i = 0; i < _tokenIds.length; i++) {
            require(
                realmsToken.ownerOf(_tokenIds[i]) == msg.sender,
                "NOT_OWNER"
            );
            ownership[_tokenIds[i]] = msg.sender;

            realmsToken.safeTransferFrom(
                msg.sender,
                address(this),
                _tokenIds[i]
            );
        }

        if (getNumberRealms(msg.sender) == 0) {
            epochClaimed[msg.sender] = _epochNum();
        }

        realmsStaked[msg.sender][_epochNum()] += uint256(_tokenIds.length);

        emit StakeRealms(_tokenIds, msg.sender);
    }

    function exitShip(uint256[] memory _tokenIds)
        external
        whenNotPaused
        nonReentrant
    {
        _exitShip(_tokenIds);
    }

    /**
     * @notice Exits Ship, and transfers all Realms back to owner. Claims any lords available.
     * @param _tokenIds Ids of Realms
     */
    function _exitShip(uint256[] memory _tokenIds) internal {
        if (lordsAvailable(msg.sender) != 0) {
            _claimLords();
        }

        for (uint256 i = 0; i < _tokenIds.length; i++) {
            require(ownership[_tokenIds[i]] == msg.sender, "NOT_OWNER");

            ownership[_tokenIds[i]] = address(0);

            realmsToken.safeTransferFrom(
                address(this),
                msg.sender,
                _tokenIds[i]
            );
        }

        // remove last in first
        if (_epochNum() == 0) {
            realmsStaked[msg.sender][_epochNum()] -= _tokenIds.length;
        } else {
            uint256 realmsInPrevious = realmsStaked[msg.sender][
                _epochNum() - 1
            ];
            uint256 realmsInCurrent = realmsStaked[msg.sender][_epochNum()];

            if (realmsInPrevious > _tokenIds.length) {
                realmsStaked[msg.sender][_epochNum() - 1] -= _tokenIds.length;
            } else if (realmsInCurrent == _tokenIds.length) {
                realmsStaked[msg.sender][_epochNum()] -= _tokenIds.length;
            } else if (realmsInPrevious <= _tokenIds.length) {
                // remove oldest first
                uint256 oldestFirst = (_tokenIds.length - realmsInPrevious);

                realmsStaked[msg.sender][_epochNum() - 1] -= (_tokenIds.length -
                    oldestFirst);

                realmsStaked[msg.sender][_epochNum()] -= oldestFirst;
            }
        }

        emit UnStakeRealms(_tokenIds, msg.sender);
    }

    /**
     * @notice Claims all available Lords for Owner.
     */
    function claimLords() external whenNotPaused nonReentrant {
        _claimLords();
    }

    function _claimLords() internal {
        uint256 totalClaimable;
        uint256 totalRealms;

        require(_epochNum() > 1, "GENESIS_epochNum");

        // loop over epochs, sum up total claimable staked lords per epoch
        for (uint256 i = epochClaimed[msg.sender]; i < _epochNum(); i++) {
            totalRealms += realmsStaked[msg.sender][i];
            totalClaimable +=
                realmsStaked[msg.sender][i] *
                ((_epochNum() - 1) - i);
        }

        // set totalRealms staked in latest epoch - 1 so loop doesn't have to iterate again
        realmsStaked[msg.sender][_epochNum() - 1] = totalRealms;

        // set epoch claimed to current - 1
        epochClaimed[msg.sender] = _epochNum() - 1;

        require(totalClaimable > 0, "NOTHING_TO_CLAIM");

        // available lords * total realms staked per period
        uint256 lords = lordsPerRealm * totalClaimable;

        lordsToken.approve(address(this), lords);

        lordsToken.transferFrom(address(this), msg.sender, lords);
    }

    /**
     * @notice Lords available for the player.
     */
    function lordsAvailable(address _player)
        public
        view
        returns (uint256 lords)
    {
        uint256 totalClaimable;
        if (_epochNum() > 1) {
            for (uint256 i = epochClaimed[_player]; i < _epochNum(); i++) {
                totalClaimable +=
                    realmsStaked[_player][i] *
                    ((_epochNum() - 1) - i);
            }

            lords = lordsPerRealm * totalClaimable;
        } else {
            lords = 0;
        }
    }

    /**
     * @notice Called only by future Bridge contract to withdraw the Realms
     * @param _tokenIds Ids of Realms
     */
    function bridgeWithdraw(address _player, uint256[] memory _tokenIds)
        public
        onlyBridge
    {
        for (uint256 i = 0; i < _tokenIds.length; i++) {
            ownership[_tokenIds[i]] = address(0);

            realmsToken.safeTransferFrom(address(this), _player, _tokenIds[i]);
        }

        emit UnStakeRealms(_tokenIds, _player);
    }

    function withdrawAllLords(address _destination) public onlyOwner {
        uint256 balance = lordsToken.balanceOf(address(this));

        lordsToken.approve(address(this), balance);
        lordsToken.transferFrom(address(this), _destination, balance);
    }

    modifier onlyBridge() {
        require(msg.sender == bridge, "NOT_THE_BRIDGE");
        _;
    }

    function checkOwner(uint256 _tokenId) public view returns (address) {
        return ownership[_tokenId];
    }

    function getEpoch() public view returns (uint256) {
        return _epochNum();
    }

    function getLordsAddress() public view returns (address) {
        return address(lordsToken);
    }

    function getRealmsAddress() public view returns (address) {
        return address(realmsToken);
    }

    function getEpochLength() public view returns (uint256) {
        return epoch;
    }

    function getLordsIssurance() public view returns (uint256) {
        return lordsPerRealm;
    }

    function getTimeUntilEpoch() public view returns (uint256) {
        return (epoch * 3600 * (getEpoch() + 1)) - (block.timestamp - genesis);
    }

    function getFinalAge() public view returns (uint256) {
        return finalAge;
    }

    function getNumberRealms(address _player) public view returns (uint256) {
        uint256 totalRealms;

        if (_epochNum() >= 1) {
            for (uint256 i = epochClaimed[_player]; i <= _epochNum(); i++) {
                totalRealms += realmsStaked[_player][i];
            }
            return totalRealms;
        } else {
            return realmsStaked[_player][0];
        }
    }
}

File 2 of 13 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 3 of 13 : ERC721Holder.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/utils/ERC721Holder.sol)

pragma solidity ^0.8.0;

import "../IERC721Receiver.sol";

/**
 * @dev Implementation of the {IERC721Receiver} interface.
 *
 * Accepts all token transfers.
 * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.
 */
contract ERC721Holder is IERC721Receiver {
    /**
     * @dev See {IERC721Receiver-onERC721Received}.
     *
     * Always returns `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address,
        address,
        uint256,
        bytes memory
    ) public virtual override returns (bytes4) {
        return this.onERC721Received.selector;
    }
}

File 4 of 13 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

File 5 of 13 : Pausable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (security/Pausable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

File 6 of 13 : RealmsToken.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.2;

import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface RealmsToken is IERC721Enumerable {

}

File 7 of 13 : LordsToken.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

interface LordsToken is IERC20 {
    function mint(address to, uint256 amount) external;

    function getAgeDistribution(uint256 _age) external view returns (uint256);
}

File 8 of 13 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

File 9 of 13 : IERC721Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

File 10 of 13 : IERC721Enumerable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;

import "../IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

File 11 of 13 : IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

File 12 of 13 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 13 of 13 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_lordsPerRealm","type":"uint256"},{"internalType":"uint256","name":"_epoch","type":"uint256"},{"internalType":"address","name":"_realmsAddress","type":"address"},{"internalType":"address","name":"_lordsToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"indexed":false,"internalType":"address","name":"player","type":"address"}],"name":"StakeRealms","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"indexed":false,"internalType":"address","name":"player","type":"address"}],"name":"UnStakeRealms","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"boardShip","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_player","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"bridgeWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"checkOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimLords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"exitShip","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEpochLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFinalAge","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLordsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLordsIssurance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_player","type":"address"}],"name":"getNumberRealms","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRealmsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTimeUntilEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_player","type":"address"}],"name":"lordsAvailable","outputs":[{"internalType":"uint256","name":"lords","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"lordsIssuance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"realmsStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newBridge","type":"address"}],"name":"setBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_finalAge","type":"uint256"}],"name":"setFinalAge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newEpoch","type":"uint256"}],"name":"updateEpochLength","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newLords","type":"address"}],"name":"updateLordsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newRealms","type":"address"}],"name":"updateRealmsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_destination","type":"address"}],"name":"withdrawAllLords","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50604051620035e0380380620035e083398181016040528101906200003791906200028b565b620000576200004b6200011a60201b60201c565b6200012260201b60201c565b600180819055506000600260006101000a81548160ff02191690831515021790555042600a819055508360098190555082600b8190555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050620002fd565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b6000819050919050565b6200020081620001eb565b81146200020c57600080fd5b50565b6000815190506200022081620001f5565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002538262000226565b9050919050565b620002658162000246565b81146200027157600080fd5b50565b60008151905062000285816200025a565b92915050565b60008060008060808587031215620002a857620002a7620001e6565b5b6000620002b8878288016200020f565b9450506020620002cb878288016200020f565b9350506040620002de8782880162000274565b9250506060620002f18782880162000274565b91505092959194509250565b6132d3806200030d6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80638456cb5911610104578063b169b83a116100a2578063c640855c11610071578063c640855c146104bc578063cfe8a73b146104d8578063eb31736e146104f6578063f2fde38b14610512576101cf565b8063b169b83a1461045a578063bb1eb77814610478578063c4a1195814610482578063c5882923146104a0576101cf565b80639378438e116100de5780639378438e146103c257806393ff8d10146103de5780639870dce01461040e5780639a5bfa2c1461043e576101cf565b80638456cb591461037e5780638da5cb5b146103885780638dd14802146103a6576101cf565b80635c975abb11610171578063715018a61161014b578063715018a61461031a578063757991a8146103245780637b7cc4e51461034257806380695a8814610360576101cf565b80635c975abb146102c45780636978b296146102e2578063714f480e146102fe576101cf565b80632f087501116101ad5780632f087501146102505780633699b2b21461026c5780633f4ba83a1461029c5780635aae426e146102a6576101cf565b80630f330b66146101d4578063150b7a02146101f05780631754606514610220575b600080fd5b6101ee60048036038101906101e991906126cf565b61052e565b005b61020a6004803603810190610205919061282b565b61092d565b60405161021791906128e9565b60405180910390f35b61023a60048036038101906102359190612904565b610941565b6040516102479190612953565b60405180910390f35b61026a600480360381019061026591906126cf565b610966565b005b6102866004803603810190610281919061296e565b610a0f565b6040516102939190612953565b60405180910390f35b6102a4610b31565b005b6102ae610bb7565b6040516102bb9190612953565b60405180910390f35b6102cc610c04565b6040516102d991906129b6565b60405180910390f35b6102fc60048036038101906102f791906129d1565b610c1b565b005b6103186004803603810190610313919061296e565b610cb4565b005b610322610f18565b005b61032c610fa0565b6040516103399190612953565b60405180910390f35b61034a610faf565b6040516103579190612a0d565b60405180910390f35b610368610fd9565b6040516103759190612a0d565b60405180910390f35b610386611003565b005b610390611089565b60405161039d9190612a0d565b60405180910390f35b6103c060048036038101906103bb919061296e565b6110b2565b005b6103dc60048036038101906103d791906129d1565b611172565b005b6103f860048036038101906103f3919061296e565b6111f8565b6040516104059190612953565b60405180910390f35b610428600480360381019061042391906129d1565b611332565b6040516104359190612a0d565b60405180910390f35b610458600480360381019061045391906129d1565b61136f565b005b6104626113f5565b60405161046f9190612953565b60405180910390f35b6104806113ff565b005b61048a6114a6565b6040516104979190612953565b60405180910390f35b6104ba60048036038101906104b59190612a28565b6114b0565b005b6104d660048036038101906104d1919061296e565b6116b5565b005b6104e0611775565b6040516104ed9190612953565b60405180910390f35b610510600480360381019061050b919061296e565b61177f565b005b61052c6004803603810190610527919061296e565b61183f565b005b610536610c04565b15610576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056d90612ae1565b60405180910390fd5b600260015414156105bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b390612b4d565b60405180910390fd5b600260018190555060005b815181101561081d573373ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e84848151811061063857610637612b6d565b5b60200260200101516040518263ffffffff1660e01b815260040161065c9190612953565b602060405180830381865afa158015610679573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069d9190612bb1565b73ffffffffffffffffffffffffffffffffffffffff16146106f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ea90612c2a565b60405180910390fd5b336004600084848151811061070b5761070a612b6d565b5b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e33308585815181106107b2576107b1612b6d565b5b60200260200101516040518463ffffffff1660e01b81526004016107d893929190612c4a565b600060405180830381600087803b1580156107f257600080fd5b505af1158015610806573d6000803e3d6000fd5b50505050808061081590612cb0565b9150506105c7565b506000610829336111f8565b141561087b57610837611937565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8051600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108c6611937565b815260200190815260200160002060008282546108e39190612cf9565b925050819055507f486ed571da4f82b733e4a2b512dd11f25f1213e6d66b6bc78812b03ff3320d76813360405161091b929190612e0d565b60405180910390a16001808190555050565b600063150b7a0260e01b9050949350505050565b6005602052816000526040600020602052806000526040600020600091509150505481565b61096e610c04565b156109ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a590612ae1565b60405180910390fd5b600260015414156109f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109eb90612b4d565b60405180910390fd5b6002600181905550610a058161197a565b6001808190555050565b6000806001610a1c611937565b1115610b26576000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b610a6f611937565b811015610b1057806001610a81611937565b610a8b9190612e3d565b610a959190612e3d565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054610af09190612e71565b82610afb9190612cf9565b91508080610b0890612cb0565b915050610a67565b5080600954610b1f9190612e71565b9150610b2b565b600091505b50919050565b610b39611f24565b73ffffffffffffffffffffffffffffffffffffffff16610b57611089565b73ffffffffffffffffffffffffffffffffffffffff1614610bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba490612f17565b60405180910390fd5b610bb5611f2c565b565b6000600a5442610bc79190612e3d565b6001610bd1610fa0565b610bdb9190612cf9565b610e10600b54610beb9190612e71565b610bf59190612e71565b610bff9190612e3d565b905090565b6000600260009054906101000a900460ff16905090565b610c23611f24565b73ffffffffffffffffffffffffffffffffffffffff16610c41611089565b73ffffffffffffffffffffffffffffffffffffffff1614610c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8e90612f17565b60405180910390fd5b670de0b6b3a764000081610cab9190612e71565b60098190555050565b610cbc611f24565b73ffffffffffffffffffffffffffffffffffffffff16610cda611089565b73ffffffffffffffffffffffffffffffffffffffff1614610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790612f17565b60405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d8d9190612a0d565b602060405180830381865afa158015610daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dce9190612f4c565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b330836040518363ffffffff1660e01b8152600401610e2d929190612f79565b6020604051808303816000875af1158015610e4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e709190612fce565b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3084846040518463ffffffff1660e01b8152600401610ed093929190612c4a565b6020604051808303816000875af1158015610eef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f139190612fce565b505050565b610f20611f24565b73ffffffffffffffffffffffffffffffffffffffff16610f3e611089565b73ffffffffffffffffffffffffffffffffffffffff1614610f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8b90612f17565b60405180910390fd5b610f9e6000611fce565b565b6000610faa611937565b905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61100b611f24565b73ffffffffffffffffffffffffffffffffffffffff16611029611089565b73ffffffffffffffffffffffffffffffffffffffff161461107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107690612f17565b60405180910390fd5b611087612092565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110ba611f24565b73ffffffffffffffffffffffffffffffffffffffff166110d8611089565b73ffffffffffffffffffffffffffffffffffffffff161461112e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112590612f17565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61117a611f24565b73ffffffffffffffffffffffffffffffffffffffff16611198611089565b73ffffffffffffffffffffffffffffffffffffffff16146111ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e590612f17565b60405180910390fd5b80600c8190555050565b6000806001611205611937565b106112d8576000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b611257611937565b81116112ce57600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002054826112b99190612cf9565b915080806112c690612cb0565b91505061124f565b508091505061132d565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000808152602001908152602001600020549150505b919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b611377611f24565b73ffffffffffffffffffffffffffffffffffffffff16611395611089565b73ffffffffffffffffffffffffffffffffffffffff16146113eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e290612f17565b60405180910390fd5b80600b8190555050565b6000600954905090565b611407610c04565b15611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143e90612ae1565b60405180910390fd5b6002600154141561148d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148490612b4d565b60405180910390fd5b600260018190555061149d612135565b60018081905550565b6000600c54905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611540576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153790613047565b60405180910390fd5b60005b81518110156116775760006004600084848151811061156557611564612b6d565b5b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e308585858151811061160c5761160b612b6d565b5b60200260200101516040518463ffffffff1660e01b815260040161163293929190612c4a565b600060405180830381600087803b15801561164c57600080fd5b505af1158015611660573d6000803e3d6000fd5b50505050808061166f90612cb0565b915050611543565b507f27c92910e65949ce9b76a0cfa7b2d74afd568f0df6812583dfc70d860510255481836040516116a9929190612e0d565b60405180910390a15050565b6116bd611f24565b73ffffffffffffffffffffffffffffffffffffffff166116db611089565b73ffffffffffffffffffffffffffffffffffffffff1614611731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172890612f17565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600b54905090565b611787611f24565b73ffffffffffffffffffffffffffffffffffffffff166117a5611089565b73ffffffffffffffffffffffffffffffffffffffff16146117fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f290612f17565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611847611f24565b73ffffffffffffffffffffffffffffffffffffffff16611865611089565b73ffffffffffffffffffffffffffffffffffffffff16146118bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b290612f17565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561192b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611922906130d9565b60405180910390fd5b61193481611fce565b50565b600080600c541461194c57600c549050611977565b610e10600b5461195c9190612e71565b600a544261196a9190612e3d565b6119749190613128565b90505b90565b600061198533610a0f565b1461199357611992612135565b5b60005b8151811015611b85573373ffffffffffffffffffffffffffffffffffffffff16600460008484815181106119cd576119cc612b6d565b5b6020026020010151815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5190612c2a565b60405180910390fd5b600060046000848481518110611a7357611a72612b6d565b5b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3033858581518110611b1a57611b19612b6d565b5b60200260200101516040518463ffffffff1660e01b8152600401611b4093929190612c4a565b600060405180830381600087803b158015611b5a57600080fd5b505af1158015611b6e573d6000803e3d6000fd5b505050508080611b7d90612cb0565b915050611996565b506000611b90611937565b1415611c0a578051600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611be1611937565b81526020019081526020016000206000828254611bfe9190612e3d565b92505081905550611ee8565b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001611c57611937565b611c619190612e3d565b81526020019081526020016000205490506000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611cbd611937565b81526020019081526020016000205490508251821115611d57578251600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001611d24611937565b611d2e9190612e3d565b81526020019081526020016000206000828254611d4b9190612e3d565b92505081905550611ee5565b8251811415611dd4578251600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611dab611937565b81526020019081526020016000206000828254611dc89190612e3d565b92505081905550611ee4565b82518211611ee3576000828451611deb9190612e3d565b9050808451611dfa9190612e3d565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001611e45611937565b611e4f9190612e3d565b81526020019081526020016000206000828254611e6c9190612e3d565b9250508190555080600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611ebd611937565b81526020019081526020016000206000828254611eda9190612e3d565b92505081905550505b5b5b50505b7f27c92910e65949ce9b76a0cfa7b2d74afd568f0df6812583dfc70d86051025548133604051611f19929190612e0d565b60405180910390a150565b600033905090565b611f34610c04565b611f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6a906131a5565b60405180910390fd5b6000600260006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611fb7611f24565b604051611fc49190612a0d565b60405180910390a1565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61209a610c04565b156120da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d190612ae1565b60405180910390fd5b6001600260006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861211e611f24565b60405161212b9190612a0d565b60405180910390a1565b6000806001612142611937565b11612182576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217990613211565b60405180910390fd5b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b6121cf611937565b8110156122ce57600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002054826122329190612cf9565b915080600161223f611937565b6122499190612e3d565b6122539190612e3d565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020546122ae9190612e71565b836122b99190612cf9565b925080806122c690612cb0565b9150506121c7565b5080600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600161231b611937565b6123259190612e3d565b8152602001908152602001600020819055506001612341611937565b61234b9190612e3d565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600082116123d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c89061327d565b60405180910390fd5b6000826009546123e19190612e71565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b330836040518363ffffffff1660e01b8152600401612440929190612f79565b6020604051808303816000875af115801561245f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124839190612fce565b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b81526004016124e393929190612c4a565b6020604051808303816000875af1158015612502573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125269190612fce565b50505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61258e82612545565b810181811067ffffffffffffffff821117156125ad576125ac612556565b5b80604052505050565b60006125c061252c565b90506125cc8282612585565b919050565b600067ffffffffffffffff8211156125ec576125eb612556565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b61261581612602565b811461262057600080fd5b50565b6000813590506126328161260c565b92915050565b600061264b612646846125d1565b6125b6565b9050808382526020820190506020840283018581111561266e5761266d6125fd565b5b835b8181101561269757806126838882612623565b845260208401935050602081019050612670565b5050509392505050565b600082601f8301126126b6576126b5612540565b5b81356126c6848260208601612638565b91505092915050565b6000602082840312156126e5576126e4612536565b5b600082013567ffffffffffffffff8111156127035761270261253b565b5b61270f848285016126a1565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061274382612718565b9050919050565b61275381612738565b811461275e57600080fd5b50565b6000813590506127708161274a565b92915050565b600080fd5b600067ffffffffffffffff82111561279657612795612556565b5b61279f82612545565b9050602081019050919050565b82818337600083830152505050565b60006127ce6127c98461277b565b6125b6565b9050828152602081018484840111156127ea576127e9612776565b5b6127f58482856127ac565b509392505050565b600082601f83011261281257612811612540565b5b81356128228482602086016127bb565b91505092915050565b6000806000806080858703121561284557612844612536565b5b600061285387828801612761565b945050602061286487828801612761565b935050604061287587828801612623565b925050606085013567ffffffffffffffff8111156128965761289561253b565b5b6128a2878288016127fd565b91505092959194509250565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6128e3816128ae565b82525050565b60006020820190506128fe60008301846128da565b92915050565b6000806040838503121561291b5761291a612536565b5b600061292985828601612761565b925050602061293a85828601612623565b9150509250929050565b61294d81612602565b82525050565b60006020820190506129686000830184612944565b92915050565b60006020828403121561298457612983612536565b5b600061299284828501612761565b91505092915050565b60008115159050919050565b6129b08161299b565b82525050565b60006020820190506129cb60008301846129a7565b92915050565b6000602082840312156129e7576129e6612536565b5b60006129f584828501612623565b91505092915050565b612a0781612738565b82525050565b6000602082019050612a2260008301846129fe565b92915050565b60008060408385031215612a3f57612a3e612536565b5b6000612a4d85828601612761565b925050602083013567ffffffffffffffff811115612a6e57612a6d61253b565b5b612a7a858286016126a1565b9150509250929050565b600082825260208201905092915050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000612acb601083612a84565b9150612ad682612a95565b602082019050919050565b60006020820190508181036000830152612afa81612abe565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000612b37601f83612a84565b9150612b4282612b01565b602082019050919050565b60006020820190508181036000830152612b6681612b2a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050612bab8161274a565b92915050565b600060208284031215612bc757612bc6612536565b5b6000612bd584828501612b9c565b91505092915050565b7f4e4f545f4f574e45520000000000000000000000000000000000000000000000600082015250565b6000612c14600983612a84565b9150612c1f82612bde565b602082019050919050565b60006020820190508181036000830152612c4381612c07565b9050919050565b6000606082019050612c5f60008301866129fe565b612c6c60208301856129fe565b612c796040830184612944565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612cbb82612602565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612cee57612ced612c81565b5b600182019050919050565b6000612d0482612602565b9150612d0f83612602565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612d4457612d43612c81565b5b828201905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612d8481612602565b82525050565b6000612d968383612d7b565b60208301905092915050565b6000602082019050919050565b6000612dba82612d4f565b612dc48185612d5a565b9350612dcf83612d6b565b8060005b83811015612e00578151612de78882612d8a565b9750612df283612da2565b925050600181019050612dd3565b5085935050505092915050565b60006040820190508181036000830152612e278185612daf565b9050612e3660208301846129fe565b9392505050565b6000612e4882612602565b9150612e5383612602565b925082821015612e6657612e65612c81565b5b828203905092915050565b6000612e7c82612602565b9150612e8783612602565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612ec057612ebf612c81565b5b828202905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612f01602083612a84565b9150612f0c82612ecb565b602082019050919050565b60006020820190508181036000830152612f3081612ef4565b9050919050565b600081519050612f468161260c565b92915050565b600060208284031215612f6257612f61612536565b5b6000612f7084828501612f37565b91505092915050565b6000604082019050612f8e60008301856129fe565b612f9b6020830184612944565b9392505050565b612fab8161299b565b8114612fb657600080fd5b50565b600081519050612fc881612fa2565b92915050565b600060208284031215612fe457612fe3612536565b5b6000612ff284828501612fb9565b91505092915050565b7f4e4f545f5448455f425249444745000000000000000000000000000000000000600082015250565b6000613031600e83612a84565b915061303c82612ffb565b602082019050919050565b6000602082019050818103600083015261306081613024565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006130c3602683612a84565b91506130ce82613067565b604082019050919050565b600060208201905081810360008301526130f2816130b6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061313382612602565b915061313e83612602565b92508261314e5761314d6130f9565b5b828204905092915050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b600061318f601483612a84565b915061319a82613159565b602082019050919050565b600060208201905081810360008301526131be81613182565b9050919050565b7f47454e455349535f65706f63684e756d00000000000000000000000000000000600082015250565b60006131fb601083612a84565b9150613206826131c5565b602082019050919050565b6000602082019050818103600083015261322a816131ee565b9050919050565b7f4e4f5448494e475f544f5f434c41494d00000000000000000000000000000000600082015250565b6000613267601083612a84565b915061327282613231565b602082019050919050565b600060208201905081810360008301526132968161325a565b905091905056fea26469706673582212209a9dd1c4ae4ce52e9ae50d4cdf88c2443f3e2ac547b4ca0e47e61886d580bd1864736f6c634300080a0033000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000010000000000000000000000007afe30cb3e53dba6801aa0ea647a0ecea7cbe18d000000000000000000000000686f2404e77ab0d9070a46cdfb0b7fecdd2318b0

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

000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000010000000000000000000000007afe30cb3e53dba6801aa0ea647a0ecea7cbe18d000000000000000000000000686f2404e77ab0d9070a46cdfb0b7fecdd2318b0

-----Decoded View---------------
Arg [0] : _lordsPerRealm (uint256): 10
Arg [1] : _epoch (uint256): 1
Arg [2] : _realmsAddress (address): 0x7AFe30cB3E53dba6801aa0EA647A0EcEA7cBe18d
Arg [3] : _lordsToken (address): 0x686f2404e77Ab0d9070a46cdfb0B7feCDD2318b0

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [2] : 0000000000000000000000007afe30cb3e53dba6801aa0ea647a0ecea7cbe18d
Arg [3] : 000000000000000000000000686f2404e77ab0d9070a46cdfb0b7fecdd2318b0


Deployed ByteCode Sourcemap

393:8829:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2731:748;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;588:200:7;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;678:67:10;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3485:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6604:494;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2031:65;;;:::i;:::-;;8584:146;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1098:84:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1373:129:10;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7601:259;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1668:101:0;;;:::i;:::-;;8086:85:10;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8283:102;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8177:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1964:61;;;:::i;:::-;;1036:85:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1864:94:10;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2102:96;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8827:393;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7969:111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1759:99;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8482:96;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5403:88;;;:::i;:::-;;8736:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7234:361;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1636:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8391:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1508:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1918:198:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2731:748:10;1412:8:1;:6;:8::i;:::-;1411:9;1403:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1:2::1;2325:7;;:19;;2317:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1;2455:7;:18;;;;2857:9:10::2;2852:383;2876:9;:16;2872:1;:20;2852:383;;;2975:10;2938:47;;:11;;;;;;;;;;;:19;;;2958:9;2968:1;2958:12;;;;;;;;:::i;:::-;;;;;;;;2938:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;2913:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;3068:10;3042:9;:23;3052:9;3062:1;3052:12;;;;;;;;:::i;:::-;;;;;;;;3042:23;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;3093:11;;;;;;;;;;;:28;;;3139:10;3175:4;3198:9;3208:1;3198:12;;;;;;;;:::i;:::-;;;;;;;;3093:131;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;2894:3;;;;;:::i;:::-;;;;2852:383;;;;3280:1;3249:27;3265:10;3249:15;:27::i;:::-;:32;3245:101;;;3324:11;:9;:11::i;:::-;3297:12;:24;3310:10;3297:24;;;;;;;;;;;;;;;:38;;;;3245:101;3405:9;:16;3356:12;:24;3369:10;3356:24;;;;;;;;;;;;;;;:37;3381:11;:9;:11::i;:::-;3356:37;;;;;;;;;;;;:66;;;;;;;:::i;:::-;;;;;;;;3438:34;3450:9;3461:10;3438:34;;;;;;;:::i;:::-;;;;;;;;1701:1:2::1;2628:7:::0;:22:::1;;;;2731:748:10::0;:::o;588:200:7:-;726:6;751:30;;;744:37;;588:200;;;;;;:::o;678:67:10:-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3485:147::-;1412:8:1;:6;:8::i;:::-;1411:9;1403:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1:2::1;2325:7;;:19;;2317:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1;2455:7;:18;;;;3605:20:10::2;3615:9;3605;:20::i;:::-;1701:1:2::1;2628:7:::0;:22:::1;;;;3485:147:10::0;:::o;6604:494::-;6690:13;6719:22;6769:1;6755:11;:9;:11::i;:::-;:15;6751:341;;;6791:9;6803:12;:21;6816:7;6803:21;;;;;;;;;;;;;;;;6791:33;;6786:203;6830:11;:9;:11::i;:::-;6826:1;:15;6786:203;;;6972:1;6967;6953:11;:9;:11::i;:::-;:15;;;;:::i;:::-;6952:21;;;;:::i;:::-;6904:12;:21;6917:7;6904:21;;;;;;;;;;;;;;;:24;6926:1;6904:24;;;;;;;;;;;;:70;;;;:::i;:::-;6866:108;;;;;:::i;:::-;;;6843:3;;;;;:::i;:::-;;;;6786:203;;;;7027:14;7011:13;;:30;;;;:::i;:::-;7003:38;;6751:341;;;7080:1;7072:9;;6751:341;6709:389;6604:494;;;:::o;2031:65::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2079:10:10::1;:8;:10::i;:::-;2031:65::o:0;8584:146::-;8634:7;8715;;8697:15;:25;;;;:::i;:::-;8690:1;8677:10;:8;:10::i;:::-;:14;;;;:::i;:::-;8669:4;8661:5;;:12;;;;:::i;:::-;:31;;;;:::i;:::-;8660:63;;;;:::i;:::-;8653:70;;8584:146;:::o;1098:84:1:-;1145:4;1168:7;;;;;;;;;;;1161:14;;1098:84;:::o;1373:129:10:-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1462:6:10::1;1455:4;:13;;;;:::i;:::-;1439;:29;;;;1373:129:::0;:::o;7601:259::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7676:15:10::1;7694:10;;;;;;;;;;;:20;;;7723:4;7694:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7676:53;;7740:10;;;;;;;;;;;:18;;;7767:4;7774:7;7740:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7792:10;;;;;;;;;;;:23;;;7824:4;7831:12;7845:7;7792:61;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7666:194;7601:259:::0;:::o;1668:101:0:-;1259:12;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1732:30:::1;1759:1;1732:18;:30::i;:::-;1668:101::o:0;8086:85:10:-;8127:7;8153:11;:9;:11::i;:::-;8146:18;;8086:85;:::o;8283:102::-;8332:7;8366:11;;;;;;;;;;;8351:27;;8283:102;:::o;8177:100::-;8225:7;8259:10;;;;;;;;;;;8244:26;;8177:100;:::o;1964:61::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2010:8:10::1;:6;:8::i;:::-;1964:61::o:0;1036:85:0:-;1082:7;1108:6;;;;;;;;;;;1101:13;;1036:85;:::o;1864:94:10:-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1941:10:10::1;1932:6;;:19;;;;;;;;;;;;;;;;;;1864:94:::0;:::o;2102:96::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2182:9:10::1;2171:8;:20;;;;2102:96:::0;:::o;8827:393::-;8890:7;8909:19;8958:1;8943:11;:9;:11::i;:::-;:16;8939:275;;8980:9;8992:12;:21;9005:7;8992:21;;;;;;;;;;;;;;;;8980:33;;8975:135;9020:11;:9;:11::i;:::-;9015:1;:16;8975:135;;9071:12;:21;9084:7;9071:21;;;;;;;;;;;;;;;:24;9093:1;9071:24;;;;;;;;;;;;9056:39;;;;;:::i;:::-;;;9033:3;;;;;:::i;:::-;;;;8975:135;;;;9130:11;9123:18;;;;;8939:275;9179:12;:21;9192:7;9179:21;;;;;;;;;;;;;;;:24;9201:1;9179:24;;;;;;;;;;;;9172:31;;;8827:393;;;;:::o;7969:111::-;8028:7;8054:9;:19;8064:8;8054:19;;;;;;;;;;;;;;;;;;;;;8047:26;;7969:111;;;:::o;1759:99::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1842:9:10::1;1834:5;:17;;;;1759:99:::0;:::o;8482:96::-;8532:7;8558:13;;8551:20;;8482:96;:::o;5403:88::-;1412:8:1;:6;:8::i;:::-;1411:9;1403:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1:2::1;2325:7;;:19;;2317:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1;2455:7;:18;;;;5471:13:10::2;:11;:13::i;:::-;1701:1:2::1;2628:7:::0;:22:::1;;;;5403:88:10:o:0;8736:85::-;8780:7;8806:8;;8799:15;;8736:85;:::o;7234:361::-;7920:6;;;;;;;;;;;7906:20;;:10;:20;;;7898:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;7356:9:::1;7351:189;7375:9;:16;7371:1;:20;7351:189;;;7446:1;7412:9;:23;7422:9;7432:1;7422:12;;;;;;;;:::i;:::-;;;;;;;;7412:23;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;7463:11;;;;;;;;;;;:28;;;7500:4;7507:7;7516:9;7526:1;7516:12;;;;;;;;:::i;:::-;;;;;;;;7463:66;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7393:3;;;;;:::i;:::-;;;;7351:189;;;;7555:33;7569:9;7580:7;7555:33;;;;;;;:::i;:::-;;;;;;;;7234:361:::0;;:::o;1636:117::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1736:9:10::1;1712:10;;:34;;;;;;;;;;;;;;;;;;1636:117:::0;:::o;8391:85::-;8438:7;8464:5;;8457:12;;8391:85;:::o;1508:122::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1612:10:10::1;1586:11;;:37;;;;;;;;;;;;;;;;;;1508:122:::0;:::o;1918:198:0:-;1259:12;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2026:1:::1;2006:22;;:8;:22;;;;1998:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2081:28;2100:8;2081:18;:28::i;:::-;1918:198:::0;:::o;2266:240:10:-;2310:7;2345:1;2333:8;;:13;2329:150;;2369:8;;2362:15;;;;2329:150;2454:4;2446:5;;:12;;;;:::i;:::-;2434:7;;2416:15;:25;;;;:::i;:::-;2415:44;;;;:::i;:::-;2408:51;;2266:240;;:::o;3787:1541::-;3887:1;3857:26;3872:10;3857:14;:26::i;:::-;:31;3853:75;;3904:13;:11;:13::i;:::-;3853:75;3943:9;3938:328;3962:9;:16;3958:1;:20;3938:328;;;4034:10;4007:37;;:9;:23;4017:9;4027:1;4017:12;;;;;;;;:::i;:::-;;;;;;;;4007:23;;;;;;;;;;;;;;;;;;;;;:37;;;3999:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;4107:1;4073:9;:23;4083:9;4093:1;4083:12;;;;;;;;:::i;:::-;;;;;;;;4073:23;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;4124:11;;;;;;;;;;;:28;;;4178:4;4201:10;4229:9;4239:1;4229:12;;;;;;;;:::i;:::-;;;;;;;;4124:131;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3980:3;;;;;:::i;:::-;;;;3938:328;;;;4327:1;4312:11;:9;:11::i;:::-;:16;4308:962;;;4385:9;:16;4344:12;:24;4357:10;4344:24;;;;;;;;;;;;;;;:37;4369:11;:9;:11::i;:::-;4344:37;;;;;;;;;;;;:57;;;;;;;:::i;:::-;;;;;;;;4308:962;;;4432:24;4459:12;:24;4472:10;4459:24;;;;;;;;;;;;;;;:71;4515:1;4501:11;:9;:11::i;:::-;:15;;;;:::i;:::-;4459:71;;;;;;;;;;;;4432:98;;4544:23;4570:12;:24;4583:10;4570:24;;;;;;;;;;;;;;;:37;4595:11;:9;:11::i;:::-;4570:37;;;;;;;;;;;;4544:63;;4645:9;:16;4626;:35;4622:638;;;4726:9;:16;4681:12;:24;4694:10;4681:24;;;;;;;;;;;;;;;:41;4720:1;4706:11;:9;:11::i;:::-;:15;;;;:::i;:::-;4681:41;;;;;;;;;;;;:61;;;;;;;:::i;:::-;;;;;;;;4622:638;;;4786:9;:16;4767:15;:35;4763:497;;;4863:9;:16;4822:12;:24;4835:10;4822:24;;;;;;;;;;;;;;;:37;4847:11;:9;:11::i;:::-;4822:37;;;;;;;;;;;;:57;;;;;;;:::i;:::-;;;;;;;;4763:497;;;4924:9;:16;4904;:36;4900:360;;4999:19;5041:16;5022:9;:16;:35;;;;:::i;:::-;4999:59;;5162:11;5123:9;:16;:50;;;;:::i;:::-;5077:12;:24;5090:10;5077:24;;;;;;;;;;;;;;;:41;5116:1;5102:11;:9;:11::i;:::-;:15;;;;:::i;:::-;5077:41;;;;;;;;;;;;:97;;;;;;;:::i;:::-;;;;;;;;5234:11;5193:12;:24;5206:10;5193:24;;;;;;;;;;;;;;;:37;5218:11;:9;:11::i;:::-;5193:37;;;;;;;;;;;;:52;;;;;;;:::i;:::-;;;;;;;;4942:318;4900:360;4763:497;4622:638;4418:852;;4308:962;5285:36;5299:9;5310:10;5285:36;;;;;;;:::i;:::-;;;;;;;;3787:1541;:::o;640:96:8:-;693:7;719:10;712:17;;640:96;:::o;2110:117:1:-;1677:8;:6;:8::i;:::-;1669:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;2178:5:::1;2168:7;;:15;;;;;;;;;;;;;;;;;;2198:22;2207:12;:10;:12::i;:::-;2198:22;;;;;;:::i;:::-;;;;;;;;2110:117::o:0;2270:187:0:-;2343:16;2362:6;;;;;;;;;;;2343:25;;2387:8;2378:6;;:17;;;;;;;;;;;;;;;;;;2441:8;2410:40;;2431:8;2410:40;;;;;;;;;;;;2333:124;2270:187;:::o;1863:115:1:-;1412:8;:6;:8::i;:::-;1411:9;1403:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;1932:4:::1;1922:7;;:14;;;;;;;;;;;;;;;;;;1951:20;1958:12;:10;:12::i;:::-;1951:20;;;;;;:::i;:::-;;;;;;;;1863:115::o:0;5497:1038:10:-;5539:22;5571:19;5623:1;5609:11;:9;:11::i;:::-;:15;5601:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;5736:9;5748:12;:24;5761:10;5748:24;;;;;;;;;;;;;;;;5736:36;;5731:249;5778:11;:9;:11::i;:::-;5774:1;:15;5731:249;;;5825:12;:24;5838:10;5825:24;;;;;;;;;;;;;;;:27;5850:1;5825:27;;;;;;;;;;;;5810:42;;;;;:::i;:::-;;;5967:1;5962;5948:11;:9;:11::i;:::-;:15;;;;:::i;:::-;5947:21;;;;:::i;:::-;5900:12;:24;5913:10;5900:24;;;;;;;;;;;;;;;:27;5925:1;5900:27;;;;;;;;;;;;:69;;;;:::i;:::-;5866:103;;;;;:::i;:::-;;;5791:3;;;;;:::i;:::-;;;;5731:249;;;;6126:11;6082:12;:24;6095:10;6082:24;;;;;;;;;;;;;;;:41;6121:1;6107:11;:9;:11::i;:::-;:15;;;;:::i;:::-;6082:41;;;;;;;;;;;:55;;;;6233:1;6219:11;:9;:11::i;:::-;:15;;;;:::i;:::-;6192:12;:24;6205:10;6192:24;;;;;;;;;;;;;;;:42;;;;6270:1;6253:14;:18;6245:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;6363:13;6395:14;6379:13;;:30;;;;:::i;:::-;6363:46;;6420:10;;;;;;;;;;;:18;;;6447:4;6454:5;6420:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6471:10;;;;;;;;;;;:23;;;6503:4;6510:10;6522:5;6471:57;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5529:1006;;;5497:1038::o;7:75:13:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:102;498:6;549:2;545:7;540:2;533:5;529:14;525:28;515:38;;457:102;;;:::o;565:180::-;613:77;610:1;603:88;710:4;707:1;700:15;734:4;731:1;724:15;751:281;834:27;856:4;834:27;:::i;:::-;826:6;822:40;964:6;952:10;949:22;928:18;916:10;913:34;910:62;907:88;;;975:18;;:::i;:::-;907:88;1015:10;1011:2;1004:22;794:238;751:281;;:::o;1038:129::-;1072:6;1099:20;;:::i;:::-;1089:30;;1128:33;1156:4;1148:6;1128:33;:::i;:::-;1038:129;;;:::o;1173:311::-;1250:4;1340:18;1332:6;1329:30;1326:56;;;1362:18;;:::i;:::-;1326:56;1412:4;1404:6;1400:17;1392:25;;1472:4;1466;1462:15;1454:23;;1173:311;;;:::o;1490:117::-;1599:1;1596;1589:12;1613:77;1650:7;1679:5;1668:16;;1613:77;;;:::o;1696:122::-;1769:24;1787:5;1769:24;:::i;:::-;1762:5;1759:35;1749:63;;1808:1;1805;1798:12;1749:63;1696:122;:::o;1824:139::-;1870:5;1908:6;1895:20;1886:29;;1924:33;1951:5;1924:33;:::i;:::-;1824:139;;;;:::o;1986:710::-;2082:5;2107:81;2123:64;2180:6;2123:64;:::i;:::-;2107:81;:::i;:::-;2098:90;;2208:5;2237:6;2230:5;2223:21;2271:4;2264:5;2260:16;2253:23;;2324:4;2316:6;2312:17;2304:6;2300:30;2353:3;2345:6;2342:15;2339:122;;;2372:79;;:::i;:::-;2339:122;2487:6;2470:220;2504:6;2499:3;2496:15;2470:220;;;2579:3;2608:37;2641:3;2629:10;2608:37;:::i;:::-;2603:3;2596:50;2675:4;2670:3;2666:14;2659:21;;2546:144;2530:4;2525:3;2521:14;2514:21;;2470:220;;;2474:21;2088:608;;1986:710;;;;;:::o;2719:370::-;2790:5;2839:3;2832:4;2824:6;2820:17;2816:27;2806:122;;2847:79;;:::i;:::-;2806:122;2964:6;2951:20;2989:94;3079:3;3071:6;3064:4;3056:6;3052:17;2989:94;:::i;:::-;2980:103;;2796:293;2719:370;;;;:::o;3095:539::-;3179:6;3228:2;3216:9;3207:7;3203:23;3199:32;3196:119;;;3234:79;;:::i;:::-;3196:119;3382:1;3371:9;3367:17;3354:31;3412:18;3404:6;3401:30;3398:117;;;3434:79;;:::i;:::-;3398:117;3539:78;3609:7;3600:6;3589:9;3585:22;3539:78;:::i;:::-;3529:88;;3325:302;3095:539;;;;:::o;3640:126::-;3677:7;3717:42;3710:5;3706:54;3695:65;;3640:126;;;:::o;3772:96::-;3809:7;3838:24;3856:5;3838:24;:::i;:::-;3827:35;;3772:96;;;:::o;3874:122::-;3947:24;3965:5;3947:24;:::i;:::-;3940:5;3937:35;3927:63;;3986:1;3983;3976:12;3927:63;3874:122;:::o;4002:139::-;4048:5;4086:6;4073:20;4064:29;;4102:33;4129:5;4102:33;:::i;:::-;4002:139;;;;:::o;4147:117::-;4256:1;4253;4246:12;4270:307;4331:4;4421:18;4413:6;4410:30;4407:56;;;4443:18;;:::i;:::-;4407:56;4481:29;4503:6;4481:29;:::i;:::-;4473:37;;4565:4;4559;4555:15;4547:23;;4270:307;;;:::o;4583:154::-;4667:6;4662:3;4657;4644:30;4729:1;4720:6;4715:3;4711:16;4704:27;4583:154;;;:::o;4743:410::-;4820:5;4845:65;4861:48;4902:6;4861:48;:::i;:::-;4845:65;:::i;:::-;4836:74;;4933:6;4926:5;4919:21;4971:4;4964:5;4960:16;5009:3;5000:6;4995:3;4991:16;4988:25;4985:112;;;5016:79;;:::i;:::-;4985:112;5106:41;5140:6;5135:3;5130;5106:41;:::i;:::-;4826:327;4743:410;;;;;:::o;5172:338::-;5227:5;5276:3;5269:4;5261:6;5257:17;5253:27;5243:122;;5284:79;;:::i;:::-;5243:122;5401:6;5388:20;5426:78;5500:3;5492:6;5485:4;5477:6;5473:17;5426:78;:::i;:::-;5417:87;;5233:277;5172:338;;;;:::o;5516:943::-;5611:6;5619;5627;5635;5684:3;5672:9;5663:7;5659:23;5655:33;5652:120;;;5691:79;;:::i;:::-;5652:120;5811:1;5836:53;5881:7;5872:6;5861:9;5857:22;5836:53;:::i;:::-;5826:63;;5782:117;5938:2;5964:53;6009:7;6000:6;5989:9;5985:22;5964:53;:::i;:::-;5954:63;;5909:118;6066:2;6092:53;6137:7;6128:6;6117:9;6113:22;6092:53;:::i;:::-;6082:63;;6037:118;6222:2;6211:9;6207:18;6194:32;6253:18;6245:6;6242:30;6239:117;;;6275:79;;:::i;:::-;6239:117;6380:62;6434:7;6425:6;6414:9;6410:22;6380:62;:::i;:::-;6370:72;;6165:287;5516:943;;;;;;;:::o;6465:149::-;6501:7;6541:66;6534:5;6530:78;6519:89;;6465:149;;;:::o;6620:115::-;6705:23;6722:5;6705:23;:::i;:::-;6700:3;6693:36;6620:115;;:::o;6741:218::-;6832:4;6870:2;6859:9;6855:18;6847:26;;6883:69;6949:1;6938:9;6934:17;6925:6;6883:69;:::i;:::-;6741:218;;;;:::o;6965:474::-;7033:6;7041;7090:2;7078:9;7069:7;7065:23;7061:32;7058:119;;;7096:79;;:::i;:::-;7058:119;7216:1;7241:53;7286:7;7277:6;7266:9;7262:22;7241:53;:::i;:::-;7231:63;;7187:117;7343:2;7369:53;7414:7;7405:6;7394:9;7390:22;7369:53;:::i;:::-;7359:63;;7314:118;6965:474;;;;;:::o;7445:118::-;7532:24;7550:5;7532:24;:::i;:::-;7527:3;7520:37;7445:118;;:::o;7569:222::-;7662:4;7700:2;7689:9;7685:18;7677:26;;7713:71;7781:1;7770:9;7766:17;7757:6;7713:71;:::i;:::-;7569:222;;;;:::o;7797:329::-;7856:6;7905:2;7893:9;7884:7;7880:23;7876:32;7873:119;;;7911:79;;:::i;:::-;7873:119;8031:1;8056:53;8101:7;8092:6;8081:9;8077:22;8056:53;:::i;:::-;8046:63;;8002:117;7797:329;;;;:::o;8132:90::-;8166:7;8209:5;8202:13;8195:21;8184:32;;8132:90;;;:::o;8228:109::-;8309:21;8324:5;8309:21;:::i;:::-;8304:3;8297:34;8228:109;;:::o;8343:210::-;8430:4;8468:2;8457:9;8453:18;8445:26;;8481:65;8543:1;8532:9;8528:17;8519:6;8481:65;:::i;:::-;8343:210;;;;:::o;8559:329::-;8618:6;8667:2;8655:9;8646:7;8642:23;8638:32;8635:119;;;8673:79;;:::i;:::-;8635:119;8793:1;8818:53;8863:7;8854:6;8843:9;8839:22;8818:53;:::i;:::-;8808:63;;8764:117;8559:329;;;;:::o;8894:118::-;8981:24;8999:5;8981:24;:::i;:::-;8976:3;8969:37;8894:118;;:::o;9018:222::-;9111:4;9149:2;9138:9;9134:18;9126:26;;9162:71;9230:1;9219:9;9215:17;9206:6;9162:71;:::i;:::-;9018:222;;;;:::o;9246:684::-;9339:6;9347;9396:2;9384:9;9375:7;9371:23;9367:32;9364:119;;;9402:79;;:::i;:::-;9364:119;9522:1;9547:53;9592:7;9583:6;9572:9;9568:22;9547:53;:::i;:::-;9537:63;;9493:117;9677:2;9666:9;9662:18;9649:32;9708:18;9700:6;9697:30;9694:117;;;9730:79;;:::i;:::-;9694:117;9835:78;9905:7;9896:6;9885:9;9881:22;9835:78;:::i;:::-;9825:88;;9620:303;9246:684;;;;;:::o;9936:169::-;10020:11;10054:6;10049:3;10042:19;10094:4;10089:3;10085:14;10070:29;;9936:169;;;;:::o;10111:166::-;10251:18;10247:1;10239:6;10235:14;10228:42;10111:166;:::o;10283:366::-;10425:3;10446:67;10510:2;10505:3;10446:67;:::i;:::-;10439:74;;10522:93;10611:3;10522:93;:::i;:::-;10640:2;10635:3;10631:12;10624:19;;10283:366;;;:::o;10655:419::-;10821:4;10859:2;10848:9;10844:18;10836:26;;10908:9;10902:4;10898:20;10894:1;10883:9;10879:17;10872:47;10936:131;11062:4;10936:131;:::i;:::-;10928:139;;10655:419;;;:::o;11080:181::-;11220:33;11216:1;11208:6;11204:14;11197:57;11080:181;:::o;11267:366::-;11409:3;11430:67;11494:2;11489:3;11430:67;:::i;:::-;11423:74;;11506:93;11595:3;11506:93;:::i;:::-;11624:2;11619:3;11615:12;11608:19;;11267:366;;;:::o;11639:419::-;11805:4;11843:2;11832:9;11828:18;11820:26;;11892:9;11886:4;11882:20;11878:1;11867:9;11863:17;11856:47;11920:131;12046:4;11920:131;:::i;:::-;11912:139;;11639:419;;;:::o;12064:180::-;12112:77;12109:1;12102:88;12209:4;12206:1;12199:15;12233:4;12230:1;12223:15;12250:143;12307:5;12338:6;12332:13;12323:22;;12354:33;12381:5;12354:33;:::i;:::-;12250:143;;;;:::o;12399:351::-;12469:6;12518:2;12506:9;12497:7;12493:23;12489:32;12486:119;;;12524:79;;:::i;:::-;12486:119;12644:1;12669:64;12725:7;12716:6;12705:9;12701:22;12669:64;:::i;:::-;12659:74;;12615:128;12399:351;;;;:::o;12756:159::-;12896:11;12892:1;12884:6;12880:14;12873:35;12756:159;:::o;12921:365::-;13063:3;13084:66;13148:1;13143:3;13084:66;:::i;:::-;13077:73;;13159:93;13248:3;13159:93;:::i;:::-;13277:2;13272:3;13268:12;13261:19;;12921:365;;;:::o;13292:419::-;13458:4;13496:2;13485:9;13481:18;13473:26;;13545:9;13539:4;13535:20;13531:1;13520:9;13516:17;13509:47;13573:131;13699:4;13573:131;:::i;:::-;13565:139;;13292:419;;;:::o;13717:442::-;13866:4;13904:2;13893:9;13889:18;13881:26;;13917:71;13985:1;13974:9;13970:17;13961:6;13917:71;:::i;:::-;13998:72;14066:2;14055:9;14051:18;14042:6;13998:72;:::i;:::-;14080;14148:2;14137:9;14133:18;14124:6;14080:72;:::i;:::-;13717:442;;;;;;:::o;14165:180::-;14213:77;14210:1;14203:88;14310:4;14307:1;14300:15;14334:4;14331:1;14324:15;14351:233;14390:3;14413:24;14431:5;14413:24;:::i;:::-;14404:33;;14459:66;14452:5;14449:77;14446:103;;;14529:18;;:::i;:::-;14446:103;14576:1;14569:5;14565:13;14558:20;;14351:233;;;:::o;14590:305::-;14630:3;14649:20;14667:1;14649:20;:::i;:::-;14644:25;;14683:20;14701:1;14683:20;:::i;:::-;14678:25;;14837:1;14769:66;14765:74;14762:1;14759:81;14756:107;;;14843:18;;:::i;:::-;14756:107;14887:1;14884;14880:9;14873:16;;14590:305;;;;:::o;14901:114::-;14968:6;15002:5;14996:12;14986:22;;14901:114;;;:::o;15021:184::-;15120:11;15154:6;15149:3;15142:19;15194:4;15189:3;15185:14;15170:29;;15021:184;;;;:::o;15211:132::-;15278:4;15301:3;15293:11;;15331:4;15326:3;15322:14;15314:22;;15211:132;;;:::o;15349:108::-;15426:24;15444:5;15426:24;:::i;:::-;15421:3;15414:37;15349:108;;:::o;15463:179::-;15532:10;15553:46;15595:3;15587:6;15553:46;:::i;:::-;15631:4;15626:3;15622:14;15608:28;;15463:179;;;;:::o;15648:113::-;15718:4;15750;15745:3;15741:14;15733:22;;15648:113;;;:::o;15797:732::-;15916:3;15945:54;15993:5;15945:54;:::i;:::-;16015:86;16094:6;16089:3;16015:86;:::i;:::-;16008:93;;16125:56;16175:5;16125:56;:::i;:::-;16204:7;16235:1;16220:284;16245:6;16242:1;16239:13;16220:284;;;16321:6;16315:13;16348:63;16407:3;16392:13;16348:63;:::i;:::-;16341:70;;16434:60;16487:6;16434:60;:::i;:::-;16424:70;;16280:224;16267:1;16264;16260:9;16255:14;;16220:284;;;16224:14;16520:3;16513:10;;15921:608;;;15797:732;;;;:::o;16535:483::-;16706:4;16744:2;16733:9;16729:18;16721:26;;16793:9;16787:4;16783:20;16779:1;16768:9;16764:17;16757:47;16821:108;16924:4;16915:6;16821:108;:::i;:::-;16813:116;;16939:72;17007:2;16996:9;16992:18;16983:6;16939:72;:::i;:::-;16535:483;;;;;:::o;17024:191::-;17064:4;17084:20;17102:1;17084:20;:::i;:::-;17079:25;;17118:20;17136:1;17118:20;:::i;:::-;17113:25;;17157:1;17154;17151:8;17148:34;;;17162:18;;:::i;:::-;17148:34;17207:1;17204;17200:9;17192:17;;17024:191;;;;:::o;17221:348::-;17261:7;17284:20;17302:1;17284:20;:::i;:::-;17279:25;;17318:20;17336:1;17318:20;:::i;:::-;17313:25;;17506:1;17438:66;17434:74;17431:1;17428:81;17423:1;17416:9;17409:17;17405:105;17402:131;;;17513:18;;:::i;:::-;17402:131;17561:1;17558;17554:9;17543:20;;17221:348;;;;:::o;17575:182::-;17715:34;17711:1;17703:6;17699:14;17692:58;17575:182;:::o;17763:366::-;17905:3;17926:67;17990:2;17985:3;17926:67;:::i;:::-;17919:74;;18002:93;18091:3;18002:93;:::i;:::-;18120:2;18115:3;18111:12;18104:19;;17763:366;;;:::o;18135:419::-;18301:4;18339:2;18328:9;18324:18;18316:26;;18388:9;18382:4;18378:20;18374:1;18363:9;18359:17;18352:47;18416:131;18542:4;18416:131;:::i;:::-;18408:139;;18135:419;;;:::o;18560:143::-;18617:5;18648:6;18642:13;18633:22;;18664:33;18691:5;18664:33;:::i;:::-;18560:143;;;;:::o;18709:351::-;18779:6;18828:2;18816:9;18807:7;18803:23;18799:32;18796:119;;;18834:79;;:::i;:::-;18796:119;18954:1;18979:64;19035:7;19026:6;19015:9;19011:22;18979:64;:::i;:::-;18969:74;;18925:128;18709:351;;;;:::o;19066:332::-;19187:4;19225:2;19214:9;19210:18;19202:26;;19238:71;19306:1;19295:9;19291:17;19282:6;19238:71;:::i;:::-;19319:72;19387:2;19376:9;19372:18;19363:6;19319:72;:::i;:::-;19066:332;;;;;:::o;19404:116::-;19474:21;19489:5;19474:21;:::i;:::-;19467:5;19464:32;19454:60;;19510:1;19507;19500:12;19454:60;19404:116;:::o;19526:137::-;19580:5;19611:6;19605:13;19596:22;;19627:30;19651:5;19627:30;:::i;:::-;19526:137;;;;:::o;19669:345::-;19736:6;19785:2;19773:9;19764:7;19760:23;19756:32;19753:119;;;19791:79;;:::i;:::-;19753:119;19911:1;19936:61;19989:7;19980:6;19969:9;19965:22;19936:61;:::i;:::-;19926:71;;19882:125;19669:345;;;;:::o;20020:164::-;20160:16;20156:1;20148:6;20144:14;20137:40;20020:164;:::o;20190:366::-;20332:3;20353:67;20417:2;20412:3;20353:67;:::i;:::-;20346:74;;20429:93;20518:3;20429:93;:::i;:::-;20547:2;20542:3;20538:12;20531:19;;20190:366;;;:::o;20562:419::-;20728:4;20766:2;20755:9;20751:18;20743:26;;20815:9;20809:4;20805:20;20801:1;20790:9;20786:17;20779:47;20843:131;20969:4;20843:131;:::i;:::-;20835:139;;20562:419;;;:::o;20987:225::-;21127:34;21123:1;21115:6;21111:14;21104:58;21196:8;21191:2;21183:6;21179:15;21172:33;20987:225;:::o;21218:366::-;21360:3;21381:67;21445:2;21440:3;21381:67;:::i;:::-;21374:74;;21457:93;21546:3;21457:93;:::i;:::-;21575:2;21570:3;21566:12;21559:19;;21218:366;;;:::o;21590:419::-;21756:4;21794:2;21783:9;21779:18;21771:26;;21843:9;21837:4;21833:20;21829:1;21818:9;21814:17;21807:47;21871:131;21997:4;21871:131;:::i;:::-;21863:139;;21590:419;;;:::o;22015:180::-;22063:77;22060:1;22053:88;22160:4;22157:1;22150:15;22184:4;22181:1;22174:15;22201:185;22241:1;22258:20;22276:1;22258:20;:::i;:::-;22253:25;;22292:20;22310:1;22292:20;:::i;:::-;22287:25;;22331:1;22321:35;;22336:18;;:::i;:::-;22321:35;22378:1;22375;22371:9;22366:14;;22201:185;;;;:::o;22392:170::-;22532:22;22528:1;22520:6;22516:14;22509:46;22392:170;:::o;22568:366::-;22710:3;22731:67;22795:2;22790:3;22731:67;:::i;:::-;22724:74;;22807:93;22896:3;22807:93;:::i;:::-;22925:2;22920:3;22916:12;22909:19;;22568:366;;;:::o;22940:419::-;23106:4;23144:2;23133:9;23129:18;23121:26;;23193:9;23187:4;23183:20;23179:1;23168:9;23164:17;23157:47;23221:131;23347:4;23221:131;:::i;:::-;23213:139;;22940:419;;;:::o;23365:166::-;23505:18;23501:1;23493:6;23489:14;23482:42;23365:166;:::o;23537:366::-;23679:3;23700:67;23764:2;23759:3;23700:67;:::i;:::-;23693:74;;23776:93;23865:3;23776:93;:::i;:::-;23894:2;23889:3;23885:12;23878:19;;23537:366;;;:::o;23909:419::-;24075:4;24113:2;24102:9;24098:18;24090:26;;24162:9;24156:4;24152:20;24148:1;24137:9;24133:17;24126:47;24190:131;24316:4;24190:131;:::i;:::-;24182:139;;23909:419;;;:::o;24334:166::-;24474:18;24470:1;24462:6;24458:14;24451:42;24334:166;:::o;24506:366::-;24648:3;24669:67;24733:2;24728:3;24669:67;:::i;:::-;24662:74;;24745:93;24834:3;24745:93;:::i;:::-;24863:2;24858:3;24854:12;24847:19;;24506:366;;;:::o;24878:419::-;25044:4;25082:2;25071:9;25067:18;25059:26;;25131:9;25125:4;25121:20;25117:1;25106:9;25102:17;25095:47;25159:131;25285:4;25159:131;:::i;:::-;25151:139;;24878:419;;;:::o

Swarm Source

ipfs://9a9dd1c4ae4ce52e9ae50d4cdf88c2443f3e2ac547b4ca0e47e61886d580bd18

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