ERC-20
Overview
Max Total Supply
1,000,000,000 SPE
Holders
8,510
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
SavePlanetEarth
Compiler Version
v0.8.25+commit.b61c2a91
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.25; import "./IERC20.sol"; import "./Ownable2Step.sol"; import "./Address.sol"; import "./Context.sol"; // IWETH interface to interact with the WETH contract interface IWETH { function withdraw(uint) 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 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 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 SavePlanetEarth is Context, IERC20, Ownable2Step { using Address for address; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) public _isPair; mapping (address => bool) public _isBanned; uint256 private constant _tTotal = 1e9 * 10**9; string private constant _name = "SavePlanetEarth"; string private constant _symbol = "SPE"; uint8 private constant _decimals = 9; address public _stakingRewardsWalletAddress; address public _liqWalletAddress; uint256 public _buyStakingRewardsFee = 10; uint256 public _buyLiquidityFee = 10; uint256 public _sellStakingRewardsFee = 10; uint256 public _sellLiquidityFee = 10; uint256 private _stakingRewardsFee; uint256 private _liquidityFee; uint256 private _slippageTolerance = 0; bool public _contractFeesEnabled = true; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool private _inSwapAndLiquify; bool public _swapAndLiquifyEnabled = true; bool public _swapEnabled = true; uint256 public _maxTxAmount = _tTotal; uint256 public _numTokensSellToAddToLiquidity = 1e5 * 10**9; event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity); event NumTokensSellToAddToLiquidityUpdated(uint256 numTokensSellToAddToLiquidity); event SetContractFeesEnabled(bool _bool); event RouterSet(address _router); event SetIsPair(address _address, bool _bool); event SetIsBanned(address _address, bool _bool); event SetSwapEnabled(bool enabled); event SetStakingRewardsWalletAddress(address _address); event SetLiqWalletAddress(address _address); event WithdrawalEther(uint256 _amount, address to); event WithdrawalToken(address _tokenAddr, uint256 _amount, address to); event ExcludeFromFee(address account); event IncludeInFee(address account); event SetBuyStakingRewardsFee(uint256 fee); event SetBuyLiquidityFee(uint256 fee); event SetSellStakingRewardsFee(uint256 fee); event SetSellLiquidityFee(uint256 fee); event SetMaxTxAmount(uint256 maxTxAmount); event FeesRemoved(); // Custom Errors error ZeroAddressError(); error TransferAmountExceedsMaxTx(); error TransferDisabled(); error AddressBanned(); modifier _lockTheSwap { _inSwapAndLiquify = true; _; _inSwapAndLiquify = false; } constructor(address router, address stakingRewardsWallet, address liqWallet) { require(stakingRewardsWallet != address(0), "Error: stakingRewardsWallet address cannot be zero address"); require(liqWallet != address(0), "Error: liqWallet address cannot be zero address"); _tOwned[owner()] = _tTotal; _setRouter(router); _stakingRewardsWalletAddress = stakingRewardsWallet; _liqWalletAddress = liqWallet; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[stakingRewardsWallet] = true; _isExcludedFromFee[liqWallet] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), owner(), _tTotal); } function name() external pure returns (string memory) { return _name; } function symbol() external pure returns (string memory) { return _symbol; } function decimals() external pure returns (uint8) { return _decimals; } function totalSupply() external pure override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { return _tOwned[account]; } function transfer(address recipient, uint256 amount) external override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) external view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) external override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount); return true; } function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue); return true; } function setSlippageTolerance(uint256 newTolerance) external onlyOwner { require(newTolerance <= 5000, "Slippage too high"); _slippageTolerance = newTolerance; } function getSlippageTolerance() external view returns (uint256) { return _slippageTolerance; } function excludeFromFee(address account) external onlyOwner { _isExcludedFromFee[account] = true; emit ExcludeFromFee(account); } function includeInFee(address account) external onlyOwner { _isExcludedFromFee[account] = false; emit IncludeInFee(account); } function setBuyStakingRewardsFeePercent(uint256 stakingRewardsFee) external onlyOwner() { _buyStakingRewardsFee = stakingRewardsFee; require(_buyStakingRewardsFee + _buyLiquidityFee <= 100, "Total fees exceed 10%"); emit SetBuyStakingRewardsFee(stakingRewardsFee); } function setBuyLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() { _buyLiquidityFee = liquidityFee; require(_buyStakingRewardsFee + _buyLiquidityFee <= 100, "Total fees exceed 10%"); emit SetBuyLiquidityFee(liquidityFee); } function setSellStakingRewardsFeePercent(uint256 stakingRewardsFee) external onlyOwner() { _sellStakingRewardsFee = stakingRewardsFee; require(_sellStakingRewardsFee + _sellLiquidityFee <= 100, "Total fees exceed 10%"); emit SetSellStakingRewardsFee(stakingRewardsFee); } function setSellLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() { _sellLiquidityFee = liquidityFee; require(_sellStakingRewardsFee + _sellLiquidityFee <= 100, "Total fees exceed 10%"); emit SetSellLiquidityFee(liquidityFee); } function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() { _maxTxAmount = _tTotal * maxTxPercent / 100; emit SetMaxTxAmount(_maxTxAmount); } function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner() { _swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function setSwapEnabled(bool _enabled) external onlyOwner() { _swapEnabled = _enabled; emit SetSwapEnabled(_enabled); } function setStakingRewardsWalletAddress(address _address) external onlyOwner() { require(_address != address(0), "Staking addr zero"); _stakingRewardsWalletAddress = _address; emit SetStakingRewardsWalletAddress(_address); } function setLiqWalletAddress(address _address) external onlyOwner() { require(_address != address(0), "Liq addr zero"); _liqWalletAddress = _address; emit SetLiqWalletAddress(_address); } function setNumTokensSellToAddToLiquidity(uint256 _amount) external onlyOwner() { require(_amount != 0, "Amount must be greater than zero"); _numTokensSellToAddToLiquidity = _amount; emit NumTokensSellToAddToLiquidityUpdated(_amount); } function setContractFeesEnabled(bool _bool) external onlyOwner() { _contractFeesEnabled = _bool; emit SetContractFeesEnabled(_bool); } function _setRouter(address _router) private { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_router); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH()); if(uniswapV2Pair == address(0)) uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; setIsPair(uniswapV2Pair, true); emit RouterSet(_router); } function setRouter(address _router) external onlyOwner() { _setRouter(_router); } receive() external payable {} function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "Approve from zero addr"); require(spender != address(0), "Approve to zero addr"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { if (from == address(0)) revert ZeroAddressError(); if (to == address(0)) revert ZeroAddressError(); if (amount == 0) revert TransferAmountExceedsMaxTx(); if (from != owner() && to != owner() && amount > _maxTxAmount) { revert TransferAmountExceedsMaxTx(); } if (!_swapEnabled && (_isPair[to] || _isPair[from])) { revert TransferDisabled(); } if (_isBanned[from] || _isBanned[to]) { revert AddressBanned(); } uint256 contractTokenBalance = balanceOf(address(this)); if (contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= _numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !_inSwapAndLiquify && _isPair[to] && _swapAndLiquifyEnabled && !_isExcludedFromFee[from] ) { contractTokenBalance = _numTokensSellToAddToLiquidity; _swapAndLiquify(contractTokenBalance); } bool takeFee = true; if (!_isPair[from] && !_isPair[to]) { takeFee = false; } if (!_contractFeesEnabled) { takeFee = false; } if (_contractFeesEnabled && (from.isContract() || to.isContract())) { takeFee = true; } if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } if (_isPair[from] || from.isContract()) { _stakingRewardsFee = _buyStakingRewardsFee; _liquidityFee = _buyLiquidityFee; } if (_isPair[to] || to.isContract()) { _stakingRewardsFee = _sellStakingRewardsFee; _liquidityFee = _sellLiquidityFee; } _tokenTransfer(from, to, amount, takeFee); } function batchTransfer(address[] calldata recipients, uint256[] calldata amounts) external { require(recipients.length == amounts.length, "Len mismatch"); for (uint256 i = 0; i < recipients.length; ++i) { // Change i++ to ++i _transfer(_msgSender(), recipients[i], amounts[i]); } } function _swapAndLiquify(uint256 contractTokenBalance) private _lockTheSwap { uint256 half = contractTokenBalance >> 1; uint256 otherHalf = contractTokenBalance - half; uint256 initialBalance = address(this).balance; _swapTokensForEth(half); uint256 newBalance = address(this).balance - initialBalance; _addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function _swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); // Token (SPE) path[1] = uniswapV2Router.WETH(); // WETH // Calculate minimum ETH output based on the adjustable slippage tolerance uint256[] memory amountsOut = uniswapV2Router.getAmountsOut(tokenAmount, path); uint256 amountOutMin = (amountsOut[1] * (10000 - _slippageTolerance)) / 10000; _approve(address(this), address(uniswapV2Router), tokenAmount); // Perform the swap with the calculated amountOutMin uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, amountOutMin, path, address(this), block.timestamp ); // Unwrap WETH to ETH if any WETH was received uint256 wethBalance = IERC20(uniswapV2Router.WETH()).balanceOf(address(this)); if (wethBalance > 0) { IWETH(uniswapV2Router.WETH()).withdraw(wethBalance); } } function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); // Calculate minimum amounts for tokens and ETH with slippage tolerance uint256 tokenAmountMin = (tokenAmount * (10000 - _slippageTolerance)) / 10000; uint256 ethAmountMin = (ethAmount * (10000 - _slippageTolerance)) / 10000; uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, tokenAmountMin, // Minimum token amount with slippage applied ethAmountMin, // Minimum ETH amount with slippage applied _liqWalletAddress, block.timestamp ); emit Transfer(address(this), uniswapV2Pair, tokenAmount); } function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private { if(!takeFee) _removeAllFee(); _transferStandard(sender, recipient, amount); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { require(_tOwned[sender] >= tAmount, "Insufficient balance"); uint256 tStakingRewards = _calculateStakingRewardsFee(tAmount); uint256 tLiquidity = _calculateLiquidityFee(tAmount); require(tStakingRewards + tLiquidity <= tAmount, "Invalid fee calculation"); uint256 tTransferAmount = tAmount - tStakingRewards - tLiquidity; _tOwned[sender] = _tOwned[sender] - tAmount; _tOwned[recipient] = _tOwned[recipient] + tTransferAmount; if (tLiquidity > 0) { _takeLiquidity(tLiquidity); } if (tStakingRewards > 0) { _takeStakingRewards(tStakingRewards); } emit Transfer(sender, recipient, tTransferAmount); } function _takeLiquidity(uint256 tLiquidity) private { if (tLiquidity != 0) { _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity; emit Transfer(msg.sender, address(this), tLiquidity); } } function _takeStakingRewards(uint256 tStakingRewards) private { if (tStakingRewards != 0) { _tOwned[_stakingRewardsWalletAddress] = _tOwned[_stakingRewardsWalletAddress] + tStakingRewards; emit Transfer(msg.sender, _stakingRewardsWalletAddress, tStakingRewards); } } function _calculateStakingRewardsFee(uint256 _amount) private view returns (uint256) { return _amount * _stakingRewardsFee / 1000; } function _calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount * _liquidityFee / 1000; } function _removeAllFee() private { _stakingRewardsFee = 0; _liquidityFee = 0; } function isExcludedFromFee(address account) external view returns(bool) { return _isExcludedFromFee[account]; } function setIsPair(address _address, bool value) public onlyOwner() { require(_address != address(0), "Error: Pair address cannot be zero address"); _isPair[_address] = value; emit SetIsPair(_address, value); } function setIsBanned(address _address, bool value) external onlyOwner() { require(_address != address(0), "Error: Address cannot be zero address"); _isBanned[_address] = value; emit SetIsBanned(_address, value); } function withdrawalToken(address _tokenAddr, uint _amount, address to) external onlyOwner() { require(to != address(0), "Error: withdrawal to zero address"); IERC20 token = IERC20(_tokenAddr); token.transfer(to, _amount); emit WithdrawalToken(_tokenAddr, _amount, to); } function withdrawalEther(uint _amount, address to) external onlyOwner() { require(address(this).balance >= _amount, "Insufficient contract balance"); require(to != address(0), "Recipient address cannot be the zero address"); (bool success, ) = to.call{value: _amount}(""); require(success, "Ether withdrawal failed"); emit WithdrawalEther(_amount, to); } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.25; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.25; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.25; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ 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); }
// SPDX-License-Identifier: MIT pragma solidity 0.8.25; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract 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() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (access/Ownable2Step.sol) pragma solidity 0.8.25; import {Ownable} from "./Ownable.sol"; /** * @dev Contract module which provides access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * This extension of the {Ownable} contract includes a two-step mechanism to transfer * ownership, where the new owner must call {acceptOwnership} in order to replace the * old one. This can help prevent common mistakes, such as transfers of ownership to * incorrect accounts, or to contracts that are unable to interact with the * permission system. * * The initial owner is specified at deployment time in the constructor for `Ownable`. This * can later be changed with {transferOwnership} and {acceptOwnership}. * * This module is used through inheritance. It will make available all functions * from parent (Ownable). */ abstract contract Ownable2Step is Ownable { address private _pendingOwner; event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner); /** * @dev Returns the address of the pending owner. */ function pendingOwner() public view virtual returns (address) { return _pendingOwner; } /** * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. * Can only be called by the current owner. * * Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer. */ function transferOwnership(address newOwner) public virtual override onlyOwner { _pendingOwner = newOwner; emit OwnershipTransferStarted(owner(), newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner. * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual override { delete _pendingOwner; super._transferOwnership(newOwner); } /** * @dev The new owner accepts the ownership transfer. */ function acceptOwnership() public virtual { address sender = _msgSender(); if (pendingOwner() != sender) { require(sender == owner(), "Ownable: unauthorized account"); } _transferOwnership(sender); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"stakingRewardsWallet","type":"address"},{"internalType":"address","name":"liqWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AddressBanned","type":"error"},{"inputs":[],"name":"TransferAmountExceedsMaxTx","type":"error"},{"inputs":[],"name":"TransferDisabled","type":"error"},{"inputs":[],"name":"ZeroAddressError","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromFee","type":"event"},{"anonymous":false,"inputs":[],"name":"FeesRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"IncludeInFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"numTokensSellToAddToLiquidity","type":"uint256"}],"name":"NumTokensSellToAddToLiquidityUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_router","type":"address"}],"name":"RouterSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"SetBuyLiquidityFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"SetBuyStakingRewardsFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_bool","type":"bool"}],"name":"SetContractFeesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_bool","type":"bool"}],"name":"SetIsBanned","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_bool","type":"bool"}],"name":"SetIsPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"SetLiqWalletAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"SetMaxTxAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"SetSellLiquidityFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"SetSellStakingRewardsFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"SetStakingRewardsWalletAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SetSwapEnabled","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":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"WithdrawalEther","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_tokenAddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"WithdrawalToken","type":"event"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyStakingRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_contractFeesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBanned","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liqWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_numTokensSellToAddToLiquidity","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":"_sellStakingRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_stakingRewardsWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"batchTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getSlippageTolerance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setBuyLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakingRewardsFee","type":"uint256"}],"name":"setBuyStakingRewardsFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_bool","type":"bool"}],"name":"setContractFeesEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setIsBanned","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setIsPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setLiqWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setSellLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakingRewardsFee","type":"uint256"}],"name":"setSellStakingRewardsFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTolerance","type":"uint256"}],"name":"setSlippageTolerance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setStakingRewardsWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawalEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawalToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600a6009819055808055600b819055600c556000600f556010805460ff191660011790556011805461010160a81b61ffff60a81b19909116179055670de0b6b3a7640000601255655af3107a400060135534801561006157600080fd5b50604051613952380380613952833981016040819052610080916107c2565b610089336102d5565b6001600160a01b03821661010a5760405162461bcd60e51b815260206004820152603a60248201527f4572726f723a207374616b696e675265776172647357616c6c6574206164647260448201527f6573732063616e6e6f74206265207a65726f206164647265737300000000000060648201526084015b60405180910390fd5b6001600160a01b0381166101785760405162461bcd60e51b815260206004820152602f60248201527f4572726f723a206c697157616c6c657420616464726573732063616e6e6f742060448201526e6265207a65726f206164647265737360881b6064820152608401610101565b670de0b6b3a7640000600260006101976000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556101ba836102f1565b600780546001600160a01b038085166001600160a01b03199283161790925560088054928416929091169190911790556001600460006102026000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790558682168152600490935281832080548516600190811790915590851683528183208054851682179055308352912080549092161790556102786000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef670de0b6b3a76400006040516102c591815260200190565b60405180910390a3505050610827565b600180546001600160a01b03191690556102ee81610637565b50565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610334573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103589190610805565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c99190610805565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015610414573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104389190610805565b601180546001600160a01b0319166001600160a01b039290921691821790556105c057806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104bd9190610805565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561050a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052e9190610805565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561057b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059f9190610805565b601180546001600160a01b0319166001600160a01b03929092169190911790555b601080546001600160a01b0380841661010002610100600160a81b0319909216919091179091556011546105f691166001610687565b6040516001600160a01b03831681527fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d15906020015b60405180910390a15050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031633146106e15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610101565b6001600160a01b03821661074a5760405162461bcd60e51b815260206004820152602a60248201527f4572726f723a205061697220616464726573732063616e6e6f74206265207a65604482015269726f206164647265737360b01b6064820152608401610101565b6001600160a01b038216600081815260056020908152604091829020805460ff19168515159081179091558251938452908301527f92d4086705a3958aa2cd18830ddaff7bb93db05b6818910190392a55047397ee910161062b565b80516001600160a01b03811681146107bd57600080fd5b919050565b6000806000606084860312156107d757600080fd5b6107e0846107a6565b92506107ee602085016107a6565b91506107fc604085016107a6565b90509250925092565b60006020828403121561081757600080fd5b610820826107a6565b9392505050565b61311c806108366000396000f3fe60806040526004361061031e5760003560e01c806388d695b2116101ab578063c49b9a80116100f7578063e30c397811610095578063f0f165af1161006f578063f0f165af146109bc578063f2fde38b146109dc578063f4f492a4146109fc578063fb81062914610a1c57600080fd5b8063e30c397814610968578063ea2f0b3714610986578063ed0b1dad146109a657600080fd5b8063dc44b6a0116100d1578063dc44b6a0146108cc578063dd62ed3e146108e2578063e01af92c14610928578063e28a731d1461094857600080fd5b8063c49b9a801461086b578063cbecede01461088b578063d543dbeb146108ac57600080fd5b8063a457c2d711610164578063b489c5b11161013e578063b489c5b1146107cb578063c069d956146107eb578063c0d786551461081b578063c14a42391461083b57600080fd5b8063a457c2d714610775578063a9059cbb14610795578063b3f22ce3146107b557600080fd5b806388d695b2146106ab5780638da5cb5b146106cb57806395558d84146106e957806395d89b4114610709578063978e1cc814610735578063996c39851461075557600080fd5b806335e17cb91161026a5780635876ccc51161022357806379ba5097116101fd57806379ba50971461064a5780637d1db4a51461065f57806380f5818f1461067557806388790a681461069557600080fd5b80635876ccc5146105df57806370a08231146105ff578063715018a61461063557600080fd5b806335e17cb9146105065780633950935114610526578063437823ec1461054657806349bd5a5e146105665780634fab9edf146105865780635342acb4146105a657600080fd5b8063117da1ee116102d757806323b872dd116102b157806323b872dd146104905780632410d887146104b05780632d513f36146104d0578063313ce567146104ea57600080fd5b8063117da1ee146104185780631694505e1461043857806318160ddd1461047557600080fd5b8063068075971461032a57806306fdde031461034e5780630915de5c1461038f578063095ea7b3146103b157806309afb3ce146103e15780630c475c941461040257600080fd5b3661032557005b600080fd5b34801561033657600080fd5b50600f545b6040519081526020015b60405180910390f35b34801561035a57600080fd5b5060408051808201909152600f81526e0a6c2eccaa0d8c2dccae88ac2e4e8d608b1b60208201525b6040516103459190612b21565b34801561039b57600080fd5b506103af6103aa366004612b70565b610a3c565b005b3480156103bd57600080fd5b506103d16103cc366004612b9e565b610ad9565b6040519015158152602001610345565b3480156103ed57600080fd5b506011546103d190600160b01b900460ff1681565b34801561040e57600080fd5b5061033b600b5481565b34801561042457600080fd5b506103af610433366004612b70565b610af0565b34801561044457600080fd5b5060105461045d9061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610345565b34801561048157600080fd5b50670de0b6b3a764000061033b565b34801561049c57600080fd5b506103d16104ab366004612bca565b610b65565b3480156104bc57600080fd5b506103af6104cb366004612c19565b610bb7565b3480156104dc57600080fd5b506010546103d19060ff1681565b3480156104f657600080fd5b5060405160098152602001610345565b34801561051257600080fd5b506103af610521366004612c52565b610cae565b34801561053257600080fd5b506103d1610541366004612b9e565b610dff565b34801561055257600080fd5b506103af610561366004612c94565b610e36565b34801561057257600080fd5b5060115461045d906001600160a01b031681565b34801561059257600080fd5b506103af6105a1366004612cb8565b610eb4565b3480156105b257600080fd5b506103d16105c1366004612c94565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156105eb57600080fd5b506103af6105fa366004612b70565b610f1f565b34801561060b57600080fd5b5061033b61061a366004612c94565b6001600160a01b031660009081526002602052604090205490565b34801561064157600080fd5b506103af610fad565b34801561065657600080fd5b506103af610fe3565b34801561066b57600080fd5b5061033b60125481565b34801561068157600080fd5b506103af610690366004612b70565b611060565b3480156106a157600080fd5b5061033b600c5481565b3480156106b757600080fd5b506103af6106c6366004612d21565b6110ed565b3480156106d757600080fd5b506000546001600160a01b031661045d565b3480156106f557600080fd5b5060085461045d906001600160a01b031681565b34801561071557600080fd5b5060408051808201909152600381526253504560e81b6020820152610382565b34801561074157600080fd5b506103af610750366004612c19565b61118e565b34801561076157600080fd5b506103af610770366004612b70565b611278565b34801561078157600080fd5b506103d1610790366004612b9e565b611306565b3480156107a157600080fd5b506103d16107b0366004612b9e565b61133d565b3480156107c157600080fd5b5061033b60135481565b3480156107d757600080fd5b506103af6107e6366004612d8d565b61134a565b3480156107f757600080fd5b506103d1610806366004612c94565b60066020526000908152604090205460ff1681565b34801561082757600080fd5b506103af610836366004612c94565b611518565b34801561084757600080fd5b506103d1610856366004612c94565b60056020526000908152604090205460ff1681565b34801561087757600080fd5b506103af610886366004612cb8565b61154b565b34801561089757600080fd5b506011546103d190600160a81b900460ff1681565b3480156108b857600080fd5b506103af6108c7366004612b70565b6115c2565b3480156108d857600080fd5b5061033b600a5481565b3480156108ee57600080fd5b5061033b6108fd366004612db2565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561093457600080fd5b506103af610943366004612cb8565b61163f565b34801561095457600080fd5b506103af610963366004612c94565b6116b6565b34801561097457600080fd5b506001546001600160a01b031661045d565b34801561099257600080fd5b506103af6109a1366004612c94565b611778565b3480156109b257600080fd5b5061033b60095481565b3480156109c857600080fd5b506103af6109d7366004612b70565b6117f3565b3480156109e857600080fd5b506103af6109f7366004612c94565b6118a2565b348015610a0857600080fd5b5060075461045d906001600160a01b031681565b348015610a2857600080fd5b506103af610a37366004612c94565b611935565b6000546001600160a01b03163314610a6f5760405162461bcd60e51b8152600401610a6690612de0565b60405180910390fd5b6009819055600a54606490610a849083612e2b565b1115610aa25760405162461bcd60e51b8152600401610a6690612e3e565b6040518181527f6c8b1a454aa876c702c30ac7b2e5dd3431345a1b627afd01ccd0f0f6df9c78f5906020015b60405180910390a150565b6000610ae63384846119f3565b5060015b92915050565b6000546001600160a01b03163314610b1a5760405162461bcd60e51b8152600401610a6690612de0565b611388811115610b605760405162461bcd60e51b81526020600482015260116024820152700a6d8d2e0e0c2ceca40e8dede40d0d2ced607b1b6044820152606401610a66565b600f55565b6000610b72848484611af0565b6001600160a01b038416600090815260036020908152604080832033808552925290912054610bad918691610ba8908690612e6d565b6119f3565b5060019392505050565b6000546001600160a01b03163314610be15760405162461bcd60e51b8152600401610a6690612de0565b6001600160a01b038216610c4a5760405162461bcd60e51b815260206004820152602a60248201527f4572726f723a205061697220616464726573732063616e6e6f74206265207a65604482015269726f206164647265737360b01b6064820152608401610a66565b6001600160a01b038216600081815260056020908152604091829020805460ff19168515159081179091558251938452908301527f92d4086705a3958aa2cd18830ddaff7bb93db05b6818910190392a55047397ee91015b60405180910390a15050565b6000546001600160a01b03163314610cd85760405162461bcd60e51b8152600401610a6690612de0565b6001600160a01b038116610d385760405162461bcd60e51b815260206004820152602160248201527f4572726f723a207769746864726177616c20746f207a65726f206164647265736044820152607360f81b6064820152608401610a66565b60405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284919082169063a9059cbb906044016020604051808303816000875af1158015610d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dae9190612e80565b50604080516001600160a01b0386811682526020820186905284168183015290517f03e22ea144aa78f0a88a3bc6036c5f6d5bc2d276affbc5f88c38a9346c5b2eee9181900360600190a150505050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610ae6918590610ba8908690612e2b565b6000546001600160a01b03163314610e605760405162461bcd60e51b8152600401610a6690612de0565b6001600160a01b038116600081815260046020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b629101610ace565b6000546001600160a01b03163314610ede5760405162461bcd60e51b8152600401610a6690612de0565b6010805460ff19168215159081179091556040519081527f75b4185b2596596b18e7ded7eec3b258b81f659c5b4097d5023706248fb123e690602001610ace565b6000546001600160a01b03163314610f495760405162461bcd60e51b8152600401610a6690612de0565b600c819055600b54606490610f5f908390612e2b565b1115610f7d5760405162461bcd60e51b8152600401610a6690612e3e565b6040518181527f5b15ca41d7664fab2a7b033dfd5e4489e59a821f0b0a3d5703033abbeae3561a90602001610ace565b6000546001600160a01b03163314610fd75760405162461bcd60e51b8152600401610a6690612de0565b610fe16000611ea5565b565b60015433906001600160a01b03168114611054576000546001600160a01b038281169116146110545760405162461bcd60e51b815260206004820152601d60248201527f4f776e61626c653a20756e617574686f72697a6564206163636f756e740000006044820152606401610a66565b61105d81611ea5565b50565b6000546001600160a01b0316331461108a5760405162461bcd60e51b8152600401610a6690612de0565b600b819055600c5460649061109f9083612e2b565b11156110bd5760405162461bcd60e51b8152600401610a6690612e3e565b6040518181527f7f2ed68285c9b891e46182ee69d1e86477629130552c31d416b27c2ca30fd55d90602001610ace565b82811461112b5760405162461bcd60e51b815260206004820152600c60248201526b098cadc40dad2e6dac2e8c6d60a31b6044820152606401610a66565b60005b838110156111875761117f3386868481811061114c5761114c612e9d565b90506020020160208101906111619190612c94565b85858581811061117357611173612e9d565b90506020020135611af0565b60010161112e565b5050505050565b6000546001600160a01b031633146111b85760405162461bcd60e51b8152600401610a6690612de0565b6001600160a01b03821661121c5760405162461bcd60e51b815260206004820152602560248201527f4572726f723a20416464726573732063616e6e6f74206265207a65726f206164604482015264647265737360d81b6064820152608401610a66565b6001600160a01b038216600081815260066020908152604091829020805460ff19168515159081179091558251938452908301527f80069036c5381e9b8bf3feeaddce86ce3886eaabaddb4b90926400a11ba6bd1a9101610ca2565b6000546001600160a01b031633146112a25760405162461bcd60e51b8152600401610a6690612de0565b600a8190556009546064906112b8908390612e2b565b11156112d65760405162461bcd60e51b8152600401610a6690612e3e565b6040518181527f7a5ac6708a2bf6569d722803b802884ce63f79adc3854f70962199dd82ebb2b690602001610ace565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610ae6918590610ba8908690612e6d565b6000610ae6338484611af0565b6000546001600160a01b031633146113745760405162461bcd60e51b8152600401610a6690612de0565b814710156113c45760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e7420636f6e74726163742062616c616e63650000006044820152606401610a66565b6001600160a01b03811661142f5760405162461bcd60e51b815260206004820152602c60248201527f526563697069656e7420616464726573732063616e6e6f74206265207468652060448201526b7a65726f206164647265737360a01b6064820152608401610a66565b6000816001600160a01b03168360405160006040518083038185875af1925050503d806000811461147c576040519150601f19603f3d011682016040523d82523d6000602084013e611481565b606091505b50509050806114d25760405162461bcd60e51b815260206004820152601760248201527f4574686572207769746864726177616c206661696c65640000000000000000006044820152606401610a66565b604080518481526001600160a01b03841660208201527f1335dbbdb9b494b202125cf292465f26a3815684b44edcdda11abf30539486da910160405180910390a1505050565b6000546001600160a01b031633146115425760405162461bcd60e51b8152600401610a6690612de0565b61105d81611ebe565b6000546001600160a01b031633146115755760405162461bcd60e51b8152600401610a6690612de0565b60118054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610ace90831515815260200190565b6000546001600160a01b031633146115ec5760405162461bcd60e51b8152600401610a6690612de0565b606461160082670de0b6b3a7640000612eb3565b61160a9190612eca565b60128190556040519081527f4a02caf9e7317d663463d3d976767ba90289279dd55c0a46f962536efc87a9a690602001610ace565b6000546001600160a01b031633146116695760405162461bcd60e51b8152600401610a6690612de0565b60118054821515600160b01b0260ff60b01b199091161790556040517f8bcc108c7d867d0a70433f71ecba3056c4dcc48eaabe4ca987f9fb1f836091d590610ace90831515815260200190565b6000546001600160a01b031633146116e05760405162461bcd60e51b8152600401610a6690612de0565b6001600160a01b03811661172a5760405162461bcd60e51b81526020600482015260116024820152705374616b696e672061646472207a65726f60781b6044820152606401610a66565b600780546001600160a01b0319166001600160a01b0383169081179091556040519081527f9b961d75830f7f5a44c773fb6b0fe3b7cba9475e6625cd3ad965464926253bbb90602001610ace565b6000546001600160a01b031633146117a25760405162461bcd60e51b8152600401610a6690612de0565b6001600160a01b038116600081815260046020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101610ace565b6000546001600160a01b0316331461181d5760405162461bcd60e51b8152600401610a6690612de0565b8060000361186d5760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f6044820152606401610a66565b60138190556040518181527fab1090599596cfb0c655b6424e552fba2cedf77457ed354fbe96e9abf4aa1f1390602001610ace565b6000546001600160a01b031633146118cc5760405162461bcd60e51b8152600401610a6690612de0565b600180546001600160a01b0383166001600160a01b031990911681179091556118fd6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6000546001600160a01b0316331461195f5760405162461bcd60e51b8152600401610a6690612de0565b6001600160a01b0381166119a55760405162461bcd60e51b815260206004820152600d60248201526c4c69712061646472207a65726f60981b6044820152606401610a66565b600880546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e9a0b8203652d5225235c014e4f37e3858eec49cf1711b07649267d6cab269690602001610ace565b6001600160a01b038316611a425760405162461bcd60e51b815260206004820152601660248201527520b8383937bb3290333937b6903d32b9379030b2323960511b6044820152606401610a66565b6001600160a01b038216611a8f5760405162461bcd60e51b815260206004820152601460248201527320b8383937bb32903a37903d32b9379030b2323960611b6044820152606401610a66565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611b1757604051633efa09af60e01b815260040160405180910390fd5b6001600160a01b038216611b3e57604051633efa09af60e01b815260040160405180910390fd5b80600003611b5f576040516303cf4c2b60e31b815260040160405180910390fd5b6000546001600160a01b03848116911614801590611b8b57506000546001600160a01b03838116911614155b8015611b98575060125481115b15611bb6576040516303cf4c2b60e31b815260040160405180910390fd5b601154600160b01b900460ff16158015611c0a57506001600160a01b03821660009081526005602052604090205460ff1680611c0a57506001600160a01b03831660009081526005602052604090205460ff165b15611c285760405163a24e573d60e01b815260040160405180910390fd5b6001600160a01b03831660009081526006602052604090205460ff1680611c6757506001600160a01b03821660009081526006602052604090205460ff165b15611c8557604051634c3852a160e11b815260040160405180910390fd5b306000908152600260205260409020546012548110611ca357506012545b60135481108015908190611cc15750601154600160a01b900460ff16155b8015611ce557506001600160a01b03841660009081526005602052604090205460ff165b8015611cfa5750601154600160a81b900460ff165b8015611d1f57506001600160a01b03851660009081526004602052604090205460ff16155b15611d32576013549150611d32826121fc565b6001600160a01b03851660009081526005602052604090205460019060ff16158015611d7757506001600160a01b03851660009081526005602052604090205460ff16155b15611d80575060005b60105460ff16611d8e575060005b60105460ff168015611dbc57506001600160a01b0386163b151580611dbc57506001600160a01b0385163b15155b15611dc5575060015b6001600160a01b03861660009081526004602052604090205460ff1680611e0457506001600160a01b03851660009081526004602052604090205460ff165b15611e0d575060005b6001600160a01b03861660009081526005602052604090205460ff1680611e3d57506001600160a01b0386163b15155b15611e4f57600954600d55600a54600e555b6001600160a01b03851660009081526005602052604090205460ff1680611e7f57506001600160a01b0385163b15155b15611e9157600b54600d55600c54600e555b611e9d86868684612299565b505050505050565b600180546001600160a01b031916905561105d816122be565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f259190612eec565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f969190612eec565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611fe1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120059190612eec565b601180546001600160a01b0319166001600160a01b0392909216918217905561218d57806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612066573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208a9190612eec565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120fb9190612eec565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612148573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216c9190612eec565b601180546001600160a01b0319166001600160a01b03929092169190911790555b601080546001600160a01b0380841661010002610100600160a81b0319909216919091179091556011546121c391166001610bb7565b6040516001600160a01b03831681527fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d1590602001610ca2565b6011805460ff60a01b1916600160a01b179055600181901c60006122208284612e6d565b90504761222c8361230e565b60006122388247612e6d565b90506122448382612719565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506011805460ff60a01b19169055505050565b806122ad576122ad6000600d819055600e55565b6122b8848484612862565b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061234357612343612e9d565b60200260200101906001600160a01b031690816001600160a01b031681525050601060019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123da9190612eec565b816001815181106123ed576123ed612e9d565b6001600160a01b03928316602091820292909201015260105460405163d06ca61f60e01b81526000926101009092049091169063d06ca61f906124369086908690600401612f64565b600060405180830381865afa158015612453573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261247b9190810190612f85565b90506000612710600f546127106124929190612e6d565b836001815181106124a5576124a5612e9d565b60200260200101516124b79190612eb3565b6124c19190612eca565b90506124e330601060019054906101000a90046001600160a01b0316866119f3565b60105460405163791ac94760e01b81526101009091046001600160a01b03169063791ac9479061251f9087908590889030904290600401613043565b600060405180830381600087803b15801561253957600080fd5b505af115801561254d573d6000803e3d6000fd5b505050506000601060019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ca9190612eec565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015612610573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612634919061307f565b9050801561118757601060019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561268f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b39190612eec565b6001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b81526004016126e091815260200190565b600060405180830381600087803b1580156126fa57600080fd5b505af115801561270e573d6000803e3d6000fd5b505050505050505050565b60105461273690309061010090046001600160a01b0316846119f3565b6000612710600f5461271061274b9190612e6d565b6127559085612eb3565b61275f9190612eca565b90506000612710600f546127106127769190612e6d565b6127809085612eb3565b61278a9190612eca565b60105460085460405163f305d71960e01b81523060048201526024810188905260448101869052606481018490526001600160a01b0391821660848201524260a4820152929350610100909104169063f305d71990859060c40160606040518083038185885af1158015612802573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128279190613098565b50506011546040518681526001600160a01b03909116915030906000805160206130c78339815191529060200160405180910390a350505050565b6001600160a01b0383166000908152600260205260409020548111156128c15760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610a66565b60006128cc82612a1c565b905060006128d983612a39565b9050826128e68284612e2b565b11156129345760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964206665652063616c63756c6174696f6e0000000000000000006044820152606401610a66565b6000816129418486612e6d565b61294b9190612e6d565b6001600160a01b038716600090815260026020526040902054909150612972908590612e6d565b6001600160a01b0380881660009081526002602052604080822093909355908716815220546129a2908290612e2b565b6001600160a01b03861660009081526002602052604090205581156129ca576129ca82612a4c565b82156129d9576129d983612aae565b846001600160a01b0316866001600160a01b03166000805160206130c783398151915283604051612a0c91815260200190565b60405180910390a3505050505050565b60006103e8600d5483612a2f9190612eb3565b610aea9190612eca565b60006103e8600e5483612a2f9190612eb3565b801561105d5730600090815260026020526040902054612a6d908290612e2b565b306000818152600260205260409081902092909255905133906000805160206130c783398151915290612aa39085815260200190565b60405180910390a350565b801561105d576007546001600160a01b0316600090815260026020526040902054612ada908290612e2b565b600780546001600160a01b03908116600090815260026020908152604091829020949094559154915184815291169133916000805160206130c78339815191529101612aa3565b60006020808352835180602085015260005b81811015612b4f57858101830151858201604001528201612b33565b506000604082860101526040601f19601f8301168501019250505092915050565b600060208284031215612b8257600080fd5b5035919050565b6001600160a01b038116811461105d57600080fd5b60008060408385031215612bb157600080fd5b8235612bbc81612b89565b946020939093013593505050565b600080600060608486031215612bdf57600080fd5b8335612bea81612b89565b92506020840135612bfa81612b89565b929592945050506040919091013590565b801515811461105d57600080fd5b60008060408385031215612c2c57600080fd5b8235612c3781612b89565b91506020830135612c4781612c0b565b809150509250929050565b600080600060608486031215612c6757600080fd5b8335612c7281612b89565b9250602084013591506040840135612c8981612b89565b809150509250925092565b600060208284031215612ca657600080fd5b8135612cb181612b89565b9392505050565b600060208284031215612cca57600080fd5b8135612cb181612c0b565b60008083601f840112612ce757600080fd5b50813567ffffffffffffffff811115612cff57600080fd5b6020830191508360208260051b8501011115612d1a57600080fd5b9250929050565b60008060008060408587031215612d3757600080fd5b843567ffffffffffffffff80821115612d4f57600080fd5b612d5b88838901612cd5565b90965094506020870135915080821115612d7457600080fd5b50612d8187828801612cd5565b95989497509550505050565b60008060408385031215612da057600080fd5b823591506020830135612c4781612b89565b60008060408385031215612dc557600080fd5b8235612dd081612b89565b91506020830135612c4781612b89565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610aea57610aea612e15565b602080825260159082015274546f74616c2066656573206578636565642031302560581b604082015260600190565b81810381811115610aea57610aea612e15565b600060208284031215612e9257600080fd5b8151612cb181612c0b565b634e487b7160e01b600052603260045260246000fd5b8082028115828204841417610aea57610aea612e15565b600082612ee757634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612efe57600080fd5b8151612cb181612b89565b634e487b7160e01b600052604160045260246000fd5b60008151808452602080850194506020840160005b83811015612f595781516001600160a01b031687529582019590820190600101612f34565b509495945050505050565b828152604060208201526000612f7d6040830184612f1f565b949350505050565b60006020808385031215612f9857600080fd5b825167ffffffffffffffff80821115612fb057600080fd5b818501915085601f830112612fc457600080fd5b815181811115612fd657612fd6612f09565b8060051b604051601f19603f83011681018181108582111715612ffb57612ffb612f09565b60405291825284820192508381018501918883111561301957600080fd5b938501935b828510156130375784518452938501939285019261301e565b98975050505050505050565b85815284602082015260a06040820152600061306260a0830186612f1f565b6001600160a01b0394909416606083015250608001529392505050565b60006020828403121561309157600080fd5b5051919050565b6000806000606084860312156130ad57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220f4640a567691585ade4b672e38d860e4272fadf326e3730d81e5545200d6759f64736f6c634300081900330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000c146a433e8ecab01e20ee19a4cee9c47947296e900000000000000000000000008f407337fc86041abf624470d18a26bde8712ab
Deployed Bytecode
0x60806040526004361061031e5760003560e01c806388d695b2116101ab578063c49b9a80116100f7578063e30c397811610095578063f0f165af1161006f578063f0f165af146109bc578063f2fde38b146109dc578063f4f492a4146109fc578063fb81062914610a1c57600080fd5b8063e30c397814610968578063ea2f0b3714610986578063ed0b1dad146109a657600080fd5b8063dc44b6a0116100d1578063dc44b6a0146108cc578063dd62ed3e146108e2578063e01af92c14610928578063e28a731d1461094857600080fd5b8063c49b9a801461086b578063cbecede01461088b578063d543dbeb146108ac57600080fd5b8063a457c2d711610164578063b489c5b11161013e578063b489c5b1146107cb578063c069d956146107eb578063c0d786551461081b578063c14a42391461083b57600080fd5b8063a457c2d714610775578063a9059cbb14610795578063b3f22ce3146107b557600080fd5b806388d695b2146106ab5780638da5cb5b146106cb57806395558d84146106e957806395d89b4114610709578063978e1cc814610735578063996c39851461075557600080fd5b806335e17cb91161026a5780635876ccc51161022357806379ba5097116101fd57806379ba50971461064a5780637d1db4a51461065f57806380f5818f1461067557806388790a681461069557600080fd5b80635876ccc5146105df57806370a08231146105ff578063715018a61461063557600080fd5b806335e17cb9146105065780633950935114610526578063437823ec1461054657806349bd5a5e146105665780634fab9edf146105865780635342acb4146105a657600080fd5b8063117da1ee116102d757806323b872dd116102b157806323b872dd146104905780632410d887146104b05780632d513f36146104d0578063313ce567146104ea57600080fd5b8063117da1ee146104185780631694505e1461043857806318160ddd1461047557600080fd5b8063068075971461032a57806306fdde031461034e5780630915de5c1461038f578063095ea7b3146103b157806309afb3ce146103e15780630c475c941461040257600080fd5b3661032557005b600080fd5b34801561033657600080fd5b50600f545b6040519081526020015b60405180910390f35b34801561035a57600080fd5b5060408051808201909152600f81526e0a6c2eccaa0d8c2dccae88ac2e4e8d608b1b60208201525b6040516103459190612b21565b34801561039b57600080fd5b506103af6103aa366004612b70565b610a3c565b005b3480156103bd57600080fd5b506103d16103cc366004612b9e565b610ad9565b6040519015158152602001610345565b3480156103ed57600080fd5b506011546103d190600160b01b900460ff1681565b34801561040e57600080fd5b5061033b600b5481565b34801561042457600080fd5b506103af610433366004612b70565b610af0565b34801561044457600080fd5b5060105461045d9061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610345565b34801561048157600080fd5b50670de0b6b3a764000061033b565b34801561049c57600080fd5b506103d16104ab366004612bca565b610b65565b3480156104bc57600080fd5b506103af6104cb366004612c19565b610bb7565b3480156104dc57600080fd5b506010546103d19060ff1681565b3480156104f657600080fd5b5060405160098152602001610345565b34801561051257600080fd5b506103af610521366004612c52565b610cae565b34801561053257600080fd5b506103d1610541366004612b9e565b610dff565b34801561055257600080fd5b506103af610561366004612c94565b610e36565b34801561057257600080fd5b5060115461045d906001600160a01b031681565b34801561059257600080fd5b506103af6105a1366004612cb8565b610eb4565b3480156105b257600080fd5b506103d16105c1366004612c94565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156105eb57600080fd5b506103af6105fa366004612b70565b610f1f565b34801561060b57600080fd5b5061033b61061a366004612c94565b6001600160a01b031660009081526002602052604090205490565b34801561064157600080fd5b506103af610fad565b34801561065657600080fd5b506103af610fe3565b34801561066b57600080fd5b5061033b60125481565b34801561068157600080fd5b506103af610690366004612b70565b611060565b3480156106a157600080fd5b5061033b600c5481565b3480156106b757600080fd5b506103af6106c6366004612d21565b6110ed565b3480156106d757600080fd5b506000546001600160a01b031661045d565b3480156106f557600080fd5b5060085461045d906001600160a01b031681565b34801561071557600080fd5b5060408051808201909152600381526253504560e81b6020820152610382565b34801561074157600080fd5b506103af610750366004612c19565b61118e565b34801561076157600080fd5b506103af610770366004612b70565b611278565b34801561078157600080fd5b506103d1610790366004612b9e565b611306565b3480156107a157600080fd5b506103d16107b0366004612b9e565b61133d565b3480156107c157600080fd5b5061033b60135481565b3480156107d757600080fd5b506103af6107e6366004612d8d565b61134a565b3480156107f757600080fd5b506103d1610806366004612c94565b60066020526000908152604090205460ff1681565b34801561082757600080fd5b506103af610836366004612c94565b611518565b34801561084757600080fd5b506103d1610856366004612c94565b60056020526000908152604090205460ff1681565b34801561087757600080fd5b506103af610886366004612cb8565b61154b565b34801561089757600080fd5b506011546103d190600160a81b900460ff1681565b3480156108b857600080fd5b506103af6108c7366004612b70565b6115c2565b3480156108d857600080fd5b5061033b600a5481565b3480156108ee57600080fd5b5061033b6108fd366004612db2565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561093457600080fd5b506103af610943366004612cb8565b61163f565b34801561095457600080fd5b506103af610963366004612c94565b6116b6565b34801561097457600080fd5b506001546001600160a01b031661045d565b34801561099257600080fd5b506103af6109a1366004612c94565b611778565b3480156109b257600080fd5b5061033b60095481565b3480156109c857600080fd5b506103af6109d7366004612b70565b6117f3565b3480156109e857600080fd5b506103af6109f7366004612c94565b6118a2565b348015610a0857600080fd5b5060075461045d906001600160a01b031681565b348015610a2857600080fd5b506103af610a37366004612c94565b611935565b6000546001600160a01b03163314610a6f5760405162461bcd60e51b8152600401610a6690612de0565b60405180910390fd5b6009819055600a54606490610a849083612e2b565b1115610aa25760405162461bcd60e51b8152600401610a6690612e3e565b6040518181527f6c8b1a454aa876c702c30ac7b2e5dd3431345a1b627afd01ccd0f0f6df9c78f5906020015b60405180910390a150565b6000610ae63384846119f3565b5060015b92915050565b6000546001600160a01b03163314610b1a5760405162461bcd60e51b8152600401610a6690612de0565b611388811115610b605760405162461bcd60e51b81526020600482015260116024820152700a6d8d2e0e0c2ceca40e8dede40d0d2ced607b1b6044820152606401610a66565b600f55565b6000610b72848484611af0565b6001600160a01b038416600090815260036020908152604080832033808552925290912054610bad918691610ba8908690612e6d565b6119f3565b5060019392505050565b6000546001600160a01b03163314610be15760405162461bcd60e51b8152600401610a6690612de0565b6001600160a01b038216610c4a5760405162461bcd60e51b815260206004820152602a60248201527f4572726f723a205061697220616464726573732063616e6e6f74206265207a65604482015269726f206164647265737360b01b6064820152608401610a66565b6001600160a01b038216600081815260056020908152604091829020805460ff19168515159081179091558251938452908301527f92d4086705a3958aa2cd18830ddaff7bb93db05b6818910190392a55047397ee91015b60405180910390a15050565b6000546001600160a01b03163314610cd85760405162461bcd60e51b8152600401610a6690612de0565b6001600160a01b038116610d385760405162461bcd60e51b815260206004820152602160248201527f4572726f723a207769746864726177616c20746f207a65726f206164647265736044820152607360f81b6064820152608401610a66565b60405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284919082169063a9059cbb906044016020604051808303816000875af1158015610d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dae9190612e80565b50604080516001600160a01b0386811682526020820186905284168183015290517f03e22ea144aa78f0a88a3bc6036c5f6d5bc2d276affbc5f88c38a9346c5b2eee9181900360600190a150505050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610ae6918590610ba8908690612e2b565b6000546001600160a01b03163314610e605760405162461bcd60e51b8152600401610a6690612de0565b6001600160a01b038116600081815260046020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b629101610ace565b6000546001600160a01b03163314610ede5760405162461bcd60e51b8152600401610a6690612de0565b6010805460ff19168215159081179091556040519081527f75b4185b2596596b18e7ded7eec3b258b81f659c5b4097d5023706248fb123e690602001610ace565b6000546001600160a01b03163314610f495760405162461bcd60e51b8152600401610a6690612de0565b600c819055600b54606490610f5f908390612e2b565b1115610f7d5760405162461bcd60e51b8152600401610a6690612e3e565b6040518181527f5b15ca41d7664fab2a7b033dfd5e4489e59a821f0b0a3d5703033abbeae3561a90602001610ace565b6000546001600160a01b03163314610fd75760405162461bcd60e51b8152600401610a6690612de0565b610fe16000611ea5565b565b60015433906001600160a01b03168114611054576000546001600160a01b038281169116146110545760405162461bcd60e51b815260206004820152601d60248201527f4f776e61626c653a20756e617574686f72697a6564206163636f756e740000006044820152606401610a66565b61105d81611ea5565b50565b6000546001600160a01b0316331461108a5760405162461bcd60e51b8152600401610a6690612de0565b600b819055600c5460649061109f9083612e2b565b11156110bd5760405162461bcd60e51b8152600401610a6690612e3e565b6040518181527f7f2ed68285c9b891e46182ee69d1e86477629130552c31d416b27c2ca30fd55d90602001610ace565b82811461112b5760405162461bcd60e51b815260206004820152600c60248201526b098cadc40dad2e6dac2e8c6d60a31b6044820152606401610a66565b60005b838110156111875761117f3386868481811061114c5761114c612e9d565b90506020020160208101906111619190612c94565b85858581811061117357611173612e9d565b90506020020135611af0565b60010161112e565b5050505050565b6000546001600160a01b031633146111b85760405162461bcd60e51b8152600401610a6690612de0565b6001600160a01b03821661121c5760405162461bcd60e51b815260206004820152602560248201527f4572726f723a20416464726573732063616e6e6f74206265207a65726f206164604482015264647265737360d81b6064820152608401610a66565b6001600160a01b038216600081815260066020908152604091829020805460ff19168515159081179091558251938452908301527f80069036c5381e9b8bf3feeaddce86ce3886eaabaddb4b90926400a11ba6bd1a9101610ca2565b6000546001600160a01b031633146112a25760405162461bcd60e51b8152600401610a6690612de0565b600a8190556009546064906112b8908390612e2b565b11156112d65760405162461bcd60e51b8152600401610a6690612e3e565b6040518181527f7a5ac6708a2bf6569d722803b802884ce63f79adc3854f70962199dd82ebb2b690602001610ace565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610ae6918590610ba8908690612e6d565b6000610ae6338484611af0565b6000546001600160a01b031633146113745760405162461bcd60e51b8152600401610a6690612de0565b814710156113c45760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e7420636f6e74726163742062616c616e63650000006044820152606401610a66565b6001600160a01b03811661142f5760405162461bcd60e51b815260206004820152602c60248201527f526563697069656e7420616464726573732063616e6e6f74206265207468652060448201526b7a65726f206164647265737360a01b6064820152608401610a66565b6000816001600160a01b03168360405160006040518083038185875af1925050503d806000811461147c576040519150601f19603f3d011682016040523d82523d6000602084013e611481565b606091505b50509050806114d25760405162461bcd60e51b815260206004820152601760248201527f4574686572207769746864726177616c206661696c65640000000000000000006044820152606401610a66565b604080518481526001600160a01b03841660208201527f1335dbbdb9b494b202125cf292465f26a3815684b44edcdda11abf30539486da910160405180910390a1505050565b6000546001600160a01b031633146115425760405162461bcd60e51b8152600401610a6690612de0565b61105d81611ebe565b6000546001600160a01b031633146115755760405162461bcd60e51b8152600401610a6690612de0565b60118054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610ace90831515815260200190565b6000546001600160a01b031633146115ec5760405162461bcd60e51b8152600401610a6690612de0565b606461160082670de0b6b3a7640000612eb3565b61160a9190612eca565b60128190556040519081527f4a02caf9e7317d663463d3d976767ba90289279dd55c0a46f962536efc87a9a690602001610ace565b6000546001600160a01b031633146116695760405162461bcd60e51b8152600401610a6690612de0565b60118054821515600160b01b0260ff60b01b199091161790556040517f8bcc108c7d867d0a70433f71ecba3056c4dcc48eaabe4ca987f9fb1f836091d590610ace90831515815260200190565b6000546001600160a01b031633146116e05760405162461bcd60e51b8152600401610a6690612de0565b6001600160a01b03811661172a5760405162461bcd60e51b81526020600482015260116024820152705374616b696e672061646472207a65726f60781b6044820152606401610a66565b600780546001600160a01b0319166001600160a01b0383169081179091556040519081527f9b961d75830f7f5a44c773fb6b0fe3b7cba9475e6625cd3ad965464926253bbb90602001610ace565b6000546001600160a01b031633146117a25760405162461bcd60e51b8152600401610a6690612de0565b6001600160a01b038116600081815260046020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101610ace565b6000546001600160a01b0316331461181d5760405162461bcd60e51b8152600401610a6690612de0565b8060000361186d5760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f6044820152606401610a66565b60138190556040518181527fab1090599596cfb0c655b6424e552fba2cedf77457ed354fbe96e9abf4aa1f1390602001610ace565b6000546001600160a01b031633146118cc5760405162461bcd60e51b8152600401610a6690612de0565b600180546001600160a01b0383166001600160a01b031990911681179091556118fd6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6000546001600160a01b0316331461195f5760405162461bcd60e51b8152600401610a6690612de0565b6001600160a01b0381166119a55760405162461bcd60e51b815260206004820152600d60248201526c4c69712061646472207a65726f60981b6044820152606401610a66565b600880546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e9a0b8203652d5225235c014e4f37e3858eec49cf1711b07649267d6cab269690602001610ace565b6001600160a01b038316611a425760405162461bcd60e51b815260206004820152601660248201527520b8383937bb3290333937b6903d32b9379030b2323960511b6044820152606401610a66565b6001600160a01b038216611a8f5760405162461bcd60e51b815260206004820152601460248201527320b8383937bb32903a37903d32b9379030b2323960611b6044820152606401610a66565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611b1757604051633efa09af60e01b815260040160405180910390fd5b6001600160a01b038216611b3e57604051633efa09af60e01b815260040160405180910390fd5b80600003611b5f576040516303cf4c2b60e31b815260040160405180910390fd5b6000546001600160a01b03848116911614801590611b8b57506000546001600160a01b03838116911614155b8015611b98575060125481115b15611bb6576040516303cf4c2b60e31b815260040160405180910390fd5b601154600160b01b900460ff16158015611c0a57506001600160a01b03821660009081526005602052604090205460ff1680611c0a57506001600160a01b03831660009081526005602052604090205460ff165b15611c285760405163a24e573d60e01b815260040160405180910390fd5b6001600160a01b03831660009081526006602052604090205460ff1680611c6757506001600160a01b03821660009081526006602052604090205460ff165b15611c8557604051634c3852a160e11b815260040160405180910390fd5b306000908152600260205260409020546012548110611ca357506012545b60135481108015908190611cc15750601154600160a01b900460ff16155b8015611ce557506001600160a01b03841660009081526005602052604090205460ff165b8015611cfa5750601154600160a81b900460ff165b8015611d1f57506001600160a01b03851660009081526004602052604090205460ff16155b15611d32576013549150611d32826121fc565b6001600160a01b03851660009081526005602052604090205460019060ff16158015611d7757506001600160a01b03851660009081526005602052604090205460ff16155b15611d80575060005b60105460ff16611d8e575060005b60105460ff168015611dbc57506001600160a01b0386163b151580611dbc57506001600160a01b0385163b15155b15611dc5575060015b6001600160a01b03861660009081526004602052604090205460ff1680611e0457506001600160a01b03851660009081526004602052604090205460ff165b15611e0d575060005b6001600160a01b03861660009081526005602052604090205460ff1680611e3d57506001600160a01b0386163b15155b15611e4f57600954600d55600a54600e555b6001600160a01b03851660009081526005602052604090205460ff1680611e7f57506001600160a01b0385163b15155b15611e9157600b54600d55600c54600e555b611e9d86868684612299565b505050505050565b600180546001600160a01b031916905561105d816122be565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f259190612eec565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f969190612eec565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611fe1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120059190612eec565b601180546001600160a01b0319166001600160a01b0392909216918217905561218d57806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612066573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208a9190612eec565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120fb9190612eec565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612148573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216c9190612eec565b601180546001600160a01b0319166001600160a01b03929092169190911790555b601080546001600160a01b0380841661010002610100600160a81b0319909216919091179091556011546121c391166001610bb7565b6040516001600160a01b03831681527fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d1590602001610ca2565b6011805460ff60a01b1916600160a01b179055600181901c60006122208284612e6d565b90504761222c8361230e565b60006122388247612e6d565b90506122448382612719565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506011805460ff60a01b19169055505050565b806122ad576122ad6000600d819055600e55565b6122b8848484612862565b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061234357612343612e9d565b60200260200101906001600160a01b031690816001600160a01b031681525050601060019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123da9190612eec565b816001815181106123ed576123ed612e9d565b6001600160a01b03928316602091820292909201015260105460405163d06ca61f60e01b81526000926101009092049091169063d06ca61f906124369086908690600401612f64565b600060405180830381865afa158015612453573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261247b9190810190612f85565b90506000612710600f546127106124929190612e6d565b836001815181106124a5576124a5612e9d565b60200260200101516124b79190612eb3565b6124c19190612eca565b90506124e330601060019054906101000a90046001600160a01b0316866119f3565b60105460405163791ac94760e01b81526101009091046001600160a01b03169063791ac9479061251f9087908590889030904290600401613043565b600060405180830381600087803b15801561253957600080fd5b505af115801561254d573d6000803e3d6000fd5b505050506000601060019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ca9190612eec565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015612610573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612634919061307f565b9050801561118757601060019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561268f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b39190612eec565b6001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b81526004016126e091815260200190565b600060405180830381600087803b1580156126fa57600080fd5b505af115801561270e573d6000803e3d6000fd5b505050505050505050565b60105461273690309061010090046001600160a01b0316846119f3565b6000612710600f5461271061274b9190612e6d565b6127559085612eb3565b61275f9190612eca565b90506000612710600f546127106127769190612e6d565b6127809085612eb3565b61278a9190612eca565b60105460085460405163f305d71960e01b81523060048201526024810188905260448101869052606481018490526001600160a01b0391821660848201524260a4820152929350610100909104169063f305d71990859060c40160606040518083038185885af1158015612802573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128279190613098565b50506011546040518681526001600160a01b03909116915030906000805160206130c78339815191529060200160405180910390a350505050565b6001600160a01b0383166000908152600260205260409020548111156128c15760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610a66565b60006128cc82612a1c565b905060006128d983612a39565b9050826128e68284612e2b565b11156129345760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964206665652063616c63756c6174696f6e0000000000000000006044820152606401610a66565b6000816129418486612e6d565b61294b9190612e6d565b6001600160a01b038716600090815260026020526040902054909150612972908590612e6d565b6001600160a01b0380881660009081526002602052604080822093909355908716815220546129a2908290612e2b565b6001600160a01b03861660009081526002602052604090205581156129ca576129ca82612a4c565b82156129d9576129d983612aae565b846001600160a01b0316866001600160a01b03166000805160206130c783398151915283604051612a0c91815260200190565b60405180910390a3505050505050565b60006103e8600d5483612a2f9190612eb3565b610aea9190612eca565b60006103e8600e5483612a2f9190612eb3565b801561105d5730600090815260026020526040902054612a6d908290612e2b565b306000818152600260205260409081902092909255905133906000805160206130c783398151915290612aa39085815260200190565b60405180910390a350565b801561105d576007546001600160a01b0316600090815260026020526040902054612ada908290612e2b565b600780546001600160a01b03908116600090815260026020908152604091829020949094559154915184815291169133916000805160206130c78339815191529101612aa3565b60006020808352835180602085015260005b81811015612b4f57858101830151858201604001528201612b33565b506000604082860101526040601f19601f8301168501019250505092915050565b600060208284031215612b8257600080fd5b5035919050565b6001600160a01b038116811461105d57600080fd5b60008060408385031215612bb157600080fd5b8235612bbc81612b89565b946020939093013593505050565b600080600060608486031215612bdf57600080fd5b8335612bea81612b89565b92506020840135612bfa81612b89565b929592945050506040919091013590565b801515811461105d57600080fd5b60008060408385031215612c2c57600080fd5b8235612c3781612b89565b91506020830135612c4781612c0b565b809150509250929050565b600080600060608486031215612c6757600080fd5b8335612c7281612b89565b9250602084013591506040840135612c8981612b89565b809150509250925092565b600060208284031215612ca657600080fd5b8135612cb181612b89565b9392505050565b600060208284031215612cca57600080fd5b8135612cb181612c0b565b60008083601f840112612ce757600080fd5b50813567ffffffffffffffff811115612cff57600080fd5b6020830191508360208260051b8501011115612d1a57600080fd5b9250929050565b60008060008060408587031215612d3757600080fd5b843567ffffffffffffffff80821115612d4f57600080fd5b612d5b88838901612cd5565b90965094506020870135915080821115612d7457600080fd5b50612d8187828801612cd5565b95989497509550505050565b60008060408385031215612da057600080fd5b823591506020830135612c4781612b89565b60008060408385031215612dc557600080fd5b8235612dd081612b89565b91506020830135612c4781612b89565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610aea57610aea612e15565b602080825260159082015274546f74616c2066656573206578636565642031302560581b604082015260600190565b81810381811115610aea57610aea612e15565b600060208284031215612e9257600080fd5b8151612cb181612c0b565b634e487b7160e01b600052603260045260246000fd5b8082028115828204841417610aea57610aea612e15565b600082612ee757634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612efe57600080fd5b8151612cb181612b89565b634e487b7160e01b600052604160045260246000fd5b60008151808452602080850194506020840160005b83811015612f595781516001600160a01b031687529582019590820190600101612f34565b509495945050505050565b828152604060208201526000612f7d6040830184612f1f565b949350505050565b60006020808385031215612f9857600080fd5b825167ffffffffffffffff80821115612fb057600080fd5b818501915085601f830112612fc457600080fd5b815181811115612fd657612fd6612f09565b8060051b604051601f19603f83011681018181108582111715612ffb57612ffb612f09565b60405291825284820192508381018501918883111561301957600080fd5b938501935b828510156130375784518452938501939285019261301e565b98975050505050505050565b85815284602082015260a06040820152600061306260a0830186612f1f565b6001600160a01b0394909416606083015250608001529392505050565b60006020828403121561309157600080fd5b5051919050565b6000806000606084860312156130ad57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220f4640a567691585ade4b672e38d860e4272fadf326e3730d81e5545200d6759f64736f6c63430008190033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000c146a433e8ecab01e20ee19a4cee9c47947296e900000000000000000000000008f407337fc86041abf624470d18a26bde8712ab
-----Decoded View---------------
Arg [0] : router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : stakingRewardsWallet (address): 0xC146a433E8ecAB01E20EE19a4CEE9C47947296E9
Arg [2] : liqWallet (address): 0x08f407337fc86041ABf624470d18a26BdE8712aB
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 000000000000000000000000c146a433e8ecab01e20ee19a4cee9c47947296e9
Arg [2] : 00000000000000000000000008f407337fc86041abf624470d18a26bde8712ab
Deployed Bytecode Sourcemap
8249:17429:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13683:100;;;;;;;;;;-1:-1:-1;13761:18:5;;13683:100;;;160:25:6;;;148:2;133:18;13683:100:5;;;;;;;;11741:85;;;;;;;;;;-1:-1:-1;11813:5:5;;;;;;;;;;;;-1:-1:-1;;;11813:5:5;;;;11741:85;;;;;;;:::i;14116:298::-;;;;;;;;;;-1:-1:-1;14116:298:5;;;;;:::i;:::-;;:::i;:::-;;12584:163;;;;;;;;;;-1:-1:-1;12584:163:5;;;;;:::i;:::-;;:::i;:::-;;;1555:14:6;;1548:22;1530:41;;1518:2;1503:18;12584:163:5;1390:187:6;9470:31:5;;;;;;;;;;-1:-1:-1;9470:31:5;;;;-1:-1:-1;;;9470:31:5;;;;;;9027:42;;;;;;;;;;;;;;;;13491:184;;;;;;;;;;-1:-1:-1;13491:184:5;;;;;:::i;:::-;;:::i;9296:41::-;;;;;;;;;;-1:-1:-1;9296:41:5;;;;;;;-1:-1:-1;;;;;9296:41:5;;;;;;-1:-1:-1;;;;;1773:32:6;;;1755:51;;1743:2;1728:18;9296:41:5;1582:230:6;12024:97:5;;;;;;;;;;-1:-1:-1;8676:11:5;12024:97;;12755:268;;;;;;;;;;-1:-1:-1;12755:268:5;;;;;:::i;:::-;;:::i;24440:242::-;;;;;;;;;;-1:-1:-1;24440:242:5;;;;;:::i;:::-;;:::i;9248:39::-;;;;;;;;;;-1:-1:-1;9248:39:5;;;;;;;;11931:85;;;;;;;;;;-1:-1:-1;11931:85:5;;8833:1;2930:36:6;;2918:2;2903:18;11931:85:5;2788:184:6;24943:311:5;;;;;;;;;;-1:-1:-1;24943:311:5;;;;;:::i;:::-;;:::i;13031:217::-;;;;;;;;;;-1:-1:-1;13031:217:5;;;;;:::i;:::-;;:::i;13791:152::-;;;;;;;;;;-1:-1:-1;13791:152:5;;;;;:::i;:::-;;:::i;9344:28::-;;;;;;;;;;-1:-1:-1;9344:28:5;;;;-1:-1:-1;;;;;9344:28:5;;;16596:157;;;;;;;;;;-1:-1:-1;16596:157:5;;;;;:::i;:::-;;:::i;24307:125::-;;;;;;;;;;-1:-1:-1;24307:125:5;;;;;:::i;:::-;-1:-1:-1;;;;;24397:27:5;24373:4;24397:27;;;:18;:27;;;;;;;;;24307:125;15017:273;;;;;;;;;;-1:-1:-1;15017:273:5;;;;;:::i;:::-;;:::i;12129:117::-;;;;;;;;;;-1:-1:-1;12129:117:5;;;;;:::i;:::-;-1:-1:-1;;;;;12222:16:5;12195:7;12222:16;;;:7;:16;;;;;;;12129:117;1659:103:3;;;;;;;;;;;;;:::i;2243:247:4:-;;;;;;;;;;;;;:::i;9514:37:5:-;;;;;;;;;;;;;;;;14702:303;;;;;;;;;;-1:-1:-1;14702:303:5;;;;;:::i;:::-;;:::i;9076:37::-;;;;;;;;;;;;;;;;19683:322;;;;;;;;;;-1:-1:-1;19683:322:5;;;;;:::i;:::-;;:::i;1008:87:3:-;;;;;;;;;;-1:-1:-1;1054:7:3;1081:6;-1:-1:-1;;;;;1081:6:3;1008:87;;8893:32:5;;;;;;;;;;-1:-1:-1;8893:32:5;;;;-1:-1:-1;;;;;8893:32:5;;;11834:89;;;;;;;;;;-1:-1:-1;11908:7:5;;;;;;;;;;;;-1:-1:-1;;;11908:7:5;;;;11834:89;;24690:245;;;;;;;;;;-1:-1:-1;24690:245:5;;;;;:::i;:::-;;:::i;14426:268::-;;;;;;;;;;-1:-1:-1;14426:268:5;;;;;:::i;:::-;;:::i;13256:227::-;;;;;;;;;;-1:-1:-1;13256:227:5;;;;;:::i;:::-;;:::i;12254:169::-;;;;;;;;;;-1:-1:-1;12254:169:5;;;;;:::i;:::-;;:::i;9558:59::-;;;;;;;;;;;;;;;;25266:404;;;;;;;;;;-1:-1:-1;25266:404:5;;;;;:::i;:::-;;:::i;8589:42::-;;;;;;;;;;-1:-1:-1;8589:42:5;;;;;:::i;:::-;;;;;;;;;;;;;;;;17314:95;;;;;;;;;;-1:-1:-1;17314:95:5;;;;;:::i;:::-;;:::i;8542:40::-;;;;;;;;;;-1:-1:-1;8542:40:5;;;;;:::i;:::-;;;;;;;;;;;;;;;;15483:176;;;;;;;;;;-1:-1:-1;15483:176:5;;;;;:::i;:::-;;:::i;9422:41::-;;;;;;;;;;-1:-1:-1;9422:41:5;;;;-1:-1:-1;;;9422:41:5;;;;;;15301:174;;;;;;;;;;-1:-1:-1;15301:174:5;;;;;:::i;:::-;;:::i;8982:36::-;;;;;;;;;;;;;;;;12431:145;;;;;;;;;;-1:-1:-1;12431:145:5;;;;;:::i;:::-;-1:-1:-1;;;;;12541:18:5;;;12514:7;12541:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12431:145;15671:142;;;;;;;;;;-1:-1:-1;15671:142:5;;;;;:::i;:::-;;:::i;15825:256::-;;;;;;;;;;-1:-1:-1;15825:256:5;;;;;:::i;:::-;;:::i;1231:99:4:-;;;;;;;;;;-1:-1:-1;1310:13:4;;-1:-1:-1;;;;;1310:13:4;1231:99;;13955:149:5;;;;;;;;;;-1:-1:-1;13955:149:5;;;;;:::i;:::-;;:::i;8934:41::-;;;;;;;;;;;;;;;;16320:268;;;;;;;;;;-1:-1:-1;16320:268:5;;;;;:::i;:::-;;:::i;1648:178:4:-;;;;;;;;;;-1:-1:-1;1648:178:4;;;;;:::i;:::-;;:::i;8843:43:5:-;;;;;;;;;;-1:-1:-1;8843:43:5;;;;-1:-1:-1;;;;;8843:43:5;;;16089:219;;;;;;;;;;-1:-1:-1;16089:219:5;;;;;:::i;:::-;;:::i;14116:298::-;1054:7:3;1081:6;-1:-1:-1;;;;;1081:6:3;682:10:1;1228:23:3;1220:68;;;;-1:-1:-1;;;1220:68:3;;;;;;;:::i;:::-;;;;;;;;;14215:21:5::1;:41:::0;;;14299:16:::1;::::0;14319:3:::1;::::0;14275:40:::1;::::0;14239:17;14275:40:::1;:::i;:::-;:47;;14267:81;;;;-1:-1:-1::0;;;14267:81:5::1;;;;;;;:::i;:::-;14364:42;::::0;160:25:6;;;14364:42:5::1;::::0;148:2:6;133:18;14364:42:5::1;;;;;;;;14116:298:::0;:::o;12584:163::-;12661:4;12678:39;682:10:1;12701:7:5;12710:6;12678:8;:39::i;:::-;-1:-1:-1;12735:4:5;12584:163;;;;;:::o;13491:184::-;1054:7:3;1081:6;-1:-1:-1;;;;;1081:6:3;682:10:1;1228:23:3;1220:68;;;;-1:-1:-1;;;1220:68:3;;;;;;;:::i;:::-;13597:4:5::1;13581:12;:20;;13573:50;;;::::0;-1:-1:-1;;;13573:50:5;;7182:2:6;13573:50:5::1;::::0;::::1;7164:21:6::0;7221:2;7201:18;;;7194:30;-1:-1:-1;;;7240:18:6;;;7233:47;7297:18;;13573:50:5::1;6980:341:6::0;13573:50:5::1;13634:18;:33:::0;13491:184::o;12755:268::-;12855:4;12872:36;12882:6;12890:9;12901:6;12872:9;:36::i;:::-;-1:-1:-1;;;;;12950:19:5;;;;;;:11;:19;;;;;;;;682:10:1;12950:33:5;;;;;;;;;12919:74;;12928:6;;12950:42;;12986:6;;12950:42;:::i;:::-;12919:8;:74::i;:::-;-1:-1:-1;13011:4:5;12755:268;;;;;:::o;24440:242::-;1054:7:3;1081:6;-1:-1:-1;;;;;1081:6:3;682:10:1;1228:23:3;1220:68;;;;-1:-1:-1;;;1220:68:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;24527:22:5;::::1;24519:77;;;::::0;-1:-1:-1;;;24519:77:5;;7661:2:6;24519:77:5::1;::::0;::::1;7643:21:6::0;7700:2;7680:18;;;7673:30;7739:34;7719:18;;;7712:62;-1:-1:-1;;;7790:18:6;;;7783:40;7840:19;;24519:77:5::1;7459:406:6::0;24519:77:5::1;-1:-1:-1::0;;;;;24607:17:5;::::1;;::::0;;;:7:::1;:17;::::0;;;;;;;;:25;;-1:-1:-1;;24607:25:5::1;::::0;::::1;;::::0;;::::1;::::0;;;24648:26;;8038:51:6;;;8105:18;;;8098:50;24648:26:5::1;::::0;8011:18:6;24648:26:5::1;;;;;;;;24440:242:::0;;:::o;24943:311::-;1054:7:3;1081:6;-1:-1:-1;;;;;1081:6:3;682:10:1;1228:23:3;1220:68;;;;-1:-1:-1;;;1220:68:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;25054:16:5;::::1;25046:62;;;::::0;-1:-1:-1;;;25046:62:5;;8361:2:6;25046:62:5::1;::::0;::::1;8343:21:6::0;8400:2;8380:18;;;8373:30;8439:34;8419:18;;;8412:62;-1:-1:-1;;;8490:18:6;;;8483:31;8531:19;;25046:62:5::1;8159:397:6::0;25046:62:5::1;25163:27;::::0;-1:-1:-1;;;25163:27:5;;-1:-1:-1;;;;;8753:32:6;;;25163:27:5::1;::::0;::::1;8735:51:6::0;8802:18;;;8795:34;;;25141:10:5;;25163:14;;::::1;::::0;::::1;::::0;8708:18:6;;25163:27:5::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;25206:40:5::1;::::0;;-1:-1:-1;;;;;9348:15:6;;;9330:34;;9395:2;9380:18;;9373:34;;;9443:15;;9423:18;;;9416:43;25206:40:5;;::::1;::::0;;;;9280:2:6;25206:40:5;;::::1;25035:219;24943:311:::0;;;:::o;13031:217::-;682:10:1;13121:4:5;13170:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13170:34:5;;;;;;;;;;13121:4;;13138:80;;13161:7;;13170:47;;13207:10;;13170:47;:::i;13791:152::-;1054:7:3;1081:6;-1:-1:-1;;;;;1081:6:3;682:10:1;1228:23:3;1220:68;;;;-1:-1:-1;;;1220:68:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;13862:27:5;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;13862:34:5::1;13892:4;13862:34;::::0;;13912:23;;1755:51:6;;;13912:23:5::1;::::0;1728:18:6;13912:23:5::1;1582:230:6::0;16596:157:5;1054:7:3;1081:6;-1:-1:-1;;;;;1081:6:3;682:10:1;1228:23:3;1220:68;;;;-1:-1:-1;;;1220:68:3;;;;;;;:::i;:::-;16672:20:5::1;:28:::0;;-1:-1:-1;;16672:28:5::1;::::0;::::1;;::::0;;::::1;::::0;;;16716:29:::1;::::0;1530:41:6;;;16716:29:5::1;::::0;1518:2:6;1503:18;16716:29:5::1;1390:187:6::0;15017:273:5;1054:7:3;1081:6;-1:-1:-1;;;;;1081:6:3;682:10:1;1228:23:3;1220:68;;;;-1:-1:-1;;;1220:68:3;;;;;;;:::i;:::-;15107:17:5::1;:32:::0;;;15158:22:::1;::::0;15204:3:::1;::::0;15158:42:::1;::::0;15127:12;;15158:42:::1;:::i;:::-;:49;;15150:83;;;;-1:-1:-1::0;;;15150:83:5::1;;;;;;;:::i;:::-;15249:33;::::0;160:25:6;;;15249:33:5::1;::::0;148:2:6;133:18;15249:33:5::1;14:177:6::0;1659:103:3;1054:7;1081:6;-1:-1:-1;;;;;1081:6:3;682:10:1;1228:23:3;1220:68;;;;-1:-1:-1;;;1220:68:3;;;;;;;:::i;:::-;1724:30:::1;1751:1;1724:18;:30::i;:::-;1659:103::o:0;2243:247:4:-;1310:13;;682:10:1;;-1:-1:-1;;;;;1310:13:4;2338:24;;2334:114;;1054:7:3;1081:6;-1:-1:-1;;;;;2386:17:4;;;1081:6:3;;2386:17:4;2378:59;;;;-1:-1:-1;;;2378:59:4;;9672:2:6;2378:59:4;;;9654:21:6;9711:2;9691:18;;;9684:30;9750:31;9730:18;;;9723:59;9799:18;;2378:59:4;9470:353:6;2378:59:4;2457:26;2476:6;2457:18;:26::i;:::-;2285:205;2243:247::o;14702:303:5:-;1054:7:3;1081:6;-1:-1:-1;;;;;1081:6:3;682:10:1;1228:23:3;1220:68;;;;-1:-1:-1;;;1220:68:3;;;;;;;:::i;:::-;14802:22:5::1;:42:::0;;;14888:17:::1;::::0;14909:3:::1;::::0;14863:42:::1;::::0;14827:17;14863:42:::1;:::i;:::-;:49;;14855:83;;;;-1:-1:-1::0;;;14855:83:5::1;;;;;;;:::i;:::-;14954:43;::::0;160:25:6;;;14954:43:5::1;::::0;148:2:6;133:18;14954:43:5::1;14:177:6::0;19683:322:5;19793:35;;;19785:60;;;;-1:-1:-1;;;19785:60:5;;10030:2:6;19785:60:5;;;10012:21:6;10069:2;10049:18;;;10042:30;-1:-1:-1;;;10088:18:6;;;10081:42;10140:18;;19785:60:5;9828:336:6;19785:60:5;19861:9;19856:146;19876:21;;;19856:146;;;19940:50;682:10:1;19964::5;;19975:1;19964:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;19979:7;;19987:1;19979:10;;;;;;;:::i;:::-;;;;;;;19940:9;:50::i;:::-;19899:3;;19856:146;;;;19683:322;;;;:::o;24690:245::-;1054:7:3;1081:6;-1:-1:-1;;;;;1081:6:3;682:10:1;1228:23:3;1220:68;;;;-1:-1:-1;;;1220:68:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;24781:22:5;::::1;24773:72;;;::::0;-1:-1:-1;;;24773:72:5;;10503:2:6;24773:72:5::1;::::0;::::1;10485:21:6::0;10542:2;10522:18;;;10515:30;10581:34;10561:18;;;10554:62;-1:-1:-1;;;10632:18:6;;;10625:35;10677:19;;24773:72:5::1;10301:401:6::0;24773:72:5::1;-1:-1:-1::0;;;;;24856:19:5;::::1;;::::0;;;:9:::1;:19;::::0;;;;;;;;:27;;-1:-1:-1;;24856:27:5::1;::::0;::::1;;::::0;;::::1;::::0;;;24899:28;;8038:51:6;;;8105:18;;;8098:50;24899:28:5::1;::::0;8011:18:6;24899:28:5::1;7870:284:6::0;14426:268:5;1054:7:3;1081:6;-1:-1:-1;;;;;1081:6:3;682:10:1;1228:23:3;1220:68;;;;-1:-1:-1;;;1220:68:3;;;;;;;:::i;:::-;14515:16:5::1;:31:::0;;;14565:21:::1;::::0;14609:3:::1;::::0;14565:40:::1;::::0;14534:12;;14565:40:::1;:::i;:::-;:47;;14557:81;;;;-1:-1:-1::0;;;14557:81:5::1;;;;;;;:::i;:::-;14654:32;::::0;160:25:6;;;14654:32:5::1;::::0;148:2:6;133:18;14654:32:5::1;14:177:6::0;13256:227:5;682:10:1;13351:4:5;13400:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13400:34:5;;;;;;;;;;13351:4;;13368:85;;13391:7;;13400:52;;13437:15;;13400:52;:::i;12254:169::-;12334:4;12351:42;682:10:1;12375:9:5;12386:6;12351:9;:42::i;25266:404::-;1054:7:3;1081:6;-1:-1:-1;;;;;1081:6:3;682:10:1;1228:23:3;1220:68;;;;-1:-1:-1;;;1220:68:3;;;;;;;:::i;:::-;25382:7:5::1;25357:21;:32;;25349:74;;;::::0;-1:-1:-1;;;25349:74:5;;10909:2:6;25349:74:5::1;::::0;::::1;10891:21:6::0;10948:2;10928:18;;;10921:30;10987:31;10967:18;;;10960:59;11036:18;;25349:74:5::1;10707:353:6::0;25349:74:5::1;-1:-1:-1::0;;;;;25442:16:5;::::1;25434:73;;;::::0;-1:-1:-1;;;25434:73:5;;11267:2:6;25434:73:5::1;::::0;::::1;11249:21:6::0;11306:2;11286:18;;;11279:30;11345:34;11325:18;;;11318:62;-1:-1:-1;;;11396:18:6;;;11389:42;11448:19;;25434:73:5::1;11065:408:6::0;25434:73:5::1;25519:12;25537:2;-1:-1:-1::0;;;;;25537:7:5::1;25552;25537:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25518:46;;;25583:7;25575:43;;;::::0;-1:-1:-1;;;25575:43:5;;11890:2:6;25575:43:5::1;::::0;::::1;11872:21:6::0;11929:2;11909:18;;;11902:30;11968:25;11948:18;;;11941:53;12011:18;;25575:43:5::1;11688:347:6::0;25575:43:5::1;25634:28;::::0;;12214:25:6;;;-1:-1:-1;;;;;12275:32:6;;12270:2;12255:18;;12248:60;25634:28:5::1;::::0;12187:18:6;25634:28:5::1;;;;;;;25338:332;25266:404:::0;;:::o;17314:95::-;1054:7:3;1081:6;-1:-1:-1;;;;;1081:6:3;682:10:1;1228:23:3;1220:68;;;;-1:-1:-1;;;1220:68:3;;;;;;;:::i;:::-;17382:19:5::1;17393:7;17382:10;:19::i;15483:176::-:0;1054:7:3;1081:6;-1:-1:-1;;;;;1081:6:3;682:10:1;1228:23:3;1220:68;;;;-1:-1:-1;;;1220:68:3;;;;;;;:::i;:::-;15564:22:5::1;:33:::0;;;::::1;;-1:-1:-1::0;;;15564:33:5::1;-1:-1:-1::0;;;;15564:33:5;;::::1;;::::0;;15613:38:::1;::::0;::::1;::::0;::::1;::::0;15589:8;1555:14:6;1548:22;1530:41;;1518:2;1503:18;;1390:187;15301:174:5;1054:7:3;1081:6;-1:-1:-1;;;;;1081:6:3;682:10:1;1228:23:3;1220:68;;;;-1:-1:-1;;;1220:68:3;;;;;;;:::i;:::-;15420:3:5::1;15395:22;15405:12:::0;8676:11:::1;15395:22;:::i;:::-;:28;;;;:::i;:::-;15380:12;:43:::0;;;15439:28:::1;::::0;160:25:6;;;15439:28:5::1;::::0;148:2:6;133:18;15439:28:5::1;14:177:6::0;15671:142:5;1054:7:3;1081:6;-1:-1:-1;;;;;1081:6:3;682:10:1;1228:23:3;1220:68;;;;-1:-1:-1;;;1220:68:3;;;;;;;:::i;:::-;15742:12:5::1;:23:::0;;;::::1;;-1:-1:-1::0;;;15742:23:5::1;-1:-1:-1::0;;;;15742:23:5;;::::1;;::::0;;15781:24:::1;::::0;::::1;::::0;::::1;::::0;15757:8;1555:14:6;1548:22;1530:41;;1518:2;1503:18;;1390:187;15825:256:5;1054:7:3;1081:6;-1:-1:-1;;;;;1081:6:3;682:10:1;1228:23:3;1220:68;;;;-1:-1:-1;;;1220:68:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;15923:22:5;::::1;15915:52;;;::::0;-1:-1:-1;;;15915:52:5;;12916:2:6;15915:52:5::1;::::0;::::1;12898:21:6::0;12955:2;12935:18;;;12928:30;-1:-1:-1;;;12974:18:6;;;12967:47;13031:18;;15915:52:5::1;12714:341:6::0;15915:52:5::1;15978:28;:39:::0;;-1:-1:-1;;;;;;15978:39:5::1;-1:-1:-1::0;;;;;15978:39:5;::::1;::::0;;::::1;::::0;;;16033:40:::1;::::0;1755:51:6;;;16033:40:5::1;::::0;1743:2:6;1728:18;16033:40:5::1;1582:230:6::0;13955:149:5;1054:7:3;1081:6;-1:-1:-1;;;;;1081:6:3;682:10:1;1228:23:3;1220:68;;;;-1:-1:-1;;;1220:68:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;14024:27:5;::::1;14054:5;14024:27:::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;14024:35:5::1;::::0;;14075:21;;1755:51:6;;;14075:21:5::1;::::0;1728:18:6;14075:21:5::1;1582:230:6::0;16320:268:5;1054:7:3;1081:6;-1:-1:-1;;;;;1081:6:3;682:10:1;1228:23:3;1220:68;;;;-1:-1:-1;;;1220:68:3;;;;;;;:::i;:::-;16419:7:5::1;16430:1;16419:12:::0;16411:57:::1;;;::::0;-1:-1:-1;;;16411:57:5;;13262:2:6;16411:57:5::1;::::0;::::1;13244:21:6::0;;;13281:18;;;13274:30;13340:34;13320:18;;;13313:62;13392:18;;16411:57:5::1;13060:356:6::0;16411:57:5::1;16479:30;:40:::0;;;16535:45:::1;::::0;160:25:6;;;16535:45:5::1;::::0;148:2:6;133:18;16535:45:5::1;14:177:6::0;1648:178:4;1054:7:3;1081:6;-1:-1:-1;;;;;1081:6:3;682:10:1;1228:23:3;1220:68;;;;-1:-1:-1;;;1220:68:3;;;;;;;:::i;:::-;1737:13:4::1;:24:::0;;-1:-1:-1;;;;;1737:24:4;::::1;-1:-1:-1::0;;;;;;1737:24:4;;::::1;::::0;::::1;::::0;;;1801:7:::1;1054::3::0;1081:6;-1:-1:-1;;;;;1081:6:3;;1008:87;1801:7:4::1;-1:-1:-1::0;;;;;1776:43:4::1;;;;;;;;;;;1648:178:::0;:::o;16089:219:5:-;1054:7:3;1081:6;-1:-1:-1;;;;;1081:6:3;682:10:1;1228:23:3;1220:68;;;;-1:-1:-1;;;1220:68:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;16176:22:5;::::1;16168:48;;;::::0;-1:-1:-1;;;16168:48:5;;13623:2:6;16168:48:5::1;::::0;::::1;13605:21:6::0;13662:2;13642:18;;;13635:30;-1:-1:-1;;;13681:18:6;;;13674:43;13734:18;;16168:48:5::1;13421:337:6::0;16168:48:5::1;16227:17;:28:::0;;-1:-1:-1;;;;;;16227:28:5::1;-1:-1:-1::0;;;;;16227:28:5;::::1;::::0;;::::1;::::0;;;16271:29:::1;::::0;1755:51:6;;;16271:29:5::1;::::0;1743:2:6;1728:18;16271:29:5::1;1582:230:6::0;17458:309:5;-1:-1:-1;;;;;17551:19:5;;17543:54;;;;-1:-1:-1;;;17543:54:5;;13965:2:6;17543:54:5;;;13947:21:6;14004:2;13984:18;;;13977:30;-1:-1:-1;;;14023:18:6;;;14016:52;14085:18;;17543:54:5;13763:346:6;17543:54:5;-1:-1:-1;;;;;17616:21:5;;17608:54;;;;-1:-1:-1;;;17608:54:5;;14316:2:6;17608:54:5;;;14298:21:6;14355:2;14335:18;;;14328:30;-1:-1:-1;;;14374:18:6;;;14367:50;14434:18;;17608:54:5;14114:344:6;17608:54:5;-1:-1:-1;;;;;17675:18:5;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17727:32;;160:25:6;;;17727:32:5;;133:18:6;17727:32:5;;;;;;;17458:309;;;:::o;17779:1896::-;-1:-1:-1;;;;;17877:18:5;;17873:49;;17904:18;;-1:-1:-1;;;17904:18:5;;;;;;;;;;;17873:49;-1:-1:-1;;;;;17933:16:5;;17929:47;;17958:18;;-1:-1:-1;;;17958:18:5;;;;;;;;;;;17929:47;17987:6;17997:1;17987:11;17983:52;;18007:28;;-1:-1:-1;;;18007:28:5;;;;;;;;;;;17983:52;1054:7:3;1081:6;-1:-1:-1;;;;;18048:15:5;;;1081:6:3;;18048:15:5;;;;:32;;-1:-1:-1;1054:7:3;1081:6;-1:-1:-1;;;;;18067:13:5;;;1081:6:3;;18067:13:5;;18048:32;:57;;;;;18093:12;;18084:6;:21;18048:57;18044:117;;;18125:28;;-1:-1:-1;;;18125:28:5;;;;;;;;;;;18044:117;18174:12;;-1:-1:-1;;;18174:12:5;;;;18173:13;:47;;;;-1:-1:-1;;;;;;18191:11:5;;;;;;:7;:11;;;;;;;;;:28;;-1:-1:-1;;;;;;18206:13:5;;;;;;:7;:13;;;;;;;;18191:28;18169:97;;;18240:18;;-1:-1:-1;;;18240:18:5;;;;;;;;;;;18169:97;-1:-1:-1;;;;;18278:15:5;;;;;;:9;:15;;;;;;;;;:32;;-1:-1:-1;;;;;;18297:13:5;;;;;;:9;:13;;;;;;;;18278:32;18274:79;;;18330:15;;-1:-1:-1;;;18330:15:5;;;;;;;;;;;18274:79;18410:4;18361:28;12222:16;;;:7;:16;;;;;;18457:12;;18433:36;;18429:96;;-1:-1:-1;18505:12:5;;18429:96;18588:30;;18564:54;;;;;;;18639:50;;-1:-1:-1;18672:17:5;;-1:-1:-1;;;18672:17:5;;;;18671:18;18639:50;:74;;;;-1:-1:-1;;;;;;18702:11:5;;;;;;:7;:11;;;;;;;;18639:74;:109;;;;-1:-1:-1;18726:22:5;;-1:-1:-1;;;18726:22:5;;;;18639:109;:147;;;;-1:-1:-1;;;;;;18762:24:5;;;;;;:18;:24;;;;;;;;18761:25;18639:147;18625:289;;;18828:30;;18805:53;;18869:37;18885:20;18869:15;:37::i;:::-;-1:-1:-1;;;;;18959:13:5;;18926:12;18959:13;;;:7;:13;;;;;;18941:4;;18959:13;;18958:14;:30;;;;-1:-1:-1;;;;;;18977:11:5;;;;;;:7;:11;;;;;;;;18976:12;18958:30;18954:70;;;-1:-1:-1;19011:5:5;18954:70;19037:20;;;;19032:61;;-1:-1:-1;19080:5:5;19032:61;19105:20;;;;:62;;;;-1:-1:-1;;;;;;19130:15:5;;1066:20:0;1114:8;;19130:36:5;;;-1:-1:-1;;;;;;19151:13:5;;1066:20:0;1114:8;;19151:15:5;19101:101;;;-1:-1:-1;19190:4:5;19101:101;-1:-1:-1;;;;;19214:24:5;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;19242:22:5;;;;;;:18;:22;;;;;;;;19214:50;19210:90;;;-1:-1:-1;19287:5:5;19210:90;-1:-1:-1;;;;;19312:13:5;;;;;;:7;:13;;;;;;;;;:34;;-1:-1:-1;;;;;;19329:15:5;;1066:20:0;1114:8;;19329:17:5;19308:144;;;19380:21;;19359:18;:42;19428:16;;19412:13;:32;19308:144;-1:-1:-1;;;;;19468:11:5;;;;;;:7;:11;;;;;;;;;:30;;-1:-1:-1;;;;;;19483:13:5;;1066:20:0;1114:8;;19483:15:5;19464:154;;;19532:22;;19511:18;:43;19581:17;;19565:13;:33;19464:154;19630:41;19645:4;19651:2;19655:6;19663:7;19630:14;:41::i;:::-;17866:1809;;;17779:1896;;;:::o;2010:153:4:-;2099:13;2092:20;;-1:-1:-1;;;;;;2092:20:4;;;2122:34;2147:8;2122:24;:34::i;16765:537:5:-;16821:35;16878:7;16821:65;;16931:16;-1:-1:-1;;;;;16931:24:5;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;16913:53:5;;16975:4;16982:16;-1:-1:-1;;;;;16982:21:5;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16913:93;;-1:-1:-1;;;;;;16913:93:5;;;;;;;-1:-1:-1;;;;;14949:15:6;;;16913:93:5;;;14931:34:6;15001:15;;14981:18;;;14974:43;14866:18;;16913:93:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16897:13;:109;;-1:-1:-1;;;;;;16897:109:5;-1:-1:-1;;;;;16897:109:5;;;;;;;;;17017:157;;17096:16;-1:-1:-1;;;;;17096:24:5;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17078:56:5;;17143:4;17150:16;-1:-1:-1;;;;;17150:21:5;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17078:96;;-1:-1:-1;;;;;;17078:96:5;;;;;;;-1:-1:-1;;;;;14949:15:6;;;17078:96:5;;;14931:34:6;15001:15;;14981:18;;;14974:43;14866:18;;17078:96:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17062:13;:112;;-1:-1:-1;;;;;;17062:112:5;-1:-1:-1;;;;;17062:112:5;;;;;;;;;;17017:157;17185:15;:34;;-1:-1:-1;;;;;17185:34:5;;;;;-1:-1:-1;;;;;;17185:34:5;;;;;;;;;;17240:13;;17230:30;;17240:13;17185:15;17230:9;:30::i;:::-;17276:18;;-1:-1:-1;;;;;1773:32:6;;1755:51;;17276:18:5;;1743:2:6;1728:18;17276::5;1582:230:6;20015:478:5;10893:17;:24;;-1:-1:-1;;;;10893:24:5;-1:-1:-1;;;10893:24:5;;;10913:4;20117:25;;::::1;10893:24:::0;20173:27:::1;20117:25:::0;:20;20173:27:::1;:::i;:::-;20153:47:::0;-1:-1:-1;20238:21:5::1;20272:23;20290:4:::0;20272:17:::1;:23::i;:::-;20308:18;20329:38;20353:14:::0;20329:21:::1;:38;:::i;:::-;20308:59;;20380:36;20394:9;20405:10;20380:13;:36::i;:::-;20442:43;::::0;;15230:25:6;;;15286:2;15271:18;;15264:34;;;15314:18;;;15307:34;;;20442:43:5::1;::::0;15218:2:6;15203:18;20442:43:5::1;;;;;;;-1:-1:-1::0;;10940:17:5;:25;;-1:-1:-1;;;;10940:25:5;;;-1:-1:-1;;;20015:478:5:o;22306:222::-;22418:7;22414:41;;22440:15;24262:1;24241:18;:22;;;24274:13;:17;24197:102;22440:15;22476:44;22494:6;22502:9;22513:6;22476:17;:44::i;:::-;22306:222;;;;:::o;2278:191:3:-;2352:16;2371:6;;-1:-1:-1;;;;;2388:17:3;;;-1:-1:-1;;;;;;2388:17:3;;;;;;2421:40;;2371:6;;;;;;;2421:40;;2352:16;2421:40;2341:128;2278:191;:::o;20501:1034:5:-;20592:16;;;20606:1;20592:16;;;;;;;;20568:21;;20592:16;;;;;;;;;;-1:-1:-1;20592:16:5;20568:40;;20637:4;20619;20624:1;20619:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;20619:23:5;;;-1:-1:-1;;;;;20619:23:5;;;;;20678:15;;;;;;;;;-1:-1:-1;;;;;20678:15:5;-1:-1:-1;;;;;20678:20:5;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20668:4;20673:1;20668:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20668:32:5;;;:7;;;;;;;;;:32;20831:15;;:48;;-1:-1:-1;;;20831:48:5;;20801:27;;20831:15;;;;;;;;:29;;:48;;20861:11;;20874:4;;20831:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20831:48:5;;;;;;;;;;;;:::i;:::-;20801:78;;20890:20;20962:5;20939:18;;20931:5;:26;;;;:::i;:::-;20914:10;20925:1;20914:13;;;;;;;;:::i;:::-;;;;;;;:44;;;;:::i;:::-;20913:54;;;;:::i;:::-;20890:77;;20980:62;20997:4;21012:15;;;;;;;;;-1:-1:-1;;;;;21012:15:5;21030:11;20980:8;:62::i;:::-;21113:15;;:183;;-1:-1:-1;;;21113:183:5;;:15;;;;-1:-1:-1;;;;;21113:15:5;;:66;;:183;;21190:11;;21212:12;;21235:4;;21258;;21274:15;;21113:183;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21357:19;21386:15;;;;;;;;;-1:-1:-1;;;;;21386:15:5;-1:-1:-1;;;;;21386:20:5;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21379:55;;-1:-1:-1;;;21379:55:5;;21428:4;21379:55;;;1755:51:6;-1:-1:-1;;;;;21379:40:5;;;;;;;1728:18:6;;21379:55:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21357:77;-1:-1:-1;21445:15:5;;21441:91;;21479:15;;;;;;;;;-1:-1:-1;;;;;21479:15:5;-1:-1:-1;;;;;21479:20:5;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21473:38:5;;21512:11;21473:51;;;;;;;;;;;;;160:25:6;;148:2;133:18;;14:177;21473:51:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20557:978;;;;20501:1034;:::o;21543:755::-;21653:15;;21621:62;;21638:4;;21653:15;;;-1:-1:-1;;;;;21653:15:5;21671:11;21621:8;:62::i;:::-;21769:22;21841:5;21818:18;;21810:5;:26;;;;:::i;:::-;21795:42;;:11;:42;:::i;:::-;21794:52;;;;:::i;:::-;21769:77;;21853:20;21921:5;21898:18;;21890:5;:26;;;;:::i;:::-;21877:40;;:9;:40;:::i;:::-;21876:50;;;;:::i;:::-;21935:15;;22181:17;;21935:296;;-1:-1:-1;;;21935:296:5;;22003:4;21935:296;;;18494:34:6;18544:18;;;18537:34;;;18587:18;;;18580:34;;;18630:18;;;18623:34;;;-1:-1:-1;;;;;22181:17:5;;;18673:19:6;;;18666:44;22209:15:5;18726:19:6;;;18719:35;21853:73:5;;-1:-1:-1;21935:15:5;;;;;;:31;;21974:9;;18428:19:6;;21935:296:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;22267:13:5;;22243:51;;160:25:6;;;-1:-1:-1;;;;;22267:13:5;;;;-1:-1:-1;22260:4:5;;-1:-1:-1;;;;;;;;;;;22243:51:5;148:2:6;133:18;22243:51:5;;;;;;;21614:684;;21543:755;;:::o;22536:777::-;-1:-1:-1;;;;;22638:15:5;;;;;;:7;:15;;;;;;:26;-1:-1:-1;22638:26:5;22630:59;;;;-1:-1:-1;;;22630:59:5;;19278:2:6;22630:59:5;;;19260:21:6;19317:2;19297:18;;;19290:30;-1:-1:-1;;;19336:18:6;;;19329:50;19396:18;;22630:59:5;19076:344:6;22630:59:5;22698:23;22724:36;22752:7;22724:27;:36::i;:::-;22698:62;;22767:18;22788:31;22811:7;22788:22;:31::i;:::-;22767:52;-1:-1:-1;22866:7:5;22834:28;22767:52;22834:15;:28;:::i;:::-;:39;;22826:75;;;;-1:-1:-1;;;22826:75:5;;19627:2:6;22826:75:5;;;19609:21:6;19666:2;19646:18;;;19639:30;19705:25;19685:18;;;19678:53;19748:18;;22826:75:5;19425:347:6;22826:75:5;22910:23;22964:10;22936:25;22946:15;22936:7;:25;:::i;:::-;:38;;;;:::i;:::-;-1:-1:-1;;;;;23001:15:5;;;;;;:7;:15;;;;;;22910:64;;-1:-1:-1;23001:25:5;;23019:7;;23001:25;:::i;:::-;-1:-1:-1;;;;;22983:15:5;;;;;;;:7;:15;;;;;;:43;;;;23054:18;;;;;;;:36;;23075:15;;23054:36;:::i;:::-;-1:-1:-1;;;;;23033:18:5;;;;;;:7;:18;;;;;:57;23103:14;;23099:65;;23130:26;23145:10;23130:14;:26::i;:::-;23176:19;;23172:80;;23208:36;23228:15;23208:19;:36::i;:::-;23282:9;-1:-1:-1;;;;;23265:44:5;23274:6;-1:-1:-1;;;;;23265:44:5;-1:-1:-1;;;;;;;;;;;23293:15:5;23265:44;;;;160:25:6;;148:2;133:18;;14:177;23265:44:5;;;;;;;;22623:690;;;22536:777;;;:::o;23895:146::-;23971:7;24029:4;24008:18;;23998:7;:28;;;;:::i;:::-;:35;;;;:::i;24049:136::-;24120:7;24173:4;24157:13;;24147:7;:23;;;;:::i;23323:239::-;23390:15;;23386:167;;23463:4;23447:22;;;;:7;:22;;;;;;:35;;23472:10;;23447:35;:::i;:::-;23438:4;23422:22;;;;:7;:22;;;;;;;:60;;;;23502:47;;23511:10;;-1:-1:-1;;;;;;;;;;;23502:47:5;;;23538:10;160:25:6;;148:2;133:18;;14:177;23502:47:5;;;;;;;;23323:239;:::o;23574:309::-;23651:20;;23647:227;;23736:28;;-1:-1:-1;;;;;23736:28:5;23728:37;;;;:7;:37;;;;;;:55;;23768:15;;23728:55;:::i;:::-;23696:28;;;-1:-1:-1;;;;;23696:28:5;;;23688:37;;;;:7;:37;;;;;;;;;:95;;;;23824:28;;23803:67;;160:25:6;;;23824:28:5;;;23812:10;;-1:-1:-1;;;;;;;;;;;23803:67:5;133:18:6;23803:67:5;14:177:6;196:548;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:180::-;808:6;861:2;849:9;840:7;836:23;832:32;829:52;;;877:1;874;867:12;829:52;-1:-1:-1;900:23:6;;749:180;-1:-1:-1;749:180:6:o;934:131::-;-1:-1:-1;;;;;1009:31:6;;999:42;;989:70;;1055:1;1052;1045:12;1070:315;1138:6;1146;1199:2;1187:9;1178:7;1174:23;1170:32;1167:52;;;1215:1;1212;1205:12;1167:52;1254:9;1241:23;1273:31;1298:5;1273:31;:::i;:::-;1323:5;1375:2;1360:18;;;;1347:32;;-1:-1:-1;;;1070:315:6:o;1817:456::-;1894:6;1902;1910;1963:2;1951:9;1942:7;1938:23;1934:32;1931:52;;;1979:1;1976;1969:12;1931:52;2018:9;2005:23;2037:31;2062:5;2037:31;:::i;:::-;2087:5;-1:-1:-1;2144:2:6;2129:18;;2116:32;2157:33;2116:32;2157:33;:::i;:::-;1817:456;;2209:7;;-1:-1:-1;;;2263:2:6;2248:18;;;;2235:32;;1817:456::o;2278:118::-;2364:5;2357:13;2350:21;2343:5;2340:32;2330:60;;2386:1;2383;2376:12;2401:382;2466:6;2474;2527:2;2515:9;2506:7;2502:23;2498:32;2495:52;;;2543:1;2540;2533:12;2495:52;2582:9;2569:23;2601:31;2626:5;2601:31;:::i;:::-;2651:5;-1:-1:-1;2708:2:6;2693:18;;2680:32;2721:30;2680:32;2721:30;:::i;:::-;2770:7;2760:17;;;2401:382;;;;;:::o;2977:456::-;3054:6;3062;3070;3123:2;3111:9;3102:7;3098:23;3094:32;3091:52;;;3139:1;3136;3129:12;3091:52;3178:9;3165:23;3197:31;3222:5;3197:31;:::i;:::-;3247:5;-1:-1:-1;3299:2:6;3284:18;;3271:32;;-1:-1:-1;3355:2:6;3340:18;;3327:32;3368:33;3327:32;3368:33;:::i;:::-;3420:7;3410:17;;;2977:456;;;;;:::o;3438:247::-;3497:6;3550:2;3538:9;3529:7;3525:23;3521:32;3518:52;;;3566:1;3563;3556:12;3518:52;3605:9;3592:23;3624:31;3649:5;3624:31;:::i;:::-;3674:5;3438:247;-1:-1:-1;;;3438:247:6:o;3898:241::-;3954:6;4007:2;3995:9;3986:7;3982:23;3978:32;3975:52;;;4023:1;4020;4013:12;3975:52;4062:9;4049:23;4081:28;4103:5;4081:28;:::i;4144:367::-;4207:8;4217:6;4271:3;4264:4;4256:6;4252:17;4248:27;4238:55;;4289:1;4286;4279:12;4238:55;-1:-1:-1;4312:20:6;;4355:18;4344:30;;4341:50;;;4387:1;4384;4377:12;4341:50;4424:4;4416:6;4412:17;4400:29;;4484:3;4477:4;4467:6;4464:1;4460:14;4452:6;4448:27;4444:38;4441:47;4438:67;;;4501:1;4498;4491:12;4438:67;4144:367;;;;;:::o;4516:773::-;4638:6;4646;4654;4662;4715:2;4703:9;4694:7;4690:23;4686:32;4683:52;;;4731:1;4728;4721:12;4683:52;4771:9;4758:23;4800:18;4841:2;4833:6;4830:14;4827:34;;;4857:1;4854;4847:12;4827:34;4896:70;4958:7;4949:6;4938:9;4934:22;4896:70;:::i;:::-;4985:8;;-1:-1:-1;4870:96:6;-1:-1:-1;5073:2:6;5058:18;;5045:32;;-1:-1:-1;5089:16:6;;;5086:36;;;5118:1;5115;5108:12;5086:36;;5157:72;5221:7;5210:8;5199:9;5195:24;5157:72;:::i;:::-;4516:773;;;;-1:-1:-1;5248:8:6;-1:-1:-1;;;;4516:773:6:o;5294:315::-;5362:6;5370;5423:2;5411:9;5402:7;5398:23;5394:32;5391:52;;;5439:1;5436;5429:12;5391:52;5475:9;5462:23;5452:33;;5535:2;5524:9;5520:18;5507:32;5548:31;5573:5;5548:31;:::i;5614:388::-;5682:6;5690;5743:2;5731:9;5722:7;5718:23;5714:32;5711:52;;;5759:1;5756;5749:12;5711:52;5798:9;5785:23;5817:31;5842:5;5817:31;:::i;:::-;5867:5;-1:-1:-1;5924:2:6;5909:18;;5896:32;5937:33;5896:32;5937:33;:::i;6007:356::-;6209:2;6191:21;;;6228:18;;;6221:30;6287:34;6282:2;6267:18;;6260:62;6354:2;6339:18;;6007:356::o;6368:127::-;6429:10;6424:3;6420:20;6417:1;6410:31;6460:4;6457:1;6450:15;6484:4;6481:1;6474:15;6500:125;6565:9;;;6586:10;;;6583:36;;;6599:18;;:::i;6630:345::-;6832:2;6814:21;;;6871:2;6851:18;;;6844:30;-1:-1:-1;;;6905:2:6;6890:18;;6883:51;6966:2;6951:18;;6630:345::o;7326:128::-;7393:9;;;7414:11;;;7411:37;;;7428:18;;:::i;8840:245::-;8907:6;8960:2;8948:9;8939:7;8935:23;8931:32;8928:52;;;8976:1;8973;8966:12;8928:52;9008:9;9002:16;9027:28;9049:5;9027:28;:::i;10169:127::-;10230:10;10225:3;10221:20;10218:1;10211:31;10261:4;10258:1;10251:15;10285:4;10282:1;10275:15;12319:168;12392:9;;;12423;;12440:15;;;12434:22;;12420:37;12410:71;;12461:18;;:::i;12492:217::-;12532:1;12558;12548:132;;12602:10;12597:3;12593:20;12590:1;12583:31;12637:4;12634:1;12627:15;12665:4;12662:1;12655:15;12548:132;-1:-1:-1;12694:9:6;;12492:217::o;14463:251::-;14533:6;14586:2;14574:9;14565:7;14561:23;14557:32;14554:52;;;14602:1;14599;14592:12;14554:52;14634:9;14628:16;14653:31;14678:5;14653:31;:::i;15352:127::-;15413:10;15408:3;15404:20;15401:1;15394:31;15444:4;15441:1;15434:15;15468:4;15465:1;15458:15;15484:465;15537:3;15575:5;15569:12;15602:6;15597:3;15590:19;15628:4;15657;15652:3;15648:14;15641:21;;15696:4;15689:5;15685:16;15719:1;15729:195;15743:6;15740:1;15737:13;15729:195;;;15808:13;;-1:-1:-1;;;;;15804:39:6;15792:52;;15864:12;;;;15899:15;;;;15840:1;15758:9;15729:195;;;-1:-1:-1;15940:3:6;;15484:465;-1:-1:-1;;;;;15484:465:6:o;15954:332::-;16161:6;16150:9;16143:25;16204:2;16199;16188:9;16184:18;16177:30;16124:4;16224:56;16276:2;16265:9;16261:18;16253:6;16224:56;:::i;:::-;16216:64;15954:332;-1:-1:-1;;;;15954:332:6:o;16291:1105::-;16386:6;16417:2;16460;16448:9;16439:7;16435:23;16431:32;16428:52;;;16476:1;16473;16466:12;16428:52;16509:9;16503:16;16538:18;16579:2;16571:6;16568:14;16565:34;;;16595:1;16592;16585:12;16565:34;16633:6;16622:9;16618:22;16608:32;;16678:7;16671:4;16667:2;16663:13;16659:27;16649:55;;16700:1;16697;16690:12;16649:55;16729:2;16723:9;16751:2;16747;16744:10;16741:36;;;16757:18;;:::i;:::-;16803:2;16800:1;16796:10;16835:2;16829:9;16898:2;16894:7;16889:2;16885;16881:11;16877:25;16869:6;16865:38;16953:6;16941:10;16938:22;16933:2;16921:10;16918:18;16915:46;16912:72;;;16964:18;;:::i;:::-;17000:2;16993:22;17050:18;;;17084:15;;;;-1:-1:-1;17126:11:6;;;17122:20;;;17154:19;;;17151:39;;;17186:1;17183;17176:12;17151:39;17210:11;;;;17230:135;17246:6;17241:3;17238:15;17230:135;;;17312:10;;17300:23;;17263:12;;;;17343;;;;17230:135;;;17384:6;16291:1105;-1:-1:-1;;;;;;;;16291:1105:6:o;17401:574::-;17692:6;17681:9;17674:25;17735:6;17730:2;17719:9;17715:18;17708:34;17778:3;17773:2;17762:9;17758:18;17751:31;17655:4;17799:57;17851:3;17840:9;17836:19;17828:6;17799:57;:::i;:::-;-1:-1:-1;;;;;17892:32:6;;;;17887:2;17872:18;;17865:60;-1:-1:-1;17956:3:6;17941:19;17934:35;17791:65;17401:574;-1:-1:-1;;;17401:574:6:o;17980:184::-;18050:6;18103:2;18091:9;18082:7;18078:23;18074:32;18071:52;;;18119:1;18116;18109:12;18071:52;-1:-1:-1;18142:16:6;;17980:184;-1:-1:-1;17980:184:6:o;18765:306::-;18853:6;18861;18869;18922:2;18910:9;18901:7;18897:23;18893:32;18890:52;;;18938:1;18935;18928:12;18890:52;18967:9;18961:16;18951:26;;19017:2;19006:9;19002:18;18996:25;18986:35;;19061:2;19050:9;19046:18;19040:25;19030:35;;18765:306;;;;;:::o
Swarm Source
ipfs://f4640a567691585ade4b672e38d860e4272fadf326e3730d81e5545200d6759f
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.