More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 221 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 19356803 | 276 days ago | IN | 0 ETH | 0.00159055 | ||||
Approve | 19050894 | 319 days ago | IN | 0 ETH | 0.0003842 | ||||
Transfer | 16307746 | 704 days ago | IN | 0 ETH | 0.00148853 | ||||
Transfer | 16281071 | 708 days ago | IN | 0 ETH | 0.00064998 | ||||
Transfer | 16280907 | 708 days ago | IN | 0 ETH | 0.00182399 | ||||
Transfer | 16280881 | 708 days ago | IN | 0 ETH | 0.00048731 | ||||
Transfer | 16280871 | 708 days ago | IN | 0 ETH | 0.00115644 | ||||
Transfer | 16280861 | 708 days ago | IN | 0 ETH | 0.00056926 | ||||
Transfer | 16280039 | 708 days ago | IN | 0 ETH | 0.00044282 | ||||
Approve | 15396008 | 834 days ago | IN | 0 ETH | 0.00017334 | ||||
Transfer | 15059070 | 887 days ago | IN | 0 ETH | 0.01376892 | ||||
Approve | 14254108 | 1017 days ago | IN | 0 ETH | 0.00177971 | ||||
Approve | 13903722 | 1071 days ago | IN | 0 ETH | 0.00277672 | ||||
Approve | 13878542 | 1075 days ago | IN | 0 ETH | 0.00123168 | ||||
Approve | 13878536 | 1075 days ago | IN | 0 ETH | 0.00133947 | ||||
Approve | 13870734 | 1076 days ago | IN | 0 ETH | 0.00180849 | ||||
Approve | 13663690 | 1108 days ago | IN | 0 ETH | 0.00474464 | ||||
Approve | 13626656 | 1114 days ago | IN | 0 ETH | 0.00470964 | ||||
Approve | 13612450 | 1116 days ago | IN | 0 ETH | 0.00482789 | ||||
Approve | 13610927 | 1117 days ago | IN | 0 ETH | 0.00503571 | ||||
Approve | 13608560 | 1117 days ago | IN | 0 ETH | 0.00687793 | ||||
Approve | 13608381 | 1117 days ago | IN | 0 ETH | 0.00614386 | ||||
Approve | 13605003 | 1118 days ago | IN | 0 ETH | 0.01144137 | ||||
Approve | 13604793 | 1118 days ago | IN | 0 ETH | 0.00594639 | ||||
Approve | 13604388 | 1118 days ago | IN | 0 ETH | 0.00600389 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
15059070 | 887 days ago | 857 wei | ||||
15059070 | 887 days ago | 857 wei | ||||
13797736 | 1087 days ago | 0.00280345 ETH | ||||
13797736 | 1087 days ago | 0.00280345 ETH | ||||
13783815 | 1089 days ago | 0.00764936 ETH | ||||
13783815 | 1089 days ago | 0.00764936 ETH | ||||
13729670 | 1098 days ago | 0.02286124 ETH | ||||
13729670 | 1098 days ago | 0.02286124 ETH | ||||
13708935 | 1101 days ago | 0.06948709 ETH | ||||
13708935 | 1101 days ago | 0.06948709 ETH | ||||
13620982 | 1115 days ago | 0.03221905 ETH | ||||
13620982 | 1115 days ago | 0.03221905 ETH | ||||
13612455 | 1116 days ago | 0.01875591 ETH | ||||
13612455 | 1116 days ago | 0.01875591 ETH | ||||
13610881 | 1117 days ago | 0.07341178 ETH | ||||
13610881 | 1117 days ago | 0.07341178 ETH | ||||
13608430 | 1117 days ago | 0.04666191 ETH | ||||
13608430 | 1117 days ago | 0.04666191 ETH | ||||
13607835 | 1117 days ago | 0.26293853 ETH | ||||
13607835 | 1117 days ago | 0.26293853 ETH | ||||
13605009 | 1118 days ago | 0.82928251 ETH | ||||
13605009 | 1118 days ago | 0.82928251 ETH | ||||
13604452 | 1118 days ago | 0.04430058 ETH | ||||
13604452 | 1118 days ago | 0.04430058 ETH | ||||
13604437 | 1118 days ago | 0.03915413 ETH |
Loading...
Loading
Contract Name:
FUD
Compiler Version
v0.8.3+commit.8d00100c
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-11-11 */ /* //TG: https://t.me/FUD_eth .----------------. .----------------. .----------------. | .--------------. || .--------------. || .--------------. | | | _________ | || | _____ _____ | || | ________ | | | | |_ ___ | | || ||_ _||_ _|| || | |_ ___ `. | | | | | |_ \_| | || | | | | | | || | | | `. \ | | | | | _| | || | | ' ' | | || | | | | | | | | | _| |_ | || | \ `--' / | || | _| |___.' / | | | | |_____| | || | `.__.' | || | |________.' | | | | | || | | || | | | | '--------------' || '--------------' || '--------------' | '----------------' '----------------' '----------------' */ pragma solidity ^0.8.3; // SPDX-License-Identifier: Unlicensed /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // 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 no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } 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. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * 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; } } } /* * @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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @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 () { _owner = _msgSender(); emit OwnershipTransferred(address(0), _owner); } /** * @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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } 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; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } 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); } 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; } contract FUD is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; uint8 private _decimals = 9; // string private _name = "Fear Uncertainty Doubt"; string private _symbol = "FUD"; uint256 private _tTotal = 10000 * 10**6 * 10**uint256(_decimals); // % to holders uint256 public defaultTaxFee = 1; uint256 public _taxFee = defaultTaxFee; uint256 private _previousTaxFee = _taxFee; // % to swap & send to marketing wallet uint256 public defaultMarketingFee = 14; uint256 public _marketingFee = defaultMarketingFee; uint256 private _previousMarketingFee = _marketingFee; uint256 public _marketingFee4Sellers = 14; bool public feesOnSellersAndBuyers = true; uint256 public _maxTxAmount = _tTotal.div(25); uint256 public numTokensToExchangeForMarketing = _tTotal.div(100).div(100); address payable public marketingWallet = payable(0xc6CFBEBe3F9c101467c8B85798aAe539933b50A2); // mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; mapping (address => bool) public _isBlacklisted; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tFeeTotal; uint256 private _rTotal = (MAX - (MAX % _tTotal)); IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndSend; bool public SwapAndSendEnabled = true; event SwapAndSendEnabledUpdated(bool enabled); modifier lockTheSwap { inSwapAndSend = true; _; inSwapAndSend = false; } constructor () { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; //exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[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; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.'); require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function excludeFromFee(address account) public onlyOwner() { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner() { _isExcludedFromFee[account] = false; } function removeAllFee() private { if(_taxFee == 0 && _marketingFee == 0) return; _previousTaxFee = _taxFee; _previousMarketingFee = _marketingFee; _taxFee = 0; _marketingFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _marketingFee = _previousMarketingFee; } //to recieve ETH receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function addToBlackList(address[] calldata addresses) external onlyOwner { for (uint256 i; i < addresses.length; ++i) { _isBlacklisted[addresses[i]] = true; } } function removeFromBlackList(address account) external onlyOwner { _isBlacklisted[account] = false; } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tMarketing) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tMarketing, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tMarketing); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tMarketing = calculateMarketingFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tMarketing); return (tTransferAmount, tFee, tMarketing); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tMarketing, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rMarketing = tMarketing.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rMarketing); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeMarketing(uint256 tMarketing) private { uint256 currentRate = _getRate(); uint256 rMarketing = tMarketing.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rMarketing); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tMarketing); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function calculateMarketingFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_marketingFee).div( 10**2 ); } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } 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"); require(!_isBlacklisted[from] && !_isBlacklisted[to], "This address is blacklisted"); if(from != owner() && to != owner()) require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + send lock? // also, don't get caught in a circular sending event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= numTokensToExchangeForMarketing; if(contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } if ( overMinTokenBalance && !inSwapAndSend && from != uniswapV2Pair && SwapAndSendEnabled ) { SwapAndSend(contractTokenBalance); } if(feesOnSellersAndBuyers) { setFees(to); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } _tokenTransfer(from,to,amount,takeFee); } function setFees(address recipient) private { _taxFee = defaultTaxFee; _marketingFee = defaultMarketingFee; if (recipient == uniswapV2Pair) { // sell _marketingFee = _marketingFee4Sellers; } } function SwapAndSend(uint256 contractTokenBalance) private lockTheSwap { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), contractTokenBalance); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( contractTokenBalance, 0, // accept any amount of ETH path, address(this), block.timestamp ); uint256 contractETHBalance = address(this).balance; if(contractETHBalance > 0) { marketingWallet.transfer(contractETHBalance); } } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { if(!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeMarketing(tMarketing); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeMarketing(tMarketing); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeMarketing(tMarketing); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeMarketing(tMarketing); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function setDefaultMarketingFee(uint256 marketingFee) external onlyOwner() { defaultMarketingFee = marketingFee; } function setMarketingFee4Sellers(uint256 marketingFee4Sellers) external onlyOwner() { _marketingFee4Sellers = marketingFee4Sellers; } function setFeesOnSellersAndBuyers(bool _enabled) public onlyOwner() { feesOnSellersAndBuyers = _enabled; } function setSwapAndSendEnabled(bool _enabled) public onlyOwner() { SwapAndSendEnabled = _enabled; emit SwapAndSendEnabledUpdated(_enabled); } function setnumTokensToExchangeForMarketing(uint256 _numTokensToExchangeForMarketing) public onlyOwner() { numTokensToExchangeForMarketing = _numTokensToExchangeForMarketing; } function _setMarketingWallet(address payable wallet) external onlyOwner() { marketingWallet = wallet; } function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() { _maxTxAmount = maxTxAmount; } }
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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndSendEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"SwapAndSendEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee4Sellers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"wallet","type":"address"}],"name":"_setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"defaultMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesOnSellersAndBuyers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensToExchangeForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setDefaultMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setFeesOnSellersAndBuyers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee4Sellers","type":"uint256"}],"name":"setMarketingFee4Sellers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndSendEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numTokensToExchangeForMarketing","type":"uint256"}],"name":"setnumTokensToExchangeForMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6000805460ff60a01b1916600960a01b179055610100604052601660c08190527f4665617220556e6365727461696e747920446f7562740000000000000000000060e09081526200005491600191906200046b565b506040805180820190915260038082526211955160ea1b602090920191825262000081916002916200046b565b506000546200009c90600160a01b900460ff16600a6200059e565b620000ad906402540be40062000686565b60038190556001600481905560058190556006819055600e600781905560088190556009819055600a55600b805460ff19169091179055620000fd90601962000456602090811b6200180017901c565b600c556200013760646200012360646003546200045660201b620018001790919060201c565b6200045660201b620018001790919060201c565b600d55600e80546001600160a01b03191673c6cfbebe3f9c101467c8b85798aae539933b50a21790556003546200017190600019620006ff565b6200017f90600019620006a8565b6017556018805461ff0019166101001790553480156200019e57600080fd5b50600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3601754336000908152600f602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b1580156200024057600080fd5b505afa15801562000255573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027b919062000511565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002c457600080fd5b505afa158015620002d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ff919062000511565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200034857600080fd5b505af11580156200035d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000383919062000511565b6001600160601b0319606091821b811660a0529082901b16608052600160126000620003b76000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526012909252902080549091166001179055620003ff3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6003546040516200044791815260200190565b60405180910390a35062000742565b60006200046482846200053a565b9392505050565b8280546200047990620006c2565b90600052602060002090601f0160209004810192826200049d5760008555620004e8565b82601f10620004b857805160ff1916838001178555620004e8565b82800160010185558215620004e8579182015b82811115620004e8578251825591602001919060010190620004cb565b50620004f6929150620004fa565b5090565b5b80821115620004f65760008155600101620004fb565b60006020828403121562000523578081fd5b81516001600160a01b038116811462000464578182fd5b6000826200054c576200054c6200072c565b500490565b80825b600180861162000565575062000595565b8187048211156200057a576200057a62000716565b808616156200058857918102915b9490941c93800262000554565b94509492505050565b6000620004646000198484600082620005ba5750600162000464565b81620005c95750600062000464565b8160018114620005e25760028114620005ed5762000621565b600191505062000464565b60ff84111562000601576200060162000716565b6001841b9150848211156200061a576200061a62000716565b5062000464565b5060208310610133831016604e8410600b841016171562000659575081810a8381111562000653576200065362000716565b62000464565b62000668848484600162000551565b8086048211156200067d576200067d62000716565b02949350505050565b6000816000190483118215151615620006a357620006a362000716565b500290565b600082821015620006bd57620006bd62000716565b500390565b600181811c90821680620006d757607f821691505b60208210811415620006f957634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200071157620007116200072c565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b60805160601c60a05160601c612c3562000791600039600081816105b001528181611c4d015261202f01526000818161038e01528181611e3201528181611f080152611f5d0152612c356000f3fe6080604052600436106102f65760003560e01c806357e0a1d01161018f578063a3864430116100e1578063d54994db1161008a578063ea2f0b3711610064578063ea2f0b37146108b9578063f2fde38b146108d9578063ff897570146108f9576102fd565b8063d54994db14610833578063dab522a814610853578063dd62ed3e14610873576102fd565b8063bc951f98116100bb578063bc951f98146107ed578063c537bd8f14610803578063cba851b31461081d576102fd565b8063a386443014610797578063a457c2d7146107ad578063a9059cbb146107cd576102fd565b806388f82020116101435780639f6462141161011d5780639f64621414610742578063a062e3ba14610758578063a08f676014610777576102fd565b806388f82020146106d65780638da5cb5b1461070f57806395d89b411461072d576102fd565b8063715018a611610174578063715018a61461068b57806375f0a874146106a05780637d1db4a5146106c0576102fd565b806357e0a1d01461064b57806370a082311461066b576102fd565b80632d83811911610248578063437823ec116101fc5780634a49ac4c116101d65780634a49ac4c146105d257806352390c02146105f25780635342acb414610612576102fd565b8063437823ec1461055e5780634549b0391461057e57806349bd5a5e1461059e576102fd565b80633685d4191161022d5780633685d4191461050857806339509351146105285780633b124fe714610548576102fd565b80632d838119146104a5578063313ce567146104c5576102fd565b80631bbae6e0116102aa57806322976e0d1161028457806322976e0d1461044f57806323b872dd146104655780632663236f14610485576102fd565b80631bbae6e0146103dd5780631cdd3be3146103ff5780631ff53b601461042f576102fd565b806313114a9d116102db57806313114a9d1461035d5780631694505e1461037c57806318160ddd146103c8576102fd565b806306fdde0314610302578063095ea7b31461032d576102fd565b366102fd57005b600080fd5b34801561030e57600080fd5b50610317610919565b60405161032491906129a6565b60405180910390f35b34801561033957600080fd5b5061034d6103483660046128ae565b6109ab565b6040519015158152602001610324565b34801561036957600080fd5b506016545b604051908152602001610324565b34801561038857600080fd5b506103b07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610324565b3480156103d457600080fd5b5060035461036e565b3480156103e957600080fd5b506103fd6103f8366004612963565b6109c2565b005b34801561040b57600080fd5b5061034d61041a3660046127fe565b60146020526000908152604090205460ff1681565b34801561043b57600080fd5b506103fd61044a3660046127fe565b610a26565b34801561045b57600080fd5b5061036e60085481565b34801561047157600080fd5b5061034d61048036600461286e565b610aba565b34801561049157600080fd5b506103fd6104a0366004612949565b610b23565b3480156104b157600080fd5b5061036e6104c0366004612963565b610bee565b3480156104d157600080fd5b506104f660005474010000000000000000000000000000000000000000900460ff1690565b60405160ff9091168152602001610324565b34801561051457600080fd5b506103fd6105233660046127fe565b610c87565b34801561053457600080fd5b5061034d6105433660046128ae565b610ef5565b34801561055457600080fd5b5061036e60055481565b34801561056a57600080fd5b506103fd6105793660046127fe565b610f2b565b34801561058a57600080fd5b5061036e61059936600461297b565b610fa9565b3480156105aa57600080fd5b506103b07f000000000000000000000000000000000000000000000000000000000000000081565b3480156105de57600080fd5b506103fd6105ed3660046127fe565b611036565b3480156105fe57600080fd5b506103fd61060d3660046127fe565b6110b1565b34801561061e57600080fd5b5061034d61062d3660046127fe565b6001600160a01b031660009081526012602052604090205460ff1690565b34801561065757600080fd5b506103fd610666366004612949565b61124c565b34801561067757600080fd5b5061036e6106863660046127fe565b6112b9565b34801561069757600080fd5b506103fd61131b565b3480156106ac57600080fd5b50600e546103b0906001600160a01b031681565b3480156106cc57600080fd5b5061036e600c5481565b3480156106e257600080fd5b5061034d6106f13660046127fe565b6001600160a01b031660009081526013602052604090205460ff1690565b34801561071b57600080fd5b506000546001600160a01b03166103b0565b34801561073957600080fd5b506103176113d7565b34801561074e57600080fd5b5061036e60075481565b34801561076457600080fd5b5060185461034d90610100900460ff1681565b34801561078357600080fd5b506103fd610792366004612963565b6113e6565b3480156107a357600080fd5b5061036e600d5481565b3480156107b957600080fd5b5061034d6107c83660046128ae565b611445565b3480156107d957600080fd5b5061034d6107e83660046128ae565b611494565b3480156107f957600080fd5b5061036e600a5481565b34801561080f57600080fd5b50600b5461034d9060ff1681565b34801561082957600080fd5b5061036e60045481565b34801561083f57600080fd5b506103fd61084e366004612963565b6114a1565b34801561085f57600080fd5b506103fd61086e366004612963565b611500565b34801561087f57600080fd5b5061036e61088e366004612836565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b3480156108c557600080fd5b506103fd6108d43660046127fe565b61155f565b3480156108e557600080fd5b506103fd6108f43660046127fe565b6115da565b34801561090557600080fd5b506103fd6109143660046128d9565b611723565b60606001805461092890612b13565b80601f016020809104026020016040519081016040528092919081815260200182805461095490612b13565b80156109a15780601f10610976576101008083540402835291602001916109a1565b820191906000526020600020905b81548152906001019060200180831161098457829003601f168201915b5050505050905090565b60006109b8338484611813565b5060015b92915050565b6000546001600160a01b03163314610a215760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b600c55565b6000546001600160a01b03163314610a805760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b600e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000610ac784848461196b565b610b198433610b1485604051806060016040528060288152602001612bb3602891396001600160a01b038a1660009081526011602090815260408083203384529091529020549190611d16565b611813565b5060019392505050565b6000546001600160a01b03163314610b7d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b60188054821515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff9091161790556040517f3efb3f9ce66ef48ce5be6bff57df61c60b91f67f10f414ed7cd767b1c9cdad7d90610be390831515815260200190565b60405180910390a150565b6000601754821115610c685760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610a18565b6000610c72611d42565b9050610c7e8382611800565b9150505b919050565b6000546001600160a01b03163314610ce15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b6001600160a01b03811660009081526013602052604090205460ff16610d495760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a18565b60005b601554811015610ef157816001600160a01b031660158281548110610d8157634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610edf5760158054610dac90600190612afc565b81548110610dca57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154601580546001600160a01b039092169183908110610e0457634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039485161790559184168152601082526040808220829055601390925220805460ff191690556015805480610e8257634e487b7160e01b600052603160045260246000fd5b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055019055610ef1565b80610ee981612b4e565b915050610d4c565b5050565b3360008181526011602090815260408083206001600160a01b038716845290915281205490916109b8918590610b149086611d65565b6000546001600160a01b03163314610f855760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b6001600160a01b03166000908152601260205260409020805460ff19166001179055565b6000600354831115610ffd5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a18565b8161101c57600061100d84611d71565b509395506109bc945050505050565b600061102784611d71565b509295506109bc945050505050565b6000546001600160a01b031633146110905760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b6001600160a01b03166000908152601460205260409020805460ff19169055565b6000546001600160a01b0316331461110b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b6001600160a01b03811660009081526013602052604090205460ff16156111745760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a18565b6001600160a01b0381166000908152600f6020526040902054156111ce576001600160a01b0381166000908152600f60205260409020546111b490610bee565b6001600160a01b0382166000908152601060205260409020555b6001600160a01b03166000818152601360205260408120805460ff191660019081179091556015805491820181559091527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b6000546001600160a01b031633146112a65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b600b805460ff1916911515919091179055565b6001600160a01b03811660009081526013602052604081205460ff16156112f957506001600160a01b038116600090815260106020526040902054610c82565b6001600160a01b0382166000908152600f60205260409020546109bc90610bee565b6000546001600160a01b031633146113755760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60606002805461092890612b13565b6000546001600160a01b031633146114405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b600a55565b60006109b83384610b1485604051806060016040528060258152602001612bdb602591393360009081526011602090815260408083206001600160a01b038d1684529091529020549190611d16565b60006109b833848461196b565b6000546001600160a01b031633146114fb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b600755565b6000546001600160a01b0316331461155a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b600d55565b6000546001600160a01b031633146115b95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b6001600160a01b03166000908152601260205260409020805460ff19169055565b6000546001600160a01b031633146116345760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b6001600160a01b0381166116b05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a18565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461177d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b60005b818110156117fb576001601460008585858181106117ae57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906117c391906127fe565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556117f481612b4e565b9050611780565b505050565b600061180c8284612a9f565b9392505050565b6001600160a01b03831661188e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610a18565b6001600160a01b03821661190a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610a18565b6001600160a01b0383811660008181526011602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119e75760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610a18565b6001600160a01b038216611a635760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610a18565b60008111611ad95760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610a18565b6001600160a01b03831660009081526014602052604090205460ff16158015611b1b57506001600160a01b03821660009081526014602052604090205460ff16155b611b675760405162461bcd60e51b815260206004820152601b60248201527f54686973206164647265737320697320626c61636b6c697374656400000000006044820152606401610a18565b6000546001600160a01b03848116911614801590611b9357506000546001600160a01b03838116911614155b15611c1057600c54811115611c105760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610a18565b6000611c1b306112b9565b600d54600c54919250821015908210611c3457600c5491505b808015611c44575060185460ff16155b8015611c8257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015611c955750601854610100900460ff165b15611ca357611ca382611dc0565b600b5460ff1615611cb757611cb784612021565b6001600160a01b03851660009081526012602052604090205460019060ff1680611cf957506001600160a01b03851660009081526012602052604090205460ff165b15611d02575060005b611d0e8686868461206c565b505050505050565b60008184841115611d3a5760405162461bcd60e51b8152600401610a1891906129a6565b505050900390565b6000806000611d4f6121e9565b9092509050611d5e8282611800565b9250505090565b600061180c8284612a87565b6000806000806000806000806000611d888a6123a6565b9250925092506000806000611da68d8686611da1611d42565b6123e8565b919f909e50909c50959a5093985091965092945050505050565b6018805460ff191660011790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611e1057634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611e8957600080fd5b505afa158015611e9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec1919061281a565b81600181518110611ee257634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050611f2d307f000000000000000000000000000000000000000000000000000000000000000084611813565b6040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611f9b908590600090869030904290600401612a17565b600060405180830381600087803b158015611fb557600080fd5b505af1158015611fc9573d6000803e3d6000fd5b50479250508115905061201257600e546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612010573d6000803e3d6000fd5b505b50506018805460ff1916905550565b6004546005556007546008557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116908216141561206957600a546008555b50565b8061207957612079612438565b6001600160a01b03841660009081526013602052604090205460ff1680156120ba57506001600160a01b03831660009081526013602052604090205460ff16155b156120cf576120ca84848461246a565b6121cd565b6001600160a01b03841660009081526013602052604090205460ff1615801561211057506001600160a01b03831660009081526013602052604090205460ff165b15612120576120ca848484612590565b6001600160a01b03841660009081526013602052604090205460ff1615801561216257506001600160a01b03831660009081526013602052604090205460ff16155b15612172576120ca848484612639565b6001600160a01b03841660009081526013602052604090205460ff1680156121b257506001600160a01b03831660009081526013602052604090205460ff165b156121c2576120ca84848461267d565b6121cd848484612639565b806121e3576121e3600654600555600954600855565b50505050565b6017546003546000918291825b6015548110156123745782600f60006015848154811061222657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061229f575081601060006015848154811061227857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156122b657601754600354945094505050506123a2565b61230a600f6000601584815481106122de57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906126ec565b9250612360601060006015848154811061233457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906126ec565b91508061236c81612b4e565b9150506121f6565b5060035460175461238491611800565b82101561239c576017546003549350935050506123a2565b90925090505b9091565b6000806000806123b5856126f8565b905060006123c28661271a565b905060006123da826123d489866126ec565b906126ec565b979296509094509092505050565b60008080806123f78886612736565b905060006124058887612736565b905060006124138888612736565b90506000612425826123d486866126ec565b939b939a50919850919650505050505050565b6005541580156124485750600854155b1561245257612468565b6005805460065560088054600955600091829055555b565b60008060008060008061247c87611d71565b6001600160a01b038f16600090815260106020526040902054959b509399509197509550935091506124ae90886126ec565b6001600160a01b038a16600090815260106020908152604080832093909355600f905220546124dd90876126ec565b6001600160a01b03808b166000908152600f602052604080822093909355908a168152205461250c9086611d65565b6001600160a01b0389166000908152600f602052604090205561252e81612742565b61253884836127ca565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161257d91815260200190565b60405180910390a3505050505050505050565b6000806000806000806125a287611d71565b6001600160a01b038f166000908152600f6020526040902054959b509399509197509550935091506125d490876126ec565b6001600160a01b03808b166000908152600f6020908152604080832094909455918b1681526010909152205461260a9084611d65565b6001600160a01b038916600090815260106020908152604080832093909355600f9052205461250c9086611d65565b60008060008060008061264b87611d71565b6001600160a01b038f166000908152600f6020526040902054959b509399509197509550935091506124dd90876126ec565b60008060008060008061268f87611d71565b6001600160a01b038f16600090815260106020526040902054959b509399509197509550935091506126c190886126ec565b6001600160a01b038a16600090815260106020908152604080832093909355600f905220546125d490875b600061180c8284612afc565b60006109bc60646127146005548561273690919063ffffffff16565b90611800565b60006109bc60646127146008548561273690919063ffffffff16565b600061180c8284612abf565b600061274c611d42565b9050600061275a8383612736565b306000908152600f60205260409020549091506127779082611d65565b306000908152600f602090815260408083209390935560139052205460ff16156117fb57306000908152601060205260409020546127b59084611d65565b30600090815260106020526040902055505050565b6017546127d790836126ec565b6017556016546127e79082611d65565b6016555050565b80358015158114610c8257600080fd5b60006020828403121561280f578081fd5b813561180c81612b9d565b60006020828403121561282b578081fd5b815161180c81612b9d565b60008060408385031215612848578081fd5b823561285381612b9d565b9150602083013561286381612b9d565b809150509250929050565b600080600060608486031215612882578081fd5b833561288d81612b9d565b9250602084013561289d81612b9d565b929592945050506040919091013590565b600080604083850312156128c0578182fd5b82356128cb81612b9d565b946020939093013593505050565b600080602083850312156128eb578182fd5b823567ffffffffffffffff80821115612902578384fd5b818501915085601f830112612915578384fd5b813581811115612923578485fd5b8660208260051b8501011115612937578485fd5b60209290920196919550909350505050565b60006020828403121561295a578081fd5b61180c826127ee565b600060208284031215612974578081fd5b5035919050565b6000806040838503121561298d578182fd5b8235915061299d602084016127ee565b90509250929050565b6000602080835283518082850152825b818110156129d2578581018301518582016040015282016129b6565b818111156129e35783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612a665784516001600160a01b031683529383019391830191600101612a41565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612a9a57612a9a612b87565b500190565b600082612aba57634e487b7160e01b81526012600452602481fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612af757612af7612b87565b500290565b600082821015612b0e57612b0e612b87565b500390565b600181811c90821680612b2757607f821691505b60208210811415612b4857634e487b7160e01b600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612b8057612b80612b87565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461206957600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122009df6451bb7f0b0d7d0ef732f8072ebc308ee227145137065d4f0fb69f9a068564736f6c63430008030033
Deployed Bytecode
0x6080604052600436106102f65760003560e01c806357e0a1d01161018f578063a3864430116100e1578063d54994db1161008a578063ea2f0b3711610064578063ea2f0b37146108b9578063f2fde38b146108d9578063ff897570146108f9576102fd565b8063d54994db14610833578063dab522a814610853578063dd62ed3e14610873576102fd565b8063bc951f98116100bb578063bc951f98146107ed578063c537bd8f14610803578063cba851b31461081d576102fd565b8063a386443014610797578063a457c2d7146107ad578063a9059cbb146107cd576102fd565b806388f82020116101435780639f6462141161011d5780639f64621414610742578063a062e3ba14610758578063a08f676014610777576102fd565b806388f82020146106d65780638da5cb5b1461070f57806395d89b411461072d576102fd565b8063715018a611610174578063715018a61461068b57806375f0a874146106a05780637d1db4a5146106c0576102fd565b806357e0a1d01461064b57806370a082311461066b576102fd565b80632d83811911610248578063437823ec116101fc5780634a49ac4c116101d65780634a49ac4c146105d257806352390c02146105f25780635342acb414610612576102fd565b8063437823ec1461055e5780634549b0391461057e57806349bd5a5e1461059e576102fd565b80633685d4191161022d5780633685d4191461050857806339509351146105285780633b124fe714610548576102fd565b80632d838119146104a5578063313ce567146104c5576102fd565b80631bbae6e0116102aa57806322976e0d1161028457806322976e0d1461044f57806323b872dd146104655780632663236f14610485576102fd565b80631bbae6e0146103dd5780631cdd3be3146103ff5780631ff53b601461042f576102fd565b806313114a9d116102db57806313114a9d1461035d5780631694505e1461037c57806318160ddd146103c8576102fd565b806306fdde0314610302578063095ea7b31461032d576102fd565b366102fd57005b600080fd5b34801561030e57600080fd5b50610317610919565b60405161032491906129a6565b60405180910390f35b34801561033957600080fd5b5061034d6103483660046128ae565b6109ab565b6040519015158152602001610324565b34801561036957600080fd5b506016545b604051908152602001610324565b34801561038857600080fd5b506103b07f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610324565b3480156103d457600080fd5b5060035461036e565b3480156103e957600080fd5b506103fd6103f8366004612963565b6109c2565b005b34801561040b57600080fd5b5061034d61041a3660046127fe565b60146020526000908152604090205460ff1681565b34801561043b57600080fd5b506103fd61044a3660046127fe565b610a26565b34801561045b57600080fd5b5061036e60085481565b34801561047157600080fd5b5061034d61048036600461286e565b610aba565b34801561049157600080fd5b506103fd6104a0366004612949565b610b23565b3480156104b157600080fd5b5061036e6104c0366004612963565b610bee565b3480156104d157600080fd5b506104f660005474010000000000000000000000000000000000000000900460ff1690565b60405160ff9091168152602001610324565b34801561051457600080fd5b506103fd6105233660046127fe565b610c87565b34801561053457600080fd5b5061034d6105433660046128ae565b610ef5565b34801561055457600080fd5b5061036e60055481565b34801561056a57600080fd5b506103fd6105793660046127fe565b610f2b565b34801561058a57600080fd5b5061036e61059936600461297b565b610fa9565b3480156105aa57600080fd5b506103b07f0000000000000000000000009a33037512be653b894cafbc789a8183436eddff81565b3480156105de57600080fd5b506103fd6105ed3660046127fe565b611036565b3480156105fe57600080fd5b506103fd61060d3660046127fe565b6110b1565b34801561061e57600080fd5b5061034d61062d3660046127fe565b6001600160a01b031660009081526012602052604090205460ff1690565b34801561065757600080fd5b506103fd610666366004612949565b61124c565b34801561067757600080fd5b5061036e6106863660046127fe565b6112b9565b34801561069757600080fd5b506103fd61131b565b3480156106ac57600080fd5b50600e546103b0906001600160a01b031681565b3480156106cc57600080fd5b5061036e600c5481565b3480156106e257600080fd5b5061034d6106f13660046127fe565b6001600160a01b031660009081526013602052604090205460ff1690565b34801561071b57600080fd5b506000546001600160a01b03166103b0565b34801561073957600080fd5b506103176113d7565b34801561074e57600080fd5b5061036e60075481565b34801561076457600080fd5b5060185461034d90610100900460ff1681565b34801561078357600080fd5b506103fd610792366004612963565b6113e6565b3480156107a357600080fd5b5061036e600d5481565b3480156107b957600080fd5b5061034d6107c83660046128ae565b611445565b3480156107d957600080fd5b5061034d6107e83660046128ae565b611494565b3480156107f957600080fd5b5061036e600a5481565b34801561080f57600080fd5b50600b5461034d9060ff1681565b34801561082957600080fd5b5061036e60045481565b34801561083f57600080fd5b506103fd61084e366004612963565b6114a1565b34801561085f57600080fd5b506103fd61086e366004612963565b611500565b34801561087f57600080fd5b5061036e61088e366004612836565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b3480156108c557600080fd5b506103fd6108d43660046127fe565b61155f565b3480156108e557600080fd5b506103fd6108f43660046127fe565b6115da565b34801561090557600080fd5b506103fd6109143660046128d9565b611723565b60606001805461092890612b13565b80601f016020809104026020016040519081016040528092919081815260200182805461095490612b13565b80156109a15780601f10610976576101008083540402835291602001916109a1565b820191906000526020600020905b81548152906001019060200180831161098457829003601f168201915b5050505050905090565b60006109b8338484611813565b5060015b92915050565b6000546001600160a01b03163314610a215760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b600c55565b6000546001600160a01b03163314610a805760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b600e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000610ac784848461196b565b610b198433610b1485604051806060016040528060288152602001612bb3602891396001600160a01b038a1660009081526011602090815260408083203384529091529020549190611d16565b611813565b5060019392505050565b6000546001600160a01b03163314610b7d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b60188054821515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff9091161790556040517f3efb3f9ce66ef48ce5be6bff57df61c60b91f67f10f414ed7cd767b1c9cdad7d90610be390831515815260200190565b60405180910390a150565b6000601754821115610c685760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610a18565b6000610c72611d42565b9050610c7e8382611800565b9150505b919050565b6000546001600160a01b03163314610ce15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b6001600160a01b03811660009081526013602052604090205460ff16610d495760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a18565b60005b601554811015610ef157816001600160a01b031660158281548110610d8157634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610edf5760158054610dac90600190612afc565b81548110610dca57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154601580546001600160a01b039092169183908110610e0457634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039485161790559184168152601082526040808220829055601390925220805460ff191690556015805480610e8257634e487b7160e01b600052603160045260246000fd5b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055019055610ef1565b80610ee981612b4e565b915050610d4c565b5050565b3360008181526011602090815260408083206001600160a01b038716845290915281205490916109b8918590610b149086611d65565b6000546001600160a01b03163314610f855760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b6001600160a01b03166000908152601260205260409020805460ff19166001179055565b6000600354831115610ffd5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a18565b8161101c57600061100d84611d71565b509395506109bc945050505050565b600061102784611d71565b509295506109bc945050505050565b6000546001600160a01b031633146110905760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b6001600160a01b03166000908152601460205260409020805460ff19169055565b6000546001600160a01b0316331461110b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b6001600160a01b03811660009081526013602052604090205460ff16156111745760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a18565b6001600160a01b0381166000908152600f6020526040902054156111ce576001600160a01b0381166000908152600f60205260409020546111b490610bee565b6001600160a01b0382166000908152601060205260409020555b6001600160a01b03166000818152601360205260408120805460ff191660019081179091556015805491820181559091527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b6000546001600160a01b031633146112a65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b600b805460ff1916911515919091179055565b6001600160a01b03811660009081526013602052604081205460ff16156112f957506001600160a01b038116600090815260106020526040902054610c82565b6001600160a01b0382166000908152600f60205260409020546109bc90610bee565b6000546001600160a01b031633146113755760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60606002805461092890612b13565b6000546001600160a01b031633146114405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b600a55565b60006109b83384610b1485604051806060016040528060258152602001612bdb602591393360009081526011602090815260408083206001600160a01b038d1684529091529020549190611d16565b60006109b833848461196b565b6000546001600160a01b031633146114fb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b600755565b6000546001600160a01b0316331461155a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b600d55565b6000546001600160a01b031633146115b95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b6001600160a01b03166000908152601260205260409020805460ff19169055565b6000546001600160a01b031633146116345760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b6001600160a01b0381166116b05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a18565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461177d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b60005b818110156117fb576001601460008585858181106117ae57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906117c391906127fe565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556117f481612b4e565b9050611780565b505050565b600061180c8284612a9f565b9392505050565b6001600160a01b03831661188e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610a18565b6001600160a01b03821661190a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610a18565b6001600160a01b0383811660008181526011602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119e75760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610a18565b6001600160a01b038216611a635760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610a18565b60008111611ad95760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610a18565b6001600160a01b03831660009081526014602052604090205460ff16158015611b1b57506001600160a01b03821660009081526014602052604090205460ff16155b611b675760405162461bcd60e51b815260206004820152601b60248201527f54686973206164647265737320697320626c61636b6c697374656400000000006044820152606401610a18565b6000546001600160a01b03848116911614801590611b9357506000546001600160a01b03838116911614155b15611c1057600c54811115611c105760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610a18565b6000611c1b306112b9565b600d54600c54919250821015908210611c3457600c5491505b808015611c44575060185460ff16155b8015611c8257507f0000000000000000000000009a33037512be653b894cafbc789a8183436eddff6001600160a01b0316856001600160a01b031614155b8015611c955750601854610100900460ff165b15611ca357611ca382611dc0565b600b5460ff1615611cb757611cb784612021565b6001600160a01b03851660009081526012602052604090205460019060ff1680611cf957506001600160a01b03851660009081526012602052604090205460ff165b15611d02575060005b611d0e8686868461206c565b505050505050565b60008184841115611d3a5760405162461bcd60e51b8152600401610a1891906129a6565b505050900390565b6000806000611d4f6121e9565b9092509050611d5e8282611800565b9250505090565b600061180c8284612a87565b6000806000806000806000806000611d888a6123a6565b9250925092506000806000611da68d8686611da1611d42565b6123e8565b919f909e50909c50959a5093985091965092945050505050565b6018805460ff191660011790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611e1057634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611e8957600080fd5b505afa158015611e9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec1919061281a565b81600181518110611ee257634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050611f2d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611813565b6040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611f9b908590600090869030904290600401612a17565b600060405180830381600087803b158015611fb557600080fd5b505af1158015611fc9573d6000803e3d6000fd5b50479250508115905061201257600e546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612010573d6000803e3d6000fd5b505b50506018805460ff1916905550565b6004546005556007546008557f0000000000000000000000009a33037512be653b894cafbc789a8183436eddff6001600160a01b03908116908216141561206957600a546008555b50565b8061207957612079612438565b6001600160a01b03841660009081526013602052604090205460ff1680156120ba57506001600160a01b03831660009081526013602052604090205460ff16155b156120cf576120ca84848461246a565b6121cd565b6001600160a01b03841660009081526013602052604090205460ff1615801561211057506001600160a01b03831660009081526013602052604090205460ff165b15612120576120ca848484612590565b6001600160a01b03841660009081526013602052604090205460ff1615801561216257506001600160a01b03831660009081526013602052604090205460ff16155b15612172576120ca848484612639565b6001600160a01b03841660009081526013602052604090205460ff1680156121b257506001600160a01b03831660009081526013602052604090205460ff165b156121c2576120ca84848461267d565b6121cd848484612639565b806121e3576121e3600654600555600954600855565b50505050565b6017546003546000918291825b6015548110156123745782600f60006015848154811061222657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061229f575081601060006015848154811061227857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156122b657601754600354945094505050506123a2565b61230a600f6000601584815481106122de57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906126ec565b9250612360601060006015848154811061233457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906126ec565b91508061236c81612b4e565b9150506121f6565b5060035460175461238491611800565b82101561239c576017546003549350935050506123a2565b90925090505b9091565b6000806000806123b5856126f8565b905060006123c28661271a565b905060006123da826123d489866126ec565b906126ec565b979296509094509092505050565b60008080806123f78886612736565b905060006124058887612736565b905060006124138888612736565b90506000612425826123d486866126ec565b939b939a50919850919650505050505050565b6005541580156124485750600854155b1561245257612468565b6005805460065560088054600955600091829055555b565b60008060008060008061247c87611d71565b6001600160a01b038f16600090815260106020526040902054959b509399509197509550935091506124ae90886126ec565b6001600160a01b038a16600090815260106020908152604080832093909355600f905220546124dd90876126ec565b6001600160a01b03808b166000908152600f602052604080822093909355908a168152205461250c9086611d65565b6001600160a01b0389166000908152600f602052604090205561252e81612742565b61253884836127ca565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161257d91815260200190565b60405180910390a3505050505050505050565b6000806000806000806125a287611d71565b6001600160a01b038f166000908152600f6020526040902054959b509399509197509550935091506125d490876126ec565b6001600160a01b03808b166000908152600f6020908152604080832094909455918b1681526010909152205461260a9084611d65565b6001600160a01b038916600090815260106020908152604080832093909355600f9052205461250c9086611d65565b60008060008060008061264b87611d71565b6001600160a01b038f166000908152600f6020526040902054959b509399509197509550935091506124dd90876126ec565b60008060008060008061268f87611d71565b6001600160a01b038f16600090815260106020526040902054959b509399509197509550935091506126c190886126ec565b6001600160a01b038a16600090815260106020908152604080832093909355600f905220546125d490875b600061180c8284612afc565b60006109bc60646127146005548561273690919063ffffffff16565b90611800565b60006109bc60646127146008548561273690919063ffffffff16565b600061180c8284612abf565b600061274c611d42565b9050600061275a8383612736565b306000908152600f60205260409020549091506127779082611d65565b306000908152600f602090815260408083209390935560139052205460ff16156117fb57306000908152601060205260409020546127b59084611d65565b30600090815260106020526040902055505050565b6017546127d790836126ec565b6017556016546127e79082611d65565b6016555050565b80358015158114610c8257600080fd5b60006020828403121561280f578081fd5b813561180c81612b9d565b60006020828403121561282b578081fd5b815161180c81612b9d565b60008060408385031215612848578081fd5b823561285381612b9d565b9150602083013561286381612b9d565b809150509250929050565b600080600060608486031215612882578081fd5b833561288d81612b9d565b9250602084013561289d81612b9d565b929592945050506040919091013590565b600080604083850312156128c0578182fd5b82356128cb81612b9d565b946020939093013593505050565b600080602083850312156128eb578182fd5b823567ffffffffffffffff80821115612902578384fd5b818501915085601f830112612915578384fd5b813581811115612923578485fd5b8660208260051b8501011115612937578485fd5b60209290920196919550909350505050565b60006020828403121561295a578081fd5b61180c826127ee565b600060208284031215612974578081fd5b5035919050565b6000806040838503121561298d578182fd5b8235915061299d602084016127ee565b90509250929050565b6000602080835283518082850152825b818110156129d2578581018301518582016040015282016129b6565b818111156129e35783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612a665784516001600160a01b031683529383019391830191600101612a41565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612a9a57612a9a612b87565b500190565b600082612aba57634e487b7160e01b81526012600452602481fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612af757612af7612b87565b500290565b600082821015612b0e57612b0e612b87565b500390565b600181811c90821680612b2757607f821691505b60208210811415612b4857634e487b7160e01b600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612b8057612b80612b87565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461206957600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122009df6451bb7f0b0d7d0ef732f8072ebc308ee227145137065d4f0fb69f9a068564736f6c63430008030033
Deployed Bytecode Sourcemap
28423:17801:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31095:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32007:161;;;;;;;;;;-1:-1:-1;32007:161:0;;;;;:::i;:::-;;:::i;:::-;;;4147:14:1;;4140:22;4122:41;;4110:2;4095:18;32007:161:0;4077:92:1;33128:87:0;;;;;;;;;;-1:-1:-1;33197:10:0;;33128:87;;;9933:25:1;;;9921:2;9906:18;33128:87:0;9888:76:1;30067:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3668:55:1;;;3650:74;;3638:2;3623:18;30067:51:0;3605:125:1;31372:95:0;;;;;;;;;;-1:-1:-1;31452:7:0;;31372:95;;46109:112;;;;;;;;;;-1:-1:-1;46109:112:0;;;;;:::i;:::-;;:::i;:::-;;29835:47;;;;;;;;;;-1:-1:-1;29835:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;45972:117;;;;;;;;;;-1:-1:-1;45972:117:0;;;;;:::i;:::-;;:::i;29073:50::-;;;;;;;;;;;;;;;;32176:313;;;;;;;;;;-1:-1:-1;32176:313:0;;;;;:::i;:::-;;:::i;45602:164::-;;;;;;;;;;-1:-1:-1;45602:164:0;;;;;:::i;:::-;;:::i;33667:253::-;;;;;;;;;;-1:-1:-1;33667:253:0;;;;;:::i;:::-;;:::i;31281:83::-;;;;;;;;;;;;31322:5;31347:9;;;;;;;31281:83;;;;11175:4:1;11163:17;;;11145:36;;11133:2;11118:18;31281:83:0;11100:87:1;34383:479:0;;;;;;;;;;-1:-1:-1;34383:479:0;;;;;:::i;:::-;;:::i;32497:218::-;;;;;;;;;;-1:-1:-1;32497:218:0;;;;;:::i;:::-;;:::i;28887:38::-;;;;;;;;;;;;;;;;34870:113;;;;;;;;;;-1:-1:-1;34870:113:0;;;;;:::i;:::-;;:::i;33223:436::-;;;;;;;;;;-1:-1:-1;33223:436:0;;;;;:::i;:::-;;:::i;30125:38::-;;;;;;;;;;;;;;;35907:115;;;;;;;;;;-1:-1:-1;35907:115:0;;;;;:::i;:::-;;:::i;33928:447::-;;;;;;;;;;-1:-1:-1;33928:447:0;;;;;:::i;:::-;;:::i;38665:123::-;;;;;;;;;;-1:-1:-1;38665:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;38753:27:0;38729:4;38753:27;;;:18;:27;;;;;;;;;38665:123;45473:121;;;;;;;;;;-1:-1:-1;45473:121:0;;;;;:::i;:::-;;:::i;31475:198::-;;;;;;;;;;-1:-1:-1;31475:198:0;;;;;:::i;:::-;;:::i;19907:148::-;;;;;;;;;;;;;:::i;29425:92::-;;;;;;;;;;-1:-1:-1;29425:92:0;;;;-1:-1:-1;;;;;29425:92:0;;;29292:45;;;;;;;;;;;;;;;;33000:120;;;;;;;;;;-1:-1:-1;33000:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;33092:20:0;33068:4;33092:20;;;:11;:20;;;;;;;;;33000:120;19264:87;;;;;;;;;;-1:-1:-1;19310:7:0;19337:6;-1:-1:-1;;;;;19337:6:0;19264:87;;31186;;;;;;;;;;;;;:::i;29027:39::-;;;;;;;;;;;;;;;;30197:37;;;;;;;;;;-1:-1:-1;30197:37:0;;;;;;;;;;;45318:147;;;;;;;;;;-1:-1:-1;45318:147:0;;;;;:::i;:::-;;:::i;29344:74::-;;;;;;;;;;;;;;;;32723:269;;;;;;;;;;-1:-1:-1;32723:269:0;;;;;:::i;:::-;;:::i;31681:167::-;;;;;;;;;;-1:-1:-1;31681:167:0;;;;;:::i;:::-;;:::i;29192:41::-;;;;;;;;;;;;;;;;29242;;;;;;;;;;-1:-1:-1;29242:41:0;;;;;;;;28848:32;;;;;;;;;;;;;;;;45182:128;;;;;;;;;;-1:-1:-1;45182:128:0;;;;;:::i;:::-;;:::i;45774:190::-;;;;;;;;;;-1:-1:-1;45774:190:0;;;;;:::i;:::-;;:::i;31856:143::-;;;;;;;;;;-1:-1:-1;31856:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;31964:18:0;;;31937:7;31964:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;31856:143;34991:112;;;;;;;;;;-1:-1:-1;34991:112:0;;;;;:::i;:::-;;:::i;20207:244::-;;;;;;;;;;-1:-1:-1;20207:244:0;;;;;:::i;:::-;;:::i;35705:188::-;;;;;;;;;;-1:-1:-1;35705:188:0;;;;;:::i;:::-;;:::i;31095:83::-;31132:13;31165:5;31158:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31095:83;:::o;32007:161::-;32082:4;32099:39;10183:10;32122:7;32131:6;32099:8;:39::i;:::-;-1:-1:-1;32156:4:0;32007:161;;;;;:::o;46109:112::-;19310:7;19337:6;-1:-1:-1;;;;;19337:6:0;10183:10;19482:23;19474:68;;;;-1:-1:-1;;;19474:68:0;;8407:2:1;19474:68:0;;;8389:21:1;;;8426:18;;;8419:30;8485:34;8465:18;;;8458:62;8537:18;;19474:68:0;;;;;;;;;46187:12:::1;:26:::0;46109:112::o;45972:117::-;19310:7;19337:6;-1:-1:-1;;;;;19337:6:0;10183:10;19482:23;19474:68;;;;-1:-1:-1;;;19474:68:0;;8407:2:1;19474:68:0;;;8389:21:1;;;8426:18;;;8419:30;8485:34;8465:18;;;8458:62;8537:18;;19474:68:0;8379:182:1;19474:68:0;46057:15:::1;:24:::0;;;::::1;-1:-1:-1::0;;;;;46057:24:0;;;::::1;::::0;;;::::1;::::0;;45972:117::o;32176:313::-;32274:4;32291:36;32301:6;32309:9;32320:6;32291:9;:36::i;:::-;32338:121;32347:6;10183:10;32369:89;32407:6;32369:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32369:19:0;;;;;;:11;:19;;;;;;;;10183:10;32369:33;;;;;;;;;;:37;:89::i;:::-;32338:8;:121::i;:::-;-1:-1:-1;32477:4:0;32176:313;;;;;:::o;45602:164::-;19310:7;19337:6;-1:-1:-1;;;;;19337:6:0;10183:10;19482:23;19474:68;;;;-1:-1:-1;;;19474:68:0;;8407:2:1;19474:68:0;;;8389:21:1;;;8426:18;;;8419:30;8485:34;8465:18;;;8458:62;8537:18;;19474:68:0;8379:182:1;19474:68:0;45678:18:::1;:29:::0;;;::::1;;;;::::0;;;::::1;;::::0;;45723:35:::1;::::0;::::1;::::0;::::1;::::0;45699:8;4147:14:1;4140:22;4122:41;;4110:2;4095:18;;4077:92;45723:35:0::1;;;;;;;;45602:164:::0;:::o;33667:253::-;33733:7;33772;;33761;:18;;33753:73;;;;-1:-1:-1;;;33753:73:0;;5705:2:1;33753:73:0;;;5687:21:1;5744:2;5724:18;;;5717:30;5783:34;5763:18;;;5756:62;5854:12;5834:18;;;5827:40;5884:19;;33753:73:0;5677:232:1;33753:73:0;33837:19;33860:10;:8;:10::i;:::-;33837:33;-1:-1:-1;33888:24:0;:7;33837:33;33888:11;:24::i;:::-;33881:31;;;33667:253;;;;:::o;34383:479::-;19310:7;19337:6;-1:-1:-1;;;;;19337:6:0;10183:10;19482:23;19474:68;;;;-1:-1:-1;;;19474:68:0;;8407:2:1;19474:68:0;;;8389:21:1;;;8426:18;;;8419:30;8485:34;8465:18;;;8458:62;8537:18;;19474:68:0;8379:182:1;19474:68:0;-1:-1:-1;;;;;34465:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;34457:60;;;::::0;-1:-1:-1;;;34457:60:0;;6926:2:1;34457:60:0::1;::::0;::::1;6908:21:1::0;6965:2;6945:18;;;6938:30;7004:29;6984:18;;;6977:57;7051:18;;34457:60:0::1;6898:177:1::0;34457:60:0::1;34533:9;34528:327;34552:9;:16:::0;34548:20;::::1;34528:327;;;34610:7;-1:-1:-1::0;;;;;34594:23:0::1;:9;34604:1;34594:12;;;;;;-1:-1:-1::0;;;34594:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;34594:12:0::1;:23;34590:254;;;34653:9;34663:16:::0;;:20:::1;::::0;34682:1:::1;::::0;34663:20:::1;:::i;:::-;34653:31;;;;;;-1:-1:-1::0;;;34653:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;34638:9:::1;:12:::0;;-1:-1:-1;;;;;34653:31:0;;::::1;::::0;34648:1;;34638:12;::::1;;;-1:-1:-1::0;;;34638:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;;::::1;-1:-1:-1::0;;;;;34638:46:0;;::::1;;::::0;;34703:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;34742:11:::1;:20:::0;;;;:28;;-1:-1:-1;;34742:28:0::1;::::0;;34789:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;34789:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;34823:5:::1;;34590:254;34570:3:::0;::::1;::::0;::::1;:::i;:::-;;;;34528:327;;;;34383:479:::0;:::o;32497:218::-;10183:10;32585:4;32634:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;32634:34:0;;;;;;;;;;32585:4;;32602:83;;32625:7;;32634:50;;32673:10;32634:38;:50::i;34870:113::-;19310:7;19337:6;-1:-1:-1;;;;;19337:6:0;10183:10;19482:23;19474:68;;;;-1:-1:-1;;;19474:68:0;;8407:2:1;19474:68:0;;;8389:21:1;;;8426:18;;;8419:30;8485:34;8465:18;;;8458:62;8537:18;;19474:68:0;8379:182:1;19474:68:0;-1:-1:-1;;;;;34941:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;34941:34:0::1;34971:4;34941:34;::::0;;34870:113::o;33223:436::-;33313:7;33352;;33341;:18;;33333:62;;;;-1:-1:-1;;;33333:62:0;;7638:2:1;33333:62:0;;;7620:21:1;7677:2;7657:18;;;7650:30;7716:33;7696:18;;;7689:61;7767:18;;33333:62:0;7610:181:1;33333:62:0;33411:17;33406:246;;33446:15;33470:19;33481:7;33470:10;:19::i;:::-;-1:-1:-1;33445:44:0;;-1:-1:-1;33504:14:0;;-1:-1:-1;;;;;33504:14:0;33406:246;33553:23;33584:19;33595:7;33584:10;:19::i;:::-;-1:-1:-1;33551:52:0;;-1:-1:-1;33618:22:0;;-1:-1:-1;;;;;33618:22:0;35907:115;19310:7;19337:6;-1:-1:-1;;;;;19337:6:0;10183:10;19482:23;19474:68;;;;-1:-1:-1;;;19474:68:0;;8407:2:1;19474:68:0;;;8389:21:1;;;8426:18;;;8419:30;8485:34;8465:18;;;8458:62;8537:18;;19474:68:0;8379:182:1;19474:68:0;-1:-1:-1;;;;;35983:23:0::1;36009:5;35983:23:::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;35983:31:0::1;::::0;;35907:115::o;33928:447::-;19310:7;19337:6;-1:-1:-1;;;;;19337:6:0;10183:10;19482:23;19474:68;;;;-1:-1:-1;;;19474:68:0;;8407:2:1;19474:68:0;;;8389:21:1;;;8426:18;;;8419:30;8485:34;8465:18;;;8458:62;8537:18;;19474:68:0;8379:182:1;19474:68:0;-1:-1:-1;;;;;34125:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;34124:21;34116:61;;;::::0;-1:-1:-1;;;34116:61:0;;6926:2:1;34116:61:0::1;::::0;::::1;6908:21:1::0;6965:2;6945:18;;;6938:30;7004:29;6984:18;;;6977:57;7051:18;;34116:61:0::1;6898:177:1::0;34116:61:0::1;-1:-1:-1::0;;;;;34191:16:0;::::1;34210:1;34191:16:::0;;;:7:::1;:16;::::0;;;;;:20;34188:108:::1;;-1:-1:-1::0;;;;;34267:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;34247:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;34228:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;34188:108:::1;-1:-1:-1::0;;;;;34306:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;34306:27:0::1;34329:4;34306:27:::0;;::::1;::::0;;;34344:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;33928:447::o;45473:121::-;19310:7;19337:6;-1:-1:-1;;;;;19337:6:0;10183:10;19482:23;19474:68;;;;-1:-1:-1;;;19474:68:0;;8407:2:1;19474:68:0;;;8389:21:1;;;8426:18;;;8419:30;8485:34;8465:18;;;8458:62;8537:18;;19474:68:0;8379:182:1;19474:68:0;45553:22:::1;:33:::0;;-1:-1:-1;;45553:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;45473:121::o;31475:198::-;-1:-1:-1;;;;;31565:20:0;;31541:7;31565:20;;;:11;:20;;;;;;;;31561:49;;;-1:-1:-1;;;;;;31594:16:0;;;;;;:7;:16;;;;;;31587:23;;31561:49;-1:-1:-1;;;;;31648:16:0;;;;;;:7;:16;;;;;;31628:37;;:19;:37::i;19907:148::-;19310:7;19337:6;-1:-1:-1;;;;;19337:6:0;10183:10;19482:23;19474:68;;;;-1:-1:-1;;;19474:68:0;;8407:2:1;19474:68:0;;;8389:21:1;;;8426:18;;;8419:30;8485:34;8465:18;;;8458:62;8537:18;;19474:68:0;8379:182:1;19474:68:0;20014:1:::1;19998:6:::0;;19977:40:::1;::::0;-1:-1:-1;;;;;19998:6:0;;::::1;::::0;19977:40:::1;::::0;20014:1;;19977:40:::1;20045:1;20028:19:::0;;;::::1;::::0;;19907:148::o;31186:87::-;31225:13;31258:7;31251:14;;;;;:::i;45318:147::-;19310:7;19337:6;-1:-1:-1;;;;;19337:6:0;10183:10;19482:23;19474:68;;;;-1:-1:-1;;;19474:68:0;;8407:2:1;19474:68:0;;;8389:21:1;;;8426:18;;;8419:30;8485:34;8465:18;;;8458:62;8537:18;;19474:68:0;8379:182:1;19474:68:0;45413:21:::1;:44:::0;45318:147::o;32723:269::-;32816:4;32833:129;10183:10;32856:7;32865:96;32904:15;32865:96;;;;;;;;;;;;;;;;;10183:10;32865:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;32865:34:0;;;;;;;;;;;;:38;:96::i;31681:167::-;31759:4;31776:42;10183:10;31800:9;31811:6;31776:9;:42::i;45182:128::-;19310:7;19337:6;-1:-1:-1;;;;;19337:6:0;10183:10;19482:23;19474:68;;;;-1:-1:-1;;;19474:68:0;;8407:2:1;19474:68:0;;;8389:21:1;;;8426:18;;;8419:30;8485:34;8465:18;;;8458:62;8537:18;;19474:68:0;8379:182:1;19474:68:0;45268:19:::1;:34:::0;45182:128::o;45774:190::-;19310:7;19337:6;-1:-1:-1;;;;;19337:6:0;10183:10;19482:23;19474:68;;;;-1:-1:-1;;;19474:68:0;;8407:2:1;19474:68:0;;;8389:21:1;;;8426:18;;;8419:30;8485:34;8465:18;;;8458:62;8537:18;;19474:68:0;8379:182:1;19474:68:0;45890:31:::1;:66:::0;45774:190::o;34991:112::-;19310:7;19337:6;-1:-1:-1;;;;;19337:6:0;10183:10;19482:23;19474:68;;;;-1:-1:-1;;;19474:68:0;;8407:2:1;19474:68:0;;;8389:21:1;;;8426:18;;;8419:30;8485:34;8465:18;;;8458:62;8537:18;;19474:68:0;8379:182:1;19474:68:0;-1:-1:-1;;;;;35060:27:0::1;35090:5;35060:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;35060:35:0::1;::::0;;34991:112::o;20207:244::-;19310:7;19337:6;-1:-1:-1;;;;;19337:6:0;10183:10;19482:23;19474:68;;;;-1:-1:-1;;;19474:68:0;;8407:2:1;19474:68:0;;;8389:21:1;;;8426:18;;;8419:30;8485:34;8465:18;;;8458:62;8537:18;;19474:68:0;8379:182:1;19474:68:0;-1:-1:-1;;;;;20296:22:0;::::1;20288:73;;;::::0;-1:-1:-1;;;20288:73:0;;6116:2:1;20288:73:0::1;::::0;::::1;6098:21:1::0;6155:2;6135:18;;;6128:30;6194:34;6174:18;;;6167:62;6265:8;6245:18;;;6238:36;6291:19;;20288:73:0::1;6088:228:1::0;20288:73:0::1;20398:6;::::0;;20377:38:::1;::::0;-1:-1:-1;;;;;20377:38:0;;::::1;::::0;20398:6;::::1;::::0;20377:38:::1;::::0;::::1;20426:6;:17:::0;;;::::1;-1:-1:-1::0;;;;;20426:17:0;;;::::1;::::0;;;::::1;::::0;;20207:244::o;35705:188::-;19310:7;19337:6;-1:-1:-1;;;;;19337:6:0;10183:10;19482:23;19474:68;;;;-1:-1:-1;;;19474:68:0;;8407:2:1;19474:68:0;;;8389:21:1;;;8426:18;;;8419:30;8485:34;8465:18;;;8458:62;8537:18;;19474:68:0;8379:182:1;19474:68:0;35792:9:::1;35787:99;35803:20:::0;;::::1;35787:99;;;35872:4;35841:14;:28;35856:9;;35866:1;35856:12;;;;;-1:-1:-1::0;;;35856:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35841:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35841:28:0;:35;;-1:-1:-1;;35841:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35825:3:::1;::::0;::::1;:::i;:::-;;;35787:99;;;;35705:188:::0;;:::o;6463:98::-;6521:7;6548:5;6552:1;6548;:5;:::i;:::-;6541:12;6463:98;-1:-1:-1;;;6463:98:0:o;38796:337::-;-1:-1:-1;;;;;38889:19:0;;38881:68;;;;-1:-1:-1;;;38881:68:0;;9584:2:1;38881:68:0;;;9566:21:1;9623:2;9603:18;;;9596:30;9662:34;9642:18;;;9635:62;9733:6;9713:18;;;9706:34;9757:19;;38881:68:0;9556:226:1;38881:68:0;-1:-1:-1;;;;;38968:21:0;;38960:68;;;;-1:-1:-1;;;38960:68:0;;6523:2:1;38960:68:0;;;6505:21:1;6562:2;6542:18;;;6535:30;6601:34;6581:18;;;6574:62;6672:4;6652:18;;;6645:32;6694:19;;38960:68:0;6495:224:1;38960:68:0;-1:-1:-1;;;;;39041:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;39093:32;;9933:25:1;;;39093:32:0;;9906:18:1;39093:32:0;;;;;;;38796:337;;;:::o;39141:1772::-;-1:-1:-1;;;;;39263:18:0;;39255:68;;;;-1:-1:-1;;;39255:68:0;;9178:2:1;39255:68:0;;;9160:21:1;9217:2;9197:18;;;9190:30;9256:34;9236:18;;;9229:62;9327:7;9307:18;;;9300:35;9352:19;;39255:68:0;9150:227:1;39255:68:0;-1:-1:-1;;;;;39342:16:0;;39334:64;;;;-1:-1:-1;;;39334:64:0;;5301:2:1;39334:64:0;;;5283:21:1;5340:2;5320:18;;;5313:30;5379:34;5359:18;;;5352:62;5450:5;5430:18;;;5423:33;5473:19;;39334:64:0;5273:225:1;39334:64:0;39426:1;39417:6;:10;39409:64;;;;-1:-1:-1;;;39409:64:0;;8768:2:1;39409:64:0;;;8750:21:1;8807:2;8787:18;;;8780:30;8846:34;8826:18;;;8819:62;8917:11;8897:18;;;8890:39;8946:19;;39409:64:0;8740:231:1;39409:64:0;-1:-1:-1;;;;;39493:20:0;;;;;;:14;:20;;;;;;;;39492:21;:44;;;;-1:-1:-1;;;;;;39518:18:0;;;;;;:14;:18;;;;;;;;39517:19;39492:44;39484:84;;;;-1:-1:-1;;;39484:84:0;;7282:2:1;39484:84:0;;;7264:21:1;7321:2;7301:18;;;7294:30;7360:29;7340:18;;;7333:57;7407:18;;39484:84:0;7254:177:1;39484:84:0;19310:7;19337:6;-1:-1:-1;;;;;39584:15:0;;;19337:6;;39584:15;;;;:32;;-1:-1:-1;19310:7:0;19337:6;-1:-1:-1;;;;;39603:13:0;;;19337:6;;39603:13;;39584:32;39581:125;;;39649:12;;39639:6;:22;;39631:75;;;;-1:-1:-1;;;39631:75:0;;7998:2:1;39631:75:0;;;7980:21:1;8037:2;8017:18;;;8010:30;8076:34;8056:18;;;8049:62;8147:10;8127:18;;;8120:38;8175:19;;39631:75:0;7970:230:1;39631:75:0;39994:28;40025:24;40043:4;40025:9;:24::i;:::-;40111:31;;40182:12;;39994:55;;-1:-1:-1;40087:55:0;;;;40158:36;;40155:112;;40243:12;;40220:35;;40155:112;40297:19;:50;;;;-1:-1:-1;40334:13:0;;;;40333:14;40297:50;:88;;;;;40372:13;-1:-1:-1;;;;;40364:21:0;:4;-1:-1:-1;;;;;40364:21:0;;;40297:88;:123;;;;-1:-1:-1;40402:18:0;;;;;;;40297:123;40279:213;;;40447:33;40459:20;40447:11;:33::i;:::-;40507:22;;;;40504:65;;;40546:11;40554:2;40546:7;:11::i;:::-;-1:-1:-1;;;;;40761:24:0;;40642:12;40761:24;;;:18;:24;;;;;;40657:4;;40761:24;;;:50;;-1:-1:-1;;;;;;40789:22:0;;;;;;:18;:22;;;;;;;;40761:50;40758:97;;;-1:-1:-1;40838:5:0;40758:97;40867:38;40882:4;40887:2;40890:6;40897:7;40867:14;:38::i;:::-;39141:1772;;;;;;:::o;7582:206::-;7668:7;7729:12;7721:6;;;;7713:29;;;;-1:-1:-1;;;7713:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;7764:5:0;;;7582:206::o;37232:163::-;37273:7;37294:15;37311;37330:19;:17;:19::i;:::-;37293:56;;-1:-1:-1;37293:56:0;-1:-1:-1;37367:20:0;37293:56;;37367:11;:20::i;:::-;37360:27;;;;37232:163;:::o;6142:98::-;6200:7;6227:5;6231:1;6227;:5;:::i;36030:419::-;36089:7;36098;36107;36116;36125;36134;36155:23;36180:12;36194:18;36216:20;36228:7;36216:11;:20::i;:::-;36154:82;;;;;;36248:15;36265:23;36290:12;36306:50;36318:7;36327:4;36333:10;36345;:8;:10::i;:::-;36306:11;:50::i;:::-;36247:109;;;;-1:-1:-1;36247:109:0;;-1:-1:-1;36407:15:0;;-1:-1:-1;36424:4:0;;-1:-1:-1;36430:10:0;;-1:-1:-1;36030:419:0;;-1:-1:-1;;;;;36030:419:0:o;41175:794::-;30329:13;:20;;-1:-1:-1;;30329:20:0;30345:4;30329:20;;;41341:16:::1;::::0;;41355:1:::1;41341:16:::0;;;;;::::1;::::0;;-1:-1:-1;;41341:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;41341:16:0::1;41317:40;;41386:4;41368;41373:1;41368:7;;;;;;-1:-1:-1::0;;;41368:7:0::1;;;;;;;;;;;;;;:23;-1:-1:-1::0;;;;;41368:23:0::1;;;-1:-1:-1::0;;;;;41368:23:0::1;;;::::0;::::1;41412:15;-1:-1:-1::0;;;;;41412:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41402:4;41407:1;41402:7;;;;;;-1:-1:-1::0;;;41402:7:0::1;;;;;;;;;;;;;;:32;-1:-1:-1::0;;;;;41402:32:0::1;;;-1:-1:-1::0;;;;;41402:32:0::1;;;::::0;::::1;41447:71;41464:4;41479:15;41497:20;41447:8;:71::i;:::-;41557:233;::::0;;;;-1:-1:-1;;;;;41557:15:0::1;:66;::::0;::::1;::::0;:233:::1;::::0;41638:20;;41673:1:::1;::::0;41717:4;;41744::::1;::::0;41764:15:::1;::::0;41557:233:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;41832:21:0::1;::::0;-1:-1:-1;;41867:22:0;;;-1:-1:-1;41864:98:0::1;;41906:15;::::0;:44:::1;::::0;-1:-1:-1;;;;;41906:15:0;;::::1;::::0;:44;::::1;;;::::0;41931:18;;41906:15:::1;:44:::0;:15;:44;41931:18;41906:15;:44;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;41864:98;-1:-1:-1::0;;30372:13:0;:21;;-1:-1:-1;;30372:21:0;;;-1:-1:-1;41175:794:0:o;40921:246::-;40986:13;;40976:7;:23;41026:19;;41010:13;:35;41073:13;-1:-1:-1;;;;;41060:26:0;;;;;;;41056:104;;;41127:21;;41111:13;:37;41056:104;40921:246;:::o;42050:818::-;42161:7;42157:40;;42183:14;:12;:14::i;:::-;-1:-1:-1;;;;;42214:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;42238:22:0;;;;;;:11;:22;;;;;;;;42237:23;42214:46;42210:597;;;42277:48;42299:6;42307:9;42318:6;42277:21;:48::i;:::-;42210:597;;;-1:-1:-1;;;;;42348:19:0;;;;;;:11;:19;;;;;;;;42347:20;:46;;;;-1:-1:-1;;;;;;42371:22:0;;;;;;:11;:22;;;;;;;;42347:46;42343:464;;;42410:46;42430:6;42438:9;42449:6;42410:19;:46::i;42343:464::-;-1:-1:-1;;;;;42479:19:0;;;;;;:11;:19;;;;;;;;42478:20;:47;;;;-1:-1:-1;;;;;;42503:22:0;;;;;;:11;:22;;;;;;;;42502:23;42478:47;42474:333;;;42542:44;42560:6;42568:9;42579:6;42542:17;:44::i;42474:333::-;-1:-1:-1;;;;;42608:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;42631:22:0;;;;;;:11;:22;;;;;;;;42608:45;42604:203;;;42670:48;42692:6;42700:9;42711:6;42670:21;:48::i;42604:203::-;42751:44;42769:6;42777:9;42788:6;42751:17;:44::i;:::-;42823:7;42819:41;;42845:15;35407;;35397:7;:25;35449:21;;35433:13;:37;35353:125;42845:15;42050:818;;;;:::o;37403:555::-;37500:7;;37536;;37453;;;;;37554:289;37578:9;:16;37574:20;;37554:289;;;37644:7;37620;:21;37628:9;37638:1;37628:12;;;;;;-1:-1:-1;;;37628:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37628:12:0;37620:21;;;;;;;;;;;;;:31;;:66;;;37679:7;37655;:21;37663:9;37673:1;37663:12;;;;;;-1:-1:-1;;;37663:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37663:12:0;37655:21;;;;;;;;;;;;;:31;37620:66;37616:97;;;37696:7;;37705;;37688:25;;;;;;;;;37616:97;37738:34;37750:7;:21;37758:9;37768:1;37758:12;;;;;;-1:-1:-1;;;37758:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37758:12:0;37750:21;;;;;;;;;;;;;37738:7;;:11;:34::i;:::-;37728:44;;37797:34;37809:7;:21;37817:9;37827:1;37817:12;;;;;;-1:-1:-1;;;37817:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37817:12:0;37809:21;;;;;;;;;;;;;37797:7;;:11;:34::i;:::-;37787:44;-1:-1:-1;37596:3:0;;;;:::i;:::-;;;;37554:289;;;-1:-1:-1;37879:7:0;;37867;;:20;;:11;:20::i;:::-;37857:7;:30;37853:61;;;37897:7;;37906;;37889:25;;;;;;;;37853:61;37933:7;;-1:-1:-1;37942:7:0;-1:-1:-1;37403:555:0;;;:::o;36457:330::-;36517:7;36526;36535;36555:12;36570:24;36586:7;36570:15;:24::i;:::-;36555:39;;36605:18;36626:30;36648:7;36626:21;:30::i;:::-;36605:51;-1:-1:-1;36667:23:0;36693:33;36605:51;36693:17;:7;36705:4;36693:11;:17::i;:::-;:21;;:33::i;:::-;36667:59;36762:4;;-1:-1:-1;36768:10:0;;-1:-1:-1;36457:330:0;;-1:-1:-1;;;36457:330:0:o;36795:429::-;36910:7;;;;36966:24;:7;36978:11;36966;:24::i;:::-;36948:42;-1:-1:-1;37001:12:0;37016:21;:4;37025:11;37016:8;:21::i;:::-;37001:36;-1:-1:-1;37048:18:0;37069:27;:10;37084:11;37069:14;:27::i;:::-;37048:48;-1:-1:-1;37107:23:0;37133:33;37048:48;37133:17;:7;37145:4;37133:11;:17::i;:33::-;37185:7;;;;-1:-1:-1;37211:4:0;;-1:-1:-1;36795:429:0;;-1:-1:-1;;;;;;;36795:429:0:o;35111:234::-;35157:7;;:12;:34;;;;-1:-1:-1;35173:13:0;;:18;35157:34;35154:46;;;35193:7;;35154:46;35230:7;;;35212:15;:25;35272:13;;;35248:21;:37;-1:-1:-1;35298:11:0;;;;35320:17;35111:234;:::o;43969:563::-;44072:15;44089:23;44114:12;44128:23;44153:12;44167:18;44189:19;44200:7;44189:10;:19::i;:::-;-1:-1:-1;;;;;44237:15:0;;;;;;:7;:15;;;;;;44071:137;;-1:-1:-1;44071:137:0;;-1:-1:-1;44071:137:0;;-1:-1:-1;44071:137:0;-1:-1:-1;44071:137:0;-1:-1:-1;44071:137:0;-1:-1:-1;44237:28:0;;44257:7;44237:19;:28::i;:::-;-1:-1:-1;;;;;44219:15:0;;;;;;:7;:15;;;;;;;;:46;;;;44294:7;:15;;;;:28;;44314:7;44294:19;:28::i;:::-;-1:-1:-1;;;;;44276:15:0;;;;;;;:7;:15;;;;;;:46;;;;44354:18;;;;;;;:39;;44377:15;44354:22;:39::i;:::-;-1:-1:-1;;;;;44333:18:0;;;;;;:7;:18;;;;;:60;44404:26;44419:10;44404:14;:26::i;:::-;44441:23;44453:4;44459;44441:11;:23::i;:::-;44497:9;-1:-1:-1;;;;;44480:44:0;44489:6;-1:-1:-1;;;;;44480:44:0;;44508:15;44480:44;;;;9933:25:1;;9921:2;9906:18;;9888:76;44480:44:0;;;;;;;;43969:563;;;;;;;;;:::o;43386:575::-;43487:15;43504:23;43529:12;43543:23;43568:12;43582:18;43604:19;43615:7;43604:10;:19::i;:::-;-1:-1:-1;;;;;43652:15:0;;;;;;:7;:15;;;;;;43486:137;;-1:-1:-1;43486:137:0;;-1:-1:-1;43486:137:0;;-1:-1:-1;43486:137:0;-1:-1:-1;43486:137:0;-1:-1:-1;43486:137:0;-1:-1:-1;43652:28:0;;43486:137;43652:19;:28::i;:::-;-1:-1:-1;;;;;43634:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;43712:18;;;;;:7;:18;;;;;:39;;43735:15;43712:22;:39::i;:::-;-1:-1:-1;;;;;43691:18:0;;;;;;:7;:18;;;;;;;;:60;;;;43783:7;:18;;;;:39;;43806:15;43783:22;:39::i;42876:502::-;42975:15;42992:23;43017:12;43031:23;43056:12;43070:18;43092:19;43103:7;43092:10;:19::i;:::-;-1:-1:-1;;;;;43140:15:0;;;;;;:7;:15;;;;;;42974:137;;-1:-1:-1;42974:137:0;;-1:-1:-1;42974:137:0;;-1:-1:-1;42974:137:0;-1:-1:-1;42974:137:0;-1:-1:-1;42974:137:0;-1:-1:-1;43140:28:0;;42974:137;43140:19;:28::i;44540:634::-;44643:15;44660:23;44685:12;44699:23;44724:12;44738:18;44760:19;44771:7;44760:10;:19::i;:::-;-1:-1:-1;;;;;44808:15:0;;;;;;:7;:15;;;;;;44642:137;;-1:-1:-1;44642:137:0;;-1:-1:-1;44642:137:0;;-1:-1:-1;44642:137:0;-1:-1:-1;44642:137:0;-1:-1:-1;44642:137:0;-1:-1:-1;44808:28:0;;44828:7;44808:19;:28::i;:::-;-1:-1:-1;;;;;44790:15:0;;;;;;:7;:15;;;;;;;;:46;;;;44865:7;:15;;;;:28;;44885:7;6248:98;6306:7;6333:5;6337:1;6333;:5;:::i;38329:154::-;38393:7;38420:55;38459:5;38420:20;38432:7;;38420;:11;;:20;;;;:::i;:::-;:24;;:55::i;38491:166::-;38561:7;38588:61;38633:5;38588:26;38600:13;;38588:7;:11;;:26;;;;:::i;6354:98::-;6412:7;6439:5;6443:1;6439;:5;:::i;37966:355::-;38029:19;38052:10;:8;:10::i;:::-;38029:33;-1:-1:-1;38073:18:0;38094:27;:10;38029:33;38094:14;:27::i;:::-;38173:4;38157:22;;;;:7;:22;;;;;;38073:48;;-1:-1:-1;38157:38:0;;38073:48;38157:26;:38::i;:::-;38148:4;38132:22;;;;:7;:22;;;;;;;;:63;;;;38209:11;:26;;;;;;38206:107;;;38291:4;38275:22;;;;:7;:22;;;;;;:38;;38302:10;38275:26;:38::i;:::-;38266:4;38250:22;;;;:7;:22;;;;;:63;37966:355;;;:::o;35545:147::-;35623:7;;:17;;35635:4;35623:11;:17::i;:::-;35613:7;:27;35664:10;;:20;;35679:4;35664:14;:20::i;:::-;35651:10;:33;-1:-1:-1;;35545:147:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;179:257;;291:2;279:9;270:7;266:23;262:32;259:2;;;312:6;304;297:22;259:2;356:9;343:23;375:31;400:5;375:31;:::i;441:261::-;;564:2;552:9;543:7;539:23;535:32;532:2;;;585:6;577;570:22;532:2;622:9;616:16;641:31;666:5;641:31;:::i;977:398::-;;;1106:2;1094:9;1085:7;1081:23;1077:32;1074:2;;;1127:6;1119;1112:22;1074:2;1171:9;1158:23;1190:31;1215:5;1190:31;:::i;:::-;1240:5;-1:-1:-1;1297:2:1;1282:18;;1269:32;1310:33;1269:32;1310:33;:::i;:::-;1362:7;1352:17;;;1064:311;;;;;:::o;1380:466::-;;;;1526:2;1514:9;1505:7;1501:23;1497:32;1494:2;;;1547:6;1539;1532:22;1494:2;1591:9;1578:23;1610:31;1635:5;1610:31;:::i;:::-;1660:5;-1:-1:-1;1717:2:1;1702:18;;1689:32;1730:33;1689:32;1730:33;:::i;:::-;1484:362;;1782:7;;-1:-1:-1;;;1836:2:1;1821:18;;;;1808:32;;1484:362::o;1851:325::-;;;1980:2;1968:9;1959:7;1955:23;1951:32;1948:2;;;2001:6;1993;1986:22;1948:2;2045:9;2032:23;2064:31;2089:5;2064:31;:::i;:::-;2114:5;2166:2;2151:18;;;;2138:32;;-1:-1:-1;;;1938:238:1:o;2181:665::-;;;2328:2;2316:9;2307:7;2303:23;2299:32;2296:2;;;2349:6;2341;2334:22;2296:2;2394:9;2381:23;2423:18;2464:2;2456:6;2453:14;2450:2;;;2485:6;2477;2470:22;2450:2;2528:6;2517:9;2513:22;2503:32;;2573:7;2566:4;2562:2;2558:13;2554:27;2544:2;;2600:6;2592;2585:22;2544:2;2645;2632:16;2671:2;2663:6;2660:14;2657:2;;;2692:6;2684;2677:22;2657:2;2750:7;2745:2;2735:6;2732:1;2728:14;2724:2;2720:23;2716:32;2713:45;2710:2;;;2776:6;2768;2761:22;2710:2;2812;2804:11;;;;;2834:6;;-1:-1:-1;2286:560:1;;-1:-1:-1;;;;2286:560:1:o;2851:190::-;;2960:2;2948:9;2939:7;2935:23;2931:32;2928:2;;;2981:6;2973;2966:22;2928:2;3009:26;3025:9;3009:26;:::i;3046:190::-;;3158:2;3146:9;3137:7;3133:23;3129:32;3126:2;;;3179:6;3171;3164:22;3126:2;-1:-1:-1;3207:23:1;;3116:120;-1:-1:-1;3116:120:1:o;3241:258::-;;;3367:2;3355:9;3346:7;3342:23;3338:32;3335:2;;;3388:6;3380;3373:22;3335:2;3429:9;3416:23;3406:33;;3458:35;3489:2;3478:9;3474:18;3458:35;:::i;:::-;3448:45;;3325:174;;;;;:::o;4432:662::-;;4573:2;4602;4591:9;4584:21;4634:6;4628:13;4677:6;4672:2;4661:9;4657:18;4650:34;4702:4;4715:140;4729:6;4726:1;4723:13;4715:140;;;4824:14;;;4820:23;;4814:30;4790:17;;;4809:2;4786:26;4779:66;4744:10;;4715:140;;;4873:6;4870:1;4867:13;4864:2;;;4943:4;4938:2;4929:6;4918:9;4914:22;4910:31;4903:45;4864:2;-1:-1:-1;5010:2:1;4998:15;5015:66;4994:88;4979:104;;;;5085:2;4975:113;;4553:541;-1:-1:-1;;;4553:541:1:o;9969:1029::-;;10279:3;10268:9;10264:19;10310:6;10299:9;10292:25;10336:2;10374:6;10369:2;10358:9;10354:18;10347:34;10417:3;10412:2;10401:9;10397:18;10390:31;10441:6;10476;10470:13;10507:6;10499;10492:22;10545:3;10534:9;10530:19;10523:26;;10584:2;10576:6;10572:15;10558:29;;10605:4;10618:218;10632:6;10629:1;10626:13;10618:218;;;10697:13;;-1:-1:-1;;;;;10693:62:1;10681:75;;10811:15;;;;10776:12;;;;10654:1;10647:9;10618:218;;;-1:-1:-1;;;;;;;10892:55:1;;;;10887:2;10872:18;;10865:83;-1:-1:-1;;;10979:3:1;10964:19;10957:35;10853:3;10240:758;-1:-1:-1;;;10240:758:1:o;11192:128::-;;11263:1;11259:6;11256:1;11253:13;11250:2;;;11269:18;;:::i;:::-;-1:-1:-1;11305:9:1;;11240:80::o;11325:274::-;;11391:1;11381:2;;-1:-1:-1;;;11423:1:1;11416:88;11527:4;11524:1;11517:15;11555:4;11552:1;11545:15;11381:2;-1:-1:-1;11584:9:1;;11371:228::o;11604:::-;;11770:1;11702:66;11698:74;11695:1;11692:81;11687:1;11680:9;11673:17;11669:105;11666:2;;;11777:18;;:::i;:::-;-1:-1:-1;11817:9:1;;11656:176::o;11837:125::-;;11905:1;11902;11899:8;11896:2;;;11910:18;;:::i;:::-;-1:-1:-1;11947:9:1;;11886:76::o;11967:437::-;12046:1;12042:12;;;;12089;;;12110:2;;12164:4;12156:6;12152:17;12142:27;;12110:2;12217;12209:6;12206:14;12186:18;12183:38;12180:2;;;-1:-1:-1;;;12251:1:1;12244:88;12355:4;12352:1;12345:15;12383:4;12380:1;12373:15;12180:2;;12022:382;;;:::o;12409:195::-;;12479:66;12472:5;12469:77;12466:2;;;12549:18;;:::i;:::-;-1:-1:-1;12596:1:1;12585:13;;12456:148::o;12609:184::-;-1:-1:-1;;;12658:1:1;12651:88;12758:4;12755:1;12748:15;12782:4;12779:1;12772:15;12798:154;-1:-1:-1;;;;;12877:5:1;12873:54;12866:5;12863:65;12853:2;;12942:1;12939;12932:12
Swarm Source
ipfs://09df6451bb7f0b0d7d0ef732f8072ebc308ee227145137065d4f0fb69f9a0685
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.