Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
100,000,000 MADH
Holders
8
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
0.000000031 MADHValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MadHoney
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-24 */ /** *Submitted for verification at Etherscan.io on 2022-05-29 */ // SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.3; interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // 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 (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @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) { return a + b; } /** * @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 a - b; } /** * @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) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting 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 a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards 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). * * 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) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * 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) { unchecked { require(b > 0, errorMessage); return a % b; } } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } library Address { 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); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(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); } } } } 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 () { // bnb address of the contract owner _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function migrator() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; function setMigrator(address) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 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 (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); 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 (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract MadHoney is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; uint256 private _tTotal = 100 * 10**6 * 10**9; //Total supply 100m]M uint256 private _tFeeTotal; string private _name = "Mad Honey"; string private _symbol = "MADH"; uint8 private _decimals = 9; uint256 public _liquidityFee = 8; uint256 private _previousLiquidityFee = _liquidityFee; IUniswapV2Router02 public immutable uniswapV2Router; address public routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 private numTokensSellToAddToLiquidity = 1 * 10**3 * 10**9; //Fee threshold for LP acquisition event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } receive() external payable {} constructor () { _tOwned[owner()] = _tTotal; //PCS v2 Router address IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(routerAddress); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; approve(routerAddress,_tTotal); //exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[routerAddress] = true; emit Transfer(address(0), owner(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { return _tOwned[account]; } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() { _liquidityFee = liquidityFee; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function _takeLiquidity(uint256 tLiquidity) private { _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function removeAllFee() private { if(_liquidityFee == 0) return; _previousLiquidityFee = _liquidityFee; _liquidityFee = 0; } function restoreAllFee() private { _liquidityFee = _previousLiquidityFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != address(routerAddress) && from != uniswapV2Pair && swapAndLiquifyEnabled ) { //add liquidity swapAndLiquify(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } //transfer amount, it will take liquidity fee _tokenTransfer(from,to,amount,takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into halves uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private { if(!takeFee) removeAllFee(); if (_isExcludedFromFee[sender] && !_isExcludedFromFee[recipient]) { _transferNoFee(sender, recipient, amount); } else if (!_isExcludedFromFee[sender] && _isExcludedFromFee[recipient]) { _transferWithFee(sender, recipient, amount); } else if (!_isExcludedFromFee[sender] && !_isExcludedFromFee[recipient]) { _transferWithFee(sender, recipient, amount); } else if (_isExcludedFromFee[sender] && _isExcludedFromFee[recipient]) { _transferNoFee(sender, recipient, amount); } else { _transferWithFee(sender, recipient, amount); } if(!takeFee) restoreAllFee(); } function _getValues(uint256 tAmount) public view returns (uint256, uint256) { uint256 tLiquidity = tAmount.mul(_liquidityFee).div(10**2); uint256 tTransferAmount = tAmount.sub(tLiquidity); return (tTransferAmount, tLiquidity); } function _transferWithFee(address sender, address recipient, uint256 tAmount) private { (uint256 tTransferAmount, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); emit Transfer(sender, recipient, tTransferAmount); } function _transferNoFee(address sender, address recipient, uint256 tAmount) private { _tOwned[sender] = _tOwned[sender].sub(tAmount); _tOwned[recipient] = _tOwned[recipient].add(tAmount); emit Transfer(sender, recipient, tAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"_getValues","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"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":"routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405267016345785d8a00006004556040518060400160405280600981526020017f4d616420486f6e65790000000000000000000000000000000000000000000000815250600690805190602001906200005d929190620008b5565b506040518060400160405280600481526020017f4d4144480000000000000000000000000000000000000000000000000000000081525060079080519060200190620000ab929190620008b5565b506009600860006101000a81548160ff021916908360ff1602179055506008600955600954600a55737a250d5630b4cf539739df2c5dacb4c659f2488d600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60156101000a81548160ff02191690831515021790555064e8d4a51000600c553480156200015957600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600454600160006200022c6200068360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002d857600080fd5b505afa158015620002ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031391906200097c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037657600080fd5b505afa1580156200038b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b191906200097c565b6040518363ffffffff1660e01b8152600401620003d092919062000a1e565b602060405180830381600087803b158015620003eb57600080fd5b505af115801562000400573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042691906200097c565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050620004c9600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600454620006ac60201b60201c565b50600160036000620004e06200068360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160036000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006136200068360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60045460405162000674919062000a8f565b60405180910390a35062000c1d565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000620006d0620006c2620006da60201b60201c565b8484620006e260201b60201c565b6001905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000755576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074c9062000a6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620007c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007bf9062000a4b565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051620008a8919062000a8f565b60405180910390a3505050565b828054620008c39062000afb565b90600052602060002090601f016020900481019282620008e7576000855562000933565b82601f106200090257805160ff191683800117855562000933565b8280016001018555821562000933579182015b828111156200093257825182559160200191906001019062000915565b5b50905062000942919062000946565b5090565b5b808211156200096157600081600090555060010162000947565b5090565b600081519050620009768162000c03565b92915050565b60006020828403121562000995576200099462000b60565b5b6000620009a58482850162000965565b91505092915050565b620009b98162000abd565b82525050565b6000620009ce60228362000aac565b9150620009db8262000b65565b604082019050919050565b6000620009f560248362000aac565b915062000a028262000bb4565b604082019050919050565b62000a188162000af1565b82525050565b600060408201905062000a356000830185620009ae565b62000a446020830184620009ae565b9392505050565b6000602082019050818103600083015262000a6681620009bf565b9050919050565b6000602082019050818103600083015262000a8881620009e6565b9050919050565b600060208201905062000aa6600083018462000a0d565b92915050565b600082825260208201905092915050565b600062000aca8262000ad1565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000b1457607f821691505b6020821081141562000b2b5762000b2a62000b31565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b62000c0e8162000abd565b811462000c1a57600080fd5b50565b60805160601c60a05160601c61302762000c73600039600081816109fe01526115f201526000818161073001528181611c6001528181611d5001528181611d7701528181611e130152611e3a01526130276000f3fe6080604052600436106101855760003560e01c80636bc87c3a116100d1578063a457c2d71161008a578063d4780e3611610064578063d4780e36146105a7578063dd62ed3e146105e5578063ea2f0b3714610622578063f2fde38b1461064b5761018c565b8063a457c2d714610504578063a9059cbb14610541578063c49b9a801461057e5761018c565b80636bc87c3a1461040657806370a0823114610431578063715018a61461046e5780638da5cb5b146104855780638ee88c53146104b057806395d89b41146104d95761018c565b8063313ce5671161013e578063437823ec11610118578063437823ec1461034a57806349bd5a5e146103735780634a74bb021461039e5780635342acb4146103c95761018c565b8063313ce567146102b75780633268cc56146102e2578063395093511461030d5761018c565b806306fdde0314610191578063095ea7b3146101bc57806313114a9d146101f95780631694505e1461022457806318160ddd1461024f57806323b872dd1461027a5761018c565b3661018c57005b600080fd5b34801561019d57600080fd5b506101a6610674565b6040516101b391906127fd565b60405180910390f35b3480156101c857600080fd5b506101e360048036038101906101de9190612451565b610706565b6040516101f091906127c7565b60405180910390f35b34801561020557600080fd5b5061020e610724565b60405161021b91906128ff565b60405180910390f35b34801561023057600080fd5b5061023961072e565b60405161024691906127e2565b60405180910390f35b34801561025b57600080fd5b50610264610752565b60405161027191906128ff565b60405180910390f35b34801561028657600080fd5b506102a1600480360381019061029c91906123fe565b61075c565b6040516102ae91906127c7565b60405180910390f35b3480156102c357600080fd5b506102cc610835565b6040516102d991906129d4565b60405180910390f35b3480156102ee57600080fd5b506102f761084c565b604051610304919061274b565b60405180910390f35b34801561031957600080fd5b50610334600480360381019061032f9190612451565b610872565b60405161034191906127c7565b60405180910390f35b34801561035657600080fd5b50610371600480360381019061036c9190612364565b610925565b005b34801561037f57600080fd5b506103886109fc565b604051610395919061274b565b60405180910390f35b3480156103aa57600080fd5b506103b3610a20565b6040516103c091906127c7565b60405180910390f35b3480156103d557600080fd5b506103f060048036038101906103eb9190612364565b610a33565b6040516103fd91906127c7565b60405180910390f35b34801561041257600080fd5b5061041b610a89565b60405161042891906128ff565b60405180910390f35b34801561043d57600080fd5b5061045860048036038101906104539190612364565b610a8f565b60405161046591906128ff565b60405180910390f35b34801561047a57600080fd5b50610483610ad8565b005b34801561049157600080fd5b5061049a610c12565b6040516104a7919061274b565b60405180910390f35b3480156104bc57600080fd5b506104d760048036038101906104d291906124be565b610c3b565b005b3480156104e557600080fd5b506104ee610cc1565b6040516104fb91906127fd565b60405180910390f35b34801561051057600080fd5b5061052b60048036038101906105269190612451565b610d53565b60405161053891906127c7565b60405180910390f35b34801561054d57600080fd5b5061056860048036038101906105639190612451565b610e20565b60405161057591906127c7565b60405180910390f35b34801561058a57600080fd5b506105a560048036038101906105a09190612491565b610e3e565b005b3480156105b357600080fd5b506105ce60048036038101906105c991906124be565b610f0e565b6040516105dc929190612974565b60405180910390f35b3480156105f157600080fd5b5061060c600480360381019061060791906123be565b610f61565b60405161061991906128ff565b60405180910390f35b34801561062e57600080fd5b5061064960048036038101906106449190612364565b610fe8565b005b34801561065757600080fd5b50610672600480360381019061066d9190612364565b6110bf565b005b60606006805461068390612c29565b80601f01602080910402602001604051908101604052809291908181526020018280546106af90612c29565b80156106fc5780601f106106d1576101008083540402835291602001916106fc565b820191906000526020600020905b8154815290600101906020018083116106df57829003601f168201915b5050505050905090565b600061071a610713611268565b8484611270565b6001905092915050565b6000600554905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600454905090565b600061076984848461143b565b61082a84610775611268565b61082585604051806060016040528060288152602001612fa560289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107db611268565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461172d9092919063ffffffff16565b611270565b600190509392505050565b6000600860009054906101000a900460ff16905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061091b61087f611268565b846109168560026000610890611268565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461178290919063ffffffff16565b611270565b6001905092915050565b61092d611268565b73ffffffffffffffffffffffffffffffffffffffff1661094b610c12565b73ffffffffffffffffffffffffffffffffffffffff16146109a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109989061287f565b60405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60159054906101000a900460ff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60095481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ae0611268565b73ffffffffffffffffffffffffffffffffffffffff16610afe610c12565b73ffffffffffffffffffffffffffffffffffffffff1614610b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4b9061287f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610c43611268565b73ffffffffffffffffffffffffffffffffffffffff16610c61610c12565b73ffffffffffffffffffffffffffffffffffffffff1614610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae9061287f565b60405180910390fd5b8060098190555050565b606060078054610cd090612c29565b80601f0160208091040260200160405190810160405280929190818152602001828054610cfc90612c29565b8015610d495780601f10610d1e57610100808354040283529160200191610d49565b820191906000526020600020905b815481529060010190602001808311610d2c57829003601f168201915b5050505050905090565b6000610e16610d60611268565b84610e1185604051806060016040528060258152602001612fcd6025913960026000610d8a611268565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461172d9092919063ffffffff16565b611270565b6001905092915050565b6000610e34610e2d611268565b848461143b565b6001905092915050565b610e46611268565b73ffffffffffffffffffffffffffffffffffffffff16610e64610c12565b73ffffffffffffffffffffffffffffffffffffffff1614610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb19061287f565b60405180910390fd5b80600b60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051610f0391906127c7565b60405180910390a150565b6000806000610f3b6064610f2d6009548761179890919063ffffffff16565b6117ae90919063ffffffff16565b90506000610f5282866117c490919063ffffffff16565b90508082935093505050915091565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610ff0611268565b73ffffffffffffffffffffffffffffffffffffffff1661100e610c12565b73ffffffffffffffffffffffffffffffffffffffff1614611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b9061287f565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6110c7611268565b73ffffffffffffffffffffffffffffffffffffffff166110e5610c12565b73ffffffffffffffffffffffffffffffffffffffff161461113b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111329061287f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a29061283f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d7906128df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611350576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113479061285f565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161142e91906128ff565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156114ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a2906128bf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561151b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115129061281f565b60405180910390fd5b6000811161155e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115559061289f565b60405180910390fd5b600061156930610a8f565b90506000600c54821015905080801561158f5750600b60149054906101000a900460ff16155b80156115e95750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561164157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156116595750600b60159054906101000a900460ff165b1561166857611667826117da565b5b600060019050600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061170f5750600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561171957600090505b611725868686846118b0565b505050505050565b6000838311158290611775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176c91906127fd565b60405180910390fd5b5082840390509392505050565b600081836117909190612a44565b905092915050565b600081836117a69190612acb565b905092915050565b600081836117bc9190612a9a565b905092915050565b600081836117d29190612b25565b905092915050565b6001600b60146101000a81548160ff021916908315150217905550600061180b6002836117ae90919063ffffffff16565b9050600061182282846117c490919063ffffffff16565b9050600047905061183283611bc1565b600061184782476117c490919063ffffffff16565b90506118538382611e0d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516118869392919061299d565b60405180910390a1505050506000600b60146101000a81548160ff02191690831515021790555050565b806118be576118bd611efd565b5b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156119615750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561197657611971848484611f21565b611bad565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611a195750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611a2e57611a298484846120b5565b611bac565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611ad25750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ae757611ae28484846120b5565b611bab565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611b895750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611b9e57611b99848484611f21565b611baa565b611ba98484846120b5565b5b5b5b5b80611bbb57611bba6122f0565b5b50505050565b6000600267ffffffffffffffff811115611bde57611bdd612d17565b5b604051908082528060200260200182016040528015611c0c5781602001602082028036833780820191505090505b5090503081600081518110611c2457611c23612ce8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611cc457600080fd5b505afa158015611cd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfc9190612391565b81600181518110611d1057611d0f612ce8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611d75307f000000000000000000000000000000000000000000000000000000000000000084611270565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611dd795949392919061291a565b600060405180830381600087803b158015611df157600080fd5b505af1158015611e05573d6000803e3d6000fd5b505050505050565b611e38307f000000000000000000000000000000000000000000000000000000000000000084611270565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080611e82610c12565b426040518863ffffffff1660e01b8152600401611ea496959493929190612766565b6060604051808303818588803b158015611ebd57600080fd5b505af1158015611ed1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ef691906124eb565b5050505050565b60006009541415611f0d57611f1f565b600954600a8190555060006009819055505b565b611f7381600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117c490919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061200881600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461178290919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516120a891906128ff565b60405180910390a3505050565b6000806120c183610f0e565b9150915061211783600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117c490919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121ac82600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461178290919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061224181600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461178290919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122e191906128ff565b60405180910390a35050505050565b600a54600981905550565b60008135905061230a81612f5f565b92915050565b60008151905061231f81612f5f565b92915050565b60008135905061233481612f76565b92915050565b60008135905061234981612f8d565b92915050565b60008151905061235e81612f8d565b92915050565b60006020828403121561237a57612379612d46565b5b6000612388848285016122fb565b91505092915050565b6000602082840312156123a7576123a6612d46565b5b60006123b584828501612310565b91505092915050565b600080604083850312156123d5576123d4612d46565b5b60006123e3858286016122fb565b92505060206123f4858286016122fb565b9150509250929050565b60008060006060848603121561241757612416612d46565b5b6000612425868287016122fb565b9350506020612436868287016122fb565b92505060406124478682870161233a565b9150509250925092565b6000806040838503121561246857612467612d46565b5b6000612476858286016122fb565b92505060206124878582860161233a565b9150509250929050565b6000602082840312156124a7576124a6612d46565b5b60006124b584828501612325565b91505092915050565b6000602082840312156124d4576124d3612d46565b5b60006124e28482850161233a565b91505092915050565b60008060006060848603121561250457612503612d46565b5b60006125128682870161234f565b93505060206125238682870161234f565b92505060406125348682870161234f565b9150509250925092565b600061254a8383612556565b60208301905092915050565b61255f81612b59565b82525050565b61256e81612b59565b82525050565b600061257f826129ff565b6125898185612a22565b9350612594836129ef565b8060005b838110156125c55781516125ac888261253e565b97506125b783612a15565b925050600181019050612598565b5085935050505092915050565b6125db81612b6b565b82525050565b6125ea81612bae565b82525050565b6125f981612bc0565b82525050565b600061260a82612a0a565b6126148185612a33565b9350612624818560208601612bf6565b61262d81612d4b565b840191505092915050565b6000612645602383612a33565b915061265082612d5c565b604082019050919050565b6000612668602683612a33565b915061267382612dab565b604082019050919050565b600061268b602283612a33565b915061269682612dfa565b604082019050919050565b60006126ae602083612a33565b91506126b982612e49565b602082019050919050565b60006126d1602983612a33565b91506126dc82612e72565b604082019050919050565b60006126f4602583612a33565b91506126ff82612ec1565b604082019050919050565b6000612717602483612a33565b915061272282612f10565b604082019050919050565b61273681612b97565b82525050565b61274581612ba1565b82525050565b60006020820190506127606000830184612565565b92915050565b600060c08201905061277b6000830189612565565b612788602083018861272d565b61279560408301876125f0565b6127a260608301866125f0565b6127af6080830185612565565b6127bc60a083018461272d565b979650505050505050565b60006020820190506127dc60008301846125d2565b92915050565b60006020820190506127f760008301846125e1565b92915050565b6000602082019050818103600083015261281781846125ff565b905092915050565b6000602082019050818103600083015261283881612638565b9050919050565b600060208201905081810360008301526128588161265b565b9050919050565b600060208201905081810360008301526128788161267e565b9050919050565b60006020820190508181036000830152612898816126a1565b9050919050565b600060208201905081810360008301526128b8816126c4565b9050919050565b600060208201905081810360008301526128d8816126e7565b9050919050565b600060208201905081810360008301526128f88161270a565b9050919050565b6000602082019050612914600083018461272d565b92915050565b600060a08201905061292f600083018861272d565b61293c60208301876125f0565b818103604083015261294e8186612574565b905061295d6060830185612565565b61296a608083018461272d565b9695505050505050565b6000604082019050612989600083018561272d565b612996602083018461272d565b9392505050565b60006060820190506129b2600083018661272d565b6129bf602083018561272d565b6129cc604083018461272d565b949350505050565b60006020820190506129e9600083018461273c565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612a4f82612b97565b9150612a5a83612b97565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612a8f57612a8e612c5b565b5b828201905092915050565b6000612aa582612b97565b9150612ab083612b97565b925082612ac057612abf612c8a565b5b828204905092915050565b6000612ad682612b97565b9150612ae183612b97565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612b1a57612b19612c5b565b5b828202905092915050565b6000612b3082612b97565b9150612b3b83612b97565b925082821015612b4e57612b4d612c5b565b5b828203905092915050565b6000612b6482612b77565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612bb982612bd2565b9050919050565b6000612bcb82612b97565b9050919050565b6000612bdd82612be4565b9050919050565b6000612bef82612b77565b9050919050565b60005b83811015612c14578082015181840152602081019050612bf9565b83811115612c23576000848401525b50505050565b60006002820490506001821680612c4157607f821691505b60208210811415612c5557612c54612cb9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b612f6881612b59565b8114612f7357600080fd5b50565b612f7f81612b6b565b8114612f8a57600080fd5b50565b612f9681612b97565b8114612fa157600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203947f65c8a0f37fcb39b135ab7d7f73887c879e81cd37b58b6bf5a07413f807964736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101855760003560e01c80636bc87c3a116100d1578063a457c2d71161008a578063d4780e3611610064578063d4780e36146105a7578063dd62ed3e146105e5578063ea2f0b3714610622578063f2fde38b1461064b5761018c565b8063a457c2d714610504578063a9059cbb14610541578063c49b9a801461057e5761018c565b80636bc87c3a1461040657806370a0823114610431578063715018a61461046e5780638da5cb5b146104855780638ee88c53146104b057806395d89b41146104d95761018c565b8063313ce5671161013e578063437823ec11610118578063437823ec1461034a57806349bd5a5e146103735780634a74bb021461039e5780635342acb4146103c95761018c565b8063313ce567146102b75780633268cc56146102e2578063395093511461030d5761018c565b806306fdde0314610191578063095ea7b3146101bc57806313114a9d146101f95780631694505e1461022457806318160ddd1461024f57806323b872dd1461027a5761018c565b3661018c57005b600080fd5b34801561019d57600080fd5b506101a6610674565b6040516101b391906127fd565b60405180910390f35b3480156101c857600080fd5b506101e360048036038101906101de9190612451565b610706565b6040516101f091906127c7565b60405180910390f35b34801561020557600080fd5b5061020e610724565b60405161021b91906128ff565b60405180910390f35b34801561023057600080fd5b5061023961072e565b60405161024691906127e2565b60405180910390f35b34801561025b57600080fd5b50610264610752565b60405161027191906128ff565b60405180910390f35b34801561028657600080fd5b506102a1600480360381019061029c91906123fe565b61075c565b6040516102ae91906127c7565b60405180910390f35b3480156102c357600080fd5b506102cc610835565b6040516102d991906129d4565b60405180910390f35b3480156102ee57600080fd5b506102f761084c565b604051610304919061274b565b60405180910390f35b34801561031957600080fd5b50610334600480360381019061032f9190612451565b610872565b60405161034191906127c7565b60405180910390f35b34801561035657600080fd5b50610371600480360381019061036c9190612364565b610925565b005b34801561037f57600080fd5b506103886109fc565b604051610395919061274b565b60405180910390f35b3480156103aa57600080fd5b506103b3610a20565b6040516103c091906127c7565b60405180910390f35b3480156103d557600080fd5b506103f060048036038101906103eb9190612364565b610a33565b6040516103fd91906127c7565b60405180910390f35b34801561041257600080fd5b5061041b610a89565b60405161042891906128ff565b60405180910390f35b34801561043d57600080fd5b5061045860048036038101906104539190612364565b610a8f565b60405161046591906128ff565b60405180910390f35b34801561047a57600080fd5b50610483610ad8565b005b34801561049157600080fd5b5061049a610c12565b6040516104a7919061274b565b60405180910390f35b3480156104bc57600080fd5b506104d760048036038101906104d291906124be565b610c3b565b005b3480156104e557600080fd5b506104ee610cc1565b6040516104fb91906127fd565b60405180910390f35b34801561051057600080fd5b5061052b60048036038101906105269190612451565b610d53565b60405161053891906127c7565b60405180910390f35b34801561054d57600080fd5b5061056860048036038101906105639190612451565b610e20565b60405161057591906127c7565b60405180910390f35b34801561058a57600080fd5b506105a560048036038101906105a09190612491565b610e3e565b005b3480156105b357600080fd5b506105ce60048036038101906105c991906124be565b610f0e565b6040516105dc929190612974565b60405180910390f35b3480156105f157600080fd5b5061060c600480360381019061060791906123be565b610f61565b60405161061991906128ff565b60405180910390f35b34801561062e57600080fd5b5061064960048036038101906106449190612364565b610fe8565b005b34801561065757600080fd5b50610672600480360381019061066d9190612364565b6110bf565b005b60606006805461068390612c29565b80601f01602080910402602001604051908101604052809291908181526020018280546106af90612c29565b80156106fc5780601f106106d1576101008083540402835291602001916106fc565b820191906000526020600020905b8154815290600101906020018083116106df57829003601f168201915b5050505050905090565b600061071a610713611268565b8484611270565b6001905092915050565b6000600554905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600454905090565b600061076984848461143b565b61082a84610775611268565b61082585604051806060016040528060288152602001612fa560289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107db611268565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461172d9092919063ffffffff16565b611270565b600190509392505050565b6000600860009054906101000a900460ff16905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061091b61087f611268565b846109168560026000610890611268565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461178290919063ffffffff16565b611270565b6001905092915050565b61092d611268565b73ffffffffffffffffffffffffffffffffffffffff1661094b610c12565b73ffffffffffffffffffffffffffffffffffffffff16146109a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109989061287f565b60405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f00000000000000000000000077bca3f3552d144ed5f01fc068b6375c4d164f0981565b600b60159054906101000a900460ff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60095481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ae0611268565b73ffffffffffffffffffffffffffffffffffffffff16610afe610c12565b73ffffffffffffffffffffffffffffffffffffffff1614610b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4b9061287f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610c43611268565b73ffffffffffffffffffffffffffffffffffffffff16610c61610c12565b73ffffffffffffffffffffffffffffffffffffffff1614610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae9061287f565b60405180910390fd5b8060098190555050565b606060078054610cd090612c29565b80601f0160208091040260200160405190810160405280929190818152602001828054610cfc90612c29565b8015610d495780601f10610d1e57610100808354040283529160200191610d49565b820191906000526020600020905b815481529060010190602001808311610d2c57829003601f168201915b5050505050905090565b6000610e16610d60611268565b84610e1185604051806060016040528060258152602001612fcd6025913960026000610d8a611268565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461172d9092919063ffffffff16565b611270565b6001905092915050565b6000610e34610e2d611268565b848461143b565b6001905092915050565b610e46611268565b73ffffffffffffffffffffffffffffffffffffffff16610e64610c12565b73ffffffffffffffffffffffffffffffffffffffff1614610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb19061287f565b60405180910390fd5b80600b60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051610f0391906127c7565b60405180910390a150565b6000806000610f3b6064610f2d6009548761179890919063ffffffff16565b6117ae90919063ffffffff16565b90506000610f5282866117c490919063ffffffff16565b90508082935093505050915091565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610ff0611268565b73ffffffffffffffffffffffffffffffffffffffff1661100e610c12565b73ffffffffffffffffffffffffffffffffffffffff1614611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b9061287f565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6110c7611268565b73ffffffffffffffffffffffffffffffffffffffff166110e5610c12565b73ffffffffffffffffffffffffffffffffffffffff161461113b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111329061287f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a29061283f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d7906128df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611350576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113479061285f565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161142e91906128ff565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156114ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a2906128bf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561151b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115129061281f565b60405180910390fd5b6000811161155e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115559061289f565b60405180910390fd5b600061156930610a8f565b90506000600c54821015905080801561158f5750600b60149054906101000a900460ff16155b80156115e95750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561164157507f00000000000000000000000077bca3f3552d144ed5f01fc068b6375c4d164f0973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156116595750600b60159054906101000a900460ff165b1561166857611667826117da565b5b600060019050600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061170f5750600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561171957600090505b611725868686846118b0565b505050505050565b6000838311158290611775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176c91906127fd565b60405180910390fd5b5082840390509392505050565b600081836117909190612a44565b905092915050565b600081836117a69190612acb565b905092915050565b600081836117bc9190612a9a565b905092915050565b600081836117d29190612b25565b905092915050565b6001600b60146101000a81548160ff021916908315150217905550600061180b6002836117ae90919063ffffffff16565b9050600061182282846117c490919063ffffffff16565b9050600047905061183283611bc1565b600061184782476117c490919063ffffffff16565b90506118538382611e0d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516118869392919061299d565b60405180910390a1505050506000600b60146101000a81548160ff02191690831515021790555050565b806118be576118bd611efd565b5b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156119615750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561197657611971848484611f21565b611bad565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611a195750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611a2e57611a298484846120b5565b611bac565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611ad25750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ae757611ae28484846120b5565b611bab565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611b895750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611b9e57611b99848484611f21565b611baa565b611ba98484846120b5565b5b5b5b5b80611bbb57611bba6122f0565b5b50505050565b6000600267ffffffffffffffff811115611bde57611bdd612d17565b5b604051908082528060200260200182016040528015611c0c5781602001602082028036833780820191505090505b5090503081600081518110611c2457611c23612ce8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611cc457600080fd5b505afa158015611cd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfc9190612391565b81600181518110611d1057611d0f612ce8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611d75307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611270565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611dd795949392919061291a565b600060405180830381600087803b158015611df157600080fd5b505af1158015611e05573d6000803e3d6000fd5b505050505050565b611e38307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611270565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080611e82610c12565b426040518863ffffffff1660e01b8152600401611ea496959493929190612766565b6060604051808303818588803b158015611ebd57600080fd5b505af1158015611ed1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ef691906124eb565b5050505050565b60006009541415611f0d57611f1f565b600954600a8190555060006009819055505b565b611f7381600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117c490919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061200881600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461178290919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516120a891906128ff565b60405180910390a3505050565b6000806120c183610f0e565b9150915061211783600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117c490919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121ac82600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461178290919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061224181600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461178290919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122e191906128ff565b60405180910390a35050505050565b600a54600981905550565b60008135905061230a81612f5f565b92915050565b60008151905061231f81612f5f565b92915050565b60008135905061233481612f76565b92915050565b60008135905061234981612f8d565b92915050565b60008151905061235e81612f8d565b92915050565b60006020828403121561237a57612379612d46565b5b6000612388848285016122fb565b91505092915050565b6000602082840312156123a7576123a6612d46565b5b60006123b584828501612310565b91505092915050565b600080604083850312156123d5576123d4612d46565b5b60006123e3858286016122fb565b92505060206123f4858286016122fb565b9150509250929050565b60008060006060848603121561241757612416612d46565b5b6000612425868287016122fb565b9350506020612436868287016122fb565b92505060406124478682870161233a565b9150509250925092565b6000806040838503121561246857612467612d46565b5b6000612476858286016122fb565b92505060206124878582860161233a565b9150509250929050565b6000602082840312156124a7576124a6612d46565b5b60006124b584828501612325565b91505092915050565b6000602082840312156124d4576124d3612d46565b5b60006124e28482850161233a565b91505092915050565b60008060006060848603121561250457612503612d46565b5b60006125128682870161234f565b93505060206125238682870161234f565b92505060406125348682870161234f565b9150509250925092565b600061254a8383612556565b60208301905092915050565b61255f81612b59565b82525050565b61256e81612b59565b82525050565b600061257f826129ff565b6125898185612a22565b9350612594836129ef565b8060005b838110156125c55781516125ac888261253e565b97506125b783612a15565b925050600181019050612598565b5085935050505092915050565b6125db81612b6b565b82525050565b6125ea81612bae565b82525050565b6125f981612bc0565b82525050565b600061260a82612a0a565b6126148185612a33565b9350612624818560208601612bf6565b61262d81612d4b565b840191505092915050565b6000612645602383612a33565b915061265082612d5c565b604082019050919050565b6000612668602683612a33565b915061267382612dab565b604082019050919050565b600061268b602283612a33565b915061269682612dfa565b604082019050919050565b60006126ae602083612a33565b91506126b982612e49565b602082019050919050565b60006126d1602983612a33565b91506126dc82612e72565b604082019050919050565b60006126f4602583612a33565b91506126ff82612ec1565b604082019050919050565b6000612717602483612a33565b915061272282612f10565b604082019050919050565b61273681612b97565b82525050565b61274581612ba1565b82525050565b60006020820190506127606000830184612565565b92915050565b600060c08201905061277b6000830189612565565b612788602083018861272d565b61279560408301876125f0565b6127a260608301866125f0565b6127af6080830185612565565b6127bc60a083018461272d565b979650505050505050565b60006020820190506127dc60008301846125d2565b92915050565b60006020820190506127f760008301846125e1565b92915050565b6000602082019050818103600083015261281781846125ff565b905092915050565b6000602082019050818103600083015261283881612638565b9050919050565b600060208201905081810360008301526128588161265b565b9050919050565b600060208201905081810360008301526128788161267e565b9050919050565b60006020820190508181036000830152612898816126a1565b9050919050565b600060208201905081810360008301526128b8816126c4565b9050919050565b600060208201905081810360008301526128d8816126e7565b9050919050565b600060208201905081810360008301526128f88161270a565b9050919050565b6000602082019050612914600083018461272d565b92915050565b600060a08201905061292f600083018861272d565b61293c60208301876125f0565b818103604083015261294e8186612574565b905061295d6060830185612565565b61296a608083018461272d565b9695505050505050565b6000604082019050612989600083018561272d565b612996602083018461272d565b9392505050565b60006060820190506129b2600083018661272d565b6129bf602083018561272d565b6129cc604083018461272d565b949350505050565b60006020820190506129e9600083018461273c565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612a4f82612b97565b9150612a5a83612b97565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612a8f57612a8e612c5b565b5b828201905092915050565b6000612aa582612b97565b9150612ab083612b97565b925082612ac057612abf612c8a565b5b828204905092915050565b6000612ad682612b97565b9150612ae183612b97565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612b1a57612b19612c5b565b5b828202905092915050565b6000612b3082612b97565b9150612b3b83612b97565b925082821015612b4e57612b4d612c5b565b5b828203905092915050565b6000612b6482612b77565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612bb982612bd2565b9050919050565b6000612bcb82612b97565b9050919050565b6000612bdd82612be4565b9050919050565b6000612bef82612b77565b9050919050565b60005b83811015612c14578082015181840152602081019050612bf9565b83811115612c23576000848401525b50505050565b60006002820490506001821680612c4157607f821691505b60208210811415612c5557612c54612cb9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b612f6881612b59565b8114612f7357600080fd5b50565b612f7f81612b6b565b8114612f8a57600080fd5b50565b612f9681612b97565b8114612fa157600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203947f65c8a0f37fcb39b135ab7d7f73887c879e81cd37b58b6bf5a07413f807964736f6c63430008070033
Deployed Bytecode Sourcemap
28035:10831:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30238:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31057:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32042:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28670:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30509:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31224:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30420:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28728:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31543:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32137:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28808:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28883:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33113:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28571:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30610:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18160:148;;;;;;;;;;;;;:::i;:::-;;17513:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32382:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30327:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31767:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30735:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32515:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37886:260;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;30908:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32260:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18461:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30238:83;30275:13;30308:5;30301:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30238:83;:::o;31057:161::-;31132:4;31149:39;31158:12;:10;:12::i;:::-;31172:7;31181:6;31149:8;:39::i;:::-;31206:4;31199:11;;31057:161;;;;:::o;32042:87::-;32084:7;32111:10;;32104:17;;32042:87;:::o;28670:51::-;;;:::o;30509:95::-;30562:7;30589;;30582:14;;30509:95;:::o;31224:313::-;31322:4;31339:36;31349:6;31357:9;31368:6;31339:9;:36::i;:::-;31386:121;31395:6;31403:12;:10;:12::i;:::-;31417:89;31455:6;31417:89;;;;;;;;;;;;;;;;;:11;:19;31429:6;31417:19;;;;;;;;;;;;;;;:33;31437:12;:10;:12::i;:::-;31417:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;31386:8;:121::i;:::-;31525:4;31518:11;;31224:313;;;;;:::o;30420:83::-;30461:5;30486:9;;;;;;;;;;;30479:16;;30420:83;:::o;28728:73::-;;;;;;;;;;;;;:::o;31543:218::-;31631:4;31648:83;31657:12;:10;:12::i;:::-;31671:7;31680:50;31719:10;31680:11;:25;31692:12;:10;:12::i;:::-;31680:25;;;;;;;;;;;;;;;:34;31706:7;31680:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;31648:8;:83::i;:::-;31749:4;31742:11;;31543:218;;;;:::o;32137:111::-;17742:12;:10;:12::i;:::-;17731:23;;:7;:5;:7::i;:::-;:23;;;17723:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32236:4:::1;32206:18;:27;32225:7;32206:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;32137:111:::0;:::o;28808:38::-;;;:::o;28883:40::-;;;;;;;;;;;;;:::o;33113:123::-;33177:4;33201:18;:27;33220:7;33201:27;;;;;;;;;;;;;;;;;;;;;;;;;33194:34;;33113:123;;;:::o;28571:32::-;;;;:::o;30610:117::-;30676:7;30703;:16;30711:7;30703:16;;;;;;;;;;;;;;;;30696:23;;30610:117;;;:::o;18160:148::-;17742:12;:10;:12::i;:::-;17731:23;;:7;:5;:7::i;:::-;:23;;;17723:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18267:1:::1;18230:40;;18251:6;::::0;::::1;;;;;;;;18230:40;;;;;;;;;;;;18298:1;18281:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;18160:148::o:0;17513:87::-;17559:7;17586:6;;;;;;;;;;;17579:13;;17513:87;:::o;32382:122::-;17742:12;:10;:12::i;:::-;17731:23;;:7;:5;:7::i;:::-;:23;;;17723:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32484:12:::1;32468:13;:28;;;;32382:122:::0;:::o;30327:87::-;30366:13;30399:7;30392:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30327:87;:::o;31767:269::-;31860:4;31877:129;31886:12;:10;:12::i;:::-;31900:7;31909:96;31948:15;31909:96;;;;;;;;;;;;;;;;;:11;:25;31921:12;:10;:12::i;:::-;31909:25;;;;;;;;;;;;;;;:34;31935:7;31909:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;31877:8;:129::i;:::-;32024:4;32017:11;;31767:269;;;;:::o;30735:167::-;30813:4;30830:42;30840:12;:10;:12::i;:::-;30854:9;30865:6;30830:9;:42::i;:::-;30890:4;30883:11;;30735:167;;;;:::o;32515:171::-;17742:12;:10;:12::i;:::-;17731:23;;:7;:5;:7::i;:::-;:23;;;17723:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32616:8:::1;32592:21;;:32;;;;;;;;;;;;;;;;;;32640:38;32669:8;32640:38;;;;;;:::i;:::-;;;;;;;;32515:171:::0;:::o;37886:260::-;37944:7;37953;37973:18;37994:37;38025:5;37994:26;38006:13;;37994:7;:11;;:26;;;;:::i;:::-;:30;;:37;;;;:::i;:::-;37973:58;;38042:23;38068;38080:10;38068:7;:11;;:23;;;;:::i;:::-;38042:49;;38110:15;38127:10;38102:36;;;;;;37886:260;;;:::o;30908:143::-;30989:7;31016:11;:18;31028:5;31016:18;;;;;;;;;;;;;;;:27;31035:7;31016:27;;;;;;;;;;;;;;;;31009:34;;30908:143;;;;:::o;32260:110::-;17742:12;:10;:12::i;:::-;17731:23;;:7;:5;:7::i;:::-;:23;;;17723:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32357:5:::1;32327:18;:27;32346:7;32327:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;32260:110:::0;:::o;18461:244::-;17742:12;:10;:12::i;:::-;17731:23;;:7;:5;:7::i;:::-;:23;;;17723:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18570:1:::1;18550:22;;:8;:22;;;;18542:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18660:8;18631:38;;18652:6;::::0;::::1;;;;;;;;18631:38;;;;;;;;;;;;18689:8;18680:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;18461:244:::0;:::o;9417:98::-;9470:7;9497:10;9490:17;;9417:98;:::o;33244:335::-;33354:1;33337:19;;:5;:19;;;;33329:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33435:1;33416:21;;:7;:21;;;;33408:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33517:6;33487:11;:18;33499:5;33487:18;;;;;;;;;;;;;;;:27;33506:7;33487:27;;;;;;;;;;;;;;;:36;;;;33555:7;33539:32;;33548:5;33539:32;;;33564:6;33539:32;;;;;;:::i;:::-;;;;;;;;33244:335;;;:::o;33587:1243::-;33725:1;33709:18;;:4;:18;;;;33701:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33802:1;33788:16;;:2;:16;;;;33780:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33872:1;33863:6;:10;33855:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33937:28;33968:24;33986:4;33968:9;:24::i;:::-;33937:55;;34021:24;34072:29;;34048:20;:53;;34021:80;;34132:19;:53;;;;;34169:16;;;;;;;;;;;34168:17;34132:53;:100;;;;;34218:13;;;;;;;;;;;34202:30;;:4;:30;;;;34132:100;:138;;;;;34257:13;34249:21;;:4;:21;;;;34132:138;:176;;;;;34287:21;;;;;;;;;;;34132:176;34114:294;;;34360:36;34375:20;34360:14;:36::i;:::-;34114:294;34489:12;34504:4;34489:19;;34616:18;:24;34635:4;34616:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;34644:18;:22;34663:2;34644:22;;;;;;;;;;;;;;;;;;;;;;;;;34616:50;34613:96;;;34692:5;34682:15;;34613:96;34784:38;34799:4;34804:2;34807:6;34814:7;34784:14;:38::i;:::-;33690:1140;;;33587:1243;;;:::o;7377:206::-;7463:7;7521:1;7516;:6;;7524:12;7508:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7563:1;7559;:5;7552:12;;7377:206;;;;;:::o;5108:98::-;5166:7;5197:1;5193;:5;;;;:::i;:::-;5186:12;;5108:98;;;;:::o;5842:::-;5900:7;5931:1;5927;:5;;;;:::i;:::-;5920:12;;5842:98;;;;:::o;6239:::-;6297:7;6328:1;6324;:5;;;;:::i;:::-;6317:12;;6239:98;;;;:::o;5487:::-;5545:7;5576:1;5572;:5;;;;:::i;:::-;5565:12;;5487:98;;;;:::o;34838:977::-;29356:4;29337:16;;:23;;;;;;;;;;;;;;;;;;34974:12:::1;34989:27;35014:1;34989:20;:24;;:27;;;;:::i;:::-;34974:42;;35027:17;35047:30;35072:4;35047:20;:24;;:30;;;;:::i;:::-;35027:50;;35353:22;35378:21;35353:46;;35442:22;35459:4;35442:16;:22::i;:::-;35593:18;35614:41;35640:14;35614:21;:25;;:41;;;;:::i;:::-;35593:62;;35703:35;35716:9;35727:10;35703:12;:35::i;:::-;35764:43;35779:4;35785:10;35797:9;35764:43;;;;;;;;:::i;:::-;;;;;;;;34912:903;;;;29402:5:::0;29383:16;;:24;;;;;;;;;;;;;;;;;;34838:977;:::o;37006:872::-;37118:7;37114:40;;37140:14;:12;:14::i;:::-;37114:40;37179:18;:26;37198:6;37179:26;;;;;;;;;;;;;;;;;;;;;;;;;:60;;;;;37210:18;:29;37229:9;37210:29;;;;;;;;;;;;;;;;;;;;;;;;;37209:30;37179:60;37175:634;;;37256:41;37271:6;37279:9;37290:6;37256:14;:41::i;:::-;37175:634;;;37320:18;:26;37339:6;37320:26;;;;;;;;;;;;;;;;;;;;;;;;;37319:27;:60;;;;;37350:18;:29;37369:9;37350:29;;;;;;;;;;;;;;;;;;;;;;;;;37319:60;37315:494;;;37396:43;37413:6;37421:9;37432:6;37396:16;:43::i;:::-;37315:494;;;37462:18;:26;37481:6;37462:26;;;;;;;;;;;;;;;;;;;;;;;;;37461:27;:61;;;;;37493:18;:29;37512:9;37493:29;;;;;;;;;;;;;;;;;;;;;;;;;37492:30;37461:61;37457:352;;;37539:43;37556:6;37564:9;37575:6;37539:16;:43::i;:::-;37457:352;;;37604:18;:26;37623:6;37604:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;37634:18;:29;37653:9;37634:29;;;;;;;;;;;;;;;;;;;;;;;;;37604:59;37600:209;;;37680:41;37695:6;37703:9;37714:6;37680:14;:41::i;:::-;37600:209;;;37754:43;37771:6;37779:9;37790:6;37754:16;:43::i;:::-;37600:209;37457:352;37315:494;37175:634;37833:7;37829:41;;37855:15;:13;:15::i;:::-;37829:41;37006:872;;;;:::o;35823:585::-;35949:21;35987:1;35973:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35949:40;;36018:4;36000;36005:1;36000:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;36044:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36034:4;36039:1;36034:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;36077:62;36094:4;36109:15;36127:11;36077:8;:62::i;:::-;36176:15;:66;;;36257:11;36283:1;36327:4;36354;36374:15;36176:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35878:530;35823:585;:::o;36416:511::-;36564:62;36581:4;36596:15;36614:11;36564:8;:62::i;:::-;36667:15;:31;;;36706:9;36739:4;36759:11;36785:1;36828;36871:7;:5;:7::i;:::-;36893:15;36667:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;36416:511;;:::o;32844:156::-;32907:1;32890:13;;:18;32887:30;;;32910:7;;32887:30;32951:13;;32927:21;:37;;;;32991:1;32975:13;:17;;;;32844:156;:::o;38596:267::-;38709:28;38729:7;38709;:15;38717:6;38709:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;38691:7;:15;38699:6;38691:15;;;;;;;;;;;;;;;:46;;;;38769:31;38792:7;38769;:18;38777:9;38769:18;;;;;;;;;;;;;;;;:22;;:31;;;;:::i;:::-;38748:7;:18;38756:9;38748:18;;;;;;;;;;;;;;;:52;;;;38836:9;38819:36;;38828:6;38819:36;;;38847:7;38819:36;;;;;;:::i;:::-;;;;;;;;38596:267;;;:::o;38154:434::-;38252:23;38277:18;38299:19;38310:7;38299:10;:19::i;:::-;38251:67;;;;38347:28;38367:7;38347;:15;38355:6;38347:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;38329:7;:15;38337:6;38329:15;;;;;;;;;;;;;;;:46;;;;38407:39;38430:15;38407:7;:18;38415:9;38407:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;38386:7;:18;38394:9;38386:18;;;;;;;;;;;;;;;:60;;;;38482:38;38509:10;38482:7;:22;38498:4;38482:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;38457:7;:22;38473:4;38457:22;;;;;;;;;;;;;;;:63;;;;38553:9;38536:44;;38545:6;38536:44;;;38564:15;38536:44;;;;;;:::i;:::-;;;;;;;;38240:348;;38154:434;;;:::o;33012:89::-;33072:21;;33056:13;:37;;;;33012:89::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;301:133;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;440:139;;;;:::o;585:143::-;642:5;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;585:143;;;;:::o;734:329::-;793:6;842:2;830:9;821:7;817:23;813:32;810:119;;;848:79;;:::i;:::-;810:119;968:1;993:53;1038:7;1029:6;1018:9;1014:22;993:53;:::i;:::-;983:63;;939:117;734:329;;;;:::o;1069:351::-;1139:6;1188:2;1176:9;1167:7;1163:23;1159:32;1156:119;;;1194:79;;:::i;:::-;1156:119;1314:1;1339:64;1395:7;1386:6;1375:9;1371:22;1339:64;:::i;:::-;1329:74;;1285:128;1069:351;;;;:::o;1426:474::-;1494:6;1502;1551:2;1539:9;1530:7;1526:23;1522:32;1519:119;;;1557:79;;:::i;:::-;1519:119;1677:1;1702:53;1747:7;1738:6;1727:9;1723:22;1702:53;:::i;:::-;1692:63;;1648:117;1804:2;1830:53;1875:7;1866:6;1855:9;1851:22;1830:53;:::i;:::-;1820:63;;1775:118;1426:474;;;;;:::o;1906:619::-;1983:6;1991;1999;2048:2;2036:9;2027:7;2023:23;2019:32;2016:119;;;2054:79;;:::i;:::-;2016:119;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2301:2;2327:53;2372:7;2363:6;2352:9;2348:22;2327:53;:::i;:::-;2317:63;;2272:118;2429:2;2455:53;2500:7;2491:6;2480:9;2476:22;2455:53;:::i;:::-;2445:63;;2400:118;1906:619;;;;;:::o;2531:474::-;2599:6;2607;2656:2;2644:9;2635:7;2631:23;2627:32;2624:119;;;2662:79;;:::i;:::-;2624:119;2782:1;2807:53;2852:7;2843:6;2832:9;2828:22;2807:53;:::i;:::-;2797:63;;2753:117;2909:2;2935:53;2980:7;2971:6;2960:9;2956:22;2935:53;:::i;:::-;2925:63;;2880:118;2531:474;;;;;:::o;3011:323::-;3067:6;3116:2;3104:9;3095:7;3091:23;3087:32;3084:119;;;3122:79;;:::i;:::-;3084:119;3242:1;3267:50;3309:7;3300:6;3289:9;3285:22;3267:50;:::i;:::-;3257:60;;3213:114;3011:323;;;;:::o;3340:329::-;3399:6;3448:2;3436:9;3427:7;3423:23;3419:32;3416:119;;;3454:79;;:::i;:::-;3416:119;3574:1;3599:53;3644:7;3635:6;3624:9;3620:22;3599:53;:::i;:::-;3589:63;;3545:117;3340:329;;;;:::o;3675:663::-;3763:6;3771;3779;3828:2;3816:9;3807:7;3803:23;3799:32;3796:119;;;3834:79;;:::i;:::-;3796:119;3954:1;3979:64;4035:7;4026:6;4015:9;4011:22;3979:64;:::i;:::-;3969:74;;3925:128;4092:2;4118:64;4174:7;4165:6;4154:9;4150:22;4118:64;:::i;:::-;4108:74;;4063:129;4231:2;4257:64;4313:7;4304:6;4293:9;4289:22;4257:64;:::i;:::-;4247:74;;4202:129;3675:663;;;;;:::o;4344:179::-;4413:10;4434:46;4476:3;4468:6;4434:46;:::i;:::-;4512:4;4507:3;4503:14;4489:28;;4344:179;;;;:::o;4529:108::-;4606:24;4624:5;4606:24;:::i;:::-;4601:3;4594:37;4529:108;;:::o;4643:118::-;4730:24;4748:5;4730:24;:::i;:::-;4725:3;4718:37;4643:118;;:::o;4797:732::-;4916:3;4945:54;4993:5;4945:54;:::i;:::-;5015:86;5094:6;5089:3;5015:86;:::i;:::-;5008:93;;5125:56;5175:5;5125:56;:::i;:::-;5204:7;5235:1;5220:284;5245:6;5242:1;5239:13;5220:284;;;5321:6;5315:13;5348:63;5407:3;5392:13;5348:63;:::i;:::-;5341:70;;5434:60;5487:6;5434:60;:::i;:::-;5424:70;;5280:224;5267:1;5264;5260:9;5255:14;;5220:284;;;5224:14;5520:3;5513:10;;4921:608;;;4797:732;;;;:::o;5535:109::-;5616:21;5631:5;5616:21;:::i;:::-;5611:3;5604:34;5535:109;;:::o;5650:185::-;5764:64;5822:5;5764:64;:::i;:::-;5759:3;5752:77;5650:185;;:::o;5841:147::-;5936:45;5975:5;5936:45;:::i;:::-;5931:3;5924:58;5841:147;;:::o;5994:364::-;6082:3;6110:39;6143:5;6110:39;:::i;:::-;6165:71;6229:6;6224:3;6165:71;:::i;:::-;6158:78;;6245:52;6290:6;6285:3;6278:4;6271:5;6267:16;6245:52;:::i;:::-;6322:29;6344:6;6322:29;:::i;:::-;6317:3;6313:39;6306:46;;6086:272;5994:364;;;;:::o;6364:366::-;6506:3;6527:67;6591:2;6586:3;6527:67;:::i;:::-;6520:74;;6603:93;6692:3;6603:93;:::i;:::-;6721:2;6716:3;6712:12;6705:19;;6364:366;;;:::o;6736:::-;6878:3;6899:67;6963:2;6958:3;6899:67;:::i;:::-;6892:74;;6975:93;7064:3;6975:93;:::i;:::-;7093:2;7088:3;7084:12;7077:19;;6736:366;;;:::o;7108:::-;7250:3;7271:67;7335:2;7330:3;7271:67;:::i;:::-;7264:74;;7347:93;7436:3;7347:93;:::i;:::-;7465:2;7460:3;7456:12;7449:19;;7108:366;;;:::o;7480:::-;7622:3;7643:67;7707:2;7702:3;7643:67;:::i;:::-;7636:74;;7719:93;7808:3;7719:93;:::i;:::-;7837:2;7832:3;7828:12;7821:19;;7480:366;;;:::o;7852:::-;7994:3;8015:67;8079:2;8074:3;8015:67;:::i;:::-;8008:74;;8091:93;8180:3;8091:93;:::i;:::-;8209:2;8204:3;8200:12;8193:19;;7852:366;;;:::o;8224:::-;8366:3;8387:67;8451:2;8446:3;8387:67;:::i;:::-;8380:74;;8463:93;8552:3;8463:93;:::i;:::-;8581:2;8576:3;8572:12;8565:19;;8224:366;;;:::o;8596:::-;8738:3;8759:67;8823:2;8818:3;8759:67;:::i;:::-;8752:74;;8835:93;8924:3;8835:93;:::i;:::-;8953:2;8948:3;8944:12;8937:19;;8596:366;;;:::o;8968:118::-;9055:24;9073:5;9055:24;:::i;:::-;9050:3;9043:37;8968:118;;:::o;9092:112::-;9175:22;9191:5;9175:22;:::i;:::-;9170:3;9163:35;9092:112;;:::o;9210:222::-;9303:4;9341:2;9330:9;9326:18;9318:26;;9354:71;9422:1;9411:9;9407:17;9398:6;9354:71;:::i;:::-;9210:222;;;;:::o;9438:807::-;9687:4;9725:3;9714:9;9710:19;9702:27;;9739:71;9807:1;9796:9;9792:17;9783:6;9739:71;:::i;:::-;9820:72;9888:2;9877:9;9873:18;9864:6;9820:72;:::i;:::-;9902:80;9978:2;9967:9;9963:18;9954:6;9902:80;:::i;:::-;9992;10068:2;10057:9;10053:18;10044:6;9992:80;:::i;:::-;10082:73;10150:3;10139:9;10135:19;10126:6;10082:73;:::i;:::-;10165;10233:3;10222:9;10218:19;10209:6;10165:73;:::i;:::-;9438:807;;;;;;;;;:::o;10251:210::-;10338:4;10376:2;10365:9;10361:18;10353:26;;10389:65;10451:1;10440:9;10436:17;10427:6;10389:65;:::i;:::-;10251:210;;;;:::o;10467:276::-;10587:4;10625:2;10614:9;10610:18;10602:26;;10638:98;10733:1;10722:9;10718:17;10709:6;10638:98;:::i;:::-;10467:276;;;;:::o;10749:313::-;10862:4;10900:2;10889:9;10885:18;10877:26;;10949:9;10943:4;10939:20;10935:1;10924:9;10920:17;10913:47;10977:78;11050:4;11041:6;10977:78;:::i;:::-;10969:86;;10749:313;;;;:::o;11068:419::-;11234:4;11272:2;11261:9;11257:18;11249:26;;11321:9;11315:4;11311:20;11307:1;11296:9;11292:17;11285:47;11349:131;11475:4;11349:131;:::i;:::-;11341:139;;11068:419;;;:::o;11493:::-;11659:4;11697:2;11686:9;11682:18;11674:26;;11746:9;11740:4;11736:20;11732:1;11721:9;11717:17;11710:47;11774:131;11900:4;11774:131;:::i;:::-;11766:139;;11493:419;;;:::o;11918:::-;12084:4;12122:2;12111:9;12107:18;12099:26;;12171:9;12165:4;12161:20;12157:1;12146:9;12142:17;12135:47;12199:131;12325:4;12199:131;:::i;:::-;12191:139;;11918:419;;;:::o;12343:::-;12509:4;12547:2;12536:9;12532:18;12524:26;;12596:9;12590:4;12586:20;12582:1;12571:9;12567:17;12560:47;12624:131;12750:4;12624:131;:::i;:::-;12616:139;;12343:419;;;:::o;12768:::-;12934:4;12972:2;12961:9;12957:18;12949:26;;13021:9;13015:4;13011:20;13007:1;12996:9;12992:17;12985:47;13049:131;13175:4;13049:131;:::i;:::-;13041:139;;12768:419;;;:::o;13193:::-;13359:4;13397:2;13386:9;13382:18;13374:26;;13446:9;13440:4;13436:20;13432:1;13421:9;13417:17;13410:47;13474:131;13600:4;13474:131;:::i;:::-;13466:139;;13193:419;;;:::o;13618:::-;13784:4;13822:2;13811:9;13807:18;13799:26;;13871:9;13865:4;13861:20;13857:1;13846:9;13842:17;13835:47;13899:131;14025:4;13899:131;:::i;:::-;13891:139;;13618:419;;;:::o;14043:222::-;14136:4;14174:2;14163:9;14159:18;14151:26;;14187:71;14255:1;14244:9;14240:17;14231:6;14187:71;:::i;:::-;14043:222;;;;:::o;14271:831::-;14534:4;14572:3;14561:9;14557:19;14549:27;;14586:71;14654:1;14643:9;14639:17;14630:6;14586:71;:::i;:::-;14667:80;14743:2;14732:9;14728:18;14719:6;14667:80;:::i;:::-;14794:9;14788:4;14784:20;14779:2;14768:9;14764:18;14757:48;14822:108;14925:4;14916:6;14822:108;:::i;:::-;14814:116;;14940:72;15008:2;14997:9;14993:18;14984:6;14940:72;:::i;:::-;15022:73;15090:3;15079:9;15075:19;15066:6;15022:73;:::i;:::-;14271:831;;;;;;;;:::o;15108:332::-;15229:4;15267:2;15256:9;15252:18;15244:26;;15280:71;15348:1;15337:9;15333:17;15324:6;15280:71;:::i;:::-;15361:72;15429:2;15418:9;15414:18;15405:6;15361:72;:::i;:::-;15108:332;;;;;:::o;15446:442::-;15595:4;15633:2;15622:9;15618:18;15610:26;;15646:71;15714:1;15703:9;15699:17;15690:6;15646:71;:::i;:::-;15727:72;15795:2;15784:9;15780:18;15771:6;15727:72;:::i;:::-;15809;15877:2;15866:9;15862:18;15853:6;15809:72;:::i;:::-;15446:442;;;;;;:::o;15894:214::-;15983:4;16021:2;16010:9;16006:18;15998:26;;16034:67;16098:1;16087:9;16083:17;16074:6;16034:67;:::i;:::-;15894:214;;;;:::o;16195:132::-;16262:4;16285:3;16277:11;;16315:4;16310:3;16306:14;16298:22;;16195:132;;;:::o;16333:114::-;16400:6;16434:5;16428:12;16418:22;;16333:114;;;:::o;16453:99::-;16505:6;16539:5;16533:12;16523:22;;16453:99;;;:::o;16558:113::-;16628:4;16660;16655:3;16651:14;16643:22;;16558:113;;;:::o;16677:184::-;16776:11;16810:6;16805:3;16798:19;16850:4;16845:3;16841:14;16826:29;;16677:184;;;;:::o;16867:169::-;16951:11;16985:6;16980:3;16973:19;17025:4;17020:3;17016:14;17001:29;;16867:169;;;;:::o;17042:305::-;17082:3;17101:20;17119:1;17101:20;:::i;:::-;17096:25;;17135:20;17153:1;17135:20;:::i;:::-;17130:25;;17289:1;17221:66;17217:74;17214:1;17211:81;17208:107;;;17295:18;;:::i;:::-;17208:107;17339:1;17336;17332:9;17325:16;;17042:305;;;;:::o;17353:185::-;17393:1;17410:20;17428:1;17410:20;:::i;:::-;17405:25;;17444:20;17462:1;17444:20;:::i;:::-;17439:25;;17483:1;17473:35;;17488:18;;:::i;:::-;17473:35;17530:1;17527;17523:9;17518:14;;17353:185;;;;:::o;17544:348::-;17584:7;17607:20;17625:1;17607:20;:::i;:::-;17602:25;;17641:20;17659:1;17641:20;:::i;:::-;17636:25;;17829:1;17761:66;17757:74;17754:1;17751:81;17746:1;17739:9;17732:17;17728:105;17725:131;;;17836:18;;:::i;:::-;17725:131;17884:1;17881;17877:9;17866:20;;17544:348;;;;:::o;17898:191::-;17938:4;17958:20;17976:1;17958:20;:::i;:::-;17953:25;;17992:20;18010:1;17992:20;:::i;:::-;17987:25;;18031:1;18028;18025:8;18022:34;;;18036:18;;:::i;:::-;18022:34;18081:1;18078;18074:9;18066:17;;17898:191;;;;:::o;18095:96::-;18132:7;18161:24;18179:5;18161:24;:::i;:::-;18150:35;;18095:96;;;:::o;18197:90::-;18231:7;18274:5;18267:13;18260:21;18249:32;;18197:90;;;:::o;18293:126::-;18330:7;18370:42;18363:5;18359:54;18348:65;;18293:126;;;:::o;18425:77::-;18462:7;18491:5;18480:16;;18425:77;;;:::o;18508:86::-;18543:7;18583:4;18576:5;18572:16;18561:27;;18508:86;;;:::o;18600:153::-;18677:9;18710:37;18741:5;18710:37;:::i;:::-;18697:50;;18600:153;;;:::o;18759:121::-;18817:9;18850:24;18868:5;18850:24;:::i;:::-;18837:37;;18759:121;;;:::o;18886:126::-;18936:9;18969:37;19000:5;18969:37;:::i;:::-;18956:50;;18886:126;;;:::o;19018:113::-;19068:9;19101:24;19119:5;19101:24;:::i;:::-;19088:37;;19018:113;;;:::o;19137:307::-;19205:1;19215:113;19229:6;19226:1;19223:13;19215:113;;;19314:1;19309:3;19305:11;19299:18;19295:1;19290:3;19286:11;19279:39;19251:2;19248:1;19244:10;19239:15;;19215:113;;;19346:6;19343:1;19340:13;19337:101;;;19426:1;19417:6;19412:3;19408:16;19401:27;19337:101;19186:258;19137:307;;;:::o;19450:320::-;19494:6;19531:1;19525:4;19521:12;19511:22;;19578:1;19572:4;19568:12;19599:18;19589:81;;19655:4;19647:6;19643:17;19633:27;;19589:81;19717:2;19709:6;19706:14;19686:18;19683:38;19680:84;;;19736:18;;:::i;:::-;19680:84;19501:269;19450:320;;;:::o;19776:180::-;19824:77;19821:1;19814:88;19921:4;19918:1;19911:15;19945:4;19942:1;19935:15;19962:180;20010:77;20007:1;20000:88;20107:4;20104:1;20097:15;20131:4;20128:1;20121:15;20148:180;20196:77;20193:1;20186:88;20293:4;20290:1;20283:15;20317:4;20314:1;20307:15;20334:180;20382:77;20379:1;20372:88;20479:4;20476:1;20469:15;20503:4;20500:1;20493:15;20520:180;20568:77;20565:1;20558:88;20665:4;20662:1;20655:15;20689:4;20686:1;20679:15;20829:117;20938:1;20935;20928:12;20952:102;20993:6;21044:2;21040:7;21035:2;21028:5;21024:14;21020:28;21010:38;;20952:102;;;:::o;21060:222::-;21200:34;21196:1;21188:6;21184:14;21177:58;21269:5;21264:2;21256:6;21252:15;21245:30;21060:222;:::o;21288:225::-;21428:34;21424:1;21416:6;21412:14;21405:58;21497:8;21492:2;21484:6;21480:15;21473:33;21288:225;:::o;21519:221::-;21659:34;21655:1;21647:6;21643:14;21636:58;21728:4;21723:2;21715:6;21711:15;21704:29;21519:221;:::o;21746:182::-;21886:34;21882:1;21874:6;21870:14;21863:58;21746:182;:::o;21934:228::-;22074:34;22070:1;22062:6;22058:14;22051:58;22143:11;22138:2;22130:6;22126:15;22119:36;21934:228;:::o;22168:224::-;22308:34;22304:1;22296:6;22292:14;22285:58;22377:7;22372:2;22364:6;22360:15;22353:32;22168:224;:::o;22398:223::-;22538:34;22534:1;22526:6;22522:14;22515:58;22607:6;22602:2;22594:6;22590:15;22583:31;22398:223;:::o;22627:122::-;22700:24;22718:5;22700:24;:::i;:::-;22693:5;22690:35;22680:63;;22739:1;22736;22729:12;22680:63;22627:122;:::o;22755:116::-;22825:21;22840:5;22825:21;:::i;:::-;22818:5;22815:32;22805:60;;22861:1;22858;22851:12;22805:60;22755:116;:::o;22877:122::-;22950:24;22968:5;22950:24;:::i;:::-;22943:5;22940:35;22930:63;;22989:1;22986;22979:12;22930:63;22877:122;:::o
Swarm Source
ipfs://3947f65c8a0f37fcb39b135ab7d7f73887c879e81cd37b58b6bf5a07413f8079
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.