ETH Price: $3,353.32 (-2.80%)
Gas: 2 Gwei

Contract

0x04fB784D1Be2B8e7079D34Df3addd8BfCC2f0CCf
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Approve202024112024-06-30 5:28:232 days ago1719725303IN
0x04fB784D...fCC2f0CCf
0 ETH0.000089281.92018599
Approve201712982024-06-25 21:11:357 days ago1719349895IN
0x04fB784D...fCC2f0CCf
0 ETH0.00022124.75755704
Approve201688862024-06-25 13:06:477 days ago1719320807IN
0x04fB784D...fCC2f0CCf
0 ETH0.000321856.95626901
Approve201072632024-06-16 22:13:5916 days ago1718576039IN
0x04fB784D...fCC2f0CCf
0 ETH0.00014134.80703053
Approve200260782024-06-05 13:58:4727 days ago1717595927IN
0x04fB784D...fCC2f0CCf
0 ETH0.0012959727.83691407
Approve200260322024-06-05 13:49:3527 days ago1717595375IN
0x04fB784D...fCC2f0CCf
0 ETH0.0013627929.31003314
Approve200260242024-06-05 13:47:5927 days ago1717595279IN
0x04fB784D...fCC2f0CCf
0 ETH0.0013309928.75956103
Approve200260222024-06-05 13:47:3527 days ago1717595255IN
0x04fB784D...fCC2f0CCf
0 ETH0.001461331.42852339
Approve200260222024-06-05 13:47:3527 days ago1717595255IN
0x04fB784D...fCC2f0CCf
0 ETH0.001461331.42852339
Approve200260222024-06-05 13:47:3527 days ago1717595255IN
0x04fB784D...fCC2f0CCf
0 ETH0.0015542933.42852339
Approve200260222024-06-05 13:47:3527 days ago1717595255IN
0x04fB784D...fCC2f0CCf
0 ETH0.0017867738.42852339
Approve200260222024-06-05 13:47:3527 days ago1717595255IN
0x04fB784D...fCC2f0CCf
0 ETH0.0017867738.42852339
Approve200260222024-06-05 13:47:3527 days ago1717595255IN
0x04fB784D...fCC2f0CCf
0 ETH0.0020218543.42852339
Approve200260212024-06-05 13:47:2327 days ago1717595243IN
0x04fB784D...fCC2f0CCf
0 ETH0.0015122832.48322991
Approve200260202024-06-05 13:47:1127 days ago1717595231IN
0x04fB784D...fCC2f0CCf
0 ETH0.0017127936.7900527
Approve200259842024-06-05 13:39:5927 days ago1717594799IN
0x04fB784D...fCC2f0CCf
0 ETH0.0014809131.85030778
Approve200259822024-06-05 13:39:3527 days ago1717594775IN
0x04fB784D...fCC2f0CCf
0 ETH0.0016041134.49999771
Approve200259762024-06-05 13:38:1127 days ago1717594691IN
0x04fB784D...fCC2f0CCf
0 ETH0.0015900234.1530163
Approve199643872024-05-27 23:08:1136 days ago1716851291IN
0x04fB784D...fCC2f0CCf
0 ETH0.0007069815.18577298
Approve198950002024-05-18 6:18:4745 days ago1716013127IN
0x04fB784D...fCC2f0CCf
0 ETH0.00008883.65890537
Approve198377992024-05-10 6:18:5953 days ago1715321939IN
0x04fB784D...fCC2f0CCf
0 ETH0.000370437.99789016
Approve198071062024-05-05 23:15:1158 days ago1714950911IN
0x04fB784D...fCC2f0CCf
0 ETH0.000192134.12701428
Approve197278092024-04-24 21:07:3569 days ago1713992855IN
0x04fB784D...fCC2f0CCf
0 ETH0.000653314.03274385
Approve195572112024-03-31 23:44:2393 days ago1711928663IN
0x04fB784D...fCC2f0CCf
0 ETH0.0004740119.57761811
Approve195524822024-03-31 7:45:4793 days ago1711871147IN
0x04fB784D...fCC2f0CCf
0 ETH0.0012244426.43673334
View all transactions

Latest 4 internal transactions

Advanced mode:
Parent Transaction Hash Block From To Value
182374252023-09-28 23:11:35278 days ago1695942695
0x04fB784D...fCC2f0CCf
2 ETH
182374252023-09-28 23:11:35278 days ago1695942695
0x04fB784D...fCC2f0CCf
 Contract Creation0 ETH
182374252023-09-28 23:11:35278 days ago1695942695
0x04fB784D...fCC2f0CCf
 Contract Creation0 ETH
182374252023-09-28 23:11:35278 days ago1695942695  Contract Creation2 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MULLET

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-28
*/

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

// $MULLET
// - 1 billion supply
// - no contract owner
// - 100% of tokens in initial LP
// - LP locked in contract permanently
// - V3 LP with a 5 ETH initial market cap
// - 1,000,000 token max transfer for 5 minutes
// https://mullet.capital

// $HAIR
// - fully liquid without the need for a DEX
// - 10% buy/sell tax
// - tax distributed to token holders in the form of ETH
// - referral link, own 100 $HAIR or more to get 3% of referred buys/reinvests
// https://hedge.mullet.capital


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

interface Router {
	struct ExactInputSingleParams {
		address tokenIn;
		address tokenOut;
		uint24 fee;
		address recipient;
		uint256 amountIn;
		uint256 amountOutMinimum;
		uint160 sqrtPriceLimitX96;
	}
	function factory() external view returns (address);
	function positionManager() external view returns (address);
	function WETH9() external view returns (address);
	function exactInputSingle(ExactInputSingleParams calldata) external payable returns (uint256);
}

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

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

interface PositionManager {
	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;
	}
	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);
}

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

interface WETH is ERC20 {
	function withdraw(uint256) external;
}


contract HEDGE {

	uint256 constant private FLOAT_SCALAR = 2**64;
	uint256 constant private BUY_TAX = 10;
	uint256 constant private SELL_TAX = 10;
	uint256 constant private TEAM_TAX = 1;
	uint256 constant private REF_TAX = 3;
	uint256 constant private REF_REQUIREMENT = 1e20; // 100 HAIR
	uint256 constant private STARTING_PRICE = 0.001 ether;
	uint256 constant private INCREMENT = 1e10; // 10 Gwei
	address constant private BUYBACK_ADDRESS = 0xA093Ea0904250084411F98d9195567e8b4406696;

	string constant public name = "HEDGE";
	string constant public symbol = "HAIR";
	uint8 constant public decimals = 18;

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

	struct Info {
		uint256 totalSupply;
		mapping(address => User) users;
		uint256 scaledEthPerToken;
		address team;
	}
	Info private info;


	event Transfer(address indexed from, address indexed to, uint256 tokens);
	event Approval(address indexed owner, address indexed spender, uint256 tokens);
	event Buy(address indexed buyer, uint256 amountSpent, uint256 tokensReceived);
	event Sell(address indexed seller, uint256 tokensSpent, uint256 amountReceived);
	event Withdraw(address indexed user, uint256 amount);
	event Reinvest(address indexed user, uint256 amount);


	constructor() {
		info.team = msg.sender;
	}
	
	receive() external payable {
		buy();
	}
	
	function buy() public payable returns (uint256) {
		return buy(address(0x0));
	}
	
	function buy(address _ref) public payable returns (uint256) {
		require(msg.value > 0);
		if (_ref != address(0x0) && _ref != msg.sender && _ref != refOf(msg.sender)) {
			info.users[msg.sender].ref = _ref;
		}
		return _buy(msg.value);
	}

	function sell(uint256 _tokens) external returns (uint256) {
		return _sell(_tokens);
	}

	function withdraw() external returns (uint256) {
		uint256 _rewards = rewardsOf(msg.sender);
		require(_rewards >= 0);
		info.users[msg.sender].scaledPayout += int256(_rewards * FLOAT_SCALAR);
		payable(msg.sender).transfer(_rewards);
		emit Withdraw(msg.sender, _rewards);
		return _rewards;
	}

	function reinvest() external returns (uint256) {
		uint256 _rewards = rewardsOf(msg.sender);
		require(_rewards >= 0);
		info.users[msg.sender].scaledPayout += int256(_rewards * FLOAT_SCALAR);
		emit Reinvest(msg.sender, _rewards);
		return _buy(_rewards);
	}

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

	function approve(address _spender, uint256 _tokens) external returns (bool) {
		info.users[msg.sender].allowance[_spender] = _tokens;
		emit Approval(msg.sender, _spender, _tokens);
		return true;
	}

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

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


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

	function buybackAddress() public pure returns (address) {
		return BUYBACK_ADDRESS;
	}

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

	function currentPrices() public view returns (uint256 truePrice, uint256 buyPrice, uint256 sellPrice) {
		truePrice = STARTING_PRICE + INCREMENT * totalSupply() / 1e18;
		buyPrice = truePrice * 100 / (100 - BUY_TAX);
		sellPrice = truePrice * (100 - SELL_TAX) / 100;
	}

	function refOf(address _user) public view returns (address) {
		return info.users[_user].ref;
	}

	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.scaledEthPerToken * balanceOf(_user)) - info.users[_user].scaledPayout) / FLOAT_SCALAR;
	}

	function allInfoFor(address _user) public view returns (uint256 contractBalance, uint256 totalTokenSupply, uint256 truePrice, uint256 buyPrice, uint256 sellPrice, uint256 userETH, uint256 userBalance, uint256 userRewards, uint256 userLiquidValue, address userRef) {
		contractBalance = address(this).balance;
		totalTokenSupply = totalSupply();
		(truePrice, buyPrice, sellPrice) = currentPrices();
		userETH = _user.balance;
		userBalance = balanceOf(_user);
		userRewards = rewardsOf(_user);
		userLiquidValue = calculateResult(userBalance, false, false) + userRewards;
		userRef = refOf(_user);
	}

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

	function calculateResult(uint256 _amount, bool _isBuy, bool _inverse) public view returns (uint256) {
		unchecked {
			uint256 _buyPrice;
			uint256 _sellPrice;
			( , _buyPrice, _sellPrice) = currentPrices();
			uint256 _rate = (_isBuy ? _buyPrice : _sellPrice);
			uint256 _increment = INCREMENT * (_isBuy ? 100 : (100 - SELL_TAX)) / (_isBuy ? (100 - BUY_TAX) : 100);
			if ((_isBuy && !_inverse) || (!_isBuy && _inverse)) {
				if (_inverse) {
					return (2 * _rate - _sqrt(4 * _rate * _rate + _increment * _increment - 4 * _rate * _increment - 8 * _amount * _increment) - _increment) * 1e18 / (2 * _increment);
				} else {
					return (_sqrt((_increment + 2 * _rate) * (_increment + 2 * _rate) + 8 * _amount * _increment) - _increment - 2 * _rate) * 1e18 / (2 * _increment);
				}
			} else {
				if (_inverse) {
					return (_rate * _amount + (_increment * (_amount + 1e18) / 2e18) * _amount) / 1e18;
				} else {
					return (_rate * _amount - (_increment * (_amount + 1e18) / 2e18) * _amount) / 1e18;
				}
			}
		}
	}


	function _transfer(address _from, address _to, uint256 _tokens) internal returns (bool) {
		require(balanceOf(_from) >= _tokens);
		info.users[_from].balance -= _tokens;
		info.users[_from].scaledPayout -= int256(_tokens * info.scaledEthPerToken);
		info.users[_to].balance += _tokens;
		info.users[_to].scaledPayout += int256(_tokens * info.scaledEthPerToken);
		emit Transfer(_from, _to, _tokens);
		return true;
	}

	function _buy(uint256 _amount) internal returns (uint256 tokens) {
		uint256 _tax = _amount * BUY_TAX / 100;
		tokens = calculateResult(_amount, true, false);
		info.totalSupply += tokens;
		info.users[msg.sender].balance += tokens;
		info.users[msg.sender].scaledPayout += int256(tokens * info.scaledEthPerToken);
		uint256 _teamTax = _amount * TEAM_TAX / 100;
		info.users[team()].scaledPayout -= int256(_teamTax * FLOAT_SCALAR);
		uint256 _refTax = _amount * REF_TAX / 100;
		address _ref = refOf(msg.sender);
		if (_ref != address(0x0) && balanceOf(_ref) >= REF_REQUIREMENT) {
			info.users[_ref].scaledPayout -= int256(_refTax * FLOAT_SCALAR);
		} else {
			info.users[buybackAddress()].scaledPayout -= int256(_refTax * FLOAT_SCALAR);
		}
		info.scaledEthPerToken += (_tax - _teamTax - _refTax) * FLOAT_SCALAR / info.totalSupply;
		emit Transfer(address(0x0), msg.sender, tokens);
		emit Buy(msg.sender, _amount, tokens);
	}

	function _sell(uint256 _tokens) internal returns (uint256 amount) {
		require(balanceOf(msg.sender) >= _tokens);
		amount = calculateResult(_tokens, false, false);
		uint256 _tax = amount * SELL_TAX / (100 - SELL_TAX);
		info.totalSupply -= _tokens;
		info.users[msg.sender].balance -= _tokens;
		info.users[msg.sender].scaledPayout -= int256(_tokens * info.scaledEthPerToken);
		uint256 _teamTax = amount * TEAM_TAX / (100 - SELL_TAX);
		info.users[team()].scaledPayout -= int256(_teamTax * FLOAT_SCALAR);
		info.scaledEthPerToken += (_tax - _teamTax) * FLOAT_SCALAR / info.totalSupply;
		payable(msg.sender).transfer(amount);
		emit Transfer(msg.sender, address(0x0), _tokens);
		emit Sell(msg.sender, _tokens, amount);
	}


	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;
			}
		}
	}
}


