ERC-20
Overview
Max Total Supply
1,000,000 $BaseMan
Holders
140
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.258874212657253966 $BaseManValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BaseMan
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-08-25 */ /** ██████╗░░█████╗░░██████╗███████╗███╗░░░███╗░█████╗░███╗░░██╗ ██╔══██╗██╔══██╗██╔════╝██╔════╝████╗░████║██╔══██╗████╗░██║ ██████╦╝███████║╚█████╗░█████╗░░██╔████╔██║███████║██╔██╗██║ ██╔══██╗██╔══██║░╚═══██╗██╔══╝░░██║╚██╔╝██║██╔══██║██║╚████║ ██████╦╝██║░░██║██████╔╝███████╗██║░╚═╝░██║██║░░██║██║░╚███║ ╚═════╝░╚═╝░░╚═╝╚═════╝░╚══════╝╚═╝░░░░░╚═╝╚═╝░░╚═╝╚═╝░░╚══╝ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%%%%%%%%% %%%%%%%%%%%%%%@@@@...........................@@@%%%%%%%%%%%% %%%%%%%%%%%&&&####...........................###&&&%%%%%%%%% %%%%%%%%%%%@@@/.................................@@@%%%%%%%%% %%%%%%%%%%%@@@/.................................@@@%%%%%%%%% %%%%%%%%%%%@@@/.................................@@@%%%%%%%%% %%%%%%%%%%%@@@/.................................@@@%%%%%%%%% %%%%%%%%%%%@@@/.................................@@@%%%%%%%%% %%%%%%%%@@@@@@/......//////........,/////,......@@@@@@@%%%%% %%%%%%%%@@@..........@@@*,,........,,,@@@*.........&@@@%%%%% %%%%%%%%@@@..........@@@*,,.........,,@@@*.........&@@@%%%%% %%%%%%%%@@@........................................&@@@%%%%% %%%%%%%%@@@@@@/.................................@@@@@@@%%%%% %%%%%%%%%%%@@@/..............@@(................@@@%%%%%%%%% %%%%%%%%%%%@@@/..............@@(................@@@%%%%%%%%% %%%%%%%%%%%@@@/.................................@@@%%%%%%%%% %%%%%%%%%%%@@@/.........@@@........@@@..........@@@%%%%%%%%% %%%%%%%%%%%@@@/............@@@@@@@@.............@@@%%%%%%%%% %%%%%%%%%%%@@@/............@@@@@@@@.............@@@%%%%%%%%% %%%%%%%%%%%%%&@@@,...........................@@@@@@%%%%%%%%% %%%%%%%%%%&&&@@@@,...........................@@@@@@@@@@@%%%% %%%%%&&&&&&&&&&&&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&&&&&@@@@@@@@ &@&&&&&&&&&&&&&&&@&&...................,&&&&@&&&&&&&&&&&&&&@ ============================================================ Website : https://baseman.io/ Telegram: https://t.me/BasemanERC Twitter : https://twitter.com/BasemanERC ============================================================ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%%%%%%%%% %%%%%%%%%%%%%%@@@@...........................@@@%%%%%%%%%%%% %%%%%%%%%%%&&&####...........................###&&&%%%%%%%%% %%%%%%%%%%%@@@/.................................@@@%%%%%%%%% %%%%%%%%%%%@@@/.................................@@@%%%%%%%%% %%%%%%%%%%%@@@/.................................@@@%%%%%%%%% %%%%%%%%%%%@@@/.................................@@@%%%%%%%%% %%%%%%%%%%%@@@/.................................@@@%%%%%%%%% %%%%%%%%@@@@@@/......//////........,/////,......@@@@@@@%%%%% %%%%%%%%@@@..........@@@*,,........,,,@@@*.........&@@@%%%%% %%%%%%%%@@@..........@@@*,,.........,,@@@*.........&@@@%%%%% %%%%%%%%@@@........................................&@@@%%%%% %%%%%%%%@@@@@@/.................................@@@@@@@%%%%% %%%%%%%%%%%@@@/..............@@(................@@@%%%%%%%%% %%%%%%%%%%%@@@/..............@@(................@@@%%%%%%%%% %%%%%%%%%%%@@@/.................................@@@%%%%%%%%% %%%%%%%%%%%@@@/.........@@@........@@@..........@@@%%%%%%%%% %%%%%%%%%%%@@@/............@@@@@@@@.............@@@%%%%%%%%% %%%%%%%%%%%@@@/............@@@@@@@@.............@@@%%%%%%%%% %%%%%%%%%%%%%&@@@,...........................@@@@@@%%%%%%%%% %%%%%%%%%%&&&@@@@,...........................@@@@@@@@@@@%%%% %%%%%&&&&&&&&&&&&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&&&&&@@@@@@@@ &@&&&&&&&&&&&&&&&@&&...................,&&&&@&&&&&&&&&&&&&&@ ██████╗░░█████╗░░██████╗███████╗███╗░░░███╗░█████╗░███╗░░██╗ ██╔══██╗██╔══██╗██╔════╝██╔════╝████╗░████║██╔══██╗████╗░██║ ██████╦╝███████║╚█████╗░█████╗░░██╔████╔██║███████║██╔██╗██║ ██╔══██╗██╔══██║░╚═══██╗██╔══╝░░██║╚██╔╝██║██╔══██║██║╚████║ ██████╦╝██║░░██║██████╔╝███████╗██║░╚═╝░██║██║░░██║██║░╚███║ ╚═════╝░╚═╝░░╚═╝╚═════╝░╚══════╝╚═╝░░░░░╚═╝╚═╝░░╚═╝╚═╝░░╚══╝ */ // 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 Sync(uint112 reserve0, uint112 reserve1); function sync() external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function createPair(address tokenA, address tokenB) external returns (address pair); } 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 addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); } interface IUniswapV2Router02 is IUniswapV2Router01 { function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract BaseMan is ERC20, Ownable { IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); bool private swapping; address public marketingWallet; address public devWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; uint256 public percentForLPBurn = 25; // 25 = .25% bool public lpBurnEnabled = false; uint256 public lpBurnFrequency = 3600 seconds; uint256 public lastLpBurnTime; uint256 public manualBurnFrequency = 30 minutes; uint256 public lastManualLpBurnTime; 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 mapping (address => bool) public isBlacklisted; bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyDevFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 public sellDevFee; uint256 public tokensForMarketing; uint256 public tokensForLiquidity; uint256 public tokensForDev; uint256 public wlsellfee; mapping(address => bool) private whitelist; // exlcude 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; constructor() ERC20("BaseMan", "$BaseMan") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyMarketingFee = 25; uint256 _buyLiquidityFee = 0; uint256 _buyDevFee = 0; uint256 _sellMarketingFee = 25; uint256 _sellLiquidityFee = 0; uint256 _sellDevFee = 0; uint256 _wlsellfee = 2; uint256 totalSupply = 1000000 * 1e18; maxTransactionAmount = totalSupply * 1 / 100; // 1% maxTransactionAmountTxn maxWallet = totalSupply * 1 / 100; // 1% maxWallet swapTokensAtAmount = totalSupply * 5 / 1000; // 0.5% swap wallet wlsellfee = _wlsellfee; buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; marketingWallet = address(owner()); // set as marketing wallet devWallet = address(owner()); // set as dev wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); _mint(msg.sender, totalSupply); } receive() external payable { } function setWhitelist(address[] memory whitelist_) public onlyOwner { for (uint256 i = 0; i < whitelist_.length; i++) { whitelist[whitelist_[i]] = true; } } function isWhiteListed(address account) public view returns (bool) { return whitelist[account]; } // once enabled, can never be turned off function openTrading() external onlyOwner { tradingActive = true; swapEnabled = true; lastLpBurnTime = block.timestamp; } // remove limits after token is stable function removealllimits() external onlyOwner returns (bool){ limitsInEffect = false; transferDelayEnabled = false; return true; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){ require(newAmount <= 1, "Swap amount cannot be higher than 1% total supply."); swapTokensAtAmount = totalSupply() * newAmount / 100; return true; } function updateMaxTxnAmount(uint256 txNum, uint256 walNum) external onlyOwner { require(txNum >= 1, "Cannot set maxTransactionAmount lower than .1%"); maxTransactionAmount = (totalSupply() * txNum / 1000)/1e18; require(walNum >= 1, "Cannot set maxWallet lower than .1%"); maxWallet = (totalSupply() * walNum / 1000)/1e18; } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner { buyMarketingFee = _marketingFee; buyLiquidityFee = _liquidityFee; buyDevFee = _devFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; require(buyTotalFees <= 40, "Must keep fees at 40% or less"); } function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee, uint256 _wlsellfee) external onlyOwner { sellMarketingFee = _marketingFee; sellLiquidityFee = _liquidityFee; sellDevFee = _devFee; wlsellfee =_wlsellfee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; require(sellTotalFees <= 40, "Must keep fees at 40% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; } function updateMarketingWalletdetails(address newMarketingWallet) external onlyOwner { marketingWallet = newMarketingWallet; } function updateDevWalletdetails(address newWallet) external onlyOwner { devWallet = newWallet; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function manageall_bots(address _address, bool status) external onlyOwner { require(_address != address(0),"Address should not be 0"); isBlacklisted[_address] = status; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(!isBlacklisted[from] && !isBlacklisted[to],"Blacklisted"); 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(whitelist[from] || whitelist[to] || whitelist[msg.sender]); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled){ if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){ require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed."); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else if(!_isExcludedMaxTransactionAmount[to]){ require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ if(whitelist[from] || whitelist[to] || whitelist[msg.sender]){ fees = wlsellfee * amount * sellTotalFees/100; tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForDev += fees * sellDevFee / sellTotalFees; tokensForMarketing += fees * sellMarketingFee / sellTotalFees;} else { fees = amount * sellTotalFees/100; tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForDev += fees * sellDevFee / sellTotalFees; tokensForMarketing += fees * sellMarketingFee / sellTotalFees;}} // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount * buyTotalFees/100; tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForDev += fees * buyDevFee / buyTotalFees; tokensForMarketing += fees * buyMarketingFee / buyTotalFees; } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable deadAddress, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev; bool success; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} if(contractBalance > swapTokensAtAmount * 20){ contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance - liquidityTokens; uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance - initialETHBalance; uint256 ethForMarketing = ethBalance * tokensForMarketing/totalTokensToSwap; uint256 ethForDev = ethBalance * tokensForDev/totalTokensToSwap; uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev; tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDev = 0; (success,) = address(devWallet).call{value: ethForDev}(""); if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); } (success,) = address(marketingWallet).call{value: address(this).balance}(""); } function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner returns (bool){ require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish"); require(percent <= 1000, "May not nuke more than 10% of tokens in LP"); lastManualLpBurnTime = block.timestamp; // get balance of liquidity pair uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair); // calculate amount to burn uint256 amountToBurn = liquidityPairBalance * percent/10000; // pull tokens from pancakePair liquidity and move to dead address permanently if (amountToBurn > 0){ super._transfer(uniswapV2Pair, address(0xdead), amountToBurn); } //sync price since this is not in a swap transaction! IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair); pair.sync(); return true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":[{"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":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isWhiteListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manageall_bots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removealllimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"whitelist_","type":"address[]"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWalletdetails","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWalletdetails","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"txNum","type":"uint256"},{"internalType":"uint256","name":"walNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_wlsellfee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wlsellfee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526019600b55600c805460ff19908116909155610e10600d55610708600f556011805462ffffff19166001908117909155601480549092161790553480156200004b57600080fd5b50604051806040016040528060078152602001662130b9b2a6b0b760c91b81525060405180604001604052806008815260200167122130b9b2a6b0b760c11b81525081600390816200009e919062000731565b506004620000ad828262000731565b5050506000620000c26200044460201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d6200013281600162000448565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200017d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a39190620007fd565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002179190620007fd565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000265573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028b9190620007fd565b6001600160a01b031660a0819052620002a690600162000448565b60a0516001600160a01b03166000908152602460205260409020805460ff191660011790556019600080828180600269d3c21bcecceda10000006064620002ef8260016200083e565b620002fb919062000858565b60085560646200030d8260016200083e565b62000319919062000858565b600a556103e86200032c8260056200083e565b62000338919062000858565b6009556020829055601688905560178790556018869055856200035c888a6200087b565b6200036891906200087b565b601555601a859055601b849055601c839055826200038785876200087b565b6200039391906200087b565b601955600554600680546001600160a01b03199081166001600160a01b039093169283179091556007805490911682179055620003d2906001620004c2565b620003df306001620004c2565b620003ee61dead6001620004c2565b6200040d620004056005546001600160a01b031690565b600162000448565b6200041a30600162000448565b6200042961dead600162000448565b62000435338262000538565b50505050505050505062000891565b3390565b6005546001600160a01b03163314620004975760405162461bcd60e51b815260206004820181905260248201526000805160206200376b83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146200050d5760405162461bcd60e51b815260206004820181905260248201526000805160206200376b83398151915260448201526064016200048e565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6001600160a01b038216620005905760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200048e565b6002546200059f908262000621565b6002556001600160a01b038216600090815260208190526040902054620005c7908262000621565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b6000806200063083856200087b565b905083811015620006845760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016200048e565b90505b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620006b857607f821691505b602082108103620006d957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200061c57600081815260208120601f850160051c81016020861015620007085750805b601f850160051c820191505b81811015620007295782815560010162000714565b505050505050565b81516001600160401b038111156200074d576200074d6200068d565b62000765816200075e8454620006a3565b84620006df565b602080601f8311600181146200079d5760008415620007845750858301515b600019600386901b1c1916600185901b17855562000729565b600085815260208120601f198616915b82811015620007ce57888601518255948401946001909101908401620007ad565b5085821015620007ed5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200081057600080fd5b81516001600160a01b03811681146200068457600080fd5b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000687576200068762000828565b6000826200087657634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000687576200068762000828565b60805160a051612e6e620008fd60003960008181610657015281816116800152818161171c015281816117480152611b1a0152600081816104a701528181611adc01528181612603015281816126bc015281816126f80152818161277201526127cf0152612e6e6000f3fe6080604052600436106103bc5760003560e01c80638095d564116101f2578063c876d0b91161010d578063e7ad9fcd116100a0578063f63743421161006f578063f637434214610b0f578063f8b45b0514610b25578063fe575a8714610b3b578063fe72b27a14610b6b57600080fd5b8063e7ad9fcd14610a99578063f11a24d314610ab9578063f2fde38b14610acf578063f421764814610aef57600080fd5b8063d257b34f116100dc578063d257b34f14610a07578063d85ba06314610a27578063dd62ed3e14610a3d578063e2f4560514610a8357600080fd5b8063c876d0b9146109a2578063c8c8ebe4146109bc578063c9413b26146109d2578063c9567bf9146109f257600080fd5b80639fccce3211610185578063a9059cbb11610154578063a9059cbb14610913578063b62496f514610933578063bbc0c74214610963578063c02466681461098257600080fd5b80639fccce32146108b1578063a0d82dc5146108c7578063a457c2d7146108dd578063a4c82a00146108fd57600080fd5b8063924de9b7116101c1578063924de9b71461085057806395d89b41146108705780639c3b4fdc146108855780639ec22c0e1461089b57600080fd5b80638095d564146107dc5780638da5cb5b146107fc5780638ea5220f1461081a578063921369131461083a57600080fd5b80632e82f1a0116102e25780636a486a8e11610275578063715018a611610244578063715018a6146107715780637571336a1461078657806375f0a874146107a65780637bce5a04146107c657600080fd5b80636a486a8e146106cc5780636ddd1713146106e25780636f9170f61461070257806370a082311461073b57600080fd5b806339509351116102b1578063395093511461062557806349bd5a5e146106455780634a62bb65146106795780634fbee1931461069357600080fd5b80632e82f1a0146105ba5780632e8de6a0146105d45780632f18dd91146105f4578063313ce5671461060957600080fd5b8063184c16c51161035a57806323b872dd1161032957806323b872dd1461055857806323ba8fa81461057857806327c8f8351461058e5780632c3e486c146105a457600080fd5b8063184c16c514610500578063199ffc72146105165780631a8145bb1461052c5780631f3fed8f1461054257600080fd5b806310d5de531161039657806310d5de531461044557806311a582c3146104755780631694505e1461049557806318160ddd146104e157600080fd5b806306fdde03146103c857806308a925ce146103f3578063095ea7b31461041557600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103dd610b8b565b6040516103ea919061284d565b60405180910390f35b3480156103ff57600080fd5b5061041361040e3660046128ce565b610c1d565b005b34801561042157600080fd5b50610435610430366004612903565b610cd1565b60405190151581526020016103ea565b34801561045157600080fd5b5061043561046036600461292f565b60236020526000908152604090205460ff1681565b34801561048157600080fd5b5061041361049036600461294c565b610ce8565b3480156104a157600080fd5b506104c97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103ea565b3480156104ed57600080fd5b506002545b6040519081526020016103ea565b34801561050c57600080fd5b506104f2600f5481565b34801561052257600080fd5b506104f2600b5481565b34801561053857600080fd5b506104f2601e5481565b34801561054e57600080fd5b506104f2601d5481565b34801561056457600080fd5b5061043561057336600461296e565b610e49565b34801561058457600080fd5b506104f260205481565b34801561059a57600080fd5b506104c961dead81565b3480156105b057600080fd5b506104f2600d5481565b3480156105c657600080fd5b50600c546104359060ff1681565b3480156105e057600080fd5b506104136105ef36600461292f565b610eb2565b34801561060057600080fd5b50610435610efe565b34801561061557600080fd5b50604051601281526020016103ea565b34801561063157600080fd5b50610435610640366004612903565b610f47565b34801561065157600080fd5b506104c97f000000000000000000000000000000000000000000000000000000000000000081565b34801561068557600080fd5b506011546104359060ff1681565b34801561069f57600080fd5b506104356106ae36600461292f565b6001600160a01b031660009081526022602052604090205460ff1690565b3480156106d857600080fd5b506104f260195481565b3480156106ee57600080fd5b506011546104359062010000900460ff1681565b34801561070e57600080fd5b5061043561071d36600461292f565b6001600160a01b031660009081526021602052604090205460ff1690565b34801561074757600080fd5b506104f261075636600461292f565b6001600160a01b031660009081526020819052604090205490565b34801561077d57600080fd5b50610413610f7d565b34801561079257600080fd5b506104136107a13660046128ce565b610ff1565b3480156107b257600080fd5b506006546104c9906001600160a01b031681565b3480156107d257600080fd5b506104f260165481565b3480156107e857600080fd5b506104136107f73660046129af565b611046565b34801561080857600080fd5b506005546001600160a01b03166104c9565b34801561082657600080fd5b506007546104c9906001600160a01b031681565b34801561084657600080fd5b506104f2601a5481565b34801561085c57600080fd5b5061041361086b3660046129db565b6110ee565b34801561087c57600080fd5b506103dd611134565b34801561089157600080fd5b506104f260185481565b3480156108a757600080fd5b506104f260105481565b3480156108bd57600080fd5b506104f2601f5481565b3480156108d357600080fd5b506104f2601c5481565b3480156108e957600080fd5b506104356108f8366004612903565b611143565b34801561090957600080fd5b506104f2600e5481565b34801561091f57600080fd5b5061043561092e366004612903565b611192565b34801561093f57600080fd5b5061043561094e36600461292f565b60246020526000908152604090205460ff1681565b34801561096f57600080fd5b5060115461043590610100900460ff1681565b34801561098e57600080fd5b5061041361099d3660046128ce565b61119f565b3480156109ae57600080fd5b506014546104359060ff1681565b3480156109c857600080fd5b506104f260085481565b3480156109de57600080fd5b506104136109ed36600461292f565b6111f4565b3480156109fe57600080fd5b50610413611240565b348015610a1357600080fd5b50610435610a223660046129f6565b611281565b348015610a3357600080fd5b506104f260155481565b348015610a4957600080fd5b506104f2610a58366004612a0f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a8f57600080fd5b506104f260095481565b348015610aa557600080fd5b50610413610ab4366004612a48565b611346565b348015610ac557600080fd5b506104f260175481565b348015610adb57600080fd5b50610413610aea36600461292f565b6113f4565b348015610afb57600080fd5b50610413610b0a366004612a90565b6114df565b348015610b1b57600080fd5b506104f2601b5481565b348015610b3157600080fd5b506104f2600a5481565b348015610b4757600080fd5b50610435610b5636600461292f565b60136020526000908152604090205460ff1681565b348015610b7757600080fd5b50610435610b863660046129f6565b611575565b606060038054610b9a90612b55565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc690612b55565b8015610c135780601f10610be857610100808354040283529160200191610c13565b820191906000526020600020905b815481529060010190602001808311610bf657829003601f168201915b5050505050905090565b6005546001600160a01b03163314610c505760405162461bcd60e51b8152600401610c4790612b8f565b60405180910390fd5b6001600160a01b038216610ca65760405162461bcd60e51b815260206004820152601760248201527f416464726573732073686f756c64206e6f7420626520300000000000000000006044820152606401610c47565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b6000610cde3384846117c7565b5060015b92915050565b6005546001600160a01b03163314610d125760405162461bcd60e51b8152600401610c4790612b8f565b6001821015610d7a5760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526d6c6f776572207468616e202e312560901b6064820152608401610c47565b670de0b6b3a76400006103e883610d9060025490565b610d9a9190612bda565b610da49190612bf1565b610dae9190612bf1565b6008556001811015610e0e5760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e206044820152622e312560e81b6064820152608401610c47565b670de0b6b3a76400006103e882610e2460025490565b610e2e9190612bda565b610e389190612bf1565b610e429190612bf1565b600a555050565b6000610e568484846118ec565b610ea88433610ea385604051806060016040528060288152602001612dec602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061220d565b6117c7565b5060019392505050565b6005546001600160a01b03163314610edc5760405162461bcd60e51b8152600401610c4790612b8f565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b03163314610f2b5760405162461bcd60e51b8152600401610c4790612b8f565b506011805460ff19908116909155601480549091169055600190565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610cde918590610ea39086612247565b6005546001600160a01b03163314610fa75760405162461bcd60e51b8152600401610c4790612b8f565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461101b5760405162461bcd60e51b8152600401610c4790612b8f565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110705760405162461bcd60e51b8152600401610c4790612b8f565b6016839055601782905560188190558061108a8385612c13565b6110949190612c13565b6015819055602810156110e95760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420343025206f72206c6573730000006044820152606401610c47565b505050565b6005546001600160a01b031633146111185760405162461bcd60e51b8152600401610c4790612b8f565b60118054911515620100000262ff000019909216919091179055565b606060048054610b9a90612b55565b6000610cde3384610ea385604051806060016040528060258152602001612e14602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061220d565b6000610cde3384846118ec565b6005546001600160a01b031633146111c95760405162461bcd60e51b8152600401610c4790612b8f565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461121e5760405162461bcd60e51b8152600401610c4790612b8f565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461126a5760405162461bcd60e51b8152600401610c4790612b8f565b6011805462ffff0019166201010017905542600e55565b6005546000906001600160a01b031633146112ae5760405162461bcd60e51b8152600401610c4790612b8f565b600182111561131a5760405162461bcd60e51b815260206004820152603260248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527137101892903a37ba30b61039bab838363c9760711b6064820152608401610c47565b60648261132660025490565b6113309190612bda565b61133a9190612bf1565b6009555060015b919050565b6005546001600160a01b031633146113705760405162461bcd60e51b8152600401610c4790612b8f565b601a849055601b839055601c82905560208190558161138f8486612c13565b6113999190612c13565b6019819055602810156113ee5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420343025206f72206c6573730000006044820152606401610c47565b50505050565b6005546001600160a01b0316331461141e5760405162461bcd60e51b8152600401610c4790612b8f565b6001600160a01b0381166114835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c47565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146115095760405162461bcd60e51b8152600401610c4790612b8f565b60005b81518110156115715760016021600084848151811061152d5761152d612c26565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061156981612c3c565b91505061150c565b5050565b6005546000906001600160a01b031633146115a25760405162461bcd60e51b8152600401610c4790612b8f565b600f546010546115b29190612c13565b42116116005760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610c47565b6103e88211156116655760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610c47565b426010556040516370a0823160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600482015260009030906370a0823190602401602060405180830381865afa1580156116d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f49190612c55565b905060006127106117058584612bda565b61170f9190612bf1565b90508015611744576117447f000000000000000000000000000000000000000000000000000000000000000061dead836122ad565b60007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117a457600080fd5b505af11580156117b8573d6000803e3d6000fd5b50600198975050505050505050565b6001600160a01b0383166118295760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c47565b6001600160a01b03821661188a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c47565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166119125760405162461bcd60e51b8152600401610c4790612c6e565b6001600160a01b0382166119385760405162461bcd60e51b8152600401610c4790612cb3565b6001600160a01b03831660009081526013602052604090205460ff1615801561197a57506001600160a01b03821660009081526013602052604090205460ff16155b6119b45760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b6044820152606401610c47565b806000036119c8576110e9838360006122ad565b60115460ff1615611e63576005546001600160a01b038481169116148015906119ff57506005546001600160a01b03838116911614155b8015611a1357506001600160a01b03821615155b8015611a2a57506001600160a01b03821661dead14155b8015611a405750600554600160a01b900460ff16155b15611e6357601154610100900460ff16611ab6576001600160a01b03831660009081526021602052604090205460ff1680611a9357506001600160a01b03821660009081526021602052604090205460ff165b80611aad57503360009081526021602052604090205460ff165b611ab657600080fd5b60145460ff1615611bfd576005546001600160a01b03838116911614801590611b1157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611b4f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15611bfd57326000908152601260205260409020544311611bea5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610c47565b3260009081526012602052604090204390555b6001600160a01b03831660009081526024602052604090205460ff168015611c3e57506001600160a01b03821660009081526023602052604090205460ff16155b15611d2257600854811115611cb35760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610c47565b600a546001600160a01b038316600090815260208190526040902054611cd99083612c13565b1115611d1d5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c47565b611e63565b6001600160a01b03821660009081526024602052604090205460ff168015611d6357506001600160a01b03831660009081526023602052604090205460ff16155b15611dd957600854811115611d1d5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610c47565b6001600160a01b03821660009081526023602052604090205460ff16611e6357600a546001600160a01b038316600090815260208190526040902054611e1f9083612c13565b1115611e635760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c47565b3060009081526020819052604090205460095481108015908190611e8f575060115462010000900460ff165b8015611ea55750600554600160a01b900460ff16155b8015611eca57506001600160a01b03851660009081526024602052604090205460ff16155b8015611eef57506001600160a01b03851660009081526022602052604090205460ff16155b8015611f1457506001600160a01b03841660009081526022602052604090205460ff16155b15611f42576005805460ff60a01b1916600160a01b179055611f346123b6565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526022602052604090205460ff600160a01b909204821615911680611f9057506001600160a01b03851660009081526022602052604090205460ff165b15611f99575060005b600081156121f9576001600160a01b03861660009081526024602052604090205460ff168015611fcb57506000601954115b156120fe576001600160a01b03871660009081526021602052604090205460ff168061200f57506001600160a01b03861660009081526021602052604090205460ff165b8061202957503360009081526021602052604090205460ff165b156120ee576064601954866020546120419190612bda565b61204b9190612bda565b6120559190612bf1565b9050601954601b54826120689190612bda565b6120729190612bf1565b601e60008282546120839190612c13565b9091555050601954601c546120989083612bda565b6120a29190612bf1565b601f60008282546120b39190612c13565b9091555050601954601a546120c89083612bda565b6120d29190612bf1565b601d60008282546120e39190612c13565b909155506121db9050565b60646019548661204b9190612bda565b6001600160a01b03871660009081526024602052604090205460ff16801561212857506000601554115b156121db5760646015548661213d9190612bda565b6121479190612bf1565b90506015546017548261215a9190612bda565b6121649190612bf1565b601e60008282546121759190612c13565b909155505060155460185461218a9083612bda565b6121949190612bf1565b601f60008282546121a59190612c13565b90915550506015546016546121ba9083612bda565b6121c49190612bf1565b601d60008282546121d59190612c13565b90915550505b80156121ec576121ec8730836122ad565b6121f68186612cf6565b94505b6122048787876122ad565b50505050505050565b600081848411156122315760405162461bcd60e51b8152600401610c47919061284d565b50600061223e8486612cf6565b95945050505050565b6000806122548385612c13565b9050838110156122a65760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c47565b9392505050565b6001600160a01b0383166122d35760405162461bcd60e51b8152600401610c4790612c6e565b6001600160a01b0382166122f95760405162461bcd60e51b8152600401610c4790612cb3565b61233681604051806060016040528060268152602001612dc6602691396001600160a01b038616600090815260208190526040902054919061220d565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546123659082612247565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016118df565b3060009081526020819052604081205490506000601f54601d54601e546123dd9190612c13565b6123e79190612c13565b905060008215806123f6575081155b1561240057505050565b60095461240e906014612bda565b83111561242657600954612423906014612bda565b92505b6000600283601e54866124399190612bda565b6124439190612bf1565b61244d9190612bf1565b9050600061245b8286612cf6565b905047612467826125ac565b60006124738247612cf6565b9050600086601d54836124869190612bda565b6124909190612bf1565b9050600087601f54846124a39190612bda565b6124ad9190612bf1565b90506000816124bc8486612cf6565b6124c69190612cf6565b6000601e819055601d819055601f8190556007546040519293506001600160a01b031691849181818185875af1925050503d8060008114612523576040519150601f19603f3d011682016040523d82523d6000602084013e612528565b606091505b5090985050861580159061253c5750600081115b1561254b5761254b878261276c565b6006546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612598576040519150601f19603f3d011682016040523d82523d6000602084013e61259d565b606091505b50505050505050505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106125e1576125e1612c26565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561265f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126839190612d09565b8160018151811061269657612696612c26565b60200260200101906001600160a01b031690816001600160a01b0316815250506126e1307f0000000000000000000000000000000000000000000000000000000000000000846117c7565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612736908590600090869030904290600401612d26565b600060405180830381600087803b15801561275057600080fd5b505af1158015612764573d6000803e3d6000fd5b505050505050565b612797307f0000000000000000000000000000000000000000000000000000000000000000846117c7565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612821573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128469190612d97565b5050505050565b600060208083528351808285015260005b8181101561287a5785810183015185820160400152820161285e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146128b057600080fd5b50565b80356113418161289b565b8035801515811461134157600080fd5b600080604083850312156128e157600080fd5b82356128ec8161289b565b91506128fa602084016128be565b90509250929050565b6000806040838503121561291657600080fd5b82356129218161289b565b946020939093013593505050565b60006020828403121561294157600080fd5b81356122a68161289b565b6000806040838503121561295f57600080fd5b50508035926020909101359150565b60008060006060848603121561298357600080fd5b833561298e8161289b565b9250602084013561299e8161289b565b929592945050506040919091013590565b6000806000606084860312156129c457600080fd5b505081359360208301359350604090920135919050565b6000602082840312156129ed57600080fd5b6122a6826128be565b600060208284031215612a0857600080fd5b5035919050565b60008060408385031215612a2257600080fd5b8235612a2d8161289b565b91506020830135612a3d8161289b565b809150509250929050565b60008060008060808587031215612a5e57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215612aa357600080fd5b823567ffffffffffffffff80821115612abb57600080fd5b818501915085601f830112612acf57600080fd5b813581811115612ae157612ae1612a7a565b8060051b604051601f19603f83011681018181108582111715612b0657612b06612a7a565b604052918252848201925083810185019188831115612b2457600080fd5b938501935b82851015612b4957612b3a856128b3565b84529385019392850192612b29565b98975050505050505050565b600181811c90821680612b6957607f821691505b602082108103612b8957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610ce257610ce2612bc4565b600082612c0e57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610ce257610ce2612bc4565b634e487b7160e01b600052603260045260246000fd5b600060018201612c4e57612c4e612bc4565b5060010190565b600060208284031215612c6757600080fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ce257610ce2612bc4565b600060208284031215612d1b57600080fd5b81516122a68161289b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612d765784516001600160a01b031683529383019391830191600101612d51565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612dac57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201968c162106e878e9c459ac467ad9028e187e38638aea8362b0a73d7d05977be64736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x6080604052600436106103bc5760003560e01c80638095d564116101f2578063c876d0b91161010d578063e7ad9fcd116100a0578063f63743421161006f578063f637434214610b0f578063f8b45b0514610b25578063fe575a8714610b3b578063fe72b27a14610b6b57600080fd5b8063e7ad9fcd14610a99578063f11a24d314610ab9578063f2fde38b14610acf578063f421764814610aef57600080fd5b8063d257b34f116100dc578063d257b34f14610a07578063d85ba06314610a27578063dd62ed3e14610a3d578063e2f4560514610a8357600080fd5b8063c876d0b9146109a2578063c8c8ebe4146109bc578063c9413b26146109d2578063c9567bf9146109f257600080fd5b80639fccce3211610185578063a9059cbb11610154578063a9059cbb14610913578063b62496f514610933578063bbc0c74214610963578063c02466681461098257600080fd5b80639fccce32146108b1578063a0d82dc5146108c7578063a457c2d7146108dd578063a4c82a00146108fd57600080fd5b8063924de9b7116101c1578063924de9b71461085057806395d89b41146108705780639c3b4fdc146108855780639ec22c0e1461089b57600080fd5b80638095d564146107dc5780638da5cb5b146107fc5780638ea5220f1461081a578063921369131461083a57600080fd5b80632e82f1a0116102e25780636a486a8e11610275578063715018a611610244578063715018a6146107715780637571336a1461078657806375f0a874146107a65780637bce5a04146107c657600080fd5b80636a486a8e146106cc5780636ddd1713146106e25780636f9170f61461070257806370a082311461073b57600080fd5b806339509351116102b1578063395093511461062557806349bd5a5e146106455780634a62bb65146106795780634fbee1931461069357600080fd5b80632e82f1a0146105ba5780632e8de6a0146105d45780632f18dd91146105f4578063313ce5671461060957600080fd5b8063184c16c51161035a57806323b872dd1161032957806323b872dd1461055857806323ba8fa81461057857806327c8f8351461058e5780632c3e486c146105a457600080fd5b8063184c16c514610500578063199ffc72146105165780631a8145bb1461052c5780631f3fed8f1461054257600080fd5b806310d5de531161039657806310d5de531461044557806311a582c3146104755780631694505e1461049557806318160ddd146104e157600080fd5b806306fdde03146103c857806308a925ce146103f3578063095ea7b31461041557600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103dd610b8b565b6040516103ea919061284d565b60405180910390f35b3480156103ff57600080fd5b5061041361040e3660046128ce565b610c1d565b005b34801561042157600080fd5b50610435610430366004612903565b610cd1565b60405190151581526020016103ea565b34801561045157600080fd5b5061043561046036600461292f565b60236020526000908152604090205460ff1681565b34801561048157600080fd5b5061041361049036600461294c565b610ce8565b3480156104a157600080fd5b506104c97f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103ea565b3480156104ed57600080fd5b506002545b6040519081526020016103ea565b34801561050c57600080fd5b506104f2600f5481565b34801561052257600080fd5b506104f2600b5481565b34801561053857600080fd5b506104f2601e5481565b34801561054e57600080fd5b506104f2601d5481565b34801561056457600080fd5b5061043561057336600461296e565b610e49565b34801561058457600080fd5b506104f260205481565b34801561059a57600080fd5b506104c961dead81565b3480156105b057600080fd5b506104f2600d5481565b3480156105c657600080fd5b50600c546104359060ff1681565b3480156105e057600080fd5b506104136105ef36600461292f565b610eb2565b34801561060057600080fd5b50610435610efe565b34801561061557600080fd5b50604051601281526020016103ea565b34801561063157600080fd5b50610435610640366004612903565b610f47565b34801561065157600080fd5b506104c97f000000000000000000000000f805410078e33292bf3a8c49aba04fa886bfa63381565b34801561068557600080fd5b506011546104359060ff1681565b34801561069f57600080fd5b506104356106ae36600461292f565b6001600160a01b031660009081526022602052604090205460ff1690565b3480156106d857600080fd5b506104f260195481565b3480156106ee57600080fd5b506011546104359062010000900460ff1681565b34801561070e57600080fd5b5061043561071d36600461292f565b6001600160a01b031660009081526021602052604090205460ff1690565b34801561074757600080fd5b506104f261075636600461292f565b6001600160a01b031660009081526020819052604090205490565b34801561077d57600080fd5b50610413610f7d565b34801561079257600080fd5b506104136107a13660046128ce565b610ff1565b3480156107b257600080fd5b506006546104c9906001600160a01b031681565b3480156107d257600080fd5b506104f260165481565b3480156107e857600080fd5b506104136107f73660046129af565b611046565b34801561080857600080fd5b506005546001600160a01b03166104c9565b34801561082657600080fd5b506007546104c9906001600160a01b031681565b34801561084657600080fd5b506104f2601a5481565b34801561085c57600080fd5b5061041361086b3660046129db565b6110ee565b34801561087c57600080fd5b506103dd611134565b34801561089157600080fd5b506104f260185481565b3480156108a757600080fd5b506104f260105481565b3480156108bd57600080fd5b506104f2601f5481565b3480156108d357600080fd5b506104f2601c5481565b3480156108e957600080fd5b506104356108f8366004612903565b611143565b34801561090957600080fd5b506104f2600e5481565b34801561091f57600080fd5b5061043561092e366004612903565b611192565b34801561093f57600080fd5b5061043561094e36600461292f565b60246020526000908152604090205460ff1681565b34801561096f57600080fd5b5060115461043590610100900460ff1681565b34801561098e57600080fd5b5061041361099d3660046128ce565b61119f565b3480156109ae57600080fd5b506014546104359060ff1681565b3480156109c857600080fd5b506104f260085481565b3480156109de57600080fd5b506104136109ed36600461292f565b6111f4565b3480156109fe57600080fd5b50610413611240565b348015610a1357600080fd5b50610435610a223660046129f6565b611281565b348015610a3357600080fd5b506104f260155481565b348015610a4957600080fd5b506104f2610a58366004612a0f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a8f57600080fd5b506104f260095481565b348015610aa557600080fd5b50610413610ab4366004612a48565b611346565b348015610ac557600080fd5b506104f260175481565b348015610adb57600080fd5b50610413610aea36600461292f565b6113f4565b348015610afb57600080fd5b50610413610b0a366004612a90565b6114df565b348015610b1b57600080fd5b506104f2601b5481565b348015610b3157600080fd5b506104f2600a5481565b348015610b4757600080fd5b50610435610b5636600461292f565b60136020526000908152604090205460ff1681565b348015610b7757600080fd5b50610435610b863660046129f6565b611575565b606060038054610b9a90612b55565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc690612b55565b8015610c135780601f10610be857610100808354040283529160200191610c13565b820191906000526020600020905b815481529060010190602001808311610bf657829003601f168201915b5050505050905090565b6005546001600160a01b03163314610c505760405162461bcd60e51b8152600401610c4790612b8f565b60405180910390fd5b6001600160a01b038216610ca65760405162461bcd60e51b815260206004820152601760248201527f416464726573732073686f756c64206e6f7420626520300000000000000000006044820152606401610c47565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b6000610cde3384846117c7565b5060015b92915050565b6005546001600160a01b03163314610d125760405162461bcd60e51b8152600401610c4790612b8f565b6001821015610d7a5760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526d6c6f776572207468616e202e312560901b6064820152608401610c47565b670de0b6b3a76400006103e883610d9060025490565b610d9a9190612bda565b610da49190612bf1565b610dae9190612bf1565b6008556001811015610e0e5760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e206044820152622e312560e81b6064820152608401610c47565b670de0b6b3a76400006103e882610e2460025490565b610e2e9190612bda565b610e389190612bf1565b610e429190612bf1565b600a555050565b6000610e568484846118ec565b610ea88433610ea385604051806060016040528060288152602001612dec602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061220d565b6117c7565b5060019392505050565b6005546001600160a01b03163314610edc5760405162461bcd60e51b8152600401610c4790612b8f565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b03163314610f2b5760405162461bcd60e51b8152600401610c4790612b8f565b506011805460ff19908116909155601480549091169055600190565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610cde918590610ea39086612247565b6005546001600160a01b03163314610fa75760405162461bcd60e51b8152600401610c4790612b8f565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461101b5760405162461bcd60e51b8152600401610c4790612b8f565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110705760405162461bcd60e51b8152600401610c4790612b8f565b6016839055601782905560188190558061108a8385612c13565b6110949190612c13565b6015819055602810156110e95760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420343025206f72206c6573730000006044820152606401610c47565b505050565b6005546001600160a01b031633146111185760405162461bcd60e51b8152600401610c4790612b8f565b60118054911515620100000262ff000019909216919091179055565b606060048054610b9a90612b55565b6000610cde3384610ea385604051806060016040528060258152602001612e14602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061220d565b6000610cde3384846118ec565b6005546001600160a01b031633146111c95760405162461bcd60e51b8152600401610c4790612b8f565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461121e5760405162461bcd60e51b8152600401610c4790612b8f565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461126a5760405162461bcd60e51b8152600401610c4790612b8f565b6011805462ffff0019166201010017905542600e55565b6005546000906001600160a01b031633146112ae5760405162461bcd60e51b8152600401610c4790612b8f565b600182111561131a5760405162461bcd60e51b815260206004820152603260248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527137101892903a37ba30b61039bab838363c9760711b6064820152608401610c47565b60648261132660025490565b6113309190612bda565b61133a9190612bf1565b6009555060015b919050565b6005546001600160a01b031633146113705760405162461bcd60e51b8152600401610c4790612b8f565b601a849055601b839055601c82905560208190558161138f8486612c13565b6113999190612c13565b6019819055602810156113ee5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420343025206f72206c6573730000006044820152606401610c47565b50505050565b6005546001600160a01b0316331461141e5760405162461bcd60e51b8152600401610c4790612b8f565b6001600160a01b0381166114835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c47565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146115095760405162461bcd60e51b8152600401610c4790612b8f565b60005b81518110156115715760016021600084848151811061152d5761152d612c26565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061156981612c3c565b91505061150c565b5050565b6005546000906001600160a01b031633146115a25760405162461bcd60e51b8152600401610c4790612b8f565b600f546010546115b29190612c13565b42116116005760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610c47565b6103e88211156116655760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610c47565b426010556040516370a0823160e01b81526001600160a01b037f000000000000000000000000f805410078e33292bf3a8c49aba04fa886bfa63316600482015260009030906370a0823190602401602060405180830381865afa1580156116d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f49190612c55565b905060006127106117058584612bda565b61170f9190612bf1565b90508015611744576117447f000000000000000000000000f805410078e33292bf3a8c49aba04fa886bfa63361dead836122ad565b60007f000000000000000000000000f805410078e33292bf3a8c49aba04fa886bfa6339050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117a457600080fd5b505af11580156117b8573d6000803e3d6000fd5b50600198975050505050505050565b6001600160a01b0383166118295760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c47565b6001600160a01b03821661188a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c47565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166119125760405162461bcd60e51b8152600401610c4790612c6e565b6001600160a01b0382166119385760405162461bcd60e51b8152600401610c4790612cb3565b6001600160a01b03831660009081526013602052604090205460ff1615801561197a57506001600160a01b03821660009081526013602052604090205460ff16155b6119b45760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b6044820152606401610c47565b806000036119c8576110e9838360006122ad565b60115460ff1615611e63576005546001600160a01b038481169116148015906119ff57506005546001600160a01b03838116911614155b8015611a1357506001600160a01b03821615155b8015611a2a57506001600160a01b03821661dead14155b8015611a405750600554600160a01b900460ff16155b15611e6357601154610100900460ff16611ab6576001600160a01b03831660009081526021602052604090205460ff1680611a9357506001600160a01b03821660009081526021602052604090205460ff165b80611aad57503360009081526021602052604090205460ff165b611ab657600080fd5b60145460ff1615611bfd576005546001600160a01b03838116911614801590611b1157507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b8015611b4f57507f000000000000000000000000f805410078e33292bf3a8c49aba04fa886bfa6336001600160a01b0316826001600160a01b031614155b15611bfd57326000908152601260205260409020544311611bea5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610c47565b3260009081526012602052604090204390555b6001600160a01b03831660009081526024602052604090205460ff168015611c3e57506001600160a01b03821660009081526023602052604090205460ff16155b15611d2257600854811115611cb35760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610c47565b600a546001600160a01b038316600090815260208190526040902054611cd99083612c13565b1115611d1d5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c47565b611e63565b6001600160a01b03821660009081526024602052604090205460ff168015611d6357506001600160a01b03831660009081526023602052604090205460ff16155b15611dd957600854811115611d1d5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610c47565b6001600160a01b03821660009081526023602052604090205460ff16611e6357600a546001600160a01b038316600090815260208190526040902054611e1f9083612c13565b1115611e635760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c47565b3060009081526020819052604090205460095481108015908190611e8f575060115462010000900460ff165b8015611ea55750600554600160a01b900460ff16155b8015611eca57506001600160a01b03851660009081526024602052604090205460ff16155b8015611eef57506001600160a01b03851660009081526022602052604090205460ff16155b8015611f1457506001600160a01b03841660009081526022602052604090205460ff16155b15611f42576005805460ff60a01b1916600160a01b179055611f346123b6565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526022602052604090205460ff600160a01b909204821615911680611f9057506001600160a01b03851660009081526022602052604090205460ff165b15611f99575060005b600081156121f9576001600160a01b03861660009081526024602052604090205460ff168015611fcb57506000601954115b156120fe576001600160a01b03871660009081526021602052604090205460ff168061200f57506001600160a01b03861660009081526021602052604090205460ff165b8061202957503360009081526021602052604090205460ff165b156120ee576064601954866020546120419190612bda565b61204b9190612bda565b6120559190612bf1565b9050601954601b54826120689190612bda565b6120729190612bf1565b601e60008282546120839190612c13565b9091555050601954601c546120989083612bda565b6120a29190612bf1565b601f60008282546120b39190612c13565b9091555050601954601a546120c89083612bda565b6120d29190612bf1565b601d60008282546120e39190612c13565b909155506121db9050565b60646019548661204b9190612bda565b6001600160a01b03871660009081526024602052604090205460ff16801561212857506000601554115b156121db5760646015548661213d9190612bda565b6121479190612bf1565b90506015546017548261215a9190612bda565b6121649190612bf1565b601e60008282546121759190612c13565b909155505060155460185461218a9083612bda565b6121949190612bf1565b601f60008282546121a59190612c13565b90915550506015546016546121ba9083612bda565b6121c49190612bf1565b601d60008282546121d59190612c13565b90915550505b80156121ec576121ec8730836122ad565b6121f68186612cf6565b94505b6122048787876122ad565b50505050505050565b600081848411156122315760405162461bcd60e51b8152600401610c47919061284d565b50600061223e8486612cf6565b95945050505050565b6000806122548385612c13565b9050838110156122a65760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c47565b9392505050565b6001600160a01b0383166122d35760405162461bcd60e51b8152600401610c4790612c6e565b6001600160a01b0382166122f95760405162461bcd60e51b8152600401610c4790612cb3565b61233681604051806060016040528060268152602001612dc6602691396001600160a01b038616600090815260208190526040902054919061220d565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546123659082612247565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016118df565b3060009081526020819052604081205490506000601f54601d54601e546123dd9190612c13565b6123e79190612c13565b905060008215806123f6575081155b1561240057505050565b60095461240e906014612bda565b83111561242657600954612423906014612bda565b92505b6000600283601e54866124399190612bda565b6124439190612bf1565b61244d9190612bf1565b9050600061245b8286612cf6565b905047612467826125ac565b60006124738247612cf6565b9050600086601d54836124869190612bda565b6124909190612bf1565b9050600087601f54846124a39190612bda565b6124ad9190612bf1565b90506000816124bc8486612cf6565b6124c69190612cf6565b6000601e819055601d819055601f8190556007546040519293506001600160a01b031691849181818185875af1925050503d8060008114612523576040519150601f19603f3d011682016040523d82523d6000602084013e612528565b606091505b5090985050861580159061253c5750600081115b1561254b5761254b878261276c565b6006546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612598576040519150601f19603f3d011682016040523d82523d6000602084013e61259d565b606091505b50505050505050505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106125e1576125e1612c26565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561265f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126839190612d09565b8160018151811061269657612696612c26565b60200260200101906001600160a01b031690816001600160a01b0316815250506126e1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846117c7565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612736908590600090869030904290600401612d26565b600060405180830381600087803b15801561275057600080fd5b505af1158015612764573d6000803e3d6000fd5b505050505050565b612797307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846117c7565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612821573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128469190612d97565b5050505050565b600060208083528351808285015260005b8181101561287a5785810183015185820160400152820161285e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146128b057600080fd5b50565b80356113418161289b565b8035801515811461134157600080fd5b600080604083850312156128e157600080fd5b82356128ec8161289b565b91506128fa602084016128be565b90509250929050565b6000806040838503121561291657600080fd5b82356129218161289b565b946020939093013593505050565b60006020828403121561294157600080fd5b81356122a68161289b565b6000806040838503121561295f57600080fd5b50508035926020909101359150565b60008060006060848603121561298357600080fd5b833561298e8161289b565b9250602084013561299e8161289b565b929592945050506040919091013590565b6000806000606084860312156129c457600080fd5b505081359360208301359350604090920135919050565b6000602082840312156129ed57600080fd5b6122a6826128be565b600060208284031215612a0857600080fd5b5035919050565b60008060408385031215612a2257600080fd5b8235612a2d8161289b565b91506020830135612a3d8161289b565b809150509250929050565b60008060008060808587031215612a5e57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215612aa357600080fd5b823567ffffffffffffffff80821115612abb57600080fd5b818501915085601f830112612acf57600080fd5b813581811115612ae157612ae1612a7a565b8060051b604051601f19603f83011681018181108582111715612b0657612b06612a7a565b604052918252848201925083810185019188831115612b2457600080fd5b938501935b82851015612b4957612b3a856128b3565b84529385019392850192612b29565b98975050505050505050565b600181811c90821680612b6957607f821691505b602082108103612b8957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610ce257610ce2612bc4565b600082612c0e57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610ce257610ce2612bc4565b634e487b7160e01b600052603260045260246000fd5b600060018201612c4e57612c4e612bc4565b5060010190565b600060208284031215612c6757600080fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ce257610ce2612bc4565b600060208284031215612d1b57600080fd5b81516122a68161289b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612d765784516001600160a01b031683529383019391830191600101612d51565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612dac57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201968c162106e878e9c459ac467ad9028e187e38638aea8362b0a73d7d05977be64736f6c63430008130033
Deployed Bytecode Sourcemap
27917:15929:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10237:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35447:193;;;;;;;;;;-1:-1:-1;35447:193:0;;;;;:::i;:::-;;:::i;:::-;;12404:169;;;;;;;;;;-1:-1:-1;12404:169:0;;;;;:::i;:::-;;:::i;:::-;;;1812:14:1;;1805:22;1787:41;;1775:2;1760:18;12404:169:0;1647:187:1;29644:64:0;;;;;;;;;;-1:-1:-1;29644:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;33219:364;;;;;;;;;;-1:-1:-1;33219:364:0;;;;;:::i;:::-;;:::i;27961:51::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2535:32:1;;;2517:51;;2505:2;2490:18;27961:51:0;2344:230:1;11357:108:0;;;;;;;;;;-1:-1:-1;11445:12:0;;11357:108;;;2725:25:1;;;2713:2;2698:18;11357:108:0;2579:177:1;28539:47:0;;;;;;;;;;;;;;;;28349:36;;;;;;;;;;;;;;;;29375:33;;;;;;;;;;;;;;;;29335;;;;;;;;;;;;;;;;13055:355;;;;;;;;;;-1:-1:-1;13055:355:0;;;;;:::i;:::-;;:::i;29449:24::-;;;;;;;;;;;;;;;;28064:53;;;;;;;;;;;;28110:6;28064:53;;28445:45;;;;;;;;;;;;;;;;28405:33;;;;;;;;;;-1:-1:-1;28405:33:0;;;;;;;;35044:140;;;;;;;;;;-1:-1:-1;35044:140:0;;;;;:::i;:::-;;:::i;32708:162::-;;;;;;;;;;;;;:::i;11199:93::-;;;;;;;;;;-1:-1:-1;11199:93:0;;11282:2;3572:36:1;;3560:2;3545:18;11199:93:0;3430:184:1;13819:218:0;;;;;;;;;;-1:-1:-1;13819:218:0;;;;;:::i;:::-;;:::i;28019:38::-;;;;;;;;;;;;;;;28637:33;;;;;;;;;;-1:-1:-1;28637:33:0;;;;;;;;35314:125;;;;;;;;;;-1:-1:-1;35314:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;35403:28:0;35379:4;35403:28;;;:19;:28;;;;;;;;;35314:125;29186:28;;;;;;;;;;;;;;;;28717:31;;;;;;;;;;-1:-1:-1;28717:31:0;;;;;;;;;;;32332:111;;;;;;;;;;-1:-1:-1;32332:111:0;;;;;:::i;:::-;-1:-1:-1;;;;;32417:18:0;32393:4;32417:18;;;:9;:18;;;;;;;;;32332:111;11528:127;;;;;;;;;;-1:-1:-1;11528:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;11629:18:0;11602:7;11629:18;;;;;;;;;;;;11528:127;24702:148;;;;;;;;;;;;;:::i;33591:144::-;;;;;;;;;;-1:-1:-1;33591:144:0;;;;;:::i;:::-;;:::i;28156:30::-;;;;;;;;;;-1:-1:-1;28156:30:0;;;;-1:-1:-1;;;;;28156:30:0;;;29075;;;;;;;;;;;;;;;;33948:369;;;;;;;;;;-1:-1:-1;33948:369:0;;;;;:::i;:::-;;:::i;24060:79::-;;;;;;;;;;-1:-1:-1;24125:6:0;;-1:-1:-1;;;;;24125:6:0;24060:79;;28193:24;;;;;;;;;;-1:-1:-1;28193:24:0;;;;-1:-1:-1;;;;;28193:24:0;;;29221:31;;;;;;;;;;;;;;;;33835:101;;;;;;;;;;-1:-1:-1;33835:101:0;;;;;:::i;:::-;;:::i;10456:104::-;;;;;;;;;;;;;:::i;29149:24::-;;;;;;;;;;;;;;;;28593:35;;;;;;;;;;;;;;;;29415:27;;;;;;;;;;;;;;;;29297:25;;;;;;;;;;;;;;;;14540:269;;;;;;;;;;-1:-1:-1;14540:269:0;;;;;:::i;:::-;;:::i;28497:29::-;;;;;;;;;;;;;;;;11868:175;;;;;;;;;;-1:-1:-1;11868:175:0;;;;;:::i;:::-;;:::i;29866:58::-;;;;;;;;;;-1:-1:-1;29866:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28677:33;;;;;;;;;;-1:-1:-1;28677:33:0;;;;;;;;;;;34766:132;;;;;;;;;;-1:-1:-1;34766:132:0;;;;;:::i;:::-;;:::i;28993:39::-;;;;;;;;;;-1:-1:-1;28993:39:0;;;;;;;;28230:35;;;;;;;;;;;;;;;;35196:110;;;;;;;;;;-1:-1:-1;35196:110:0;;;;;:::i;:::-;;:::i;32499:153::-;;;;;;;;;;;;;:::i;32944:263::-;;;;;;;;;;-1:-1:-1;32944:263:0;;;;;:::i;:::-;;:::i;29041:27::-;;;;;;;;;;;;;;;;12106:151;;;;;;;;;;-1:-1:-1;12106:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;12222:18:0;;;12195:7;12222:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12106:151;28272:33;;;;;;;;;;;;;;;;34328:430;;;;;;;;;;-1:-1:-1;34328:430:0;;;;;:::i;:::-;;:::i;29112:30::-;;;;;;;;;;;;;;;;25005:244;;;;;;;;;;-1:-1:-1;25005:244:0;;;;;:::i;:::-;;:::i;32132:192::-;;;;;;;;;;-1:-1:-1;32132:192:0;;;;;:::i;:::-;;:::i;29259:31::-;;;;;;;;;;;;;;;;28312:24;;;;;;;;;;;;;;;;28940:46;;;;;;;;;;-1:-1:-1;28940:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;42863:980;;;;;;;;;;-1:-1:-1;42863:980:0;;;;;:::i;:::-;;:::i;10237:100::-;10291:13;10324:5;10317:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10237:100;:::o;35447:193::-;24272:6;;-1:-1:-1;;;;;24272:6:0;5718:10;24272:22;24264:67;;;;-1:-1:-1;;;24264:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;35540:22:0;::::1;35532:57;;;::::0;-1:-1:-1;;;35532:57:0;;7299:2:1;35532:57:0::1;::::0;::::1;7281:21:1::0;7338:2;7318:18;;;7311:30;7377:25;7357:18;;;7350:53;7420:18;;35532:57:0::1;7097:347:1::0;35532:57:0::1;-1:-1:-1::0;;;;;35600:23:0;;;::::1;;::::0;;;:13:::1;:23;::::0;;;;:32;;-1:-1:-1;;35600:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35447:193::o;12404:169::-;12487:4;12504:39;5718:10;12527:7;12536:6;12504:8;:39::i;:::-;-1:-1:-1;12561:4:0;12404:169;;;;;:::o;33219:364::-;24272:6;;-1:-1:-1;;;;;24272:6:0;5718:10;24272:22;24264:67;;;;-1:-1:-1;;;24264:67:0;;;;;;;:::i;:::-;33325:1:::1;33316:5;:10;;33308:69;;;::::0;-1:-1:-1;;;33308:69:0;;7651:2:1;33308:69:0::1;::::0;::::1;7633:21:1::0;7690:2;7670:18;;;7663:30;7729:34;7709:18;;;7702:62;-1:-1:-1;;;7780:18:1;;;7773:44;7834:19;;33308:69:0::1;7449:410:1::0;33308:69:0::1;33442:4;33436;33428:5;33412:13;11445:12:::0;;;11357:108;33412:13:::1;:21;;;;:::i;:::-;:28;;;;:::i;:::-;33411:35;;;;:::i;:::-;33388:20;:58:::0;33475:1:::1;33465:11:::0;::::1;;33457:59;;;::::0;-1:-1:-1;;;33457:59:0;;8593:2:1;33457:59:0::1;::::0;::::1;8575:21:1::0;8632:2;8612:18;;;8605:30;8671:34;8651:18;;;8644:62;-1:-1:-1;;;8722:18:1;;;8715:33;8765:19;;33457:59:0::1;8391:399:1::0;33457:59:0::1;33571:4;33565;33556:6;33540:13;11445:12:::0;;;11357:108;33540:13:::1;:22;;;;:::i;:::-;:29;;;;:::i;:::-;33539:36;;;;:::i;:::-;33527:9;:48:::0;-1:-1:-1;;33219:364:0:o;13055:355::-;13195:4;13212:36;13222:6;13230:9;13241:6;13212:9;:36::i;:::-;13259:121;13268:6;5718:10;13290:89;13328:6;13290:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13290:19:0;;;;;;:11;:19;;;;;;;;5718:10;13290:33;;;;;;;;;;:37;:89::i;:::-;13259:8;:121::i;:::-;-1:-1:-1;13398:4:0;13055:355;;;;;:::o;35044:140::-;24272:6;;-1:-1:-1;;;;;24272:6:0;5718:10;24272:22;24264:67;;;;-1:-1:-1;;;24264:67:0;;;;;;;:::i;:::-;35140:15:::1;:36:::0;;-1:-1:-1;;;;;;35140:36:0::1;-1:-1:-1::0;;;;;35140:36:0;;;::::1;::::0;;;::::1;::::0;;35044:140::o;32708:162::-;24272:6;;32763:4;;-1:-1:-1;;;;;24272:6:0;5718:10;24272:22;24264:67;;;;-1:-1:-1;;;24264:67:0;;;;;;;:::i;:::-;-1:-1:-1;32779:14:0::1;:22:::0;;-1:-1:-1;;32779:22:0;;::::1;::::0;;;32812:20:::1;:28:::0;;;;::::1;::::0;;32779:22;32708:162;:::o;13819:218::-;5718:10;13907:4;13956:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13956:34:0;;;;;;;;;;13907:4;;13924:83;;13947:7;;13956:50;;13995:10;13956:38;:50::i;24702:148::-;24272:6;;-1:-1:-1;;;;;24272:6:0;5718:10;24272:22;24264:67;;;;-1:-1:-1;;;24264:67:0;;;;;;;:::i;:::-;24793:6:::1;::::0;24772:40:::1;::::0;24809:1:::1;::::0;-1:-1:-1;;;;;24793:6:0::1;::::0;24772:40:::1;::::0;24809:1;;24772:40:::1;24823:6;:19:::0;;-1:-1:-1;;;;;;24823:19:0::1;::::0;;24702:148::o;33591:144::-;24272:6;;-1:-1:-1;;;;;24272:6:0;5718:10;24272:22;24264:67;;;;-1:-1:-1;;;24264:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33681:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;33681:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33591:144::o;33948:369::-;24272:6;;-1:-1:-1;;;;;24272:6:0;5718:10;24272:22;24264:67;;;;-1:-1:-1;;;24264:67:0;;;;;;;:::i;:::-;34064:15:::1;:31:::0;;;34106:15:::1;:31:::0;;;34148:9:::1;:19:::0;;;34160:7;34193:33:::1;34124:13:::0;34082;34193:33:::1;:::i;:::-;:45;;;;:::i;:::-;34178:12;:60:::0;;;34273:2:::1;-1:-1:-1::0;34257:18:0::1;34249:60;;;::::0;-1:-1:-1;;;34249:60:0;;9127:2:1;34249:60:0::1;::::0;::::1;9109:21:1::0;9166:2;9146:18;;;9139:30;9205:31;9185:18;;;9178:59;9254:18;;34249:60:0::1;8925:353:1::0;34249:60:0::1;33948:369:::0;;;:::o;33835:101::-;24272:6;;-1:-1:-1;;;;;24272:6:0;5718:10;24272:22;24264:67;;;;-1:-1:-1;;;24264:67:0;;;;;;;:::i;:::-;33907:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;33907:21:0;;::::1;::::0;;;::::1;::::0;;33835:101::o;10456:104::-;10512:13;10545:7;10538:14;;;;;:::i;14540:269::-;14633:4;14650:129;5718:10;14673:7;14682:96;14721:15;14682:96;;;;;;;;;;;;;;;;;5718:10;14682:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14682:34:0;;;;;;;;;;;;:38;:96::i;11868:175::-;11954:4;11971:42;5718:10;11995:9;12006:6;11971:9;:42::i;34766:132::-;24272:6;;-1:-1:-1;;;;;24272:6:0;5718:10;24272:22;24264:67;;;;-1:-1:-1;;;24264:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34851:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:39;;-1:-1:-1;;34851:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34766:132::o;35196:110::-;24272:6;;-1:-1:-1;;;;;24272:6:0;5718:10;24272:22;24264:67;;;;-1:-1:-1;;;24264:67:0;;;;;;;:::i;:::-;35277:9:::1;:21:::0;;-1:-1:-1;;;;;;35277:21:0::1;-1:-1:-1::0;;;;;35277:21:0;;;::::1;::::0;;;::::1;::::0;;35196:110::o;32499:153::-;24272:6;;-1:-1:-1;;;;;24272:6:0;5718:10;24272:22;24264:67;;;;-1:-1:-1;;;24264:67:0;;;;;;;:::i;:::-;32552:13:::1;:20:::0;;-1:-1:-1;;32583:18:0;;;;;32629:15:::1;32612:14;:32:::0;32499:153::o;32944:263::-;24272:6;;33025:4;;-1:-1:-1;;;;;24272:6:0;5718:10;24272:22;24264:67;;;;-1:-1:-1;;;24264:67:0;;;;;;;:::i;:::-;33061:1:::1;33048:9;:14;;33040:77;;;::::0;-1:-1:-1;;;33040:77:0;;9485:2:1;33040:77:0::1;::::0;::::1;9467:21:1::0;9524:2;9504:18;;;9497:30;9563:34;9543:18;;;9536:62;-1:-1:-1;;;9614:18:1;;;9607:48;9672:19;;33040:77:0::1;9283:414:1::0;33040:77:0::1;33176:3;33164:9;33148:13;11445:12:::0;;;11357:108;33148:13:::1;:25;;;;:::i;:::-;:31;;;;:::i;:::-;33127:18;:52:::0;-1:-1:-1;33196:4:0::1;24342:1;32944:263:::0;;;:::o;34328:430::-;24272:6;;-1:-1:-1;;;;;24272:6:0;5718:10;24272:22;24264:67;;;;-1:-1:-1;;;24264:67:0;;;;;;;:::i;:::-;34465:16:::1;:32:::0;;;34508:16:::1;:32:::0;;;34551:10:::1;:20:::0;;;34582:9:::1;:21:::0;;;34564:7;34630:35:::1;34527:13:::0;34484;34630:35:::1;:::i;:::-;:48;;;;:::i;:::-;34614:13;:64:::0;;;34714:2:::1;-1:-1:-1::0;34697:19:0::1;34689:61;;;::::0;-1:-1:-1;;;34689:61:0;;9127:2:1;34689:61:0::1;::::0;::::1;9109:21:1::0;9166:2;9146:18;;;9139:30;9205:31;9185:18;;;9178:59;9254:18;;34689:61:0::1;8925:353:1::0;34689:61:0::1;34328:430:::0;;;;:::o;25005:244::-;24272:6;;-1:-1:-1;;;;;24272:6:0;5718:10;24272:22;24264:67;;;;-1:-1:-1;;;24264:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25094:22:0;::::1;25086:73;;;::::0;-1:-1:-1;;;25086:73:0;;9904:2:1;25086:73:0::1;::::0;::::1;9886:21:1::0;9943:2;9923:18;;;9916:30;9982:34;9962:18;;;9955:62;-1:-1:-1;;;10033:18:1;;;10026:36;10079:19;;25086:73:0::1;9702:402:1::0;25086:73:0::1;25196:6;::::0;25175:38:::1;::::0;-1:-1:-1;;;;;25175:38:0;;::::1;::::0;25196:6:::1;::::0;25175:38:::1;::::0;25196:6:::1;::::0;25175:38:::1;25224:6;:17:::0;;-1:-1:-1;;;;;;25224:17:0::1;-1:-1:-1::0;;;;;25224:17:0;;;::::1;::::0;;;::::1;::::0;;25005:244::o;32132:192::-;24272:6;;-1:-1:-1;;;;;24272:6:0;5718:10;24272:22;24264:67;;;;-1:-1:-1;;;24264:67:0;;;;;;;:::i;:::-;32216:9:::1;32211:106;32235:10;:17;32231:1;:21;32211:106;;;32301:4;32274:9;:24;32284:10;32295:1;32284:13;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;32274:24:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;32274:24:0;:31;;-1:-1:-1;;32274:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32254:3;::::1;::::0;::::1;:::i;:::-;;;;32211:106;;;;32132:192:::0;:::o;42863:980::-;24272:6;;42947:4;;-1:-1:-1;;;;;24272:6:0;5718:10;24272:22;24264:67;;;;-1:-1:-1;;;24264:67:0;;;;;;;:::i;:::-;43012:19:::1;;42989:20;;:42;;;;:::i;:::-;42971:15;:60;42963:106;;;::::0;-1:-1:-1;;;42963:106:0;;10583:2:1;42963:106:0::1;::::0;::::1;10565:21:1::0;;;10602:18;;;10595:30;10661:34;10641:18;;;10634:62;10713:18;;42963:106:0::1;10381:356:1::0;42963:106:0::1;43099:4;43088:7;:15;;43080:70;;;::::0;-1:-1:-1;;;43080:70:0;;10944:2:1;43080:70:0::1;::::0;::::1;10926:21:1::0;10983:2;10963:18;;;10956:30;11022:34;11002:18;;;10995:62;-1:-1:-1;;;11073:18:1;;;11066:40;11123:19;;43080:70:0::1;10742:406:1::0;43080:70:0::1;43184:15;43161:20;:38:::0;43293:29:::1;::::0;-1:-1:-1;;;43293:29:0;;-1:-1:-1;;;;;43308:13:0::1;2535:32:1::0;43293:29:0::1;::::0;::::1;2517:51:1::0;43262:28:0::1;::::0;43293:4:::1;::::0;:14:::1;::::0;2490:18:1;;43293:29:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43262:60:::0;-1:-1:-1;43380:20:0::1;43434:5;43403:30;43426:7:::0;43262:60;43403:30:::1;:::i;:::-;:36;;;;:::i;:::-;43380:59:::0;-1:-1:-1;43552:16:0;;43548:109:::1;;43584:61;43600:13;43623:6;43632:12;43584:15;:61::i;:::-;43740:19;43777:13;43740:51;;43802:4;-1:-1:-1::0;;;;;43802:9:0::1;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;43831:4:0::1;::::0;42863:980;-1:-1:-1;;;;;;;;42863:980:0:o;17726:380::-;-1:-1:-1;;;;;17862:19:0;;17854:68;;;;-1:-1:-1;;;17854:68:0;;11544:2:1;17854:68:0;;;11526:21:1;11583:2;11563:18;;;11556:30;11622:34;11602:18;;;11595:62;-1:-1:-1;;;11673:18:1;;;11666:34;11717:19;;17854:68:0;11342:400:1;17854:68:0;-1:-1:-1;;;;;17941:21:0;;17933:68;;;;-1:-1:-1;;;17933:68:0;;11949:2:1;17933:68:0;;;11931:21:1;11988:2;11968:18;;;11961:30;12027:34;12007:18;;;12000:62;-1:-1:-1;;;12078:18:1;;;12071:32;12120:19;;17933:68:0;11747:398:1;17933:68:0;-1:-1:-1;;;;;18014:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18066:32;;2725:25:1;;;18066:32:0;;2698:18:1;18066:32:0;;;;;;;;17726:380;;;:::o;35648:4532::-;-1:-1:-1;;;;;35780:18:0;;35772:68;;;;-1:-1:-1;;;35772:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35859:16:0;;35851:64;;;;-1:-1:-1;;;35851:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35935:19:0;;;;;;:13;:19;;;;;;;;35934:20;:42;;;;-1:-1:-1;;;;;;35959:17:0;;;;;;:13;:17;;;;;;;;35958:18;35934:42;35926:65;;;;-1:-1:-1;;;35926:65:0;;13162:2:1;35926:65:0;;;13144:21:1;13201:2;13181:18;;;13174:30;-1:-1:-1;;;13220:18:1;;;13213:41;13271:18;;35926:65:0;12960:335:1;35926:65:0;36006:6;36016:1;36006:11;36003:92;;36034:28;36050:4;36056:2;36060:1;36034:15;:28::i;36003:92::-;36118:14;;;;36115:1820;;;24125:6;;-1:-1:-1;;;;;36170:15:0;;;24125:6;;36170:15;;;;:49;;-1:-1:-1;24125:6:0;;-1:-1:-1;;;;;36206:13:0;;;24125:6;;36206:13;;36170:49;:86;;;;-1:-1:-1;;;;;;36240:16:0;;;;36170:86;:128;;;;-1:-1:-1;;;;;;36277:21:0;;36291:6;36277:21;;36170:128;:158;;;;-1:-1:-1;36320:8:0;;-1:-1:-1;;;36320:8:0;;;;36319:9;36170:158;36148:1776;;;36366:13;;;;;;;36362:127;;-1:-1:-1;;;;;36411:15:0;;;;;;:9;:15;;;;;;;;;:32;;-1:-1:-1;;;;;;36430:13:0;;;;;;:9;:13;;;;;;;;36411:32;:57;;;-1:-1:-1;36457:10:0;36447:21;;;;:9;:21;;;;;;;;36411:57;36403:66;;;;;;36647:20;;;;36643:423;;;24125:6;;-1:-1:-1;;;;;36695:13:0;;;24125:6;;36695:13;;;;:47;;;36726:15;-1:-1:-1;;;;;36712:30:0;:2;-1:-1:-1;;;;;36712:30:0;;;36695:47;:79;;;;;36760:13;-1:-1:-1;;;;;36746:28:0;:2;-1:-1:-1;;;;;36746:28:0;;;36695:79;36691:356;;;36839:9;36810:39;;;;:28;:39;;;;;;36852:12;-1:-1:-1;36802:140:0;;;;-1:-1:-1;;;36802:140:0;;13502:2:1;36802:140:0;;;13484:21:1;13541:2;13521:18;;;13514:30;13580:34;13560:18;;;13553:62;13651:34;13631:18;;;13624:62;-1:-1:-1;;;13702:19:1;;;13695:40;13752:19;;36802:140:0;13300:477:1;36802:140:0;36998:9;36969:39;;;;:28;:39;;;;;37011:12;36969:54;;36691:356;-1:-1:-1;;;;;37135:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;37171:35:0;;;;;;:31;:35;;;;;;;;37170:36;37135:71;37131:778;;;37253:20;;37243:6;:30;;37235:96;;;;-1:-1:-1;;;37235:96:0;;13984:2:1;37235:96:0;;;13966:21:1;14023:2;14003:18;;;13996:30;14062:34;14042:18;;;14035:62;-1:-1:-1;;;14113:18:1;;;14106:51;14174:19;;37235:96:0;13782:417:1;37235:96:0;37392:9;;-1:-1:-1;;;;;11629:18:0;;11602:7;11629:18;;;;;;;;;;;37366:22;;:6;:22;:::i;:::-;:35;;37358:67;;;;-1:-1:-1;;;37358:67:0;;14406:2:1;37358:67:0;;;14388:21:1;14445:2;14425:18;;;14418:30;-1:-1:-1;;;14464:18:1;;;14457:49;14523:18;;37358:67:0;14204:343:1;37358:67:0;37131:778;;;-1:-1:-1;;;;;37519:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;37553:37:0;;;;;;:31;:37;;;;;;;;37552:38;37519:71;37515:394;;;37637:20;;37627:6;:30;;37619:97;;;;-1:-1:-1;;;37619:97:0;;14754:2:1;37619:97:0;;;14736:21:1;14793:2;14773:18;;;14766:30;14832:34;14812:18;;;14805:62;-1:-1:-1;;;14883:18:1;;;14876:52;14945:19;;37619:97:0;14552:418:1;37515:394:0;-1:-1:-1;;;;;37763:35:0;;;;;;:31;:35;;;;;;;;37759:150;;37856:9;;-1:-1:-1;;;;;11629:18:0;;11602:7;11629:18;;;;;;;;;;;37830:22;;:6;:22;:::i;:::-;:35;;37822:67;;;;-1:-1:-1;;;37822:67:0;;14406:2:1;37822:67:0;;;14388:21:1;14445:2;14425:18;;;14418:30;-1:-1:-1;;;14464:18:1;;;14457:49;14523:18;;37822:67:0;14204:343:1;37822:67:0;37998:4;37949:28;11629:18;;;;;;;;;;;38064;;38040:42;;;;;;;38113:35;;-1:-1:-1;38137:11:0;;;;;;;38113:35;:61;;;;-1:-1:-1;38166:8:0;;-1:-1:-1;;;38166:8:0;;;;38165:9;38113:61;:110;;;;-1:-1:-1;;;;;;38192:31:0;;;;;;:25;:31;;;;;;;;38191:32;38113:110;:153;;;;-1:-1:-1;;;;;;38241:25:0;;;;;;:19;:25;;;;;;;;38240:26;38113:153;:194;;;;-1:-1:-1;;;;;;38284:23:0;;;;;;:19;:23;;;;;;;;38283:24;38113:194;38095:338;;;38334:8;:15;;-1:-1:-1;;;;38334:15:0;-1:-1:-1;;;38334:15:0;;;38378:10;:8;:10::i;:::-;38405:8;:16;;-1:-1:-1;;;;38405:16:0;;;38095:338;38461:8;;-1:-1:-1;;;;;38570:25:0;;38445:12;38570:25;;;:19;:25;;;;;;38461:8;-1:-1:-1;;;38461:8:0;;;;;38460:9;;38570:25;;:52;;-1:-1:-1;;;;;;38599:23:0;;;;;;:19;:23;;;;;;;;38570:52;38567:99;;;-1:-1:-1;38649:5:0;38567:99;38686:12;38790:7;38787:1340;;;-1:-1:-1;;;;;38841:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;38890:1;38874:13;;:17;38841:50;38837:1121;;;-1:-1:-1;;;;;38914:15:0;;;;;;:9;:15;;;;;;;;;:32;;-1:-1:-1;;;;;;38933:13:0;;;;;;:9;:13;;;;;;;;38914:32;:57;;;-1:-1:-1;38960:10:0;38950:21;;;;:9;:21;;;;;;;;38914:57;38911:665;;;39033:3;39019:13;;39010:6;38998:9;;:18;;;;:::i;:::-;:34;;;;:::i;:::-;:38;;;;:::i;:::-;38991:45;;39103:13;;39084:16;;39077:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;39055:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;39171:13:0;;39158:10;;39151:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;39135:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;39251:13:0;;39232:16;;39225:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;39203:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;38837:1121:0;;-1:-1:-1;38837:1121:0;38911:665;39343:3;39329:13;;39320:6;:22;;;;:::i;38837:1121::-;-1:-1:-1;;;;;39622:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;39672:1;39657:12;;:16;39622:51;39619:339;;;39720:3;39707:12;;39698:6;:21;;;;:::i;:::-;:25;;;;:::i;:::-;39691:32;;39786:12;;39768:15;;39761:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;39739:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;39852:12:0;;39840:9;;39833:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;39817:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;39930:12:0;;39912:15;;39905:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;39883:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;39619:339:0;39989:8;;39986:93;;40021:42;40037:4;40051;40058;40021:15;:42::i;:::-;40101:14;40111:4;40101:14;;:::i;:::-;;;38787:1340;40139:33;40155:4;40161:2;40165:6;40139:15;:33::i;:::-;35761:4419;;;;35648:4532;;;:::o;20007:192::-;20093:7;20129:12;20121:6;;;;20113:29;;;;-1:-1:-1;;;20113:29:0;;;;;;;;:::i;:::-;-1:-1:-1;20153:9:0;20165:5;20169:1;20165;:5;:::i;:::-;20153:17;20007:192;-1:-1:-1;;;;;20007:192:0:o;19104:181::-;19162:7;;19194:5;19198:1;19194;:5;:::i;:::-;19182:17;;19223:1;19218;:6;;19210:46;;;;-1:-1:-1;;;19210:46:0;;15310:2:1;19210:46:0;;;15292:21:1;15349:2;15329:18;;;15322:30;15388:29;15368:18;;;15361:57;15435:18;;19210:46:0;15108:351:1;19210:46:0;19276:1;19104:181;-1:-1:-1;;;19104:181:0:o;15299:573::-;-1:-1:-1;;;;;15439:20:0;;15431:70;;;;-1:-1:-1;;;15431:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15520:23:0;;15512:71;;;;-1:-1:-1;;;15512:71:0;;;;;;;:::i;:::-;15676;15698:6;15676:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15676:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;15656:17:0;;;:9;:17;;;;;;;;;;;:91;;;;15781:20;;;;;;;:32;;15806:6;15781:24;:32::i;:::-;-1:-1:-1;;;;;15758:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;15829:35;2725:25:1;;;15758:20:0;;15829:35;;;;;;2698:18:1;15829:35:0;2579:177:1;41332:1523:0;41415:4;41371:23;11629:18;;;;;;;;;;;41371:50;;41432:25;41502:12;;41481:18;;41460;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;41432:82;-1:-1:-1;41525:12:0;41561:20;;;:46;;-1:-1:-1;41585:22:0;;41561:46;41558:60;;;41610:7;;;41332:1523::o;41558:60::-;41651:18;;:23;;41672:2;41651:23;:::i;:::-;41633:15;:41;41630:111;;;41706:18;;:23;;41727:2;41706:23;:::i;:::-;41688:41;;41630:111;41810:23;41895:1;41875:17;41854:18;;41836:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;41810:86;-1:-1:-1;41907:26:0;41936:33;41810:86;41936:15;:33;:::i;:::-;41907:62;-1:-1:-1;42018:21:0;42052:36;41907:62;42052:16;:36::i;:::-;42110:18;42131:41;42155:17;42131:21;:41;:::i;:::-;42110:62;;42193:23;42251:17;42232:18;;42219:10;:31;;;;:::i;:::-;:49;;;;:::i;:::-;42193:75;;42279:17;42325;42312:12;;42299:10;:25;;;;:::i;:::-;:43;;;;:::i;:::-;42279:63;-1:-1:-1;42363:23:0;42279:63;42389:28;42402:15;42389:10;:28;:::i;:::-;:40;;;;:::i;:::-;42471:1;42450:18;:22;;;42483:18;:22;;;42516:12;:16;;;42574:9;;42566:45;;42363:66;;-1:-1:-1;;;;;;42574:9:0;;42597;;42566:45;42471:1;42566:45;42597:9;42574;42566:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42553:58:0;;-1:-1:-1;;42635:19:0;;;;;:42;;;42676:1;42658:15;:19;42635:42;42632:119;;;42693:46;42706:15;42723;42693:12;:46::i;:::-;42792:15;;42784:63;;-1:-1:-1;;;;;42792:15:0;;;;42821:21;;42784:63;;;;42821:21;42792:15;42784:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;41332:1523:0:o;40188:601::-;40340:16;;;40354:1;40340:16;;;;;;;;40316:21;;40340:16;;;;;;;;;;-1:-1:-1;40340:16:0;40316:40;;40385:4;40367;40372:1;40367:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;40367:23:0;;;-1:-1:-1;;;;;40367:23:0;;;;;40411:15;-1:-1:-1;;;;;40411:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40401:4;40406:1;40401:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;40401:32:0;;;-1:-1:-1;;;;;40401:32:0;;;;;40446:62;40463:4;40478:15;40496:11;40446:8;:62::i;:::-;40547:224;;-1:-1:-1;;;40547:224:0;;-1:-1:-1;;;;;40547:15:0;:66;;;;:224;;40628:11;;40654:1;;40698:4;;40725;;40745:15;;40547:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40243:546;40188:601;:::o;40807:517::-;40955:62;40972:4;40987:15;41005:11;40955:8;:62::i;:::-;41060:256;;-1:-1:-1;;;41060:256:0;;41132:4;41060:256;;;17256:34:1;17306:18;;;17299:34;;;41178:1:0;17349:18:1;;;17342:34;;;17392:18;;;17385:34;28110:6:0;17435:19:1;;;17428:44;41290:15:0;17488:19:1;;;17481:35;41060:15:0;-1:-1:-1;;;;;41060:31:0;;;;41099:9;;17190:19:1;;41060:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;40807:517;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:134::-;771:20;;800:31;771:20;800:31;:::i;842:160::-;907:20;;963:13;;956:21;946:32;;936:60;;992:1;989;982:12;1007:315;1072:6;1080;1133:2;1121:9;1112:7;1108:23;1104:32;1101:52;;;1149:1;1146;1139:12;1101:52;1188:9;1175:23;1207:31;1232:5;1207:31;:::i;:::-;1257:5;-1:-1:-1;1281:35:1;1312:2;1297:18;;1281:35;:::i;:::-;1271:45;;1007:315;;;;;:::o;1327:::-;1395:6;1403;1456:2;1444:9;1435:7;1431:23;1427:32;1424:52;;;1472:1;1469;1462:12;1424:52;1511:9;1498:23;1530:31;1555:5;1530:31;:::i;:::-;1580:5;1632:2;1617:18;;;;1604:32;;-1:-1:-1;;;1327:315:1:o;1839:247::-;1898:6;1951:2;1939:9;1930:7;1926:23;1922:32;1919:52;;;1967:1;1964;1957:12;1919:52;2006:9;1993:23;2025:31;2050:5;2025:31;:::i;2091:248::-;2159:6;2167;2220:2;2208:9;2199:7;2195:23;2191:32;2188:52;;;2236:1;2233;2226:12;2188:52;-1:-1:-1;;2259:23:1;;;2329:2;2314:18;;;2301:32;;-1:-1:-1;2091:248:1:o;2761:456::-;2838:6;2846;2854;2907:2;2895:9;2886:7;2882:23;2878:32;2875:52;;;2923:1;2920;2913:12;2875:52;2962:9;2949:23;2981:31;3006:5;2981:31;:::i;:::-;3031:5;-1:-1:-1;3088:2:1;3073:18;;3060:32;3101:33;3060:32;3101:33;:::i;:::-;2761:456;;3153:7;;-1:-1:-1;;;3207:2:1;3192:18;;;;3179:32;;2761:456::o;3619:316::-;3696:6;3704;3712;3765:2;3753:9;3744:7;3740:23;3736:32;3733:52;;;3781:1;3778;3771:12;3733:52;-1:-1:-1;;3804:23:1;;;3874:2;3859:18;;3846:32;;-1:-1:-1;3925:2:1;3910:18;;;3897:32;;3619:316;-1:-1:-1;3619:316:1:o;3940:180::-;3996:6;4049:2;4037:9;4028:7;4024:23;4020:32;4017:52;;;4065:1;4062;4055:12;4017:52;4088:26;4104:9;4088:26;:::i;4125:180::-;4184:6;4237:2;4225:9;4216:7;4212:23;4208:32;4205:52;;;4253:1;4250;4243:12;4205:52;-1:-1:-1;4276:23:1;;4125:180;-1:-1:-1;4125:180:1:o;4310:388::-;4378:6;4386;4439:2;4427:9;4418:7;4414:23;4410:32;4407:52;;;4455:1;4452;4445:12;4407:52;4494:9;4481:23;4513:31;4538:5;4513:31;:::i;:::-;4563:5;-1:-1:-1;4620:2:1;4605:18;;4592:32;4633:33;4592:32;4633:33;:::i;:::-;4685:7;4675:17;;;4310:388;;;;;:::o;4703:385::-;4789:6;4797;4805;4813;4866:3;4854:9;4845:7;4841:23;4837:33;4834:53;;;4883:1;4880;4873:12;4834:53;-1:-1:-1;;4906:23:1;;;4976:2;4961:18;;4948:32;;-1:-1:-1;5027:2:1;5012:18;;4999:32;;5078:2;5063:18;5050:32;;-1:-1:-1;4703:385:1;-1:-1:-1;4703:385:1:o;5093:127::-;5154:10;5149:3;5145:20;5142:1;5135:31;5185:4;5182:1;5175:15;5209:4;5206:1;5199:15;5225:1121;5309:6;5340:2;5383;5371:9;5362:7;5358:23;5354:32;5351:52;;;5399:1;5396;5389:12;5351:52;5439:9;5426:23;5468:18;5509:2;5501:6;5498:14;5495:34;;;5525:1;5522;5515:12;5495:34;5563:6;5552:9;5548:22;5538:32;;5608:7;5601:4;5597:2;5593:13;5589:27;5579:55;;5630:1;5627;5620:12;5579:55;5666:2;5653:16;5688:2;5684;5681:10;5678:36;;;5694:18;;:::i;:::-;5740:2;5737:1;5733:10;5772:2;5766:9;5835:2;5831:7;5826:2;5822;5818:11;5814:25;5806:6;5802:38;5890:6;5878:10;5875:22;5870:2;5858:10;5855:18;5852:46;5849:72;;;5901:18;;:::i;:::-;5937:2;5930:22;5987:18;;;6021:15;;;;-1:-1:-1;6063:11:1;;;6059:20;;;6091:19;;;6088:39;;;6123:1;6120;6113:12;6088:39;6147:11;;;;6167:148;6183:6;6178:3;6175:15;6167:148;;;6249:23;6268:3;6249:23;:::i;:::-;6237:36;;6200:12;;;;6293;;;;6167:148;;;6334:6;5225:1121;-1:-1:-1;;;;;;;;5225:1121:1:o;6351:380::-;6430:1;6426:12;;;;6473;;;6494:61;;6548:4;6540:6;6536:17;6526:27;;6494:61;6601:2;6593:6;6590:14;6570:18;6567:38;6564:161;;6647:10;6642:3;6638:20;6635:1;6628:31;6682:4;6679:1;6672:15;6710:4;6707:1;6700:15;6564:161;;6351:380;;;:::o;6736:356::-;6938:2;6920:21;;;6957:18;;;6950:30;7016:34;7011:2;6996:18;;6989:62;7083:2;7068:18;;6736:356::o;7864:127::-;7925:10;7920:3;7916:20;7913:1;7906:31;7956:4;7953:1;7946:15;7980:4;7977:1;7970:15;7996:168;8069:9;;;8100;;8117:15;;;8111:22;;8097:37;8087:71;;8138:18;;:::i;8169:217::-;8209:1;8235;8225:132;;8279:10;8274:3;8270:20;8267:1;8260:31;8314:4;8311:1;8304:15;8342:4;8339:1;8332:15;8225:132;-1:-1:-1;8371:9:1;;8169:217::o;8795:125::-;8860:9;;;8881:10;;;8878:36;;;8894:18;;:::i;10109:127::-;10170:10;10165:3;10161:20;10158:1;10151:31;10201:4;10198:1;10191:15;10225:4;10222:1;10215:15;10241:135;10280:3;10301:17;;;10298:43;;10321:18;;:::i;:::-;-1:-1:-1;10368:1:1;10357:13;;10241:135::o;11153:184::-;11223:6;11276:2;11264:9;11255:7;11251:23;11247:32;11244:52;;;11292:1;11289;11282:12;11244:52;-1:-1:-1;11315:16:1;;11153:184;-1:-1:-1;11153:184:1:o;12150:401::-;12352:2;12334:21;;;12391:2;12371:18;;;12364:30;12430:34;12425:2;12410:18;;12403:62;-1:-1:-1;;;12496:2:1;12481:18;;12474:35;12541:3;12526:19;;12150:401::o;12556:399::-;12758:2;12740:21;;;12797:2;12777:18;;;12770:30;12836:34;12831:2;12816:18;;12809:62;-1:-1:-1;;;12902:2:1;12887:18;;12880:33;12945:3;12930:19;;12556:399::o;14975:128::-;15042:9;;;15063:11;;;15060:37;;;15077:18;;:::i;15674:251::-;15744:6;15797:2;15785:9;15776:7;15772:23;15768:32;15765:52;;;15813:1;15810;15803:12;15765:52;15845:9;15839:16;15864:31;15889:5;15864:31;:::i;15930:980::-;16192:4;16240:3;16229:9;16225:19;16271:6;16260:9;16253:25;16297:2;16335:6;16330:2;16319:9;16315:18;16308:34;16378:3;16373:2;16362:9;16358:18;16351:31;16402:6;16437;16431:13;16468:6;16460;16453:22;16506:3;16495:9;16491:19;16484:26;;16545:2;16537:6;16533:15;16519:29;;16566:1;16576:195;16590:6;16587:1;16584:13;16576:195;;;16655:13;;-1:-1:-1;;;;;16651:39:1;16639:52;;16746:15;;;;16711:12;;;;16687:1;16605:9;16576:195;;;-1:-1:-1;;;;;;;16827:32:1;;;;16822:2;16807:18;;16800:60;-1:-1:-1;;;16891:3:1;16876:19;16869:35;16788:3;15930:980;-1:-1:-1;;;15930:980:1:o;17527:306::-;17615:6;17623;17631;17684:2;17672:9;17663:7;17659:23;17655:32;17652:52;;;17700:1;17697;17690:12;17652:52;17729:9;17723:16;17713:26;;17779:2;17768:9;17764:18;17758:25;17748:35;;17823:2;17812:9;17808:18;17802:25;17792:35;;17527:306;;;;;:::o
Swarm Source
ipfs://1968c162106e878e9c459ac467ad9028e187e38638aea8362b0a73d7d05977be
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.