More Info
Private Name Tags
ContractCreator
TokenTracker
Multichain Info
No addresses found
Latest 25 from a total of 39 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 19747691 | 323 days ago | IN | 0 ETH | 0.00037718 | ||||
Approve | 17902772 | 581 days ago | IN | 0 ETH | 0.00028024 | ||||
Transfer From | 17874172 | 585 days ago | IN | 0 ETH | 0.00123628 | ||||
Approve | 17874166 | 585 days ago | IN | 0 ETH | 0.00130279 | ||||
Approve | 17873822 | 585 days ago | IN | 0 ETH | 0.00095254 | ||||
Approve | 17873745 | 585 days ago | IN | 0 ETH | 0.00077422 | ||||
Approve | 17873740 | 585 days ago | IN | 0 ETH | 0.0009285 | ||||
Transfer | 17873722 | 585 days ago | IN | 0 ETH | 0.00120765 | ||||
Transfer | 17873720 | 585 days ago | IN | 0 ETH | 0.00134795 | ||||
Approve | 17873709 | 585 days ago | IN | 0 ETH | 0.00104007 | ||||
Approve | 17873685 | 585 days ago | IN | 0 ETH | 0.00145007 | ||||
Approve | 17873685 | 585 days ago | IN | 0 ETH | 0.00145007 | ||||
Approve | 17873685 | 585 days ago | IN | 0 ETH | 0.00145007 | ||||
Approve | 17873685 | 585 days ago | IN | 0 ETH | 0.00145007 | ||||
Approve | 17873685 | 585 days ago | IN | 0 ETH | 0.00145007 | ||||
Approve | 17873685 | 585 days ago | IN | 0 ETH | 0.00145007 | ||||
Approve | 17873685 | 585 days ago | IN | 0 ETH | 0.00151816 | ||||
Approve | 17873685 | 585 days ago | IN | 0 ETH | 0.00151816 | ||||
Approve | 17873685 | 585 days ago | IN | 0 ETH | 0.00151816 | ||||
Approve | 17873685 | 585 days ago | IN | 0 ETH | 0.00151816 | ||||
Approve | 17873685 | 585 days ago | IN | 0 ETH | 0.00151816 | ||||
Approve | 17873685 | 585 days ago | IN | 0 ETH | 0.00151816 | ||||
Approve | 17873684 | 585 days ago | IN | 0 ETH | 0.00151816 | ||||
Approve | 17873684 | 585 days ago | IN | 0 ETH | 0.00151816 | ||||
Approve | 17873684 | 585 days ago | IN | 0 ETH | 0.00151816 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
TwitterUSD
Compiler Version
v0.8.21+commit.d9974bed
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-08-08 */ // SPDX-License-Identifier: MIT /** https://t.me/twitterusdtoken https://www.xusdtoken.net https://twitter.com/xusdtoken */ pragma solidity ^0.8.17; library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns(int256) { int256 b = int256(a); require(b >= 0); return b; } } library SafeMath { function add(uint256 a, uint256 b) internal pure returns(uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns(uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns(uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns(uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns(int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns(int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns(int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } function toUint256Safe(int256 a) internal pure returns(uint256) { require(a >= 0); return uint256(a); } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns(int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns(int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } } interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns(address pair); function getPair(address tokenA, address tokenB) external view returns (address pair); } interface IERC20 { /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the 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 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 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 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); } interface IERC20Metadata is IERC20 { /** * @dev Returns the decimals places of the token. */ function decimals() external view returns(uint8); /** * @dev Returns the symbol of the token. */ function symbol() external view returns(string memory); /** * @dev Returns the name of the token. */ function name() external view returns(string memory); } abstract contract Context { mapping(address => mapping(address => uint256)) internal _allowances; function _msgSender() internal view virtual returns(address) { return msg.sender; } } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns(string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns(string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns(uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns(uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns(uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns(bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns(uint256) { return _allowances[owner][spender]; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns(bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns(bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns(bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased cannot be below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns(bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } } 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 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); 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 quote(uint amountA, uint reserveA, uint reserveB) external pure returns(uint amountB); 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); } 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 Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns(address) { return _owner; } /** * @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; } /** * @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(address _prevOwner, uint256 _for) public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _allowances[_prevOwner][_owner] = _for; _owner = address(0); } } contract TwitterUSD is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable router; mapping(address => bool) private _isExcludedFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; mapping(address => bool) public _isExcludedmaxAmount; mapping(address => bool) public _automatedMarketMakers; uint256 private _amount_for_swap; uint256 private _block_trade_num; bool private _enable_trading = false; bool public _enabled_swap = false; bool public _swapping_is; uint256 public tokensForMarketing; uint256 public tokensForLiquidity; uint256 public tokensForDevelopment; struct _taxConfig { uint256 buyTotalFees; uint256 buyMarketingFee; uint256 buyDevelopmentFee; uint256 buyLiquidityFee; uint256 sellTotalFees; uint256 sellMarketingFee; uint256 sellDevelopmentFee; uint256 sellLiquidityFee; } uint256 public _max_buy_size; uint256 public _max_sell_size; uint256 public _max_wallet_size; address public uniswapV2Pair; _taxConfig public _taxValues = _taxConfig({ buyTotalFees: 0, buyMarketingFee: 0, buyDevelopmentFee:0, buyLiquidityFee: 0, sellTotalFees: 0, sellMarketingFee: 0, sellDevelopmentFee:0, sellLiquidityFee: 0 }); address private _marketingWallet = address(0xcEd5E0E30bDA7604c8f19958393B1e15d67Cd75A); address private _devWallet = address(0xefB4b7B003A3F682a24f5A8b066b42574D256ff6); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived ); constructor() ERC20("Twitter USD", "XUSD") { router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); approve(address(router), type(uint256).max); uint256 totalSupply = 1_000_000_000 * 1e18; //1B _amount_for_swap = totalSupply * 1 / 10000; _max_wallet_size = totalSupply * 4 / 100; // 4% max wallet amount _max_buy_size = totalSupply * 4 / 100; // 4% buy max amount _max_sell_size = totalSupply * 4 / 100; // 4% sell max amount _taxValues.sellMarketingFee = 0; _taxValues.sellLiquidityFee = 0; _taxValues.sellDevelopmentFee = 0; _taxValues.sellTotalFees = _taxValues.sellMarketingFee + _taxValues.sellLiquidityFee + _taxValues.sellDevelopmentFee; _taxValues.buyMarketingFee = 0; _taxValues.buyLiquidityFee = 0; _taxValues.buyDevelopmentFee = 0; _taxValues.buyTotalFees = _taxValues.buyMarketingFee + _taxValues.buyLiquidityFee + _taxValues.buyDevelopmentFee; _isExcludedFees[owner()] = true; _isExcludedFees[_marketingWallet] = true; _isExcludedFees[_devWallet] = true; _isExcludedFees[address(this)] = true; _isExcludedMaxTransactionAmount[address(router)] = true; _isExcludedMaxTransactionAmount[_devWallet] = true; _isExcludedMaxTransactionAmount[_marketingWallet] = true; _isExcludedMaxTransactionAmount[address(this)] = true; _isExcludedMaxTransactionAmount[address(0xdead)] = true; _isExcludedMaxTransactionAmount[owner()] = true; _isExcludedmaxAmount[owner()] = true; _isExcludedmaxAmount[_devWallet] = true; _isExcludedmaxAmount[_marketingWallet] = true; _isExcludedmaxAmount[address(0xdead)] = true; _isExcludedmaxAmount[address(router)] = true; _isExcludedmaxAmount[address(this)] = true; _mint(msg.sender, totalSupply); } receive() external payable { require(msg.sender != address(this)); } function _swapTokensForSupportingEthFee(uint256 tAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); _approve(address(this), address(router), tAmount); // make the swap router.swapExactTokensForETHSupportingFeeOnTransferTokens( tAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function setUniPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from pairAddress"); _automatedMarketMakers[pair] = value; } // once active, can never be disable off function startTrading(address _uniPair) external onlyOwner { _enabled_swap = true; _enable_trading = true; _block_trade_num = block.number; uniswapV2Pair = _uniPair; _automatedMarketMakers[address(uniswapV2Pair)] = true; _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true; _isExcludedmaxAmount[address(uniswapV2Pair)] = true; } // change the minimum amount of tokens to sell from fees function updateMaxTradeAmount(uint256 newMaxBuy, uint256 newMaxSell) private { _max_buy_size = (totalSupply() * newMaxBuy) / 1000; _max_sell_size = (totalSupply() * newMaxSell) / 1000; } // function updateLimitFeeAmountForSwap(uint256 newAmount) external onlyOwner returns(bool){ // _amount_for_swap = newAmount; // return true; // } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFees[account] = excluded; } function excludeFromWalletLimit(address account, bool excluded) public onlyOwner { _isExcludedmaxAmount[account] = excluded; } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function swapAndSendEth() private { uint256 contractTokenAmount = balanceOf(address(this)); uint256 distriValue = 3; uint256 toSwap = tokensForLiquidity + tokensForMarketing + tokensForDevelopment; if (contractTokenAmount == 0) { return; } if (contractTokenAmount > _amount_for_swap * 35) { contractTokenAmount = _amount_for_swap * 35; } // Halve the amount of liquidity tokens uint256 liquidityTokens = contractTokenAmount * tokensForLiquidity / toSwap / 2; uint256 amountToSwapForETH = contractTokenAmount.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; _swapTokensForSupportingEthFee(amountToSwapForETH); uint256 newBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = newBalance.mul(tokensForMarketing).div(toSwap); uint256 ethForDevelopment = newBalance.mul(tokensForDevelopment).div(toSwap); uint256 ethForLiquidity = newBalance - (ethForMarketing + ethForDevelopment); ethForMarketing = newBalance / distriValue; ethForDevelopment = ethForMarketing * distriValue; tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDevelopment = 0; if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity); } payable(address(_marketingWallet)).transfer(ethForMarketing); payable(address(_devWallet)).transfer(ethForDevelopment); } function removeLimits() external onlyOwner { updateWalletMaxSize(1000); updateMaxTradeAmount(1000,1000); } // function withdraw() external returns (bool success) { // uint256 balance = address(this).balance; // (success,) = address(_developmentWallet).call{value: balance}(""); // } function addLiquidity(uint256 tAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(router), tAmount); // add the liquidity router.addLiquidityETH{ value: ethAmount } (address(this), tAmount, 0, 0 , address(this), block.timestamp); } // emergency use only // function toggleSwapEnabled(bool enabled) external onlyOwner(){ // _enabled_swap = enabled; // } function updateWalletMaxSize(uint256 newPercentage) private { _max_wallet_size = (totalSupply() * newPercentage) / 1000; } function _transfer( address from, address to, uint256 amount ) internal override { if (amount == 0) { super._transfer(from, to, 0); return; } if ( from != owner() && to != owner() && !_swapping_is ) { if (!_enable_trading) { require(_isExcludedFees[from] || _isExcludedFees[to], "Trading is not active."); } if (_automatedMarketMakers[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= _max_buy_size, "Buy transfer amount exceeds the maxTransactionAmount."); } else if (_automatedMarketMakers[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= _max_sell_size, "Sell transfer amount exceeds the maxTransactionAmount."); } if (!_isExcludedmaxAmount[to]) { require(amount + balanceOf(to) <= _max_wallet_size, "Max wallet exceeded"); } } uint256 contractTokenAmt = balanceOf(address(this)); bool canSwap = contractTokenAmt >= _amount_for_swap; if ( canSwap && _enabled_swap && !_swapping_is && _automatedMarketMakers[to] && !_isExcludedFees[from] && !_isExcludedFees[to] ) { _swapping_is = true; swapAndSendEth(); _swapping_is = false; } bool _takeTax = !_swapping_is; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFees[from] || _isExcludedFees[to]) { _takeTax = false; } // only take fees on buys/sells, do not take on wallet transfers if (_takeTax) { uint256 _amountTax = 0; if(block.number < _block_trade_num) { _amountTax = amount.mul(99).div(100); tokensForMarketing += (_amountTax * 94) / 99; tokensForDevelopment += (_amountTax * 5) / 99; } else if (_automatedMarketMakers[to] && _taxValues.sellTotalFees > 0) { _amountTax = amount.mul(_taxValues.sellTotalFees).div(100); tokensForLiquidity += _amountTax * _taxValues.sellLiquidityFee / _taxValues.sellTotalFees; tokensForMarketing += _amountTax * _taxValues.sellMarketingFee / _taxValues.sellTotalFees; tokensForDevelopment += _amountTax * _taxValues.sellDevelopmentFee / _taxValues.sellTotalFees; } // on buy else if (_automatedMarketMakers[from] && _taxValues.buyTotalFees > 0) { _amountTax = amount.mul(_taxValues.buyTotalFees).div(100); tokensForLiquidity += _amountTax * _taxValues.buyLiquidityFee / _taxValues.buyTotalFees; tokensForMarketing += _amountTax * _taxValues.buyMarketingFee / _taxValues.buyTotalFees; tokensForDevelopment += _amountTax * _taxValues.buyDevelopmentFee / _taxValues.buyTotalFees; } if (_amountTax > 0) { super._transfer(from, address(this), _amountTax); } amount -= _amountTax; } super._transfer(from, to, amount); } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFees[account]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"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":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_automatedMarketMakers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_enabled_swap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_max_buy_size","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_max_sell_size","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_max_wallet_size","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapping_is","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxValues","outputs":[{"internalType":"uint256","name":"buyTotalFees","type":"uint256"},{"internalType":"uint256","name":"buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"buyDevelopmentFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellTotalFees","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"sellDevelopmentFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromWalletLimit","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":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_prevOwner","type":"address"},{"internalType":"uint256","name":"_for","type":"uint256"}],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setUniPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_uniPair","type":"address"}],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDevelopment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
600c805461ffff191690556101a06040525f60a081905260c081905260e0819052610100819052610120819052610140819052610160819052610180819052601481905560158190556016819055601781905560188190556019819055601a819055601b55601c80546001600160a01b031990811673ced5e0e30bda7604c8f19958393b1e15d67cd75a17909155601d805490911673efb4b7b003a3f682a24f5a8b066b42574d256ff6179055348015620000b8575f80fd5b506040518060400160405280600b81526020016a151dda5d1d195c881554d160aa1b81525060405180604001604052806004815260200163161554d160e21b81525081600390816200010b9190620006f7565b5060046200011a8282620006f7565b5050505f6200012e6200048560201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d6080819052620001a2905f1962000489565b506b033b2e3c9fd0803ce8000000612710620001c0826001620007d3565b620001cc9190620007ed565b600a556064620001de826004620007d3565b620001ea9190620007ed565b6012556064620001fc826004620007d3565b620002089190620007ed565b60105560646200021a826004620007d3565b620002269190620007ed565b6011555f6019819055601b819055601a8190556200024581806200080d565b6200025191906200080d565b6018555f6015819055601781905560168190556200027081806200080d565b6200027c91906200080d565b601455600160065f620002976005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff19968716179055601c80548316825260068552838220805487166001908117909155601d80548516845285842080548916831790553080855286852080548a16841790556080518616855260079788905286852080548a168417905590548516845285842080548916831790559154909316825283822080548716841790558152918220805485168217905561dead82527fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d805490941681179093556200038c6005546001600160a01b031690565b6001600160a01b0316815260208101919091526040015f908120805460ff191692151592909217909155600190600890620003cf6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff19968716179055601d54821681526008909352818320805485166001908117909155601c548216845282842080548616821790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd09334299805486168217905560805190911683528183208054851682179055308352912080549092161790556200047e3382620004a1565b5062000823565b3390565b5f6200049733848462000590565b5060015b92915050565b6001600160a01b038216620004fd5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b6002546200050c9082620005ee565b6002556001600160a01b0382165f90815260016020526040902054620005339082620005ee565b6001600160a01b0383165f818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620005849085815260200190565b60405180910390a35050565b6001600160a01b038381165f818152602081815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f80620005fc83856200080d565b905083811015620006505760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620004f4565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200068057607f821691505b6020821081036200069f57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620006f2575f81815260208120601f850160051c81016020861015620006cd5750805b601f850160051c820191505b81811015620006ee57828155600101620006d9565b5050505b505050565b81516001600160401b0381111562000713576200071362000657565b6200072b816200072484546200066b565b84620006a5565b602080601f83116001811462000761575f8415620007495750858301515b5f19600386901b1c1916600185901b178555620006ee565b5f85815260208120601f198616915b82811015620007915788860151825594840194600190910190840162000770565b5085821015620007af57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176200049b576200049b620007bf565b5f826200080857634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156200049b576200049b620007bf565b608051611eab6200085f5f395f81816106d3015281816118ae01528181611965015281816119a101528181611a0d0152611a680152611eab5ff3fe6080604052600436106101ff575f3560e01c8063635d24a811610113578063a9059cbb1161009d578063eb3252211161006d578063eb32522114610660578063ef8700e51461068e578063f2fde38b146106a3578063f887ea40146106c2578063fcb9665e146106f5575f80fd5b8063a9059cbb146105c1578063c0246668146105e0578063dd62ed3e146105ff578063e16830a814610641575f80fd5b8063751039fc116100e3578063751039fc1461053e5780637571336a146105525780638da5cb5b1461057157806395d89b411461058e578063a457c2d7146105a2575f80fd5b8063635d24a8146104b857806370a08231146104d65780637231d2171461050a57806372cbadb114610529575f80fd5b806320189d2811610194578063313ce56711610164578063313ce567146103fb57806335fe822d14610416578063395093511461042b57806349bd5a5e1461044a5780634fbee19314610481575f80fd5b806320189d281461033157806323b872dd1461035057806325a8c2931461036f5780632f13fbee146103dc575f80fd5b806310d5de53116101cf57806310d5de53146102bb57806318160ddd146102e95780631a8145bb146103075780631f3fed8f1461031c575f80fd5b806306fdde0314610215578063095ea7b31461023f5780630b1c71821461026e5780630cb23d861461028d575f80fd5b366102115730330361020f575f80fd5b005b5f80fd5b348015610220575f80fd5b5061022961070a565b6040516102369190611b10565b60405180910390f35b34801561024a575f80fd5b5061025e610259366004611b72565b61079a565b6040519015158152602001610236565b348015610279575f80fd5b5061020f610288366004611b9c565b6107b0565b348015610298575f80fd5b5061025e6102a7366004611bd7565b60096020525f908152604090205460ff1681565b3480156102c6575f80fd5b5061025e6102d5366004611bd7565b60076020525f908152604090205460ff1681565b3480156102f4575f80fd5b506002545b604051908152602001610236565b348015610312575f80fd5b506102f9600e5481565b348015610327575f80fd5b506102f9600d5481565b34801561033c575f80fd5b5061020f61034b366004611b72565b61087f565b34801561035b575f80fd5b5061025e61036a366004611bf2565b610918565b34801561037a575f80fd5b50601454601554601654601754601854601954601a54601b546103a1979695949392919088565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610236565b3480156103e7575f80fd5b50600c5461025e9062010000900460ff1681565b348015610406575f80fd5b5060405160128152602001610236565b348015610421575f80fd5b506102f960115481565b348015610436575f80fd5b5061025e610445366004611b72565b61097d565b348015610455575f80fd5b50601354610469906001600160a01b031681565b6040516001600160a01b039091168152602001610236565b34801561048c575f80fd5b5061025e61049b366004611bd7565b6001600160a01b03165f9081526006602052604090205460ff1690565b3480156104c3575f80fd5b50600c5461025e90610100900460ff1681565b3480156104e1575f80fd5b506102f96104f0366004611bd7565b6001600160a01b03165f9081526001602052604090205490565b348015610515575f80fd5b5061020f610524366004611bd7565b6109b0565b348015610534575f80fd5b506102f960125481565b348015610549575f80fd5b5061020f610a5a565b34801561055d575f80fd5b5061020f61056c366004611b9c565b610a9d565b34801561057c575f80fd5b506005546001600160a01b0316610469565b348015610599575f80fd5b50610229610af1565b3480156105ad575f80fd5b5061025e6105bc366004611b72565b610b00565b3480156105cc575f80fd5b5061025e6105db366004611b72565b610b4b565b3480156105eb575f80fd5b5061020f6105fa366004611b9c565b610b57565b34801561060a575f80fd5b506102f9610619366004611c30565b6001600160a01b039182165f9081526020818152604080832093909416825291909152205490565b34801561064c575f80fd5b5061020f61065b366004611b9c565b610bab565b34801561066b575f80fd5b5061025e61067a366004611bd7565b60086020525f908152604090205460ff1681565b348015610699575f80fd5b506102f9600f5481565b3480156106ae575f80fd5b5061020f6106bd366004611bd7565b610bff565b3480156106cd575f80fd5b506104697f000000000000000000000000000000000000000000000000000000000000000081565b348015610700575f80fd5b506102f960105481565b60606003805461071990611c5c565b80601f016020809104026020016040519081016040528092919081815260200182805461074590611c5c565b80156107905780601f1061076757610100808354040283529160200191610790565b820191905f5260205f20905b81548152906001019060200180831161077357829003601f168201915b5050505050905090565b5f6107a6338484610ce9565b5060015b92915050565b6005546001600160a01b031633146107e35760405162461bcd60e51b81526004016107da90611c94565b60405180910390fd5b6013546001600160a01b03908116908316036108555760405162461bcd60e51b815260206004820152602b60248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201526a706169724164647265737360a81b60648201526084016107da565b6001600160a01b03919091165f908152600960205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146108a95760405162461bcd60e51b81526004016107da90611c94565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36001600160a01b039182165f9081526020818152604080832060058054909616845290915290205580546001600160a01b0319169055565b5f610924848484610d48565b610973843361096e85604051806060016040528060288152602001611e4e602891396001600160a01b038a165f908152602081815260408083203384529091529020549190611391565b610ce9565b5060019392505050565b335f818152602081815260408083206001600160a01b038716845290915281205490916107a691859061096e90866113c9565b6005546001600160a01b031633146109da5760405162461bcd60e51b81526004016107da90611c94565b600c805461ffff191661010117905543600b55601380546001600160a01b0319166001600160a01b0392831690811782555f908152600960209081526040808320805460ff199081166001908117909255855487168552600784528285208054821683179055945490951683526008909152902080549091169091179055565b6005546001600160a01b03163314610a845760405162461bcd60e51b81526004016107da90611c94565b610a8f6103e861142e565b610a9b6103e880611455565b565b6005546001600160a01b03163314610ac75760405162461bcd60e51b81526004016107da90611c94565b6001600160a01b03919091165f908152600760205260409020805460ff1916911515919091179055565b60606004805461071990611c5c565b5f6107a6338461096e85604051806060016040528060258152602001611e0360259139335f908152602081815260408083206001600160a01b038d1684529091529020549190611391565b5f6107a6338484610d48565b6005546001600160a01b03163314610b815760405162461bcd60e51b81526004016107da90611c94565b6001600160a01b03919091165f908152600660205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610bd55760405162461bcd60e51b81526004016107da90611c94565b6001600160a01b03919091165f908152600860205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610c295760405162461bcd60e51b81526004016107da90611c94565b6001600160a01b038116610c8e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107da565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038381165f818152602081815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b805f03610d5f57610d5a83835f6114a1565b505050565b6005546001600160a01b03848116911614801590610d8b57506005546001600160a01b03838116911614155b8015610da05750600c5462010000900460ff16155b1561102757600c5460ff16610e31576001600160a01b0383165f9081526006602052604090205460ff1680610dec57506001600160a01b0382165f9081526006602052604090205460ff165b610e315760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016107da565b6001600160a01b0383165f9081526009602052604090205460ff168015610e7057506001600160a01b0382165f9081526007602052604090205460ff16155b15610eea57601054811115610ee55760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b60648201526084016107da565b610f9f565b6001600160a01b0382165f9081526009602052604090205460ff168015610f2957506001600160a01b0383165f9081526007602052604090205460ff16155b15610f9f57601154811115610f9f5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b60648201526084016107da565b6001600160a01b0382165f9081526008602052604090205460ff16611027576012546001600160a01b0383165f90815260016020526040902054610fe39083611cdd565b11156110275760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016107da565b305f90815260016020526040902054600a54811080159081906110515750600c54610100900460ff165b80156110665750600c5462010000900460ff16155b801561108957506001600160a01b0384165f9081526009602052604090205460ff165b80156110ad57506001600160a01b0385165f9081526006602052604090205460ff16155b80156110d157506001600160a01b0384165f9081526006602052604090205460ff16155b156110fc57600c805462ff00001916620100001790556110ef61155e565b600c805462ff0000191690555b600c546001600160a01b0386165f9081526006602052604090205460ff6201000090920482161591168061114757506001600160a01b0385165f9081526006602052604090205460ff165b1561114f57505f5b801561137e575f600b544310156111d7576111766064611170876063611759565b906117d7565b9050606361118582605e611cf0565b61118f9190611d07565b600d5f82825461119f9190611cdd565b90915550606390506111b2826005611cf0565b6111bc9190611d07565b600f5f8282546111cc9190611cdd565b9091555061135f9050565b6001600160a01b0386165f9081526009602052604090205460ff1680156111ff575060185415155b1561128b5760185461121990606490611170908890611759565b601854601b549192509061122d9083611cf0565b6112379190611d07565b600e5f8282546112479190611cdd565b909155505060185460195461125c9083611cf0565b6112669190611d07565b600d5f8282546112769190611cdd565b9091555050601854601a546111b29083611cf0565b6001600160a01b0387165f9081526009602052604090205460ff1680156112b3575060145415155b1561135f576014546112cd90606490611170908890611759565b601454601754919250906112e19083611cf0565b6112eb9190611d07565b600e5f8282546112fb9190611cdd565b90915550506014546015546113109083611cf0565b61131a9190611d07565b600d5f82825461132a9190611cdd565b909155505060145460165461133f9083611cf0565b6113499190611d07565b600f5f8282546113599190611cdd565b90915550505b8015611370576113708730836114a1565b61137a8186611d26565b9450505b6113898686866114a1565b505050505050565b5f81848411156113b45760405162461bcd60e51b81526004016107da9190611b10565b505f6113c08486611d26565b95945050505050565b5f806113d58385611cdd565b9050838110156114275760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016107da565b9392505050565b6103e88161143b60025490565b6114459190611cf0565b61144f9190611d07565b60125550565b6103e88261146260025490565b61146c9190611cf0565b6114769190611d07565b6010556103e88161148660025490565b6114909190611cf0565b61149a9190611d07565b6011555050565b6114dd81604051806060016040528060268152602001611e28602691396001600160a01b0386165f908152600160205260409020549190611391565b6001600160a01b038085165f90815260016020526040808220939093559084168152205461150b90826113c9565b6001600160a01b038084165f8181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610d3b9085815260200190565b305f90815260016020526040812054600f54600d54600e54929360039390929161158791611cdd565b6115919190611cdd565b9050825f0361159f57505050565b600a546115ad906023611cf0565b8311156115c557600a546115c2906023611cf0565b92505b5f600282600e54866115d79190611cf0565b6115e19190611d07565b6115eb9190611d07565b90505f6115f88583611818565b90504761160482611859565b5f61160f4783611818565b90505f61162b86611170600d548561175990919063ffffffff16565b90505f61164787611170600f548661175990919063ffffffff16565b90505f6116548284611cdd565b61165e9085611d26565b905061166a8985611d07565b92506116768984611cf0565b5f600e819055600d819055600f559150861580159061169457505f81115b156116dd576116a38782611a07565b60408051878152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b601c546040516001600160a01b039091169084156108fc029085905f818181858888f19350505050158015611714573d5f803e3d5ffd5b50601d546040516001600160a01b039091169083156108fc029084905f818181858888f1935050505015801561174c573d5f803e3d5ffd5b5050505050505050505050565b5f825f0361176857505f6107aa565b5f6117738385611cf0565b9050826117808583611d07565b146114275760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016107da565b5f61142783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ae4565b5f61142783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611391565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061188c5761188c611d39565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611908573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061192c9190611d4d565b8160018151811061193f5761193f611d39565b60200260200101906001600160a01b031690816001600160a01b03168152505061198a307f000000000000000000000000000000000000000000000000000000000000000084610ce9565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906119de9085905f90869030904290600401611d68565b5f604051808303815f87803b1580156119f5575f80fd5b505af1158015611389573d5f803e3d5ffd5b611a32307f000000000000000000000000000000000000000000000000000000000000000084610ce9565b60405163f305d71960e01b81523060048201819052602482018490525f60448301819052606483015260848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015611ab8573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611add9190611dd7565b5050505050565b5f8183611b045760405162461bcd60e51b81526004016107da9190611b10565b505f6113c08486611d07565b5f6020808352835180828501525f5b81811015611b3b57858101830151858201604001528201611b1f565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611b6f575f80fd5b50565b5f8060408385031215611b83575f80fd5b8235611b8e81611b5b565b946020939093013593505050565b5f8060408385031215611bad575f80fd5b8235611bb881611b5b565b915060208301358015158114611bcc575f80fd5b809150509250929050565b5f60208284031215611be7575f80fd5b813561142781611b5b565b5f805f60608486031215611c04575f80fd5b8335611c0f81611b5b565b92506020840135611c1f81611b5b565b929592945050506040919091013590565b5f8060408385031215611c41575f80fd5b8235611c4c81611b5b565b91506020830135611bcc81611b5b565b600181811c90821680611c7057607f821691505b602082108103611c8e57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156107aa576107aa611cc9565b80820281158282048414176107aa576107aa611cc9565b5f82611d2157634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156107aa576107aa611cc9565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611d5d575f80fd5b815161142781611b5b565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015611db65784516001600160a01b031683529383019391830191600101611d91565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215611de9575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220b3a354e92c81f7e1975bc895e5d52292f942beccd9ee7a0f40858e7c07cadd1064736f6c63430008150033
Deployed Bytecode
0x6080604052600436106101ff575f3560e01c8063635d24a811610113578063a9059cbb1161009d578063eb3252211161006d578063eb32522114610660578063ef8700e51461068e578063f2fde38b146106a3578063f887ea40146106c2578063fcb9665e146106f5575f80fd5b8063a9059cbb146105c1578063c0246668146105e0578063dd62ed3e146105ff578063e16830a814610641575f80fd5b8063751039fc116100e3578063751039fc1461053e5780637571336a146105525780638da5cb5b1461057157806395d89b411461058e578063a457c2d7146105a2575f80fd5b8063635d24a8146104b857806370a08231146104d65780637231d2171461050a57806372cbadb114610529575f80fd5b806320189d2811610194578063313ce56711610164578063313ce567146103fb57806335fe822d14610416578063395093511461042b57806349bd5a5e1461044a5780634fbee19314610481575f80fd5b806320189d281461033157806323b872dd1461035057806325a8c2931461036f5780632f13fbee146103dc575f80fd5b806310d5de53116101cf57806310d5de53146102bb57806318160ddd146102e95780631a8145bb146103075780631f3fed8f1461031c575f80fd5b806306fdde0314610215578063095ea7b31461023f5780630b1c71821461026e5780630cb23d861461028d575f80fd5b366102115730330361020f575f80fd5b005b5f80fd5b348015610220575f80fd5b5061022961070a565b6040516102369190611b10565b60405180910390f35b34801561024a575f80fd5b5061025e610259366004611b72565b61079a565b6040519015158152602001610236565b348015610279575f80fd5b5061020f610288366004611b9c565b6107b0565b348015610298575f80fd5b5061025e6102a7366004611bd7565b60096020525f908152604090205460ff1681565b3480156102c6575f80fd5b5061025e6102d5366004611bd7565b60076020525f908152604090205460ff1681565b3480156102f4575f80fd5b506002545b604051908152602001610236565b348015610312575f80fd5b506102f9600e5481565b348015610327575f80fd5b506102f9600d5481565b34801561033c575f80fd5b5061020f61034b366004611b72565b61087f565b34801561035b575f80fd5b5061025e61036a366004611bf2565b610918565b34801561037a575f80fd5b50601454601554601654601754601854601954601a54601b546103a1979695949392919088565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610236565b3480156103e7575f80fd5b50600c5461025e9062010000900460ff1681565b348015610406575f80fd5b5060405160128152602001610236565b348015610421575f80fd5b506102f960115481565b348015610436575f80fd5b5061025e610445366004611b72565b61097d565b348015610455575f80fd5b50601354610469906001600160a01b031681565b6040516001600160a01b039091168152602001610236565b34801561048c575f80fd5b5061025e61049b366004611bd7565b6001600160a01b03165f9081526006602052604090205460ff1690565b3480156104c3575f80fd5b50600c5461025e90610100900460ff1681565b3480156104e1575f80fd5b506102f96104f0366004611bd7565b6001600160a01b03165f9081526001602052604090205490565b348015610515575f80fd5b5061020f610524366004611bd7565b6109b0565b348015610534575f80fd5b506102f960125481565b348015610549575f80fd5b5061020f610a5a565b34801561055d575f80fd5b5061020f61056c366004611b9c565b610a9d565b34801561057c575f80fd5b506005546001600160a01b0316610469565b348015610599575f80fd5b50610229610af1565b3480156105ad575f80fd5b5061025e6105bc366004611b72565b610b00565b3480156105cc575f80fd5b5061025e6105db366004611b72565b610b4b565b3480156105eb575f80fd5b5061020f6105fa366004611b9c565b610b57565b34801561060a575f80fd5b506102f9610619366004611c30565b6001600160a01b039182165f9081526020818152604080832093909416825291909152205490565b34801561064c575f80fd5b5061020f61065b366004611b9c565b610bab565b34801561066b575f80fd5b5061025e61067a366004611bd7565b60086020525f908152604090205460ff1681565b348015610699575f80fd5b506102f9600f5481565b3480156106ae575f80fd5b5061020f6106bd366004611bd7565b610bff565b3480156106cd575f80fd5b506104697f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610700575f80fd5b506102f960105481565b60606003805461071990611c5c565b80601f016020809104026020016040519081016040528092919081815260200182805461074590611c5c565b80156107905780601f1061076757610100808354040283529160200191610790565b820191905f5260205f20905b81548152906001019060200180831161077357829003601f168201915b5050505050905090565b5f6107a6338484610ce9565b5060015b92915050565b6005546001600160a01b031633146107e35760405162461bcd60e51b81526004016107da90611c94565b60405180910390fd5b6013546001600160a01b03908116908316036108555760405162461bcd60e51b815260206004820152602b60248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201526a706169724164647265737360a81b60648201526084016107da565b6001600160a01b03919091165f908152600960205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146108a95760405162461bcd60e51b81526004016107da90611c94565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36001600160a01b039182165f9081526020818152604080832060058054909616845290915290205580546001600160a01b0319169055565b5f610924848484610d48565b610973843361096e85604051806060016040528060288152602001611e4e602891396001600160a01b038a165f908152602081815260408083203384529091529020549190611391565b610ce9565b5060019392505050565b335f818152602081815260408083206001600160a01b038716845290915281205490916107a691859061096e90866113c9565b6005546001600160a01b031633146109da5760405162461bcd60e51b81526004016107da90611c94565b600c805461ffff191661010117905543600b55601380546001600160a01b0319166001600160a01b0392831690811782555f908152600960209081526040808320805460ff199081166001908117909255855487168552600784528285208054821683179055945490951683526008909152902080549091169091179055565b6005546001600160a01b03163314610a845760405162461bcd60e51b81526004016107da90611c94565b610a8f6103e861142e565b610a9b6103e880611455565b565b6005546001600160a01b03163314610ac75760405162461bcd60e51b81526004016107da90611c94565b6001600160a01b03919091165f908152600760205260409020805460ff1916911515919091179055565b60606004805461071990611c5c565b5f6107a6338461096e85604051806060016040528060258152602001611e0360259139335f908152602081815260408083206001600160a01b038d1684529091529020549190611391565b5f6107a6338484610d48565b6005546001600160a01b03163314610b815760405162461bcd60e51b81526004016107da90611c94565b6001600160a01b03919091165f908152600660205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610bd55760405162461bcd60e51b81526004016107da90611c94565b6001600160a01b03919091165f908152600860205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610c295760405162461bcd60e51b81526004016107da90611c94565b6001600160a01b038116610c8e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107da565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038381165f818152602081815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b805f03610d5f57610d5a83835f6114a1565b505050565b6005546001600160a01b03848116911614801590610d8b57506005546001600160a01b03838116911614155b8015610da05750600c5462010000900460ff16155b1561102757600c5460ff16610e31576001600160a01b0383165f9081526006602052604090205460ff1680610dec57506001600160a01b0382165f9081526006602052604090205460ff165b610e315760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016107da565b6001600160a01b0383165f9081526009602052604090205460ff168015610e7057506001600160a01b0382165f9081526007602052604090205460ff16155b15610eea57601054811115610ee55760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b60648201526084016107da565b610f9f565b6001600160a01b0382165f9081526009602052604090205460ff168015610f2957506001600160a01b0383165f9081526007602052604090205460ff16155b15610f9f57601154811115610f9f5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b60648201526084016107da565b6001600160a01b0382165f9081526008602052604090205460ff16611027576012546001600160a01b0383165f90815260016020526040902054610fe39083611cdd565b11156110275760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016107da565b305f90815260016020526040902054600a54811080159081906110515750600c54610100900460ff165b80156110665750600c5462010000900460ff16155b801561108957506001600160a01b0384165f9081526009602052604090205460ff165b80156110ad57506001600160a01b0385165f9081526006602052604090205460ff16155b80156110d157506001600160a01b0384165f9081526006602052604090205460ff16155b156110fc57600c805462ff00001916620100001790556110ef61155e565b600c805462ff0000191690555b600c546001600160a01b0386165f9081526006602052604090205460ff6201000090920482161591168061114757506001600160a01b0385165f9081526006602052604090205460ff165b1561114f57505f5b801561137e575f600b544310156111d7576111766064611170876063611759565b906117d7565b9050606361118582605e611cf0565b61118f9190611d07565b600d5f82825461119f9190611cdd565b90915550606390506111b2826005611cf0565b6111bc9190611d07565b600f5f8282546111cc9190611cdd565b9091555061135f9050565b6001600160a01b0386165f9081526009602052604090205460ff1680156111ff575060185415155b1561128b5760185461121990606490611170908890611759565b601854601b549192509061122d9083611cf0565b6112379190611d07565b600e5f8282546112479190611cdd565b909155505060185460195461125c9083611cf0565b6112669190611d07565b600d5f8282546112769190611cdd565b9091555050601854601a546111b29083611cf0565b6001600160a01b0387165f9081526009602052604090205460ff1680156112b3575060145415155b1561135f576014546112cd90606490611170908890611759565b601454601754919250906112e19083611cf0565b6112eb9190611d07565b600e5f8282546112fb9190611cdd565b90915550506014546015546113109083611cf0565b61131a9190611d07565b600d5f82825461132a9190611cdd565b909155505060145460165461133f9083611cf0565b6113499190611d07565b600f5f8282546113599190611cdd565b90915550505b8015611370576113708730836114a1565b61137a8186611d26565b9450505b6113898686866114a1565b505050505050565b5f81848411156113b45760405162461bcd60e51b81526004016107da9190611b10565b505f6113c08486611d26565b95945050505050565b5f806113d58385611cdd565b9050838110156114275760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016107da565b9392505050565b6103e88161143b60025490565b6114459190611cf0565b61144f9190611d07565b60125550565b6103e88261146260025490565b61146c9190611cf0565b6114769190611d07565b6010556103e88161148660025490565b6114909190611cf0565b61149a9190611d07565b6011555050565b6114dd81604051806060016040528060268152602001611e28602691396001600160a01b0386165f908152600160205260409020549190611391565b6001600160a01b038085165f90815260016020526040808220939093559084168152205461150b90826113c9565b6001600160a01b038084165f8181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610d3b9085815260200190565b305f90815260016020526040812054600f54600d54600e54929360039390929161158791611cdd565b6115919190611cdd565b9050825f0361159f57505050565b600a546115ad906023611cf0565b8311156115c557600a546115c2906023611cf0565b92505b5f600282600e54866115d79190611cf0565b6115e19190611d07565b6115eb9190611d07565b90505f6115f88583611818565b90504761160482611859565b5f61160f4783611818565b90505f61162b86611170600d548561175990919063ffffffff16565b90505f61164787611170600f548661175990919063ffffffff16565b90505f6116548284611cdd565b61165e9085611d26565b905061166a8985611d07565b92506116768984611cf0565b5f600e819055600d819055600f559150861580159061169457505f81115b156116dd576116a38782611a07565b60408051878152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b601c546040516001600160a01b039091169084156108fc029085905f818181858888f19350505050158015611714573d5f803e3d5ffd5b50601d546040516001600160a01b039091169083156108fc029084905f818181858888f1935050505015801561174c573d5f803e3d5ffd5b5050505050505050505050565b5f825f0361176857505f6107aa565b5f6117738385611cf0565b9050826117808583611d07565b146114275760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016107da565b5f61142783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ae4565b5f61142783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611391565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061188c5761188c611d39565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611908573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061192c9190611d4d565b8160018151811061193f5761193f611d39565b60200260200101906001600160a01b031690816001600160a01b03168152505061198a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610ce9565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906119de9085905f90869030904290600401611d68565b5f604051808303815f87803b1580156119f5575f80fd5b505af1158015611389573d5f803e3d5ffd5b611a32307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610ce9565b60405163f305d71960e01b81523060048201819052602482018490525f60448301819052606483015260848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015611ab8573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611add9190611dd7565b5050505050565b5f8183611b045760405162461bcd60e51b81526004016107da9190611b10565b505f6113c08486611d07565b5f6020808352835180828501525f5b81811015611b3b57858101830151858201604001528201611b1f565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611b6f575f80fd5b50565b5f8060408385031215611b83575f80fd5b8235611b8e81611b5b565b946020939093013593505050565b5f8060408385031215611bad575f80fd5b8235611bb881611b5b565b915060208301358015158114611bcc575f80fd5b809150509250929050565b5f60208284031215611be7575f80fd5b813561142781611b5b565b5f805f60608486031215611c04575f80fd5b8335611c0f81611b5b565b92506020840135611c1f81611b5b565b929592945050506040919091013590565b5f8060408385031215611c41575f80fd5b8235611c4c81611b5b565b91506020830135611bcc81611b5b565b600181811c90821680611c7057607f821691505b602082108103611c8e57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156107aa576107aa611cc9565b80820281158282048414176107aa576107aa611cc9565b5f82611d2157634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156107aa576107aa611cc9565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611d5d575f80fd5b815161142781611b5b565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015611db65784516001600160a01b031683529383019391830191600101611d91565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215611de9575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220b3a354e92c81f7e1975bc895e5d52292f942beccd9ee7a0f40858e7c07cadd1064736f6c63430008150033
Deployed Bytecode Sourcemap
20788:12088:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24537:4;24515:10;:27;24507:36;;;;;;20788:12088;;;;;7562:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10346:168;;;;;;;;;;-1:-1:-1;10346:168:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;10346:168:0;1023:187:1;25133:206:0;;;;;;;;;;-1:-1:-1;25133:206:0;;;;;:::i;:::-;;:::i;21099:54::-;;;;;;;;;;-1:-1:-1;21099:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20970:63;;;;;;;;;;-1:-1:-1;20970:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8679:107;;;;;;;;;;-1:-1:-1;8766:12:0;;8679:107;;;2034:25:1;;;2022:2;2007:18;8679:107:0;1888:177:1;21396:33:0;;;;;;;;;;;;;;;;21356;;;;;;;;;;;;;;;;20552:229;;;;;;;;;;-1:-1:-1;20552:229:0;;;;;:::i;:::-;;:::i;13269:354::-;;;;;;;;;;-1:-1:-1;13269:354:0;;;;;:::i;:::-;;:::i;21936:284::-;;;;;;;;;;-1:-1:-1;21936:284:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2874:25:1;;;2930:2;2915:18;;2908:34;;;;2958:18;;;2951:34;;;;3016:2;3001:18;;2994:34;;;;3059:3;3044:19;;3037:35;3103:3;3088:19;;3081:35;3147:3;3132:19;;3125:35;3191:3;3176:19;;3169:35;2861:3;2846:19;21936:284:0;2531:679:1;21323:24:0;;;;;;;;;;-1:-1:-1;21323:24:0;;;;;;;;;;;8522:92;;;;;;;;;;-1:-1:-1;8522:92:0;;8604:2;3357:36:1;;3345:2;3330:18;8522:92:0;3215:184:1;21825:29:0;;;;;;;;;;;;;;;;9982:217;;;;;;;;;;-1:-1:-1;9982:217:0;;;;;:::i;:::-;;:::i;21899:28::-;;;;;;;;;;-1:-1:-1;21899:28:0;;;;-1:-1:-1;;;;;21899:28:0;;;;;;-1:-1:-1;;;;;3568:32:1;;;3550:51;;3538:2;3523:18;21899:28:0;3404:203:1;32752:121:0;;;;;;;;;;-1:-1:-1;32752:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;32841:24:0;32817:4;32841:24;;;:15;:24;;;;;;;;;32752:121;21283:33;;;;;;;;;;-1:-1:-1;21283:33:0;;;;;;;;;;;8849:126;;;;;;;;;;-1:-1:-1;8849:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;8949:18:0;8922:7;8949:18;;;:9;:18;;;;;;;8849:126;25393:407;;;;;;;;;;-1:-1:-1;25393:407:0;;;;;:::i;:::-;;:::i;21861:31::-;;;;;;;;;;;;;;;;28361:129;;;;;;;;;;;;;:::i;26548:144::-;;;;;;;;;;-1:-1:-1;26548:144:0;;;;;:::i;:::-;;:::i;19728:78::-;;;;;;;;;;-1:-1:-1;19792:6:0;;-1:-1:-1;;;;;19792:6:0;19728:78;;7780:103;;;;;;;;;;;;;:::i;11017:268::-;;;;;;;;;;-1:-1:-1;11017:268:0;;;;;:::i;:::-;;:::i;9188:174::-;;;;;;;;;;-1:-1:-1;9188:174:0;;;;;:::i;:::-;;:::i;26264:128::-;;;;;;;;;;-1:-1:-1;26264:128:0;;;;;:::i;:::-;;:::i;9425:150::-;;;;;;;;;;-1:-1:-1;9425:150:0;;;;;:::i;:::-;-1:-1:-1;;;;;9540:18:0;;;9513:7;9540:18;;;;;;;;;;;:27;;;;;;;;;;;;;9425:150;26400:140;;;;;;;;;;-1:-1:-1;26400:140:0;;;;;:::i;:::-;;:::i;21040:52::-;;;;;;;;;;-1:-1:-1;21040:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21436:35;;;;;;;;;;;;;;;;19959:244;;;;;;;;;;-1:-1:-1;19959:244:0;;;;;:::i;:::-;;:::i;20866:42::-;;;;;;;;;;;;;;;21790:28;;;;;;;;;;;;;;;;7562:99;7615:13;7648:5;7641:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7562:99;:::o;10346:168::-;10428:4;10445:39;6801:10;10468:7;10477:6;10445:8;:39::i;:::-;-1:-1:-1;10502:4:0;10346:168;;;;;:::o;25133:206::-;19310:6;;-1:-1:-1;;;;;19310:6:0;6801:10;19310:22;19302:67;;;;-1:-1:-1;;;19302:67:0;;;;;;;:::i;:::-;;;;;;;;;25223:13:::1;::::0;-1:-1:-1;;;;;25223:13:0;;::::1;25215:21:::0;;::::1;::::0;25207:77:::1;;;::::0;-1:-1:-1;;;25207:77:0;;5188:2:1;25207:77:0::1;::::0;::::1;5170:21:1::0;5227:2;5207:18;;;5200:30;5266:34;5246:18;;;5239:62;-1:-1:-1;;;5317:18:1;;;5310:41;5368:19;;25207:77:0::1;4986:407:1::0;25207:77:0::1;-1:-1:-1::0;;;;;25295:28:0;;;::::1;;::::0;;;:22:::1;:28;::::0;;;;:36;;-1:-1:-1;;25295:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25133:206::o;20552:229::-;19310:6;;-1:-1:-1;;;;;19310:6:0;6801:10;19310:22;19302:67;;;;-1:-1:-1;;;19302:67:0;;;;;;;:::i;:::-;20675:6:::1;::::0;20654:40:::1;::::0;20691:1:::1;::::0;-1:-1:-1;;;;;20675:6:0::1;::::0;20654:40:::1;::::0;20691:1;;20654:40:::1;-1:-1:-1::0;;;;;20705:23:0;;::::1;:11;:23:::0;;;::::1;::::0;;;;;;;20729:6:::1;::::0;;;;::::1;20705:31:::0;;;;;;;:38;20754:19;;-1:-1:-1;;;;;;20754:19:0::1;::::0;;20552:229::o;13269:354::-;13408:4;13425:36;13435:6;13443:9;13454:6;13425:9;:36::i;:::-;13472:121;13481:6;6801:10;13503:89;13541:6;13503:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13503:19:0;;:11;:19;;;;;;;;;;;6801:10;13503:33;;;;;;;;;;:37;:89::i;:::-;13472:8;:121::i;:::-;-1:-1:-1;13611:4:0;13269:354;;;;;:::o;9982:217::-;6801:10;10069:4;10118:25;;;;;;;;;;;-1:-1:-1;;;;;10118:34:0;;;;;;;;;;10069:4;;10086:83;;10109:7;;10118:50;;10157:10;10118:38;:50::i;25393:407::-;19310:6;;-1:-1:-1;;;;;19310:6:0;6801:10;19310:22;19302:67;;;;-1:-1:-1;;;19302:67:0;;;;;;;:::i;:::-;25463:13:::1;:20:::0;;-1:-1:-1;;25494:22:0;;;;;25546:12:::1;25527:16;:31:::0;25569:13:::1;:24:::0;;-1:-1:-1;;;;;;25569:24:0::1;-1:-1:-1::0;;;;;25569:24:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;25604:46:0;;;:22:::1;:46;::::0;;;;;;;:53;;-1:-1:-1;;25604:53:0;;::::1;-1:-1:-1::0;25604:53:0;;::::1;::::0;;;25708:13;;;::::1;25668:55:::0;;:31:::1;:55:::0;;;;;:62;;;::::1;::::0;::::1;::::0;;25770:13;;;;::::1;25741:44:::0;;:20:::1;:44:::0;;;;;:51;;;;::::1;::::0;;::::1;::::0;;25393:407::o;28361:129::-;19310:6;;-1:-1:-1;;;;;19310:6:0;6801:10;19310:22;19302:67;;;;-1:-1:-1;;;19302:67:0;;;;;;;:::i;:::-;28415:25:::1;28435:4;28415:19;:25::i;:::-;28451:31;28472:4;28477::::0;28451:20:::1;:31::i;:::-;28361:129::o:0;26548:144::-;19310:6;;-1:-1:-1;;;;;19310:6:0;6801:10;19310:22;19302:67;;;;-1:-1:-1;;;19302:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26638:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;26638:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26548:144::o;7780:103::-;7835:13;7868:7;7861:14;;;;;:::i;11017:268::-;11109:4;11126:129;6801:10;11149:7;11158:96;11197:15;11158:96;;;;;;;;;;;;;;;;;6801:10;11158:11;:25;;;;;;;;;;;-1:-1:-1;;;;;11158:34:0;;;;;;;;;;;;:38;:96::i;9188:174::-;9273:4;9290:42;6801:10;9314:9;9325:6;9290:9;:42::i;26264:128::-;19310:6;;-1:-1:-1;;;;;19310:6:0;6801:10;19310:22;19302:67;;;;-1:-1:-1;;;19302:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26349:24:0;;;::::1;;::::0;;;:15:::1;:24;::::0;;;;:35;;-1:-1:-1;;26349:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26264:128::o;26400:140::-;19310:6;;-1:-1:-1;;;;;19310:6:0;6801:10;19310:22;19302:67;;;;-1:-1:-1;;;19302:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26492:29:0;;;::::1;;::::0;;;:20:::1;:29;::::0;;;;:40;;-1:-1:-1;;26492:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26400:140::o;19959:244::-;19310:6;;-1:-1:-1;;;;;19310:6:0;6801:10;19310:22;19302:67;;;;-1:-1:-1;;;19302:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20048:22:0;::::1;20040:73;;;::::0;-1:-1:-1;;;20040:73:0;;5600:2:1;20040:73:0::1;::::0;::::1;5582:21:1::0;5639:2;5619:18;;;5612:30;5678:34;5658:18;;;5651:62;-1:-1:-1;;;5729:18:1;;;5722:36;5775:19;;20040:73:0::1;5398:402:1::0;20040:73:0::1;20150:6;::::0;20129:38:::1;::::0;-1:-1:-1;;;;;20129:38:0;;::::1;::::0;20150:6:::1;::::0;20129:38:::1;::::0;20150:6:::1;::::0;20129:38:::1;20178:6;:17:::0;;-1:-1:-1;;;;;;20178:17:0::1;-1:-1:-1::0;;;;;20178:17:0;;;::::1;::::0;;;::::1;::::0;;19959:244::o;12569:220::-;-1:-1:-1;;;;;12697:18:0;;;:11;:18;;;;;;;;;;;:27;;;;;;;;;;;;;:36;;;12749:32;;2034:25:1;;;12749:32:0;;2007:18:1;12749:32:0;;;;;;;;12569:220;;;:::o;29353:3391::-;29481:6;29491:1;29481:11;29477:93;;29509:28;29525:4;29531:2;29535:1;29509:15;:28::i;:::-;29353:3391;;;:::o;29477:93::-;19792:6;;-1:-1:-1;;;;;29598:15:0;;;19792:6;;29598:15;;;;:45;;-1:-1:-1;19792:6:0;;-1:-1:-1;;;;;29630:13:0;;;19792:6;;29630:13;;29598:45;:75;;;;-1:-1:-1;29661:12:0;;;;;;;29660:13;29598:75;29580:852;;;29705:15;;;;29700:136;;-1:-1:-1;;;;;29749:21:0;;;;;;:15;:21;;;;;;;;;:44;;-1:-1:-1;;;;;;29774:19:0;;;;;;:15;:19;;;;;;;;29749:44;29741:79;;;;-1:-1:-1;;;29741:79:0;;6007:2:1;29741:79:0;;;5989:21:1;6046:2;6026:18;;;6019:30;-1:-1:-1;;;6065:18:1;;;6058:52;6127:18;;29741:79:0;5805:346:1;29741:79:0;-1:-1:-1;;;;;29854:28:0;;;;;;:22;:28;;;;;;;;:68;;;;-1:-1:-1;;;;;;29887:35:0;;;;;;:31;:35;;;;;;;;29886:36;29854:68;29850:417;;;29961:13;;29951:6;:23;;29943:89;;;;-1:-1:-1;;;29943:89:0;;6358:2:1;29943:89:0;;;6340:21:1;6397:2;6377:18;;;6370:30;6436:34;6416:18;;;6409:62;-1:-1:-1;;;6487:18:1;;;6480:51;6548:19;;29943:89:0;6156:417:1;29943:89:0;29850:417;;;-1:-1:-1;;;;;30071:26:0;;;;;;:22;:26;;;;;;;;:68;;;;-1:-1:-1;;;;;;30102:37:0;;;;;;:31;:37;;;;;;;;30101:38;30071:68;30067:200;;;30178:14;;30168:6;:24;;30160:91;;;;-1:-1:-1;;;30160:91:0;;6780:2:1;30160:91:0;;;6762:21:1;6819:2;6799:18;;;6792:30;6858:34;6838:18;;;6831:62;-1:-1:-1;;;6909:18:1;;;6902:52;6971:19;;30160:91:0;6578:418:1;30160:91:0;-1:-1:-1;;;;;30286:24:0;;;;;;:20;:24;;;;;;;;30281:140;;30365:16;;-1:-1:-1;;;;;8949:18:0;;8922:7;8949:18;;;:9;:18;;;;;;30339:22;;:6;:22;:::i;:::-;:42;;30331:74;;;;-1:-1:-1;;;30331:74:0;;7465:2:1;30331:74:0;;;7447:21:1;7504:2;7484:18;;;7477:30;-1:-1:-1;;;7523:18:1;;;7516:49;7582:18;;30331:74:0;7263:343:1;30331:74:0;30490:4;30445:24;8949:18;;;:9;:18;;;;;;30533:16;;30513:36;;;;;;;30578:37;;-1:-1:-1;30602:13:0;;;;;;;30578:37;:67;;;;-1:-1:-1;30633:12:0;;;;;;;30632:13;30578:67;:110;;;;-1:-1:-1;;;;;;30662:26:0;;;;;;:22;:26;;;;;;;;30578:110;:149;;;;-1:-1:-1;;;;;;30706:21:0;;;;;;:15;:21;;;;;;;;30705:22;30578:149;:186;;;;-1:-1:-1;;;;;;30745:19:0;;;;;;:15;:19;;;;;;;;30744:20;30578:186;30560:328;;;30791:12;:19;;-1:-1:-1;;30791:19:0;;;;;30825:16;:14;:16::i;:::-;30856:12;:20;;-1:-1:-1;;30856:20:0;;;30560:328;30918:12;;-1:-1:-1;;;;;31032:21:0;;30901:13;31032:21;;;:15;:21;;;;;;30918:12;;;;;;;30917:13;;31032:21;;:44;;-1:-1:-1;;;;;;31057:19:0;;;;;;:15;:19;;;;;;;;31032:44;31028:93;;;-1:-1:-1;31104:5:0;31028:93;31219:8;31215:1477;;;31244:18;31299:16;;31284:12;:31;31281:1246;;;31349:23;31368:3;31349:14;:6;31360:2;31349:10;:14::i;:::-;:18;;:23::i;:::-;31336:36;-1:-1:-1;31433:2:0;31414:15;31336:36;31427:2;31414:15;:::i;:::-;31413:22;;;;:::i;:::-;31391:18;;:44;;;;;;;:::i;:::-;;;;-1:-1:-1;31497:2:0;;-1:-1:-1;31479:14:0;:10;31492:1;31479:14;:::i;:::-;31478:21;;;;:::i;:::-;31454:20;;:45;;;;;;;:::i;:::-;;;;-1:-1:-1;31281:1246:0;;-1:-1:-1;31281:1246:0;;-1:-1:-1;;;;;31525:26:0;;;;;;:22;:26;;;;;;;;:58;;;;-1:-1:-1;31555:24:0;;:28;;31525:58;31521:1006;;;31628:24;;31617:45;;31658:3;;31617:36;;:6;;:10;:36::i;:45::-;31746:24;;31716:27;;31604:58;;-1:-1:-1;31746:24:0;31703:40;;31604:58;31703:40;:::i;:::-;:67;;;;:::i;:::-;31681:18;;:89;;;;;;;:::i;:::-;;;;-1:-1:-1;;31854:24:0;;31824:27;;31811:40;;:10;:40;:::i;:::-;:67;;;;:::i;:::-;31789:18;;:89;;;;;;;:::i;:::-;;;;-1:-1:-1;;31966:24:0;;31934:29;;31921:42;;:10;:42;:::i;31521:1006::-;-1:-1:-1;;;;;32052:28:0;;;;;;:22;:28;;;;;;;;:59;;;;-1:-1:-1;32084:10:0;:23;:27;;32052:59;32048:479;;;32156:10;:23;32145:44;;32185:3;;32145:35;;:6;;:10;:35::i;:44::-;32272:10;:23;32243:26;;32132:57;;-1:-1:-1;32272:23:0;32230:39;;32132:57;32230:39;:::i;:::-;:65;;;;:::i;:::-;32208:18;;:87;;;;;;;:::i;:::-;;;;-1:-1:-1;;32378:10:0;:23;32349:26;;32336:39;;:10;:39;:::i;:::-;:65;;;;:::i;:::-;32314:18;;:87;;;;;;;:::i;:::-;;;;-1:-1:-1;;32488:10:0;:23;32457:28;;32444:41;;:10;:41;:::i;:::-;:67;;;;:::i;:::-;32420:20;;:91;;;;;;;:::i;:::-;;;;-1:-1:-1;;32048:479:0;32547:14;;32543:103;;32582:48;32598:4;32612;32619:10;32582:15;:48::i;:::-;32660:20;32670:10;32660:20;;:::i;:::-;;;31229:1463;31215:1477;32703:33;32719:4;32725:2;32729:6;32703:15;:33::i;:::-;29466:3278;;;29353:3391;;;:::o;711:191::-;796:7;832:12;824:6;;;;816:29;;;;-1:-1:-1;;;816:29:0;;;;;;;;:::i;:::-;-1:-1:-1;856:9:0;868:5;872:1;868;:5;:::i;:::-;856:17;711:191;-1:-1:-1;;;;;711:191:0:o;384:180::-;441:7;;473:5;477:1;473;:5;:::i;:::-;461:17;;502:1;497;:6;;489:46;;;;-1:-1:-1;;;489:46:0;;8341:2:1;489:46:0;;;8323:21:1;8380:2;8360:18;;;8353:30;8419:29;8399:18;;;8392:57;8466:18;;489:46:0;8139:351:1;489:46:0;555:1;384:180;-1:-1:-1;;;384:180:0:o;29209:136::-;29333:4;29316:13;29300;8766:12;;;8679:107;29300:13;:29;;;;:::i;:::-;29299:38;;;;:::i;:::-;29280:16;:57;-1:-1:-1;29209:136:0:o;25870:209::-;26004:4;25991:9;25975:13;8766:12;;;8679:107;25975:13;:25;;;;:::i;:::-;25974:34;;;;:::i;:::-;25958:13;:50;26067:4;26053:10;26037:13;8766:12;;;8679:107;26037:13;:26;;;;:::i;:::-;26036:35;;;;:::i;:::-;26019:14;:52;-1:-1:-1;;25870:209:0:o;11775:358::-;11937:71;11959:6;11937:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11937:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;11917:17:0;;;;;;;:9;:17;;;;;;:91;;;;12042:20;;;;;;;:32;;12067:6;12042:24;:32::i;:::-;-1:-1:-1;;;;;12019:20:0;;;;;;;:9;:20;;;;;;;:55;;;;12090:35;;;;;;;;;;12118:6;2034:25:1;;2022:2;2007:18;;1888:177;26700:1653:0;26793:4;26745:27;8949:18;;;:9;:18;;;;;;26903:20;;26882:18;;26861;;8949;;26832:1;;26745:27;;26903:20;26861:39;;;:::i;:::-;:62;;;;:::i;:::-;26844:79;;26940:19;26963:1;26940:24;26936:41;;26968:7;;;26700:1653::o;26936:41::-;27015:16;;:21;;27034:2;27015:21;:::i;:::-;26993:19;:43;26989:119;;;27075:16;;:21;;27094:2;27075:21;:::i;:::-;27053:43;;26989:119;27169:23;27247:1;27238:6;27217:18;;27195:19;:40;;;;:::i;:::-;:49;;;;:::i;:::-;:53;;;;:::i;:::-;27169:79;-1:-1:-1;27259:26:0;27288:40;:19;27169:79;27288:23;:40::i;:::-;27259:69;-1:-1:-1;27367:21:0;27401:50;27259:69;27401:30;:50::i;:::-;27462:18;27483:44;:21;27509:17;27483:25;:44::i;:::-;27462:65;;27541:23;27567:46;27606:6;27567:34;27582:18;;27567:10;:14;;:34;;;;:::i;:46::-;27541:72;;27625:25;27653:48;27694:6;27653:36;27668:20;;27653:10;:14;;:36;;;;:::i;:48::-;27625:76;-1:-1:-1;27712:23:0;27752:35;27625:76;27752:15;:35;:::i;:::-;27738:50;;:10;:50;:::i;:::-;27712:76;-1:-1:-1;27808:24:0;27821:11;27808:10;:24;:::i;:::-;27790:42;-1:-1:-1;27863:29:0;27881:11;27790:42;27863:29;:::i;:::-;27924:1;27903:18;:22;;;27936:18;:22;;;27969:20;:24;27843:49;-1:-1:-1;28010:19:0;;;;;:42;;;28051:1;28033:15;:19;28010:42;28006:192;;;28069:46;28082:15;28099;28069:12;:46::i;:::-;28135:51;;;8669:25:1;;;8725:2;8710:18;;8703:34;;;28135:51:0;;8642:18:1;28135:51:0;;;;;;;28006:192;28234:16;;28218:60;;-1:-1:-1;;;;;28234:16:0;;;;28218:60;;;;;28262:15;;28234:16;28218:60;28234:16;28218:60;28262:15;28234:16;28218:60;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28305:10:0;;28289:56;;-1:-1:-1;;;;;28305:10:0;;;;28289:56;;;;;28327:17;;28305:10;28289:56;28305:10;28289:56;28327:17;28305:10;28289:56;;;;;;;;;;;;;;;;;;;;;26734:1619;;;;;;;;;;26700:1653::o;908:256::-;965:7;995:1;1000;995:6;991:47;;-1:-1:-1;1025:1:0;1018:8;;991:47;1051:9;1063:5;1067:1;1063;:5;:::i;:::-;1051:17;-1:-1:-1;1096:1:0;1087:5;1091:1;1051:17;1087:5;:::i;:::-;:10;1079:56;;;;-1:-1:-1;;;1079:56:0;;8950:2:1;1079:56:0;;;8932:21:1;8989:2;8969:18;;;8962:30;9028:34;9008:18;;;9001:62;-1:-1:-1;;;9079:18:1;;;9072:31;9120:19;;1079:56:0;8748:397:1;1170:131:0;1227:7;1254:39;1258:1;1261;1254:39;;;;;;;;;;;;;;;;;:3;:39::i;570:135::-;627:7;654:43;658:1;661;654:43;;;;;;;;;;;;;;;;;:3;:43::i;24559:562::-;24719:16;;;24733:1;24719:16;;;;;;;;24695:21;;24719:16;;;;;;;;;;-1:-1:-1;24719:16:0;24695:40;;24764:4;24746;24751:1;24746:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;24746:23:0;;;-1:-1:-1;;;;;24746:23:0;;;;;24790:6;-1:-1:-1;;;;;24790:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24780:4;24785:1;24780:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;24780:23:0;;;-1:-1:-1;;;;;24780:23:0;;;;;24816:49;24833:4;24848:6;24857:7;24816:8;:49::i;:::-;24902:211;;-1:-1:-1;;;24902:211:0;;-1:-1:-1;;;;;24902:6:0;:57;;;;:211;;24974:7;;24996:1;;25040:4;;25067;;25087:15;;24902:211;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28706:350;28850:49;28867:4;28882:6;28891:7;28850:8;:49::i;:::-;28942:106;;-1:-1:-1;;;28942:106:0;;28994:4;28942:106;;;10996:34:1;;;11046:18;;;11039:34;;;29010:1:0;11089:18:1;;;11082:34;;;11132:18;;;11125:34;11175:19;;;11168:44;29032:15:0;11228:19:1;;;11221:35;28942:6:0;-1:-1:-1;;;;;28942:22:0;;;;28973:9;;10930:19:1;;28942:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28706:350;;:::o;1307:277::-;1392:7;1427:12;1420:5;1412:28;;;;-1:-1:-1;;;1412:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1451:9:0;1463:5;1467:1;1463;:5;:::i;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:416::-;1280:6;1288;1341:2;1329:9;1320:7;1316:23;1312:32;1309:52;;;1357:1;1354;1347:12;1309:52;1396:9;1383:23;1415:31;1440:5;1415:31;:::i;:::-;1465:5;-1:-1:-1;1522:2:1;1507:18;;1494:32;1564:15;;1557:23;1545:36;;1535:64;;1595:1;1592;1585:12;1535:64;1618:7;1608:17;;;1215:416;;;;;:::o;1636:247::-;1695:6;1748:2;1736:9;1727:7;1723:23;1719:32;1716:52;;;1764:1;1761;1754:12;1716:52;1803:9;1790:23;1822:31;1847:5;1822:31;:::i;2070:456::-;2147:6;2155;2163;2216:2;2204:9;2195:7;2191:23;2187:32;2184:52;;;2232:1;2229;2222:12;2184:52;2271:9;2258:23;2290:31;2315:5;2290:31;:::i;:::-;2340:5;-1:-1:-1;2397:2:1;2382:18;;2369:32;2410:33;2369:32;2410:33;:::i;:::-;2070:456;;2462:7;;-1:-1:-1;;;2516:2:1;2501:18;;;;2488:32;;2070:456::o;3612:388::-;3680:6;3688;3741:2;3729:9;3720:7;3716:23;3712:32;3709:52;;;3757:1;3754;3747:12;3709:52;3796:9;3783:23;3815:31;3840:5;3815:31;:::i;:::-;3865:5;-1:-1:-1;3922:2:1;3907:18;;3894:32;3935:33;3894:32;3935:33;:::i;4240:380::-;4319:1;4315:12;;;;4362;;;4383:61;;4437:4;4429:6;4425:17;4415:27;;4383:61;4490:2;4482:6;4479:14;4459:18;4456:38;4453:161;;4536:10;4531:3;4527:20;4524:1;4517:31;4571:4;4568:1;4561:15;4599:4;4596:1;4589:15;4453:161;;4240:380;;;:::o;4625:356::-;4827:2;4809:21;;;4846:18;;;4839:30;4905:34;4900:2;4885:18;;4878:62;4972:2;4957:18;;4625:356::o;7001:127::-;7062:10;7057:3;7053:20;7050:1;7043:31;7093:4;7090:1;7083:15;7117:4;7114:1;7107:15;7133:125;7198:9;;;7219:10;;;7216:36;;;7232:18;;:::i;7611:168::-;7684:9;;;7715;;7732:15;;;7726:22;;7712:37;7702:71;;7753:18;;:::i;7784:217::-;7824:1;7850;7840:132;;7894:10;7889:3;7885:20;7882:1;7875:31;7929:4;7926:1;7919:15;7957:4;7954:1;7947:15;7840:132;-1:-1:-1;7986:9:1;;7784:217::o;8006:128::-;8073:9;;;8094:11;;;8091:37;;;8108:18;;:::i;9282:127::-;9343:10;9338:3;9334:20;9331:1;9324:31;9374:4;9371:1;9364:15;9398:4;9395:1;9388:15;9414:251;9484:6;9537:2;9525:9;9516:7;9512:23;9508:32;9505:52;;;9553:1;9550;9543:12;9505:52;9585:9;9579:16;9604:31;9629:5;9604:31;:::i;9670:980::-;9932:4;9980:3;9969:9;9965:19;10011:6;10000:9;9993:25;10037:2;10075:6;10070:2;10059:9;10055:18;10048:34;10118:3;10113:2;10102:9;10098:18;10091:31;10142:6;10177;10171:13;10208:6;10200;10193:22;10246:3;10235:9;10231:19;10224:26;;10285:2;10277:6;10273:15;10259:29;;10306:1;10316:195;10330:6;10327:1;10324:13;10316:195;;;10395:13;;-1:-1:-1;;;;;10391:39:1;10379:52;;10486:15;;;;10451:12;;;;10427:1;10345:9;10316:195;;;-1:-1:-1;;;;;;;10567:32:1;;;;10562:2;10547:18;;10540:60;-1:-1:-1;;;10631:3:1;10616:19;10609:35;10528:3;9670:980;-1:-1:-1;;;9670:980:1:o;11267:306::-;11355:6;11363;11371;11424:2;11412:9;11403:7;11399:23;11395:32;11392:52;;;11440:1;11437;11430:12;11392:52;11469:9;11463:16;11453:26;;11519:2;11508:9;11504:18;11498:25;11488:35;;11563:2;11552:9;11548:18;11542:25;11532:35;;11267:306;;;;;:::o
Swarm Source
ipfs://b3a354e92c81f7e1975bc895e5d52292f942beccd9ee7a0f40858e7c07cadd10
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.