// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {IPoolManager} from "@uniswap/v4-core/src/interfaces/IPoolManager.sol";
import {IPositionManager} from "@uniswap/v4-periphery/src/interfaces/IPositionManager.sol";
import {IHooks} from "@uniswap/v4-core/src/interfaces/IHooks.sol";
import {Actions} from "@uniswap/v4-periphery/src/libraries/Actions.sol";
import {PoolKey} from "@uniswap/v4-core/src/types/PoolKey.sol";
import {Currency} from "@uniswap/v4-core/src/types/Currency.sol";
import {LaunchToken} from "./LaunchToken.sol";
import {FeeSplitter} from "./FeeSplitter.sol";
import {LpLocker} from "./LpLocker.sol";
interface IPermit2Minimal {
function approve(address token, address spender, uint160 amount, uint48 expiration) external;
}
/// @title LaunchFactory
/// @notice One-call token launch on Uniswap v4 (Robinhood Chain): deploy the ERC-20, open a TOKEN/WETH
/// pool at the chosen static fee (1% / 2% / 3% / 5%), seed a full-range single-sided position
/// with the whole supply, lock that position in `LpLocker` forever, and wire a per-token
/// `FeeSplitter` that routes trading fees to the configured recipients + buyback.
contract LaunchFactory {
/* ───────────────────────── immutables ───────────────────────── */
address public immutable weth;
IPoolManager public immutable poolManager;
IPositionManager public immutable positionManager;
IPermit2Minimal public immutable permit2;
LpLocker public immutable lpLocker;
address public immutable platformWallet;
/// @notice Protocol fee applied to every launch, set once at deploy. Callers cannot lower or bypass it.
uint16 public immutable platformBps;
address public owner;
struct RecipientInput {
address addr;
uint16 bps;
uint8 kind; // 0 wallet, 1 twitter, 2 github
}
struct LaunchParams {
string name;
string symbol;
uint256 totalSupply;
string metadataURI;
uint24 feePips; // 10000 (1%), 20000 (2%), 30000 (3%), or 50000 (5%)
int24 tickSpacing; // e.g. 200 for exotic tokens
int24 tickLower; // position range (single-sided: current price sits at/below or at/above it)
int24 tickUpper;
uint160 sqrtPriceX96; // initial price (token per weth)
uint128 liquidity; // liquidity to mint from the single-sided token supply
uint16 buybackBps; // creator's chosen buyback reserve (platform fee is fixed by the factory)
address agent;
RecipientInput[] recipients;
}
struct Launch {
address token;
address feeSplitter;
uint256 positionTokenId;
PoolKey key;
}
Launch[] public launches;
mapping(address => address) public splitterForToken;
event Launched(
address indexed token,
address indexed feeSplitter,
uint256 positionTokenId,
uint24 feePips
);
error BadFee();
error OnlyOwner();
constructor(
address _weth,
address _poolManager,
address _positionManager,
address _permit2,
address _lpLocker,
address _platformWallet,
uint16 _platformBps
) {
if (_platformBps > 10_000) revert BadFee();
weth = _weth;
poolManager = IPoolManager(_poolManager);
positionManager = IPositionManager(_positionManager);
permit2 = IPermit2Minimal(_permit2);
lpLocker = LpLocker(payable(_lpLocker));
platformWallet = _platformWallet;
platformBps = _platformBps;
owner = msg.sender;
}
/// @notice Launch a token. Returns the deployed token + splitter addresses.
function launch(LaunchParams calldata p) external returns (address token, address feeSplitter) {
if (p.feePips != 10_000 && p.feePips != 20_000 && p.feePips != 30_000 && p.feePips != 50_000) revert BadFee();
// 1. Deploy token, mint full supply to this factory (to seed liquidity).
LaunchToken t = new LaunchToken(p.name, p.symbol, p.totalSupply, p.metadataURI, address(this));
token = address(t);
// 2. Sort currencies for the pool key (Uniswap requires currency0 < currency1).
bool tokenIsCurrency0 = token < weth;
(Currency currency0, Currency currency1) = tokenIsCurrency0
? (Currency.wrap(token), Currency.wrap(weth))
: (Currency.wrap(weth), Currency.wrap(token));
PoolKey memory key = PoolKey({
currency0: currency0,
currency1: currency1,
fee: p.feePips,
tickSpacing: p.tickSpacing,
hooks: IHooks(address(0))
});
// 3. Deploy the per-token fee splitter and register the pool with it.
FeeSplitter.Recipient[] memory recs = new FeeSplitter.Recipient[](p.recipients.length);
for (uint256 i; i < p.recipients.length; ++i) {
recs[i] = FeeSplitter.Recipient({
addr: p.recipients[i].addr,
bps: p.recipients[i].bps,
kind: p.recipients[i].kind
});
}
FeeSplitter splitter = new FeeSplitter(
token,
weth,
address(poolManager),
platformWallet,
p.agent,
platformBps, // fixed by the factory — callers cannot bypass the protocol fee
p.buybackBps,
recs
);
feeSplitter = address(splitter);
splitter.setPool(key, tokenIsCurrency0);
// 4. Initialize the pool at the chosen price.
poolManager.initialize(key, p.sqrtPriceX96);
// 5. Mint a full-range single-sided position from the token supply, owned by the locker.
uint256 tokenId = _mintLockedPosition(key, p, token);
// 6. Record + finalize.
lpLocker.registerLock(tokenId, key, feeSplitter);
splitterForToken[token] = feeSplitter;
launches.push(Launch({token: token, feeSplitter: feeSplitter, positionTokenId: tokenId, key: key}));
emit Launched(token, feeSplitter, tokenId, p.feePips);
}
/// @dev Mint the full-range position via PositionManager, single-sided in TOKEN, minted to LpLocker.
/// NOTE: v4 pulls ERC-20s through Permit2 — validate the approval + action encoding on a fork
/// against the deployed PositionManager/Permit2 versions before mainnet.
function _mintLockedPosition(PoolKey memory key, LaunchParams calldata p, address token)
internal
returns (uint256 tokenId)
{
// Approve Permit2 -> PositionManager to pull the token supply.
IERC20(token).approve(address(permit2), type(uint256).max);
permit2.approve(token, address(positionManager), type(uint160).max, type(uint48).max);
tokenId = positionManager.nextTokenId();
bytes memory actions = abi.encodePacked(uint8(Actions.MINT_POSITION), uint8(Actions.SETTLE_PAIR));
bytes[] memory params = new bytes[](2);
// MINT_POSITION(poolKey, tickLower, tickUpper, liquidity, amount0Max, amount1Max, owner, hookData)
params[0] = abi.encode(
key,
p.tickLower,
p.tickUpper,
p.liquidity,
uint128(p.totalSupply), // amount0Max
uint128(p.totalSupply), // amount1Max (single-sided: only the token side is actually pulled)
address(lpLocker),
bytes("")
);
// SETTLE_PAIR(currency0, currency1) — pay what we owe from this factory's balances.
params[1] = abi.encode(key.currency0, key.currency1);
positionManager.modifyLiquidities(abi.encode(actions, params), block.timestamp + 60);
}
function launchCount() external view returns (uint256) {
return launches.length;
}
function setOwner(address _owner) external {
if (msg.sender != owner) revert OnlyOwner();
owner = _owner;
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "_weth",
"type": "address",
"internalType": "address"
},
{
"name": "_poolManager",
"type": "address",
"internalType": "address"
},
{
"name": "_positionManager",
"type": "address",
"internalType": "address"
},
{
"name": "_permit2",
"type": "address",
"internalType": "address"
},
{
"name": "_lpLocker",
"type": "address",
"internalType": "address"
},
{
"name": "_platformWallet",
"type": "address",
"internalType": "address"
},
{
"name": "_platformBps",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "nonpayable"
},
{
"name": "BadFee",
"type": "error",
"inputs": []
},
{
"name": "OnlyOwner",
"type": "error",
"inputs": []
},
{
"name": "Launched",
"type": "event",
"inputs": [
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "feeSplitter",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "positionTokenId",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "feePips",
"type": "uint24",
"indexed": false,
"internalType": "uint24"
}
],
"anonymous": false
},
{
"name": "launch",
"type": "function",
"inputs": [
{
"name": "p",
"type": "tuple",
"components": [
{
"name": "name",
"type": "string",
"internalType": "string"
},
{
"name": "symbol",
"type": "string",
"internalType": "string"
},
{
"name": "totalSupply",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "metadataURI",
"type": "string",
"internalType": "string"
},
{
"name": "feePips",
"type": "uint24",
"internalType": "uint24"
},
{
"name": "tickSpacing",
"type": "int24",
"internalType": "int24"
},
{
"name": "tickLower",
"type": "int24",
"internalType": "int24"
},
{
"name": "tickUpper",
"type": "int24",
"internalType": "int24"
},
{
"name": "sqrtPriceX96",
"type": "uint160",
"internalType": "uint160"
},
{
"name": "liquidity",
"type": "uint128",
"internalType": "uint128"
},
{
"name": "buybackBps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "agent",
"type": "address",
"internalType": "address"
},
{
"name": "recipients",
"type": "tuple[]",
"components": [
{
"name": "addr",
"type": "address",
"internalType": "address"
},
{
"name": "bps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "kind",
"type": "uint8",
"internalType": "uint8"
}
],
"internalType": "struct LaunchFactory.RecipientInput[]"
}
],
"internalType": "struct LaunchFactory.LaunchParams"
}
],
"outputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "feeSplitter",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"name": "launchCount",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "launches",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "feeSplitter",
"type": "address",
"internalType": "address"
},
{
"name": "positionTokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "key",
"type": "tuple",
"components": [
{
"name": "currency0",
"type": "address",
"internalType": "Currency"
},
{
"name": "currency1",
"type": "address",
"internalType": "Currency"
},
{
"name": "fee",
"type": "uint24",
"internalType": "uint24"
},
{
"name": "tickSpacing",
"type": "int24",
"internalType": "int24"
},
{
"name": "hooks",
"type": "address",
"internalType": "contract IHooks"
}
],
"internalType": "struct PoolKey"
}
],
"stateMutability": "view"
},
{
"name": "lpLocker",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract LpLocker"
}
],
"stateMutability": "view"
},
{
"name": "owner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "permit2",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IPermit2Minimal"
}
],
"stateMutability": "view"
},
{
"name": "platformBps",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "view"
},
{
"name": "platformWallet",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "poolManager",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IPoolManager"
}
],
"stateMutability": "view"
},
{
"name": "positionManager",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IPositionManager"
}
],
"stateMutability": "view"
},
{
"name": "setOwner",
"type": "function",
"inputs": [
{
"name": "_owner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "splitterForToken",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "weth",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
}
]0x6101603461016c57601f613af338819003918201601f19168301916001600160401b038311848410176101705780849260e09460405283398101031261016c5761004881610184565b9061005560208201610184565b61006160408301610184565b61006d60608401610184565b9061007a60808501610184565b9260c061008960a08701610184565b9501519561ffff871680880361016c576127101061015d576080526001600160a01b0390811660a05290811660c05290811660e052166101005261012052610140525f80546001600160a01b0319163317905560405161395a908161019982396080518181816103f501526110ba015260a051818181610152015261057a015260c0518181816108090152611077015260e0518181816107b1015261116f01526101005181818161094a01526111b001526101205181818160cc015261061201526101405181818161010e01526106400152f35b63917f1a5360e01b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b038216820361016c5756fe6080806040526004361015610012575f80fd5b5f905f3560e01c90816303fc2013146111935750806312261ee71461115057806313af4035146110fb57806327cca59f146110de5780633fc8cef31461109b578063791b98bc146110585780637a6beee9146102dc5780637b443a76146101e55780638da5cb5b146101bf578063a066192d14610176578063dc4c90d314610132578063f76835e6146100f35763fa2af9da146100ad575f80fd5b346100f057806003193601126100f05760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b80fd5b50346100f057806003193601126100f057602060405161ffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346100f057806003193601126100f05760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346100f05760203660031901126100f0576004356001600160a01b0381168091036101bb576040826001600160a01b03926020945260028452205416604051908152f35b5080fd5b50346100f057806003193601126100f0576001600160a01b036020915416604051908152f35b50346100f05760203660031901126100f057600435906001548210156100f057610100610211836111d4565b506102da6001600160a01b03825416916001600160a01b036001820154166002820154906001600160a01b0360056040519461024c86611204565b8260038201541686526004810154838116602088015262ffffff8160a01c16604088015260b81c60020b606087015201541660808401526040519485526020850152604084015260608301906001600160a01b036080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565bf35b5034610573576020366003190112610573576004359067ffffffffffffffff82116105735781600401916101a0600319823603011261057357608481019261271062ffffff61032a8661125e565b1614158061103f575b80611026575b8061100d575b610ffe5761034d818061126e565b61035d602485969396018461126e565b604486013596610370606488018761126e565b60405195610ccc958688019588871067ffffffffffffffff881117610fb7576103af6103d1966103bd948b9a612c598c3960a08a5260a08a01916112a1565b9187830360208901526112a1565b918a604086015284830360608601526112a1565b9060803091015203905ff08015610f6c576001600160a01b03166001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169485821090815f14610ff557829787945b61042f8261125e565b61043b60a48a016112c1565b906040519b6104498d611204565b6001600160a01b03168c5260208c01976001600160a01b0316885262ffffff1660408c015260020b60608b015260808a015f905261018488019961048d8b896112cf565b9990506104998a611305565b996040519a6104a8908c61123c565b808b52601f19906104b890611305565b015f5b818110610fcb5750505f5b6104d08d8b6112cf565b90508110156105775789908d604061051f836104f46104ff6104fa8383888b6112cf565b9061131d565b61132d565b946105196020610513856104f4858d6112cf565b01611341565b976112cf565b01359260ff841680940361057357828e60019561ffff610561946001600160a01b036040519761054e89611220565b168752166020860152604085015261136d565b5261056c818d61136d565b50016104c6565b5f80fd5b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168b8b6105b1610164850161132d565b916105bf6101448601611341565b90604051936118b3918286019086821067ffffffffffffffff831117610fb7579061ffff8f94956001600160a01b03602095610120958b9a996113a68c396101008601988652878601528b6040860152817f0000000000000000000000000000000000000000000000000000000000000000166060860152166080840152817f00000000000000000000000000000000000000000000000000000000000000001660a08401521660c082015261010060e08201528451809452019201905f5b818110610f775750505003905ff08015610f6c576001600160a01b031696873b15610573576040519063fff7d8d960e01b82526106fb60048301866001600160a01b036080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b60a48201525f8160c481838c5af18015610f6c57610f57575b506101048201356001600160a01b038116809103610eb757849160c4602092604051948593849263313b65df60e11b845261078f600485018b6001600160a01b036080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b60a48401525af18015610e0e57610f1e575b5060405163095ea7b360e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316600482018190525f1960248301529590602081604481888d5af18015610ec357610ee7575b506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001695803b15610eb75784809160848b60405194859384926387517c4560e01b845260048401528c60248401526001600160a01b03604484015265ffffffffffff60648401525af18015610ec357908591610ece575b5050604051631d5e528f60e21b815295602087600481845afa968715610ec3578597610e8b575b50604051600160f91b6020820152600d60f81b602182015260028152916108cc60228461123c565b60609a604051916108dd8d8461123c565b60028352601f198d018d895b828110610e7a575050506108ff60c487016112c1565b9061012461090f60e489016112c1565b970135906fffffffffffffffffffffffffffffffff8216809203610e76576fffffffffffffffffffffffffffffffff16906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001697604051936020850185811067ffffffffffffffff821117610e6257946109ef94610a39948d948f94610a2b95610aa29e9b9a604052855260405198899760208901906001600160a01b036080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b60020b60c087015260020b60e0860152610100850152806101208501526101408401528a610160840152610180808401526101a0830190611381565b03601f19810183528261123c565b610a4284611350565b52610a4c83611350565b506001600160a01b0380885116915116604051916020830152604082015260408152610a788d8261123c565b610a818361135d565b52610a8b8261135d565b50604051938491604060208401528d830190611381565b91601f19828403016040830152805180845260208401936020808360051b8301019301948a915b838310610e315750505050610ae7925003601f19810184528361123c565b603c420191824211610e1d57813b15610e19578591610b25918360405180968195829463dd46508f60e01b8452604060048501526044840190611381565b90602483015203925af18015610e0e57908491610df9575b5050803b15610df55782809160e460405180948193634542c53d60e01b83528a6004840152610bac60248401896001600160a01b036080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b8b60c48401525af18015610dea57908391610dd5575b508690526002602052604082206001600160a01b0386166001600160a01b03198254161790556040516080810181811067ffffffffffffffff821117610dc15760405286815260208101868152604082019186835289810193845260015468010000000000000000811015610dad57806001610c4192016001556111d4565b959095610d99575088957ffa330d763cdecf564ce0c884dc7707a15ebbfc608e610443f52fc6976b7602cc956001600160a01b03600581608060409f60409a8f9e9a8462ffffff9b8180610d819d5116166001600160a01b03198b5416178a5551168560018a0191166001600160a01b0319825416179055516002880155519083825116846003890191166001600160a01b031982541617905560048701908480602085015116166001600160a01b03198354161782558c830151907fffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffff76ffffff000000000000000000000000000000000000000084549286015160b81b79ffffff0000000000000000000000000000000000000000000000169360a01b16911617179055015116920191166001600160a01b031982541617905561125e565b8351928352166020820152a382519182526020820152f35b634e487b7160e01b81526004819052602490fd5b634e487b7160e01b86526041600452602486fd5b634e487b7160e01b84526041600452602484fd5b81610ddf9161123c565b6101bb578188610bc2565b6040513d85823e3d90fd5b8280fd5b81610e039161123c565b610df5578289610b3d565b6040513d86823e3d90fd5b8580fd5b634e487b7160e01b86526011600452602486fd5b91936001919395506020610e508192601f198682030187528951611381565b97019301930190928794929593610ac9565b634e487b7160e01b8d52604160045260248dfd5b8980fd5b602091828288010152018e906108e9565b9096506020813d602011610ebb575b81610ea76020938361123c565b81010312610eb75751958a6108a4565b8480fd5b3d9150610e9a565b6040513d87823e3d90fd5b81610ed89161123c565b610ee357838a61087d565b8380fd5b6020813d602011610f16575b81610f006020938361123c565b81010312610eb7575180151581146107fe578480fd5b3d9150610ef3565b6020813d602011610f4f575b81610f376020938361123c565b81010312610ee357518060020b8103156107a1578380fd5b3d9150610f2a565b610f649194505f9061123c565b5f9289610714565b6040513d5f823e3d90fd5b919350916020606060019260ff604088516001600160a01b03815116845261ffff868201511686850152015116604082015201940191019184939261067e565b634e487b7160e01b5f52604160045260245ffd5b808c6020809360405192610fde84611220565b5f84525f838501525f6040850152010152016104bb565b86978394610426565b63917f1a5360e01b5f5260045ffd5b5061c35062ffffff61101e8661125e565b16141561033f565b5061753062ffffff6110378661125e565b161415610339565b50614e2062ffffff6110508661125e565b161415610333565b34610573575f3660031901126105735760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610573575f3660031901126105735760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610573575f366003190112610573576020600154604051908152f35b34610573576020366003190112610573576004356001600160a01b038116809103610573575f546001600160a01b0381163303611141576001600160a01b031916175f55005b635fc483c560e01b5f5260045ffd5b34610573575f3660031901126105735760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610573575f366003190112610573576020906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b6001548110156111f05760015f52600660205f20910201905f90565b634e487b7160e01b5f52603260045260245ffd5b60a0810190811067ffffffffffffffff821117610fb757604052565b6060810190811067ffffffffffffffff821117610fb757604052565b90601f8019910116810190811067ffffffffffffffff821117610fb757604052565b3562ffffff811681036105735790565b903590601e1981360301821215610573570180359067ffffffffffffffff82116105735760200191813603831361057357565b908060209392818452848401375f828201840152601f01601f1916010190565b358060020b81036105735790565b903590601e1981360301821215610573570180359067ffffffffffffffff82116105735760200191606082023603831361057357565b67ffffffffffffffff8111610fb75760051b60200190565b91908110156111f0576060020190565b356001600160a01b03811681036105735790565b3561ffff811681036105735790565b8051156111f05760200190565b8051600110156111f05760400190565b80518210156111f05760209160051b010190565b805180835260209291819084018484015e5f828201840152601f01601f191601019056fe61012060405234610381576118b38038038061001a81610385565b92833981016101008282031261038157610033826103aa565b91610040602082016103aa565b9061004d604082016103aa565b610059606083016103aa565b91610066608082016103aa565b9261007360a083016103be565b9261008060c084016103be565b60e084015190936001600160401b038211610381570187601f82011215610381578051906001600160401b03821161020d576100c160208360051b01610385565b9860206060818c8681520194028301019181831161038157602001925b828410610318575050505061ffff83169361271085116102215761ffff169361271061010a82876103cd565b116102215787511561022157151580610307575b610221575f95865b8851881015610230576001600160a01b03610141898b6103ee565b515116156102215761ffff60206101588a8c6103ee565b51015116156102215761017e9061ffff60206101748b8d6103ee565b51015116906103cd565b96610189818a6103ee565b51905f54916801000000000000000083101561020d5760018301805f558310156101f9576001925f805260205f200190838060a01b038151169082549161ffff60a01b602083015160a01b1691604060ff60b01b91015160b01b1692868060b81b03191617171790550196610126565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b6301f30c8760e21b5f5260045ffd5b6127108a9103610221573360805260a05260c0526001600160a01b031660e05261010052600180546001600160c01b03191660209490941b600160201b600160c01b0316939093179190911760109190911b63ffff0000161790556040516114b09081610403823960805181818161018801526107d6015260a05181818161031f01528181610b1801528181610dda0152611208015260c05181818161045201528181610a500152610d1d015260e0518181816107190152818161093a0152610e65015261010051818181610363015261065e0152f35b506001600160a01b0385161561011e565b6060848303126103815760405190606082016001600160401b0381118382101761020d57604052610348856103aa565b8252610356602086016103be565b602083015260408501519060ff821682036103815782602092604060609501528152019301926100de565b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761020d57604052565b51906001600160a01b038216820361038157565b519061ffff8216820361038157565b919082018092116103da57565b634e487b7160e01b5f52601160045260245ffd5b80518210156101f95760209160051b01019056fe608080604052600436101561001c575b50361561001a575f80fd5b005b5f905f3560e01c908163015cb437146111d15750806303fd2a45146111b55780630520e36314611193578063133795b4146110de578063182148ef1461107c5780632221466c1461105f5780632238eee514610d7a57806322eabb8e14610d5e5780633e59906e14610d415780633fc8cef314610cfe57806391dd7346146108db578063baa9f0fa146108b6578063bcf685ed146107fa578063bd1022a11461073d578063c45a0155146107b6578063c64499cb14610798578063d1bc76a114610742578063d3cd52bc1461073d578063dc4c90d3146106f9578063e4fc6b6d1461042c578063efca2eed1461040e578063f14b15a9146103f0578063f1ada4cf146103d2578063f5ff5c76146103a9578063f76835e614610387578063fa2af9da14610343578063fc0c546a146102ff5763fff7d8d90361000f57346102fc57366003190160c081126102f85760a0136102fc5760a4358015158091036102f8576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036102e9576004356001600160a01b038116908181036102e5575073ffffffffffffffffffffffffffffffffffffffff1960025416176002556024356001600160a01b038116908181036102e5575073ffffffffffffffffffffffffffffffffffffffff19600354161760035560443562ffffff811681036102dd576003546064358060020b81036102e15776ffffff00000000000000000000000000000000000000007fffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffff9160b81b79ffffff0000000000000000000000000000000000000000000000169360a01b16911617176003556084356001600160a01b0381168091036102dd5773ffffffffffffffffffffffffffffffffffffffff19600454161760045560ff80196005541691161760055580f35b8280fd5b8480fd5b8380fd5b630636a15760e11b8252600482fd5b5080fd5b80fd5b50346102fc57806003193601126102fc5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102fc57806003193601126102fc5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102fc57806003193601126102fc57602061ffff60015416604051908152f35b50346102fc57806003193601126102fc5760206001600160a01b03600154821c16604051908152f35b50346102fc57806003193601126102fc576020600654604051908152f35b50346102fc57806003193601126102fc576020600b54604051908152f35b50346102fc57806003193601126102fc576020600754604051908152f35b50346102fc57806003193601126102fc576040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690602081602481855afa9081156106ee5783916106b8575b506104a060065480926113e5565b9081156106aa57600154926127106104cd61ffff826104c1828916886113f2565b049660101c16856113f2565b04916104e2836104dd87876113e5565b6113e5565b908380610697575b505084610658575b8554869290915f198301838111855b858110610558578a7ff7576d8c2653e9d07af5ef229acf59b339e327d4e0eaddb4a96615534cf148f860808b8b8b8f61053c826007546113d8565b600755604051938452602084015260408301526060820152a180f35b61056181611370565b506040519061056f8261139a565b546001600160a01b03811682526020820161ffff8260a01c1681528460ff604085019360b01c168352610644578d8487036106295750506105b089876113e5565b915b826105c3575b505050600101610501565b9882917ff33e3e5375c5fa09142bb2d2e1a57ad05192ac66e2d28dd563570e7ef0662e3c604060ff6001600160a01b038e6001999f610620998f8461060a93511690611405565b51169351168151908152856020820152a26113d8565b96905f806105b8565b61063b61ffff612710935116896113f2565b905004916105b2565b634e487b7160e01b8e52601160045260248efd5b610683857f000000000000000000000000000000000000000000000000000000000000000084611405565b61068f856008546113d8565b6008556104f2565b6106a0916113d8565b6006555f836104ea565b62598fc960e21b8452600484fd5b90506020813d6020116106e6575b816106d3602093836113b6565b810103126106e257515f610492565b5f80fd5b3d91506106c6565b6040513d85823e3d90fd5b50346102fc57806003193601126102fc5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b611354565b50346102fc5760203660031901126102fc576004359080548210156102fc57606061076c83611370565b505460ff604051916001600160a01b038116835261ffff8160a01c16602084015260b01c166040820152f35b50346102fc57806003193601126102fc576020600854604051908152f35b50346102fc57806003193601126102fc5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102fc5760203660031901126102fc576004356001600160a01b038116908181036102dd57600154916001600160a01b038360201c168033036108a7579177ffffffffffffffffffffffffffffffffffffffff00000000917fffffffffffffffff0000000000000000000000000000000000000000ffffffff937fee7760cb405d3beb1072ae2e716857daa45a5dd52bc1383a21173199d32c7dee8780a360201b1691161760015580f35b637362044160e01b8552600485fd5b50346102fc57806003193601126102fc57602061ffff60015460101c16604051908152f35b50346106e25760203660031901126106e25760043567ffffffffffffffff81116106e257366023820112156106e257806004013567ffffffffffffffff81116106e25760248201908201903660248301116106e2576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691823303610cb9576024826040920301126106e257600554604493909301359260ff16159035600160ff1b8114610ca5578115610c83576001600160a01b036401000276a45b604051936109ad8561139a565b845260208401835f03815282604086019216825260405194633cf3645360e21b865283600254166004870152600354848116602488015262ffffff8160a01c16604488015260b81c60020b60648701528360045416608487015251151560a48601525160c4850152511660e48301526101206101048301525f610124830152602082610144815f875af1918215610c44575f92610c4f575b506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016833b156106e257604051632961046560e21b8152600481018290525f8160248183895af18015610c4457610c28575b509083610aab92611405565b604051630476982d60e21b815260208160048188875af18015610c1d57610bee575b5060055460ff1615610be65760801d5b600f0b83811315610bde57915b8210610b99578083913b156102f8578190606460405180948193630b0d9c0960e01b83526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600484015261dead60248401528760448401525af180156106ee57610b84575b610b808260405190602082015260208152610b746040826113b6565b6040519182918261132a565b0390f35b610b8f8380926113b6565b6102f85781610b58565b60405162461bcd60e51b815260206004820152600860248201527f736c6970706167650000000000000000000000000000000000000000000000006044820152606490fd5b508291610aea565b600f0b610add565b6020813d602011610c15575b81610c07602093836113b6565b810103126106e25751610acd565b3d9150610bfa565b6040513d87823e3d90fd5b610aab929196505f610c39916113b6565b835f96919250610a9f565b6040513d5f823e3d90fd5b9091506020813d602011610c7b575b81610c6b602093836113b6565b810103126106e25751905f610a45565b3d9150610c5e565b6001600160a01b0373fffd8963efd1fc6a506488495d951d5263988d256109a0565b634e487b7160e01b5f52601160045260245ffd5b60405162461bcd60e51b815260206004820152601060248201527f6e6f7420706f6f6c206d616e61676572000000000000000000000000000000006044820152606490fd5b346106e2575f3660031901126106e25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346106e2575f3660031901126106e2576020600a54604051908152f35b346106e2575f3660031901126106e25760205f54604051908152f35b346106e25760403660031901126106e2576004356024356001600160a01b0360015460201c1633036110505781158015611045575b61103657610dbf826006546113e5565b6006556040516370a0823160e01b815261dead6004820152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690602083602481855afa928315610c44575f93611002575b505f610e589160405190866020830152604082015260408152610e3e6060826113b6565b604051809381926348c8949160e01b83526004830161132a565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af18015610c4457610f5f575b506020602491604051928380926370a0823160e01b825261dead60048301525afa908115610c44575f91610f29575b7f0ec3929061cbbbeecb325623e7d5a86c3dae11cb8a22ca45dc0972955657da25604085610eef86866113e5565b610efb816009546113d8565b600955610f0a81600a546113d8565b600a55610f1982600b546113d8565b600b5582519182526020820152a1005b9290506020833d602011610f57575b81610f45602093836113b6565b810103126106e2579151610eef610ec1565b3d9150610f38565b903d805f843e610f6f81846113b6565b8201916020818403126106e25780519067ffffffffffffffff82116106e257019082601f830112156106e25781519267ffffffffffffffff8411610fee5760405190610fc5601f8601601f1916602001836113b6565b848252602085850101116106e2575f602085602496828097018386015e83010152509150610e92565b634e487b7160e01b5f52604160045260245ffd5b9092506020813d60201161102e575b8161101e602093836113b6565b810103126106e25751915f610e1a565b3d9150611011565b6328b35f2160e01b5f5260045ffd5b506006548211610daf565b637362044160e01b5f5260045ffd5b346106e2575f3660031901126106e2576020600954604051908152f35b346106e2575f3660031901126106e25760a06001600160a01b03600254166003546001600160a01b0360045416906040519283526001600160a01b038116602084015262ffffff81851c16604084015260b81c60020b60608301526080820152f35b346106e25760203660031901126106e25760043561ffff81168082036106e257600154916001600160a01b038360201c1633036110505761271082116111845761271061112f8361ffff86166113d8565b11611184577fe2fada88851b4f31f17dbcd28fda8785ea2f1352366268f68c6107e11485eede604063ffff00009381519061ffff8760101c1682526020820152a160101b169063ffff00001916176001555f80f35b6301f30c8760e21b5f5260045ffd5b346106e2575f3660031901126106e257602060ff600554166040519015158152f35b346106e2575f3660031901126106e257602060405161dead8152f35b346106e2575f3660031901126106e2576001600160a01b0360015460201c163303611050576370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316602082602481845afa918215610c44575f926112f6575b508161124f57005b60405163a9059cbb60e01b5f5261dead6004528260245260205f60448180865af19060015f51148216156112d5575b604052156112c357506020816112b77f0c526103b8f47af5516191d0c89a598755bd00faa211a3cb52e4c2cc782f7fe2936009546113d8565b600955604051908152a1005b635274afe760e01b5f5260045260245ffd5b9060018115166112ed57823b15153d1516169061127e565b503d5f823e3d90fd5b9091506020813d602011611322575b81611312602093836113b6565b810103126106e257519082611247565b3d9150611305565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b346106e2575f3660031901126106e25760206040516127108152f35b5f54811015611386575f805260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b6060810190811067ffffffffffffffff821117610fee57604052565b90601f8019910116810190811067ffffffffffffffff821117610fee57604052565b91908201809211610ca557565b91908203918211610ca557565b81810292918115918404141715610ca557565b916001600160a01b036040519263a9059cbb60e01b5f521660045260245260205f60448180865af19060015f5114821615611462575b604052156114465750565b6001600160a01b0390635274afe760e01b5f521660045260245ffd5b9060018115166112ed57823b15153d1516169061143b56fea2646970667358221220f5191a2083b972f0cc6963c1b4ed1d825a74b03dc96d5d7233424dc39902ea8864736f6c634300081a003360a06040523461050c57610ccc8038038061001981610510565b92833981019060a08183031261050c5780516001600160401b03811161050c5782610045918301610535565b60208201516001600160401b03811161050c5783610064918401610535565b60408301516060840151919490916001600160401b03811161050c5760809161008e918601610535565b9301516001600160a01b038116929083900361050c578051906001600160401b0382116103345760035490600182811c92168015610502575b60208310146103165781601f849311610494575b50602090601f831160011461042e575f92610423575b50508160011b915f199060031b1c1916176003555b83516001600160401b03811161033457600454600181811c91168015610419575b602082101461031657601f81116103b6575b50602094601f8211600114610353579481929394955f92610348575b50508160011b915f199060031b1c1916176004555b3360805282516001600160401b03811161033457600554600181811c9116801561032a575b602082101461031657601f81116102d0575b506020601f821160011461026d57819293945f92610262575b50508160011b915f199060031b1c1916176005555b811561024f576002549080820180921161023b5760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef915f9360025584845283825260408420818154019055604051908152a360405161074590816105878239608051816101090152f35b634e487b7160e01b5f52601160045260245ffd5b63ec442f0560e01b5f525f60045260245ffd5b015190505f806101ba565b601f1982169060055f52805f20915f5b8181106102b8575095836001959697106102a0575b505050811b016005556101cf565b01515f1960f88460031b161c191690555f8080610292565b9192602060018192868b01518155019401920161027d565b60055f5260205f20601f830160051c8101916020841061030c575b601f0160051c01905b81811061030157506101a1565b5f81556001016102f4565b90915081906102eb565b634e487b7160e01b5f52602260045260245ffd5b90607f169061018f565b634e487b7160e01b5f52604160045260245ffd5b015190505f80610155565b601f1982169560045f52805f20915f5b88811061039e57508360019596979810610386575b505050811b0160045561016a565b01515f1960f88460031b161c191690555f8080610378565b91926020600181928685015181550194019201610363565b60045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f830160051c8101916020841061040f575b601f0160051c01905b8181106104045750610139565b5f81556001016103f7565b90915081906103ee565b90607f1690610127565b015190505f806100f1565b60035f9081528281209350601f198516905b81811061047c5750908460019594939210610464575b505050811b01600355610106565b01515f1960f88460031b161c191690555f8080610456565b92936020600181928786015181550195019301610440565b60035f529091507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f840160051c810191602085106104f8575b90601f859493920160051c01905b8181106104ea57506100db565b5f81558493506001016104dd565b90915081906104cf565b91607f16916100c7565b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761033457604052565b81601f8201121561050c578051906001600160401b03821161033457610564601f8301601f1916602001610510565b928284526020838301011161050c57815f9260208093018386015e830101529056fe60806040526004361015610011575f80fd5b5f3560e01c806303ee438c1461052757806306fdde0314610452578063095ea7b3146103d057806318160ddd146103b357806323b872dd146102ce578063313ce567146102b357806370a082311461027c57806395d89b411461015e578063a9059cbb1461012d578063c45a0155146100ea5763dd62ed3e14610092575f80fd5b346100e65760403660031901126100e6576100ab610626565b6001600160a01b036100bb61063c565b91165f5260016020526001600160a01b0360405f2091165f52602052602060405f2054604051908152f35b5f80fd5b346100e6575f3660031901126100e65760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100e65760403660031901126100e657610153610149610626565b6024359033610652565b602060405160018152f35b346100e6575f3660031901126100e6576040515f6004548060011c90600181168015610272575b60208310811461025e5782855290811561024257506001146101ec575b50819003601f01601f191681019067ffffffffffffffff8211818310176101d857604082905281906101d490826105fc565b0390f35b634e487b7160e01b5f52604160045260245ffd5b60045f9081529091507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b82821061022c575060209150820101826101a2565b6001816020925483858801015201910190610217565b90506020925060ff191682840152151560051b820101826101a2565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610185565b346100e65760203660031901126100e6576001600160a01b0361029d610626565b165f525f602052602060405f2054604051908152f35b346100e6575f3660031901126100e657602060405160128152f35b346100e65760603660031901126100e6576102e7610626565b6102ef61063c565b604435906001600160a01b03831692835f52600160205260405f206001600160a01b0333165f5260205260405f20545f198110610332575b506101539350610652565b83811061039857841561038557331561037257610153945f52600160205260405f206001600160a01b0333165f526020528360405f209103905584610327565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b8390637dc7a0d960e11b5f523360045260245260445260645ffd5b346100e6575f3660031901126100e6576020600254604051908152f35b346100e65760403660031901126100e6576103e9610626565b602435903315610385576001600160a01b031690811561037257335f52600160205260405f20825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b346100e6575f3660031901126100e6576040515f6003548060011c9060018116801561051d575b60208310811461025e5782855290811561024257506001146104c75750819003601f01601f191681019067ffffffffffffffff8211818310176101d857604082905281906101d490826105fc565b60035f9081529091507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b828210610507575060209150820101826101a2565b60018160209254838588010152019101906104f2565b91607f1691610479565b346100e6575f3660031901126100e6576040515f6005548060011c906001811680156105f2575b60208310811461025e57828552908115610242575060011461059c5750819003601f01601f191681019067ffffffffffffffff8211818310176101d857604082905281906101d490826105fc565b60055f9081529091507f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db05b8282106105dc575060209150820101826101a2565b60018160209254838588010152019101906105c7565b91607f169161054e565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036100e657565b602435906001600160a01b03821682036100e657565b6001600160a01b03169081156106fc576001600160a01b03169182156106e957815f525f60205260405f20548181106106d057817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f525f825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b63ec442f0560e01b5f525f60045260245ffd5b634b637e8f60e11b5f525f60045260245ffdfea2646970667358221220a16189dcf385c91c1f0ca78e769703ce06518fe75f2bb88aa29f35210d2516df64736f6c634300081a0033a2646970667358221220f015b638feae0ee72521c47de3cd715381e9ddc97dcad38ca46e703e6069e9f264736f6c634300081a00330000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad730000000000000000000000008366a39cc670b4001a1121b8f6a443a643e4095100000000000000000000000058daec3116aae6d93017baaea7749052e8a04fa7000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3000000000000000000000000fd2e5e3326a298642cbf5c448bbc75e209d61414000000000000000000000000f0fa160edf1a114f442e581784853bb7274df27200000000000000000000000000000000000000000000000000000000000009c4
0x6080806040526004361015610012575f80fd5b5f905f3560e01c90816303fc2013146111935750806312261ee71461115057806313af4035146110fb57806327cca59f146110de5780633fc8cef31461109b578063791b98bc146110585780637a6beee9146102dc5780637b443a76146101e55780638da5cb5b146101bf578063a066192d14610176578063dc4c90d314610132578063f76835e6146100f35763fa2af9da146100ad575f80fd5b346100f057806003193601126100f05760206040516001600160a01b037f000000000000000000000000f0fa160edf1a114f442e581784853bb7274df272168152f35b80fd5b50346100f057806003193601126100f057602060405161ffff7f00000000000000000000000000000000000000000000000000000000000009c4168152f35b50346100f057806003193601126100f05760206040516001600160a01b037f0000000000000000000000008366a39cc670b4001a1121b8f6a443a643e40951168152f35b50346100f05760203660031901126100f0576004356001600160a01b0381168091036101bb576040826001600160a01b03926020945260028452205416604051908152f35b5080fd5b50346100f057806003193601126100f0576001600160a01b036020915416604051908152f35b50346100f05760203660031901126100f057600435906001548210156100f057610100610211836111d4565b506102da6001600160a01b03825416916001600160a01b036001820154166002820154906001600160a01b0360056040519461024c86611204565b8260038201541686526004810154838116602088015262ffffff8160a01c16604088015260b81c60020b606087015201541660808401526040519485526020850152604084015260608301906001600160a01b036080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565bf35b5034610573576020366003190112610573576004359067ffffffffffffffff82116105735781600401916101a0600319823603011261057357608481019261271062ffffff61032a8661125e565b1614158061103f575b80611026575b8061100d575b610ffe5761034d818061126e565b61035d602485969396018461126e565b604486013596610370606488018761126e565b60405195610ccc958688019588871067ffffffffffffffff881117610fb7576103af6103d1966103bd948b9a612c598c3960a08a5260a08a01916112a1565b9187830360208901526112a1565b918a604086015284830360608601526112a1565b9060803091015203905ff08015610f6c576001600160a01b03166001600160a01b037f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad73169485821090815f14610ff557829787945b61042f8261125e565b61043b60a48a016112c1565b906040519b6104498d611204565b6001600160a01b03168c5260208c01976001600160a01b0316885262ffffff1660408c015260020b60608b015260808a015f905261018488019961048d8b896112cf565b9990506104998a611305565b996040519a6104a8908c61123c565b808b52601f19906104b890611305565b015f5b818110610fcb5750505f5b6104d08d8b6112cf565b90508110156105775789908d604061051f836104f46104ff6104fa8383888b6112cf565b9061131d565b61132d565b946105196020610513856104f4858d6112cf565b01611341565b976112cf565b01359260ff841680940361057357828e60019561ffff610561946001600160a01b036040519761054e89611220565b168752166020860152604085015261136d565b5261056c818d61136d565b50016104c6565b5f80fd5b507f0000000000000000000000008366a39cc670b4001a1121b8f6a443a643e409516001600160a01b03168b8b6105b1610164850161132d565b916105bf6101448601611341565b90604051936118b3918286019086821067ffffffffffffffff831117610fb7579061ffff8f94956001600160a01b03602095610120958b9a996113a68c396101008601988652878601528b6040860152817f000000000000000000000000f0fa160edf1a114f442e581784853bb7274df272166060860152166080840152817f00000000000000000000000000000000000000000000000000000000000009c41660a08401521660c082015261010060e08201528451809452019201905f5b818110610f775750505003905ff08015610f6c576001600160a01b031696873b15610573576040519063fff7d8d960e01b82526106fb60048301866001600160a01b036080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b60a48201525f8160c481838c5af18015610f6c57610f57575b506101048201356001600160a01b038116809103610eb757849160c4602092604051948593849263313b65df60e11b845261078f600485018b6001600160a01b036080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b60a48401525af18015610e0e57610f1e575b5060405163095ea7b360e01b81527f000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba36001600160a01b0316600482018190525f1960248301529590602081604481888d5af18015610ec357610ee7575b506001600160a01b037f00000000000000000000000058daec3116aae6d93017baaea7749052e8a04fa71695803b15610eb75784809160848b60405194859384926387517c4560e01b845260048401528c60248401526001600160a01b03604484015265ffffffffffff60648401525af18015610ec357908591610ece575b5050604051631d5e528f60e21b815295602087600481845afa968715610ec3578597610e8b575b50604051600160f91b6020820152600d60f81b602182015260028152916108cc60228461123c565b60609a604051916108dd8d8461123c565b60028352601f198d018d895b828110610e7a575050506108ff60c487016112c1565b9061012461090f60e489016112c1565b970135906fffffffffffffffffffffffffffffffff8216809203610e76576fffffffffffffffffffffffffffffffff16906001600160a01b037f000000000000000000000000fd2e5e3326a298642cbf5c448bbc75e209d614141697604051936020850185811067ffffffffffffffff821117610e6257946109ef94610a39948d948f94610a2b95610aa29e9b9a604052855260405198899760208901906001600160a01b036080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b60020b60c087015260020b60e0860152610100850152806101208501526101408401528a610160840152610180808401526101a0830190611381565b03601f19810183528261123c565b610a4284611350565b52610a4c83611350565b506001600160a01b0380885116915116604051916020830152604082015260408152610a788d8261123c565b610a818361135d565b52610a8b8261135d565b50604051938491604060208401528d830190611381565b91601f19828403016040830152805180845260208401936020808360051b8301019301948a915b838310610e315750505050610ae7925003601f19810184528361123c565b603c420191824211610e1d57813b15610e19578591610b25918360405180968195829463dd46508f60e01b8452604060048501526044840190611381565b90602483015203925af18015610e0e57908491610df9575b5050803b15610df55782809160e460405180948193634542c53d60e01b83528a6004840152610bac60248401896001600160a01b036080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b8b60c48401525af18015610dea57908391610dd5575b508690526002602052604082206001600160a01b0386166001600160a01b03198254161790556040516080810181811067ffffffffffffffff821117610dc15760405286815260208101868152604082019186835289810193845260015468010000000000000000811015610dad57806001610c4192016001556111d4565b959095610d99575088957ffa330d763cdecf564ce0c884dc7707a15ebbfc608e610443f52fc6976b7602cc956001600160a01b03600581608060409f60409a8f9e9a8462ffffff9b8180610d819d5116166001600160a01b03198b5416178a5551168560018a0191166001600160a01b0319825416179055516002880155519083825116846003890191166001600160a01b031982541617905560048701908480602085015116166001600160a01b03198354161782558c830151907fffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffff76ffffff000000000000000000000000000000000000000084549286015160b81b79ffffff0000000000000000000000000000000000000000000000169360a01b16911617179055015116920191166001600160a01b031982541617905561125e565b8351928352166020820152a382519182526020820152f35b634e487b7160e01b81526004819052602490fd5b634e487b7160e01b86526041600452602486fd5b634e487b7160e01b84526041600452602484fd5b81610ddf9161123c565b6101bb578188610bc2565b6040513d85823e3d90fd5b8280fd5b81610e039161123c565b610df5578289610b3d565b6040513d86823e3d90fd5b8580fd5b634e487b7160e01b86526011600452602486fd5b91936001919395506020610e508192601f198682030187528951611381565b97019301930190928794929593610ac9565b634e487b7160e01b8d52604160045260248dfd5b8980fd5b602091828288010152018e906108e9565b9096506020813d602011610ebb575b81610ea76020938361123c565b81010312610eb75751958a6108a4565b8480fd5b3d9150610e9a565b6040513d87823e3d90fd5b81610ed89161123c565b610ee357838a61087d565b8380fd5b6020813d602011610f16575b81610f006020938361123c565b81010312610eb7575180151581146107fe578480fd5b3d9150610ef3565b6020813d602011610f4f575b81610f376020938361123c565b81010312610ee357518060020b8103156107a1578380fd5b3d9150610f2a565b610f649194505f9061123c565b5f9289610714565b6040513d5f823e3d90fd5b919350916020606060019260ff604088516001600160a01b03815116845261ffff868201511686850152015116604082015201940191019184939261067e565b634e487b7160e01b5f52604160045260245ffd5b808c6020809360405192610fde84611220565b5f84525f838501525f6040850152010152016104bb565b86978394610426565b63917f1a5360e01b5f5260045ffd5b5061c35062ffffff61101e8661125e565b16141561033f565b5061753062ffffff6110378661125e565b161415610339565b50614e2062ffffff6110508661125e565b161415610333565b34610573575f3660031901126105735760206040516001600160a01b037f00000000000000000000000058daec3116aae6d93017baaea7749052e8a04fa7168152f35b34610573575f3660031901126105735760206040516001600160a01b037f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad73168152f35b34610573575f366003190112610573576020600154604051908152f35b34610573576020366003190112610573576004356001600160a01b038116809103610573575f546001600160a01b0381163303611141576001600160a01b031916175f55005b635fc483c560e01b5f5260045ffd5b34610573575f3660031901126105735760206040516001600160a01b037f000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3168152f35b34610573575f366003190112610573576020906001600160a01b037f000000000000000000000000fd2e5e3326a298642cbf5c448bbc75e209d61414168152f35b6001548110156111f05760015f52600660205f20910201905f90565b634e487b7160e01b5f52603260045260245ffd5b60a0810190811067ffffffffffffffff821117610fb757604052565b6060810190811067ffffffffffffffff821117610fb757604052565b90601f8019910116810190811067ffffffffffffffff821117610fb757604052565b3562ffffff811681036105735790565b903590601e1981360301821215610573570180359067ffffffffffffffff82116105735760200191813603831361057357565b908060209392818452848401375f828201840152601f01601f1916010190565b358060020b81036105735790565b903590601e1981360301821215610573570180359067ffffffffffffffff82116105735760200191606082023603831361057357565b67ffffffffffffffff8111610fb75760051b60200190565b91908110156111f0576060020190565b356001600160a01b03811681036105735790565b3561ffff811681036105735790565b8051156111f05760200190565b8051600110156111f05760400190565b80518210156111f05760209160051b010190565b805180835260209291819084018484015e5f828201840152601f01601f191601019056fe61012060405234610381576118b38038038061001a81610385565b92833981016101008282031261038157610033826103aa565b91610040602082016103aa565b9061004d604082016103aa565b610059606083016103aa565b91610066608082016103aa565b9261007360a083016103be565b9261008060c084016103be565b60e084015190936001600160401b038211610381570187601f82011215610381578051906001600160401b03821161020d576100c160208360051b01610385565b9860206060818c8681520194028301019181831161038157602001925b828410610318575050505061ffff83169361271085116102215761ffff169361271061010a82876103cd565b116102215787511561022157151580610307575b610221575f95865b8851881015610230576001600160a01b03610141898b6103ee565b515116156102215761ffff60206101588a8c6103ee565b51015116156102215761017e9061ffff60206101748b8d6103ee565b51015116906103cd565b96610189818a6103ee565b51905f54916801000000000000000083101561020d5760018301805f558310156101f9576001925f805260205f200190838060a01b038151169082549161ffff60a01b602083015160a01b1691604060ff60b01b91015160b01b1692868060b81b03191617171790550196610126565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b6301f30c8760e21b5f5260045ffd5b6127108a9103610221573360805260a05260c0526001600160a01b031660e05261010052600180546001600160c01b03191660209490941b600160201b600160c01b0316939093179190911760109190911b63ffff0000161790556040516114b09081610403823960805181818161018801526107d6015260a05181818161031f01528181610b1801528181610dda0152611208015260c05181818161045201528181610a500152610d1d015260e0518181816107190152818161093a0152610e65015261010051818181610363015261065e0152f35b506001600160a01b0385161561011e565b6060848303126103815760405190606082016001600160401b0381118382101761020d57604052610348856103aa565b8252610356602086016103be565b602083015260408501519060ff821682036103815782602092604060609501528152019301926100de565b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761020d57604052565b51906001600160a01b038216820361038157565b519061ffff8216820361038157565b919082018092116103da57565b634e487b7160e01b5f52601160045260245ffd5b80518210156101f95760209160051b01019056fe608080604052600436101561001c575b50361561001a575f80fd5b005b5f905f3560e01c908163015cb437146111d15750806303fd2a45146111b55780630520e36314611193578063133795b4146110de578063182148ef1461107c5780632221466c1461105f5780632238eee514610d7a57806322eabb8e14610d5e5780633e59906e14610d415780633fc8cef314610cfe57806391dd7346146108db578063baa9f0fa146108b6578063bcf685ed146107fa578063bd1022a11461073d578063c45a0155146107b6578063c64499cb14610798578063d1bc76a114610742578063d3cd52bc1461073d578063dc4c90d3146106f9578063e4fc6b6d1461042c578063efca2eed1461040e578063f14b15a9146103f0578063f1ada4cf146103d2578063f5ff5c76146103a9578063f76835e614610387578063fa2af9da14610343578063fc0c546a146102ff5763fff7d8d90361000f57346102fc57366003190160c081126102f85760a0136102fc5760a4358015158091036102f8576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036102e9576004356001600160a01b038116908181036102e5575073ffffffffffffffffffffffffffffffffffffffff1960025416176002556024356001600160a01b038116908181036102e5575073ffffffffffffffffffffffffffffffffffffffff19600354161760035560443562ffffff811681036102dd576003546064358060020b81036102e15776ffffff00000000000000000000000000000000000000007fffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffff9160b81b79ffffff0000000000000000000000000000000000000000000000169360a01b16911617176003556084356001600160a01b0381168091036102dd5773ffffffffffffffffffffffffffffffffffffffff19600454161760045560ff80196005541691161760055580f35b8280fd5b8480fd5b8380fd5b630636a15760e11b8252600482fd5b5080fd5b80fd5b50346102fc57806003193601126102fc5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102fc57806003193601126102fc5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102fc57806003193601126102fc57602061ffff60015416604051908152f35b50346102fc57806003193601126102fc5760206001600160a01b03600154821c16604051908152f35b50346102fc57806003193601126102fc576020600654604051908152f35b50346102fc57806003193601126102fc576020600b54604051908152f35b50346102fc57806003193601126102fc576020600754604051908152f35b50346102fc57806003193601126102fc576040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690602081602481855afa9081156106ee5783916106b8575b506104a060065480926113e5565b9081156106aa57600154926127106104cd61ffff826104c1828916886113f2565b049660101c16856113f2565b04916104e2836104dd87876113e5565b6113e5565b908380610697575b505084610658575b8554869290915f198301838111855b858110610558578a7ff7576d8c2653e9d07af5ef229acf59b339e327d4e0eaddb4a96615534cf148f860808b8b8b8f61053c826007546113d8565b600755604051938452602084015260408301526060820152a180f35b61056181611370565b506040519061056f8261139a565b546001600160a01b03811682526020820161ffff8260a01c1681528460ff604085019360b01c168352610644578d8487036106295750506105b089876113e5565b915b826105c3575b505050600101610501565b9882917ff33e3e5375c5fa09142bb2d2e1a57ad05192ac66e2d28dd563570e7ef0662e3c604060ff6001600160a01b038e6001999f610620998f8461060a93511690611405565b51169351168151908152856020820152a26113d8565b96905f806105b8565b61063b61ffff612710935116896113f2565b905004916105b2565b634e487b7160e01b8e52601160045260248efd5b610683857f000000000000000000000000000000000000000000000000000000000000000084611405565b61068f856008546113d8565b6008556104f2565b6106a0916113d8565b6006555f836104ea565b62598fc960e21b8452600484fd5b90506020813d6020116106e6575b816106d3602093836113b6565b810103126106e257515f610492565b5f80fd5b3d91506106c6565b6040513d85823e3d90fd5b50346102fc57806003193601126102fc5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b611354565b50346102fc5760203660031901126102fc576004359080548210156102fc57606061076c83611370565b505460ff604051916001600160a01b038116835261ffff8160a01c16602084015260b01c166040820152f35b50346102fc57806003193601126102fc576020600854604051908152f35b50346102fc57806003193601126102fc5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102fc5760203660031901126102fc576004356001600160a01b038116908181036102dd57600154916001600160a01b038360201c168033036108a7579177ffffffffffffffffffffffffffffffffffffffff00000000917fffffffffffffffff0000000000000000000000000000000000000000ffffffff937fee7760cb405d3beb1072ae2e716857daa45a5dd52bc1383a21173199d32c7dee8780a360201b1691161760015580f35b637362044160e01b8552600485fd5b50346102fc57806003193601126102fc57602061ffff60015460101c16604051908152f35b50346106e25760203660031901126106e25760043567ffffffffffffffff81116106e257366023820112156106e257806004013567ffffffffffffffff81116106e25760248201908201903660248301116106e2576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691823303610cb9576024826040920301126106e257600554604493909301359260ff16159035600160ff1b8114610ca5578115610c83576001600160a01b036401000276a45b604051936109ad8561139a565b845260208401835f03815282604086019216825260405194633cf3645360e21b865283600254166004870152600354848116602488015262ffffff8160a01c16604488015260b81c60020b60648701528360045416608487015251151560a48601525160c4850152511660e48301526101206101048301525f610124830152602082610144815f875af1918215610c44575f92610c4f575b506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016833b156106e257604051632961046560e21b8152600481018290525f8160248183895af18015610c4457610c28575b509083610aab92611405565b604051630476982d60e21b815260208160048188875af18015610c1d57610bee575b5060055460ff1615610be65760801d5b600f0b83811315610bde57915b8210610b99578083913b156102f8578190606460405180948193630b0d9c0960e01b83526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600484015261dead60248401528760448401525af180156106ee57610b84575b610b808260405190602082015260208152610b746040826113b6565b6040519182918261132a565b0390f35b610b8f8380926113b6565b6102f85781610b58565b60405162461bcd60e51b815260206004820152600860248201527f736c6970706167650000000000000000000000000000000000000000000000006044820152606490fd5b508291610aea565b600f0b610add565b6020813d602011610c15575b81610c07602093836113b6565b810103126106e25751610acd565b3d9150610bfa565b6040513d87823e3d90fd5b610aab929196505f610c39916113b6565b835f96919250610a9f565b6040513d5f823e3d90fd5b9091506020813d602011610c7b575b81610c6b602093836113b6565b810103126106e25751905f610a45565b3d9150610c5e565b6001600160a01b0373fffd8963efd1fc6a506488495d951d5263988d256109a0565b634e487b7160e01b5f52601160045260245ffd5b60405162461bcd60e51b815260206004820152601060248201527f6e6f7420706f6f6c206d616e61676572000000000000000000000000000000006044820152606490fd5b346106e2575f3660031901126106e25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346106e2575f3660031901126106e2576020600a54604051908152f35b346106e2575f3660031901126106e25760205f54604051908152f35b346106e25760403660031901126106e2576004356024356001600160a01b0360015460201c1633036110505781158015611045575b61103657610dbf826006546113e5565b6006556040516370a0823160e01b815261dead6004820152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690602083602481855afa928315610c44575f93611002575b505f610e589160405190866020830152604082015260408152610e3e6060826113b6565b604051809381926348c8949160e01b83526004830161132a565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af18015610c4457610f5f575b506020602491604051928380926370a0823160e01b825261dead60048301525afa908115610c44575f91610f29575b7f0ec3929061cbbbeecb325623e7d5a86c3dae11cb8a22ca45dc0972955657da25604085610eef86866113e5565b610efb816009546113d8565b600955610f0a81600a546113d8565b600a55610f1982600b546113d8565b600b5582519182526020820152a1005b9290506020833d602011610f57575b81610f45602093836113b6565b810103126106e2579151610eef610ec1565b3d9150610f38565b903d805f843e610f6f81846113b6565b8201916020818403126106e25780519067ffffffffffffffff82116106e257019082601f830112156106e25781519267ffffffffffffffff8411610fee5760405190610fc5601f8601601f1916602001836113b6565b848252602085850101116106e2575f602085602496828097018386015e83010152509150610e92565b634e487b7160e01b5f52604160045260245ffd5b9092506020813d60201161102e575b8161101e602093836113b6565b810103126106e25751915f610e1a565b3d9150611011565b6328b35f2160e01b5f5260045ffd5b506006548211610daf565b637362044160e01b5f5260045ffd5b346106e2575f3660031901126106e2576020600954604051908152f35b346106e2575f3660031901126106e25760a06001600160a01b03600254166003546001600160a01b0360045416906040519283526001600160a01b038116602084015262ffffff81851c16604084015260b81c60020b60608301526080820152f35b346106e25760203660031901126106e25760043561ffff81168082036106e257600154916001600160a01b038360201c1633036110505761271082116111845761271061112f8361ffff86166113d8565b11611184577fe2fada88851b4f31f17dbcd28fda8785ea2f1352366268f68c6107e11485eede604063ffff00009381519061ffff8760101c1682526020820152a160101b169063ffff00001916176001555f80f35b6301f30c8760e21b5f5260045ffd5b346106e2575f3660031901126106e257602060ff600554166040519015158152f35b346106e2575f3660031901126106e257602060405161dead8152f35b346106e2575f3660031901126106e2576001600160a01b0360015460201c163303611050576370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316602082602481845afa918215610c44575f926112f6575b508161124f57005b60405163a9059cbb60e01b5f5261dead6004528260245260205f60448180865af19060015f51148216156112d5575b604052156112c357506020816112b77f0c526103b8f47af5516191d0c89a598755bd00faa211a3cb52e4c2cc782f7fe2936009546113d8565b600955604051908152a1005b635274afe760e01b5f5260045260245ffd5b9060018115166112ed57823b15153d1516169061127e565b503d5f823e3d90fd5b9091506020813d602011611322575b81611312602093836113b6565b810103126106e257519082611247565b3d9150611305565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b346106e2575f3660031901126106e25760206040516127108152f35b5f54811015611386575f805260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b6060810190811067ffffffffffffffff821117610fee57604052565b90601f8019910116810190811067ffffffffffffffff821117610fee57604052565b91908201809211610ca557565b91908203918211610ca557565b81810292918115918404141715610ca557565b916001600160a01b036040519263a9059cbb60e01b5f521660045260245260205f60448180865af19060015f5114821615611462575b604052156114465750565b6001600160a01b0390635274afe760e01b5f521660045260245ffd5b9060018115166112ed57823b15153d1516169061143b56fea2646970667358221220f5191a2083b972f0cc6963c1b4ed1d825a74b03dc96d5d7233424dc39902ea8864736f6c634300081a003360a06040523461050c57610ccc8038038061001981610510565b92833981019060a08183031261050c5780516001600160401b03811161050c5782610045918301610535565b60208201516001600160401b03811161050c5783610064918401610535565b60408301516060840151919490916001600160401b03811161050c5760809161008e918601610535565b9301516001600160a01b038116929083900361050c578051906001600160401b0382116103345760035490600182811c92168015610502575b60208310146103165781601f849311610494575b50602090601f831160011461042e575f92610423575b50508160011b915f199060031b1c1916176003555b83516001600160401b03811161033457600454600181811c91168015610419575b602082101461031657601f81116103b6575b50602094601f8211600114610353579481929394955f92610348575b50508160011b915f199060031b1c1916176004555b3360805282516001600160401b03811161033457600554600181811c9116801561032a575b602082101461031657601f81116102d0575b506020601f821160011461026d57819293945f92610262575b50508160011b915f199060031b1c1916176005555b811561024f576002549080820180921161023b5760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef915f9360025584845283825260408420818154019055604051908152a360405161074590816105878239608051816101090152f35b634e487b7160e01b5f52601160045260245ffd5b63ec442f0560e01b5f525f60045260245ffd5b015190505f806101ba565b601f1982169060055f52805f20915f5b8181106102b8575095836001959697106102a0575b505050811b016005556101cf565b01515f1960f88460031b161c191690555f8080610292565b9192602060018192868b01518155019401920161027d565b60055f5260205f20601f830160051c8101916020841061030c575b601f0160051c01905b81811061030157506101a1565b5f81556001016102f4565b90915081906102eb565b634e487b7160e01b5f52602260045260245ffd5b90607f169061018f565b634e487b7160e01b5f52604160045260245ffd5b015190505f80610155565b601f1982169560045f52805f20915f5b88811061039e57508360019596979810610386575b505050811b0160045561016a565b01515f1960f88460031b161c191690555f8080610378565b91926020600181928685015181550194019201610363565b60045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f830160051c8101916020841061040f575b601f0160051c01905b8181106104045750610139565b5f81556001016103f7565b90915081906103ee565b90607f1690610127565b015190505f806100f1565b60035f9081528281209350601f198516905b81811061047c5750908460019594939210610464575b505050811b01600355610106565b01515f1960f88460031b161c191690555f8080610456565b92936020600181928786015181550195019301610440565b60035f529091507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f840160051c810191602085106104f8575b90601f859493920160051c01905b8181106104ea57506100db565b5f81558493506001016104dd565b90915081906104cf565b91607f16916100c7565b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761033457604052565b81601f8201121561050c578051906001600160401b03821161033457610564601f8301601f1916602001610510565b928284526020838301011161050c57815f9260208093018386015e830101529056fe60806040526004361015610011575f80fd5b5f3560e01c806303ee438c1461052757806306fdde0314610452578063095ea7b3146103d057806318160ddd146103b357806323b872dd146102ce578063313ce567146102b357806370a082311461027c57806395d89b411461015e578063a9059cbb1461012d578063c45a0155146100ea5763dd62ed3e14610092575f80fd5b346100e65760403660031901126100e6576100ab610626565b6001600160a01b036100bb61063c565b91165f5260016020526001600160a01b0360405f2091165f52602052602060405f2054604051908152f35b5f80fd5b346100e6575f3660031901126100e65760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100e65760403660031901126100e657610153610149610626565b6024359033610652565b602060405160018152f35b346100e6575f3660031901126100e6576040515f6004548060011c90600181168015610272575b60208310811461025e5782855290811561024257506001146101ec575b50819003601f01601f191681019067ffffffffffffffff8211818310176101d857604082905281906101d490826105fc565b0390f35b634e487b7160e01b5f52604160045260245ffd5b60045f9081529091507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b82821061022c575060209150820101826101a2565b6001816020925483858801015201910190610217565b90506020925060ff191682840152151560051b820101826101a2565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610185565b346100e65760203660031901126100e6576001600160a01b0361029d610626565b165f525f602052602060405f2054604051908152f35b346100e6575f3660031901126100e657602060405160128152f35b346100e65760603660031901126100e6576102e7610626565b6102ef61063c565b604435906001600160a01b03831692835f52600160205260405f206001600160a01b0333165f5260205260405f20545f198110610332575b506101539350610652565b83811061039857841561038557331561037257610153945f52600160205260405f206001600160a01b0333165f526020528360405f209103905584610327565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b8390637dc7a0d960e11b5f523360045260245260445260645ffd5b346100e6575f3660031901126100e6576020600254604051908152f35b346100e65760403660031901126100e6576103e9610626565b602435903315610385576001600160a01b031690811561037257335f52600160205260405f20825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b346100e6575f3660031901126100e6576040515f6003548060011c9060018116801561051d575b60208310811461025e5782855290811561024257506001146104c75750819003601f01601f191681019067ffffffffffffffff8211818310176101d857604082905281906101d490826105fc565b60035f9081529091507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b828210610507575060209150820101826101a2565b60018160209254838588010152019101906104f2565b91607f1691610479565b346100e6575f3660031901126100e6576040515f6005548060011c906001811680156105f2575b60208310811461025e57828552908115610242575060011461059c5750819003601f01601f191681019067ffffffffffffffff8211818310176101d857604082905281906101d490826105fc565b60055f9081529091507f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db05b8282106105dc575060209150820101826101a2565b60018160209254838588010152019101906105c7565b91607f169161054e565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036100e657565b602435906001600160a01b03821682036100e657565b6001600160a01b03169081156106fc576001600160a01b03169182156106e957815f525f60205260405f20548181106106d057817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f525f825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b63ec442f0560e01b5f525f60045260245ffd5b634b637e8f60e11b5f525f60045260245ffdfea2646970667358221220a16189dcf385c91c1f0ca78e769703ce06518fe75f2bb88aa29f35210d2516df64736f6c634300081a0033a2646970667358221220f015b638feae0ee72521c47de3cd715381e9ddc97dcad38ca46e703e6069e9f264736f6c634300081a0033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
| User-Op Hash | Age | Block | Bundler | Gas Cost | Status |
|---|---|---|---|---|---|
| no AA (ERC-4337) user-operations sent by this address | |||||
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| no internal transactions found for this address yet (traced blocks + on-demand) | ||||||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x6b9620…f0d673 | 38 days agoFri, 10 Jul 2026 21:35:53 UTC | 0xfa330d…02cc | [0] 0x000000000000…85cc1667 [1] 0x000000000000…10a8fc83 data: 0x000000000000000000…00004e20 |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x6b9620…f0d673 | launch | 6,407,903 | 38 days agoFri, 10 Jul 2026 21:35:53 UTC | 0xf0fa…f272 | IN | LaunchFactory | $0.000 ETH | 0.00011554 |
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x6b9620ab…f0d673 | Transfer | 6,407,903 | 38 days agoFri, 10 Jul 2026 21:35:53 UTC | 0xfcd1…96cf | OUT | 0x8366…0951 | 1,000,000,000.000000 TEST | test (TEST) | |
| 0x6b9620ab…f0d673 | Transfer | 6,407,903 | 38 days agoFri, 10 Jul 2026 21:35:53 UTC | 0x0000…0000 | IN | 0xfcd1…96cf | 1,000,000,000.000000 TEST | test (TEST) |
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||