Contract
0xaE2938DFfdEEC4082d391610eDb6333Fb031B421
1
Contract Overview
Balance:
0 AVAX
AVAX Value:
$0.00
[ Download CSV Export ]
Contract Name:
KingsGold
Compiler Version
v0.8.2+commit.661d1103
Contract Source Code (Solidity)
/** *Submitted for verification at snowtrace.io on 2022-03-26 */ // SPDX-License-Identifier: MIT // contract developed by xrpant // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, _allowances[owner][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = _allowances[owner][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Spend `amount` form the allowance of `owner` toward `spender`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens 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 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: cheese/kgold.sol pragma solidity 0.8.2; interface IMilk { function burn(address account, uint amount) external; function balanceOf(address owner) external view returns(uint); function checkFarmerLevel(address farmer) external view returns(uint); function increaseFarmerLevel(address farmer) external; } interface ICheese { function ownerOf(uint tokenID) external view returns (address); function burnCheese(uint tokenID) external; function walletOfOwner(address _owner) external view returns (uint256[] memory); function checkFromagerLevel(address fromager) external view returns(uint); function increaseFromagerLevel(address fromager) external; } interface IThief { function checkCatLevel(uint cat) external view returns(uint); function increaseCatLevel(uint cat) external; } interface ICat { function ownerOf(uint cat) external view returns (address catOwner); } contract KingsGold is ERC20, Ownable, ReentrancyGuard { address public MILK_CONTRACT = 0x7FEF4c1b027a0eC266C57DCd1E30d5E6CA044711; address public BURRATA_CONTRACT = 0xc8b11B6Ed6328F4a405D3923B90075DeEC16631A; address public DOLCE_CONTRACT = 0xcc2aECd665461ddaE6bd7C611A5F9e7E352910E0; address public PARM_CONTRACT = 0x922dB6eCD9ba5d04D770Db027F33E5e63A1e1926; address public THIEF_CONTRACT = 0x6d93DF876AB3aEE719dbC1c566E39Dc5Db5c5D35; address public CAT_CONTRACT = 0xeE18DBa45cb3ef6bd3211209eFE997C5cB314193; uint public MILK_RATIO = 6; uint public BURRATA_RATIO = 1; uint public DOLCE_RATIO = 1; uint public PARM_RATIO = 1; uint public MILK_GOLD = 500000000000000000; uint public BURRATA_GOLD = 1000000000000000000; uint public DOLCE_GOLD = 3000000000000000000; uint public PARM_GOLD = 10000000000000000000; uint public FARMER_LEVEL_GOLD = 1000000000000000000; uint public CAT_LEVEL_GOLD = 1000000000000000000; uint public BURRATA_LEVEL_GOLD = 1000000000000000000; uint public DOLCE_LEVEL_GOLD = 3000000000000000000; uint public PARM_LEVEL_GOLD = 5000000000000000000; uint public MAX_LEVEL = 50; mapping(address => bool) public cheesyAddresses; constructor() ERC20("King's Gold", "kGOLD"){} event BurnedMilk(address owner, uint cMilk); event BurnedBurrata(address owner, uint count); event BurnedDolcelatte(address owner, uint count); event BurnedParmesan(address owner, uint count); event BurnedKingsGold(address owner, uint count); function _mintKingsGold(address account, uint256 amount) internal { _mint(account, amount); } function cheesyMint(address account, uint256 amount) external { require(cheesyAddresses[msg.sender], "You aren't allowed to mint."); _mint(account, amount); } function exchangeMilk(uint amount) public nonReentrant { require(amount % MILK_RATIO == 0, "Invalid amount entered!"); burnMilk(msg.sender, amount); uint gold = (amount / MILK_RATIO) * MILK_GOLD; _mintKingsGold(msg.sender, gold); emit BurnedMilk(msg.sender, amount); } function burnMilk(address account, uint _amount) internal { IMilk m = IMilk(MILK_CONTRACT); require(m.balanceOf(account) >= (_amount * 10**18), "You don't have enough cMILK!"); m.burn(account,(_amount * 10**18)); } function exchangeBurrata(uint tokenID) public nonReentrant { ICheese c = ICheese(BURRATA_CONTRACT); require(c.ownerOf(tokenID) == msg.sender, "You don't own that Burrata!"); burnCheesy(BURRATA_CONTRACT, tokenID); uint gold = BURRATA_GOLD; _mintKingsGold(msg.sender, gold); emit BurnedBurrata(msg.sender, 1); } function exchangeAllBurrata() public nonReentrant { ICheese c = ICheese(BURRATA_CONTRACT); uint[] memory tokenIDs = c.walletOfOwner(msg.sender); require(tokenIDs.length > 0, "You don't have any Burrata!"); burnAllCheesy(BURRATA_CONTRACT, tokenIDs); uint gold = BURRATA_GOLD * tokenIDs.length; _mintKingsGold(msg.sender, gold); emit BurnedBurrata(msg.sender, tokenIDs.length); } function exchangeDolce(uint tokenID) public nonReentrant { ICheese c = ICheese(DOLCE_CONTRACT); require(c.ownerOf(tokenID) == msg.sender, "You don't own that Dolcelatte!"); burnCheesy(DOLCE_CONTRACT, tokenID); uint gold = DOLCE_GOLD; _mintKingsGold(msg.sender, gold); emit BurnedDolcelatte(msg.sender, 1); } function exchangeAllDolce() public nonReentrant { ICheese c = ICheese(DOLCE_CONTRACT); uint[] memory tokenIDs = c.walletOfOwner(msg.sender); require(tokenIDs.length > 0, "You don't have any Dolcelatte!"); burnAllCheesy(DOLCE_CONTRACT, tokenIDs); uint gold = DOLCE_GOLD * tokenIDs.length; _mintKingsGold(msg.sender, gold); emit BurnedDolcelatte(msg.sender, tokenIDs.length); } function exchangeParmesan(uint tokenID) public nonReentrant { ICheese c = ICheese(PARM_CONTRACT); require(c.ownerOf(tokenID) == msg.sender, "You don't own that Parmesan!"); burnCheesy(PARM_CONTRACT, tokenID); uint gold = PARM_GOLD; _mintKingsGold(msg.sender, gold); emit BurnedParmesan(msg.sender, 1); } function exchangeAllParmesan() public nonReentrant { ICheese c = ICheese(PARM_CONTRACT); uint[] memory tokenIDs = c.walletOfOwner(msg.sender); require(tokenIDs.length > 0, "You don't have any Parmesan!"); burnAllCheesy(PARM_CONTRACT, tokenIDs); uint gold = PARM_GOLD * tokenIDs.length; _mintKingsGold(msg.sender, gold); emit BurnedParmesan(msg.sender, tokenIDs.length); } function burnAllCheesy(address _contract, uint[] memory _tokenIDs) internal { ICheese c = ICheese(_contract); for (uint i = 0; i < _tokenIDs.length; i++) { c.burnCheese(_tokenIDs[i]); } } function burnCheesy(address _contract, uint _tokenID) internal { ICheese c = ICheese(_contract); c.burnCheese(_tokenID); } function boostFarmerLevel() external nonReentrant { IMilk m = IMilk(MILK_CONTRACT); require(m.checkFarmerLevel(msg.sender) < MAX_LEVEL, "Farmer already at max level!"); require(balanceOf(msg.sender) >= FARMER_LEVEL_GOLD, "You don't have enough kGOLD!"); burnKingsGold(msg.sender, FARMER_LEVEL_GOLD); m.increaseFarmerLevel(msg.sender); emit BurnedKingsGold(msg.sender, FARMER_LEVEL_GOLD); } function boostCatLevel(uint cat) external nonReentrant { IThief t = IThief(THIEF_CONTRACT); require(t.checkCatLevel(cat) < MAX_LEVEL, "Cat is already at max level!"); ICat c = ICat(CAT_CONTRACT); require(c.ownerOf(cat) == msg.sender, "You don't own that cat!"); require(balanceOf(msg.sender) >= CAT_LEVEL_GOLD, "You don't have enough kGOLD!"); burnKingsGold(msg.sender, CAT_LEVEL_GOLD); t.increaseCatLevel(cat); emit BurnedKingsGold(msg.sender, CAT_LEVEL_GOLD); } function boostBurrataLevel() external nonReentrant { ICheese c = ICheese(BURRATA_CONTRACT); require(c.checkFromagerLevel(msg.sender) < MAX_LEVEL, "Burrata already at max level!"); require(balanceOf(msg.sender) >= BURRATA_LEVEL_GOLD, "You don't have enough kGOLD!"); burnKingsGold(msg.sender, BURRATA_LEVEL_GOLD); c.increaseFromagerLevel(msg.sender); emit BurnedKingsGold(msg.sender, BURRATA_LEVEL_GOLD); } function boostDolcelatteLevel() external nonReentrant { ICheese c = ICheese(DOLCE_CONTRACT); require(c.checkFromagerLevel(msg.sender) < MAX_LEVEL, "Dolcelatte already at max level!"); require(balanceOf(msg.sender) >= DOLCE_LEVEL_GOLD, "You don't have enough kGOLD!"); burnKingsGold(msg.sender, DOLCE_LEVEL_GOLD); c.increaseFromagerLevel(msg.sender); emit BurnedKingsGold(msg.sender, DOLCE_LEVEL_GOLD); } function boostParmesanLevel() external nonReentrant { ICheese c = ICheese(PARM_CONTRACT); require(c.checkFromagerLevel(msg.sender) < MAX_LEVEL, "Parmesan already at max level!"); require(balanceOf(msg.sender) >= PARM_LEVEL_GOLD, "You don't have enough kGOLD!"); burnKingsGold(msg.sender, PARM_LEVEL_GOLD); c.increaseFromagerLevel(msg.sender); emit BurnedKingsGold(msg.sender, PARM_LEVEL_GOLD); } function burnKingsGold(address acc, uint amount) internal { _burn(acc, amount); } function burn(address acc, uint amount) external { require(cheesyAddresses[msg.sender], "Only cheesy addresses can burn!"); _burn(acc, amount); } // <AdminStuff> function updateRatios(uint _milk, uint _burr, uint _dolce, uint _parm) external onlyOwner { MILK_RATIO = _milk; BURRATA_RATIO = _burr; DOLCE_RATIO = _dolce; PARM_RATIO = _parm; } function updateMilkGold(uint _newValue) external onlyOwner { MILK_GOLD = _newValue; } function updateBurrataGold(uint _newValue) external onlyOwner { BURRATA_GOLD = _newValue; } function updateDolceGold(uint _newValue) external onlyOwner { DOLCE_GOLD = _newValue; } function updateParmGold(uint _newValue) external onlyOwner { PARM_GOLD = _newValue; } function updateFarmerLevelGold(uint _newValue) external onlyOwner { FARMER_LEVEL_GOLD = _newValue; } function updateCatLevelGold(uint _newValue) external onlyOwner { CAT_LEVEL_GOLD = _newValue; } function updateBurrataLevelGold(uint _newValue) external onlyOwner { BURRATA_LEVEL_GOLD = _newValue; } function updateDolceLevelGold(uint _newValue) external onlyOwner { DOLCE_LEVEL_GOLD = _newValue; } function updateParmLevelGold(uint _newValue) external onlyOwner { PARM_LEVEL_GOLD = _newValue; } function updateMaxLevel(uint _newValue) external onlyOwner { MAX_LEVEL = _newValue; } function airdropKingsGold(address account, uint amount) external onlyOwner { _mintKingsGold(account, amount); } function airdropManyKingsGold(address[] memory accounts, uint[] memory amounts) external onlyOwner { require(accounts.length == amounts.length, "Mismatching array lengths!"); for (uint i = 0; i < accounts.length; i++) { _mintKingsGold(accounts[i], amounts[i]); } } function addCheesyAddress(address account) external onlyOwner { cheesyAddresses[account] = true; } function setMilkAddress(address _milkAddr) public onlyOwner { MILK_CONTRACT = _milkAddr; } function updateCatAddress(address cat) external onlyOwner { CAT_CONTRACT = cat; } function updateThiefAddress(address thief) external onlyOwner { THIEF_CONTRACT = thief; } function updateBurrataAddress(address burr) external onlyOwner { BURRATA_CONTRACT = burr; } function updateDolceAddress(address dolce) external onlyOwner { DOLCE_CONTRACT = dolce; } function updateParmAddress(address parm) external onlyOwner { PARM_CONTRACT = parm; } }
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"count","type":"uint256"}],"name":"BurnedBurrata","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"count","type":"uint256"}],"name":"BurnedDolcelatte","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"count","type":"uint256"}],"name":"BurnedKingsGold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"cMilk","type":"uint256"}],"name":"BurnedMilk","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"count","type":"uint256"}],"name":"BurnedParmesan","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BURRATA_CONTRACT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BURRATA_GOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BURRATA_LEVEL_GOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BURRATA_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CAT_CONTRACT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CAT_LEVEL_GOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOLCE_CONTRACT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOLCE_GOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOLCE_LEVEL_GOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOLCE_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FARMER_LEVEL_GOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_LEVEL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MILK_CONTRACT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MILK_GOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MILK_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PARM_CONTRACT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PARM_GOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PARM_LEVEL_GOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PARM_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"THIEF_CONTRACT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addCheesyAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdropKingsGold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropManyKingsGold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"boostBurrataLevel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cat","type":"uint256"}],"name":"boostCatLevel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"boostDolcelatteLevel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"boostFarmerLevel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"boostParmesanLevel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"acc","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"cheesyAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"cheesyMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exchangeAllBurrata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exchangeAllDolce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exchangeAllParmesan","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"exchangeBurrata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"exchangeDolce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"exchangeMilk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"exchangeParmesan","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_milkAddr","type":"address"}],"name":"setMilkAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"burr","type":"address"}],"name":"updateBurrataAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newValue","type":"uint256"}],"name":"updateBurrataGold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newValue","type":"uint256"}],"name":"updateBurrataLevelGold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cat","type":"address"}],"name":"updateCatAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newValue","type":"uint256"}],"name":"updateCatLevelGold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dolce","type":"address"}],"name":"updateDolceAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newValue","type":"uint256"}],"name":"updateDolceGold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newValue","type":"uint256"}],"name":"updateDolceLevelGold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newValue","type":"uint256"}],"name":"updateFarmerLevelGold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newValue","type":"uint256"}],"name":"updateMaxLevel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newValue","type":"uint256"}],"name":"updateMilkGold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"parm","type":"address"}],"name":"updateParmAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newValue","type":"uint256"}],"name":"updateParmGold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newValue","type":"uint256"}],"name":"updateParmLevelGold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_milk","type":"uint256"},{"internalType":"uint256","name":"_burr","type":"uint256"},{"internalType":"uint256","name":"_dolce","type":"uint256"},{"internalType":"uint256","name":"_parm","type":"uint256"}],"name":"updateRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"thief","type":"address"}],"name":"updateThiefAddress","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600780546001600160a01b0319908116737fef4c1b027a0ec266c57dcd1e30d5e6ca0447111790915560088054821673c8b11b6ed6328f4a405d3923b90075deec16631a17905560098054821673cc2aecd665461ddae6bd7c611a5f9e7e352910e0179055600a8054821673922db6ecd9ba5d04d770db027f33e5e63a1e1926179055600b80548216736d93df876ab3aee719dbc1c566e39dc5db5c5d35179055600c805490911673ee18dba45cb3ef6bd3211209efe997c5cb3141931790556006600d556001600e819055600f8190556010556706f05b59d3b20000601155670de0b6b3a764000060128190556729a2241af62c00006013819055678ac7230489e8000060145560158290556016829055601791909155601855674563918244f400006019556032601a553480156200013d57600080fd5b50604080518082018252600b81526a12da5b99c9dcc811dbdb1960aa1b6020808301918252835180850190945260058452641ad1d3d31160da1b9084015281519192916200018e9160039162000222565b508051620001a490600490602084019062000222565b505050620001c1620001bb620001cc60201b60201c565b620001d0565b600160065562000305565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200023090620002c8565b90600052602060002090601f0160209004810192826200025457600085556200029f565b82601f106200026f57805160ff19168380011785556200029f565b828001600101855582156200029f579182015b828111156200029f57825182559160200191906001019062000282565b50620002ad929150620002b1565b5090565b5b80821115620002ad5760008155600101620002b2565b600281046001821680620002dd57607f821691505b60208210811415620002ff57634e487b7160e01b600052602260045260246000fd5b50919050565b6131ef80620003156000396000f3fe608060405234801561001057600080fd5b50600436106104075760003560e01c80638da5cb5b11610220578063b898045c11610130578063e387308d116100b8578063f1a7916f11610087578063f1a7916f14610875578063f2fde38b14610888578063f33bf4ca1461089b578063f474cbe7146108a4578063f5e5a794146108ad57610407565b8063e387308d14610833578063e3f2875514610846578063e657668814610859578063f19ec6a31461086257610407565b8063c81eb387116100ff578063c81eb387146107b9578063d263e38a146107cc578063dcba8abf146107df578063dd0b2ff4146107e7578063dd62ed3e146107fa57610407565b8063b898045c14610777578063ba73dc171461078a578063c07889631461079d578063c22737fd146107a657610407565b80639dc29fac116101b3578063a667a62a11610182578063a667a62a14610738578063a9059cbb1461074b578063ad74ff611461075e578063af1e951b14610766578063b349bfe81461076e57610407565b80639dc29fac146106f6578063a457c2d714610709578063a49062d41461071c578063a5e421f01461072557610407565b80638e95fb49116101ef5780638e95fb49146106b557806395d89b41146106c8578063973f9b5c146106d05780639bdc15f4146106e357610407565b80638da5cb5b146106755780638df660ac146106865780638e3b677a146106995780638e424fb0146106ac57610407565b80632c57d1231161031b578063605d18a0116102ae5780636fa90f8d1161027d5780636fa90f8d1461062957806370a0823114610632578063715018a61461065b57806373fec383146106635780637a3f26251461066c57610407565b8063605d18a0146105d757806361af9abe146105e057806362acd698146105f35780636c0305b01461060657610407565b806339509351116102ea57806339509351146105955780633bf5f87c146105a857806349a24fe8146105bb57806359b75ca2146105ce57610407565b80632c57d123146105585780632e8b7bc71461056b578063313ce5671461057357806336c94f241461058257610407565b80631bda88e51161039e57806323b872dd1161036d57806323b872dd146105035780632575afe614610516578063264f215314610529578063269a4c3e1461053c578063273ddf351461054f57610407565b80631bda88e5146104cd5780631c1a1a17146104d55780631f9a4023146104e8578063230e386a146104f057610407565b80630b2bfd35116103da5780630b2bfd351461047557806314e2098114610488578063167ea58c146104b357806318160ddd146104bb57610407565b806304ec77241461040c57806306fdde0314610421578063095ea7b31461043f5780630a585f4b14610462575b600080fd5b61041f61041a366004612eb1565b6108b6565b005b610429610b55565b6040516104369190612f2b565b60405180910390f35b61045261044d366004612d36565b610be7565b6040519015158152602001610436565b61041f610470366004612c7f565b610bff565b61041f610483366004612eb1565b610c4b565b600a5461049b906001600160a01b031681565b6040516001600160a01b039091168152602001610436565b61041f610c7a565b6002545b604051908152602001610436565b61041f610ddd565b60075461049b906001600160a01b031681565b61041f610f40565b600c5461049b906001600160a01b031681565b610452610511366004612cf6565b6110a3565b61041f610524366004612c7f565b6110c7565b61041f610537366004612eb1565b611113565b61041f61054a366004612eb1565b611266565b6104bf600d5481565b61041f610566366004612eb1565b611295565b61041f6112c4565b60405160128152602001610436565b61041f610590366004612eb1565b611480565b6104526105a3366004612d36565b6115d3565b61041f6105b6366004612eb1565b611612565b61041f6105c9366004612eb1565b611765565b6104bf60195481565b6104bf60165481565b61041f6105ee366004612c7f565b61185c565b61041f610601366004612d36565b6118aa565b610452610614366004612c7f565b601b6020526000908152604090205460ff1681565b6104bf60175481565b6104bf610640366004612c7f565b6001600160a01b031660009081526020819052604090205490565b61041f6118e2565b6104bf60105481565b6104bf60125481565b6005546001600160a01b031661049b565b61041f610694366004612eb1565b611918565b61041f6106a7366004612c7f565b611947565b6104bf60185481565b61041f6106c3366004612d36565b611993565b6104296119fc565b61041f6106de366004612d61565b611a0b565b61041f6106f1366004612ee1565b611b01565b61041f610704366004612d36565b611b3f565b610452610717366004612d36565b611ba8565b6104bf601a5481565b61041f610733366004612c7f565b611c3a565b61041f610746366004612eb1565b611c86565b610452610759366004612d36565b611cb5565b61041f611cc3565b61041f611e6e565b6104bf600e5481565b60085461049b906001600160a01b031681565b60095461049b906001600160a01b031681565b6104bf60155481565b600b5461049b906001600160a01b031681565b61041f6107c7366004612eb1565b612019565b61041f6107da366004612c7f565b612048565b61041f612094565b61041f6107f5366004612eb1565b61223f565b6104bf610808366004612cbe565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61041f610841366004612eb1565b61226e565b61041f610854366004612eb1565b61229d565b6104bf600f5481565b61041f610870366004612eb1565b6122cc565b61041f610883366004612c7f565b6122fb565b61041f610896366004612c7f565b612347565b6104bf60145481565b6104bf60135481565b6104bf60115481565b600260065414156108e25760405162461bcd60e51b81526004016108d990612fea565b60405180910390fd5b6002600655600b54601a5460405163f442867160e01b8152600481018490526001600160a01b0390921691829063f44286719060240160206040518083038186803b15801561093057600080fd5b505afa158015610944573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109689190612ec9565b106109b55760405162461bcd60e51b815260206004820152601c60248201527f43617420697320616c7265616479206174206d6178206c6576656c210000000060448201526064016108d9565b600c546040516331a9108f60e11b8152600481018490526001600160a01b039091169033908290636352211e9060240160206040518083038186803b1580156109fd57600080fd5b505afa158015610a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a359190612ca2565b6001600160a01b031614610a8b5760405162461bcd60e51b815260206004820152601760248201527f596f7520646f6e2774206f776e2074686174206361742100000000000000000060448201526064016108d9565b601654336000908152602081905260409020541015610abc5760405162461bcd60e51b81526004016108d990612fb3565b610ac833601654611b9e565b604051632c9049d160e11b8152600481018490526001600160a01b0383169063592093a290602401600060405180830381600087803b158015610b0a57600080fd5b505af1158015610b1e573d6000803e3d6000fd5b5050505060008051602061319a83398151915233601654604051610b43929190612f12565b60405180910390a15050600160065550565b606060038054610b64906130d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610b90906130d8565b8015610bdd5780601f10610bb257610100808354040283529160200191610bdd565b820191906000526020600020905b815481529060010190602001808311610bc057829003601f168201915b5050505050905090565b600033610bf58185856123e2565b5060019392505050565b6005546001600160a01b03163314610c295760405162461bcd60e51b81526004016108d990612f7e565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610c755760405162461bcd60e51b81526004016108d990612f7e565b601455565b60026006541415610c9d5760405162461bcd60e51b81526004016108d990612fea565b6002600655600a5460405162438b6360e81b81523360048201526001600160a01b0390911690600090829063438b63009060240160006040518083038186803b158015610ce957600080fd5b505afa158015610cfd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d259190810190612e21565b90506000815111610d785760405162461bcd60e51b815260206004820152601c60248201527f596f7520646f6e2774206861766520616e79205061726d6573616e210000000060448201526064016108d9565b600a54610d8e906001600160a01b031682612506565b60008151601454610d9f91906130a2565b9050610dab33826119f2565b7f7f15b4dabeda11611db299f55be741657797cf7de0ba7d6021e8cdd5b312d264338351604051610b43929190612f12565b60026006541415610e005760405162461bcd60e51b81526004016108d990612fea565b600260065560095460405162438b6360e81b81523360048201526001600160a01b0390911690600090829063438b63009060240160006040518083038186803b158015610e4c57600080fd5b505afa158015610e60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e889190810190612e21565b90506000815111610edb5760405162461bcd60e51b815260206004820152601e60248201527f596f7520646f6e2774206861766520616e7920446f6c63656c6174746521000060448201526064016108d9565b600954610ef1906001600160a01b031682612506565b60008151601354610f0291906130a2565b9050610f0e33826119f2565b7f66ec8eb6cc1b578dda79e64fcc5294e0b2cd921ee1f157b09925b99b6e90a27a338351604051610b43929190612f12565b60026006541415610f635760405162461bcd60e51b81526004016108d990612fea565b600260065560085460405162438b6360e81b81523360048201526001600160a01b0390911690600090829063438b63009060240160006040518083038186803b158015610faf57600080fd5b505afa158015610fc3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610feb9190810190612e21565b9050600081511161103e5760405162461bcd60e51b815260206004820152601b60248201527f596f7520646f6e2774206861766520616e79204275727261746121000000000060448201526064016108d9565b600854611054906001600160a01b031682612506565b6000815160125461106591906130a2565b905061107133826119f2565b7fd7f62ac3065431510ac651b9f5080d806455ab78bf18671ed6ff758271f056f4338351604051610b43929190612f12565b6000336110b18582856125b3565b6110bc85858561263f565b506001949350505050565b6005546001600160a01b031633146110f15760405162461bcd60e51b81526004016108d990612f7e565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b600260065414156111365760405162461bcd60e51b81526004016108d990612fea565b6002600655600a546040516331a9108f60e11b8152600481018390526001600160a01b039091169033908290636352211e9060240160206040518083038186803b15801561118357600080fd5b505afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb9190612ca2565b6001600160a01b0316146112115760405162461bcd60e51b815260206004820152601c60248201527f596f7520646f6e2774206f776e2074686174205061726d6573616e210000000060448201526064016108d9565b600a54611227906001600160a01b03168361280d565b60145461123433826119f2565b7f7f15b4dabeda11611db299f55be741657797cf7de0ba7d6021e8cdd5b312d264336001604051610b43929190612f12565b6005546001600160a01b031633146112905760405162461bcd60e51b81526004016108d990612f7e565b601355565b6005546001600160a01b031633146112bf5760405162461bcd60e51b81526004016108d990612f7e565b601a55565b600260065414156112e75760405162461bcd60e51b81526004016108d990612fea565b6002600655600754601a5460405163035c908960e41b81523360048201526001600160a01b039092169182906335c908909060240160206040518083038186803b15801561133457600080fd5b505afa158015611348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136c9190612ec9565b106113b95760405162461bcd60e51b815260206004820152601c60248201527f4661726d657220616c7265616479206174206d6178206c6576656c210000000060448201526064016108d9565b6015543360009081526020819052604090205410156113ea5760405162461bcd60e51b81526004016108d990612fb3565b6113f633601554611b9e565b604051638c0c100760e01b81523360048201526001600160a01b03821690638c0c100790602401600060405180830381600087803b15801561143757600080fd5b505af115801561144b573d6000803e3d6000fd5b5050505060008051602061319a83398151915233601554604051611470929190612f12565b60405180910390a1506001600655565b600260065414156114a35760405162461bcd60e51b81526004016108d990612fea565b60026006556009546040516331a9108f60e11b8152600481018390526001600160a01b039091169033908290636352211e9060240160206040518083038186803b1580156114f057600080fd5b505afa158015611504573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115289190612ca2565b6001600160a01b03161461157e5760405162461bcd60e51b815260206004820152601e60248201527f596f7520646f6e2774206f776e207468617420446f6c63656c6174746521000060448201526064016108d9565b600954611594906001600160a01b03168361280d565b6013546115a133826119f2565b7f66ec8eb6cc1b578dda79e64fcc5294e0b2cd921ee1f157b09925b99b6e90a27a336001604051610b43929190612f12565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610bf5908290869061160d908790613076565b6123e2565b600260065414156116355760405162461bcd60e51b81526004016108d990612fea565b60026006556008546040516331a9108f60e11b8152600481018390526001600160a01b039091169033908290636352211e9060240160206040518083038186803b15801561168257600080fd5b505afa158015611696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ba9190612ca2565b6001600160a01b0316146117105760405162461bcd60e51b815260206004820152601b60248201527f596f7520646f6e2774206f776e2074686174204275727261746121000000000060448201526064016108d9565b600854611726906001600160a01b03168361280d565b60125461173333826119f2565b7fd7f62ac3065431510ac651b9f5080d806455ab78bf18671ed6ff758271f056f4336001604051610b43929190612f12565b600260065414156117885760405162461bcd60e51b81526004016108d990612fea565b6002600655600d5461179a908261312e565b156117e75760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420616d6f756e7420656e74657265642100000000000000000060448201526064016108d9565b6117f1338261286f565b6000601154600d5483611804919061308e565b61180e91906130a2565b905061181a33826119f2565b7f6725a436f27905c6b30905eb6948c92c93eb023725757eae8e9dc75bedb62f5e338360405161184b929190612f12565b60405180910390a150506001600655565b6005546001600160a01b031633146118865760405162461bcd60e51b81526004016108d990612f7e565b6001600160a01b03166000908152601b60205260409020805460ff19166001179055565b6005546001600160a01b031633146118d45760405162461bcd60e51b81526004016108d990612f7e565b6118de82826119f2565b5050565b6005546001600160a01b0316331461190c5760405162461bcd60e51b81526004016108d990612f7e565b6119166000612993565b565b6005546001600160a01b031633146119425760405162461bcd60e51b81526004016108d990612f7e565b601955565b6005546001600160a01b031633146119715760405162461bcd60e51b81526004016108d990612f7e565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b336000908152601b602052604090205460ff166119f25760405162461bcd60e51b815260206004820152601b60248201527f596f75206172656e277420616c6c6f77656420746f206d696e742e000000000060448201526064016108d9565b6118de82826129e5565b606060048054610b64906130d8565b6005546001600160a01b03163314611a355760405162461bcd60e51b81526004016108d990612f7e565b8051825114611a865760405162461bcd60e51b815260206004820152601a60248201527f4d69736d61746368696e67206172726179206c656e677468732100000000000060448201526064016108d9565b60005b8251811015611afc57611aea838281518110611ab557634e487b7160e01b600052603260045260246000fd5b6020026020010151838381518110611add57634e487b7160e01b600052603260045260246000fd5b60200260200101516119f2565b80611af481613113565b915050611a89565b505050565b6005546001600160a01b03163314611b2b5760405162461bcd60e51b81526004016108d990612f7e565b600d93909355600e91909155600f55601055565b336000908152601b602052604090205460ff16611b9e5760405162461bcd60e51b815260206004820152601f60248201527f4f6e6c7920636865657379206164647265737365732063616e206275726e210060448201526064016108d9565b6118de8282612ac5565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015611c2d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108d9565b6110bc82868684036123e2565b6005546001600160a01b03163314611c645760405162461bcd60e51b81526004016108d990612f7e565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611cb05760405162461bcd60e51b81526004016108d990612f7e565b601255565b600033610bf581858561263f565b60026006541415611ce65760405162461bcd60e51b81526004016108d990612fea565b6002600655600a54601a54604051635a7c5dc160e11b81523360048201526001600160a01b0390921691829063b4f8bb829060240160206040518083038186803b158015611d3357600080fd5b505afa158015611d47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6b9190612ec9565b10611db85760405162461bcd60e51b815260206004820152601e60248201527f5061726d6573616e20616c7265616479206174206d6178206c6576656c21000060448201526064016108d9565b601954336000908152602081905260409020541015611de95760405162461bcd60e51b81526004016108d990612fb3565b611df533601954611b9e565b60405162405e8360e21b81523360048201526001600160a01b038216906301017a0c90602401600060405180830381600087803b158015611e3557600080fd5b505af1158015611e49573d6000803e3d6000fd5b5050505060008051602061319a83398151915233601954604051611470929190612f12565b60026006541415611e915760405162461bcd60e51b81526004016108d990612fea565b6002600655600854601a54604051635a7c5dc160e11b81523360048201526001600160a01b0390921691829063b4f8bb829060240160206040518083038186803b158015611ede57600080fd5b505afa158015611ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f169190612ec9565b10611f635760405162461bcd60e51b815260206004820152601d60248201527f4275727261746120616c7265616479206174206d6178206c6576656c2100000060448201526064016108d9565b601754336000908152602081905260409020541015611f945760405162461bcd60e51b81526004016108d990612fb3565b611fa033601754611b9e565b60405162405e8360e21b81523360048201526001600160a01b038216906301017a0c90602401600060405180830381600087803b158015611fe057600080fd5b505af1158015611ff4573d6000803e3d6000fd5b5050505060008051602061319a83398151915233601754604051611470929190612f12565b6005546001600160a01b031633146120435760405162461bcd60e51b81526004016108d990612f7e565b601855565b6005546001600160a01b031633146120725760405162461bcd60e51b81526004016108d990612f7e565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b600260065414156120b75760405162461bcd60e51b81526004016108d990612fea565b6002600655600954601a54604051635a7c5dc160e11b81523360048201526001600160a01b0390921691829063b4f8bb829060240160206040518083038186803b15801561210457600080fd5b505afa158015612118573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213c9190612ec9565b106121895760405162461bcd60e51b815260206004820181905260248201527f446f6c63656c6174746520616c7265616479206174206d6178206c6576656c2160448201526064016108d9565b6018543360009081526020819052604090205410156121ba5760405162461bcd60e51b81526004016108d990612fb3565b6121c633601854611b9e565b60405162405e8360e21b81523360048201526001600160a01b038216906301017a0c90602401600060405180830381600087803b15801561220657600080fd5b505af115801561221a573d6000803e3d6000fd5b5050505060008051602061319a83398151915233601854604051611470929190612f12565b6005546001600160a01b031633146122695760405162461bcd60e51b81526004016108d990612f7e565b601655565b6005546001600160a01b031633146122985760405162461bcd60e51b81526004016108d990612f7e565b601155565b6005546001600160a01b031633146122c75760405162461bcd60e51b81526004016108d990612f7e565b601755565b6005546001600160a01b031633146122f65760405162461bcd60e51b81526004016108d990612f7e565b601555565b6005546001600160a01b031633146123255760405162461bcd60e51b81526004016108d990612f7e565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146123715760405162461bcd60e51b81526004016108d990612f7e565b6001600160a01b0381166123d65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108d9565b6123df81612993565b50565b6001600160a01b0383166124445760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108d9565b6001600160a01b0382166124a55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108d9565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b8160005b82518110156125ad57816001600160a01b031663b49fa4bf84838151811061254257634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b815260040161256891815260200190565b600060405180830381600087803b15801561258257600080fd5b505af1158015612596573d6000803e3d6000fd5b5050505080806125a590613113565b91505061250a565b50505050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146125ad57818110156126325760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016108d9565b6125ad84848484036123e2565b6001600160a01b0383166126a35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108d9565b6001600160a01b0382166127055760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108d9565b6001600160a01b0383166000908152602081905260409020548181101561277d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108d9565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906127b4908490613076565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161280091815260200190565b60405180910390a36125ad565b60405163b49fa4bf60e01b81526004810182905282906001600160a01b0382169063b49fa4bf906024015b600060405180830381600087803b15801561285257600080fd5b505af1158015612866573d6000803e3d6000fd5b50505050505050565b6007546001600160a01b031661288d82670de0b6b3a76400006130a2565b6040516370a0823160e01b81526001600160a01b0385811660048301528316906370a082319060240160206040518083038186803b1580156128ce57600080fd5b505afa1580156128e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129069190612ec9565b10156129545760405162461bcd60e51b815260206004820152601c60248201527f596f7520646f6e2774206861766520656e6f75676820634d494c4b210000000060448201526064016108d9565b6001600160a01b038116639dc29fac8461297685670de0b6b3a76400006130a2565b6040518363ffffffff1660e01b8152600401612838929190612f12565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216612a3b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016108d9565b8060026000828254612a4d9190613076565b90915550506001600160a01b03821660009081526020819052604081208054839290612a7a908490613076565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36118de565b6001600160a01b038216612b255760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016108d9565b6001600160a01b03821660009081526020819052604090205481811015612b995760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016108d9565b6001600160a01b0383166000908152602081905260408120838303905560028054849290612bc89084906130c1565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3611afc565b600082601f830112612c23578081fd5b81356020612c38612c3383613052565b613021565b8281528181019085830183850287018401881015612c54578586fd5b855b85811015612c7257813584529284019290840190600101612c56565b5090979650505050505050565b600060208284031215612c90578081fd5b8135612c9b81613184565b9392505050565b600060208284031215612cb3578081fd5b8151612c9b81613184565b60008060408385031215612cd0578081fd5b8235612cdb81613184565b91506020830135612ceb81613184565b809150509250929050565b600080600060608486031215612d0a578081fd5b8335612d1581613184565b92506020840135612d2581613184565b929592945050506040919091013590565b60008060408385031215612d48578182fd5b8235612d5381613184565b946020939093013593505050565b60008060408385031215612d73578182fd5b823567ffffffffffffffff80821115612d8a578384fd5b818501915085601f830112612d9d578384fd5b81356020612dad612c3383613052565b82815281810190858301838502870184018b1015612dc9578889fd5b8896505b84871015612df4578035612de081613184565b835260019690960195918301918301612dcd565b5096505086013592505080821115612e0a578283fd5b50612e1785828601612c13565b9150509250929050565b60006020808385031215612e33578182fd5b825167ffffffffffffffff811115612e49578283fd5b8301601f81018513612e59578283fd5b8051612e67612c3382613052565b8181528381019083850185840285018601891015612e83578687fd5b8694505b83851015612ea5578051835260019490940193918501918501612e87565b50979650505050505050565b600060208284031215612ec2578081fd5b5035919050565b600060208284031215612eda578081fd5b5051919050565b60008060008060808587031215612ef6578081fd5b5050823594602084013594506040840135936060013592509050565b6001600160a01b03929092168252602082015260400190565b6000602080835283518082850152825b81811015612f5757858101830151858201604001528201612f3b565b81811115612f685783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601c908201527f596f7520646f6e2774206861766520656e6f756768206b474f4c442100000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561304a5761304a61316e565b604052919050565b600067ffffffffffffffff82111561306c5761306c61316e565b5060209081020190565b6000821982111561308957613089613142565b500190565b60008261309d5761309d613158565b500490565b60008160001904831182151516156130bc576130bc613142565b500290565b6000828210156130d3576130d3613142565b500390565b6002810460018216806130ec57607f821691505b6020821081141561310d57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561312757613127613142565b5060010190565b60008261313d5761313d613158565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146123df57600080fdfe238234bbcc2affd35a3d957e20643c2d2a0bbf86bc4de9540fc0c7c66c29ddf7a264697066735822122052b4ad2919bfc51da21b6cbf16b41dfaecf35ea495d41e4b847d055f57c42d1664736f6c63430008020033
Deployed ByteCode Sourcemap
30796:10732:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36671:540;;;;;;:::i;:::-;;:::i;:::-;;12008:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14359:201;;;;;;:::i;:::-;;:::i;:::-;;;6408:14:1;;6401:22;6383:41;;6371:2;6356:18;14359:201:0;6338:92:1;41424:99:0;;;;;;:::i;:::-;;:::i;39480:::-;;;;;;:::i;:::-;;:::i;31103:73::-;;;;;-1:-1:-1;;;;;31103:73:0;;;;;;-1:-1:-1;;;;;5633:32:1;;;5615:51;;5603:2;5588:18;31103:73:0;5570:102:1;35337:445:0;;;:::i;13128:108::-;13216:12;;13128:108;;;18696:25:1;;;18684:2;18669:18;13128:108:0;18651:76:1;34504:449:0;;;:::i;30859:73::-;;;;;-1:-1:-1;;;;;30859:73:0;;;33665:451;;;:::i;31264:72::-;;;;;-1:-1:-1;;;;;31264:72:0;;;15140:295;;;;;;:::i;:::-;;:::i;41313:103::-;;;;;;:::i;:::-;;:::i;34961:368::-;;;;;;:::i;:::-;;:::i;39371:101::-;;;;;;:::i;:::-;;:::i;31345:26::-;;;;;;40187:99;;;;;;:::i;:::-;;:::i;36215:448::-;;;:::i;12970:93::-;;;13053:2;18874:36:1;;18862:2;18847:18;12970:93:0;18829:87:1;34124:372:0;;;;;;:::i;:::-;;:::i;15844:240::-;;;;;;:::i;:::-;;:::i;33283:374::-;;;;;;:::i;:::-;;:::i;32688:323::-;;;;;;:::i;:::-;;:::i;31914:49::-;;;;;;31743:48;;;;;;40756:112;;;;;;:::i;:::-;;:::i;40294:125::-;;;;;;:::i;:::-;;:::i;32005:47::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;31798:52;;;;;;13299:127;;;;;;:::i;:::-;-1:-1:-1;;;;;13400:18:0;13373:7;13400:18;;;;;;;;;;;;13299:127;5431:103;;;:::i;31448:26::-;;;;;;31530:46;;;;;;4780:87;4853:6;;-1:-1:-1;;;;;4853:6:0;4780:87;;40069:110;;;;;;:::i;:::-;;:::i;40876:102::-;;;;;;:::i;:::-;;:::i;31857:50::-;;;;;;32499:181;;;;;;:::i;:::-;;:::i;12227:104::-;;;:::i;40427:321::-;;;;;;:::i;:::-;;:::i;38924:219::-;;;;;;:::i;:::-;;:::i;38726:169::-;;;;;;:::i;:::-;;:::i;16587:438::-;;;;;;:::i;:::-;;:::i;31970:26::-;;;;;;41200:105;;;;;;:::i;:::-;;:::i;39258:::-;;;;;;:::i;:::-;;:::i;13632:193::-;;;;;;:::i;:::-;;:::i;38161:454::-;;;:::i;37219:464::-;;;:::i;31378:29::-;;;;;;30939:76;;;;;-1:-1:-1;;;;;30939:76:0;;;31022:74;;;;;-1:-1:-1;;;;;31022:74:0;;;31685:51;;;;;;31183:74;;;;;-1:-1:-1;;;;;31183:74:0;;;39949:112;;;;;;:::i;:::-;;:::i;40986:95::-;;;;;;:::i;:::-;;:::i;37691:462::-;;;:::i;39709:108::-;;;;;;:::i;:::-;;:::i;13888:151::-;;;;;;:::i;:::-;-1:-1:-1;;;;;14004:18:0;;;13977:7;14004:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;13888:151;39151:99;;;;;;:::i;:::-;;:::i;39825:116::-;;;;;;:::i;:::-;;:::i;31414:27::-;;;;;;39587:114;;;;;;:::i;:::-;;:::i;41089:103::-;;;;;;:::i;:::-;;:::i;5689:201::-;;;;;;:::i;:::-;;:::i;31634:44::-;;;;;;31583;;;;;;31481:42;;;;;;36671:540;1878:1;2476:7;;:19;;2468:63;;;;-1:-1:-1;;;2468:63:0;;;;;;;:::i;:::-;;;;;;;;;1878:1;2609:7;:18;36755:14:::1;::::0;36812:9:::1;::::0;36789:20:::1;::::0;-1:-1:-1;;;36789:20:0;;::::1;::::0;::::1;18696:25:1::0;;;-1:-1:-1;;;;;36755:14:0;;::::1;::::0;;;36789:15:::1;::::0;18669:18:1;;36789:20:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:32;36781:73;;;::::0;-1:-1:-1;;;36781:73:0;;7602:2:1;36781:73:0::1;::::0;::::1;7584:21:1::0;7641:2;7621:18;;;7614:30;7680;7660:18;;;7653:58;7728:18;;36781:73:0::1;7574:178:1::0;36781:73:0::1;36879:12;::::0;36911:14:::1;::::0;-1:-1:-1;;;36911:14:0;;::::1;::::0;::::1;18696:25:1::0;;;-1:-1:-1;;;;;36879:12:0;;::::1;::::0;36929:10:::1;::::0;36879:12;;36911:9:::1;::::0;18669:18:1;;36911:14:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36911:28:0::1;;36903:64;;;::::0;-1:-1:-1;;;36903:64:0;;12839:2:1;36903:64:0::1;::::0;::::1;12821:21:1::0;12878:2;12858:18;;;12851:30;12917:25;12897:18;;;12890:53;12960:18;;36903:64:0::1;12811:173:1::0;36903:64:0::1;37011:14;::::0;36996:10:::1;13373:7:::0;13400:18;;;;;;;;;;;36986:39:::1;;36978:80;;;;-1:-1:-1::0;;;36978:80:0::1;;;;;;;:::i;:::-;37069:41;37083:10;37095:14;;37069:13;:41::i;:::-;37121:23;::::0;-1:-1:-1;;;37121:23:0;;::::1;::::0;::::1;18696:25:1::0;;;-1:-1:-1;;;;;37121:18:0;::::1;::::0;::::1;::::0;18669::1;;37121:23:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;37176:10:0::1;37188:14;;37160:43;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;1834:1:0;2788:7;:22;-1:-1:-1;36671:540:0:o;12008:100::-;12062:13;12095:5;12088:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12008:100;:::o;14359:201::-;14442:4;3584:10;14498:32;3584:10;14514:7;14523:6;14498:8;:32::i;:::-;-1:-1:-1;14548:4:0;;14359:201;-1:-1:-1;;;14359:201:0:o;41424:99::-;4853:6;;-1:-1:-1;;;;;4853:6:0;3584:10;5000:23;4992:68;;;;-1:-1:-1;;;4992:68:0;;;;;;;:::i;:::-;41495:13:::1;:20:::0;;-1:-1:-1;;;;;;41495:20:0::1;-1:-1:-1::0;;;;;41495:20:0;;;::::1;::::0;;;::::1;::::0;;41424:99::o;39480:::-;4853:6;;-1:-1:-1;;;;;4853:6:0;3584:10;5000:23;4992:68;;;;-1:-1:-1;;;4992:68:0;;;;;;;:::i;:::-;39550:9:::1;:21:::0;39480:99::o;35337:445::-;1878:1;2476:7;;:19;;2468:63;;;;-1:-1:-1;;;2468:63:0;;;;;;;:::i;:::-;1878:1;2609:7;:18;35419:13:::1;::::0;35469:27:::1;::::0;-1:-1:-1;;;35469:27:0;;35485:10:::1;35469:27;::::0;::::1;5615:51:1::0;-1:-1:-1;;;;;35419:13:0;;::::1;::::0;35399:9:::1;::::0;35419:13;;35469:15:::1;::::0;5588:18:1;;35469:27:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;35469:27:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;35444:52;;35533:1;35515:8;:15;:19;35507:60;;;::::0;-1:-1:-1;;;35507:60:0;;7245:2:1;35507:60:0::1;::::0;::::1;7227:21:1::0;7284:2;7264:18;;;7257:30;7323;7303:18;;;7296:58;7371:18;;35507:60:0::1;7217:178:1::0;35507:60:0::1;35594:13;::::0;35580:38:::1;::::0;-1:-1:-1;;;;;35594:13:0::1;35609:8:::0;35580:13:::1;:38::i;:::-;35631:9;35655:8;:15;35643:9;;:27;;;;:::i;:::-;35631:39;;35683:32;35698:10;35710:4;35683:14;:32::i;:::-;35731:43;35746:10;35758:8;:15;35731:43;;;;;;;:::i;34504:449::-:0;1878:1;2476:7;;:19;;2468:63;;;;-1:-1:-1;;;2468:63:0;;;;;;;:::i;:::-;1878:1;2609:7;:18;34583:14:::1;::::0;34634:27:::1;::::0;-1:-1:-1;;;34634:27:0;;34650:10:::1;34634:27;::::0;::::1;5615:51:1::0;-1:-1:-1;;;;;34583:14:0;;::::1;::::0;34563:9:::1;::::0;34583:14;;34634:15:::1;::::0;5588:18:1;;34634:27:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;34634:27:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;34609:52;;34698:1;34680:8;:15;:19;34672:62;;;::::0;-1:-1:-1;;;34672:62:0;;13551:2:1;34672:62:0::1;::::0;::::1;13533:21:1::0;13590:2;13570:18;;;13563:30;13629:32;13609:18;;;13602:60;13679:18;;34672:62:0::1;13523:180:1::0;34672:62:0::1;34761:14;::::0;34747:39:::1;::::0;-1:-1:-1;;;;;34761:14:0::1;34777:8:::0;34747:13:::1;:39::i;:::-;34799:9;34824:8;:15;34811:10;;:28;;;;:::i;:::-;34799:40;;34852:32;34867:10;34879:4;34852:14;:32::i;:::-;34900:45;34917:10;34929:8;:15;34900:45;;;;;;;:::i;33665:451::-:0;1878:1;2476:7;;:19;;2468:63;;;;-1:-1:-1;;;2468:63:0;;;;;;;:::i;:::-;1878:1;2609:7;:18;33746:16:::1;::::0;33799:27:::1;::::0;-1:-1:-1;;;33799:27:0;;33815:10:::1;33799:27;::::0;::::1;5615:51:1::0;-1:-1:-1;;;;;33746:16:0;;::::1;::::0;33726:9:::1;::::0;33746:16;;33799:15:::1;::::0;5588:18:1;;33799:27:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;33799:27:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;33774:52;;33863:1;33845:8;:15;:19;33837:59;;;::::0;-1:-1:-1;;;33837:59:0;;17630:2:1;33837:59:0::1;::::0;::::1;17612:21:1::0;17669:2;17649:18;;;17642:30;17708:29;17688:18;;;17681:57;17755:18;;33837:59:0::1;17602:177:1::0;33837:59:0::1;33923:16;::::0;33909:41:::1;::::0;-1:-1:-1;;;;;33923:16:0::1;33941:8:::0;33909:13:::1;:41::i;:::-;33963:9;33990:8;:15;33975:12;;:30;;;;:::i;:::-;33963:42;;34018:32;34033:10;34045:4;34018:14;:32::i;:::-;34066:42;34080:10;34092:8;:15;34066:42;;;;;;;:::i;15140:295::-:0;15271:4;3584:10;15329:38;15345:4;3584:10;15360:6;15329:15;:38::i;:::-;15378:27;15388:4;15394:2;15398:6;15378:9;:27::i;:::-;-1:-1:-1;15423:4:0;;15140:295;-1:-1:-1;;;;15140:295:0:o;41313:103::-;4853:6;;-1:-1:-1;;;;;4853:6:0;3584:10;5000:23;4992:68;;;;-1:-1:-1;;;4992:68:0;;;;;;;:::i;:::-;41386:14:::1;:22:::0;;-1:-1:-1;;;;;;41386:22:0::1;-1:-1:-1::0;;;;;41386:22:0;;;::::1;::::0;;;::::1;::::0;;41313:103::o;34961:368::-;1878:1;2476:7;;:19;;2468:63;;;;-1:-1:-1;;;2468:63:0;;;;;;;:::i;:::-;1878:1;2609:7;:18;35052:13:::1;::::0;35085:18:::1;::::0;-1:-1:-1;;;35085:18:0;;::::1;::::0;::::1;18696:25:1::0;;;-1:-1:-1;;;;;35052:13:0;;::::1;::::0;35107:10:::1;::::0;35052:13;;35085:9:::1;::::0;18669:18:1;;35085::0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35085:32:0::1;;35077:73;;;::::0;-1:-1:-1;;;35077:73:0;;8363:2:1;35077:73:0::1;::::0;::::1;8345:21:1::0;8402:2;8382:18;;;8375:30;8441;8421:18;;;8414:58;8489:18;;35077:73:0::1;8335:178:1::0;35077:73:0::1;35174:13;::::0;35163:34:::1;::::0;-1:-1:-1;;;;;35174:13:0::1;35189:7:::0;35163:10:::1;:34::i;:::-;35222:9;::::0;35244:32:::1;35259:10;35222:9:::0;35244:14:::1;:32::i;:::-;35292:29;35307:10;35319:1;35292:29;;;;;;;:::i;39371:101::-:0;4853:6;;-1:-1:-1;;;;;4853:6:0;3584:10;5000:23;4992:68;;;;-1:-1:-1;;;4992:68:0;;;;;;;:::i;:::-;39442:10:::1;:22:::0;39371:101::o;40187:99::-;4853:6;;-1:-1:-1;;;;;4853:6:0;3584:10;5000:23;4992:68;;;;-1:-1:-1;;;4992:68:0;;;;;;;:::i;:::-;40257:9:::1;:21:::0;40187:99::o;36215:448::-;1878:1;2476:7;;:19;;2468:63;;;;-1:-1:-1;;;2468:63:0;;;;;;;:::i;:::-;1878:1;2609:7;:18;36292:13:::1;::::0;36358:9:::1;::::0;36325:30:::1;::::0;-1:-1:-1;;;36325:30:0;;36344:10:::1;36325:30;::::0;::::1;5615:51:1::0;-1:-1:-1;;;;;36292:13:0;;::::1;::::0;;;36325:18:::1;::::0;5588::1;;36325:30:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;36317:83;;;::::0;-1:-1:-1;;;36317:83:0;;14271:2:1;36317:83:0::1;::::0;::::1;14253:21:1::0;14310:2;14290:18;;;14283:30;14349;14329:18;;;14322:58;14397:18;;36317:83:0::1;14243:178:1::0;36317:83:0::1;36444:17;::::0;36429:10:::1;13373:7:::0;13400:18;;;;;;;;;;;36419:42:::1;;36411:83;;;;-1:-1:-1::0;;;36411:83:0::1;;;;;;;:::i;:::-;36505:44;36519:10;36531:17;;36505:13;:44::i;:::-;36560:33;::::0;-1:-1:-1;;;36560:33:0;;36582:10:::1;36560:33;::::0;::::1;5615:51:1::0;-1:-1:-1;;;;;36560:21:0;::::1;::::0;::::1;::::0;5588:18:1;;36560:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;36625:10:0::1;36637:17;;36609:46;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;1834:1:0;2788:7;:22;36215:448::o;34124:372::-;1878:1;2476:7;;:19;;2468:63;;;;-1:-1:-1;;;2468:63:0;;;;;;;:::i;:::-;1878:1;2609:7;:18;34212:14:::1;::::0;34246:18:::1;::::0;-1:-1:-1;;;34246:18:0;;::::1;::::0;::::1;18696:25:1::0;;;-1:-1:-1;;;;;34212:14:0;;::::1;::::0;34268:10:::1;::::0;34212:14;;34246:9:::1;::::0;18669:18:1;;34246::0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34246:32:0::1;;34238:75;;;::::0;-1:-1:-1;;;34238:75:0;;11414:2:1;34238:75:0::1;::::0;::::1;11396:21:1::0;11453:2;11433:18;;;11426:30;11492:32;11472:18;;;11465:60;11542:18;;34238:75:0::1;11386:180:1::0;34238:75:0::1;34337:14;::::0;34326:35:::1;::::0;-1:-1:-1;;;;;34337:14:0::1;34353:7:::0;34326:10:::1;:35::i;:::-;34386:10;::::0;34409:32:::1;34424:10;34386::::0;34409:14:::1;:32::i;:::-;34457:31;34474:10;34486:1;34457:31;;;;;;;:::i;15844:240::-:0;3584:10;15932:4;16013:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;16013:27:0;;;;;;;;;;15932:4;;3584:10;15988:66;;3584:10;;16013:27;;:40;;16043:10;;16013:40;:::i;:::-;15988:8;:66::i;33283:374::-;1878:1;2476:7;;:19;;2468:63;;;;-1:-1:-1;;;2468:63:0;;;;;;;:::i;:::-;1878:1;2609:7;:18;33373:16:::1;::::0;33409:18:::1;::::0;-1:-1:-1;;;33409:18:0;;::::1;::::0;::::1;18696:25:1::0;;;-1:-1:-1;;;;;33373:16:0;;::::1;::::0;33431:10:::1;::::0;33373:16;;33409:9:::1;::::0;18669:18:1;;33409::0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33409:32:0::1;;33401:72;;;::::0;-1:-1:-1;;;33401:72:0;;14985:2:1;33401:72:0::1;::::0;::::1;14967:21:1::0;15024:2;15004:18;;;14997:30;15063:29;15043:18;;;15036:57;15110:18;;33401:72:0::1;14957:177:1::0;33401:72:0::1;33497:16;::::0;33486:37:::1;::::0;-1:-1:-1;;;;;33497:16:0::1;33515:7:::0;33486:10:::1;:37::i;:::-;33548:12;::::0;33573:32:::1;33588:10;33548:12:::0;33573:14:::1;:32::i;:::-;33621:28;33635:10;33647:1;33621:28;;;;;;;:::i;32688:323::-:0;1878:1;2476:7;;:19;;2468:63;;;;-1:-1:-1;;;2468:63:0;;;;;;;:::i;:::-;1878:1;2609:7;:18;32771:10:::1;::::0;32762:19:::1;::::0;:6;:19:::1;:::i;:::-;:24:::0;32754:60:::1;;;::::0;-1:-1:-1;;;32754:60:0;;12131:2:1;32754:60:0::1;::::0;::::1;12113:21:1::0;12170:2;12150:18;;;12143:30;12209:25;12189:18;;;12182:53;12252:18;;32754:60:0::1;12103:173:1::0;32754:60:0::1;32825:28;32834:10;32846:6;32825:8;:28::i;:::-;32866:9;32903;;32888:10;;32879:6;:19;;;;:::i;:::-;32878:34;;;;:::i;:::-;32866:46;;32925:32;32940:10;32952:4;32925:14;:32::i;:::-;32973:30;32984:10;32996:6;32973:30;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;1834:1:0;2788:7;:22;32688:323::o;40756:112::-;4853:6;;-1:-1:-1;;;;;4853:6:0;3584:10;5000:23;4992:68;;;;-1:-1:-1;;;4992:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40829:24:0::1;;::::0;;;:15:::1;:24;::::0;;;;:31;;-1:-1:-1;;40829:31:0::1;40856:4;40829:31;::::0;;40756:112::o;40294:125::-;4853:6;;-1:-1:-1;;;;;4853:6:0;3584:10;5000:23;4992:68;;;;-1:-1:-1;;;4992:68:0;;;;;;;:::i;:::-;40380:31:::1;40395:7;40404:6;40380:14;:31::i;:::-;40294:125:::0;;:::o;5431:103::-;4853:6;;-1:-1:-1;;;;;4853:6:0;3584:10;5000:23;4992:68;;;;-1:-1:-1;;;4992:68:0;;;;;;;:::i;:::-;5496:30:::1;5523:1;5496:18;:30::i;:::-;5431:103::o:0;40069:110::-;4853:6;;-1:-1:-1;;;;;4853:6:0;3584:10;5000:23;4992:68;;;;-1:-1:-1;;;4992:68:0;;;;;;;:::i;:::-;40144:15:::1;:27:::0;40069:110::o;40876:102::-;4853:6;;-1:-1:-1;;;;;4853:6:0;3584:10;5000:23;4992:68;;;;-1:-1:-1;;;4992:68:0;;;;;;;:::i;:::-;40945:13:::1;:25:::0;;-1:-1:-1;;;;;;40945:25:0::1;-1:-1:-1::0;;;;;40945:25:0;;;::::1;::::0;;;::::1;::::0;;40876:102::o;32499:181::-;32596:10;32580:27;;;;:15;:27;;;;;;;;32572:67;;;;-1:-1:-1;;;32572:67:0;;12483:2:1;32572:67:0;;;12465:21:1;12522:2;12502:18;;;12495:30;12561:29;12541:18;;;12534:57;12608:18;;32572:67:0;12455:177:1;32572:67:0;32650:22;32656:7;32665:6;32650:5;:22::i;12227:104::-;12283:13;12316:7;12309:14;;;;;:::i;40427:321::-;4853:6;;-1:-1:-1;;;;;4853:6:0;3584:10;5000:23;4992:68;;;;-1:-1:-1;;;4992:68:0;;;;;;;:::i;:::-;40564:7:::1;:14;40545:8;:15;:33;40537:72;;;::::0;-1:-1:-1;;;40537:72:0;;11059:2:1;40537:72:0::1;::::0;::::1;11041:21:1::0;11098:2;11078:18;;;11071:30;11137:28;11117:18;;;11110:56;11183:18;;40537:72:0::1;11031:176:1::0;40537:72:0::1;40627:6;40622:109;40643:8;:15;40639:1;:19;40622:109;;;40680:39;40695:8;40704:1;40695:11;;;;;;-1:-1:-1::0;;;40695:11:0::1;;;;;;;;;;;;;;;40708:7;40716:1;40708:10;;;;;;-1:-1:-1::0;;;40708:10:0::1;;;;;;;;;;;;;;;40680:14;:39::i;:::-;40660:3:::0;::::1;::::0;::::1;:::i;:::-;;;;40622:109;;;;40427:321:::0;;:::o;38924:219::-;4853:6;;-1:-1:-1;;;;;4853:6:0;3584:10;5000:23;4992:68;;;;-1:-1:-1;;;4992:68:0;;;;;;;:::i;:::-;39025:10:::1;:18:::0;;;;39054:13:::1;:21:::0;;;;39086:11:::1;:20:::0;39117:10:::1;:18:::0;38924:219::o;38726:169::-;38810:10;38794:27;;;;:15;:27;;;;;;;;38786:71;;;;-1:-1:-1;;;38786:71:0;;13191:2:1;38786:71:0;;;13173:21:1;13230:2;13210:18;;;13203:30;13269:33;13249:18;;;13242:61;13320:18;;38786:71:0;13163:181:1;38786:71:0;38869:18;38875:3;38880:6;38869:5;:18::i;16587:438::-;3584:10;16680:4;16763:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;16763:27:0;;;;;;;;;;16680:4;;3584:10;16809:35;;;;16801:85;;;;-1:-1:-1;;;16801:85:0;;17986:2:1;16801:85:0;;;17968:21:1;18025:2;18005:18;;;17998:30;18064:34;18044:18;;;18037:62;-1:-1:-1;;;18115:18:1;;;18108:35;18160:19;;16801:85:0;17958:227:1;16801:85:0;16922:60;16931:5;16938:7;16966:15;16947:16;:34;16922:8;:60::i;41200:105::-;4853:6;;-1:-1:-1;;;;;4853:6:0;3584:10;5000:23;4992:68;;;;-1:-1:-1;;;4992:68:0;;;;;;;:::i;:::-;41274:16:::1;:23:::0;;-1:-1:-1;;;;;;41274:23:0::1;-1:-1:-1::0;;;;;41274:23:0;;;::::1;::::0;;;::::1;::::0;;41200:105::o;39258:::-;4853:6;;-1:-1:-1;;;;;4853:6:0;3584:10;5000:23;4992:68;;;;-1:-1:-1;;;4992:68:0;;;;;;;:::i;:::-;39331:12:::1;:24:::0;39258:105::o;13632:193::-;13711:4;3584:10;13767:28;3584:10;13784:2;13788:6;13767:9;:28::i;38161:454::-;1878:1;2476:7;;:19;;2468:63;;;;-1:-1:-1;;;2468:63:0;;;;;;;:::i;:::-;1878:1;2609:7;:18;38244:13:::1;::::0;38312:9:::1;::::0;38277:32:::1;::::0;-1:-1:-1;;;38277:32:0;;38298:10:::1;38277:32;::::0;::::1;5615:51:1::0;-1:-1:-1;;;;;38244:13:0;;::::1;::::0;;;38277:20:::1;::::0;5588:18:1;;38277:32:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;38269:87;;;::::0;-1:-1:-1;;;38269:87:0;;16149:2:1;38269:87:0::1;::::0;::::1;16131:21:1::0;16188:2;16168:18;;;16161:30;16227:32;16207:18;;;16200:60;16277:18;;38269:87:0::1;16121:180:1::0;38269:87:0::1;38400:15;::::0;38385:10:::1;13373:7:::0;13400:18;;;;;;;;;;;38375:40:::1;;38367:81;;;;-1:-1:-1::0;;;38367:81:0::1;;;;;;;:::i;:::-;38459:42;38473:10;38485:15;;38459:13;:42::i;:::-;38512:35;::::0;-1:-1:-1;;;38512:35:0;;38536:10:::1;38512:35;::::0;::::1;5615:51:1::0;-1:-1:-1;;;;;38512:23:0;::::1;::::0;::::1;::::0;5588:18:1;;38512:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;38579:10:0::1;38591:15;;38563:44;;;;;;;:::i;37219:464::-:0;1878:1;2476:7;;:19;;2468:63;;;;-1:-1:-1;;;2468:63:0;;;;;;;:::i;:::-;1878:1;2609:7;:18;37301:16:::1;::::0;37372:9:::1;::::0;37337:32:::1;::::0;-1:-1:-1;;;37337:32:0;;37358:10:::1;37337:32;::::0;::::1;5615:51:1::0;-1:-1:-1;;;;;37301:16:0;;::::1;::::0;;;37337:20:::1;::::0;5588:18:1;;37337:32:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;37329:86;;;::::0;-1:-1:-1;;;37329:86:0;;11773:2:1;37329:86:0::1;::::0;::::1;11755:21:1::0;11812:2;11792:18;;;11785:30;11851:31;11831:18;;;11824:59;11900:18;;37329:86:0::1;11745:179:1::0;37329:86:0::1;37459:18;::::0;37444:10:::1;13373:7:::0;13400:18;;;;;;;;;;;37434:43:::1;;37426:84;;;;-1:-1:-1::0;;;37426:84:0::1;;;;;;;:::i;:::-;37521:45;37535:10;37547:18;;37521:13;:45::i;:::-;37577:35;::::0;-1:-1:-1;;;37577:35:0;;37601:10:::1;37577:35;::::0;::::1;5615:51:1::0;-1:-1:-1;;;;;37577:23:0;::::1;::::0;::::1;::::0;5588:18:1;;37577:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;37644:10:0::1;37656:18;;37628:47;;;;;;;:::i;39949:112::-:0;4853:6;;-1:-1:-1;;;;;4853:6:0;3584:10;5000:23;4992:68;;;;-1:-1:-1;;;4992:68:0;;;;;;;:::i;:::-;40025:16:::1;:28:::0;39949:112::o;40986:95::-;4853:6;;-1:-1:-1;;;;;4853:6:0;3584:10;5000:23;4992:68;;;;-1:-1:-1;;;4992:68:0;;;;;;;:::i;:::-;41055:12:::1;:18:::0;;-1:-1:-1;;;;;;41055:18:0::1;-1:-1:-1::0;;;;;41055:18:0;;;::::1;::::0;;;::::1;::::0;;40986:95::o;37691:462::-;1878:1;2476:7;;:19;;2468:63;;;;-1:-1:-1;;;2468:63:0;;;;;;;:::i;:::-;1878:1;2609:7;:18;37776:14:::1;::::0;37845:9:::1;::::0;37810:32:::1;::::0;-1:-1:-1;;;37810:32:0;;37831:10:::1;37810:32;::::0;::::1;5615:51:1::0;-1:-1:-1;;;;;37776:14:0;;::::1;::::0;;;37810:20:::1;::::0;5588:18:1;;37810:32:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;37802:89;;;::::0;-1:-1:-1;;;37802:89:0;;10291:2:1;37802:89:0::1;::::0;::::1;10273:21:1::0;;;10310:18;;;10303:30;10369:34;10349:18;;;10342:62;10421:18;;37802:89:0::1;10263:182:1::0;37802:89:0::1;37935:16;::::0;37920:10:::1;13373:7:::0;13400:18;;;;;;;;;;;37910:41:::1;;37902:82;;;;-1:-1:-1::0;;;37902:82:0::1;;;;;;;:::i;:::-;37995:43;38009:10;38021:16;;37995:13;:43::i;:::-;38049:35;::::0;-1:-1:-1;;;38049:35:0;;38073:10:::1;38049:35;::::0;::::1;5615:51:1::0;-1:-1:-1;;;;;38049:23:0;::::1;::::0;::::1;::::0;5588:18:1;;38049:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;38116:10:0::1;38128:16;;38100:45;;;;;;;:::i;39709:108::-:0;4853:6;;-1:-1:-1;;;;;4853:6:0;3584:10;5000:23;4992:68;;;;-1:-1:-1;;;4992:68:0;;;;;;;:::i;:::-;39783:14:::1;:26:::0;39709:108::o;39151:99::-;4853:6;;-1:-1:-1;;;;;4853:6:0;3584:10;5000:23;4992:68;;;;-1:-1:-1;;;4992:68:0;;;;;;;:::i;:::-;39221:9:::1;:21:::0;39151:99::o;39825:116::-;4853:6;;-1:-1:-1;;;;;4853:6:0;3584:10;5000:23;4992:68;;;;-1:-1:-1;;;4992:68:0;;;;;;;:::i;:::-;39903:18:::1;:30:::0;39825:116::o;39587:114::-;4853:6;;-1:-1:-1;;;;;4853:6:0;3584:10;5000:23;4992:68;;;;-1:-1:-1;;;4992:68:0;;;;;;;:::i;:::-;39664:17:::1;:29:::0;39587:114::o;41089:103::-;4853:6;;-1:-1:-1;;;;;4853:6:0;3584:10;5000:23;4992:68;;;;-1:-1:-1;;;4992:68:0;;;;;;;:::i;:::-;41162:14:::1;:22:::0;;-1:-1:-1;;;;;;41162:22:0::1;-1:-1:-1::0;;;;;41162:22:0;;;::::1;::::0;;;::::1;::::0;;41089:103::o;5689:201::-;4853:6;;-1:-1:-1;;;;;4853:6:0;3584:10;5000:23;4992:68;;;;-1:-1:-1;;;4992:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5778:22:0;::::1;5770:73;;;::::0;-1:-1:-1;;;5770:73:0;;9123:2:1;5770:73:0::1;::::0;::::1;9105:21:1::0;9162:2;9142:18;;;9135:30;9201:34;9181:18;;;9174:62;-1:-1:-1;;;9252:18:1;;;9245:36;9298:19;;5770:73:0::1;9095:228:1::0;5770:73:0::1;5854:28;5873:8;5854:18;:28::i;:::-;5689:201:::0;:::o;20223:380::-;-1:-1:-1;;;;;20359:19:0;;20351:68;;;;-1:-1:-1;;;20351:68:0;;16508:2:1;20351:68:0;;;16490:21:1;16547:2;16527:18;;;16520:30;16586:34;16566:18;;;16559:62;-1:-1:-1;;;16637:18:1;;;16630:34;16681:19;;20351:68:0;16480:226:1;20351:68:0;-1:-1:-1;;;;;20438:21:0;;20430:68;;;;-1:-1:-1;;;20430:68:0;;9530:2:1;20430:68:0;;;9512:21:1;9569:2;9549:18;;;9542:30;9608:34;9588:18;;;9581:62;-1:-1:-1;;;9659:18:1;;;9652:32;9701:19;;20430:68:0;9502:224:1;20430:68:0;-1:-1:-1;;;;;20511:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;20563:32;;18696:25:1;;;20563:32:0;;18669:18:1;20563:32:0;;;;;;;20223:380;;;:::o;35790:252::-;35897:9;35877;35928:97;35949:9;:16;35945:1;:20;35928:97;;;35987:1;-1:-1:-1;;;;;35987:12:0;;36000:9;36010:1;36000:12;;;;;;-1:-1:-1;;;36000:12:0;;;;;;;;;;;;;;;35987:26;;;;;;;;;;;;;18696:25:1;;18684:2;18669:18;;18651:76;35987:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35967:3;;;;;:::i;:::-;;;;35928:97;;;;35790:252;;;:::o;20890:453::-;-1:-1:-1;;;;;14004:18:0;;;21025:24;14004:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;21092:37:0;;21088:248;;21174:6;21154:16;:26;;21146:68;;;;-1:-1:-1;;;21146:68:0;;9933:2:1;21146:68:0;;;9915:21:1;9972:2;9952:18;;;9945:30;10011:31;9991:18;;;9984:59;10060:18;;21146:68:0;9905:179:1;21146:68:0;21258:51;21267:5;21274:7;21302:6;21283:16;:25;21258:8;:51::i;17504:671::-;-1:-1:-1;;;;;17635:18:0;;17627:68;;;;-1:-1:-1;;;17627:68:0;;15743:2:1;17627:68:0;;;15725:21:1;15782:2;15762:18;;;15755:30;15821:34;15801:18;;;15794:62;-1:-1:-1;;;15872:18:1;;;15865:35;15917:19;;17627:68:0;15715:227:1;17627:68:0;-1:-1:-1;;;;;17714:16:0;;17706:64;;;;-1:-1:-1;;;17706:64:0;;7959:2:1;17706:64:0;;;7941:21:1;7998:2;7978:18;;;7971:30;8037:34;8017:18;;;8010:62;-1:-1:-1;;;8088:18:1;;;8081:33;8131:19;;17706:64:0;7931:225:1;17706:64:0;-1:-1:-1;;;;;17856:15:0;;17834:19;17856:15;;;;;;;;;;;17890:21;;;;17882:72;;;;-1:-1:-1;;;17882:72:0;;10652:2:1;17882:72:0;;;10634:21:1;10691:2;10671:18;;;10664:30;10730:34;10710:18;;;10703:62;-1:-1:-1;;;10781:18:1;;;10774:36;10827:19;;17882:72:0;10624:228:1;17882:72:0;-1:-1:-1;;;;;17990:15:0;;;:9;:15;;;;;;;;;;;18008:20;;;17990:38;;18050:13;;;;;;;;:23;;18022:6;;17990:9;18050:23;;18022:6;;18050:23;:::i;:::-;;;;;;;;18106:2;-1:-1:-1;;;;;18091:26:0;18100:4;-1:-1:-1;;;;;18091:26:0;;18110:6;18091:26;;;;18696:25:1;;18684:2;18669:18;;18651:76;18091:26:0;;;;;;;;18130:37;40427:321;36050:157;36175:22;;-1:-1:-1;;;36175:22:0;;;;;18696:25:1;;;36144:9:0;;-1:-1:-1;;;;;36175:12:0;;;;;18669:18:1;;36175:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36050:157;;;:::o;33019:256::-;33104:13;;-1:-1:-1;;;;;33104:13:0;33162:16;:7;33172:6;33162:16;:::i;:::-;33137:20;;-1:-1:-1;;;33137:20:0;;-1:-1:-1;;;;;5633:32:1;;;33137:20:0;;;5615:51:1;33137:11:0;;;;;5588:18:1;;33137:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;33129:83;;;;-1:-1:-1;;;33129:83:0;;17273:2:1;33129:83:0;;;17255:21:1;17312:2;17292:18;;;17285:30;17351;17331:18;;;17324:58;17399:18;;33129:83:0;17245:178:1;33129:83:0;-1:-1:-1;;;;;33233:6:0;;;33240:7;33249:16;:7;33259:6;33249:16;:::i;:::-;33233:34;;;;;;;;;;;;;;;;:::i;6050:191::-;6143:6;;;-1:-1:-1;;;;;6160:17:0;;;-1:-1:-1;;;;;;6160:17:0;;;;;;;6193:40;;6143:6;;;6160:17;6143:6;;6193:40;;6124:16;;6193:40;6050:191;;:::o;18462:399::-;-1:-1:-1;;;;;18546:21:0;;18538:65;;;;-1:-1:-1;;;18538:65:0;;18392:2:1;18538:65:0;;;18374:21:1;18431:2;18411:18;;;18404:30;18470:33;18450:18;;;18443:61;18521:18;;18538:65:0;18364:181:1;18538:65:0;18694:6;18678:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;18711:18:0;;:9;:18;;;;;;;;;;:28;;18733:6;;18711:9;:28;;18733:6;;18711:28;:::i;:::-;;;;-1:-1:-1;;18755:37:0;;18696:25:1;;;-1:-1:-1;;;;;18755:37:0;;;18772:1;;18755:37;;18684:2:1;18669:18;18755:37:0;;;;;;;18805:48;40427:321;19194:591;-1:-1:-1;;;;;19278:21:0;;19270:67;;;;-1:-1:-1;;;19270:67:0;;15341:2:1;19270:67:0;;;15323:21:1;15380:2;15360:18;;;15353:30;15419:34;15399:18;;;15392:62;-1:-1:-1;;;15470:18:1;;;15463:31;15511:19;;19270:67:0;15313:223:1;19270:67:0;-1:-1:-1;;;;;19437:18:0;;19412:22;19437:18;;;;;;;;;;;19474:24;;;;19466:71;;;;-1:-1:-1;;;19466:71:0;;8720:2:1;19466:71:0;;;8702:21:1;8759:2;8739:18;;;8732:30;8798:34;8778:18;;;8771:62;-1:-1:-1;;;8849:18:1;;;8842:32;8891:19;;19466:71:0;8692:224:1;19466:71:0;-1:-1:-1;;;;;19573:18:0;;:9;:18;;;;;;;;;;19594:23;;;19573:44;;19639:12;:22;;19611:6;;19573:9;19639:22;;19611:6;;19639:22;:::i;:::-;;;;-1:-1:-1;;19679:37:0;;18696:25:1;;;19705:1:0;;-1:-1:-1;;;;;19679:37:0;;;;;18684:2:1;18669:18;19679:37:0;;;;;;;19729:48;40427:321;14:694:1;;121:3;114:4;106:6;102:17;98:27;88:2;;143:5;136;129:20;88:2;183:6;170:20;209:4;233:60;249:43;289:2;249:43;:::i;:::-;233:60;:::i;:::-;327:15;;;358:12;;;;390:15;;;436:11;;;424:24;;420:33;;417:42;-1:-1:-1;414:2:1;;;476:5;469;462:20;414:2;502:5;516:163;530:2;527:1;524:9;516:163;;;587:17;;575:30;;625:12;;;;657;;;;548:1;541:9;516:163;;;-1:-1:-1;697:5:1;;78:630;-1:-1:-1;;;;;;;78:630:1:o;713:257::-;;825:2;813:9;804:7;800:23;796:32;793:2;;;846:6;838;831:22;793:2;890:9;877:23;909:31;934:5;909:31;:::i;:::-;959:5;783:187;-1:-1:-1;;;783:187:1:o;975:261::-;;1098:2;1086:9;1077:7;1073:23;1069:32;1066:2;;;1119:6;1111;1104:22;1066:2;1156:9;1150:16;1175:31;1200:5;1175:31;:::i;1241:398::-;;;1370:2;1358:9;1349:7;1345:23;1341:32;1338:2;;;1391:6;1383;1376:22;1338:2;1435:9;1422:23;1454:31;1479:5;1454:31;:::i;:::-;1504:5;-1:-1:-1;1561:2:1;1546:18;;1533:32;1574:33;1533:32;1574:33;:::i;:::-;1626:7;1616:17;;;1328:311;;;;;:::o;1644:466::-;;;;1790:2;1778:9;1769:7;1765:23;1761:32;1758:2;;;1811:6;1803;1796:22;1758:2;1855:9;1842:23;1874:31;1899:5;1874:31;:::i;:::-;1924:5;-1:-1:-1;1981:2:1;1966:18;;1953:32;1994:33;1953:32;1994:33;:::i;:::-;1748:362;;2046:7;;-1:-1:-1;;;2100:2:1;2085:18;;;;2072:32;;1748:362::o;2115:325::-;;;2244:2;2232:9;2223:7;2219:23;2215:32;2212:2;;;2265:6;2257;2250:22;2212:2;2309:9;2296:23;2328:31;2353:5;2328:31;:::i;:::-;2378:5;2430:2;2415:18;;;;2402:32;;-1:-1:-1;;;2202:238:1:o;2445:1282::-;;;2624:2;2612:9;2603:7;2599:23;2595:32;2592:2;;;2645:6;2637;2630:22;2592:2;2690:9;2677:23;2719:18;2760:2;2752:6;2749:14;2746:2;;;2781:6;2773;2766:22;2746:2;2824:6;2813:9;2809:22;2799:32;;2869:7;2862:4;2858:2;2854:13;2850:27;2840:2;;2896:6;2888;2881:22;2840:2;2937;2924:16;2959:4;2983:60;2999:43;3039:2;2999:43;:::i;2983:60::-;3077:15;;;3108:12;;;;3140:11;;;3178;;;3170:20;;3166:29;;3163:42;-1:-1:-1;3160:2:1;;;3223:6;3215;3208:22;3160:2;3250:6;3241:15;;3265:238;3279:2;3276:1;3273:9;3265:238;;;3350:3;3337:17;3367:31;3392:5;3367:31;:::i;:::-;3411:18;;3297:1;3290:9;;;;;3449:12;;;;3481;;3265:238;;;-1:-1:-1;3522:5:1;-1:-1:-1;;3565:18:1;;3552:32;;-1:-1:-1;;3596:16:1;;;3593:2;;;3630:6;3622;3615:22;3593:2;;3658:63;3713:7;3702:8;3691:9;3687:24;3658:63;:::i;:::-;3648:73;;;2582:1145;;;;;:::o;3732:938::-;;3858:2;3901;3889:9;3880:7;3876:23;3872:32;3869:2;;;3922:6;3914;3907:22;3869:2;3960:9;3954:16;3993:18;3985:6;3982:30;3979:2;;;4030:6;4022;4015:22;3979:2;4058:22;;4111:4;4103:13;;4099:27;-1:-1:-1;4089:2:1;;4145:6;4137;4130:22;4089:2;4179;4173:9;4202:60;4218:43;4258:2;4218:43;:::i;4202:60::-;4296:15;;;4327:12;;;;4359:11;;;4397;;;4389:20;;4385:29;;4382:42;-1:-1:-1;4379:2:1;;;4442:6;4434;4427:22;4379:2;4469:6;4460:15;;4484:156;4498:2;4495:1;4492:9;4484:156;;;4555:10;;4543:23;;4516:1;4509:9;;;;;4586:12;;;;4618;;4484:156;;;-1:-1:-1;4659:5:1;3838:832;-1:-1:-1;;;;;;;3838:832:1:o;4675:190::-;;4787:2;4775:9;4766:7;4762:23;4758:32;4755:2;;;4808:6;4800;4793:22;4755:2;-1:-1:-1;4836:23:1;;4745:120;-1:-1:-1;4745:120:1:o;4870:194::-;;4993:2;4981:9;4972:7;4968:23;4964:32;4961:2;;;5014:6;5006;4999:22;4961:2;-1:-1:-1;5042:16:1;;4951:113;-1:-1:-1;4951:113:1:o;5069:395::-;;;;;5232:3;5220:9;5211:7;5207:23;5203:33;5200:2;;;5254:6;5246;5239:22;5200:2;-1:-1:-1;;5282:23:1;;;5352:2;5337:18;;5324:32;;-1:-1:-1;5403:2:1;5388:18;;5375:32;;5454:2;5439:18;5426:32;;-1:-1:-1;5190:274:1;-1:-1:-1;5190:274:1:o;5677:282::-;-1:-1:-1;;;;;5877:32:1;;;;5859:51;;5941:2;5926:18;;5919:34;5847:2;5832:18;;5814:145::o;6435:603::-;;6576:2;6605;6594:9;6587:21;6637:6;6631:13;6680:6;6675:2;6664:9;6660:18;6653:34;6705:4;6718:140;6732:6;6729:1;6726:13;6718:140;;;6827:14;;;6823:23;;6817:30;6793:17;;;6812:2;6789:26;6782:66;6747:10;;6718:140;;;6876:6;6873:1;6870:13;6867:2;;;6946:4;6941:2;6932:6;6921:9;6917:22;6913:31;6906:45;6867:2;-1:-1:-1;7022:2:1;7001:15;-1:-1:-1;;6997:29:1;6982:45;;;;7029:2;6978:54;;6556:482;-1:-1:-1;;;6556:482:1:o;13708:356::-;13910:2;13892:21;;;13929:18;;;13922:30;13988:34;13983:2;13968:18;;13961:62;14055:2;14040:18;;13882:182::o;14426:352::-;14628:2;14610:21;;;14667:2;14647:18;;;14640:30;14706;14701:2;14686:18;;14679:58;14769:2;14754:18;;14600:178::o;16711:355::-;16913:2;16895:21;;;16952:2;16932:18;;;16925:30;16991:33;16986:2;16971:18;;16964:61;17057:2;17042:18;;16885:181::o;18921:275::-;18992:2;18986:9;19057:2;19038:13;;-1:-1:-1;;19034:27:1;19022:40;;19092:18;19077:34;;19113:22;;;19074:62;19071:2;;;19139:18;;:::i;:::-;19175:2;19168:22;18966:230;;-1:-1:-1;18966:230:1:o;19201:186::-;;19294:18;19286:6;19283:30;19280:2;;;19316:18;;:::i;:::-;-1:-1:-1;19376:4:1;19357:17;;;19353:28;;19270:117::o;19392:128::-;;19463:1;19459:6;19456:1;19453:13;19450:2;;;19469:18;;:::i;:::-;-1:-1:-1;19505:9:1;;19440:80::o;19525:120::-;;19591:1;19581:2;;19596:18;;:::i;:::-;-1:-1:-1;19630:9:1;;19571:74::o;19650:168::-;;19756:1;19752;19748:6;19744:14;19741:1;19738:21;19733:1;19726:9;19719:17;19715:45;19712:2;;;19763:18;;:::i;:::-;-1:-1:-1;19803:9:1;;19702:116::o;19823:125::-;;19891:1;19888;19885:8;19882:2;;;19896:18;;:::i;:::-;-1:-1:-1;19933:9:1;;19872:76::o;19953:380::-;20038:1;20028:12;;20085:1;20075:12;;;20096:2;;20150:4;20142:6;20138:17;20128:27;;20096:2;20203;20195:6;20192:14;20172:18;20169:38;20166:2;;;20249:10;20244:3;20240:20;20237:1;20230:31;20284:4;20281:1;20274:15;20312:4;20309:1;20302:15;20166:2;;20008:325;;;:::o;20338:135::-;;-1:-1:-1;;20398:17:1;;20395:2;;;20418:18;;:::i;:::-;-1:-1:-1;20465:1:1;20454:13;;20385:88::o;20478:112::-;;20536:1;20526:2;;20541:18;;:::i;:::-;-1:-1:-1;20575:9:1;;20516:74::o;20595:127::-;20656:10;20651:3;20647:20;20644:1;20637:31;20687:4;20684:1;20677:15;20711:4;20708:1;20701:15;20727:127;20788:10;20783:3;20779:20;20776:1;20769:31;20819:4;20816:1;20809:15;20843:4;20840:1;20833:15;20859:127;20920:10;20915:3;20911:20;20908:1;20901:31;20951:4;20948:1;20941:15;20975:4;20972:1;20965:15;20991:131;-1:-1:-1;;;;;21066:31:1;;21056:42;;21046:2;;21112:1;21109;21102:12
Swarm Source
ipfs://52b4ad2919bfc51da21b6cbf16b41dfaecf35ea495d41e4b847d055f57c42d16
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.