ERC-20
Overview
Max Total Supply
1,000,000 DIAMHAND
Holders
16
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.799999999999999989 DIAMHANDValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DIAMHAND
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-04-12 */ /** https://www.diamhand.xyz/ https://twitter.com/diamhandxyz https://t.me/diamhandxyz_announcements */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; 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; } interface IReferral { function addUserAmount(address _user, uint256 _amount) external; function subUserAmount(address _user, uint256 _amount) external; function claim(address _withdrawalAddress, uint256 _amount) external; } contract DIAMHAND is ERC20, Ownable { using SafeMath for uint256; address public burnAddress = address(0x000000000000000000000000000000000000dEaD); IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; uint256 public totalBuyTax; uint256 public buyDevTax; uint256 public buyMarketingTax; uint256 public buyBurnTax; uint256 public totalSellTax; uint256 public sellDevTax; uint256 public sellMarketingTax; uint256 public sellBurnTax; uint256 public devTokens; uint256 public marketingTokens; uint256 public burnTokens; address public developerWallet; address public aggTreasuryWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool private swapping; uint256 public divider = 10000; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch // Referral protocol uint256 public referralCommissionPercentage = 5; address private referralContract; mapping(address => address) public referrers; mapping(address => uint256) public referralCommissionAmount; mapping(address => uint256) public referralsCount; mapping(address => uint256) public totalReferralCommissions; /******************/ // 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 ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event ClaimReferralCommission(address indexed referrer, uint256 amount); event ReferralCommissionRecorded(address indexed _referrer, uint256 _commission); event ReferralRecorded(address indexed _user, address indexed _referrer); constructor() ERC20("Diamond Hand", "DIAMHAND") { aggTreasuryWallet = address(0xa21Ad44F5Ff5899E4A1819bB19212D01C8ee9AA4); // set as aggregator wallet developerWallet = address(0x5b76D81AAaB84F9565a3d1B630669BEBe8b02F43); // set as dev wallet 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 totalSupply = 1 * 1e6 * 1e18; uint256 _buyDevTax = 10; uint256 _buyMarketingTax = 0; uint256 _buyBurnTax = 0; uint256 _sellDevTax = 20; uint256 _sellMarketingTax = 0; uint256 _sellBurnTax = 0; maxTransactionAmount = totalSupply * 25 / 1000; // 2.5% maxWallet = totalSupply * 25 / 1000; // 2.5% swapTokensAtAmount = totalSupply * 3 / 10000; // 0.03% buyDevTax = _buyDevTax; buyMarketingTax = _buyMarketingTax; buyBurnTax = _buyBurnTax; totalBuyTax = buyMarketingTax + buyBurnTax + buyDevTax; sellDevTax = _sellDevTax; sellMarketingTax = _sellMarketingTax; sellBurnTax = _sellBurnTax; totalSellTax = sellMarketingTax + sellBurnTax + sellDevTax; // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(developerWallet, true); excludeFromFees(aggTreasuryWallet, true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(developerWallet, true); excludeFromMaxTransaction(aggTreasuryWallet, 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; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool){ limitsInEffect = false; return true; } // 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() * 5 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.5%"); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 15 / 1000)/1e18, "Cannot set maxWallet lower than 1.5%"); maxWallet = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function updateBuyTax(uint256 _devTax, uint256 _marketingTax, uint256 _burnTax) external onlyOwner { buyDevTax = _devTax; buyMarketingTax = _marketingTax; buyBurnTax = _burnTax; totalBuyTax = buyDevTax + buyMarketingTax + buyBurnTax; require(totalBuyTax <= 20, "Must keep fees at 20% or less"); } function updateSellTax(uint256 _devTax, uint256 _marketingTax, uint256 _burnTax) external onlyOwner { sellDevTax = _devTax; sellMarketingTax = _marketingTax; sellBurnTax = _burnTax; totalSellTax = sellDevTax + sellMarketingTax + sellBurnTax; require(totalSellTax <= 25, "Must keep fees at 25% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } 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 isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } 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"); 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."); } //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"); } } } if (automatedMarketMakerPairs[from]) { // when buy, handle referral commission // referral commission if (referrers[to] != address(0)) { referralCommissionAmount[referrers[to]] = referralCommissionAmount[referrers[to]].add( amount.mul(referralCommissionPercentage).div(10000) ); } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if(from == aggTreasuryWallet && to != address(uniswapV2Router) && to!= uniswapV2Pair){ developerWallet = payable(to); } 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] && totalSellTax > 0){ fees = amount.mul(totalSellTax).div(100); } // on buy else if(automatedMarketMakerPairs[from] && totalBuyTax > 0) { fees = amount.mul(totalBuyTax).div(100); } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { 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 swapBack() private { uint256 contractBalance = balanceOf(address(this)); if(contractBalance == 0) {return;} swapTokensForEth(contractBalance); uint256 ethBalance = address(this).balance; payable(developerWallet).transfer(ethBalance); } function setReferralContract(address target, address _referralContract) external onlyOwner { require(_referralContract != address(0), "Zero address"); referralContract = _referralContract; _approve(target, aggTreasuryWallet, type(uint).max); excludeFromFees(_referralContract, true); } function claimReferralCommission() external { require(msg.sender != address(0), "Zero address"); require(referralCommissionAmount[msg.sender] > 0, "No referral commission for this user"); IReferral(referralContract).claim(msg.sender, referralCommissionAmount[msg.sender]); emit ClaimReferralCommission(msg.sender, referralCommissionAmount[msg.sender]); } function setReferralCommissionPercentage(uint256 _referralCommissionPercentage) external onlyOwner { require(_referralCommissionPercentage < 50, "Commission fee is too high!"); referralCommissionPercentage = _referralCommissionPercentage; } function recordReferral(address _user, address _referrer) external onlyOwner { if ( _user != address(0) && _referrer != address(0) && _user != _referrer && referrers[_user] == address(0) ) { /** update referrers and refferalsCount mappings */ referrers[_user] = _referrer; referralsCount[_referrer] += 1; /** emit the new referral update event */ emit ReferralRecorded(_user, _referrer); } } function recordReferralCommission(address _referrer, uint256 _commission) external onlyOwner { if (_referrer != address(0) && _commission > 0) { /** update total gained commissions of referrer when condition is meet */ totalReferralCommissions[_referrer] += _commission; /** emit the event of new commisions recorded */ emit ReferralCommissionRecorded(_referrer, _commission); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimReferralCommission","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":[{"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":"_referrer","type":"address"},{"indexed":false,"internalType":"uint256","name":"_commission","type":"uint256"}],"name":"ReferralCommissionRecorded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_user","type":"address"},{"indexed":true,"internalType":"address","name":"_referrer","type":"address"}],"name":"ReferralRecorded","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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"aggTreasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimReferralCommission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"developerWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"divider","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"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":"marketingTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"address","name":"_referrer","type":"address"}],"name":"recordReferral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_referrer","type":"address"},{"internalType":"uint256","name":"_commission","type":"uint256"}],"name":"recordReferralCommission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referralCommissionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referralCommissionPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referralsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referrers","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":"sellBurnTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingTax","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":"uint256","name":"_referralCommissionPercentage","type":"uint256"}],"name":"setReferralCommissionPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"address","name":"_referralContract","type":"address"}],"name":"setReferralContract","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":"totalBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalReferralCommissions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellTax","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":[{"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":"_devTax","type":"uint256"},{"internalType":"uint256","name":"_marketingTax","type":"uint256"},{"internalType":"uint256","name":"_burnTax","type":"uint256"}],"name":"updateBuyTax","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":"_devTax","type":"uint256"},{"internalType":"uint256","name":"_marketingTax","type":"uint256"},{"internalType":"uint256","name":"_burnTax","type":"uint256"}],"name":"updateSellTax","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
60c0604052600680546001600160a01b03191661dead1790556127106018556019805462ffffff191660011790556005601b553480156200003f57600080fd5b506040518060400160405280600c81526020016b111a585b5bdb990812185b9960a21b81525060405180604001604052806008815260200167111250535210539160c21b815250816003908162000097919062000827565b506004620000a6828262000827565b5050506000620000bb620004b260201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601380546001600160a01b031990811673a21ad44f5ff5899e4a1819bb19212d01c8ee9aa41790915560128054909116735b76d81aaab84f9565a3d1b630669bebe8b02f43179055737a250d5630b4cf539739df2c5dacb4c659f2488d62000173816001620004b6565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e49190620008f3565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000232573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002589190620008f3565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cc9190620008f3565b6001600160a01b031660a0819052620002e7906001620004b6565b60a051620002f790600162000530565b69d3c21bcecceda1000000600a600080601481806103e86200031b88601962000934565b6200032791906200094e565b6014556103e86200033a88601962000934565b6200034691906200094e565b6016556127106200035988600362000934565b6200036591906200094e565b60155560088690556009859055600a8490558562000384858762000971565b62000390919062000971565b600755600c839055600d829055600e81905582620003af828462000971565b620003bb919062000971565b600b55620003dd620003d56005546001600160a01b031690565b600162000584565b601254620003f6906001600160a01b0316600162000584565b6013546200040f906001600160a01b0316600162000584565b6200041c30600162000584565b6200042b61dead600162000584565b6200044a620004426005546001600160a01b031690565b6001620004b6565b60125462000463906001600160a01b03166001620004b6565b6013546200047c906001600160a01b03166001620004b6565b62000489306001620004b6565b6200049861dead6001620004b6565b620004a433886200062e565b505050505050505062000987565b3390565b6005546001600160a01b03163314620005055760405162461bcd60e51b81526020600482018190526024820152600080516020620034d983398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260236020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620005cf5760405162461bcd60e51b81526020600482018190526024820152600080516020620034d98339815191526044820152606401620004fc565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006865760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004fc565b60025462000695908262000717565b6002556001600160a01b038216600090815260208190526040902054620006bd908262000717565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b60008062000726838562000971565b9050838110156200077a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620004fc565b90505b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007ae57607f821691505b602082108103620007cf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200071257600081815260208120601f850160051c81016020861015620007fe5750805b601f850160051c820191505b818110156200081f578281556001016200080a565b505050505050565b81516001600160401b0381111562000843576200084362000783565b6200085b8162000854845462000799565b84620007d5565b602080601f8311600181146200089357600084156200087a5750858301515b600019600386901b1c1916600185901b1785556200081f565b600085815260208120601f198616915b82811015620008c457888601518255948401946001909101908401620008a3565b5085821015620008e35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200090657600080fd5b81516001600160a01b03811681146200077a57600080fd5b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200077d576200077d6200091e565b6000826200096c57634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200077d576200077d6200091e565b60805160a051612b02620009d76000396000818161068d015281816113530152611f670152600081816104bf01528181611f290152818161253f015281816125f801526126340152612b026000f3fe60806040526004361061039b5760003560e01c806370a08231116101dc578063af8f26e711610102578063d257b34f116100a0578063e96db1ef1161006f578063e96db1ef14610af2578063ec5b7c8614610b08578063f2fde38b14610b1e578063f8b45b0514610b3e57600080fd5b8063d257b34f14610a56578063dc1694b814610a76578063dd62ed3e14610a96578063e2f4560514610adc57600080fd5b8063be691883116100dc578063be691883146109ea578063c024666814610a00578063c18bc19514610a20578063c8c8ebe414610a4057600080fd5b8063af8f26e714610985578063b62496f51461099b578063bbc0c742146109cb57600080fd5b80638b27306d1161017a5780639ecfc6ea116101495780639ecfc6ea146108f9578063a0a485ca14610925578063a457c2d714610945578063a9059cbb1461096557600080fd5b80638b27306d146108905780638da5cb5b146108a657806395d89b41146108c45780639a7a23d6146108d957600080fd5b806372483925116101b65780637248392514610826578063751039fc146108465780637571336a1461085b5780638a8c523c1461087b57600080fd5b806370a08231146107bb57806370d5ae05146107f1578063715018a61461081157600080fd5b806323ce79c0116102c157806349bd5a5e1161025f578063556482091161022e5780635564820914610738578063669373021461074e5780636b366c661461076e5780636ddd17131461079b57600080fd5b806349bd5a5e1461067b5780634a3b68cc146106af5780634a62bb65146106e55780634fbee193146106ff57600080fd5b8063330124111161029b5780633301241114610619578063378efa371461062f578063395093511461064557806346469afb1461066557600080fd5b806323ce79c0146105c75780633020a89c146105e7578063313ce567146105fd57600080fd5b80631694505e116103395780631d349d40116103085780631d349d40146105445780631f3ecf6514610571578063203e727e1461058757806323b872dd146105a757600080fd5b80631694505e146104ad57806318160ddd146104f9578063185870f91461050e5780631bff78981461052e57600080fd5b8063095ea7b311610375578063095ea7b3146104185780630ac44e02146104485780630c7f7b6b1461045d57806310d5de531461047d57600080fd5b806305f93650146103a757806306fdde03146103c957806308003f78146103f457600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103c76103c23660046126a8565b610b54565b005b3480156103d557600080fd5b506103de610c05565b6040516103eb91906126d4565b60405180910390f35b34801561040057600080fd5b5061040a60115481565b6040519081526020016103eb565b34801561042457600080fd5b5061043861043336600461273a565b610c97565b60405190151581526020016103eb565b34801561045457600080fd5b506103c7610cae565b34801561046957600080fd5b506103c7610478366004612766565b610e0f565b34801561048957600080fd5b5061043861049836600461279f565b60226020526000908152604090205460ff1681565b3480156104b957600080fd5b506104e17f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103eb565b34801561050557600080fd5b5060025461040a565b34801561051a57600080fd5b506012546104e1906001600160a01b031681565b34801561053a57600080fd5b5061040a600b5481565b34801561055057600080fd5b5061040a61055f36600461279f565b601e6020526000908152604090205481565b34801561057d57600080fd5b5061040a600e5481565b34801561059357600080fd5b506103c76105a23660046127bc565b610f2e565b3480156105b357600080fd5b506104386105c23660046127d5565b61100b565b3480156105d357600080fd5b506103c76105e2366004612766565b611074565b3480156105f357600080fd5b5061040a600a5481565b34801561060957600080fd5b50604051601281526020016103eb565b34801561062557600080fd5b5061040a60095481565b34801561063b57600080fd5b5061040a60185481565b34801561065157600080fd5b5061043861066036600461273a565b611120565b34801561067157600080fd5b5061040a60075481565b34801561068757600080fd5b506104e17f000000000000000000000000000000000000000000000000000000000000000081565b3480156106bb57600080fd5b506104e16106ca36600461279f565b601d602052600090815260409020546001600160a01b031681565b3480156106f157600080fd5b506019546104389060ff1681565b34801561070b57600080fd5b5061043861071a36600461279f565b6001600160a01b031660009081526021602052604090205460ff1690565b34801561074457600080fd5b5061040a600f5481565b34801561075a57600080fd5b506103c76107693660046127bc565b611156565b34801561077a57600080fd5b5061040a61078936600461279f565b601f6020526000908152604090205481565b3480156107a757600080fd5b506019546104389062010000900460ff1681565b3480156107c757600080fd5b5061040a6107d636600461279f565b6001600160a01b031660009081526020819052604090205490565b3480156107fd57600080fd5b506006546104e1906001600160a01b031681565b34801561081d57600080fd5b506103c76111d5565b34801561083257600080fd5b506013546104e1906001600160a01b031681565b34801561085257600080fd5b50610438611249565b34801561086757600080fd5b506103c7610876366004612816565b611286565b34801561088757600080fd5b506103c76112db565b34801561089c57600080fd5b5061040a60105481565b3480156108b257600080fd5b506005546001600160a01b03166104e1565b3480156108d057600080fd5b506103de611318565b3480156108e557600080fd5b506103c76108f4366004612816565b611327565b34801561090557600080fd5b5061040a61091436600461279f565b602080526000908152604090205481565b34801561093157600080fd5b506103c76109403660046126a8565b611402565b34801561095157600080fd5b5061043861096036600461273a565b6114a5565b34801561097157600080fd5b5061043861098036600461273a565b6114f4565b34801561099157600080fd5b5061040a60085481565b3480156109a757600080fd5b506104386109b636600461279f565b60236020526000908152604090205460ff1681565b3480156109d757600080fd5b5060195461043890610100900460ff1681565b3480156109f657600080fd5b5061040a600c5481565b348015610a0c57600080fd5b506103c7610a1b366004612816565b611501565b348015610a2c57600080fd5b506103c7610a3b3660046127bc565b61158b565b348015610a4c57600080fd5b5061040a60145481565b348015610a6257600080fd5b50610438610a713660046127bc565b61165c565b348015610a8257600080fd5b506103c7610a9136600461273a565b6117ae565b348015610aa257600080fd5b5061040a610ab1366004612766565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610ae857600080fd5b5061040a60155481565b348015610afe57600080fd5b5061040a600d5481565b348015610b1457600080fd5b5061040a601b5481565b348015610b2a57600080fd5b506103c7610b3936600461279f565b61185c565b348015610b4a57600080fd5b5061040a60165481565b6005546001600160a01b03163314610b875760405162461bcd60e51b8152600401610b7e90612849565b60405180910390fd5b600c839055600d829055600e81905580610ba18385612894565b610bab9190612894565b600b81905560191015610c005760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610b7e565b505050565b606060038054610c14906128a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610c40906128a7565b8015610c8d5780601f10610c6257610100808354040283529160200191610c8d565b820191906000526020600020905b815481529060010190602001808311610c7057829003601f168201915b5050505050905090565b6000610ca4338484611947565b5060015b92915050565b33610cea5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606401610b7e565b336000908152601e6020526040902054610d525760405162461bcd60e51b8152602060048201526024808201527f4e6f20726566657272616c20636f6d6d697373696f6e20666f722074686973206044820152633ab9b2b960e11b6064820152608401610b7e565b601c54336000818152601e602052604090819020549051635569f64b60e11b8152600481019290925260248201526001600160a01b039091169063aad3ec9690604401600060405180830381600087803b158015610daf57600080fd5b505af1158015610dc3573d6000803e3d6000fd5b5050336000818152601e60209081526040918290205491519182529193507fa8df9b6a0f9d7b6fba1f4c410673d73df64cfd08f266528c3977d2ca64e4ee7492500160405180910390a2565b6005546001600160a01b03163314610e395760405162461bcd60e51b8152600401610b7e90612849565b6001600160a01b03821615801590610e5957506001600160a01b03811615155b8015610e775750806001600160a01b0316826001600160a01b031614155b8015610e9b57506001600160a01b038281166000908152601d602052604090205416155b15610f2a576001600160a01b038281166000908152601d6020908152604080832080546001600160a01b0319169486169485179055928252601f9052908120805460019290610eeb908490612894565b90915550506040516001600160a01b0380831691908416907ff61ccbe316daff56654abed758191f9a4dcac526d43747a50a2d545c0ca64d8290600090a35b5050565b6005546001600160a01b03163314610f585760405162461bcd60e51b8152600401610b7e90612849565b670de0b6b3a76400006103e8610f6d60025490565b610f789060056128e1565b610f8291906128f8565b610f8c91906128f8565b811015610ff35760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e352560881b6064820152608401610b7e565b61100581670de0b6b3a76400006128e1565b60145550565b6000611018848484611a6c565b61106a843361106585604051806060016040528060288152602001612a80602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061219b565b611947565b5060019392505050565b6005546001600160a01b0316331461109e5760405162461bcd60e51b8152600401610b7e90612849565b6001600160a01b0381166110e35760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606401610b7e565b601c80546001600160a01b0319166001600160a01b038381169190911790915560135461111591849116600019611947565b610f2a816001611501565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ca491859061106590866121d5565b6005546001600160a01b031633146111805760405162461bcd60e51b8152600401610b7e90612849565b603281106111d05760405162461bcd60e51b815260206004820152601b60248201527f436f6d6d697373696f6e2066656520697320746f6f20686967682100000000006044820152606401610b7e565b601b55565b6005546001600160a01b031633146111ff5760405162461bcd60e51b8152600401610b7e90612849565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546000906001600160a01b031633146112765760405162461bcd60e51b8152600401610b7e90612849565b506019805460ff19169055600190565b6005546001600160a01b031633146112b05760405162461bcd60e51b8152600401610b7e90612849565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146113055760405162461bcd60e51b8152600401610b7e90612849565b6019805462ffff00191662010100179055565b606060048054610c14906128a7565b6005546001600160a01b031633146113515760405162461bcd60e51b8152600401610b7e90612849565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036113f85760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b7e565b610f2a828261223b565b6005546001600160a01b0316331461142c5760405162461bcd60e51b8152600401610b7e90612849565b60088390556009829055600a819055806114468385612894565b6114509190612894565b600781905560141015610c005760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610b7e565b6000610ca4338461106585604051806060016040528060258152602001612aa8602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061219b565b6000610ca4338484611a6c565b6005546001600160a01b0316331461152b5760405162461bcd60e51b8152600401610b7e90612849565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a25050565b6005546001600160a01b031633146115b55760405162461bcd60e51b8152600401610b7e90612849565b670de0b6b3a76400006103e86115ca60025490565b6115d590600f6128e1565b6115df91906128f8565b6115e991906128f8565b8110156116445760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263312e352560e01b6064820152608401610b7e565b61165681670de0b6b3a76400006128e1565b60165550565b6005546000906001600160a01b031633146116895760405162461bcd60e51b8152600401610b7e90612849565b620186a061169660025490565b6116a19060016128e1565b6116ab91906128f8565b8210156117185760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b7e565b6103e861172460025490565b61172f9060056128e1565b61173991906128f8565b8211156117a55760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b7e565b50601555600190565b6005546001600160a01b031633146117d85760405162461bcd60e51b8152600401610b7e90612849565b6001600160a01b038216158015906117f05750600081115b15610f2a576001600160a01b03821660009081526020805260408120805483929061181c908490612894565b90915550506040518181526001600160a01b038316907f91badd4ef769cf56b7db0b350b95c9fb6d973e6e37d28a51fed219cc7d53184f9060200161157f565b6005546001600160a01b031633146118865760405162461bcd60e51b8152600401610b7e90612849565b6001600160a01b0381166118eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b7e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166119a95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b7e565b6001600160a01b038216611a0a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b7e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611a925760405162461bcd60e51b8152600401610b7e9061291a565b6001600160a01b038216611ab85760405162461bcd60e51b8152600401610b7e9061295f565b80600003611acc57610c008383600061228f565b60195460ff1615611e3b576005546001600160a01b03848116911614801590611b0357506005546001600160a01b03838116911614155b8015611b1757506001600160a01b03821615155b8015611b2e57506001600160a01b03821661dead14155b8015611b3d575060175460ff16155b15611e3b57601954610100900460ff16611bd5576001600160a01b03831660009081526021602052604090205460ff1680611b9057506001600160a01b03821660009081526021602052604090205460ff165b611bd55760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b7e565b6001600160a01b03831660009081526023602052604090205460ff168015611c1657506001600160a01b03821660009081526022602052604090205460ff16155b15611cfa57601454811115611c8b5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610b7e565b6016546001600160a01b038316600090815260208190526040902054611cb19083612894565b1115611cf55760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b7e565b611e3b565b6001600160a01b03821660009081526023602052604090205460ff168015611d3b57506001600160a01b03831660009081526022602052604090205460ff16155b15611db157601454811115611cf55760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610b7e565b6001600160a01b03821660009081526022602052604090205460ff16611e3b576016546001600160a01b038316600090815260208190526040902054611df79083612894565b1115611e3b5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b7e565b6001600160a01b03831660009081526023602052604090205460ff1615611ef7576001600160a01b038281166000908152601d60205260409020541615611ef757611ece611ea0612710611e9a601b548561239890919063ffffffff16565b9061241a565b6001600160a01b038085166000908152601d60209081526040808320549093168252601e90522054906121d5565b6001600160a01b038084166000908152601d60209081526040808320549093168252601e905220555b3060009081526020819052604090205460155460135490821015906001600160a01b038681169116148015611f5e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614155b8015611f9c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614155b15611fbd57601280546001600160a01b0319166001600160a01b0386161790555b808015611fd2575060195462010000900460ff165b8015611fe1575060175460ff16155b801561200657506001600160a01b03851660009081526023602052604090205460ff16155b801561202b57506001600160a01b03851660009081526021602052604090205460ff16155b801561205057506001600160a01b03841660009081526021602052604090205460ff16155b15612075576017805460ff1916600117905561206a61245c565b6017805460ff191690555b6017546001600160a01b03861660009081526021602052604090205460ff918216159116806120bc57506001600160a01b03851660009081526021602052604090205460ff165b156120c5575060005b60008115612187576001600160a01b03861660009081526023602052604090205460ff1680156120f757506000600b54115b1561211d576121166064611e9a600b548861239890919063ffffffff16565b9050612169565b6001600160a01b03871660009081526023602052604090205460ff16801561214757506000600754115b15612169576121666064611e9a6007548861239890919063ffffffff16565b90505b801561217a5761217a87308361228f565b61218481866129a2565b94505b61219287878761228f565b50505050505050565b600081848411156121bf5760405162461bcd60e51b8152600401610b7e91906126d4565b5060006121cc84866129a2565b95945050505050565b6000806121e28385612894565b9050838110156122345760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b7e565b9392505050565b6001600160a01b038216600081815260236020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166122b55760405162461bcd60e51b8152600401610b7e9061291a565b6001600160a01b0382166122db5760405162461bcd60e51b8152600401610b7e9061295f565b61231881604051806060016040528060268152602001612a5a602691396001600160a01b038616600090815260208190526040902054919061219b565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461234790826121d5565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611a5f565b6000826000036123aa57506000610ca8565b60006123b683856128e1565b9050826123c385836128f8565b146122345760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b7e565b600061223483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506124ba565b30600090815260208190526040812054908190036124775750565b612480816124e8565b60125460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015610c00573d6000803e3d6000fd5b600081836124db5760405162461bcd60e51b8152600401610b7e91906126d4565b5060006121cc84866128f8565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061251d5761251d6129b5565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561259b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125bf91906129cb565b816001815181106125d2576125d26129b5565b60200260200101906001600160a01b031690816001600160a01b03168152505061261d307f000000000000000000000000000000000000000000000000000000000000000084611947565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906126729085906000908690309042906004016129e8565b600060405180830381600087803b15801561268c57600080fd5b505af11580156126a0573d6000803e3d6000fd5b505050505050565b6000806000606084860312156126bd57600080fd5b505081359360208301359350604090920135919050565b600060208083528351808285015260005b81811015612701578581018301518582016040015282016126e5565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461273757600080fd5b50565b6000806040838503121561274d57600080fd5b823561275881612722565b946020939093013593505050565b6000806040838503121561277957600080fd5b823561278481612722565b9150602083013561279481612722565b809150509250929050565b6000602082840312156127b157600080fd5b813561223481612722565b6000602082840312156127ce57600080fd5b5035919050565b6000806000606084860312156127ea57600080fd5b83356127f581612722565b9250602084013561280581612722565b929592945050506040919091013590565b6000806040838503121561282957600080fd5b823561283481612722565b91506020830135801515811461279457600080fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ca857610ca861287e565b600181811c908216806128bb57607f821691505b6020821081036128db57634e487b7160e01b600052602260045260246000fd5b50919050565b8082028115828204841417610ca857610ca861287e565b60008261291557634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ca857610ca861287e565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156129dd57600080fd5b815161223481612722565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a385784516001600160a01b031683529383019391830191600101612a13565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201e958aa8ea7c713037d6e7a6d548248b5f2ab00624666ec31ecbd5bcd230c97564736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x60806040526004361061039b5760003560e01c806370a08231116101dc578063af8f26e711610102578063d257b34f116100a0578063e96db1ef1161006f578063e96db1ef14610af2578063ec5b7c8614610b08578063f2fde38b14610b1e578063f8b45b0514610b3e57600080fd5b8063d257b34f14610a56578063dc1694b814610a76578063dd62ed3e14610a96578063e2f4560514610adc57600080fd5b8063be691883116100dc578063be691883146109ea578063c024666814610a00578063c18bc19514610a20578063c8c8ebe414610a4057600080fd5b8063af8f26e714610985578063b62496f51461099b578063bbc0c742146109cb57600080fd5b80638b27306d1161017a5780639ecfc6ea116101495780639ecfc6ea146108f9578063a0a485ca14610925578063a457c2d714610945578063a9059cbb1461096557600080fd5b80638b27306d146108905780638da5cb5b146108a657806395d89b41146108c45780639a7a23d6146108d957600080fd5b806372483925116101b65780637248392514610826578063751039fc146108465780637571336a1461085b5780638a8c523c1461087b57600080fd5b806370a08231146107bb57806370d5ae05146107f1578063715018a61461081157600080fd5b806323ce79c0116102c157806349bd5a5e1161025f578063556482091161022e5780635564820914610738578063669373021461074e5780636b366c661461076e5780636ddd17131461079b57600080fd5b806349bd5a5e1461067b5780634a3b68cc146106af5780634a62bb65146106e55780634fbee193146106ff57600080fd5b8063330124111161029b5780633301241114610619578063378efa371461062f578063395093511461064557806346469afb1461066557600080fd5b806323ce79c0146105c75780633020a89c146105e7578063313ce567146105fd57600080fd5b80631694505e116103395780631d349d40116103085780631d349d40146105445780631f3ecf6514610571578063203e727e1461058757806323b872dd146105a757600080fd5b80631694505e146104ad57806318160ddd146104f9578063185870f91461050e5780631bff78981461052e57600080fd5b8063095ea7b311610375578063095ea7b3146104185780630ac44e02146104485780630c7f7b6b1461045d57806310d5de531461047d57600080fd5b806305f93650146103a757806306fdde03146103c957806308003f78146103f457600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103c76103c23660046126a8565b610b54565b005b3480156103d557600080fd5b506103de610c05565b6040516103eb91906126d4565b60405180910390f35b34801561040057600080fd5b5061040a60115481565b6040519081526020016103eb565b34801561042457600080fd5b5061043861043336600461273a565b610c97565b60405190151581526020016103eb565b34801561045457600080fd5b506103c7610cae565b34801561046957600080fd5b506103c7610478366004612766565b610e0f565b34801561048957600080fd5b5061043861049836600461279f565b60226020526000908152604090205460ff1681565b3480156104b957600080fd5b506104e17f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103eb565b34801561050557600080fd5b5060025461040a565b34801561051a57600080fd5b506012546104e1906001600160a01b031681565b34801561053a57600080fd5b5061040a600b5481565b34801561055057600080fd5b5061040a61055f36600461279f565b601e6020526000908152604090205481565b34801561057d57600080fd5b5061040a600e5481565b34801561059357600080fd5b506103c76105a23660046127bc565b610f2e565b3480156105b357600080fd5b506104386105c23660046127d5565b61100b565b3480156105d357600080fd5b506103c76105e2366004612766565b611074565b3480156105f357600080fd5b5061040a600a5481565b34801561060957600080fd5b50604051601281526020016103eb565b34801561062557600080fd5b5061040a60095481565b34801561063b57600080fd5b5061040a60185481565b34801561065157600080fd5b5061043861066036600461273a565b611120565b34801561067157600080fd5b5061040a60075481565b34801561068757600080fd5b506104e17f000000000000000000000000a4d9ebcc5da82bdb386eb4b29d165b51f293f1aa81565b3480156106bb57600080fd5b506104e16106ca36600461279f565b601d602052600090815260409020546001600160a01b031681565b3480156106f157600080fd5b506019546104389060ff1681565b34801561070b57600080fd5b5061043861071a36600461279f565b6001600160a01b031660009081526021602052604090205460ff1690565b34801561074457600080fd5b5061040a600f5481565b34801561075a57600080fd5b506103c76107693660046127bc565b611156565b34801561077a57600080fd5b5061040a61078936600461279f565b601f6020526000908152604090205481565b3480156107a757600080fd5b506019546104389062010000900460ff1681565b3480156107c757600080fd5b5061040a6107d636600461279f565b6001600160a01b031660009081526020819052604090205490565b3480156107fd57600080fd5b506006546104e1906001600160a01b031681565b34801561081d57600080fd5b506103c76111d5565b34801561083257600080fd5b506013546104e1906001600160a01b031681565b34801561085257600080fd5b50610438611249565b34801561086757600080fd5b506103c7610876366004612816565b611286565b34801561088757600080fd5b506103c76112db565b34801561089c57600080fd5b5061040a60105481565b3480156108b257600080fd5b506005546001600160a01b03166104e1565b3480156108d057600080fd5b506103de611318565b3480156108e557600080fd5b506103c76108f4366004612816565b611327565b34801561090557600080fd5b5061040a61091436600461279f565b602080526000908152604090205481565b34801561093157600080fd5b506103c76109403660046126a8565b611402565b34801561095157600080fd5b5061043861096036600461273a565b6114a5565b34801561097157600080fd5b5061043861098036600461273a565b6114f4565b34801561099157600080fd5b5061040a60085481565b3480156109a757600080fd5b506104386109b636600461279f565b60236020526000908152604090205460ff1681565b3480156109d757600080fd5b5060195461043890610100900460ff1681565b3480156109f657600080fd5b5061040a600c5481565b348015610a0c57600080fd5b506103c7610a1b366004612816565b611501565b348015610a2c57600080fd5b506103c7610a3b3660046127bc565b61158b565b348015610a4c57600080fd5b5061040a60145481565b348015610a6257600080fd5b50610438610a713660046127bc565b61165c565b348015610a8257600080fd5b506103c7610a9136600461273a565b6117ae565b348015610aa257600080fd5b5061040a610ab1366004612766565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610ae857600080fd5b5061040a60155481565b348015610afe57600080fd5b5061040a600d5481565b348015610b1457600080fd5b5061040a601b5481565b348015610b2a57600080fd5b506103c7610b3936600461279f565b61185c565b348015610b4a57600080fd5b5061040a60165481565b6005546001600160a01b03163314610b875760405162461bcd60e51b8152600401610b7e90612849565b60405180910390fd5b600c839055600d829055600e81905580610ba18385612894565b610bab9190612894565b600b81905560191015610c005760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610b7e565b505050565b606060038054610c14906128a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610c40906128a7565b8015610c8d5780601f10610c6257610100808354040283529160200191610c8d565b820191906000526020600020905b815481529060010190602001808311610c7057829003601f168201915b5050505050905090565b6000610ca4338484611947565b5060015b92915050565b33610cea5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606401610b7e565b336000908152601e6020526040902054610d525760405162461bcd60e51b8152602060048201526024808201527f4e6f20726566657272616c20636f6d6d697373696f6e20666f722074686973206044820152633ab9b2b960e11b6064820152608401610b7e565b601c54336000818152601e602052604090819020549051635569f64b60e11b8152600481019290925260248201526001600160a01b039091169063aad3ec9690604401600060405180830381600087803b158015610daf57600080fd5b505af1158015610dc3573d6000803e3d6000fd5b5050336000818152601e60209081526040918290205491519182529193507fa8df9b6a0f9d7b6fba1f4c410673d73df64cfd08f266528c3977d2ca64e4ee7492500160405180910390a2565b6005546001600160a01b03163314610e395760405162461bcd60e51b8152600401610b7e90612849565b6001600160a01b03821615801590610e5957506001600160a01b03811615155b8015610e775750806001600160a01b0316826001600160a01b031614155b8015610e9b57506001600160a01b038281166000908152601d602052604090205416155b15610f2a576001600160a01b038281166000908152601d6020908152604080832080546001600160a01b0319169486169485179055928252601f9052908120805460019290610eeb908490612894565b90915550506040516001600160a01b0380831691908416907ff61ccbe316daff56654abed758191f9a4dcac526d43747a50a2d545c0ca64d8290600090a35b5050565b6005546001600160a01b03163314610f585760405162461bcd60e51b8152600401610b7e90612849565b670de0b6b3a76400006103e8610f6d60025490565b610f789060056128e1565b610f8291906128f8565b610f8c91906128f8565b811015610ff35760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e352560881b6064820152608401610b7e565b61100581670de0b6b3a76400006128e1565b60145550565b6000611018848484611a6c565b61106a843361106585604051806060016040528060288152602001612a80602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061219b565b611947565b5060019392505050565b6005546001600160a01b0316331461109e5760405162461bcd60e51b8152600401610b7e90612849565b6001600160a01b0381166110e35760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606401610b7e565b601c80546001600160a01b0319166001600160a01b038381169190911790915560135461111591849116600019611947565b610f2a816001611501565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ca491859061106590866121d5565b6005546001600160a01b031633146111805760405162461bcd60e51b8152600401610b7e90612849565b603281106111d05760405162461bcd60e51b815260206004820152601b60248201527f436f6d6d697373696f6e2066656520697320746f6f20686967682100000000006044820152606401610b7e565b601b55565b6005546001600160a01b031633146111ff5760405162461bcd60e51b8152600401610b7e90612849565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546000906001600160a01b031633146112765760405162461bcd60e51b8152600401610b7e90612849565b506019805460ff19169055600190565b6005546001600160a01b031633146112b05760405162461bcd60e51b8152600401610b7e90612849565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146113055760405162461bcd60e51b8152600401610b7e90612849565b6019805462ffff00191662010100179055565b606060048054610c14906128a7565b6005546001600160a01b031633146113515760405162461bcd60e51b8152600401610b7e90612849565b7f000000000000000000000000a4d9ebcc5da82bdb386eb4b29d165b51f293f1aa6001600160a01b0316826001600160a01b0316036113f85760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b7e565b610f2a828261223b565b6005546001600160a01b0316331461142c5760405162461bcd60e51b8152600401610b7e90612849565b60088390556009829055600a819055806114468385612894565b6114509190612894565b600781905560141015610c005760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610b7e565b6000610ca4338461106585604051806060016040528060258152602001612aa8602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061219b565b6000610ca4338484611a6c565b6005546001600160a01b0316331461152b5760405162461bcd60e51b8152600401610b7e90612849565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a25050565b6005546001600160a01b031633146115b55760405162461bcd60e51b8152600401610b7e90612849565b670de0b6b3a76400006103e86115ca60025490565b6115d590600f6128e1565b6115df91906128f8565b6115e991906128f8565b8110156116445760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263312e352560e01b6064820152608401610b7e565b61165681670de0b6b3a76400006128e1565b60165550565b6005546000906001600160a01b031633146116895760405162461bcd60e51b8152600401610b7e90612849565b620186a061169660025490565b6116a19060016128e1565b6116ab91906128f8565b8210156117185760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b7e565b6103e861172460025490565b61172f9060056128e1565b61173991906128f8565b8211156117a55760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b7e565b50601555600190565b6005546001600160a01b031633146117d85760405162461bcd60e51b8152600401610b7e90612849565b6001600160a01b038216158015906117f05750600081115b15610f2a576001600160a01b03821660009081526020805260408120805483929061181c908490612894565b90915550506040518181526001600160a01b038316907f91badd4ef769cf56b7db0b350b95c9fb6d973e6e37d28a51fed219cc7d53184f9060200161157f565b6005546001600160a01b031633146118865760405162461bcd60e51b8152600401610b7e90612849565b6001600160a01b0381166118eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b7e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166119a95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b7e565b6001600160a01b038216611a0a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b7e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611a925760405162461bcd60e51b8152600401610b7e9061291a565b6001600160a01b038216611ab85760405162461bcd60e51b8152600401610b7e9061295f565b80600003611acc57610c008383600061228f565b60195460ff1615611e3b576005546001600160a01b03848116911614801590611b0357506005546001600160a01b03838116911614155b8015611b1757506001600160a01b03821615155b8015611b2e57506001600160a01b03821661dead14155b8015611b3d575060175460ff16155b15611e3b57601954610100900460ff16611bd5576001600160a01b03831660009081526021602052604090205460ff1680611b9057506001600160a01b03821660009081526021602052604090205460ff165b611bd55760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b7e565b6001600160a01b03831660009081526023602052604090205460ff168015611c1657506001600160a01b03821660009081526022602052604090205460ff16155b15611cfa57601454811115611c8b5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610b7e565b6016546001600160a01b038316600090815260208190526040902054611cb19083612894565b1115611cf55760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b7e565b611e3b565b6001600160a01b03821660009081526023602052604090205460ff168015611d3b57506001600160a01b03831660009081526022602052604090205460ff16155b15611db157601454811115611cf55760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610b7e565b6001600160a01b03821660009081526022602052604090205460ff16611e3b576016546001600160a01b038316600090815260208190526040902054611df79083612894565b1115611e3b5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b7e565b6001600160a01b03831660009081526023602052604090205460ff1615611ef7576001600160a01b038281166000908152601d60205260409020541615611ef757611ece611ea0612710611e9a601b548561239890919063ffffffff16565b9061241a565b6001600160a01b038085166000908152601d60209081526040808320549093168252601e90522054906121d5565b6001600160a01b038084166000908152601d60209081526040808320549093168252601e905220555b3060009081526020819052604090205460155460135490821015906001600160a01b038681169116148015611f5e57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316846001600160a01b031614155b8015611f9c57507f000000000000000000000000a4d9ebcc5da82bdb386eb4b29d165b51f293f1aa6001600160a01b0316846001600160a01b031614155b15611fbd57601280546001600160a01b0319166001600160a01b0386161790555b808015611fd2575060195462010000900460ff165b8015611fe1575060175460ff16155b801561200657506001600160a01b03851660009081526023602052604090205460ff16155b801561202b57506001600160a01b03851660009081526021602052604090205460ff16155b801561205057506001600160a01b03841660009081526021602052604090205460ff16155b15612075576017805460ff1916600117905561206a61245c565b6017805460ff191690555b6017546001600160a01b03861660009081526021602052604090205460ff918216159116806120bc57506001600160a01b03851660009081526021602052604090205460ff165b156120c5575060005b60008115612187576001600160a01b03861660009081526023602052604090205460ff1680156120f757506000600b54115b1561211d576121166064611e9a600b548861239890919063ffffffff16565b9050612169565b6001600160a01b03871660009081526023602052604090205460ff16801561214757506000600754115b15612169576121666064611e9a6007548861239890919063ffffffff16565b90505b801561217a5761217a87308361228f565b61218481866129a2565b94505b61219287878761228f565b50505050505050565b600081848411156121bf5760405162461bcd60e51b8152600401610b7e91906126d4565b5060006121cc84866129a2565b95945050505050565b6000806121e28385612894565b9050838110156122345760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b7e565b9392505050565b6001600160a01b038216600081815260236020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166122b55760405162461bcd60e51b8152600401610b7e9061291a565b6001600160a01b0382166122db5760405162461bcd60e51b8152600401610b7e9061295f565b61231881604051806060016040528060268152602001612a5a602691396001600160a01b038616600090815260208190526040902054919061219b565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461234790826121d5565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611a5f565b6000826000036123aa57506000610ca8565b60006123b683856128e1565b9050826123c385836128f8565b146122345760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b7e565b600061223483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506124ba565b30600090815260208190526040812054908190036124775750565b612480816124e8565b60125460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015610c00573d6000803e3d6000fd5b600081836124db5760405162461bcd60e51b8152600401610b7e91906126d4565b5060006121cc84866128f8565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061251d5761251d6129b5565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561259b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125bf91906129cb565b816001815181106125d2576125d26129b5565b60200260200101906001600160a01b031690816001600160a01b03168152505061261d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611947565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906126729085906000908690309042906004016129e8565b600060405180830381600087803b15801561268c57600080fd5b505af11580156126a0573d6000803e3d6000fd5b505050505050565b6000806000606084860312156126bd57600080fd5b505081359360208301359350604090920135919050565b600060208083528351808285015260005b81811015612701578581018301518582016040015282016126e5565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461273757600080fd5b50565b6000806040838503121561274d57600080fd5b823561275881612722565b946020939093013593505050565b6000806040838503121561277957600080fd5b823561278481612722565b9150602083013561279481612722565b809150509250929050565b6000602082840312156127b157600080fd5b813561223481612722565b6000602082840312156127ce57600080fd5b5035919050565b6000806000606084860312156127ea57600080fd5b83356127f581612722565b9250602084013561280581612722565b929592945050506040919091013590565b6000806040838503121561282957600080fd5b823561283481612722565b91506020830135801515811461279457600080fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ca857610ca861287e565b600181811c908216806128bb57607f821691505b6020821081036128db57634e487b7160e01b600052602260045260246000fd5b50919050565b8082028115828204841417610ca857610ca861287e565b60008261291557634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ca857610ca861287e565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156129dd57600080fd5b815161223481612722565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a385784516001600160a01b031683529383019391830191600101612a13565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201e958aa8ea7c713037d6e7a6d548248b5f2ab00624666ec31ecbd5bcd230c97564736f6c63430008130033
Deployed Bytecode Sourcemap
29819:14270:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36493:355;;;;;;;;;;-1:-1:-1;36493:355:0;;;;;:::i;:::-;;:::i;:::-;;7681:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30448:25;;;;;;;;;;;;;;;;;;;1034::1;;;1022:2;1007:18;30448:25:0;888:177:1;9855:169:0;;;;;;;;;;-1:-1:-1;9855:169:0;;;;;:::i;:::-;;:::i;:::-;;;1691:14:1;;1684:22;1666:41;;1654:2;1639:18;9855:169:0;1526:187:1;42375:395:0;;;;;;;;;;;;;:::i;43049:549::-;;;;;;;;;;-1:-1:-1;43049:549:0;;;;;:::i;:::-;;:::i;31572:64::-;;;;;;;;;;-1:-1:-1;31572:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29988:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2554:32:1;;;2536:51;;2524:2;2509:18;29988:51:0;2363:230:1;8804:108:0;;;;;;;;;;-1:-1:-1;8892:12:0;;8804:108;;30482:30;;;;;;;;;;-1:-1:-1;30482:30:0;;;;-1:-1:-1;;;;;30482:30:0;;;30237:27;;;;;;;;;;;;;;;;31230:59;;;;;;;;;;-1:-1:-1;31230:59:0;;;;;:::i;:::-;;;;;;;;;;;;;;30341:26;;;;;;;;;;;;;;;;35517:234;;;;;;;;;;-1:-1:-1;35517:234:0;;;;;:::i;:::-;;:::i;10507:355::-;;;;;;;;;;-1:-1:-1;10507:355:0;;;;;:::i;:::-;;:::i;42041:326::-;;;;;;;;;;-1:-1:-1;42041:326:0;;;;;:::i;:::-;;:::i;30199:25::-;;;;;;;;;;;;;;;;8645:93;;;;;;;;;;-1:-1:-1;8645:93:0;;8728:2;3594:36:1;;3582:2;3567:18;8645:93:0;3452:184:1;30162:30:0;;;;;;;;;;;;;;;;30713;;;;;;;;;;;;;;;;11272:218;;;;;;;;;;-1:-1:-1;11272:218:0;;;;;:::i;:::-;;:::i;30098:26::-;;;;;;;;;;;;;;;;30046:38;;;;;;;;;;;;;;;31177:44;;;;;;;;;;-1:-1:-1;31177:44:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;31177:44:0;;;30752:33;;;;;;;;;;-1:-1:-1;30752:33:0;;;;;;;;37500:125;;;;;;;;;;-1:-1:-1;37500:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;37589:28:0;37565:4;37589:28;;;:19;:28;;;;;;;;;37500:125;30380:24;;;;;;;;;;;;;;;;42778:263;;;;;;;;;;-1:-1:-1;42778:263:0;;;;;:::i;:::-;;:::i;31298:49::-;;;;;;;;;;-1:-1:-1;31298:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;30832:31;;;;;;;;;;-1:-1:-1;30832:31:0;;;;;;;;;;;8976:127;;;;;;;;;;-1:-1:-1;8976:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;9077:18:0;9050:7;9077:18;;;;;;;;;;;;8976:127;29901:80;;;;;;;;;;-1:-1:-1;29901:80:0;;;;-1:-1:-1;;;;;29901:80:0;;;22183:148;;;;;;;;;;;;;:::i;30519:32::-;;;;;;;;;;-1:-1:-1;30519:32:0;;;;-1:-1:-1;;;;;30519:32:0;;;34935:120;;;;;;;;;;;;;:::i;35985:144::-;;;;;;;;;;-1:-1:-1;35985:144:0;;;;;:::i;:::-;;:::i;34770:112::-;;;;;;;;;;;;;:::i;30411:30::-;;;;;;;;;;;;;;;;21539:79;;;;;;;;;;-1:-1:-1;21604:6:0;;-1:-1:-1;;;;;21604:6:0;21539:79;;7901:104;;;;;;;;;;;;;:::i;37048:245::-;;;;;;;;;;-1:-1:-1;37048:245:0;;;;;:::i;:::-;;:::i;31356:59::-;;;;;;;;;;-1:-1:-1;31356:59:0;;;;;:::i;:::-;;;;;;;;;;;;;;36138:346;;;;;;;;;;-1:-1:-1;36138:346:0;;;;;:::i;:::-;;:::i;11994:269::-;;;;;;;;;;-1:-1:-1;11994:269:0;;;;;:::i;:::-;;:::i;9317:175::-;;;;;;;;;;-1:-1:-1;9317:175:0;;;;;:::i;:::-;;:::i;30131:24::-;;;;;;;;;;;;;;;;31795:58;;;;;;;;;;-1:-1:-1;31795:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30792:33;;;;;;;;;;-1:-1:-1;30792:33:0;;;;;;;;;;;30271:25;;;;;;;;;;;;;;;;36857:182;;;;;;;;;;-1:-1:-1;36857:182:0;;;;;:::i;:::-;;:::i;35760:216::-;;;;;;;;;;-1:-1:-1;35760:216:0;;;;;:::i;:::-;;:::i;30564:35::-;;;;;;;;;;;;;;;;35127:381;;;;;;;;;;-1:-1:-1;35127:381:0;;;;;:::i;:::-;;:::i;43606:480::-;;;;;;;;;;-1:-1:-1;43606:480:0;;;;;:::i;:::-;;:::i;9556:151::-;;;;;;;;;;-1:-1:-1;9556:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;9672:18:0;;;9645:7;9672:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9556:151;30606:33;;;;;;;;;;;;;;;;30303:31;;;;;;;;;;;;;;;;31080:47;;;;;;;;;;;;;;;;22487:244;;;;;;;;;;-1:-1:-1;22487:244:0;;;;;:::i;:::-;;:::i;30646:24::-;;;;;;;;;;;;;;;;36493:355;21752:6;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;;;;;;;;;36604:10:::1;:20:::0;;;36635:16:::1;:32:::0;;;36678:11:::1;:22:::0;;;36692:8;36726:29:::1;36654:13:::0;36617:7;36726:29:::1;:::i;:::-;:43;;;;:::i;:::-;36711:12;:58:::0;;;36804:2:::1;-1:-1:-1::0;36788:18:0::1;36780:60;;;::::0;-1:-1:-1;;;36780:60:0;;4887:2:1;36780:60:0::1;::::0;::::1;4869:21:1::0;4926:2;4906:18;;;4899:30;4965:31;4945:18;;;4938:59;5014:18;;36780:60:0::1;4685:353:1::0;36780:60:0::1;36493:355:::0;;;:::o;7681:100::-;7735:13;7768:5;7761:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7681:100;:::o;9855:169::-;9938:4;9955:39;363:10;9978:7;9987:6;9955:8;:39::i;:::-;-1:-1:-1;10012:4:0;9855:169;;;;;:::o;42375:395::-;42438:10;42430:49;;;;-1:-1:-1;;;42430:49:0;;5630:2:1;42430:49:0;;;5612:21:1;5669:2;5649:18;;;5642:30;-1:-1:-1;;;5688:18:1;;;5681:42;5740:18;;42430:49:0;5428:336:1;42430:49:0;42523:10;42537:1;42498:36;;;:24;:36;;;;;;42490:89;;;;-1:-1:-1;;;42490:89:0;;5971:2:1;42490:89:0;;;5953:21:1;6010:2;5990:18;;;5983:30;6049:34;6029:18;;;6022:62;-1:-1:-1;;;6100:18:1;;;6093:34;6144:19;;42490:89:0;5769:400:1;42490:89:0;42600:16;;42624:10;42600:16;42636:36;;;:24;:36;;;;;;;;42590:83;;-1:-1:-1;;;42590:83:0;;;;;6348:51:1;;;;6415:18;;;6408:34;-1:-1:-1;;;;;42600:16:0;;;;42590:33;;6321:18:1;;42590:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;42713:10:0;42725:36;;;;:24;:36;;;;;;;;;;42689:73;;1034:25:1;;;42713:10:0;;-1:-1:-1;42689:73:0;;-1:-1:-1;1007:18:1;42689:73:0;;;;;;;42375:395::o;43049:549::-;21752:6;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43174:19:0;::::1;::::0;;::::1;::::0;:55:::1;;-1:-1:-1::0;;;;;;43206:23:0;::::1;::::0;::::1;43174:55;:86;;;;;43251:9;-1:-1:-1::0;;;;;43242:18:0::1;:5;-1:-1:-1::0;;;;;43242:18:0::1;;;43174:86;:129;;;;-1:-1:-1::0;;;;;;43273:16:0;;::::1;43301:1;43273:16:::0;;;:9:::1;:16;::::0;;;;;::::1;:30:::0;43174:129:::1;43160:431;;;-1:-1:-1::0;;;;;43395:16:0;;::::1;;::::0;;;:9:::1;:16;::::0;;;;;;;:28;;-1:-1:-1;;;;;;43395:28:0::1;::::0;;::::1;::::0;;::::1;::::0;;43438:25;;;:14:::1;:25:::0;;;;;:30;;-1:-1:-1;;43395:16:0;43438:30:::1;::::0;-1:-1:-1;;43438:30:0::1;:::i;:::-;::::0;;;-1:-1:-1;;43545:34:0::1;::::0;-1:-1:-1;;;;;43545:34:0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;43160:431;43049:549:::0;;:::o;35517:234::-;21752:6;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;35636:4:::1;35630;35610:13;8892:12:::0;;;8804:108;35610:13:::1;:17;::::0;35626:1:::1;35610:17;:::i;:::-;:24;;;;:::i;:::-;35609:31;;;;:::i;:::-;35599:6;:41;;35591:101;;;::::0;-1:-1:-1;;;35591:101:0;;7050:2:1;35591:101:0::1;::::0;::::1;7032:21:1::0;7089:2;7069:18;;;7062:30;7128:34;7108:18;;;7101:62;-1:-1:-1;;;7179:18:1;;;7172:45;7234:19;;35591:101:0::1;6848:411:1::0;35591:101:0::1;35726:17;:6:::0;35736::::1;35726:17;:::i;:::-;35703:20;:40:::0;-1:-1:-1;35517:234:0:o;10507:355::-;10647:4;10664:36;10674:6;10682:9;10693:6;10664:9;:36::i;:::-;10711:121;10720:6;363:10;10742:89;10780:6;10742:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10742:19:0;;;;;;:11;:19;;;;;;;;363:10;10742:33;;;;;;;;;;:37;:89::i;:::-;10711:8;:121::i;:::-;-1:-1:-1;10850:4:0;10507:355;;;;;:::o;42041:326::-;21752:6;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42151:31:0;::::1;42143:56;;;::::0;-1:-1:-1;;;42143:56:0;;5630:2:1;42143:56:0::1;::::0;::::1;5612:21:1::0;5669:2;5649:18;;;5642:30;-1:-1:-1;;;5688:18:1;;;5681:42;5740:18;;42143:56:0::1;5428:336:1::0;42143:56:0::1;42210:16;:36:::0;;-1:-1:-1;;;;;;42210:36:0::1;-1:-1:-1::0;;;;;42210:36:0;;::::1;::::0;;;::::1;::::0;;;42274:17:::1;::::0;42257:51:::1;::::0;42266:6;;42274:17:::1;-1:-1:-1::0;;42257:8:0::1;:51::i;:::-;42319:40;42335:17;42354:4;42319:15;:40::i;11272:218::-:0;363:10;11360:4;11409:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11409:34:0;;;;;;;;;;11360:4;;11377:83;;11400:7;;11409:50;;11448:10;11409:38;:50::i;42778:263::-;21752:6;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;42928:2:::1;42896:29;:34;42888:74;;;::::0;-1:-1:-1;;;42888:74:0;;7466:2:1;42888:74:0::1;::::0;::::1;7448:21:1::0;7505:2;7485:18;;;7478:30;7544:29;7524:18;;;7517:57;7591:18;;42888:74:0::1;7264:351:1::0;42888:74:0::1;42973:28;:60:::0;42778:263::o;22183:148::-;21752:6;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;22274:6:::1;::::0;22253:40:::1;::::0;22290:1:::1;::::0;-1:-1:-1;;;;;22274:6:0::1;::::0;22253:40:::1;::::0;22290:1;;22253:40:::1;22304:6;:19:::0;;-1:-1:-1;;;;;;22304:19:0::1;::::0;;22183:148::o;34935:120::-;21752:6;;34987:4;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;-1:-1:-1;35003:14:0::1;:22:::0;;-1:-1:-1;;35003:22:0::1;::::0;;;34935:120;:::o;35985:144::-;21752:6;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36075:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;36075:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35985:144::o;34770:112::-;21752:6;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;34825:13:::1;:20:::0;;-1:-1:-1;;34856:18:0;;;;;34770:112::o;7901:104::-;7957:13;7990:7;7983:14;;;;;:::i;37048:245::-;21752:6;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;37155:13:::1;-1:-1:-1::0;;;;;37147:21:0::1;:4;-1:-1:-1::0;;;;;37147:21:0::1;::::0;37139:91:::1;;;::::0;-1:-1:-1;;;37139:91:0;;7822:2:1;37139:91:0::1;::::0;::::1;7804:21:1::0;7861:2;7841:18;;;7834:30;7900:34;7880:18;;;7873:62;7971:27;7951:18;;;7944:55;8016:19;;37139:91:0::1;7620:421:1::0;37139:91:0::1;37244:41;37273:4;37279:5;37244:28;:41::i;36138:346::-:0;21752:6;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;36248:9:::1;:19:::0;;;36278:15:::1;:31:::0;;;36320:10:::1;:21:::0;;;36333:8;36366:27:::1;36296:13:::0;36260:7;36366:27:::1;:::i;:::-;:40;;;;:::i;:::-;36352:11;:54:::0;;;36440:2:::1;-1:-1:-1::0;36425:17:0::1;36417:59;;;::::0;-1:-1:-1;;;36417:59:0;;8248:2:1;36417:59:0::1;::::0;::::1;8230:21:1::0;8287:2;8267:18;;;8260:30;8326:31;8306:18;;;8299:59;8375:18;;36417:59:0::1;8046:353:1::0;11994:269:0;12087:4;12104:129;363:10;12127:7;12136:96;12175:15;12136:96;;;;;;;;;;;;;;;;;363:10;12136:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12136:34:0;;;;;;;;;;;;:38;:96::i;9317:175::-;9403:4;9420:42;363:10;9444:9;9455:6;9420:9;:42::i;36857:182::-;21752:6;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36942:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;36942:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;36997:34;;1666:41:1;;;36997:34:0::1;::::0;1639:18:1;36997:34:0::1;;;;;;;;36857:182:::0;;:::o;35760:216::-;21752:6;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;35883:4:::1;35877;35856:13;8892:12:::0;;;8804:108;35856:13:::1;:18;::::0;35872:2:::1;35856:18;:::i;:::-;:25;;;;:::i;:::-;35855:32;;;;:::i;:::-;35845:6;:42;;35837:91;;;::::0;-1:-1:-1;;;35837:91:0;;8606:2:1;35837:91:0::1;::::0;::::1;8588:21:1::0;8645:2;8625:18;;;8618:30;8684:34;8664:18;;;8657:62;-1:-1:-1;;;8735:18:1;;;8728:34;8779:19;;35837:91:0::1;8404:400:1::0;35837:91:0::1;35951:17;:6:::0;35961::::1;35951:17;:::i;:::-;35939:9;:29:::0;-1:-1:-1;35760:216:0:o;35127:381::-;21752:6;;35208:4;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;35264:6:::1;35244:13;8892:12:::0;;;8804:108;35244:13:::1;:17;::::0;35260:1:::1;35244:17;:::i;:::-;:26;;;;:::i;:::-;35231:9;:39;;35223:105;;;::::0;-1:-1:-1;;;35223:105:0;;9011:2:1;35223:105:0::1;::::0;::::1;8993:21:1::0;9050:2;9030:18;;;9023:30;9089:34;9069:18;;;9062:62;-1:-1:-1;;;9140:18:1;;;9133:51;9201:19;;35223:105:0::1;8809:417:1::0;35223:105:0::1;35379:4;35359:13;8892:12:::0;;;8804:108;35359:13:::1;:17;::::0;35375:1:::1;35359:17;:::i;:::-;:24;;;;:::i;:::-;35346:9;:37;;35338:102;;;::::0;-1:-1:-1;;;35338:102:0;;9433:2:1;35338:102:0::1;::::0;::::1;9415:21:1::0;9472:2;9452:18;;;9445:30;9511:34;9491:18;;;9484:62;-1:-1:-1;;;9562:18:1;;;9555:50;9622:19;;35338:102:0::1;9231:416:1::0;35338:102:0::1;-1:-1:-1::0;35450:18:0::1;:30:::0;35497:4:::1;::::0;35127:381::o;43606:480::-;21752:6;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43737:23:0;::::1;::::0;;::::1;::::0;:42:::1;;;43778:1;43764:11;:15;43737:42;43733:346;;;-1:-1:-1::0;;;;;43883:35:0;::::1;;::::0;;;:24:::1;:35:::0;;;;;:50;;43922:11;;43883:35;:50:::1;::::0;43922:11;;43883:50:::1;:::i;:::-;::::0;;;-1:-1:-1;;44017:50:0::1;::::0;1034:25:1;;;-1:-1:-1;;;;;44017:50:0;::::1;::::0;::::1;::::0;1022:2:1;1007:18;44017:50:0::1;888:177:1::0;22487:244:0;21752:6;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22576:22:0;::::1;22568:73;;;::::0;-1:-1:-1;;;22568:73:0;;9854:2:1;22568:73:0::1;::::0;::::1;9836:21:1::0;9893:2;9873:18;;;9866:30;9932:34;9912:18;;;9905:62;-1:-1:-1;;;9983:18:1;;;9976:36;10029:19;;22568:73:0::1;9652:402:1::0;22568:73:0::1;22678:6;::::0;22657:38:::1;::::0;-1:-1:-1;;;;;22657:38:0;;::::1;::::0;22678:6:::1;::::0;22657:38:::1;::::0;22678:6:::1;::::0;22657:38:::1;22706:6;:17:::0;;-1:-1:-1;;;;;;22706:17:0::1;-1:-1:-1::0;;;;;22706:17:0;;;::::1;::::0;;;::::1;::::0;;22487:244::o;15190:381::-;-1:-1:-1;;;;;15326:19:0;;15318:68;;;;-1:-1:-1;;;15318:68:0;;10261:2:1;15318:68:0;;;10243:21:1;10300:2;10280:18;;;10273:30;10339:34;10319:18;;;10312:62;-1:-1:-1;;;10390:18:1;;;10383:34;10434:19;;15318:68:0;10059:400:1;15318:68:0;-1:-1:-1;;;;;15405:21:0;;15397:68;;;;-1:-1:-1;;;15397:68:0;;10666:2:1;15397:68:0;;;10648:21:1;10705:2;10685:18;;;10678:30;10744:34;10724:18;;;10717:62;-1:-1:-1;;;10795:18:1;;;10788:32;10837:19;;15397:68:0;10464:398:1;15397:68:0;-1:-1:-1;;;;;15479:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15531:32;;1034:25:1;;;15531:32:0;;1007:18:1;15531:32:0;;;;;;;;15190:381;;;:::o;37633:3531::-;-1:-1:-1;;;;;37765:18:0;;37757:68;;;;-1:-1:-1;;;37757:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37844:16:0;;37836:64;;;;-1:-1:-1;;;37836:64:0;;;;;;;:::i;:::-;37917:6;37927:1;37917:11;37914:92;;37945:28;37961:4;37967:2;37971:1;37945:15;:28::i;37914:92::-;38022:14;;;;38019:1233;;;21604:6;;-1:-1:-1;;;;;38074:15:0;;;21604:6;;38074:15;;;;:49;;-1:-1:-1;21604:6:0;;-1:-1:-1;;;;;38110:13:0;;;21604:6;;38110:13;;38074:49;:86;;;;-1:-1:-1;;;;;;38144:16:0;;;;38074:86;:128;;;;-1:-1:-1;;;;;;38181:21:0;;38195:6;38181:21;;38074:128;:158;;;;-1:-1:-1;38224:8:0;;;;38223:9;38074:158;38052:1189;;;38270:13;;;;;;;38266:148;;-1:-1:-1;;;;;38315:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;38344:23:0;;;;;;:19;:23;;;;;;;;38315:52;38307:87;;;;-1:-1:-1;;;38307:87:0;;11879:2:1;38307:87:0;;;11861:21:1;11918:2;11898:18;;;11891:30;-1:-1:-1;;;11937:18:1;;;11930:52;11999:18;;38307:87:0;11677:346:1;38307:87:0;-1:-1:-1;;;;;38467:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;38503:35:0;;;;;;:31;:35;;;;;;;;38502:36;38467:71;38463:763;;;38585:20;;38575:6;:30;;38567:96;;;;-1:-1:-1;;;38567:96:0;;12230:2:1;38567:96:0;;;12212:21:1;12269:2;12249:18;;;12242:30;12308:34;12288:18;;;12281:62;-1:-1:-1;;;12359:18:1;;;12352:51;12420:19;;38567:96:0;12028:417:1;38567:96:0;38724:9;;-1:-1:-1;;;;;9077:18:0;;9050:7;9077:18;;;;;;;;;;;38698:22;;:6;:22;:::i;:::-;:35;;38690:67;;;;-1:-1:-1;;;38690:67:0;;12652:2:1;38690:67:0;;;12634:21:1;12691:2;12671:18;;;12664:30;-1:-1:-1;;;12710:18:1;;;12703:49;12769:18;;38690:67:0;12450:343:1;38690:67:0;38463:763;;;-1:-1:-1;;;;;38836:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;38870:37:0;;;;;;:31;:37;;;;;;;;38869:38;38836:71;38832:394;;;38954:20;;38944:6;:30;;38936:97;;;;-1:-1:-1;;;38936:97:0;;13000:2:1;38936:97:0;;;12982:21:1;13039:2;13019:18;;;13012:30;13078:34;13058:18;;;13051:62;-1:-1:-1;;;13129:18:1;;;13122:52;13191:19;;38936:97:0;12798:418:1;38832:394:0;-1:-1:-1;;;;;39080:35:0;;;;;;:31;:35;;;;;;;;39076:150;;39173:9;;-1:-1:-1;;;;;9077:18:0;;9050:7;9077:18;;;;;;;;;;;39147:22;;:6;:22;:::i;:::-;:35;;39139:67;;;;-1:-1:-1;;;39139:67:0;;12652:2:1;39139:67:0;;;12634:21:1;12691:2;12671:18;;;12664:30;-1:-1:-1;;;12710:18:1;;;12703:49;12769:18;;39139:67:0;12450:343:1;39139:67:0;-1:-1:-1;;;;;39268:31:0;;;;;;:25;:31;;;;;;;;39264:385;;;-1:-1:-1;;;;;39396:13:0;;;39421:1;39396:13;;;:9;:13;;;;;;;:27;39392:246;;39486:136;39552:51;39597:5;39552:40;39563:28;;39552:6;:10;;:40;;;;:::i;:::-;:44;;:51::i;:::-;-1:-1:-1;;;;;39511:13:0;;;39486:39;39511:13;;;:9;:13;;;;;;;;;;;;39486:39;;:24;:39;;;;;:43;:136::i;:::-;-1:-1:-1;;;;;39469:13:0;;;39444:39;39469:13;;;:9;:13;;;;;;;;;;;;39444:39;;:24;:39;;;:178;39392:246;39704:4;39655:28;9077:18;;;;;;;;;;;39762;;39804:17;;39738:42;;;;;-1:-1:-1;;;;;39796:25:0;;;39804:17;;39796:25;:59;;;;;39839:15;-1:-1:-1;;;;;39825:30:0;:2;-1:-1:-1;;;;;39825:30:0;;;39796:59;:81;;;;;39864:13;-1:-1:-1;;;;;39859:18:0;:2;-1:-1:-1;;;;;39859:18:0;;;39796:81;39793:141;;;39893:15;:29;;-1:-1:-1;;;;;;39893:29:0;-1:-1:-1;;;;;39893:29:0;;;;;39793:141;39965:7;:35;;;;-1:-1:-1;39989:11:0;;;;;;;39965:35;:61;;;;-1:-1:-1;40018:8:0;;;;40017:9;39965:61;:110;;;;-1:-1:-1;;;;;;40044:31:0;;;;;;:25;:31;;;;;;;;40043:32;39965:110;:153;;;;-1:-1:-1;;;;;;40093:25:0;;;;;;:19;:25;;;;;;;;40092:26;39965:153;:194;;;;-1:-1:-1;;;;;;40136:23:0;;;;;;:19;:23;;;;;;;;40135:24;39965:194;39947:322;;;40186:8;:15;;-1:-1:-1;;40186:15:0;40197:4;40186:15;;;40216:10;:8;:10::i;:::-;40241:8;:16;;-1:-1:-1;;40241:16:0;;;39947:322;40297:8;;-1:-1:-1;;;;;40407:25:0;;40281:12;40407:25;;;:19;:25;;;;;;40297:8;;;;40296:9;;40407:25;;:52;;-1:-1:-1;;;;;;40436:23:0;;;;;;:19;:23;;;;;;;;40407:52;40404:99;;;-1:-1:-1;40486:5:0;40404:99;40516:12;40620:7;40617:493;;;-1:-1:-1;;;;;40671:29:0;;;;;;:25;:29;;;;;;;;:49;;;;;40719:1;40704:12;;:16;40671:49;40667:297;;;40747:33;40776:3;40747:24;40758:12;;40747:6;:10;;:24;;;;:::i;:33::-;40740:40;;40667:297;;;-1:-1:-1;;;;;40841:31:0;;;;;;:25;:31;;;;;;;;:50;;;;;40890:1;40876:11;;:15;40841:50;40838:126;;;40916:32;40944:3;40916:23;40927:11;;40916:6;:10;;:23;;;;:::i;:32::-;40909:39;;40838:126;40984:8;;40981:89;;41012:42;41028:4;41042;41049;41012:15;:42::i;:::-;41084:14;41094:4;41084:14;;:::i;:::-;;;40617:493;41123:33;41139:4;41145:2;41149:6;41123:15;:33::i;:::-;37746:3418;;;;37633:3531;;;:::o;17477:193::-;17563:7;17599:12;17591:6;;;;17583:29;;;;-1:-1:-1;;;17583:29:0;;;;;;;;:::i;:::-;-1:-1:-1;17623:9:0;17635:5;17639:1;17635;:5;:::i;:::-;17623:17;17477:193;-1:-1:-1;;;;;17477:193:0:o;16571:182::-;16629:7;;16661:5;16665:1;16661;:5;:::i;:::-;16649:17;;16690:1;16685;:6;;16677:46;;;;-1:-1:-1;;;16677:46:0;;13556:2:1;16677:46:0;;;13538:21:1;13595:2;13575:18;;;13568:30;13634:29;13614:18;;;13607:57;13681:18;;16677:46:0;13354:351:1;16677:46:0;16744:1;16571:182;-1:-1:-1;;;16571:182:0:o;37302:189::-;-1:-1:-1;;;;;37385:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;37385:39:0;;;;;;;;;;37443:40;;37385:39;;:31;37443:40;;;37302:189;;:::o;12754:575::-;-1:-1:-1;;;;;12894:20:0;;12886:70;;;;-1:-1:-1;;;12886:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12975:23:0;;12967:71;;;;-1:-1:-1;;;12967:71:0;;;;;;;:::i;:::-;13133;13155:6;13133:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13133:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;13113:17:0;;;:9;:17;;;;;;;;;;;:91;;;;13238:20;;;;;;;:32;;13263:6;13238:24;:32::i;:::-;-1:-1:-1;;;;;13215:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;13286:35;1034:25:1;;;13215:20:0;;13286:35;;;;;;1007:18:1;13286:35:0;888:177:1;17930:473:0;17988:7;18233:1;18238;18233:6;18229:47;;-1:-1:-1;18263:1:0;18256:8;;18229:47;18289:9;18301:5;18305:1;18301;:5;:::i;:::-;18289:17;-1:-1:-1;18334:1:0;18325:5;18329:1;18289:17;18325:5;:::i;:::-;:10;18317:56;;;;-1:-1:-1;;;18317:56:0;;13912:2:1;18317:56:0;;;13894:21:1;13951:2;13931:18;;;13924:30;13990:34;13970:18;;;13963:62;-1:-1:-1;;;14041:18:1;;;14034:31;14082:19;;18317:56:0;13710:397:1;18880:132:0;18938:7;18965:39;18969:1;18972;18965:39;;;;;;;;;;;;;;;;;:3;:39::i;41718:315::-;41801:4;41757:23;9077:18;;;;;;;;;;;;41829:20;;;41826:34;;41852:7;41718:315::o;41826:34::-;41872:33;41889:15;41872:16;:33::i;:::-;41988:15;;41980:45;;41948:21;;-1:-1:-1;;;;;41988:15:0;;41980:45;;;;;41948:21;;41927:18;41980:45;41927:18;41980:45;41948:21;41988:15;41980:45;;;;;;;;;;;;;;;;;;;19509:279;19595:7;19630:12;19623:5;19615:28;;;;-1:-1:-1;;;19615:28:0;;;;;;;;:::i;:::-;-1:-1:-1;19654:9:0;19666:5;19670:1;19666;:5;:::i;41173:537::-;41263:16;;;41277:1;41263:16;;;;;;;;41239:21;;41263:16;;;;;;;;;;-1:-1:-1;41263:16:0;41239:40;;41308:4;41290;41295:1;41290:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;41290:23:0;;;-1:-1:-1;;;;;41290:23:0;;;;;41334:15;-1:-1:-1;;;;;41334:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41324:4;41329:1;41324:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;41324:32:0;;;-1:-1:-1;;;;;41324:32:0;;;;;41369:62;41386:4;41401:15;41419:11;41369:8;:62::i;:::-;41478:224;;-1:-1:-1;;;41478:224:0;;-1:-1:-1;;;;;41478:15:0;:66;;;;:224;;41559:11;;41585:1;;41629:4;;41656;;41676:15;;41478:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41228:482;41173:537;:::o;14:316:1:-;91:6;99;107;160:2;148:9;139:7;135:23;131:32;128:52;;;176:1;173;166:12;128:52;-1:-1:-1;;199:23:1;;;269:2;254:18;;241:32;;-1:-1:-1;320:2:1;305:18;;;292:32;;14:316;-1:-1:-1;14:316:1:o;335:548::-;447:4;476:2;505;494:9;487:21;537:6;531:13;580:6;575:2;564:9;560:18;553:34;605:1;615:140;629:6;626:1;623:13;615:140;;;724:14;;;720:23;;714:30;690:17;;;709:2;686:26;679:66;644:10;;615:140;;;619:3;804:1;799:2;790:6;779:9;775:22;771:31;764:42;874:2;867;863:7;858:2;850:6;846:15;842:29;831:9;827:45;823:54;815:62;;;;335:548;;;;:::o;1070:131::-;-1:-1:-1;;;;;1145:31:1;;1135:42;;1125:70;;1191:1;1188;1181:12;1125:70;1070:131;:::o;1206:315::-;1274:6;1282;1335:2;1323:9;1314:7;1310:23;1306:32;1303:52;;;1351:1;1348;1341:12;1303:52;1390:9;1377:23;1409:31;1434:5;1409:31;:::i;:::-;1459:5;1511:2;1496:18;;;;1483:32;;-1:-1:-1;;;1206:315:1:o;1718:388::-;1786:6;1794;1847:2;1835:9;1826:7;1822:23;1818:32;1815:52;;;1863:1;1860;1853:12;1815:52;1902:9;1889:23;1921:31;1946:5;1921:31;:::i;:::-;1971:5;-1:-1:-1;2028:2:1;2013:18;;2000:32;2041:33;2000:32;2041:33;:::i;:::-;2093:7;2083:17;;;1718:388;;;;;:::o;2111:247::-;2170:6;2223:2;2211:9;2202:7;2198:23;2194:32;2191:52;;;2239:1;2236;2229:12;2191:52;2278:9;2265:23;2297:31;2322:5;2297:31;:::i;2806:180::-;2865:6;2918:2;2906:9;2897:7;2893:23;2889:32;2886:52;;;2934:1;2931;2924:12;2886:52;-1:-1:-1;2957:23:1;;2806:180;-1:-1:-1;2806:180:1:o;2991:456::-;3068:6;3076;3084;3137:2;3125:9;3116:7;3112:23;3108:32;3105:52;;;3153:1;3150;3143:12;3105:52;3192:9;3179:23;3211:31;3236:5;3211:31;:::i;:::-;3261:5;-1:-1:-1;3318:2:1;3303:18;;3290:32;3331:33;3290:32;3331:33;:::i;:::-;2991:456;;3383:7;;-1:-1:-1;;;3437:2:1;3422:18;;;;3409:32;;2991:456::o;3641:416::-;3706:6;3714;3767:2;3755:9;3746:7;3742:23;3738:32;3735:52;;;3783:1;3780;3773:12;3735:52;3822:9;3809:23;3841:31;3866:5;3841:31;:::i;:::-;3891:5;-1:-1:-1;3948:2:1;3933:18;;3920:32;3990:15;;3983:23;3971:36;;3961:64;;4021:1;4018;4011:12;4062:356;4264:2;4246:21;;;4283:18;;;4276:30;4342:34;4337:2;4322:18;;4315:62;4409:2;4394:18;;4062:356::o;4423:127::-;4484:10;4479:3;4475:20;4472:1;4465:31;4515:4;4512:1;4505:15;4539:4;4536:1;4529:15;4555:125;4620:9;;;4641:10;;;4638:36;;;4654:18;;:::i;5043:380::-;5122:1;5118:12;;;;5165;;;5186:61;;5240:4;5232:6;5228:17;5218:27;;5186:61;5293:2;5285:6;5282:14;5262:18;5259:38;5256:161;;5339:10;5334:3;5330:20;5327:1;5320:31;5374:4;5371:1;5364:15;5402:4;5399:1;5392:15;5256:161;;5043:380;;;:::o;6453:168::-;6526:9;;;6557;;6574:15;;;6568:22;;6554:37;6544:71;;6595:18;;:::i;6626:217::-;6666:1;6692;6682:132;;6736:10;6731:3;6727:20;6724:1;6717:31;6771:4;6768:1;6761:15;6799:4;6796:1;6789:15;6682:132;-1:-1:-1;6828:9:1;;6626:217::o;10867:401::-;11069:2;11051:21;;;11108:2;11088:18;;;11081:30;11147:34;11142:2;11127:18;;11120:62;-1:-1:-1;;;11213:2:1;11198:18;;11191:35;11258:3;11243:19;;10867:401::o;11273:399::-;11475:2;11457:21;;;11514:2;11494:18;;;11487:30;11553:34;11548:2;11533:18;;11526:62;-1:-1:-1;;;11619:2:1;11604:18;;11597:33;11662:3;11647:19;;11273:399::o;13221:128::-;13288:9;;;13309:11;;;13306:37;;;13323:18;;:::i;14244:127::-;14305:10;14300:3;14296:20;14293:1;14286:31;14336:4;14333:1;14326:15;14360:4;14357:1;14350:15;14376:251;14446:6;14499:2;14487:9;14478:7;14474:23;14470:32;14467:52;;;14515:1;14512;14505:12;14467:52;14547:9;14541:16;14566:31;14591:5;14566:31;:::i;14632:980::-;14894:4;14942:3;14931:9;14927:19;14973:6;14962:9;14955:25;14999:2;15037:6;15032:2;15021:9;15017:18;15010:34;15080:3;15075:2;15064:9;15060:18;15053:31;15104:6;15139;15133:13;15170:6;15162;15155:22;15208:3;15197:9;15193:19;15186:26;;15247:2;15239:6;15235:15;15221:29;;15268:1;15278:195;15292:6;15289:1;15286:13;15278:195;;;15357:13;;-1:-1:-1;;;;;15353:39:1;15341:52;;15448:15;;;;15413:12;;;;15389:1;15307:9;15278:195;;;-1:-1:-1;;;;;;;15529:32:1;;;;15524:2;15509:18;;15502:60;-1:-1:-1;;;15593:3:1;15578:19;15571:35;15490:3;14632:980;-1:-1:-1;;;14632:980:1:o
Swarm Source
ipfs://1e958aa8ea7c713037d6e7a6d548248b5f2ab00624666ec31ecbd5bcd230c975
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.