contract Team {

	Router constant private ROUTER = Router(0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45);

	struct Share {
		address payable user;
		uint256 shares;
	}
	Share[] public shares;
	uint256 public totalShares;
	ERC20 immutable public token;
	HEDGE immutable public hedge;


	constructor() {
		token = ERC20(msg.sender);
		hedge = new HEDGE();
		_addShare(0x7178523CD70c5E96C079701fE46Cda3E1799b4Ce, 9);
		_addShare(0xc61D594dff6D253142C7Fa83F41D318F157B018a, 9);
		_addShare(0x2000Af01b455C4cd3E65AED180eC3EE52BD6C264, 2);
	}

	receive() external payable {}

	function withdrawETH() public {
		uint256 _balance = address(this).balance;
		if (_balance > 0) {
			for (uint256 i = 0; i < shares.length; i++) {
				Share memory _share = shares[i];
				!_share.user.send(_balance * _share.shares / totalShares);
			}
		}
	}

	function withdrawHAIR() external {
		hedge.withdraw();
		withdrawETH();
	}

	function withdrawToken(ERC20 _token) public {
		WETH _weth = WETH(ROUTER.WETH9());
		if (address(_token) == address(_weth)) {
			_weth.withdraw(_weth.balanceOf(address(this)));
			withdrawETH();
		} else {
			uint256 _balance = _token.balanceOf(address(this));
			if (_balance > 0) {
				for (uint256 i = 0; i < shares.length; i++) {
					Share memory _share = shares[i];
					_token.transfer(_share.user, _balance * _share.shares / totalShares);
				}
			}
		}
	}

	function withdrawWETH() public {
		withdrawToken(ERC20(ROUTER.WETH9()));
	}

	function withdrawFees() external {
		withdrawWETH();
		withdrawToken(token);
	}


	function _addShare(address _user, uint256 _shares) internal {
		shares.push(Share(payable(_user), _shares));
		totalShares += _shares;
	}
}


contract Ambassadors {

	struct Share {
		address payable user;
		uint256 shares;
	}
	Share[] public shares;
	uint256 public totalShares;
	ERC20 immutable public token;


	constructor() {
		token = ERC20(msg.sender);
		_addShare(0x1427798f129b92F19927931a964D17bd6C2F5253, 10);
		_addShare(0x9D756A1848Ee62db36C17f000699f65BfEF9bf11, 7);
		_addShare(0x1248E5Ce0dB0F869A9A934b1677bd5A17e5B8DFe, 7);
		_addShare(0x6A5da854d5a3A0Fc4A760Bc6A9062D2A8e36431a, 7);
		_addShare(0x5a02FbCE3B19E9508F5Cc7F351f671795c1a81a4, 7);
		_addShare(0x1B1B694c797904D9B84ed636661C32C4DcaA17d9, 7);
		_addShare(0x492bb59126d7F06C2c5B13cD50caD209a43eA326, 7);
		_addShare(0x60d5567d7f8d05C899C89e63E00E4f6ca396ec13, 7);
		_addShare(0xBaE44b530f65Aa9A97bb0d17b4eafb07Ac67259C, 7);
		_addShare(0xe6eD771d0deC3a1F5B1A9bBc90fF9353E7Ec9c56, 7);
		_addShare(0xc44241b85051E5837B522289B2559d70496B16dC, 7);
		_addShare(0x0539480eE00A547974e7E38c1A9c8b046d767F22, 7);
		_addShare(0x7a3DD779b524C80e464B23AfCA6906539Df958D0, 7);
		_addShare(0xDfCE959d59F3E34c4f018cd91E4A5B9453Ff2D7d, 7);
		_addShare(0xAc537fcf993fAbCA3e795658B5b1a06c5DEC1e85, 7);
		_addShare(0x0d9997acB3f204fe3A09aCB1Fd594F906bCc88BB, 7);
		_addShare(0x6a49351D350245cFA979c1EBce7D18ADa46406d5, 7);
		_addShare(0x8E44aF6308e52b94157Ec9A898eC9f31cc1B0E16, 7);
		_addShare(0xf939FDa6330984F3E84EB32701bd404dACc27D50, 7);
		_addShare(0x29f3536D4E2a790f11d5827490390Dd1dca3e9b1, 7);
		_addShare(0xA4C501D7Cd0914fCfDb9E2bf367cC224a4531fAc, 7);
		_addShare(0x5dBFEAcf8f26e83314790f3Ee91eEAB97617F734, 7);
		_addShare(0xEBf184353dD81C21AAaB257143346584d75d1537, 7);
		_addShare(0xdAf028effC6e75307c54899a433b40514fEBB936, 7);
		_addShare(0xC4be049c2835D5F42c3B11a44c775F8A4909bd5F, 7);
		_addShare(0xD89eF44a1fBeA729912Fc40CAcF7d0CAe2A49841, 7);
		_addShare(0x5E056D473F95eA7Ef9660a46310297b2D457cAaD, 7);
		_addShare(0xb592016Dc145aFBA2aeE5B35e2Dfe0629BF83A36, 4);
		_addShare(0x95f572bD843b74C0d582b1BE5AF2583293ad2255, 2);
	}

	function distribute() external {
		uint256 _balance = token.balanceOf(address(this));
		if (_balance > 0) {
			for (uint256 i = 0; i < shares.length; i++) {
				Share memory _share = shares[i];
				token.transfer(_share.user, _balance * _share.shares / totalShares);
			}
		}
	}


	function _addShare(address _user, uint256 _shares) internal {
		shares.push(Share(payable(_user), _shares));
		totalShares += _shares;
	}
}


