ETH Price: $3,151.88 (+1.03%)
Gas: 1 Gwei

Token

Try To Rug Me (RUGME)
 

Overview

Max Total Supply

999,999,999,998.999999999990999998 RUGME

Holders

238

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
gonnacook.eth
Balance
0.000000015158517099 RUGME

Value
$0.00
0xf7cbc86f5c7694b4ac9cd065228c38478b771881
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
RUGME

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-29
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

/*

Try To Rug Me ($RUGME)
- 1 trillion supply
- 100% of supply is used as liquidity
- 10% transfer and buy fee (no sell fee), all disbursed to holders
- a puzzle 'onion' to solve which can rug the liquidity (see bottom of file)
- when rugged, 20% goes to the rugger and 80% is refunded to holders

Obviously don't buy the token unless you know the risks.
Good luck and have fun!

*/

interface Callable {
	function tokenCallback(address _from, uint256 _tokens, bytes calldata _data) external returns (bool);
}

interface WETH {
	function balanceOf(address) external view returns (uint256);
	function transfer(address, uint256) external returns (bool);
}

interface Router {
	function factory() external view returns (address);
	function positionManager() external view returns (address);
	function WETH9() external view returns (address);
}

interface Factory {
	function createPool(address _tokenA, address _tokenB, uint24 _fee) external returns (address);
}

interface Pool {
	function initialize(uint160 _sqrtPriceX96) external;
}

interface Params {
	struct MintParams {
		address token0;
		address token1;
		uint24 fee;
		int24 tickLower;
		int24 tickUpper;
		uint256 amount0Desired;
		uint256 amount1Desired;
		uint256 amount0Min;
		uint256 amount1Min;
		address recipient;
		uint256 deadline;
	}
	struct CollectParams {
		uint256 tokenId;
		address recipient;
		uint128 amount0Max;
		uint128 amount1Max;
	}
	struct DecreaseLiquidityParams {
		uint256 tokenId;
		uint128 liquidity;
		uint256 amount0Min;
		uint256 amount1Min;
		uint256 deadline;
	}
}

interface PositionManager is Params {
	function mint(MintParams calldata) external payable returns (uint256 tokenId, uint128 liquidity, uint256 amount0, uint256 amount1);
	function collect(CollectParams calldata) external payable returns (uint256 amount0, uint256 amount1);
	function decreaseLiquidity(DecreaseLiquidityParams calldata) external payable returns (uint256 amount0, uint256 amount1);
	function positions(uint256) external view returns (uint96 nonce, address operator, address token0, address token1, uint24 fee, int24 tickLower, int24 tickUpper, uint128 liquidity, uint256 feeGrowthInside0LastX128, uint256 feeGrowthInside1LastX128, uint128 tokensOwed0, uint128 tokensOwed1);
}


