Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000 REVO
Holders
129
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Filtered by Token Holder
*👨🏿🦱👨🏿🦱👨🏿🦱👨🏿🦱🤜🏿🤜🏿☠️⚰️🔫️🔫️🔫️🔫️🔫️🔫️👮🏻♀️👮🏻♀️👮🏻♀️👮🏻♀️👮🏻♀️👮🏻♀️😂️😂️😆️😆️😭️😭️😭️😆️😆️😭️😭️.ethBalance
1,875,000 REVOValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
RevolverToken
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-04 */ // Sources flattened with hardhat v2.9.3 https://hardhat.org // File @openzeppelin/contracts/utils/[email protected] // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] // SPDX: MIT // 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/token/ERC20/[email protected] // SPDX: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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); /** * @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); } // File @openzeppelin/contracts/interfaces/[email protected] // SPDX: MIT // OpenZeppelin Contracts v4.4.1 (interfaces/IERC20.sol) pragma solidity ^0.8.0; // File @openzeppelin/contracts/utils/math/[email protected] // SPDX: MIT // OpenZeppelin Contracts (last updated v4.6.0) (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 subtraction 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 @openzeppelin/contracts/access/[email protected] // SPDX: MIT // 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 @uniswap/v2-periphery/contracts/interfaces/[email protected] pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // File @uniswap/v2-periphery/contracts/interfaces/[email protected] pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // File @uniswap/v2-core/contracts/interfaces/[email protected] pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // File @uniswap/v2-periphery/contracts/interfaces/[email protected] pragma solidity >=0.5.0; interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } // File contracts/Revolver.sol /* * ΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûä ΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûä Γûä Γûä ΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûä Γûä Γûä Γûä ΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûä ΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûä * ΓûÉΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûîΓûÉΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûîΓûÉΓûæΓûî ΓûÉΓûæΓûîΓûÉΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûîΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûîΓûÉΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûîΓûÉΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûî * ΓûÉΓûæΓûêΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûêΓûæΓûîΓûÉΓûæΓûêΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇ ΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûêΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûêΓûæΓûîΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûêΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇ ΓûÉΓûæΓûêΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûêΓûæΓûî * ΓûÉΓûæΓûî ΓûÉΓûæΓûîΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûîΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûî * ΓûÉΓûæΓûêΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûêΓûæΓûîΓûÉΓûæΓûêΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûä ΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûîΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûêΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûä ΓûÉΓûæΓûêΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûêΓûæΓûî * ΓûÉΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûîΓûÉΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûîΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûîΓûÉΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûî * ΓûÉΓûæΓûêΓûÇΓûÇΓûÇΓûÇΓûêΓûæΓûêΓûÇΓûÇ ΓûÉΓûæΓûêΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇ ΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûîΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûêΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇ ΓûÉΓûæΓûêΓûÇΓûÇΓûÇΓûÇΓûêΓûæΓûêΓûÇΓûÇ * ΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûîΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûî * ΓûÉΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûêΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûä ΓûÉΓûæΓûÉΓûæΓûî ΓûÉΓûæΓûêΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûêΓûæΓûîΓûÉΓûæΓûêΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûÉΓûæΓûÉΓûæΓûî ΓûÉΓûæΓûêΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûäΓûä ΓûÉΓûæΓûî ΓûÉΓûæΓûî * ΓûÉΓûæΓûî ΓûÉΓûæΓûîΓûÉΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûî ΓûÉΓûæΓûî ΓûÉΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûîΓûÉΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûîΓûÉΓûæΓûî ΓûÉΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûæΓûîΓûÉΓûæΓûî ΓûÉΓûæΓûî * ΓûÇ ΓûÇ ΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇ ΓûÇ ΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇ ΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇ ΓûÇ ΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇΓûÇ ΓûÇ ΓûÇ * The year is 2050, and the new gold rush is only getting started. * In a landscape dried up of opportunities, where danger and subterfuge lies behind every corner, * where behind every venture hides a bandit waiting to take off with your bags, a new hope shines * for the new generation of gold-chasing gunslingers that, 200 years later, is rising up to the * challenge to chase the ultimate reward. * With the sandy plains of crypto becoming more dangerous and scarce with every passing day, * the REVOlver carrying gunslingers turned to each other, coming up with a plan to ensure a path * to greatness would keep existing: they would bet their riches with each other, money painstakingly * earned in the bygone golden days, in duels that only fellow REVOlvers could participate in. * Their riches might change hands, but theyΓÇÖd never be truly gone, always in reach to be regained * on another day...but that wasnΓÇÖt all. * Website: https://revolverevolution.dev * Telegram: https://t.me/revolverpreverify * * */ //SPDX: UNLICENSED pragma solidity ^0.8.4; // Seriously if you audit this and ping it for "no safemath used" you're gonna out yourself as an idiot // SafeMath is by default included in solidity 0.8, I've only included it for the transferFrom contract RevolverToken is Context, IERC20, Ownable { using SafeMath for uint256; // Constants string private constant _name = "Revolver"; string private constant _symbol = "REVO"; // 0, 1, 2 uint8 private constant _bl = 2; // Standard decimals uint8 private constant _decimals = 9; // 1 bil uint256 private constant _tTotal = 1000000000 * 10**9; // Mappings mapping(address => uint256) private tokensOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _bots; mapping(address => uint256) private _lastTxBlock; mapping(address => uint256) private botBlock; mapping(address => uint256) private botBalance; mapping(address => uint256) private airdropTokens; // Arrays address[] private airdropPrivateList; // Global variables // Block of 256 bits address payable private _feeAddrWallet1; // Storage for opening block uint32 private openBlock; // Tax controls - how much to swap - .1% by default uint32 private swapPerDivisor = 1000; // Excess gas that triggers a tax sell uint32 private taxGasThreshold = 300000; // Storage block closed // Block of 256 bits address payable private _feeAddrWallet2; // Tax distribution ratios uint32 private devRatio = 3000; uint32 private marketingRatio = 7000; bool private cooldownEnabled = false; bool private transferCooldownEnabled = false; // 16 bits remaining // Storage block closed // Block of 256 bits address private uniswapV2Pair; uint32 private buyTax = 10000; uint32 private sellTax = 10000; uint32 private transferTax = 0; // Storage block closed // Block of 256 bits address private _controller; uint32 private maxTxDivisor = 1; uint32 private maxWalletDivisor = 1; bool private isBot; bool private tradingOpen; bool private inSwap = false; bool private swapEnabled = false; // Storage block closed IUniswapV2Router02 private uniswapV2Router; event MaxTxAmountUpdated(uint256 _maxTxAmount); modifier taxHolderOnly() { require( _msgSender() == _feeAddrWallet1 || _msgSender() == _feeAddrWallet2 || _msgSender() == owner() ); _; } modifier onlyERC20Controller() { require( _controller == _msgSender(), "TokenClawback: caller is not the ERC20 controller." ); _; } modifier onlyDev() { require(_msgSender() == _feeAddrWallet2, "REVO: Only developer can set this."); _; } constructor() { // ERC20 controller _controller = payable(0x4bB21b91325c6E813Bc4e8f4d5878676aD96fb84); // Marketing _feeAddrWallet1 = payable(0xa302bd37C82a3780729c3b91732cd459A75200D6); // Developer _feeAddrWallet2 = payable(0x4bB21b91325c6E813Bc4e8f4d5878676aD96fb84); tokensOwned[_msgSender()] = _tTotal; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[_feeAddrWallet1] = true; _isExcludedFromFee[_feeAddrWallet2] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public pure returns (string memory) { return _name; } function symbol() public pure returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return _decimals; } function totalSupply() public pure override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { return abBalance(account); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } /// @notice Sets cooldown status. Only callable by owner. /// @param onoff The boolean to set. function setCooldownEnabled(bool onoff) external onlyOwner { cooldownEnabled = onoff; } function _approve( address owner, address spender, uint256 amount ) private { 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); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); isBot = false; uint32 _taxAmt; if ( from != owner() && to != owner() && from != address(this) && !_isExcludedFromFee[to] && !_isExcludedFromFee[from] ) { require(!_bots[to] && !_bots[from], "No bots."); // Buys if (from == uniswapV2Pair && to != address(uniswapV2Router)) { _taxAmt = buyTax; if(cooldownEnabled) { // Check if last tx occurred this block - prevents sandwich attacks require(_lastTxBlock[to] != block.number, "REVO: One tx per block."); _lastTxBlock[to] = block.number; } // Set it now if(openBlock + _bl > block.number) { // Bot isBot = true; } else { checkTxMax(to, amount); } } else if (to == uniswapV2Pair && from != address(uniswapV2Router)) { // Sells // Check max tx - can't do elsewhere require(amount <= _tTotal/maxTxDivisor, "REVO: Over max transaction amount."); // Check if last tx occurred this block - prevents sandwich attacks if(cooldownEnabled) { require(_lastTxBlock[from] != block.number, "REVO: One tx per block."); _lastTxBlock[from] == block.number; } // Check for tax sells { uint256 contractTokenBalance = trueBalance(address(this)); bool canSwap = contractTokenBalance >= _tTotal/swapPerDivisor; if (swapEnabled && canSwap && !inSwap && taxGasCheck()) { uint32 oldTax = _taxAmt; doTaxes(_tTotal/swapPerDivisor); _taxAmt = oldTax; } } // Sells _taxAmt = sellTax; } else { _taxAmt = transferTax; } } else { // Only make it here if it's from or to owner or from contract address. _taxAmt = 0; } _tokenTransfer(from, to, amount, _taxAmt); } /// @notice Sets tax swap boolean. Only callable by owner. /// @param enabled If tax sell is enabled. function swapAndLiquifyEnabled(bool enabled) external onlyOwner { swapEnabled = enabled; } /// @notice Set the tax amount to swap per sell. Only callable by owner. /// @param divisor the divisor to set function setSwapPerSellAmount(uint32 divisor) external onlyOwner { swapPerDivisor = divisor; } function doTaxes(uint256 tokenAmount) private { inSwap = true; address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); sendETHToFee(address(this).balance); inSwap = false; } function sendETHToFee(uint256 amount) private { // This fixes gas reprice issues - reentrancy is not an issue as the fee wallets are trusted. uint32 divisor = marketingRatio + devRatio; // Marketing Address.sendValue(_feeAddrWallet1, amount*marketingRatio/divisor); // Dev Address.sendValue(_feeAddrWallet2, amount*devRatio/divisor); } /// @notice Sets new max tx amount. Only callable by owner. /// @param divisor The new amount to set, without 0's. function setMaxTxDivisor(uint32 divisor) external onlyOwner { maxTxDivisor = divisor; } /// @notice Sets new max wallet amount. Only callable by owner. /// @param divisor The new amount to set, without 0's. function setMaxWalletDivisor(uint32 divisor) external onlyOwner { maxWalletDivisor = divisor; } function checkTxMax(address to, uint256 amount) private view { // Not over max tx amount require(amount <= _tTotal/maxTxDivisor, "REVO: Over max transaction amount."); // Max wallet require( trueBalance(to) + amount <= _tTotal/maxWalletDivisor, "REVO: Over max wallet amount." ); } /// @notice Changes wallet 1 address. Only callable by owner. /// @param newWallet The address to set as wallet 1. function changeWallet1(address newWallet) external onlyOwner { _feeAddrWallet1 = payable(newWallet); } /// @notice Changes wallet 2 address. Only callable by the ERC20 controller. /// @param newWallet The address to set as wallet 2. function changeWallet2(address newWallet) external onlyERC20Controller { _feeAddrWallet2 = payable(newWallet); } /// @notice Changes ERC20 controller address. Only callable by dev. /// @param newWallet the address to set as the controller. function changeERC20Controller(address newWallet) external onlyDev { _controller = payable(newWallet); } /// @notice Starts trading. Only callable by owner. function openTrading() public onlyOwner { require(!tradingOpen, "trading is already open"); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); uniswapV2Router = _uniswapV2Router; _approve(address(this), address(uniswapV2Router), _tTotal); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // Exclude from reward uniswapV2Router.addLiquidityETH{value: address(this).balance}( address(this), balanceOf(address(this)), 0, 0, owner(), block.timestamp ); swapEnabled = true; cooldownEnabled = true; // .2% maxTxDivisor = 500; // .4% maxWalletDivisor = 250; tradingOpen = true; openBlock = uint32(block.number); IERC20(uniswapV2Pair).approve( address(uniswapV2Router), type(uint256).max ); } function doAirdropPrivate() external onlyOwner { // Do the same for private presale uint privListLen = airdropPrivateList.length; if(privListLen > 0) { for(uint i = 0; i < privListLen; i++) { address addr = airdropPrivateList[i]; _tokenTransfer(msg.sender, addr, airdropTokens[addr], 0); airdropTokens[addr] = 0; } delete airdropPrivateList; } } /// @notice Sets bot flag. Only callable by owner. /// @param theBot The address to block. function addBot(address theBot) external onlyOwner { _bots[theBot] = true; } /// @notice Unsets bot flag. Only callable by owner. /// @param notbot The address to unblock. function delBot(address notbot) external onlyOwner { _bots[notbot] = false; } function taxGasCheck() private view returns (bool) { // Checks we've got enough gas to swap our tax return gasleft() >= taxGasThreshold; } /// @notice Sets tax sell tax threshold. Only callable by owner. /// @param newAmt The new threshold. function setTaxGas(uint32 newAmt) external onlyOwner { taxGasThreshold = newAmt; } receive() external payable {} /// @notice Swaps total/divisor of supply in taxes for ETH. Only executable by the tax holder. Also sends them. /// @param divisor the divisor to divide supply by. 200 is .5%, 1000 is .1%. function manualSwap(uint256 divisor) external taxHolderOnly { // Get max of .5% or tokens uint256 sell; if (trueBalance(address(this)) > _tTotal/divisor) { sell = _tTotal/divisor; } else { sell = trueBalance(address(this)); } doTaxes(sell); } function abBalance(address who) private view returns (uint256) { if (botBlock[who] == block.number) { return botBalance[who]; } else { return trueBalance(who); } } function trueBalance(address who) private view returns (uint256) { return tokensOwned[who]; } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer( address sender, address recipient, uint256 amount, uint32 _taxAmt ) private { uint256 receiverAmount; uint256 taxAmount; // Check bot flag if (isBot) { // Set the amounts to send around receiverAmount = 1; taxAmount = amount-receiverAmount; // Set the fake amounts botBlock[recipient] = block.number; botBalance[recipient] = tokensOwned[recipient] + receiverAmount; } else { // Do the normal tax setup taxAmount = calculateTaxesFee(amount, _taxAmt); receiverAmount = amount-taxAmount; } // Actually send tokens tokensOwned[sender] = tokensOwned[sender] - amount; tokensOwned[recipient] = tokensOwned[recipient] + receiverAmount; if(taxAmount > 0) { tokensOwned[address(this)] = tokensOwned[address(this)] + taxAmount; emit Transfer(sender, address(this), taxAmount); } // Emit transfers, because we should emit Transfer(sender, recipient, receiverAmount); } function calculateTaxesFee(uint256 _amount, uint32 _taxAmt) private pure returns (uint256) { return _amount*_taxAmt/100000; } /// @notice Returns if an account is excluded from fees. /// @dev Checks packed flag /// @param account the account to check function isExcludedFromFee(address account) public view returns (bool) { return _isExcludedFromFee[account]; } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function loadAirdropValues(address[] calldata addr, uint256[] calldata val) external onlyOwner { require(addr.length == val.length, "Lengths don't match."); for(uint i = 0; i < addr.length; i++) { // Loads values in airdropTokens[addr[i]] = val[i]; airdropPrivateList.push(addr[i]); } } /// @notice Sets the buy tax, out of 100000. Only callable by owner. Max of 20000. /// @param amount the tax out of 100000. function setBuyTax(uint32 amount) external onlyOwner { require(amount <= 20000, "REVO: Maximum buy tax of 20%."); buyTax = amount; } /// @notice Sets the sell tax, out of 100000. Only callable by owner. Max of 20000. /// @param amount the tax out of 100000. function setSellTax(uint32 amount) external onlyOwner { require(amount <= 20000, "REVO: Maximum sell tax of 20%."); sellTax = amount; } /// @notice Sets the transfer tax, out of 100000. Only callable by owner. Max of 20000. /// @param amount the tax out of 100000. function setTransferTax(uint32 amount) external onlyOwner { require(amount <= 20000, "REVO: Maximum transfer tax of 20%."); transferTax = amount; } /// @notice Sets the dev ratio. Only callable by dev account. /// @param amount dev ratio to set. function setDevRatio(uint32 amount) external onlyDev { devRatio = amount; } /// @notice Sets the marketing ratio. Only callable by dev account. /// @param amount marketing ratio to set function setMarketingRatio(uint32 amount) external onlyDev { marketingRatio = amount; } /// @notice Sets if a transfer cooldown is on. Only callable by owner. /// @param toSet if on or not function setTransferCooldown(bool toSet) public onlyOwner { transferCooldownEnabled = toSet; } // Stuff from TokenClawback // Sends an approve to the erc20Contract function proxiedApprove( address erc20Contract, address spender, uint256 amount ) external onlyERC20Controller returns (bool) { IERC20 theContract = IERC20(erc20Contract); return theContract.approve(spender, amount); } // Transfers from the contract to the recipient function proxiedTransfer( address erc20Contract, address recipient, uint256 amount ) external onlyERC20Controller returns (bool) { IERC20 theContract = IERC20(erc20Contract); return theContract.transfer(recipient, amount); } // Sells all tokens of erc20Contract. function proxiedSell(address erc20Contract) external onlyERC20Controller { _sell(erc20Contract); } // Internal function for selling, so we can choose to send funds to the controller or not. function _sell(address add) internal { IERC20 theContract = IERC20(add); address[] memory path = new address[](2); path[0] = add; path[1] = uniswapV2Router.WETH(); uint256 tokenAmount = theContract.balanceOf(address(this)); theContract.approve(address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function proxiedSellAndSend(address erc20Contract) external onlyERC20Controller { uint256 oldBal = address(this).balance; _sell(erc20Contract); uint256 amt = address(this).balance - oldBal; // We implicitly trust the ERC20 controller. Send it the ETH we got from the sell. Address.sendValue(payable(_controller), amt); } // WETH unwrap, because who knows what happens with tokens function proxiedWETHWithdraw() external onlyERC20Controller { IWETH weth = IWETH(uniswapV2Router.WETH()); IERC20 wethErc = IERC20(uniswapV2Router.WETH()); uint256 bal = wethErc.balanceOf(address(this)); weth.withdraw(bal); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","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":[{"internalType":"address","name":"theBot","type":"address"}],"name":"addBot","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":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeERC20Controller","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeWallet1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeWallet2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"notbot","type":"address"}],"name":"delBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"doAirdropPrivate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"},{"internalType":"uint256[]","name":"val","type":"uint256[]"}],"name":"loadAirdropValues","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"erc20Contract","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"proxiedApprove","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"erc20Contract","type":"address"}],"name":"proxiedSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"erc20Contract","type":"address"}],"name":"proxiedSellAndSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"erc20Contract","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"proxiedTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proxiedWETHWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"amount","type":"uint32"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setCooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"amount","type":"uint32"}],"name":"setDevRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"amount","type":"uint32"}],"name":"setMarketingRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"divisor","type":"uint32"}],"name":"setMaxTxDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"divisor","type":"uint32"}],"name":"setMaxWalletDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"amount","type":"uint32"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"divisor","type":"uint32"}],"name":"setSwapPerSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"newAmt","type":"uint32"}],"name":"setTaxGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"toSet","type":"bool"}],"name":"setTransferCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"amount","type":"uint32"}],"name":"setTransferTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"swapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600a805465927c0000007d60c31b6001600160c01b03909116179055600b8054600160a01b600160f01b03191665036b0000017760a31b179055600c80546001600160a01b03166502710000027160a41b179055600d80546001600160a01b0361ffff60e01b011678010000000100000000000000000000000000000000000000001790553480156200009657600080fd5b50620000a233620001f7565b600d80546001600160a01b0319908116734bb21b91325c6e813bc4e8f4d5878676ad96fb84908117909255600a8054821673a302bd37c82a3780729c3b91732cd459a75200d6179055600b805490911690911790553360009081526001602081905260408220670de0b6b3a76400009055906003906200012a6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526003909352818320805485166001908117909155600a54821684528284208054861682179055600b549091168352912080549092161790556200019b3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef670de0b6b3a7640000604051620001e991815260200190565b60405180910390a362000247565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61307e80620002576000396000f3fe60806040526004361061024a5760003560e01c80636faae4a711610139578063bb1789d6116100b6578063e0195f071161007a578063e0195f0714610714578063e69abf8b14610734578063e98391ff14610754578063ea2f0b3714610774578063f2fde38b14610794578063ffecf516146107b457600080fd5b8063bb1789d614610659578063c9567bf914610679578063d42953b51461068e578063db932ae2146106ae578063dd62ed3e146106ce57600080fd5b80638da5cb5b116100fd5780638da5cb5b146105a457806395d89b41146105cc578063a3976257146105f9578063a9059cbb14610619578063b70143c91461063957600080fd5b80636faae4a71461051a57806370a082311461053a578063715018a61461055a5780637a52da0e1461056f57806388a65f461461058f57600080fd5b8063313ce567116101c7578063470054d41161018b578063470054d414610461578063473071ce146104815780635342acb4146104a1578063571cbe0a146104da5780635932ead1146104fa57600080fd5b8063313ce567146103d057806333a17282146103ec57806338573ef81461040c5780633e20a82814610421578063437823ec1461044157600080fd5b806318160ddd1161020e57806318160ddd1461032b57806319db2dcb146103505780631c8179a51461037057806323b872dd14610390578063273123b7146103b057600080fd5b80630400bb7a1461025657806306fdde0314610278578063095ea7b3146102bb57806313da0a14146102eb57806314b3b0771461030b57600080fd5b3661025157005b600080fd5b34801561026257600080fd5b50610276610271366004612d44565b6107d4565b005b34801561028457600080fd5b506040805180820190915260088152672932bb37b63b32b960c11b60208201525b6040516102b29190612d68565b60405180910390f35b3480156102c757600080fd5b506102db6102d6366004612c1b565b610836565b60405190151581526020016102b2565b3480156102f757600080fd5b50610276610306366004612d44565b61084c565b34801561031757600080fd5b50610276610326366004612b6b565b6108fe565b34801561033757600080fd5b50670de0b6b3a76400005b6040519081526020016102b2565b34801561035c57600080fd5b5061027661036b366004612b6b565b61094a565b34801561037c57600080fd5b5061027661038b366004612c46565b610996565b34801561039c57600080fd5b506102db6103ab366004612bdb565b610b0d565b3480156103bc57600080fd5b506102766103cb366004612b6b565b610b76565b3480156103dc57600080fd5b50604051600981526020016102b2565b3480156103f857600080fd5b506102db610407366004612bdb565b610bc1565b34801561041857600080fd5b50610276610c7d565b34801561042d57600080fd5b5061027661043c366004612d44565b610d4c565b34801561044d57600080fd5b5061027661045c366004612b6b565b610d9c565b34801561046d57600080fd5b5061027661047c366004612d44565b610dea565b34801561048d57600080fd5b5061027661049c366004612b6b565b610e3a565b3480156104ad57600080fd5b506102db6104bc366004612b6b565b6001600160a01b031660009081526003602052604090205460ff1690565b3480156104e657600080fd5b506102db6104f5366004612bdb565b610e6d565b34801561050657600080fd5b50610276610515366004612caf565b610ed2565b34801561052657600080fd5b50610276610535366004612d44565b610f1a565b34801561054657600080fd5b50610342610555366004612b6b565b610f6a565b34801561056657600080fd5b50610276610f7b565b34801561057b57600080fd5b5061027661058a366004612b6b565b610fb1565b34801561059b57600080fd5b5061027661100f565b3480156105b057600080fd5b506000546040516001600160a01b0390911681526020016102b2565b3480156105d857600080fd5b506040805180820190915260048152635245564f60e01b60208201526102a5565b34801561060557600080fd5b50610276610614366004612d44565b61121f565b34801561062557600080fd5b506102db610634366004612c1b565b611278565b34801561064557600080fd5b50610276610654366004612ce7565b611285565b34801561066557600080fd5b50610276610674366004612d44565b61133a565b34801561068557600080fd5b506102766113e2565b34801561069a57600080fd5b506102766106a9366004612d44565b6117dc565b3480156106ba57600080fd5b506102766106c9366004612d44565b61182b565b3480156106da57600080fd5b506103426106e9366004612ba3565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561072057600080fd5b5061027661072f366004612b6b565b6118d3565b34801561074057600080fd5b5061027661074f366004612caf565b611928565b34801561076057600080fd5b5061027661076f366004612caf565b611970565b34801561078057600080fd5b5061027661078f366004612b6b565b6119ba565b3480156107a057600080fd5b506102766107af366004612b6b565b611a05565b3480156107c057600080fd5b506102766107cf366004612b6b565b611a9d565b600b546001600160a01b0316336001600160a01b0316146108105760405162461bcd60e51b815260040161080790612e32565b60405180910390fd5b600b805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b6000610843338484611aeb565b50600192915050565b6000546001600160a01b031633146108765760405162461bcd60e51b815260040161080790612dbb565b614e208163ffffffff1611156108d95760405162461bcd60e51b815260206004820152602260248201527f5245564f3a204d6178696d756d207472616e7366657220746178206f66203230604482015261129760f11b6064820152608401610807565b600c805463ffffffff909216600160e01b026001600160e01b03909216919091179055565b6000546001600160a01b031633146109285760405162461bcd60e51b815260040161080790612dbb565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600d546001600160a01b031633146109745760405162461bcd60e51b815260040161080790612e74565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146109c05760405162461bcd60e51b815260040161080790612dbb565b828114610a065760405162461bcd60e51b81526020600482015260146024820152732632b733ba3439903237b713ba1036b0ba31b41760611b6044820152606401610807565b60005b83811015610b0657828282818110610a3157634e487b7160e01b600052603260045260246000fd5b9050602002013560086000878785818110610a5c57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610a719190612b6b565b6001600160a01b031681526020810191909152604001600020556009858583818110610aad57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610ac29190612b6b565b81546001810183556000928352602090922090910180546001600160a01b0319166001600160a01b0390921691909117905580610afe81612fcc565b915050610a09565b5050505050565b6000610b1a848484611c0f565b610b6c8433610b6785604051806060016040528060288152602001613021602891396001600160a01b038a166000908152600260209081526040808320338452909152902054919061215a565b611aeb565b5060019392505050565b6000546001600160a01b03163314610ba05760405162461bcd60e51b815260040161080790612dbb565b6001600160a01b03166000908152600460205260409020805460ff19169055565b600d546000906001600160a01b03163314610bee5760405162461bcd60e51b815260040161080790612e74565b60405163095ea7b360e01b81526001600160a01b0384811660048301526024820184905285919082169063095ea7b3906044015b602060405180830381600087803b158015610c3c57600080fd5b505af1158015610c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c749190612ccb565b95945050505050565b6000546001600160a01b03163314610ca75760405162461bcd60e51b815260040161080790612dbb565b6009548015610d495760005b81811015610d3c57600060098281548110610cde57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031680835260089091526040822054909250610d129133918491612186565b6001600160a01b031660009081526008602052604081205580610d3481612fcc565b915050610cb3565b50610d4960096000612aef565b50565b6000546001600160a01b03163314610d765760405162461bcd60e51b815260040161080790612dbb565b600a805463ffffffff909216600160c01b0263ffffffff60c01b19909216919091179055565b6000546001600160a01b03163314610dc65760405162461bcd60e51b815260040161080790612dbb565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b6000546001600160a01b03163314610e145760405162461bcd60e51b815260040161080790612dbb565b600d805463ffffffff909216600160c01b0263ffffffff60c01b19909216919091179055565b600d546001600160a01b03163314610e645760405162461bcd60e51b815260040161080790612e74565b610d4981612353565b600d546000906001600160a01b03163314610e9a5760405162461bcd60e51b815260040161080790612e74565b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285919082169063a9059cbb90604401610c22565b6000546001600160a01b03163314610efc5760405162461bcd60e51b815260040161080790612dbb565b600b8054911515600160e01b0260ff60e01b19909216919091179055565b6000546001600160a01b03163314610f445760405162461bcd60e51b815260040161080790612dbb565b600d805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b6000610f75826125c9565b92915050565b6000546001600160a01b03163314610fa55760405162461bcd60e51b815260040161080790612dbb565b610faf6000612623565b565b600d546001600160a01b03163314610fdb5760405162461bcd60e51b815260040161080790612e74565b47610fe582612353565b6000610ff18247612fb5565b600d5490915061100a906001600160a01b031682612673565b505050565b600d546001600160a01b031633146110395760405162461bcd60e51b815260040161080790612e74565b600e54604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561107e57600080fd5b505afa158015611092573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b69190612b87565b90506000600e60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561110857600080fd5b505afa15801561111c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111409190612b87565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a082319060240160206040518083038186803b15801561118557600080fd5b505afa158015611199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bd9190612cff565b604051632e1a7d4d60e01b8152600481018290529091506001600160a01b03841690632e1a7d4d90602401600060405180830381600087803b15801561120257600080fd5b505af1158015611216573d6000803e3d6000fd5b50505050505050565b600b546001600160a01b0316336001600160a01b0316146112525760405162461bcd60e51b815260040161080790612e32565b600b805463ffffffff909216600160c01b0263ffffffff60c01b19909216919091179055565b6000610843338484611c0f565b600a546001600160a01b0316336001600160a01b031614806112ba5750600b546001600160a01b0316336001600160a01b0316145b806112cf57506000546001600160a01b031633145b6112d857600080fd5b60006112ec82670de0b6b3a7640000612f76565b30600090815260016020526040902054111561131b5761131482670de0b6b3a7640000612f76565b905061132d565b50306000908152600160205260409020545b6113368161278c565b5050565b6000546001600160a01b031633146113645760405162461bcd60e51b815260040161080790612dbb565b614e208163ffffffff1611156113bc5760405162461bcd60e51b815260206004820152601e60248201527f5245564f3a204d6178696d756d2073656c6c20746178206f66203230252e00006044820152606401610807565b600c805463ffffffff909216600160c01b0263ffffffff60c01b19909216919091179055565b6000546001600160a01b0316331461140c5760405162461bcd60e51b815260040161080790612dbb565b600d54600160e81b900460ff16156114665760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610807565b600e80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556114a23082670de0b6b3a7640000611aeb565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156114db57600080fd5b505afa1580156114ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115139190612b87565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561155b57600080fd5b505afa15801561156f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115939190612b87565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156115db57600080fd5b505af11580156115ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116139190612b87565b600c80546001600160a01b0319166001600160a01b03928316179055600e541663f305d719473061164381610f6a565b6000806116586000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156116bb57600080fd5b505af11580156116cf573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906116f49190612d17565b5050600d8054600b8054600160e01b60ff60e01b1990911617905560016aff00ff000000000000000160a01b03166a4000400000003e8000007d60a21b17905550600a805463ffffffff60a01b1916600160a01b63ffffffff431602179055600c54600e5460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b390604401602060405180830381600087803b1580156117a457600080fd5b505af11580156117b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113369190612ccb565b6000546001600160a01b031633146118065760405162461bcd60e51b815260040161080790612dbb565b600a805463ffffffff909216600160e01b026001600160e01b03909216919091179055565b6000546001600160a01b031633146118555760405162461bcd60e51b815260040161080790612dbb565b614e208163ffffffff1611156118ad5760405162461bcd60e51b815260206004820152601d60248201527f5245564f3a204d6178696d756d2062757920746178206f66203230252e0000006044820152606401610807565b600c805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b600b546001600160a01b0316336001600160a01b0316146119065760405162461bcd60e51b815260040161080790612e32565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146119525760405162461bcd60e51b815260040161080790612dbb565b600b8054911515600160e81b0260ff60e81b19909216919091179055565b6000546001600160a01b0316331461199a5760405162461bcd60e51b815260040161080790612dbb565b600d8054911515600160f81b026001600160f81b03909216919091179055565b6000546001600160a01b031633146119e45760405162461bcd60e51b815260040161080790612dbb565b6001600160a01b03166000908152600360205260409020805460ff19169055565b6000546001600160a01b03163314611a2f5760405162461bcd60e51b815260040161080790612dbb565b6001600160a01b038116611a945760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610807565b610d4981612623565b6000546001600160a01b03163314611ac75760405162461bcd60e51b815260040161080790612dbb565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6001600160a01b038316611b4d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610807565b6001600160a01b038216611bae5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610807565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611c735760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610807565b6001600160a01b038216611cd55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610807565b60008111611d375760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610807565b600d805460ff60e01b19169055600080546001600160a01b03858116911614801590611d7157506000546001600160a01b03848116911614155b8015611d8657506001600160a01b0384163014155b8015611dab57506001600160a01b03831660009081526003602052604090205460ff16155b8015611dd057506001600160a01b03841660009081526003602052604090205460ff16155b15612144576001600160a01b03831660009081526004602052604090205460ff16158015611e1757506001600160a01b03841660009081526004602052604090205460ff16155b611e4e5760405162461bcd60e51b81526020600482015260086024820152672737903137ba399760c11b6044820152606401610807565b600c546001600160a01b038581169116148015611e795750600e546001600160a01b03848116911614155b15611f725750600c54600b54600160a01b90910463ffffffff1690600160e01b900460ff1615611f21576001600160a01b038316600090815260056020526040902054431415611f055760405162461bcd60e51b81526020600482015260176024820152762922ab279d1027b732903a3c103832b910313637b1b59760491b6044820152606401610807565b6001600160a01b03831660009081526005602052604090204390555b600a544390611f3f90600290600160a01b900463ffffffff16612f4e565b63ffffffff161115611f6357600d805460ff60e01b1916600160e01b179055612148565b611f6d838361293a565b612148565b600c546001600160a01b038481169116148015611f9d5750600e546001600160a01b03858116911614155b1561212e57600d54611fc490600160a01b900463ffffffff16670de0b6b3a7640000612f76565b821115611fe35760405162461bcd60e51b815260040161080790612df0565b600b54600160e01b900460ff161561206a576001600160a01b0384166000908152600560205260409020544314156120575760405162461bcd60e51b81526020600482015260176024820152762922ab279d1027b732903a3c103832b910313637b1b59760491b6044820152606401610807565b6001600160a01b03841660005260056020525b30600090815260016020526040812054600a5490919061209f90600160c01b900463ffffffff16670de0b6b3a7640000612f76565b600d54908310159150600160f81b900460ff1680156120bb5750805b80156120d15750600d54600160f01b900460ff16155b80156120e057506120e0612a15565b1561211557600a5483906121129061210d90600160c01b900463ffffffff16670de0b6b3a7640000612f76565b61278c565b92505b5050600c54600160c01b900463ffffffff169050612148565b50600c54600160e01b900463ffffffff16612148565b5060005b61215484848484612186565b50505050565b6000818484111561217e5760405162461bcd60e51b81526004016108079190612d68565b505050900390565b600d546000908190600160e01b900460ff16156121fd57600191506121ab8285612fb5565b6001600160a01b038616600090815260066020908152604080832043905560019091529020549091506121df908390612f36565b6001600160a01b038616600090815260076020526040902055612216565b6122078484612a30565b90506122138185612fb5565b91505b6001600160a01b03861660009081526001602052604090205461223a908590612fb5565b6001600160a01b03808816600090815260016020526040808220939093559087168152205461226a908390612f36565b6001600160a01b03861660009081526001602052604090205580156122fe57306000908152600160205260409020546122a4908290612f36565b30600081815260016020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906122f59085815260200190565b60405180910390a35b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161234391815260200190565b60405180910390a3505050505050565b60408051600280825260608201835283926000929190602083019080368337019050509050828160008151811061239a57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600e54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156123ee57600080fd5b505afa158015612402573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124269190612b87565b8160018151811061244757634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526040516370a0823160e01b81523060048201526000918416906370a082319060240160206040518083038186803b15801561249757600080fd5b505afa1580156124ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124cf9190612cff565b600e5460405163095ea7b360e01b81526001600160a01b0391821660048201526024810183905291925084169063095ea7b390604401602060405180830381600087803b15801561251f57600080fd5b505af1158015612533573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125579190612ccb565b50600e5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612591908490600090879030904290600401612ec6565b600060405180830381600087803b1580156125ab57600080fd5b505af11580156125bf573d6000803e3d6000fd5b5050505050505050565b6001600160a01b03811660009081526006602052604081205443141561260557506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260016020526040902054610f75565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b804710156126c35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610807565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612710576040519150601f19603f3d011682016040523d82523d6000602084013e612715565b606091505b505090508061100a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610807565b600d805460ff60f01b1916600160f01b17905560408051600280825260608201835260009260208301908036833701905050905030816000815181106127e257634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600e54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561283657600080fd5b505afa15801561284a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286e9190612b87565b8160018151811061288f57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600e546128b59130911684611aeb565b600e5460405163791ac94760e01b81526001600160a01b039091169063791ac947906128ee908590600090869030904290600401612ec6565b600060405180830381600087803b15801561290857600080fd5b505af115801561291c573d6000803e3d6000fd5b5050505061292947612a57565b5050600d805460ff60f01b19169055565b600d5461295c90600160a01b900463ffffffff16670de0b6b3a7640000612f76565b81111561297b5760405162461bcd60e51b815260040161080790612df0565b600d5461299d90600160c01b900463ffffffff16670de0b6b3a7640000612f76565b816129bd846001600160a01b031660009081526001602052604090205490565b6129c79190612f36565b11156113365760405162461bcd60e51b815260206004820152601d60248201527f5245564f3a204f766572206d61782077616c6c657420616d6f756e742e0000006044820152606401610807565b600a54600090600160e01b900463ffffffff165a1015905090565b6000620186a0612a4663ffffffff841685612f96565b612a509190612f76565b9392505050565b600b54600090612a7d9063ffffffff600160a01b8204811691600160c01b900416612f4e565b600a54600b54919250612ac1916001600160a01b039091169063ffffffff80851691612ab291600160c01b9091041686612f96565b612abc9190612f76565b612673565b600b54611336906001600160a01b0381169063ffffffff80851691612ab291600160a01b9091041686612f96565b5080546000825590600052602060002090810190610d4991905b80821115612b1d5760008155600101612b09565b5090565b60008083601f840112612b32578182fd5b50813567ffffffffffffffff811115612b49578182fd5b6020830191508360208260051b8501011115612b6457600080fd5b9250929050565b600060208284031215612b7c578081fd5b8135612a5081612ffd565b600060208284031215612b98578081fd5b8151612a5081612ffd565b60008060408385031215612bb5578081fd5b8235612bc081612ffd565b91506020830135612bd081612ffd565b809150509250929050565b600080600060608486031215612bef578081fd5b8335612bfa81612ffd565b92506020840135612c0a81612ffd565b929592945050506040919091013590565b60008060408385031215612c2d578182fd5b8235612c3881612ffd565b946020939093013593505050565b60008060008060408587031215612c5b578081fd5b843567ffffffffffffffff80821115612c72578283fd5b612c7e88838901612b21565b90965094506020870135915080821115612c96578283fd5b50612ca387828801612b21565b95989497509550505050565b600060208284031215612cc0578081fd5b8135612a5081613012565b600060208284031215612cdc578081fd5b8151612a5081613012565b600060208284031215612cf8578081fd5b5035919050565b600060208284031215612d10578081fd5b5051919050565b600080600060608486031215612d2b578283fd5b8351925060208401519150604084015190509250925092565b600060208284031215612d55578081fd5b813563ffffffff81168114612a50578182fd5b6000602080835283518082850152825b81811015612d9457858101830151858201604001528201612d78565b81811115612da55783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526022908201527f5245564f3a204f766572206d6178207472616e73616374696f6e20616d6f756e6040820152613a1760f11b606082015260800190565b60208082526022908201527f5245564f3a204f6e6c7920646576656c6f7065722063616e2073657420746869604082015261399760f11b606082015260800190565b60208082526032908201527f546f6b656e436c61776261636b3a2063616c6c6572206973206e6f74207468656040820152711022a92199181031b7b73a3937b63632b91760711b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612f155784516001600160a01b031683529383019391830191600101612ef0565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612f4957612f49612fe7565b500190565b600063ffffffff808316818516808303821115612f6d57612f6d612fe7565b01949350505050565b600082612f9157634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612fb057612fb0612fe7565b500290565b600082821015612fc757612fc7612fe7565b500390565b6000600019821415612fe057612fe0612fe7565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114610d4957600080fd5b8015158114610d4957600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122026bb78ac1882701405cf3afd583048e116b2c445d3f03bc1f9805b5ef4e4530264736f6c63430008040033
Deployed Bytecode
0x60806040526004361061024a5760003560e01c80636faae4a711610139578063bb1789d6116100b6578063e0195f071161007a578063e0195f0714610714578063e69abf8b14610734578063e98391ff14610754578063ea2f0b3714610774578063f2fde38b14610794578063ffecf516146107b457600080fd5b8063bb1789d614610659578063c9567bf914610679578063d42953b51461068e578063db932ae2146106ae578063dd62ed3e146106ce57600080fd5b80638da5cb5b116100fd5780638da5cb5b146105a457806395d89b41146105cc578063a3976257146105f9578063a9059cbb14610619578063b70143c91461063957600080fd5b80636faae4a71461051a57806370a082311461053a578063715018a61461055a5780637a52da0e1461056f57806388a65f461461058f57600080fd5b8063313ce567116101c7578063470054d41161018b578063470054d414610461578063473071ce146104815780635342acb4146104a1578063571cbe0a146104da5780635932ead1146104fa57600080fd5b8063313ce567146103d057806333a17282146103ec57806338573ef81461040c5780633e20a82814610421578063437823ec1461044157600080fd5b806318160ddd1161020e57806318160ddd1461032b57806319db2dcb146103505780631c8179a51461037057806323b872dd14610390578063273123b7146103b057600080fd5b80630400bb7a1461025657806306fdde0314610278578063095ea7b3146102bb57806313da0a14146102eb57806314b3b0771461030b57600080fd5b3661025157005b600080fd5b34801561026257600080fd5b50610276610271366004612d44565b6107d4565b005b34801561028457600080fd5b506040805180820190915260088152672932bb37b63b32b960c11b60208201525b6040516102b29190612d68565b60405180910390f35b3480156102c757600080fd5b506102db6102d6366004612c1b565b610836565b60405190151581526020016102b2565b3480156102f757600080fd5b50610276610306366004612d44565b61084c565b34801561031757600080fd5b50610276610326366004612b6b565b6108fe565b34801561033757600080fd5b50670de0b6b3a76400005b6040519081526020016102b2565b34801561035c57600080fd5b5061027661036b366004612b6b565b61094a565b34801561037c57600080fd5b5061027661038b366004612c46565b610996565b34801561039c57600080fd5b506102db6103ab366004612bdb565b610b0d565b3480156103bc57600080fd5b506102766103cb366004612b6b565b610b76565b3480156103dc57600080fd5b50604051600981526020016102b2565b3480156103f857600080fd5b506102db610407366004612bdb565b610bc1565b34801561041857600080fd5b50610276610c7d565b34801561042d57600080fd5b5061027661043c366004612d44565b610d4c565b34801561044d57600080fd5b5061027661045c366004612b6b565b610d9c565b34801561046d57600080fd5b5061027661047c366004612d44565b610dea565b34801561048d57600080fd5b5061027661049c366004612b6b565b610e3a565b3480156104ad57600080fd5b506102db6104bc366004612b6b565b6001600160a01b031660009081526003602052604090205460ff1690565b3480156104e657600080fd5b506102db6104f5366004612bdb565b610e6d565b34801561050657600080fd5b50610276610515366004612caf565b610ed2565b34801561052657600080fd5b50610276610535366004612d44565b610f1a565b34801561054657600080fd5b50610342610555366004612b6b565b610f6a565b34801561056657600080fd5b50610276610f7b565b34801561057b57600080fd5b5061027661058a366004612b6b565b610fb1565b34801561059b57600080fd5b5061027661100f565b3480156105b057600080fd5b506000546040516001600160a01b0390911681526020016102b2565b3480156105d857600080fd5b506040805180820190915260048152635245564f60e01b60208201526102a5565b34801561060557600080fd5b50610276610614366004612d44565b61121f565b34801561062557600080fd5b506102db610634366004612c1b565b611278565b34801561064557600080fd5b50610276610654366004612ce7565b611285565b34801561066557600080fd5b50610276610674366004612d44565b61133a565b34801561068557600080fd5b506102766113e2565b34801561069a57600080fd5b506102766106a9366004612d44565b6117dc565b3480156106ba57600080fd5b506102766106c9366004612d44565b61182b565b3480156106da57600080fd5b506103426106e9366004612ba3565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561072057600080fd5b5061027661072f366004612b6b565b6118d3565b34801561074057600080fd5b5061027661074f366004612caf565b611928565b34801561076057600080fd5b5061027661076f366004612caf565b611970565b34801561078057600080fd5b5061027661078f366004612b6b565b6119ba565b3480156107a057600080fd5b506102766107af366004612b6b565b611a05565b3480156107c057600080fd5b506102766107cf366004612b6b565b611a9d565b600b546001600160a01b0316336001600160a01b0316146108105760405162461bcd60e51b815260040161080790612e32565b60405180910390fd5b600b805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b6000610843338484611aeb565b50600192915050565b6000546001600160a01b031633146108765760405162461bcd60e51b815260040161080790612dbb565b614e208163ffffffff1611156108d95760405162461bcd60e51b815260206004820152602260248201527f5245564f3a204d6178696d756d207472616e7366657220746178206f66203230604482015261129760f11b6064820152608401610807565b600c805463ffffffff909216600160e01b026001600160e01b03909216919091179055565b6000546001600160a01b031633146109285760405162461bcd60e51b815260040161080790612dbb565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600d546001600160a01b031633146109745760405162461bcd60e51b815260040161080790612e74565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146109c05760405162461bcd60e51b815260040161080790612dbb565b828114610a065760405162461bcd60e51b81526020600482015260146024820152732632b733ba3439903237b713ba1036b0ba31b41760611b6044820152606401610807565b60005b83811015610b0657828282818110610a3157634e487b7160e01b600052603260045260246000fd5b9050602002013560086000878785818110610a5c57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610a719190612b6b565b6001600160a01b031681526020810191909152604001600020556009858583818110610aad57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610ac29190612b6b565b81546001810183556000928352602090922090910180546001600160a01b0319166001600160a01b0390921691909117905580610afe81612fcc565b915050610a09565b5050505050565b6000610b1a848484611c0f565b610b6c8433610b6785604051806060016040528060288152602001613021602891396001600160a01b038a166000908152600260209081526040808320338452909152902054919061215a565b611aeb565b5060019392505050565b6000546001600160a01b03163314610ba05760405162461bcd60e51b815260040161080790612dbb565b6001600160a01b03166000908152600460205260409020805460ff19169055565b600d546000906001600160a01b03163314610bee5760405162461bcd60e51b815260040161080790612e74565b60405163095ea7b360e01b81526001600160a01b0384811660048301526024820184905285919082169063095ea7b3906044015b602060405180830381600087803b158015610c3c57600080fd5b505af1158015610c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c749190612ccb565b95945050505050565b6000546001600160a01b03163314610ca75760405162461bcd60e51b815260040161080790612dbb565b6009548015610d495760005b81811015610d3c57600060098281548110610cde57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031680835260089091526040822054909250610d129133918491612186565b6001600160a01b031660009081526008602052604081205580610d3481612fcc565b915050610cb3565b50610d4960096000612aef565b50565b6000546001600160a01b03163314610d765760405162461bcd60e51b815260040161080790612dbb565b600a805463ffffffff909216600160c01b0263ffffffff60c01b19909216919091179055565b6000546001600160a01b03163314610dc65760405162461bcd60e51b815260040161080790612dbb565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b6000546001600160a01b03163314610e145760405162461bcd60e51b815260040161080790612dbb565b600d805463ffffffff909216600160c01b0263ffffffff60c01b19909216919091179055565b600d546001600160a01b03163314610e645760405162461bcd60e51b815260040161080790612e74565b610d4981612353565b600d546000906001600160a01b03163314610e9a5760405162461bcd60e51b815260040161080790612e74565b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285919082169063a9059cbb90604401610c22565b6000546001600160a01b03163314610efc5760405162461bcd60e51b815260040161080790612dbb565b600b8054911515600160e01b0260ff60e01b19909216919091179055565b6000546001600160a01b03163314610f445760405162461bcd60e51b815260040161080790612dbb565b600d805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b6000610f75826125c9565b92915050565b6000546001600160a01b03163314610fa55760405162461bcd60e51b815260040161080790612dbb565b610faf6000612623565b565b600d546001600160a01b03163314610fdb5760405162461bcd60e51b815260040161080790612e74565b47610fe582612353565b6000610ff18247612fb5565b600d5490915061100a906001600160a01b031682612673565b505050565b600d546001600160a01b031633146110395760405162461bcd60e51b815260040161080790612e74565b600e54604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561107e57600080fd5b505afa158015611092573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b69190612b87565b90506000600e60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561110857600080fd5b505afa15801561111c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111409190612b87565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a082319060240160206040518083038186803b15801561118557600080fd5b505afa158015611199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bd9190612cff565b604051632e1a7d4d60e01b8152600481018290529091506001600160a01b03841690632e1a7d4d90602401600060405180830381600087803b15801561120257600080fd5b505af1158015611216573d6000803e3d6000fd5b50505050505050565b600b546001600160a01b0316336001600160a01b0316146112525760405162461bcd60e51b815260040161080790612e32565b600b805463ffffffff909216600160c01b0263ffffffff60c01b19909216919091179055565b6000610843338484611c0f565b600a546001600160a01b0316336001600160a01b031614806112ba5750600b546001600160a01b0316336001600160a01b0316145b806112cf57506000546001600160a01b031633145b6112d857600080fd5b60006112ec82670de0b6b3a7640000612f76565b30600090815260016020526040902054111561131b5761131482670de0b6b3a7640000612f76565b905061132d565b50306000908152600160205260409020545b6113368161278c565b5050565b6000546001600160a01b031633146113645760405162461bcd60e51b815260040161080790612dbb565b614e208163ffffffff1611156113bc5760405162461bcd60e51b815260206004820152601e60248201527f5245564f3a204d6178696d756d2073656c6c20746178206f66203230252e00006044820152606401610807565b600c805463ffffffff909216600160c01b0263ffffffff60c01b19909216919091179055565b6000546001600160a01b0316331461140c5760405162461bcd60e51b815260040161080790612dbb565b600d54600160e81b900460ff16156114665760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610807565b600e80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556114a23082670de0b6b3a7640000611aeb565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156114db57600080fd5b505afa1580156114ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115139190612b87565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561155b57600080fd5b505afa15801561156f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115939190612b87565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156115db57600080fd5b505af11580156115ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116139190612b87565b600c80546001600160a01b0319166001600160a01b03928316179055600e541663f305d719473061164381610f6a565b6000806116586000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156116bb57600080fd5b505af11580156116cf573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906116f49190612d17565b5050600d8054600b8054600160e01b60ff60e01b1990911617905560016aff00ff000000000000000160a01b03166a4000400000003e8000007d60a21b17905550600a805463ffffffff60a01b1916600160a01b63ffffffff431602179055600c54600e5460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b390604401602060405180830381600087803b1580156117a457600080fd5b505af11580156117b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113369190612ccb565b6000546001600160a01b031633146118065760405162461bcd60e51b815260040161080790612dbb565b600a805463ffffffff909216600160e01b026001600160e01b03909216919091179055565b6000546001600160a01b031633146118555760405162461bcd60e51b815260040161080790612dbb565b614e208163ffffffff1611156118ad5760405162461bcd60e51b815260206004820152601d60248201527f5245564f3a204d6178696d756d2062757920746178206f66203230252e0000006044820152606401610807565b600c805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b600b546001600160a01b0316336001600160a01b0316146119065760405162461bcd60e51b815260040161080790612e32565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146119525760405162461bcd60e51b815260040161080790612dbb565b600b8054911515600160e81b0260ff60e81b19909216919091179055565b6000546001600160a01b0316331461199a5760405162461bcd60e51b815260040161080790612dbb565b600d8054911515600160f81b026001600160f81b03909216919091179055565b6000546001600160a01b031633146119e45760405162461bcd60e51b815260040161080790612dbb565b6001600160a01b03166000908152600360205260409020805460ff19169055565b6000546001600160a01b03163314611a2f5760405162461bcd60e51b815260040161080790612dbb565b6001600160a01b038116611a945760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610807565b610d4981612623565b6000546001600160a01b03163314611ac75760405162461bcd60e51b815260040161080790612dbb565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6001600160a01b038316611b4d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610807565b6001600160a01b038216611bae5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610807565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611c735760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610807565b6001600160a01b038216611cd55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610807565b60008111611d375760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610807565b600d805460ff60e01b19169055600080546001600160a01b03858116911614801590611d7157506000546001600160a01b03848116911614155b8015611d8657506001600160a01b0384163014155b8015611dab57506001600160a01b03831660009081526003602052604090205460ff16155b8015611dd057506001600160a01b03841660009081526003602052604090205460ff16155b15612144576001600160a01b03831660009081526004602052604090205460ff16158015611e1757506001600160a01b03841660009081526004602052604090205460ff16155b611e4e5760405162461bcd60e51b81526020600482015260086024820152672737903137ba399760c11b6044820152606401610807565b600c546001600160a01b038581169116148015611e795750600e546001600160a01b03848116911614155b15611f725750600c54600b54600160a01b90910463ffffffff1690600160e01b900460ff1615611f21576001600160a01b038316600090815260056020526040902054431415611f055760405162461bcd60e51b81526020600482015260176024820152762922ab279d1027b732903a3c103832b910313637b1b59760491b6044820152606401610807565b6001600160a01b03831660009081526005602052604090204390555b600a544390611f3f90600290600160a01b900463ffffffff16612f4e565b63ffffffff161115611f6357600d805460ff60e01b1916600160e01b179055612148565b611f6d838361293a565b612148565b600c546001600160a01b038481169116148015611f9d5750600e546001600160a01b03858116911614155b1561212e57600d54611fc490600160a01b900463ffffffff16670de0b6b3a7640000612f76565b821115611fe35760405162461bcd60e51b815260040161080790612df0565b600b54600160e01b900460ff161561206a576001600160a01b0384166000908152600560205260409020544314156120575760405162461bcd60e51b81526020600482015260176024820152762922ab279d1027b732903a3c103832b910313637b1b59760491b6044820152606401610807565b6001600160a01b03841660005260056020525b30600090815260016020526040812054600a5490919061209f90600160c01b900463ffffffff16670de0b6b3a7640000612f76565b600d54908310159150600160f81b900460ff1680156120bb5750805b80156120d15750600d54600160f01b900460ff16155b80156120e057506120e0612a15565b1561211557600a5483906121129061210d90600160c01b900463ffffffff16670de0b6b3a7640000612f76565b61278c565b92505b5050600c54600160c01b900463ffffffff169050612148565b50600c54600160e01b900463ffffffff16612148565b5060005b61215484848484612186565b50505050565b6000818484111561217e5760405162461bcd60e51b81526004016108079190612d68565b505050900390565b600d546000908190600160e01b900460ff16156121fd57600191506121ab8285612fb5565b6001600160a01b038616600090815260066020908152604080832043905560019091529020549091506121df908390612f36565b6001600160a01b038616600090815260076020526040902055612216565b6122078484612a30565b90506122138185612fb5565b91505b6001600160a01b03861660009081526001602052604090205461223a908590612fb5565b6001600160a01b03808816600090815260016020526040808220939093559087168152205461226a908390612f36565b6001600160a01b03861660009081526001602052604090205580156122fe57306000908152600160205260409020546122a4908290612f36565b30600081815260016020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906122f59085815260200190565b60405180910390a35b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161234391815260200190565b60405180910390a3505050505050565b60408051600280825260608201835283926000929190602083019080368337019050509050828160008151811061239a57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600e54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156123ee57600080fd5b505afa158015612402573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124269190612b87565b8160018151811061244757634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526040516370a0823160e01b81523060048201526000918416906370a082319060240160206040518083038186803b15801561249757600080fd5b505afa1580156124ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124cf9190612cff565b600e5460405163095ea7b360e01b81526001600160a01b0391821660048201526024810183905291925084169063095ea7b390604401602060405180830381600087803b15801561251f57600080fd5b505af1158015612533573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125579190612ccb565b50600e5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612591908490600090879030904290600401612ec6565b600060405180830381600087803b1580156125ab57600080fd5b505af11580156125bf573d6000803e3d6000fd5b5050505050505050565b6001600160a01b03811660009081526006602052604081205443141561260557506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260016020526040902054610f75565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b804710156126c35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610807565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612710576040519150601f19603f3d011682016040523d82523d6000602084013e612715565b606091505b505090508061100a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610807565b600d805460ff60f01b1916600160f01b17905560408051600280825260608201835260009260208301908036833701905050905030816000815181106127e257634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600e54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561283657600080fd5b505afa15801561284a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286e9190612b87565b8160018151811061288f57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600e546128b59130911684611aeb565b600e5460405163791ac94760e01b81526001600160a01b039091169063791ac947906128ee908590600090869030904290600401612ec6565b600060405180830381600087803b15801561290857600080fd5b505af115801561291c573d6000803e3d6000fd5b5050505061292947612a57565b5050600d805460ff60f01b19169055565b600d5461295c90600160a01b900463ffffffff16670de0b6b3a7640000612f76565b81111561297b5760405162461bcd60e51b815260040161080790612df0565b600d5461299d90600160c01b900463ffffffff16670de0b6b3a7640000612f76565b816129bd846001600160a01b031660009081526001602052604090205490565b6129c79190612f36565b11156113365760405162461bcd60e51b815260206004820152601d60248201527f5245564f3a204f766572206d61782077616c6c657420616d6f756e742e0000006044820152606401610807565b600a54600090600160e01b900463ffffffff165a1015905090565b6000620186a0612a4663ffffffff841685612f96565b612a509190612f76565b9392505050565b600b54600090612a7d9063ffffffff600160a01b8204811691600160c01b900416612f4e565b600a54600b54919250612ac1916001600160a01b039091169063ffffffff80851691612ab291600160c01b9091041686612f96565b612abc9190612f76565b612673565b600b54611336906001600160a01b0381169063ffffffff80851691612ab291600160a01b9091041686612f96565b5080546000825590600052602060002090810190610d4991905b80821115612b1d5760008155600101612b09565b5090565b60008083601f840112612b32578182fd5b50813567ffffffffffffffff811115612b49578182fd5b6020830191508360208260051b8501011115612b6457600080fd5b9250929050565b600060208284031215612b7c578081fd5b8135612a5081612ffd565b600060208284031215612b98578081fd5b8151612a5081612ffd565b60008060408385031215612bb5578081fd5b8235612bc081612ffd565b91506020830135612bd081612ffd565b809150509250929050565b600080600060608486031215612bef578081fd5b8335612bfa81612ffd565b92506020840135612c0a81612ffd565b929592945050506040919091013590565b60008060408385031215612c2d578182fd5b8235612c3881612ffd565b946020939093013593505050565b60008060008060408587031215612c5b578081fd5b843567ffffffffffffffff80821115612c72578283fd5b612c7e88838901612b21565b90965094506020870135915080821115612c96578283fd5b50612ca387828801612b21565b95989497509550505050565b600060208284031215612cc0578081fd5b8135612a5081613012565b600060208284031215612cdc578081fd5b8151612a5081613012565b600060208284031215612cf8578081fd5b5035919050565b600060208284031215612d10578081fd5b5051919050565b600080600060608486031215612d2b578283fd5b8351925060208401519150604084015190509250925092565b600060208284031215612d55578081fd5b813563ffffffff81168114612a50578182fd5b6000602080835283518082850152825b81811015612d9457858101830151858201604001528201612d78565b81811115612da55783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526022908201527f5245564f3a204f766572206d6178207472616e73616374696f6e20616d6f756e6040820152613a1760f11b606082015260800190565b60208082526022908201527f5245564f3a204f6e6c7920646576656c6f7065722063616e2073657420746869604082015261399760f11b606082015260800190565b60208082526032908201527f546f6b656e436c61776261636b3a2063616c6c6572206973206e6f74207468656040820152711022a92199181031b7b73a3937b63632b91760711b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612f155784516001600160a01b031683529383019391830191600101612ef0565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612f4957612f49612fe7565b500190565b600063ffffffff808316818516808303821115612f6d57612f6d612fe7565b01949350505050565b600082612f9157634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612fb057612fb0612fe7565b500290565b600082821015612fc757612fc7612fe7565b500390565b6000600019821415612fe057612fe0612fe7565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114610d4957600080fd5b8015158114610d4957600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122026bb78ac1882701405cf3afd583048e116b2c445d3f03bc1f9805b5ef4e4530264736f6c63430008040033
Deployed Bytecode Sourcemap
34544:21156:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52883:89;;;;;;;;;;-1:-1:-1;52883:89:0;;;;;:::i;:::-;;:::i;:::-;;38140:83;;;;;;;;;;-1:-1:-1;38210:5:0;;;;;;;;;;;;-1:-1:-1;;;38210:5:0;;;;38140:83;;;;;;;:::i;:::-;;;;;;;;39046:193;;;;;;;;;;-1:-1:-1;39046:193:0;;;;;:::i;:::-;;:::i;:::-;;;6269:14:1;;6262:22;6244:41;;6232:2;6217:18;39046:193:0;6199:92:1;52598:170:0;;;;;;;;;;-1:-1:-1;52598:170:0;;;;;:::i;:::-;;:::i;45505:116::-;;;;;;;;;;-1:-1:-1;45505:116:0;;;;;:::i;:::-;;:::i;38417:95::-;;;;;;;;;;-1:-1:-1;34921:18:0;38417:95;;;14723:25:1;;;14711:2;14696:18;38417:95:0;14678:76:1;45767:126:0;;;;;;;;;;-1:-1:-1;45767:126:0;;;;;:::i;:::-;;:::i;51502:357::-;;;;;;;;;;-1:-1:-1;51502:357:0;;;;;:::i;:::-;;:::i;39247:446::-;;;;;;;;;;-1:-1:-1;39247:446:0;;;;;:::i;:::-;;:::i;48130:91::-;;;;;;;;;;-1:-1:-1;48130:91:0;;;;;:::i;:::-;;:::i;38326:83::-;;;;;;;;;;-1:-1:-1;38326:83:0;;34864:1;15889:36:1;;15877:2;15862:18;38326:83:0;15844:87:1;53526:273:0;;;;;;;;;;-1:-1:-1;53526:273:0;;;;;:::i;:::-;;:::i;47340:476::-;;;;;;;;;;;;;:::i;43444:108::-;;;;;;;;;;-1:-1:-1;43444:108:0;;;;;:::i;:::-;;:::i;51261:111::-;;;;;;;;;;-1:-1:-1;51261:111:0;;;;;:::i;:::-;;:::i;44900:109::-;;;;;;;;;;-1:-1:-1;44900:109:0;;;;;:::i;:::-;;:::i;54190:112::-;;;;;;;;;;-1:-1:-1;54190:112:0;;;;;:::i;:::-;;:::i;51127:124::-;;;;;;;;;;-1:-1:-1;51127:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;51216:27:0;51192:4;51216:27;;;:18;:27;;;;;;;;;51127:124;53860:279;;;;;;;;;;-1:-1:-1;53860:279:0;;;;;:::i;:::-;;:::i;39806:101::-;;;;;;;;;;-1:-1:-1;39806:101:0;;;;;:::i;:::-;;:::i;44664:::-;;;;;;;;;;-1:-1:-1;44664:101:0;;;;;:::i;:::-;;:::i;38520:119::-;;;;;;;;;;-1:-1:-1;38520:119:0;;;;;:::i;:::-;;:::i;21375:103::-;;;;;;;;;;;;;:::i;54965:393::-;;;;;;;;;;-1:-1:-1;54965:393:0;;;;;:::i;:::-;;:::i;55430:265::-;;;;;;;;;;;;;:::i;20724:87::-;;;;;;;;;;-1:-1:-1;20770:7:0;20797:6;20724:87;;-1:-1:-1;;;;;20797:6:0;;;4842:51:1;;4830:2;4815:18;20724:87:0;4797:102:1;38231:87:0;;;;;;;;;;-1:-1:-1;38303:7:0;;;;;;;;;;;;-1:-1:-1;;;38303:7:0;;;;38231:87;;53097:101;;;;;;;;;;-1:-1:-1;53097:101:0;;;;;:::i;:::-;;:::i;38647:199::-;;;;;;;;;;-1:-1:-1;38647:199:0;;;;;:::i;:::-;;:::i;48850:327::-;;;;;;;;;;-1:-1:-1;48850:327:0;;;;;:::i;:::-;;:::i;52295:158::-;;;;;;;;;;-1:-1:-1;52295:158:0;;;;;:::i;:::-;;:::i;46221:1111::-;;;;;;;;;;;;;:::i;48510:96::-;;;;;;;;;;-1:-1:-1;48510:96:0;;;;;:::i;:::-;;:::i;51999:155::-;;;;;;;;;;-1:-1:-1;51999:155:0;;;;;:::i;:::-;;:::i;38854:184::-;;;;;;;;;;-1:-1:-1;38854:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;39003:18:0;;;38971:7;39003:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;38854:184;46038:118;;;;;;;;;;-1:-1:-1;46038:118:0;;;;;:::i;:::-;;:::i;53315:108::-;;;;;;;;;;-1:-1:-1;53315:108:0;;;;;:::i;:::-;;:::i;43211:104::-;;;;;;;;;;-1:-1:-1;43211:104:0;;;;;:::i;:::-;;:::i;51384:110::-;;;;;;;;;;-1:-1:-1;51384:110:0;;;;;:::i;:::-;;:::i;21633:201::-;;;;;;;;;;-1:-1:-1;21633:201:0;;;;;:::i;:::-;;:::i;47927:90::-;;;;;;;;;;-1:-1:-1;47927:90:0;;;;;:::i;:::-;;:::i;52883:89::-;37405:15;;-1:-1:-1;;;;;37405:15:0;9383:10;-1:-1:-1;;;;;37389:31:0;;37381:78;;;;-1:-1:-1;;;37381:78:0;;;;;;;:::i;:::-;;;;;;;;;52947:8:::1;:17:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;52947:17:0::1;-1:-1:-1::0;;;;52947:17:0;;::::1;::::0;;;::::1;::::0;;52883:89::o;39046:193::-;39148:4;39170:39;9383:10;39193:7;39202:6;39170:8;:39::i;:::-;-1:-1:-1;39227:4:0;39046:193;;;;:::o;52598:170::-;20770:7;20797:6;-1:-1:-1;;;;;20797:6:0;9383:10;20944:23;20936:68;;;;-1:-1:-1;;;20936:68:0;;;;;;;:::i;:::-;52685:5:::1;52675:6;:15;;;;52667:62;;;::::0;-1:-1:-1;;;52667:62:0;;14376:2:1;52667:62:0::1;::::0;::::1;14358:21:1::0;14415:2;14395:18;;;14388:30;14454:34;14434:18;;;14427:62;-1:-1:-1;;;14505:18:1;;;14498:32;14547:19;;52667:62:0::1;14348:224:1::0;52667:62:0::1;52740:11;:20:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;52740:20:0::1;-1:-1:-1::0;;;;;52740:20:0;;::::1;::::0;;;::::1;::::0;;52598:170::o;45505:116::-;20770:7;20797:6;-1:-1:-1;;;;;20797:6:0;9383:10;20944:23;20936:68;;;;-1:-1:-1;;;20936:68:0;;;;;;;:::i;:::-;45577:15:::1;:36:::0;;-1:-1:-1;;;;;;45577:36:0::1;-1:-1:-1::0;;;;;45577:36:0;;;::::1;::::0;;;::::1;::::0;;45505:116::o;45767:126::-;37220:11;;-1:-1:-1;;;;;37220:11:0;9383:10;37220:27;37198:127;;;;-1:-1:-1;;;37198:127:0;;;;;;;:::i;:::-;45849:15:::1;:36:::0;;-1:-1:-1;;;;;;45849:36:0::1;-1:-1:-1::0;;;;;45849:36:0;;;::::1;::::0;;;::::1;::::0;;45767:126::o;51502:357::-;20770:7;20797:6;-1:-1:-1;;;;;20797:6:0;9383:10;20944:23;20936:68;;;;-1:-1:-1;;;20936:68:0;;;;;;;:::i;:::-;51616:25;;::::1;51608:58;;;::::0;-1:-1:-1;;;51608:58:0;;10944:2:1;51608:58:0::1;::::0;::::1;10926:21:1::0;10983:2;10963:18;;;10956:30;-1:-1:-1;;;11002:18:1;;;10995:50;11062:18;;51608:58:0::1;10916:170:1::0;51608:58:0::1;51681:6;51677:175;51693:15:::0;;::::1;51677:175;;;51787:3;;51791:1;51787:6;;;;;-1:-1:-1::0;;;51787:6:0::1;;;;;;;;;;;;;;;51762:13;:22;51776:4;;51781:1;51776:7;;;;;-1:-1:-1::0;;;51776:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;51762:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;51762:22:0;:31;51808:18:::1;51832:4:::0;;51837:1;51832:7;;::::1;;;-1:-1:-1::0;;;51832:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51808:32:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;51808:32:0;;;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;;51808:32:0::1;-1:-1:-1::0;;;;;51808:32:0;;::::1;::::0;;;::::1;::::0;;51710:3;::::1;::::0;::::1;:::i;:::-;;;;51677:175;;;;51502:357:::0;;;;:::o;39247:446::-;39379:4;39396:36;39406:6;39414:9;39425:6;39396:9;:36::i;:::-;39443:220;39466:6;9383:10;39514:138;39570:6;39514:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39514:19:0;;;;;;:11;:19;;;;;;;;9383:10;39514:33;;;;;;;;;;:37;:138::i;:::-;39443:8;:220::i;:::-;-1:-1:-1;39681:4:0;39247:446;;;;;:::o;48130:91::-;20770:7;20797:6;-1:-1:-1;;;;;20797:6:0;9383:10;20944:23;20936:68;;;;-1:-1:-1;;;20936:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;48192:13:0::1;48208:5;48192:13:::0;;;:5:::1;:13;::::0;;;;:21;;-1:-1:-1;;48192:21:0::1;::::0;;48130:91::o;53526:273::-;37220:11;;53678:4;;-1:-1:-1;;;;;37220:11:0;9383:10;37220:27;37198:127;;;;-1:-1:-1;;;37198:127:0;;;;;;;:::i;:::-;53755:36:::1;::::0;-1:-1:-1;;;53755:36:0;;-1:-1:-1;;;;;5405:32:1;;;53755:36:0::1;::::0;::::1;5387:51:1::0;5454:18;;;5447:34;;;53723:13:0;;53755:19;;::::1;::::0;::::1;::::0;5360:18:1;;53755:36:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53748:43:::0;53526:273;-1:-1:-1;;;;;53526:273:0:o;47340:476::-;20770:7;20797:6;-1:-1:-1;;;;;20797:6:0;9383:10;20944:23;20936:68;;;;-1:-1:-1;;;20936:68:0;;;;;;;:::i;:::-;47461:18:::1;:25:::0;47500:15;;47497:312:::1;;47536:6;47532:226;47552:11;47548:1;:15;47532:226;;;47589:12;47604:18;47623:1;47604:21;;;;;;-1:-1:-1::0;;;47604:21:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;47604:21:0::1;47677:19:::0;;;:13:::1;:19:::0;;;;;;;47604:21;;-1:-1:-1;47644:56:0::1;::::0;47659:10:::1;::::0;47604:21;;47644:14:::1;:56::i;:::-;-1:-1:-1::0;;;;;47719:19:0::1;47741:1;47719:19:::0;;;:13:::1;:19;::::0;;;;:23;47565:3;::::1;::::0;::::1;:::i;:::-;;;;47532:226;;;-1:-1:-1::0;47772:25:0::1;47779:18;;47772:25;:::i;:::-;21015:1;47340:476::o:0;43444:108::-;20770:7;20797:6;-1:-1:-1;;;;;20797:6:0;9383:10;20944:23;20936:68;;;;-1:-1:-1;;;20936:68:0;;;;;;;:::i;:::-;43520:14:::1;:24:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;43520:24:0::1;-1:-1:-1::0;;;;43520:24:0;;::::1;::::0;;;::::1;::::0;;43444:108::o;51261:111::-;20770:7;20797:6;-1:-1:-1;;;;;20797:6:0;9383:10;20944:23;20936:68;;;;-1:-1:-1;;;20936:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;51330:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;51330:34:0::1;51360:4;51330:34;::::0;;51261:111::o;44900:109::-;20770:7;20797:6;-1:-1:-1;;;;;20797:6:0;9383:10;20944:23;20936:68;;;;-1:-1:-1;;;20936:68:0;;;;;;;:::i;:::-;44975:16:::1;:26:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;44975:26:0::1;-1:-1:-1::0;;;;44975:26:0;;::::1;::::0;;;::::1;::::0;;44900:109::o;54190:112::-;37220:11;;-1:-1:-1;;;;;37220:11:0;9383:10;37220:27;37198:127;;;;-1:-1:-1;;;37198:127:0;;;;;;;:::i;:::-;54274:20:::1;54280:13;54274:5;:20::i;53860:279::-:0;37220:11;;54015:4;;-1:-1:-1;;;;;37220:11:0;9383:10;37220:27;37198:127;;;;-1:-1:-1;;;37198:127:0;;;;;;;:::i;:::-;54092:39:::1;::::0;-1:-1:-1;;;54092:39:0;;-1:-1:-1;;;;;5405:32:1;;;54092:39:0::1;::::0;::::1;5387:51:1::0;5454:18;;;5447:34;;;54060:13:0;;54092:20;;::::1;::::0;::::1;::::0;5360:18:1;;54092:39:0::1;5342:145:1::0;39806:101:0;20770:7;20797:6;-1:-1:-1;;;;;20797:6:0;9383:10;20944:23;20936:68;;;;-1:-1:-1;;;20936:68:0;;;;;;;:::i;:::-;39876:15:::1;:23:::0;;;::::1;;-1:-1:-1::0;;;39876:23:0::1;-1:-1:-1::0;;;;39876:23:0;;::::1;::::0;;;::::1;::::0;;39806:101::o;44664:::-;20770:7;20797:6;-1:-1:-1;;;;;20797:6:0;9383:10;20944:23;20936:68;;;;-1:-1:-1;;;20936:68:0;;;;;;;:::i;:::-;44735:12:::1;:22:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;44735:22:0::1;-1:-1:-1::0;;;;44735:22:0;;::::1;::::0;;;::::1;::::0;;44664:101::o;38520:119::-;38586:7;38613:18;38623:7;38613:9;:18::i;:::-;38606:25;38520:119;-1:-1:-1;;38520:119:0:o;21375:103::-;20770:7;20797:6;-1:-1:-1;;;;;20797:6:0;9383:10;20944:23;20936:68;;;;-1:-1:-1;;;20936:68:0;;;;;;;:::i;:::-;21440:30:::1;21467:1;21440:18;:30::i;:::-;21375:103::o:0;54965:393::-;37220:11;;-1:-1:-1;;;;;37220:11:0;9383:10;37220:27;37198:127;;;;-1:-1:-1;;;37198:127:0;;;;;;;:::i;:::-;55096:21:::1;55128:20;55134:13:::0;55128:5:::1;:20::i;:::-;55159:11;55173:30;55197:6:::0;55173:21:::1;:30;:::i;:::-;55332:11;::::0;55159:44;;-1:-1:-1;55306:44:0::1;::::0;-1:-1:-1;;;;;55332:11:0::1;55159:44:::0;55306:17:::1;:44::i;:::-;37336:1;;54965:393:::0;:::o;55430:265::-;37220:11;;-1:-1:-1;;;;;37220:11:0;9383:10;37220:27;37198:127;;;;-1:-1:-1;;;37198:127:0;;;;;;;:::i;:::-;55520:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;55520:22:0;;;;55501:10:::1;::::0;-1:-1:-1;;;;;55520:15:0::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55501:42;;55554:14;55578:15;;;;;;;;;-1:-1:-1::0;;;;;55578:15:0::1;-1:-1:-1::0;;;;;55578:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55626:32;::::0;-1:-1:-1;;;55626:32:0;;55652:4:::1;55626:32;::::0;::::1;4842:51:1::0;55554:47:0;;-1:-1:-1;55612:11:0::1;::::0;-1:-1:-1;;;;;55626:17:0;::::1;::::0;::::1;::::0;4815:18:1;;55626:32:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55669:18;::::0;-1:-1:-1;;;55669:18:0;;::::1;::::0;::::1;14723:25:1::0;;;55612:46:0;;-1:-1:-1;;;;;;55669:13:0;::::1;::::0;::::1;::::0;14696:18:1;;55669::0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;37336:1;;;55430:265::o:0;53097:101::-;37405:15;;-1:-1:-1;;;;;37405:15:0;9383:10;-1:-1:-1;;;;;37389:31:0;;37381:78;;;;-1:-1:-1;;;37381:78:0;;;;;;;:::i;:::-;53167:14:::1;:23:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;53167:23:0::1;-1:-1:-1::0;;;;53167:23:0;;::::1;::::0;;;::::1;::::0;;53097:101::o;38647:199::-;38752:4;38774:42;9383:10;38798:9;38809:6;38774:9;:42::i;48850:327::-;37014:15;;-1:-1:-1;;;;;37014:15:0;9383:10;-1:-1:-1;;;;;36998:31:0;;:79;;;-1:-1:-1;37062:15:0;;-1:-1:-1;;;;;37062:15:0;9383:10;-1:-1:-1;;;;;37046:31:0;;36998:79;:119;;;-1:-1:-1;20770:7:0;20797:6;-1:-1:-1;;;;;20797:6:0;9383:10;37094:23;36998:119;36976:152;;;;;;48958:12:::1;49014:15;49022:7:::0;34921:18:::1;49014:15;:::i;:::-;49005:4;49472:7:::0;49499:16;;;:11;:16;;;;;;48985:44:::1;48981:165;;;49053:15;49061:7:::0;34921:18:::1;49053:15;:::i;:::-;49046:22;;48981:165;;;-1:-1:-1::0;49128:4:0::1;49472:7:::0;49499:16;;;:11;:16;;;;;;48981:165:::1;49156:13;49164:4;49156:7;:13::i;:::-;37139:1;48850:327:::0;:::o;52295:158::-;20770:7;20797:6;-1:-1:-1;;;;;20797:6:0;9383:10;20944:23;20936:68;;;;-1:-1:-1;;;20936:68:0;;;;;;;:::i;:::-;52378:5:::1;52368:6;:15;;;;52360:58;;;::::0;-1:-1:-1;;;52360:58:0;;8678:2:1;52360:58:0::1;::::0;::::1;8660:21:1::0;8717:2;8697:18;;;8690:30;8756:32;8736:18;;;8729:60;8806:18;;52360:58:0::1;8650:180:1::0;52360:58:0::1;52429:7;:16:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;52429:16:0::1;-1:-1:-1::0;;;;52429:16:0;;::::1;::::0;;;::::1;::::0;;52295:158::o;46221:1111::-;20770:7;20797:6;-1:-1:-1;;;;;20797:6:0;9383:10;20944:23;20936:68;;;;-1:-1:-1;;;20936:68:0;;;;;;;:::i;:::-;46281:11:::1;::::0;-1:-1:-1;;;46281:11:0;::::1;;;46280:12;46272:48;;;::::0;-1:-1:-1;;;46272:48:0;;13202:2:1;46272:48:0::1;::::0;::::1;13184:21:1::0;13241:2;13221:18;;;13214:30;13280:25;13260:18;;;13253:53;13323:18;;46272:48:0::1;13174:173:1::0;46272:48:0::1;46466:15;:34:::0;;-1:-1:-1;;;;;;46466:34:0::1;46402:42;46466:34:::0;;::::1;::::0;;;46511:58:::1;46528:4;46402:42:::0;34921:18:::1;46511:8;:58::i;:::-;46614:16;-1:-1:-1::0;;;;;46614:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;46596:70:0::1;;46675:4;46682:16;-1:-1:-1::0;;;;;46682:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46596:110;::::0;-1:-1:-1;;;;;;46596:110:0::1;::::0;;;;;;-1:-1:-1;;;;;5134:15:1;;;46596:110:0::1;::::0;::::1;5116:34:1::0;5186:15;;5166:18;;;5159:43;5051:18;;46596:110:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46580:13;:126:::0;;-1:-1:-1;;;;;;46580:126:0::1;-1:-1:-1::0;;;;;46580:126:0;;::::1;;::::0;;46749:15:::1;::::0;::::1;:31;46788:21;46833:4;46853:24;46833:4:::0;46853:9:::1;:24::i;:::-;46892:1;46908::::0;46924:7:::1;20770::::0;20797:6;-1:-1:-1;;;;;20797:6:0;;20724:87;46924:7:::1;46749:223;::::0;::::1;::::0;;;-1:-1:-1;;;;;;46749:223:0;;;-1:-1:-1;;;;;5851:15:1;;;46749:223:0::1;::::0;::::1;5833:34:1::0;5883:18;;;5876:34;;;;5926:18;;;5919:34;;;;5969:18;;;5962:34;6033:15;;;6012:19;;;6005:44;46946:15:0::1;6065:19:1::0;;;6058:35;5767:19;;46749:223:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;46983:11:0::1;:18:::0;;47012:15:::1;:22:::0;;-1:-1:-1;;;;;;;47012:22:0;;::::1;;::::0;;-1:-1:-1;;;;;47141:18:0;-1:-1:-1;;;47141:18:0;;;-1:-1:-1;47170:9:0::1;:32:::0;;-1:-1:-1;;;;47170:32:0::1;-1:-1:-1::0;;;47063:18:0::1;47189:12;47170:32;;;::::0;;47220:13:::1;::::0;47265:15:::1;::::0;47213:111:::1;::::0;-1:-1:-1;;;47213:111:0;;-1:-1:-1;;;;;47265:15:0;;::::1;47213:111;::::0;::::1;5387:51:1::0;-1:-1:-1;;5454:18:1;;;5447:34;47220:13:0;::::1;::::0;47213:29:::1;::::0;5360:18:1;;47213:111:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;48510:96::-:0;20770:7;20797:6;-1:-1:-1;;;;;20797:6:0;9383:10;20944:23;20936:68;;;;-1:-1:-1;;;20936:68:0;;;;;;;:::i;:::-;48574:15:::1;:24:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;48574:24:0::1;-1:-1:-1::0;;;;;48574:24:0;;::::1;::::0;;;::::1;::::0;;48510:96::o;51999:155::-;20770:7;20797:6;-1:-1:-1;;;;;20797:6:0;9383:10;20944:23;20936:68;;;;-1:-1:-1;;;20936:68:0;;;;;;;:::i;:::-;52081:5:::1;52071:6;:15;;;;52063:57;;;::::0;-1:-1:-1;;;52063:57:0;;8320:2:1;52063:57:0::1;::::0;::::1;8302:21:1::0;8359:2;8339:18;;;8332:30;8398:31;8378:18;;;8371:59;8447:18;;52063:57:0::1;8292:179:1::0;52063:57:0::1;52131:6;:15:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;52131:15:0::1;-1:-1:-1::0;;;;52131:15:0;;::::1;::::0;;;::::1;::::0;;51999:155::o;46038:118::-;37405:15;;-1:-1:-1;;;;;37405:15:0;9383:10;-1:-1:-1;;;;;37389:31:0;;37381:78;;;;-1:-1:-1;;;37381:78:0;;;;;;;:::i;:::-;46116:11:::1;:32:::0;;-1:-1:-1;;;;;;46116:32:0::1;-1:-1:-1::0;;;;;46116:32:0;;;::::1;::::0;;;::::1;::::0;;46038:118::o;53315:108::-;20770:7;20797:6;-1:-1:-1;;;;;20797:6:0;9383:10;20944:23;20936:68;;;;-1:-1:-1;;;20936:68:0;;;;;;;:::i;:::-;53384:23:::1;:31:::0;;;::::1;;-1:-1:-1::0;;;53384:31:0::1;-1:-1:-1::0;;;;53384:31:0;;::::1;::::0;;;::::1;::::0;;53315:108::o;43211:104::-;20770:7;20797:6;-1:-1:-1;;;;;20797:6:0;9383:10;20944:23;20936:68;;;;-1:-1:-1;;;20936:68:0;;;;;;;:::i;:::-;43286:11:::1;:21:::0;;;::::1;;-1:-1:-1::0;;;43286:21:0::1;-1:-1:-1::0;;;;;43286:21:0;;::::1;::::0;;;::::1;::::0;;43211:104::o;51384:110::-;20770:7;20797:6;-1:-1:-1;;;;;20797:6:0;9383:10;20944:23;20936:68;;;;-1:-1:-1;;;20936:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;51451:27:0::1;51481:5;51451:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;51451:35:0::1;::::0;;51384:110::o;21633:201::-;20770:7;20797:6;-1:-1:-1;;;;;20797:6:0;9383:10;20944:23;20936:68;;;;-1:-1:-1;;;20936:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21722:22:0;::::1;21714:73;;;::::0;-1:-1:-1;;;21714:73:0;;7510:2:1;21714:73:0::1;::::0;::::1;7492:21:1::0;7549:2;7529:18;;;7522:30;7588:34;7568:18;;;7561:62;-1:-1:-1;;;7639:18:1;;;7632:36;7685:19;;21714:73:0::1;7482:228:1::0;21714:73:0::1;21798:28;21817:8;21798:18;:28::i;47927:90::-:0;20770:7;20797:6;-1:-1:-1;;;;;20797:6:0;9383:10;20944:23;20936:68;;;;-1:-1:-1;;;20936:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47989:13:0::1;;::::0;;;:5:::1;:13;::::0;;;;:20;;-1:-1:-1;;47989:20:0::1;48005:4;47989:20;::::0;;47927:90::o;39915:369::-;-1:-1:-1;;;;;40042:19:0;;40034:68;;;;-1:-1:-1;;;40034:68:0;;12797:2:1;40034:68:0;;;12779:21:1;12836:2;12816:18;;;12809:30;12875:34;12855:18;;;12848:62;-1:-1:-1;;;12926:18:1;;;12919:34;12970:19;;40034:68:0;12769:226:1;40034:68:0;-1:-1:-1;;;;;40121:21:0;;40113:68;;;;-1:-1:-1;;;40113:68:0;;7917:2:1;40113:68:0;;;7899:21:1;7956:2;7936:18;;;7929:30;7995:34;7975:18;;;7968:62;-1:-1:-1;;;8046:18:1;;;8039:32;8088:19;;40113:68:0;7889:224:1;40113:68:0;-1:-1:-1;;;;;40192:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;40244:32;;14723:25:1;;;40244:32:0;;14696:18:1;40244:32:0;;;;;;;39915:369;;;:::o;40294:2797::-;-1:-1:-1;;;;;40416:18:0;;40408:68;;;;-1:-1:-1;;;40408:68:0;;12039:2:1;40408:68:0;;;12021:21:1;12078:2;12058:18;;;12051:30;12117:34;12097:18;;;12090:62;-1:-1:-1;;;12168:18:1;;;12161:35;12213:19;;40408:68:0;12011:227:1;40408:68:0;-1:-1:-1;;;;;40495:16:0;;40487:64;;;;-1:-1:-1;;;40487:64:0;;7106:2:1;40487:64:0;;;7088:21:1;7145:2;7125:18;;;7118:30;7184:34;7164:18;;;7157:62;-1:-1:-1;;;7235:18:1;;;7228:33;7278:19;;40487:64:0;7078:225:1;40487:64:0;40579:1;40570:6;:10;40562:64;;;;-1:-1:-1;;;40562:64:0;;11293:2:1;40562:64:0;;;11275:21:1;11332:2;11312:18;;;11305:30;11371:34;11351:18;;;11344:62;-1:-1:-1;;;11422:18:1;;;11415:39;11471:19;;40562:64:0;11265:231:1;40562:64:0;40637:5;:13;;-1:-1:-1;;;;40637:13:0;;;-1:-1:-1;20797:6:0;;-1:-1:-1;;;;;40706:15:0;;;20797:6;;40706:15;;;;:45;;-1:-1:-1;20770:7:0;20797:6;-1:-1:-1;;;;;40738:13:0;;;20797:6;;40738:13;;40706:45;:83;;;;-1:-1:-1;;;;;;40768:21:0;;40784:4;40768:21;;40706:83;:123;;;;-1:-1:-1;;;;;;40807:22:0;;;;;;:18;:22;;;;;;;;40806:23;40706:123;:165;;;;-1:-1:-1;;;;;;40847:24:0;;;;;;:18;:24;;;;;;;;40846:25;40706:165;40688:2342;;;-1:-1:-1;;;;;40907:9:0;;;;;;:5;:9;;;;;;;;40906:10;:26;;;;-1:-1:-1;;;;;;40921:11:0;;;;;;:5;:11;;;;;;;;40920:12;40906:26;40898:47;;;;-1:-1:-1;;;40898:47:0;;11703:2:1;40898:47:0;;;11685:21:1;11742:1;11722:18;;;11715:29;-1:-1:-1;;;11760:18:1;;;11753:38;11808:18;;40898:47:0;11675:157:1;40898:47:0;40995:13;;-1:-1:-1;;;;;40987:21:0;;;40995:13;;40987:21;:55;;;;-1:-1:-1;41026:15:0;;-1:-1:-1;;;;;41012:30:0;;;41026:15;;41012:30;;40987:55;40983:1907;;;-1:-1:-1;41109:6:0;;41137:15;;-1:-1:-1;;;41109:6:0;;;;;;-1:-1:-1;;;41137:15:0;;;;41134:274;;;-1:-1:-1;;;;;41274:16:0;;;;;;:12;:16;;;;;;41294:12;41274:32;;41266:68;;;;-1:-1:-1;;;41266:68:0;;12445:2:1;41266:68:0;;;12427:21:1;12484:2;12464:18;;;12457:30;-1:-1:-1;;;12503:18:1;;;12496:53;12566:18;;41266:68:0;12417:173:1;41266:68:0;-1:-1:-1;;;;;41357:16:0;;;;;;:12;:16;;;;;41376:12;41357:31;;41134:274;41478:9;;41496:12;;41478:15;;34794:1;;-1:-1:-1;;;41478:9:0;;;;:15;:::i;:::-;:30;;;41475:189;;;41561:5;:12;;-1:-1:-1;;;;41561:12:0;-1:-1:-1;;;41561:12:0;;;40688:2342;;41475:189;41622:22;41633:2;41637:6;41622:10;:22::i;:::-;40688:2342;;40983:1907;41695:13;;-1:-1:-1;;;;;41689:19:0;;;41695:13;;41689:19;:55;;;;-1:-1:-1;41728:15:0;;-1:-1:-1;;;;;41712:32:0;;;41728:15;;41712:32;;41689:55;41685:1205;;;41871:12;;41863:20;;-1:-1:-1;;;41871:12:0;;;;34921:18;41863:20;:::i;:::-;41853:6;:30;;41845:77;;;;-1:-1:-1;;;41845:77:0;;;;;;;:::i;:::-;42029:15;;-1:-1:-1;;;42029:15:0;;;;42026:190;;;-1:-1:-1;;;;;42077:18:0;;;;;;:12;:18;;;;;;42099:12;42077:34;;42069:70;;;;-1:-1:-1;;;42069:70:0;;12445:2:1;42069:70:0;;;12427:21:1;12484:2;12464:18;;;12457:30;-1:-1:-1;;;12503:18:1;;;12496:53;12566:18;;42069:70:0;12417:173:1;42069:70:0;-1:-1:-1;;;;;42162:18:0;;;;:12;:18;;42026:190;42368:4;42317:28;49499:16;;;:11;:16;;;;;;42446:14;;49499:16;;42317:28;42438:22;;-1:-1:-1;;;42446:14:0;;;;34921:18;42438:22;:::i;:::-;42487:11;;42414:46;;;;;-1:-1:-1;;;;42487:11:0;;;;:22;;;;;42502:7;42487:22;:33;;;;-1:-1:-1;42514:6:0;;-1:-1:-1;;;42514:6:0;;;;42513:7;42487:33;:50;;;;;42524:13;:11;:13::i;:::-;42483:231;;;42632:14;;42582:7;;42616:31;;42624:22;;-1:-1:-1;;;42632:14:0;;;;34921:18;42624:22;:::i;:::-;42616:7;:31::i;:::-;42684:6;-1:-1:-1;42483:231:0;-1:-1:-1;;42787:7:0;;-1:-1:-1;;;42787:7:0;;;;;-1:-1:-1;40688:2342:0;;41685:1205;-1:-1:-1;42863:11:0;;-1:-1:-1;;;42863:11:0;;;;40688:2342;;;-1:-1:-1;43017:1:0;40688:2342;43042:41;43057:4;43063:2;43067:6;43075:7;43042:14;:41::i;:::-;40294:2797;;;;:::o;17758:240::-;17878:7;17939:12;17931:6;;;;17923:29;;;;-1:-1:-1;;;17923:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;17974:5:0;;;17758:240::o;49606:1224::-;49851:5;;49759:22;;;;-1:-1:-1;;;49851:5:0;;;;49847:498;;;49937:1;;-1:-1:-1;49965:21:0;49937:1;49965:6;:21;:::i;:::-;-1:-1:-1;;;;;50038:19:0;;;;;;:8;:19;;;;;;;;50060:12;50038:34;;50111:11;:22;;;;;;49953:33;;-1:-1:-1;50111:39:0;;50136:14;;50111:39;:::i;:::-;-1:-1:-1;;;;;50087:21:0;;;;;;:10;:21;;;;;:63;49847:498;;;50249:34;50267:6;50275:7;50249:17;:34::i;:::-;50237:46;-1:-1:-1;50315:16:0;50237:46;50315:6;:16;:::i;:::-;50298:33;;49847:498;-1:-1:-1;;;;;50410:19:0;;;;;;:11;:19;;;;;;:28;;50432:6;;50410:28;:::i;:::-;-1:-1:-1;;;;;50388:19:0;;;;;;;:11;:19;;;;;;:50;;;;50474:22;;;;;;;:39;;50499:14;;50474:39;:::i;:::-;-1:-1:-1;;;;;50449:22:0;;;;;;:11;:22;;;;;:64;50527:13;;50524:174;;50606:4;50586:26;;;;:11;:26;;;;;;:38;;50615:9;;50586:38;:::i;:::-;50577:4;50557:26;;;;:11;:26;;;;;;;:67;;;;50644:42;;-1:-1:-1;;;;;50644:42:0;;;;;;;50676:9;14723:25:1;;14711:2;14696:18;;14678:76;50644:42:0;;;;;;;;50524:174;50786:9;-1:-1:-1;;;;;50769:43:0;50778:6;-1:-1:-1;;;;;50769:43:0;;50797:14;50769:43;;;;14723:25:1;;14711:2;14696:18;;14678:76;50769:43:0;;;;;;;;49606:1224;;;;;;:::o;54406:551::-;54521:16;;;54535:1;54521:16;;;;;;;;54482:3;;54454:18;;54521:16;54535:1;54521:16;;;;;;;;;;-1:-1:-1;54521:16:0;54497:40;;54558:3;54548:4;54553:1;54548:7;;;;;;-1:-1:-1;;;54548:7:0;;;;;;;;;-1:-1:-1;;;;;54548:13:0;;;:7;;;;;;;;;;:13;;;;54582:15;;:22;;;-1:-1:-1;;;54582:22:0;;;;:15;;;;;:20;;:22;;;;;54548:7;;54582:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54572:4;54577:1;54572:7;;;;;;-1:-1:-1;;;54572:7:0;;;;;;;;;-1:-1:-1;;;;;54572:32:0;;;:7;;;;;;;;;:32;54637:36;;-1:-1:-1;;;54637:36:0;;54667:4;54637:36;;;4842:51:1;54615:19:0;;54637:21;;;;;4815:18:1;;54637:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54712:15;;54684:58;;-1:-1:-1;;;54684:58:0;;-1:-1:-1;;;;;54712:15:0;;;54684:58;;;5387:51:1;5454:18;;;5447:34;;;54615:58:0;;-1:-1:-1;54684:19:0;;;;;5360:18:1;;54684:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;54753:15:0;;:196;;-1:-1:-1;;;54753:196:0;;-1:-1:-1;;;;;54753:15:0;;;;:66;;:196;;54834:11;;54753:15;;54876:4;;54903;;54923:15;;54753:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54406:551;;;;:::o;49187:221::-;-1:-1:-1;;;;;49265:13:0;;49241:7;49265:13;;;:8;:13;;;;;;49282:12;49265:29;49261:140;;;-1:-1:-1;;;;;;49318:15:0;;;;;:10;:15;;;;;;;49187:221::o;49261:140::-;-1:-1:-1;;;;;49499:16:0;;49472:7;49499:16;;;:11;:16;;;;;;49373;49416:107;21994:191;22068:16;22087:6;;-1:-1:-1;;;;;22104:17:0;;;-1:-1:-1;;;;;;22104:17:0;;;;;;22137:40;;22087:6;;;;;;;22137:40;;22068:16;22137:40;21994:191;;:::o;2595:317::-;2710:6;2685:21;:31;;2677:73;;;;-1:-1:-1;;;2677:73:0;;9464:2:1;2677:73:0;;;9446:21:1;9503:2;9483:18;;;9476:30;9542:31;9522:18;;;9515:59;9591:18;;2677:73:0;9436:179:1;2677:73:0;2764:12;2782:9;-1:-1:-1;;;;;2782:14:0;2804:6;2782:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2763:52;;;2834:7;2826:78;;;;-1:-1:-1;;;2826:78:0;;9037:2:1;2826:78:0;;;9019:21:1;9076:2;9056:18;;;9049:30;9115:34;9095:18;;;9088:62;9186:28;9166:18;;;9159:56;9232:19;;2826:78:0;9009:248:1;43560:569:0;43617:6;:13;;-1:-1:-1;;;;43617:13:0;-1:-1:-1;;;43617:13:0;;;43665:16;;;43679:1;43665:16;;;;;;;;-1:-1:-1;;43665:16:0;;;;;;;;;;-1:-1:-1;43665:16:0;43641:40;;43710:4;43692;43697:1;43692:7;;;;;;-1:-1:-1;;;43692:7:0;;;;;;;;;-1:-1:-1;;;;;43692:23:0;;;:7;;;;;;;;;;:23;;;;43736:15;;:22;;;-1:-1:-1;;;43736:22:0;;;;:15;;;;;:20;;:22;;;;;43692:7;;43736:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43726:4;43731:1;43726:7;;;;;;-1:-1:-1;;;43726:7:0;;;;;;;;;-1:-1:-1;;;;;43726:32:0;;;:7;;;;;;;;;:32;43801:15;;43769:62;;43786:4;;43801:15;43819:11;43769:8;:62::i;:::-;43844:15;;:196;;-1:-1:-1;;;43844:196:0;;-1:-1:-1;;;;;43844:15:0;;;;:66;;:196;;43925:11;;43844:15;;43967:4;;43994;;44014:15;;43844:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44061:35;44074:21;44061:12;:35::i;:::-;-1:-1:-1;;44107:6:0;:14;;-1:-1:-1;;;;44107:14:0;;;43560:569::o;45017:357::-;45150:12;;45142:20;;-1:-1:-1;;;45150:12:0;;;;34921:18;45142:20;:::i;:::-;45132:6;:30;;45124:77;;;;-1:-1:-1;;;45124:77:0;;;;;;;:::i;:::-;45293:16;;45285:24;;-1:-1:-1;;;45293:16:0;;;;34921:18;45285:24;:::i;:::-;45275:6;45257:15;45269:2;-1:-1:-1;;;;;49499:16:0;49472:7;49499:16;;;:11;:16;;;;;;;49416:107;45257:15;:24;;;;:::i;:::-;:52;;45235:131;;;;-1:-1:-1;;;45235:131:0;;9822:2:1;45235:131:0;;;9804:21:1;9861:2;9841:18;;;9834:30;9900:31;9880:18;;;9873:59;9949:18;;45235:131:0;9794:179:1;48229:161:0;48367:15;;48274:4;;-1:-1:-1;;;48367:15:0;;;;48354:9;:28;;48347:35;;48229:161;:::o;50842:139::-;50924:7;50967:6;50951:15;;;;:7;:15;:::i;:::-;:22;;;;:::i;:::-;50944:29;50842:139;-1:-1:-1;;;50842:139:0:o;44137:394::-;44331:8;;44297:14;;44314:25;;44331:8;-1:-1:-1;;;44331:8:0;;;;;-1:-1:-1;;;44314:14:0;;;:25;:::i;:::-;44390:15;;44414:14;;44297:42;;-1:-1:-1;44372:65:0;;-1:-1:-1;;;;;44390:15:0;;;;44407:29;;;;;:21;;-1:-1:-1;;;44414:14:0;;;;44407:6;:21;:::i;:::-;:29;;;;:::i;:::-;44372:17;:65::i;:::-;44482:15;;44464:59;;-1:-1:-1;;;;;44482:15:0;;;44499:23;;;;;:15;;-1:-1:-1;;;44506:8:0;;;;44499:6;:15;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:395:1:-;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:2;;166:8;156;149:26;108:2;-1:-1:-1;196:20:1;;239:18;228:30;;225:2;;;278:8;268;261:26;225:2;322:4;314:6;310:17;298:29;;382:3;375:4;365:6;362:1;358:14;350:6;346:27;342:38;339:47;336:2;;;399:1;396;389:12;336:2;98:311;;;;;:::o;414:257::-;473:6;526:2;514:9;505:7;501:23;497:32;494:2;;;547:6;539;532:22;494:2;591:9;578:23;610:31;635:5;610:31;:::i;676:261::-;746:6;799:2;787:9;778:7;774:23;770:32;767:2;;;820:6;812;805:22;767:2;857:9;851:16;876:31;901:5;876:31;:::i;942:398::-;1010:6;1018;1071:2;1059:9;1050:7;1046:23;1042:32;1039:2;;;1092:6;1084;1077:22;1039:2;1136:9;1123:23;1155:31;1180:5;1155:31;:::i;:::-;1205:5;-1:-1:-1;1262:2:1;1247:18;;1234:32;1275:33;1234:32;1275:33;:::i;:::-;1327:7;1317:17;;;1029:311;;;;;:::o;1345:466::-;1422:6;1430;1438;1491:2;1479:9;1470:7;1466:23;1462:32;1459:2;;;1512:6;1504;1497:22;1459:2;1556:9;1543:23;1575:31;1600:5;1575:31;:::i;:::-;1625:5;-1:-1:-1;1682:2:1;1667:18;;1654:32;1695:33;1654:32;1695:33;:::i;:::-;1449:362;;1747:7;;-1:-1:-1;;;1801:2:1;1786:18;;;;1773:32;;1449:362::o;1816:325::-;1884:6;1892;1945:2;1933:9;1924:7;1920:23;1916:32;1913:2;;;1966:6;1958;1951:22;1913:2;2010:9;1997:23;2029:31;2054:5;2029:31;:::i;:::-;2079:5;2131:2;2116:18;;;;2103:32;;-1:-1:-1;;;1903:238:1:o;2146:803::-;2268:6;2276;2284;2292;2345:2;2333:9;2324:7;2320:23;2316:32;2313:2;;;2366:6;2358;2351:22;2313:2;2411:9;2398:23;2440:18;2481:2;2473:6;2470:14;2467:2;;;2502:6;2494;2487:22;2467:2;2546:70;2608:7;2599:6;2588:9;2584:22;2546:70;:::i;:::-;2635:8;;-1:-1:-1;2520:96:1;-1:-1:-1;2723:2:1;2708:18;;2695:32;;-1:-1:-1;2739:16:1;;;2736:2;;;2773:6;2765;2758:22;2736:2;;2817:72;2881:7;2870:8;2859:9;2855:24;2817:72;:::i;:::-;2303:646;;;;-1:-1:-1;2908:8:1;-1:-1:-1;;;;2303:646:1:o;2954:251::-;3010:6;3063:2;3051:9;3042:7;3038:23;3034:32;3031:2;;;3084:6;3076;3069:22;3031:2;3128:9;3115:23;3147:28;3169:5;3147:28;:::i;3210:255::-;3277:6;3330:2;3318:9;3309:7;3305:23;3301:32;3298:2;;;3351:6;3343;3336:22;3298:2;3388:9;3382:16;3407:28;3429:5;3407:28;:::i;3470:190::-;3529:6;3582:2;3570:9;3561:7;3557:23;3553:32;3550:2;;;3603:6;3595;3588:22;3550:2;-1:-1:-1;3631:23:1;;3540:120;-1:-1:-1;3540:120:1:o;3665:194::-;3735:6;3788:2;3776:9;3767:7;3763:23;3759:32;3756:2;;;3809:6;3801;3794:22;3756:2;-1:-1:-1;3837:16:1;;3746:113;-1:-1:-1;3746:113:1:o;3864:316::-;3952:6;3960;3968;4021:2;4009:9;4000:7;3996:23;3992:32;3989:2;;;4042:6;4034;4027:22;3989:2;4076:9;4070:16;4060:26;;4126:2;4115:9;4111:18;4105:25;4095:35;;4170:2;4159:9;4155:18;4149:25;4139:35;;3979:201;;;;;:::o;4185:296::-;4243:6;4296:2;4284:9;4275:7;4271:23;4267:32;4264:2;;;4317:6;4309;4302:22;4264:2;4361:9;4348:23;4411:10;4404:5;4400:22;4393:5;4390:33;4380:2;;4442:6;4434;4427:22;6296:603;6408:4;6437:2;6466;6455:9;6448:21;6498:6;6492:13;6541:6;6536:2;6525:9;6521:18;6514:34;6566:4;6579:140;6593:6;6590:1;6587:13;6579:140;;;6688:14;;;6684:23;;6678:30;6654:17;;;6673:2;6650:26;6643:66;6608:10;;6579:140;;;6737:6;6734:1;6731:13;6728:2;;;6807:4;6802:2;6793:6;6782:9;6778:22;6774:31;6767:45;6728:2;-1:-1:-1;6883:2:1;6862:15;-1:-1:-1;;6858:29:1;6843:45;;;;6890:2;6839:54;;6417:482;-1:-1:-1;;;6417:482:1:o;9978:356::-;10180:2;10162:21;;;10199:18;;;10192:30;10258:34;10253:2;10238:18;;10231:62;10325:2;10310:18;;10152:182::o;10339:398::-;10541:2;10523:21;;;10580:2;10560:18;;;10553:30;10619:34;10614:2;10599:18;;10592:62;-1:-1:-1;;;10685:2:1;10670:18;;10663:32;10727:3;10712:19;;10513:224::o;13352:398::-;13554:2;13536:21;;;13593:2;13573:18;;;13566:30;13632:34;13627:2;13612:18;;13605:62;-1:-1:-1;;;13698:2:1;13683:18;;13676:32;13740:3;13725:19;;13526:224::o;13755:414::-;13957:2;13939:21;;;13996:2;13976:18;;;13969:30;14035:34;14030:2;14015:18;;14008:62;-1:-1:-1;;;14101:2:1;14086:18;;14079:48;14159:3;14144:19;;13929:240::o;14759:983::-;15021:4;15069:3;15058:9;15054:19;15100:6;15089:9;15082:25;15126:2;15164:6;15159:2;15148:9;15144:18;15137:34;15207:3;15202:2;15191:9;15187:18;15180:31;15231:6;15266;15260:13;15297:6;15289;15282:22;15335:3;15324:9;15320:19;15313:26;;15374:2;15366:6;15362:15;15348:29;;15395:4;15408:195;15422:6;15419:1;15416:13;15408:195;;;15487:13;;-1:-1:-1;;;;;15483:39:1;15471:52;;15578:15;;;;15543:12;;;;15519:1;15437:9;15408:195;;;-1:-1:-1;;;;;;;15659:32:1;;;;15654:2;15639:18;;15632:60;-1:-1:-1;;;15723:3:1;15708:19;15701:35;15620:3;15030:712;-1:-1:-1;;;15030:712:1:o;15936:128::-;15976:3;16007:1;16003:6;16000:1;15997:13;15994:2;;;16013:18;;:::i;:::-;-1:-1:-1;16049:9:1;;15984:80::o;16069:228::-;16108:3;16136:10;16173:2;16170:1;16166:10;16203:2;16200:1;16196:10;16234:3;16230:2;16226:12;16221:3;16218:21;16215:2;;;16242:18;;:::i;:::-;16278:13;;16116:181;-1:-1:-1;;;;16116:181:1:o;16302:217::-;16342:1;16368;16358:2;;-1:-1:-1;;;16393:31:1;;16447:4;16444:1;16437:15;16475:4;16400:1;16465:15;16358:2;-1:-1:-1;16504:9:1;;16348:171::o;16524:168::-;16564:7;16630:1;16626;16622:6;16618:14;16615:1;16612:21;16607:1;16600:9;16593:17;16589:45;16586:2;;;16637:18;;:::i;:::-;-1:-1:-1;16677:9:1;;16576:116::o;16697:125::-;16737:4;16765:1;16762;16759:8;16756:2;;;16770:18;;:::i;:::-;-1:-1:-1;16807:9:1;;16746:76::o;16827:135::-;16866:3;-1:-1:-1;;16887:17:1;;16884:2;;;16907:18;;:::i;:::-;-1:-1:-1;16954:1:1;16943:13;;16874:88::o;16967:127::-;17028:10;17023:3;17019:20;17016:1;17009:31;17059:4;17056:1;17049:15;17083:4;17080:1;17073:15;17099:131;-1:-1:-1;;;;;17174:31:1;;17164:42;;17154:2;;17220:1;17217;17210:12;17235:118;17321:5;17314:13;17307:21;17300:5;17297:32;17287:2;;17343:1;17340;17333:12
Swarm Source
ipfs://26bb78ac1882701405cf3afd583048e116b2c445d3f03bc1f9805b5ef4e45302
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.