More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 78 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 15570685 | 839 days ago | IN | 0 ETH | 0.0003328 | ||||
Approve | 15570423 | 840 days ago | IN | 0 ETH | 0.00050528 | ||||
Approve | 15570421 | 840 days ago | IN | 0 ETH | 0.00035828 | ||||
Approve | 15570421 | 840 days ago | IN | 0 ETH | 0.0004054 | ||||
Approve | 15570421 | 840 days ago | IN | 0 ETH | 0.00041401 | ||||
Approve | 15570417 | 840 days ago | IN | 0 ETH | 0.00074604 | ||||
Approve | 15570415 | 840 days ago | IN | 0 ETH | 0.00040955 | ||||
Approve | 15570405 | 840 days ago | IN | 0 ETH | 0.00039209 | ||||
Approve | 15570404 | 840 days ago | IN | 0 ETH | 0.00037848 | ||||
Approve | 15570404 | 840 days ago | IN | 0 ETH | 0.00077482 | ||||
Approve | 15570401 | 840 days ago | IN | 0 ETH | 0.00045172 | ||||
Approve | 15570400 | 840 days ago | IN | 0 ETH | 0.00054205 | ||||
Approve | 15570397 | 840 days ago | IN | 0 ETH | 0.00043915 | ||||
Approve | 15570396 | 840 days ago | IN | 0 ETH | 0.00044688 | ||||
Approve | 15570393 | 840 days ago | IN | 0 ETH | 0.00050282 | ||||
Approve | 15570392 | 840 days ago | IN | 0 ETH | 0.00046316 | ||||
Transfer Ownersh... | 15570387 | 840 days ago | IN | 0 ETH | 0.00027061 | ||||
Approve | 15570380 | 840 days ago | IN | 0 ETH | 0.00050598 | ||||
Approve | 15570380 | 840 days ago | IN | 0 ETH | 0.00125895 | ||||
Approve | 15570375 | 840 days ago | IN | 0 ETH | 0.00121232 | ||||
Approve | 15570375 | 840 days ago | IN | 0 ETH | 0.00125895 | ||||
Approve | 15570375 | 840 days ago | IN | 0 ETH | 0.00125895 | ||||
Approve | 15570375 | 840 days ago | IN | 0 ETH | 0.00125895 | ||||
Approve | 15570375 | 840 days ago | IN | 0 ETH | 0.00125895 | ||||
Approve | 15570375 | 840 days ago | IN | 0 ETH | 0.00125895 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
15570417 | 840 days ago | 0.00295847 ETH | ||||
15570417 | 840 days ago | 0.00084377 ETH | ||||
15570417 | 840 days ago | 0.00211469 ETH | ||||
15570417 | 840 days ago | 0.00211469 ETH | ||||
15570417 | 840 days ago | 0.00634408 ETH | ||||
15570417 | 840 days ago | 0.00243871 ETH | ||||
15570417 | 840 days ago | 0.00069535 ETH | ||||
15570417 | 840 days ago | 0.00174336 ETH | ||||
15570417 | 840 days ago | 0.00174336 ETH | ||||
15570417 | 840 days ago | 0.00523009 ETH | ||||
15570417 | 840 days ago | 0.00367376 ETH | ||||
15570417 | 840 days ago | 0.00104805 ETH | ||||
15570417 | 840 days ago | 0.00262571 ETH | ||||
15570417 | 840 days ago | 0.00262571 ETH | ||||
15570417 | 840 days ago | 0.00787714 ETH | ||||
15570415 | 840 days ago | 0.00552898 ETH | ||||
15570415 | 840 days ago | 0.00157841 ETH | ||||
15570415 | 840 days ago | 0.00395057 ETH | ||||
15570415 | 840 days ago | 0.00395057 ETH | ||||
15570415 | 840 days ago | 0.01185171 ETH | ||||
15570415 | 840 days ago | 0.00352791 ETH | ||||
15570415 | 840 days ago | 0.00100628 ETH | ||||
15570415 | 840 days ago | 0.00252162 ETH | ||||
15570415 | 840 days ago | 0.00252162 ETH | ||||
15570415 | 840 days ago | 0.00756488 ETH |
Loading...
Loading
Contract Name:
ProofOfWoof
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-19 */ // http://pow.ventures // SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.5; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `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 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 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 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 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 allowance 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 { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { 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; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { 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 Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } 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 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; } /** * @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; } /** * @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 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; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract ProofOfWoof is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool private swapping; address public marketingWallet; address public devWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; bool public enableEarlySellTax = false; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch // Seller Map mapping (address => uint256) private _holderFirstBuyTimestamp; // Blacklist Map mapping (address => bool) private _blacklist; bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyDevFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 public sellDevFee; uint256 public earlySellLiquidityFee; uint256 public earlySellMarketingFee; uint256 public tokensForMarketing; uint256 public tokensForLiquidity; uint256 public tokensForDev; // block number of opened trading uint256 launchedAt; /******************/ // exclude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet); event devWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event AutoNukeLP(); event ManualNukeLP(); constructor() ERC20("Proof of Woof", "PoW") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyMarketingFee = 1; uint256 _buyLiquidityFee = 1; uint256 _buyDevFee = 1; uint256 _sellMarketingFee = 35; uint256 _sellLiquidityFee = 1; uint256 _sellDevFee = 1; uint256 _earlySellLiquidityFee = 3; uint256 _earlySellMarketingFee = 3; uint256 totalSupply = 1 * 1e9 * 1e18; maxTransactionAmount = totalSupply * 20 / 1000; // 2% maxTransactionAmountTxn maxWallet = totalSupply * 20 / 1000; // 2% maxWallet swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; earlySellLiquidityFee = _earlySellLiquidityFee; earlySellMarketingFee = _earlySellMarketingFee; marketingWallet = address(owner()); // set as marketing wallet devWallet = address(owner()); // set as dev wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable { } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; launchedAt = block.number; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool){ limitsInEffect = false; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool){ transferDelayEnabled = false; return true; } function setEarlySellTax(bool onoff) external onlyOwner { enableEarlySellTax = onoff; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){ require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply."); require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply."); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%"); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%"); maxWallet = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner { buyMarketingFee = _marketingFee; buyLiquidityFee = _liquidityFee; buyDevFee = _devFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; require(buyTotalFees <= 20, "Must keep fees at 20% or less"); } function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee, uint256 _earlySellLiquidityFee, uint256 _earlySellMarketingFee) external onlyOwner { sellMarketingFee = _marketingFee; sellLiquidityFee = _liquidityFee; sellDevFee = _devFee; earlySellLiquidityFee = _earlySellLiquidityFee; earlySellMarketingFee = _earlySellMarketingFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; require(sellTotalFees <= 25, "Must keep fees at 25% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function blacklistAccount (address account, bool isBlacklisted) public onlyOwner { _blacklist[account] = isBlacklisted; } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateMarketingWallet(address newMarketingWallet) external onlyOwner { emit marketingWalletUpdated(newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } function updateDevWallet(address newWallet) external onlyOwner { emit devWalletUpdated(newWallet, devWallet); devWallet = newWallet; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } event BoughtEarly(address indexed sniper); function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens"); if(amount == 0) { super._transfer(from, to, 0); return; } if(limitsInEffect){ if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled){ if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){ require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed."); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else if(!_isExcludedMaxTransactionAmount[to]){ require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } } // early sell logic bool isBuy = from == uniswapV2Pair; if (!isBuy && enableEarlySellTax) { if (_holderFirstBuyTimestamp[from] != 0 && (_holderFirstBuyTimestamp[from] + (24 hours) >= block.timestamp)) { sellLiquidityFee = earlySellLiquidityFee; sellMarketingFee = earlySellMarketingFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; } else { sellLiquidityFee = 3; sellMarketingFee = 3; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; } } else { if (_holderFirstBuyTimestamp[to] == 0) { _holderFirstBuyTimestamp[to] = block.timestamp; } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForDev += fees * sellDevFee / sellTotalFees; tokensForMarketing += fees * sellMarketingFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForDev += fees * buyDevFee / buyTotalFees; tokensForMarketing += fees * buyMarketingFee / buyTotalFees; } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable devWallet, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev; bool success; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} if(contractBalance > swapTokensAtAmount * 20){ contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap); uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev; tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDev = 0; (success,) = address(devWallet).call{value: ethForDev}(""); if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } (success,) = address(marketingWallet).call{value: address(this).balance}(""); } function forceSwap() external onlyOwner { swapTokensForEth(balanceOf(address(this))); (bool success,) = address(marketingWallet).call{value : address(this).balance}(""); } function forceSend() external onlyOwner { (bool success,) = address(marketingWallet).call{value : address(this).balance}(""); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"blacklistAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableEarlySellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"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":[],"name":"forceSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwap","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":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setEarlySellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","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":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellMarketingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600d805463ffffffff191660019081179091556011805460ff191690911790553480156200003157600080fd5b506040518060400160405280600d81526020016c283937b7b31037b3102bb7b7b360991b81525060405180604001604052806003815260200162506f5760e81b8152508160039081620000859190620007d5565b506004620000948282620007d5565b5050506000620000a96200044a60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d620001198160016200044e565b600680546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001999190620008a1565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020d9190620008a1565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200025b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002819190620008a1565b600780546001600160a01b0319166001600160a01b03929092169182179055620002ad9060016200044e565b600754620002c6906001600160a01b03166001620004c8565b60018080602381806003806b033b2e3c9fd0803ce80000006103e8620002ee826014620008e2565b620002fa9190620008fc565b600a556103e86200030d826014620008e2565b620003199190620008fc565b600c556127106200032c826005620008e2565b620003389190620008fc565b600b556013899055601488905560158790558662000357898b6200091f565b6200036391906200091f565b601255601786905560188590556019849055836200038286886200091f565b6200038e91906200091f565b601655601a839055601b829055600554600880546001600160a01b03199081166001600160a01b039093169283179091556009805490911682179055620003d79060016200051c565b620003e43060016200051c565b620003f361dead60016200051c565b620004126200040a6005546001600160a01b031690565b60016200044e565b6200041f3060016200044e565b6200042e61dead60016200044e565b6200043a3382620005c4565b5050505050505050505062000935565b3390565b6005546001600160a01b031633146200049d5760405162461bcd60e51b81526020600482018190526024820152600080516020620037d083398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260226020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620005675760405162461bcd60e51b81526020600482018190526024820152600080516020620037d0833981519152604482015260640162000494565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200061c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000494565b6200063881600254620006c560201b620017551790919060201c565b6002556001600160a01b038216600090815260208181526040909120546200066b91839062001755620006c5821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b600080620006d483856200091f565b905083811015620007285760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000494565b90505b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200075c57607f821691505b6020821081036200077d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006c057600081815260208120601f850160051c81016020861015620007ac5750805b601f850160051c820191505b81811015620007cd57828155600101620007b8565b505050505050565b81516001600160401b03811115620007f157620007f162000731565b620008098162000802845462000747565b8462000783565b602080601f831160018114620008415760008415620008285750858301515b600019600386901b1c1916600185901b178555620007cd565b600085815260208120601f198616915b82811015620008725788860151825594840194600190910190840162000851565b5085821015620008915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620008b457600080fd5b81516001600160a01b03811681146200072857600080fd5b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200072b576200072b620008cc565b6000826200091a57634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200072b576200072b620008cc565b612e8b80620009456000396000f3fe60806040526004361061039b5760003560e01c80638ea5220f116101dc578063c024666811610102578063df778d26116100a0578063f2fde38b1161006f578063f2fde38b14610a64578063f637434214610a84578063f8b45b0514610a9a578063ff935af614610ab057600080fd5b8063df778d2614610a0e578063e2f4560514610a23578063e884f26014610a39578063f11a24d314610a4e57600080fd5b8063c8c8ebe4116100dc578063c8c8ebe41461097c578063d257b34f14610992578063d85ba063146109b2578063dd62ed3e146109c857600080fd5b8063c024666814610922578063c18bc19514610942578063c876d0b91461096257600080fd5b8063a0d82dc51161017a578063a9059cbb11610149578063a9059cbb14610893578063aacebbe3146108b3578063b62496f5146108d3578063bbc0c7421461090357600080fd5b8063a0d82dc51461081c578063a265777814610832578063a457c2d714610852578063a4d15b641461087257600080fd5b806395d89b41116101b657806395d89b41146107bb5780639a7a23d6146107d05780639c3b4fdc146107f05780639fccce321461080657600080fd5b80638ea5220f146107655780639213691314610785578063924de9b71461079b57600080fd5b806349bd5a5e116102c1578063715018a61161025f5780637bce5a041161022e5780637bce5a04146106fc5780638095d564146107125780638a8c523c146107325780638da5cb5b1461074757600080fd5b8063715018a614610692578063751039fc146106a75780637571336a146106bc57806375f0a874146106dc57600080fd5b8063541a43cf1161029b578063541a43cf146106105780636a486a8e146106265780636ddd17131461063c57806370a082311461065c57600080fd5b806349bd5a5e1461059e5780634a62bb65146105be5780634fbee193146105d857600080fd5b80631a8145bb116103395780632bf3d42d116103085780632bf3d42d1461052c5780632d5a5d3414610542578063313ce56714610562578063395093511461057e57600080fd5b80631a8145bb146104c05780631f3fed8f146104d6578063203e727e146104ec57806323b872dd1461050c57600080fd5b806312b77e8a1161037557806312b77e8a146104325780631694505e1461044957806318160ddd146104815780631816467f146104a057600080fd5b806306fdde03146103a7578063095ea7b3146103d257806310d5de531461040257600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610ad0565b6040516103c9919061299b565b60405180910390f35b3480156103de57600080fd5b506103f26103ed366004612a01565b610b62565b60405190151581526020016103c9565b34801561040e57600080fd5b506103f261041d366004612a2d565b60216020526000908152604090205460ff1681565b34801561043e57600080fd5b50610447610b79565b005b34801561045557600080fd5b50600654610469906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b34801561048d57600080fd5b506002545b6040519081526020016103c9565b3480156104ac57600080fd5b506104476104bb366004612a2d565b610c04565b3480156104cc57600080fd5b50610492601d5481565b3480156104e257600080fd5b50610492601c5481565b3480156104f857600080fd5b50610447610507366004612a4a565b610c8b565b34801561051857600080fd5b506103f2610527366004612a63565b610d68565b34801561053857600080fd5b50610492601b5481565b34801561054e57600080fd5b5061044761055d366004612ab4565b610dd1565b34801561056e57600080fd5b50604051601281526020016103c9565b34801561058a57600080fd5b506103f2610599366004612a01565b610e26565b3480156105aa57600080fd5b50600754610469906001600160a01b031681565b3480156105ca57600080fd5b50600d546103f29060ff1681565b3480156105e457600080fd5b506103f26105f3366004612a2d565b6001600160a01b0316600090815260208052604090205460ff1690565b34801561061c57600080fd5b50610492601a5481565b34801561063257600080fd5b5061049260165481565b34801561064857600080fd5b50600d546103f29062010000900460ff1681565b34801561066857600080fd5b50610492610677366004612a2d565b6001600160a01b031660009081526020819052604090205490565b34801561069e57600080fd5b50610447610e5c565b3480156106b357600080fd5b506103f2610ed0565b3480156106c857600080fd5b506104476106d7366004612ab4565b610f0d565b3480156106e857600080fd5b50600854610469906001600160a01b031681565b34801561070857600080fd5b5061049260135481565b34801561071e57600080fd5b5061044761072d366004612ae9565b610f62565b34801561073e57600080fd5b5061044761100a565b34801561075357600080fd5b506005546001600160a01b0316610469565b34801561077157600080fd5b50600954610469906001600160a01b031681565b34801561079157600080fd5b5061049260175481565b3480156107a757600080fd5b506104476107b6366004612b15565b61104b565b3480156107c757600080fd5b506103bc611091565b3480156107dc57600080fd5b506104476107eb366004612ab4565b6110a0565b3480156107fc57600080fd5b5061049260155481565b34801561081257600080fd5b50610492601e5481565b34801561082857600080fd5b5061049260195481565b34801561083e57600080fd5b5061044761084d366004612b15565b61115c565b34801561085e57600080fd5b506103f261086d366004612a01565b6111a4565b34801561087e57600080fd5b50600d546103f2906301000000900460ff1681565b34801561089f57600080fd5b506103f26108ae366004612a01565b6111f3565b3480156108bf57600080fd5b506104476108ce366004612a2d565b611200565b3480156108df57600080fd5b506103f26108ee366004612a2d565b60226020526000908152604090205460ff1681565b34801561090f57600080fd5b50600d546103f290610100900460ff1681565b34801561092e57600080fd5b5061044761093d366004612ab4565b611287565b34801561094e57600080fd5b5061044761095d366004612a4a565b61130e565b34801561096e57600080fd5b506011546103f29060ff1681565b34801561098857600080fd5b50610492600a5481565b34801561099e57600080fd5b506103f26109ad366004612a4a565b6113df565b3480156109be57600080fd5b5061049260125481565b3480156109d457600080fd5b506104926109e3366004612b30565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a1a57600080fd5b50610447611536565b348015610a2f57600080fd5b50610492600b5481565b348015610a4557600080fd5b506103f2611579565b348015610a5a57600080fd5b5061049260145481565b348015610a7057600080fd5b50610447610a7f366004612a2d565b6115b6565b348015610a9057600080fd5b5061049260185481565b348015610aa657600080fd5b50610492600c5481565b348015610abc57600080fd5b50610447610acb366004612b69565b6116a1565b606060038054610adf90612ba4565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0b90612ba4565b8015610b585780601f10610b2d57610100808354040283529160200191610b58565b820191906000526020600020905b815481529060010190602001808311610b3b57829003601f168201915b5050505050905090565b6000610b6f3384846117bb565b5060015b92915050565b6005546001600160a01b03163314610bac5760405162461bcd60e51b8152600401610ba390612bde565b60405180910390fd5b6008546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610bf9576040519150601f19603f3d011682016040523d82523d6000602084013e610bfe565b606091505b50505050565b6005546001600160a01b03163314610c2e5760405162461bcd60e51b8152600401610ba390612bde565b6009546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610cb55760405162461bcd60e51b8152600401610ba390612bde565b670de0b6b3a76400006103e8610cca60025490565b610cd5906001612c29565b610cdf9190612c40565b610ce99190612c40565b811015610d505760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610ba3565b610d6281670de0b6b3a7640000612c29565b600a5550565b6000610d758484846118e0565b610dc78433610dc285604051806060016040528060288152602001612e09602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061228f565b6117bb565b5060019392505050565b6005546001600160a01b03163314610dfb5760405162461bcd60e51b8152600401610ba390612bde565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b6f918590610dc29086611755565b6005546001600160a01b03163314610e865760405162461bcd60e51b8152600401610ba390612bde565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546000906001600160a01b03163314610efd5760405162461bcd60e51b8152600401610ba390612bde565b50600d805460ff19169055600190565b6005546001600160a01b03163314610f375760405162461bcd60e51b8152600401610ba390612bde565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610f8c5760405162461bcd60e51b8152600401610ba390612bde565b60138390556014829055601581905580610fa68385612c62565b610fb09190612c62565b6012819055601410156110055760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610ba3565b505050565b6005546001600160a01b031633146110345760405162461bcd60e51b8152600401610ba390612bde565b600d805462ffff0019166201010017905543601f55565b6005546001600160a01b031633146110755760405162461bcd60e51b8152600401610ba390612bde565b600d8054911515620100000262ff000019909216919091179055565b606060048054610adf90612ba4565b6005546001600160a01b031633146110ca5760405162461bcd60e51b8152600401610ba390612bde565b6007546001600160a01b039081169083160361114e5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ba3565b61115882826122c9565b5050565b6005546001600160a01b031633146111865760405162461bcd60e51b8152600401610ba390612bde565b600d805491151563010000000263ff00000019909216919091179055565b6000610b6f3384610dc285604051806060016040528060258152602001612e31602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061228f565b6000610b6f3384846118e0565b6005546001600160a01b0316331461122a5760405162461bcd60e51b8152600401610ba390612bde565b6008546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146112b15760405162461bcd60e51b8152600401610ba390612bde565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146113385760405162461bcd60e51b8152600401610ba390612bde565b670de0b6b3a76400006103e861134d60025490565b611358906005612c29565b6113629190612c40565b61136c9190612c40565b8110156113c75760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610ba3565b6113d981670de0b6b3a7640000612c29565b600c5550565b6005546000906001600160a01b0316331461140c5760405162461bcd60e51b8152600401610ba390612bde565b620186a061141960025490565b611424906001612c29565b61142e9190612c40565b82101561149b5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610ba3565b6103e86114a760025490565b6114b2906005612c29565b6114bc9190612c40565b8211156115285760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610ba3565b50600b81905560015b919050565b6005546001600160a01b031633146115605760405162461bcd60e51b8152600401610ba390612bde565b30600090815260208190526040902054610bac9061231d565b6005546000906001600160a01b031633146115a65760405162461bcd60e51b8152600401610ba390612bde565b506011805460ff19169055600190565b6005546001600160a01b031633146115e05760405162461bcd60e51b8152600401610ba390612bde565b6001600160a01b0381166116455760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ba3565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146116cb5760405162461bcd60e51b8152600401610ba390612bde565b601785905560188490556019839055601a829055601b819055826116ef8587612c62565b6116f99190612c62565b60168190556019101561174e5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610ba3565b5050505050565b6000806117628385612c62565b9050838110156117b45760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ba3565b9392505050565b6001600160a01b03831661181d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ba3565b6001600160a01b03821661187e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ba3565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166119065760405162461bcd60e51b8152600401610ba390612c75565b6001600160a01b03821661192c5760405162461bcd60e51b8152600401610ba390612cba565b6001600160a01b03821660009081526010602052604090205460ff1615801561196e57506001600160a01b03831660009081526010602052604090205460ff16155b6119d45760405162461bcd60e51b815260206004820152603160248201527f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460448201527072616e73666572696e6720746f6b656e7360781b6064820152608401610ba3565b806000036119e85761100583836000612477565b600d5460ff1615611e5b576005546001600160a01b03848116911614801590611a1f57506005546001600160a01b03838116911614155b8015611a3357506001600160a01b03821615155b8015611a4a57506001600160a01b03821661dead14155b8015611a605750600754600160a01b900460ff16155b15611e5b57600d54610100900460ff16611af6576001600160a01b038316600090815260208052604090205460ff1680611ab157506001600160a01b038216600090815260208052604090205460ff165b611af65760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ba3565b60115460ff1615611bf5576005546001600160a01b03838116911614801590611b2d57506006546001600160a01b03838116911614155b8015611b4757506007546001600160a01b03838116911614155b15611bf557326000908152600e60205260409020544311611be25760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610ba3565b326000908152600e602052604090204390555b6001600160a01b03831660009081526022602052604090205460ff168015611c3657506001600160a01b03821660009081526021602052604090205460ff16155b15611d1a57600a54811115611cab5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610ba3565b600c546001600160a01b038316600090815260208190526040902054611cd19083612c62565b1115611d155760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610ba3565b611e5b565b6001600160a01b03821660009081526022602052604090205460ff168015611d5b57506001600160a01b03831660009081526021602052604090205460ff16155b15611dd157600a54811115611d155760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610ba3565b6001600160a01b03821660009081526021602052604090205460ff16611e5b57600c546001600160a01b038316600090815260208190526040902054611e179083612c62565b1115611e5b5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610ba3565b6007546001600160a01b03848116911614801581611e825750600d546301000000900460ff165b15611f22576001600160a01b0384166000908152600f602052604090205415801590611ed457506001600160a01b0384166000908152600f60205260409020544290611ed19062015180612c62565b10155b15611f0857601a546018819055601b54601781905560195491611ef691612c62565b611f009190612c62565b601655611f5d565b60036018819055601781905560195490611ef69080612c62565b6001600160a01b0383166000908152600f60205260408120549003611f5d576001600160a01b0383166000908152600f602052604090204290555b30600090815260208190526040902054600b5481108015908190611f895750600d5462010000900460ff165b8015611f9f5750600754600160a01b900460ff16155b8015611fc457506001600160a01b03861660009081526022602052604090205460ff16155b8015611fe857506001600160a01b038616600090815260208052604090205460ff16155b801561200c57506001600160a01b038516600090815260208052604090205460ff16155b1561203a576007805460ff60a01b1916600160a01b17905561202c612580565b6007805460ff60a01b191690555b6007546001600160a01b038716600090815260208052604090205460ff600160a01b90920482161591168061208657506001600160a01b038616600090815260208052604090205460ff165b1561208f575060005b6000811561227a576001600160a01b03871660009081526022602052604090205460ff1680156120c157506000601654115b1561217f576120e660646120e0601654896127ba90919063ffffffff16565b9061283c565b9050601654601854826120f99190612c29565b6121039190612c40565b601d60008282546121149190612c62565b90915550506016546019546121299083612c29565b6121339190612c40565b601e60008282546121449190612c62565b90915550506016546017546121599083612c29565b6121639190612c40565b601c60008282546121749190612c62565b9091555061225c9050565b6001600160a01b03881660009081526022602052604090205460ff1680156121a957506000601254115b1561225c576121c860646120e0601254896127ba90919063ffffffff16565b9050601254601454826121db9190612c29565b6121e59190612c40565b601d60008282546121f69190612c62565b909155505060125460155461220b9083612c29565b6122159190612c40565b601e60008282546122269190612c62565b909155505060125460135461223b9083612c29565b6122459190612c40565b601c60008282546122569190612c62565b90915550505b801561226d5761226d883083612477565b6122778187612cfd565b95505b612285888888612477565b5050505050505050565b600081848411156122b35760405162461bcd60e51b8152600401610ba3919061299b565b5060006122c08486612cfd565b95945050505050565b6001600160a01b038216600081815260226020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061235257612352612d10565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156123ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123cf9190612d26565b816001815181106123e2576123e2612d10565b6001600160a01b03928316602091820292909201015260065461240891309116846117bb565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612441908590600090869030904290600401612d43565b600060405180830381600087803b15801561245b57600080fd5b505af115801561246f573d6000803e3d6000fd5b505050505050565b6001600160a01b03831661249d5760405162461bcd60e51b8152600401610ba390612c75565b6001600160a01b0382166124c35760405162461bcd60e51b8152600401610ba390612cba565b61250081604051806060016040528060268152602001612de3602691396001600160a01b038616600090815260208190526040902054919061228f565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461252f9082611755565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016118d3565b3060009081526020819052604081205490506000601e54601c54601d546125a79190612c62565b6125b19190612c62565b905060008215806125c0575081155b156125ca57505050565b600b546125d8906014612c29565b8311156125f057600b546125ed906014612c29565b92505b6000600283601d54866126039190612c29565b61260d9190612c40565b6126179190612c40565b90506000612625858361287e565b9050476126318261231d565b600061263d478361287e565b9050600061265a876120e0601c54856127ba90919063ffffffff16565b90506000612677886120e0601e54866127ba90919063ffffffff16565b90506000816126868486612cfd565b6126909190612cfd565b6000601d819055601c819055601e8190556009546040519293506001600160a01b031691849181818185875af1925050503d80600081146126ed576040519150601f19603f3d011682016040523d82523d6000602084013e6126f2565b606091505b509098505086158015906127065750600081115b156127595761271587826128c0565b601d54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6008546040516001600160a01b03909116904790600081818185875af1925050503d80600081146127a6576040519150601f19603f3d011682016040523d82523d6000602084013e6127ab565b606091505b50505050505050505050505050565b6000826000036127cc57506000610b73565b60006127d88385612c29565b9050826127e58583612c40565b146117b45760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ba3565b60006117b483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061296d565b60006117b483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061228f565b6006546128d89030906001600160a01b0316846117bb565b60065460095460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612948573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061174e9190612db4565b6000818361298e5760405162461bcd60e51b8152600401610ba3919061299b565b5060006122c08486612c40565b600060208083528351808285015260005b818110156129c8578581018301518582016040015282016129ac565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146129fe57600080fd5b50565b60008060408385031215612a1457600080fd5b8235612a1f816129e9565b946020939093013593505050565b600060208284031215612a3f57600080fd5b81356117b4816129e9565b600060208284031215612a5c57600080fd5b5035919050565b600080600060608486031215612a7857600080fd5b8335612a83816129e9565b92506020840135612a93816129e9565b929592945050506040919091013590565b8035801515811461153157600080fd5b60008060408385031215612ac757600080fd5b8235612ad2816129e9565b9150612ae060208401612aa4565b90509250929050565b600080600060608486031215612afe57600080fd5b505081359360208301359350604090920135919050565b600060208284031215612b2757600080fd5b6117b482612aa4565b60008060408385031215612b4357600080fd5b8235612b4e816129e9565b91506020830135612b5e816129e9565b809150509250929050565b600080600080600060a08688031215612b8157600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600181811c90821680612bb857607f821691505b602082108103612bd857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610b7357610b73612c13565b600082612c5d57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610b7357610b73612c13565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b7357610b73612c13565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612d3857600080fd5b81516117b4816129e9565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612d935784516001600160a01b031683529383019391830191600101612d6e565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612dc957600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d2012a1275af915efd182a300625783a3e9dce09e14426c9e53986e415d84dc964736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x60806040526004361061039b5760003560e01c80638ea5220f116101dc578063c024666811610102578063df778d26116100a0578063f2fde38b1161006f578063f2fde38b14610a64578063f637434214610a84578063f8b45b0514610a9a578063ff935af614610ab057600080fd5b8063df778d2614610a0e578063e2f4560514610a23578063e884f26014610a39578063f11a24d314610a4e57600080fd5b8063c8c8ebe4116100dc578063c8c8ebe41461097c578063d257b34f14610992578063d85ba063146109b2578063dd62ed3e146109c857600080fd5b8063c024666814610922578063c18bc19514610942578063c876d0b91461096257600080fd5b8063a0d82dc51161017a578063a9059cbb11610149578063a9059cbb14610893578063aacebbe3146108b3578063b62496f5146108d3578063bbc0c7421461090357600080fd5b8063a0d82dc51461081c578063a265777814610832578063a457c2d714610852578063a4d15b641461087257600080fd5b806395d89b41116101b657806395d89b41146107bb5780639a7a23d6146107d05780639c3b4fdc146107f05780639fccce321461080657600080fd5b80638ea5220f146107655780639213691314610785578063924de9b71461079b57600080fd5b806349bd5a5e116102c1578063715018a61161025f5780637bce5a041161022e5780637bce5a04146106fc5780638095d564146107125780638a8c523c146107325780638da5cb5b1461074757600080fd5b8063715018a614610692578063751039fc146106a75780637571336a146106bc57806375f0a874146106dc57600080fd5b8063541a43cf1161029b578063541a43cf146106105780636a486a8e146106265780636ddd17131461063c57806370a082311461065c57600080fd5b806349bd5a5e1461059e5780634a62bb65146105be5780634fbee193146105d857600080fd5b80631a8145bb116103395780632bf3d42d116103085780632bf3d42d1461052c5780632d5a5d3414610542578063313ce56714610562578063395093511461057e57600080fd5b80631a8145bb146104c05780631f3fed8f146104d6578063203e727e146104ec57806323b872dd1461050c57600080fd5b806312b77e8a1161037557806312b77e8a146104325780631694505e1461044957806318160ddd146104815780631816467f146104a057600080fd5b806306fdde03146103a7578063095ea7b3146103d257806310d5de531461040257600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610ad0565b6040516103c9919061299b565b60405180910390f35b3480156103de57600080fd5b506103f26103ed366004612a01565b610b62565b60405190151581526020016103c9565b34801561040e57600080fd5b506103f261041d366004612a2d565b60216020526000908152604090205460ff1681565b34801561043e57600080fd5b50610447610b79565b005b34801561045557600080fd5b50600654610469906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b34801561048d57600080fd5b506002545b6040519081526020016103c9565b3480156104ac57600080fd5b506104476104bb366004612a2d565b610c04565b3480156104cc57600080fd5b50610492601d5481565b3480156104e257600080fd5b50610492601c5481565b3480156104f857600080fd5b50610447610507366004612a4a565b610c8b565b34801561051857600080fd5b506103f2610527366004612a63565b610d68565b34801561053857600080fd5b50610492601b5481565b34801561054e57600080fd5b5061044761055d366004612ab4565b610dd1565b34801561056e57600080fd5b50604051601281526020016103c9565b34801561058a57600080fd5b506103f2610599366004612a01565b610e26565b3480156105aa57600080fd5b50600754610469906001600160a01b031681565b3480156105ca57600080fd5b50600d546103f29060ff1681565b3480156105e457600080fd5b506103f26105f3366004612a2d565b6001600160a01b0316600090815260208052604090205460ff1690565b34801561061c57600080fd5b50610492601a5481565b34801561063257600080fd5b5061049260165481565b34801561064857600080fd5b50600d546103f29062010000900460ff1681565b34801561066857600080fd5b50610492610677366004612a2d565b6001600160a01b031660009081526020819052604090205490565b34801561069e57600080fd5b50610447610e5c565b3480156106b357600080fd5b506103f2610ed0565b3480156106c857600080fd5b506104476106d7366004612ab4565b610f0d565b3480156106e857600080fd5b50600854610469906001600160a01b031681565b34801561070857600080fd5b5061049260135481565b34801561071e57600080fd5b5061044761072d366004612ae9565b610f62565b34801561073e57600080fd5b5061044761100a565b34801561075357600080fd5b506005546001600160a01b0316610469565b34801561077157600080fd5b50600954610469906001600160a01b031681565b34801561079157600080fd5b5061049260175481565b3480156107a757600080fd5b506104476107b6366004612b15565b61104b565b3480156107c757600080fd5b506103bc611091565b3480156107dc57600080fd5b506104476107eb366004612ab4565b6110a0565b3480156107fc57600080fd5b5061049260155481565b34801561081257600080fd5b50610492601e5481565b34801561082857600080fd5b5061049260195481565b34801561083e57600080fd5b5061044761084d366004612b15565b61115c565b34801561085e57600080fd5b506103f261086d366004612a01565b6111a4565b34801561087e57600080fd5b50600d546103f2906301000000900460ff1681565b34801561089f57600080fd5b506103f26108ae366004612a01565b6111f3565b3480156108bf57600080fd5b506104476108ce366004612a2d565b611200565b3480156108df57600080fd5b506103f26108ee366004612a2d565b60226020526000908152604090205460ff1681565b34801561090f57600080fd5b50600d546103f290610100900460ff1681565b34801561092e57600080fd5b5061044761093d366004612ab4565b611287565b34801561094e57600080fd5b5061044761095d366004612a4a565b61130e565b34801561096e57600080fd5b506011546103f29060ff1681565b34801561098857600080fd5b50610492600a5481565b34801561099e57600080fd5b506103f26109ad366004612a4a565b6113df565b3480156109be57600080fd5b5061049260125481565b3480156109d457600080fd5b506104926109e3366004612b30565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a1a57600080fd5b50610447611536565b348015610a2f57600080fd5b50610492600b5481565b348015610a4557600080fd5b506103f2611579565b348015610a5a57600080fd5b5061049260145481565b348015610a7057600080fd5b50610447610a7f366004612a2d565b6115b6565b348015610a9057600080fd5b5061049260185481565b348015610aa657600080fd5b50610492600c5481565b348015610abc57600080fd5b50610447610acb366004612b69565b6116a1565b606060038054610adf90612ba4565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0b90612ba4565b8015610b585780601f10610b2d57610100808354040283529160200191610b58565b820191906000526020600020905b815481529060010190602001808311610b3b57829003601f168201915b5050505050905090565b6000610b6f3384846117bb565b5060015b92915050565b6005546001600160a01b03163314610bac5760405162461bcd60e51b8152600401610ba390612bde565b60405180910390fd5b6008546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610bf9576040519150601f19603f3d011682016040523d82523d6000602084013e610bfe565b606091505b50505050565b6005546001600160a01b03163314610c2e5760405162461bcd60e51b8152600401610ba390612bde565b6009546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610cb55760405162461bcd60e51b8152600401610ba390612bde565b670de0b6b3a76400006103e8610cca60025490565b610cd5906001612c29565b610cdf9190612c40565b610ce99190612c40565b811015610d505760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610ba3565b610d6281670de0b6b3a7640000612c29565b600a5550565b6000610d758484846118e0565b610dc78433610dc285604051806060016040528060288152602001612e09602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061228f565b6117bb565b5060019392505050565b6005546001600160a01b03163314610dfb5760405162461bcd60e51b8152600401610ba390612bde565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b6f918590610dc29086611755565b6005546001600160a01b03163314610e865760405162461bcd60e51b8152600401610ba390612bde565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546000906001600160a01b03163314610efd5760405162461bcd60e51b8152600401610ba390612bde565b50600d805460ff19169055600190565b6005546001600160a01b03163314610f375760405162461bcd60e51b8152600401610ba390612bde565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610f8c5760405162461bcd60e51b8152600401610ba390612bde565b60138390556014829055601581905580610fa68385612c62565b610fb09190612c62565b6012819055601410156110055760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610ba3565b505050565b6005546001600160a01b031633146110345760405162461bcd60e51b8152600401610ba390612bde565b600d805462ffff0019166201010017905543601f55565b6005546001600160a01b031633146110755760405162461bcd60e51b8152600401610ba390612bde565b600d8054911515620100000262ff000019909216919091179055565b606060048054610adf90612ba4565b6005546001600160a01b031633146110ca5760405162461bcd60e51b8152600401610ba390612bde565b6007546001600160a01b039081169083160361114e5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ba3565b61115882826122c9565b5050565b6005546001600160a01b031633146111865760405162461bcd60e51b8152600401610ba390612bde565b600d805491151563010000000263ff00000019909216919091179055565b6000610b6f3384610dc285604051806060016040528060258152602001612e31602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061228f565b6000610b6f3384846118e0565b6005546001600160a01b0316331461122a5760405162461bcd60e51b8152600401610ba390612bde565b6008546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146112b15760405162461bcd60e51b8152600401610ba390612bde565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146113385760405162461bcd60e51b8152600401610ba390612bde565b670de0b6b3a76400006103e861134d60025490565b611358906005612c29565b6113629190612c40565b61136c9190612c40565b8110156113c75760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610ba3565b6113d981670de0b6b3a7640000612c29565b600c5550565b6005546000906001600160a01b0316331461140c5760405162461bcd60e51b8152600401610ba390612bde565b620186a061141960025490565b611424906001612c29565b61142e9190612c40565b82101561149b5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610ba3565b6103e86114a760025490565b6114b2906005612c29565b6114bc9190612c40565b8211156115285760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610ba3565b50600b81905560015b919050565b6005546001600160a01b031633146115605760405162461bcd60e51b8152600401610ba390612bde565b30600090815260208190526040902054610bac9061231d565b6005546000906001600160a01b031633146115a65760405162461bcd60e51b8152600401610ba390612bde565b506011805460ff19169055600190565b6005546001600160a01b031633146115e05760405162461bcd60e51b8152600401610ba390612bde565b6001600160a01b0381166116455760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ba3565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146116cb5760405162461bcd60e51b8152600401610ba390612bde565b601785905560188490556019839055601a829055601b819055826116ef8587612c62565b6116f99190612c62565b60168190556019101561174e5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610ba3565b5050505050565b6000806117628385612c62565b9050838110156117b45760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ba3565b9392505050565b6001600160a01b03831661181d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ba3565b6001600160a01b03821661187e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ba3565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166119065760405162461bcd60e51b8152600401610ba390612c75565b6001600160a01b03821661192c5760405162461bcd60e51b8152600401610ba390612cba565b6001600160a01b03821660009081526010602052604090205460ff1615801561196e57506001600160a01b03831660009081526010602052604090205460ff16155b6119d45760405162461bcd60e51b815260206004820152603160248201527f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460448201527072616e73666572696e6720746f6b656e7360781b6064820152608401610ba3565b806000036119e85761100583836000612477565b600d5460ff1615611e5b576005546001600160a01b03848116911614801590611a1f57506005546001600160a01b03838116911614155b8015611a3357506001600160a01b03821615155b8015611a4a57506001600160a01b03821661dead14155b8015611a605750600754600160a01b900460ff16155b15611e5b57600d54610100900460ff16611af6576001600160a01b038316600090815260208052604090205460ff1680611ab157506001600160a01b038216600090815260208052604090205460ff165b611af65760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ba3565b60115460ff1615611bf5576005546001600160a01b03838116911614801590611b2d57506006546001600160a01b03838116911614155b8015611b4757506007546001600160a01b03838116911614155b15611bf557326000908152600e60205260409020544311611be25760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610ba3565b326000908152600e602052604090204390555b6001600160a01b03831660009081526022602052604090205460ff168015611c3657506001600160a01b03821660009081526021602052604090205460ff16155b15611d1a57600a54811115611cab5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610ba3565b600c546001600160a01b038316600090815260208190526040902054611cd19083612c62565b1115611d155760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610ba3565b611e5b565b6001600160a01b03821660009081526022602052604090205460ff168015611d5b57506001600160a01b03831660009081526021602052604090205460ff16155b15611dd157600a54811115611d155760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610ba3565b6001600160a01b03821660009081526021602052604090205460ff16611e5b57600c546001600160a01b038316600090815260208190526040902054611e179083612c62565b1115611e5b5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610ba3565b6007546001600160a01b03848116911614801581611e825750600d546301000000900460ff165b15611f22576001600160a01b0384166000908152600f602052604090205415801590611ed457506001600160a01b0384166000908152600f60205260409020544290611ed19062015180612c62565b10155b15611f0857601a546018819055601b54601781905560195491611ef691612c62565b611f009190612c62565b601655611f5d565b60036018819055601781905560195490611ef69080612c62565b6001600160a01b0383166000908152600f60205260408120549003611f5d576001600160a01b0383166000908152600f602052604090204290555b30600090815260208190526040902054600b5481108015908190611f895750600d5462010000900460ff165b8015611f9f5750600754600160a01b900460ff16155b8015611fc457506001600160a01b03861660009081526022602052604090205460ff16155b8015611fe857506001600160a01b038616600090815260208052604090205460ff16155b801561200c57506001600160a01b038516600090815260208052604090205460ff16155b1561203a576007805460ff60a01b1916600160a01b17905561202c612580565b6007805460ff60a01b191690555b6007546001600160a01b038716600090815260208052604090205460ff600160a01b90920482161591168061208657506001600160a01b038616600090815260208052604090205460ff165b1561208f575060005b6000811561227a576001600160a01b03871660009081526022602052604090205460ff1680156120c157506000601654115b1561217f576120e660646120e0601654896127ba90919063ffffffff16565b9061283c565b9050601654601854826120f99190612c29565b6121039190612c40565b601d60008282546121149190612c62565b90915550506016546019546121299083612c29565b6121339190612c40565b601e60008282546121449190612c62565b90915550506016546017546121599083612c29565b6121639190612c40565b601c60008282546121749190612c62565b9091555061225c9050565b6001600160a01b03881660009081526022602052604090205460ff1680156121a957506000601254115b1561225c576121c860646120e0601254896127ba90919063ffffffff16565b9050601254601454826121db9190612c29565b6121e59190612c40565b601d60008282546121f69190612c62565b909155505060125460155461220b9083612c29565b6122159190612c40565b601e60008282546122269190612c62565b909155505060125460135461223b9083612c29565b6122459190612c40565b601c60008282546122569190612c62565b90915550505b801561226d5761226d883083612477565b6122778187612cfd565b95505b612285888888612477565b5050505050505050565b600081848411156122b35760405162461bcd60e51b8152600401610ba3919061299b565b5060006122c08486612cfd565b95945050505050565b6001600160a01b038216600081815260226020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061235257612352612d10565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156123ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123cf9190612d26565b816001815181106123e2576123e2612d10565b6001600160a01b03928316602091820292909201015260065461240891309116846117bb565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612441908590600090869030904290600401612d43565b600060405180830381600087803b15801561245b57600080fd5b505af115801561246f573d6000803e3d6000fd5b505050505050565b6001600160a01b03831661249d5760405162461bcd60e51b8152600401610ba390612c75565b6001600160a01b0382166124c35760405162461bcd60e51b8152600401610ba390612cba565b61250081604051806060016040528060268152602001612de3602691396001600160a01b038616600090815260208190526040902054919061228f565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461252f9082611755565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016118d3565b3060009081526020819052604081205490506000601e54601c54601d546125a79190612c62565b6125b19190612c62565b905060008215806125c0575081155b156125ca57505050565b600b546125d8906014612c29565b8311156125f057600b546125ed906014612c29565b92505b6000600283601d54866126039190612c29565b61260d9190612c40565b6126179190612c40565b90506000612625858361287e565b9050476126318261231d565b600061263d478361287e565b9050600061265a876120e0601c54856127ba90919063ffffffff16565b90506000612677886120e0601e54866127ba90919063ffffffff16565b90506000816126868486612cfd565b6126909190612cfd565b6000601d819055601c819055601e8190556009546040519293506001600160a01b031691849181818185875af1925050503d80600081146126ed576040519150601f19603f3d011682016040523d82523d6000602084013e6126f2565b606091505b509098505086158015906127065750600081115b156127595761271587826128c0565b601d54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6008546040516001600160a01b03909116904790600081818185875af1925050503d80600081146127a6576040519150601f19603f3d011682016040523d82523d6000602084013e6127ab565b606091505b50505050505050505050505050565b6000826000036127cc57506000610b73565b60006127d88385612c29565b9050826127e58583612c40565b146117b45760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ba3565b60006117b483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061296d565b60006117b483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061228f565b6006546128d89030906001600160a01b0316846117bb565b60065460095460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612948573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061174e9190612db4565b6000818361298e5760405162461bcd60e51b8152600401610ba3919061299b565b5060006122c08486612c40565b600060208083528351808285015260005b818110156129c8578581018301518582016040015282016129ac565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146129fe57600080fd5b50565b60008060408385031215612a1457600080fd5b8235612a1f816129e9565b946020939093013593505050565b600060208284031215612a3f57600080fd5b81356117b4816129e9565b600060208284031215612a5c57600080fd5b5035919050565b600080600060608486031215612a7857600080fd5b8335612a83816129e9565b92506020840135612a93816129e9565b929592945050506040919091013590565b8035801515811461153157600080fd5b60008060408385031215612ac757600080fd5b8235612ad2816129e9565b9150612ae060208401612aa4565b90509250929050565b600080600060608486031215612afe57600080fd5b505081359360208301359350604090920135919050565b600060208284031215612b2757600080fd5b6117b482612aa4565b60008060408385031215612b4357600080fd5b8235612b4e816129e9565b91506020830135612b5e816129e9565b809150509250929050565b600080600080600060a08688031215612b8157600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600181811c90821680612bb857607f821691505b602082108103612bd857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610b7357610b73612c13565b600082612c5d57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610b7357610b73612c13565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b7357610b73612c13565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612d3857600080fd5b81516117b4816129e9565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612d935784516001600160a01b031683529383019391830191600101612d6e565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612dc957600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d2012a1275af915efd182a300625783a3e9dce09e14426c9e53986e415d84dc964736f6c63430008110033
Deployed Bytecode Sourcemap
29306:17183:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7490:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9657:169;;;;;;;;;;-1:-1:-1;9657:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;9657:169:0;1023:187:1;30939:64:0;;;;;;;;;;-1:-1:-1;30939:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;46345:141;;;;;;;;;;;;;:::i;:::-;;29387:41;;;;;;;;;;-1:-1:-1;29387:41:0;;;;-1:-1:-1;;;;;29387:41:0;;;;;;-1:-1:-1;;;;;1658:32:1;;;1640:51;;1628:2;1613:18;29387:41:0;1467:230:1;8610:108:0;;;;;;;;;;-1:-1:-1;8698:12:0;;8610:108;;;1848:25:1;;;1836:2;1821:18;8610:108:0;1702:177:1;38147:157:0;;;;;;;;;;-1:-1:-1;38147:157:0;;;;;:::i;:::-;;:::i;30656:33::-;;;;;;;;;;;;;;;;30616;;;;;;;;;;;;;;;;35395:234;;;;;;;;;;-1:-1:-1;35395:234:0;;;;;:::i;:::-;;:::i;10308:355::-;;;;;;;;;;-1:-1:-1;10308:355:0;;;;;:::i;:::-;;:::i;30571:36::-;;;;;;;;;;;;;;;;37340:135;;;;;;;;;;-1:-1:-1;37340:135:0;;;;;:::i;:::-;;:::i;8452:93::-;;;;;;;;;;-1:-1:-1;8452:93:0;;8535:2;3157:36:1;;3145:2;3130:18;8452:93:0;3015:184:1;11072:218:0;;;;;;;;;;-1:-1:-1;11072:218:0;;;;;:::i;:::-;;:::i;29435:28::-;;;;;;;;;;-1:-1:-1;29435:28:0;;;;-1:-1:-1;;;;;29435:28:0;;;29687:33;;;;;;;;;;-1:-1:-1;29687:33:0;;;;;;;;38314:125;;;;;;;;;;-1:-1:-1;38314:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;38403:28:0;38379:4;38403:28;;;:19;:28;;;;;;;;;38314:125;30528:36;;;;;;;;;;;;;;;;30383:28;;;;;;;;;;;;;;;;29767:31;;;;;;;;;;-1:-1:-1;29767:31:0;;;;;;;;;;;8781:127;;;;;;;;;;-1:-1:-1;8781:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;8882:18:0;8855:7;8882:18;;;;;;;;;;;;8781:127;21951:148;;;;;;;;;;;;;:::i;34506:120::-;;;;;;;;;;;;;:::i;35860:144::-;;;;;;;;;;-1:-1:-1;35860:144:0;;;;;:::i;:::-;;:::i;29502:30::-;;;;;;;;;;-1:-1:-1;29502:30:0;;;;-1:-1:-1;;;;;29502:30:0;;;30276;;;;;;;;;;;;;;;;36209:369;;;;;;;;;;-1:-1:-1;36209:369:0;;;;;:::i;:::-;;:::i;34306:148::-;;;;;;;;;;;;;:::i;21309:79::-;;;;;;;;;;-1:-1:-1;21374:6:0;;-1:-1:-1;;;;;21374:6:0;21309:79;;29539:24;;;;;;;;;;-1:-1:-1;29539:24:0;;;;-1:-1:-1;;;;;29539:24:0;;;30418:31;;;;;;;;;;;;;;;;36100:101;;;;;;;;;;-1:-1:-1;36100:101:0;;;;;:::i;:::-;;:::i;7709:104::-;;;;;;;;;;;;;:::i;37483:244::-;;;;;;;;;;-1:-1:-1;37483:244:0;;;;;:::i;:::-;;:::i;30350:24::-;;;;;;;;;;;;;;;;30696:27;;;;;;;;;;;;;;;;30494:25;;;;;;;;;;;;;;;;34829:102;;;;;;;;;;-1:-1:-1;34829:102:0;;;;;:::i;:::-;;:::i;11793:269::-;;;;;;;;;;-1:-1:-1;11793:269:0;;;;;:::i;:::-;;:::i;29805:38::-;;;;;;;;;;-1:-1:-1;29805:38:0;;;;;;;;;;;9121:175;;;;;;;;;;-1:-1:-1;9121:175:0;;;;;:::i;:::-;;:::i;37931:208::-;;;;;;;;;;-1:-1:-1;37931:208:0;;;;;:::i;:::-;;:::i;31161:58::-;;;;;;;;;;-1:-1:-1;31161:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29727:33;;;;;;;;;;-1:-1:-1;29727:33:0;;;;;;;;;;;37150:182;;;;;;;;;;-1:-1:-1;37150:182:0;;;;;:::i;:::-;;:::i;35637:215::-;;;;;;;;;;-1:-1:-1;35637:215:0;;;;;:::i;:::-;;:::i;30194:39::-;;;;;;;;;;-1:-1:-1;30194:39:0;;;;;;;;29572:35;;;;;;;;;;;;;;;;35001:386;;;;;;;;;;-1:-1:-1;35001:386:0;;;;;:::i;:::-;;:::i;30242:27::-;;;;;;;;;;;;;;;;9359:151;;;;;;;;;;-1:-1:-1;9359:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;9475:18:0;;;9448:7;9475:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9359:151;46141:196;;;;;;;;;;;;;:::i;29614:33::-;;;;;;;;;;;;;;;;34687:134;;;;;;;;;;;;;:::i;30313:30::-;;;;;;;;;;;;;;;;22254:244;;;;;;;;;;-1:-1:-1;22254:244:0;;;;;:::i;:::-;;:::i;30456:31::-;;;;;;;;;;;;;;;;29654:24;;;;;;;;;;;;;;;;36586:556;;;;;;;;;;-1:-1:-1;36586:556:0;;;;;:::i;:::-;;:::i;7490:100::-;7544:13;7577:5;7570:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7490:100;:::o;9657:169::-;9740:4;9757:39;206:10;9780:7;9789:6;9757:8;:39::i;:::-;-1:-1:-1;9814:4:0;9657:169;;;;;:::o;46345:141::-;21521:6;;-1:-1:-1;;;;;21521:6:0;206:10;21521:22;21513:67;;;;-1:-1:-1;;;21513:67:0;;;;;;;:::i;:::-;;;;;;;;;46422:15:::1;::::0;46414:64:::1;::::0;46397:12:::1;::::0;-1:-1:-1;;;;;46422:15:0::1;::::0;46452:21:::1;::::0;46397:12;46414:64;46397:12;46414:64;46452:21;46422:15;46414:64:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;46345:141:0:o;38147:157::-;21521:6;;-1:-1:-1;;;;;21521:6:0;206:10;21521:22;21513:67;;;;-1:-1:-1;;;21513:67:0;;;;;;;:::i;:::-;38254:9:::1;::::0;38226:38:::1;::::0;-1:-1:-1;;;;;38254:9:0;;::::1;::::0;38226:38;::::1;::::0;::::1;::::0;38254:9:::1;::::0;38226:38:::1;38275:9;:21:::0;;-1:-1:-1;;;;;;38275:21:0::1;-1:-1:-1::0;;;;;38275:21:0;;;::::1;::::0;;;::::1;::::0;;38147:157::o;35395:234::-;21521:6;;-1:-1:-1;;;;;21521:6:0;206:10;21521:22;21513:67;;;;-1:-1:-1;;;21513:67:0;;;;;;;:::i;:::-;35514:4:::1;35508;35488:13;8698:12:::0;;;8610:108;35488:13:::1;:17;::::0;35504:1:::1;35488:17;:::i;:::-;:24;;;;:::i;:::-;35487:31;;;;:::i;:::-;35477:6;:41;;35469:101;;;::::0;-1:-1:-1;;;35469:101:0;;6455:2:1;35469:101:0::1;::::0;::::1;6437:21:1::0;6494:2;6474:18;;;6467:30;6533:34;6513:18;;;6506:62;-1:-1:-1;;;6584:18:1;;;6577:45;6639:19;;35469:101:0::1;6253:411:1::0;35469:101:0::1;35604:17;:6:::0;35614::::1;35604:17;:::i;:::-;35581:20;:40:::0;-1:-1:-1;35395:234:0:o;10308:355::-;10448:4;10465:36;10475:6;10483:9;10494:6;10465:9;:36::i;:::-;10512:121;10521:6;206:10;10543:89;10581:6;10543:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10543:19:0;;;;;;:11;:19;;;;;;;;206:10;10543:33;;;;;;;;;;:37;:89::i;:::-;10512:8;:121::i;:::-;-1:-1:-1;10651:4:0;10308:355;;;;;:::o;37340:135::-;21521:6;;-1:-1:-1;;;;;21521:6:0;206:10;21521:22;21513:67;;;;-1:-1:-1;;;21513:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37432:19:0;;;::::1;;::::0;;;:10:::1;:19;::::0;;;;:35;;-1:-1:-1;;37432:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37340:135::o;11072:218::-;206:10;11160:4;11209:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11209:34:0;;;;;;;;;;11160:4;;11177:83;;11200:7;;11209:50;;11248:10;11209:38;:50::i;21951:148::-;21521:6;;-1:-1:-1;;;;;21521:6:0;206:10;21521:22;21513:67;;;;-1:-1:-1;;;21513:67:0;;;;;;;:::i;:::-;22042:6:::1;::::0;22021:40:::1;::::0;22058:1:::1;::::0;-1:-1:-1;;;;;22042:6:0::1;::::0;22021:40:::1;::::0;22058:1;;22021:40:::1;22072:6;:19:::0;;-1:-1:-1;;;;;;22072:19:0::1;::::0;;21951:148::o;34506:120::-;21521:6;;34558:4;;-1:-1:-1;;;;;21521:6:0;206:10;21521:22;21513:67;;;;-1:-1:-1;;;21513:67:0;;;;;;;:::i;:::-;-1:-1:-1;34574:14:0::1;:22:::0;;-1:-1:-1;;34574:22:0::1;::::0;;;34506:120;:::o;35860:144::-;21521:6;;-1:-1:-1;;;;;21521:6:0;206:10;21521:22;21513:67;;;;-1:-1:-1;;;21513:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35950:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;35950:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35860:144::o;36209:369::-;21521:6;;-1:-1:-1;;;;;21521:6:0;206:10;21521:22;21513:67;;;;-1:-1:-1;;;21513:67:0;;;;;;;:::i;:::-;36325:15:::1;:31:::0;;;36367:15:::1;:31:::0;;;36409:9:::1;:19:::0;;;36421:7;36454:33:::1;36385:13:::0;36343;36454:33:::1;:::i;:::-;:45;;;;:::i;:::-;36439:12;:60:::0;;;36534:2:::1;-1:-1:-1::0;36518:18:0::1;36510:60;;;::::0;-1:-1:-1;;;36510:60:0;;7001:2:1;36510:60:0::1;::::0;::::1;6983:21:1::0;7040:2;7020:18;;;7013:30;7079:31;7059:18;;;7052:59;7128:18;;36510:60:0::1;6799:353:1::0;36510:60:0::1;36209:369:::0;;;:::o;34306:148::-;21521:6;;-1:-1:-1;;;;;21521:6:0;206:10;21521:22;21513:67;;;;-1:-1:-1;;;21513:67:0;;;;;;;:::i;:::-;34361:13:::1;:20:::0;;-1:-1:-1;;34392:18:0;;;;;34434:12:::1;34421:10;:25:::0;34306:148::o;36100:101::-;21521:6;;-1:-1:-1;;;;;21521:6:0;206:10;21521:22;21513:67;;;;-1:-1:-1;;;21513:67:0;;;;;;;:::i;:::-;36172:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;36172:21:0;;::::1;::::0;;;::::1;::::0;;36100:101::o;7709:104::-;7765:13;7798:7;7791:14;;;;;:::i;37483:244::-;21521:6;;-1:-1:-1;;;;;21521:6:0;206:10;21521:22;21513:67;;;;-1:-1:-1;;;21513:67:0;;;;;;;:::i;:::-;37590:13:::1;::::0;-1:-1:-1;;;;;37590:13:0;;::::1;37582:21:::0;;::::1;::::0;37574:91:::1;;;::::0;-1:-1:-1;;;37574:91:0;;7359:2:1;37574:91:0::1;::::0;::::1;7341:21:1::0;7398:2;7378:18;;;7371:30;7437:34;7417:18;;;7410:62;7508:27;7488:18;;;7481:55;7553:19;;37574:91:0::1;7157:421:1::0;37574:91:0::1;37678:41;37707:4;37713:5;37678:28;:41::i;:::-;37483:244:::0;;:::o;34829:102::-;21521:6;;-1:-1:-1;;;;;21521:6:0;206:10;21521:22;21513:67;;;;-1:-1:-1;;;21513:67:0;;;;;;;:::i;:::-;34897:18:::1;:26:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;34897:26:0;;::::1;::::0;;;::::1;::::0;;34829:102::o;11793:269::-;11886:4;11903:129;206:10;11926:7;11935:96;11974:15;11935:96;;;;;;;;;;;;;;;;;206:10;11935:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11935:34:0;;;;;;;;;;;;:38;:96::i;9121:175::-;9207:4;9224:42;206:10;9248:9;9259:6;9224:9;:42::i;37931:208::-;21521:6;;-1:-1:-1;;;;;21521:6:0;206:10;21521:22;21513:67;;;;-1:-1:-1;;;21513:67:0;;;;;;;:::i;:::-;38068:15:::1;::::0;38025:59:::1;::::0;-1:-1:-1;;;;;38068:15:0;;::::1;::::0;38025:59;::::1;::::0;::::1;::::0;38068:15:::1;::::0;38025:59:::1;38095:15;:36:::0;;-1:-1:-1;;;;;;38095:36:0::1;-1:-1:-1::0;;;;;38095:36:0;;;::::1;::::0;;;::::1;::::0;;37931:208::o;37150:182::-;21521:6;;-1:-1:-1;;;;;21521:6:0;206:10;21521:22;21513:67;;;;-1:-1:-1;;;21513:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37235:28:0;::::1;;::::0;;;:19:::1;:28:::0;;;;;;;;:39;;-1:-1:-1;;37235:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;37290:34;;1163:41:1;;;37290:34:0::1;::::0;1136:18:1;37290:34:0::1;;;;;;;37150:182:::0;;:::o;35637:215::-;21521:6;;-1:-1:-1;;;;;21521:6:0;206:10;21521:22;21513:67;;;;-1:-1:-1;;;21513:67:0;;;;;;;:::i;:::-;35759:4:::1;35753;35733:13;8698:12:::0;;;8610:108;35733:13:::1;:17;::::0;35749:1:::1;35733:17;:::i;:::-;:24;;;;:::i;:::-;35732:31;;;;:::i;:::-;35722:6;:41;;35714:90;;;::::0;-1:-1:-1;;;35714:90:0;;7785:2:1;35714:90:0::1;::::0;::::1;7767:21:1::0;7824:2;7804:18;;;7797:30;7863:34;7843:18;;;7836:62;-1:-1:-1;;;7914:18:1;;;7907:34;7958:19;;35714:90:0::1;7583:400:1::0;35714:90:0::1;35827:17;:6:::0;35837::::1;35827:17;:::i;:::-;35815:9;:29:::0;-1:-1:-1;35637:215:0:o;35001:386::-;21521:6;;35082:4;;-1:-1:-1;;;;;21521:6:0;206:10;21521:22;21513:67;;;;-1:-1:-1;;;21513:67:0;;;;;;;:::i;:::-;35139:6:::1;35119:13;8698:12:::0;;;8610:108;35119:13:::1;:17;::::0;35135:1:::1;35119:17;:::i;:::-;:26;;;;:::i;:::-;35106:9;:39;;35098:105;;;::::0;-1:-1:-1;;;35098:105:0;;8190:2:1;35098:105:0::1;::::0;::::1;8172:21:1::0;8229:2;8209:18;;;8202:30;8268:34;8248:18;;;8241:62;-1:-1:-1;;;8319:18:1;;;8312:51;8380:19;;35098:105:0::1;7988:417:1::0;35098:105:0::1;35255:4;35235:13;8698:12:::0;;;8610:108;35235:13:::1;:17;::::0;35251:1:::1;35235:17;:::i;:::-;:24;;;;:::i;:::-;35222:9;:37;;35214:102;;;::::0;-1:-1:-1;;;35214:102:0;;8612:2:1;35214:102:0::1;::::0;::::1;8594:21:1::0;8651:2;8631:18;;;8624:30;8690:34;8670:18;;;8663:62;-1:-1:-1;;;8741:18:1;;;8734:50;8801:19;;35214:102:0::1;8410:416:1::0;35214:102:0::1;-1:-1:-1::0;35327:18:0::1;:30:::0;;;35375:4:::1;21591:1;35001:386:::0;;;:::o;46141:196::-;21521:6;;-1:-1:-1;;;;;21521:6:0;206:10;21521:22;21513:67;;;;-1:-1:-1;;;21513:67:0;;;;;;;:::i;:::-;46227:4:::1;8855:7:::0;8882:18;;;;;;;;;;;46192:42:::1;::::0;:16:::1;:42::i;34687:134::-:0;21521:6;;34747:4;;-1:-1:-1;;;;;21521:6:0;206:10;21521:22;21513:67;;;;-1:-1:-1;;;21513:67:0;;;;;;;:::i;:::-;-1:-1:-1;34763:20:0::1;:28:::0;;-1:-1:-1;;34763:28:0::1;::::0;;;34687:134;:::o;22254:244::-;21521:6;;-1:-1:-1;;;;;21521:6:0;206:10;21521:22;21513:67;;;;-1:-1:-1;;;21513:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22343:22:0;::::1;22335:73;;;::::0;-1:-1:-1;;;22335:73:0;;9033:2:1;22335:73:0::1;::::0;::::1;9015:21:1::0;9072:2;9052:18;;;9045:30;9111:34;9091:18;;;9084:62;-1:-1:-1;;;9162:18:1;;;9155:36;9208:19;;22335:73:0::1;8831:402:1::0;22335:73:0::1;22445:6;::::0;22424:38:::1;::::0;-1:-1:-1;;;;;22424:38:0;;::::1;::::0;22445:6:::1;::::0;22424:38:::1;::::0;22445:6:::1;::::0;22424:38:::1;22473:6;:17:::0;;-1:-1:-1;;;;;;22473:17:0::1;-1:-1:-1::0;;;;;22473:17:0;;;::::1;::::0;;;::::1;::::0;;22254:244::o;36586:556::-;21521:6;;-1:-1:-1;;;;;21521:6:0;206:10;21521:22;21513:67;;;;-1:-1:-1;;;21513:67:0;;;;;;;:::i;:::-;36767:16:::1;:32:::0;;;36810:16:::1;:32:::0;;;36853:10:::1;:20:::0;;;36884:21:::1;:46:::0;;;36941:21:::1;:46:::0;;;36866:7;37014:35:::1;36829:13:::0;36786;37014:35:::1;:::i;:::-;:48;;;;:::i;:::-;36998:13;:64:::0;;;37098:2:::1;-1:-1:-1::0;37081:19:0::1;37073:61;;;::::0;-1:-1:-1;;;37073:61:0;;9440:2:1;37073:61:0::1;::::0;::::1;9422:21:1::0;9479:2;9459:18;;;9452:30;9518:31;9498:18;;;9491:59;9567:18;;37073:61:0::1;9238:353:1::0;37073:61:0::1;36586:556:::0;;;;;:::o;16357:181::-;16415:7;;16447:5;16451:1;16447;:5;:::i;:::-;16435:17;;16476:1;16471;:6;;16463:46;;;;-1:-1:-1;;;16463:46:0;;9798:2:1;16463:46:0;;;9780:21:1;9837:2;9817:18;;;9810:30;9876:29;9856:18;;;9849:57;9923:18;;16463:46:0;9596:351:1;16463:46:0;16529:1;16357:181;-1:-1:-1;;;16357:181:0:o;14979:380::-;-1:-1:-1;;;;;15115:19:0;;15107:68;;;;-1:-1:-1;;;15107:68:0;;10154:2:1;15107:68:0;;;10136:21:1;10193:2;10173:18;;;10166:30;10232:34;10212:18;;;10205:62;-1:-1:-1;;;10283:18:1;;;10276:34;10327:19;;15107:68:0;9952:400:1;15107:68:0;-1:-1:-1;;;;;15194:21:0;;15186:68;;;;-1:-1:-1;;;15186:68:0;;10559:2:1;15186:68:0;;;10541:21:1;10598:2;10578:18;;;10571:30;10637:34;10617:18;;;10610:62;-1:-1:-1;;;10688:18:1;;;10681:32;10730:19;;15186:68:0;10357:398:1;15186:68:0;-1:-1:-1;;;;;15267:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15319:32;;1848:25:1;;;15319:32:0;;1821:18:1;15319:32:0;;;;;;;;14979:380;;;:::o;38497:4937::-;-1:-1:-1;;;;;38629:18:0;;38621:68;;;;-1:-1:-1;;;38621:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38708:16:0;;38700:64;;;;-1:-1:-1;;;38700:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38784:14:0;;;;;;:10;:14;;;;;;;;38783:15;:36;;;;-1:-1:-1;;;;;;38803:16:0;;;;;;:10;:16;;;;;;;;38802:17;38783:36;38775:98;;;;-1:-1:-1;;;38775:98:0;;11772:2:1;38775:98:0;;;11754:21:1;11811:2;11791:18;;;11784:30;11850:34;11830:18;;;11823:62;-1:-1:-1;;;11901:18:1;;;11894:47;11958:19;;38775:98:0;11570:413:1;38775:98:0;38887:6;38897:1;38887:11;38884:92;;38915:28;38931:4;38937:2;38941:1;38915:15;:28::i;38884:92::-;38991:14;;;;38988:1794;;;21374:6;;-1:-1:-1;;;;;39043:15:0;;;21374:6;;39043:15;;;;:49;;-1:-1:-1;21374:6:0;;-1:-1:-1;;;;;39079:13:0;;;21374:6;;39079:13;;39043:49;:86;;;;-1:-1:-1;;;;;;39113:16:0;;;;39043:86;:128;;;;-1:-1:-1;;;;;;39150:21:0;;39164:6;39150:21;;39043:128;:158;;;;-1:-1:-1;39193:8:0;;-1:-1:-1;;;39193:8:0;;;;39192:9;39043:158;39021:1750;;;39239:13;;;;;;;39235:148;;-1:-1:-1;;;;;39284:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;39313:23:0;;;;;;:19;:23;;;;;;;;39284:52;39276:87;;;;-1:-1:-1;;;39276:87:0;;12190:2:1;39276:87:0;;;12172:21:1;12229:2;12209:18;;;12202:30;-1:-1:-1;;;12248:18:1;;;12241:52;12310:18;;39276:87:0;11988:346:1;39276:87:0;39539:20;;;;39535:423;;;21374:6;;-1:-1:-1;;;;;39587:13:0;;;21374:6;;39587:13;;;;:47;;-1:-1:-1;39618:15:0;;-1:-1:-1;;;;;39604:30:0;;;39618:15;;39604:30;;39587:47;:79;;;;-1:-1:-1;39652:13:0;;-1:-1:-1;;;;;39638:28:0;;;39652:13;;39638:28;;39587:79;39583:356;;;39731:9;39702:39;;;;:28;:39;;;;;;39744:12;-1:-1:-1;39694:140:0;;;;-1:-1:-1;;;39694:140:0;;12541:2:1;39694:140:0;;;12523:21:1;12580:2;12560:18;;;12553:30;12619:34;12599:18;;;12592:62;12690:34;12670:18;;;12663:62;-1:-1:-1;;;12741:19:1;;;12734:40;12791:19;;39694:140:0;12339:477:1;39694:140:0;39890:9;39861:39;;;;:28;:39;;;;;39903:12;39861:54;;39583:356;-1:-1:-1;;;;;40010:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;40046:35:0;;;;;;:31;:35;;;;;;;;40045:36;40010:71;40006:750;;;40124:20;;40114:6;:30;;40106:96;;;;-1:-1:-1;;;40106:96:0;;13023:2:1;40106:96:0;;;13005:21:1;13062:2;13042:18;;;13035:30;13101:34;13081:18;;;13074:62;-1:-1:-1;;;13152:18:1;;;13145:51;13213:19;;40106:96:0;12821:417:1;40106:96:0;40259:9;;-1:-1:-1;;;;;8882:18:0;;8855:7;8882:18;;;;;;;;;;;40233:22;;:6;:22;:::i;:::-;:35;;40225:67;;;;-1:-1:-1;;;40225:67:0;;13445:2:1;40225:67:0;;;13427:21:1;13484:2;13464:18;;;13457:30;-1:-1:-1;;;13503:18:1;;;13496:49;13562:18;;40225:67:0;13243:343:1;40225:67:0;40006:750;;;-1:-1:-1;;;;;40370:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;40404:37:0;;;;;;:31;:37;;;;;;;;40403:38;40370:71;40366:390;;;40484:20;;40474:6;:30;;40466:97;;;;-1:-1:-1;;;40466:97:0;;13793:2:1;40466:97:0;;;13775:21:1;13832:2;13812:18;;;13805:30;13871:34;13851:18;;;13844:62;-1:-1:-1;;;13922:18:1;;;13915:52;13984:19;;40466:97:0;13591:418:1;40366:390:0;-1:-1:-1;;;;;40610:35:0;;;;;;:31;:35;;;;;;;;40606:150;;40703:9;;-1:-1:-1;;;;;8882:18:0;;8855:7;8882:18;;;;;;;;;;;40677:22;;:6;:22;:::i;:::-;:35;;40669:67;;;;-1:-1:-1;;;40669:67:0;;13445:2:1;40669:67:0;;;13427:21:1;13484:2;13464:18;;;13457:30;-1:-1:-1;;;13503:18:1;;;13496:49;13562:18;;40669:67:0;13243:343:1;40669:67:0;40846:13;;-1:-1:-1;;;;;40838:21:0;;;40846:13;;40838:21;40874:6;;40838:21;40874:28;;-1:-1:-1;40884:18:0;;;;;;;40874:28;40870:739;;;-1:-1:-1;;;;;40923:30:0;;;;;;:24;:30;;;;;;:35;;;;:120;;-1:-1:-1;;;;;;40980:30:0;;;;;;:24;:30;;;;;;41027:15;;40980:43;;41014:8;40980:43;:::i;:::-;:62;;40923:120;40919:527;;;41084:21;;41065:16;:40;;;41143:21;;41124:16;:40;;;41237:10;;;41199:35;;;:::i;:::-;:48;;;;:::i;:::-;41183:13;:64;40870:739;;40919:527;41307:1;41288:16;:20;;;41327:16;:20;;;41420:10;;;41382:35;;41307:1;41382:35;:::i;40870:739::-;-1:-1:-1;;;;;41482:28:0;;;;;;:24;:28;;;;;;:33;;41478:120;;-1:-1:-1;;;;;41536:28:0;;;;;;:24;:28;;;;;41567:15;41536:46;;41478:120;41670:4;41621:28;8882:18;;;;;;;;;;;41728;;41704:42;;;;;;;41776:35;;-1:-1:-1;41800:11:0;;;;;;;41776:35;:61;;;;-1:-1:-1;41829:8:0;;-1:-1:-1;;;41829:8:0;;;;41828:9;41776:61;:110;;;;-1:-1:-1;;;;;;41855:31:0;;;;;;:25;:31;;;;;;;;41854:32;41776:110;:153;;;;-1:-1:-1;;;;;;41904:25:0;;;;;;:19;:25;;;;;;;;41903:26;41776:153;:194;;;;-1:-1:-1;;;;;;41947:23:0;;;;;;:19;:23;;;;;;;;41946:24;41776:194;41759:325;;;41997:8;:15;;-1:-1:-1;;;;41997:15:0;-1:-1:-1;;;41997:15:0;;;42029:10;:8;:10::i;:::-;42056:8;:16;;-1:-1:-1;;;;42056:16:0;;;41759:325;42112:8;;-1:-1:-1;;;;;42221:25:0;;42096:12;42221:25;;;:19;:25;;;;;;42112:8;-1:-1:-1;;;42112:8:0;;;;;42111:9;;42221:25;;:52;;-1:-1:-1;;;;;;42250:23:0;;;;;;:19;:23;;;;;;;;42221:52;42218:99;;;-1:-1:-1;42300:5:0;42218:99;42329:12;42433:7;42430:951;;;-1:-1:-1;;;;;42484:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;42533:1;42517:13;;:17;42484:50;42480:754;;;42561:34;42591:3;42561:25;42572:13;;42561:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;42554:41;;42662:13;;42643:16;;42636:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;42614:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;42730:13:0;;42717:10;;42710:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;42694:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;42810:13:0;;42791:16;;42784:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;42762:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;42480:754:0;;-1:-1:-1;42480:754:0;;-1:-1:-1;;;;;42884:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;42934:1;42919:12;;:16;42884:51;42881:353;;;42963:33;42992:3;42963:24;42974:12;;42963:6;:10;;:24;;;;:::i;:33::-;42956:40;;43062:12;;43044:15;;43037:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;43015:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;43128:12:0;;43116:9;;43109:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;43093:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;43206:12:0;;43188:15;;43181:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;43159:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;42881:353:0;43253:8;;43250:89;;43281:42;43297:4;43311;43318;43281:15;:42::i;:::-;43355:14;43365:4;43355:14;;:::i;:::-;;;42430:951;43393:33;43409:4;43415:2;43419:6;43393:15;:33::i;:::-;38610:4824;;;;;38497:4937;;;:::o;17260:192::-;17346:7;17382:12;17374:6;;;;17366:29;;;;-1:-1:-1;;;17366:29:0;;;;;;;;:::i;:::-;-1:-1:-1;17406:9:0;17418:5;17422:1;17418;:5;:::i;:::-;17406:17;17260:192;-1:-1:-1;;;;;17260:192:0:o;37735:188::-;-1:-1:-1;;;;;37818:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;37818:39:0;;;;;;;;;;37875:40;;37818:39;;:31;37875:40;;;37735:188;;:::o;43442:593::-;43594:16;;;43608:1;43594:16;;;;;;;;43570:21;;43594:16;;;;;;;;;;-1:-1:-1;43594:16:0;43570:40;;43639:4;43621;43626:1;43621:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;43621:23:0;;;:7;;;;;;;;;;:23;;;;43665:15;;:22;;;-1:-1:-1;;;43665:22:0;;;;:15;;;;;:20;;:22;;;;;43621:7;;43665:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43655:4;43660:1;43655:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;43655:32:0;;;:7;;;;;;;;;:32;43732:15;;43700:62;;43717:4;;43732:15;43750:11;43700:8;:62::i;:::-;43801:15;;:224;;-1:-1:-1;;;43801:224:0;;-1:-1:-1;;;;;43801:15:0;;;;:66;;:224;;43882:11;;43801:15;;43952:4;;43979;;43999:15;;43801:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43497:538;43442:593;:::o;12552:573::-;-1:-1:-1;;;;;12692:20:0;;12684:70;;;;-1:-1:-1;;;12684:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12773:23:0;;12765:71;;;;-1:-1:-1;;;12765:71:0;;;;;;;:::i;:::-;12929;12951:6;12929:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12929:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;12909:17:0;;;:9;:17;;;;;;;;;;;:91;;;;13034:20;;;;;;;:32;;13059:6;13034:24;:32::i;:::-;-1:-1:-1;;;;;13011:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;13082:35;1848:25:1;;;13011:20:0;;13082:35;;;;;;1821:18:1;13082:35:0;1702:177:1;44570:1563:0;44653:4;44609:23;8882:18;;;;;;;;;;;44609:50;;44670:25;44740:12;;44719:18;;44698;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;44670:82;-1:-1:-1;44763:12:0;44791:20;;;:46;;-1:-1:-1;44815:22:0;;44791:46;44788:60;;;44840:7;;;44570:1563::o;44788:60::-;44881:18;;:23;;44902:2;44881:23;:::i;:::-;44863:15;:41;44860:113;;;44938:18;;:23;;44959:2;44938:23;:::i;:::-;44920:41;;44860:113;45034:23;45119:1;45099:17;45078:18;;45060:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;45034:86;-1:-1:-1;45131:26:0;45160:36;:15;45034:86;45160:19;:36::i;:::-;45131:65;-1:-1:-1;45237:21:0;45271:36;45131:65;45271:16;:36::i;:::-;45320:18;45341:44;:21;45367:17;45341:25;:44::i;:::-;45320:65;;45398:23;45424:57;45463:17;45424:34;45439:18;;45424:10;:14;;:34;;;;:::i;:57::-;45398:83;;45492:17;45512:51;45545:17;45512:28;45527:12;;45512:10;:14;;:28;;;;:::i;:51::-;45492:71;-1:-1:-1;45578:23:0;45492:71;45604:28;45617:15;45604:10;:28;:::i;:::-;:40;;;;:::i;:::-;45680:1;45659:18;:22;;;45692:18;:22;;;45725:12;:16;;;45775:9;;45767:45;;45578:66;;-1:-1:-1;;;;;;45775:9:0;;45798;;45767:45;45680:1;45767:45;45798:9;45775;45767:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45754:58:0;;-1:-1:-1;;45828:19:0;;;;;:42;;;45869:1;45851:15;:19;45828:42;45825:210;;;45886:46;45899:15;45916;45886:12;:46::i;:::-;46004:18;;45952:71;;;15854:25:1;;;15910:2;15895:18;;15888:34;;;15938:18;;;15931:34;;;;45952:71:0;;;;;;15842:2:1;45952:71:0;;;45825:210;46070:15;;46062:63;;-1:-1:-1;;;;;46070:15:0;;;;46099:21;;46062:63;;;;46099:21;46070:15;46062:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;44570:1563:0:o;17711:471::-;17769:7;18014:1;18019;18014:6;18010:47;;-1:-1:-1;18044:1:0;18037:8;;18010:47;18069:9;18081:5;18085:1;18081;:5;:::i;:::-;18069:17;-1:-1:-1;18114:1:0;18105:5;18109:1;18069:17;18105:5;:::i;:::-;:10;18097:56;;;;-1:-1:-1;;;18097:56:0;;16178:2:1;18097:56:0;;;16160:21:1;16217:2;16197:18;;;16190:30;16256:34;16236:18;;;16229:62;-1:-1:-1;;;16307:18:1;;;16300:31;16348:19;;18097:56:0;15976:397:1;18658:132:0;18716:7;18743:39;18747:1;18750;18743:39;;;;;;;;;;;;;;;;;:3;:39::i;16821:136::-;16879:7;16906:43;16910:1;16913;16906:43;;;;;;;;;;;;;;;;;:3;:43::i;44047:515::-;44227:15;;44195:62;;44212:4;;-1:-1:-1;;;;;44227:15:0;44245:11;44195:8;:62::i;:::-;44300:15;;44504:9;;44300:254;;-1:-1:-1;;;44300:254:0;;44372:4;44300:254;;;16719:34:1;16769:18;;;16762:34;;;44300:15:0;16812:18:1;;;16805:34;;;16855:18;;;16848:34;-1:-1:-1;;;;;44504:9:0;;;16898:19:1;;;16891:44;44528:15:0;16951:19:1;;;16944:35;44300:15:0;;;:31;;44339:9;;16653:19:1;;44300:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19286:278::-;19372:7;19407:12;19400:5;19392:28;;;;-1:-1:-1;;;19392:28:0;;;;;;;;:::i;:::-;-1:-1:-1;19431:9:0;19443:5;19447:1;19443;: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:247::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;1382:9;1369:23;1401:31;1426:5;1401:31;:::i;1884:180::-;1943:6;1996:2;1984:9;1975:7;1971:23;1967:32;1964:52;;;2012:1;2009;2002:12;1964:52;-1:-1:-1;2035:23:1;;1884:180;-1:-1:-1;1884:180:1:o;2069:456::-;2146:6;2154;2162;2215:2;2203:9;2194:7;2190:23;2186:32;2183:52;;;2231:1;2228;2221:12;2183:52;2270:9;2257:23;2289:31;2314:5;2289:31;:::i;:::-;2339:5;-1:-1:-1;2396:2:1;2381:18;;2368:32;2409:33;2368:32;2409:33;:::i;:::-;2069:456;;2461:7;;-1:-1:-1;;;2515:2:1;2500:18;;;;2487:32;;2069:456::o;2530:160::-;2595:20;;2651:13;;2644:21;2634:32;;2624:60;;2680:1;2677;2670:12;2695:315;2760:6;2768;2821:2;2809:9;2800:7;2796:23;2792:32;2789:52;;;2837:1;2834;2827:12;2789:52;2876:9;2863:23;2895:31;2920:5;2895:31;:::i;:::-;2945:5;-1:-1:-1;2969:35:1;3000:2;2985:18;;2969:35;:::i;:::-;2959:45;;2695:315;;;;;:::o;3412:316::-;3489:6;3497;3505;3558:2;3546:9;3537:7;3533:23;3529:32;3526:52;;;3574:1;3571;3564:12;3526:52;-1:-1:-1;;3597:23:1;;;3667:2;3652:18;;3639:32;;-1:-1:-1;3718:2:1;3703:18;;;3690:32;;3412:316;-1:-1:-1;3412:316:1:o;3733:180::-;3789:6;3842:2;3830:9;3821:7;3817:23;3813:32;3810:52;;;3858:1;3855;3848:12;3810:52;3881:26;3897:9;3881:26;:::i;3918:388::-;3986:6;3994;4047:2;4035:9;4026:7;4022:23;4018:32;4015:52;;;4063:1;4060;4053:12;4015:52;4102:9;4089:23;4121:31;4146:5;4121:31;:::i;:::-;4171:5;-1:-1:-1;4228:2:1;4213:18;;4200:32;4241:33;4200:32;4241:33;:::i;:::-;4293:7;4283:17;;;3918:388;;;;;:::o;4311:454::-;4406:6;4414;4422;4430;4438;4491:3;4479:9;4470:7;4466:23;4462:33;4459:53;;;4508:1;4505;4498:12;4459:53;-1:-1:-1;;4531:23:1;;;4601:2;4586:18;;4573:32;;-1:-1:-1;4652:2:1;4637:18;;4624:32;;4703:2;4688:18;;4675:32;;-1:-1:-1;4754:3:1;4739:19;4726:33;;-1:-1:-1;4311:454:1;-1:-1:-1;4311:454:1:o;4770:380::-;4849:1;4845:12;;;;4892;;;4913:61;;4967:4;4959:6;4955:17;4945:27;;4913:61;5020:2;5012:6;5009:14;4989:18;4986:38;4983:161;;5066:10;5061:3;5057:20;5054:1;5047:31;5101:4;5098:1;5091:15;5129:4;5126:1;5119:15;4983:161;;4770:380;;;:::o;5155:356::-;5357:2;5339:21;;;5376:18;;;5369:30;5435:34;5430:2;5415:18;;5408:62;5502:2;5487:18;;5155:356::o;5726:127::-;5787:10;5782:3;5778:20;5775:1;5768:31;5818:4;5815:1;5808:15;5842:4;5839:1;5832:15;5858:168;5931:9;;;5962;;5979:15;;;5973:22;;5959:37;5949:71;;6000:18;;:::i;6031:217::-;6071:1;6097;6087:132;;6141:10;6136:3;6132:20;6129:1;6122:31;6176:4;6173:1;6166:15;6204:4;6201:1;6194:15;6087:132;-1:-1:-1;6233:9:1;;6031:217::o;6669:125::-;6734:9;;;6755:10;;;6752:36;;;6768:18;;:::i;10760:401::-;10962:2;10944:21;;;11001:2;10981:18;;;10974:30;11040:34;11035:2;11020:18;;11013:62;-1:-1:-1;;;11106:2:1;11091:18;;11084:35;11151:3;11136:19;;10760:401::o;11166:399::-;11368:2;11350:21;;;11407:2;11387:18;;;11380:30;11446:34;11441:2;11426:18;;11419:62;-1:-1:-1;;;11512:2:1;11497:18;;11490:33;11555:3;11540:19;;11166:399::o;14014:128::-;14081:9;;;14102:11;;;14099:37;;;14116:18;;:::i;14279:127::-;14340:10;14335:3;14331:20;14328:1;14321:31;14371:4;14368:1;14361:15;14395:4;14392:1;14385:15;14411:251;14481:6;14534:2;14522:9;14513:7;14509:23;14505:32;14502:52;;;14550:1;14547;14540:12;14502:52;14582:9;14576:16;14601:31;14626:5;14601:31;:::i;14667:980::-;14929:4;14977:3;14966:9;14962:19;15008:6;14997:9;14990:25;15034:2;15072:6;15067:2;15056:9;15052:18;15045:34;15115:3;15110:2;15099:9;15095:18;15088:31;15139:6;15174;15168:13;15205:6;15197;15190:22;15243:3;15232:9;15228:19;15221:26;;15282:2;15274:6;15270:15;15256:29;;15303:1;15313:195;15327:6;15324:1;15321:13;15313:195;;;15392:13;;-1:-1:-1;;;;;15388:39:1;15376:52;;15483:15;;;;15448:12;;;;15424:1;15342:9;15313:195;;;-1:-1:-1;;;;;;;15564:32:1;;;;15559:2;15544:18;;15537:60;-1:-1:-1;;;15628:3:1;15613:19;15606:35;15525:3;14667:980;-1:-1:-1;;;14667:980:1:o;16990:306::-;17078:6;17086;17094;17147:2;17135:9;17126:7;17122:23;17118:32;17115:52;;;17163:1;17160;17153:12;17115:52;17192:9;17186:16;17176:26;;17242:2;17231:9;17227:18;17221:25;17211:35;;17286:2;17275:9;17271:18;17265:25;17255:35;;16990:306;;;;;:::o
Swarm Source
ipfs://d2012a1275af915efd182a300625783a3e9dce09e14426c9e53986e415d84dc9
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.