ERC-20
Overview
Max Total Supply
9,708,484.54717653 GAMI
Holders
46
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
1,970.194336239 GAMIValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Gami
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-07-02 */ //SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.6.12; abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } 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); } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } 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) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } 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 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 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 implementation contract Gami is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; // excluded from reward address[] private _excluded; mapping (address => bool) private _isBlackListedBot; address[] private _blackListedBots; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 10_000_000 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tBurnTotal; string private _name = 'Gami'; string private _symbol = 'GAMI'; uint8 private _decimals = 9; uint256 private _burnFee = 3; // 3% burn uint256 private _marketingFee = 4; // 4% marketing uint256 private _developmentFee = 2; // 2% marketing uint256 private _buyBackFee = 3; // 3% SHINU buy-back and burn uint256 private _swapEth = 3 * 10**18; uint256 private _swapImpact = 10; uint256 private _previousBurnFee = _burnFee; uint256 private _previousMarketingFee = _marketingFee; uint256 private _previousDevelopmentFee = _developmentFee; uint256 private _previousBuyBackFee = _buyBackFee; address payable private _marketingWalletAddress = payable(0x4e432E5511AeF3e1BCef17537A0f47C41734C657); address payable private _developmentWalletAddress = payable(0x585D884acb1871BDD2c8b5009d398852b6D5De6e); address private immutable _deadWalletAddress = 0x000000000000000000000000000000000000dEaD; address private _shinuContractAddress = 0xa1ab427451F19dF7445a22dEa7073800Ea3b687f; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify = false; bool public swapAndLiquifyEnabled = true; bool public tradingOpen = false; uint256 private _maxTxAmount = _tTotal; event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event SwapETHForTokens( uint256 amountIn, address[] path ); event SwapTokensForETH( uint256 amountIn, address[] path ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () public { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // UniswapV2 for Ethereum network // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; // Exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[_marketingWalletAddress] = true; _isExcludedFromFee[_developmentWalletAddress] = true; // THE DEATH NOTE _isBlackListedBot[address(0x000000000000084e91743124a982076C59f10084)] = true; _blackListedBots.push(address(0x000000000000084e91743124a982076C59f10084)); _isBlackListedBot[address(0x000000917de6037d52b1F0a306eeCD208405f7cd)] = true; _blackListedBots.push(address(0x000000917de6037d52b1F0a306eeCD208405f7cd)); _isBlackListedBot[address(0x1d6E8BAC6EA3730825bde4B005ed7B2B39A2932d)] = true; _blackListedBots.push(address(0x1d6E8BAC6EA3730825bde4B005ed7B2B39A2932d)); _isBlackListedBot[address(0x7100e690554B1c2FD01E8648db88bE235C1E6514)] = true; _blackListedBots.push(address(0x7100e690554B1c2FD01E8648db88bE235C1E6514)); _isBlackListedBot[address(0x72b30cDc1583224381132D379A052A6B10725415)] = true; _blackListedBots.push(address(0x72b30cDc1583224381132D379A052A6B10725415)); _isBlackListedBot[address(0x9282dc5c422FA91Ff2F6fF3a0b45B7BF97CF78E7)] = true; _blackListedBots.push(address(0x9282dc5c422FA91Ff2F6fF3a0b45B7BF97CF78E7)); _isBlackListedBot[address(0x9eDD647D7d6Eceae6bB61D7785Ef66c5055A9bEE)] = true; _blackListedBots.push(address(0x9eDD647D7d6Eceae6bB61D7785Ef66c5055A9bEE)); _isBlackListedBot[address(0xfad95B6089c53A0D1d861eabFaadd8901b0F8533)] = true; _blackListedBots.push(address(0xfad95B6089c53A0D1d861eabFaadd8901b0F8533)); _isBlackListedBot[address(0x79fa4CD718b40A708233983A677A5138AC52953B)] = true; _blackListedBots.push(address(0x79fa4CD718b40A708233983A677A5138AC52953B)); _isBlackListedBot[address(0x9e64e525DA3eC2b9749a42347AfBFa56F64fB90C)] = true; _blackListedBots.push(address(0x9e64e525DA3eC2b9749a42347AfBFa56F64fB90C)); _isBlackListedBot[address(0x6F5d36E0c7fFD6D16d253255eb57cc375B0f7669)] = true; _blackListedBots.push(address(0x6F5d36E0c7fFD6D16d253255eb57cc375B0f7669)); emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function setExcludeFromFee(address account, bool excluded) external onlyOwner() { _isExcludedFromFee[account] = excluded; } function totalBurn() public view returns (uint256) { return _tBurnTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) external onlyOwner() { require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.'); require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function addBotToBlackList(address account) external onlyOwner() { require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not blacklist Uniswap router.'); require(!_isBlackListedBot[account], "Account is already blacklisted"); _isBlackListedBot[account] = true; _blackListedBots.push(account); } function removeBotFromBlackList(address account) external onlyOwner() { require(_isBlackListedBot[account], "Account is not blacklisted"); for (uint256 i = 0; i < _blackListedBots.length; i++) { if (_blackListedBots[i] == account) { _blackListedBots[i] = _blackListedBots[_blackListedBots.length - 1]; _isBlackListedBot[account] = false; _blackListedBots.pop(); break; } } } function removeAllFee() private { if(_marketingFee == 0 && _developmentFee == 0 && _burnFee == 0 && _buyBackFee == 0) return; _previousMarketingFee = _marketingFee; _previousDevelopmentFee = _developmentFee; _previousBurnFee = _burnFee; _previousBuyBackFee = _buyBackFee; _marketingFee = 0; _developmentFee = 0; _burnFee = 0; _buyBackFee = 0; } function restoreAllFee() private { _marketingFee = _previousMarketingFee; _developmentFee = _previousDevelopmentFee; _burnFee = _previousBurnFee; _buyBackFee = _previousBuyBackFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer(address sender, address recipient, uint256 amount) private { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(!_isBlackListedBot[sender], "You have no power here!"); require(!_isBlackListedBot[recipient], "You have no power here!"); require(!_isBlackListedBot[tx.origin], "You have no power here!"); if(sender != owner() && recipient != owner()) { require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); // sorry about that, but sniper bots nowadays are buying multiple times, hope I have something more robust to prevent them to nuke the launch :-( if (sender == uniswapV2Pair) { require(tradingOpen, "Wait for opened trading"); require(balanceOf(recipient) <= _maxTxAmount, "Already bought maxTxAmount, wait till check off"); require(balanceOf(tx.origin) <= _maxTxAmount, "Already bought maxTxAmount, wait till check off"); } } // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. if (!inSwapAndLiquify && swapAndLiquifyEnabled && sender != uniswapV2Pair) { swapTokens(amount, recipient == uniswapV2Pair); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){ takeFee = false; } //transfer amount, it will take tax and eth fee _tokenTransfer(sender, recipient, amount, takeFee); } event SwapAndLiquifyFailed(bytes failErr); function swapTokens(uint256 amount, bool isSell) private lockTheSwap { uint256 contractTokenBalance = balanceOf(address(this)); uint256 contractEthBalance = address(this).balance; bool toSwapTokens = contractEthBalance < _swapEth; if (toSwapTokens) { uint256 maxAddedToSlipPage = amount.mul(_swapImpact).div(100); if (isSell && contractTokenBalance > maxAddedToSlipPage) { contractTokenBalance = maxAddedToSlipPage; } swapTokensForEth(contractTokenBalance); } else { uint256 toTransfer = contractEthBalance.mul(_marketingFee.add(_developmentFee)).div(_marketingFee.add(_developmentFee).add(_buyBackFee)); sendETHToWallets(toTransfer); swapEthForTokens(_shinuContractAddress, contractEthBalance.sub(toTransfer)); } } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap try uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ) { emit SwapTokensForETH(tokenAmount, path); } catch (bytes memory e) { emit SwapAndLiquifyFailed(e); } } function swapEthForTokens(address token, uint256 amount) private { // generate the uniswap pair path of weth -> token address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = token; _approve(address(this), address(uniswapV2Router), amount); // make the swap try uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}( 0, // accept any amount of Tokens path, _deadWalletAddress, block.timestamp.add(300) ) { emit SwapETHForTokens(amount, path); } catch (bytes memory e) { emit SwapAndLiquifyFailed(e); } } function sendETHToWallets(uint256 amount) private { uint256 fees = _marketingFee.add(_developmentFee); uint256 marketing = amount.mul(_marketingFee).div(fees); _marketingWalletAddress.transfer(marketing); _developmentWalletAddress.transfer(amount.sub(marketing)); } function openTrading() public onlyOwner { tradingOpen = true; } // We are exposing these functions to be able to manual swap and send // in case the token is highly valued and 5M becomes too much function manualSwap() external onlyOwner() { uint256 contractBalance = balanceOf(address(this)); swapTokensForEth(contractBalance); } function manualSend() public onlyOwner() { uint256 contractETHBalance = address(this).balance; sendETHToWallets(contractETHBalance); } function setSwapAndLiquifyEnabled(bool _swapAndLiquifyEnabled) external onlyOwner(){ swapAndLiquifyEnabled = _swapAndLiquifyEnabled; } function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private { if(!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rBurn, uint256 tTransferAmount, uint256 tBurn, uint256 tMarketingDevelopmentBuyBack) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeAllEthFees(tMarketingDevelopmentBuyBack); _reflectFee(rBurn, tBurn); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rBurn, uint256 tTransferAmount, uint256 tBurn, uint256 tMarketingDevelopmentBuyBack) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeAllEthFees(tMarketingDevelopmentBuyBack); _reflectFee(rBurn, tBurn); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rBurn, uint256 tTransferAmount, uint256 tBurn, uint256 tMarketingDevelopmentBuyBack) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeAllEthFees(tMarketingDevelopmentBuyBack); _reflectFee(rBurn, tBurn); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rBurn, uint256 tTransferAmount, uint256 tBurn, uint256 tMarketingDevelopmentBuyBack) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeAllEthFees(tMarketingDevelopmentBuyBack); _reflectFee(rBurn, tBurn); emit Transfer(sender, recipient, tTransferAmount); } function _takeAllEthFees(uint256 tMarketingDevelopmentBuyBack) private { uint256 currentRate = _getRate(); uint256 rMarketingDevelopmentBuyBack = tMarketingDevelopmentBuyBack.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rMarketingDevelopmentBuyBack); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tMarketingDevelopmentBuyBack); } function _reflectFee(uint256 rBurn, uint256 tBurn) private { _rTotal = _rTotal.sub(rBurn); _tBurnTotal = _tBurnTotal.add(tBurn); _tTotal = _tTotal.sub(tBurn); } //to recieve ETH from uniswapV2Router when swapping receive() external payable {} function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tBurn, uint256 tMarketingLiquidityFee) = _getTValues(tAmount, _burnFee, _marketingFee.add(_developmentFee).add(_buyBackFee)); uint256 currentRate = _getRate(); (uint256 rAmount, uint256 rTransferAmount, uint256 rBurn) = _getRValues(tAmount, tBurn, tMarketingLiquidityFee, currentRate); return (rAmount, rTransferAmount, rBurn, tTransferAmount, tBurn, tMarketingLiquidityFee); } function _getTValues(uint256 tAmount, uint256 burnFee, uint256 marketingDevelopmentBuyBack) private pure returns (uint256, uint256, uint256) { uint256 tBurn = tAmount.mul(burnFee).div(100); uint256 tMarketingDevelopmentBuyBack = tAmount.mul(marketingDevelopmentBuyBack).div(100); uint256 tTransferAmount = tAmount.sub(tBurn).sub(marketingDevelopmentBuyBack); return (tTransferAmount, tBurn, tMarketingDevelopmentBuyBack); } function _getRValues(uint256 tAmount, uint256 tBurn, uint256 tMarketingDevelopmentBuyBack, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rBurn = tBurn.mul(currentRate); // thanks myobu for finding bug here, now everybody need to deploy new contracts lmao.. uint256 rMarketingDevelopmentBuyBack = tMarketingDevelopmentBuyBack.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rBurn).sub(rMarketingDevelopmentBuyBack); return (rAmount, rTransferAmount, rBurn); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _getMaxTxAmount() private view returns(uint256) { return _maxTxAmount; } function _getETHBalance() public view returns(uint256 balance) { return address(this).balance; } function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() { require(maxTxAmount >= 10**9 , 'maxTxAmount should be greater than total 1e9'); _maxTxAmount = maxTxAmount; } function recoverTokens(uint256 tokenAmount) public virtual onlyOwner() { _approve(address(this), owner(), tokenAmount); _transfer(address(this), owner(), tokenAmount); } function _setShinuContractAddress(address shinuContractAddress) external onlyOwner() { _shinuContractAddress = shinuContractAddress; } function _setSwapEthLimit(uint256 swapEthLimit) external onlyOwner() { _swapEth = swapEthLimit; } function _setSwapImpact(uint256 swapImpact) external onlyOwner() { _swapImpact = swapImpact; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","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":false,"internalType":"bytes","name":"failErr","type":"bytes"}],"name":"SwapAndLiquifyFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_getETHBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"shinuContractAddress","type":"address"}],"name":"_setShinuContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapEthLimit","type":"uint256"}],"name":"_setSwapEthLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapImpact","type":"uint256"}],"name":"_setSwapImpact","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBotToBlackList","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":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBotFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapAndLiquifyEnabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
662386f26fc10000600b55660e3d2cfe61ffff19600c55610120604052600460e08190526347616d6960e01b6101009081526200004091600e9190620007f3565b506040805180820190915260048082526347414d4960e01b60209092019182526200006e91600f91620007f3565b506010805460ff1916600917905560036011819055600460128190556002601381905560148390556729a2241af62c0000601555600a6016556017839055601891909155601955601a55601b80546001600160a01b0319908116734e432e5511aef3e1bcef17537a0f47c41734c65717909155601c8054821673585d884acb1871bdd2c8b5009d398852b6d5de6e1790556ddead000000000000000000000000608052601d805460ff60b01b1961ffff60a01b199190931673a1ab427451f19df7445a22dea7073800ea3b687f1716600160a81b17919091169055600b54601e553480156200015c57600080fd5b50600062000169620007e0565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c5460036000620001c4620007e0565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200023b57600080fd5b505afa15801562000250573d6000803e3d6000fd5b505050506040513d60208110156200026757600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b158015620002b857600080fd5b505afa158015620002cd573d6000803e3d6000fd5b505050506040513d6020811015620002e457600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b1580156200033757600080fd5b505af11580156200034c573d6000803e3d6000fd5b505050506040513d60208110156200036357600080fd5b50516001600160601b0319606091821b811660c0529082901b1660a05260016006600062000390620007e4565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260068452828120805486166001908117909155601b54831682528382208054871682179055601c549092168152918220805485168217905560099092527f6ef6d708eb37b8bda6da62f8191bcb1b8f30d7bf24789d111afaa48e2abcfa788054841683179055600a805480840182557fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a890810180546001600160a01b03199081166d084e91743124a982076c59f10084179091557f69b77005f9173f1fd98e76d50566ec8d29499be8f194d19d204baecdcc85d76280548716861790558254808601845582018054821670917de6037d52b1f0a306eecd208405f7cd1790557fac880b0698f6a24b725a531b87fe801fab0b12d27bd162739065e7572f5404d9805487168617905582548086018455820180548216731d6e8bac6ea3730825bde4b005ed7b2b39a2932d1790557f4f79f1067e9d05cffa01ea21e2293206a7d7e21e1204a7a91ce5038960641699805487168617905582548086018455820180548216737100e690554b1c2fd01e8648db88be235c1e65141790557ff5949e903094d0c003182832401f2f1e7e902a7afa53a9b4fc91227edcb81c2c8054871686179055825480860184558201805482167372b30cdc1583224381132d379a052a6b107254151790557f3ee2bfab112ce489483443731da982ac406a17d09137224e74d494a6037142ad805487168617905582548086018455820180548216739282dc5c422fa91ff2f6ff3a0b45b7bf97cf78e71790557ff3e918d4ba10715278cdbb619ad598c0463cbe5d7f5f568a2fb54f232047d9a9805487168617905582548086018455820180548216739edd647d7d6eceae6bb61d7785ef66c5055a9bee1790557fb7baecc9aa863a1182bccd59d3b8aaee484658aee9400a94283dad2dbafd9d1d80548716861790558254808601845582018054821673fad95b6089c53a0d1d861eabfaadd8901b0f85331790557f3d61742882e58b3fd0509701166fb3b2c5680c0f8b081c4985619d659efac4c68054871686179055825480860184558201805482167379fa4cd718b40a708233983a677a5138ac52953b1790557fd122105656deaccfbd45d284118ec4714ab8af6103e454324507559f463d3777805487168617905582548086018455820180548216739e64e525da3ec2b9749a42347afbfa56f64fb90c1790557ff00a7733510812b4d258edceec6d730422b91d450952f1efd0b3150ac5b7cae480549096168517909555815493840182559152018054909116736f5d36e0c7ffd6d16d253255eb57cc375b0f76691790556200078c620007e0565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040518082815260200191505060405180910390a3506200088f565b3390565b6000546001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200083657805160ff191683800117855562000866565b8280016001018555821562000866579182015b828111156200086657825182559160200191906001019062000849565b506200087492915062000878565b5090565b5b8082111562000874576000815560010162000879565b60805160601c60a05160601c60c05160601c613652620008f2600039806110f65280611ed6528061202a528061206a5250806109c2528061236b5280612423528061244a5280612c775280612d5b5280612d8a525080612db552506136526000f3fe6080604052600436106102345760003560e01c80635342acb41161012e578063a9059cbb116100ab578063dd62ed3e1161006f578063dd62ed3e1461085f578063f2fde38b1461089a578063f4293890146108cd578063f815a842146108e2578063ffb54a99146108f75761023b565b8063a9059cbb14610777578063af9549e0146107b0578063c49b9a80146107eb578063c9567bf914610817578063d65bed6d1461082c5761023b565b806388f82020116100f257806388f82020146106b75780638da5cb5b146106ea57806395d89b41146106ff5780639a02ecd514610714578063a457c2d71461073e5761023b565b80635342acb4146105df5780636e19b8971461061257806370a082311461063c578063715018a61461066f5780637ded4d6a146106845761023b565b80633685d419116101bc5780634549b039116101805780634549b0391461053b57806349bd5a5e1461056d5780634a74bb021461058257806351bc3c851461059757806352390c02146105ac5761023b565b80633685d4191461045d57806339509351146104905780633bd5d173146104c95780633c9f861d146104f35780634303443d146105085761023b565b80631bbae6e0116102035780631bbae6e01461036f57806323b872dd1461039b5780632d838119146103de57806330599fc514610408578063313ce567146104325761023b565b806306fdde0314610240578063095ea7b3146102ca5780631694505e1461031757806318160ddd146103485761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b5061025561090c565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561028f578181015183820152602001610277565b50505050905090810190601f1680156102bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102d657600080fd5b50610303600480360360408110156102ed57600080fd5b506001600160a01b0381351690602001356109a2565b604080519115158252519081900360200190f35b34801561032357600080fd5b5061032c6109c0565b604080516001600160a01b039092168252519081900360200190f35b34801561035457600080fd5b5061035d6109e4565b60408051918252519081900360200190f35b34801561037b57600080fd5b506103996004803603602081101561039257600080fd5b50356109ea565b005b3480156103a757600080fd5b50610303600480360360608110156103be57600080fd5b506001600160a01b03813581169160208101359091169060400135610a8a565b3480156103ea57600080fd5b5061035d6004803603602081101561040157600080fd5b5035610b11565b34801561041457600080fd5b506103996004803603602081101561042b57600080fd5b5035610b73565b34801561043e57600080fd5b50610447610bf2565b6040805160ff9092168252519081900360200190f35b34801561046957600080fd5b506103996004803603602081101561048057600080fd5b50356001600160a01b0316610bfb565b34801561049c57600080fd5b50610303600480360360408110156104b357600080fd5b506001600160a01b038135169060200135610dbc565b3480156104d557600080fd5b50610399600480360360208110156104ec57600080fd5b5035610e0a565b3480156104ff57600080fd5b5061035d610ed4565b34801561051457600080fd5b506103996004803603602081101561052b57600080fd5b50356001600160a01b0316610eda565b34801561054757600080fd5b5061035d6004803603604081101561055e57600080fd5b50803590602001351515611062565b34801561057957600080fd5b5061032c6110f4565b34801561058e57600080fd5b50610303611118565b3480156105a357600080fd5b50610399611128565b3480156105b857600080fd5b50610399600480360360208110156105cf57600080fd5b50356001600160a01b0316611196565b3480156105eb57600080fd5b506103036004803603602081101561060257600080fd5b50356001600160a01b0316611378565b34801561061e57600080fd5b506103996004803603602081101561063557600080fd5b5035611396565b34801561064857600080fd5b5061035d6004803603602081101561065f57600080fd5b50356001600160a01b03166113f3565b34801561067b57600080fd5b50610399611455565b34801561069057600080fd5b50610399600480360360208110156106a757600080fd5b50356001600160a01b03166114f7565b3480156106c357600080fd5b50610303600480360360208110156106da57600080fd5b50356001600160a01b0316611684565b3480156106f657600080fd5b5061032c6116a2565b34801561070b57600080fd5b506102556116b1565b34801561072057600080fd5b506103996004803603602081101561073757600080fd5b5035611712565b34801561074a57600080fd5b506103036004803603604081101561076157600080fd5b506001600160a01b03813516906020013561176f565b34801561078357600080fd5b506103036004803603604081101561079a57600080fd5b506001600160a01b0381351690602001356117d7565b3480156107bc57600080fd5b50610399600480360360408110156107d357600080fd5b506001600160a01b03813516906020013515156117eb565b3480156107f757600080fd5b506103996004803603602081101561080e57600080fd5b5035151561186e565b34801561082357600080fd5b506103996118e4565b34801561083857600080fd5b506103996004803603602081101561084f57600080fd5b50356001600160a01b0316611951565b34801561086b57600080fd5b5061035d6004803603604081101561088257600080fd5b506001600160a01b03813581169160200135166119cb565b3480156108a657600080fd5b50610399600480360360208110156108bd57600080fd5b50356001600160a01b03166119f6565b3480156108d957600080fd5b50610399611aee565b3480156108ee57600080fd5b5061035d611b50565b34801561090357600080fd5b50610303611b54565b600e8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109985780601f1061096d57610100808354040283529160200191610998565b820191906000526020600020905b81548152906001019060200180831161097b57829003601f168201915b5050505050905090565b60006109b66109af611b64565b8484611b68565b5060015b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5490565b6109f2611b64565b6000546001600160a01b03908116911614610a42576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b633b9aca00811015610a855760405162461bcd60e51b815260040180806020018281038252602c81526020018061347f602c913960400191505060405180910390fd5b601e55565b6000610a97848484611c54565b610b0784610aa3611b64565b610b02856040518060600160405280602881526020016134cc602891396001600160a01b038a16600090815260056020526040812090610ae1611b64565b6001600160a01b0316815260208101919091526040016000205491906120ff565b611b68565b5060019392505050565b6000600c54821115610b545760405162461bcd60e51b815260040180806020018281038252602a8152602001806133b6602a913960400191505060405180910390fd5b6000610b5e612196565b9050610b6a83826121b9565b9150505b919050565b610b7b611b64565b6000546001600160a01b03908116911614610bcb576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b610bdd30610bd76116a2565b83611b68565b610bef30610be96116a2565b83611c54565b50565b60105460ff1690565b610c03611b64565b6000546001600160a01b03908116911614610c53576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16610cc0576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b600854811015610db857816001600160a01b031660088281548110610ce457fe5b6000918252602090912001546001600160a01b03161415610db057600880546000198101908110610d1157fe5b600091825260209091200154600880546001600160a01b039092169183908110610d3757fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610d8957fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610db8565b600101610cc3565b5050565b60006109b6610dc9611b64565b84610b028560056000610dda611b64565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612202565b6000610e14611b64565b6001600160a01b03811660009081526007602052604090205490915060ff1615610e6f5760405162461bcd60e51b815260040180806020018281038252602c8152602001806135cc602c913960400191505060405180910390fd5b6000610e7a8361225c565b505050506001600160a01b038416600090815260036020526040902054919250610ea6919050826122d9565b6001600160a01b038316600090815260036020526040902055600c54610ecc90826122d9565b600c55505050565b600d5490565b610ee2611b64565b6000546001600160a01b03908116911614610f32576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0382161415610f8e5760405162461bcd60e51b815260040180806020018281038252602481526020018061353d6024913960400191505060405180910390fd5b6001600160a01b03811660009081526009602052604090205460ff1615610ffc576040805162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c69737465640000604482015290519081900360640190fd5b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000600b548311156110bb576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b816110da5760006110cb8461225c565b509395506109ba945050505050565b60006110e58461225c565b509295506109ba945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601d54600160a81b900460ff1681565b611130611b64565b6000546001600160a01b03908116911614611180576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b600061118b306113f3565b9050610bef8161231b565b61119e611b64565b6000546001600160a01b039081169116146111ee576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b038216141561124a5760405162461bcd60e51b81526004018080602001828103825260228152602001806135aa6022913960400191505060405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff16156112b8576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205415611312576001600160a01b0381166000908152600360205260409020546112f890610b11565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b031660009081526006602052604090205460ff1690565b61139e611b64565b6000546001600160a01b039081169116146113ee576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b601555565b6001600160a01b03811660009081526007602052604081205460ff161561143357506001600160a01b038116600090815260046020526040902054610b6e565b6001600160a01b0382166000908152600360205260409020546109ba90610b11565b61145d611b64565b6000546001600160a01b039081169116146114ad576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6114ff611b64565b6000546001600160a01b0390811691161461154f576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526009602052604090205460ff166115bc576040805162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000604482015290519081900360640190fd5b60005b600a54811015610db857816001600160a01b0316600a82815481106115e057fe5b6000918252602090912001546001600160a01b0316141561167c57600a8054600019810190811061160d57fe5b600091825260209091200154600a80546001600160a01b03909216918390811061163357fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600990915260409020805460ff19169055600a805480610d8957fe5b6001016115bf565b6001600160a01b031660009081526007602052604090205460ff1690565b6000546001600160a01b031690565b600f8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109985780601f1061096d57610100808354040283529160200191610998565b61171a611b64565b6000546001600160a01b0390811691161461176a576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b601655565b60006109b661177c611b64565b84610b02856040518060600160405280602581526020016135f860259139600560006117a6611b64565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906120ff565b60006109b66117e4611b64565b8484611c54565b6117f3611b64565b6000546001600160a01b03908116911614611843576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b611876611b64565b6000546001600160a01b039081169116146118c6576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b601d8054911515600160a81b0260ff60a81b19909216919091179055565b6118ec611b64565b6000546001600160a01b0390811691161461193c576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b601d805460ff60b01b1916600160b01b179055565b611959611b64565b6000546001600160a01b039081169116146119a9576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b6119fe611b64565b6000546001600160a01b03908116911614611a4e576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b6001600160a01b038116611a935760405162461bcd60e51b81526004018080602001828103825260268152602001806133e06026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b611af6611b64565b6000546001600160a01b03908116911614611b46576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b47610bef8161267b565b4790565b601d54600160b01b900460ff1681565b3390565b6001600160a01b038316611bad5760405162461bcd60e51b81526004018080602001828103825260248152602001806135866024913960400191505060405180910390fd5b6001600160a01b038216611bf25760405162461bcd60e51b81526004018080602001828103825260228152602001806134066022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316611c995760405162461bcd60e51b81526004018080602001828103825260258152602001806135616025913960400191505060405180910390fd5b6001600160a01b038216611cde5760405162461bcd60e51b81526004018080602001828103825260238152602001806133936023913960400191505060405180910390fd5b60008111611d1d5760405162461bcd60e51b81526004018080602001828103825260298152602001806135146029913960400191505060405180910390fd5b6001600160a01b03831660009081526009602052604090205460ff1615611d85576040805162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015290519081900360640190fd5b6001600160a01b03821660009081526009602052604090205460ff1615611ded576040805162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015290519081900360640190fd5b3260009081526009602052604090205460ff1615611e4c576040805162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015290519081900360640190fd5b611e546116a2565b6001600160a01b0316836001600160a01b031614158015611e8e5750611e786116a2565b6001600160a01b0316826001600160a01b031614155b15611ffe57601e54811115611ed45760405162461bcd60e51b81526004018080602001828103825260288152602001806134576028913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161415611ffe57601d54600160b01b900460ff16611f6c576040805162461bcd60e51b815260206004820152601760248201527f5761697420666f72206f70656e65642074726164696e67000000000000000000604482015290519081900360640190fd5b601e54611f78836113f3565b1115611fb55760405162461bcd60e51b815260040180806020018281038252602f815260200180613428602f913960400191505060405180910390fd5b601e54611fc1326113f3565b1115611ffe5760405162461bcd60e51b815260040180806020018281038252602f815260200180613428602f913960400191505060405180910390fd5b601d54600160a01b900460ff161580156120215750601d54600160a81b900460ff165b801561205f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b156120a2576120a2817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614612734565b6001600160a01b03831660009081526006602052604090205460019060ff16806120e457506001600160a01b03831660009081526006602052604090205460ff165b156120ed575060005b6120f984848484612827565b50505050565b6000818484111561218e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561215357818101518382015260200161213b565b50505050905090810190601f1680156121805780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008060006121a3612995565b90925090506121b282826121b9565b9250505090565b60006121fb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612af8565b9392505050565b6000828201838110156121fb576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008060008060008060008060006122998a60115461229460145461228e60135460125461220290919063ffffffff16565b90612202565b612b5d565b92509250925060006122a9612196565b905060008060006122bc8e878787612bac565b919e509c509a509598509396509194505050505091939550919395565b60006121fb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506120ff565b6040805160028082526060808301845292602083019080368337019050509050308160008151811061234957fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156123c257600080fd5b505afa1580156123d6573d6000803e3d6000fd5b505050506040513d60208110156123ec57600080fd5b50518151829060019081106123fd57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050612448307f000000000000000000000000000000000000000000000000000000000000000084611b68565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156124ed5781810151838201526020016124d5565b505050509050019650505050505050600060405180830381600087803b15801561251657600080fd5b505af1925050508015612527575060015b6125fa573d808015612555576040519150601f19603f3d011682016040523d82523d6000602084013e61255a565b606091505b507fc062bf45765a468f8a8d2ac697498f1f0211f1c5ac8a9c51fad14b916351c565816040518080602001828103825283818151815260200191508051906020019080838360005b838110156125ba5781810151838201526020016125a2565b50505050905090810190601f1680156125e75780820380516001836020036101000a031916815260200191505b509250505060405180910390a150610db8565b7f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561266357818101518382015260200161264b565b50505050905001935050505060405180910390a15050565b600061269460135460125461220290919063ffffffff16565b905060006126b7826126b160125486612bfc90919063ffffffff16565b906121b9565b601b546040519192506001600160a01b03169082156108fc029083906000818181858888f193505050501580156126f2573d6000803e3d6000fd5b50601c546001600160a01b03166108fc61270c85846122d9565b6040518115909202916000818181858888f193505050501580156120f9573d6000803e3d6000fd5b601d805460ff60a01b1916600160a01b1790556000612752306113f3565b6015549091504790811080156127a457600061277e60646126b160165489612bfc90919063ffffffff16565b905084801561278c57508084115b15612795578093505b61279e8461231b565b50612813565b60006127e76127c660145461228e60135460125461220290919063ffffffff16565b6126b16127e060135460125461220290919063ffffffff16565b8690612bfc565b90506127f28161267b565b601d54612811906001600160a01b031661280c85846122d9565b612c55565b505b5050601d805460ff60a01b19169055505050565b8061283457612834612fd9565b6001600160a01b03841660009081526007602052604090205460ff16801561287557506001600160a01b03831660009081526007602052604090205460ff16155b1561288a57612885848484613038565b612988565b6001600160a01b03841660009081526007602052604090205460ff161580156128cb57506001600160a01b03831660009081526007602052604090205460ff165b156128db5761288584848461315c565b6001600160a01b03841660009081526007602052604090205460ff1615801561291d57506001600160a01b03831660009081526007602052604090205460ff16155b1561292d57612885848484613205565b6001600160a01b03841660009081526007602052604090205460ff16801561296d57506001600160a01b03831660009081526007602052604090205460ff165b1561297d57612885848484613249565b612988848484613205565b806120f9576120f96132bc565b600c54600b546000918291825b600854811015612ac6578260036000600884815481106129be57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612a2357508160046000600884815481106129fc57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612a3a57600c54600b5494509450505050612af4565b612a7a6003600060088481548110612a4e57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906122d9565b9250612abc6004600060088481548110612a9057fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906122d9565b91506001016129a2565b50600b54600c54612ad6916121b9565b821015612aee57600c54600b54935093505050612af4565b90925090505b9091565b60008183612b475760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561215357818101518382015260200161213b565b506000838581612b5357fe5b0495945050505050565b6000808080612b7160646126b18989612bfc565b90506000612b8460646126b18a89612bfc565b90506000612b9c87612b968b866122d9565b906122d9565b9992985090965090945050505050565b6000808080612bbb8886612bfc565b90506000612bc98887612bfc565b90506000612bd78888612bfc565b90506000612be982612b9686866122d9565b939b939a50919850919650505050505050565b600082612c0b575060006109ba565b82820282848281612c1857fe5b04146121fb5760405162461bcd60e51b81526004018080602001828103825260218152602001806134ab6021913960400191505060405180910390fd5b60408051600280825260608083018452926020830190803683370190505090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612cce57600080fd5b505afa158015612ce2573d6000803e3d6000fd5b505050506040513d6020811015612cf857600080fd5b505181518290600090612d0757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508281600181518110612d3557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050612d80307f000000000000000000000000000000000000000000000000000000000000000084611b68565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663b6f9de95836000847f0000000000000000000000000000000000000000000000000000000000000000612de04261012c612202565b6040518663ffffffff1660e01b81526004018085815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015612e4a578181015183820152602001612e32565b50505050905001955050505050506000604051808303818588803b158015612e7157600080fd5b505af193505050508015612e83575060015b612f56573d808015612eb1576040519150601f19603f3d011682016040523d82523d6000602084013e612eb6565b606091505b507fc062bf45765a468f8a8d2ac697498f1f0211f1c5ac8a9c51fad14b916351c565816040518080602001828103825283818151815260200191508051906020019080838360005b83811015612f16578181015183820152602001612efe565b50505050905090810190601f168015612f435780820380516001836020036101000a031916815260200191505b509250505060405180910390a150612fd4565b7f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a962482826040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015612fbf578181015183820152602001612fa7565b50505050905001935050505060405180910390a15b505050565b601254158015612fe95750601354155b8015612ff55750601154155b80156130015750601454155b1561300b57613036565b60128054601855601380546019556011805460175560148054601a5560009384905591839055829055555b565b60008060008060008061304a8761225c565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061307c90886122d9565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546130ab90876122d9565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546130da9086612202565b6001600160a01b0389166000908152600360205260409020556130fc816132d6565b613106848361335e565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061316e8761225c565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506131a090876122d9565b6001600160a01b03808b16600090815260036020908152604080832094909455918b168152600490915220546131d69084612202565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546130da9086612202565b6000806000806000806132178761225c565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506130ab90876122d9565b60008060008060008061325b8761225c565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061328d90886122d9565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546131a090876122d9565b601854601255601954601355601754601155601a54601455565b60006132e0612196565b905060006132ee8383612bfc565b3060009081526003602052604090205490915061330b9082612202565b3060009081526003602090815260408083209390935560079052205460ff1615612fd457306000908152600460205260409020546133499084612202565b30600090815260046020526040902055505050565b600c5461336b90836122d9565b600c55600d5461337b9082612202565b600d55600b5461338b90826122d9565b600b55505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373416c726561647920626f75676874206d61785478416d6f756e742c20776169742074696c6c20636865636b206f66665472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e6d61785478416d6f756e742073686f756c642062652067726561746572207468616e20746f74616c20316539536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737357652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203fec53ccd78e4e7ed27e68776cb625cbe812e8b59fef828b919cb4e4500de3da64736f6c634300060c0033
Deployed Bytecode
0x6080604052600436106102345760003560e01c80635342acb41161012e578063a9059cbb116100ab578063dd62ed3e1161006f578063dd62ed3e1461085f578063f2fde38b1461089a578063f4293890146108cd578063f815a842146108e2578063ffb54a99146108f75761023b565b8063a9059cbb14610777578063af9549e0146107b0578063c49b9a80146107eb578063c9567bf914610817578063d65bed6d1461082c5761023b565b806388f82020116100f257806388f82020146106b75780638da5cb5b146106ea57806395d89b41146106ff5780639a02ecd514610714578063a457c2d71461073e5761023b565b80635342acb4146105df5780636e19b8971461061257806370a082311461063c578063715018a61461066f5780637ded4d6a146106845761023b565b80633685d419116101bc5780634549b039116101805780634549b0391461053b57806349bd5a5e1461056d5780634a74bb021461058257806351bc3c851461059757806352390c02146105ac5761023b565b80633685d4191461045d57806339509351146104905780633bd5d173146104c95780633c9f861d146104f35780634303443d146105085761023b565b80631bbae6e0116102035780631bbae6e01461036f57806323b872dd1461039b5780632d838119146103de57806330599fc514610408578063313ce567146104325761023b565b806306fdde0314610240578063095ea7b3146102ca5780631694505e1461031757806318160ddd146103485761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b5061025561090c565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561028f578181015183820152602001610277565b50505050905090810190601f1680156102bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102d657600080fd5b50610303600480360360408110156102ed57600080fd5b506001600160a01b0381351690602001356109a2565b604080519115158252519081900360200190f35b34801561032357600080fd5b5061032c6109c0565b604080516001600160a01b039092168252519081900360200190f35b34801561035457600080fd5b5061035d6109e4565b60408051918252519081900360200190f35b34801561037b57600080fd5b506103996004803603602081101561039257600080fd5b50356109ea565b005b3480156103a757600080fd5b50610303600480360360608110156103be57600080fd5b506001600160a01b03813581169160208101359091169060400135610a8a565b3480156103ea57600080fd5b5061035d6004803603602081101561040157600080fd5b5035610b11565b34801561041457600080fd5b506103996004803603602081101561042b57600080fd5b5035610b73565b34801561043e57600080fd5b50610447610bf2565b6040805160ff9092168252519081900360200190f35b34801561046957600080fd5b506103996004803603602081101561048057600080fd5b50356001600160a01b0316610bfb565b34801561049c57600080fd5b50610303600480360360408110156104b357600080fd5b506001600160a01b038135169060200135610dbc565b3480156104d557600080fd5b50610399600480360360208110156104ec57600080fd5b5035610e0a565b3480156104ff57600080fd5b5061035d610ed4565b34801561051457600080fd5b506103996004803603602081101561052b57600080fd5b50356001600160a01b0316610eda565b34801561054757600080fd5b5061035d6004803603604081101561055e57600080fd5b50803590602001351515611062565b34801561057957600080fd5b5061032c6110f4565b34801561058e57600080fd5b50610303611118565b3480156105a357600080fd5b50610399611128565b3480156105b857600080fd5b50610399600480360360208110156105cf57600080fd5b50356001600160a01b0316611196565b3480156105eb57600080fd5b506103036004803603602081101561060257600080fd5b50356001600160a01b0316611378565b34801561061e57600080fd5b506103996004803603602081101561063557600080fd5b5035611396565b34801561064857600080fd5b5061035d6004803603602081101561065f57600080fd5b50356001600160a01b03166113f3565b34801561067b57600080fd5b50610399611455565b34801561069057600080fd5b50610399600480360360208110156106a757600080fd5b50356001600160a01b03166114f7565b3480156106c357600080fd5b50610303600480360360208110156106da57600080fd5b50356001600160a01b0316611684565b3480156106f657600080fd5b5061032c6116a2565b34801561070b57600080fd5b506102556116b1565b34801561072057600080fd5b506103996004803603602081101561073757600080fd5b5035611712565b34801561074a57600080fd5b506103036004803603604081101561076157600080fd5b506001600160a01b03813516906020013561176f565b34801561078357600080fd5b506103036004803603604081101561079a57600080fd5b506001600160a01b0381351690602001356117d7565b3480156107bc57600080fd5b50610399600480360360408110156107d357600080fd5b506001600160a01b03813516906020013515156117eb565b3480156107f757600080fd5b506103996004803603602081101561080e57600080fd5b5035151561186e565b34801561082357600080fd5b506103996118e4565b34801561083857600080fd5b506103996004803603602081101561084f57600080fd5b50356001600160a01b0316611951565b34801561086b57600080fd5b5061035d6004803603604081101561088257600080fd5b506001600160a01b03813581169160200135166119cb565b3480156108a657600080fd5b50610399600480360360208110156108bd57600080fd5b50356001600160a01b03166119f6565b3480156108d957600080fd5b50610399611aee565b3480156108ee57600080fd5b5061035d611b50565b34801561090357600080fd5b50610303611b54565b600e8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109985780601f1061096d57610100808354040283529160200191610998565b820191906000526020600020905b81548152906001019060200180831161097b57829003601f168201915b5050505050905090565b60006109b66109af611b64565b8484611b68565b5060015b92915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b600b5490565b6109f2611b64565b6000546001600160a01b03908116911614610a42576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b633b9aca00811015610a855760405162461bcd60e51b815260040180806020018281038252602c81526020018061347f602c913960400191505060405180910390fd5b601e55565b6000610a97848484611c54565b610b0784610aa3611b64565b610b02856040518060600160405280602881526020016134cc602891396001600160a01b038a16600090815260056020526040812090610ae1611b64565b6001600160a01b0316815260208101919091526040016000205491906120ff565b611b68565b5060019392505050565b6000600c54821115610b545760405162461bcd60e51b815260040180806020018281038252602a8152602001806133b6602a913960400191505060405180910390fd5b6000610b5e612196565b9050610b6a83826121b9565b9150505b919050565b610b7b611b64565b6000546001600160a01b03908116911614610bcb576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b610bdd30610bd76116a2565b83611b68565b610bef30610be96116a2565b83611c54565b50565b60105460ff1690565b610c03611b64565b6000546001600160a01b03908116911614610c53576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16610cc0576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b600854811015610db857816001600160a01b031660088281548110610ce457fe5b6000918252602090912001546001600160a01b03161415610db057600880546000198101908110610d1157fe5b600091825260209091200154600880546001600160a01b039092169183908110610d3757fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610d8957fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610db8565b600101610cc3565b5050565b60006109b6610dc9611b64565b84610b028560056000610dda611b64565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612202565b6000610e14611b64565b6001600160a01b03811660009081526007602052604090205490915060ff1615610e6f5760405162461bcd60e51b815260040180806020018281038252602c8152602001806135cc602c913960400191505060405180910390fd5b6000610e7a8361225c565b505050506001600160a01b038416600090815260036020526040902054919250610ea6919050826122d9565b6001600160a01b038316600090815260036020526040902055600c54610ecc90826122d9565b600c55505050565b600d5490565b610ee2611b64565b6000546001600160a01b03908116911614610f32576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0382161415610f8e5760405162461bcd60e51b815260040180806020018281038252602481526020018061353d6024913960400191505060405180910390fd5b6001600160a01b03811660009081526009602052604090205460ff1615610ffc576040805162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c69737465640000604482015290519081900360640190fd5b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000600b548311156110bb576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b816110da5760006110cb8461225c565b509395506109ba945050505050565b60006110e58461225c565b509295506109ba945050505050565b7f000000000000000000000000b7363cf4d676bbf01d78b63bbf3eff30d5d1d48581565b601d54600160a81b900460ff1681565b611130611b64565b6000546001600160a01b03908116911614611180576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b600061118b306113f3565b9050610bef8161231b565b61119e611b64565b6000546001600160a01b039081169116146111ee576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b038216141561124a5760405162461bcd60e51b81526004018080602001828103825260228152602001806135aa6022913960400191505060405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff16156112b8576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205415611312576001600160a01b0381166000908152600360205260409020546112f890610b11565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b031660009081526006602052604090205460ff1690565b61139e611b64565b6000546001600160a01b039081169116146113ee576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b601555565b6001600160a01b03811660009081526007602052604081205460ff161561143357506001600160a01b038116600090815260046020526040902054610b6e565b6001600160a01b0382166000908152600360205260409020546109ba90610b11565b61145d611b64565b6000546001600160a01b039081169116146114ad576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6114ff611b64565b6000546001600160a01b0390811691161461154f576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526009602052604090205460ff166115bc576040805162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000604482015290519081900360640190fd5b60005b600a54811015610db857816001600160a01b0316600a82815481106115e057fe5b6000918252602090912001546001600160a01b0316141561167c57600a8054600019810190811061160d57fe5b600091825260209091200154600a80546001600160a01b03909216918390811061163357fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600990915260409020805460ff19169055600a805480610d8957fe5b6001016115bf565b6001600160a01b031660009081526007602052604090205460ff1690565b6000546001600160a01b031690565b600f8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109985780601f1061096d57610100808354040283529160200191610998565b61171a611b64565b6000546001600160a01b0390811691161461176a576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b601655565b60006109b661177c611b64565b84610b02856040518060600160405280602581526020016135f860259139600560006117a6611b64565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906120ff565b60006109b66117e4611b64565b8484611c54565b6117f3611b64565b6000546001600160a01b03908116911614611843576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b611876611b64565b6000546001600160a01b039081169116146118c6576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b601d8054911515600160a81b0260ff60a81b19909216919091179055565b6118ec611b64565b6000546001600160a01b0390811691161461193c576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b601d805460ff60b01b1916600160b01b179055565b611959611b64565b6000546001600160a01b039081169116146119a9576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b6119fe611b64565b6000546001600160a01b03908116911614611a4e576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b6001600160a01b038116611a935760405162461bcd60e51b81526004018080602001828103825260268152602001806133e06026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b611af6611b64565b6000546001600160a01b03908116911614611b46576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b47610bef8161267b565b4790565b601d54600160b01b900460ff1681565b3390565b6001600160a01b038316611bad5760405162461bcd60e51b81526004018080602001828103825260248152602001806135866024913960400191505060405180910390fd5b6001600160a01b038216611bf25760405162461bcd60e51b81526004018080602001828103825260228152602001806134066022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316611c995760405162461bcd60e51b81526004018080602001828103825260258152602001806135616025913960400191505060405180910390fd5b6001600160a01b038216611cde5760405162461bcd60e51b81526004018080602001828103825260238152602001806133936023913960400191505060405180910390fd5b60008111611d1d5760405162461bcd60e51b81526004018080602001828103825260298152602001806135146029913960400191505060405180910390fd5b6001600160a01b03831660009081526009602052604090205460ff1615611d85576040805162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015290519081900360640190fd5b6001600160a01b03821660009081526009602052604090205460ff1615611ded576040805162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015290519081900360640190fd5b3260009081526009602052604090205460ff1615611e4c576040805162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015290519081900360640190fd5b611e546116a2565b6001600160a01b0316836001600160a01b031614158015611e8e5750611e786116a2565b6001600160a01b0316826001600160a01b031614155b15611ffe57601e54811115611ed45760405162461bcd60e51b81526004018080602001828103825260288152602001806134576028913960400191505060405180910390fd5b7f000000000000000000000000b7363cf4d676bbf01d78b63bbf3eff30d5d1d4856001600160a01b0316836001600160a01b03161415611ffe57601d54600160b01b900460ff16611f6c576040805162461bcd60e51b815260206004820152601760248201527f5761697420666f72206f70656e65642074726164696e67000000000000000000604482015290519081900360640190fd5b601e54611f78836113f3565b1115611fb55760405162461bcd60e51b815260040180806020018281038252602f815260200180613428602f913960400191505060405180910390fd5b601e54611fc1326113f3565b1115611ffe5760405162461bcd60e51b815260040180806020018281038252602f815260200180613428602f913960400191505060405180910390fd5b601d54600160a01b900460ff161580156120215750601d54600160a81b900460ff165b801561205f57507f000000000000000000000000b7363cf4d676bbf01d78b63bbf3eff30d5d1d4856001600160a01b0316836001600160a01b031614155b156120a2576120a2817f000000000000000000000000b7363cf4d676bbf01d78b63bbf3eff30d5d1d4856001600160a01b0316846001600160a01b031614612734565b6001600160a01b03831660009081526006602052604090205460019060ff16806120e457506001600160a01b03831660009081526006602052604090205460ff165b156120ed575060005b6120f984848484612827565b50505050565b6000818484111561218e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561215357818101518382015260200161213b565b50505050905090810190601f1680156121805780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008060006121a3612995565b90925090506121b282826121b9565b9250505090565b60006121fb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612af8565b9392505050565b6000828201838110156121fb576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008060008060008060008060006122998a60115461229460145461228e60135460125461220290919063ffffffff16565b90612202565b612b5d565b92509250925060006122a9612196565b905060008060006122bc8e878787612bac565b919e509c509a509598509396509194505050505091939550919395565b60006121fb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506120ff565b6040805160028082526060808301845292602083019080368337019050509050308160008151811061234957fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156123c257600080fd5b505afa1580156123d6573d6000803e3d6000fd5b505050506040513d60208110156123ec57600080fd5b50518151829060019081106123fd57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050612448307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611b68565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156124ed5781810151838201526020016124d5565b505050509050019650505050505050600060405180830381600087803b15801561251657600080fd5b505af1925050508015612527575060015b6125fa573d808015612555576040519150601f19603f3d011682016040523d82523d6000602084013e61255a565b606091505b507fc062bf45765a468f8a8d2ac697498f1f0211f1c5ac8a9c51fad14b916351c565816040518080602001828103825283818151815260200191508051906020019080838360005b838110156125ba5781810151838201526020016125a2565b50505050905090810190601f1680156125e75780820380516001836020036101000a031916815260200191505b509250505060405180910390a150610db8565b7f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561266357818101518382015260200161264b565b50505050905001935050505060405180910390a15050565b600061269460135460125461220290919063ffffffff16565b905060006126b7826126b160125486612bfc90919063ffffffff16565b906121b9565b601b546040519192506001600160a01b03169082156108fc029083906000818181858888f193505050501580156126f2573d6000803e3d6000fd5b50601c546001600160a01b03166108fc61270c85846122d9565b6040518115909202916000818181858888f193505050501580156120f9573d6000803e3d6000fd5b601d805460ff60a01b1916600160a01b1790556000612752306113f3565b6015549091504790811080156127a457600061277e60646126b160165489612bfc90919063ffffffff16565b905084801561278c57508084115b15612795578093505b61279e8461231b565b50612813565b60006127e76127c660145461228e60135460125461220290919063ffffffff16565b6126b16127e060135460125461220290919063ffffffff16565b8690612bfc565b90506127f28161267b565b601d54612811906001600160a01b031661280c85846122d9565b612c55565b505b5050601d805460ff60a01b19169055505050565b8061283457612834612fd9565b6001600160a01b03841660009081526007602052604090205460ff16801561287557506001600160a01b03831660009081526007602052604090205460ff16155b1561288a57612885848484613038565b612988565b6001600160a01b03841660009081526007602052604090205460ff161580156128cb57506001600160a01b03831660009081526007602052604090205460ff165b156128db5761288584848461315c565b6001600160a01b03841660009081526007602052604090205460ff1615801561291d57506001600160a01b03831660009081526007602052604090205460ff16155b1561292d57612885848484613205565b6001600160a01b03841660009081526007602052604090205460ff16801561296d57506001600160a01b03831660009081526007602052604090205460ff165b1561297d57612885848484613249565b612988848484613205565b806120f9576120f96132bc565b600c54600b546000918291825b600854811015612ac6578260036000600884815481106129be57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612a2357508160046000600884815481106129fc57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612a3a57600c54600b5494509450505050612af4565b612a7a6003600060088481548110612a4e57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906122d9565b9250612abc6004600060088481548110612a9057fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906122d9565b91506001016129a2565b50600b54600c54612ad6916121b9565b821015612aee57600c54600b54935093505050612af4565b90925090505b9091565b60008183612b475760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561215357818101518382015260200161213b565b506000838581612b5357fe5b0495945050505050565b6000808080612b7160646126b18989612bfc565b90506000612b8460646126b18a89612bfc565b90506000612b9c87612b968b866122d9565b906122d9565b9992985090965090945050505050565b6000808080612bbb8886612bfc565b90506000612bc98887612bfc565b90506000612bd78888612bfc565b90506000612be982612b9686866122d9565b939b939a50919850919650505050505050565b600082612c0b575060006109ba565b82820282848281612c1857fe5b04146121fb5760405162461bcd60e51b81526004018080602001828103825260218152602001806134ab6021913960400191505060405180910390fd5b60408051600280825260608083018452926020830190803683370190505090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612cce57600080fd5b505afa158015612ce2573d6000803e3d6000fd5b505050506040513d6020811015612cf857600080fd5b505181518290600090612d0757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508281600181518110612d3557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050612d80307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611b68565b6001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d1663b6f9de95836000847f000000000000000000000000000000000000000000000000000000000000dead612de04261012c612202565b6040518663ffffffff1660e01b81526004018085815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015612e4a578181015183820152602001612e32565b50505050905001955050505050506000604051808303818588803b158015612e7157600080fd5b505af193505050508015612e83575060015b612f56573d808015612eb1576040519150601f19603f3d011682016040523d82523d6000602084013e612eb6565b606091505b507fc062bf45765a468f8a8d2ac697498f1f0211f1c5ac8a9c51fad14b916351c565816040518080602001828103825283818151815260200191508051906020019080838360005b83811015612f16578181015183820152602001612efe565b50505050905090810190601f168015612f435780820380516001836020036101000a031916815260200191505b509250505060405180910390a150612fd4565b7f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a962482826040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015612fbf578181015183820152602001612fa7565b50505050905001935050505060405180910390a15b505050565b601254158015612fe95750601354155b8015612ff55750601154155b80156130015750601454155b1561300b57613036565b60128054601855601380546019556011805460175560148054601a5560009384905591839055829055555b565b60008060008060008061304a8761225c565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061307c90886122d9565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546130ab90876122d9565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546130da9086612202565b6001600160a01b0389166000908152600360205260409020556130fc816132d6565b613106848361335e565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061316e8761225c565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506131a090876122d9565b6001600160a01b03808b16600090815260036020908152604080832094909455918b168152600490915220546131d69084612202565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546130da9086612202565b6000806000806000806132178761225c565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506130ab90876122d9565b60008060008060008061325b8761225c565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061328d90886122d9565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546131a090876122d9565b601854601255601954601355601754601155601a54601455565b60006132e0612196565b905060006132ee8383612bfc565b3060009081526003602052604090205490915061330b9082612202565b3060009081526003602090815260408083209390935560079052205460ff1615612fd457306000908152600460205260409020546133499084612202565b30600090815260046020526040902055505050565b600c5461336b90836122d9565b600c55600d5461337b9082612202565b600d55600b5461338b90826122d9565b600b55505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373416c726561647920626f75676874206d61785478416d6f756e742c20776169742074696c6c20636865636b206f66665472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e6d61785478416d6f756e742073686f756c642062652067726561746572207468616e20746f74616c20316539536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737357652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203fec53ccd78e4e7ed27e68776cb625cbe812e8b59fef828b919cb4e4500de3da64736f6c634300060c0033
Deployed Bytecode Sourcemap
23292:24668:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28682:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29594:161;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29594:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;25120:51;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;25120:51:0;;;;;;;;;;;;;;28959:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;47165:201;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47165:201:0;;:::i;:::-;;29763:313;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29763:313:0;;;;;;;;;;;;;;;;;:::i;31738:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31738:253:0;;:::i;47374:192::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47374:192:0;;:::i;28868:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32453:479;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32453:479:0;-1:-1:-1;;;;;32453:479:0;;:::i;30084:218::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30084:218:0;;;;;;;;:::i;30956:330::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30956:330:0;;:::i;30860:88::-;;;;;;;;;;;;;:::i;32940:352::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32940:352:0;-1:-1:-1;;;;;32940:352:0;;:::i;31294:436::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31294:436:0;;;;;;;;;:::i;25178:38::-;;;;;;;;;;;;;:::i;25261:40::-;;;;;;;;;;;;;:::i;40023:156::-;;;;;;;;;;;;;:::i;31999:446::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31999:446:0;-1:-1:-1;;;;;31999:446:0;;:::i;34481:123::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34481:123:0;-1:-1:-1;;;;;34481:123:0;;:::i;47730:111::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47730:111:0;;:::i;29062:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29062:198:0;-1:-1:-1;;;;;29062:198:0;;:::i;14919:148::-;;;;;;;;;;;;;:::i;33300:500::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33300:500:0;-1:-1:-1;;;;;33300:500:0;;:::i;30587:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30587:120:0;-1:-1:-1;;;;;30587:120:0;;:::i;14285:79::-;;;;;;;;;;;;;:::i;28773:87::-;;;;;;;;;;;;;:::i;47849:108::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47849:108:0;;:::i;30310:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30310:269:0;;;;;;;;:::i;29268:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29268:167:0;;;;;;;;:::i;30715:137::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30715:137:0;;;;;;;;;;:::i;40352:148::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40352:148:0;;;;:::i;39796:77::-;;;;;;;;;;;;;:::i;47574:148::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47574:148:0;-1:-1:-1;;;;;47574:148:0;;:::i;29443:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29443:143:0;;;;;;;;;;:::i;15219:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15219:244:0;-1:-1:-1;;;;;15219:244:0;;:::i;40187:157::-;;;;;;;;;;;;;:::i;47047:110::-;;;;;;;;;;;;;:::i;25308:31::-;;;;;;;;;;;;;:::i;28682:83::-;28752:5;28745:12;;;;;;;;-1:-1:-1;;28745:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28719:13;;28745:12;;28752:5;;28745:12;;28752:5;28745:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28682:83;:::o;29594:161::-;29669:4;29686:39;29695:12;:10;:12::i;:::-;29709:7;29718:6;29686:8;:39::i;:::-;-1:-1:-1;29743:4:0;29594:161;;;;;:::o;25120:51::-;;;:::o;28959:95::-;29039:7;;28959:95;:::o;47165:201::-;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;47266:5:::1;47251:11;:20;;47243:78;;;;-1:-1:-1::0;;;47243:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47332:12;:26:::0;47165:201::o;29763:313::-;29861:4;29878:36;29888:6;29896:9;29907:6;29878:9;:36::i;:::-;29925:121;29934:6;29942:12;:10;:12::i;:::-;29956:89;29994:6;29956:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29956:19:0;;;;;;:11;:19;;;;;;29976:12;:10;:12::i;:::-;-1:-1:-1;;;;;29956:33:0;;;;;;;;;;;;-1:-1:-1;29956:33:0;;;:89;:37;:89::i;:::-;29925:8;:121::i;:::-;-1:-1:-1;30064:4:0;29763:313;;;;;:::o;31738:253::-;31804:7;31843;;31832;:18;;31824:73;;;;-1:-1:-1;;;31824:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31908:19;31931:10;:8;:10::i;:::-;31908:33;-1:-1:-1;31959:24:0;:7;31908:33;31959:11;:24::i;:::-;31952:31;;;31738:253;;;;:::o;47374:192::-;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;47456:45:::1;47473:4;47480:7;:5;:7::i;:::-;47489:11;47456:8;:45::i;:::-;47512:46;47530:4;47537:7;:5;:7::i;:::-;47546:11;47512:9;:46::i;:::-;47374:192:::0;:::o;28868:83::-;28934:9;;;;28868:83;:::o;32453:479::-;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32535:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;32527:60;;;::::0;;-1:-1:-1;;;32527:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;32603:9;32598:327;32622:9;:16:::0;32618:20;::::1;32598:327;;;32680:7;-1:-1:-1::0;;;;;32664:23:0::1;:9;32674:1;32664:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;32664:12:0::1;:23;32660:254;;;32723:9;32733:16:::0;;-1:-1:-1;;32733:20:0;;;32723:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;32708:9:::1;:12:::0;;-1:-1:-1;;;;;32723:31:0;;::::1;::::0;32718:1;;32708:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;32708:46:0::1;-1:-1:-1::0;;;;;32708:46:0;;::::1;;::::0;;32773:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;32812:11:::1;:20:::0;;;;:28;;-1:-1:-1;;32812:28:0::1;::::0;;32859:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;32859:15:0;;;;;-1:-1:-1;;;;;;32859:15:0::1;::::0;;;;;32893:5:::1;;32660:254;32640:3;;32598:327;;;;32453:479:::0;:::o;30084:218::-;30172:4;30189:83;30198:12;:10;:12::i;:::-;30212:7;30221:50;30260:10;30221:11;:25;30233:12;:10;:12::i;:::-;-1:-1:-1;;;;;30221:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;30221:25:0;;;:34;;;;;;;;;;;:38;:50::i;30956:330::-;31008:14;31025:12;:10;:12::i;:::-;-1:-1:-1;;;;;31057:19:0;;;;;;:11;:19;;;;;;31008:29;;-1:-1:-1;31057:19:0;;31056:20;31048:77;;;;-1:-1:-1;;;31048:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31137:15;31161:19;31172:7;31161:10;:19::i;:::-;-1:-1:-1;;;;;;;;;31209:15:0;;;;;;:7;:15;;;;;;31136:44;;-1:-1:-1;31209:28:0;;:15;-1:-1:-1;31136:44:0;31209:19;:28::i;:::-;-1:-1:-1;;;;;31191:15:0;;;;;;:7;:15;;;;;:46;31258:7;;:20;;31270:7;31258:11;:20::i;:::-;31248:7;:30;-1:-1:-1;;;30956:330:0:o;30860:88::-;30929:11;;30860:88;:::o;32940:352::-;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;33035:42:::1;-1:-1:-1::0;;;;;33024:53:0;::::1;;;33016:102;;;;-1:-1:-1::0;;;33016:102:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;33138:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;33137:27;33129:70;;;::::0;;-1:-1:-1;;;33129:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;33210:26:0::1;;::::0;;;:17:::1;:26;::::0;;;;:33;;-1:-1:-1;;33210:33:0::1;33239:4;33210:33:::0;;::::1;::::0;;;33254:16:::1;:30:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;33254:30:0::1;::::0;;::::1;::::0;;32940:352::o;31294:436::-;31384:7;31423;;31412;:18;;31404:62;;;;;-1:-1:-1;;;31404:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;31482:17;31477:246;;31517:15;31541:19;31552:7;31541:10;:19::i;:::-;-1:-1:-1;31516:44:0;;-1:-1:-1;31575:14:0;;-1:-1:-1;;;;;31575:14:0;31477:246;31624:23;31655:19;31666:7;31655:10;:19::i;:::-;-1:-1:-1;31622:52:0;;-1:-1:-1;31689:22:0;;-1:-1:-1;;;;;31689:22:0;25178:38;;;:::o;25261:40::-;;;-1:-1:-1;;;25261:40:0;;;;;:::o;40023:156::-;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;40077:23:::1;40103:24;40121:4;40103:9;:24::i;:::-;40077:50;;40138:33;40155:15;40138:16;:33::i;31999:446::-:0;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;32094:42:::1;-1:-1:-1::0;;;;;32083:53:0;::::1;;;32075:100;;;;-1:-1:-1::0;;;32075:100:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;32195:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;32194:21;32186:61;;;::::0;;-1:-1:-1;;;32186:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;32261:16:0;::::1;32280:1;32261:16:::0;;;:7:::1;:16;::::0;;;;;:20;32258:108:::1;;-1:-1:-1::0;;;;;32337:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;32317:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;32298:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;32258:108:::1;-1:-1:-1::0;;;;;32376:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;32376:27:0::1;32399:4;32376:27:::0;;::::1;::::0;;;32414:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;32414:23:0::1;::::0;;::::1;::::0;;31999:446::o;34481:123::-;-1:-1:-1;;;;;34569:27:0;34545:4;34569:27;;;:18;:27;;;;;;;;;34481:123::o;47730:111::-;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;47810:8:::1;:23:::0;47730:111::o;29062:198::-;-1:-1:-1;;;;;29152:20:0;;29128:7;29152:20;;;:11;:20;;;;;;;;29148:49;;;-1:-1:-1;;;;;;29181:16:0;;;;;;:7;:16;;;;;;29174:23;;29148:49;-1:-1:-1;;;;;29235:16:0;;;;;;:7;:16;;;;;;29215:37;;:19;:37::i;14919:148::-;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;15026:1:::1;15010:6:::0;;14989:40:::1;::::0;-1:-1:-1;;;;;15010:6:0;;::::1;::::0;14989:40:::1;::::0;15026:1;;14989:40:::1;15057:1;15040:19:::0;;-1:-1:-1;;;;;;15040:19:0::1;::::0;;14919:148::o;33300:500::-;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33389:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;33381:65;;;::::0;;-1:-1:-1;;;33381:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;33462:9;33457:336;33481:16;:23:::0;33477:27;::::1;33457:336;;;33553:7;-1:-1:-1::0;;;;;33530:30:0::1;:16;33547:1;33530:19;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;33530:19:0::1;:30;33526:256;;;33603:16;33620:23:::0;;-1:-1:-1;;33620:27:0;;;33603:45;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;33581:16:::1;:19:::0;;-1:-1:-1;;;;;33603:45:0;;::::1;::::0;33598:1;;33581:19;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:67:::0;;-1:-1:-1;;;;;;33581:67:0::1;-1:-1:-1::0;;;;;33581:67:0;;::::1;;::::0;;33667:26;;::::1;::::0;;:17:::1;:26:::0;;;;;;:34;;-1:-1:-1;;33667:34:0::1;::::0;;33720:16:::1;:22:::0;;;::::1;;;33526:256;33506:3;;33457:336;;30587:120:::0;-1:-1:-1;;;;;30679:20:0;30655:4;30679:20;;;:11;:20;;;;;;;;;30587:120::o;14285:79::-;14323:7;14350:6;-1:-1:-1;;;;;14350:6:0;14285:79;:::o;28773:87::-;28845:7;28838:14;;;;;;;;-1:-1:-1;;28838:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28812:13;;28838:14;;28845:7;;28838:14;;28845:7;28838:14;;;;;;;;;;;;;;;;;;;;;;;;47849:108;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;47925:11:::1;:24:::0;47849:108::o;30310:269::-;30403:4;30420:129;30429:12;:10;:12::i;:::-;30443:7;30452:96;30491:15;30452:96;;;;;;;;;;;;;;;;;:11;:25;30464:12;:10;:12::i;:::-;-1:-1:-1;;;;;30452:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;30452:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;29268:167::-;29346:4;29363:42;29373:12;:10;:12::i;:::-;29387:9;29398:6;29363:9;:42::i;30715:137::-;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;30806:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:38;;-1:-1:-1;;30806:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30715:137::o;40352:148::-;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;40446:21:::1;:46:::0;;;::::1;;-1:-1:-1::0;;;40446:46:0::1;-1:-1:-1::0;;;;40446:46:0;;::::1;::::0;;;::::1;::::0;;40352:148::o;39796:77::-;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;39847:11:::1;:18:::0;;-1:-1:-1;;;;39847:18:0::1;-1:-1:-1::0;;;39847:18:0::1;::::0;;39796:77::o;47574:148::-;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;47670:21:::1;:44:::0;;-1:-1:-1;;;;;;47670:44:0::1;-1:-1:-1::0;;;;;47670:44:0;;;::::1;::::0;;;::::1;::::0;;47574:148::o;29443:143::-;-1:-1:-1;;;;;29551:18:0;;;29524:7;29551:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;29443:143::o;15219:244::-;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;15308:22:0;::::1;15300:73;;;;-1:-1:-1::0;;;15300:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15410:6;::::0;;15389:38:::1;::::0;-1:-1:-1;;;;;15389:38:0;;::::1;::::0;15410:6;::::1;::::0;15389:38:::1;::::0;::::1;15438:6;:17:::0;;-1:-1:-1;;;;;;15438:17:0::1;-1:-1:-1::0;;;;;15438:17:0;;;::::1;::::0;;;::::1;::::0;;15219:244::o;40187:157::-;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;40268:21:::1;40300:36;40268:21:::0;40300:16:::1;:36::i;47047:110::-:0;47128:21;47047:110;:::o;25308:31::-;;;-1:-1:-1;;;25308:31:0;;;;;:::o;106:106::-;194:10;106:106;:::o;34612:337::-;-1:-1:-1;;;;;34705:19:0;;34697:68;;;;-1:-1:-1;;;34697:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34784:21:0;;34776:68;;;;-1:-1:-1;;;34776:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34857:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;34909:32;;;;;;;;;;;;;;;;;34612:337;;;:::o;34957:2081::-;-1:-1:-1;;;;;35054:20:0;;35046:70;;;;-1:-1:-1;;;35046:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35135:23:0;;35127:71;;;;-1:-1:-1;;;35127:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35226:1;35217:6;:10;35209:64;;;;-1:-1:-1;;;35209:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35293:25:0;;;;;;:17;:25;;;;;;;;35292:26;35284:62;;;;;-1:-1:-1;;;35284:62:0;;;;;;;;;;;;-1:-1:-1;;;35284:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;35366:28:0;;;;;;:17;:28;;;;;;;;35365:29;35357:65;;;;;-1:-1:-1;;;35357:65:0;;;;;;;;;;;;-1:-1:-1;;;35357:65:0;;;;;;;;;;;;;;;35460:9;35442:28;;;;:17;:28;;;;;;;;35441:29;35433:65;;;;;-1:-1:-1;;;35433:65:0;;;;;;;;;;;;-1:-1:-1;;;35433:65:0;;;;;;;;;;;;;;;35524:7;:5;:7::i;:::-;-1:-1:-1;;;;;35514:17:0;:6;-1:-1:-1;;;;;35514:17:0;;;:41;;;;;35548:7;:5;:7::i;:::-;-1:-1:-1;;;;;35535:20:0;:9;-1:-1:-1;;;;;35535:20:0;;;35514:41;35511:662;;;35590:12;;35580:6;:22;;35572:75;;;;-1:-1:-1;;;35572:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35835:13;-1:-1:-1;;;;;35825:23:0;:6;-1:-1:-1;;;;;35825:23:0;;35821:341;;;35877:11;;-1:-1:-1;;;35877:11:0;;;;35869:47;;;;;-1:-1:-1;;;35869:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35967:12;;35943:20;35953:9;35943;:20::i;:::-;:36;;35935:96;;;;-1:-1:-1;;;35935:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36082:12;;36058:20;36068:9;36058;:20::i;:::-;:36;;36050:96;;;;-1:-1:-1;;;36050:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36474:16;;-1:-1:-1;;;36474:16:0;;;;36473:17;:42;;;;-1:-1:-1;36494:21:0;;-1:-1:-1;;;36494:21:0;;;;36473:42;:69;;;;;36529:13;-1:-1:-1;;;;;36519:23:0;:6;-1:-1:-1;;;;;36519:23:0;;;36473:69;36469:148;;;36559:46;36570:6;36591:13;-1:-1:-1;;;;;36578:26:0;:9;-1:-1:-1;;;;;36578:26:0;;36559:10;:46::i;:::-;-1:-1:-1;;;;;36809:26:0;;36690:12;36809:26;;;:18;:26;;;;;;36705:4;;36809:26;;;:59;;-1:-1:-1;;;;;;36839:29:0;;;;;;:18;:29;;;;;;;;36809:59;36806:105;;;-1:-1:-1;36894:5:0;36806:105;36980:50;36995:6;37003:9;37014:6;37022:7;36980:14;:50::i;:::-;34957:2081;;;;:::o;4193:192::-;4279:7;4315:12;4307:6;;;;4299:29;;;;-1:-1:-1;;;4299:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4351:5:0;;;4193:192::o;46210:163::-;46251:7;46272:15;46289;46308:19;:17;:19::i;:::-;46271:56;;-1:-1:-1;46271:56:0;-1:-1:-1;46345:20:0;46271:56;;46345:11;:20::i;:::-;46338:27;;;;46210:163;:::o;5571:132::-;5629:7;5656:39;5660:1;5663;5656:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5649:46;5571:132;-1:-1:-1;;;5571:132:0:o;3308:181::-;3366:7;3398:5;;;3422:6;;;;3414:46;;;;;-1:-1:-1;;;3414:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;44552:567;44611:7;44620;44629;44638;44647;44656;44677:23;44702:13;44717:30;44751:83;44763:7;44772:8;;44782:51;44821:11;;44782:34;44800:15;;44782:13;;:17;;:34;;;;:::i;:::-;:38;;:51::i;:::-;44751:11;:83::i;:::-;44676:158;;;;;;44845:19;44867:10;:8;:10::i;:::-;44845:32;;44889:15;44906:23;44931:13;44948:64;44960:7;44969:5;44976:22;45000:11;44948;:64::i;:::-;44888:124;;-1:-1:-1;44888:124:0;-1:-1:-1;44888:124:0;-1:-1:-1;45064:15:0;;-1:-1:-1;45081:5:0;;-1:-1:-1;45088:22:0;;-1:-1:-1;;;;;44552:567:0;;;;;;;:::o;3763:136::-;3821:7;3848:43;3852:1;3855;3848:43;;;;;;;;;;;;;;;;;:3;:43::i;37990:739::-;38140:16;;;38154:1;38140:16;;;38116:21;38140:16;;;;;38116:21;38140:16;;;;;;;;;;-1:-1:-1;38140:16:0;38116:40;;38185:4;38167;38172:1;38167:7;;;;;;;;;;;;;:23;-1:-1:-1;;;;;38167:23:0;;;-1:-1:-1;;;;;38167:23:0;;;;;38211:15;-1:-1:-1;;;;;38211:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38211:22:0;38201:7;;:4;;38206:1;;38201:7;;;;;;;;;;;:32;-1:-1:-1;;;;;38201:32:0;;;-1:-1:-1;;;;;38201:32:0;;;;;38246:62;38263:4;38278:15;38296:11;38246:8;:62::i;:::-;38351:15;-1:-1:-1;;;;;38351:66:0;;38432:11;38458:1;38502:4;38529;38549:15;38351:224;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38351:224:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38347:375;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38687:23;38708:1;38687:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38644:78;38347:375;;;38596:35;38613:11;38626:4;38596:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37990:739;;:::o;39482:306::-;39543:12;39558:34;39576:15;;39558:13;;:17;;:34;;;;:::i;:::-;39543:49;;39603:17;39623:35;39653:4;39623:25;39634:13;;39623:6;:10;;:25;;;;:::i;:::-;:29;;:35::i;:::-;39669:23;;:43;;39603:55;;-1:-1:-1;;;;;;39669:23:0;;:43;;;;;39603:55;;39669:23;:43;:23;:43;39603:55;39669:23;:43;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39723:25:0;;-1:-1:-1;;;;;39723:25:0;:57;39758:21;:6;39769:9;39758:10;:21::i;:::-;39723:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37096:886;25797:16;:23;;-1:-1:-1;;;;25797:23:0;-1:-1:-1;;;25797:23:0;;;;37207:24:::1;37225:4;37207:9;:24::i;:::-;37344:8;::::0;37176:55;;-1:-1:-1;37271:21:0::1;::::0;37323:29;::::1;37365:610:::0;::::1;;;37398:26;37427:32;37455:3;37427:23;37438:11;;37427:6;:10;;:23;;;;:::i;:32::-;37398:61;;37478:6;:51;;;;;37511:18;37488:20;:41;37478:51;37474:133;;;37573:18;37550:41;;37474:133;37621:38;37638:20;37621:16;:38::i;:::-;37365:610;;;;37692:18;37713:115;37776:51;37815:11;;37776:34;37794:15;;37776:13;;:17;;:34;;;;:::i;:51::-;37713:58;37736:34;37754:15;;37736:13;;:17;;:34;;;;:::i;:::-;37713:18:::0;;:22:::1;:58::i;:115::-;37692:136;;37845:28;37862:10;37845:16;:28::i;:::-;37905:21;::::0;37888:75:::1;::::0;-1:-1:-1;;;;;37905:21:0::1;37928:34;:18:::0;37951:10;37928:22:::1;:34::i;:::-;37888:16;:75::i;:::-;37365:610;;-1:-1:-1::0;;25843:16:0;:24;;-1:-1:-1;;;;25843:24:0;;;-1:-1:-1;;;37096:886:0:o;40508:819::-;40620:7;40616:40;;40642:14;:12;:14::i;:::-;-1:-1:-1;;;;;40673:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;40697:22:0;;;;;;:11;:22;;;;;;;;40696:23;40673:46;40669:597;;;40736:48;40758:6;40766:9;40777:6;40736:21;:48::i;:::-;40669:597;;;-1:-1:-1;;;;;40807:19:0;;;;;;:11;:19;;;;;;;;40806:20;:46;;;;-1:-1:-1;;;;;;40830:22:0;;;;;;:11;:22;;;;;;;;40806:46;40802:464;;;40869:46;40889:6;40897:9;40908:6;40869:19;:46::i;40802:464::-;-1:-1:-1;;;;;40938:19:0;;;;;;:11;:19;;;;;;;;40937:20;:47;;;;-1:-1:-1;;;;;;40962:22:0;;;;;;:11;:22;;;;;;;;40961:23;40937:47;40933:333;;;41001:44;41019:6;41027:9;41038:6;41001:17;:44::i;40933:333::-;-1:-1:-1;;;;;41067:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;41090:22:0;;;;;;:11;:22;;;;;;;;41067:45;41063:203;;;41129:48;41151:6;41159:9;41170:6;41129:21;:48::i;41063:203::-;41210:44;41228:6;41236:9;41247:6;41210:17;:44::i;:::-;41282:7;41278:41;;41304:15;:13;:15::i;46381:555::-;46478:7;;46514;;46431;;;;;46532:289;46556:9;:16;46552:20;;46532:289;;;46622:7;46598;:21;46606:9;46616:1;46606:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46606:12:0;46598:21;;;;;;;;;;;;;:31;;:66;;;46657:7;46633;:21;46641:9;46651:1;46641:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46641:12:0;46633:21;;;;;;;;;;;;;:31;46598:66;46594:97;;;46674:7;;46683;;46666:25;;;;;;;;;46594:97;46716:34;46728:7;:21;46736:9;46746:1;46736:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46736:12:0;46728:21;;;;;;;;;;;;;46716:7;;:11;:34::i;:::-;46706:44;;46775:34;46787:7;:21;46795:9;46805:1;46795:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46795:12:0;46787:21;;;;;;;;;;;;;46775:7;;:11;:34::i;:::-;46765:44;-1:-1:-1;46574:3:0;;46532:289;;;-1:-1:-1;46857:7:0;;46845;;:20;;:11;:20::i;:::-;46835:7;:30;46831:61;;;46875:7;;46884;;46867:25;;;;;;;;46831:61;46911:7;;-1:-1:-1;46920:7:0;-1:-1:-1;46381:555:0;;;:::o;6188:278::-;6274:7;6309:12;6302:5;6294:28;;;;-1:-1:-1;;;6294:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6333:9;6349:1;6345;:5;;;;;;;6188:278;-1:-1:-1;;;;;6188:278:0:o;45127:464::-;45241:7;;;;45295:29;45320:3;45295:20;:7;45307;45295:11;:20::i;:29::-;45279:45;-1:-1:-1;45335:36:0;45374:49;45419:3;45374:40;:7;45386:27;45374:11;:40::i;:49::-;45335:88;-1:-1:-1;45434:23:0;45460:51;45483:27;45460:18;:7;45472:5;45460:11;:18::i;:::-;:22;;:51::i;:::-;45434:77;45547:5;;-1:-1:-1;45554:28:0;;-1:-1:-1;45127:464:0;;-1:-1:-1;;;;;45127:464:0:o;45599:603::-;45733:7;;;;45789:24;:7;45801:11;45789;:24::i;:::-;45771:42;-1:-1:-1;45824:13:0;45840:22;:5;45850:11;45840:9;:22::i;:::-;45824:38;-1:-1:-1;45970:36:0;46009:45;:28;46042:11;46009:32;:45::i;:::-;45970:84;-1:-1:-1;46065:23:0;46091:52;45970:84;46091:18;:7;46103:5;46091:11;:18::i;:52::-;46162:7;;;;-1:-1:-1;46188:5:0;;-1:-1:-1;45599:603:0;;-1:-1:-1;;;;;;;45599:603:0:o;4635:471::-;4693:7;4938:6;4934:47;;-1:-1:-1;4968:1:0;4961:8;;4934:47;5005:5;;;5009:1;5005;:5;:1;5029:5;;;;;:10;5021:56;;;;-1:-1:-1;;;5021:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38737:737;38897:16;;;38911:1;38897:16;;;38873:21;38897:16;;;;;38873:21;38897:16;;;;;;;;;;-1:-1:-1;38897:16:0;38873:40;;38934:15;-1:-1:-1;;;;;38934:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38934:22:0;38924:7;;:4;;38929:1;;38924:7;;;;;;;;;:32;-1:-1:-1;;;;;38924:32:0;;;-1:-1:-1;;;;;38924:32:0;;;;;38977:5;38967:4;38972:1;38967:7;;;;;;;;;;;;;:15;-1:-1:-1;;;;;38967:15:0;;;-1:-1:-1;;;;;38967:15:0;;;;;38995:57;39012:4;39027:15;39045:6;38995:8;:57::i;:::-;-1:-1:-1;;;;;39095:15:0;:66;;39169:6;39191:1;39238:4;39257:18;39290:24;:15;39310:3;39290:19;:24::i;:::-;39095:230;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39095:230:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39091:376;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39432:23;39453:1;39432:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39389:78;39091:376;;;39346:30;39363:6;39371:4;39346:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39091:376;38737:737;;;:::o;33808:434::-;33854:13;;:18;:42;;;;-1:-1:-1;33876:15:0;;:20;33854:42;:59;;;;-1:-1:-1;33900:8:0;;:13;33854:59;:79;;;;-1:-1:-1;33917:11:0;;:16;33854:79;33851:91;;;33935:7;;33851:91;33978:13;;;33954:21;:37;34028:15;;;34002:23;:41;34073:8;;;34054:16;:27;34114:11;;;34092:19;:33;-1:-1:-1;34138:17:0;;;;34166:19;;;;34196:12;;;34219:15;33808:434;:::o;42510:604::-;42613:15;42630:23;42655:13;42670:23;42695:13;42710:36;42750:19;42761:7;42750:10;:19::i;:::-;-1:-1:-1;;;;;42798:15:0;;;;;;:7;:15;;;;;;42612:157;;-1:-1:-1;42612:157:0;;-1:-1:-1;42612:157:0;;-1:-1:-1;42612:157:0;-1:-1:-1;42612:157:0;-1:-1:-1;42612:157:0;-1:-1:-1;42798:28:0;;42818:7;42798:19;:28::i;:::-;-1:-1:-1;;;;;42780:15:0;;;;;;:7;:15;;;;;;;;:46;;;;42855:7;:15;;;;:28;;42875:7;42855:19;:28::i;:::-;-1:-1:-1;;;;;42837:15:0;;;;;;;:7;:15;;;;;;:46;;;;42915:18;;;;;;;:39;;42938:15;42915:22;:39::i;:::-;-1:-1:-1;;;;;42894:18:0;;;;;;:7;:18;;;;;:60;42965:45;42981:28;42965:15;:45::i;:::-;43021:25;43033:5;43040;43021:11;:25::i;:::-;43079:9;-1:-1:-1;;;;;43062:44:0;43071:6;-1:-1:-1;;;;;43062:44:0;;43090:15;43062:44;;;;;;;;;;;;;;;;;;42510:604;;;;;;;;;:::o;41886:616::-;41987:15;42004:23;42029:13;42044:23;42069:13;42084:36;42124:19;42135:7;42124:10;:19::i;:::-;-1:-1:-1;;;;;42172:15:0;;;;;;:7;:15;;;;;;41986:157;;-1:-1:-1;41986:157:0;;-1:-1:-1;41986:157:0;;-1:-1:-1;41986:157:0;-1:-1:-1;41986:157:0;-1:-1:-1;41986:157:0;-1:-1:-1;42172:28:0;;41986:157;42172:19;:28::i;:::-;-1:-1:-1;;;;;42154:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;42232:18;;;;;:7;:18;;;;;:39;;42255:15;42232:22;:39::i;:::-;-1:-1:-1;;;;;42211:18:0;;;;;;:7;:18;;;;;;;;:60;;;;42303:7;:18;;;;:39;;42326:15;42303:22;:39::i;41335:543::-;41434:15;41451:23;41476:13;41491:23;41516:13;41531:36;41571:19;41582:7;41571:10;:19::i;:::-;-1:-1:-1;;;;;41619:15:0;;;;;;:7;:15;;;;;;41433:157;;-1:-1:-1;41433:157:0;;-1:-1:-1;41433:157:0;;-1:-1:-1;41433:157:0;-1:-1:-1;41433:157:0;-1:-1:-1;41433:157:0;-1:-1:-1;41619:28:0;;41433:157;41619:19;:28::i;43122:675::-;43225:15;43242:23;43267:13;43282:23;43307:13;43322:36;43362:19;43373:7;43362:10;:19::i;:::-;-1:-1:-1;;;;;43410:15:0;;;;;;:7;:15;;;;;;43224:157;;-1:-1:-1;43224:157:0;;-1:-1:-1;43224:157:0;;-1:-1:-1;43224:157:0;-1:-1:-1;43224:157:0;-1:-1:-1;43224:157:0;-1:-1:-1;43410:28:0;;43430:7;43410:19;:28::i;:::-;-1:-1:-1;;;;;43392:15:0;;;;;;:7;:15;;;;;;;;:46;;;;43467:7;:15;;;;:28;;43487:7;43467:19;:28::i;34250:223::-;34310:21;;34294:13;:37;34360:23;;34342:15;:41;34405:16;;34394:8;:27;34446:19;;34432:11;:33;34250:223::o;43805:445::-;43887:19;43909:10;:8;:10::i;:::-;43887:32;-1:-1:-1;43930:36:0;43969:45;:28;43887:32;43969;:45::i;:::-;44066:4;44050:22;;;;:7;:22;;;;;;43930:84;;-1:-1:-1;44050:56:0;;43930:84;44050:26;:56::i;:::-;44041:4;44025:22;;;;:7;:22;;;;;;;;:81;;;;44120:11;:26;;;;;;44117:125;;;44202:4;44186:22;;;;:7;:22;;;;;;:56;;44213:28;44186:26;:56::i;:::-;44177:4;44161:22;;;;:7;:22;;;;;:81;43805:445;;;:::o;44258:192::-;44338:7;;:18;;44350:5;44338:11;:18::i;:::-;44328:7;:28;44381:11;;:22;;44397:5;44381:15;:22::i;:::-;44367:11;:36;44424:7;;:18;;44436:5;44424:11;:18::i;:::-;44414:7;:28;-1:-1:-1;;44258:192:0:o
Swarm Source
ipfs://3fec53ccd78e4e7ed27e68776cb625cbe812e8b59fef828b919cb4e4500de3da
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.