Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000,000 StowChain
Holders
40
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
72,106,821,031.18487054673942281 StowChainValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
StowChain
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-19 */ /** Website - https://www.stowchain.io/ Telegram - https://t.me/StowChain Medium - https://medium.com/@StowChain */ // SPDX-License-Identifier: MIT pragma solidity 0.8.9; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract StowChain is ERC20, Ownable { using SafeMath for uint256; 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 = 50; // 25 = .25% bool public lpBurnEnabled = true; uint256 public lpBurnFrequency = 100 seconds; uint256 public lastLpBurnTime; uint256 public manualBurnFrequency = 1 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 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; /******************/ // 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; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet); event devWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event AutoNukeLP(); event ManualNukeLP(); constructor() ERC20("StowChain", "StowChain") { 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 = 2; uint256 _buyLiquidityFee = 2; uint256 _buyDevFee = 1; uint256 _sellMarketingFee = 5; uint256 _sellLiquidityFee = 15; uint256 _sellDevFee = 5; uint256 totalSupply = 1 * 1e12 * 1e18; maxTransactionAmount = totalSupply * 90 / 1000; maxWallet = totalSupply * 90 / 1000; swapTokensAtAmount = totalSupply * 900 / 10000; 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 is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable { } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; lastLpBurnTime = block.timestamp; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool){ limitsInEffect = false; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool){ transferDelayEnabled = false; return true; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){ require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply."); require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply."); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%"); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%"); maxWallet = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner { buyMarketingFee = _marketingFee; buyLiquidityFee = _liquidityFee; buyDevFee = _devFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; require(buyTotalFees <= 20, "Must keep fees at 20% or less"); } function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner { sellMarketingFee = _marketingFee; sellLiquidityFee = _liquidityFee; sellDevFee = _devFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; require(sellTotalFees <= 25, "Must keep fees at 25% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateMarketingWallet(address newMarketingWallet) external onlyOwner { emit marketingWalletUpdated(newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } function updateDevWallet(address newWallet) external onlyOwner { emit devWalletUpdated(newWallet, devWallet); devWallet = newWallet; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } event BoughtEarly(address indexed sniper); function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if(amount == 0) { super._transfer(from, to, 0); return; } if(limitsInEffect){ if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled){ if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){ require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed."); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else if(!_isExcludedMaxTransactionAmount[to]){ require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } if(!swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from]){ autoBurnLiquidityPairTokens(); } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForDev += fees * sellDevFee / sellTotalFees; tokensForMarketing += fees * sellMarketingFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForDev += fees * buyDevFee / buyTotalFees; tokensForMarketing += fees * buyMarketingFee / buyTotalFees; } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable 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.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap); uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev; tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDev = 0; (success,) = address(devWallet).call{value: ethForDev}(""); if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } (success,) = address(marketingWallet).call{value: address(this).balance}(""); } function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner { require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes"); require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%"); lpBurnFrequency = _frequencyInSeconds; percentForLPBurn = _percent; lpBurnEnabled = _Enabled; } function autoBurnLiquidityPairTokens() internal returns (bool){ lastLpBurnTime = block.timestamp; // get balance of liquidity pair uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair); // calculate amount to burn uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(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(); emit AutoNukeLP(); return true; } function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner returns (bool){ require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish"); require(percent <= 5000, "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.mul(percent).div(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(); emit ManualNukeLP(); 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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"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":"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":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526032600b556001600c60006101000a81548160ff0219169083151502179055506064600d55603c600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601360006101000a81548160ff021916908315150217905550348015620000a757600080fd5b506040518060400160405280600981526020017f53746f77436861696e00000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f53746f77436861696e000000000000000000000000000000000000000000000081525081600390805190602001906200012c92919062000bee565b5080600490805190602001906200014592919062000bee565b50505060006200015a620006ba60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000225816001620006c260201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002a057600080fd5b505afa158015620002b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002db919062000d08565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033e57600080fd5b505afa15801562000353573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000379919062000d08565b6040518363ffffffff1660e01b81526004016200039892919062000d4b565b602060405180830381600087803b158015620003b357600080fd5b505af1158015620003c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ee919062000d08565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200043660a0516001620006c260201b60201c565b6200044b60a0516001620007bf60201b60201c565b6000600290506000600290506000600190506000600590506000600f905060006005905060006c0c9f2c9cd04674edea4000000090506103e8605a8262000493919062000db1565b6200049f919062000e41565b6008819055506103e8605a82620004b7919062000db1565b620004c3919062000e41565b600a8190555061271061038482620004dc919062000db1565b620004e8919062000e41565b60098190555086601581905550856016819055508460178190555060175460165460155462000518919062000e79565b62000524919062000e79565b6014819055508360198190555082601a8190555081601b81905550601b54601a5460195462000554919062000e79565b62000560919062000e79565b601881905550620005766200086060201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005c66200086060201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620006286200061a6200086060201b60201c565b60016200088a60201b60201c565b6200063b3060016200088a60201b60201c565b6200065061dead60016200088a60201b60201c565b62000672620006646200086060201b60201c565b6001620006c260201b60201c565b62000685306001620006c260201b60201c565b6200069a61dead6001620006c260201b60201c565b620006ac3382620009d760201b60201c565b50505050505050506200110a565b600033905090565b620006d2620006ba60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000764576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200075b9062000f37565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200089a620006ba60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200092c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009239062000f37565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009cb919062000f76565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a419062000fe3565b60405180910390fd5b62000a5e6000838362000b8660201b60201c565b62000a7a8160025462000b8b60201b620028961790919060201c565b60028190555062000ad8816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b8b60201b620028961790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b7a919062001016565b60405180910390a35050565b505050565b600080828462000b9c919062000e79565b90508381101562000be4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bdb9062001083565b60405180910390fd5b8091505092915050565b82805462000bfc90620010d4565b90600052602060002090601f01602090048101928262000c20576000855562000c6c565b82601f1062000c3b57805160ff191683800117855562000c6c565b8280016001018555821562000c6c579182015b8281111562000c6b57825182559160200191906001019062000c4e565b5b50905062000c7b919062000c7f565b5090565b5b8082111562000c9a57600081600090555060010162000c80565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000cd08262000ca3565b9050919050565b62000ce28162000cc3565b811462000cee57600080fd5b50565b60008151905062000d028162000cd7565b92915050565b60006020828403121562000d215762000d2062000c9e565b5b600062000d318482850162000cf1565b91505092915050565b62000d458162000cc3565b82525050565b600060408201905062000d62600083018562000d3a565b62000d71602083018462000d3a565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000dbe8262000d78565b915062000dcb8362000d78565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e075762000e0662000d82565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e4e8262000d78565b915062000e5b8362000d78565b92508262000e6e5762000e6d62000e12565b5b828204905092915050565b600062000e868262000d78565b915062000e938362000d78565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000ecb5762000eca62000d82565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f1f60208362000ed6565b915062000f2c8262000ee7565b602082019050919050565b6000602082019050818103600083015262000f528162000f10565b9050919050565b60008115159050919050565b62000f708162000f59565b82525050565b600060208201905062000f8d600083018462000f65565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fcb601f8362000ed6565b915062000fd88262000f93565b602082019050919050565b6000602082019050818103600083015262000ffe8162000fbc565b9050919050565b620010108162000d78565b82525050565b60006020820190506200102d600083018462001005565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200106b601b8362000ed6565b9150620010788262001033565b602082019050919050565b600060208201905081810360008301526200109e816200105c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620010ed57607f821691505b60208210811415620011045762001103620010a5565b5b50919050565b60805160a051615c7b62001192600039600081816113b501528181611bf9015281816126ea015281816127b0015281816127dd01528181612e7f01528181613fce0152818161409601526140c3015260008181610f3a01528181612e27015281816142cb015281816143bb015281816143e20152818161447e01526144a50152615c7b6000f3fe60806040526004361061039b5760003560e01c80638da5cb5b116101dc578063bbc0c74211610102578063d85ba063116100a0578063f11a24d31161006f578063f11a24d314610dab578063f637434214610dd6578063f8b45b0514610e01578063fe72b27a14610e2c576103a2565b8063d85ba06314610ced578063dd62ed3e14610d18578063e2f4560514610d55578063e884f26014610d80576103a2565b8063c18bc195116100dc578063c18bc19514610c31578063c876d0b914610c5a578063c8c8ebe414610c85578063d257b34f14610cb0576103a2565b8063bbc0c74214610bb4578063c024666814610bdf578063c17b5b8c14610c08576103a2565b80639ec22c0e1161017a578063a4c82a0011610149578063a4c82a0014610ae6578063a9059cbb14610b11578063aacebbe314610b4e578063b62496f514610b77576103a2565b80639ec22c0e14610a285780639fccce3214610a53578063a0d82dc514610a7e578063a457c2d714610aa9576103a2565b8063924de9b7116101b6578063924de9b71461098057806395d89b41146109a95780639a7a23d6146109d45780639c3b4fdc146109fd576103a2565b80638da5cb5b146108ff5780638ea5220f1461092a5780639213691314610955576103a2565b8063313ce567116102c157806370a082311161025f57806375f0a8741161022e57806375f0a874146108695780637bce5a04146108945780638095d564146108bf5780638a8c523c146108e8576103a2565b806370a08231146107af578063730c1888146107ec578063751039fc146108155780637571336a14610840576103a2565b80634a62bb651161029b5780634a62bb65146106f15780634fbee1931461071c5780636a486a8e146107595780636ddd171314610784576103a2565b8063313ce5671461065e578063395093511461068957806349bd5a5e146106c6576103a2565b8063199ffc721161033957806323b872dd1161030857806323b872dd146105a057806327c8f835146105dd5780632c3e486c146106085780632e82f1a014610633576103a2565b8063199ffc72146104f65780631a8145bb146105215780631f3fed8f1461054c578063203e727e14610577576103a2565b80631694505e116103755780631694505e1461044c57806318160ddd146104775780631816467f146104a2578063184c16c5146104cb576103a2565b806306fdde03146103a7578063095ea7b3146103d257806310d5de531461040f576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610e69565b6040516103c991906145fc565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f491906146b7565b610efb565b6040516104069190614712565b60405180910390f35b34801561041b57600080fd5b506104366004803603810190610431919061472d565b610f19565b6040516104439190614712565b60405180910390f35b34801561045857600080fd5b50610461610f38565b60405161046e91906147b9565b60405180910390f35b34801561048357600080fd5b5061048c610f5c565b60405161049991906147e3565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c4919061472d565b610f66565b005b3480156104d757600080fd5b506104e06110bd565b6040516104ed91906147e3565b60405180910390f35b34801561050257600080fd5b5061050b6110c3565b60405161051891906147e3565b60405180910390f35b34801561052d57600080fd5b506105366110c9565b60405161054391906147e3565b60405180910390f35b34801561055857600080fd5b506105616110cf565b60405161056e91906147e3565b60405180910390f35b34801561058357600080fd5b5061059e600480360381019061059991906147fe565b6110d5565b005b3480156105ac57600080fd5b506105c760048036038101906105c2919061482b565b6111ff565b6040516105d49190614712565b60405180910390f35b3480156105e957600080fd5b506105f26112d8565b6040516105ff919061488d565b60405180910390f35b34801561061457600080fd5b5061061d6112de565b60405161062a91906147e3565b60405180910390f35b34801561063f57600080fd5b506106486112e4565b6040516106559190614712565b60405180910390f35b34801561066a57600080fd5b506106736112f7565b60405161068091906148c4565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab91906146b7565b611300565b6040516106bd9190614712565b60405180910390f35b3480156106d257600080fd5b506106db6113b3565b6040516106e8919061488d565b60405180910390f35b3480156106fd57600080fd5b506107066113d7565b6040516107139190614712565b60405180910390f35b34801561072857600080fd5b50610743600480360381019061073e919061472d565b6113ea565b6040516107509190614712565b60405180910390f35b34801561076557600080fd5b5061076e611440565b60405161077b91906147e3565b60405180910390f35b34801561079057600080fd5b50610799611446565b6040516107a69190614712565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d1919061472d565b611459565b6040516107e391906147e3565b60405180910390f35b3480156107f857600080fd5b50610813600480360381019061080e919061490b565b6114a1565b005b34801561082157600080fd5b5061082a6115fc565b6040516108379190614712565b60405180910390f35b34801561084c57600080fd5b506108676004803603810190610862919061495e565b6116b7565b005b34801561087557600080fd5b5061087e6117a9565b60405161088b919061488d565b60405180910390f35b3480156108a057600080fd5b506108a96117cf565b6040516108b691906147e3565b60405180910390f35b3480156108cb57600080fd5b506108e660048036038101906108e1919061499e565b6117d5565b005b3480156108f457600080fd5b506108fd6118ee565b005b34801561090b57600080fd5b506109146119c4565b604051610921919061488d565b60405180910390f35b34801561093657600080fd5b5061093f6119ee565b60405161094c919061488d565b60405180910390f35b34801561096157600080fd5b5061096a611a14565b60405161097791906147e3565b60405180910390f35b34801561098c57600080fd5b506109a760048036038101906109a291906149f1565b611a1a565b005b3480156109b557600080fd5b506109be611ace565b6040516109cb91906145fc565b60405180910390f35b3480156109e057600080fd5b506109fb60048036038101906109f6919061495e565b611b60565b005b348015610a0957600080fd5b50610a12611c94565b604051610a1f91906147e3565b60405180910390f35b348015610a3457600080fd5b50610a3d611c9a565b604051610a4a91906147e3565b60405180910390f35b348015610a5f57600080fd5b50610a68611ca0565b604051610a7591906147e3565b60405180910390f35b348015610a8a57600080fd5b50610a93611ca6565b604051610aa091906147e3565b60405180910390f35b348015610ab557600080fd5b50610ad06004803603810190610acb91906146b7565b611cac565b604051610add9190614712565b60405180910390f35b348015610af257600080fd5b50610afb611d79565b604051610b0891906147e3565b60405180910390f35b348015610b1d57600080fd5b50610b386004803603810190610b3391906146b7565b611d7f565b604051610b459190614712565b60405180910390f35b348015610b5a57600080fd5b50610b756004803603810190610b70919061472d565b611d9d565b005b348015610b8357600080fd5b50610b9e6004803603810190610b99919061472d565b611ef4565b604051610bab9190614712565b60405180910390f35b348015610bc057600080fd5b50610bc9611f14565b604051610bd69190614712565b60405180910390f35b348015610beb57600080fd5b50610c066004803603810190610c01919061495e565b611f27565b005b348015610c1457600080fd5b50610c2f6004803603810190610c2a919061499e565b612067565b005b348015610c3d57600080fd5b50610c586004803603810190610c5391906147fe565b612181565b005b348015610c6657600080fd5b50610c6f6122ab565b604051610c7c9190614712565b60405180910390f35b348015610c9157600080fd5b50610c9a6122be565b604051610ca791906147e3565b60405180910390f35b348015610cbc57600080fd5b50610cd76004803603810190610cd291906147fe565b6122c4565b604051610ce49190614712565b60405180910390f35b348015610cf957600080fd5b50610d02612434565b604051610d0f91906147e3565b60405180910390f35b348015610d2457600080fd5b50610d3f6004803603810190610d3a9190614a1e565b61243a565b604051610d4c91906147e3565b60405180910390f35b348015610d6157600080fd5b50610d6a6124c1565b604051610d7791906147e3565b60405180910390f35b348015610d8c57600080fd5b50610d956124c7565b604051610da29190614712565b60405180910390f35b348015610db757600080fd5b50610dc0612582565b604051610dcd91906147e3565b60405180910390f35b348015610de257600080fd5b50610deb612588565b604051610df891906147e3565b60405180910390f35b348015610e0d57600080fd5b50610e1661258e565b604051610e2391906147e3565b60405180910390f35b348015610e3857600080fd5b50610e536004803603810190610e4e91906147fe565b612594565b604051610e609190614712565b60405180910390f35b606060038054610e7890614a8d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea490614a8d565b8015610ef15780601f10610ec657610100808354040283529160200191610ef1565b820191906000526020600020905b815481529060010190602001808311610ed457829003601f168201915b5050505050905090565b6000610f0f610f086128f4565b84846128fc565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610f6e6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff490614b0b565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601d5481565b601c5481565b6110dd6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461116c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116390614b0b565b60405180910390fd5b670de0b6b3a76400006103e86001611182610f5c565b61118c9190614b5a565b6111969190614be3565b6111a09190614be3565b8110156111e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d990614c86565b60405180910390fd5b670de0b6b3a7640000816111f69190614b5a565b60088190555050565b600061120c848484612ac7565b6112cd846112186128f4565b6112c885604051806060016040528060288152602001615bf960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061127e6128f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461385f9092919063ffffffff16565b6128fc565b600190509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60006113a961130d6128f4565b846113a4856001600061131e6128f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461289690919063ffffffff16565b6128fc565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114a96128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152f90614b0b565b60405180910390fd5b61025883101561157d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157490614d18565b60405180910390fd5b6103e88211158015611590575060008210155b6115cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c690614daa565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b60006116066128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168c90614b0b565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b6116bf6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461174e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174590614b0b565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6117dd6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186390614b0b565b60405180910390fd5b8260158190555081601681905550806017819055506017546016546015546118949190614dca565b61189e9190614dca565b6014819055506014805411156118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e090614e6c565b60405180910390fd5b505050565b6118f66128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197c90614b0b565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b611a226128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa890614b0b565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611add90614a8d565b80601f0160208091040260200160405190810160405280929190818152602001828054611b0990614a8d565b8015611b565780601f10611b2b57610100808354040283529160200191611b56565b820191906000526020600020905b815481529060010190602001808311611b3957829003601f168201915b5050505050905090565b611b686128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bee90614b0b565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7d90614efe565b60405180910390fd5b611c9082826138c3565b5050565b60175481565b60105481565b601e5481565b601b5481565b6000611d6f611cb96128f4565b84611d6a85604051806060016040528060258152602001615c216025913960016000611ce36128f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461385f9092919063ffffffff16565b6128fc565b6001905092915050565b600e5481565b6000611d93611d8c6128f4565b8484612ac7565b6001905092915050565b611da56128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2b90614b0b565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611f2f6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb590614b0b565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161205b9190614712565b60405180910390a25050565b61206f6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f590614b0b565b60405180910390fd5b8260198190555081601a8190555080601b81905550601b54601a546019546121269190614dca565b6121309190614dca565b6018819055506019601854111561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217390614f6a565b60405180910390fd5b505050565b6121896128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220f90614b0b565b60405180910390fd5b670de0b6b3a76400006103e8600561222e610f5c565b6122389190614b5a565b6122429190614be3565b61224c9190614be3565b81101561228e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228590614ffc565b60405180910390fd5b670de0b6b3a7640000816122a29190614b5a565b600a8190555050565b601360009054906101000a900460ff1681565b60085481565b60006122ce6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461235d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235490614b0b565b60405180910390fd5b620186a0600161236b610f5c565b6123759190614b5a565b61237f9190614be3565b8210156123c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b89061508e565b60405180910390fd5b6103e860056123ce610f5c565b6123d89190614b5a565b6123e29190614be3565b821115612424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241b90615120565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006124d16128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255790614b0b565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b60165481565b601a5481565b600a5481565b600061259e6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461262d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262490614b0b565b60405180910390fd5b600f5460105461263d9190614dca565b421161267e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126759061518c565b60405180910390fd5b6113888211156126c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ba9061521e565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401612725919061488d565b60206040518083038186803b15801561273d57600080fd5b505afa158015612751573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127759190615253565b905060006127a0612710612792868561396490919063ffffffff16565b6139df90919063ffffffff16565b905060008111156127d9576127d87f000000000000000000000000000000000000000000000000000000000000000061dead83613a29565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561284657600080fd5b505af115801561285a573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b60008082846128a59190614dca565b9050838110156128ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e1906152cc565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561296c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129639061535e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d3906153f0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612aba91906147e3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2e90615482565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9e90615514565b60405180910390fd5b6000811415612bc157612bbc83836000613a29565b61385a565b601160009054906101000a900460ff161561328457612bde6119c4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c4c5750612c1c6119c4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c855750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cbf575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cd85750600560149054906101000a900460ff16155b1561328357601160019054906101000a900460ff16612dd257601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d925750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc890615580565b60405180910390fd5b5b601360009054906101000a900460ff1615612f9a57612def6119c4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612e7657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ece57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612f995743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4b90615638565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561303d5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130e457600854811115613087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307e906156ca565b60405180910390fd5b600a5461309383611459565b8261309e9190614dca565b11156130df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d690615736565b60405180910390fd5b613282565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131875750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131d6576008548111156131d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c8906157c8565b60405180910390fd5b613281565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661328057600a5461323383611459565b8261323e9190614dca565b111561327f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327690615736565b60405180910390fd5b5b5b5b5b5b600061328f30611459565b9050600060095482101590508080156132b45750601160029054906101000a900460ff165b80156132cd5750600560149054906101000a900460ff16155b80156133235750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133795750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133cf5750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613413576001600560146101000a81548160ff0219169083151502179055506133f7613cbe565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156134795750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156134915750600c60009054906101000a900460ff165b80156134ac5750600d54600e546134a89190614dca565b4210155b80156135025750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135115761350f613fa5565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135c75750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135d157600090505b6000811561384a57602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561363457506000601854115b156137015761366160646136536018548861396490919063ffffffff16565b6139df90919063ffffffff16565b9050601854601a54826136749190614b5a565b61367e9190614be3565b601d600082825461368f9190614dca565b92505081905550601854601b54826136a79190614b5a565b6136b19190614be3565b601e60008282546136c29190614dca565b92505081905550601854601954826136da9190614b5a565b6136e49190614be3565b601c60008282546136f59190614dca565b92505081905550613826565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561375c57506000601454115b1561382557613789606461377b6014548861396490919063ffffffff16565b6139df90919063ffffffff16565b90506014546016548261379c9190614b5a565b6137a69190614be3565b601d60008282546137b79190614dca565b92505081905550601454601754826137cf9190614b5a565b6137d99190614be3565b601e60008282546137ea9190614dca565b92505081905550601454601554826138029190614b5a565b61380c9190614be3565b601c600082825461381d9190614dca565b925050819055505b5b600081111561383b5761383a873083613a29565b5b808561384791906157e8565b94505b613855878787613a29565b505050505b505050565b60008383111582906138a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389e91906145fc565b60405180910390fd5b50600083856138b691906157e8565b9050809150509392505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008083141561397757600090506139d9565b600082846139859190614b5a565b90508284826139949190614be3565b146139d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139cb9061588e565b60405180910390fd5b809150505b92915050565b6000613a2183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061417a565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9090615482565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b0090615514565b60405180910390fd5b613b148383836141dd565b613b7f81604051806060016040528060268152602001615bd3602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461385f9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c12816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461289690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613cb191906147e3565b60405180910390a3505050565b6000613cc930611459565b90506000601e54601c54601d54613ce09190614dca565b613cea9190614dca565b9050600080831480613cfc5750600082145b15613d0957505050613fa3565b6014600954613d189190614b5a565b831115613d31576014600954613d2e9190614b5a565b92505b6000600283601d5486613d449190614b5a565b613d4e9190614be3565b613d589190614be3565b90506000613d6f82866141e290919063ffffffff16565b90506000479050613d7f8261422c565b6000613d9482476141e290919063ffffffff16565b90506000613dbf87613db1601c548561396490919063ffffffff16565b6139df90919063ffffffff16565b90506000613dea88613ddc601e548661396490919063ffffffff16565b6139df90919063ffffffff16565b90506000818385613dfb91906157e8565b613e0591906157e8565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613e65906158df565b60006040518083038185875af1925050503d8060008114613ea2576040519150601f19603f3d011682016040523d82523d6000602084013e613ea7565b606091505b505080985050600087118015613ebd5750600081115b15613f0a57613ecc8782614478565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d54604051613f01939291906158f4565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613f50906158df565b60006040518083038185875af1925050503d8060008114613f8d576040519150601f19603f3d011682016040523d82523d6000602084013e613f92565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401614009919061488d565b60206040518083038186803b15801561402157600080fd5b505afa158015614035573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140599190615253565b90506000614086612710614078600b548561396490919063ffffffff16565b6139df90919063ffffffff16565b905060008111156140bf576140be7f000000000000000000000000000000000000000000000000000000000000000061dead83613a29565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561412c57600080fd5b505af1158015614140573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b600080831182906141c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141b891906145fc565b60405180910390fd5b50600083856141d09190614be3565b9050809150509392505050565b505050565b600061422483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061385f565b905092915050565b6000600267ffffffffffffffff8111156142495761424861592b565b5b6040519080825280602002602001820160405280156142775781602001602082028036833780820191505090505b509050308160008151811061428f5761428e61595a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561432f57600080fd5b505afa158015614343573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614367919061599e565b8160018151811061437b5761437a61595a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506143e0307f0000000000000000000000000000000000000000000000000000000000000000846128fc565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614442959493929190615ac4565b600060405180830381600087803b15801561445c57600080fd5b505af1158015614470573d6000803e3d6000fd5b505050505050565b6144a3307f0000000000000000000000000000000000000000000000000000000000000000846128fc565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161450a96959493929190615b1e565b6060604051808303818588803b15801561452357600080fd5b505af1158015614537573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061455c9190615b7f565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561459d578082015181840152602081019050614582565b838111156145ac576000848401525b50505050565b6000601f19601f8301169050919050565b60006145ce82614563565b6145d8818561456e565b93506145e881856020860161457f565b6145f1816145b2565b840191505092915050565b6000602082019050818103600083015261461681846145c3565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061464e82614623565b9050919050565b61465e81614643565b811461466957600080fd5b50565b60008135905061467b81614655565b92915050565b6000819050919050565b61469481614681565b811461469f57600080fd5b50565b6000813590506146b18161468b565b92915050565b600080604083850312156146ce576146cd61461e565b5b60006146dc8582860161466c565b92505060206146ed858286016146a2565b9150509250929050565b60008115159050919050565b61470c816146f7565b82525050565b60006020820190506147276000830184614703565b92915050565b6000602082840312156147435761474261461e565b5b60006147518482850161466c565b91505092915050565b6000819050919050565b600061477f61477a61477584614623565b61475a565b614623565b9050919050565b600061479182614764565b9050919050565b60006147a382614786565b9050919050565b6147b381614798565b82525050565b60006020820190506147ce60008301846147aa565b92915050565b6147dd81614681565b82525050565b60006020820190506147f860008301846147d4565b92915050565b6000602082840312156148145761481361461e565b5b6000614822848285016146a2565b91505092915050565b6000806000606084860312156148445761484361461e565b5b60006148528682870161466c565b93505060206148638682870161466c565b9250506040614874868287016146a2565b9150509250925092565b61488781614643565b82525050565b60006020820190506148a2600083018461487e565b92915050565b600060ff82169050919050565b6148be816148a8565b82525050565b60006020820190506148d960008301846148b5565b92915050565b6148e8816146f7565b81146148f357600080fd5b50565b600081359050614905816148df565b92915050565b6000806000606084860312156149245761492361461e565b5b6000614932868287016146a2565b9350506020614943868287016146a2565b9250506040614954868287016148f6565b9150509250925092565b600080604083850312156149755761497461461e565b5b60006149838582860161466c565b9250506020614994858286016148f6565b9150509250929050565b6000806000606084860312156149b7576149b661461e565b5b60006149c5868287016146a2565b93505060206149d6868287016146a2565b92505060406149e7868287016146a2565b9150509250925092565b600060208284031215614a0757614a0661461e565b5b6000614a15848285016148f6565b91505092915050565b60008060408385031215614a3557614a3461461e565b5b6000614a438582860161466c565b9250506020614a548582860161466c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614aa557607f821691505b60208210811415614ab957614ab8614a5e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614af560208361456e565b9150614b0082614abf565b602082019050919050565b60006020820190508181036000830152614b2481614ae8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b6582614681565b9150614b7083614681565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ba957614ba8614b2b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bee82614681565b9150614bf983614681565b925082614c0957614c08614bb4565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614c70602f8361456e565b9150614c7b82614c14565b604082019050919050565b60006020820190508181036000830152614c9f81614c63565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614d0260338361456e565b9150614d0d82614ca6565b604082019050919050565b60006020820190508181036000830152614d3181614cf5565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614d9460308361456e565b9150614d9f82614d38565b604082019050919050565b60006020820190508181036000830152614dc381614d87565b9050919050565b6000614dd582614681565b9150614de083614681565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e1557614e14614b2b565b5b828201905092915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614e56601d8361456e565b9150614e6182614e20565b602082019050919050565b60006020820190508181036000830152614e8581614e49565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614ee860398361456e565b9150614ef382614e8c565b604082019050919050565b60006020820190508181036000830152614f1781614edb565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614f54601d8361456e565b9150614f5f82614f1e565b602082019050919050565b60006020820190508181036000830152614f8381614f47565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614fe660248361456e565b9150614ff182614f8a565b604082019050919050565b6000602082019050818103600083015261501581614fd9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061507860358361456e565b91506150838261501c565b604082019050919050565b600060208201905081810360008301526150a78161506b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061510a60348361456e565b9150615115826150ae565b604082019050919050565b60006020820190508181036000830152615139816150fd565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b600061517660208361456e565b915061518182615140565b602082019050919050565b600060208201905081810360008301526151a581615169565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000615208602a8361456e565b9150615213826151ac565b604082019050919050565b60006020820190508181036000830152615237816151fb565b9050919050565b60008151905061524d8161468b565b92915050565b6000602082840312156152695761526861461e565b5b60006152778482850161523e565b91505092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006152b6601b8361456e565b91506152c182615280565b602082019050919050565b600060208201905081810360008301526152e5816152a9565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061534860248361456e565b9150615353826152ec565b604082019050919050565b600060208201905081810360008301526153778161533b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006153da60228361456e565b91506153e58261537e565b604082019050919050565b60006020820190508181036000830152615409816153cd565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061546c60258361456e565b915061547782615410565b604082019050919050565b6000602082019050818103600083015261549b8161545f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006154fe60238361456e565b9150615509826154a2565b604082019050919050565b6000602082019050818103600083015261552d816154f1565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061556a60168361456e565b915061557582615534565b602082019050919050565b600060208201905081810360008301526155998161555d565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061562260498361456e565b915061562d826155a0565b606082019050919050565b6000602082019050818103600083015261565181615615565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006156b460358361456e565b91506156bf82615658565b604082019050919050565b600060208201905081810360008301526156e3816156a7565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061572060138361456e565b915061572b826156ea565b602082019050919050565b6000602082019050818103600083015261574f81615713565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006157b260368361456e565b91506157bd82615756565b604082019050919050565b600060208201905081810360008301526157e1816157a5565b9050919050565b60006157f382614681565b91506157fe83614681565b92508282101561581157615810614b2b565b5b828203905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061587860218361456e565b91506158838261581c565b604082019050919050565b600060208201905081810360008301526158a78161586b565b9050919050565b600081905092915050565b50565b60006158c96000836158ae565b91506158d4826158b9565b600082019050919050565b60006158ea826158bc565b9150819050919050565b600060608201905061590960008301866147d4565b61591660208301856147d4565b61592360408301846147d4565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061599881614655565b92915050565b6000602082840312156159b4576159b361461e565b5b60006159c284828501615989565b91505092915050565b6000819050919050565b60006159f06159eb6159e6846159cb565b61475a565b614681565b9050919050565b615a00816159d5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615a3b81614643565b82525050565b6000615a4d8383615a32565b60208301905092915050565b6000602082019050919050565b6000615a7182615a06565b615a7b8185615a11565b9350615a8683615a22565b8060005b83811015615ab7578151615a9e8882615a41565b9750615aa983615a59565b925050600181019050615a8a565b5085935050505092915050565b600060a082019050615ad960008301886147d4565b615ae660208301876159f7565b8181036040830152615af88186615a66565b9050615b07606083018561487e565b615b1460808301846147d4565b9695505050505050565b600060c082019050615b33600083018961487e565b615b4060208301886147d4565b615b4d60408301876159f7565b615b5a60608301866159f7565b615b67608083018561487e565b615b7460a08301846147d4565b979650505050505050565b600080600060608486031215615b9857615b9761461e565b5b6000615ba68682870161523e565b9350506020615bb78682870161523e565b9250506040615bc88682870161523e565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209413a3b9b896d3f86cad64321c0392572bf99a74de529e6db50675424c2091a164736f6c63430008090033
Deployed Bytecode
0x60806040526004361061039b5760003560e01c80638da5cb5b116101dc578063bbc0c74211610102578063d85ba063116100a0578063f11a24d31161006f578063f11a24d314610dab578063f637434214610dd6578063f8b45b0514610e01578063fe72b27a14610e2c576103a2565b8063d85ba06314610ced578063dd62ed3e14610d18578063e2f4560514610d55578063e884f26014610d80576103a2565b8063c18bc195116100dc578063c18bc19514610c31578063c876d0b914610c5a578063c8c8ebe414610c85578063d257b34f14610cb0576103a2565b8063bbc0c74214610bb4578063c024666814610bdf578063c17b5b8c14610c08576103a2565b80639ec22c0e1161017a578063a4c82a0011610149578063a4c82a0014610ae6578063a9059cbb14610b11578063aacebbe314610b4e578063b62496f514610b77576103a2565b80639ec22c0e14610a285780639fccce3214610a53578063a0d82dc514610a7e578063a457c2d714610aa9576103a2565b8063924de9b7116101b6578063924de9b71461098057806395d89b41146109a95780639a7a23d6146109d45780639c3b4fdc146109fd576103a2565b80638da5cb5b146108ff5780638ea5220f1461092a5780639213691314610955576103a2565b8063313ce567116102c157806370a082311161025f57806375f0a8741161022e57806375f0a874146108695780637bce5a04146108945780638095d564146108bf5780638a8c523c146108e8576103a2565b806370a08231146107af578063730c1888146107ec578063751039fc146108155780637571336a14610840576103a2565b80634a62bb651161029b5780634a62bb65146106f15780634fbee1931461071c5780636a486a8e146107595780636ddd171314610784576103a2565b8063313ce5671461065e578063395093511461068957806349bd5a5e146106c6576103a2565b8063199ffc721161033957806323b872dd1161030857806323b872dd146105a057806327c8f835146105dd5780632c3e486c146106085780632e82f1a014610633576103a2565b8063199ffc72146104f65780631a8145bb146105215780631f3fed8f1461054c578063203e727e14610577576103a2565b80631694505e116103755780631694505e1461044c57806318160ddd146104775780631816467f146104a2578063184c16c5146104cb576103a2565b806306fdde03146103a7578063095ea7b3146103d257806310d5de531461040f576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610e69565b6040516103c991906145fc565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f491906146b7565b610efb565b6040516104069190614712565b60405180910390f35b34801561041b57600080fd5b506104366004803603810190610431919061472d565b610f19565b6040516104439190614712565b60405180910390f35b34801561045857600080fd5b50610461610f38565b60405161046e91906147b9565b60405180910390f35b34801561048357600080fd5b5061048c610f5c565b60405161049991906147e3565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c4919061472d565b610f66565b005b3480156104d757600080fd5b506104e06110bd565b6040516104ed91906147e3565b60405180910390f35b34801561050257600080fd5b5061050b6110c3565b60405161051891906147e3565b60405180910390f35b34801561052d57600080fd5b506105366110c9565b60405161054391906147e3565b60405180910390f35b34801561055857600080fd5b506105616110cf565b60405161056e91906147e3565b60405180910390f35b34801561058357600080fd5b5061059e600480360381019061059991906147fe565b6110d5565b005b3480156105ac57600080fd5b506105c760048036038101906105c2919061482b565b6111ff565b6040516105d49190614712565b60405180910390f35b3480156105e957600080fd5b506105f26112d8565b6040516105ff919061488d565b60405180910390f35b34801561061457600080fd5b5061061d6112de565b60405161062a91906147e3565b60405180910390f35b34801561063f57600080fd5b506106486112e4565b6040516106559190614712565b60405180910390f35b34801561066a57600080fd5b506106736112f7565b60405161068091906148c4565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab91906146b7565b611300565b6040516106bd9190614712565b60405180910390f35b3480156106d257600080fd5b506106db6113b3565b6040516106e8919061488d565b60405180910390f35b3480156106fd57600080fd5b506107066113d7565b6040516107139190614712565b60405180910390f35b34801561072857600080fd5b50610743600480360381019061073e919061472d565b6113ea565b6040516107509190614712565b60405180910390f35b34801561076557600080fd5b5061076e611440565b60405161077b91906147e3565b60405180910390f35b34801561079057600080fd5b50610799611446565b6040516107a69190614712565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d1919061472d565b611459565b6040516107e391906147e3565b60405180910390f35b3480156107f857600080fd5b50610813600480360381019061080e919061490b565b6114a1565b005b34801561082157600080fd5b5061082a6115fc565b6040516108379190614712565b60405180910390f35b34801561084c57600080fd5b506108676004803603810190610862919061495e565b6116b7565b005b34801561087557600080fd5b5061087e6117a9565b60405161088b919061488d565b60405180910390f35b3480156108a057600080fd5b506108a96117cf565b6040516108b691906147e3565b60405180910390f35b3480156108cb57600080fd5b506108e660048036038101906108e1919061499e565b6117d5565b005b3480156108f457600080fd5b506108fd6118ee565b005b34801561090b57600080fd5b506109146119c4565b604051610921919061488d565b60405180910390f35b34801561093657600080fd5b5061093f6119ee565b60405161094c919061488d565b60405180910390f35b34801561096157600080fd5b5061096a611a14565b60405161097791906147e3565b60405180910390f35b34801561098c57600080fd5b506109a760048036038101906109a291906149f1565b611a1a565b005b3480156109b557600080fd5b506109be611ace565b6040516109cb91906145fc565b60405180910390f35b3480156109e057600080fd5b506109fb60048036038101906109f6919061495e565b611b60565b005b348015610a0957600080fd5b50610a12611c94565b604051610a1f91906147e3565b60405180910390f35b348015610a3457600080fd5b50610a3d611c9a565b604051610a4a91906147e3565b60405180910390f35b348015610a5f57600080fd5b50610a68611ca0565b604051610a7591906147e3565b60405180910390f35b348015610a8a57600080fd5b50610a93611ca6565b604051610aa091906147e3565b60405180910390f35b348015610ab557600080fd5b50610ad06004803603810190610acb91906146b7565b611cac565b604051610add9190614712565b60405180910390f35b348015610af257600080fd5b50610afb611d79565b604051610b0891906147e3565b60405180910390f35b348015610b1d57600080fd5b50610b386004803603810190610b3391906146b7565b611d7f565b604051610b459190614712565b60405180910390f35b348015610b5a57600080fd5b50610b756004803603810190610b70919061472d565b611d9d565b005b348015610b8357600080fd5b50610b9e6004803603810190610b99919061472d565b611ef4565b604051610bab9190614712565b60405180910390f35b348015610bc057600080fd5b50610bc9611f14565b604051610bd69190614712565b60405180910390f35b348015610beb57600080fd5b50610c066004803603810190610c01919061495e565b611f27565b005b348015610c1457600080fd5b50610c2f6004803603810190610c2a919061499e565b612067565b005b348015610c3d57600080fd5b50610c586004803603810190610c5391906147fe565b612181565b005b348015610c6657600080fd5b50610c6f6122ab565b604051610c7c9190614712565b60405180910390f35b348015610c9157600080fd5b50610c9a6122be565b604051610ca791906147e3565b60405180910390f35b348015610cbc57600080fd5b50610cd76004803603810190610cd291906147fe565b6122c4565b604051610ce49190614712565b60405180910390f35b348015610cf957600080fd5b50610d02612434565b604051610d0f91906147e3565b60405180910390f35b348015610d2457600080fd5b50610d3f6004803603810190610d3a9190614a1e565b61243a565b604051610d4c91906147e3565b60405180910390f35b348015610d6157600080fd5b50610d6a6124c1565b604051610d7791906147e3565b60405180910390f35b348015610d8c57600080fd5b50610d956124c7565b604051610da29190614712565b60405180910390f35b348015610db757600080fd5b50610dc0612582565b604051610dcd91906147e3565b60405180910390f35b348015610de257600080fd5b50610deb612588565b604051610df891906147e3565b60405180910390f35b348015610e0d57600080fd5b50610e1661258e565b604051610e2391906147e3565b60405180910390f35b348015610e3857600080fd5b50610e536004803603810190610e4e91906147fe565b612594565b604051610e609190614712565b60405180910390f35b606060038054610e7890614a8d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea490614a8d565b8015610ef15780601f10610ec657610100808354040283529160200191610ef1565b820191906000526020600020905b815481529060010190602001808311610ed457829003601f168201915b5050505050905090565b6000610f0f610f086128f4565b84846128fc565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610f6e6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff490614b0b565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601d5481565b601c5481565b6110dd6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461116c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116390614b0b565b60405180910390fd5b670de0b6b3a76400006103e86001611182610f5c565b61118c9190614b5a565b6111969190614be3565b6111a09190614be3565b8110156111e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d990614c86565b60405180910390fd5b670de0b6b3a7640000816111f69190614b5a565b60088190555050565b600061120c848484612ac7565b6112cd846112186128f4565b6112c885604051806060016040528060288152602001615bf960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061127e6128f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461385f9092919063ffffffff16565b6128fc565b600190509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60006113a961130d6128f4565b846113a4856001600061131e6128f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461289690919063ffffffff16565b6128fc565b6001905092915050565b7f0000000000000000000000002771f1584f36d5a7e79e093a67412617e6c2ef3281565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114a96128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152f90614b0b565b60405180910390fd5b61025883101561157d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157490614d18565b60405180910390fd5b6103e88211158015611590575060008210155b6115cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c690614daa565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b60006116066128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168c90614b0b565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b6116bf6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461174e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174590614b0b565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6117dd6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186390614b0b565b60405180910390fd5b8260158190555081601681905550806017819055506017546016546015546118949190614dca565b61189e9190614dca565b6014819055506014805411156118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e090614e6c565b60405180910390fd5b505050565b6118f66128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197c90614b0b565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b611a226128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa890614b0b565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611add90614a8d565b80601f0160208091040260200160405190810160405280929190818152602001828054611b0990614a8d565b8015611b565780601f10611b2b57610100808354040283529160200191611b56565b820191906000526020600020905b815481529060010190602001808311611b3957829003601f168201915b5050505050905090565b611b686128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bee90614b0b565b60405180910390fd5b7f0000000000000000000000002771f1584f36d5a7e79e093a67412617e6c2ef3273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7d90614efe565b60405180910390fd5b611c9082826138c3565b5050565b60175481565b60105481565b601e5481565b601b5481565b6000611d6f611cb96128f4565b84611d6a85604051806060016040528060258152602001615c216025913960016000611ce36128f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461385f9092919063ffffffff16565b6128fc565b6001905092915050565b600e5481565b6000611d93611d8c6128f4565b8484612ac7565b6001905092915050565b611da56128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2b90614b0b565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611f2f6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb590614b0b565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161205b9190614712565b60405180910390a25050565b61206f6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f590614b0b565b60405180910390fd5b8260198190555081601a8190555080601b81905550601b54601a546019546121269190614dca565b6121309190614dca565b6018819055506019601854111561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217390614f6a565b60405180910390fd5b505050565b6121896128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220f90614b0b565b60405180910390fd5b670de0b6b3a76400006103e8600561222e610f5c565b6122389190614b5a565b6122429190614be3565b61224c9190614be3565b81101561228e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228590614ffc565b60405180910390fd5b670de0b6b3a7640000816122a29190614b5a565b600a8190555050565b601360009054906101000a900460ff1681565b60085481565b60006122ce6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461235d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235490614b0b565b60405180910390fd5b620186a0600161236b610f5c565b6123759190614b5a565b61237f9190614be3565b8210156123c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b89061508e565b60405180910390fd5b6103e860056123ce610f5c565b6123d89190614b5a565b6123e29190614be3565b821115612424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241b90615120565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006124d16128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255790614b0b565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b60165481565b601a5481565b600a5481565b600061259e6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461262d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262490614b0b565b60405180910390fd5b600f5460105461263d9190614dca565b421161267e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126759061518c565b60405180910390fd5b6113888211156126c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ba9061521e565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f0000000000000000000000002771f1584f36d5a7e79e093a67412617e6c2ef326040518263ffffffff1660e01b8152600401612725919061488d565b60206040518083038186803b15801561273d57600080fd5b505afa158015612751573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127759190615253565b905060006127a0612710612792868561396490919063ffffffff16565b6139df90919063ffffffff16565b905060008111156127d9576127d87f0000000000000000000000002771f1584f36d5a7e79e093a67412617e6c2ef3261dead83613a29565b5b60007f0000000000000000000000002771f1584f36d5a7e79e093a67412617e6c2ef3290508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561284657600080fd5b505af115801561285a573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b60008082846128a59190614dca565b9050838110156128ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e1906152cc565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561296c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129639061535e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d3906153f0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612aba91906147e3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2e90615482565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9e90615514565b60405180910390fd5b6000811415612bc157612bbc83836000613a29565b61385a565b601160009054906101000a900460ff161561328457612bde6119c4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c4c5750612c1c6119c4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c855750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cbf575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cd85750600560149054906101000a900460ff16155b1561328357601160019054906101000a900460ff16612dd257601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d925750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc890615580565b60405180910390fd5b5b601360009054906101000a900460ff1615612f9a57612def6119c4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612e7657507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ece57507f0000000000000000000000002771f1584f36d5a7e79e093a67412617e6c2ef3273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612f995743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4b90615638565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561303d5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130e457600854811115613087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307e906156ca565b60405180910390fd5b600a5461309383611459565b8261309e9190614dca565b11156130df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d690615736565b60405180910390fd5b613282565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131875750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131d6576008548111156131d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c8906157c8565b60405180910390fd5b613281565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661328057600a5461323383611459565b8261323e9190614dca565b111561327f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327690615736565b60405180910390fd5b5b5b5b5b5b600061328f30611459565b9050600060095482101590508080156132b45750601160029054906101000a900460ff165b80156132cd5750600560149054906101000a900460ff16155b80156133235750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133795750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133cf5750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613413576001600560146101000a81548160ff0219169083151502179055506133f7613cbe565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156134795750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156134915750600c60009054906101000a900460ff165b80156134ac5750600d54600e546134a89190614dca565b4210155b80156135025750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135115761350f613fa5565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135c75750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135d157600090505b6000811561384a57602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561363457506000601854115b156137015761366160646136536018548861396490919063ffffffff16565b6139df90919063ffffffff16565b9050601854601a54826136749190614b5a565b61367e9190614be3565b601d600082825461368f9190614dca565b92505081905550601854601b54826136a79190614b5a565b6136b19190614be3565b601e60008282546136c29190614dca565b92505081905550601854601954826136da9190614b5a565b6136e49190614be3565b601c60008282546136f59190614dca565b92505081905550613826565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561375c57506000601454115b1561382557613789606461377b6014548861396490919063ffffffff16565b6139df90919063ffffffff16565b90506014546016548261379c9190614b5a565b6137a69190614be3565b601d60008282546137b79190614dca565b92505081905550601454601754826137cf9190614b5a565b6137d99190614be3565b601e60008282546137ea9190614dca565b92505081905550601454601554826138029190614b5a565b61380c9190614be3565b601c600082825461381d9190614dca565b925050819055505b5b600081111561383b5761383a873083613a29565b5b808561384791906157e8565b94505b613855878787613a29565b505050505b505050565b60008383111582906138a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389e91906145fc565b60405180910390fd5b50600083856138b691906157e8565b9050809150509392505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008083141561397757600090506139d9565b600082846139859190614b5a565b90508284826139949190614be3565b146139d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139cb9061588e565b60405180910390fd5b809150505b92915050565b6000613a2183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061417a565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9090615482565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b0090615514565b60405180910390fd5b613b148383836141dd565b613b7f81604051806060016040528060268152602001615bd3602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461385f9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c12816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461289690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613cb191906147e3565b60405180910390a3505050565b6000613cc930611459565b90506000601e54601c54601d54613ce09190614dca565b613cea9190614dca565b9050600080831480613cfc5750600082145b15613d0957505050613fa3565b6014600954613d189190614b5a565b831115613d31576014600954613d2e9190614b5a565b92505b6000600283601d5486613d449190614b5a565b613d4e9190614be3565b613d589190614be3565b90506000613d6f82866141e290919063ffffffff16565b90506000479050613d7f8261422c565b6000613d9482476141e290919063ffffffff16565b90506000613dbf87613db1601c548561396490919063ffffffff16565b6139df90919063ffffffff16565b90506000613dea88613ddc601e548661396490919063ffffffff16565b6139df90919063ffffffff16565b90506000818385613dfb91906157e8565b613e0591906157e8565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613e65906158df565b60006040518083038185875af1925050503d8060008114613ea2576040519150601f19603f3d011682016040523d82523d6000602084013e613ea7565b606091505b505080985050600087118015613ebd5750600081115b15613f0a57613ecc8782614478565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d54604051613f01939291906158f4565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613f50906158df565b60006040518083038185875af1925050503d8060008114613f8d576040519150601f19603f3d011682016040523d82523d6000602084013e613f92565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f0000000000000000000000002771f1584f36d5a7e79e093a67412617e6c2ef326040518263ffffffff1660e01b8152600401614009919061488d565b60206040518083038186803b15801561402157600080fd5b505afa158015614035573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140599190615253565b90506000614086612710614078600b548561396490919063ffffffff16565b6139df90919063ffffffff16565b905060008111156140bf576140be7f0000000000000000000000002771f1584f36d5a7e79e093a67412617e6c2ef3261dead83613a29565b5b60007f0000000000000000000000002771f1584f36d5a7e79e093a67412617e6c2ef3290508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561412c57600080fd5b505af1158015614140573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b600080831182906141c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141b891906145fc565b60405180910390fd5b50600083856141d09190614be3565b9050809150509392505050565b505050565b600061422483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061385f565b905092915050565b6000600267ffffffffffffffff8111156142495761424861592b565b5b6040519080825280602002602001820160405280156142775781602001602082028036833780820191505090505b509050308160008151811061428f5761428e61595a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561432f57600080fd5b505afa158015614343573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614367919061599e565b8160018151811061437b5761437a61595a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506143e0307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846128fc565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614442959493929190615ac4565b600060405180830381600087803b15801561445c57600080fd5b505af1158015614470573d6000803e3d6000fd5b505050505050565b6144a3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846128fc565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161450a96959493929190615b1e565b6060604051808303818588803b15801561452357600080fd5b505af1158015614537573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061455c9190615b7f565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561459d578082015181840152602081019050614582565b838111156145ac576000848401525b50505050565b6000601f19601f8301169050919050565b60006145ce82614563565b6145d8818561456e565b93506145e881856020860161457f565b6145f1816145b2565b840191505092915050565b6000602082019050818103600083015261461681846145c3565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061464e82614623565b9050919050565b61465e81614643565b811461466957600080fd5b50565b60008135905061467b81614655565b92915050565b6000819050919050565b61469481614681565b811461469f57600080fd5b50565b6000813590506146b18161468b565b92915050565b600080604083850312156146ce576146cd61461e565b5b60006146dc8582860161466c565b92505060206146ed858286016146a2565b9150509250929050565b60008115159050919050565b61470c816146f7565b82525050565b60006020820190506147276000830184614703565b92915050565b6000602082840312156147435761474261461e565b5b60006147518482850161466c565b91505092915050565b6000819050919050565b600061477f61477a61477584614623565b61475a565b614623565b9050919050565b600061479182614764565b9050919050565b60006147a382614786565b9050919050565b6147b381614798565b82525050565b60006020820190506147ce60008301846147aa565b92915050565b6147dd81614681565b82525050565b60006020820190506147f860008301846147d4565b92915050565b6000602082840312156148145761481361461e565b5b6000614822848285016146a2565b91505092915050565b6000806000606084860312156148445761484361461e565b5b60006148528682870161466c565b93505060206148638682870161466c565b9250506040614874868287016146a2565b9150509250925092565b61488781614643565b82525050565b60006020820190506148a2600083018461487e565b92915050565b600060ff82169050919050565b6148be816148a8565b82525050565b60006020820190506148d960008301846148b5565b92915050565b6148e8816146f7565b81146148f357600080fd5b50565b600081359050614905816148df565b92915050565b6000806000606084860312156149245761492361461e565b5b6000614932868287016146a2565b9350506020614943868287016146a2565b9250506040614954868287016148f6565b9150509250925092565b600080604083850312156149755761497461461e565b5b60006149838582860161466c565b9250506020614994858286016148f6565b9150509250929050565b6000806000606084860312156149b7576149b661461e565b5b60006149c5868287016146a2565b93505060206149d6868287016146a2565b92505060406149e7868287016146a2565b9150509250925092565b600060208284031215614a0757614a0661461e565b5b6000614a15848285016148f6565b91505092915050565b60008060408385031215614a3557614a3461461e565b5b6000614a438582860161466c565b9250506020614a548582860161466c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614aa557607f821691505b60208210811415614ab957614ab8614a5e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614af560208361456e565b9150614b0082614abf565b602082019050919050565b60006020820190508181036000830152614b2481614ae8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b6582614681565b9150614b7083614681565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ba957614ba8614b2b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bee82614681565b9150614bf983614681565b925082614c0957614c08614bb4565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614c70602f8361456e565b9150614c7b82614c14565b604082019050919050565b60006020820190508181036000830152614c9f81614c63565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614d0260338361456e565b9150614d0d82614ca6565b604082019050919050565b60006020820190508181036000830152614d3181614cf5565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614d9460308361456e565b9150614d9f82614d38565b604082019050919050565b60006020820190508181036000830152614dc381614d87565b9050919050565b6000614dd582614681565b9150614de083614681565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e1557614e14614b2b565b5b828201905092915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614e56601d8361456e565b9150614e6182614e20565b602082019050919050565b60006020820190508181036000830152614e8581614e49565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614ee860398361456e565b9150614ef382614e8c565b604082019050919050565b60006020820190508181036000830152614f1781614edb565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614f54601d8361456e565b9150614f5f82614f1e565b602082019050919050565b60006020820190508181036000830152614f8381614f47565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614fe660248361456e565b9150614ff182614f8a565b604082019050919050565b6000602082019050818103600083015261501581614fd9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061507860358361456e565b91506150838261501c565b604082019050919050565b600060208201905081810360008301526150a78161506b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061510a60348361456e565b9150615115826150ae565b604082019050919050565b60006020820190508181036000830152615139816150fd565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b600061517660208361456e565b915061518182615140565b602082019050919050565b600060208201905081810360008301526151a581615169565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000615208602a8361456e565b9150615213826151ac565b604082019050919050565b60006020820190508181036000830152615237816151fb565b9050919050565b60008151905061524d8161468b565b92915050565b6000602082840312156152695761526861461e565b5b60006152778482850161523e565b91505092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006152b6601b8361456e565b91506152c182615280565b602082019050919050565b600060208201905081810360008301526152e5816152a9565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061534860248361456e565b9150615353826152ec565b604082019050919050565b600060208201905081810360008301526153778161533b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006153da60228361456e565b91506153e58261537e565b604082019050919050565b60006020820190508181036000830152615409816153cd565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061546c60258361456e565b915061547782615410565b604082019050919050565b6000602082019050818103600083015261549b8161545f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006154fe60238361456e565b9150615509826154a2565b604082019050919050565b6000602082019050818103600083015261552d816154f1565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061556a60168361456e565b915061557582615534565b602082019050919050565b600060208201905081810360008301526155998161555d565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061562260498361456e565b915061562d826155a0565b606082019050919050565b6000602082019050818103600083015261565181615615565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006156b460358361456e565b91506156bf82615658565b604082019050919050565b600060208201905081810360008301526156e3816156a7565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061572060138361456e565b915061572b826156ea565b602082019050919050565b6000602082019050818103600083015261574f81615713565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006157b260368361456e565b91506157bd82615756565b604082019050919050565b600060208201905081810360008301526157e1816157a5565b9050919050565b60006157f382614681565b91506157fe83614681565b92508282101561581157615810614b2b565b5b828203905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061587860218361456e565b91506158838261581c565b604082019050919050565b600060208201905081810360008301526158a78161586b565b9050919050565b600081905092915050565b50565b60006158c96000836158ae565b91506158d4826158b9565b600082019050919050565b60006158ea826158bc565b9150819050919050565b600060608201905061590960008301866147d4565b61591660208301856147d4565b61592360408301846147d4565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061599881614655565b92915050565b6000602082840312156159b4576159b361461e565b5b60006159c284828501615989565b91505092915050565b6000819050919050565b60006159f06159eb6159e6846159cb565b61475a565b614681565b9050919050565b615a00816159d5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615a3b81614643565b82525050565b6000615a4d8383615a32565b60208301905092915050565b6000602082019050919050565b6000615a7182615a06565b615a7b8185615a11565b9350615a8683615a22565b8060005b83811015615ab7578151615a9e8882615a41565b9750615aa983615a59565b925050600181019050615a8a565b5085935050505092915050565b600060a082019050615ad960008301886147d4565b615ae660208301876159f7565b8181036040830152615af88186615a66565b9050615b07606083018561487e565b615b1460808301846147d4565b9695505050505050565b600060c082019050615b33600083018961487e565b615b4060208301886147d4565b615b4d60408301876159f7565b615b5a60608301866159f7565b615b67608083018561487e565b615b7460a08301846147d4565b979650505050505050565b600080600060608486031215615b9857615b9761461e565b5b6000615ba68682870161523e565b9350506020615bb78682870161523e565b9250506040615bc88682870161523e565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209413a3b9b896d3f86cad64321c0392572bf99a74de529e6db50675424c2091a164736f6c63430008090033
Deployed Bytecode Sourcemap
28668:18142:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7720:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9887:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30326:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28747:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8840:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36966:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29323:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29135:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30105:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30065;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34515:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10538:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28850:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29230:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29191:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8682:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11302:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28805:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29420:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37137:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29916:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29500:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9011:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44518:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33728:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34984:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28942:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29805;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35341:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33517:155;;;;;;;;;;;;;:::i;:::-;;21543:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28979:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29951:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35228:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7939:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36298:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29879:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29376:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30145:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30027:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12023:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29281:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9351:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36746:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30548:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29460:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36108:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35722:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34757:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29723:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29016:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34122:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29771:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9589:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29058:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33913:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29842:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29989:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29098:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45789:1018;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7720:100;7774:13;7807:5;7800:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7720:100;:::o;9887:169::-;9970:4;9987:39;9996:12;:10;:12::i;:::-;10010:7;10019:6;9987:8;:39::i;:::-;10044:4;10037:11;;9887:169;;;;:::o;30326:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;28747:51::-;;;:::o;8840:108::-;8901:7;8928:12;;8921:19;;8840:108;:::o;36966:157::-;21765:12;:10;:12::i;:::-;21755:22;;:6;;;;;;;;;;;:22;;;21747:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37073:9:::1;;;;;;;;;;;37045:38;;37062:9;37045:38;;;;;;;;;;;;37106:9;37094;;:21;;;;;;;;;;;;;;;;;;36966:157:::0;:::o;29323:46::-;;;;:::o;29135:36::-;;;;:::o;30105:33::-;;;;:::o;30065:::-;;;;:::o;34515:234::-;21765:12;:10;:12::i;:::-;21755:22;;:6;;;;;;;;;;;:22;;;21747:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34634:4:::1;34628;34624:1;34608:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34607:31;;;;:::i;:::-;34597:6;:41;;34589:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;34734:6;34724;:17;;;;:::i;:::-;34701:20;:40;;;;34515:234:::0;:::o;10538:355::-;10678:4;10695:36;10705:6;10713:9;10724:6;10695:9;:36::i;:::-;10742:121;10751:6;10759:12;:10;:12::i;:::-;10773:89;10811:6;10773:89;;;;;;;;;;;;;;;;;:11;:19;10785:6;10773:19;;;;;;;;;;;;;;;:33;10793:12;:10;:12::i;:::-;10773:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10742:8;:121::i;:::-;10881:4;10874:11;;10538:355;;;;;:::o;28850:53::-;28896:6;28850:53;:::o;29230:44::-;;;;:::o;29191:32::-;;;;;;;;;;;;;:::o;8682:93::-;8740:5;8765:2;8758:9;;8682:93;:::o;11302:218::-;11390:4;11407:83;11416:12;:10;:12::i;:::-;11430:7;11439:50;11478:10;11439:11;:25;11451:12;:10;:12::i;:::-;11439:25;;;;;;;;;;;;;;;:34;11465:7;11439:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11407:8;:83::i;:::-;11508:4;11501:11;;11302:218;;;;:::o;28805:38::-;;;:::o;29420:33::-;;;;;;;;;;;;;:::o;37137:125::-;37202:4;37226:19;:28;37246:7;37226:28;;;;;;;;;;;;;;;;;;;;;;;;;37219:35;;37137:125;;;:::o;29916:28::-;;;;:::o;29500:31::-;;;;;;;;;;;;;:::o;9011:127::-;9085:7;9112:9;:18;9122:7;9112:18;;;;;;;;;;;;;;;;9105:25;;9011:127;;;:::o;44518:447::-;21765:12;:10;:12::i;:::-;21755:22;;:6;;;;;;;;;;;:22;;;21747:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44672:3:::1;44649:19;:26;;44641:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;44762:4;44750:8;:16;;:33;;;;;44782:1;44770:8;:13;;44750:33;44742:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;44865:19;44847:15;:37;;;;44914:8;44895:16;:27;;;;44949:8;44933:13;;:24;;;;;;;;;;;;;;;;;;44518:447:::0;;;:::o;33728:120::-;33780:4;21765:12;:10;:12::i;:::-;21755:22;;:6;;;;;;;;;;;:22;;;21747:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33813:5:::1;33796:14;;:22;;;;;;;;;;;;;;;;;;33836:4;33829:11;;33728:120:::0;:::o;34984:144::-;21765:12;:10;:12::i;:::-;21755:22;;:6;;;;;;;;;;;:22;;;21747:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35116:4:::1;35074:31;:39;35106:6;35074:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34984:144:::0;;:::o;28942:30::-;;;;;;;;;;;;;:::o;29805:::-;;;;:::o;35341:369::-;21765:12;:10;:12::i;:::-;21755:22;;:6;;;;;;;;;;;:22;;;21747:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35475:13:::1;35457:15;:31;;;;35517:13;35499:15;:31;;;;35553:7;35541:9;:19;;;;35622:9;;35604:15;;35586;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;35571:12;:60;;;;35666:2;35650:12:::0;::::1;:18;;35642:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35341:369:::0;;;:::o;33517:155::-;21765:12;:10;:12::i;:::-;21755:22;;:6;;;;;;;;;;;:22;;;21747:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33588:4:::1;33572:13;;:20;;;;;;;;;;;;;;;;;;33617:4;33603:11;;:18;;;;;;;;;;;;;;;;;;33649:15;33632:14;:32;;;;33517:155::o:0;21543:79::-;21581:7;21608:6;;;;;;;;;;;21601:13;;21543:79;:::o;28979:24::-;;;;;;;;;;;;;:::o;29951:31::-;;;;:::o;35228:101::-;21765:12;:10;:12::i;:::-;21755:22;;:6;;;;;;;;;;;:22;;;21747:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35314:7:::1;35300:11;;:21;;;;;;;;;;;;;;;;;;35228:101:::0;:::o;7939:104::-;7995:13;8028:7;8021:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7939:104;:::o;36298:244::-;21765:12;:10;:12::i;:::-;21755:22;;:6;;;;;;;;;;;:22;;;21747:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36405:13:::1;36397:21;;:4;:21;;;;36389:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;36493:41;36522:4;36528:5;36493:28;:41::i;:::-;36298:244:::0;;:::o;29879:24::-;;;;:::o;29376:35::-;;;;:::o;30145:27::-;;;;:::o;30027:25::-;;;;:::o;12023:269::-;12116:4;12133:129;12142:12;:10;:12::i;:::-;12156:7;12165:96;12204:15;12165:96;;;;;;;;;;;;;;;;;:11;:25;12177:12;:10;:12::i;:::-;12165:25;;;;;;;;;;;;;;;:34;12191:7;12165:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12133:8;:129::i;:::-;12280:4;12273:11;;12023:269;;;;:::o;29281:29::-;;;;:::o;9351:175::-;9437:4;9454:42;9464:12;:10;:12::i;:::-;9478:9;9489:6;9454:9;:42::i;:::-;9514:4;9507:11;;9351:175;;;;:::o;36746:208::-;21765:12;:10;:12::i;:::-;21755:22;;:6;;;;;;;;;;;:22;;;21747:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36883:15:::1;;;;;;;;;;;36840:59;;36863:18;36840:59;;;;;;;;;;;;36928:18;36910:15;;:36;;;;;;;;;;;;;;;;;;36746:208:::0;:::o;30548:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29460:33::-;;;;;;;;;;;;;:::o;36108:182::-;21765:12;:10;:12::i;:::-;21755:22;;:6;;;;;;;;;;;:22;;;21747:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36224:8:::1;36193:19;:28;36213:7;36193:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36264:7;36248:34;;;36273:8;36248:34;;;;;;:::i;:::-;;;;;;;;36108:182:::0;;:::o;35722:378::-;21765:12;:10;:12::i;:::-;21755:22;;:6;;;;;;;;;;;:22;;;21747:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35858:13:::1;35839:16;:32;;;;35901:13;35882:16;:32;;;;35938:7;35925:10;:20;;;;36010:10;;35991:16;;35972;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;35956:13;:64;;;;36056:2;36039:13;;:19;;36031:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35722:378:::0;;;:::o;34757:215::-;21765:12;:10;:12::i;:::-;21755:22;;:6;;;;;;;;;;;:22;;;21747:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34879:4:::1;34873;34869:1;34853:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34852:31;;;;:::i;:::-;34842:6;:41;;34834:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;34957:6;34947;:17;;;;:::i;:::-;34935:9;:29;;;;34757:215:::0;:::o;29723:39::-;;;;;;;;;;;;;:::o;29016:35::-;;;;:::o;34122:381::-;34203:4;21765:12;:10;:12::i;:::-;21755:22;;:6;;;;;;;;;;;:22;;;21747:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34259:6:::1;34255:1;34239:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;34226:9;:39;;34218:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;34374:4;34370:1;34354:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34341:9;:37;;34333:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;34466:9;34445:18;:30;;;;34492:4;34485:11;;34122:381:::0;;;:::o;29771:27::-;;;;:::o;9589:151::-;9678:7;9705:11;:18;9717:5;9705:18;;;;;;;;;;;;;;;:27;9724:7;9705:27;;;;;;;;;;;;;;;;9698:34;;9589:151;;;;:::o;29058:33::-;;;;:::o;33913:134::-;33973:4;21765:12;:10;:12::i;:::-;21755:22;;:6;;;;;;;;;;;:22;;;21747:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34012:5:::1;33989:20;;:28;;;;;;;;;;;;;;;;;;34035:4;34028:11;;33913:134:::0;:::o;29842:30::-;;;;:::o;29989:31::-;;;;:::o;29098:24::-;;;;:::o;45789:1018::-;45873:4;21765:12;:10;:12::i;:::-;21755:22;;:6;;;;;;;;;;;:22;;;21747:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45938:19:::1;;45915:20;;:42;;;;:::i;:::-;45897:15;:60;45889:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;46025:4;46014:7;:15;;46006:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;46110:15;46087:20;:38;;;;46188:28;46219:4;:14;;;46234:13;46219:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46188:60;;46306:20;46329:44;46367:5;46329:33;46354:7;46329:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;46306:67;;46501:1;46486:12;:16;46482:109;;;46518:61;46534:13;46557:6;46566:12;46518:15;:61::i;:::-;46482:109;46674:19;46711:13;46674:51;;46736:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;46763:14;;;;;;;;;;46795:4;46788:11;;;;;45789:1018:::0;;;:::o;16587:181::-;16645:7;16665:9;16681:1;16677;:5;;;;:::i;:::-;16665:17;;16706:1;16701;:6;;16693:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16759:1;16752:8;;;16587:181;;;;:::o;356:98::-;409:7;436:10;429:17;;356:98;:::o;15209:380::-;15362:1;15345:19;;:5;:19;;;;15337:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15443:1;15424:21;;:7;:21;;;;15416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15527:6;15497:11;:18;15509:5;15497:18;;;;;;;;;;;;;;;:27;15516:7;15497:27;;;;;;;;;;;;;;;:36;;;;15565:7;15549:32;;15558:5;15549:32;;;15574:6;15549:32;;;;;;:::i;:::-;;;;;;;;15209:380;;;:::o;37324:4358::-;37472:1;37456:18;;:4;:18;;;;37448:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37549:1;37535:16;;:2;:16;;;;37527:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37626:1;37616:6;:11;37613:92;;;37644:28;37660:4;37666:2;37670:1;37644:15;:28::i;:::-;37687:7;;37613:92;37728:14;;;;;;;;;;;37725:1841;;;37788:7;:5;:7::i;:::-;37780:15;;:4;:15;;;;:49;;;;;37822:7;:5;:7::i;:::-;37816:13;;:2;:13;;;;37780:49;:86;;;;;37864:1;37850:16;;:2;:16;;;;37780:86;:128;;;;;37901:6;37887:21;;:2;:21;;;;37780:128;:158;;;;;37930:8;;;;;;;;;;;37929:9;37780:158;37758:1797;;;37976:13;;;;;;;;;;;37972:148;;38021:19;:25;38041:4;38021:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38050:19;:23;38070:2;38050:23;;;;;;;;;;;;;;;;;;;;;;;;;38021:52;38013:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37972:148;38278:20;;;;;;;;;;;38274:423;;;38332:7;:5;:7::i;:::-;38326:13;;:2;:13;;;;:47;;;;;38357:15;38343:30;;:2;:30;;;;38326:47;:79;;;;;38391:13;38377:28;;:2;:28;;;;38326:79;38322:356;;;38483:12;38441:28;:39;38470:9;38441:39;;;;;;;;;;;;;;;;:54;38433:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;38642:12;38600:28;:39;38629:9;38600:39;;;;;;;;;;;;;;;:54;;;;38322:356;38274:423;38766:25;:31;38792:4;38766:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;38802:31;:35;38834:2;38802:35;;;;;;;;;;;;;;;;;;;;;;;;;38801:36;38766:71;38762:778;;;38884:20;;38874:6;:30;;38866:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;39023:9;;39006:13;39016:2;39006:9;:13::i;:::-;38997:6;:22;;;;:::i;:::-;:35;;38989:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38762:778;;;39150:25;:29;39176:2;39150:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39184:31;:37;39216:4;39184:37;;;;;;;;;;;;;;;;;;;;;;;;;39183:38;39150:71;39146:394;;;39268:20;;39258:6;:30;;39250:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;39146:394;;;39394:31;:35;39426:2;39394:35;;;;;;;;;;;;;;;;;;;;;;;;;39390:150;;39487:9;;39470:13;39480:2;39470:9;:13::i;:::-;39461:6;:22;;;;:::i;:::-;:35;;39453:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39390:150;39146:394;38762:778;37758:1797;37725:1841;39600:28;39631:24;39649:4;39631:9;:24::i;:::-;39600:55;;39676:12;39715:18;;39691:20;:42;;39676:57;;39764:7;:35;;;;;39788:11;;;;;;;;;;;39764:35;:61;;;;;39817:8;;;;;;;;;;;39816:9;39764:61;:110;;;;;39843:25;:31;39869:4;39843:31;;;;;;;;;;;;;;;;;;;;;;;;;39842:32;39764:110;:153;;;;;39892:19;:25;39912:4;39892:25;;;;;;;;;;;;;;;;;;;;;;;;;39891:26;39764:153;:194;;;;;39935:19;:23;39955:2;39935:23;;;;;;;;;;;;;;;;;;;;;;;;;39934:24;39764:194;39746:338;;;39996:4;39985:8;;:15;;;;;;;;;;;;;;;;;;40029:10;:8;:10::i;:::-;40067:5;40056:8;;:16;;;;;;;;;;;;;;;;;;39746:338;40108:8;;;;;;;;;;;40107:9;:42;;;;;40120:25;:29;40146:2;40120:29;;;;;;;;;;;;;;;;;;;;;;;;;40107:42;:59;;;;;40153:13;;;;;;;;;;;40107:59;:114;;;;;40206:15;;40189:14;;:32;;;;:::i;:::-;40170:15;:51;;40107:114;:144;;;;;40226:19;:25;40246:4;40226:25;;;;;;;;;;;;;;;;;;;;;;;;;40225:26;40107:144;40104:204;;;40267:29;:27;:29::i;:::-;;40104:204;40320:12;40336:8;;;;;;;;;;;40335:9;40320:24;;40445:19;:25;40465:4;40445:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40474:19;:23;40494:2;40474:23;;;;;;;;;;;;;;;;;;;;;;;;;40445:52;40442:99;;;40524:5;40514:15;;40442:99;40561:12;40665:7;40662:967;;;40716:25;:29;40742:2;40716:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;40765:1;40749:13;;:17;40716:50;40712:748;;;40793:34;40823:3;40793:25;40804:13;;40793:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;40786:41;;40894:13;;40875:16;;40868:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;40846:18;;:61;;;;;;;:::i;:::-;;;;;;;;40962:13;;40949:10;;40942:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;40926:12;;:49;;;;;;;:::i;:::-;;;;;;;;41042:13;;41023:16;;41016:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;40994:18;;:61;;;;;;;:::i;:::-;;;;;;;;40712:748;;;41116:25;:31;41142:4;41116:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;41166:1;41151:12;;:16;41116:51;41113:347;;;41192:33;41221:3;41192:24;41203:12;;41192:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;41185:40;;41288:12;;41270:15;;41263:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41241:18;;:59;;;;;;;:::i;:::-;;;;;;;;41354:12;;41342:9;;41335:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;41319:12;;:47;;;;;;;:::i;:::-;;;;;;;;41432:12;;41414:15;;41407:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41385:18;;:59;;;;;;;:::i;:::-;;;;;;;;41113:347;40712:748;41498:1;41491:4;:8;41488:93;;;41523:42;41539:4;41553;41560;41523:15;:42::i;:::-;41488:93;41613:4;41603:14;;;;;:::i;:::-;;;40662:967;41641:33;41657:4;41663:2;41667:6;41641:15;:33::i;:::-;37437:4245;;;;37324:4358;;;;:::o;17490:192::-;17576:7;17609:1;17604;:6;;17612:12;17596:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17636:9;17652:1;17648;:5;;;;:::i;:::-;17636:17;;17673:1;17666:8;;;17490:192;;;;;:::o;36550:188::-;36667:5;36633:25;:31;36659:4;36633:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36724:5;36690:40;;36718:4;36690:40;;;;;;;;;;;;36550:188;;:::o;17941:471::-;17999:7;18249:1;18244;:6;18240:47;;;18274:1;18267:8;;;;18240:47;18299:9;18315:1;18311;:5;;;;:::i;:::-;18299:17;;18344:1;18339;18335;:5;;;;:::i;:::-;:10;18327:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18403:1;18396:8;;;17941:471;;;;;:::o;18888:132::-;18946:7;18973:39;18977:1;18980;18973:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18966:46;;18888:132;;;;:::o;12782:573::-;12940:1;12922:20;;:6;:20;;;;12914:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13024:1;13003:23;;:9;:23;;;;12995:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13079:47;13100:6;13108:9;13119:6;13079:20;:47::i;:::-;13159:71;13181:6;13159:71;;;;;;;;;;;;;;;;;:9;:17;13169:6;13159:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13139:9;:17;13149:6;13139:17;;;;;;;;;;;;;;;:91;;;;13264:32;13289:6;13264:9;:20;13274:9;13264:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13241:9;:20;13251:9;13241:20;;;;;;;;;;;;;;;:55;;;;13329:9;13312:35;;13321:6;13312:35;;;13340:6;13312:35;;;;;;:::i;:::-;;;;;;;;12782:573;;;:::o;42840:1666::-;42879:23;42905:24;42923:4;42905:9;:24::i;:::-;42879:50;;42940:25;43010:12;;42989:18;;42968;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;42940:82;;43033:12;43088:1;43069:15;:20;:46;;;;43114:1;43093:17;:22;43069:46;43066:60;;;43118:7;;;;;43066:60;43180:2;43159:18;;:23;;;;:::i;:::-;43141:15;:41;43138:111;;;43235:2;43214:18;;:23;;;;:::i;:::-;43196:41;;43138:111;43318:23;43403:1;43383:17;43362:18;;43344:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;43318:86;;43415:26;43444:36;43464:15;43444;:19;;:36;;;;:::i;:::-;43415:65;;43501:25;43529:21;43501:49;;43563:36;43580:18;43563:16;:36::i;:::-;43621:18;43642:44;43668:17;43642:21;:25;;:44;;;;:::i;:::-;43621:65;;43707:23;43733:57;43772:17;43733:34;43748:18;;43733:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;43707:83;;43801:17;43821:51;43854:17;43821:28;43836:12;;43821:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;43801:71;;43903:23;43960:9;43942:15;43929:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;43903:66;;44021:1;44000:18;:22;;;;44054:1;44033:18;:22;;;;44081:1;44066:12;:16;;;;44124:9;;;;;;;;;;;44116:23;;44147:9;44116:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44103:58;;;;;44203:1;44185:15;:19;:42;;;;;44226:1;44208:15;:19;44185:42;44182:210;;;44243:46;44256:15;44273;44243:12;:46::i;:::-;44309:71;44324:18;44344:15;44361:18;;44309:71;;;;;;;;:::i;:::-;;;;;;;;44182:210;44443:15;;;;;;;;;;;44435:29;;44472:21;44435:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44422:76;;;;;42868:1638;;;;;;;;;;42840:1666;:::o;44977:804::-;45034:4;45077:15;45060:14;:32;;;;45155:28;45186:4;:14;;;45201:13;45186:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45155:60;;45273:20;45296:53;45343:5;45296:42;45321:16;;45296:20;:24;;:42;;;;:::i;:::-;:46;;:53;;;;:::i;:::-;45273:76;;45477:1;45462:12;:16;45458:109;;;45494:61;45510:13;45533:6;45542:12;45494:15;:61::i;:::-;45458:109;45650:19;45687:13;45650:51;;45712:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45739:12;;;;;;;;;;45769:4;45762:11;;;;;44977:804;:::o;19516:278::-;19602:7;19634:1;19630;:5;19637:12;19622:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19661:9;19677:1;19673;:5;;;;:::i;:::-;19661:17;;19785:1;19778:8;;;19516:278;;;;;:::o;16192:125::-;;;;:::o;17051:136::-;17109:7;17136:43;17140:1;17143;17136:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17129:50;;17051:136;;;;:::o;41690:601::-;41818:21;41856:1;41842:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41818:40;;41887:4;41869;41874:1;41869:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;41913:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41903:4;41908:1;41903:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;41948:62;41965:4;41980:15;41998:11;41948:8;:62::i;:::-;42049:15;:66;;;42130:11;42156:1;42200:4;42227;42247:15;42049:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41745:546;41690:601;:::o;42315:517::-;42463:62;42480:4;42495:15;42513:11;42463:8;:62::i;:::-;42568:15;:31;;;42607:9;42640:4;42660:11;42686:1;42729;28896:6;42798:15;42568:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;42315:517;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:613::-;7236:6;7244;7252;7301:2;7289:9;7280:7;7276:23;7272:32;7269:119;;;7307:79;;:::i;:::-;7269:119;7427:1;7452:53;7497:7;7488:6;7477:9;7473:22;7452:53;:::i;:::-;7442:63;;7398:117;7554:2;7580:53;7625:7;7616:6;7605:9;7601:22;7580:53;:::i;:::-;7570:63;;7525:118;7682:2;7708:50;7750:7;7741:6;7730:9;7726:22;7708:50;:::i;:::-;7698:60;;7653:115;7162:613;;;;;:::o;7781:468::-;7846:6;7854;7903:2;7891:9;7882:7;7878:23;7874:32;7871:119;;;7909:79;;:::i;:::-;7871:119;8029:1;8054:53;8099:7;8090:6;8079:9;8075:22;8054:53;:::i;:::-;8044:63;;8000:117;8156:2;8182:50;8224:7;8215:6;8204:9;8200:22;8182:50;:::i;:::-;8172:60;;8127:115;7781:468;;;;;:::o;8255:619::-;8332:6;8340;8348;8397:2;8385:9;8376:7;8372:23;8368:32;8365:119;;;8403:79;;:::i;:::-;8365:119;8523:1;8548:53;8593:7;8584:6;8573:9;8569:22;8548:53;:::i;:::-;8538:63;;8494:117;8650:2;8676:53;8721:7;8712:6;8701:9;8697:22;8676:53;:::i;:::-;8666:63;;8621:118;8778:2;8804:53;8849:7;8840:6;8829:9;8825:22;8804:53;:::i;:::-;8794:63;;8749:118;8255:619;;;;;:::o;8880:323::-;8936:6;8985:2;8973:9;8964:7;8960:23;8956:32;8953:119;;;8991:79;;:::i;:::-;8953:119;9111:1;9136:50;9178:7;9169:6;9158:9;9154:22;9136:50;:::i;:::-;9126:60;;9082:114;8880:323;;;;:::o;9209:474::-;9277:6;9285;9334:2;9322:9;9313:7;9309:23;9305:32;9302:119;;;9340:79;;:::i;:::-;9302:119;9460:1;9485:53;9530:7;9521:6;9510:9;9506:22;9485:53;:::i;:::-;9475:63;;9431:117;9587:2;9613:53;9658:7;9649:6;9638:9;9634:22;9613:53;:::i;:::-;9603:63;;9558:118;9209:474;;;;;:::o;9689:180::-;9737:77;9734:1;9727:88;9834:4;9831:1;9824:15;9858:4;9855:1;9848:15;9875:320;9919:6;9956:1;9950:4;9946:12;9936:22;;10003:1;9997:4;9993:12;10024:18;10014:81;;10080:4;10072:6;10068:17;10058:27;;10014:81;10142:2;10134:6;10131:14;10111:18;10108:38;10105:84;;;10161:18;;:::i;:::-;10105:84;9926:269;9875:320;;;:::o;10201:182::-;10341:34;10337:1;10329:6;10325:14;10318:58;10201:182;:::o;10389:366::-;10531:3;10552:67;10616:2;10611:3;10552:67;:::i;:::-;10545:74;;10628:93;10717:3;10628:93;:::i;:::-;10746:2;10741:3;10737:12;10730:19;;10389:366;;;:::o;10761:419::-;10927:4;10965:2;10954:9;10950:18;10942:26;;11014:9;11008:4;11004:20;11000:1;10989:9;10985:17;10978:47;11042:131;11168:4;11042:131;:::i;:::-;11034:139;;10761:419;;;:::o;11186:180::-;11234:77;11231:1;11224:88;11331:4;11328:1;11321:15;11355:4;11352:1;11345:15;11372:348;11412:7;11435:20;11453:1;11435:20;:::i;:::-;11430:25;;11469:20;11487:1;11469:20;:::i;:::-;11464:25;;11657:1;11589:66;11585:74;11582:1;11579:81;11574:1;11567:9;11560:17;11556:105;11553:131;;;11664:18;;:::i;:::-;11553:131;11712:1;11709;11705:9;11694:20;;11372:348;;;;:::o;11726:180::-;11774:77;11771:1;11764:88;11871:4;11868:1;11861:15;11895:4;11892:1;11885:15;11912:185;11952:1;11969:20;11987:1;11969:20;:::i;:::-;11964:25;;12003:20;12021:1;12003:20;:::i;:::-;11998:25;;12042:1;12032:35;;12047:18;;:::i;:::-;12032:35;12089:1;12086;12082:9;12077:14;;11912:185;;;;:::o;12103:234::-;12243:34;12239:1;12231:6;12227:14;12220:58;12312:17;12307:2;12299:6;12295:15;12288:42;12103:234;:::o;12343:366::-;12485:3;12506:67;12570:2;12565:3;12506:67;:::i;:::-;12499:74;;12582:93;12671:3;12582:93;:::i;:::-;12700:2;12695:3;12691:12;12684:19;;12343:366;;;:::o;12715:419::-;12881:4;12919:2;12908:9;12904:18;12896:26;;12968:9;12962:4;12958:20;12954:1;12943:9;12939:17;12932:47;12996:131;13122:4;12996:131;:::i;:::-;12988:139;;12715:419;;;:::o;13140:238::-;13280:34;13276:1;13268:6;13264:14;13257:58;13349:21;13344:2;13336:6;13332:15;13325:46;13140:238;:::o;13384:366::-;13526:3;13547:67;13611:2;13606:3;13547:67;:::i;:::-;13540:74;;13623:93;13712:3;13623:93;:::i;:::-;13741:2;13736:3;13732:12;13725:19;;13384:366;;;:::o;13756:419::-;13922:4;13960:2;13949:9;13945:18;13937:26;;14009:9;14003:4;13999:20;13995:1;13984:9;13980:17;13973:47;14037:131;14163:4;14037:131;:::i;:::-;14029:139;;13756:419;;;:::o;14181:235::-;14321:34;14317:1;14309:6;14305:14;14298:58;14390:18;14385:2;14377:6;14373:15;14366:43;14181:235;:::o;14422:366::-;14564:3;14585:67;14649:2;14644:3;14585:67;:::i;:::-;14578:74;;14661:93;14750:3;14661:93;:::i;:::-;14779:2;14774:3;14770:12;14763:19;;14422:366;;;:::o;14794:419::-;14960:4;14998:2;14987:9;14983:18;14975:26;;15047:9;15041:4;15037:20;15033:1;15022:9;15018:17;15011:47;15075:131;15201:4;15075:131;:::i;:::-;15067:139;;14794:419;;;:::o;15219:305::-;15259:3;15278:20;15296:1;15278:20;:::i;:::-;15273:25;;15312:20;15330:1;15312:20;:::i;:::-;15307:25;;15466:1;15398:66;15394:74;15391:1;15388:81;15385:107;;;15472:18;;:::i;:::-;15385:107;15516:1;15513;15509:9;15502:16;;15219:305;;;;:::o;15530:179::-;15670:31;15666:1;15658:6;15654:14;15647:55;15530:179;:::o;15715:366::-;15857:3;15878:67;15942:2;15937:3;15878:67;:::i;:::-;15871:74;;15954:93;16043:3;15954:93;:::i;:::-;16072:2;16067:3;16063:12;16056:19;;15715:366;;;:::o;16087:419::-;16253:4;16291:2;16280:9;16276:18;16268:26;;16340:9;16334:4;16330:20;16326:1;16315:9;16311:17;16304:47;16368:131;16494:4;16368:131;:::i;:::-;16360:139;;16087:419;;;:::o;16512:244::-;16652:34;16648:1;16640:6;16636:14;16629:58;16721:27;16716:2;16708:6;16704:15;16697:52;16512:244;:::o;16762:366::-;16904:3;16925:67;16989:2;16984:3;16925:67;:::i;:::-;16918:74;;17001:93;17090:3;17001:93;:::i;:::-;17119:2;17114:3;17110:12;17103:19;;16762:366;;;:::o;17134:419::-;17300:4;17338:2;17327:9;17323:18;17315:26;;17387:9;17381:4;17377:20;17373:1;17362:9;17358:17;17351:47;17415:131;17541:4;17415:131;:::i;:::-;17407:139;;17134:419;;;:::o;17559:179::-;17699:31;17695:1;17687:6;17683:14;17676:55;17559:179;:::o;17744:366::-;17886:3;17907:67;17971:2;17966:3;17907:67;:::i;:::-;17900:74;;17983:93;18072:3;17983:93;:::i;:::-;18101:2;18096:3;18092:12;18085:19;;17744:366;;;:::o;18116:419::-;18282:4;18320:2;18309:9;18305:18;18297:26;;18369:9;18363:4;18359:20;18355:1;18344:9;18340:17;18333:47;18397:131;18523:4;18397:131;:::i;:::-;18389:139;;18116:419;;;:::o;18541:223::-;18681:34;18677:1;18669:6;18665:14;18658:58;18750:6;18745:2;18737:6;18733:15;18726:31;18541:223;:::o;18770:366::-;18912:3;18933:67;18997:2;18992:3;18933:67;:::i;:::-;18926:74;;19009:93;19098:3;19009:93;:::i;:::-;19127:2;19122:3;19118:12;19111:19;;18770:366;;;:::o;19142:419::-;19308:4;19346:2;19335:9;19331:18;19323:26;;19395:9;19389:4;19385:20;19381:1;19370:9;19366:17;19359:47;19423:131;19549:4;19423:131;:::i;:::-;19415:139;;19142:419;;;:::o;19567:240::-;19707:34;19703:1;19695:6;19691:14;19684:58;19776:23;19771:2;19763:6;19759:15;19752:48;19567:240;:::o;19813:366::-;19955:3;19976:67;20040:2;20035:3;19976:67;:::i;:::-;19969:74;;20052:93;20141:3;20052:93;:::i;:::-;20170:2;20165:3;20161:12;20154:19;;19813:366;;;:::o;20185:419::-;20351:4;20389:2;20378:9;20374:18;20366:26;;20438:9;20432:4;20428:20;20424:1;20413:9;20409:17;20402:47;20466:131;20592:4;20466:131;:::i;:::-;20458:139;;20185:419;;;:::o;20610:239::-;20750:34;20746:1;20738:6;20734:14;20727:58;20819:22;20814:2;20806:6;20802:15;20795:47;20610:239;:::o;20855:366::-;20997:3;21018:67;21082:2;21077:3;21018:67;:::i;:::-;21011:74;;21094:93;21183:3;21094:93;:::i;:::-;21212:2;21207:3;21203:12;21196:19;;20855:366;;;:::o;21227:419::-;21393:4;21431:2;21420:9;21416:18;21408:26;;21480:9;21474:4;21470:20;21466:1;21455:9;21451:17;21444:47;21508:131;21634:4;21508:131;:::i;:::-;21500:139;;21227:419;;;:::o;21652:182::-;21792:34;21788:1;21780:6;21776:14;21769:58;21652:182;:::o;21840:366::-;21982:3;22003:67;22067:2;22062:3;22003:67;:::i;:::-;21996:74;;22079:93;22168:3;22079:93;:::i;:::-;22197:2;22192:3;22188:12;22181:19;;21840:366;;;:::o;22212:419::-;22378:4;22416:2;22405:9;22401:18;22393:26;;22465:9;22459:4;22455:20;22451:1;22440:9;22436:17;22429:47;22493:131;22619:4;22493:131;:::i;:::-;22485:139;;22212:419;;;:::o;22637:229::-;22777:34;22773:1;22765:6;22761:14;22754:58;22846:12;22841:2;22833:6;22829:15;22822:37;22637:229;:::o;22872:366::-;23014:3;23035:67;23099:2;23094:3;23035:67;:::i;:::-;23028:74;;23111:93;23200:3;23111:93;:::i;:::-;23229:2;23224:3;23220:12;23213:19;;22872:366;;;:::o;23244:419::-;23410:4;23448:2;23437:9;23433:18;23425:26;;23497:9;23491:4;23487:20;23483:1;23472:9;23468:17;23461:47;23525:131;23651:4;23525:131;:::i;:::-;23517:139;;23244:419;;;:::o;23669:143::-;23726:5;23757:6;23751:13;23742:22;;23773:33;23800:5;23773:33;:::i;:::-;23669:143;;;;:::o;23818:351::-;23888:6;23937:2;23925:9;23916:7;23912:23;23908:32;23905:119;;;23943:79;;:::i;:::-;23905:119;24063:1;24088:64;24144:7;24135:6;24124:9;24120:22;24088:64;:::i;:::-;24078:74;;24034:128;23818:351;;;;:::o;24175:177::-;24315:29;24311:1;24303:6;24299:14;24292:53;24175:177;:::o;24358:366::-;24500:3;24521:67;24585:2;24580:3;24521:67;:::i;:::-;24514:74;;24597:93;24686:3;24597:93;:::i;:::-;24715:2;24710:3;24706:12;24699:19;;24358:366;;;:::o;24730:419::-;24896:4;24934:2;24923:9;24919:18;24911:26;;24983:9;24977:4;24973:20;24969:1;24958:9;24954:17;24947:47;25011:131;25137:4;25011:131;:::i;:::-;25003:139;;24730:419;;;:::o;25155:223::-;25295:34;25291:1;25283:6;25279:14;25272:58;25364:6;25359:2;25351:6;25347:15;25340:31;25155:223;:::o;25384:366::-;25526:3;25547:67;25611:2;25606:3;25547:67;:::i;:::-;25540:74;;25623:93;25712:3;25623:93;:::i;:::-;25741:2;25736:3;25732:12;25725:19;;25384:366;;;:::o;25756:419::-;25922:4;25960:2;25949:9;25945:18;25937:26;;26009:9;26003:4;25999:20;25995:1;25984:9;25980:17;25973:47;26037:131;26163:4;26037:131;:::i;:::-;26029:139;;25756:419;;;:::o;26181:221::-;26321:34;26317:1;26309:6;26305:14;26298:58;26390:4;26385:2;26377:6;26373:15;26366:29;26181:221;:::o;26408:366::-;26550:3;26571:67;26635:2;26630:3;26571:67;:::i;:::-;26564:74;;26647:93;26736:3;26647:93;:::i;:::-;26765:2;26760:3;26756:12;26749:19;;26408:366;;;:::o;26780:419::-;26946:4;26984:2;26973:9;26969:18;26961:26;;27033:9;27027:4;27023:20;27019:1;27008:9;27004:17;26997:47;27061:131;27187:4;27061:131;:::i;:::-;27053:139;;26780:419;;;:::o;27205:224::-;27345:34;27341:1;27333:6;27329:14;27322:58;27414:7;27409:2;27401:6;27397:15;27390:32;27205:224;:::o;27435:366::-;27577:3;27598:67;27662:2;27657:3;27598:67;:::i;:::-;27591:74;;27674:93;27763:3;27674:93;:::i;:::-;27792:2;27787:3;27783:12;27776:19;;27435:366;;;:::o;27807:419::-;27973:4;28011:2;28000:9;27996:18;27988:26;;28060:9;28054:4;28050:20;28046:1;28035:9;28031:17;28024:47;28088:131;28214:4;28088:131;:::i;:::-;28080:139;;27807:419;;;:::o;28232:222::-;28372:34;28368:1;28360:6;28356:14;28349:58;28441:5;28436:2;28428:6;28424:15;28417:30;28232:222;:::o;28460:366::-;28602:3;28623:67;28687:2;28682:3;28623:67;:::i;:::-;28616:74;;28699:93;28788:3;28699:93;:::i;:::-;28817:2;28812:3;28808:12;28801:19;;28460:366;;;:::o;28832:419::-;28998:4;29036:2;29025:9;29021:18;29013:26;;29085:9;29079:4;29075:20;29071:1;29060:9;29056:17;29049:47;29113:131;29239:4;29113:131;:::i;:::-;29105:139;;28832:419;;;:::o;29257:172::-;29397:24;29393:1;29385:6;29381:14;29374:48;29257:172;:::o;29435:366::-;29577:3;29598:67;29662:2;29657:3;29598:67;:::i;:::-;29591:74;;29674:93;29763:3;29674:93;:::i;:::-;29792:2;29787:3;29783:12;29776:19;;29435:366;;;:::o;29807:419::-;29973:4;30011:2;30000:9;29996:18;29988:26;;30060:9;30054:4;30050:20;30046:1;30035:9;30031:17;30024:47;30088:131;30214:4;30088:131;:::i;:::-;30080:139;;29807:419;;;:::o;30232:297::-;30372:34;30368:1;30360:6;30356:14;30349:58;30441:34;30436:2;30428:6;30424:15;30417:59;30510:11;30505:2;30497:6;30493:15;30486:36;30232:297;:::o;30535:366::-;30677:3;30698:67;30762:2;30757:3;30698:67;:::i;:::-;30691:74;;30774:93;30863:3;30774:93;:::i;:::-;30892:2;30887:3;30883:12;30876:19;;30535:366;;;:::o;30907:419::-;31073:4;31111:2;31100:9;31096:18;31088:26;;31160:9;31154:4;31150:20;31146:1;31135:9;31131:17;31124:47;31188:131;31314:4;31188:131;:::i;:::-;31180:139;;30907:419;;;:::o;31332:240::-;31472:34;31468:1;31460:6;31456:14;31449:58;31541:23;31536:2;31528:6;31524:15;31517:48;31332:240;:::o;31578:366::-;31720:3;31741:67;31805:2;31800:3;31741:67;:::i;:::-;31734:74;;31817:93;31906:3;31817:93;:::i;:::-;31935:2;31930:3;31926:12;31919:19;;31578:366;;;:::o;31950:419::-;32116:4;32154:2;32143:9;32139:18;32131:26;;32203:9;32197:4;32193:20;32189:1;32178:9;32174:17;32167:47;32231:131;32357:4;32231:131;:::i;:::-;32223:139;;31950:419;;;:::o;32375:169::-;32515:21;32511:1;32503:6;32499:14;32492:45;32375:169;:::o;32550:366::-;32692:3;32713:67;32777:2;32772:3;32713:67;:::i;:::-;32706:74;;32789:93;32878:3;32789:93;:::i;:::-;32907:2;32902:3;32898:12;32891:19;;32550:366;;;:::o;32922:419::-;33088:4;33126:2;33115:9;33111:18;33103:26;;33175:9;33169:4;33165:20;33161:1;33150:9;33146:17;33139:47;33203:131;33329:4;33203:131;:::i;:::-;33195:139;;32922:419;;;:::o;33347:241::-;33487:34;33483:1;33475:6;33471:14;33464:58;33556:24;33551:2;33543:6;33539:15;33532:49;33347:241;:::o;33594:366::-;33736:3;33757:67;33821:2;33816:3;33757:67;:::i;:::-;33750:74;;33833:93;33922:3;33833:93;:::i;:::-;33951:2;33946:3;33942:12;33935:19;;33594:366;;;:::o;33966:419::-;34132:4;34170:2;34159:9;34155:18;34147:26;;34219:9;34213:4;34209:20;34205:1;34194:9;34190:17;34183:47;34247:131;34373:4;34247:131;:::i;:::-;34239:139;;33966:419;;;:::o;34391:191::-;34431:4;34451:20;34469:1;34451:20;:::i;:::-;34446:25;;34485:20;34503:1;34485:20;:::i;:::-;34480:25;;34524:1;34521;34518:8;34515:34;;;34529:18;;:::i;:::-;34515:34;34574:1;34571;34567:9;34559:17;;34391:191;;;;:::o;34588:220::-;34728:34;34724:1;34716:6;34712:14;34705:58;34797:3;34792:2;34784:6;34780:15;34773:28;34588:220;:::o;34814:366::-;34956:3;34977:67;35041:2;35036:3;34977:67;:::i;:::-;34970:74;;35053:93;35142:3;35053:93;:::i;:::-;35171:2;35166:3;35162:12;35155:19;;34814:366;;;:::o;35186:419::-;35352:4;35390:2;35379:9;35375:18;35367:26;;35439:9;35433:4;35429:20;35425:1;35414:9;35410:17;35403:47;35467:131;35593:4;35467:131;:::i;:::-;35459:139;;35186:419;;;:::o;35611:147::-;35712:11;35749:3;35734:18;;35611:147;;;;:::o;35764:114::-;;:::o;35884:398::-;36043:3;36064:83;36145:1;36140:3;36064:83;:::i;:::-;36057:90;;36156:93;36245:3;36156:93;:::i;:::-;36274:1;36269:3;36265:11;36258:18;;35884:398;;;:::o;36288:379::-;36472:3;36494:147;36637:3;36494:147;:::i;:::-;36487:154;;36658:3;36651:10;;36288:379;;;:::o;36673:442::-;36822:4;36860:2;36849:9;36845:18;36837:26;;36873:71;36941:1;36930:9;36926:17;36917:6;36873:71;:::i;:::-;36954:72;37022:2;37011:9;37007:18;36998:6;36954:72;:::i;:::-;37036;37104:2;37093:9;37089:18;37080:6;37036:72;:::i;:::-;36673:442;;;;;;:::o;37121:180::-;37169:77;37166:1;37159:88;37266:4;37263:1;37256:15;37290:4;37287:1;37280:15;37307:180;37355:77;37352:1;37345:88;37452:4;37449:1;37442:15;37476:4;37473:1;37466:15;37493:143;37550:5;37581:6;37575:13;37566:22;;37597:33;37624:5;37597:33;:::i;:::-;37493:143;;;;:::o;37642:351::-;37712:6;37761:2;37749:9;37740:7;37736:23;37732:32;37729:119;;;37767:79;;:::i;:::-;37729:119;37887:1;37912:64;37968:7;37959:6;37948:9;37944:22;37912:64;:::i;:::-;37902:74;;37858:128;37642:351;;;;:::o;37999:85::-;38044:7;38073:5;38062:16;;37999:85;;;:::o;38090:158::-;38148:9;38181:61;38199:42;38208:32;38234:5;38208:32;:::i;:::-;38199:42;:::i;:::-;38181:61;:::i;:::-;38168:74;;38090:158;;;:::o;38254:147::-;38349:45;38388:5;38349:45;:::i;:::-;38344:3;38337:58;38254:147;;:::o;38407:114::-;38474:6;38508:5;38502:12;38492:22;;38407:114;;;:::o;38527:184::-;38626:11;38660:6;38655:3;38648:19;38700:4;38695:3;38691:14;38676:29;;38527:184;;;;:::o;38717:132::-;38784:4;38807:3;38799:11;;38837:4;38832:3;38828:14;38820:22;;38717:132;;;:::o;38855:108::-;38932:24;38950:5;38932:24;:::i;:::-;38927:3;38920:37;38855:108;;:::o;38969:179::-;39038:10;39059:46;39101:3;39093:6;39059:46;:::i;:::-;39137:4;39132:3;39128:14;39114:28;;38969:179;;;;:::o;39154:113::-;39224:4;39256;39251:3;39247:14;39239:22;;39154:113;;;:::o;39303:732::-;39422:3;39451:54;39499:5;39451:54;:::i;:::-;39521:86;39600:6;39595:3;39521:86;:::i;:::-;39514:93;;39631:56;39681:5;39631:56;:::i;:::-;39710:7;39741:1;39726:284;39751:6;39748:1;39745:13;39726:284;;;39827:6;39821:13;39854:63;39913:3;39898:13;39854:63;:::i;:::-;39847:70;;39940:60;39993:6;39940:60;:::i;:::-;39930:70;;39786:224;39773:1;39770;39766:9;39761:14;;39726:284;;;39730:14;40026:3;40019:10;;39427:608;;;39303:732;;;;:::o;40041:831::-;40304:4;40342:3;40331:9;40327:19;40319:27;;40356:71;40424:1;40413:9;40409:17;40400:6;40356:71;:::i;:::-;40437:80;40513:2;40502:9;40498:18;40489:6;40437:80;:::i;:::-;40564:9;40558:4;40554:20;40549:2;40538:9;40534:18;40527:48;40592:108;40695:4;40686:6;40592:108;:::i;:::-;40584:116;;40710:72;40778:2;40767:9;40763:18;40754:6;40710:72;:::i;:::-;40792:73;40860:3;40849:9;40845:19;40836:6;40792:73;:::i;:::-;40041:831;;;;;;;;:::o;40878:807::-;41127:4;41165:3;41154:9;41150:19;41142:27;;41179:71;41247:1;41236:9;41232:17;41223:6;41179:71;:::i;:::-;41260:72;41328:2;41317:9;41313:18;41304:6;41260:72;:::i;:::-;41342:80;41418:2;41407:9;41403:18;41394:6;41342:80;:::i;:::-;41432;41508:2;41497:9;41493:18;41484:6;41432:80;:::i;:::-;41522:73;41590:3;41579:9;41575:19;41566:6;41522:73;:::i;:::-;41605;41673:3;41662:9;41658:19;41649:6;41605:73;:::i;:::-;40878:807;;;;;;;;;:::o;41691:663::-;41779:6;41787;41795;41844:2;41832:9;41823:7;41819:23;41815:32;41812:119;;;41850:79;;:::i;:::-;41812:119;41970:1;41995:64;42051:7;42042:6;42031:9;42027:22;41995:64;:::i;:::-;41985:74;;41941:128;42108:2;42134:64;42190:7;42181:6;42170:9;42166:22;42134:64;:::i;:::-;42124:74;;42079:129;42247:2;42273:64;42329:7;42320:6;42309:9;42305:22;42273:64;:::i;:::-;42263:74;;42218:129;41691:663;;;;;:::o
Swarm Source
ipfs://9413a3b9b896d3f86cad64321c0392572bf99a74de529e6db50675424c2091a1
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.