Contract
0xEaB33F781aDA4ee7E91fD63ad87C5Bb47FFb8a83
2
Contract Overview
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
Hunter
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
import "./IHunter.sol"; import "./ERC721Enumerable.sol"; import "./Ownable.sol"; import "./Pausable.sol"; import "./IBarn.sol"; import "./IGEM.sol"; import "./ITraits.sol"; import "./ISeed.sol"; // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract Hunter is IHunter, ERC721Enumerable, Ownable, Pausable { // uint256 public constant MAX_PER_MINT = 10; // mint price 1.5AVAX uint256 public constant MINT_PRICE = 1.5 ether; //whitelist price 1.25 avax uint256 public constant WL_PRICE = 1.25 ether; // max number of tokens that can be minted - 50000 in production uint256 public MAX_TOKENS; // number of tokens that can be claimed for free - 20% of MAX_TOKENS uint256 public PAID_TOKENS; // number of tokens have been minted so far uint16 public minted; uint16 public Adventurer_minted; uint16 public Hunter_minted; // Pre mint uint256 public startTimestamp; uint256 public endTimestamp; // payment wallets address payable AdminWallet; address payable Multisig; // mapping from tokenId to a struct containing the token's traits mapping(uint256 => AvtHtr) public tokenTraits; // WhiteList mapping(address => bool) public WhiteList; mapping(address => uint256) public whiteListMintCounts; // list of probabilities for each trait type // 0 - 6 are associated with Adventurers, 7 - 12 are associated with hunters uint8[][12] public rarities; // list of aliases for Walker's Alias algorithm // 0 - 6 are associated with Adventurers, 6 - 12 are associated with Hunters uint8[][12] public aliases; // reference to the Barn for choosing random Hunter thieves IBarn public barn; // reference to $GEM for burning on mint IGEM public gem; // reference to Traits ITraits public traits; // reference to Seed ISeed public randomSource; /** * instantiates contract and rarity tables */ constructor( address _gem, address _traits, uint256 _maxTokens ) ERC721("Yield Hunt", "HGAME") { AdminWallet = payable(0x9F523A9d191704887Cf667b86d3B6Cd6eBE9D6e9); Multisig = payable(0x49208f9eEAD9416446cdE53435C6271A0235dDA4); gem = IGEM(_gem); traits = ITraits(_traits); MAX_TOKENS = _maxTokens; PAID_TOKENS = _maxTokens / 5; } function setTraits(address _traits) external onlyOwner { traits = ITraits(_traits); } /** EXTERNAL */ function setTimeforPremint(uint256 _startTimestamp, uint256 _endTimestamp) external onlyOwner { startTimestamp = _startTimestamp; endTimestamp = _endTimestamp; } modifier onlyWhileOpen() { require( block.timestamp >= startTimestamp && block.timestamp <= endTimestamp ); _; } modifier onlyWhileClose() { require(block.timestamp > endTimestamp); _; } function isOpened() public view returns (bool) { return block.timestamp >= startTimestamp && block.timestamp <= endTimestamp; } function isClosed() public view returns (bool) { return block.timestamp > endTimestamp; } function setWhitelist(address[] memory _whitelist) external onlyOwner { for (uint256 i = 0; i < _whitelist.length; i++) { WhiteList[_whitelist[i]] = true; } } /* * mint a token - 90% Adventurers, 10% Hunters * The first 20% are free to claim, the remaining cost $GEM */ function mint(uint256 amount, bool stake) external payable whenNotPaused { require(minted + amount <= MAX_TOKENS, "All tokens minted"); require(amount > 0, "Invalid mint amount"); if (isOpened()) { _premint(amount, stake); } else if (isClosed()) { _normal_mint(amount, stake); } } // after white list period function _normal_mint(uint256 amount, bool stake) private onlyWhileClose { //MAYBE WHITELISTED CAN MINT 1.25 require(tx.origin == _msgSender(), "Only EOA"); if (minted < PAID_TOKENS) { require( minted + amount <= PAID_TOKENS, "All tokens on-sale already sold" ); require( amount * MINT_PRICE <= msg.value || _msgSender() == AdminWallet, "Invalid payment amount" ); } else { require( msg.value == 0, "Do not send AVAX, minting is with GEM now" ); } core_mint(amount, stake); } // during white list period function _premint(uint256 amount, bool stake) private onlyWhileOpen { require(tx.origin == _msgSender(), "Only EOA"); require(WhiteList[_msgSender()], "You are not whitelisted"); require( whiteListMintCounts[_msgSender()] + amount <= 5, "White list can only mint 5" ); require( minted + amount <= PAID_TOKENS, "All tokens on-sale already sold" ); require( amount * WL_PRICE <= msg.value || _msgSender() == AdminWallet, "Invalid payment amount" ); whiteListMintCounts[_msgSender()] += amount; core_mint(amount, stake); } function core_mint(uint256 amount, bool stake) private { uint256 totalGemCost = 0; uint16[] memory tokenIds = stake ? new uint16[](amount) : new uint16[](0); uint256 seed; for (uint256 i = 0; i < amount; i++) { minted++; seed = random(minted); generate(minted, seed); address recipient = selectRecipient(seed); if (!stake || recipient != _msgSender()) { _safeMint(recipient, minted); } else { _safeMint(address(barn), minted); tokenIds[i] = minted; } if (tokenTraits[minted].isAdventurer) { Adventurer_minted += 1; } else { Hunter_minted += 1; } totalGemCost += mintCost(minted); // 0 if we are before 10.000 } //we may want to do that first but w/o reentrancy if (totalGemCost > 0) gem.burn(_msgSender(), totalGemCost); if (stake) barn.addManyToBarnAndPack(_msgSender(), tokenIds); withdrawMoneyTo(Multisig); //hihi } /** * the first 20% are paid in AVAX * the next 20% are 20000 $GEM * the next 40% are 40000 $GEM * the final 20% are 80000 $GEM * @param tokenId the ID to check the cost of to mint * @return the cost of the given token ID */ function mintCost(uint256 tokenId) public view returns (uint256) { if (tokenId <= PAID_TOKENS) return 0; if (tokenId <= (MAX_TOKENS * 2) / 5) return 20000 ether; if (tokenId <= (MAX_TOKENS * 4) / 5) return 40000 ether; return 80000 ether; } function transferFrom( address from, address to, uint256 tokenId ) public virtual override { // Hardcode the Barn's approval so that users don't have to waste gas approving if (_msgSender() != address(barn)) require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _transfer(from, to, tokenId); } /** INTERNAL */ /** * generates traits for a specific token, checking to make sure it's unique * @param tokenId the id of the token to generate traits for * @param seed a pseudorandom 256 bit number to derive traits from * @return t - a struct of traits for the given token ID */ function generate(uint256 tokenId, uint256 seed) internal returns (AvtHtr memory t) { t = selectTraits(seed); tokenTraits[tokenId] = t; return t; } /** * uses A.J. Walker's Alias algorithm for O(1) rarity table lookup * ensuring O(1) instead of O(n) reduces mint cost by more than 50% * probability & alias tables are generated off-chain beforehand * @param seed portion of the 256 bit seed to remove trait correlation * @param traitType the trait type to select a trait for * @return the ID of the randomly selected trait */ function selectTrait(uint16 seed, uint8 traitType) internal view returns (uint8) { return traits.selectTrait(seed, traitType); } /** * the first 20% (AVAX purchases) go to the minter * the remaining 80% have a 10% chance to be given to a random staked adventurer * @param seed a random value to select a recipient from * @return the address of the recipient (either the minter or the adventurer thief's owner) */ function selectRecipient(uint256 seed) internal view returns (address) { if (minted <= PAID_TOKENS || ((seed >> 245) % 10) != 0) return _msgSender(); // top 10 bits haven't been used address thief = barn.randomHunterOwner(seed >> 144); // 144 bits reserved for trait selection if (thief == address(0x0)) return _msgSender(); return thief; } /** * selects the species and all of its traits based on the seed value * @param _seed a pseudorandom 256 bit number to derive traits from * @return t - a struct of randomly selected traits */ function selectTraits(uint256 _seed) internal view returns (AvtHtr memory t) { uint256 seed = _seed; t.isAdventurer = (seed & 0xFFFF) % 10 != 0; if (t.isAdventurer) { seed >>= 16; t.jacket = selectTrait(uint16(seed & 0xFFFF), 0); seed >>= 16; t.hair = selectTrait(uint16(seed & 0xFFFF), 1); seed >>= 16; t.backpack = selectTrait(uint16(seed & 0xFFFF), 2); } else { seed >>= 16; t.arm = selectTrait(uint16(seed & 0xFFFF), 3); seed >>= 16; t.clothes = selectTrait(uint16(seed & 0xFFFF), 4); seed >>= 16; t.mask = selectTrait(uint16(seed & 0xFFFF), 5); seed >>= 16; t.weapon = selectTrait(uint16(seed & 0xFFFF), 6); seed >>= 16; t.alphaIndex = selectTrait(uint16(seed & 0xFFFF), 7); } } /** * generates a pseudorandom number * @param seed a value ensure different outcomes for different sources in the same block * @return a pseudorandom value */ // need to use seed contract function random(uint256 seed) internal returns (uint256) { return uint256( keccak256( abi.encodePacked( msg.sender, blockhash(block.number - 1), block.timestamp, seed ) ) ) ^ randomSource.getRandomSeed(seed); } /** READ */ function getTokenTraits(uint256 tokenId) external view override returns (AvtHtr memory) { return tokenTraits[tokenId]; } function getPaidTokens() external view override returns (uint256) { return PAID_TOKENS; } /** ADMIN */ /** * called after deployment so that the contract can get random adventurers thieves * @param _barn the address of the Barn */ function setBarn(address _barn) external onlyOwner { barn = IBarn(_barn); } function setRandomSource(address _randomSource) external onlyOwner { randomSource = ISeed(_randomSource); } /** * allows owner to withdraw funds from minting */ function getBalance() public view returns (uint256) { return address(this).balance; } function withdrawMoneyTo(address payable _to) internal { _to.call{value: getBalance(), gas: 100000}(""); } function withdraw() external onlyOwner { payable(owner()).transfer(address(this).balance); } /** * updates the number of tokens for sale */ function setPaidTokens(uint256 _paidTokens) external onlyOwner { PAID_TOKENS = _paidTokens; } /** * enables owner to pause / unpause minting */ function setPaused(bool _paused) external onlyOwner { if (_paused) _pause(); else _unpause(); } /** RENDER */ function tokenURI(uint256 tokenId) public view override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); return traits.tokenURI(tokenId); } }
// SPDX-License-Identifier: MIT 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; } }
import "./Context.sol"; import "./Libraries.sol"; // SPDX-License-Identifier: MIT 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); } /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } /** * @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; } /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require( owner != address(0), "ERC721: balance query for the zero address" ); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require( owner != address(0), "ERC721: owner query for nonexistent token" ); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require( _exists(tokenId), "ERC721: approved query for nonexistent token" ); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _safeTransfer(from, to, tokenId, _data); } /** * @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. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require( _exists(tokenId), "ERC721: operator query for nonexistent token" ); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require( ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own" ); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received( _msgSender(), from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721: transfer to non ERC721Receiver implementer" ); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } /** * @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); } /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require( index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds" ); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require( index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds" ); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } /** * @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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IBarn { function addManyToBarnAndPack(address account, uint16[] memory tokenIds) external; function randomHunterOwner(uint256 seed) external view returns (address); }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; interface IGEM { function burn(address from, uint256 amount) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IHunter { // struct to store each token's traits struct AvtHtr { bool isAdventurer; uint8 jacket; uint8 hair; uint8 backpack; uint8 arm; uint8 clothes; uint8 mask; uint8 weapon; uint8 alphaIndex; } function getPaidTokens() external view returns (uint256); function getTokenTraits(uint256 tokenId) external view returns (AvtHtr memory); }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; interface ISeed { function getRandomSeed(uint256) external returns(uint256); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface ITraits { function tokenURI(uint256 tokenId) external view returns (string memory); function selectTrait(uint16 seed, uint8 traitType) external view returns (uint8); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ 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" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ 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" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ 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); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ 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); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ 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); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // 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); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ 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); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed 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); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./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() { _setOwner(_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 { _setOwner(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" ); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./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()); } }
[{"inputs":[{"internalType":"address","name":"_gem","type":"address"},{"internalType":"address","name":"_traits","type":"address"},{"internalType":"uint256","name":"_maxTokens","type":"uint256"}],"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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"Adventurer_minted","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Hunter_minted","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAID_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WL_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"WhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"aliases","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"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":[],"name":"barn","outputs":[{"internalType":"contract IBarn","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gem","outputs":[{"internalType":"contract IGEM","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPaidTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTokenTraits","outputs":[{"components":[{"internalType":"bool","name":"isAdventurer","type":"bool"},{"internalType":"uint8","name":"jacket","type":"uint8"},{"internalType":"uint8","name":"hair","type":"uint8"},{"internalType":"uint8","name":"backpack","type":"uint8"},{"internalType":"uint8","name":"arm","type":"uint8"},{"internalType":"uint8","name":"clothes","type":"uint8"},{"internalType":"uint8","name":"mask","type":"uint8"},{"internalType":"uint8","name":"weapon","type":"uint8"},{"internalType":"uint8","name":"alphaIndex","type":"uint8"}],"internalType":"struct IHunter.AvtHtr","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":"isClosed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOpened","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"stake","type":"bool"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mintCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"randomSource","outputs":[{"internalType":"contract ISeed","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"rarities","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_barn","type":"address"}],"name":"setBarn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_paidTokens","type":"uint256"}],"name":"setPaidTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_randomSource","type":"address"}],"name":"setRandomSource","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startTimestamp","type":"uint256"},{"internalType":"uint256","name":"_endTimestamp","type":"uint256"}],"name":"setTimeforPremint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_traits","type":"address"}],"name":"setTraits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_whitelist","type":"address[]"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":"","type":"uint256"}],"name":"tokenTraits","outputs":[{"internalType":"bool","name":"isAdventurer","type":"bool"},{"internalType":"uint8","name":"jacket","type":"uint8"},{"internalType":"uint8","name":"hair","type":"uint8"},{"internalType":"uint8","name":"backpack","type":"uint8"},{"internalType":"uint8","name":"arm","type":"uint8"},{"internalType":"uint8","name":"clothes","type":"uint8"},{"internalType":"uint8","name":"mask","type":"uint8"},{"internalType":"uint8","name":"weapon","type":"uint8"},{"internalType":"uint8","name":"alphaIndex","type":"uint8"}],"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":[],"name":"traits","outputs":[{"internalType":"contract ITraits","name":"","type":"address"}],"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":"address","name":"","type":"address"}],"name":"whiteListMintCounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200393438038062003934833981016040819052620000349162000268565b604080518082018252600a815269165a595b1908121d5b9d60b21b6020808301918252835180850190945260058452644847414d4560d81b9084015281519192916200008391600091620001a5565b50805162000099906001906020840190620001a5565b505050620000b6620000b06200014f60201b60201c565b62000153565b600a805460ff60a01b1916905560108054739f523a9d191704887cf667b86d3b6cd6ebe9d6e96001600160a01b031991821617909155601180547349208f9eead9416446cde53435c6271a0235dda4908316179055602e805482166001600160a01b0386811691909117909155602f8054909216908416179055600b81905562000142600582620002a9565b600c555062000309915050565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001b390620002cc565b90600052602060002090601f016020900481019282620001d7576000855562000222565b82601f10620001f257805160ff191683800117855562000222565b8280016001018555821562000222579182015b828111156200022257825182559160200191906001019062000205565b506200023092915062000234565b5090565b5b8082111562000230576000815560010162000235565b80516001600160a01b03811681146200026357600080fd5b919050565b6000806000606084860312156200027e57600080fd5b62000289846200024b565b925062000299602085016200024b565b9150604084015190509250925092565b600082620002c757634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680620002e157607f821691505b602082108114156200030357634e487b7160e01b600052602260045260246000fd5b50919050565b61361b80620003196000396000f3fe60806040526004361061031a5760003560e01c80636bc20157116101ab578063c002d23d116100f7578063e1fc334f11610095578063f2fde38b1161006f578063f2fde38b14610a14578063f3067eec14610a34578063f421764814610a57578063f47c84c514610a7757600080fd5b8063e1fc334f14610995578063e6fd48bc146109b5578063e985e9c5146109cb57600080fd5b8063c588065d116100d1578063c588065d14610861578063c87b56dd14610881578063d773826d146108a1578063e05c57bf146108c157600080fd5b8063c002d23d14610818578063c084f54014610834578063c2b6b58c1461084a57600080fd5b806382e1945a1161016457806395d89b411161013e57806395d89b41146107ad578063a22cb465146107c2578063a85adeab146107e2578063b88d4fde146107f857600080fd5b806382e1945a146107355780638da5cb5b1461076257806394e568471461078057600080fd5b80636bc201571461066f5780636f4f73661461069f57806370a08231146106bf578063715018a6146106df578063794622f6146106f45780637bd2bea71461071557600080fd5b806333df4b2c1161026a57806342842e0e116102235780635c975abb116101fd5780635c975abb146106085780636352211e1461062757806367f68fac14610647578063692aa97e1461065a57600080fd5b806342842e0e1461059a5780634f02c420146105ba5780634f6ccce7146105e857600080fd5b806333df4b2c146104de5780633431a7531461051057806336838391146105305780633b342a85146105505780633ccfd60b146105705780634018b1f81461058557600080fd5b806316c38b3c116102d757806323b872dd116102b157806323b872dd1461046257806327de8f27146104825780632f745c59146104a257806331c3c7a0146104c257600080fd5b806316c38b3c1461040d57806318160ddd1461042d578063194f480e1461044257600080fd5b806301ffc9a71461031f57806306fdde0314610354578063081812fc14610376578063095ea7b3146103ae5780630c89b766146103d057806312065fe0146103f0575b600080fd5b34801561032b57600080fd5b5061033f61033a366004613014565b610a8d565b60405190151581526020015b60405180910390f35b34801561036057600080fd5b50610369610ab8565b60405161034b9190613222565b34801561038257600080fd5b506103966103913660046130c5565b610b4a565b6040516001600160a01b03909116815260200161034b565b3480156103ba57600080fd5b506103ce6103c9366004612f14565b610be4565b005b3480156103dc57600080fd5b50603054610396906001600160a01b031681565b3480156103fc57600080fd5b50475b60405190815260200161034b565b34801561041957600080fd5b506103ce610428366004612ff9565b610cfa565b34801561043957600080fd5b506008546103ff565b34801561044e57600080fd5b50602d54610396906001600160a01b031681565b34801561046e57600080fd5b506103ce61047d366004612def565b610d3d565b34801561048e57600080fd5b506103ff61049d3660046130c5565b610d89565b3480156104ae57600080fd5b506103ff6104bd366004612f14565b610e11565b3480156104ce57600080fd5b506103ff671158e460913d000081565b3480156104ea57600080fd5b506104fe6104f936600461311a565b610ea7565b60405160ff909116815260200161034b565b34801561051c57600080fd5b506103ce61052b3660046130c5565b610eed565b34801561053c57600080fd5b506104fe61054b36600461311a565b610f1c565b34801561055c57600080fd5b506103ce61056b366004612d7c565b610f2c565b34801561057c57600080fd5b506103ce610f78565b34801561059157600080fd5b50600c546103ff565b3480156105a657600080fd5b506103ce6105b5366004612def565b610fdb565b3480156105c657600080fd5b50600d546105d59061ffff1681565b60405161ffff909116815260200161034b565b3480156105f457600080fd5b506103ff6106033660046130c5565b610ff6565b34801561061457600080fd5b50600a54600160a01b900460ff1661033f565b34801561063357600080fd5b506103966106423660046130c5565b611089565b6103ce6106553660046130f7565b611100565b34801561066657600080fd5b5061033f611219565b34801561067b57600080fd5b5061033f61068a366004612d7c565b60136020526000908152604090205460ff1681565b3480156106ab57600080fd5b506103ce6106ba366004612d7c565b611234565b3480156106cb57600080fd5b506103ff6106da366004612d7c565b611280565b3480156106eb57600080fd5b506103ce611307565b34801561070057600080fd5b50600d546105d59062010000900461ffff1681565b34801561072157600080fd5b50602e54610396906001600160a01b031681565b34801561074157600080fd5b506103ff610750366004612d7c565b60146020526000908152604090205481565b34801561076e57600080fd5b50600a546001600160a01b0316610396565b34801561078c57600080fd5b506107a061079b3660046130c5565b61133d565b60405161034b919061330d565b3480156107b957600080fd5b506103696113e4565b3480156107ce57600080fd5b506103ce6107dd366004612edf565b6113f3565b3480156107ee57600080fd5b506103ff600f5481565b34801561080457600080fd5b506103ce610813366004612e30565b6114b8565b34801561082457600080fd5b506103ff6714d1120d7b16000081565b34801561084057600080fd5b506103ff600c5481565b34801561085657600080fd5b50600f54421161033f565b34801561086d57600080fd5b506103ce61087c36600461311a565b6114f0565b34801561088d57600080fd5b5061036961089c3660046130c5565b611525565b3480156108ad57600080fd5b506103ce6108bc366004612d7c565b611624565b3480156108cd57600080fd5b506109436108dc3660046130c5565b60126020526000908152604090205460ff808216916101008104821691620100008204811691630100000081048216916401000000008204811691650100000000008104821691600160301b8204811691600160381b8104821691600160401b9091041689565b604080519915158a5260ff98891660208b01529688169689019690965293861660608801529185166080870152841660a0860152831660c0850152821660e0840152166101008201526101200161034b565b3480156109a157600080fd5b50602f54610396906001600160a01b031681565b3480156109c157600080fd5b506103ff600e5481565b3480156109d757600080fd5b5061033f6109e6366004612db6565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b348015610a2057600080fd5b506103ce610a2f366004612d7c565b611670565b348015610a4057600080fd5b50600d546105d590640100000000900461ffff1681565b348015610a6357600080fd5b506103ce610a72366004612f40565b611708565b348015610a8357600080fd5b506103ff600b5481565b60006001600160e01b0319821663780e9d6360e01b1480610ab25750610ab28261179a565b92915050565b606060008054610ac7906134c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610af3906134c6565b8015610b405780601f10610b1557610100808354040283529160200191610b40565b820191906000526020600020905b815481529060010190602001808311610b2357829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610bc85760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610bef82611089565b9050806001600160a01b0316836001600160a01b03161415610c5d5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610bbf565b336001600160a01b0382161480610c795750610c7981336109e6565b610ceb5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610bbf565b610cf583836117ea565b505050565b600a546001600160a01b03163314610d245760405162461bcd60e51b8152600401610bbf90613287565b8015610d3557610d32611858565b50565b610d326118fd565b602d546001600160a01b0316336001600160a01b031614610d7e57610d623382611981565b610d7e5760405162461bcd60e51b8152600401610bbf906132bc565b610cf5838383611a78565b6000600c548211610d9c57506000919050565b6005600b546002610dad9190613464565b610db79190613450565b8211610dce575069043c33c1937564800000919050565b6005600b546004610ddf9190613464565b610de99190613450565b8211610e005750690878678326eac9000000919050565b506910f0cf064dd592000000919050565b6000610e1c83611280565b8210610e7e5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610bbf565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b601582600c8110610eb757600080fd5b018181548110610ec657600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b600a546001600160a01b03163314610f175760405162461bcd60e51b8152600401610bbf90613287565b600c55565b602182600c8110610eb757600080fd5b600a546001600160a01b03163314610f565760405162461bcd60e51b8152600401610bbf90613287565b602d80546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b03163314610fa25760405162461bcd60e51b8152600401610bbf90613287565b600a546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610d32573d6000803e3d6000fd5b610cf5838383604051806020016040528060008152506114b8565b600061100160085490565b82106110645760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610bbf565b600882815481106110775761107761358e565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b031680610ab25760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610bbf565b600a54600160a01b900460ff161561114d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610bbf565b600b54600d5461116290849061ffff16613438565b11156111a45760405162461bcd60e51b8152602060048201526011602482015270105b1b081d1bdad95b9cc81b5a5b9d1959607a1b6044820152606401610bbf565b600082116111ea5760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b5a5b9d08185b5bdd5b9d606a1b6044820152606401610bbf565b6111f2611219565b15611205576112018282611c23565b5050565b600f54421115611201576112018282611e4f565b6000600e54421015801561122f5750600f544211155b905090565b600a546001600160a01b0316331461125e5760405162461bcd60e51b8152600401610bbf90613287565b602f80546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b0382166112eb5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610bbf565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146113315760405162461bcd60e51b8152600401610bbf90613287565b61133b6000611ff1565b565b611345612d1b565b50600090815260126020908152604091829020825161012081018452905460ff808216151583526101008083048216948401949094526201000082048116948301949094526301000000810484166060830152640100000000810484166080830152650100000000008104841660a0830152600160301b8104841660c0830152600160381b8104841660e0830152600160401b90049092169082015290565b606060018054610ac7906134c6565b6001600160a01b03821633141561144c5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610bbf565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6114c23383611981565b6114de5760405162461bcd60e51b8152600401610bbf906132bc565b6114ea84848484612043565b50505050565b600a546001600160a01b0316331461151a5760405162461bcd60e51b8152600401610bbf90613287565b600e91909155600f55565b6000818152600260205260409020546060906001600160a01b03166115a45760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610bbf565b602f5460405163c87b56dd60e01b8152600481018490526001600160a01b039091169063c87b56dd9060240160006040518083038186803b1580156115e857600080fd5b505afa1580156115fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ab2919081019061304e565b600a546001600160a01b0316331461164e5760405162461bcd60e51b8152600401610bbf90613287565b603080546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b0316331461169a5760405162461bcd60e51b8152600401610bbf90613287565b6001600160a01b0381166116ff5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bbf565b610d3281611ff1565b600a546001600160a01b031633146117325760405162461bcd60e51b8152600401610bbf90613287565b60005b8151811015611201576001601360008484815181106117565761175661358e565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806117928161351d565b915050611735565b60006001600160e01b031982166380ac58cd60e01b14806117cb57506001600160e01b03198216635b5e139f60e01b145b80610ab257506301ffc9a760e01b6001600160e01b0319831614610ab2565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061181f82611089565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600a54600160a01b900460ff16156118a55760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610bbf565b600a805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586118e03390565b6040516001600160a01b03909116815260200160405180910390a1565b600a54600160a01b900460ff1661194d5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610bbf565b600a805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336118e0565b6000818152600260205260408120546001600160a01b03166119fa5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610bbf565b6000611a0583611089565b9050806001600160a01b0316846001600160a01b03161480611a405750836001600160a01b0316611a3584610b4a565b6001600160a01b0316145b80611a7057506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611a8b82611089565b6001600160a01b031614611af35760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610bbf565b6001600160a01b038216611b555760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610bbf565b611b60838383612076565b611b6b6000826117ea565b6001600160a01b0383166000908152600360205260408120805460019290611b94908490613483565b90915550506001600160a01b0382166000908152600360205260408120805460019290611bc2908490613438565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600e544210158015611c375750600f544211155b611c4057600080fd5b323314611c7a5760405162461bcd60e51b81526020600482015260086024820152674f6e6c7920454f4160c01b6044820152606401610bbf565b3360009081526013602052604090205460ff16611cd95760405162461bcd60e51b815260206004820152601760248201527f596f7520617265206e6f742077686974656c69737465640000000000000000006044820152606401610bbf565b33600090815260146020526040902054600590611cf7908490613438565b1115611d455760405162461bcd60e51b815260206004820152601a60248201527f5768697465206c6973742063616e206f6e6c79206d696e7420350000000000006044820152606401610bbf565b600c54600d54611d5a90849061ffff16613438565b1115611da85760405162461bcd60e51b815260206004820152601f60248201527f416c6c20746f6b656e73206f6e2d73616c6520616c726561647920736f6c64006044820152606401610bbf565b34611dbb671158e460913d000084613464565b111580611ddb57506010546001600160a01b0316336001600160a01b0316145b611e205760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a59081c185e5b595b9d08185b5bdd5b9d60521b6044820152606401610bbf565b3360009081526014602052604081208054849290611e3f908490613438565b909155506112019050828261212e565b600f544211611e5d57600080fd5b323314611e975760405162461bcd60e51b81526020600482015260086024820152674f6e6c7920454f4160c01b6044820152606401610bbf565b600c54600d5461ffff161015611f8757600c54600d54611ebc90849061ffff16613438565b1115611f0a5760405162461bcd60e51b815260206004820152601f60248201527f416c6c20746f6b656e73206f6e2d73616c6520616c726561647920736f6c64006044820152606401610bbf565b34611f1d6714d1120d7b16000084613464565b111580611f3d57506010546001600160a01b0316336001600160a01b0316145b611f825760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a59081c185e5b595b9d08185b5bdd5b9d60521b6044820152606401610bbf565b611fe7565b3415611fe75760405162461bcd60e51b815260206004820152602960248201527f446f206e6f742073656e6420415641582c206d696e74696e6720697320776974604482015268682047454d206e6f7760b81b6064820152608401610bbf565b611201828261212e565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61204e848484611a78565b61205a84848484612446565b6114ea5760405162461bcd60e51b8152600401610bbf90613235565b6001600160a01b0383166120d1576120cc81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6120f4565b816001600160a01b0316836001600160a01b0316146120f4576120f48382612553565b6001600160a01b03821661210b57610cf5816125f0565b826001600160a01b0316826001600160a01b031614610cf557610cf5828261269f565b6000808261214a5760408051600081526020810190915261218e565b8367ffffffffffffffff811115612163576121636135a4565b60405190808252806020026020018201604052801561218c578160200160208202803683370190505b505b90506000805b8581101561234757600d805461ffff169060006121b0836134fb565b82546101009290920a61ffff818102199093169183160217909155600d546121d99250166126e3565b600d549092506121ed9061ffff16836127c0565b5060006121f9836128de565b905085158061221157506001600160a01b0381163314155b1561222d57600d5461222890829061ffff166129ab565b61227f565b602d54600d5461224a916001600160a01b03169061ffff166129ab565b600d54845161ffff909116908590849081106122685761226861358e565b602002602001019061ffff16908161ffff16815250505b600d5461ffff1660009081526012602052604090205460ff16156122dc576001600d60028282829054906101000a900461ffff166122bd9190613412565b92506101000a81548161ffff021916908361ffff160217905550612317565b6001600d60048282829054906101000a900461ffff166122fc9190613412565b92506101000a81548161ffff021916908361ffff1602179055505b600d546123279061ffff16610d89565b6123319086613438565b945050808061233f9061351d565b915050612194565b5082156123c157602e546001600160a01b0316639dc29fac336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101869052604401600060405180830381600087803b1580156123a857600080fd5b505af11580156123bc573d6000803e3d6000fd5b505050505b831561242a57602d546001600160a01b03166381d449c133846040518363ffffffff1660e01b81526004016123f79291906131c8565b600060405180830381600087803b15801561241157600080fd5b505af1158015612425573d6000803e3d6000fd5b505050505b60115461243f906001600160a01b03166129c5565b5050505050565b60006001600160a01b0384163b1561254857604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061248a90339089908890889060040161318b565b602060405180830381600087803b1580156124a457600080fd5b505af19250505080156124d4575060408051601f3d908101601f191682019092526124d191810190613031565b60015b61252e573d808015612502576040519150601f19603f3d011682016040523d82523d6000602084013e612507565b606091505b5080516125265760405162461bcd60e51b8152600401610bbf90613235565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611a70565b506001949350505050565b6000600161256084611280565b61256a9190613483565b6000838152600760205260409020549091508082146125bd576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061260290600190613483565b6000838152600960205260408120546008805493945090928490811061262a5761262a61358e565b90600052602060002001549050806008838154811061264b5761264b61358e565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061268357612683613578565b6001900381819060005260206000200160009055905550505050565b60006126aa83611280565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6030546040516305ad94c360e01b8152600481018390526000916001600160a01b0316906305ad94c390602401602060405180830381600087803b15801561272a57600080fd5b505af115801561273e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061276291906130de565b3361276e600143613483565b60405160609290921b6bffffffffffffffffffffffff191660208301524060348201524260548201526074810184905260940160408051601f1981840301815291905280516020909101201892915050565b6127c8612d1b565b6127d182612a13565b6000938452601260209081526040948590208251815492840151968401516060850151608086015160a087015160c088015160e0890151610100808b015161ffff19909a1697151561ff0019169790971760ff9d8e169097029690961763ffff0000191662010000958d169590950263ff0000001916949094176301000000938c16939093029290921765ffff000000001916640100000000918b169190910265ff000000000019161765010000000000918a16919091021767ffff0000000000001916600160301b9189169190910267ff00000000000000191617600160381b918816919091021768ff00000000000000001916600160401b9690921695909502179093555090919050565b600c54600d5460009161ffff9091161115806129075750612904600a60f584901c613538565b15155b156129125733610ab2565b602d54604051631aace9b760e01b8152609084901c60048201526000916001600160a01b031690631aace9b79060240160206040518083038186803b15801561295a57600080fd5b505afa15801561296e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129929190612d99565b90506001600160a01b038116610ab257335b9392505050565b611201828260405180602001604052806000815250612b11565b6001600160a01b03811647604051620186a091906000818181858888f193505050503d80600081146114ea576040519150601f19603f3d011682016040523d82523d6000602084013e6114ea565b612a1b612d1b565b81612a2b600a61ffff8316613538565b1580158352612a875760101c612a4661ffff82166000612b44565b60ff16602083015260101c612a6061ffff82166001612b44565b60ff16604083015260101c612a7a61ffff82166002612b44565b60ff166060830152612b0b565b60101c612a9961ffff82166003612b44565b60ff16608083015260101c612ab361ffff82166004612b44565b60ff1660a083015260101c612acd61ffff82166005612b44565b60ff1660c083015260101c612ae761ffff82166006612b44565b60ff1660e083015260101c612b0161ffff82166007612b44565b60ff166101008301525b50919050565b612b1b8383612bcd565b612b286000848484612446565b610cf55760405162461bcd60e51b8152600401610bbf90613235565b602f546040516353584b4960e11b815261ffff8416600482015260ff831660248201526000916001600160a01b03169063a6b096929060440160206040518083038186803b158015612b9557600080fd5b505afa158015612ba9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129a4919061313c565b6001600160a01b038216612c235760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610bbf565b6000818152600260205260409020546001600160a01b031615612c885760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610bbf565b612c9460008383612076565b6001600160a01b0382166000908152600360205260408120805460019290612cbd908490613438565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081019190915290565b80358015158114612d7757600080fd5b919050565b600060208284031215612d8e57600080fd5b81356129a4816135ba565b600060208284031215612dab57600080fd5b81516129a4816135ba565b60008060408385031215612dc957600080fd5b8235612dd4816135ba565b91506020830135612de4816135ba565b809150509250929050565b600080600060608486031215612e0457600080fd5b8335612e0f816135ba565b92506020840135612e1f816135ba565b929592945050506040919091013590565b60008060008060808587031215612e4657600080fd5b8435612e51816135ba565b93506020850135612e61816135ba565b925060408501359150606085013567ffffffffffffffff811115612e8457600080fd5b8501601f81018713612e9557600080fd5b8035612ea8612ea3826133ea565b6133b9565b818152886020838501011115612ebd57600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060408385031215612ef257600080fd5b8235612efd816135ba565b9150612f0b60208401612d67565b90509250929050565b60008060408385031215612f2757600080fd5b8235612f32816135ba565b946020939093013593505050565b60006020808385031215612f5357600080fd5b823567ffffffffffffffff80821115612f6b57600080fd5b818501915085601f830112612f7f57600080fd5b813581811115612f9157612f916135a4565b8060051b9150612fa28483016133b9565b8181528481019084860184860187018a1015612fbd57600080fd5b600095505b83861015612fec5780359450612fd7856135ba565b84835260019590950194918601918601612fc2565b5098975050505050505050565b60006020828403121561300b57600080fd5b6129a482612d67565b60006020828403121561302657600080fd5b81356129a4816135cf565b60006020828403121561304357600080fd5b81516129a4816135cf565b60006020828403121561306057600080fd5b815167ffffffffffffffff81111561307757600080fd5b8201601f8101841361308857600080fd5b8051613096612ea3826133ea565b8181528560208385010111156130ab57600080fd5b6130bc82602083016020860161349a565b95945050505050565b6000602082840312156130d757600080fd5b5035919050565b6000602082840312156130f057600080fd5b5051919050565b6000806040838503121561310a57600080fd5b82359150612f0b60208401612d67565b6000806040838503121561312d57600080fd5b50508035926020909101359150565b60006020828403121561314e57600080fd5b815160ff811681146129a457600080fd5b6000815180845261317781602086016020860161349a565b601f01601f19169290920160200192915050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906131be9083018461315f565b9695505050505050565b6001600160a01b038316815260406020808301829052835191830182905260009184820191906060850190845b8181101561321557845161ffff16835293830193918301916001016131f5565b5090979650505050505050565b6020815260006129a4602083018461315f565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60006101208201905082511515825260ff6020840151166020830152604083015161333d604084018260ff169052565b506060830151613352606084018260ff169052565b506080830151613367608084018260ff169052565b5060a083015161337c60a084018260ff169052565b5060c083015161339160c084018260ff169052565b5060e08301516133a660e084018260ff169052565b506101009283015160ff16919092015290565b604051601f8201601f1916810167ffffffffffffffff811182821017156133e2576133e26135a4565b604052919050565b600067ffffffffffffffff821115613404576134046135a4565b50601f01601f191660200190565b600061ffff80831681851680830382111561342f5761342f61354c565b01949350505050565b6000821982111561344b5761344b61354c565b500190565b60008261345f5761345f613562565b500490565b600081600019048311821515161561347e5761347e61354c565b500290565b6000828210156134955761349561354c565b500390565b60005b838110156134b557818101518382015260200161349d565b838111156114ea5750506000910152565b600181811c908216806134da57607f821691505b60208210811415612b0b57634e487b7160e01b600052602260045260246000fd5b600061ffff808316818114156135135761351361354c565b6001019392505050565b60006000198214156135315761353161354c565b5060010190565b60008261354757613547613562565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610d3257600080fd5b6001600160e01b031981168114610d3257600080fdfea26469706673582212204125e6c0a17715dbe6359588ecf337d95f3a5dc66f6afd249910f78055b14ecd64736f6c634300080700330000000000000000000000004d3ddeec55f148b3f8765a2abc00252834ed7e6200000000000000000000000026bff571a8f76001dd86309c29bd41b9c6fc313f000000000000000000000000000000000000000000000000000000000000c350
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004d3ddeec55f148b3f8765a2abc00252834ed7e6200000000000000000000000026bff571a8f76001dd86309c29bd41b9c6fc313f000000000000000000000000000000000000000000000000000000000000c350
-----Decoded View---------------
Arg [0] : _gem (address): 0x4d3ddeec55f148b3f8765a2abc00252834ed7e62
Arg [1] : _traits (address): 0x26bff571a8f76001dd86309c29bd41b9c6fc313f
Arg [2] : _maxTokens (uint256): 50000
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000004d3ddeec55f148b3f8765a2abc00252834ed7e62
Arg [1] : 00000000000000000000000026bff571a8f76001dd86309c29bd41b9c6fc313f
Arg [2] : 000000000000000000000000000000000000000000000000000000000000c350
Deployed ByteCode Sourcemap
265:13031:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23288:300:1;;;;;;;;;;-1:-1:-1;23288:300:1;;;;;:::i;:::-;;:::i;:::-;;;9598:14:11;;9591:22;9573:41;;9561:2;9546:18;23288:300:1;;;;;;;;9655:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11348:308::-;;;;;;;;;;-1:-1:-1;11348:308:1;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7872:32:11;;;7854:51;;7842:2;7827:18;11348:308:1;7708:203:11;10871:411:1;;;;;;;;;;-1:-1:-1;10871:411:1;;;;;:::i;:::-;;:::i;:::-;;1923:25:2;;;;;;;;;;-1:-1:-1;1923:25:2;;;;-1:-1:-1;;;;;1923:25:2;;;12256:99;;;;;;;;;;-1:-1:-1;12326:21:2;12256:99;;;24107:25:11;;;24095:2;24080:18;12256:99:2;23961:177:11;12851:118:2;;;;;;;;;;-1:-1:-1;12851:118:2;;;;;:::i;:::-;;:::i;24091:113:1:-;;;;;;;;;;-1:-1:-1;24179:10:1;:17;24091:113;;1749:17:2;;;;;;;;;;-1:-1:-1;1749:17:2;;;;-1:-1:-1;;;;;1749:17:2;;;7273:470;;;;;;;;;;-1:-1:-1;7273:470:2;;;;;:::i;:::-;;:::i;6984:281::-;;;;;;;;;;-1:-1:-1;6984:281:2;;;;;:::i;:::-;;:::i;23672:343:1:-;;;;;;;;;;-1:-1:-1;23672:343:1;;;;;:::i;:::-;;:::i;503:45:2:-;;;;;;;;;;;;538:10;503:45;;1480:27;;;;;;;;;;-1:-1:-1;1480:27:2;;;;;:::i;:::-;;:::i;:::-;;;24315:4:11;24303:17;;;24285:36;;24273:2;24258:18;1480:27:2;24143:184:11;12669:107:2;;;;;;;;;;-1:-1:-1;12669:107:2;;;;;:::i;:::-;;:::i;1649:26::-;;;;;;;;;;-1:-1:-1;1649:26:2;;;;;:::i;:::-;;:::i;11960:89::-;;;;;;;;;;-1:-1:-1;11960:89:2;;;;;:::i;:::-;;:::i;12491:106::-;;;;;;;;;;;;;:::i;11678:103::-;;;;;;;;;;-1:-1:-1;11762:11:2;;11678:103;;12854:185:1;;;;;;;;;;-1:-1:-1;12854:185:1;;;;;:::i;:::-;;:::i;813:20:2:-;;;;;;;;;;-1:-1:-1;813:20:2;;;;;;;;;;;23671:6:11;23659:19;;;23641:38;;23629:2;23614:18;813:20:2;23497:188:11;24281:320:1;;;;;;;;;;-1:-1:-1;24281:320:1;;;;;:::i;:::-;;:::i;1068:86:10:-;;;;;;;;;;-1:-1:-1;1139:7:10;;-1:-1:-1;;;1139:7:10;;;;1068:86;;9262:326:1;;;;;;;;;;-1:-1:-1;9262:326:1;;;;;:::i;:::-;;:::i;3687:356:2:-;;;;;;:::i;:::-;;:::i;3065:167::-;;;;;;;;;;;;;:::i;1235:41::-;;;;;;;;;;-1:-1:-1;1235:41:2;;;;;:::i;:::-;;;;;;;;;;;;;;;;2453:99;;;;;;;;;;-1:-1:-1;2453:99:2;;;;;:::i;:::-;;:::i;8905:295:1:-;;;;;;;;;;-1:-1:-1;8905:295:1;;;;;:::i;:::-;;:::i;1671:94:9:-;;;;;;;;;;;;;:::i;840:31:2:-;;;;;;;;;;-1:-1:-1;840:31:2;;;;;;;;;;;1819:15;;;;;;;;;;-1:-1:-1;1819:15:2;;;;-1:-1:-1;;;;;1819:15:2;;;1285:54;;;;;;;;;;-1:-1:-1;1285:54:2;;;;;:::i;:::-;;;;;;;;;;;;;;1020:87:9;;;;;;;;;;-1:-1:-1;1093:6:9;;-1:-1:-1;;;;;1093:6:9;1020:87;;11495:175:2;;;;;;;;;;-1:-1:-1;11495:175:2;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;9824:104:1:-;;;;;;;;;;;;;:::i;11728:327::-;;;;;;;;;;-1:-1:-1;11728:327:1;;;;;:::i;:::-;;:::i;965:27:2:-;;;;;;;;;;;;;;;;13110:365:1;;;;;;;;;;-1:-1:-1;13110:365:1;;;;;:::i;:::-;;:::i;414:46:2:-;;;;;;;;;;;;451:9;414:46;;731:26;;;;;;;;;;;;;;;;3240:103;;;;;;;;;;-1:-1:-1;3323:12:2;;3305:15;:30;3240:103;;2581:207;;;;;;;;;;-1:-1:-1;2581:207:2;;;;;:::i;:::-;;:::i;12998:295::-;;;;;;;;;;-1:-1:-1;12998:295:2;;;;;:::i;:::-;;:::i;12057:121::-;;;;;;;;;;-1:-1:-1;12057:121:2;;;;;:::i;:::-;;:::i;1163:45::-;;;;;;;;;;-1:-1:-1;1163:45:2;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1163:45:2;;;;;-1:-1:-1;;;1163:45:2;;;;;-1:-1:-1;;;1163:45:2;;;;;;;;;;9983:14:11;;9976:22;9958:41;;10018:4;10058:15;;;10053:2;10038:18;;10031:43;10110:15;;;10090:18;;;10083:43;;;;10162:15;;;10157:2;10142:18;;10135:43;10215:15;;;10209:3;10194:19;;10187:44;10268:15;;10262:3;10247:19;;10240:44;10321:15;;10315:3;10300:19;;10293:44;10374:15;;10368:3;10353:19;;10346:44;10427:15;10421:3;10406:19;;10399:44;9945:3;9930:19;1163:45:2;9625:824:11;1869:21:2;;;;;;;;;;-1:-1:-1;1869:21:2;;;;-1:-1:-1;;;;;1869:21:2;;;929:29;;;;;;;;;;;;;;;;12126:214:1;;;;;;;;;;-1:-1:-1;12126:214:1;;;;;:::i;:::-;-1:-1:-1;;;;;12297:25:1;;;12268:4;12297:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;12126:214;1920:229:9;;;;;;;;;;-1:-1:-1;1920:229:9;;;;;:::i;:::-;;:::i;878:27:2:-;;;;;;;;;;-1:-1:-1;878:27:2;;;;;;;;;;;3351:194;;;;;;;;;;-1:-1:-1;3351:194:2;;;;;:::i;:::-;;:::i;625:25::-;;;;;;;;;;;;;;;;23288:300:1;23435:4;-1:-1:-1;;;;;;23477:50:1;;-1:-1:-1;;;23477:50:1;;:103;;;23544:36;23568:11;23544:23;:36::i;:::-;23457:123;23288:300;-1:-1:-1;;23288:300:1:o;9655:100::-;9709:13;9742:5;9735:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9655:100;:::o;11348:308::-;11469:7;15111:16;;;:7;:16;;;;;;-1:-1:-1;;;;;15111:16:1;11494:110;;;;-1:-1:-1;;;11494:110:1;;18582:2:11;11494:110:1;;;18564:21:11;18621:2;18601:18;;;18594:30;18660:34;18640:18;;;18633:62;-1:-1:-1;;;18711:18:11;;;18704:42;18763:19;;11494:110:1;;;;;;;;;-1:-1:-1;11624:24:1;;;;:15;:24;;;;;;-1:-1:-1;;;;;11624:24:1;;11348:308::o;10871:411::-;10952:13;10968:23;10983:7;10968:14;:23::i;:::-;10952:39;;11016:5;-1:-1:-1;;;;;11010:11:1;:2;-1:-1:-1;;;;;11010:11:1;;;11002:57;;;;-1:-1:-1;;;11002:57:1;;20182:2:11;11002:57:1;;;20164:21:11;20221:2;20201:18;;;20194:30;20260:34;20240:18;;;20233:62;-1:-1:-1;;;20311:18:11;;;20304:31;20352:19;;11002:57:1;19980:397:11;11002:57:1;680:10:0;-1:-1:-1;;;;;11094:21:1;;;;:62;;-1:-1:-1;11119:37:1;11136:5;680:10:0;12126:214:1;:::i;11119:37::-;11072:168;;;;-1:-1:-1;;;11072:168:1;;16623:2:11;11072:168:1;;;16605:21:11;16662:2;16642:18;;;16635:30;16701:34;16681:18;;;16674:62;16772:26;16752:18;;;16745:54;16816:19;;11072:168:1;16421:420:11;11072:168:1;11253:21;11262:2;11266:7;11253:8;:21::i;:::-;10941:341;10871:411;;:::o;12851:118:2:-;1093:6:9;;-1:-1:-1;;;;;1093:6:9;680:10:0;1240:23:9;1232:68;;;;-1:-1:-1;;;1232:68:9;;;;;;;:::i;:::-;12918:7:2::1;12914:47;;;12927:8;:6;:8::i;:::-;12851:118:::0;:::o;12914:47::-:1;12951:10;:8;:10::i;7273:470::-:0;7524:4;;-1:-1:-1;;;;;7524:4:2;680:10:0;-1:-1:-1;;;;;7500:29:2;;7496:200;;7570:41;680:10:0;7603:7:2;7570:18;:41::i;:::-;7544:152;;;;-1:-1:-1;;;7544:152:2;;;;;;;:::i;:::-;7707:28;7717:4;7723:2;7727:7;7707:9;:28::i;6984:281::-;7040:7;7075:11;;7064:7;:22;7060:36;;-1:-1:-1;7095:1:2;;6984:281;-1:-1:-1;6984:281:2:o;7060:36::-;7141:1;7123:10;;7136:1;7123:14;;;;:::i;:::-;7122:20;;;;:::i;:::-;7111:7;:31;7107:55;;-1:-1:-1;7151:11:2;;6984:281;-1:-1:-1;6984:281:2:o;7107:55::-;7207:1;7189:10;;7202:1;7189:14;;;;:::i;:::-;7188:20;;;;:::i;:::-;7177:7;:31;7173:55;;-1:-1:-1;7217:11:2;;6984:281;-1:-1:-1;6984:281:2:o;7173:55::-;-1:-1:-1;7246:11:2;;6984:281;-1:-1:-1;6984:281:2:o;23672:343:1:-;23814:7;23869:23;23886:5;23869:16;:23::i;:::-;23861:5;:31;23839:124;;;;-1:-1:-1;;;23839:124:1;;12118:2:11;23839:124:1;;;12100:21:11;12157:2;12137:18;;;12130:30;12196:34;12176:18;;;12169:62;-1:-1:-1;;;12247:18:11;;;12240:41;12298:19;;23839:124:1;11916:407:11;23839:124:1;-1:-1:-1;;;;;;23981:19:1;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;23672:343::o;1480:27:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12669:107::-;1093:6:9;;-1:-1:-1;;;;;1093:6:9;680:10:0;1240:23:9;1232:68;;;;-1:-1:-1;;;1232:68:9;;;;;;;:::i;:::-;12743:11:2::1;:25:::0;12669:107::o;1649:26::-;;;;;;;;;;;11960:89;1093:6:9;;-1:-1:-1;;;;;1093:6:9;680:10:0;1240:23:9;1232:68;;;;-1:-1:-1;;;1232:68:9;;;;;;;:::i;:::-;12022:4:2::1;:19:::0;;-1:-1:-1;;;;;;12022:19:2::1;-1:-1:-1::0;;;;;12022:19:2;;;::::1;::::0;;;::::1;::::0;;11960:89::o;12491:106::-;1093:6:9;;-1:-1:-1;;;;;1093:6:9;680:10:0;1240:23:9;1232:68;;;;-1:-1:-1;;;1232:68:9;;;;;;;:::i;:::-;1093:6;;12541:48:2::1;::::0;-1:-1:-1;;;;;1093:6:9;;;;12567:21:2::1;12541:48:::0;::::1;;;::::0;::::1;::::0;;;12567:21;1093:6:9;12541:48:2;::::1;;;;;;;;;;;;;::::0;::::1;;;;12854:185:1::0;12992:39;13009:4;13015:2;13019:7;12992:39;;;;;;;;;;;;:16;:39::i;24281:320::-;24401:7;24456:30;24179:10;:17;;24091:113;24456:30;24448:5;:38;24426:132;;;;-1:-1:-1;;;24426:132:1;;21350:2:11;24426:132:1;;;21332:21:11;21389:2;21369:18;;;21362:30;21428:34;21408:18;;;21401:62;-1:-1:-1;;;21479:18:11;;;21472:42;21531:19;;24426:132:1;21148:408:11;24426:132:1;24576:10;24587:5;24576:17;;;;;;;;:::i;:::-;;;;;;;;;24569:24;;24281:320;;;:::o;9262:326::-;9379:7;9420:16;;;:7;:16;;;;;;-1:-1:-1;;;;;9420:16:1;9469:19;9447:110;;;;-1:-1:-1;;;9447:110:1;;17459:2:11;9447:110:1;;;17441:21:11;17498:2;17478:18;;;17471:30;17537:34;17517:18;;;17510:62;-1:-1:-1;;;17588:18:11;;;17581:39;17637:19;;9447:110:1;17257:405:11;3687:356:2;1139:7:10;;-1:-1:-1;;;1139:7:10;;;;1393:9;1385:38;;;;-1:-1:-1;;;1385:38:10;;16278:2:11;1385:38:10;;;16260:21:11;16317:2;16297:18;;;16290:30;-1:-1:-1;;;16336:18:11;;;16329:46;16392:18;;1385:38:10;16076:340:11;1385:38:10;3798:10:2::1;::::0;3779:6:::1;::::0;:15:::1;::::0;3788:6;;3779::::1;;:15;:::i;:::-;:29;;3771:59;;;::::0;-1:-1:-1;;;3771:59:2;;13356:2:11;3771:59:2::1;::::0;::::1;13338:21:11::0;13395:2;13375:18;;;13368:30;-1:-1:-1;;;13414:18:11;;;13407:47;13471:18;;3771:59:2::1;13154:341:11::0;3771:59:2::1;3858:1;3849:6;:10;3841:42;;;::::0;-1:-1:-1;;;3841:42:2;;21002:2:11;3841:42:2::1;::::0;::::1;20984:21:11::0;21041:2;21021:18;;;21014:30;-1:-1:-1;;;21060:18:11;;;21053:49;21119:18;;3841:42:2::1;20800:343:11::0;3841:42:2::1;3898:10;:8;:10::i;:::-;3894:142;;;3925:23;3934:6;3942:5;3925:8;:23::i;:::-;3687:356:::0;;:::o;3894:142::-:1;3323:12:::0;;3305:15;:30;3966:70:::1;;;3997:27;4010:6;4018:5;3997:12;:27::i;3065:167::-:0;3106:4;3162:14;;3143:15;:33;;:81;;;;;3212:12;;3193:15;:31;;3143:81;3123:101;;3065:167;:::o;2453:99::-;1093:6:9;;-1:-1:-1;;;;;1093:6:9;680:10:0;1240:23:9;1232:68;;;;-1:-1:-1;;;1232:68:9;;;;;;;:::i;:::-;2519:6:2::1;:25:::0;;-1:-1:-1;;;;;;2519:25:2::1;-1:-1:-1::0;;;;;2519:25:2;;;::::1;::::0;;;::::1;::::0;;2453:99::o;8905:295:1:-;9022:7;-1:-1:-1;;;;;9069:19:1;;9047:111;;;;-1:-1:-1;;;9047:111:1;;17048:2:11;9047:111:1;;;17030:21:11;17087:2;17067:18;;;17060:30;17126:34;17106:18;;;17099:62;-1:-1:-1;;;17177:18:11;;;17170:40;17227:19;;9047:111:1;16846:406:11;9047:111:1;-1:-1:-1;;;;;;9176:16:1;;;;;:9;:16;;;;;;;8905:295::o;1671:94:9:-;1093:6;;-1:-1:-1;;;;;1093:6:9;680:10:0;1240:23:9;1232:68;;;;-1:-1:-1;;;1232:68:9;;;;;;;:::i;:::-;1736:21:::1;1754:1;1736:9;:21::i;:::-;1671:94::o:0;11495:175:2:-;11604:13;;:::i;:::-;-1:-1:-1;11642:20:2;;;;:11;:20;;;;;;;;;11635:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11635:27:2;;;;;;;;-1:-1:-1;;;11635:27:2;;;;;;;;-1:-1:-1;;;11635:27:2;;;;;;;;;;11495:175::o;9824:104:1:-;9880:13;9913:7;9906:14;;;;;:::i;11728:327::-;-1:-1:-1;;;;;11863:24:1;;680:10:0;11863:24:1;;11855:62;;;;-1:-1:-1;;;11855:62:1;;15151:2:11;11855:62:1;;;15133:21:11;15190:2;15170:18;;;15163:30;15229:27;15209:18;;;15202:55;15274:18;;11855:62:1;14949:349:11;11855:62:1;680:10:0;11930:32:1;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;11930:42:1;;;;;;;;;;;;:53;;-1:-1:-1;;11930:53:1;;;;;;;;;;11999:48;;9573:41:11;;;11930:42:1;;680:10:0;11999:48:1;;9546:18:11;11999:48:1;;;;;;;11728:327;;:::o;13110:365::-;13299:41;680:10:0;13332:7:1;13299:18;:41::i;:::-;13277:140;;;;-1:-1:-1;;;13277:140:1;;;;;;;:::i;:::-;13428:39;13442:4;13448:2;13452:7;13461:5;13428:13;:39::i;:::-;13110:365;;;;:::o;2581:207:2:-;1093:6:9;;-1:-1:-1;;;;;1093:6:9;680:10:0;1240:23:9;1232:68;;;;-1:-1:-1;;;1232:68:9;;;;;;;:::i;:::-;2709:14:2::1;:32:::0;;;;2752:12:::1;:28:::0;2581:207::o;12998:295::-;15087:4:1;15111:16;;;:7;:16;;;;;;13099:13:2;;-1:-1:-1;;;;;15111:16:1;13130:113:2;;;;-1:-1:-1;;;13130:113:2;;19766:2:11;13130:113:2;;;19748:21:11;19805:2;19785:18;;;19778:30;19844:34;19824:18;;;19817:62;-1:-1:-1;;;19895:18:11;;;19888:45;19950:19;;13130:113:2;19564:411:11;13130:113:2;13261:6;;:24;;-1:-1:-1;;;13261:24:2;;;;;24107:25:11;;;-1:-1:-1;;;;;13261:6:2;;;;:15;;24080:18:11;;13261:24:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13261:24:2;;;;;;;;;;;;:::i;12057:121::-;1093:6:9;;-1:-1:-1;;;;;1093:6:9;680:10:0;1240:23:9;1232:68;;;;-1:-1:-1;;;1232:68:9;;;;;;;:::i;:::-;12135:12:2::1;:35:::0;;-1:-1:-1;;;;;;12135:35:2::1;-1:-1:-1::0;;;;;12135:35:2;;;::::1;::::0;;;::::1;::::0;;12057:121::o;1920:229:9:-;1093:6;;-1:-1:-1;;;;;1093:6:9;680:10:0;1240:23:9;1232:68;;;;-1:-1:-1;;;1232:68:9;;;;;;;:::i;:::-;-1:-1:-1;;;;;2023:22:9;::::1;2001:110;;;::::0;-1:-1:-1;;;2001:110:9;;12949:2:11;2001:110:9::1;::::0;::::1;12931:21:11::0;12988:2;12968:18;;;12961:30;13027:34;13007:18;;;13000:62;-1:-1:-1;;;13078:18:11;;;13071:36;13124:19;;2001:110:9::1;12747:402:11::0;2001:110:9::1;2122:19;2132:8;2122:9;:19::i;3351:194:2:-:0;1093:6:9;;-1:-1:-1;;;;;1093:6:9;680:10:0;1240:23:9;1232:68;;;;-1:-1:-1;;;1232:68:9;;;;;;;:::i;:::-;3437:9:2::1;3432:106;3456:10;:17;3452:1;:21;3432:106;;;3522:4;3495:9;:24;3505:10;3516:1;3505:13;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;3495:24:2::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;3495:24:2;:31;;-1:-1:-1;;3495:31:2::1;::::0;::::1;;::::0;;;::::1;::::0;;3475:3;::::1;::::0;::::1;:::i;:::-;;;;3432:106;;8486:355:1::0;8633:4;-1:-1:-1;;;;;;8675:40:1;;-1:-1:-1;;;8675:40:1;;:105;;-1:-1:-1;;;;;;;8732:48:1;;-1:-1:-1;;;8732:48:1;8675:105;:158;;;-1:-1:-1;;;;;;;;;;1721:40:1;;;8797:36;1562:207;19145:174;19220:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;19220:29:1;-1:-1:-1;;;;;19220:29:1;;;;;;;;:24;;19274:23;19220:24;19274:14;:23::i;:::-;-1:-1:-1;;;;;19265:46:1;;;;;;;;;;;19145:174;;:::o;1868:118:10:-;1139:7;;-1:-1:-1;;;1139:7:10;;;;1393:9;1385:38;;;;-1:-1:-1;;;1385:38:10;;16278:2:11;1385:38:10;;;16260:21:11;16317:2;16297:18;;;16290:30;-1:-1:-1;;;16336:18:11;;;16329:46;16392:18;;1385:38:10;16076:340:11;1385:38:10;1928:7:::1;:14:::0;;-1:-1:-1;;;;1928:14:10::1;-1:-1:-1::0;;;1928:14:10::1;::::0;;1958:20:::1;1965:12;680:10:0::0;;600:98;1965:12:10::1;1958:20;::::0;-1:-1:-1;;;;;7872:32:11;;;7854:51;;7842:2;7827:18;1958:20:10::1;;;;;;;1868:118::o:0;2127:120::-;1139:7;;-1:-1:-1;;;1139:7:10;;;;1663:41;;;;-1:-1:-1;;;1663:41:10;;11769:2:11;1663:41:10;;;11751:21:11;11808:2;11788:18;;;11781:30;-1:-1:-1;;;11827:18:11;;;11820:50;11887:18;;1663:41:10;11567:344:11;1663:41:10;2186:7:::1;:15:::0;;-1:-1:-1;;;;2186:15:10::1;::::0;;2217:22:::1;680:10:0::0;2226:12:10::1;600:98:0::0;15316:452:1;15445:4;15111:16;;;:7;:16;;;;;;-1:-1:-1;;;;;15111:16:1;15467:110;;;;-1:-1:-1;;;15467:110:1;;15505:2:11;15467:110:1;;;15487:21:11;15544:2;15524:18;;;15517:30;15583:34;15563:18;;;15556:62;-1:-1:-1;;;15634:18:11;;;15627:42;15686:19;;15467:110:1;15303:408:11;15467:110:1;15588:13;15604:23;15619:7;15604:14;:23::i;:::-;15588:39;;15657:5;-1:-1:-1;;;;;15646:16:1;:7;-1:-1:-1;;;;;15646:16:1;;:64;;;;15703:7;-1:-1:-1;;;;;15679:31:1;:20;15691:7;15679:11;:20::i;:::-;-1:-1:-1;;;;;15679:31:1;;15646:64;:113;;;-1:-1:-1;;;;;;12297:25:1;;;12268:4;12297:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;15727:32;15638:122;15316:452;-1:-1:-1;;;;15316:452:1:o;18412:615::-;18585:4;-1:-1:-1;;;;;18558:31:1;:23;18573:7;18558:14;:23::i;:::-;-1:-1:-1;;;;;18558:31:1;;18536:122;;;;-1:-1:-1;;;18536:122:1;;19356:2:11;18536:122:1;;;19338:21:11;19395:2;19375:18;;;19368:30;19434:34;19414:18;;;19407:62;-1:-1:-1;;;19485:18:11;;;19478:39;19534:19;;18536:122:1;19154:405:11;18536:122:1;-1:-1:-1;;;;;18677:16:1;;18669:65;;;;-1:-1:-1;;;18669:65:1;;14746:2:11;18669:65:1;;;14728:21:11;14785:2;14765:18;;;14758:30;14824:34;14804:18;;;14797:62;-1:-1:-1;;;14875:18:11;;;14868:34;14919:19;;18669:65:1;14544:400:11;18669:65:1;18747:39;18768:4;18774:2;18778:7;18747:20;:39::i;:::-;18851:29;18868:1;18872:7;18851:8;:29::i;:::-;-1:-1:-1;;;;;18893:15:1;;;;;;:9;:15;;;;;:20;;18912:1;;18893:15;:20;;18912:1;;18893:20;:::i;:::-;;;;-1:-1:-1;;;;;;;18924:13:1;;;;;;:9;:13;;;;;:18;;18941:1;;18924:13;:18;;18941:1;;18924:18;:::i;:::-;;;;-1:-1:-1;;18953:16:1;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;18953:21:1;-1:-1:-1;;;;;18953:21:1;;;;;;;;;18992:27;;18953:16;;18992:27;;;;;;;18412:615;;;:::o;4842:694:2:-;2873:14;;2854:15;:33;;:68;;;;;2910:12;;2891:15;:31;;2854:68;2832:101;;;;;;4929:9:::1;680:10:0::0;4929:25:2::1;4921:46;;;::::0;-1:-1:-1;;;4921:46:2;;14410:2:11;4921:46:2::1;::::0;::::1;14392:21:11::0;14449:1;14429:18;;;14422:29;-1:-1:-1;;;14467:18:11;;;14460:38;14515:18;;4921:46:2::1;14208:331:11::0;4921:46:2::1;680:10:0::0;4986:23:2::1;::::0;;;:9:::1;:23;::::0;;;;;::::1;;4978:59;;;::::0;-1:-1:-1;;;4978:59:2;;18230:2:11;4978:59:2::1;::::0;::::1;18212:21:11::0;18269:2;18249:18;;;18242:30;18308:25;18288:18;;;18281:53;18351:18;;4978:59:2::1;18028:347:11::0;4978:59:2::1;680:10:0::0;5070:33:2::1;::::0;;;:19:::1;:33;::::0;;;;;5116:1:::1;::::0;5070:42:::1;::::0;5106:6;;5070:42:::1;:::i;:::-;:47;;5048:123;;;::::0;-1:-1:-1;;;5048:123:2;;22173:2:11;5048:123:2::1;::::0;::::1;22155:21:11::0;22212:2;22192:18;;;22185:30;22251:28;22231:18;;;22224:56;22297:18;;5048:123:2::1;21971:350:11::0;5048:123:2::1;5223:11;::::0;5204:6:::1;::::0;:15:::1;::::0;5213:6;;5204::::1;;:15;:::i;:::-;:30;;5182:111;;;::::0;-1:-1:-1;;;5182:111:2;;15918:2:11;5182:111:2::1;::::0;::::1;15900:21:11::0;15957:2;15937:18;;;15930:30;15996:33;15976:18;;;15969:61;16047:18;;5182:111:2::1;15716:355:11::0;5182:111:2::1;5349:9;5328:17;538:10;5328:6:::0;:17:::1;:::i;:::-;:30;;:61;;;-1:-1:-1::0;5378:11:2::1;::::0;-1:-1:-1;;;;;5378:11:2::1;680:10:0::0;-1:-1:-1;;;;;5362:27:2::1;;5328:61;5306:133;;;::::0;-1:-1:-1;;;5306:133:2;;14059:2:11;5306:133:2::1;::::0;::::1;14041:21:11::0;14098:2;14078:18;;;14071:30;-1:-1:-1;;;14117:18:11;;;14110:52;14179:18;;5306:133:2::1;13857:346:11::0;5306:133:2::1;680:10:0::0;5450:33:2::1;::::0;;;:19:::1;:33;::::0;;;;:43;;5487:6;;5450:33;:43:::1;::::0;5487:6;;5450:43:::1;:::i;:::-;::::0;;;-1:-1:-1;5504:24:2::1;::::0;-1:-1:-1;5514:6:2;5522:5;5504:9:::1;:24::i;4083:718::-:0;3024:12;;3006:15;:30;2998:39;;;;;;4218:9:::1;680:10:0::0;4218:25:2::1;4210:46;;;::::0;-1:-1:-1;;;4210:46:2;;14410:2:11;4210:46:2::1;::::0;::::1;14392:21:11::0;14449:1;14429:18;;;14422:29;-1:-1:-1;;;14467:18:11;;;14460:38;14515:18;;4210:46:2::1;14208:331:11::0;4210:46:2::1;4280:11;::::0;4271:6:::1;::::0;::::1;;:20;4267:490;;;4353:11;::::0;4334:6:::1;::::0;:15:::1;::::0;4343:6;;4334::::1;;:15;:::i;:::-;:30;;4308:123;;;::::0;-1:-1:-1;;;4308:123:2;;15918:2:11;4308:123:2::1;::::0;::::1;15900:21:11::0;15957:2;15937:18;;;15930:30;15996:33;15976:18;;;15969:61;16047:18;;4308:123:2::1;15716:355:11::0;4308:123:2::1;4497:9;4474:19;451:9;4474:6:::0;:19:::1;:::i;:::-;:32;;:63;;;-1:-1:-1::0;4526:11:2::1;::::0;-1:-1:-1;;;;;4526:11:2::1;680:10:0::0;-1:-1:-1;;;;;4510:27:2::1;;4474:63;4448:147;;;::::0;-1:-1:-1;;;4448:147:2;;14059:2:11;4448:147:2::1;::::0;::::1;14041:21:11::0;14098:2;14078:18;;;14071:30;-1:-1:-1;;;14117:18:11;;;14110:52;14179:18;;4448:147:2::1;13857:346:11::0;4448:147:2::1;4267:490;;;4654:9;:14:::0;4628:117:::1;;;::::0;-1:-1:-1;;;4628:117:2;;21763:2:11;4628:117:2::1;::::0;::::1;21745:21:11::0;21802:2;21782:18;;;21775:30;21841:34;21821:18;;;21814:62;-1:-1:-1;;;21892:18:11;;;21885:39;21941:19;;4628:117:2::1;21561:405:11::0;4628:117:2::1;4769:24;4779:6;4787:5;4769:9;:24::i;2157:173:9:-:0;2232:6;;;-1:-1:-1;;;;;2249:17:9;;;-1:-1:-1;;;;;;2249:17:9;;;;;;;2282:40;;2232:6;;;2249:17;2232:6;;2282:40;;2213:16;;2282:40;2202:128;2157:173;:::o;14357:352:1:-;14514:28;14524:4;14530:2;14534:7;14514:9;:28::i;:::-;14575:48;14598:4;14604:2;14608:7;14617:5;14575:22;:48::i;:::-;14553:148;;;;-1:-1:-1;;;14553:148:1;;;;;;;:::i;25214:589::-;-1:-1:-1;;;;;25420:18:1;;25416:187;;25455:40;25487:7;26630:10;:17;;26603:24;;;;:15;:24;;;;;:44;;;26658:24;;;;;;;;;;;;26526:164;25455:40;25416:187;;;25525:2;-1:-1:-1;;;;;25517:10:1;:4;-1:-1:-1;;;;;25517:10:1;;25513:90;;25544:47;25577:4;25583:7;25544:32;:47::i;:::-;-1:-1:-1;;;;;25617:16:1;;25613:183;;25650:45;25687:7;25650:36;:45::i;25613:183::-;25723:4;-1:-1:-1;;;;;25717:10:1;:2;-1:-1:-1;;;;;25717:10:1;;25713:83;;25744:40;25772:2;25776:7;25744:27;:40::i;5544:1160:2:-;5610:20;5645:24;5672:5;:72;;5729:15;;;5742:1;5729:15;;;;;;;;5672:72;;;5706:6;5693:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5693:20:2;;5672:72;5645:99;-1:-1:-1;5755:12:2;;5778:675;5802:6;5798:1;:10;5778:675;;;5830:6;:8;;;;;:6;:8;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;5867:6;;5860:14;;-1:-1:-1;5867:6:2;5860;:14::i;:::-;5898:6;;5853:21;;-1:-1:-1;5889:22:2;;5898:6;;5853:21;5889:8;:22::i;:::-;;5926:17;5946:21;5962:4;5946:15;:21::i;:::-;5926:41;;5987:5;5986:6;:35;;;-1:-1:-1;;;;;;5996:25:2;;680:10:0;5996:25:2;;5986:35;5982:216;;;6063:6;;6042:28;;6052:9;;6063:6;;6042:9;:28::i;:::-;5982:216;;;6129:4;;6136:6;;6111:32;;-1:-1:-1;;;;;6129:4:2;;6136:6;;6111:9;:32::i;:::-;6176:6;;6162:11;;6176:6;;;;;6162:8;;6171:1;;6162:11;;;;;;:::i;:::-;;;;;;:20;;;;;;;;;;;5982:216;6228:6;;;;6216:19;;;;:11;:19;;;;;:32;;;6212:154;;;6290:1;6269:17;;:22;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6212:154;;;6349:1;6332:13;;:18;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6212:154;6405:6;;6396:16;;6405:6;;6396:8;:16::i;:::-;6380:32;;;;:::i;:::-;;;5815:638;5810:3;;;;;:::i;:::-;;;;5778:675;;;-1:-1:-1;6528:16:2;;6524:58;;6546:3;;-1:-1:-1;;;;;6546:3:2;:8;680:10:0;6546:36:2;;-1:-1:-1;;;;;;6546:36:2;;;;;;;-1:-1:-1;;;;;9346:32:11;;;6546:36:2;;;9328:51:11;9395:18;;;9388:34;;;9301:18;;6546:36:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6524:58;6597:5;6593:60;;;6604:4;;-1:-1:-1;;;;;6604:4:2;:25;680:10:0;6644:8:2;6604:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6593:60;6680:8;;6664:25;;-1:-1:-1;;;;;6680:8:2;6664:15;:25::i;:::-;5599:1105;;;5544:1160;;:::o;19884:980:1:-;20039:4;-1:-1:-1;;;;;20060:13:1;;1067:20:8;1115:8;20056:801:1;;20113:175;;-1:-1:-1;;;20113:175:1;;-1:-1:-1;;;;;20113:36:1;;;;;:175;;680:10:0;;20207:4:1;;20234:7;;20264:5;;20113:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20113:175:1;;;;;;;;-1:-1:-1;;20113:175:1;;;;;;;;;;;;:::i;:::-;;;20092:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20471:13:1;;20467:320;;20514:108;;-1:-1:-1;;;20514:108:1;;;;;;;:::i;20467:320::-;20737:6;20731:13;20722:6;20718:2;20714:15;20707:38;20092:710;-1:-1:-1;;;;;;20352:51:1;-1:-1:-1;;;20352:51:1;;-1:-1:-1;20345:58:1;;20056:801;-1:-1:-1;20841:4:1;19884:980;;;;;;:::o;27317:1002::-;27597:22;27647:1;27622:22;27639:4;27622:16;:22::i;:::-;:26;;;;:::i;:::-;27659:18;27680:26;;;:17;:26;;;;;;27597:51;;-1:-1:-1;27813:28:1;;;27809:328;;-1:-1:-1;;;;;27880:18:1;;27858:19;27880:18;;;:12;:18;;;;;;;;:34;;;;;;;;;27931:30;;;;;;:44;;;28048:30;;:17;:30;;;;;:43;;;27809:328;-1:-1:-1;28233:26:1;;;;:17;:26;;;;;;;;28226:33;;;-1:-1:-1;;;;;28277:18:1;;;;;:12;:18;;;;;:34;;;;;;;28270:41;27317:1002::o;28614:1079::-;28892:10;:17;28867:22;;28892:21;;28912:1;;28892:21;:::i;:::-;28924:18;28945:24;;;:15;:24;;;;;;29318:10;:26;;28867:46;;-1:-1:-1;28945:24:1;;28867:46;;29318:26;;;;;;:::i;:::-;;;;;;;;;29296:48;;29382:11;29357:10;29368;29357:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;29462:28;;;:15;:28;;;;;;;:41;;;29634:24;;;;;29627:31;29669:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;28685:1008;;;28614:1079;:::o;26104:221::-;26189:14;26206:20;26223:2;26206:16;:20::i;:::-;-1:-1:-1;;;;;26237:16:1;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;26282:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;26104:221:1:o;11042:426:2:-;11428:12;;:32;;-1:-1:-1;;;11428:32:2;;;;;24107:25:11;;;11090:7:2;;-1:-1:-1;;;;;11428:12:2;;:26;;24080:18:11;;11428:32:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11231:10;11278:16;11293:1;11278:12;:16;:::i;:::-;11188:203;;7301:2:11;7297:15;;;;-1:-1:-1;;7293:53:11;11188:203:2;;;7281:66:11;11268:27:2;7363:12:11;;;7356:28;11322:15:2;7400:12:11;;;7393:28;7437:12;;;7430:28;;;7474:13;;11188:203:2;;;-1:-1:-1;;11188:203:2;;;;;;;;;11156:254;;11188:203;11156:254;;;;11130:330;;11042:426;-1:-1:-1;;11042:426:2:o;8073:204::-;8158:15;;:::i;:::-;8195:18;8208:4;8195:12;:18::i;:::-;8224:20;;;;:11;:20;;;;;;;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8224:24:2;;;;;;-1:-1:-1;;8224:24:2;;;;;;;;;;;;;;;;-1:-1:-1;;8224:24:2;;;;;;;;;-1:-1:-1;;8224:24:2;;;;;;;;;;;;;;;;;-1:-1:-1;;8224:24:2;;;;;;;;;-1:-1:-1;;8224:24:2;;;;;;;;;;;-1:-1:-1;;8224:24:2;-1:-1:-1;;;8224:24:2;;;;;;;-1:-1:-1;;8224:24:2;;-1:-1:-1;;;8224:24:2;;;;;;;;-1:-1:-1;;8224:24:2;-1:-1:-1;;;8224:24:2;;;;;;;;;;;;-1:-1:-1;8224:24:2;;8073:204;-1:-1:-1;8073:204:2:o;9211:394::-;9307:11;;9297:6;;9273:7;;9297:6;;;;:21;;;:50;;-1:-1:-1;9323:18:2;9339:2;9332:3;9324:11;;;9323:18;:::i;:::-;9322:25;;9297:50;9293:88;;;680:10:0;9369:12:2;600:98:0;9293:88:2;9441:4;;:35;;-1:-1:-1;;;9441:35:2;;9472:3;9464:11;;;9441:35;;;24107:25:11;9425:13:2;;-1:-1:-1;;;;;9441:4:2;;:22;;24080:18:11;;9441:35:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9425:51;-1:-1:-1;;;;;;9532:21:2;;9528:46;;680:10:0;9562:12:2;9555:19;9211:394;-1:-1:-1;;;9211:394:2:o;16110:110:1:-;16186:26;16196:2;16200:7;16186:26;;;;;;;;;;;;:9;:26::i;12363:120:2:-;-1:-1:-1;;;;;12429:8:2;;12326:21;12429:46;;12464:6;;12429:46;;;;;;;12464:6;12429:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9836:973;9923:15;;:::i;:::-;9971:5;10004:20;10022:2;10012:6;10005:13;;10004:20;:::i;:::-;:25;;;9987:42;;10040:762;;10084:2;10075:11;10112:37;10138:6;10131:13;;10147:1;10112:11;:37::i;:::-;10101:48;;:8;;;:48;10173:2;10164:11;10199:37;10225:6;10218:13;;10234:1;10199:11;:37::i;:::-;10190:46;;:6;;;:46;10260:2;10251:11;10290:37;10316:6;10309:13;;10325:1;10290:11;:37::i;:::-;10277:50;;:10;;;:50;10040:762;;;10369:2;10360:11;10394:37;10420:6;10413:13;;10429:1;10394:11;:37::i;:::-;10386:45;;:5;;;:45;10455:2;10446:11;10484:37;10510:6;10503:13;;10519:1;10484:11;:37::i;:::-;10472:49;;:9;;;:49;10545:2;10536:11;10571:37;10597:6;10590:13;;10606:1;10571:11;:37::i;:::-;10562:46;;:6;;;:46;10632:2;10623:11;10660:37;10686:6;10679:13;;10695:1;10660:11;:37::i;:::-;10649:48;;:8;;;:48;10721:2;10712:11;10753:37;10779:6;10772:13;;10788:1;10753:11;:37::i;:::-;10738:52;;:12;;;:52;10040:762;9945:864;9836:973;;;:::o;16447:321:1:-;16577:18;16583:2;16587:7;16577:5;:18::i;:::-;16628:54;16659:1;16663:2;16667:7;16676:5;16628:22;:54::i;:::-;16606:154;;;;-1:-1:-1;;;16606:154:1;;;;;;;:::i;8710:174:2:-;8841:6;;:35;;-1:-1:-1;;;8841:35:2;;23888:6:11;23876:19;;8841:35:2;;;23858:38:11;23944:4;23932:17;;23912:18;;;23905:45;8811:5:2;;-1:-1:-1;;;;;8841:6:2;;:18;;23831::11;;8841:35:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17104:382:1:-;-1:-1:-1;;;;;17184:16:1;;17176:61;;;;-1:-1:-1;;;17176:61:1;;17869:2:11;17176:61:1;;;17851:21:11;;;17888:18;;;17881:30;17947:34;17927:18;;;17920:62;17999:18;;17176:61:1;17667:356:11;17176:61:1;15087:4;15111:16;;;:7;:16;;;;;;-1:-1:-1;;;;;15111:16:1;:30;17248:58;;;;-1:-1:-1;;;17248:58:1;;13702:2:11;17248:58:1;;;13684:21:11;13741:2;13721:18;;;13714:30;13780;13760:18;;;13753:58;13828:18;;17248:58:1;13500:352:11;17248:58:1;17319:45;17348:1;17352:2;17356:7;17319:20;:45::i;:::-;-1:-1:-1;;;;;17377:13:1;;;;;;:9;:13;;;;;:18;;17394:1;;17377:13;:18;;17394:1;;17377:18;:::i;:::-;;;;-1:-1:-1;;17406:16:1;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;17406:21:1;-1:-1:-1;;;;;17406:21:1;;;;;;;;17445:33;;17406:16;;;17445:33;;17406:16;;17445:33;17104:382;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:160:11:-;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;108:60;14:160;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:52;;;307:1;304;297:12;259:52;346:9;333:23;365:31;390:5;365:31;:::i;431:251::-;501:6;554:2;542:9;533:7;529:23;525:32;522:52;;;570:1;567;560:12;522:52;602:9;596:16;621:31;646:5;621:31;:::i;687:388::-;755:6;763;816:2;804:9;795:7;791:23;787:32;784:52;;;832:1;829;822:12;784:52;871:9;858:23;890:31;915:5;890:31;:::i;:::-;940:5;-1:-1:-1;997:2:11;982:18;;969:32;1010:33;969:32;1010:33;:::i;:::-;1062:7;1052:17;;;687:388;;;;;:::o;1080:456::-;1157:6;1165;1173;1226:2;1214:9;1205:7;1201:23;1197:32;1194:52;;;1242:1;1239;1232:12;1194:52;1281:9;1268:23;1300:31;1325:5;1300:31;:::i;:::-;1350:5;-1:-1:-1;1407:2:11;1392:18;;1379:32;1420:33;1379:32;1420:33;:::i;:::-;1080:456;;1472:7;;-1:-1:-1;;;1526:2:11;1511:18;;;;1498:32;;1080:456::o;1541:1016::-;1636:6;1644;1652;1660;1713:3;1701:9;1692:7;1688:23;1684:33;1681:53;;;1730:1;1727;1720:12;1681:53;1769:9;1756:23;1788:31;1813:5;1788:31;:::i;:::-;1838:5;-1:-1:-1;1895:2:11;1880:18;;1867:32;1908:33;1867:32;1908:33;:::i;:::-;1960:7;-1:-1:-1;2014:2:11;1999:18;;1986:32;;-1:-1:-1;2069:2:11;2054:18;;2041:32;2096:18;2085:30;;2082:50;;;2128:1;2125;2118:12;2082:50;2151:22;;2204:4;2196:13;;2192:27;-1:-1:-1;2182:55:11;;2233:1;2230;2223:12;2182:55;2269:2;2256:16;2294:48;2310:31;2338:2;2310:31;:::i;:::-;2294:48;:::i;:::-;2365:2;2358:5;2351:17;2405:7;2400:2;2395;2391;2387:11;2383:20;2380:33;2377:53;;;2426:1;2423;2416:12;2377:53;2481:2;2476;2472;2468:11;2463:2;2456:5;2452:14;2439:45;2525:1;2520:2;2515;2508:5;2504:14;2500:23;2493:34;2546:5;2536:15;;;;;1541:1016;;;;;;;:::o;2562:315::-;2627:6;2635;2688:2;2676:9;2667:7;2663:23;2659:32;2656:52;;;2704:1;2701;2694:12;2656:52;2743:9;2730:23;2762:31;2787:5;2762:31;:::i;:::-;2812:5;-1:-1:-1;2836:35:11;2867:2;2852:18;;2836:35;:::i;:::-;2826:45;;2562:315;;;;;:::o;2882:::-;2950:6;2958;3011:2;2999:9;2990:7;2986:23;2982:32;2979:52;;;3027:1;3024;3017:12;2979:52;3066:9;3053:23;3085:31;3110:5;3085:31;:::i;:::-;3135:5;3187:2;3172:18;;;;3159:32;;-1:-1:-1;;;2882:315:11:o;3202:1032::-;3286:6;3317:2;3360;3348:9;3339:7;3335:23;3331:32;3328:52;;;3376:1;3373;3366:12;3328:52;3416:9;3403:23;3445:18;3486:2;3478:6;3475:14;3472:34;;;3502:1;3499;3492:12;3472:34;3540:6;3529:9;3525:22;3515:32;;3585:7;3578:4;3574:2;3570:13;3566:27;3556:55;;3607:1;3604;3597:12;3556:55;3643:2;3630:16;3665:2;3661;3658:10;3655:36;;;3671:18;;:::i;:::-;3717:2;3714:1;3710:10;3700:20;;3740:28;3764:2;3760;3756:11;3740:28;:::i;:::-;3802:15;;;3833:12;;;;3865:11;;;3895;;;3891:20;;3888:33;-1:-1:-1;3885:53:11;;;3934:1;3931;3924:12;3885:53;3956:1;3947:10;;3966:238;3980:2;3977:1;3974:9;3966:238;;;4051:3;4038:17;4025:30;;4068:31;4093:5;4068:31;:::i;:::-;4112:18;;;3998:1;3991:9;;;;;4150:12;;;;4182;;3966:238;;;-1:-1:-1;4223:5:11;3202:1032;-1:-1:-1;;;;;;;;3202:1032:11:o;4239:180::-;4295:6;4348:2;4336:9;4327:7;4323:23;4319:32;4316:52;;;4364:1;4361;4354:12;4316:52;4387:26;4403:9;4387:26;:::i;4424:245::-;4482:6;4535:2;4523:9;4514:7;4510:23;4506:32;4503:52;;;4551:1;4548;4541:12;4503:52;4590:9;4577:23;4609:30;4633:5;4609:30;:::i;4674:249::-;4743:6;4796:2;4784:9;4775:7;4771:23;4767:32;4764:52;;;4812:1;4809;4802:12;4764:52;4844:9;4838:16;4863:30;4887:5;4863:30;:::i;4928:635::-;5008:6;5061:2;5049:9;5040:7;5036:23;5032:32;5029:52;;;5077:1;5074;5067:12;5029:52;5110:9;5104:16;5143:18;5135:6;5132:30;5129:50;;;5175:1;5172;5165:12;5129:50;5198:22;;5251:4;5243:13;;5239:27;-1:-1:-1;5229:55:11;;5280:1;5277;5270:12;5229:55;5309:2;5303:9;5334:48;5350:31;5378:2;5350:31;:::i;5334:48::-;5405:2;5398:5;5391:17;5445:7;5440:2;5435;5431;5427:11;5423:20;5420:33;5417:53;;;5466:1;5463;5456:12;5417:53;5479:54;5530:2;5525;5518:5;5514:14;5509:2;5505;5501:11;5479:54;:::i;:::-;5552:5;4928:635;-1:-1:-1;;;;;4928:635:11:o;5568:180::-;5627:6;5680:2;5668:9;5659:7;5655:23;5651:32;5648:52;;;5696:1;5693;5686:12;5648:52;-1:-1:-1;5719:23:11;;5568:180;-1:-1:-1;5568:180:11:o;5753:184::-;5823:6;5876:2;5864:9;5855:7;5851:23;5847:32;5844:52;;;5892:1;5889;5882:12;5844:52;-1:-1:-1;5915:16:11;;5753:184;-1:-1:-1;5753:184:11:o;5942:248::-;6007:6;6015;6068:2;6056:9;6047:7;6043:23;6039:32;6036:52;;;6084:1;6081;6074:12;6036:52;6120:9;6107:23;6097:33;;6149:35;6180:2;6169:9;6165:18;6149:35;:::i;6195:248::-;6263:6;6271;6324:2;6312:9;6303:7;6299:23;6295:32;6292:52;;;6340:1;6337;6330:12;6292:52;-1:-1:-1;;6363:23:11;;;6433:2;6418:18;;;6405:32;;-1:-1:-1;6195:248:11:o;6448:273::-;6516:6;6569:2;6557:9;6548:7;6544:23;6540:32;6537:52;;;6585:1;6582;6575:12;6537:52;6617:9;6611:16;6667:4;6660:5;6656:16;6649:5;6646:27;6636:55;;6687:1;6684;6677:12;6726:257;6767:3;6805:5;6799:12;6832:6;6827:3;6820:19;6848:63;6904:6;6897:4;6892:3;6888:14;6881:4;6874:5;6870:16;6848:63;:::i;:::-;6965:2;6944:15;-1:-1:-1;;6940:29:11;6931:39;;;;6972:4;6927:50;;6726:257;-1:-1:-1;;6726:257:11:o;7916:488::-;-1:-1:-1;;;;;8185:15:11;;;8167:34;;8237:15;;8232:2;8217:18;;8210:43;8284:2;8269:18;;8262:34;;;8332:3;8327:2;8312:18;;8305:31;;;8110:4;;8353:45;;8378:19;;8370:6;8353:45;:::i;:::-;8345:53;7916:488;-1:-1:-1;;;;;;7916:488:11:o;8409:740::-;-1:-1:-1;;;;;8655:32:11;;8637:51;;8625:2;8707;8725:18;;;8718:30;;;8797:13;;8610:18;;;8819:22;;;8577:4;;8898:15;;;;8707:2;8872;8857:18;;;8577:4;8941:182;8955:6;8952:1;8949:13;8941:182;;;9020:13;;9035:6;9016:26;9004:39;;9098:15;;;;9063:12;;;;8977:1;8970:9;8941:182;;;-1:-1:-1;9140:3:11;;8409:740;-1:-1:-1;;;;;;;8409:740:11:o;11343:219::-;11492:2;11481:9;11474:21;11455:4;11512:44;11552:2;11541:9;11537:18;11529:6;11512:44;:::i;12328:414::-;12530:2;12512:21;;;12569:2;12549:18;;;12542:30;12608:34;12603:2;12588:18;;12581:62;-1:-1:-1;;;12674:2:11;12659:18;;12652:48;12732:3;12717:19;;12328:414::o;18793:356::-;18995:2;18977:21;;;19014:18;;;19007:30;19073:34;19068:2;19053:18;;19046:62;19140:2;19125:18;;18793:356::o;20382:413::-;20584:2;20566:21;;;20623:2;20603:18;;;20596:30;20662:34;20657:2;20642:18;;20635:62;-1:-1:-1;;;20728:2:11;20713:18;;20706:47;20785:3;20770:19;;20382:413::o;22326:1166::-;22466:4;22508:3;22497:9;22493:19;22485:27;;22559:6;22553:13;22546:21;22539:29;22528:9;22521:48;22637:4;22629;22621:6;22617:17;22611:24;22607:35;22600:4;22589:9;22585:20;22578:65;22690:4;22682:6;22678:17;22672:24;22705:52;22751:4;22740:9;22736:20;22722:12;7055:4;7044:16;7032:29;;6988:75;22705:52;;22806:4;22798:6;22794:17;22788:24;22821:54;22869:4;22858:9;22854:20;22838:14;7055:4;7044:16;7032:29;;6988:75;22821:54;;22924:4;22916:6;22912:17;22906:24;22939:54;22987:4;22976:9;22972:20;22956:14;7055:4;7044:16;7032:29;;6988:75;22939:54;;23042:4;23034:6;23030:17;23024:24;23057:54;23105:4;23094:9;23090:20;23074:14;7055:4;7044:16;7032:29;;6988:75;23057:54;;23160:4;23152:6;23148:17;23142:24;23175:54;23223:4;23212:9;23208:20;23192:14;7055:4;7044:16;7032:29;;6988:75;23175:54;;23278:4;23270:6;23266:17;23260:24;23293:54;23341:4;23330:9;23326:20;23310:14;7055:4;7044:16;7032:29;;6988:75;23293:54;-1:-1:-1;23366:6:11;23409:15;;;23403:22;7055:4;7044:16;23467:18;;;;7032:29;22326:1166;:::o;24332:275::-;24403:2;24397:9;24468:2;24449:13;;-1:-1:-1;;24445:27:11;24433:40;;24503:18;24488:34;;24524:22;;;24485:62;24482:88;;;24550:18;;:::i;:::-;24586:2;24579:22;24332:275;;-1:-1:-1;24332:275:11:o;24612:186::-;24660:4;24693:18;24685:6;24682:30;24679:56;;;24715:18;;:::i;:::-;-1:-1:-1;24781:2:11;24760:15;-1:-1:-1;;24756:29:11;24787:4;24752:40;;24612:186::o;24803:224::-;24842:3;24870:6;24903:2;24900:1;24896:10;24933:2;24930:1;24926:10;24964:3;24960:2;24956:12;24951:3;24948:21;24945:47;;;24972:18;;:::i;:::-;25008:13;;24803:224;-1:-1:-1;;;;24803:224:11:o;25032:128::-;25072:3;25103:1;25099:6;25096:1;25093:13;25090:39;;;25109:18;;:::i;:::-;-1:-1:-1;25145:9:11;;25032:128::o;25165:120::-;25205:1;25231;25221:35;;25236:18;;:::i;:::-;-1:-1:-1;25270:9:11;;25165:120::o;25290:168::-;25330:7;25396:1;25392;25388:6;25384:14;25381:1;25378:21;25373:1;25366:9;25359:17;25355:45;25352:71;;;25403:18;;:::i;:::-;-1:-1:-1;25443:9:11;;25290:168::o;25463:125::-;25503:4;25531:1;25528;25525:8;25522:34;;;25536:18;;:::i;:::-;-1:-1:-1;25573:9:11;;25463:125::o;25593:258::-;25665:1;25675:113;25689:6;25686:1;25683:13;25675:113;;;25765:11;;;25759:18;25746:11;;;25739:39;25711:2;25704:10;25675:113;;;25806:6;25803:1;25800:13;25797:48;;;-1:-1:-1;;25841:1:11;25823:16;;25816:27;25593:258::o;25856:380::-;25935:1;25931:12;;;;25978;;;25999:61;;26053:4;26045:6;26041:17;26031:27;;25999:61;26106:2;26098:6;26095:14;26075:18;26072:38;26069:161;;;26152:10;26147:3;26143:20;26140:1;26133:31;26187:4;26184:1;26177:15;26215:4;26212:1;26205:15;26241:197;26279:3;26307:6;26348:2;26341:5;26337:14;26375:2;26366:7;26363:15;26360:41;;;26381:18;;:::i;:::-;26430:1;26417:15;;26241:197;-1:-1:-1;;;26241:197:11:o;26443:135::-;26482:3;-1:-1:-1;;26503:17:11;;26500:43;;;26523:18;;:::i;:::-;-1:-1:-1;26570:1:11;26559:13;;26443:135::o;26583:112::-;26615:1;26641;26631:35;;26646:18;;:::i;:::-;-1:-1:-1;26680:9:11;;26583:112::o;26700:127::-;26761:10;26756:3;26752:20;26749:1;26742:31;26792:4;26789:1;26782:15;26816:4;26813:1;26806:15;26832:127;26893:10;26888:3;26884:20;26881:1;26874:31;26924:4;26921:1;26914:15;26948:4;26945:1;26938:15;26964:127;27025:10;27020:3;27016:20;27013:1;27006:31;27056:4;27053:1;27046:15;27080:4;27077:1;27070:15;27096:127;27157:10;27152:3;27148:20;27145:1;27138:31;27188:4;27185:1;27178:15;27212:4;27209:1;27202:15;27228:127;27289:10;27284:3;27280:20;27277:1;27270:31;27320:4;27317:1;27310:15;27344:4;27341:1;27334:15;27360:131;-1:-1:-1;;;;;27435:31:11;;27425:42;;27415:70;;27481:1;27478;27471:12;27496:131;-1:-1:-1;;;;;;27570:32:11;;27560:43;;27550:71;;27617:1;27614;27607:12
Swarm Source
ipfs://4125e6c0a17715dbe6359588ecf337d95f3a5dc66f6afd249910f78055b14ecd
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.