ERC-20
DeFi
Overview
Max Total Supply
99,982.457691454836901795 SHEESHA
Holders
2,484 ( -0.040%)
Market
Price
$4.04 @ 0.001225 ETH (+7.80%)
Onchain Market Cap
$404,077.16
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.01 SHEESHAValue
$0.04 ( ~1.21290910415564E-05 Eth) [0.0000%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
LGE
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-03-31 */ // File: @openzeppelin\contracts\token\ERC20\IERC20.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @uniswap\v2-core\contracts\interfaces\IUniswapV2Pair.sol pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File: @uniswap\v2-core\contracts\interfaces\IUniswapV2Factory.sol pragma solidity >=0.5.0; 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; } // File: node_modules\@uniswap\v2-periphery\contracts\interfaces\IUniswapV2Router01.sol pragma solidity >=0.6.2; 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); } // File: @uniswap\v2-periphery\contracts\interfaces\IUniswapV2Router02.sol pragma solidity >=0.6.2; 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; } // File: @uniswap\v2-periphery\contracts\interfaces\IWETH.sol pragma solidity >=0.5.0; interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } // File: @openzeppelin\contracts\utils\Address.sol pragma solidity >=0.6.2 <0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // 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"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: node_modules\@openzeppelin\contracts\GSN\Context.sol pragma solidity >=0.6.0 <0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address 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; } } // File: node_modules\@openzeppelin\contracts\math\SafeMath.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ 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; } } // File: node_modules\@openzeppelin\contracts\token\ERC20\ERC20.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20 { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name_, string memory symbol_) public { _name = name_; _symbol = symbol_; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } } // File: @openzeppelin\contracts\token\ERC20\ERC20Burnable.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { using SafeMath for uint256; /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { uint256 decreasedAllowance = allowance(account, _msgSender()).sub(amount, "ERC20: burn amount exceeds allowance"); _approve(account, _msgSender(), decreasedAllowance); _burn(account, amount); } } // File: @openzeppelin\contracts\access\Ownable.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () 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; } } // File: contracts\SHEESHA.sol pragma solidity 0.7.6; contract SHEESHA is ERC20Burnable, Ownable { using SafeMath for uint256; //100,000 tokens uint256 public constant initialSupply = 100000e18; address public devAddress; address public teamAddress; address public marketingAddress; address public reserveAddress; bool public vaultTransferDone; bool public vaultLPTransferDone; // 15% team (4% monthly unlock over 25 months) // 10% dev // 10% marketing // 15% liquidity provision // 10% SHEESHA staking rewards // 20% LP rewards // 20% Reserve constructor(address _devAddress, address _marketingAddress, address _teamAddress, address _reserveAddress) ERC20("Sheesha Finance", "SHEESHA") { devAddress = _devAddress; marketingAddress = _marketingAddress; teamAddress = _teamAddress; reserveAddress = _reserveAddress; _mint(address(this), initialSupply); _transfer(address(this), devAddress, initialSupply.mul(10).div(100)); _transfer(address(this), teamAddress, initialSupply.mul(15).div(100)); _transfer(address(this), marketingAddress, initialSupply.mul(10).div(100)); _transfer(address(this), reserveAddress, initialSupply.mul(20).div(100)); } //one time only function transferVaultRewards(address _vaultAddress) public onlyOwner { require(!vaultTransferDone, "Already transferred"); _transfer(address(this), _vaultAddress, initialSupply.mul(10).div(100)); vaultTransferDone = true; } //one time only function transferVaultLPRewards(address _vaultLPAddress) public onlyOwner { require(!vaultLPTransferDone, "Already transferred"); _transfer(address(this), _vaultLPAddress, initialSupply.mul(20).div(100)); vaultLPTransferDone = true; } } // File: contracts\ISHEESHAGlobals.sol pragma solidity 0.7.6; interface ISHEESHAGlobals { function SHEESHATokenAddress() external view returns (address); function SHEESHAGlobalsAddress() external view returns (address); function SHEESHAVaultAddress() external view returns (address); function SHEESHAVaultLPAddress() external returns (address); function SHEESHAWETHUniPair() external view returns (address); function UniswapFactory() external view returns (address); } // File: contracts\LGE.sol pragma solidity 0.7.6; interface ISHEESHAVaultLP { function depositFor( address, uint256, uint256 ) external; } contract LGE is SHEESHA { using SafeMath for uint256; address public SHEESHAxWETHPair; IUniswapV2Router02 public uniswapRouterV2; IUniswapV2Factory public uniswapFactory; uint256 public totalLPTokensMinted; uint256 public totalETHContributed; uint256 public LPperETHUnit; bool public LPGenerationCompleted; uint256 public contractStartTimestamp; uint256 public constant lgeSupply = 15000e18; // 15k //user count uint256 public userCount; ISHEESHAGlobals public sheeshaGlobals; mapping(address => uint256) public ethContributed; mapping(address => bool) public claimed; mapping(uint256 => address) public userList; mapping(address => bool) internal isExisting; event LiquidityAddition(address indexed dst, uint256 value); event LPTokenClaimed(address dst, uint256 value); constructor( address router, address factory, ISHEESHAGlobals _sheeshaGlobals, address _devAddress, address _marketingAddress, address _teamAddress, address _reserveAddress ) SHEESHA(_devAddress, _marketingAddress, _teamAddress, _reserveAddress) { uniswapRouterV2 = IUniswapV2Router02( router != address(0) ? router : 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); // For testing uniswapFactory = IUniswapV2Factory( factory != address(0) ? factory : 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f ); // For testing createUniswapPairMainnet(); contractStartTimestamp = block.timestamp; sheeshaGlobals = _sheeshaGlobals; } function getSecondsLeftInLiquidityGenerationEvent() public view returns (uint256) { require(liquidityGenerationOngoing(), "Event over"); return contractStartTimestamp.add(14 days).sub(block.timestamp); } function liquidityGenerationOngoing() public view returns (bool) { //lge only for 2 weeks return contractStartTimestamp.add(14 days) > block.timestamp; } function createUniswapPairMainnet() internal returns (address) { require(SHEESHAxWETHPair == address(0), "Token: pool already created"); SHEESHAxWETHPair = uniswapFactory.createPair( address(uniswapRouterV2.WETH()), address(this) ); return SHEESHAxWETHPair; } //anyone/admin will call this function after 2 weeks to mint LGE // Sends all available balances and mints LP tokens // Possible ways this could break addressed // 1) Multiple calls and resetting amounts - addressed with boolean // 2) Failed WETH wrapping/unwrapping addressed with checks // 3) Failure to create LP tokens, addressed with checks // 4) Unacceptable division errors . Addressed with multiplications by 1e18 // 5) Pair not set - impossible since its set in constructor function addLiquidityToUniswapSHEESHAxWETHPair() public { require( liquidityGenerationOngoing() == false, "Liquidity generation ongoing" ); require( LPGenerationCompleted == false, "Liquidity generation already finished" ); totalETHContributed = address(this).balance; IUniswapV2Pair pair = IUniswapV2Pair(SHEESHAxWETHPair); //Wrap eth address WETH = uniswapRouterV2.WETH(); IWETH(WETH).deposit{value: totalETHContributed}(); require(address(this).balance == 0, "Transfer Failed"); IWETH(WETH).transfer(address(pair), totalETHContributed); transfer(address(pair), lgeSupply); // 15% in LGE pair.mint(address(this)); totalLPTokensMinted = pair.balanceOf(address(this)); require(totalLPTokensMinted != 0, "LP creation failed"); LPperETHUnit = totalLPTokensMinted.mul(1e18).div(totalETHContributed); // 1e18x for change require(LPperETHUnit != 0, "LP creation failed"); LPGenerationCompleted = true; } //people will send ETH to this function for LGE // Possible ways this could break addressed // 1) Adding liquidity after generaion is over - added require // 2) Overflow from uint - impossible there isnt that much ETH available // 3) Depositing 0 - not an issue it will just add 0 to tally function addLiquidity() public payable { require( liquidityGenerationOngoing() == true, "Liquidity Generation Event over" ); ethContributed[msg.sender] += msg.value; // Overflow protection from safemath is not neded here totalETHContributed = totalETHContributed.add(msg.value); // for front end display during LGE. This resets with definitely correct balance while calling pair. if(!isUserExisting(msg.sender)) { userList[userCount] = msg.sender; userCount++; isExisting[msg.sender] = true; } emit LiquidityAddition(msg.sender, msg.value); } // Possible ways this could break addressed // 1) Accessing before event is over and resetting eth contributed -- added require // 2) No uniswap pair - impossible at this moment because of the LPGenerationCompleted bool // 3) LP per unit is 0 - impossible checked at generation function function _claimLPTokens() internal returns (uint256 amountLPToTransfer) { amountLPToTransfer = ethContributed[msg.sender].mul(LPperETHUnit).div( 1e18 ); ethContributed[msg.sender] = 0; claimed[msg.sender] = true; } //pool id must be pool id of SHEESHAXWETH LP vault function claimAndStakeLP(uint256 _pid) public { require( LPGenerationCompleted == true, "LGE : Liquidity generation not finished yet" ); require(ethContributed[msg.sender] > 0, "Nothing to claim, move along"); require(claimed[msg.sender] == false, "LGE : Already claimed"); address vault = sheeshaGlobals.SHEESHAVaultLPAddress(); IUniswapV2Pair(SHEESHAxWETHPair).approve(vault, uint256(-1)); ISHEESHAVaultLP(vault).depositFor(msg.sender, _pid, _claimLPTokens()); } function getLPTokens(address _who) public view returns (uint256 amountLPToTransfer) { return ethContributed[_who].mul(LPperETHUnit).div(1e18); } function isUserExisting(address _who) public view returns (bool) { return isExisting[_who]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"factory","type":"address"},{"internalType":"contract ISHEESHAGlobals","name":"_sheeshaGlobals","type":"address"},{"internalType":"address","name":"_devAddress","type":"address"},{"internalType":"address","name":"_marketingAddress","type":"address"},{"internalType":"address","name":"_teamAddress","type":"address"},{"internalType":"address","name":"_reserveAddress","type":"address"}],"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":false,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"LPTokenClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"LiquidityAddition","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"LPGenerationCompleted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LPperETHUnit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SHEESHAxWETHPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"addLiquidityToUniswapSHEESHAxWETHPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"claimAndStakeLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractStartTimestamp","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":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ethContributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_who","type":"address"}],"name":"getLPTokens","outputs":[{"internalType":"uint256","name":"amountLPToTransfer","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSecondsLeftInLiquidityGenerationEvent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"initialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_who","type":"address"}],"name":"isUserExisting","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lgeSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityGenerationOngoing","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserveAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sheeshaGlobals","outputs":[{"internalType":"contract ISHEESHAGlobals","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalETHContributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLPTokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"_vaultLPAddress","type":"address"}],"name":"transferVaultLPRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vaultAddress","type":"address"}],"name":"transferVaultRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapFactory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouterV2","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"userCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"userList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vaultLPTransferDone","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vaultTransferDone","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162004ac538038062004ac5833981810160405260e08110156200003757600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050838383836040518060400160405280600f81526020017f536865657368612046696e616e636500000000000000000000000000000000008152506040518060400160405280600781526020017f534845455348410000000000000000000000000000000000000000000000000081525081600390805190602001906200010c929190620010e7565b50806004908051906020019062000125929190620010e7565b506012600560006101000a81548160ff021916908360ff16021790555050506000620001566200067160201b60201c565b905080600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35083600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003153069152d02c7e14af68000006200067960201b60201c565b6200038830600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200037c606462000368600a69152d02c7e14af68000006200085760201b62002b911790919060201c565b620008e260201b62002c171790919060201c565b6200093460201b60201c565b620003fb30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620003ef6064620003db600f69152d02c7e14af68000006200085760201b62002b911790919060201c565b620008e260201b62002c171790919060201c565b6200093460201b60201c565b6200046e30600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200046260646200044e600a69152d02c7e14af68000006200085760201b62002b911790919060201c565b620008e260201b62002c171790919060201c565b6200093460201b60201c565b620004e130600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620004d56064620004c1601469152d02c7e14af68000006200085760201b62002b911790919060201c565b620008e260201b62002c171790919060201c565b6200093460201b60201c565b50505050600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614156200053657737a250d5630b4cf539739df2c5dacb4c659f2488d62000538565b865b600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415620005c957735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f620005cb565b855b600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200061b62000c1060201b60201c565b504260118190555084601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505050506200119d565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200071d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b620007316000838362000eca60201b60201c565b6200074d8160025462000ecf60201b62002c611790919060201c565b600281905550620007ab816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000ecf60201b62002c611790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000808314156200086c5760009050620008dc565b60008284029050828482816200087e57fe5b0414620008d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018062004a7f6021913960400191505060405180910390fd5b809150505b92915050565b60006200092c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000f5860201b60201c565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620009bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018062004aa06025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018062004a366023913960400191505060405180910390fd5b62000a5783838362000eca60201b60201c565b62000aca8160405180606001604052806026815260200162004a59602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200102360201b62002ce9179092919060201c565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000b64816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000ecf60201b62002c611790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000cd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f546f6b656e3a20706f6f6c20616c72656164792063726561746564000000000081525060200191505060405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c65396600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801562000d7d57600080fd5b505afa15801562000d92573d6000803e3d6000fd5b505050506040513d602081101562000da957600080fd5b8101908080519060200190929190505050306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15801562000e2557600080fd5b505af115801562000e3a573d6000803e3d6000fd5b505050506040513d602081101562000e5157600080fd5b8101908080519060200190929190505050600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b60008082840190508381101562000f4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000808311829062001008576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000fcc57808201518184015260208101905062000faf565b50505050905090810190601f16801562000ffa5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816200101557fe5b049050809150509392505050565b6000838311158290620010d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620010985780820151818401526020810190506200107b565b50505050905090810190601f168015620010c65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200111f57600085556200116b565b82601f106200113a57805160ff19168380011785556200116b565b828001600101855582156200116b579182015b828111156200116a5782518255916020019190600101906200114d565b5b5090506200117a91906200117e565b5090565b5b80821115620011995760008160009055506001016200117f565b5090565b61388980620011ad6000396000f3fe60806040526004361061027b5760003560e01c80635b5f3e871161014f5780639f4216e8116100c1578063dd62ed3e1161007a578063dd62ed3e14610dd3578063e8078d9414610e58578063ed55054514610e62578063f2fde38b14610e8f578063f79ed94b14610ee0578063f96f5b3514610f215761027b565b80639f4216e814610bb7578063a457c2d714610c1c578063a5ece94114610c8d578063a9059cbb14610cce578063c884ef8314610d3f578063d7a0960d14610da65761027b565b8063715018a611610113578063715018a6146109cc578063775972bd146109e357806379cc679014610a4a5780638bdb2afa14610aa55780638da5cb5b14610ae657806395d89b4114610b275761027b565b80635b5f3e87146108b957806360a02590146108e457806363bc1d6f146109115780636a2f796c1461093c57806370a08231146109675761027b565b80632e1ec945116101f357806339509351116101ac57806339509351146107395780633ad10ef6146107aa5780633deadce1146107eb57806342966c6814610802578063558b29211461083d578063596fa9e3146108785761027b565b80632e1ec945146105be578063313ce5671461062357806331a22a201461065157806336074e5f1461067c57806337008b80146106bd578063378dc3dc1461070e5761027b565b806314b8fecc1161024557806314b8fecc14610418578063167e7d511461044557806318160ddd146104965780631c75f085146104c1578063233994341461050257806323b872dd1461052d5761027b565b80622b13291461028057806248de33146102ab57806306fdde03146102ec57806307973ccf1461037c578063095ea7b3146103a7575b600080fd5b34801561028c57600080fd5b50610295610f86565b6040518082815260200191505060405180910390f35b3480156102b757600080fd5b506102c0610f8c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102f857600080fd5b50610301610fb2565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610341578082015181840152602081019050610326565b50505050905090810190601f16801561036e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561038857600080fd5b50610391611054565b6040518082815260200191505060405180910390f35b3480156103b357600080fd5b50610400600480360360408110156103ca57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105a565b60405180821515815260200191505060405180910390f35b34801561042457600080fd5b5061042d611078565b60405180821515815260200191505060405180910390f35b34801561045157600080fd5b506104946004803603602081101561046857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061108b565b005b3480156104a257600080fd5b506104ab611231565b6040518082815260200191505060405180910390f35b3480156104cd57600080fd5b506104d661123b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561050e57600080fd5b50610517611261565b6040518082815260200191505060405180910390f35b34801561053957600080fd5b506105a66004803603606081101561055057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611267565b60405180821515815260200191505060405180910390f35b3480156105ca57600080fd5b5061060d600480360360208110156105e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611340565b6040518082815260200191505060405180910390f35b34801561062f57600080fd5b506106386113b7565b604051808260ff16815260200191505060405180910390f35b34801561065d57600080fd5b506106666113ce565b6040518082815260200191505060405180910390f35b34801561068857600080fd5b506106916113d4565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106c957600080fd5b5061070c600480360360208110156106e057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113fa565b005b34801561071a57600080fd5b506107236115a0565b6040518082815260200191505060405180910390f35b34801561074557600080fd5b506107926004803603604081101561075c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115ae565b60405180821515815260200191505060405180910390f35b3480156107b657600080fd5b506107bf611661565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107f757600080fd5b50610800611687565b005b34801561080e57600080fd5b5061083b6004803603602081101561082557600080fd5b8101908080359060200190929190505050611c7b565b005b34801561084957600080fd5b506108766004803603602081101561086057600080fd5b8101908080359060200190929190505050611c8f565b005b34801561088457600080fd5b5061088d6120aa565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108c557600080fd5b506108ce6120d0565b6040518082815260200191505060405180910390f35b3480156108f057600080fd5b506108f961217b565b60405180821515815260200191505060405180910390f35b34801561091d57600080fd5b5061092661219c565b6040518082815260200191505060405180910390f35b34801561094857600080fd5b506109516121aa565b6040518082815260200191505060405180910390f35b34801561097357600080fd5b506109b66004803603602081101561098a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121b0565b6040518082815260200191505060405180910390f35b3480156109d857600080fd5b506109e16121f8565b005b3480156109ef57600080fd5b50610a3260048036036020811015610a0657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612383565b60405180821515815260200191505060405180910390f35b348015610a5657600080fd5b50610aa360048036036040811015610a6d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123d9565b005b348015610ab157600080fd5b50610aba61243b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610af257600080fd5b50610afb612461565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b3357600080fd5b50610b3c61248b565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b7c578082015181840152602081019050610b61565b50505050905090810190601f168015610ba95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610bc357600080fd5b50610bf060048036036020811015610bda57600080fd5b810190808035906020019092919050505061252d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c2857600080fd5b50610c7560048036036040811015610c3f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612560565b60405180821515815260200191505060405180910390f35b348015610c9957600080fd5b50610ca261262d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610cda57600080fd5b50610d2760048036036040811015610cf157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612653565b60405180821515815260200191505060405180910390f35b348015610d4b57600080fd5b50610d8e60048036036020811015610d6257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612671565b60405180821515815260200191505060405180910390f35b348015610db257600080fd5b50610dbb612691565b60405180821515815260200191505060405180910390f35b348015610ddf57600080fd5b50610e4260048036036040811015610df657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126a4565b6040518082815260200191505060405180910390f35b610e6061272b565b005b348015610e6e57600080fd5b50610e77612930565b60405180821515815260200191505060405180910390f35b348015610e9b57600080fd5b50610ede60048036036020811015610eb257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612943565b005b348015610eec57600080fd5b50610ef5612b53565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610f2d57600080fd5b50610f7060048036036020811015610f4457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b79565b6040518082815260200191505060405180910390f35b600d5481565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561104a5780601f1061101f5761010080835404028352916020019161104a565b820191906000526020600020905b81548152906001019060200180831161102d57829003601f168201915b5050505050905090565b60125481565b600061106e611067612da9565b8484612db1565b6001905092915050565b601060009054906101000a900460ff1681565b611093612da9565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611155576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600960159054906101000a900460ff16156111d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f416c7265616479207472616e736665727265640000000000000000000000000081525060200191505060405180910390fd5b611213308261120e6064611200601469152d02c7e14af6800000612b9190919063ffffffff16565b612c1790919063ffffffff16565b612fa8565b6001600960156101000a81548160ff02191690831515021790555050565b6000600254905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6000611274848484612fa8565b61133584611280612da9565b6113308560405180606001604052806028815260200161375460289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112e6612da9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ce99092919063ffffffff16565b612db1565b600190509392505050565b60006113b0670de0b6b3a76400006113a2600f54601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b9190919063ffffffff16565b612c1790919063ffffffff16565b9050919050565b6000600560009054906101000a900460ff16905090565b600f5481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611402612da9565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600960149054906101000a900460ff1615611547576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f416c7265616479207472616e736665727265640000000000000000000000000081525060200191505060405180910390fd5b611582308261157d606461156f600a69152d02c7e14af6800000612b9190919063ffffffff16565b612c1790919063ffffffff16565b612fa8565b6001600960146101000a81548160ff02191690831515021790555050565b69152d02c7e14af680000081565b60006116576115bb612da9565b8461165285600160006115cc612da9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6190919063ffffffff16565b612db1565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000151561169361217b565b151514611708576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4c69717569646974792067656e65726174696f6e206f6e676f696e670000000081525060200191505060405180910390fd5b60001515601060009054906101000a900460ff16151514611774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061382f6025913960400191505060405180910390fd5b47600e819055506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561180c57600080fd5b505afa158015611820573d6000803e3d6000fd5b505050506040513d602081101561183657600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0600e546040518263ffffffff1660e01b81526004016000604051808303818588803b15801561189357600080fd5b505af11580156118a7573d6000803e3d6000fd5b505050505060004714611922576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5472616e73666572204661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83600e546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561199557600080fd5b505af11580156119a9573d6000803e3d6000fd5b505050506040513d60208110156119bf57600080fd5b8101908080519060200190929190505050506119e58269032d26d12e980b600000612653565b508173ffffffffffffffffffffffffffffffffffffffff16636a627842306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015611a4f57600080fd5b505af1158015611a63573d6000803e3d6000fd5b505050506040513d6020811015611a7957600080fd5b8101908080519060200190929190505050508173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611af257600080fd5b505afa158015611b06573d6000803e3d6000fd5b505050506040513d6020811015611b1c57600080fd5b8101908080519060200190929190505050600d819055506000600d541415611bac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4c50206372656174696f6e206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b611bdd600e54611bcf670de0b6b3a7640000600d54612b9190919063ffffffff16565b612c1790919063ffffffff16565b600f819055506000600f541415611c5c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4c50206372656174696f6e206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b6001601060006101000a81548160ff0219169083151502179055505050565b611c8c611c86612da9565b82613269565b50565b60011515601060009054906101000a900460ff16151514611cfb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613708602b913960400191505060405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611db0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4e6f7468696e6720746f20636c61696d2c206d6f766520616c6f6e670000000081525060200191505060405180910390fd5b60001515601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611e76576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4c4745203a20416c726561647920636c61696d6564000000000000000000000081525060200191505060405180910390fd5b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663262589cc6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611ee257600080fd5b505af1158015611ef6573d6000803e3d6000fd5b505050506040513d6020811015611f0c57600080fd5b81019080805190602001909291905050509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611fd257600080fd5b505af1158015611fe6573d6000803e3d6000fd5b505050506040513d6020811015611ffc57600080fd5b8101908080519060200190929190505050508073ffffffffffffffffffffffffffffffffffffffff16634cf5fbf5338461203461342d565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019350505050600060405180830381600087803b15801561208e57600080fd5b505af11580156120a2573d6000803e3d6000fd5b505050505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006120da61217b565b61214c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4576656e74206f7665720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6121764261216862127500601154612c6190919063ffffffff16565b61353f90919063ffffffff16565b905090565b60004261219662127500601154612c6190919063ffffffff16565b11905090565b69032d26d12e980b60000081565b60115481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b612200612da9565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006124188260405180606001604052806024815260200161377c6024913961240986612404612da9565b6126a4565b612ce99092919063ffffffff16565b905061242c83612426612da9565b83612db1565b6124368383613269565b505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125235780601f106124f857610100808354040283529160200191612523565b820191906000526020600020905b81548152906001019060200180831161250657829003601f168201915b5050505050905090565b60166020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061262361256d612da9565b8461261e8560405180606001604052806025815260200161380a6025913960016000612597612da9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ce99092919063ffffffff16565b612db1565b6001905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612667612660612da9565b8484612fa8565b6001905092915050565b60156020528060005260406000206000915054906101000a900460ff1681565b600960149054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6001151561273761217b565b1515146127ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4c69717569646974792047656e65726174696f6e204576656e74206f7665720081525060200191505060405180910390fd5b34601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555061280e34600e54612c6190919063ffffffff16565b600e8190555061281d33612383565b6128e0573360166000601254815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506012600081548092919060010191905055506001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b3373ffffffffffffffffffffffffffffffffffffffff167f20b711375edba008429d2f91787c68aa13aab7f267c346bf91be1a104d8b7b8b346040518082815260200191505060405180910390a2565b600960159054906101000a900460ff1681565b61294b612da9565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061369a6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60146020528060005260406000206000915090505481565b600080831415612ba45760009050612c11565b6000828402905082848281612bb557fe5b0414612c0c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806137336021913960400191505060405180910390fd5b809150505b92915050565b6000612c5983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613589565b905092915050565b600080828401905083811015612cdf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000838311158290612d96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612d5b578082015181840152602081019050612d40565b50505050905090810190601f168015612d885780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806137e66024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ebd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806136c06022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561302e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806137c16025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806136556023913960400191505060405180910390fd5b6130bf83838361364f565b61312a816040518060600160405280602681526020016136e2602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ce99092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131bd816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6190919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806137a06021913960400191505060405180910390fd5b6132fb8260008361364f565b61336681604051806060016040528060228152602001613678602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ce99092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133bd8160025461353f90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600061349d670de0b6b3a764000061348f600f54601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b9190919063ffffffff16565b612c1790919063ffffffff16565b90506000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555090565b600061358183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ce9565b905092915050565b60008083118290613635576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156135fa5780820151818401526020810190506135df565b50505050905090810190601f1680156136275780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161364157fe5b049050809150509392505050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654c4745203a204c69717569646974792067656e65726174696f6e206e6f742066696e697368656420796574536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f4c69717569646974792067656e65726174696f6e20616c72656164792066696e6973686564a2646970667358221220bc99162447bde0f2ed4b23e1742398199b47329b97e4a88bc9e7eb3e835955d264736f6c6343000706003345524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e736665722066726f6d20746865207a65726f20616464726573730000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f0000000000000000000000004ce0f83f94c90cda1f99ed8b349619eb4d8ee803000000000000000000000000b70dcbc907c2c5d19f43537ca76f956ba7312a76000000000000000000000000b70dcbc907c2c5d19f43537ca76f956ba7312a76000000000000000000000000b70dcbc907c2c5d19f43537ca76f956ba7312a76000000000000000000000000b70dcbc907c2c5d19f43537ca76f956ba7312a76
Deployed Bytecode
0x60806040526004361061027b5760003560e01c80635b5f3e871161014f5780639f4216e8116100c1578063dd62ed3e1161007a578063dd62ed3e14610dd3578063e8078d9414610e58578063ed55054514610e62578063f2fde38b14610e8f578063f79ed94b14610ee0578063f96f5b3514610f215761027b565b80639f4216e814610bb7578063a457c2d714610c1c578063a5ece94114610c8d578063a9059cbb14610cce578063c884ef8314610d3f578063d7a0960d14610da65761027b565b8063715018a611610113578063715018a6146109cc578063775972bd146109e357806379cc679014610a4a5780638bdb2afa14610aa55780638da5cb5b14610ae657806395d89b4114610b275761027b565b80635b5f3e87146108b957806360a02590146108e457806363bc1d6f146109115780636a2f796c1461093c57806370a08231146109675761027b565b80632e1ec945116101f357806339509351116101ac57806339509351146107395780633ad10ef6146107aa5780633deadce1146107eb57806342966c6814610802578063558b29211461083d578063596fa9e3146108785761027b565b80632e1ec945146105be578063313ce5671461062357806331a22a201461065157806336074e5f1461067c57806337008b80146106bd578063378dc3dc1461070e5761027b565b806314b8fecc1161024557806314b8fecc14610418578063167e7d511461044557806318160ddd146104965780631c75f085146104c1578063233994341461050257806323b872dd1461052d5761027b565b80622b13291461028057806248de33146102ab57806306fdde03146102ec57806307973ccf1461037c578063095ea7b3146103a7575b600080fd5b34801561028c57600080fd5b50610295610f86565b6040518082815260200191505060405180910390f35b3480156102b757600080fd5b506102c0610f8c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102f857600080fd5b50610301610fb2565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610341578082015181840152602081019050610326565b50505050905090810190601f16801561036e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561038857600080fd5b50610391611054565b6040518082815260200191505060405180910390f35b3480156103b357600080fd5b50610400600480360360408110156103ca57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105a565b60405180821515815260200191505060405180910390f35b34801561042457600080fd5b5061042d611078565b60405180821515815260200191505060405180910390f35b34801561045157600080fd5b506104946004803603602081101561046857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061108b565b005b3480156104a257600080fd5b506104ab611231565b6040518082815260200191505060405180910390f35b3480156104cd57600080fd5b506104d661123b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561050e57600080fd5b50610517611261565b6040518082815260200191505060405180910390f35b34801561053957600080fd5b506105a66004803603606081101561055057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611267565b60405180821515815260200191505060405180910390f35b3480156105ca57600080fd5b5061060d600480360360208110156105e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611340565b6040518082815260200191505060405180910390f35b34801561062f57600080fd5b506106386113b7565b604051808260ff16815260200191505060405180910390f35b34801561065d57600080fd5b506106666113ce565b6040518082815260200191505060405180910390f35b34801561068857600080fd5b506106916113d4565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106c957600080fd5b5061070c600480360360208110156106e057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113fa565b005b34801561071a57600080fd5b506107236115a0565b6040518082815260200191505060405180910390f35b34801561074557600080fd5b506107926004803603604081101561075c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115ae565b60405180821515815260200191505060405180910390f35b3480156107b657600080fd5b506107bf611661565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107f757600080fd5b50610800611687565b005b34801561080e57600080fd5b5061083b6004803603602081101561082557600080fd5b8101908080359060200190929190505050611c7b565b005b34801561084957600080fd5b506108766004803603602081101561086057600080fd5b8101908080359060200190929190505050611c8f565b005b34801561088457600080fd5b5061088d6120aa565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108c557600080fd5b506108ce6120d0565b6040518082815260200191505060405180910390f35b3480156108f057600080fd5b506108f961217b565b60405180821515815260200191505060405180910390f35b34801561091d57600080fd5b5061092661219c565b6040518082815260200191505060405180910390f35b34801561094857600080fd5b506109516121aa565b6040518082815260200191505060405180910390f35b34801561097357600080fd5b506109b66004803603602081101561098a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121b0565b6040518082815260200191505060405180910390f35b3480156109d857600080fd5b506109e16121f8565b005b3480156109ef57600080fd5b50610a3260048036036020811015610a0657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612383565b60405180821515815260200191505060405180910390f35b348015610a5657600080fd5b50610aa360048036036040811015610a6d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123d9565b005b348015610ab157600080fd5b50610aba61243b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610af257600080fd5b50610afb612461565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b3357600080fd5b50610b3c61248b565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b7c578082015181840152602081019050610b61565b50505050905090810190601f168015610ba95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610bc357600080fd5b50610bf060048036036020811015610bda57600080fd5b810190808035906020019092919050505061252d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c2857600080fd5b50610c7560048036036040811015610c3f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612560565b60405180821515815260200191505060405180910390f35b348015610c9957600080fd5b50610ca261262d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610cda57600080fd5b50610d2760048036036040811015610cf157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612653565b60405180821515815260200191505060405180910390f35b348015610d4b57600080fd5b50610d8e60048036036020811015610d6257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612671565b60405180821515815260200191505060405180910390f35b348015610db257600080fd5b50610dbb612691565b60405180821515815260200191505060405180910390f35b348015610ddf57600080fd5b50610e4260048036036040811015610df657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126a4565b6040518082815260200191505060405180910390f35b610e6061272b565b005b348015610e6e57600080fd5b50610e77612930565b60405180821515815260200191505060405180910390f35b348015610e9b57600080fd5b50610ede60048036036020811015610eb257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612943565b005b348015610eec57600080fd5b50610ef5612b53565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610f2d57600080fd5b50610f7060048036036020811015610f4457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b79565b6040518082815260200191505060405180910390f35b600d5481565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561104a5780601f1061101f5761010080835404028352916020019161104a565b820191906000526020600020905b81548152906001019060200180831161102d57829003601f168201915b5050505050905090565b60125481565b600061106e611067612da9565b8484612db1565b6001905092915050565b601060009054906101000a900460ff1681565b611093612da9565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611155576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600960159054906101000a900460ff16156111d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f416c7265616479207472616e736665727265640000000000000000000000000081525060200191505060405180910390fd5b611213308261120e6064611200601469152d02c7e14af6800000612b9190919063ffffffff16565b612c1790919063ffffffff16565b612fa8565b6001600960156101000a81548160ff02191690831515021790555050565b6000600254905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6000611274848484612fa8565b61133584611280612da9565b6113308560405180606001604052806028815260200161375460289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112e6612da9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ce99092919063ffffffff16565b612db1565b600190509392505050565b60006113b0670de0b6b3a76400006113a2600f54601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b9190919063ffffffff16565b612c1790919063ffffffff16565b9050919050565b6000600560009054906101000a900460ff16905090565b600f5481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611402612da9565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600960149054906101000a900460ff1615611547576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f416c7265616479207472616e736665727265640000000000000000000000000081525060200191505060405180910390fd5b611582308261157d606461156f600a69152d02c7e14af6800000612b9190919063ffffffff16565b612c1790919063ffffffff16565b612fa8565b6001600960146101000a81548160ff02191690831515021790555050565b69152d02c7e14af680000081565b60006116576115bb612da9565b8461165285600160006115cc612da9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6190919063ffffffff16565b612db1565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000151561169361217b565b151514611708576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4c69717569646974792067656e65726174696f6e206f6e676f696e670000000081525060200191505060405180910390fd5b60001515601060009054906101000a900460ff16151514611774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061382f6025913960400191505060405180910390fd5b47600e819055506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561180c57600080fd5b505afa158015611820573d6000803e3d6000fd5b505050506040513d602081101561183657600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0600e546040518263ffffffff1660e01b81526004016000604051808303818588803b15801561189357600080fd5b505af11580156118a7573d6000803e3d6000fd5b505050505060004714611922576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5472616e73666572204661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83600e546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561199557600080fd5b505af11580156119a9573d6000803e3d6000fd5b505050506040513d60208110156119bf57600080fd5b8101908080519060200190929190505050506119e58269032d26d12e980b600000612653565b508173ffffffffffffffffffffffffffffffffffffffff16636a627842306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015611a4f57600080fd5b505af1158015611a63573d6000803e3d6000fd5b505050506040513d6020811015611a7957600080fd5b8101908080519060200190929190505050508173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611af257600080fd5b505afa158015611b06573d6000803e3d6000fd5b505050506040513d6020811015611b1c57600080fd5b8101908080519060200190929190505050600d819055506000600d541415611bac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4c50206372656174696f6e206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b611bdd600e54611bcf670de0b6b3a7640000600d54612b9190919063ffffffff16565b612c1790919063ffffffff16565b600f819055506000600f541415611c5c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4c50206372656174696f6e206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b6001601060006101000a81548160ff0219169083151502179055505050565b611c8c611c86612da9565b82613269565b50565b60011515601060009054906101000a900460ff16151514611cfb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613708602b913960400191505060405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611db0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4e6f7468696e6720746f20636c61696d2c206d6f766520616c6f6e670000000081525060200191505060405180910390fd5b60001515601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611e76576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4c4745203a20416c726561647920636c61696d6564000000000000000000000081525060200191505060405180910390fd5b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663262589cc6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611ee257600080fd5b505af1158015611ef6573d6000803e3d6000fd5b505050506040513d6020811015611f0c57600080fd5b81019080805190602001909291905050509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611fd257600080fd5b505af1158015611fe6573d6000803e3d6000fd5b505050506040513d6020811015611ffc57600080fd5b8101908080519060200190929190505050508073ffffffffffffffffffffffffffffffffffffffff16634cf5fbf5338461203461342d565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019350505050600060405180830381600087803b15801561208e57600080fd5b505af11580156120a2573d6000803e3d6000fd5b505050505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006120da61217b565b61214c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4576656e74206f7665720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6121764261216862127500601154612c6190919063ffffffff16565b61353f90919063ffffffff16565b905090565b60004261219662127500601154612c6190919063ffffffff16565b11905090565b69032d26d12e980b60000081565b60115481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b612200612da9565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006124188260405180606001604052806024815260200161377c6024913961240986612404612da9565b6126a4565b612ce99092919063ffffffff16565b905061242c83612426612da9565b83612db1565b6124368383613269565b505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125235780601f106124f857610100808354040283529160200191612523565b820191906000526020600020905b81548152906001019060200180831161250657829003601f168201915b5050505050905090565b60166020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061262361256d612da9565b8461261e8560405180606001604052806025815260200161380a6025913960016000612597612da9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ce99092919063ffffffff16565b612db1565b6001905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612667612660612da9565b8484612fa8565b6001905092915050565b60156020528060005260406000206000915054906101000a900460ff1681565b600960149054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6001151561273761217b565b1515146127ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4c69717569646974792047656e65726174696f6e204576656e74206f7665720081525060200191505060405180910390fd5b34601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555061280e34600e54612c6190919063ffffffff16565b600e8190555061281d33612383565b6128e0573360166000601254815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506012600081548092919060010191905055506001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b3373ffffffffffffffffffffffffffffffffffffffff167f20b711375edba008429d2f91787c68aa13aab7f267c346bf91be1a104d8b7b8b346040518082815260200191505060405180910390a2565b600960159054906101000a900460ff1681565b61294b612da9565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061369a6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60146020528060005260406000206000915090505481565b600080831415612ba45760009050612c11565b6000828402905082848281612bb557fe5b0414612c0c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806137336021913960400191505060405180910390fd5b809150505b92915050565b6000612c5983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613589565b905092915050565b600080828401905083811015612cdf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000838311158290612d96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612d5b578082015181840152602081019050612d40565b50505050905090810190601f168015612d885780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806137e66024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ebd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806136c06022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561302e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806137c16025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806136556023913960400191505060405180910390fd5b6130bf83838361364f565b61312a816040518060600160405280602681526020016136e2602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ce99092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131bd816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6190919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806137a06021913960400191505060405180910390fd5b6132fb8260008361364f565b61336681604051806060016040528060228152602001613678602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ce99092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133bd8160025461353f90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600061349d670de0b6b3a764000061348f600f54601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b9190919063ffffffff16565b612c1790919063ffffffff16565b90506000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555090565b600061358183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ce9565b905092915050565b60008083118290613635576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156135fa5780820151818401526020810190506135df565b50505050905090810190601f1680156136275780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161364157fe5b049050809150509392505050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654c4745203a204c69717569646974792067656e65726174696f6e206e6f742066696e697368656420796574536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f4c69717569646974792067656e65726174696f6e20616c72656164792066696e6973686564a2646970667358221220bc99162447bde0f2ed4b23e1742398199b47329b97e4a88bc9e7eb3e835955d264736f6c63430007060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f0000000000000000000000004ce0f83f94c90cda1f99ed8b349619eb4d8ee803000000000000000000000000b70dcbc907c2c5d19f43537ca76f956ba7312a76000000000000000000000000b70dcbc907c2c5d19f43537ca76f956ba7312a76000000000000000000000000b70dcbc907c2c5d19f43537ca76f956ba7312a76000000000000000000000000b70dcbc907c2c5d19f43537ca76f956ba7312a76
-----Decoded View---------------
Arg [0] : router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : factory (address): 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f
Arg [2] : _sheeshaGlobals (address): 0x4CE0F83f94c90Cda1f99ED8B349619Eb4d8ee803
Arg [3] : _devAddress (address): 0xB70dCbc907C2C5D19f43537CA76f956BA7312a76
Arg [4] : _marketingAddress (address): 0xB70dCbc907C2C5D19f43537CA76f956BA7312a76
Arg [5] : _teamAddress (address): 0xB70dCbc907C2C5D19f43537CA76f956BA7312a76
Arg [6] : _reserveAddress (address): 0xB70dCbc907C2C5D19f43537CA76f956BA7312a76
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f
Arg [2] : 0000000000000000000000004ce0f83f94c90cda1f99ed8b349619eb4d8ee803
Arg [3] : 000000000000000000000000b70dcbc907c2c5d19f43537ca76f956ba7312a76
Arg [4] : 000000000000000000000000b70dcbc907c2c5d19f43537ca76f956ba7312a76
Arg [5] : 000000000000000000000000b70dcbc907c2c5d19f43537ca76f956ba7312a76
Arg [6] : 000000000000000000000000b70dcbc907c2c5d19f43537ca76f956ba7312a76
Deployed Bytecode Sourcemap
42054:6706:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42250:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42557:37;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27065:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42526:24;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29171:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;42366:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;41071:266;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28140:100;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39685:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;42291:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29822:321;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;48420:190;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27992:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;42332:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42118:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;40786:256;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39597:49;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30552:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;39653:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;45091:1118;;;;;;;;;;;;;:::i;:::-;;36409:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;47854:558;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42156:41;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;43784:258;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44050:176;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;42450:44;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42406:37;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28303:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38870:148;;;;;;;;;;;;;:::i;:::-;;48618:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;36819:295;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42204:39;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;38228:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27267:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42705:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31273:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;39718:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28635:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;42659:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;39792:29;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28873:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;46532:675;;;:::i;:::-;;39828:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;39173:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39756:29;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;42603:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42250:34;;;;:::o;42557:37::-;;;;;;;;;;;;;:::o;27065:83::-;27102:13;27135:5;27128:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27065:83;:::o;42526:24::-;;;;:::o;29171:169::-;29254:4;29271:39;29280:12;:10;:12::i;:::-;29294:7;29303:6;29271:8;:39::i;:::-;29328:4;29321:11;;29171:169;;;;:::o;42366:33::-;;;;;;;;;;;;;:::o;41071:266::-;38450:12;:10;:12::i;:::-;38440:22;;:6;;;;;;;;;;;:22;;;38432:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41165:19:::1;;;;;;;;;;;41164:20;41156:52;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;41219:73;41237:4;41244:15;41261:30;41287:3;41261:21;41279:2;39637:9;41261:17;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;41219:9;:73::i;:::-;41325:4;41303:19;;:26;;;;;;;;;;;;;;;;;;41071:266:::0;:::o;28140:100::-;28193:7;28220:12;;28213:19;;28140:100;:::o;39685:26::-;;;;;;;;;;;;;:::o;42291:34::-;;;;:::o;29822:321::-;29928:4;29945:36;29955:6;29963:9;29974:6;29945:9;:36::i;:::-;29992:121;30001:6;30009:12;:10;:12::i;:::-;30023:89;30061:6;30023:89;;;;;;;;;;;;;;;;;:11;:19;30035:6;30023:19;;;;;;;;;;;;;;;:33;30043:12;:10;:12::i;:::-;30023:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;29992:8;:121::i;:::-;30131:4;30124:11;;29822:321;;;;;:::o;48420:190::-;48503:26;48554:48;48597:4;48554:38;48579:12;;48554:14;:20;48569:4;48554:20;;;;;;;;;;;;;;;;:24;;:38;;;;:::i;:::-;:42;;:48;;;;:::i;:::-;48547:55;;48420:190;;;:::o;27992:83::-;28033:5;28058:9;;;;;;;;;;;28051:16;;27992:83;:::o;42332:27::-;;;;:::o;42118:31::-;;;;;;;;;;;;;:::o;40786:256::-;38450:12;:10;:12::i;:::-;38440:22;;:6;;;;;;;;;;;:22;;;38432:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40876:17:::1;;;;;;;;;;;40875:18;40867:50;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;40928:71;40946:4;40953:13;40968:30;40994:3;40968:21;40986:2;39637:9;40968:17;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;40928:9;:71::i;:::-;41030:4;41010:17;;:24;;;;;;;;;;;;;;;;;;40786:256:::0;:::o;39597:49::-;39637:9;39597:49;:::o;30552:218::-;30640:4;30657:83;30666:12;:10;:12::i;:::-;30680:7;30689:50;30728:10;30689:11;:25;30701:12;:10;:12::i;:::-;30689:25;;;;;;;;;;;;;;;:34;30715:7;30689:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;30657:8;:83::i;:::-;30758:4;30751:11;;30552:218;;;;:::o;39653:25::-;;;;;;;;;;;;;:::o;45091:1118::-;45212:5;45180:37;;:28;:26;:28::i;:::-;:37;;;45158:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45331:5;45306:30;;:21;;;;;;;;;;;:30;;;45284:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45434:21;45412:19;:43;;;;45466:19;45503:16;;;;;;;;;;;45466:54;;45551:12;45566:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45551:37;;45605:4;45599:19;;;45626;;45599:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45692:1;45667:21;:26;45659:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45730:4;45724:20;;;45753:4;45760:19;;45724:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45791:34;45808:4;42486:8;45791;:34::i;:::-;;45850:4;:9;;;45868:4;45850:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45907:4;:14;;;45930:4;45907:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45885:19;:51;;;;45978:1;45955:19;;:24;;45947:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46028:54;46062:19;;46028:29;46052:4;46028:19;;:23;;:29;;;;:::i;:::-;:33;;:54;;;;:::i;:::-;46013:12;:69;;;;46138:1;46122:12;;:17;;46114:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46197:4;46173:21;;:28;;;;;;;;;;;;;;;;;;45091:1118;;:::o;36409:91::-;36465:27;36471:12;:10;:12::i;:::-;36485:6;36465:5;:27::i;:::-;36409:91;:::o;47854:558::-;47958:4;47933:29;;:21;;;;;;;;;;;:29;;;47911:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48081:1;48052:14;:26;48067:10;48052:26;;;;;;;;;;;;;;;;:30;48044:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48157:5;48134:28;;:7;:19;48142:10;48134:19;;;;;;;;;;;;;;;;;;;;;;;;;:28;;;48126:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48199:13;48215:14;;;;;;;;;;;:36;;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48199:54;;48279:16;;;;;;;;;;;48264:40;;;48305:5;48320:2;48264:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48351:5;48335:33;;;48369:10;48381:4;48387:16;:14;:16::i;:::-;48335:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47854:558;;:::o;42156:41::-;;;;;;;;;;;;;:::o;43784:258::-;43884:7;43917:28;:26;:28::i;:::-;43909:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43978:56;44018:15;43978:35;44005:7;43978:22;;:26;;:35;;;;:::i;:::-;:39;;:56;;;;:::i;:::-;43971:63;;43784:258;:::o;44050:176::-;44109:4;44203:15;44165:35;44192:7;44165:22;;:26;;:35;;;;:::i;:::-;:53;44158:60;;44050:176;:::o;42450:44::-;42486:8;42450:44;:::o;42406:37::-;;;;:::o;28303:119::-;28369:7;28396:9;:18;28406:7;28396:18;;;;;;;;;;;;;;;;28389:25;;28303:119;;;:::o;38870:148::-;38450:12;:10;:12::i;:::-;38440:22;;:6;;;;;;;;;;;:22;;;38432:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38977:1:::1;38940:40;;38961:6;;;;;;;;;;;38940:40;;;;;;;;;;;;39008:1;38991:6;;:19;;;;;;;;;;;;;;;;;;38870:148::o:0;48618:139::-;48704:4;48733:10;:16;48744:4;48733:16;;;;;;;;;;;;;;;;;;;;;;;;;48726:23;;48618:139;;;:::o;36819:295::-;36896:26;36925:84;36962:6;36925:84;;;;;;;;;;;;;;;;;:32;36935:7;36944:12;:10;:12::i;:::-;36925:9;:32::i;:::-;:36;;:84;;;;;:::i;:::-;36896:113;;37022:51;37031:7;37040:12;:10;:12::i;:::-;37054:18;37022:8;:51::i;:::-;37084:22;37090:7;37099:6;37084:5;:22::i;:::-;36819:295;;;:::o;42204:39::-;;;;;;;;;;;;;:::o;38228:79::-;38266:7;38293:6;;;;;;;;;;;38286:13;;38228:79;:::o;27267:87::-;27306:13;27339:7;27332:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27267:87;:::o;42705:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;31273:269::-;31366:4;31383:129;31392:12;:10;:12::i;:::-;31406:7;31415:96;31454:15;31415:96;;;;;;;;;;;;;;;;;:11;:25;31427:12;:10;:12::i;:::-;31415:25;;;;;;;;;;;;;;;:34;31441:7;31415:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;31383:8;:129::i;:::-;31530:4;31523:11;;31273:269;;;;:::o;39718:31::-;;;;;;;;;;;;;:::o;28635:175::-;28721:4;28738:42;28748:12;:10;:12::i;:::-;28762:9;28773:6;28738:9;:42::i;:::-;28798:4;28791:11;;28635:175;;;;:::o;42659:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;39792:29::-;;;;;;;;;;;;;:::o;28873:151::-;28962:7;28989:11;:18;29001:5;28989:18;;;;;;;;;;;;;;;:27;29008:7;28989:27;;;;;;;;;;;;;;;;28982:34;;28873:151;;;;:::o;46532:675::-;46636:4;46604:36;;:28;:26;:28::i;:::-;:36;;;46582:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46740:9;46710:14;:26;46725:10;46710:26;;;;;;;;;;;;;;;;:39;;;;;;;;;;;46837:34;46861:9;46837:19;;:23;;:34;;;;:::i;:::-;46815:19;:56;;;;46987:26;47002:10;46987:14;:26::i;:::-;46983:161;;47052:10;47030:8;:19;47039:9;;47030:19;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;47077:9;;:11;;;;;;;;;;;;;47128:4;47103:10;:22;47114:10;47103:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;46983:161;47177:10;47159:40;;;47189:9;47159:40;;;;;;;;;;;;;;;;;;46532:675::o;39828:31::-;;;;;;;;;;;;;:::o;39173:244::-;38450:12;:10;:12::i;:::-;38440:22;;:6;;;;;;;;;;;:22;;;38432:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39282:1:::1;39262:22;;:8;:22;;;;39254:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39372:8;39343:38;;39364:6;;;;;;;;;;;39343:38;;;;;;;;;;;;39401:8;39392:6;;:17;;;;;;;;;;;;;;;;;;39173:244:::0;:::o;39756:29::-;;;;;;;;;;;;;:::o;42603:49::-;;;;;;;;;;;;;;;;;:::o;21782:471::-;21840:7;22090:1;22085;:6;22081:47;;;22115:1;22108:8;;;;22081:47;22140:9;22156:1;22152;:5;22140:17;;22185:1;22180;22176;:5;;;;;;:10;22168:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22244:1;22237:8;;;21782:471;;;;;:::o;22729:132::-;22787:7;22814:39;22818:1;22821;22814:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;22807:46;;22729:132;;;;:::o;20428:181::-;20486:7;20506:9;20522:1;20518;:5;20506:17;;20547:1;20542;:6;;20534:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20600:1;20593:8;;;20428:181;;;;:::o;21331:192::-;21417:7;21450:1;21445;:6;;21453:12;21437:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21477:9;21493:1;21489;:5;21477:17;;21514:1;21507:8;;;21331:192;;;;;:::o;19132:106::-;19185:15;19220:10;19213:17;;19132:106;:::o;34420:346::-;34539:1;34522:19;;:5;:19;;;;34514:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34620:1;34601:21;;:7;:21;;;;34593:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34704:6;34674:11;:18;34686:5;34674:18;;;;;;;;;;;;;;;:27;34693:7;34674:27;;;;;;;;;;;;;;;:36;;;;34742:7;34726:32;;34735:5;34726:32;;;34751:6;34726:32;;;;;;;;;;;;;;;;;;34420:346;;;:::o;32032:539::-;32156:1;32138:20;;:6;:20;;;;32130:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32240:1;32219:23;;:9;:23;;;;32211:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32295:47;32316:6;32324:9;32335:6;32295:20;:47::i;:::-;32375:71;32397:6;32375:71;;;;;;;;;;;;;;;;;:9;:17;32385:6;32375:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;32355:9;:17;32365:6;32355:17;;;;;;;;;;;;;;;:91;;;;32480:32;32505:6;32480:9;:20;32490:9;32480:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;32457:9;:20;32467:9;32457:20;;;;;;;;;;;;;;;:55;;;;32545:9;32528:35;;32537:6;32528:35;;;32556:6;32528:35;;;;;;;;;;;;;;;;;;32032:539;;;:::o;33564:418::-;33667:1;33648:21;;:7;:21;;;;33640:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33720:49;33741:7;33758:1;33762:6;33720:20;:49::i;:::-;33803:68;33826:6;33803:68;;;;;;;;;;;;;;;;;:9;:18;33813:7;33803:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;33782:9;:18;33792:7;33782:18;;;;;;;;;;;;;;;:89;;;;33897:24;33914:6;33897:12;;:16;;:24;;;;:::i;:::-;33882:12;:39;;;;33963:1;33937:37;;33946:7;33937:37;;;33967:6;33937:37;;;;;;;;;;;;;;;;;;33564:418;;:::o;47522:268::-;47566:26;47626:78;47689:4;47626:44;47657:12;;47626:14;:26;47641:10;47626:26;;;;;;;;;;;;;;;;:30;;:44;;;;:::i;:::-;:48;;:78;;;;:::i;:::-;47605:99;;47744:1;47715:14;:26;47730:10;47715:26;;;;;;;;;;;;;;;:30;;;;47778:4;47756:7;:19;47764:10;47756:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;47522:268;:::o;20892:136::-;20950:7;20977:43;20981:1;20984;20977:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;20970:50;;20892:136;;;;:::o;23357:278::-;23443:7;23475:1;23471;:5;23478:12;23463:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23502:9;23518:1;23514;:5;;;;;;23502:17;;23626:1;23619:8;;;23357:278;;;;;:::o;35791:92::-;;;;:::o
Swarm Source
ipfs://bc99162447bde0f2ed4b23e1742398199b47329b97e4a88bc9e7eb3e835955d2
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.