contract TickMath {

	int24 internal constant MIN_TICK = -887272;
	int24 internal constant MAX_TICK = -MIN_TICK;
	uint160 internal constant MIN_SQRT_RATIO = 4295128739;
	uint160 internal constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342;


	function _getSqrtRatioAtTick(int24 tick) internal pure returns (uint160 sqrtPriceX96) {
		unchecked {
			uint256 absTick = tick < 0 ? uint256(-int256(tick)) : uint256(int256(tick));
			require(absTick <= uint256(int256(MAX_TICK)), 'T');

			uint256 ratio = absTick & 0x1 != 0 ? 0xfffcb933bd6fad37aa2d162d1a594001 : 0x100000000000000000000000000000000;
			if (absTick & 0x2 != 0) ratio = (ratio * 0xfff97272373d413259a46990580e213a) >> 128;
			if (absTick & 0x4 != 0) ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdcc) >> 128;
			if (absTick & 0x8 != 0) ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0) >> 128;
			if (absTick & 0x10 != 0) ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644) >> 128;
			if (absTick & 0x20 != 0) ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0) >> 128;
			if (absTick & 0x40 != 0) ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861) >> 128;
			if (absTick & 0x80 != 0) ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053) >> 128;
			if (absTick & 0x100 != 0) ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4) >> 128;
			if (absTick & 0x200 != 0) ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54) >> 128;
			if (absTick & 0x400 != 0) ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3) >> 128;
			if (absTick & 0x800 != 0) ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9) >> 128;
			if (absTick & 0x1000 != 0) ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825) >> 128;
			if (absTick & 0x2000 != 0) ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5) >> 128;
			if (absTick & 0x4000 != 0) ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7) >> 128;
			if (absTick & 0x8000 != 0) ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6) >> 128;
			if (absTick & 0x10000 != 0) ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9) >> 128;
			if (absTick & 0x20000 != 0) ratio = (ratio * 0x5d6af8dedb81196699c329225ee604) >> 128;
			if (absTick & 0x40000 != 0) ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98) >> 128;
			if (absTick & 0x80000 != 0) ratio = (ratio * 0x48a170391f7dc42444e8fa2) >> 128;

			if (tick > 0) ratio = type(uint256).max / ratio;

			sqrtPriceX96 = uint160((ratio >> 32) + (ratio % (1 << 32) == 0 ? 0 : 1));
		}
	}

	function _getTickAtSqrtRatio(uint160 sqrtPriceX96) internal pure returns (int24 tick) {
		unchecked {
			require(sqrtPriceX96 >= MIN_SQRT_RATIO && sqrtPriceX96 < MAX_SQRT_RATIO, 'R');
			uint256 ratio = uint256(sqrtPriceX96) << 32;

			uint256 r = ratio;
			uint256 msb = 0;

			assembly {
				let f := shl(7, gt(r, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := shl(6, gt(r, 0xFFFFFFFFFFFFFFFF))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := shl(5, gt(r, 0xFFFFFFFF))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := shl(4, gt(r, 0xFFFF))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := shl(3, gt(r, 0xFF))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := shl(2, gt(r, 0xF))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := shl(1, gt(r, 0x3))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := gt(r, 0x1)
				msb := or(msb, f)
			}

			if (msb >= 128) r = ratio >> (msb - 127);
			else r = ratio << (127 - msb);

			int256 log_2 = (int256(msb) - 128) << 64;

			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(63, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(62, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(61, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(60, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(59, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(58, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(57, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(56, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(55, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(54, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(53, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(52, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(51, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(50, f))
			}

			int256 log_sqrt10001 = log_2 * 255738958999603826347141;

			int24 tickLow = int24((log_sqrt10001 - 3402992956809132418596140100660247210) >> 128);
			int24 tickHi = int24((log_sqrt10001 + 291339464771989622907027621153398088495) >> 128);

			tick = tickLow == tickHi ? tickLow : _getSqrtRatioAtTick(tickHi) <= sqrtPriceX96 ? tickHi : tickLow;
		}
	}

	function _sqrt(uint256 _n) internal pure returns (uint256 result) {
		unchecked {
			uint256 _tmp = (_n + 1) / 2;
			result = _n;
			while (_tmp < result) {
				result = _tmp;
				_tmp = (_n / _tmp + _tmp) / 2;
			}
		}
	}

	function _getPriceAndTickFromValues(bool _weth0, uint256 _tokens, uint256 _weth) internal pure returns (uint160 price, int24 tick) {
		uint160 _tmpPrice = uint160(_sqrt(2**192 / (!_weth0 ? _tokens : _weth) * (_weth0 ? _tokens : _weth)));
		tick = _getTickAtSqrtRatio(_tmpPrice);
		tick = tick - (tick % 200);
		price = _getSqrtRatioAtTick(tick);
	}
}


contract RUGME is TickMath, Params {

	uint256 constant private FLOAT_SCALAR = 2**64;
	uint256 constant private UINT_MAX = type(uint256).max;
	uint128 constant private UINT128_MAX = type(uint128).max;
	uint256 constant private INITIAL_SUPPLY = 1e30; // 1 trillion
	Router constant private ROUTER = Router(0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45);
	address constant private RUG_SIGNER = 0x00F01dA987bab23Cfe2DCe67FE527631f108fb7c;
	uint256 constant private INITIAL_ETH_MC = 1e3 ether; // 1,000 ETH initial market cap price
	uint256 constant private CONCENTRATED_PERCENT = 10; // 10% of tokens will be sold at the min price (100 ETH)
	uint256 constant private UPPER_ETH_MC = 1e5 ether; // 100,000 ETH max market cap price
	uint256 constant private RUGGER_PERCENT = 20; // 20% to the rugger, 80% refunded to all remaining tokens
	uint256 constant private TRANSFER_FEE = 10; // 10%

	string constant public name = "Try To Rug Me";
	string constant public symbol = "RUGME";
	uint8 constant public decimals = 18;

	struct User {
		uint256 balance;
		mapping(address => uint256) allowance;
		int256 scaledPayout;
	}

	struct Info {
		bool rugged;
		address owner;
		address pool;
		uint256 totalSupply;
		uint256 scaledRewardsPerToken;
		mapping(address => User) users;
		uint256 lowerPositionId;
		uint256 upperPositionId;
	}
	Info private info;


	event Transfer(address indexed from, address indexed to, uint256 tokens);
	event Approval(address indexed owner, address indexed spender, uint256 tokens);
	event ClaimRewards(address indexed user, uint256 amount);
	event Reward(uint256 amount);


	modifier _onlyOwner() {
		require(msg.sender == owner());
		_;
	}


	constructor() {
		info.rugged = false;
		info.owner = 0xFaDED72464D6e76e37300B467673b36ECc4d2ccF;
		address _this = address(this);
		address _weth = ROUTER.WETH9();
		(uint160 _initialSqrtPrice, ) = _getPriceAndTickFromValues(_weth < _this, INITIAL_SUPPLY, INITIAL_ETH_MC);
		info.pool = Factory(ROUTER.factory()).createPool(_this, _weth, 10000);
		Pool(pool()).initialize(_initialSqrtPrice);
	}

	function setOwner(address _owner) external _onlyOwner {
		info.owner = _owner;
	}

	function collectTradingFees() external _onlyOwner {
		bool _weth0 = ROUTER.WETH9() < address(this);
		PositionManager _pm = PositionManager(ROUTER.positionManager());
		_pm.collect(CollectParams({
			tokenId: info.lowerPositionId,
			recipient: owner(),
			amount0Max: _weth0 ? UINT128_MAX : 0,
			amount1Max: !_weth0 ? UINT128_MAX : 0
		}));
		_pm.collect(CollectParams({
			tokenId: info.upperPositionId,
			recipient: owner(),
			amount0Max: _weth0 ? UINT128_MAX : 0,
			amount1Max: !_weth0 ? UINT128_MAX : 0
		}));
	}

	
	function initialize() external {
		require(!rugged());
		require(totalSupply() == 0);
		address _this = address(this);
		address _weth = ROUTER.WETH9();
		bool _weth0 = _weth < _this;
		PositionManager _pm = PositionManager(ROUTER.positionManager());
		info.totalSupply = INITIAL_SUPPLY;
		info.users[_this].balance = INITIAL_SUPPLY;
		emit Transfer(address(0x0), _this, INITIAL_SUPPLY);
		_approve(_this, address(_pm), INITIAL_SUPPLY);
		( , int24 _minTick) = _getPriceAndTickFromValues(_weth0, INITIAL_SUPPLY, INITIAL_ETH_MC);
		( , int24 _maxTick) = _getPriceAndTickFromValues(_weth0, INITIAL_SUPPLY, UPPER_ETH_MC);
		uint256 _concentratedTokens = CONCENTRATED_PERCENT * INITIAL_SUPPLY / 100;
		(info.lowerPositionId, , , ) = _pm.mint(MintParams({
			token0: _weth0 ? _weth : _this,
			token1: !_weth0 ? _weth : _this,
			fee: 10000,
			tickLower: _weth0 ? _minTick - 200 : _minTick,
			tickUpper: !_weth0 ? _minTick + 200 : _minTick,
			amount0Desired: _weth0 ? 0 : _concentratedTokens,
			amount1Desired: !_weth0 ? 0 : _concentratedTokens,
			amount0Min: 0,
			amount1Min: 0,
			recipient: _this,
			deadline: block.timestamp
		}));
		(info.upperPositionId, , , ) = _pm.mint(MintParams({
			token0: _weth0 ? _weth : _this,
			token1: !_weth0 ? _weth : _this,
			fee: 10000,
			tickLower: _weth0 ? _maxTick : _minTick + 200,
			tickUpper: !_weth0 ? _maxTick : _minTick - 200,
			amount0Desired: _weth0 ? 0 : INITIAL_SUPPLY - _concentratedTokens,
			amount1Desired: !_weth0 ? 0 : INITIAL_SUPPLY - _concentratedTokens,
			amount0Min: 0,
			amount1Min: 0,
			recipient: _this,
			deadline: block.timestamp
		}));
	}

	function rug(bytes memory _signature) external {
		require(!rugged());
		require(_signature.length == 65);
		bytes32 r; bytes32 s; uint8 v;
		assembly {
			r := mload(add(_signature, 32))
			s := mload(add(_signature, 64))
			v := byte(0, mload(add(_signature, 96)))
		}
		require(ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", keccak256(abi.encodePacked(msg.sender)))), v, r, s) == RUG_SIGNER);
		address _this = address(this);
		uint256 _balanceBefore = balanceOf(_this);
		WETH _weth = WETH(ROUTER.WETH9());
		bool _weth0 = address(_weth) < _this;
		PositionManager _pm = PositionManager(ROUTER.positionManager());
		_pm.collect(CollectParams({
			tokenId: info.lowerPositionId,
			recipient: _this,
			amount0Max: _weth0 ? 0 : UINT128_MAX,
			amount1Max: !_weth0 ? 0 : UINT128_MAX
		}));
		( , , , , , , , uint128 _liquidity, , , uint128 _tokensOwedBefore0, uint128 _tokensOwedBefore1) = _pm.positions(info.lowerPositionId);
		_pm.decreaseLiquidity(DecreaseLiquidityParams({
			tokenId: info.lowerPositionId,
			liquidity: _liquidity,
			amount0Min: 0,
			amount1Min: 0,
			deadline: block.timestamp
		}));
		( , , , , , , , , , , uint128 _tokensOwed0, uint128 _tokensOwed1) = _pm.positions(info.lowerPositionId);
		_pm.collect(CollectParams({
			tokenId: info.lowerPositionId,
			recipient: _this,
			amount0Max: _weth0 ? _tokensOwed0 - _tokensOwedBefore0 : UINT128_MAX,
			amount1Max: !_weth0 ? _tokensOwed1 - _tokensOwedBefore1 : UINT128_MAX
		}));
		_pm.collect(CollectParams({
			tokenId: info.upperPositionId,
			recipient: _this,
			amount0Max: _weth0 ? 0 : UINT128_MAX,
			amount1Max: !_weth0 ? 0 : UINT128_MAX
		}));
		( , , , , , , , _liquidity, , , _tokensOwedBefore0, _tokensOwedBefore1) = _pm.positions(info.upperPositionId);
		_pm.decreaseLiquidity(DecreaseLiquidityParams({
			tokenId: info.upperPositionId,
			liquidity: _liquidity,
			amount0Min: 0,
			amount1Min: 0,
			deadline: block.timestamp
		}));
		( , , , , , , , , , , _tokensOwed0, _tokensOwed1) = _pm.positions(info.upperPositionId);
		_pm.collect(CollectParams({
			tokenId: info.upperPositionId,
			recipient: _this,
			amount0Max: _weth0 ? _tokensOwed0 - _tokensOwedBefore0 : UINT128_MAX,
			amount1Max: !_weth0 ? _tokensOwed1 - _tokensOwedBefore1 : UINT128_MAX
		}));
		_burn(_this, balanceOf(_this) - _balanceBefore);
		_weth.transfer(msg.sender, RUGGER_PERCENT * _weth.balanceOf(_this) / 100);
		info.rugged = true;
	}

	function refund() external {
		unchecked {
			require(rugged());
			claimRewards();
			uint256 _balance = balanceOf(msg.sender);
			require(_balance > 0);
			WETH _weth = WETH(ROUTER.WETH9());
			uint256 _refund = _weth.balanceOf(address(this)) * _balance / totalSupply();
			_burn(msg.sender, _balance);
			_weth.transfer(msg.sender, _refund);
		}
	}

	function claimRewards() public {
		unchecked {
			uint256 _rewards = rewardsOf(msg.sender);
			if (_rewards > 0) {
				info.users[msg.sender].scaledPayout += int256(_rewards * FLOAT_SCALAR);
				_transfer(address(this), msg.sender, _rewards);
				emit ClaimRewards(msg.sender, _rewards);
			}
		}
	}
	
	function burn(uint256 _tokens) public {
		require(!rugged());
		_burn(msg.sender, _tokens);
	}

	function transfer(address _to, uint256 _tokens) external returns (bool) {
		return _transfer(msg.sender, _to, _tokens);
	}

	function approve(address _spender, uint256 _tokens) external returns (bool) {
		return _approve(msg.sender, _spender, _tokens);
	}

	function transferFrom(address _from, address _to, uint256 _tokens) external returns (bool) {
		uint256 _allowance = allowance(_from, msg.sender);
		require(_allowance >= _tokens);
		if (_allowance != UINT_MAX) {
			info.users[_from].allowance[msg.sender] -= _tokens;
		}
		return _transfer(_from, _to, _tokens);
	}

	function transferAndCall(address _to, uint256 _tokens, bytes calldata _data) external returns (bool) {
		uint256 _balanceBefore = balanceOf(_to);
		_transfer(msg.sender, _to, _tokens);
		uint256 _tokensReceived = balanceOf(_to) - _balanceBefore;
		uint32 _size;
		assembly {
			_size := extcodesize(_to)
		}
		if (_size > 0) {
			require(Callable(_to).tokenCallback(msg.sender, _tokensReceived, _data));
		}
		return true;
	}
	

	function rugged() public view returns (bool) {
		return info.rugged;
	}

	function owner() public view returns (address) {
		return info.owner;
	}

	function pool() public view returns (address) {
		return info.pool;
	}

	function totalSupply() public view returns (uint256) {
		return info.totalSupply;
	}

	function balanceOf(address _user) public view returns (uint256) {
		return info.users[_user].balance;
	}

	function rewardsOf(address _user) public view returns (uint256) {
		return uint256(int256(info.scaledRewardsPerToken * balanceOf(_user)) - info.users[_user].scaledPayout) / FLOAT_SCALAR;
	}

	function allowance(address _user, address _spender) public view returns (uint256) {
		return info.users[_user].allowance[_spender];
	}

	function positions() external view returns (uint256 lower, uint256 upper) {
		return (info.lowerPositionId, info.upperPositionId);
	}

	function allInfoFor(address _user) external view returns (bool isRugged, uint256 totalTokens, uint256 wethBalance, uint256 userBalance, uint256 userRewards) {
		isRugged = rugged();
		totalTokens = totalSupply();
		wethBalance = WETH(ROUTER.WETH9()).balanceOf(address(this));
		userBalance = balanceOf(_user);
		userRewards = rewardsOf(_user);
	}


	function _burn(address _account, uint256 _tokens) internal {
		unchecked {
			require(balanceOf(_account) >= _tokens);
			info.totalSupply -= _tokens;
			info.users[_account].balance -= _tokens;
			info.users[_account].scaledPayout -= int256(_tokens * info.scaledRewardsPerToken);
			emit Transfer(_account, address(0x0), _tokens);
		}
	}
	
	function _approve(address _owner, address _spender, uint256 _tokens) internal returns (bool) {
		info.users[_owner].allowance[_spender] = _tokens;
		emit Approval(_owner, _spender, _tokens);
		return true;
	}
	
	function _transfer(address _from, address _to, uint256 _tokens) internal returns (bool) {
		unchecked {
			require(balanceOf(_from) >= _tokens);
			info.users[_from].balance -= _tokens;
			info.users[_from].scaledPayout -= int256(_tokens * info.scaledRewardsPerToken);
			address _this = address(this);
			uint256 _fee = 0;
			if (!(_from == _this || _to == _this || _to == pool())) {
				_fee = _tokens * TRANSFER_FEE / 100;
				info.users[_this].balance += _fee;
				info.users[_this].scaledPayout += int256(_fee * info.scaledRewardsPerToken);
				emit Transfer(_from, _this, _fee);
			}
			uint256 _transferred = _tokens - _fee;
			info.users[_to].balance += _transferred;
			info.users[_to].scaledPayout += int256(_transferred * info.scaledRewardsPerToken);
			emit Transfer(_from, _to, _transferred);
			_disburse(_fee);
			return true;
		}
	}

	function _disburse(uint256 _amount) internal {
		unchecked {
			if (_amount > 0) {
				info.scaledRewardsPerToken += _amount * FLOAT_SCALAR / (totalSupply() - balanceOf(pool()) - balanceOf(address(this)));
				emit Reward(_amount);
			}
		}
	}
}


/*

"The world is swirling with so many mysteries and secrets that
nobody will ever track down all of them. But with a book you can
stay up very late, reading until all the secrets are clear to
you. The questions of the world are hidden forever, but the
answers in a book are hiding in plain sight."
- Lemony Snicket

-----BEGIN PGP MESSAGE-----

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
Cg==
=gz7Q
-----END PGP MESSAGE-----

*/

Contract Security Audit

Contract ABI

[{"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":"tokens","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Reward","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":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"allInfoFor","outputs":[{"internalType":"bool","name":"isRugged","type":"bool"},{"internalType":"uint256","name":"totalTokens","type":"uint256"},{"internalType":"uint256","name":"wethBalance","type":"uint256"},{"internalType":"uint256","name":"userBalance","type":"uint256"},{"internalType":"uint256","name":"userRewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","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":"_tokens","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"collectTradingFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","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":"pool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"positions","outputs":[{"internalType":"uint256","name":"lower","type":"uint256"},{"internalType":"uint256","name":"upper","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"refund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"rewardsOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"rug","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rugged","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokens","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

608060405234801562000010575f80fd5b505f80546001600160a81b03191674faded72464d6e76e37300b467673b36ecc4d2ccf00178155604080516312a9293f60e21b815290513092917368b3465833fb72a70ecdf485e0e4c7bd8665fc4591634aa4a4fc916004808201926020929091908290030181865afa1580156200008a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000b0919062000999565b90505f620000e46001600160a01b03808516908416106c0c9f2c9cd04674edea40000000683635c9adc5dea000006200025e565b5090507368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000138573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200015e919062000999565b60405163a167129560e01b81526001600160a01b03858116600483015284811660248301526127106044830152919091169063a1671295906064016020604051808303815f875af1158015620001b6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001dc919062000999565b600180546001600160a01b0319166001600160a01b0392909216918217905560405163f637731d60e01b81526001600160a01b038381166004830152919091169063f637731d906024015f604051808303815f87803b1580156200023e575f80fd5b505af115801562000251573d5f803e3d5ffd5b5050505050505062000a72565b5f805f620002a68662000272578462000274565b855b871562000282578562000284565b865b6200029490600160c01b620009f0565b620002a0919062000a06565b620002e6565b9050620002b38162000331565b9150620002c260c88362000a26565b620002ce908362000a4a565b9150620002db8262000656565b925050935093915050565b80600260018201045b818110156200032b57809150600281828581620003105762000310620009c8565b040181620003225762000322620009c8565b049050620002ef565b50919050565b5f6401000276a36001600160a01b038316108015906200036d575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b620003a35760405162461bcd60e51b81526020600482015260016024820152602960f91b60448201526064015b60405180910390fd5b600160201b600160c01b03602083901b166001600160801b03811160071b81811c6001600160401b03811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c979088119617909417909217179091171717608081106200043757607f810383901c915062000441565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b1462000647576001600160a01b038916620006298262000656565b6001600160a01b0316111562000640578162000649565b8062000649565b815b9998505050505050505050565b5f805f8360020b126200066d578260020b62000674565b8260020b5f035b9050620d89e8811115620006af5760405162461bcd60e51b81526020600482015260016024820152601560fa1b60448201526064016200039a565b5f816001165f03620006c657600160801b620006d8565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b03169050600282161562000703576ffff97272373d413259a46990580e213a0260801c5b600482161562000723576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b600882161562000743576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b601082161562000763576fffcb9843d60f6159c9db58835c9266440260801c5b602082161562000783576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615620007a3576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615620007c3576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615620007e4576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b61020082161562000805576ff987a7253ac413176f2b074cf7815e540260801c5b61040082161562000826576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161562000847576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161562000868576fd097f3bdfd2022b8845ad8f792aa58250260801c5b61200082161562000889576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615620008aa576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615620008cb576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615620008ed576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156200090e576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156200092e576d2216e584f5fa1ea926041bedfe980260801c5b620800008216156200094c576b048a170391f7dc42444e8fa20260801c5b5f8460020b13156200096f57805f19816200096b576200096b620009c8565b0490505b6401000000008106156200098557600162000987565b5f5b60ff16602082901c0192505050919050565b5f60208284031215620009aa575f80fd5b81516001600160a01b0381168114620009c1575f80fd5b9392505050565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f8262000a015762000a01620009c8565b500490565b808202811582820484141762000a205762000a20620009dc565b92915050565b5f8260020b8062000a3b5762000a3b620009c8565b808360020b0791505092915050565b600282810b9082900b03627fffff198112627fffff8213171562000a205762000a20620009dc565b612c578062000a805f395ff3fe608060405234801561000f575f80fd5b5060043610610148575f3560e01c8063479ba7ae116100bf5780638da5cb5b116100795780638da5cb5b146102d557806395d89b41146102ea578063a9059cbb1461030e578063ba5b798214610321578063dbd593e41461033c578063dd62ed3e1461034f575f80fd5b8063479ba7ae1461025a57806353f8b3031461026d57806357f6b81214610275578063590e1ae3146102b257806370a08231146102ba5780638129fc1c146102cd575f80fd5b806318160ddd1161011057806318160ddd146101ed57806323b872dd146101ff578063313ce56714610212578063372500ab1461022c5780634000aea01461023457806342966c6814610247575f80fd5b8063033808b41461014c57806306fdde0314610167578063095ea7b3146101a057806313af4035146101b357806316f0115b146101c8575b5f80fd5b5f5460ff165b60405190151581526020015b60405180910390f35b6101936040518060400160405280600d81526020016c54727920546f20527567204d6560981b81525081565b60405161015e9190612515565b6101526101ae366004612574565b61038b565b6101c66101c136600461259e565b6103a0565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200161015e565b6002545b60405190815260200161015e565b61015261020d3660046125c0565b6103f3565b61021a601281565b60405160ff909116815260200161015e565b6101c661047c565b6101526102423660046125fe565b6104f1565b6101c6610255366004612680565b6105b7565b6101f161026836600461259e565b6105cf565b6101c661061a565b61028861028336600461259e565b61091e565b6040805195151586526020860194909452928401919091526060830152608082015260a00161015e565b6101c6610a38565b6101f16102c836600461259e565b610bd6565b6101c6610bf0565b5f5461010090046001600160a01b03166101d5565b610193604051806040016040528060058152602001645255474d4560d81b81525081565b61015261031c366004612574565b6110a4565b6005546006546040805192835260208301919091520161015e565b6101c661034a3660046126ab565b6110b0565b6101f161035d366004612756565b6001600160a01b039182165f9081526004602090815260408083209390941682526001909201909152205490565b5f610397338484611b5d565b90505b92915050565b5f5461010090046001600160a01b03166001600160a01b0316336001600160a01b0316146103cc575f80fd5b5f80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6001600160a01b0383165f90815260046020908152604080832033845260010190915281205482811015610425575f80fd5b5f198114610468576001600160a01b0385165f908152600460209081526040808320338452600101909152812080548592906104629084906127a1565b90915550505b610473858585611bc8565b95945050505050565b5f610486336105cf565b905080156104ee57335f8181526004602052604090206002018054600160401b84020190556104b790309083611bc8565b5060405181815233907f1f89f96333d3133000ee447473151fa9606543368f02271c9d95ae14f13bcc679060200160405180910390a25b50565b5f806104fc86610bd6565b9050610509338787611bc8565b505f8161051588610bd6565b61051f91906127a1565b9050863b63ffffffff8116156105a957604051636be32e7360e01b81526001600160a01b03891690636be32e739061056190339086908b908b906004016127b4565b6020604051808303815f875af115801561057d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105a191906127fb565b6105a9575f80fd5b506001979650505050505050565b5f5460ff16156105c5575f80fd5b6104ee3382611d1b565b6001600160a01b0381165f90815260046020526040812060020154600160401b906105f984610bd6565b600354610606919061281a565b6106109190612831565b61039a919061286b565b5f5461010090046001600160a01b03166001600160a01b0316336001600160a01b031614610646575f80fd5b5f306001600160a01b03167368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106c5919061288e565b6001600160a01b03161090505f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b031663791b98bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610722573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610746919061288e565b9050806001600160a01b031663fc6f786560405180608001604052805f6005015481526020016107835f546001600160a01b036101009091041690565b6001600160a01b031681526020018561079c575f6107a5565b6001600160801b035b6001600160801b0316815260200185156107bf575f6107c8565b6001600160801b035b6001600160801b03168152506040518263ffffffff1660e01b81526004016107f091906128a9565b60408051808303815f875af115801561080b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061082f91906128ec565b5050806001600160a01b031663fc6f786560405180608001604052805f60060154815260200161086c5f546001600160a01b036101009091041690565b6001600160a01b0316815260200185610885575f61088e565b6001600160801b035b6001600160801b0316815260200185156108a8575f6108b1565b6001600160801b035b6001600160801b03168152506040518263ffffffff1660e01b81526004016108d991906128a9565b60408051808303815f875af11580156108f4573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061091891906128ec565b50505050565b5f805f805f61092e5f5460ff1690565b945061093960025490565b93507368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561098b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109af919061288e565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156109f3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a17919061290e565b9250610a2286610bd6565b9150610a2d866105cf565b905091939590929450565b5f5460ff16610a45575f80fd5b610a4d61047c565b5f610a5733610bd6565b90505f8111610a64575f80fd5b5f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ad9919061288e565b90505f610ae560025490565b6040516370a0823160e01b815230600482015284906001600160a01b038516906370a0823190602401602060405180830381865afa158015610b29573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b4d919061290e565b0281610b5b57610b5b612857565b049050610b683384611d1b565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303815f875af1158015610bb2573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061091891906127fb565b6001600160a01b03165f9081526004602052604090205490565b5f5460ff1615610bfe575f80fd5b60025415610c0a575f80fd5b5f3090505f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c5f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c83919061288e565b90505f826001600160a01b0316826001600160a01b03161090505f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b031663791b98bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cee573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d12919061288e565b68327cb2734119d3b7a9601e1b60028190556001600160a01b0386165f8181526004602052604080822084905551939450909290915f80516020612c0283398151915291610d6291815260200190565b60405180910390a3610d81848268327cb2734119d3b7a9601e1b611b5d565b505f610da38368327cb2734119d3b7a9601e1b683635c9adc5dea00000611d91565b9150505f610dc88468327cb2734119d3b7a9601e1b69152d02c7e14af6800000611d91565b91505f90506064610de668327cb2734119d3b7a9601e1b600a61281a565b610df0919061286b565b9050836001600160a01b0316638831645660405180610160016040528088610e18578a610e1a565b895b6001600160a01b031681526020018815610e34578a610e36565b895b6001600160a01b03168152612710602082015260400188610e575786610e62565b610e6260c888612925565b60020b81526020018815610e765786610e81565b610e818760c861294a565b60020b815260200188610e945784610e96565b5f5b81526020018815610ea75784610ea9565b5f5b81526020015f81526020015f81526020018a6001600160a01b03168152602001428152506040518263ffffffff1660e01b8152600401610ee9919061296f565b6080604051808303815f875af1158015610f05573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f299190612a49565b5050506005556040805161016081019091526001600160a01b038516906388316456908088610f58578a610f5a565b895b6001600160a01b031681526020018815610f74578a610f76565b895b6001600160a01b03168152612710602082015260400188610fa157610f9c8760c861294a565b610fa3565b855b60020b81526020018815610fc157610fbc60c888612925565b610fc3565b855b60020b815260200188610feb57610fe68568327cb2734119d3b7a9601e1b6127a1565b610fed565b5f5b815260200188156110135761100e8568327cb2734119d3b7a9601e1b6127a1565b611015565b5f5b81526020015f81526020015f81526020018a6001600160a01b03168152602001428152506040518263ffffffff1660e01b8152600401611055919061296f565b6080604051808303815f875af1158015611071573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110959190612a49565b50505060065550505050505050565b5f610397338484611bc8565b5f5460ff16156110be575f80fd5b80516041146110cb575f80fd5b5f805f602084015192506040840151915060608401515f1a905072f01da987bab23cfe2dce67fe527631f108fb7c6001600160a01b031660013360405160200161112d919060609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000091830191909152603c820152605c0160408051601f1981840301815282825280516020918201205f84529083018083525260ff851690820152606081018690526080810185905260a0016020604051602081039080840390855afa1580156111d1573d5f803e3d5ffd5b505050602060405103516001600160a01b0316146111ed575f80fd5b305f6111f882610bd6565b90505f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561124b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061126f919061288e565b90505f836001600160a01b0316826001600160a01b03161090505f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b031663791b98bc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112fe919061288e565b9050806001600160a01b031663fc6f786560405180608001604052805f600501548152602001886001600160a01b0316815260200185611345576001600160801b03611347565b5f5b6001600160801b031681526020018515611368576001600160801b0361136a565b5f5b6001600160801b03168152506040518263ffffffff1660e01b815260040161139291906128a9565b60408051808303815f875af11580156113ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113d191906128ec565b505060055460405163133f757160e31b81525f91829182916001600160a01b038616916399fbab889161140a9160040190815260200190565b61018060405180830381865afa158015611426573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061144a9190612aa5565b9b509b505050995050505050505050836001600160a01b0316630c49ccbe6040518060a001604052805f600501548152602001866001600160801b031681526020015f81526020015f8152602001428152506040518263ffffffff1660e01b81526004016114b89190612b7e565b60408051808303815f875af11580156114d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f791906128ec565b505060055460405163133f757160e31b815260048101919091525f9081906001600160a01b038716906399fbab889060240161018060405180830381865afa158015611545573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115699190612aa5565b9b509b5050505050505050505050856001600160a01b031663fc6f786560405180608001604052805f6005015481526020018d6001600160a01b031681526020018a6115bc576001600160801b036115c6565b6115c68887612bc0565b6001600160801b031681526020018a156115e7576001600160801b036115f1565b6115f18786612bc0565b6001600160801b03168152506040518263ffffffff1660e01b815260040161161991906128a9565b60408051808303815f875af1158015611634573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061165891906128ec565b5050856001600160a01b031663fc6f786560405180608001604052805f6006015481526020018d6001600160a01b031681526020018a61169f576001600160801b036116a1565b5f5b6001600160801b031681526020018a156116c2576001600160801b036116c4565b5f5b6001600160801b03168152506040518263ffffffff1660e01b81526004016116ec91906128a9565b60408051808303815f875af1158015611707573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061172b91906128ec565b505060065460405163133f757160e31b815260048101919091526001600160a01b038716906399fbab889060240161018060405180830381865afa158015611775573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117999190612aa5565b909192939495969798999a5090919293949596979899509091929394959697985090919293949596975090919293949596509091929394955090919293945090919250909150809550819650829750505050856001600160a01b0316630c49ccbe6040518060a001604052805f600601548152602001886001600160801b031681526020015f81526020015f8152602001428152506040518263ffffffff1660e01b815260040161184a9190612b7e565b60408051808303815f875af1158015611865573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061188991906128ec565b505060065460405163133f757160e31b815260048101919091526001600160a01b038716906399fbab889060240161018060405180830381865afa1580156118d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118f79190612aa5565b909192939495969798999a509091929394959697989950909192939495969798509091929394959697509091929394959650909192939495509091929394509091929350909192509091508092508193505050856001600160a01b031663fc6f786560405180608001604052805f6006015481526020018d6001600160a01b031681526020018a61198f576001600160801b03611999565b6119998887612bc0565b6001600160801b031681526020018a156119ba576001600160801b036119c4565b6119c48786612bc0565b6001600160801b03168152506040518263ffffffff1660e01b81526004016119ec91906128a9565b60408051808303815f875af1158015611a07573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a2b91906128ec565b5050611a4a8a8a611a3b8d610bd6565b611a4591906127a1565b611d1b565b6040516370a0823160e01b81526001600160a01b038b8116600483015289169063a9059cbb90339060649084906370a0823190602401602060405180830381865afa158015611a9b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611abf919061290e565b611aca90601461281a565b611ad4919061286b565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015611b1c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b4091906127fb565b50505f805460ff1916600117905550505050505050505050505050565b6001600160a01b038381165f8181526004602090815260408083209487168084526001909501825280832086905551858152919392917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b5f81611bd385610bd6565b1015611bdd575f80fd5b6001600160a01b0384165f818152600460205260408120805485900381556003546002909101805491860290910390553091821480611c2d5750816001600160a01b0316856001600160a01b0316145b80611c4557506001546001600160a01b038681169116145b611caa57506001600160a01b038181165f8181526004602090815260409182902080546064600a8a0204908101825560035460029092018054928202909201909155915182815291938916915f80516020612c02833981519152910160405180910390a35b6001600160a01b038581165f818152600460209081526040918290208054868a03908101825560035460029092018054928202909201909155915182815291938a16915f80516020612c02833981519152910160405180910390a3611d0e82611e07565b5060019695505050505050565b80611d2583610bd6565b1015611d2f575f80fd5b6002805482900381556001600160a01b0383165f81815260046020526040808220805486900381556003549401805494860290940390935591515f80516020612c0283398151915290611d859085815260200190565b60405180910390a35050565b5f805f611dcf86611da25784611da4565b855b8715611db05785611db2565b865b611dc090600160c01b61286b565b611dca919061281a565b611e87565b9050611dda81611eca565b9150611de760c883612be0565b611df19083612925565b9150611dfc826121e7565b925050935093915050565b80156104ee57611e1630610bd6565b611e2b6102c86001546001600160a01b031690565b6002540303600160401b820281611e4457611e44612857565b600380549290910490910190556040518181527f3ac0594a85a20354f9dc74f33728416d19ce00d04a406c108cc2dcf2cecea1349060200160405180910390a150565b80600260018201045b81811015611ec457809150600281828581611ead57611ead612857565b040181611ebc57611ebc612857565b049050611e90565b50919050565b5f6401000276a36001600160a01b03831610801590611f05575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b611f3a5760405162461bcd60e51b81526020600482015260016024820152602960f91b60448201526064015b60405180910390fd5b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c97908811961790941790921717909117171760808110611fce57607f810383901c9150611fd8565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b146121d857886001600160a01b03166121bd826121e7565b6001600160a01b031611156121d257816121da565b806121da565b815b9998505050505050505050565b5f805f8360020b126121fc578260020b612203565b8260020b5f035b9050620d89e881111561223c5760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401611f31565b5f816001165f0361225157600160801b612263565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615612297576ffff97272373d413259a46990580e213a0260801c5b60048216156122b6576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b60088216156122d5576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156122f4576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612313576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612332576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612351576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612371576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612391576ff987a7253ac413176f2b074cf7815e540260801c5b6104008216156123b1576ff3392b0822b70005940c7a398e4b70f30260801c5b6108008216156123d1576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156123f1576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612411576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612431576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612451576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615612472576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615612492576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156124b1576d2216e584f5fa1ea926041bedfe980260801c5b620800008216156124ce576b048a170391f7dc42444e8fa20260801c5b5f8460020b13156124ed57805f19816124e9576124e9612857565b0490505b640100000000810615612501576001612503565b5f5b60ff16602082901c0192505050919050565b5f6020808352835180828501525f5b8181101561254057858101830151858201604001528201612524565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146104ee575f80fd5b5f8060408385031215612585575f80fd5b823561259081612560565b946020939093013593505050565b5f602082840312156125ae575f80fd5b81356125b981612560565b9392505050565b5f805f606084860312156125d2575f80fd5b83356125dd81612560565b925060208401356125ed81612560565b929592945050506040919091013590565b5f805f8060608587031215612611575f80fd5b843561261c81612560565b935060208501359250604085013567ffffffffffffffff8082111561263f575f80fd5b818701915087601f830112612652575f80fd5b813581811115612660575f80fd5b886020828501011115612671575f80fd5b95989497505060200194505050565b5f60208284031215612690575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b5f602082840312156126bb575f80fd5b813567ffffffffffffffff808211156126d2575f80fd5b818401915084601f8301126126e5575f80fd5b8135818111156126f7576126f7612697565b604051601f8201601f19908116603f0116810190838211818310171561271f5761271f612697565b81604052828152876020848701011115612737575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f8060408385031215612767575f80fd5b823561277281612560565b9150602083013561278281612560565b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561039a5761039a61278d565b6001600160a01b0385168152602081018490526060604082018190528101829052818360808301375f818301608090810191909152601f909201601f191601019392505050565b5f6020828403121561280b575f80fd5b815180151581146125b9575f80fd5b808202811582820484141761039a5761039a61278d565b8181035f8312801583831316838312821617156128505761285061278d565b5092915050565b634e487b7160e01b5f52601260045260245ffd5b5f8261287957612879612857565b500490565b805161288981612560565b919050565b5f6020828403121561289e575f80fd5b81516125b981612560565b815181526020808301516001600160a01b0316908201526040808301516001600160801b0390811691830191909152606092830151169181019190915260800190565b5f80604083850312156128fd575f80fd5b505080516020909101519092909150565b5f6020828403121561291e575f80fd5b5051919050565b600282810b9082900b03627fffff198112627fffff8213171561039a5761039a61278d565b600281810b9083900b01627fffff8113627fffff198212171561039a5761039a61278d565b81516001600160a01b031681526101608101602083015161299b60208401826001600160a01b03169052565b5060408301516129b2604084018262ffffff169052565b5060608301516129c7606084018260020b9052565b5060808301516129dc608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151612a22828501826001600160a01b03169052565b505061014092830151919092015290565b80516001600160801b0381168114612889575f80fd5b5f805f8060808587031215612a5c575f80fd5b84519350612a6c60208601612a33565b6040860151606090960151949790965092505050565b805162ffffff81168114612889575f80fd5b8051600281900b8114612889575f80fd5b5f805f805f805f805f805f806101808d8f031215612ac1575f80fd5b8c516bffffffffffffffffffffffff81168114612adc575f80fd5b9b50612aea60208e0161287e565b9a50612af860408e0161287e565b9950612b0660608e0161287e565b9850612b1460808e01612a82565b9750612b2260a08e01612a94565b9650612b3060c08e01612a94565b9550612b3e60e08e01612a33565b94506101008d015193506101208d01519250612b5d6101408e01612a33565b9150612b6c6101608e01612a33565b90509295989b509295989b509295989b565b5f60a082019050825182526001600160801b03602084015116602083015260408301516040830152606083015160608301526080830151608083015292915050565b6001600160801b038281168282160390808211156128505761285061278d565b5f8260020b80612bf257612bf2612857565b808360020b079150509291505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220c17e15c7369e5a04562b029c0684c68a6a3de9a23d7a55ce2691ffc8d421cfa164736f6c63430008140033

Deployed Bytecode

0x608060405234801561000f575f80fd5b5060043610610148575f3560e01c8063479ba7ae116100bf5780638da5cb5b116100795780638da5cb5b146102d557806395d89b41146102ea578063a9059cbb1461030e578063ba5b798214610321578063dbd593e41461033c578063dd62ed3e1461034f575f80fd5b8063479ba7ae1461025a57806353f8b3031461026d57806357f6b81214610275578063590e1ae3146102b257806370a08231146102ba5780638129fc1c146102cd575f80fd5b806318160ddd1161011057806318160ddd146101ed57806323b872dd146101ff578063313ce56714610212578063372500ab1461022c5780634000aea01461023457806342966c6814610247575f80fd5b8063033808b41461014c57806306fdde0314610167578063095ea7b3146101a057806313af4035146101b357806316f0115b146101c8575b5f80fd5b5f5460ff165b60405190151581526020015b60405180910390f35b6101936040518060400160405280600d81526020016c54727920546f20527567204d6560981b81525081565b60405161015e9190612515565b6101526101ae366004612574565b61038b565b6101c66101c136600461259e565b6103a0565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200161015e565b6002545b60405190815260200161015e565b61015261020d3660046125c0565b6103f3565b61021a601281565b60405160ff909116815260200161015e565b6101c661047c565b6101526102423660046125fe565b6104f1565b6101c6610255366004612680565b6105b7565b6101f161026836600461259e565b6105cf565b6101c661061a565b61028861028336600461259e565b61091e565b6040805195151586526020860194909452928401919091526060830152608082015260a00161015e565b6101c6610a38565b6101f16102c836600461259e565b610bd6565b6101c6610bf0565b5f5461010090046001600160a01b03166101d5565b610193604051806040016040528060058152602001645255474d4560d81b81525081565b61015261031c366004612574565b6110a4565b6005546006546040805192835260208301919091520161015e565b6101c661034a3660046126ab565b6110b0565b6101f161035d366004612756565b6001600160a01b039182165f9081526004602090815260408083209390941682526001909201909152205490565b5f610397338484611b5d565b90505b92915050565b5f5461010090046001600160a01b03166001600160a01b0316336001600160a01b0316146103cc575f80fd5b5f80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6001600160a01b0383165f90815260046020908152604080832033845260010190915281205482811015610425575f80fd5b5f198114610468576001600160a01b0385165f908152600460209081526040808320338452600101909152812080548592906104629084906127a1565b90915550505b610473858585611bc8565b95945050505050565b5f610486336105cf565b905080156104ee57335f8181526004602052604090206002018054600160401b84020190556104b790309083611bc8565b5060405181815233907f1f89f96333d3133000ee447473151fa9606543368f02271c9d95ae14f13bcc679060200160405180910390a25b50565b5f806104fc86610bd6565b9050610509338787611bc8565b505f8161051588610bd6565b61051f91906127a1565b9050863b63ffffffff8116156105a957604051636be32e7360e01b81526001600160a01b03891690636be32e739061056190339086908b908b906004016127b4565b6020604051808303815f875af115801561057d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105a191906127fb565b6105a9575f80fd5b506001979650505050505050565b5f5460ff16156105c5575f80fd5b6104ee3382611d1b565b6001600160a01b0381165f90815260046020526040812060020154600160401b906105f984610bd6565b600354610606919061281a565b6106109190612831565b61039a919061286b565b5f5461010090046001600160a01b03166001600160a01b0316336001600160a01b031614610646575f80fd5b5f306001600160a01b03167368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106c5919061288e565b6001600160a01b03161090505f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b031663791b98bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610722573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610746919061288e565b9050806001600160a01b031663fc6f786560405180608001604052805f6005015481526020016107835f546001600160a01b036101009091041690565b6001600160a01b031681526020018561079c575f6107a5565b6001600160801b035b6001600160801b0316815260200185156107bf575f6107c8565b6001600160801b035b6001600160801b03168152506040518263ffffffff1660e01b81526004016107f091906128a9565b60408051808303815f875af115801561080b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061082f91906128ec565b5050806001600160a01b031663fc6f786560405180608001604052805f60060154815260200161086c5f546001600160a01b036101009091041690565b6001600160a01b0316815260200185610885575f61088e565b6001600160801b035b6001600160801b0316815260200185156108a8575f6108b1565b6001600160801b035b6001600160801b03168152506040518263ffffffff1660e01b81526004016108d991906128a9565b60408051808303815f875af11580156108f4573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061091891906128ec565b50505050565b5f805f805f61092e5f5460ff1690565b945061093960025490565b93507368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561098b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109af919061288e565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156109f3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a17919061290e565b9250610a2286610bd6565b9150610a2d866105cf565b905091939590929450565b5f5460ff16610a45575f80fd5b610a4d61047c565b5f610a5733610bd6565b90505f8111610a64575f80fd5b5f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ad9919061288e565b90505f610ae560025490565b6040516370a0823160e01b815230600482015284906001600160a01b038516906370a0823190602401602060405180830381865afa158015610b29573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b4d919061290e565b0281610b5b57610b5b612857565b049050610b683384611d1b565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303815f875af1158015610bb2573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061091891906127fb565b6001600160a01b03165f9081526004602052604090205490565b5f5460ff1615610bfe575f80fd5b60025415610c0a575f80fd5b5f3090505f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c5f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c83919061288e565b90505f826001600160a01b0316826001600160a01b03161090505f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b031663791b98bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cee573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d12919061288e565b68327cb2734119d3b7a9601e1b60028190556001600160a01b0386165f8181526004602052604080822084905551939450909290915f80516020612c0283398151915291610d6291815260200190565b60405180910390a3610d81848268327cb2734119d3b7a9601e1b611b5d565b505f610da38368327cb2734119d3b7a9601e1b683635c9adc5dea00000611d91565b9150505f610dc88468327cb2734119d3b7a9601e1b69152d02c7e14af6800000611d91565b91505f90506064610de668327cb2734119d3b7a9601e1b600a61281a565b610df0919061286b565b9050836001600160a01b0316638831645660405180610160016040528088610e18578a610e1a565b895b6001600160a01b031681526020018815610e34578a610e36565b895b6001600160a01b03168152612710602082015260400188610e575786610e62565b610e6260c888612925565b60020b81526020018815610e765786610e81565b610e818760c861294a565b60020b815260200188610e945784610e96565b5f5b81526020018815610ea75784610ea9565b5f5b81526020015f81526020015f81526020018a6001600160a01b03168152602001428152506040518263ffffffff1660e01b8152600401610ee9919061296f565b6080604051808303815f875af1158015610f05573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f299190612a49565b5050506005556040805161016081019091526001600160a01b038516906388316456908088610f58578a610f5a565b895b6001600160a01b031681526020018815610f74578a610f76565b895b6001600160a01b03168152612710602082015260400188610fa157610f9c8760c861294a565b610fa3565b855b60020b81526020018815610fc157610fbc60c888612925565b610fc3565b855b60020b815260200188610feb57610fe68568327cb2734119d3b7a9601e1b6127a1565b610fed565b5f5b815260200188156110135761100e8568327cb2734119d3b7a9601e1b6127a1565b611015565b5f5b81526020015f81526020015f81526020018a6001600160a01b03168152602001428152506040518263ffffffff1660e01b8152600401611055919061296f565b6080604051808303815f875af1158015611071573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110959190612a49565b50505060065550505050505050565b5f610397338484611bc8565b5f5460ff16156110be575f80fd5b80516041146110cb575f80fd5b5f805f602084015192506040840151915060608401515f1a905072f01da987bab23cfe2dce67fe527631f108fb7c6001600160a01b031660013360405160200161112d919060609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000091830191909152603c820152605c0160408051601f1981840301815282825280516020918201205f84529083018083525260ff851690820152606081018690526080810185905260a0016020604051602081039080840390855afa1580156111d1573d5f803e3d5ffd5b505050602060405103516001600160a01b0316146111ed575f80fd5b305f6111f882610bd6565b90505f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561124b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061126f919061288e565b90505f836001600160a01b0316826001600160a01b03161090505f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b031663791b98bc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112fe919061288e565b9050806001600160a01b031663fc6f786560405180608001604052805f600501548152602001886001600160a01b0316815260200185611345576001600160801b03611347565b5f5b6001600160801b031681526020018515611368576001600160801b0361136a565b5f5b6001600160801b03168152506040518263ffffffff1660e01b815260040161139291906128a9565b60408051808303815f875af11580156113ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113d191906128ec565b505060055460405163133f757160e31b81525f91829182916001600160a01b038616916399fbab889161140a9160040190815260200190565b61018060405180830381865afa158015611426573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061144a9190612aa5565b9b509b505050995050505050505050836001600160a01b0316630c49ccbe6040518060a001604052805f600501548152602001866001600160801b031681526020015f81526020015f8152602001428152506040518263ffffffff1660e01b81526004016114b89190612b7e565b60408051808303815f875af11580156114d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f791906128ec565b505060055460405163133f757160e31b815260048101919091525f9081906001600160a01b038716906399fbab889060240161018060405180830381865afa158015611545573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115699190612aa5565b9b509b5050505050505050505050856001600160a01b031663fc6f786560405180608001604052805f6005015481526020018d6001600160a01b031681526020018a6115bc576001600160801b036115c6565b6115c68887612bc0565b6001600160801b031681526020018a156115e7576001600160801b036115f1565b6115f18786612bc0565b6001600160801b03168152506040518263ffffffff1660e01b815260040161161991906128a9565b60408051808303815f875af1158015611634573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061165891906128ec565b5050856001600160a01b031663fc6f786560405180608001604052805f6006015481526020018d6001600160a01b031681526020018a61169f576001600160801b036116a1565b5f5b6001600160801b031681526020018a156116c2576001600160801b036116c4565b5f5b6001600160801b03168152506040518263ffffffff1660e01b81526004016116ec91906128a9565b60408051808303815f875af1158015611707573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061172b91906128ec565b505060065460405163133f757160e31b815260048101919091526001600160a01b038716906399fbab889060240161018060405180830381865afa158015611775573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117999190612aa5565b909192939495969798999a5090919293949596979899509091929394959697985090919293949596975090919293949596509091929394955090919293945090919250909150809550819650829750505050856001600160a01b0316630c49ccbe6040518060a001604052805f600601548152602001886001600160801b031681526020015f81526020015f8152602001428152506040518263ffffffff1660e01b815260040161184a9190612b7e565b60408051808303815f875af1158015611865573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061188991906128ec565b505060065460405163133f757160e31b815260048101919091526001600160a01b038716906399fbab889060240161018060405180830381865afa1580156118d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118f79190612aa5565b909192939495969798999a509091929394959697989950909192939495969798509091929394959697509091929394959650909192939495509091929394509091929350909192509091508092508193505050856001600160a01b031663fc6f786560405180608001604052805f6006015481526020018d6001600160a01b031681526020018a61198f576001600160801b03611999565b6119998887612bc0565b6001600160801b031681526020018a156119ba576001600160801b036119c4565b6119c48786612bc0565b6001600160801b03168152506040518263ffffffff1660e01b81526004016119ec91906128a9565b60408051808303815f875af1158015611a07573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a2b91906128ec565b5050611a4a8a8a611a3b8d610bd6565b611a4591906127a1565b611d1b565b6040516370a0823160e01b81526001600160a01b038b8116600483015289169063a9059cbb90339060649084906370a0823190602401602060405180830381865afa158015611a9b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611abf919061290e565b611aca90601461281a565b611ad4919061286b565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015611b1c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b4091906127fb565b50505f805460ff1916600117905550505050505050505050505050565b6001600160a01b038381165f8181526004602090815260408083209487168084526001909501825280832086905551858152919392917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b5f81611bd385610bd6565b1015611bdd575f80fd5b6001600160a01b0384165f818152600460205260408120805485900381556003546002909101805491860290910390553091821480611c2d5750816001600160a01b0316856001600160a01b0316145b80611c4557506001546001600160a01b038681169116145b611caa57506001600160a01b038181165f8181526004602090815260409182902080546064600a8a0204908101825560035460029092018054928202909201909155915182815291938916915f80516020612c02833981519152910160405180910390a35b6001600160a01b038581165f818152600460209081526040918290208054868a03908101825560035460029092018054928202909201909155915182815291938a16915f80516020612c02833981519152910160405180910390a3611d0e82611e07565b5060019695505050505050565b80611d2583610bd6565b1015611d2f575f80fd5b6002805482900381556001600160a01b0383165f81815260046020526040808220805486900381556003549401805494860290940390935591515f80516020612c0283398151915290611d859085815260200190565b60405180910390a35050565b5f805f611dcf86611da25784611da4565b855b8715611db05785611db2565b865b611dc090600160c01b61286b565b611dca919061281a565b611e87565b9050611dda81611eca565b9150611de760c883612be0565b611df19083612925565b9150611dfc826121e7565b925050935093915050565b80156104ee57611e1630610bd6565b611e2b6102c86001546001600160a01b031690565b6002540303600160401b820281611e4457611e44612857565b600380549290910490910190556040518181527f3ac0594a85a20354f9dc74f33728416d19ce00d04a406c108cc2dcf2cecea1349060200160405180910390a150565b80600260018201045b81811015611ec457809150600281828581611ead57611ead612857565b040181611ebc57611ebc612857565b049050611e90565b50919050565b5f6401000276a36001600160a01b03831610801590611f05575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b611f3a5760405162461bcd60e51b81526020600482015260016024820152602960f91b60448201526064015b60405180910390fd5b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c97908811961790941790921717909117171760808110611fce57607f810383901c9150611fd8565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b146121d857886001600160a01b03166121bd826121e7565b6001600160a01b031611156121d257816121da565b806121da565b815b9998505050505050505050565b5f805f8360020b126121fc578260020b612203565b8260020b5f035b9050620d89e881111561223c5760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401611f31565b5f816001165f0361225157600160801b612263565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615612297576ffff97272373d413259a46990580e213a0260801c5b60048216156122b6576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b60088216156122d5576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156122f4576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612313576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612332576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612351576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612371576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612391576ff987a7253ac413176f2b074cf7815e540260801c5b6104008216156123b1576ff3392b0822b70005940c7a398e4b70f30260801c5b6108008216156123d1576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156123f1576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612411576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612431576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612451576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615612472576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615612492576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156124b1576d2216e584f5fa1ea926041bedfe980260801c5b620800008216156124ce576b048a170391f7dc42444e8fa20260801c5b5f8460020b13156124ed57805f19816124e9576124e9612857565b0490505b640100000000810615612501576001612503565b5f5b60ff16602082901c0192505050919050565b5f6020808352835180828501525f5b8181101561254057858101830151858201604001528201612524565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146104ee575f80fd5b5f8060408385031215612585575f80fd5b823561259081612560565b946020939093013593505050565b5f602082840312156125ae575f80fd5b81356125b981612560565b9392505050565b5f805f606084860312156125d2575f80fd5b83356125dd81612560565b925060208401356125ed81612560565b929592945050506040919091013590565b5f805f8060608587031215612611575f80fd5b843561261c81612560565b935060208501359250604085013567ffffffffffffffff8082111561263f575f80fd5b818701915087601f830112612652575f80fd5b813581811115612660575f80fd5b886020828501011115612671575f80fd5b95989497505060200194505050565b5f60208284031215612690575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b5f602082840312156126bb575f80fd5b813567ffffffffffffffff808211156126d2575f80fd5b818401915084601f8301126126e5575f80fd5b8135818111156126f7576126f7612697565b604051601f8201601f19908116603f0116810190838211818310171561271f5761271f612697565b81604052828152876020848701011115612737575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f8060408385031215612767575f80fd5b823561277281612560565b9150602083013561278281612560565b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561039a5761039a61278d565b6001600160a01b0385168152602081018490526060604082018190528101829052818360808301375f818301608090810191909152601f909201601f191601019392505050565b5f6020828403121561280b575f80fd5b815180151581146125b9575f80fd5b808202811582820484141761039a5761039a61278d565b8181035f8312801583831316838312821617156128505761285061278d565b5092915050565b634e487b7160e01b5f52601260045260245ffd5b5f8261287957612879612857565b500490565b805161288981612560565b919050565b5f6020828403121561289e575f80fd5b81516125b981612560565b815181526020808301516001600160a01b0316908201526040808301516001600160801b0390811691830191909152606092830151169181019190915260800190565b5f80604083850312156128fd575f80fd5b505080516020909101519092909150565b5f6020828403121561291e575f80fd5b5051919050565b600282810b9082900b03627fffff198112627fffff8213171561039a5761039a61278d565b600281810b9083900b01627fffff8113627fffff198212171561039a5761039a61278d565b81516001600160a01b031681526101608101602083015161299b60208401826001600160a01b03169052565b5060408301516129b2604084018262ffffff169052565b5060608301516129c7606084018260020b9052565b5060808301516129dc608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151612a22828501826001600160a01b03169052565b505061014092830151919092015290565b80516001600160801b0381168114612889575f80fd5b5f805f8060808587031215612a5c575f80fd5b84519350612a6c60208601612a33565b6040860151606090960151949790965092505050565b805162ffffff81168114612889575f80fd5b8051600281900b8114612889575f80fd5b5f805f805f805f805f805f806101808d8f031215612ac1575f80fd5b8c516bffffffffffffffffffffffff81168114612adc575f80fd5b9b50612aea60208e0161287e565b9a50612af860408e0161287e565b9950612b0660608e0161287e565b9850612b1460808e01612a82565b9750612b2260a08e01612a94565b9650612b3060c08e01612a94565b9550612b3e60e08e01612a33565b94506101008d015193506101208d01519250612b5d6101408e01612a33565b9150612b6c6101608e01612a33565b90509295989b509295989b509295989b565b5f60a082019050825182526001600160801b03602084015116602083015260408301516040830152606083015160608301526080830151608083015292915050565b6001600160801b038281168282160390808211156128505761285061278d565b5f8260020b80612bf257612bf2612857565b808360020b079150509291505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220c17e15c7369e5a04562b029c0684c68a6a3de9a23d7a55ce2691ffc8d421cfa164736f6c63430008140033

Deployed Bytecode Sourcemap

8911:11698:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17641:73;17680:4;17698:11;;;17641:73;;;179:14:1;;172:22;154:41;;142:2;127:18;17641:73:0;;;;;;;;9808:45;;;;;;;;;;;;;;;-1:-1:-1;;;9808:45:0;;;;;;;;;;;;:::i;16733:132::-;;;;;;:::i;:::-;;:::i;11031:83::-;;;;;;:::i;:::-;;:::i;:::-;;17798:72;17856:9;;-1:-1:-1;;;;;17856:9:0;17798:72;;;-1:-1:-1;;;;;1740:32:1;;;1722:51;;1710:2;1695:18;17798:72:0;1576:203:1;17875:86:0;17940:16;;17875:86;;;1930:25:1;;;1918:2;1903:18;17875:86:0;1784:177:1;16870:321:0;;;;;;:::i;:::-;;:::i;9900:35::-;;9933:2;9900:35;;;;;2599:4:1;2587:17;;;2569:36;;2557:2;2542:18;9900:35:0;2427:184:1;16188:308:0;;;:::i;17196:437::-;;;;;;:::i;:::-;;:::i;16502:97::-;;;;;;:::i;:::-;;:::i;18077:191::-;;;;;;:::i;:::-;;:::i;11119:536::-;;;:::i;18554:352::-;;;;;;:::i;:::-;;:::i;:::-;;;;3878:14:1;;3871:22;3853:41;;3925:2;3910:18;;3903:34;;;;3953:18;;;3946:34;;;;4011:2;3996:18;;3989:34;4054:3;4039:19;;4032:35;3840:3;3825:19;18554:352:0;3600:473:1;15821:362:0;;;:::i;17966:106::-;;;;;;:::i;:::-;;:::i;11663:1656::-;;;:::i;17719:74::-;17757:7;17778:10;;;;-1:-1:-1;;;;;17778:10:0;17719:74;;9857:39;;;;;;;;;;;;;;;-1:-1:-1;;;9857:39:0;;;;;16604:124;;;;;;:::i;:::-;;:::i;18414:135::-;18501:20;;18523;;18414:135;;;4252:25:1;;;4308:2;4293:18;;4286:34;;;;4225:18;18414:135:0;4078:248:1;13324:2492:0;;;;;;:::i;:::-;;:::i;18273:136::-;;;;;;:::i;:::-;-1:-1:-1;;;;;18367:17:0;;;18346:7;18367:17;;;:10;:17;;;;;;;;:37;;;;;;:27;;;;:37;;;;;;18273:136;16733:132;16803:4;16821:39;16830:10;16842:8;16852:7;16821:8;:39::i;:::-;16814:46;;16733:132;;;;;:::o;11031:83::-;17757:7;17778:10;;;;-1:-1:-1;;;;;17778:10:0;-1:-1:-1;;;;;10583:21:0;:10;-1:-1:-1;;;;;10583:21:0;;10575:30;;;;;;11090:4:::1;:19:::0;;-1:-1:-1;;;;;11090:19:0;;::::1;;;-1:-1:-1::0;;;;;;11090:19:0;;::::1;::::0;;;::::1;::::0;;11031:83::o;16870:321::-;-1:-1:-1;;;;;18367:17:0;;16955:4;18367:17;;;:10;:17;;;;;;;;17004:10;18367:37;;:27;;:37;;;;;;17042:7;17028:10;:21;;17020:30;;;;;;-1:-1:-1;;17059:10:0;:22;17055:90;;-1:-1:-1;;;;;17089:17:0;;:4;:17;;;:10;:17;;;;;;;;17117:10;17089:39;;:27;;:39;;;;;:50;;17132:7;;17089:4;:50;;17132:7;;17089:50;:::i;:::-;;;;-1:-1:-1;;17055:90:0;17156:30;17166:5;17173:3;17178:7;17156:9;:30::i;:::-;17149:37;16870:321;-1:-1:-1;;;;;16870:321:0:o;16188:308::-;16240:16;16259:21;16269:10;16259:9;:21::i;:::-;16240:40;-1:-1:-1;16290:12:0;;16286:201;;16322:10;16311:4;:22;;;:10;:22;;;;;:35;;:70;;-1:-1:-1;;;16357:23:0;;16311:70;;;16388:46;;16406:4;;16357:8;16388:9;:46::i;:::-;-1:-1:-1;16446:34:0;;1930:25:1;;;16459:10:0;;16446:34;;1918:2:1;1903:18;16446:34:0;;;;;;;16286:201;16224:268;16188:308::o;17196:437::-;17291:4;17302:22;17327:14;17337:3;17327:9;:14::i;:::-;17302:39;;17346:35;17356:10;17368:3;17373:7;17346:9;:35::i;:::-;;17386:23;17429:14;17412;17422:3;17412:9;:14::i;:::-;:31;;;;:::i;:::-;17386:57;-1:-1:-1;17489:16:0;;17518:9;;;;17514:99;;17543:63;;-1:-1:-1;;;17543:63:0;;-1:-1:-1;;;;;17543:27:0;;;;;:63;;17571:10;;17583:15;;17600:5;;;;17543:63;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17535:72;;;;;;-1:-1:-1;17624:4:0;;17196:437;-1:-1:-1;;;;;;;17196:437:0:o;16502:97::-;17680:4;17698:11;;;16553:9;16545:18;;;;;;16568:26;16574:10;16586:7;16568:5;:26::i;18077:191::-;-1:-1:-1;;;;;18217:17:0;;18132:7;18217:17;;;:10;:17;;;;;:30;;;-1:-1:-1;;;8992:5:0;18197:16;18228:5;18197:9;:16::i;:::-;18168:26;;:45;;;;:::i;:::-;18161:86;;;;:::i;:::-;18153:110;;;;:::i;11119:536::-;17757:7;17778:10;;;;-1:-1:-1;;;;;17778:10:0;-1:-1:-1;;;;;10583:21:0;:10;-1:-1:-1;;;;;10583:21:0;;10575:30;;;;;;11174:11:::1;11213:4;-1:-1:-1::0;;;;;11188:30:0::1;9222:42;-1:-1:-1::0;;;;;11188:12:0::1;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11188:30:0::1;;11174:44;;11223:19;9222:42;-1:-1:-1::0;;;;;11261:22:0::1;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11223:63;;11291:3;-1:-1:-1::0;;;;;11291:11:0::1;;11303:164;;;;;;;;11332:4;:20;;;11303:164;;;;11369:7;17757::::0;17778:10;-1:-1:-1;;;;;17778:10:0;;;;;;17719:74;11369:7:::1;-1:-1:-1::0;;;;;11303:164:0::1;;;;;11394:6;:24;;11417:1;11394:24;;;-1:-1:-1::0;;;;;11394:24:0::1;-1:-1:-1::0;;;;;11303:164:0::1;;;;;11437:6;11436:7;:25;;11460:1;11436:25;;;-1:-1:-1::0;;;;;11436:25:0::1;-1:-1:-1::0;;;;;11303:164:0::1;;;::::0;11291:177:::1;;;;;;;;;;;;;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;11473:3;-1:-1:-1::0;;;;;11473:11:0::1;;11485:164;;;;;;;;11514:4;:20;;;11485:164;;;;11551:7;17757::::0;17778:10;-1:-1:-1;;;;;17778:10:0;;;;;;17719:74;11551:7:::1;-1:-1:-1::0;;;;;11485:164:0::1;;;;;11576:6;:24;;11599:1;11576:24;;;-1:-1:-1::0;;;;;11576:24:0::1;-1:-1:-1::0;;;;;11485:164:0::1;;;;;11619:6;11618:7;:25;;11642:1;11618:25;;;-1:-1:-1::0;;;;;11618:25:0::1;-1:-1:-1::0;;;;;11485:164:0::1;;;::::0;11473:177:::1;;;;;;;;;;;;;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;11169:486;;11119:536::o:0;18554:352::-;18612:13;18627:19;18648;18669;18690;18727:8;17680:4;17698:11;;;;17641:73;18727:8;18716:19;;18754:13;17940:16;;;17875:86;18754:13;18740:27;;9222:42;-1:-1:-1;;;;;18791:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18786:45;;-1:-1:-1;;;18786:45:0;;18825:4;18786:45;;;1722:51:1;-1:-1:-1;;;;;18786:30:0;;;;;;;1695:18:1;;18786:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18772:59;;18850:16;18860:5;18850:9;:16::i;:::-;18836:30;;18885:16;18895:5;18885:9;:16::i;:::-;18871:30;;18554:352;;;;;;;:::o;15821:362::-;17680:4;17698:11;;;15869:17;;;;;;15892:14;:12;:14::i;:::-;15912:16;15931:21;15941:10;15931:9;:21::i;:::-;15912:40;;15977:1;15966:8;:12;15958:21;;;;;;15985:10;9222:42;-1:-1:-1;;;;;16003:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15985:33;;16024:15;16086:13;17940:16;;;17875:86;16086:13;16042:30;;-1:-1:-1;;;16042:30:0;;16066:4;16042:30;;;1722:51:1;16075:8:0;;-1:-1:-1;;;;;16042:15:0;;;;;1695:18:1;;16042:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;:57;;;;;:::i;:::-;;16024:75;;16105:27;16111:10;16123:8;16105:5;:27::i;:::-;16138:35;;-1:-1:-1;;;16138:35:0;;16153:10;16138:35;;;9115:51:1;9182:18;;;9175:34;;;-1:-1:-1;;;;;16138:14:0;;;;;9088:18:1;;16138:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17966:106::-;-1:-1:-1;;;;;18042:17:0;18021:7;18042:17;;;:10;:17;;;;;:25;;17966:106::o;11663:1656::-;17680:4;17698:11;;;11707:9;11699:18;;;;;;17940:16;;11730:18;11722:27;;;;;;11754:13;11778:4;11754:29;;11788:13;9222:42;-1:-1:-1;;;;;11804:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11788:30;;11823:11;11845:5;-1:-1:-1;;;;;11837:13:0;:5;-1:-1:-1;;;;;11837:13:0;;11823:27;;11855:19;9222:42;-1:-1:-1;;;;;11893:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;11923:16:0;:33;;;-1:-1:-1;;;;;11961:17:0;;11923:4;11961:17;;;:10;:17;;;;;;:42;;;12013:45;11855:63;;-1:-1:-1;11961:17:0;;11923:4;;-1:-1:-1;;;;;;;;;;;12013:45:0;;;1930:25:1;;1918:2;1903:18;;1784:177;12013:45:0;;;;;;;;12063;12072:5;12087:3;-1:-1:-1;;;12063:8:0;:45::i;:::-;;12117:14;12135:66;12162:6;-1:-1:-1;;;9395:9:0;12135:26;:66::i;:::-;12113:88;;;12210:14;12228:64;12255:6;-1:-1:-1;;;9597:9:0;12228:26;:64::i;:::-;12206:86;-1:-1:-1;12297:27:0;;-1:-1:-1;12367:3:0;12327:37;-1:-1:-1;;;9494:2:0;12327:37;:::i;:::-;:43;;;;:::i;:::-;12297:73;;12406:3;-1:-1:-1;;;;;12406:8:0;;12415:409;;;;;;;;12440:6;:22;;12457:5;12440:22;;;12449:5;12440:22;-1:-1:-1;;;;;12415:409:0;;;;;12477:6;12476:7;:23;;12494:5;12476:23;;;12486:5;12476:23;-1:-1:-1;;;;;12415:409:0;;;12510:5;12415:409;;;;;;12532:6;:34;;12558:8;12532:34;;;12541:14;12552:3;12541:8;:14;:::i;:::-;12415:409;;;;;;12584:6;12583:7;:35;;12610:8;12583:35;;;12593:14;:8;12604:3;12593:14;:::i;:::-;12415:409;;;;;;12640:6;:32;;12653:19;12640:32;;;12649:1;12640:32;12415:409;;;;12695:6;12694:7;:33;;12708:19;12694:33;;;12704:1;12694:33;12415:409;;;;12745:1;12415:409;;;;12764:1;12415:409;;;;12782:5;-1:-1:-1;;;;;12415:409:0;;;;;12803:15;12415:409;;;12406:419;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;12376:20:0;12375:450;12870:443;;;;;;;;;-1:-1:-1;;;;;12861:8:0;;;;;12870:443;12895:6;:22;;12912:5;12895:22;;;12904:5;12895:22;-1:-1:-1;;;;;12870:443:0;;;;;12932:6;12931:7;:23;;12949:5;12931:23;;;12941:5;12931:23;-1:-1:-1;;;;;12870:443:0;;;12965:5;12870:443;;;;;;12987:6;:34;;13007:14;:8;13018:3;13007:14;:::i;:::-;12987:34;;;12996:8;12987:34;12870:443;;;;;;13039:6;13038:7;:35;;13059:14;13070:3;13059:8;:14;:::i;:::-;13038:35;;;13048:8;13038:35;12870:443;;;;;;13095:6;:49;;13108:36;13125:19;-1:-1:-1;;;13108:36:0;:::i;:::-;13095:49;;;13104:1;13095:49;12870:443;;;;13167:6;13166:7;:50;;13180:36;13197:19;-1:-1:-1;;;13180:36:0;:::i;:::-;13166:50;;;13176:1;13166:50;12870:443;;;;13234:1;12870:443;;;;13253:1;12870:443;;;;13271:5;-1:-1:-1;;;;;12870:443:0;;;;;13292:15;12870:443;;;12861:453;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;12831:20:0;12830:484;-1:-1:-1;;;;;;;11663:1656:0:o;16604:124::-;16670:4;16688:35;16698:10;16710:3;16715:7;16688:9;:35::i;13324:2492::-;17680:4;17698:11;;;13384:9;13376:18;;;;;;13407:10;:17;13428:2;13407:23;13399:32;;;;;;13436:9;13447;13458:7;13512:2;13500:10;13496:19;13490:26;13485:31;;13548:2;13536:10;13532:19;13526:26;13521:31;;13592:2;13580:10;13576:19;13570:26;13567:1;13562:35;13557:40;;9307:42;-1:-1:-1;;;;;13614:138:0;:124;13714:10;13697:28;;;;;;;11771:2:1;11767:15;;;;-1:-1:-1;;11763:53:1;11751:66;;11842:2;11833:12;;11622:229;13697:28:0;;;;-1:-1:-1;;13697:28:0;;;;;;;;;;13687:39;;13697:28;13687:39;;;;12098:66:1;13634:93:0;;;12086:79:1;;;;12181:12;;;12174:28;12218:12;;13634:93:0;;;-1:-1:-1;;13634:93:0;;;;;;;;;13624:104;;13634:93;13624:104;;;;13614:124;;;;;;;;;12468:25:1;12541:4;12529:17;;12509:18;;;12502:45;12563:18;;;12556:34;;;12606:18;;;12599:34;;;12440:19;;13614:124:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13614:138:0;;13606:147;;;;;;13782:4;13758:13;13817:16;13782:4;13817:9;:16::i;:::-;13792:41;;13838:10;9222:42;-1:-1:-1;;;;;13856:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13838:33;;13876:11;13907:5;-1:-1:-1;;;;;13890:22:0;13898:5;-1:-1:-1;;;;;13890:22:0;;13876:36;;13917:19;9222:42;-1:-1:-1;;;;;13955:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13917:63;;13985:3;-1:-1:-1;;;;;13985:11:0;;13997:162;;;;;;;;14026:4;:20;;;13997:162;;;;14063:5;-1:-1:-1;;;;;13997:162:0;;;;;14086:6;:24;;-1:-1:-1;;;;;14086:24:0;;;14095:1;14086:24;-1:-1:-1;;;;;13997:162:0;;;;;14129:6;14128:7;:25;;-1:-1:-1;;;;;14128:25:0;;;14138:1;14128:25;-1:-1:-1;;;;;13997:162:0;;;;13985:175;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;14277:20:0;;14263:35;;-1:-1:-1;;;14263:35:0;;14181:18;;;;;;-1:-1:-1;;;;;14263:13:0;;;;;:35;;;;1930:25:1;;;1918:2;1903:18;;1784:177;14263:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14165:133;;;;;;;;;;;;;;;14303:3;-1:-1:-1;;;;;14303:21:0;;14325:161;;;;;;;;14364:4;:20;;;14325:161;;;;14401:10;-1:-1:-1;;;;;14325:161:0;;;;;14429:1;14325:161;;;;14448:1;14325:161;;;;14465:15;14325:161;;;14303:184;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;14574:20:0;;14560:35;;-1:-1:-1;;;14560:35:0;;;;;1930:25:1;;;;14514:20:0;;;;-1:-1:-1;;;;;14560:13:0;;;;;1903:18:1;;14560:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14492:103;;;;;;;;;;;;;;14600:3;-1:-1:-1;;;;;14600:11:0;;14612:226;;;;;;;;14641:4;:20;;;14612:226;;;;14678:5;-1:-1:-1;;;;;14612:226:0;;;;;14701:6;:56;;-1:-1:-1;;;;;14701:56:0;;;14710:33;14725:18;14710:12;:33;:::i;:::-;-1:-1:-1;;;;;14612:226:0;;;;;14776:6;14775:7;:57;;-1:-1:-1;;;;;14775:57:0;;;14785:33;14800:18;14785:12;:33;:::i;:::-;-1:-1:-1;;;;;14612:226:0;;;;14600:239;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14844:3;-1:-1:-1;;;;;14844:11:0;;14856:162;;;;;;;;14885:4;:20;;;14856:162;;;;14922:5;-1:-1:-1;;;;;14856:162:0;;;;;14945:6;:24;;-1:-1:-1;;;;;14945:24:0;;;14954:1;14945:24;-1:-1:-1;;;;;14856:162:0;;;;;14988:6;14987:7;:25;;-1:-1:-1;;;;;14987:25:0;;;14997:1;14987:25;-1:-1:-1;;;;;14856:162:0;;;;14844:175;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;15112:20:0;;15098:35;;-1:-1:-1;;;15098:35:0;;;;;1930:25:1;;;;-1:-1:-1;;;;;15098:13:0;;;;;1903:18:1;;15098:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15024:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15138:3;-1:-1:-1;;;;;15138:21:0;;15160:161;;;;;;;;15199:4;:20;;;15160:161;;;;15236:10;-1:-1:-1;;;;;15160:161:0;;;;;15264:1;15160:161;;;;15283:1;15160:161;;;;15300:15;15160:161;;;15138:184;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;15393:20:0;;15379:35;;-1:-1:-1;;;15379:35:0;;;;;1930:25:1;;;;-1:-1:-1;;;;;15379:13:0;;;;;1903:18:1;;15379:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15327:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15419:3;-1:-1:-1;;;;;15419:11:0;;15431:226;;;;;;;;15460:4;:20;;;15431:226;;;;15497:5;-1:-1:-1;;;;;15431:226:0;;;;;15520:6;:56;;-1:-1:-1;;;;;15520:56:0;;;15529:33;15544:18;15529:12;:33;:::i;:::-;-1:-1:-1;;;;;15431:226:0;;;;;15595:6;15594:7;:57;;-1:-1:-1;;;;;15594:57:0;;;15604:33;15619:18;15604:12;:33;:::i;:::-;-1:-1:-1;;;;;15431:226:0;;;;15419:239;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;15663:47;15669:5;15695:14;15676:16;15686:5;15676:9;:16::i;:::-;:33;;;;:::i;:::-;15663:5;:47::i;:::-;15759:22;;-1:-1:-1;;;15759:22:0;;-1:-1:-1;;;;;1740:32:1;;;15759:22:0;;;1722:51:1;15715:14:0;;;;;15730:10;;15784:3;;15715:14;;15759:15;;1695:18:1;;15759:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15742:39;;9688:2;15742:39;:::i;:::-;:45;;;;:::i;:::-;15715:73;;-1:-1:-1;;;;;;15715:73:0;;;;;;;-1:-1:-1;;;;;9133:32:1;;;15715:73:0;;;9115:51:1;9182:18;;;9175:34;9088:18;;15715:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;15793:4:0;:18;;-1:-1:-1;;15793:18:0;15807:4;15793:18;;;-1:-1:-1;;;;;;;;;;;;;13324:2492:0:o;19265:212::-;-1:-1:-1;;;;;19363:18:0;;;19352:4;19363:18;;;:10;:18;;;;;;;;:38;;;;;;:28;;;;:38;;;;;:48;;;19421:35;1930:25:1;;;19352:4:0;;19363:38;:18;19421:35;;1903:18:1;19421:35:0;;;;;;;-1:-1:-1;19468:4:0;19265:212;;;;;:::o;19483:868::-;19565:4;19620:7;19600:16;19610:5;19600:9;:16::i;:::-;:27;;19592:36;;;;;;-1:-1:-1;;;;;19634:17:0;;:4;:17;;;:10;:17;;;;;:36;;;;;;;19727:26;;19676:30;;;;:78;;19717:36;;;19676:78;;;;;19784:4;;19823:14;;;:30;;;19848:5;-1:-1:-1;;;;;19841:12:0;:3;-1:-1:-1;;;;;19841:12:0;;19823:30;:47;;;-1:-1:-1;17856:9:0;;-1:-1:-1;;;;;19857:13:0;;;17856:9;;19857:13;19823:47;19817:267;;-1:-1:-1;;;;;;19922:17:0;;;:4;:17;;;:10;:17;;;;;;;;;:33;;19912:3;9793:2;19887:22;;:28;19922:33;;;;;20010:26;;19962:30;;;;:75;;20003:33;;;19962:75;;;;;;20049:28;;1930:25:1;;;19887:28:0;;20049;;;-1:-1:-1;;;;;;;;;;;20049:28:0;1903:18:1;20049:28:0;;;;;;;19817:267;-1:-1:-1;;;;;20132:15:0;;;20089:20;20132:15;;;:10;:15;;;;;;;;;:39;;20112:14;;;20132:39;;;;;20231:26;;20177:28;;;;:81;;20216:41;;;20177:81;;;;;;20269:34;;1930:25:1;;;20112:14:0;;20269:34;;;-1:-1:-1;;;;;;;;;;;20269:34:0;1903:18:1;20269:34:0;;;;;;;20309:15;20319:4;20309:9;:15::i;:::-;-1:-1:-1;20337:4:0;;19483:868;-1:-1:-1;;;;;;19483:868:0:o;18913:346::-;19024:7;19001:19;19011:8;19001:9;:19::i;:::-;:30;;18993:39;;;;;;19038:16;:27;;;;;;;-1:-1:-1;;;;;19071:20:0;;19038:4;19071:20;;;:10;:20;;;;;;:39;;;;;;;19170:26;;19116:33;;:81;;19160:36;;;19116:81;;;;;;19208:41;;-1:-1:-1;;;;;;;;;;;19208:41:0;;;19058:7;1930:25:1;;1918:2;1903:18;;1784:177;19208:41:0;;;;;;;;18913:346;;:::o;8549:353::-;8653:13;8668:10;8685:17;8713:72;8759:6;:24;;8778:5;8759:24;;;8768:7;8759:24;8730:6;8729:7;:25;;8749:5;8729:25;;;8739:7;8729:25;8719:36;;-1:-1:-1;;;8719:36:0;:::i;:::-;:65;;;;:::i;:::-;8713:5;:72::i;:::-;8685:101;;8798:30;8818:9;8798:19;:30::i;:::-;8791:37;-1:-1:-1;8848:10:0;8855:3;8791:37;8848:10;:::i;:::-;8840:19;;:4;:19;:::i;:::-;8833:26;;8872:25;8892:4;8872:19;:25::i;:::-;8864:33;;8680:222;8549:353;;;;;;:::o;20356:250::-;20426:11;;20422:175;;20538:24;20556:4;20538:9;:24::i;:::-;20518:17;20528:6;17856:9;;-1:-1:-1;;;;;17856:9:0;;17798:72;20518:17;17940:16;;20502:33;:60;-1:-1:-1;;;20476:7:0;:22;:87;;;;;:::i;:::-;20446:26;:117;;20476:87;;;;20446:117;;;;;20575:15;;1930:25:1;;;20575:15:0;;1918:2:1;1903:18;20575:15:0;;;;;;;20356:250;:::o;8313:231::-;8416:6;8426:1;8421;8416:6;;8415:12;8450:85;8464:6;8457:4;:13;8450:85;;;8488:4;8479:13;;8527:1;8519:4;8512;8507:2;:9;;;;;:::i;:::-;;:16;8506:22;;;;;:::i;:::-;;8499:29;;8450:85;;;8384:156;8313:231;;;:::o;4882:3426::-;4956:10;2548;-1:-1:-1;;;;;4997:30:0;;;;;;:63;;-1:-1:-1;2605:49:0;-1:-1:-1;;;;;5031:29:0;;;4997:63;4989:77;;;;-1:-1:-1;;;4989:77:0;;15315:2:1;4989:77:0;;;15297:21:1;15354:1;15334:18;;;15327:29;-1:-1:-1;;;15372:18:1;;;15365:31;15413:18;;4989:77:0;;;;;;;;;-1:-1:-1;;;;;5113:2:0;5088:27;;;;-1:-1:-1;;;;;5201:41:0;;5198:1;5194:49;5277:9;;;5335:18;5329:25;;5326:1;5322:33;5389:9;;;5447:10;5441:17;;5438:1;5434:25;5493:9;;;5551:6;5545:13;;5542:1;5538:21;5593:9;;;5651:4;5645:11;;5642:1;5638:19;;;5691:9;;;5749:3;5743:10;;5740:1;5736:18;5788:9;;;5840:10;;;5837:1;5833:18;;;5885:9;;;;5930:10;;;5368;;5472;;;5572;;;5670;5767;;;5864;5953;5987:3;5980:10;;5976:75;;6012:3;6006;:9;5996:5;:20;;5992:24;;5976:75;;;6047:3;6041;:9;6031:5;:20;;6027:24;;5976:75;6137:9;;;6132:3;6128:19;;;6162:11;;;;6220:9;;;;6270;;6261:19;;;6295:11;;;6353:9;6403;;6394:19;;;6428:11;;;6486:9;6536;;6527:19;;;6561:11;;;6619:9;6669;;6660:19;;;6694:11;;;6752:9;6802;;6793:19;;;6827:11;;;6885:9;6935;;6926:19;;;6960:11;;;7018:9;7068;;7059:19;;;7093:11;;;7151:9;7201;;7192:19;;;7226:11;;;7284:9;7334;;7325:19;;;7359:11;;;7417:9;7467;;7458:19;;;7492:11;;;7550:9;7600;;7591:19;;;7625:11;;;7683:9;7733;;7724:19;;;7758:11;;;;7816:9;;;;7866;;7857:19;;;;;6137:9;-1:-1:-1;;6075:17:0;;6097:2;6074:25;6198:10;;;;;;;6188:21;6331:10;;;;;;;6321:21;;;;6464:10;;;;;;;6454:21;;;;6597:10;;;;;;;6587:21;;;;6730:10;;;;;;;6720:21;;;;6863:10;;;;;;;6853:21;;;;6996:10;;;;;;;6986:21;7129:10;;;;;;;7119:21;7262:10;;;;;;;7252:21;7395:10;;;;;;;7385:21;7528:10;;;;;;;7518:21;7661:10;;;;;;;7651:21;7794:10;;;;;;;7784:21;7927:10;;;;;;;7917:21;7982:24;7974:32;;-1:-1:-1;;8037:53:0;;6089:3;8036:62;;;;8143:39;8127:55;;8126:64;;8206:17;;;;;;;;;:92;;8267:12;-1:-1:-1;;;;;8236:43:0;:27;8256:6;8236:19;:27::i;:::-;-1:-1:-1;;;;;8236:43:0;;;:62;;8291:7;8206:92;;8236:62;8282:6;8206:92;;;8226:7;8206:92;8199:99;4882:3426;-1:-1:-1;;;;;;;;;4882:3426:0:o;2662:2215::-;2726:20;2769:15;2794:1;2787:4;:8;;;:57;;2838:4;2831:12;;2787:57;;;2814:4;2807:12;;2806:13;;2787:57;2769:75;-1:-1:-1;2492:9:0;2858:36;;;2850:50;;;;-1:-1:-1;;;2850:50:0;;15644:2:1;2850:50:0;;;15626:21:1;15683:1;15663:18;;;15656:29;-1:-1:-1;;;15701:18:1;;;15694:31;15742:18;;2850:50:0;15442:324:1;2850:50:0;2908:13;2924:7;2934:3;2924:13;2941:1;2924:18;:93;;-1:-1:-1;;;2924:93:0;;;2945:34;2924:93;2908:109;;;-1:-1:-1;3037:3:0;3027:13;;:18;3023:83;;3064:34;3056:42;3103:3;3055:51;3023:83;3126:3;3116:13;;:18;3112:83;;3153:34;3145:42;3192:3;3144:51;3112:83;3215:3;3205:13;;:18;3201:83;;3242:34;3234:42;3281:3;3233:51;3201:83;3304:4;3294:14;;:19;3290:84;;3332:34;3324:42;3371:3;3323:51;3290:84;3394:4;3384:14;;:19;3380:84;;3422:34;3414:42;3461:3;3413:51;3380:84;3484:4;3474:14;;:19;3470:84;;3512:34;3504:42;3551:3;3503:51;3470:84;3574:4;3564:14;;:19;3560:84;;3602:34;3594:42;3641:3;3593:51;3560:84;3664:5;3654:15;;:20;3650:85;;3693:34;3685:42;3732:3;3684:51;3650:85;3755:5;3745:15;;:20;3741:85;;3784:34;3776:42;3823:3;3775:51;3741:85;3846:5;3836:15;;:20;3832:85;;3875:34;3867:42;3914:3;3866:51;3832:85;3937:5;3927:15;;:20;3923:85;;3966:34;3958:42;4005:3;3957:51;3923:85;4028:6;4018:16;;:21;4014:86;;4058:34;4050:42;4097:3;4049:51;4014:86;4120:6;4110:16;;:21;4106:86;;4150:34;4142:42;4189:3;4141:51;4106:86;4212:6;4202:16;;:21;4198:86;;4242:34;4234:42;4281:3;4233:51;4198:86;4304:6;4294:16;;:21;4290:86;;4334:34;4326:42;4373:3;4325:51;4290:86;4396:7;4386:17;;:22;4382:86;;4427:33;4419:41;4465:3;4418:50;4382:86;4488:7;4478:17;;:22;4474:85;;4519:32;4511:40;4556:3;4510:49;4474:85;4579:7;4569:17;;:22;4565:83;;4610:30;4602:38;4645:3;4601:47;4565:83;4668:7;4658:17;;:22;4654:78;;4699:25;4691:33;4729:3;4690:42;4654:78;4751:1;4744:4;:8;;;4740:47;;;4782:5;-1:-1:-1;;4762:25:0;;;;;:::i;:::-;;4754:33;;4740:47;4844:7;4835:5;:17;:22;:30;;4864:1;4835:30;;;4860:1;4835:30;4818:48;;4828:2;4819:5;:11;;4818:48;4795:72;;2753:2120;;2662:2215;;;:::o;206:548:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;490:3;675:1;670:2;661:6;650:9;646:22;642:31;635:42;745:2;738;734:7;729:2;721:6;717:15;713:29;702:9;698:45;694:54;686:62;;;;206:548;;;;:::o;759:131::-;-1:-1:-1;;;;;834:31:1;;824:42;;814:70;;880:1;877;870:12;895:315;963:6;971;1024:2;1012:9;1003:7;999:23;995:32;992:52;;;1040:1;1037;1030:12;992:52;1079:9;1066:23;1098:31;1123:5;1098:31;:::i;:::-;1148:5;1200:2;1185:18;;;;1172:32;;-1:-1:-1;;;895:315:1:o;1215:247::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;1382:9;1369:23;1401:31;1426:5;1401:31;:::i;:::-;1451:5;1215:247;-1:-1:-1;;;1215:247:1:o;1966:456::-;2043:6;2051;2059;2112:2;2100:9;2091:7;2087:23;2083:32;2080:52;;;2128:1;2125;2118:12;2080:52;2167:9;2154:23;2186:31;2211:5;2186:31;:::i;:::-;2236:5;-1:-1:-1;2293:2:1;2278:18;;2265:32;2306:33;2265:32;2306:33;:::i;:::-;1966:456;;2358:7;;-1:-1:-1;;;2412:2:1;2397:18;;;;2384:32;;1966:456::o;2616:794::-;2704:6;2712;2720;2728;2781:2;2769:9;2760:7;2756:23;2752:32;2749:52;;;2797:1;2794;2787:12;2749:52;2836:9;2823:23;2855:31;2880:5;2855:31;:::i;:::-;2905:5;-1:-1:-1;2957:2:1;2942:18;;2929:32;;-1:-1:-1;3012:2:1;2997:18;;2984:32;3035:18;3065:14;;;3062:34;;;3092:1;3089;3082:12;3062:34;3130:6;3119:9;3115:22;3105:32;;3175:7;3168:4;3164:2;3160:13;3156:27;3146:55;;3197:1;3194;3187:12;3146:55;3237:2;3224:16;3263:2;3255:6;3252:14;3249:34;;;3279:1;3276;3269:12;3249:34;3324:7;3319:2;3310:6;3306:2;3302:15;3298:24;3295:37;3292:57;;;3345:1;3342;3335:12;3292:57;2616:794;;;;-1:-1:-1;;3376:2:1;3368:11;;-1:-1:-1;;;2616:794:1:o;3415:180::-;3474:6;3527:2;3515:9;3506:7;3502:23;3498:32;3495:52;;;3543:1;3540;3533:12;3495:52;-1:-1:-1;3566:23:1;;3415:180;-1:-1:-1;3415:180:1:o;4331:127::-;4392:10;4387:3;4383:20;4380:1;4373:31;4423:4;4420:1;4413:15;4447:4;4444:1;4437:15;4463:921;4531:6;4584:2;4572:9;4563:7;4559:23;4555:32;4552:52;;;4600:1;4597;4590:12;4552:52;4640:9;4627:23;4669:18;4710:2;4702:6;4699:14;4696:34;;;4726:1;4723;4716:12;4696:34;4764:6;4753:9;4749:22;4739:32;;4809:7;4802:4;4798:2;4794:13;4790:27;4780:55;;4831:1;4828;4821:12;4780:55;4867:2;4854:16;4889:2;4885;4882:10;4879:36;;;4895:18;;:::i;:::-;4970:2;4964:9;4938:2;5024:13;;-1:-1:-1;;5020:22:1;;;5044:2;5016:31;5012:40;5000:53;;;5068:18;;;5088:22;;;5065:46;5062:72;;;5114:18;;:::i;:::-;5154:10;5150:2;5143:22;5189:2;5181:6;5174:18;5229:7;5224:2;5219;5215;5211:11;5207:20;5204:33;5201:53;;;5250:1;5247;5240:12;5201:53;5306:2;5301;5297;5293:11;5288:2;5280:6;5276:15;5263:46;5351:1;5329:15;;;5346:2;5325:24;5318:35;;;;-1:-1:-1;5333:6:1;4463:921;-1:-1:-1;;;;;4463:921:1:o;5389:388::-;5457:6;5465;5518:2;5506:9;5497:7;5493:23;5489:32;5486:52;;;5534:1;5531;5524:12;5486:52;5573:9;5560:23;5592:31;5617:5;5592:31;:::i;:::-;5642:5;-1:-1:-1;5699:2:1;5684:18;;5671:32;5712:33;5671:32;5712:33;:::i;:::-;5764:7;5754:17;;;5389:388;;;;;:::o;5782:127::-;5843:10;5838:3;5834:20;5831:1;5824:31;5874:4;5871:1;5864:15;5898:4;5895:1;5888:15;5914:128;5981:9;;;6002:11;;;5999:37;;;6016:18;;:::i;6047:559::-;-1:-1:-1;;;;;6260:32:1;;6242:51;;6324:2;6309:18;;6302:34;;;6372:2;6367;6352:18;;6345:30;;;6391:18;;6384:34;;;6411:6;6461;6455:3;6440:19;;6427:49;6526:1;6496:22;;;6520:3;6492:32;;;6485:43;;;;6589:2;6568:15;;;-1:-1:-1;;6564:29:1;6549:45;6545:55;;6047:559;-1:-1:-1;;;6047:559:1:o;6611:277::-;6678:6;6731:2;6719:9;6710:7;6706:23;6702:32;6699:52;;;6747:1;6744;6737:12;6699:52;6779:9;6773:16;6832:5;6825:13;6818:21;6811:5;6808:32;6798:60;;6854:1;6851;6844:12;6893:168;6966:9;;;6997;;7014:15;;;7008:22;;6994:37;6984:71;;7035:18;;:::i;7066:200::-;7132:9;;;7105:4;7160:9;;7188:10;;7200:12;;;7184:29;7223:12;;;7215:21;;7181:56;7178:82;;;7240:18;;:::i;:::-;7178:82;7066:200;;;;:::o;7271:127::-;7332:10;7327:3;7323:20;7320:1;7313:31;7363:4;7360:1;7353:15;7387:4;7384:1;7377:15;7403:120;7443:1;7469;7459:35;;7474:18;;:::i;:::-;-1:-1:-1;7508:9:1;;7403:120::o;7528:138::-;7607:13;;7629:31;7607:13;7629:31;:::i;:::-;7528:138;;;:::o;7671:251::-;7741:6;7794:2;7782:9;7773:7;7769:23;7765:32;7762:52;;;7810:1;7807;7800:12;7762:52;7842:9;7836:16;7861:31;7886:5;7861:31;:::i;7927:570::-;8150:13;;8132:32;;8224:4;8212:17;;;8206:24;-1:-1:-1;;;;;8202:50:1;8180:20;;;8173:80;8300:4;8288:17;;;8282:24;-1:-1:-1;;;;;8397:21:1;;;8375:20;;;8368:51;;;;8479:4;8467:17;;;8461:24;8457:33;8435:20;;;8428:63;;;;8119:3;8104:19;;7927:570::o;8502:245::-;8581:6;8589;8642:2;8630:9;8621:7;8617:23;8613:32;8610:52;;;8658:1;8655;8648:12;8610:52;-1:-1:-1;;8681:16:1;;8737:2;8722:18;;;8716:25;8681:16;;8716:25;;-1:-1:-1;8502:245:1:o;8752:184::-;8822:6;8875:2;8863:9;8854:7;8850:23;8846:32;8843:52;;;8891:1;8888;8881:12;8843:52;-1:-1:-1;8914:16:1;;8752:184;-1:-1:-1;8752:184:1:o;9220:193::-;9318:1;9307:16;;;9289;;;;9285:39;-1:-1:-1;;9339:23:1;;9374:8;9364:19;;9336:48;9333:74;;;9387:18;;:::i;9418:189::-;9514:1;9485:16;;;9503;;;;9481:39;9568:7;9535:18;;-1:-1:-1;;9555:22:1;;9532:46;9529:72;;;9581:18;;:::i;9805:1218::-;10023:13;;-1:-1:-1;;;;;1533:31:1;1521:44;;9991:3;9976:19;;10095:4;10087:6;10083:17;10077:24;10110:54;10158:4;10147:9;10143:20;10129:12;-1:-1:-1;;;;;1533:31:1;1521:44;;1467:104;10110:54;;10213:4;10205:6;10201:17;10195:24;10228:55;10277:4;10266:9;10262:20;10246:14;9688:8;9677:20;9665:33;;9612:92;10228:55;;10332:4;10324:6;10320:17;10314:24;10347:54;10395:4;10384:9;10380:20;10364:14;9784:1;9773:20;9761:33;;9709:91;10347:54;;10450:4;10442:6;10438:17;10432:24;10465:54;10513:4;10502:9;10498:20;10482:14;9784:1;9773:20;9761:33;;9709:91;10465:54;;10575:4;10567:6;10563:17;10557:24;10550:4;10539:9;10535:20;10528:54;10638:4;10630:6;10626:17;10620:24;10613:4;10602:9;10598:20;10591:54;10701:4;10693:6;10689:17;10683:24;10676:4;10665:9;10661:20;10654:54;10727:6;10787:2;10779:6;10775:15;10769:22;10764:2;10753:9;10749:18;10742:50;;10811:6;10866:2;10858:6;10854:15;10848:22;10879:54;10929:2;10918:9;10914:18;10898:14;-1:-1:-1;;;;;1533:31:1;1521:44;;1467:104;10879:54;-1:-1:-1;;10952:6:1;11000:15;;;10994:22;10974:18;;;;10967:50;9805:1218;:::o;11028:192::-;11107:13;;-1:-1:-1;;;;;11149:46:1;;11139:57;;11129:85;;11210:1;11207;11200:12;11225:392;11322:6;11330;11338;11346;11399:3;11387:9;11378:7;11374:23;11370:33;11367:53;;;11416:1;11413;11406:12;11367:53;11445:9;11439:16;11429:26;;11474:49;11519:2;11508:9;11504:18;11474:49;:::i;:::-;11563:2;11548:18;;11542:25;11607:2;11592:18;;;11586:25;11225:392;;11464:59;;-1:-1:-1;11225:392:1;-1:-1:-1;;;11225:392:1:o;12644:165::-;12722:13;;12775:8;12764:20;;12754:31;;12744:59;;12799:1;12796;12789:12;12814:164;12891:13;;12944:1;12933:20;;;12923:31;;12913:59;;12968:1;12965;12958:12;12983:1186;13146:6;13154;13162;13170;13178;13186;13194;13202;13210;13218;13226:7;13235;13289:3;13277:9;13268:7;13264:23;13260:33;13257:53;;;13306:1;13303;13296:12;13257:53;13338:9;13332:16;13388:26;13381:5;13377:38;13370:5;13367:49;13357:77;;13430:1;13427;13420:12;13357:77;13453:5;-1:-1:-1;13477:49:1;13522:2;13507:18;;13477:49;:::i;:::-;13467:59;;13545:49;13590:2;13579:9;13575:18;13545:49;:::i;:::-;13535:59;;13613:49;13658:2;13647:9;13643:18;13613:49;:::i;:::-;13603:59;;13681:49;13725:3;13714:9;13710:19;13681:49;:::i;:::-;13671:59;;13749:48;13792:3;13781:9;13777:19;13749:48;:::i;:::-;13739:58;;13816:48;13859:3;13848:9;13844:19;13816:48;:::i;:::-;13806:58;;13883:50;13928:3;13917:9;13913:19;13883:50;:::i;:::-;13873:60;;13973:3;13962:9;13958:19;13952:26;13942:36;;14018:3;14007:9;14003:19;13997:26;13987:36;;14043:50;14088:3;14077:9;14073:19;14043:50;:::i;:::-;14032:61;;14113:50;14158:3;14147:9;14143:19;14113:50;:::i;:::-;14102:61;;12983:1186;;;;;;;;;;;;;;:::o;14174:558::-;14346:4;14388:3;14377:9;14373:19;14365:27;;14425:6;14419:13;14408:9;14401:32;-1:-1:-1;;;;;14493:4:1;14485:6;14481:17;14475:24;14471:65;14464:4;14453:9;14449:20;14442:95;14593:4;14585:6;14581:17;14575:24;14568:4;14557:9;14553:20;14546:54;14656:4;14648:6;14644:17;14638:24;14631:4;14620:9;14616:20;14609:54;14719:4;14711:6;14707:17;14701:24;14694:4;14683:9;14679:20;14672:54;14174:558;;;;:::o;14737:200::-;-1:-1:-1;;;;;14873:10:1;;;14861;;;14857:27;;14896:12;;;14893:38;;;14911:18;;:::i;14942:166::-;14972:1;15013;15010;14999:16;15034:3;15024:37;;15041:18;;:::i;:::-;15098:3;15094:1;15091;15080:16;15075:27;15070:32;;;14942:166;;;;:::o

Swarm Source

ipfs://c17e15c7369e5a04562b029c0684c68a6a3de9a23d7a55ce2691ffc8d421cfa1
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.