contract MULLET {

	uint256 constant private UINT_MAX = type(uint256).max;
	uint128 constant private UINT128_MAX = type(uint128).max;
	uint256 constant private INITIAL_SUPPLY = 1e27; // 1 billion
	Router constant private ROUTER = Router(0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45);
	uint256 constant private INITIAL_ETH_MC = 5 ether; // 5 ETH initial market cap price
	uint256 constant private UPPER_ETH_MC = 1e6 ether; // 1,000,000 ETH max market cap price
	uint256 constant private LIMIT_TIME = 5 minutes;
	uint256 constant private TOKEN_LIMIT = (INITIAL_SUPPLY / 1000); // max buy of 1m tokens, approx. 0.005 ETH, for 5 minutes

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

	string constant public name = "Mullet Money Mission";
	string constant public symbol = "MULLET";
	uint8 constant public decimals = 18;

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

	struct Info {
		Team team;
		address pool;
		uint256 totalSupply;
		mapping(address => User) users;
		uint128 positionId;
		uint128 startTime;
	}
	Info private info;


	event Transfer(address indexed from, address indexed to, uint256 tokens);
	event Approval(address indexed owner, address indexed spender, uint256 tokens);


	constructor() payable {
		require(msg.value > 0);
		info.team = new Team();
		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 initialize() external {
		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 _positionId, , , ) = _pm.mint(PositionManager.MintParams({
			token0: _weth0 ? _weth : _this,
			token1: !_weth0 ? _weth : _this,
			fee: 10000,
			tickLower: _weth0 ? _maxTick : _minTick,
			tickUpper: !_weth0 ? _maxTick : _minTick,
			amount0Desired: _weth0 ? 0 : INITIAL_SUPPLY,
			amount1Desired: !_weth0 ? 0 : INITIAL_SUPPLY,
			amount0Min: 0,
			amount1Min: 0,
			recipient: _this,
			deadline: block.timestamp
		}));
		info.positionId = uint128(_positionId);
		Ambassadors _ambassadors = new Ambassadors();
		ROUTER.exactInputSingle{value:_this.balance}(Router.ExactInputSingleParams({
			tokenIn: _weth,
			tokenOut: _this,
			fee: 10000,
			recipient: address(_ambassadors),
			amountIn: _this.balance,
			amountOutMinimum: 0,
			sqrtPriceLimitX96: 0
		}));
		_ambassadors.distribute();
		info.startTime = uint128(block.timestamp);
	}

	function collectTradingFees() external {
		PositionManager(ROUTER.positionManager()).collect(PositionManager.CollectParams({
			tokenId: position(),
			recipient: team(),
			amount0Max: UINT128_MAX,
			amount1Max: UINT128_MAX
		}));
		info.team.withdrawFees();
	}

	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) {
		_transfer(msg.sender, _to, _tokens);
		uint32 _size;
		assembly {
			_size := extcodesize(_to)
		}
		if (_size > 0) {
			require(Callable(_to).tokenCallback(msg.sender, _tokens, _data));
		}
		return true;
	}
	

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

	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 allowance(address _user, address _spender) public view returns (uint256) {
		return info.users[_user].allowance[_spender];
	}

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


	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 {
			if (block.timestamp < info.startTime + LIMIT_TIME) {
				require(_tokens <= TOKEN_LIMIT);
			}
			require(balanceOf(_from) >= _tokens);
			info.users[_from].balance -= _tokens;
			info.users[_to].balance += _tokens;
			emit Transfer(_from, _to, _tokens);
			return true;
		}
	}


	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 Deploy {
	MULLET immutable public mullet;
	HEDGE immutable public hedge;
	constructor() payable {
		mullet = new MULLET{value:msg.value}();
		mullet.initialize();
		hedge = HEDGE(Team(payable(mullet.team())).hedge());
	}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":"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"},{"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":[],"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":"pool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"position","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"team","outputs":[{"internalType":"address","name":"","type":"address"}],"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"}]

60806040525f341162000010575f80fd5b6040516200001e90620009b8565b604051809103905ff08015801562000038573d5f803e3d5ffd5b505f80546001600160a01b0319166001600160a01b0392909216919091178155604080516312a9293f60e21b815290513092917368b3465833fb72a70ecdf485e0e4c7bd8665fc4591634aa4a4fc916004808201926020929091908290030181865afa158015620000ab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000d19190620009c6565b90505f620001036001600160a01b03808516908416106b033b2e3c9fd0803ce8000000674563918244f400006200027d565b5090507368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000157573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200017d9190620009c6565b60405163a167129560e01b81526001600160a01b03858116600483015284811660248301526127106044830152919091169063a1671295906064016020604051808303815f875af1158015620001d5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001fb9190620009c6565b600180546001600160a01b0319166001600160a01b0392909216918217905560405163f637731d60e01b81526001600160a01b038381166004830152919091169063f637731d906024015f604051808303815f87803b1580156200025d575f80fd5b505af115801562000270573d5f803e3d5ffd5b5050505050505062000a9f565b5f805f620002c58662000291578462000293565b855b8715620002a15785620002a3565b865b620002b390600160c01b62000a1d565b620002bf919062000a33565b62000305565b9050620002d28162000350565b9150620002e160c88362000a53565b620002ed908362000a77565b9150620002fa8262000675565b925050935093915050565b80600260018201045b818110156200034a578091506002818285816200032f576200032f620009f5565b040181620003415762000341620009f5565b0490506200030e565b50919050565b5f6401000276a36001600160a01b038316108015906200038c575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b620003c25760405162461bcd60e51b81526020600482015260016024820152602960f91b60448201526064015b60405180910390fd5b600160201b600160c01b03602083901b166001600160801b03811160071b81811c6001600160401b03811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c979088119617909417909217179091171717608081106200045657607f810383901c915062000460565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b1462000666576001600160a01b038916620006488262000675565b6001600160a01b031611156200065f578162000668565b8062000668565b815b9998505050505050505050565b5f805f8360020b126200068c578260020b62000693565b8260020b5f035b9050620d89e8811115620006ce5760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401620003b9565b5f816001165f03620006e557600160801b620006f7565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b03169050600282161562000722576ffff97272373d413259a46990580e213a0260801c5b600482161562000742576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b600882161562000762576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b601082161562000782576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615620007a2576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615620007c2576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615620007e2576ffe5dee046a99a2a811c461f1969c30530260801c5b61010082161562000803576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b61020082161562000824576ff987a7253ac413176f2b074cf7815e540260801c5b61040082161562000845576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161562000866576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161562000887576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615620008a8576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615620008c9576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615620008ea576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156200090c576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156200092d576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156200094d576d2216e584f5fa1ea926041bedfe980260801c5b620800008216156200096b576b048a170391f7dc42444e8fa20260801c5b5f8460020b13156200098e57805f19816200098a576200098a620009f5565b0490505b640100000000810615620009a4576001620009a6565b5f5b60ff16602082901c0192505050919050565b611ea58062002b1083390190565b5f60208284031215620009d7575f80fd5b81516001600160a01b0381168114620009ee575f80fd5b9392505050565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f8262000a2e5762000a2e620009f5565b500490565b808202811582820484141762000a4d5762000a4d62000a09565b92915050565b5f8260020b8062000a685762000a68620009f5565b808360020b0791505092915050565b600282810b9082900b03627fffff198112627fffff8213171562000a4d5762000a4d62000a09565b6120638062000aad5f395ff3fe608060405234801562000010575f80fd5b506004361062000104575f3560e01c80634000aea0116200009f57806385f2aef2116200006b57806385f2aef2146200025257806395d89b411462000263578063a9059cbb1462000289578063dd62ed3e14620002a0575f80fd5b80634000aea014620001fa57806353f8b303146200021157806370a08231146200021d5780638129fc1c1462000248575f80fd5b806316f0115b11620000df57806316f0115b146200019857806318160ddd14620001be57806323b872dd14620001c7578063313ce56714620001de575f80fd5b806306fdde03146200010857806309218e911462000154578063095ea7b31462000170575b5f80fd5b6200013c6040518060400160405280601481526020017326bab63632ba1026b7b732bc9026b4b9b9b4b7b760611b81525081565b6040516200014b919062001381565b60405180910390f35b6004546001600160801b03165b6040519081526020016200014b565b6200018762000181366004620013e6565b620002df565b60405190151581526020016200014b565b6001546001600160a01b03165b6040516001600160a01b0390911681526020016200014b565b60025462000161565b62000187620001d836600462001413565b620002f6565b620001e7601281565b60405160ff90911681526020016200014b565b620001876200020b36600462001456565b62000385565b6200021b6200042f565b005b620001616200022e366004620014df565b6001600160a01b03165f9081526003602052604090205490565b6200021b620005eb565b5f546001600160a01b0316620001a5565b6200013c6040518060400160405280600681526020016513555313115560d21b81525081565b620001876200029a366004620013e6565b62000aec565b62000161620002b136600462001504565b6001600160a01b039182165f9081526003602090815260408083209390941682526001909201909152205490565b5f620002ed33848462000afa565b90505b92915050565b6001600160a01b0383165f9081526003602090815260408083203384526001019091528120548281101562000329575f80fd5b5f1981146200036f576001600160a01b0385165f908152600360209081526040808320338452600101909152812080548592906200036990849062001554565b90915550505b6200037c85858562000b66565b95945050505050565b5f6200039333868662000b66565b50843b63ffffffff8116156200042357604051636be32e7360e01b81526001600160a01b03871690636be32e7390620003d79033908990899089906004016200156a565b6020604051808303815f875af1158015620003f4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200041a9190620015b1565b62000423575f80fd5b50600195945050505050565b7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b031663791b98bc6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000480573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004a69190620015d2565b6001600160a01b031663fc6f78656040518060800160405280620004d26004546001600160801b031690565b8152602001620004e95f546001600160a01b031690565b6001600160a01b0390811682526001600160801b0360208084018290526040938401829052835160e087901b6001600160e01b031916815285516004820152908501519092166024830152918301518216604482015260609092015116606482015260840160408051808303815f875af11580156200056a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005909190620015f0565b50505f8054604080516323b1a1f760e11b815290516001600160a01b039092169263476343ee9260048084019382900301818387803b158015620005d2575f80fd5b505af1158015620005e5573d5f803e3d5ffd5b50505050565b60025415620005f8575f80fd5b5f3090505f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200064e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620006749190620015d2565b90505f826001600160a01b0316826001600160a01b03161090505f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b031663791b98bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620006e0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620007069190620015d2565b6b033b2e3c9fd0803ce800000060028190556001600160a01b0386165f8181526003602052604080822084905551939450909290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916200076a91815260200190565b60405180910390a36200078b84826b033b2e3c9fd0803ce800000062000afa565b505f620007ae836b033b2e3c9fd0803ce8000000674563918244f4000062000c2c565b9150505f620007d5846b033b2e3c9fd0803ce800000069d3c21bcecceda100000062000c2c565b9150505f836001600160a01b031663883164566040518061016001604052808862000801578a62000803565b895b6001600160a01b0316815260200188156200081f578a62000821565b895b6001600160a01b0316815261271060208201526040018862000844578662000846565b855b60020b815260200188156200085c57866200085e565b855b60020b8152602001886200087f576b033b2e3c9fd0803ce800000062000881565b5f5b81526020018815620008a0576b033b2e3c9fd0803ce8000000620008a2565b5f5b81526020015f81526020015f81526020018a6001600160a01b03168152602001428152506040518263ffffffff1660e01b8152600401620008e4919062001613565b6080604051808303815f875af115801562000901573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620009279190620016dc565b5050600480546fffffffffffffffffffffffffffffffff19166001600160801b038416179055506040519091505f90620009619062001373565b604051809103905ff0801580156200097b573d5f803e3d5ffd5b506040805160e0810182526001600160a01b038a811682528b811660208301818152612710848601908152868416606086019081528331608087019081525f60a0880181815260c0890191825298516304e45aaf60e01b8152975187166004890152935186166024880152915162ffffff1660448701525184166064860152516084850152935160a484015292511660c48201529192507368b3465833fb72a70ecdf485e0e4c7bd8665fc45916304e45aaf91319060e40160206040518083038185885af115801562000a50573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019062000a77919062001724565b50806001600160a01b031663e4fc6b6d6040518163ffffffff1660e01b81526004015f604051808303815f87803b15801562000ab1575f80fd5b505af115801562000ac4573d5f803e3d5ffd5b5050600480546001600160801b03428116600160801b02911617905550505050505050505050565b5f620002ed33848462000b66565b6001600160a01b038381165f8181526003602090815260408083209487168084526001909501825280832086905551858152919392917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a35060019392505050565b6004545f906001600160801b03600160801b9091041661012c0142101562000b9f5769d3c21bcecceda100000082111562000b9f575f80fd5b8162000bbf856001600160a01b03165f9081526003602052604090205490565b101562000bca575f80fd5b6001600160a01b038085165f81815260036020526040808220805487900390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062000b549086815260200190565b5f805f62000c748662000c40578462000c42565b855b871562000c50578562000c52565b865b62000c6290600160c01b62001750565b62000c6e919062001766565b62000cb4565b905062000c818162000cff565b915062000c9060c88362001780565b62000c9c9083620017a4565b915062000ca98262001026565b925050935093915050565b80600260018201045b8181101562000cf95780915060028182858162000cde5762000cde6200173c565b04018162000cf05762000cf06200173c565b04905062000cbd565b50919050565b5f6401000276a36001600160a01b0383161080159062000d3b575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b62000d715760405162461bcd60e51b81526020600482015260016024820152602960f91b60448201526064015b60405180910390fd5b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c9790881196179094179092171790911717176080811062000e0757607f810383901c915062000e11565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b146200101757886001600160a01b031662000ff98262001026565b6001600160a01b0316111562001010578162001019565b8062001019565b815b9998505050505050505050565b5f805f8360020b126200103d578260020b62001044565b8260020b5f035b9050620d89e88111156200107f5760405162461bcd60e51b81526020600482015260016024820152601560fa1b604482015260640162000d68565b5f816001165f036200109657600160801b620010a8565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615620010dd576ffff97272373d413259a46990580e213a0260801c5b6004821615620010fd576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b60088216156200111d576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156200113d576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156200115d576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156200117d576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156200119d576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615620011be576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615620011df576ff987a7253ac413176f2b074cf7815e540260801c5b61040082161562001200576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161562001221576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161562001242576fd097f3bdfd2022b8845ad8f792aa58250260801c5b61200082161562001263576fa9f746462d870fdf8a65dc1f90e061e50260801c5b61400082161562001284576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615620012a5576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615620012c7576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615620012e8576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161562001308576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161562001326576b048a170391f7dc42444e8fa20260801c5b5f8460020b13156200134957805f19816200134557620013456200173c565b0490505b6401000000008106156200135f57600162001361565b5f5b60ff16602082901c0192505050919050565b61086180620017cd83390190565b5f6020808352835180828501525f5b81811015620013ae5785810183015185820160400152820162001390565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114620013e3575f80fd5b50565b5f8060408385031215620013f8575f80fd5b82356200140581620013ce565b946020939093013593505050565b5f805f6060848603121562001426575f80fd5b83356200143381620013ce565b925060208401356200144581620013ce565b929592945050506040919091013590565b5f805f80606085870312156200146a575f80fd5b84356200147781620013ce565b935060208501359250604085013567ffffffffffffffff808211156200149b575f80fd5b818701915087601f830112620014af575f80fd5b813581811115620014be575f80fd5b886020828501011115620014d0575f80fd5b95989497505060200194505050565b5f60208284031215620014f0575f80fd5b8135620014fd81620013ce565b9392505050565b5f806040838503121562001516575f80fd5b82356200152381620013ce565b915060208301356200153581620013ce565b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115620002f057620002f062001540565b6001600160a01b0385168152602081018490526060604082018190528101829052818360808301375f818301608090810191909152601f909201601f191601019392505050565b5f60208284031215620015c2575f80fd5b81518015158114620014fd575f80fd5b5f60208284031215620015e3575f80fd5b8151620014fd81620013ce565b5f806040838503121562001602575f80fd5b505080516020909101519092909150565b81516001600160a01b03168152610160810160208301516200164060208401826001600160a01b03169052565b50604083015162001658604084018262ffffff169052565b5060608301516200166e606084018260020b9052565b50608083015162001684608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151620016cb828501826001600160a01b03169052565b505061014092830151919092015290565b5f805f8060808587031215620016f0575f80fd5b8451935060208501516001600160801b03811681146200170e575f80fd5b6040860151606090960151949790965092505050565b5f6020828403121562001735575f80fd5b5051919050565b634e487b7160e01b5f52601260045260245ffd5b5f826200176157620017616200173c565b500490565b8082028115828204841417620002f057620002f062001540565b5f8260020b806200179557620017956200173c565b808360020b0791505092915050565b600282810b9082900b03627fffff198112627fffff82131715620002f057620002f06200154056fe60a060405234801561000f575f80fd5b5033608052610033731427798f129b92f19927931a964d17bd6c2f5253600a61039c565b610052739d756a1848ee62db36c17f000699f65bfef9bf11600761039c565b610071731248e5ce0db0f869a9a934b1677bd5a17e5b8dfe600761039c565b610090736a5da854d5a3a0fc4a760bc6a9062d2a8e36431a600761039c565b6100af735a02fbce3b19e9508f5cc7f351f671795c1a81a4600761039c565b6100ce731b1b694c797904d9b84ed636661c32c4dcaa17d9600761039c565b6100ed73492bb59126d7f06c2c5b13cd50cad209a43ea326600761039c565b61010c7360d5567d7f8d05c899c89e63e00e4f6ca396ec13600761039c565b61012b73bae44b530f65aa9a97bb0d17b4eafb07ac67259c600761039c565b61014a73e6ed771d0dec3a1f5b1a9bbc90ff9353e7ec9c56600761039c565b61016973c44241b85051e5837b522289b2559d70496b16dc600761039c565b610188730539480ee00a547974e7e38c1a9c8b046d767f22600761039c565b6101a7737a3dd779b524c80e464b23afca6906539df958d0600761039c565b6101c673dfce959d59f3e34c4f018cd91e4a5b9453ff2d7d600761039c565b6101e573ac537fcf993fabca3e795658b5b1a06c5dec1e85600761039c565b610204730d9997acb3f204fe3a09acb1fd594f906bcc88bb600761039c565b610223736a49351d350245cfa979c1ebce7d18ada46406d5600761039c565b610242738e44af6308e52b94157ec9a898ec9f31cc1b0e16600761039c565b61026173f939fda6330984f3e84eb32701bd404dacc27d50600761039c565b6102807329f3536d4e2a790f11d5827490390dd1dca3e9b1600761039c565b61029f73a4c501d7cd0914fcfdb9e2bf367cc224a4531fac600761039c565b6102be735dbfeacf8f26e83314790f3ee91eeab97617f734600761039c565b6102dd73ebf184353dd81c21aaab257143346584d75d1537600761039c565b6102fc73daf028effc6e75307c54899a433b40514febb936600761039c565b61031b73c4be049c2835d5f42c3b11a44c775f8a4909bd5f600761039c565b61033a73d89ef44a1fbea729912fc40cacf7d0cae2a49841600761039c565b610359735e056d473f95ea7ef9660a46310297b2d457caad600761039c565b61037873b592016dc145afba2aee5b35e2dfe0629bf83a36600461039c565b6103977395f572bd843b74c0d582b1be5af2583293ad2255600261039c565b61046f565b604080518082019091526001600160a01b038381168252602082018381525f80546001808201835582805294517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563600290920291820180546001600160a01b031916919095161790935590517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5649092019190915581548392919061044190849061044a565b90915550505050565b8082018082111561046957634e487b7160e01b5f52601160045260245ffd5b92915050565b6080516103cd6104945f395f818160ab01528181610131015261020501526103cd5ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c80633a98ef391461004e57806357a858fc1461006a578063e4fc6b6d1461009c578063fc0c546a146100a6575b5f80fd5b61005760015481565b6040519081526020015b60405180910390f35b61007d6100783660046102c7565b6100e5565b604080516001600160a01b039093168352602083019190915201610061565b6100a461011a565b005b6100cd7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610061565b5f81815481106100f3575f80fd5b5f918252602090912060029091020180546001909101546001600160a01b03909116915082565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561017e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101a291906102de565b905080156102c4575f5b5f548110156102c2575f8082815481106101c8576101c86102f5565b5f9182526020918290206040805180820190915260029092020180546001600160a01b0390811680845260019283015494840185905291549294507f0000000000000000000000000000000000000000000000000000000000000000169263a9059cbb9290610237908861031d565b610241919061033a565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015610289573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102ad9190610359565b505080806102ba9061037f565b9150506101ac565b505b50565b5f602082840312156102d7575f80fd5b5035919050565b5f602082840312156102ee575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761033457610334610309565b92915050565b5f8261035457634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215610369575f80fd5b81518015158114610378575f80fd5b9392505050565b5f6001820161039057610390610309565b506001019056fea2646970667358221220aa1d6408a603e011931de66cfd063bd1077adb4a5db42b7677b610068614ce5164736f6c63430008150033a2646970667358221220fc7db4763a07689366273763e3f881dd8958f5498c2d6873729c2604d09238cd64736f6c6343000815003360c060405234801561000f575f80fd5b503360805260405161002090610156565b604051809103905ff080158015610039573d5f803e3d5ffd5b506001600160a01b031660a052610065737178523cd70c5e96c079701fe46cda3e1799b4ce60096100a8565b61008473c61d594dff6d253142c7fa83f41d318f157b018a60096100a8565b6100a3732000af01b455c4cd3e65aed180ec3ee52bd6c26460026100a8565b610188565b604080518082019091526001600160a01b038381168252602082018381525f80546001808201835582805294517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563600290920291820180546001600160a01b031916919095161790935590517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5649092019190915581548392919061014d908490610163565b90915550505050565b6114e4806109c183390190565b8082018082111561018257634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a05161080a6101b75f395f818161017a01526101e901525f81816101c50152610280015261080a5ff3fe608060405260043610610087575f3560e01c806357a858fc1161005757806357a858fc146100f85780638947606914610136578063e086e5ec14610155578063e1d6a17c14610169578063fc0c546a146101b4575f80fd5b80632fb8d911146100925780633a98ef39146100a8578063476343ee146100d05780634c02f62e146100e4575f80fd5b3661008e57005b5f80fd5b34801561009d575f80fd5b506100a66101e7565b005b3480156100b3575f80fd5b506100bd60015481565b6040519081526020015b60405180910390f35b3480156100db575f80fd5b506100a6610273565b3480156100ef575f80fd5b506100a66102a4565b348015610103575f80fd5b506101176101123660046106ba565b61031b565b604080516001600160a01b0390931683526020830191909152016100c7565b348015610141575f80fd5b506100a66101503660046106e5565b610350565b348015610160575f80fd5b506100a6610614565b348015610174575f80fd5b5061019c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c7565b3480156101bf575f80fd5b5061019c7f000000000000000000000000000000000000000000000000000000000000000081565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ccfd60b6040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610244573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102689190610707565b50610271610614565b565b61027b6102a4565b6102717f0000000000000000000000000000000000000000000000000000000000000000610350565b6102717368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102f7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610150919061071e565b5f8181548110610329575f80fd5b5f918252602090912060029091020180546001909101546001600160a01b03909116915082565b5f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103c5919061071e565b9050806001600160a01b0316826001600160a01b0316036104a5576040516370a0823160e01b81523060048201526001600160a01b03821690632e1a7d4d9082906370a0823190602401602060405180830381865afa15801561042a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061044e9190610707565b6040518263ffffffff1660e01b815260040161046c91815260200190565b5f604051808303815f87803b158015610483575f80fd5b505af1158015610495573d5f803e3d5ffd5b505050506104a1610614565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa1580156104e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061050d9190610707565b9050801561060f575f5b5f5481101561060d575f80828154811061053357610533610739565b5f9182526020918290206040805180820190915260029092020180546001600160a01b03908116808452600192830154948401859052915492945088169263a9059cbb92906105829088610761565b61058c919061077e565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af11580156105d4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105f8919061079d565b50508080610605906107bc565b915050610517565b505b505050565b4780156106b7575f5b5f548110156104a1575f80828154811061063957610639610739565b5f9182526020918290206040805180820190915260029092020180546001600160a01b03168083526001918201549383018490529054919350916108fc91906106829087610761565b61068c919061077e565b6040518115909202915f818181858888f19350505050505080806106af906107bc565b91505061061d565b50565b5f602082840312156106ca575f80fd5b5035919050565b6001600160a01b03811681146106b7575f80fd5b5f602082840312156106f5575f80fd5b8135610700816106d1565b9392505050565b5f60208284031215610717575f80fd5b5051919050565b5f6020828403121561072e575f80fd5b8151610700816106d1565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176107785761077861074d565b92915050565b5f8261079857634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156107ad575f80fd5b81518015158114610700575f80fd5b5f600182016107cd576107cd61074d565b506001019056fea2646970667358221220d7d1807f95e09fbb4970874e9fdb43d9a4411e3c0a1ff0acf5c19ff577d660c164736f6c63430008150033608060405234801561000f575f80fd5b50600380546001600160a01b031916331790556114b58061002f5f395ff3fe608060405260043610610134575f3560e01c806370a08231116100a8578063c6c28fd01161006d578063c6c28fd0146103eb578063cc2fbd661461040a578063dd62ed3e14610430578063e4849b3214610475578063f088d54714610494578063fdb5a03e146104a7575f80fd5b806370a082311461033057806385f2aef21461036457806395d89b4114610395578063a6f2ae3a146103c4578063a9059cbb146103cc575f80fd5b8063313ce567116100f9578063313ce567146102275780633472956c1461024d5780633ccfd60b1461026c5780634000aea014610280578063479ba7ae1461029f57806357f6b812146102be575f80fd5b806306fdde0314610147578063095ea7b31461018d57806318160ddd146101bc57806323b872dd146101d9578063259bfdd7146101f8575f80fd5b36610143576101416104bb565b005b5f80fd5b348015610152575f80fd5b5061017760405180604001604052806005815260200164484544474560d81b81525081565b6040516101849190611155565b60405180910390f35b348015610198575f80fd5b506101ac6101a73660046111bb565b6104ca565b6040519015158152602001610184565b3480156101c7575f80fd5b505f545b604051908152602001610184565b3480156101e4575f80fd5b506101ac6101f33660046111e3565b61052f565b348015610203575f80fd5b5061020c6105ae565b60408051938452602084019290925290820152606001610184565b348015610232575f80fd5b5061023b601281565b60405160ff9091168152602001610184565b348015610258575f80fd5b506101cb61026736600461122c565b610639565b348015610277575f80fd5b506101cb610788565b34801561028b575f80fd5b506101ac61029a36600461126b565b61082e565b3480156102aa575f80fd5b506101cb6102b93660046112eb565b6108cf565b3480156102c9575f80fd5b506102dd6102d83660046112eb565b610915565b604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c085015260e08401526101008301526001600160a01b031661012082015261014001610184565b34801561033b575f80fd5b506101cb61034a3660046112eb565b6001600160a01b03165f9081526001602052604090205490565b34801561036f575f80fd5b506003546001600160a01b03165b6040516001600160a01b039091168152602001610184565b3480156103a0575f80fd5b50610177604051806040016040528060048152602001632420a4a960e11b81525081565b6101cb6104bb565b3480156103d7575f80fd5b506101ac6103e63660046111bb565b610991565b3480156103f6575f80fd5b5061037d6104053660046112eb565b61099d565b348015610415575f80fd5b5073a093ea0904250084411f98d9195567e8b440669661037d565b34801561043b575f80fd5b506101cb61044a366004611304565b6001600160a01b039182165f9081526001602081815260408084209490951683529201909152205490565b348015610480575f80fd5b506101cb61048f366004611335565b6109bd565b6101cb6104a23660046112eb565b6109c7565b3480156104b2575f80fd5b506101cb610a53565b5f6104c55f6109c7565b905090565b335f8181526001602081815260408084206001600160a01b0388168086529301825280842086905551858152929391927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b6001600160a01b0383165f908152600160208181526040808420338552909201905281205482111561055f575f80fd5b6001600160a01b0384165f908152600160208181526040808420338552909201905281208054849290610593908490611360565b909155506105a49050848484610ad8565b90505b9392505050565b5f805f670de0b6b3a76400006105c25f5490565b6105d1906402540be400611373565b6105db919061139e565b6105ec9066038d7ea4c680006113bd565b92506105fa600a6064611360565b610605846064611373565b61060f919061139e565b9150606461061e600a82611360565b6106289085611373565b610632919061139e565b9050909192565b5f805f6106446105ae565b90935091505f9050856106575781610659565b825b90505f8661066857606461066b565b605a5b8761067757605a61067a565b60645b6402540be400028161068e5761068e61138a565b04905086801561069c575085155b806106ad5750861580156106ad5750855b1561073c5785156107065780600202816106dd838b60080202848660040202858602878860040202010303610c24565b846002020303670de0b6b3a764000002816106fa576106fa61138a565b049450505050506105a7565b60028082029083028261072382820180028c830260080201610c24565b0303670de0b6b3a764000002816106fa576106fa61138a565b851561076557670de0b6b3a7640000828902671bc16d674ec800008a83018402048a02016106fa565b670de0b6b3a7640000671bc16d674ec800008982018302048902838a02036106fa565b5f80610793336108cf565b90506107a3600160401b82611373565b335f90815260016020526040812060020180549091906107c49084906113d0565b9091555050604051339082156108fc029083905f818181858888f193505050501580156107f3573d5f803e3d5ffd5b5060405181815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649060200160405180910390a2919050565b5f61083a338686610ad8565b50843b63ffffffff8116156108c357604051636be32e7360e01b81526001600160a01b03871690636be32e739061087b9033908990899089906004016113f7565b6020604051808303815f875af1158015610897573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bb919061143e565b6108c3575f80fd5b50600195945050505050565b6001600160a01b0381165f90815260016020526040812060028101549054600160401b91906002546109019190611373565b61090b9190611459565b610529919061139e565b475f80808080808080806109275f5490565b98506109316105ae565b6001600160a01b038e165f81815260016020526040902054939b509199509750319550935061095f8b6108cf565b92508261096d855f80610639565b61097791906113bd565b91506109828b61099d565b90509193959799509193959799565b5f6105a7338484610ad8565b6001600160a01b039081165f908152600160205260409020600301541690565b5f61052982610c67565b5f8034116109d3575f80fd5b6001600160a01b038216158015906109f457506001600160a01b0382163314155b8015610a1a5750610a043361099d565b6001600160a01b0316826001600160a01b031614155b15610a4a57335f90815260016020526040902060030180546001600160a01b0319166001600160a01b0384161790555b61052934610e7b565b5f80610a5e336108cf565b9050610a6e600160401b82611373565b335f9081526001602052604081206002018054909190610a8f9084906113d0565b909155505060405181815233907fbd654390d0d973e8c8376ed6053be8658870df892687852cc5c914d700291b879060200160405180910390a2610ad281610e7b565b91505090565b6001600160a01b0383165f90815260016020526040812054821115610afb575f80fd5b6001600160a01b0384165f9081526001602052604081208054849290610b22908490611360565b9091555050600254610b349083611373565b6001600160a01b0385165f9081526001602052604081206002018054909190610b5e908490611459565b90915550506001600160a01b0383165f9081526001602052604081208054849290610b8a9084906113bd565b9091555050600254610b9c9083611373565b6001600160a01b0384165f9081526001602052604081206002018054909190610bc69084906113d0565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c1291815260200190565b60405180910390a35060019392505050565b80600260018201045b81811015610c6157809150600281828581610c4a57610c4a61138a565b040181610c5957610c5961138a565b049050610c2d565b50919050565b335f90815260016020526040812054821115610c81575f80fd5b610c8c825f80610639565b90505f610c9b600a6064611360565b610ca6600a84611373565b610cb0919061139e565b9050825f80015f828254610cc49190611360565b9091555050335f9081526001602052604081208054859290610ce7908490611360565b9091555050600254610cf99084611373565b335f9081526001602052604081206002018054909190610d1a908490611459565b909155505f9050610d2d600a6064611360565b610d38600185611373565b610d42919061139e565b9050610d52600160401b82611373565b60015f610d676003546001600160a01b031690565b6001600160a01b03166001600160a01b031681526020019081526020015f206002015f828254610d979190611459565b90915550505f54600160401b610dad8385611360565b610db79190611373565b610dc1919061139e565b600280545f90610dd29084906113bd565b9091555050604051339084156108fc029085905f818181858888f19350505050158015610e01573d5f803e3d5ffd5b506040518481525f9033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3604080518581526020810185905233917fed7a144fad14804d5c249145e3e0e2b63a9eb455b76aee5bc92d711e9bba3e4a910160405180910390a25050919050565b5f806064610e8a600a85611373565b610e94919061139e565b9050610ea28360015f610639565b9150815f80015f828254610eb691906113bd565b9091555050335f9081526001602052604081208054849290610ed99084906113bd565b9091555050600254610eeb9083611373565b335f9081526001602052604081206002018054909190610f0c9084906113d0565b909155505f90506064610f20600186611373565b610f2a919061139e565b9050610f3a600160401b82611373565b60015f610f4f6003546001600160a01b031690565b6001600160a01b03166001600160a01b031681526020019081526020015f206002015f828254610f7f9190611459565b909155505f90506064610f93600387611373565b610f9d919061139e565b90505f610fa93361099d565b90506001600160a01b03811615801590610fe9575068056bc75e2d63100000610fe6826001600160a01b03165f9081526001602052604090205490565b10155b1561103157610ffc600160401b83611373565b6001600160a01b0382165f9081526001602052604081206002018054909190611026908490611459565b909155506110949050565b61103f600160401b83611373565b73a093ea0904250084411f98d9195567e8b44066965f90815260016020527f9d025699c06daf25b0e2685b09612a9ecf0b64407fd10444aa5e288db0ee799d805490919061108e908490611459565b90915550505b5f54600160401b836110a68688611360565b6110b09190611360565b6110ba9190611373565b6110c4919061139e565b600280545f906110d59084906113bd565b909155505060405185815233905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3604080518781526020810187905233917f1cbc5ab135991bd2b6a4b034a04aa2aa086dac1371cb9b16b8b5e2ed6b036bed910160405180910390a250505050919050565b5f6020808352835180828501525f5b8181101561118057858101830151858201604001528201611164565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146111b6575f80fd5b919050565b5f80604083850312156111cc575f80fd5b6111d5836111a0565b946020939093013593505050565b5f805f606084860312156111f5575f80fd5b6111fe846111a0565b925061120c602085016111a0565b9150604084013590509250925092565b8015158114611229575f80fd5b50565b5f805f6060848603121561123e575f80fd5b8335925060208401356112508161121c565b915060408401356112608161121c565b809150509250925092565b5f805f806060858703121561127e575f80fd5b611287856111a0565b935060208501359250604085013567ffffffffffffffff808211156112aa575f80fd5b818701915087601f8301126112bd575f80fd5b8135818111156112cb575f80fd5b8860208285010111156112dc575f80fd5b95989497505060200194505050565b5f602082840312156112fb575f80fd5b6105a7826111a0565b5f8060408385031215611315575f80fd5b61131e836111a0565b915061132c602084016111a0565b90509250929050565b5f60208284031215611345575f80fd5b5035919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156105295761052961134c565b80820281158282048414176105295761052961134c565b634e487b7160e01b5f52601260045260245ffd5b5f826113b857634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156105295761052961134c565b8082018281125f8312801582168215821617156113ef576113ef61134c565b505092915050565b6001600160a01b0385168152602081018490526060604082018190528101829052818360808301375f818301608090810191909152601f909201601f191601019392505050565b5f6020828403121561144e575f80fd5b81516105a78161121c565b8181035f8312801583831316838312821617156114785761147861134c565b509291505056fea2646970667358221220d4996163bb350842839b008fe49e9d1e61a43bef38996ab98d1324871b55048164736f6c63430008150033

Deployed Bytecode

0x608060405234801562000010575f80fd5b506004361062000104575f3560e01c80634000aea0116200009f57806385f2aef2116200006b57806385f2aef2146200025257806395d89b411462000263578063a9059cbb1462000289578063dd62ed3e14620002a0575f80fd5b80634000aea014620001fa57806353f8b303146200021157806370a08231146200021d5780638129fc1c1462000248575f80fd5b806316f0115b11620000df57806316f0115b146200019857806318160ddd14620001be57806323b872dd14620001c7578063313ce56714620001de575f80fd5b806306fdde03146200010857806309218e911462000154578063095ea7b31462000170575b5f80fd5b6200013c6040518060400160405280601481526020017326bab63632ba1026b7b732bc9026b4b9b9b4b7b760611b81525081565b6040516200014b919062001381565b60405180910390f35b6004546001600160801b03165b6040519081526020016200014b565b6200018762000181366004620013e6565b620002df565b60405190151581526020016200014b565b6001546001600160a01b03165b6040516001600160a01b0390911681526020016200014b565b60025462000161565b62000187620001d836600462001413565b620002f6565b620001e7601281565b60405160ff90911681526020016200014b565b620001876200020b36600462001456565b62000385565b6200021b6200042f565b005b620001616200022e366004620014df565b6001600160a01b03165f9081526003602052604090205490565b6200021b620005eb565b5f546001600160a01b0316620001a5565b6200013c6040518060400160405280600681526020016513555313115560d21b81525081565b620001876200029a366004620013e6565b62000aec565b62000161620002b136600462001504565b6001600160a01b039182165f9081526003602090815260408083209390941682526001909201909152205490565b5f620002ed33848462000afa565b90505b92915050565b6001600160a01b0383165f9081526003602090815260408083203384526001019091528120548281101562000329575f80fd5b5f1981146200036f576001600160a01b0385165f908152600360209081526040808320338452600101909152812080548592906200036990849062001554565b90915550505b6200037c85858562000b66565b95945050505050565b5f6200039333868662000b66565b50843b63ffffffff8116156200042357604051636be32e7360e01b81526001600160a01b03871690636be32e7390620003d79033908990899089906004016200156a565b6020604051808303815f875af1158015620003f4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200041a9190620015b1565b62000423575f80fd5b50600195945050505050565b7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b031663791b98bc6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000480573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004a69190620015d2565b6001600160a01b031663fc6f78656040518060800160405280620004d26004546001600160801b031690565b8152602001620004e95f546001600160a01b031690565b6001600160a01b0390811682526001600160801b0360208084018290526040938401829052835160e087901b6001600160e01b031916815285516004820152908501519092166024830152918301518216604482015260609092015116606482015260840160408051808303815f875af11580156200056a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005909190620015f0565b50505f8054604080516323b1a1f760e11b815290516001600160a01b039092169263476343ee9260048084019382900301818387803b158015620005d2575f80fd5b505af1158015620005e5573d5f803e3d5ffd5b50505050565b60025415620005f8575f80fd5b5f3090505f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200064e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620006749190620015d2565b90505f826001600160a01b0316826001600160a01b03161090505f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b031663791b98bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620006e0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620007069190620015d2565b6b033b2e3c9fd0803ce800000060028190556001600160a01b0386165f8181526003602052604080822084905551939450909290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916200076a91815260200190565b60405180910390a36200078b84826b033b2e3c9fd0803ce800000062000afa565b505f620007ae836b033b2e3c9fd0803ce8000000674563918244f4000062000c2c565b9150505f620007d5846b033b2e3c9fd0803ce800000069d3c21bcecceda100000062000c2c565b9150505f836001600160a01b031663883164566040518061016001604052808862000801578a62000803565b895b6001600160a01b0316815260200188156200081f578a62000821565b895b6001600160a01b0316815261271060208201526040018862000844578662000846565b855b60020b815260200188156200085c57866200085e565b855b60020b8152602001886200087f576b033b2e3c9fd0803ce800000062000881565b5f5b81526020018815620008a0576b033b2e3c9fd0803ce8000000620008a2565b5f5b81526020015f81526020015f81526020018a6001600160a01b03168152602001428152506040518263ffffffff1660e01b8152600401620008e4919062001613565b6080604051808303815f875af115801562000901573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620009279190620016dc565b5050600480546fffffffffffffffffffffffffffffffff19166001600160801b038416179055506040519091505f90620009619062001373565b604051809103905ff0801580156200097b573d5f803e3d5ffd5b506040805160e0810182526001600160a01b038a811682528b811660208301818152612710848601908152868416606086019081528331608087019081525f60a0880181815260c0890191825298516304e45aaf60e01b8152975187166004890152935186166024880152915162ffffff1660448701525184166064860152516084850152935160a484015292511660c48201529192507368b3465833fb72a70ecdf485e0e4c7bd8665fc45916304e45aaf91319060e40160206040518083038185885af115801562000a50573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019062000a77919062001724565b50806001600160a01b031663e4fc6b6d6040518163ffffffff1660e01b81526004015f604051808303815f87803b15801562000ab1575f80fd5b505af115801562000ac4573d5f803e3d5ffd5b5050600480546001600160801b03428116600160801b02911617905550505050505050505050565b5f620002ed33848462000b66565b6001600160a01b038381165f8181526003602090815260408083209487168084526001909501825280832086905551858152919392917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a35060019392505050565b6004545f906001600160801b03600160801b9091041661012c0142101562000b9f5769d3c21bcecceda100000082111562000b9f575f80fd5b8162000bbf856001600160a01b03165f9081526003602052604090205490565b101562000bca575f80fd5b6001600160a01b038085165f81815260036020526040808220805487900390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062000b549086815260200190565b5f805f62000c748662000c40578462000c42565b855b871562000c50578562000c52565b865b62000c6290600160c01b62001750565b62000c6e919062001766565b62000cb4565b905062000c818162000cff565b915062000c9060c88362001780565b62000c9c9083620017a4565b915062000ca98262001026565b925050935093915050565b80600260018201045b8181101562000cf95780915060028182858162000cde5762000cde6200173c565b04018162000cf05762000cf06200173c565b04905062000cbd565b50919050565b5f6401000276a36001600160a01b0383161080159062000d3b575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b62000d715760405162461bcd60e51b81526020600482015260016024820152602960f91b60448201526064015b60405180910390fd5b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c9790881196179094179092171790911717176080811062000e0757607f810383901c915062000e11565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b146200101757886001600160a01b031662000ff98262001026565b6001600160a01b0316111562001010578162001019565b8062001019565b815b9998505050505050505050565b5f805f8360020b126200103d578260020b62001044565b8260020b5f035b9050620d89e88111156200107f5760405162461bcd60e51b81526020600482015260016024820152601560fa1b604482015260640162000d68565b5f816001165f036200109657600160801b620010a8565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615620010dd576ffff97272373d413259a46990580e213a0260801c5b6004821615620010fd576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b60088216156200111d576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156200113d576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156200115d576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156200117d576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156200119d576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615620011be576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615620011df576ff987a7253ac413176f2b074cf7815e540260801c5b61040082161562001200576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161562001221576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161562001242576fd097f3bdfd2022b8845ad8f792aa58250260801c5b61200082161562001263576fa9f746462d870fdf8a65dc1f90e061e50260801c5b61400082161562001284576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615620012a5576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615620012c7576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615620012e8576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161562001308576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161562001326576b048a170391f7dc42444e8fa20260801c5b5f8460020b13156200134957805f19816200134557620013456200173c565b0490505b6401000000008106156200135f57600162001361565b5f5b60ff16602082901c0192505050919050565b61086180620017cd83390190565b5f6020808352835180828501525f5b81811015620013ae5785810183015185820160400152820162001390565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114620013e3575f80fd5b50565b5f8060408385031215620013f8575f80fd5b82356200140581620013ce565b946020939093013593505050565b5f805f6060848603121562001426575f80fd5b83356200143381620013ce565b925060208401356200144581620013ce565b929592945050506040919091013590565b5f805f80606085870312156200146a575f80fd5b84356200147781620013ce565b935060208501359250604085013567ffffffffffffffff808211156200149b575f80fd5b818701915087601f830112620014af575f80fd5b813581811115620014be575f80fd5b886020828501011115620014d0575f80fd5b95989497505060200194505050565b5f60208284031215620014f0575f80fd5b8135620014fd81620013ce565b9392505050565b5f806040838503121562001516575f80fd5b82356200152381620013ce565b915060208301356200153581620013ce565b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115620002f057620002f062001540565b6001600160a01b0385168152602081018490526060604082018190528101829052818360808301375f818301608090810191909152601f909201601f191601019392505050565b5f60208284031215620015c2575f80fd5b81518015158114620014fd575f80fd5b5f60208284031215620015e3575f80fd5b8151620014fd81620013ce565b5f806040838503121562001602575f80fd5b505080516020909101519092909150565b81516001600160a01b03168152610160810160208301516200164060208401826001600160a01b03169052565b50604083015162001658604084018262ffffff169052565b5060608301516200166e606084018260020b9052565b50608083015162001684608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151620016cb828501826001600160a01b03169052565b505061014092830151919092015290565b5f805f8060808587031215620016f0575f80fd5b8451935060208501516001600160801b03811681146200170e575f80fd5b6040860151606090960151949790965092505050565b5f6020828403121562001735575f80fd5b5051919050565b634e487b7160e01b5f52601260045260245ffd5b5f826200176157620017616200173c565b500490565b8082028115828204841417620002f057620002f062001540565b5f8260020b806200179557620017956200173c565b808360020b0791505092915050565b600282810b9082900b03627fffff198112627fffff82131715620002f057620002f06200154056fe60a060405234801561000f575f80fd5b5033608052610033731427798f129b92f19927931a964d17bd6c2f5253600a61039c565b610052739d756a1848ee62db36c17f000699f65bfef9bf11600761039c565b610071731248e5ce0db0f869a9a934b1677bd5a17e5b8dfe600761039c565b610090736a5da854d5a3a0fc4a760bc6a9062d2a8e36431a600761039c565b6100af735a02fbce3b19e9508f5cc7f351f671795c1a81a4600761039c565b6100ce731b1b694c797904d9b84ed636661c32c4dcaa17d9600761039c565b6100ed73492bb59126d7f06c2c5b13cd50cad209a43ea326600761039c565b61010c7360d5567d7f8d05c899c89e63e00e4f6ca396ec13600761039c565b61012b73bae44b530f65aa9a97bb0d17b4eafb07ac67259c600761039c565b61014a73e6ed771d0dec3a1f5b1a9bbc90ff9353e7ec9c56600761039c565b61016973c44241b85051e5837b522289b2559d70496b16dc600761039c565b610188730539480ee00a547974e7e38c1a9c8b046d767f22600761039c565b6101a7737a3dd779b524c80e464b23afca6906539df958d0600761039c565b6101c673dfce959d59f3e34c4f018cd91e4a5b9453ff2d7d600761039c565b6101e573ac537fcf993fabca3e795658b5b1a06c5dec1e85600761039c565b610204730d9997acb3f204fe3a09acb1fd594f906bcc88bb600761039c565b610223736a49351d350245cfa979c1ebce7d18ada46406d5600761039c565b610242738e44af6308e52b94157ec9a898ec9f31cc1b0e16600761039c565b61026173f939fda6330984f3e84eb32701bd404dacc27d50600761039c565b6102807329f3536d4e2a790f11d5827490390dd1dca3e9b1600761039c565b61029f73a4c501d7cd0914fcfdb9e2bf367cc224a4531fac600761039c565b6102be735dbfeacf8f26e83314790f3ee91eeab97617f734600761039c565b6102dd73ebf184353dd81c21aaab257143346584d75d1537600761039c565b6102fc73daf028effc6e75307c54899a433b40514febb936600761039c565b61031b73c4be049c2835d5f42c3b11a44c775f8a4909bd5f600761039c565b61033a73d89ef44a1fbea729912fc40cacf7d0cae2a49841600761039c565b610359735e056d473f95ea7ef9660a46310297b2d457caad600761039c565b61037873b592016dc145afba2aee5b35e2dfe0629bf83a36600461039c565b6103977395f572bd843b74c0d582b1be5af2583293ad2255600261039c565b61046f565b604080518082019091526001600160a01b038381168252602082018381525f80546001808201835582805294517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563600290920291820180546001600160a01b031916919095161790935590517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5649092019190915581548392919061044190849061044a565b90915550505050565b8082018082111561046957634e487b7160e01b5f52601160045260245ffd5b92915050565b6080516103cd6104945f395f818160ab01528181610131015261020501526103cd5ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c80633a98ef391461004e57806357a858fc1461006a578063e4fc6b6d1461009c578063fc0c546a146100a6575b5f80fd5b61005760015481565b6040519081526020015b60405180910390f35b61007d6100783660046102c7565b6100e5565b604080516001600160a01b039093168352602083019190915201610061565b6100a461011a565b005b6100cd7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610061565b5f81815481106100f3575f80fd5b5f918252602090912060029091020180546001909101546001600160a01b03909116915082565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561017e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101a291906102de565b905080156102c4575f5b5f548110156102c2575f8082815481106101c8576101c86102f5565b5f9182526020918290206040805180820190915260029092020180546001600160a01b0390811680845260019283015494840185905291549294507f0000000000000000000000000000000000000000000000000000000000000000169263a9059cbb9290610237908861031d565b610241919061033a565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015610289573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102ad9190610359565b505080806102ba9061037f565b9150506101ac565b505b50565b5f602082840312156102d7575f80fd5b5035919050565b5f602082840312156102ee575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761033457610334610309565b92915050565b5f8261035457634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215610369575f80fd5b81518015158114610378575f80fd5b9392505050565b5f6001820161039057610390610309565b506001019056fea2646970667358221220aa1d6408a603e011931de66cfd063bd1077adb4a5db42b7677b610068614ce5164736f6c63430008150033a2646970667358221220fc7db4763a07689366273763e3f881dd8958f5498c2d6873729c2604d09238cd64736f6c63430008150033

Deployed Bytecode Sourcemap

14946:11994:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15835:52;;;;;;;;;;;;;;;-1:-1:-1;;;15835:52:0;;;;;;;;;;;;:::i;:::-;;;;;;;;19988:82;20050:15;;-1:-1:-1;;;;;20050:15:0;19988:82;;;713:25:1;;;701:2;686:18;19988:82:0;567:177:1;18688:132:0;;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;18688:132:0;1205:187:1;19568:72:0;19626:9;;-1:-1:-1;;;;;19626:9:0;19568:72;;;-1:-1:-1;;;;;1670:32:1;;;1652:51;;1640:2;1625:18;19568:72:0;1506:203:1;19645:86:0;19710:16;;19645:86;;18825:321;;;;;;:::i;:::-;;:::i;15935:35::-;;15968:2;15935:35;;;;;2347:4:1;2335:17;;;2317:36;;2305:2;2290:18;15935:35:0;2175:184:1;19151:323:0;;;;;;:::i;:::-;;:::i;18283:271::-;;;:::i;:::-;;19736:106;;;;;;:::i;:::-;-1:-1:-1;;;;;19812:17:0;19791:7;19812:17;;;:10;:17;;;;;:25;;19736:106;16789:1489;;;:::i;19482:81::-;19519:7;19548:9;-1:-1:-1;;;;;19548:9:0;19482:81;;15891:40;;;;;;;;;;;;;;;-1:-1:-1;;;15891:40:0;;;;;18559:124;;;;;;:::i;:::-;;:::i;19847:136::-;;;;;;:::i;:::-;-1:-1:-1;;;;;19941:17:0;;;19920:7;19941:17;;;:10;:17;;;;;;;;:37;;;;;;:27;;;;:37;;;;;;19847:136;18688:132;18758:4;18776:39;18785:10;18797:8;18807:7;18776:8;:39::i;:::-;18769:46;;18688:132;;;;;:::o;18825:321::-;-1:-1:-1;;;;;19941:17:0;;18910:4;19941:17;;;:10;:17;;;;;;;;18959:10;19941:37;;:27;;:37;;;;;;18997:7;18983:10;:21;;18975:30;;;;;;-1:-1:-1;;19014:10:0;:22;19010:90;;-1:-1:-1;;;;;19044:17:0;;:4;:17;;;:10;:17;;;;;;;;19072:10;19044:39;;:27;;:39;;;;;:50;;19087:7;;19044:4;:50;;19087:7;;19044:50;:::i;:::-;;;;-1:-1:-1;;19010:90:0;19111:30;19121:5;19128:3;19133:7;19111:9;:30::i;:::-;19104:37;18825:321;-1:-1:-1;;;;;18825:321:0:o;19151:323::-;19246:4;19257:35;19267:10;19279:3;19284:7;19257:9;:35::i;:::-;-1:-1:-1;19338:16:0;;19367:9;;;;19363:91;;19392:55;;-1:-1:-1;;;19392:55:0;;-1:-1:-1;;;;;19392:27:0;;;;;:55;;19420:10;;19432:7;;19441:5;;;;19392:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19384:64;;;;;;-1:-1:-1;19465:4:0;;19151:323;-1:-1:-1;;;;;19151:323:0:o;18283:271::-;15188:42;-1:-1:-1;;;;;18343:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18327:49:0;;18377:142;;;;;;;;18422:10;20050:15;;-1:-1:-1;;;;;20050:15:0;;19988:82;18422:10;18377:142;;;;18449:6;19519:7;19548:9;-1:-1:-1;;;;;19548:9:0;;19482:81;18449:6;-1:-1:-1;;;;;18377:142:0;;;;;-1:-1:-1;;;;;18377:142:0;;;;;;;;;;;;;;18327:193;;;;;;-1:-1:-1;;;;;;18327:193:0;;;5400:13:1;;18327:193:0;;;5382:32:1;5462:17;;;5456:24;5452:50;;;5430:20;;;5423:80;5538:17;;;5532:24;5647:21;;5625:20;;;5618:51;5729:4;5717:17;;;5711:24;5707:33;5685:20;;;5678:63;5354:19;;18327:193:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;18525:4:0;:9;;:24;;;-1:-1:-1;;;18525:24:0;;;;-1:-1:-1;;;;;18525:9:0;;;;:22;;:24;;;;;;;;;;:4;:9;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18283:271::o;16789:1489::-;19710:16;;16833:18;16825:27;;;;;;16857:13;16881:4;16857:29;;16891:13;15188:42;-1:-1:-1;;;;;16907:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16891:30;;16926:11;16948:5;-1:-1:-1;;;;;16940:13:0;:5;-1:-1:-1;;;;;16940:13:0;;16926:27;;16958:19;15188:42;-1:-1:-1;;;;;16996:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15127:4;17026:16;:33;;;-1:-1:-1;;;;;17064:17:0;;17026:4;17064:17;;;:10;:17;;;;;;:42;;;17116:45;16958:63;;-1:-1:-1;17064:17:0;;17026:4;;17116:45;;;;713:25:1;;701:2;686:18;;567:177;17116:45:0;;;;;;;;17166;17175:5;17190:3;15127:4;17166:8;:45::i;:::-;;17220:14;17238:66;17265:6;15127:4;15277:7;17238:26;:66::i;:::-;17216:88;;;17313:14;17331:64;17358:6;15127:4;15362:9;17331:26;:64::i;:::-;17309:86;;;17401:19;17430:3;-1:-1:-1;;;;;17430:8:0;;17439:403;;;;;;;;17480:6;:22;;17497:5;17480:22;;;17489:5;17480:22;-1:-1:-1;;;;;17439:403:0;;;;;17517:6;17516:7;:23;;17534:5;17516:23;;;17526:5;17516:23;-1:-1:-1;;;;;17439:403:0;;;17550:5;17439:403;;;;;;17572:6;:28;;17592:8;17572:28;;;17581:8;17572:28;17439:403;;;;;;17618:6;17617:7;:29;;17638:8;17617:29;;;17627:8;17617:29;17439:403;;;;;;17668:6;:27;;15127:4;17668:27;;;17677:1;17668:27;17439:403;;;;17718:6;17717:7;:28;;15127:4;17717:28;;;17727:1;17717:28;17439:403;;;;17763:1;17439:403;;;;17782:1;17439:403;;;;17800:5;-1:-1:-1;;;;;17439:403:0;;;;;17821:15;17439:403;;;17430:413;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;17848:15:0;:38;;-1:-1:-1;;17848:38:0;-1:-1:-1;;;;;17848:38:0;;;;;-1:-1:-1;17918:17:0;;17848:38;;-1:-1:-1;;;17918:17:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17985:211:0;;;;;;;;-1:-1:-1;;;;;17985:211:0;;;;;17970:13;;;17985:211;;;;;;18067:5;17985:211;;;;;;;;;;;;;;;18126:13;;17985:211;;;;;;-1:-1:-1;17985:211:0;;;;;;;;;;;;17940:257;;-1:-1:-1;;;17940:257:0;;8195:13:1;;8191:22;;17940:257:0;;;8173:41:1;8256:24;;8252:33;;8230:20;;;8223:63;8328:24;;8354:8;8324:39;8302:20;;;8295:69;8406:24;8402:33;;8380:20;;;8373:63;8474:24;8452:20;;;8445:54;8537:24;;8515:20;;;8508:54;8604:24;;8600:33;8578:20;;;8571:63;17985:211:0;;-1:-1:-1;15188:42:0;;17940:23;;17970:13;;8107:19:1;;17940:257:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18202:12;-1:-1:-1;;;;;18202:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18232:14:0;:41;;-1:-1:-1;;;;;18257:15:0;18232:41;;-1:-1:-1;;;18232:41:0;;;;;;-1:-1:-1;;;;;;;;;;16789:1489:0:o;18559:124::-;18625:4;18643:35;18653:10;18665:3;18670:7;18643:9;:35::i;20077:212::-;-1:-1:-1;;;;;20175:18:0;;;20164:4;20175:18;;;:10;:18;;;;;;;;:38;;;;;;:28;;;;:38;;;;;:48;;;20233:35;713:25:1;;;20164:4:0;;20175:38;:18;20233:35;;686:18:1;20233:35:0;;;;;;;;-1:-1:-1;20280:4:0;20077:212;;;;;:::o;20295:395::-;20426:14;;20377:4;;-1:-1:-1;;;;;;;;20426:14:0;;;;15451:9;20426:27;20408:15;:45;20404:96;;;15504:21;20470:22;;;20462:31;;;;;;20533:7;20513:16;20523:5;-1:-1:-1;;;;;19812:17:0;19791:7;19812:17;;;:10;:17;;;;;:25;;19736:106;20513:16;:27;;20505:36;;;;;;-1:-1:-1;;;;;20547:17:0;;;:4;:17;;;:10;:17;;;;;;:36;;;;;;;20589:15;;;;;;;;;;:34;;;;;;20634:29;;;;;;20576:7;713:25:1;;701:2;686:18;;567:177;26584:353:0;26688:13;26703:10;26720:17;26748:72;26794:6;:24;;26813:5;26794:24;;;26803:7;26794:24;26765:6;26764:7;:25;;26784:5;26764:25;;;26774:7;26764:25;26754:36;;-1:-1:-1;;;26754:36:0;:::i;:::-;:65;;;;:::i;:::-;26748:5;:72::i;:::-;26720:101;;26833:30;26853:9;26833:19;:30::i;:::-;26826:37;-1:-1:-1;26883:10:0;26890:3;26826:37;26883:10;:::i;:::-;26875:19;;:4;:19;:::i;:::-;26868:26;;26907:25;26927:4;26907:19;:25::i;:::-;26899:33;;26715:222;26584:353;;;;;;:::o;26348:231::-;26451:6;26461:1;26456;26451:6;;26450:12;26485:85;26499:6;26492:4;:13;26485:85;;;26523:4;26514:13;;26562:1;26554:4;26547;26542:2;:9;;;;;:::i;:::-;;:16;26541:22;;;;;:::i;:::-;;26534:29;;26485:85;;;26419:156;26348:231;;;:::o;22917:3426::-;22991:10;15724;-1:-1:-1;;;;;23032:30:0;;;;;;:63;;-1:-1:-1;15780:49:0;-1:-1:-1;;;;;23066:29:0;;;23032:63;23024:77;;;;-1:-1:-1;;;23024:77:0;;9835:2:1;23024:77:0;;;9817:21:1;9874:1;9854:18;;;9847:29;-1:-1:-1;;;9892:18:1;;;9885:31;9933:18;;23024:77:0;;;;;;;;;-1:-1:-1;;;;;23148:2:0;23123:27;;;;-1:-1:-1;;;;;23236:41:0;;23233:1;23229:49;23312:9;;;23370:18;23364:25;;23361:1;23357:33;23424:9;;;23482:10;23476:17;;23473:1;23469:25;23528:9;;;23586:6;23580:13;;23577:1;23573:21;23628:9;;;23686:4;23680:11;;23677:1;23673:19;;;23726:9;;;23784:3;23778:10;;23775:1;23771:18;23823:9;;;23875:10;;;23872:1;23868:18;;;23920:9;;;;23965:10;;;23403;;23507;;;23607;;;23705;23802;;;23899;23988;24022:3;24015:10;;24011:75;;24047:3;24041;:9;24031:5;:20;;24027:24;;24011:75;;;24082:3;24076;:9;24066:5;:20;;24062:24;;24011:75;24172:9;;;24167:3;24163:19;;;24197:11;;;;24255:9;;;;24305;;24296:19;;;24330:11;;;24388:9;24438;;24429:19;;;24463:11;;;24521:9;24571;;24562:19;;;24596:11;;;24654:9;24704;;24695:19;;;24729:11;;;24787:9;24837;;24828:19;;;24862:11;;;24920:9;24970;;24961:19;;;24995:11;;;25053:9;25103;;25094:19;;;25128:11;;;25186:9;25236;;25227:19;;;25261:11;;;25319:9;25369;;25360:19;;;25394:11;;;25452:9;25502;;25493:19;;;25527:11;;;25585:9;25635;;25626:19;;;25660:11;;;25718:9;25768;;25759:19;;;25793:11;;;;25851:9;;;;25901;;25892:19;;;;;24172:9;-1:-1:-1;;24110:17:0;;24132:2;24109:25;24233:10;;;;;;;24223:21;24366:10;;;;;;;24356:21;;;;24499:10;;;;;;;24489:21;;;;24632:10;;;;;;;24622:21;;;;24765:10;;;;;;;24755:21;;;;24898:10;;;;;;;24888:21;;;;25031:10;;;;;;;25021:21;25164:10;;;;;;;25154:21;25297:10;;;;;;;25287:21;25430:10;;;;;;;25420:21;25563:10;;;;;;;25553:21;25696:10;;;;;;;25686:21;25829:10;;;;;;;25819:21;25962:10;;;;;;;25952:21;26017:24;26009:32;;-1:-1:-1;;26072:53:0;;24124:3;26071:62;;;;26178:39;26162:55;;26161:64;;26241:17;;;;;;;;;:92;;26302:12;-1:-1:-1;;;;;26271:43:0;:27;26291:6;26271:19;:27::i;:::-;-1:-1:-1;;;;;26271:43:0;;;:62;;26326:7;26241:92;;26271:62;26317:6;26241:92;;;26261:7;26241:92;26234:99;22917:3426;-1:-1:-1;;;;;;;;;22917:3426:0:o;20697:2215::-;20761:20;20804:15;20829:1;20822:4;:8;;;:57;;20873:4;20866:12;;20822:57;;;20849:4;20842:12;;20841:13;;20822:57;20804:75;-1:-1:-1;15669:9:0;20893:36;;;20885:50;;;;-1:-1:-1;;;20885:50:0;;10164:2:1;20885:50:0;;;10146:21:1;10203:1;10183:18;;;10176:29;-1:-1:-1;;;10221:18:1;;;10214:31;10262:18;;20885:50:0;9962:324:1;20885:50:0;20943:13;20959:7;20969:3;20959:13;20976:1;20959:18;:93;;-1:-1:-1;;;20959:93:0;;;20980:34;20959:93;20943:109;;;-1:-1:-1;21072:3:0;21062:13;;:18;21058:83;;21099:34;21091:42;21138:3;21090:51;21058:83;21161:3;21151:13;;:18;21147:83;;21188:34;21180:42;21227:3;21179:51;21147:83;21250:3;21240:13;;:18;21236:83;;21277:34;21269:42;21316:3;21268:51;21236:83;21339:4;21329:14;;:19;21325:84;;21367:34;21359:42;21406:3;21358:51;21325:84;21429:4;21419:14;;:19;21415:84;;21457:34;21449:42;21496:3;21448:51;21415:84;21519:4;21509:14;;:19;21505:84;;21547:34;21539:42;21586:3;21538:51;21505:84;21609:4;21599:14;;:19;21595:84;;21637:34;21629:42;21676:3;21628:51;21595:84;21699:5;21689:15;;:20;21685:85;;21728:34;21720:42;21767:3;21719:51;21685:85;21790:5;21780:15;;:20;21776:85;;21819:34;21811:42;21858:3;21810:51;21776:85;21881:5;21871:15;;:20;21867:85;;21910:34;21902:42;21949:3;21901:51;21867:85;21972:5;21962:15;;:20;21958:85;;22001:34;21993:42;22040:3;21992:51;21958:85;22063:6;22053:16;;:21;22049:86;;22093:34;22085:42;22132:3;22084:51;22049:86;22155:6;22145:16;;:21;22141:86;;22185:34;22177:42;22224:3;22176:51;22141:86;22247:6;22237:16;;:21;22233:86;;22277:34;22269:42;22316:3;22268:51;22233:86;22339:6;22329:16;;:21;22325:86;;22369:34;22361:42;22408:3;22360:51;22325:86;22431:7;22421:17;;:22;22417:86;;22462:33;22454:41;22500:3;22453:50;22417:86;22523:7;22513:17;;:22;22509:85;;22554:32;22546:40;22591:3;22545:49;22509:85;22614:7;22604:17;;:22;22600:83;;22645:30;22637:38;22680:3;22636:47;22600:83;22703:7;22693:17;;:22;22689:78;;22734:25;22726:33;22764:3;22725:42;22689:78;22786:1;22779:4;:8;;;22775:47;;;22817:5;-1:-1:-1;;22797:25:0;;;;;:::i;:::-;;22789:33;;22775:47;22879:7;22870:5;:17;:22;:30;;22899:1;22870:30;;;22895:1;22870:30;22853:48;;22863:2;22854:5;:11;;22853:48;22830:72;;20788:2120;;20697:2215;;;:::o;-1:-1:-1:-;;;;;;;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;804:70;749:131;:::o;885:315::-;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1714:456::-;1791:6;1799;1807;1860:2;1848:9;1839:7;1835:23;1831:32;1828:52;;;1876:1;1873;1866:12;1828:52;1915:9;1902:23;1934:31;1959:5;1934:31;:::i;:::-;1984:5;-1:-1:-1;2041:2:1;2026:18;;2013:32;2054:33;2013:32;2054:33;:::i;:::-;1714:456;;2106:7;;-1:-1:-1;;;2160:2:1;2145:18;;;;2132:32;;1714:456::o;2364:794::-;2452:6;2460;2468;2476;2529:2;2517:9;2508:7;2504:23;2500:32;2497:52;;;2545:1;2542;2535:12;2497:52;2584:9;2571:23;2603:31;2628:5;2603:31;:::i;:::-;2653:5;-1:-1:-1;2705:2:1;2690:18;;2677:32;;-1:-1:-1;2760:2:1;2745:18;;2732:32;2783:18;2813:14;;;2810:34;;;2840:1;2837;2830:12;2810:34;2878:6;2867:9;2863:22;2853:32;;2923:7;2916:4;2912:2;2908:13;2904:27;2894:55;;2945:1;2942;2935:12;2894:55;2985:2;2972:16;3011:2;3003:6;3000:14;2997:34;;;3027:1;3024;3017:12;2997:34;3072:7;3067:2;3058:6;3054:2;3050:15;3046:24;3043:37;3040:57;;;3093:1;3090;3083:12;3040:57;2364:794;;;;-1:-1:-1;;3124:2:1;3116:11;;-1:-1:-1;;;2364:794:1:o;3163:247::-;3222:6;3275:2;3263:9;3254:7;3250:23;3246:32;3243:52;;;3291:1;3288;3281:12;3243:52;3330:9;3317:23;3349:31;3374:5;3349:31;:::i;:::-;3399:5;3163:247;-1:-1:-1;;;3163:247:1:o;3415:388::-;3483:6;3491;3544:2;3532:9;3523:7;3519:23;3515:32;3512:52;;;3560:1;3557;3550:12;3512:52;3599:9;3586:23;3618:31;3643:5;3618:31;:::i;:::-;3668:5;-1:-1:-1;3725:2:1;3710:18;;3697:32;3738:33;3697:32;3738:33;:::i;:::-;3790:7;3780:17;;;3415:388;;;;;:::o;3808:127::-;3869:10;3864:3;3860:20;3857:1;3850:31;3900:4;3897:1;3890:15;3924:4;3921:1;3914:15;3940:128;4007:9;;;4028:11;;;4025:37;;;4042:18;;:::i;4073:559::-;-1:-1:-1;;;;;4286:32:1;;4268:51;;4350:2;4335:18;;4328:34;;;4398:2;4393;4378:18;;4371:30;;;4417:18;;4410:34;;;4437:6;4487;4481:3;4466:19;;4453:49;4552:1;4522:22;;;4546:3;4518:32;;;4511:43;;;;4615:2;4594:15;;;-1:-1:-1;;4590:29:1;4575:45;4571:55;;4073:559;-1:-1:-1;;;4073:559:1:o;4637:277::-;4704:6;4757:2;4745:9;4736:7;4732:23;4728:32;4725:52;;;4773:1;4770;4763:12;4725:52;4805:9;4799:16;4858:5;4851:13;4844:21;4837:5;4834:32;4824:60;;4880:1;4877;4870:12;4919:251;4989:6;5042:2;5030:9;5021:7;5017:23;5013:32;5010:52;;;5058:1;5055;5048:12;5010:52;5090:9;5084:16;5109:31;5134:5;5109:31;:::i;5752:245::-;5831:6;5839;5892:2;5880:9;5871:7;5867:23;5863:32;5860:52;;;5908:1;5905;5898:12;5860:52;-1:-1:-1;;5931:16:1;;5987:2;5972:18;;;5966:25;5931:16;;5966:25;;-1:-1:-1;5752:245:1:o;6195:1218::-;6413:13;;-1:-1:-1;;;;;1463:31:1;1451:44;;6381:3;6366:19;;6485:4;6477:6;6473:17;6467:24;6500:54;6548:4;6537:9;6533:20;6519:12;-1:-1:-1;;;;;1463:31:1;1451:44;;1397:104;6500:54;;6603:4;6595:6;6591:17;6585:24;6618:55;6667:4;6656:9;6652:20;6636:14;6078:8;6067:20;6055:33;;6002:92;6618:55;;6722:4;6714:6;6710:17;6704:24;6737:54;6785:4;6774:9;6770:20;6754:14;6174:1;6163:20;6151:33;;6099:91;6737:54;;6840:4;6832:6;6828:17;6822:24;6855:54;6903:4;6892:9;6888:20;6872:14;6174:1;6163:20;6151:33;;6099:91;6855:54;;6965:4;6957:6;6953:17;6947:24;6940:4;6929:9;6925:20;6918:54;7028:4;7020:6;7016:17;7010:24;7003:4;6992:9;6988:20;6981:54;7091:4;7083:6;7079:17;7073:24;7066:4;7055:9;7051:20;7044:54;7117:6;7177:2;7169:6;7165:15;7159:22;7154:2;7143:9;7139:18;7132:50;;7201:6;7256:2;7248:6;7244:15;7238:22;7269:54;7319:2;7308:9;7304:18;7288:14;-1:-1:-1;;;;;1463:31:1;1451:44;;1397:104;7269:54;-1:-1:-1;;7342:6:1;7390:15;;;7384:22;7364:18;;;;7357:50;6195:1218;:::o;7418:489::-;7515:6;7523;7531;7539;7592:3;7580:9;7571:7;7567:23;7563:33;7560:53;;;7609:1;7606;7599:12;7560:53;7638:9;7632:16;7622:26;;7691:2;7680:9;7676:18;7670:25;-1:-1:-1;;;;;7728:5:1;7724:46;7717:5;7714:57;7704:85;;7785:1;7782;7775:12;7704:85;7853:2;7838:18;;7832:25;7897:2;7882:18;;;7876:25;7418:489;;7808:5;;-1:-1:-1;7418:489:1;-1:-1:-1;;;7418:489:1:o;8645:184::-;8715:6;8768:2;8756:9;8747:7;8743:23;8739:32;8736:52;;;8784:1;8781;8774:12;8736:52;-1:-1:-1;8807:16:1;;8645:184;-1:-1:-1;8645:184:1:o;8834:127::-;8895:10;8890:3;8886:20;8883:1;8876:31;8926:4;8923:1;8916:15;8950:4;8947:1;8940:15;8966:120;9006:1;9032;9022:35;;9037:18;;:::i;:::-;-1:-1:-1;9071:9:1;;8966:120::o;9091:168::-;9164:9;;;9195;;9212:15;;;9206:22;;9192:37;9182:71;;9233:18;;:::i;9264:166::-;9294:1;9335;9332;9321:16;9356:3;9346:37;;9363:18;;:::i;:::-;9420:3;9416:1;9413;9402:16;9397:27;9392:32;;;9264:166;;;;:::o;9435:193::-;9533:1;9522:16;;;9504;;;;9500:39;-1:-1:-1;;9554:23:1;;9589:8;9579:19;;9551:48;9548:74;;;9602:18;;:::i

Swarm Source

ipfs://d4996163bb350842839b008fe49e9d1e61a43bef38996ab98d1324871b550481

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.