Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
XfaiV0Core
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.19; import './IXfaiV0Core.sol'; import './IXfaiFactory.sol'; import './IXfaiPool.sol'; import './IXfaiV0FlashLoan.sol'; import './IERC20.sol'; library XfaiLibrary { /** * @notice Calculates the CREATE2 address for a pool without making any external calls * @param _token An ERC20 token address * @param _factory The factory contract of Xfai * @param _poolCodeHash The codehash of the Xfai pool contract * @return pool The deterministic pool address for a given _token */ function poolFor( address _token, address _factory, bytes32 _poolCodeHash ) internal pure returns (address pool) { pool = address( uint160( uint256( keccak256( abi.encodePacked( hex'ff', _factory, keccak256(abi.encodePacked(_token)), _poolCodeHash // init code hash ) ) ) ) ); } function getAdjustedOutput(uint _amountIn, uint _r, uint _w) internal pure returns (uint out) { out = (_amountIn * _w) / (_r + _amountIn); } function getAdjustedInput(uint _amountOut, uint _r, uint _w) internal pure returns (uint input) { input = ((_amountOut * _r) / (_w - _amountOut)) + 1; } function quote(uint _amountIn, uint _a, uint _b) internal pure returns (uint out) { out = (_amountIn * _a) / _b; } /** * @notice Calculates the adjusted price of an _amountIn (of a token from _pool0) in terms of the token in _pool1 * @dev either token0 or token1 must be xfETH * @param _reserve0 The reserve of _token0 (can be xfETH) * @param _reserve1 The reserve of _token1 (can be xfETH) * @param _amountIn The token input amount to _pool0 * @return output The token output between a token - xfETH interaction */ function getAmountOut( uint _reserve0, uint _reserve1, uint _amountIn, uint _totalFee ) public pure returns (uint output) { require(_amountIn > 0, 'Xfai: INSUFFICIENT_AMOUNT'); require(_reserve0 > 0, 'Xfai: INSUFFICIENT_LIQUIDITY'); require(_reserve1 > 0, 'Xfai: INSUFFICIENT_LIQUIDITY'); uint amountInWithFee = _amountIn * (10000 - _totalFee); uint numerator = amountInWithFee * _reserve1; output = numerator / (_reserve0 * 10000 + amountInWithFee); } /** * @notice Calculates the adjusted price of an _amountOut (of a token from _pool1) in terms of the token in _pool0 * @param _reserve0 The reserve of _token0 (can be xfETH) * @param _reserve1 The reserve of _token1 (can be xfETH) * @param _amountOut The token output amount from _pool0 * @return input The token input amount to _pool0 */ function getAmountIn( uint _reserve0, uint _reserve1, uint _amountOut, uint _totalFee ) public pure returns (uint input) { require(_amountOut > 0, 'Xfai: INSUFFICIENT_AMOUNT'); require(_reserve0 > 0, 'Xfai: INSUFFICIENT_LIQUIDITY'); require(_reserve1 > 0, 'Xfai: INSUFFICIENT_LIQUIDITY'); uint numerator = _amountOut * _reserve0 * 10000; uint denominator = (_reserve1 - _amountOut) * (10000 - _totalFee); input = (numerator / denominator) + 1; } /** * @notice Calculates the adjusted price of an _amountIn (of a token from _pool0) in terms of the token in _pool1 * @param _pool0 A pool address * @param _pool1 A pool address * @param _amountIn The token input amount to _pool0 * @return out1 The token output amount from _pool1 */ function getAmountsOut( address _pool0, address _pool1, uint _amountIn, uint _totalFee ) public view returns (uint out1) { (uint r0, uint w0) = IXfaiPool(_pool0).getStates(); (uint r1, uint w1) = IXfaiPool(_pool1).getStates(); uint weight0Out = getAmountOut(r0, w0, _amountIn, _totalFee); out1 = getAdjustedOutput(weight0Out, w1, r1); } /** * @notice Calculates the adjusted price of an _amountOut (of a token from _pool1) in terms of the token in _pool0 * @param _pool0 A pool address * @param _pool1 A pool address * @param _amountOut The token output amount from _pool1 * @return inp0 The token input amount to _pool0 */ function getAmountsIn( address _pool0, address _pool1, uint _amountOut, uint _totalFee ) public view returns (uint inp0) { (uint r0, uint w0) = IXfaiPool(_pool0).getStates(); (uint r1, uint w1) = IXfaiPool(_pool1).getStates(); uint weight0Out = getAdjustedInput(_amountOut, w1, r1); inp0 = getAmountIn(r0, w0, weight0Out, _totalFee); } } library Math { function min(uint _a, uint _b) internal pure returns (uint) { return _a < _b ? _a : _b; } function sqrt(uint _y) internal pure returns (uint z) { if (_y > 3) { z = _y; uint x = _y / 2 + 1; while (x < z) { z = x; x = (_y / x + x) / 2; } } else if (_y != 0) { z = 1; } } } /** * @title Xfai's Core Contract * @author Xfai * @notice XfaiV0Core manages the core AMM logic of Xfai. It does not store any pool state. */ contract XfaiV0Core is IXfaiV0Core { /** * @notice The factory address of Xfai */ address private immutable factory; /** * @notice The INFT address of Xfai */ address private immutable infinityNFT; /** * @notice The address of the xfETH token */ address private immutable xfETH; /** * @notice The liquidity provider fee for swaps and burns */ uint public override lpFee; /** * @notice The infinity NFT fee for swaps and burns */ uint public override infinityNFTFee; uint private constant MAX_FEE = 100; uint private constant NOT_ENTERED = 1; uint private constant ENTERED = 2; uint private constant MINIMUM_LIQUIDITY = 10 ** 3; /** * @notice The code hash od XfaiPool * @dev keccak256(type(XfaiPool).creationCode) */ bytes32 private immutable poolCodeHash; /** * @notice determines if swap/mint/burn functionality is paused or not */ bool private paused; /** * @notice Mapping used to lock individual Xfai pools * @dev used to prevent reentrancy attacks */ mapping(address => uint) private poolLock; modifier singleLock(address _token) { require(_token != xfETH, 'XfaiV0Core: INVALID_TOKEN'); require(poolLock[_token] != ENTERED, 'XfaiV0Core: REENTRANT_CALL'); poolLock[_token] = ENTERED; _; poolLock[_token] = NOT_ENTERED; } modifier doubleLock(address _token0, address _token1) { require(poolLock[_token0] != ENTERED, 'XfaiV0Core: REENTRANT_CALL'); require(poolLock[_token1] != ENTERED, 'XfaiV0Core: REENTRANT_CALL'); require(_token0 != _token1, 'XfaiV0Core: IDENTICAL_POOLS'); address _xfETH = xfETH; if (_token0 != _xfETH) { poolLock[_token0] = ENTERED; } if (_token1 != _xfETH) { poolLock[_token1] = ENTERED; } _; poolLock[_token0] = NOT_ENTERED; poolLock[_token1] = NOT_ENTERED; } modifier pausable() { require(paused == false, 'XfaiV0Core: PAUSED'); _; } modifier onlyOwner() { require(msg.sender == IXfaiFactory(factory).getOwner(), 'XfaiV0Core: NOT_OWNER'); _; } /** * @notice Construct XfaiV0Core * @param _factory The factory contract address of the XfaiV0Core contract * @param _infinityNFT The INFT address of Xfai * @param _xfETH The address of the xfETH token * @param _lpFee The liquidity provider fee for swaps and burns * @param _infinityNFTFee The infinity staking / boosting fee for INFT holders */ constructor( address _factory, address _infinityNFT, address _xfETH, uint _lpFee, uint _infinityNFTFee ) { factory = _factory; infinityNFT = _infinityNFT; xfETH = _xfETH; lpFee = _lpFee; infinityNFTFee = _infinityNFTFee; poolCodeHash = IXfaiFactory(_factory).poolCodeHash(); } /** * @notice Changes the lpFee of the XfaiV0Core contract * @dev Only the owner of the XfaiV0Core contract can call this function * @param _newLpFee The new lpFee */ function changeLpFee(uint _newLpFee) external override onlyOwner { require(_newLpFee + infinityNFTFee <= MAX_FEE, 'XfaiV0Core: FEE_EXCEEDS_LIMIT'); lpFee = _newLpFee; emit LpFeeChange(_newLpFee); } /** * @notice Changes the infinityNFTFee of the XfaiV0Core contract * @dev Only the owner of the XfaiV0Core contract can call this function * @param _newLnftFee The new infinityNFTFee */ function changeInfinityNFTFee(uint _newLnftFee) external override onlyOwner { require(lpFee + _newLnftFee <= MAX_FEE, 'XfaiV0Core: FEE_EXCEEDS_LIMIT'); infinityNFTFee = _newLnftFee; emit InfinityNFTFeeChange(_newLnftFee); } /** * @notice Returns the total fee of the XfaiV0Core contract for swaps and burns * @dev The total fee of the XfaiV0Core represents the sum of the infinityNFTFee and lpFee */ function getTotalFee() public view override returns (uint) { return infinityNFTFee + lpFee; } function _swap0( address _pool, address _token, address _to ) private returns (uint amountIn, uint amountOut) { address _xfETH = xfETH; // gas saving IXfaiPool pool = IXfaiPool(_pool); (uint reserve, uint weight) = pool.getStates(); uint tokenBalance = IERC20(_token).balanceOf(_pool); amountIn = tokenBalance - reserve; amountOut = XfaiLibrary.getAmountOut(reserve, weight, amountIn, getTotalFee()); pool.linkedTransfer(_token, infinityNFT, (amountIn * infinityNFTFee) / 10000); // send infinityNFTFee to the INFT contract pool.linkedTransfer(_xfETH, _to, amountOut); // optimistically transfer tokens uint xfETHBalance = IERC20(_xfETH).balanceOf(_pool); tokenBalance = IERC20(_token).balanceOf(_pool); pool.update(tokenBalance, xfETHBalance); } function _swap1( address _pool, address _token, address _to, bool _withFee ) private returns (uint amountIn, uint amountOut) { address _xfETH = xfETH; // gas saving IXfaiPool pool = IXfaiPool(_pool); (uint reserve, uint weight) = pool.getStates(); uint xfETHBalance = IERC20(_xfETH).balanceOf(_pool); amountIn = xfETHBalance - weight; if (_withFee == true) { amountOut = XfaiLibrary.getAmountOut(weight, reserve, amountIn, getTotalFee()); pool.linkedTransfer(xfETH, infinityNFT, (amountIn * infinityNFTFee) / 10000); // send infinityNFTFee to the INFT contract } else { amountOut = XfaiLibrary.getAdjustedOutput(amountIn, weight, reserve); } pool.linkedTransfer(_token, _to, amountOut); // optimistically transfer tokens xfETHBalance = IERC20(_xfETH).balanceOf(_pool); uint tokenBalance = IERC20(_token).balanceOf(_pool); pool.update(tokenBalance, xfETHBalance); } function _swap( address _token0, address _token1, address _to ) private returns (uint amount0In, uint amount1Out) { address _xfETH = xfETH; // gas saving address _factory = factory; // gas saving require(_to != _token0, 'XfaiV0Core: INVALID_TO'); require(_to != _token1, 'XfaiV0Core: INVALID_TO'); if (_token0 != _xfETH && _token1 != _xfETH) { address pool0 = XfaiLibrary.poolFor(_token0, _factory, poolCodeHash); address pool1 = XfaiLibrary.poolFor(_token1, _factory, poolCodeHash); (amount0In, ) = _swap0(pool0, _token0, pool1); (, amount1Out) = _swap1(pool1, _token1, _to, false); } else if (_token0 == _xfETH) { address pool1 = XfaiLibrary.poolFor(_token1, _factory, poolCodeHash); (amount0In, amount1Out) = _swap1(pool1, _token1, _to, true); } else { address pool0 = XfaiLibrary.poolFor(_token0, _factory, poolCodeHash); (amount0In, amount1Out) = _swap0(pool0, _token0, _to); } } /** * @notice Swaps one hosted ERC20 token for another hosted ERC20 token * @dev This low-level function should be called from a contract which performs important safety checks. * This function locks the pool of _token0 and _token1 to prevent reentrancy attacks. * @param _token0 An ERC20 token address. Token must have already a pool * @param _token1 An ERC20 token address. Token must have already a pool * @param _to The address of the recipient that receives the _amount1Out tokens */ function swap( address _token0, address _token1, address _to ) external override pausable doubleLock(_token0, _token1) returns (uint amount0In, uint amount1Out) { (amount0In, amount1Out) = _swap(_token0, _token1, _to); emit Swap(msg.sender, amount0In, amount1Out, _to); } /** * @notice Performs two-sided liquidity provisioning and mints in return liquidity tokens for a given pool. The amount of liquidity tokens minted depend on the amount of _token and xfETH provided * @dev This low-level function should be called from a contract which performs important safety checks. * This function locks the pool of _token to prevent reentrancy attacks. * @param _token An ERC20 token address. Token must have already a pool * @param _to The address of the recipient that receives the minted liquidity tokens * @return liquidity The amount of liquidity tokens minted */ function mint( address _token, address _to ) external override pausable singleLock(_token) returns (uint liquidity) { address pool = XfaiLibrary.poolFor(_token, factory, poolCodeHash); (uint reserve, uint weight) = IXfaiPool(pool).getStates(); uint tokenBalance = IERC20(_token).balanceOf(pool); uint xfETHBalance = IERC20(xfETH).balanceOf(pool); uint tokenIn = tokenBalance - reserve; uint weightIn = xfETHBalance - weight; uint _totalSupply = IERC20(pool).totalSupply(); if (_totalSupply == 0) { liquidity = Math.sqrt(tokenIn * weightIn) - MINIMUM_LIQUIDITY; IXfaiPool(pool).mint(address(0), MINIMUM_LIQUIDITY); // permanently lock the first MINIMUM_LIQUIDITY tokens } else { liquidity = Math.min((tokenIn * _totalSupply) / reserve, (weightIn * _totalSupply) / weight); } require(liquidity > 0, 'XfaiV0Core: INSUFFICIENT_LIQUIDITY_MINTED'); IXfaiPool(pool).mint(_to, liquidity); IXfaiPool(pool).update(tokenBalance, xfETHBalance); emit Mint(msg.sender, liquidity); } /** * @notice Burns existing liquidity tokens for a given pool. The amount of _token0 and _token1 returned depend on the amount of liquidity tokens burned and on the reserves & weights of pool0 and / or pool1 * @dev This low-level function should be called from a contract which performs important safety checks. * This function locks the pool of _token0 and _token1 to prevent reentrancy attacks. * @param _token0 An ERC20 token address. Token must have already a pool * @param _token1 An ERC20 token address. Token must have already a pool * @param _to The address of the recipient that receives the redeemed liquidity * @return amount0Out The amount of tokens0 that one receives * @return amount1Out THe amount of tokens1 that one receives */ function burn( address _token0, address _token1, address _to ) external override pausable doubleLock(_token0, _token1) returns (uint amount0Out, uint amount1Out) { address _xfETH = xfETH; // gas saving require(_token0 != _xfETH, 'XfaiV0Core: INVALID_PRIMARY_TOKEN'); address pool0 = XfaiLibrary.poolFor(_token0, factory, poolCodeHash); address pool1 = XfaiLibrary.poolFor(_token1, factory, poolCodeHash); uint liquidity = IERC20(pool0).balanceOf(address(this)); uint totalSupply = IERC20(pool0).totalSupply(); amount0Out = (liquidity * IERC20(_token0).balanceOf(pool0)) / totalSupply; // using balances ensures pro-rata distribution amount1Out = (liquidity * IERC20(_xfETH).balanceOf(pool0)) / totalSupply; // using balances ensures pro-rata distribution require(amount0Out > 0 && amount1Out > 0, 'XfaiV0Core: INSUFFICIENT_LIQUIDITY_BURNED'); IXfaiPool(pool0).linkedTransfer(_token0, _to, amount0Out); if (_token1 == _xfETH) { IXfaiPool(pool0).linkedTransfer(_xfETH, _to, amount1Out); IXfaiPool(pool0).update(IERC20(_token0).balanceOf(pool0), IERC20(_xfETH).balanceOf(pool0)); } else { IXfaiPool(pool0).linkedTransfer(_xfETH, pool1, amount1Out); IXfaiPool(pool0).update(IERC20(_token0).balanceOf(pool0), IERC20(_xfETH).balanceOf(pool0)); (, amount1Out) = _swap1(pool1, _token1, _to, true); } IXfaiPool(pool0).burn(address(this), liquidity); emit Burn(msg.sender, amount0Out, amount1Out, _to); } /** * @notice Enables users to request flash loans from Xfai * @dev The recipient _to of the flash loan needs to be a smart contract that supports the IDeXFaiV0FlashLoan functions. * This function locks the pool of _token to prevent reentrancy attacks. * @param _token An ERC20 token address. Token must have already a pool * @param _amount The amount for the flash loan * @param _to The address of the recipient that receives the flash loan * @param _data the additional bytes data used for the flash loan */ function flashLoan( address _token, uint _amount, address _to, bytes calldata _data ) external override pausable singleLock(_token) { require(_to != address(0), 'XfaiV0Core INVALID_TO'); address pool = XfaiLibrary.poolFor(_token, factory, poolCodeHash); (uint reserve, ) = IXfaiPool(pool).getStates(); require(_amount <= reserve, 'XfaiV0Core: INSUFFICIENT_OUTPUT_AMOUNT'); uint balance = IERC20(_token).balanceOf(pool); IXfaiPool(pool).linkedTransfer(_token, _to, _amount); // optimistically transfer tokens IXfaiV0FlashLoan(_to).flashLoan(pool, _amount, _data); require( IERC20(_token).balanceOf(pool) >= balance + ((_amount * getTotalFee()) / 10000), 'XfaiV0Core: INSUFFICIENT_AMOUNT_RETURNED' ); IXfaiPool(pool).linkedTransfer(_token, infinityNFT, (_amount * infinityNFTFee) / 10000); // send lnft fee to fee collecting contract IXfaiPool(pool).update(IERC20(_token).balanceOf(pool), IERC20(xfETH).balanceOf(pool)); emit FlashLoan(_to, _amount); } /** * @notice Force the token balance of a pool to match its reserves * @dev This function locks the pool of _token to prevent reentrancy attacks. * @param _token An ERC20 token address. Token must have already a pool * @param _to The recipient of the skim */ function skim(address _token, address _to) external override pausable singleLock(_token) { address _xfETH = xfETH; // gas saving address pool = XfaiLibrary.poolFor(_token, factory, poolCodeHash); (uint reserve, uint weight) = IXfaiPool(pool).getStates(); uint tokenBalanceDif = IERC20(_token).balanceOf(pool) - reserve; uint xfETHBalanceDif = IERC20(_xfETH).balanceOf(pool) - weight; if (tokenBalanceDif > 0) { IXfaiPool(pool).linkedTransfer(_token, _to, tokenBalanceDif); } if (xfETHBalanceDif > 0) { IXfaiPool(pool).linkedTransfer(_xfETH, _to, xfETHBalanceDif); } } /** * @notice Force the reserves of a pool to match its token balance * @dev This function locks the pool of _token to prevent reentrancy attacks. * @param _token An ERC20 token address. Token must have already a pool */ function sync(address _token) external override pausable singleLock(_token) { address pool = XfaiLibrary.poolFor(_token, factory, poolCodeHash); uint tokenBalance = IERC20(_token).balanceOf(pool); uint xfETHBalance = IERC20(xfETH).balanceOf(pool); IXfaiPool(pool).update(tokenBalance, xfETHBalance); } /** * @notice Pause any function that can change the state of a pool within Xfai * @dev Only the owner of the XfaiV0Core contract can call this function * @param _p the boolean to determine if XfaiV0Core is paused or not */ function pause(bool _p) external override onlyOwner { paused = _p; emit Paused(_p); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 amount) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; import './IERC20.sol'; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.19; interface IXfaiFactory { function getPool(address _token) external view returns (address pool); function allPools(uint256) external view returns (address pool); function poolCodeHash() external pure returns (bytes32); function allPoolsLength() external view returns (uint); function createPool(address _token) external returns (address pool); function setXfaiCore(address _core) external; function getXfaiCore() external view returns (address); function setOwner(address _owner) external; function getOwner() external view returns (address); event ChangedOwner(address indexed owner); event ChangedCore(address indexed core); event Whitelisting(bool state); event PoolCreated(address indexed token, address indexed pool, uint allPoolsSize); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.19; import './IERC20Metadata.sol'; interface IXfaiPool is IERC20Metadata { function getXfaiCore() external view returns (address); function poolToken() external view returns (address); function initialize(address _token, address _xfaiFactory) external; function getStates() external view returns (uint, uint); function update(uint _reserveBalance, uint _weightBalance) external; function mint(address _to, uint _amount) external; function burn(address _to, uint _amount) external; function linkedTransfer(address _token, address _to, uint256 _value) external; event Sync(uint _reserve, uint _weight); event Write(uint _reserve, uint _weight, uint _blockTimestamp); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.19; interface IXfaiV0Core { function lpFee() external view returns (uint); function changeLpFee(uint _newFee) external; function infinityNFTFee() external view returns (uint); function changeInfinityNFTFee(uint _newFee) external; function getTotalFee() external view returns (uint); function pause(bool _p) external; function swap( address _token0, address _token1, address _to ) external returns (uint input, uint output); function flashLoan(address _token, uint _amount, address _to, bytes calldata _data) external; function mint(address _token, address _to) external returns (uint liquidity); function burn( address _token0, address _token1, address _to ) external returns (uint amount0, uint amount1); function skim(address _token, address _to) external; function sync(address _token) external; event ChangedOwner(address indexed owner); event Mint(address indexed sender, uint liquidity); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap(address indexed sender, uint input, uint output, address indexed to); event FlashLoan(address indexed sender, uint amount); event LpFeeChange(uint newFee); event InfinityNFTFeeChange(uint newFee); event Paused(bool p); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.19; interface IXfaiV0FlashLoan { function flashLoan(address sender, uint amount, bytes calldata data) external; }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_infinityNFT","type":"address"},{"internalType":"address","name":"_xfETH","type":"address"},{"internalType":"uint256","name":"_lpFee","type":"uint256"},{"internalType":"uint256","name":"_infinityNFTFee","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"ChangedOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FlashLoan","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"InfinityNFTFeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"LpFeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"p","type":"bool"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"input","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"output","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Swap","type":"event"},{"inputs":[{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"burn","outputs":[{"internalType":"uint256","name":"amount0Out","type":"uint256"},{"internalType":"uint256","name":"amount1Out","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLnftFee","type":"uint256"}],"name":"changeInfinityNFTFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLpFee","type":"uint256"}],"name":"changeLpFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"flashLoan","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"infinityNFTFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_p","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"skim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amount0In","type":"uint256"},{"internalType":"uint256","name":"amount1Out","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"sync","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6101006040523480156200001257600080fd5b5060405162004945380380620049458339810160408190526200003591620000e9565b6001600160a01b03808616608081905285821660a05290841660c052600083905560018290556040805163554dcae760e01b8152905163554dcae7916004808201926020929091908290030181865afa15801562000097573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000bd919062000146565b60e05250620001609350505050565b80516001600160a01b0381168114620000e457600080fd5b919050565b600080600080600060a086880312156200010257600080fd5b6200010d86620000cc565b94506200011d60208701620000cc565b93506200012d60408701620000cc565b6060870151608090970151959894975095949392505050565b6000602082840312156200015957600080fd5b5051919050565b60805160a05160c05160e0516146bd6200028860003960008181610777015281816107c6015281816113a1015281816120920152818161254801528181612eac01528181613c5101528181613c8001528181613d080152613d500152600081816105bf01528181610687015281816111ce0152818161135a01528181611d0401528181611ee1015281816121970152818161232c01528181612b2d01528181612cfb015281816130270152818161351f0152818161373601528181613a840152613e4b0152600081816129890152818161375701526140590152600081816101ca01528181610756015281816107a501528181611380015281816116fd015281816118cd015281816120710152818161252701528181612e8b0152613aa501526146bd6000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c8063917c060e11610081578063a58411941161005b578063a58411941461018f578063adf51de1146101a2578063ee1fe2ad146101b557600080fd5b8063917c060e146101605780639246f76a14610169578063933162121461017c57600080fd5b8063712b772f116100b2578063712b772f146101325780637ae316d014610145578063890305d31461014d57600080fd5b806302329a29146100d957806345a11cec146100ee578063704ce43e1461011b575b600080fd5b6100ec6100e736600461436e565b6101c8565b005b6101016100fc3660046143bc565b610356565b604080519283526020830191909152015b60405180910390f35b61012460005481565b604051908152602001610112565b6100ec610140366004614407565b61115e565b6101246116e5565b6100ec61015b366004614440565b6116fb565b61012460015481565b6100ec610177366004614440565b6118cb565b61010161018a3660046143bc565b611a9b565b6100ec61019d366004614459565b611e71565b6100ec6101b0366004614476565b6122bc565b6101246101c3366004614407565b612c88565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610233573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102579190614515565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f586661695630436f72653a204e4f545f4f574e4552000000000000000000000060448201526064015b60405180910390fd5b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215159081179091556040519081527f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd2906020015b60405180910390a150565b600254600090819060ff16156103c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f586661695630436f72653a20504155534544000000000000000000000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040902054859085907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0161047a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01610528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036105bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f586661695630436f72653a204944454e544943414c5f504f4f4c53000000000060448201526064016102e7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff838116908216146106285773ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260409020600290555b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146106855773ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020600290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff808216908a160361074e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f586661695630436f72653a20494e56414c49445f5052494d4152595f544f4b4560448201527f4e0000000000000000000000000000000000000000000000000000000000000060648201526084016102e7565b600061079b8a7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061341c565b905060006107ea8a7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061341c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290915060009073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa15801561085a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087e9190614532565b905060008373ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f19190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015291925082918f16906370a0823190602401602060405180830381865afa158015610962573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109869190614532565b610990908461457a565b61099a9190614591565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919b5082918716906370a0823190602401602060405180830381865afa158015610a0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2f9190614532565b610a39908461457a565b610a439190614591565b985060008a118015610a555750600089115b610ae1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f586661695630436f72653a20494e53554646494349454e545f4c49515549444960448201527f54595f4255524e4544000000000000000000000000000000000000000000000060648201526084016102e7565b6040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301528c81166024830152604482018c905285169063341ce0cc90606401600060405180830381600087803b158015610b5957600080fd5b505af1158015610b6d573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1603610de9576040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301528c81166024830152604482018b905285169063341ce0cc90606401600060405180830381600087803b158015610c1c57600080fd5b505af1158015610c30573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff16632fb565e88e73ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b8152600401610ca5919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015610cc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce69190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528916906370a0823190602401602060405180830381865afa158015610d52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d769190614532565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526024820152604401600060405180830381600087803b158015610dcc57600080fd5b505af1158015610de0573d6000803e3d6000fd5b5050505061103a565b6040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301528481166024830152604482018b905285169063341ce0cc90606401600060405180830381600087803b158015610e6157600080fd5b505af1158015610e75573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff16632fb565e88e73ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b8152600401610eea919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015610f07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2b9190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528916906370a0823190602401602060405180830381865afa158015610f97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbb9190614532565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526024820152604401600060405180830381600087803b15801561101157600080fd5b505af1158015611025573d6000803e3d6000fd5b50505050611036838d8d6001613518565b9950505b6040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff851690639dc29fac90604401600060405180830381600087803b1580156110a857600080fd5b505af11580156110bc573d6000803e3d6000fd5b5050604080518d8152602081018d905273ffffffffffffffffffffffffffffffffffffffff8f1693503392507fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a35050505073ffffffffffffffffffffffffffffffffffffffff938416600090815260036020526040808220600190819055949095168152939093209190915550919590945092505050565b60025460ff16156111cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f586661695630436f72653a20504155534544000000000000000000000000000060448201526064016102e7565b817f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611281576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f586661695630436f72653a20494e56414c49445f544f4b454e0000000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0161132f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260408120600290557f0000000000000000000000000000000000000000000000000000000000000000906113c5857f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061341c565b90506000808273ffffffffffffffffffffffffffffffffffffffff1663d8ab82746040518163ffffffff1660e01b81526004016040805180830381865afa158015611414573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143891906145cc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529294509092506000918491908a16906370a0823190602401602060405180830381865afa1580156114b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d49190614532565b6114de91906145f0565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529192506000918491908816906370a0823190602401602060405180830381865afa158015611553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115779190614532565b61158191906145f0565b9050811561161a576040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116600483015289811660248301526044820184905286169063341ce0cc90606401600060405180830381600087803b15801561160157600080fd5b505af1158015611615573d6000803e3d6000fd5b505050505b80156116b1576040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015289811660248301526044820183905286169063341ce0cc90606401600060405180830381600087803b15801561169857600080fd5b505af11580156116ac573d6000803e3d6000fd5b505050505b50505073ffffffffffffffffffffffffffffffffffffffff9093166000908152600360205260409020600190555050505050565b600080546001546116f69190614603565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611766573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178a9190614515565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f586661695630436f72653a204e4f545f4f574e4552000000000000000000000060448201526064016102e7565b60646001548261182e9190614603565b1115611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f586661695630436f72653a204645455f455843454544535f4c494d495400000060448201526064016102e7565b60008190556040518181527f6dd92a0ab9d55ea4d1c74eccd145752cd4a8b993732f2b1ba98a9c2a674cc17a9060200161034b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611936573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195a9190614515565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f586661695630436f72653a204e4f545f4f574e4552000000000000000000000060448201526064016102e7565b6064816000546119fe9190614603565b1115611a66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f586661695630436f72653a204645455f455843454544535f4c494d495400000060448201526064016102e7565b60018190556040518181527f16614206cdcb6d0d0b4c49641090b66d8bb3a213d268188947929d52c18990489060200161034b565b600254600090819060ff1615611b0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f586661695630436f72653a20504155534544000000000000000000000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040902054859085907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611bbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611c6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f586661695630436f72653a204944454e544943414c5f504f4f4c53000000000060448201526064016102e7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff83811690821614611d6d5773ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260409020600290555b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611dca5773ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020600290555b611dd5888888613a7f565b604080518381526020810183905292975090955073ffffffffffffffffffffffffffffffffffffffff88169133917f2a9237ff5aa599ef4c5ee4b1142b53429d5755e2685fe6288b2e3320202115f5910160405180910390a35073ffffffffffffffffffffffffffffffffffffffff91821660009081526003602052604080822060019081905592909316815291909120559094909350915050565b60025460ff1615611ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f586661695630436f72653a20504155534544000000000000000000000000000060448201526064016102e7565b807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f586661695630436f72653a20494e56414c49445f544f4b454e0000000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01612042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260408120600290556120b6837f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061341c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918516906370a0823190602401602060405180830381865afa158015612128573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061214c9190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156121de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122029190614532565b6040517f2fb565e8000000000000000000000000000000000000000000000000000000008152600481018490526024810182905290915073ffffffffffffffffffffffffffffffffffffffff841690632fb565e890604401600060405180830381600087803b15801561227457600080fd5b505af1158015612288573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff9094166000908152600360205260409020600190555050505050565b60025460ff1615612329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f586661695630436f72653a20504155534544000000000000000000000000000060448201526064016102e7565b847f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f586661695630436f72653a20494e56414c49445f544f4b454e0000000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0161248d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff808216600090815260036020526040902060029055841661251f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f586661695630436f726520494e56414c49445f544f000000000000000000000060448201526064016102e7565b600061256c877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061341c565b905060008173ffffffffffffffffffffffffffffffffffffffff1663d8ab82746040518163ffffffff1660e01b81526004016040805180830381865afa1580156125ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125de91906145cc565b50905080871115612671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f586661695630436f72653a20494e53554646494349454e545f4f55545055545f60448201527f414d4f554e54000000000000000000000000000000000000000000000000000060648201526084016102e7565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600091908a16906370a0823190602401602060405180830381865afa1580156126e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127059190614532565b6040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b811660048301528981166024830152604482018b90529192509084169063341ce0cc90606401600060405180830381600087803b15801561278157600080fd5b505af1158015612795573d6000803e3d6000fd5b50506040517fe0232b4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16925063e0232b4291506127f19086908c908b908b90600401614616565b600060405180830381600087803b15801561280b57600080fd5b505af115801561281f573d6000803e3d6000fd5b5050505061271061282e6116e5565b612838908a61457a565b6128429190614591565b61284c9082614603565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528b16906370a0823190602401602060405180830381865afa1580156128b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128dc9190614532565b101561296a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f586661695630436f72653a20494e53554646494349454e545f414d4f554e545f60448201527f52455455524e454400000000000000000000000000000000000000000000000060648201526084016102e7565b8273ffffffffffffffffffffffffffffffffffffffff1663341ce0cc8a7f00000000000000000000000000000000000000000000000000000000000000006127106001548d6129b9919061457a565b6129c39190614591565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612a3757600080fd5b505af1158015612a4b573d6000803e3d6000fd5b50506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808716600483018190529350632fb565e892508c16906370a0823190602401602060405180830381865afa158015612ac4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae89190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301527f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612b74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b989190614532565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526024820152604401600060405180830381600087803b158015612bee57600080fd5b505af1158015612c02573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167f134bde118562a60dcf2d8c52965f586e25cf88a371592e44b78c4aa03bcbac8489604051612c4e91815260200190565b60405180910390a250505073ffffffffffffffffffffffffffffffffffffffff166000908152600360205260409020600190555050505050565b60025460009060ff1615612cf8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f586661695630436f72653a20504155534544000000000000000000000000000060448201526064016102e7565b827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612dae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f586661695630436f72653a20494e56414c49445f544f4b454e0000000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01612e5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040812060029055612ed0857f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061341c565b90506000808273ffffffffffffffffffffffffffffffffffffffff1663d8ab82746040518163ffffffff1660e01b81526004016040805180830381865afa158015612f1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4391906145cc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529294509092506000918916906370a0823190602401602060405180830381865afa158015612fb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fdc9190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561306e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130929190614532565b905060006130a085846145f0565b905060006130ae85846145f0565b905060008773ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131219190614532565b9050806000036131da576103e861314061313b848661457a565b613d92565b61314a91906145f0565b6040517f40c10f19000000000000000000000000000000000000000000000000000000008152600060048201526103e86024820152909a5073ffffffffffffffffffffffffffffffffffffffff8916906340c10f1990604401600060405180830381600087803b1580156131bd57600080fd5b505af11580156131d1573d6000803e3d6000fd5b5050505061320f565b61320c876131e8838661457a565b6131f29190614591565b876131fd848661457a565b6132079190614591565b613e02565b99505b60008a1161329f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f586661695630436f72653a20494e53554646494349454e545f4c49515549444960448201527f54595f4d494e544544000000000000000000000000000000000000000000000060648201526084016102e7565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c81166004830152602482018c90528916906340c10f1990604401600060405180830381600087803b15801561330f57600080fd5b505af1158015613323573d6000803e3d6000fd5b50506040517f2fb565e8000000000000000000000000000000000000000000000000000000008152600481018890526024810187905273ffffffffffffffffffffffffffffffffffffffff8b169250632fb565e89150604401600060405180830381600087803b15801561339657600080fd5b505af11580156133aa573d6000803e3d6000fd5b50506040518c81523392507f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885915060200160405180910390a250505073ffffffffffffffffffffffffffffffffffffffff90951660009081526003602052604090206001905550939695505050505050565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606085901b166020820152600090839060340160405160208183030381529060405280519060200120836040516020016134da939291907fff00000000000000000000000000000000000000000000000000000000000000815260609390931b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830191909152603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120949350505050565b60008060007f0000000000000000000000000000000000000000000000000000000000000000905060008790506000808273ffffffffffffffffffffffffffffffffffffffff1663d8ab82746040518163ffffffff1660e01b81526004016040805180830381865afa158015613592573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b691906145cc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8d811660048301529294509092506000918616906370a0823190602401602060405180830381865afa15801561362b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061364f9190614532565b905061365b82826145f0565b965087151560010361382257730001c69ad3feec3c5592d7d1f3d5db4e1c98b4b76352707d8c83858a61368c6116e5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526004810194909452602484019290925260448301526064820152608401602060405180830381865af41580156136f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137169190614532565b95508373ffffffffffffffffffffffffffffffffffffffff1663341ce0cc7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006127106001548c613787919061457a565b6137919190614591565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801561380557600080fd5b505af1158015613819573d6000803e3d6000fd5b50505050613830565b61382d878385613e1c565b95505b6040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b811660048301528a811660248301526044820188905285169063341ce0cc90606401600060405180830381600087803b1580156138a857600080fd5b505af11580156138bc573d6000803e3d6000fd5b50506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e81166004830152881692506370a082319150602401602060405180830381865afa15801561392c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139509190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8d811660048301529192506000918c16906370a0823190602401602060405180830381865afa1580156139c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139e69190614532565b6040517f2fb565e8000000000000000000000000000000000000000000000000000000008152600481018290526024810184905290915073ffffffffffffffffffffffffffffffffffffffff861690632fb565e890604401600060405180830381600087803b158015613a5857600080fd5b505af1158015613a6c573d6000803e3d6000fd5b5050505050505050505094509492505050565b6000807f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff80881690861603613b46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f586661695630436f72653a20494e56414c49445f544f0000000000000000000060448201526064016102e7565b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603613bdb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f586661695630436f72653a20494e56414c49445f544f0000000000000000000060448201526064016102e7565b8173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614158015613c4357508173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b15613ccc576000613c7588837f000000000000000000000000000000000000000000000000000000000000000061341c565b90506000613ca488847f000000000000000000000000000000000000000000000000000000000000000061341c565b9050613cb1828a83613e44565b509550613cc18189896000613518565b9550613d8892505050565b8173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603613d47576000613d2c87837f000000000000000000000000000000000000000000000000000000000000000061341c565b9050613d3b8188886001613518565b9095509350613d889050565b6000613d7488837f000000000000000000000000000000000000000000000000000000000000000061341c565b9050613d81818988613e44565b9095509350505b5050935093915050565b60006003821115613df35750806000613dac600283614591565b613db7906001614603565b90505b81811015613ded57905080600281613dd28186614591565b613ddc9190614603565b613de69190614591565b9050613dba565b50919050565b8115613dfd575060015b919050565b6000818310613e115781613e13565b825b90505b92915050565b6000613e288484614603565b613e32838661457a565b613e3c9190614591565b949350505050565b60008060007f0000000000000000000000000000000000000000000000000000000000000000905060008690506000808273ffffffffffffffffffffffffffffffffffffffff1663d8ab82746040518163ffffffff1660e01b81526004016040805180830381865afa158015613ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ee291906145cc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c811660048301529294509092506000918a16906370a0823190602401602060405180830381865afa158015613f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f7b9190614532565b9050613f8783826145f0565b9650730001c69ad3feec3c5592d7d1f3d5db4e1c98b4b76352707d8c84848a613fae6116e5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526004810194909452602484019290925260448301526064820152608401602060405180830381865af4158015614014573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140389190614532565b95508373ffffffffffffffffffffffffffffffffffffffff1663341ce0cc8a7f00000000000000000000000000000000000000000000000000000000000000006127106001548c614089919061457a565b6140939190614591565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801561410757600080fd5b505af115801561411b573d6000803e3d6000fd5b50506040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528b81166024830152604482018a90528716925063341ce0cc9150606401600060405180830381600087803b15801561419757600080fd5b505af11580156141ab573d6000803e3d6000fd5b50506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8d8116600483015260009350881691506370a0823190602401602060405180830381865afa15801561421e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142429190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8d81166004830152919250908b16906370a0823190602401602060405180830381865afa1580156142b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142d69190614532565b6040517f2fb565e8000000000000000000000000000000000000000000000000000000008152600481018290526024810183905290925073ffffffffffffffffffffffffffffffffffffffff861690632fb565e890604401600060405180830381600087803b15801561434857600080fd5b505af115801561435c573d6000803e3d6000fd5b50505050505050505050935093915050565b60006020828403121561438057600080fd5b8135801515811461439057600080fd5b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146143b957600080fd5b50565b6000806000606084860312156143d157600080fd5b83356143dc81614397565b925060208401356143ec81614397565b915060408401356143fc81614397565b809150509250925092565b6000806040838503121561441a57600080fd5b823561442581614397565b9150602083013561443581614397565b809150509250929050565b60006020828403121561445257600080fd5b5035919050565b60006020828403121561446b57600080fd5b813561439081614397565b60008060008060006080868803121561448e57600080fd5b853561449981614397565b94506020860135935060408601356144b081614397565b9250606086013567ffffffffffffffff808211156144cd57600080fd5b818801915088601f8301126144e157600080fd5b8135818111156144f057600080fd5b89602082850101111561450257600080fd5b9699959850939650602001949392505050565b60006020828403121561452757600080fd5b815161439081614397565b60006020828403121561454457600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082028115828204841417613e1657613e1661454b565b6000826145c7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600080604083850312156145df57600080fd5b505080516020909101519092909150565b81810381811115613e1657613e1661454b565b80820180821115613e1657613e1661454b565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101939250505056fea26469706673582212203e1f37b2731744c985fa1ca3341617dbd1cd95d44b6f7ec7b69270b8150871fc64736f6c634300081300330000000000000000000000000b51d00ef3df0b66766938220542185f6fdbc0b7000000000000000000000000e5840e8a0ff758d4f9a356f5a2f3914202a81e6f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae021000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100d45760003560e01c8063917c060e11610081578063a58411941161005b578063a58411941461018f578063adf51de1146101a2578063ee1fe2ad146101b557600080fd5b8063917c060e146101605780639246f76a14610169578063933162121461017c57600080fd5b8063712b772f116100b2578063712b772f146101325780637ae316d014610145578063890305d31461014d57600080fd5b806302329a29146100d957806345a11cec146100ee578063704ce43e1461011b575b600080fd5b6100ec6100e736600461436e565b6101c8565b005b6101016100fc3660046143bc565b610356565b604080519283526020830191909152015b60405180910390f35b61012460005481565b604051908152602001610112565b6100ec610140366004614407565b61115e565b6101246116e5565b6100ec61015b366004614440565b6116fb565b61012460015481565b6100ec610177366004614440565b6118cb565b61010161018a3660046143bc565b611a9b565b6100ec61019d366004614459565b611e71565b6100ec6101b0366004614476565b6122bc565b6101246101c3366004614407565b612c88565b7f0000000000000000000000000b51d00ef3df0b66766938220542185f6fdbc0b773ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610233573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102579190614515565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f586661695630436f72653a204e4f545f4f574e4552000000000000000000000060448201526064015b60405180910390fd5b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215159081179091556040519081527f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd2906020015b60405180910390a150565b600254600090819060ff16156103c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f586661695630436f72653a20504155534544000000000000000000000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040902054859085907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0161047a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01610528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036105bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f586661695630436f72653a204944454e544943414c5f504f4f4c53000000000060448201526064016102e7565b7f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae02173ffffffffffffffffffffffffffffffffffffffff838116908216146106285773ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260409020600290555b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146106855773ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020600290555b7f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae02173ffffffffffffffffffffffffffffffffffffffff808216908a160361074e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f586661695630436f72653a20494e56414c49445f5052494d4152595f544f4b4560448201527f4e0000000000000000000000000000000000000000000000000000000000000060648201526084016102e7565b600061079b8a7f0000000000000000000000000b51d00ef3df0b66766938220542185f6fdbc0b77f8f92f7e5e633cf0e16777f0f3dd2fc7041871898f9f7cbb26929a0be81e7923c61341c565b905060006107ea8a7f0000000000000000000000000b51d00ef3df0b66766938220542185f6fdbc0b77f8f92f7e5e633cf0e16777f0f3dd2fc7041871898f9f7cbb26929a0be81e7923c61341c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290915060009073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa15801561085a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087e9190614532565b905060008373ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f19190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015291925082918f16906370a0823190602401602060405180830381865afa158015610962573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109869190614532565b610990908461457a565b61099a9190614591565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919b5082918716906370a0823190602401602060405180830381865afa158015610a0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2f9190614532565b610a39908461457a565b610a439190614591565b985060008a118015610a555750600089115b610ae1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f586661695630436f72653a20494e53554646494349454e545f4c49515549444960448201527f54595f4255524e4544000000000000000000000000000000000000000000000060648201526084016102e7565b6040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301528c81166024830152604482018c905285169063341ce0cc90606401600060405180830381600087803b158015610b5957600080fd5b505af1158015610b6d573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1603610de9576040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301528c81166024830152604482018b905285169063341ce0cc90606401600060405180830381600087803b158015610c1c57600080fd5b505af1158015610c30573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff16632fb565e88e73ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b8152600401610ca5919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015610cc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce69190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528916906370a0823190602401602060405180830381865afa158015610d52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d769190614532565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526024820152604401600060405180830381600087803b158015610dcc57600080fd5b505af1158015610de0573d6000803e3d6000fd5b5050505061103a565b6040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301528481166024830152604482018b905285169063341ce0cc90606401600060405180830381600087803b158015610e6157600080fd5b505af1158015610e75573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff16632fb565e88e73ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b8152600401610eea919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015610f07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2b9190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528916906370a0823190602401602060405180830381865afa158015610f97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbb9190614532565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526024820152604401600060405180830381600087803b15801561101157600080fd5b505af1158015611025573d6000803e3d6000fd5b50505050611036838d8d6001613518565b9950505b6040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff851690639dc29fac90604401600060405180830381600087803b1580156110a857600080fd5b505af11580156110bc573d6000803e3d6000fd5b5050604080518d8152602081018d905273ffffffffffffffffffffffffffffffffffffffff8f1693503392507fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a35050505073ffffffffffffffffffffffffffffffffffffffff938416600090815260036020526040808220600190819055949095168152939093209190915550919590945092505050565b60025460ff16156111cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f586661695630436f72653a20504155534544000000000000000000000000000060448201526064016102e7565b817f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae02173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611281576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f586661695630436f72653a20494e56414c49445f544f4b454e0000000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0161132f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260408120600290557f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae021906113c5857f0000000000000000000000000b51d00ef3df0b66766938220542185f6fdbc0b77f8f92f7e5e633cf0e16777f0f3dd2fc7041871898f9f7cbb26929a0be81e7923c61341c565b90506000808273ffffffffffffffffffffffffffffffffffffffff1663d8ab82746040518163ffffffff1660e01b81526004016040805180830381865afa158015611414573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143891906145cc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529294509092506000918491908a16906370a0823190602401602060405180830381865afa1580156114b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d49190614532565b6114de91906145f0565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529192506000918491908816906370a0823190602401602060405180830381865afa158015611553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115779190614532565b61158191906145f0565b9050811561161a576040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116600483015289811660248301526044820184905286169063341ce0cc90606401600060405180830381600087803b15801561160157600080fd5b505af1158015611615573d6000803e3d6000fd5b505050505b80156116b1576040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015289811660248301526044820183905286169063341ce0cc90606401600060405180830381600087803b15801561169857600080fd5b505af11580156116ac573d6000803e3d6000fd5b505050505b50505073ffffffffffffffffffffffffffffffffffffffff9093166000908152600360205260409020600190555050505050565b600080546001546116f69190614603565b905090565b7f0000000000000000000000000b51d00ef3df0b66766938220542185f6fdbc0b773ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611766573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178a9190614515565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f586661695630436f72653a204e4f545f4f574e4552000000000000000000000060448201526064016102e7565b60646001548261182e9190614603565b1115611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f586661695630436f72653a204645455f455843454544535f4c494d495400000060448201526064016102e7565b60008190556040518181527f6dd92a0ab9d55ea4d1c74eccd145752cd4a8b993732f2b1ba98a9c2a674cc17a9060200161034b565b7f0000000000000000000000000b51d00ef3df0b66766938220542185f6fdbc0b773ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611936573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195a9190614515565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f586661695630436f72653a204e4f545f4f574e4552000000000000000000000060448201526064016102e7565b6064816000546119fe9190614603565b1115611a66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f586661695630436f72653a204645455f455843454544535f4c494d495400000060448201526064016102e7565b60018190556040518181527f16614206cdcb6d0d0b4c49641090b66d8bb3a213d268188947929d52c18990489060200161034b565b600254600090819060ff1615611b0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f586661695630436f72653a20504155534544000000000000000000000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040902054859085907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611bbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611c6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f586661695630436f72653a204944454e544943414c5f504f4f4c53000000000060448201526064016102e7565b7f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae02173ffffffffffffffffffffffffffffffffffffffff83811690821614611d6d5773ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260409020600290555b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611dca5773ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020600290555b611dd5888888613a7f565b604080518381526020810183905292975090955073ffffffffffffffffffffffffffffffffffffffff88169133917f2a9237ff5aa599ef4c5ee4b1142b53429d5755e2685fe6288b2e3320202115f5910160405180910390a35073ffffffffffffffffffffffffffffffffffffffff91821660009081526003602052604080822060019081905592909316815291909120559094909350915050565b60025460ff1615611ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f586661695630436f72653a20504155534544000000000000000000000000000060448201526064016102e7565b807f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae02173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f586661695630436f72653a20494e56414c49445f544f4b454e0000000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01612042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260408120600290556120b6837f0000000000000000000000000b51d00ef3df0b66766938220542185f6fdbc0b77f8f92f7e5e633cf0e16777f0f3dd2fc7041871898f9f7cbb26929a0be81e7923c61341c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918516906370a0823190602401602060405180830381865afa158015612128573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061214c9190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529192506000917f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae02116906370a0823190602401602060405180830381865afa1580156121de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122029190614532565b6040517f2fb565e8000000000000000000000000000000000000000000000000000000008152600481018490526024810182905290915073ffffffffffffffffffffffffffffffffffffffff841690632fb565e890604401600060405180830381600087803b15801561227457600080fd5b505af1158015612288573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff9094166000908152600360205260409020600190555050505050565b60025460ff1615612329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f586661695630436f72653a20504155534544000000000000000000000000000060448201526064016102e7565b847f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae02173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f586661695630436f72653a20494e56414c49445f544f4b454e0000000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0161248d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff808216600090815260036020526040902060029055841661251f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f586661695630436f726520494e56414c49445f544f000000000000000000000060448201526064016102e7565b600061256c877f0000000000000000000000000b51d00ef3df0b66766938220542185f6fdbc0b77f8f92f7e5e633cf0e16777f0f3dd2fc7041871898f9f7cbb26929a0be81e7923c61341c565b905060008173ffffffffffffffffffffffffffffffffffffffff1663d8ab82746040518163ffffffff1660e01b81526004016040805180830381865afa1580156125ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125de91906145cc565b50905080871115612671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f586661695630436f72653a20494e53554646494349454e545f4f55545055545f60448201527f414d4f554e54000000000000000000000000000000000000000000000000000060648201526084016102e7565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600091908a16906370a0823190602401602060405180830381865afa1580156126e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127059190614532565b6040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b811660048301528981166024830152604482018b90529192509084169063341ce0cc90606401600060405180830381600087803b15801561278157600080fd5b505af1158015612795573d6000803e3d6000fd5b50506040517fe0232b4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16925063e0232b4291506127f19086908c908b908b90600401614616565b600060405180830381600087803b15801561280b57600080fd5b505af115801561281f573d6000803e3d6000fd5b5050505061271061282e6116e5565b612838908a61457a565b6128429190614591565b61284c9082614603565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528b16906370a0823190602401602060405180830381865afa1580156128b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128dc9190614532565b101561296a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f586661695630436f72653a20494e53554646494349454e545f414d4f554e545f60448201527f52455455524e454400000000000000000000000000000000000000000000000060648201526084016102e7565b8273ffffffffffffffffffffffffffffffffffffffff1663341ce0cc8a7f000000000000000000000000e5840e8a0ff758d4f9a356f5a2f3914202a81e6f6127106001548d6129b9919061457a565b6129c39190614591565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612a3757600080fd5b505af1158015612a4b573d6000803e3d6000fd5b50506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808716600483018190529350632fb565e892508c16906370a0823190602401602060405180830381865afa158015612ac4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae89190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301527f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae02116906370a0823190602401602060405180830381865afa158015612b74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b989190614532565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526024820152604401600060405180830381600087803b158015612bee57600080fd5b505af1158015612c02573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167f134bde118562a60dcf2d8c52965f586e25cf88a371592e44b78c4aa03bcbac8489604051612c4e91815260200190565b60405180910390a250505073ffffffffffffffffffffffffffffffffffffffff166000908152600360205260409020600190555050505050565b60025460009060ff1615612cf8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f586661695630436f72653a20504155534544000000000000000000000000000060448201526064016102e7565b827f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae02173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612dae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f586661695630436f72653a20494e56414c49445f544f4b454e0000000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01612e5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040812060029055612ed0857f0000000000000000000000000b51d00ef3df0b66766938220542185f6fdbc0b77f8f92f7e5e633cf0e16777f0f3dd2fc7041871898f9f7cbb26929a0be81e7923c61341c565b90506000808273ffffffffffffffffffffffffffffffffffffffff1663d8ab82746040518163ffffffff1660e01b81526004016040805180830381865afa158015612f1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4391906145cc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529294509092506000918916906370a0823190602401602060405180830381865afa158015612fb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fdc9190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529192506000917f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae02116906370a0823190602401602060405180830381865afa15801561306e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130929190614532565b905060006130a085846145f0565b905060006130ae85846145f0565b905060008773ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131219190614532565b9050806000036131da576103e861314061313b848661457a565b613d92565b61314a91906145f0565b6040517f40c10f19000000000000000000000000000000000000000000000000000000008152600060048201526103e86024820152909a5073ffffffffffffffffffffffffffffffffffffffff8916906340c10f1990604401600060405180830381600087803b1580156131bd57600080fd5b505af11580156131d1573d6000803e3d6000fd5b5050505061320f565b61320c876131e8838661457a565b6131f29190614591565b876131fd848661457a565b6132079190614591565b613e02565b99505b60008a1161329f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f586661695630436f72653a20494e53554646494349454e545f4c49515549444960448201527f54595f4d494e544544000000000000000000000000000000000000000000000060648201526084016102e7565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c81166004830152602482018c90528916906340c10f1990604401600060405180830381600087803b15801561330f57600080fd5b505af1158015613323573d6000803e3d6000fd5b50506040517f2fb565e8000000000000000000000000000000000000000000000000000000008152600481018890526024810187905273ffffffffffffffffffffffffffffffffffffffff8b169250632fb565e89150604401600060405180830381600087803b15801561339657600080fd5b505af11580156133aa573d6000803e3d6000fd5b50506040518c81523392507f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885915060200160405180910390a250505073ffffffffffffffffffffffffffffffffffffffff90951660009081526003602052604090206001905550939695505050505050565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606085901b166020820152600090839060340160405160208183030381529060405280519060200120836040516020016134da939291907fff00000000000000000000000000000000000000000000000000000000000000815260609390931b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830191909152603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120949350505050565b60008060007f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae021905060008790506000808273ffffffffffffffffffffffffffffffffffffffff1663d8ab82746040518163ffffffff1660e01b81526004016040805180830381865afa158015613592573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b691906145cc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8d811660048301529294509092506000918616906370a0823190602401602060405180830381865afa15801561362b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061364f9190614532565b905061365b82826145f0565b965087151560010361382257730001c69ad3feec3c5592d7d1f3d5db4e1c98b4b76352707d8c83858a61368c6116e5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526004810194909452602484019290925260448301526064820152608401602060405180830381865af41580156136f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137169190614532565b95508373ffffffffffffffffffffffffffffffffffffffff1663341ce0cc7f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae0217f000000000000000000000000e5840e8a0ff758d4f9a356f5a2f3914202a81e6f6127106001548c613787919061457a565b6137919190614591565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801561380557600080fd5b505af1158015613819573d6000803e3d6000fd5b50505050613830565b61382d878385613e1c565b95505b6040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b811660048301528a811660248301526044820188905285169063341ce0cc90606401600060405180830381600087803b1580156138a857600080fd5b505af11580156138bc573d6000803e3d6000fd5b50506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e81166004830152881692506370a082319150602401602060405180830381865afa15801561392c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139509190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8d811660048301529192506000918c16906370a0823190602401602060405180830381865afa1580156139c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139e69190614532565b6040517f2fb565e8000000000000000000000000000000000000000000000000000000008152600481018290526024810184905290915073ffffffffffffffffffffffffffffffffffffffff861690632fb565e890604401600060405180830381600087803b158015613a5857600080fd5b505af1158015613a6c573d6000803e3d6000fd5b5050505050505050505094509492505050565b6000807f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae0217f0000000000000000000000000b51d00ef3df0b66766938220542185f6fdbc0b773ffffffffffffffffffffffffffffffffffffffff80881690861603613b46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f586661695630436f72653a20494e56414c49445f544f0000000000000000000060448201526064016102e7565b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603613bdb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f586661695630436f72653a20494e56414c49445f544f0000000000000000000060448201526064016102e7565b8173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614158015613c4357508173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b15613ccc576000613c7588837f8f92f7e5e633cf0e16777f0f3dd2fc7041871898f9f7cbb26929a0be81e7923c61341c565b90506000613ca488847f8f92f7e5e633cf0e16777f0f3dd2fc7041871898f9f7cbb26929a0be81e7923c61341c565b9050613cb1828a83613e44565b509550613cc18189896000613518565b9550613d8892505050565b8173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603613d47576000613d2c87837f8f92f7e5e633cf0e16777f0f3dd2fc7041871898f9f7cbb26929a0be81e7923c61341c565b9050613d3b8188886001613518565b9095509350613d889050565b6000613d7488837f8f92f7e5e633cf0e16777f0f3dd2fc7041871898f9f7cbb26929a0be81e7923c61341c565b9050613d81818988613e44565b9095509350505b5050935093915050565b60006003821115613df35750806000613dac600283614591565b613db7906001614603565b90505b81811015613ded57905080600281613dd28186614591565b613ddc9190614603565b613de69190614591565b9050613dba565b50919050565b8115613dfd575060015b919050565b6000818310613e115781613e13565b825b90505b92915050565b6000613e288484614603565b613e32838661457a565b613e3c9190614591565b949350505050565b60008060007f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae021905060008690506000808273ffffffffffffffffffffffffffffffffffffffff1663d8ab82746040518163ffffffff1660e01b81526004016040805180830381865afa158015613ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ee291906145cc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c811660048301529294509092506000918a16906370a0823190602401602060405180830381865afa158015613f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f7b9190614532565b9050613f8783826145f0565b9650730001c69ad3feec3c5592d7d1f3d5db4e1c98b4b76352707d8c84848a613fae6116e5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526004810194909452602484019290925260448301526064820152608401602060405180830381865af4158015614014573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140389190614532565b95508373ffffffffffffffffffffffffffffffffffffffff1663341ce0cc8a7f000000000000000000000000e5840e8a0ff758d4f9a356f5a2f3914202a81e6f6127106001548c614089919061457a565b6140939190614591565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801561410757600080fd5b505af115801561411b573d6000803e3d6000fd5b50506040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528b81166024830152604482018a90528716925063341ce0cc9150606401600060405180830381600087803b15801561419757600080fd5b505af11580156141ab573d6000803e3d6000fd5b50506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8d8116600483015260009350881691506370a0823190602401602060405180830381865afa15801561421e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142429190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8d81166004830152919250908b16906370a0823190602401602060405180830381865afa1580156142b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142d69190614532565b6040517f2fb565e8000000000000000000000000000000000000000000000000000000008152600481018290526024810183905290925073ffffffffffffffffffffffffffffffffffffffff861690632fb565e890604401600060405180830381600087803b15801561434857600080fd5b505af115801561435c573d6000803e3d6000fd5b50505050505050505050935093915050565b60006020828403121561438057600080fd5b8135801515811461439057600080fd5b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146143b957600080fd5b50565b6000806000606084860312156143d157600080fd5b83356143dc81614397565b925060208401356143ec81614397565b915060408401356143fc81614397565b809150509250925092565b6000806040838503121561441a57600080fd5b823561442581614397565b9150602083013561443581614397565b809150509250929050565b60006020828403121561445257600080fd5b5035919050565b60006020828403121561446b57600080fd5b813561439081614397565b60008060008060006080868803121561448e57600080fd5b853561449981614397565b94506020860135935060408601356144b081614397565b9250606086013567ffffffffffffffff808211156144cd57600080fd5b818801915088601f8301126144e157600080fd5b8135818111156144f057600080fd5b89602082850101111561450257600080fd5b9699959850939650602001949392505050565b60006020828403121561452757600080fd5b815161439081614397565b60006020828403121561454457600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082028115828204841417613e1657613e1661454b565b6000826145c7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600080604083850312156145df57600080fd5b505080516020909101519092909150565b81810381811115613e1657613e1661454b565b80820180821115613e1657613e1661454b565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101939250505056fea26469706673582212203e1f37b2731744c985fa1ca3341617dbd1cd95d44b6f7ec7b69270b8150871fc64736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000b51d00ef3df0b66766938220542185f6fdbc0b7000000000000000000000000e5840e8a0ff758d4f9a356f5a2f3914202a81e6f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae021000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a
-----Decoded View---------------
Arg [0] : _factory (address): 0x0b51D00eF3Df0B66766938220542185F6fDbC0B7
Arg [1] : _infinityNFT (address): 0xe5840e8a0Ff758D4F9a356F5A2F3914202A81e6f
Arg [2] : _xfETH (address): 0xa449845c3309ac5269DFA6b2F80eb6E73D0AE021
Arg [3] : _lpFee (uint256): 10
Arg [4] : _infinityNFTFee (uint256): 10
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000b51d00ef3df0b66766938220542185f6fdbc0b7
Arg [1] : 000000000000000000000000e5840e8a0ff758d4f9a356f5a2f3914202a81e6f
Arg [2] : 000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae021
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000a
Deployed Bytecode Sourcemap
5069:14830:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19802:95;;;;;;:::i;:::-;;:::i;:::-;;15012:1522;;;;;;:::i;:::-;;:::i;:::-;;;;1159:25:7;;;1215:2;1200:18;;1193:34;;;;1132:18;15012:1522:6;;;;;;;;5455:26;;;;;;;;;1384:25:7;;;1372:2;1357:18;5455:26:6;1238:177:7;18385:617:6;;;;;;:::i;:::-;;:::i;8881:99::-;;;:::i;8037:211::-;;;;;;:::i;:::-;;:::i;5552:35::-;;;;;;8453:237;;;;;;:::i;:::-;;:::i;12244:317::-;;;;;;:::i;:::-;;:::i;19241:319::-;;;;;;:::i;:::-;;:::i;17074:1030::-;;;;;;:::i;:::-;;:::i;13179:1054::-;;;;;;:::i;:::-;;:::i;19802:95::-;7097:7;7084:30;;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7070:46;;:10;:46;;;7062:80;;;;;;;3649:2:7;7062:80:6;;;3631:21:7;3688:2;3668:18;;;3661:30;3727:23;3707:18;;;3700:51;3768:18;;7062:80:6;;;;;;;;;19860:6:::1;:11:::0;;;::::1;::::0;::::1;;::::0;;::::1;::::0;;;19882:10:::1;::::0;3937:41:7;;;19882:10:6::1;::::0;3925:2:7;3910:18;19882:10:6::1;;;;;;;;19802:95:::0;:::o;15012:1522::-;6981:6;;15174:15;;;;6981:6;;:15;6973:46;;;;;;;4191:2:7;6973:46:6;;;4173:21:7;4230:2;4210:18;;;4203:30;4269:20;4249:18;;;4242:48;4307:18;;6973:46:6;3989:342:7;6973:46:6;6493:17:::1;::::0;::::1;;::::0;;;:8:::1;:17;::::0;;;;;15143:7;;15152;;6493:28;;6485:67:::1;;;::::0;::::1;::::0;;4538:2:7;6485:67:6::1;::::0;::::1;4520:21:7::0;4577:2;4557:18;;;4550:30;4616:28;4596:18;;;4589:56;4662:18;;6485:67:6::1;4336:350:7::0;6485:67:6::1;6566:17;::::0;::::1;;::::0;;;:8:::1;:17;::::0;;;;;:28;;6558:67:::1;;;::::0;::::1;::::0;;4538:2:7;6558:67:6::1;::::0;::::1;4520:21:7::0;4577:2;4557:18;;;4550:30;4616:28;4596:18;;;4589:56;4662:18;;6558:67:6::1;4336:350:7::0;6558:67:6::1;6650:7;6639:18;;:7;:18;;::::0;6631:58:::1;;;::::0;::::1;::::0;;4893:2:7;6631:58:6::1;::::0;::::1;4875:21:7::0;4932:2;4912:18;;;4905:30;4971:29;4951:18;;;4944:57;5018:18;;6631:58:6::1;4691:351:7::0;6631:58:6::1;6712:5;6727:17;::::0;;::::1;::::0;;::::1;;6723:65;;6754:17;::::0;::::1;;::::0;;;:8:::1;:17;::::0;;;;5704:1:::1;6754:27:::0;;6723:65:::1;6808:6;6797:17;;:7;:17;;;6793:65;;6824:17;::::0;::::1;;::::0;;;:8:::1;:17;::::0;;;;5704:1:::1;6824:27:::0;;6793:65:::1;15233:5:::2;15266:17;::::0;;::::2;::::0;;::::2;::::0;15258:63:::2;;;::::0;::::2;::::0;;5249:2:7;15258:63:6::2;::::0;::::2;5231:21:7::0;5288:2;5268:18;;;5261:30;5327:34;5307:18;;;5300:62;5398:3;5378:18;;;5371:31;5419:19;;15258:63:6::2;5047:397:7::0;15258:63:6::2;15327:13;15343:51;15363:7;15372;15381:12;15343:19;:51::i;:::-;15327:67;;15400:13;15416:51;15436:7;15445;15454:12;15416:19;:51::i;:::-;15490:38;::::0;;;;15522:4:::2;15490:38;::::0;::::2;5595:74:7::0;15400:67:6;;-1:-1:-1;15473:14:6::2;::::0;15490:23:::2;::::0;::::2;::::0;::::2;::::0;5568:18:7;;15490:38:6::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15473:55;;15534:16;15560:5;15553:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15612:32;::::0;;;;:25:::2;5613:55:7::0;;;15612:32:6::2;::::0;::::2;5595:74:7::0;15534:46:6;;-1:-1:-1;15534:46:6;;15612:25;::::2;::::0;::::2;::::0;5568:18:7;;15612:32:6::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15600:44;::::0;:9;:44:::2;:::i;:::-;15599:60;;;;:::i;:::-;15739:31;::::0;;;;:24:::2;5613:55:7::0;;;15739:31:6::2;::::0;::::2;5595:74:7::0;15586:73:6;;-1:-1:-1;15774:11:6;;15739:24;::::2;::::0;::::2;::::0;5568:18:7;;15739:31:6::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15727:43;::::0;:9;:43:::2;:::i;:::-;15726:59;;;;:::i;:::-;15713:72;;15860:1;15847:10;:14;:32;;;;;15878:1;15865:10;:14;15847:32;15839:86;;;::::0;::::2;::::0;;6712:2:7;15839:86:6::2;::::0;::::2;6694:21:7::0;6751:2;6731:18;;;6724:30;6790:34;6770:18;;;6763:62;6861:11;6841:18;;;6834:39;6890:19;;15839:86:6::2;6510:405:7::0;15839:86:6::2;15931:57;::::0;;;;:31:::2;7201:15:7::0;;;15931:57:6::2;::::0;::::2;7183:34:7::0;7253:15;;;7233:18;;;7226:43;7285:18;;;7278:34;;;15931:31:6;::::2;::::0;::::2;::::0;7095:18:7;;15931:57:6::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;16009:6;15998:17;;:7;:17;;::::0;15994:427:::2;;16025:56;::::0;;;;:31:::2;7201:15:7::0;;;16025:56:6::2;::::0;::::2;7183:34:7::0;7253:15;;;7233:18;;;7226:43;7285:18;;;7278:34;;;16025:31:6;::::2;::::0;::::2;::::0;7095:18:7;;16025:56:6::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;16099:5;16089:23;;;16120:7;16113:25;;;16139:5;16113:32;;;;;;;;;;;;;;5625:42:7::0;5613:55;;;;5595:74;;5583:2;5568:18;;5449:226;16113:32:6::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16147:31;::::0;;;;:24:::2;5613:55:7::0;;;16147:31:6::2;::::0;::::2;5595:74:7::0;16147:24:6;::::2;::::0;::::2;::::0;5568:18:7;;16147:31:6::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16089:90;::::0;;::::2;::::0;;;;;;::::2;::::0;::::2;1159:25:7::0;;;;1200:18;;;1193:34;1132:18;;16089:90:6::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;15994:427;;;16200:58;::::0;;;;:31:::2;7201:15:7::0;;;16200:58:6::2;::::0;::::2;7183:34:7::0;7253:15;;;7233:18;;;7226:43;7285:18;;;7278:34;;;16200:31:6;::::2;::::0;::::2;::::0;7095:18:7;;16200:58:6::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;16276:5;16266:23;;;16297:7;16290:25;;;16316:5;16290:32;;;;;;;;;;;;;;5625:42:7::0;5613:55;;;;5595:74;;5583:2;5568:18;;5449:226;16290:32:6::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16324:31;::::0;;;;:24:::2;5613:55:7::0;;;16324:31:6::2;::::0;::::2;5595:74:7::0;16324:24:6;::::2;::::0;::::2;::::0;5568:18:7;;16324:31:6::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16266:90;::::0;;::::2;::::0;;;;;;::::2;::::0;::::2;1159:25:7::0;;;;1200:18;;;1193:34;1132:18;;16266:90:6::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;16381:33;16388:5;16395:7;16404:3;16409:4;16381:6;:33::i;:::-;16364:50:::0;-1:-1:-1;;15994:427:6::2;16426:47;::::0;;;;16456:4:::2;16426:47;::::0;::::2;7497:74:7::0;7587:18;;;7580:34;;;16426:21:6::2;::::0;::::2;::::0;::::2;::::0;7470:18:7;;16426:47:6::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;16484:45:6::2;::::0;;1159:25:7;;;1215:2;1200:18;;1193:34;;;16484:45:6::2;::::0;::::2;::::0;-1:-1:-1;16489:10:6::2;::::0;-1:-1:-1;16484:45:6::2;::::0;1132:18:7;16484:45:6::2;;;;;;;-1:-1:-1::0;;;;6870:17:6::1;::::0;;::::1;;::::0;;;:8:::1;:17;::::0;;;;;5667:1:::1;6870:31:::0;;;;6907:17;;;::::1;::::0;;;;;;:31;;;;-1:-1:-1;15012:1522:6;;;;-1:-1:-1;15012:1522:6;-1:-1:-1;;;15012:1522:6:o;18385:617::-;6981:6;;;;:15;6973:46;;;;;;;4191:2:7;6973:46:6;;;4173:21:7;4230:2;4210:18;;;4203:30;4269:20;4249:18;;;4242:48;4307:18;;6973:46:6;3989:342:7;6973:46:6;18466:6:::1;6234:5;6224:15;;:6;:15;;::::0;6216:53:::1;;;::::0;::::1;::::0;;7827:2:7;6216:53:6::1;::::0;::::1;7809:21:7::0;7866:2;7846:18;;;7839:30;7905:27;7885:18;;;7878:55;7950:18;;6216:53:6::1;7625:349:7::0;6216:53:6::1;6283:16;::::0;::::1;;::::0;;;:8:::1;:16;::::0;;;;;:27;;6275:66:::1;;;::::0;::::1;::::0;;4538:2:7;6275:66:6::1;::::0;::::1;4520:21:7::0;4577:2;4557:18;;;4550:30;4616:28;4596:18;;;4589:56;4662:18;;6275:66:6::1;4336:350:7::0;6275:66:6::1;6347:16;::::0;::::1;;::::0;;;:8:::1;:16;::::0;;;;5704:1:::1;6347:26:::0;;18497:5:::2;::::0;18537:50:::2;18557:6:::0;18565:7:::2;18574:12;18537:19;:50::i;:::-;18522:65;;18594:12;18608:11:::0;18633:4:::2;18623:25;;;:27;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18679:30;::::0;;;;:24:::2;5613:55:7::0;;;18679:30:6::2;::::0;::::2;5595:74:7::0;18593:57:6;;-1:-1:-1;18593:57:6;;-1:-1:-1;18656:20:6::2;::::0;18593:57;;18679:24;;::::2;::::0;::::2;::::0;5568:18:7;;18679:30:6::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;;;:::i;:::-;18748:30;::::0;;;;:24:::2;5613:55:7::0;;;18748:30:6::2;::::0;::::2;5595:74:7::0;18656:63:6;;-1:-1:-1;18725:20:6::2;::::0;18781:6;;18748:24;;::::2;::::0;::::2;::::0;5568:18:7;;18748:30:6::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;;;:::i;:::-;18725:62:::0;-1:-1:-1;18797:19:6;;18793:100:::2;;18826:60;::::0;;;;:30:::2;7201:15:7::0;;;18826:60:6::2;::::0;::::2;7183:34:7::0;7253:15;;;7233:18;;;7226:43;7285:18;;;7278:34;;;18826:30:6;::::2;::::0;::::2;::::0;7095:18:7;;18826:60:6::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;18793:100;18902:19:::0;;18898:100:::2;;18931:60;::::0;;;;:30:::2;7201:15:7::0;;;18931:60:6::2;::::0;::::2;7183:34:7::0;7253:15;;;7233:18;;;7226:43;7285:18;;;7278:34;;;18931:30:6;::::2;::::0;::::2;::::0;7095:18:7;;18931:60:6::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;18898:100;-1:-1:-1::0;;;6386:16:6::1;::::0;;::::1;;::::0;;;:8:::1;:16;::::0;;;;5667:1:::1;6386:30:::0;;-1:-1:-1;;;;;18385:617:6:o;8881:99::-;8934:4;8970:5;;8953:14;;:22;;;;:::i;:::-;8946:29;;8881:99;:::o;8037:211::-;7097:7;7084:30;;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7070:46;;:10;:46;;;7062:80;;;;;;;3649:2:7;7062:80:6;;;3631:21:7;3688:2;3668:18;;;3661:30;3727:23;3707:18;;;3700:51;3768:18;;7062:80:6;3447:345:7;7062:80:6;5624:3:::1;8128:14;;8116:9;:26;;;;:::i;:::-;:37;;8108:79;;;::::0;::::1;::::0;;8694:2:7;8108:79:6::1;::::0;::::1;8676:21:7::0;8733:2;8713:18;;;8706:30;8772:31;8752:18;;;8745:59;8821:18;;8108:79:6::1;8492:353:7::0;8108:79:6::1;8193:5;:17:::0;;;8221:22:::1;::::0;1384:25:7;;;8221:22:6::1;::::0;1372:2:7;1357:18;8221:22:6::1;1238:177:7::0;8453:237:6;7097:7;7084:30;;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7070:46;;:10;:46;;;7062:80;;;;;;;3649:2:7;7062:80:6;;;3631:21:7;3688:2;3668:18;;;3661:30;3727:23;3707:18;;;3700:51;3768:18;;7062:80:6;3447:345:7;7062:80:6;5624:3:::1;8551:11;8543:5;;:19;;;;:::i;:::-;:30;;8535:72;;;::::0;::::1;::::0;;8694:2:7;8535:72:6::1;::::0;::::1;8676:21:7::0;8733:2;8713:18;;;8706:30;8772:31;8752:18;;;8745:59;8821:18;;8535:72:6::1;8492:353:7::0;8535:72:6::1;8613:14;:28:::0;;;8652:33:::1;::::0;1384:25:7;;;8652:33:6::1;::::0;1372:2:7;1357:18;8652:33:6::1;1238:177:7::0;12244:317:6;6981:6;;12406:14;;;;6981:6;;:15;6973:46;;;;;;;4191:2:7;6973:46:6;;;4173:21:7;4230:2;4210:18;;;4203:30;4269:20;4249:18;;;4242:48;4307:18;;6973:46:6;3989:342:7;6973:46:6;6493:17:::1;::::0;::::1;;::::0;;;:8:::1;:17;::::0;;;;;12375:7;;12384;;6493:28;;6485:67:::1;;;::::0;::::1;::::0;;4538:2:7;6485:67:6::1;::::0;::::1;4520:21:7::0;4577:2;4557:18;;;4550:30;4616:28;4596:18;;;4589:56;4662:18;;6485:67:6::1;4336:350:7::0;6485:67:6::1;6566:17;::::0;::::1;;::::0;;;:8:::1;:17;::::0;;;;;:28;;6558:67:::1;;;::::0;::::1;::::0;;4538:2:7;6558:67:6::1;::::0;::::1;4520:21:7::0;4577:2;4557:18;;;4550:30;4616:28;4596:18;;;4589:56;4662:18;;6558:67:6::1;4336:350:7::0;6558:67:6::1;6650:7;6639:18;;:7;:18;;::::0;6631:58:::1;;;::::0;::::1;::::0;;4893:2:7;6631:58:6::1;::::0;::::1;4875:21:7::0;4932:2;4912:18;;;4905:30;4971:29;4951:18;;;4944:57;5018:18;;6631:58:6::1;4691:351:7::0;6631:58:6::1;6712:5;6727:17;::::0;;::::1;::::0;;::::1;;6723:65;;6754:17;::::0;::::1;;::::0;;;:8:::1;:17;::::0;;;;5704:1:::1;6754:27:::0;;6723:65:::1;6808:6;6797:17;;:7;:17;;;6793:65;;6824:17;::::0;::::1;;::::0;;;:8:::1;:17;::::0;;;;5704:1:::1;6824:27:::0;;6793:65:::1;12473:28:::2;12479:7;12488;12497:3;12473:5;:28::i;:::-;12512:44;::::0;;1159:25:7;;;1215:2;1200:18;;1193:34;;;12447:54:6;;-1:-1:-1;12447:54:6;;-1:-1:-1;12512:44:6::2;::::0;::::2;::::0;12517:10:::2;::::0;12512:44:::2;::::0;1132:18:7;12512:44:6::2;;;;;;;-1:-1:-1::0;6870:17:6::1;::::0;;::::1;;::::0;;;:8:::1;:17;::::0;;;;;5667:1:::1;6870:31:::0;;;;6907:17;;;::::1;::::0;;;;;;:31;12244:317;;;;-1:-1:-1;12244:317:6;-1:-1:-1;;12244:317:6:o;19241:319::-;6981:6;;;;:15;6973:46;;;;;;;4191:2:7;6973:46:6;;;4173:21:7;4230:2;4210:18;;;4203:30;4269:20;4249:18;;;4242:48;4307:18;;6973:46:6;3989:342:7;6973:46:6;19309:6:::1;6234:5;6224:15;;:6;:15;;::::0;6216:53:::1;;;::::0;::::1;::::0;;7827:2:7;6216:53:6::1;::::0;::::1;7809:21:7::0;7866:2;7846:18;;;7839:30;7905:27;7885:18;;;7878:55;7950:18;;6216:53:6::1;7625:349:7::0;6216:53:6::1;6283:16;::::0;::::1;;::::0;;;:8:::1;:16;::::0;;;;;:27;;6275:66:::1;;;::::0;::::1;::::0;;4538:2:7;6275:66:6::1;::::0;::::1;4520:21:7::0;4577:2;4557:18;;;4550:30;4616:28;4596:18;;;4589:56;4662:18;;6275:66:6::1;4336:350:7::0;6275:66:6::1;6347:16;::::0;::::1;;::::0;;;:8:::1;:16;::::0;;;;5704:1:::1;6347:26:::0;;19338:50:::2;19358:6:::0;19366:7:::2;19375:12;19338:19;:50::i;:::-;19414:30;::::0;;;;:24:::2;5613:55:7::0;;;19414:30:6::2;::::0;::::2;5595:74:7::0;19323:65:6;;-1:-1:-1;19394:17:6::2;::::0;19414:24;::::2;::::0;::::2;::::0;5568:18:7;;19414:30:6::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19470:29;::::0;;;;:23:::2;5613:55:7::0;;;19470:29:6::2;::::0;::::2;5595:74:7::0;19394:50:6;;-1:-1:-1;19450:17:6::2;::::0;19477:5:::2;19470:23;::::0;::::2;::::0;5568:18:7;;19470:29:6::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19505:50;::::0;;;;::::2;::::0;::::2;1159:25:7::0;;;1200:18;;;1193:34;;;19450:49:6;;-1:-1:-1;19505:22:6::2;::::0;::::2;::::0;::::2;::::0;1132:18:7;;19505:50:6::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;;6386:16:6::1;::::0;;::::1;;::::0;;;:8:::1;:16;::::0;;;;5667:1:::1;6386:30:::0;;-1:-1:-1;;;;;19241:319:6:o;17074:1030::-;6981:6;;;;:15;6973:46;;;;;;;4191:2:7;6973:46:6;;;4173:21:7;4230:2;4210:18;;;4203:30;4269:20;4249:18;;;4242:48;4307:18;;6973:46:6;3989:342:7;6973:46:6;17216:6:::1;6234:5;6224:15;;:6;:15;;::::0;6216:53:::1;;;::::0;::::1;::::0;;7827:2:7;6216:53:6::1;::::0;::::1;7809:21:7::0;7866:2;7846:18;;;7839:30;7905:27;7885:18;;;7878:55;7950:18;;6216:53:6::1;7625:349:7::0;6216:53:6::1;6283:16;::::0;::::1;;::::0;;;:8:::1;:16;::::0;;;;;:27;;6275:66:::1;;;::::0;::::1;::::0;;4538:2:7;6275:66:6::1;::::0;::::1;4520:21:7::0;4577:2;4557:18;;;4550:30;4616:28;4596:18;;;4589:56;4662:18;;6275:66:6::1;4336:350:7::0;6275:66:6::1;6347:16;::::0;;::::1;;::::0;;;:8:::1;:16;::::0;;;;5704:1:::1;6347:26:::0;;17238:17;::::2;17230:51;;;::::0;::::2;::::0;;9052:2:7;17230:51:6::2;::::0;::::2;9034:21:7::0;9091:2;9071:18;;;9064:30;9130:23;9110:18;;;9103:51;9171:18;;17230:51:6::2;8850:345:7::0;17230:51:6::2;17287:12;17302:50;17322:6;17330:7;17339:12;17302:19;:50::i;:::-;17287:65;;17359:12;17387:4;17377:25;;;:27;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17358:46;;;17429:7;17418;:18;;17410:69;;;::::0;::::2;::::0;;9402:2:7;17410:69:6::2;::::0;::::2;9384:21:7::0;9441:2;9421:18;;;9414:30;9480:34;9460:18;;;9453:62;9551:8;9531:18;;;9524:36;9577:19;;17410:69:6::2;9200:402:7::0;17410:69:6::2;17500:30;::::0;;;;:24:::2;5613:55:7::0;;;17500:30:6::2;::::0;::::2;5595:74:7::0;17485:12:6::2;::::0;17500:24;;::::2;::::0;::::2;::::0;5568:18:7;;17500:30:6::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17536:52;::::0;;;;:30:::2;7201:15:7::0;;;17536:52:6::2;::::0;::::2;7183:34:7::0;7253:15;;;7233:18;;;7226:43;7285:18;;;7278:34;;;17485:45:6;;-1:-1:-1;17536:30:6;;::::2;::::0;::::2;::::0;7095:18:7;;17536:52:6::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;17628:53:6::2;::::0;;;;:31:::2;::::0;::::2;::::0;-1:-1:-1;17628:31:6::2;::::0;-1:-1:-1;17628:53:6::2;::::0;17660:4;;17666:7;;17675:5;;;;17628:53:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;17775:5;17758:13;:11;:13::i;:::-;17748:23;::::0;:7;:23:::2;:::i;:::-;17747:33;;;;:::i;:::-;17736:45;::::0;:7;:45:::2;:::i;:::-;17702:30;::::0;;;;:24:::2;5613:55:7::0;;;17702:30:6::2;::::0;::::2;5595:74:7::0;17702:24:6;::::2;::::0;::::2;::::0;5568:18:7;;17702:30:6::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:79;;17687:150;;;::::0;::::2;::::0;;10455:2:7;17687:150:6::2;::::0;::::2;10437:21:7::0;10494:2;10474:18;;;10467:30;10533:34;10513:18;;;10506:62;10604:10;10584:18;;;10577:38;10632:19;;17687:150:6::2;10253:404:7::0;17687:150:6::2;17853:4;17843:30;;;17874:6;17882:11;17924:5;17906:14;;17896:7;:24;;;;:::i;:::-;17895:34;;;;:::i;:::-;17843:87;::::0;;::::2;::::0;;;;;;7132:42:7;7201:15;;;17843:87:6::2;::::0;::::2;7183:34:7::0;7253:15;;;;7233:18;;;7226:43;7285:18;;;7278:34;7095:18;;17843:87:6::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;18003:30:6::2;::::0;;;;17980:22:::2;::::0;;::::2;18003:30;::::0;::::2;5595:74:7::0;;;17980:22:6;-1:-1:-1;17980:22:6::2;::::0;-1:-1:-1;18003:24:6;::::2;::::0;::::2;::::0;5568:18:7;;18003:30:6::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18035:29;::::0;;;;:23:::2;5613:55:7::0;;;18035:29:6::2;::::0;::::2;5595:74:7::0;18042:5:6::2;18035:23;::::0;::::2;::::0;5568:18:7;;18035:29:6::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17980:85;::::0;;::::2;::::0;;;;;;::::2;::::0;::::2;1159:25:7::0;;;;1200:18;;;1193:34;1132:18;;17980:85:6::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;18086:3;18076:23;;;18091:7;18076:23;;;;1384:25:7::0;;1372:2;1357:18;;1238:177;18076:23:6::2;;;;;;;;-1:-1:-1::0;;;6386:16:6::1;;;::::0;;;:8:::1;:16;::::0;;;;5667:1:::1;6386:30:::0;;-1:-1:-1;;;;;17074:1030:6:o;13179:1054::-;6981:6;;13289:14;;6981:6;;:15;6973:46;;;;;;;4191:2:7;6973:46:6;;;4173:21:7;4230:2;4210:18;;;4203:30;4269:20;4249:18;;;4242:48;4307:18;;6973:46:6;3989:342:7;6973:46:6;13272:6:::1;6234:5;6224:15;;:6;:15;;::::0;6216:53:::1;;;::::0;::::1;::::0;;7827:2:7;6216:53:6::1;::::0;::::1;7809:21:7::0;7866:2;7846:18;;;7839:30;7905:27;7885:18;;;7878:55;7950:18;;6216:53:6::1;7625:349:7::0;6216:53:6::1;6283:16;::::0;::::1;;::::0;;;:8:::1;:16;::::0;;;;;:27;;6275:66:::1;;;::::0;::::1;::::0;;4538:2:7;6275:66:6::1;::::0;::::1;4520:21:7::0;4577:2;4557:18;;;4550:30;4616:28;4596:18;;;4589:56;4662:18;;6275:66:6::1;4336:350:7::0;6275:66:6::1;6347:16;::::0;::::1;;::::0;;;:8:::1;:16;::::0;;;;5704:1:::1;6347:26:::0;;13326:50:::2;13346:6:::0;13354:7:::2;13363:12;13326:19;:50::i;:::-;13311:65;;13383:12;13397:11:::0;13422:4:::2;13412:25;;;:27;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13465:30;::::0;;;;:24:::2;5613:55:7::0;;;13465:30:6::2;::::0;::::2;5595:74:7::0;13382:57:6;;-1:-1:-1;13382:57:6;;-1:-1:-1;13445:17:6::2;::::0;13465:24;::::2;::::0;::::2;::::0;5568:18:7;;13465:30:6::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13521:29;::::0;;;;:23:::2;5613:55:7::0;;;13521:29:6::2;::::0;::::2;5595:74:7::0;13445:50:6;;-1:-1:-1;13501:17:6::2;::::0;13528:5:::2;13521:23;::::0;::::2;::::0;5568:18:7;;13521:29:6::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13501:49:::0;-1:-1:-1;13556:12:6::2;13571:22;13586:7:::0;13571:12;:22:::2;:::i;:::-;13556:37:::0;-1:-1:-1;13599:13:6::2;13615:21;13630:6:::0;13615:12;:21:::2;:::i;:::-;13599:37;;13642:17;13669:4;13662:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13642:46;;13698:12;13714:1;13698:17:::0;13694:326:::2;;5751:7;13737:29;13747:18;13757:8:::0;13747:7;:18:::2;:::i;:::-;13737:9;:29::i;:::-;:49;;;;:::i;:::-;13794:51;::::0;;;;13823:1:::2;13794:51;::::0;::::2;7497:74:7::0;5751:7:6::2;7587:18:7::0;;;7580:34;13725:61:6;;-1:-1:-1;13794:20:6::2;::::0;::::2;::::0;::::2;::::0;7470:18:7;;13794:51:6::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;13694:326;;;13933:80;13969:7:::0;13943:22:::2;13953:12:::0;13943:7;:22:::2;:::i;:::-;13942:34;;;;:::i;:::-;14006:6:::0;13979:23:::2;13990:12:::0;13979:8;:23:::2;:::i;:::-;13978:34;;;;:::i;:::-;13933:8;:80::i;:::-;13921:92;;13694:326;14045:1;14033:9;:13;14025:67;;;::::0;::::2;::::0;;10864:2:7;14025:67:6::2;::::0;::::2;10846:21:7::0;10903:2;10883:18;;;10876:30;10942:34;10922:18;;;10915:62;11013:11;10993:18;;;10986:39;11042:19;;14025:67:6::2;10662:405:7::0;14025:67:6::2;14098:36;::::0;;;;:20:::2;7515:55:7::0;;;14098:36:6::2;::::0;::::2;7497:74:7::0;7587:18;;;7580:34;;;14098:20:6;::::2;::::0;::::2;::::0;7470:18:7;;14098:36:6::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;14140:50:6::2;::::0;;;;::::2;::::0;::::2;1159:25:7::0;;;1200:18;;;1193:34;;;14140:22:6::2;::::0;::::2;::::0;-1:-1:-1;14140:22:6::2;::::0;-1:-1:-1;1132:18:7;;14140:50:6::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;14201:27:6::2;::::0;1384:25:7;;;14206:10:6::2;::::0;-1:-1:-1;14201:27:6::2;::::0;-1:-1:-1;1372:2:7;1357:18;14201:27:6::2;;;;;;;-1:-1:-1::0;;;6386:16:6::1;::::0;;::::1;;::::0;;;:8:::1;:16;::::0;;;;5667:1:::1;6386:30:::0;;-1:-1:-1;13179:1054:6;;;-1:-1:-1;;;;;;13179:1054:6:o;553:430::-;856:24;;11234:66:7;11221:2;11217:15;;;11213:88;856:24:6;;;11201:101:7;666:12:6;;822:8;;11318:12:7;;856:24:6;;;;;;;;;;;;846:35;;;;;;897:13;767:175;;;;;;;;;11639:66:7;11627:79;;11743:2;11739:15;;;;11756:66;11735:88;11731:1;11722:11;;11715:109;11849:2;11840:12;;11833:28;;;;11886:2;11877:12;;11870:28;11923:2;11914:12;;11341:591;767:175:6;;;;;;;;;;;;;;744:210;;767:175;744:210;;;;;553:430;-1:-1:-1;;;;553:430:6:o;9794:950::-;9906:13;9921:14;9943;9960:5;9943:22;;9985:14;10012:5;9985:33;;10025:12;10039:11;10054:4;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10096:31;;;;;:24;5613:55:7;;;10096:31:6;;;5595:74:7;10024:46:6;;-1:-1:-1;10024:46:6;;-1:-1:-1;10076:17:6;;10096:24;;;;;5568:18:7;;10096:31:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10076:51;-1:-1:-1;10144:21:6;10159:6;10076:51;10144:21;:::i;:::-;10133:32;-1:-1:-1;10175:16:6;;;10187:4;10175:16;10171:332;;10213:11;:24;10238:6;10246:7;10255:8;10265:13;:11;:13::i;:::-;10213:66;;;;;;;;;;;;;12176:25:7;;;;12217:18;;;12210:34;;;;12260:18;;;12253:34;12303:18;;;12296:34;12148:19;;10213:66:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10201:78;;10287:4;:19;;;10307:5;10314:11;10357:5;10339:14;;10328:8;:25;;;;:::i;:::-;10327:35;;;;:::i;:::-;10287:76;;;;;;;;;;7132:42:7;7201:15;;;10287:76:6;;;7183:34:7;7253:15;;;;7233:18;;;7226:43;7285:18;;;7278:34;7095:18;;10287:76:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10171:332;;;10440:56;10470:8;10480:6;10488:7;10440:29;:56::i;:::-;10428:68;;10171:332;10508:43;;;;;:19;7201:15:7;;;10508:43:6;;;7183:34:7;7253:15;;;7233:18;;;7226:43;7285:18;;;7278:34;;;10508:19:6;;;;;7095:18:7;;10508:43:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10606:31:6;;;;;:24;5613:55:7;;;10606:31:6;;;5595:74:7;10606:24:6;;;-1:-1:-1;10606:24:6;;-1:-1:-1;5568:18:7;;10606:31:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10663;;;;;:24;5613:55:7;;;10663:31:6;;;5595:74:7;10591:46:6;;-1:-1:-1;10643:17:6;;10663:24;;;;;5568:18:7;;10663:31:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10700:39;;;;;;;;1159:25:7;;;1200:18;;;1193:34;;;10643:51:6;;-1:-1:-1;10700:11:6;;;;;;1132:18:7;;10700:39:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9937:807;;;;;;9794:950;;;;;;;:::o;10748:980::-;10843:14;;10899:5;10943:7;10978:14;;;;;;;;10970:49;;;;;;;12543:2:7;10970:49:6;;;12525:21:7;12582:2;12562:18;;;12555:30;12621:24;12601:18;;;12594:52;12663:18;;10970:49:6;12341:346:7;10970:49:6;11040:7;11033:14;;:3;:14;;;11025:49;;;;;;;12543:2:7;11025:49:6;;;12525:21:7;12582:2;12562:18;;;12555:30;12621:24;12601:18;;;12594:52;12663:18;;11025:49:6;12341:346:7;11025:49:6;11095:6;11084:17;;:7;:17;;;;:38;;;;;11116:6;11105:17;;:7;:17;;;;11084:38;11080:644;;;11132:13;11148:52;11168:7;11177:8;11187:12;11148:19;:52::i;:::-;11132:68;;11208:13;11224:52;11244:7;11253:8;11263:12;11224:19;:52::i;:::-;11208:68;;11300:29;11307:5;11314:7;11323:5;11300:6;:29::i;:::-;-1:-1:-1;11284:45:6;-1:-1:-1;11354:34:6;11361:5;11368:7;11377:3;11382:5;11354:6;:34::i;:::-;11337:51;-1:-1:-1;11080:644:6;;-1:-1:-1;;;11080:644:6;;11416:6;11405:17;;:7;:17;;;11401:323;;11432:13;11448:52;11468:7;11477:8;11487:12;11448:19;:52::i;:::-;11432:68;;11534:33;11541:5;11548:7;11557:3;11562:4;11534:6;:33::i;:::-;11508:59;;-1:-1:-1;11508:59:6;-1:-1:-1;11401:323:6;;-1:-1:-1;11401:323:6;;11588:13;11604:52;11624:7;11633:8;11643:12;11604:19;:52::i;:::-;11588:68;;11690:27;11697:5;11704:7;11713:3;11690:6;:27::i;:::-;11664:53;;-1:-1:-1;11664:53:6;-1:-1:-1;;11401:323:6;10876:852;;10748:980;;;;;;:::o;4680:238::-;4726:6;4749:1;4744:2;:6;4740:174;;;-1:-1:-1;4764:2:6;4774:6;4783;4788:1;4764:2;4783:6;:::i;:::-;:10;;4792:1;4783:10;:::i;:::-;4774:19;;4801:68;4812:1;4808;:5;4801:68;;;4829:1;-1:-1:-1;4829:1:6;4859;4829;4845:6;4829:1;4845:2;:6;:::i;:::-;:10;;;;:::i;:::-;4844:16;;;;:::i;:::-;4840:20;;4801:68;;;4752:123;4680:238;;;:::o;4740:174::-;4885:7;;4881:33;;-1:-1:-1;4906:1:6;4881:33;4680:238;;;:::o;4581:95::-;4635:4;4659:2;4654;:7;:17;;4669:2;4654:17;;;4664:2;4654:17;4647:24;;4581:95;;;;;:::o;987:146::-;1071:8;1113:14;1118:9;1113:2;:14;:::i;:::-;1094;1106:2;1094:9;:14;:::i;:::-;1093:35;;;;:::i;:::-;1087:41;987:146;-1:-1:-1;;;;987:146:6:o;8984:806::-;9077:13;9092:14;9114;9131:5;9114:22;;9156:14;9183:5;9156:33;;9196:12;9210:11;9225:4;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9267:31;;;;;:24;5613:55:7;;;9267:31:6;;;5595:74:7;9195:46:6;;-1:-1:-1;9195:46:6;;-1:-1:-1;9247:17:6;;9267:24;;;;;5568:18:7;;9267:31:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9247:51;-1:-1:-1;9315:22:6;9330:7;9247:51;9315:22;:::i;:::-;9304:33;;9355:11;:24;9380:7;9389:6;9397:8;9407:13;:11;:13::i;:::-;9355:66;;;;;;;;;;;;;12176:25:7;;;;12217:18;;;12210:34;;;;12260:18;;;12253:34;12303:18;;;12296:34;12148:19;;9355:66:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9343:78;;9427:4;:19;;;9447:6;9455:11;9498:5;9480:14;;9469:8;:25;;;;:::i;:::-;9468:35;;;;:::i;:::-;9427:77;;;;;;;;;;7132:42:7;7201:15;;;9427:77:6;;;7183:34:7;7253:15;;;;7233:18;;;7226:43;7285:18;;;7278:34;7095:18;;9427:77:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9554:43:6;;;;;:19;7201:15:7;;;9554:43:6;;;7183:34:7;7253:15;;;7233:18;;;7226:43;7285:18;;;7278:34;;;9554:19:6;;;-1:-1:-1;9554:19:6;;-1:-1:-1;7095:18:7;;9554:43:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9657:31:6;;;;;:24;5613:55:7;;;9657:31:6;;;5595:74:7;9637:17:6;;-1:-1:-1;9657:24:6;;;-1:-1:-1;9657:24:6;;5568:18:7;;9657:31:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9709;;;;;:24;5613:55:7;;;9709:31:6;;;5595:74:7;9637:51:6;;-1:-1:-1;9709:24:6;;;;;;5568:18:7;;9709:31:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9746:39;;;;;;;;1159:25:7;;;1200:18;;;1193:34;;;9694:46:6;;-1:-1:-1;9746:11:6;;;;;;1132:18:7;;9746:39:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9108:682;;;;;;8984:806;;;;;;:::o;14:273:7:-;70:6;123:2;111:9;102:7;98:23;94:32;91:52;;;139:1;136;129:12;91:52;178:9;165:23;231:5;224:13;217:21;210:5;207:32;197:60;;253:1;250;243:12;197:60;276:5;14:273;-1:-1:-1;;;14:273:7:o;292:154::-;378:42;371:5;367:54;360:5;357:65;347:93;;436:1;433;426:12;347:93;292:154;:::o;451:529::-;528:6;536;544;597:2;585:9;576:7;572:23;568:32;565:52;;;613:1;610;603:12;565:52;652:9;639:23;671:31;696:5;671:31;:::i;:::-;721:5;-1:-1:-1;778:2:7;763:18;;750:32;791:33;750:32;791:33;:::i;:::-;843:7;-1:-1:-1;902:2:7;887:18;;874:32;915:33;874:32;915:33;:::i;:::-;967:7;957:17;;;451:529;;;;;:::o;1420:388::-;1488:6;1496;1549:2;1537:9;1528:7;1524:23;1520:32;1517:52;;;1565:1;1562;1555:12;1517:52;1604:9;1591:23;1623:31;1648:5;1623:31;:::i;:::-;1673:5;-1:-1:-1;1730:2:7;1715:18;;1702:32;1743:33;1702:32;1743:33;:::i;:::-;1795:7;1785:17;;;1420:388;;;;;:::o;1813:180::-;1872:6;1925:2;1913:9;1904:7;1900:23;1896:32;1893:52;;;1941:1;1938;1931:12;1893:52;-1:-1:-1;1964:23:7;;1813:180;-1:-1:-1;1813:180:7:o;1998:247::-;2057:6;2110:2;2098:9;2089:7;2085:23;2081:32;2078:52;;;2126:1;2123;2116:12;2078:52;2165:9;2152:23;2184:31;2209:5;2184:31;:::i;2250:936::-;2347:6;2355;2363;2371;2379;2432:3;2420:9;2411:7;2407:23;2403:33;2400:53;;;2449:1;2446;2439:12;2400:53;2488:9;2475:23;2507:31;2532:5;2507:31;:::i;:::-;2557:5;-1:-1:-1;2609:2:7;2594:18;;2581:32;;-1:-1:-1;2665:2:7;2650:18;;2637:32;2678:33;2637:32;2678:33;:::i;:::-;2730:7;-1:-1:-1;2788:2:7;2773:18;;2760:32;2811:18;2841:14;;;2838:34;;;2868:1;2865;2858:12;2838:34;2906:6;2895:9;2891:22;2881:32;;2951:7;2944:4;2940:2;2936:13;2932:27;2922:55;;2973:1;2970;2963:12;2922:55;3013:2;3000:16;3039:2;3031:6;3028:14;3025:34;;;3055:1;3052;3045:12;3025:34;3100:7;3095:2;3086:6;3082:2;3078:15;3074:24;3071:37;3068:57;;;3121:1;3118;3111:12;3068:57;2250:936;;;;-1:-1:-1;2250:936:7;;-1:-1:-1;3152:2:7;3144:11;;3174:6;2250:936;-1:-1:-1;;;2250:936:7:o;3191:251::-;3261:6;3314:2;3302:9;3293:7;3289:23;3285:32;3282:52;;;3330:1;3327;3320:12;3282:52;3362:9;3356:16;3381:31;3406:5;3381:31;:::i;5680:184::-;5750:6;5803:2;5791:9;5782:7;5778:23;5774:32;5771:52;;;5819:1;5816;5809:12;5771:52;-1:-1:-1;5842:16:7;;5680:184;-1:-1:-1;5680:184:7:o;5869:::-;5921:77;5918:1;5911:88;6018:4;6015:1;6008:15;6042:4;6039:1;6032:15;6058:168;6131:9;;;6162;;6179:15;;;6173:22;;6159:37;6149:71;;6200:18;;:::i;6231:274::-;6271:1;6297;6287:189;;6332:77;6329:1;6322:88;6433:4;6430:1;6423:15;6461:4;6458:1;6451:15;6287:189;-1:-1:-1;6490:9:7;;6231:274::o;7979:245::-;8058:6;8066;8119:2;8107:9;8098:7;8094:23;8090:32;8087:52;;;8135:1;8132;8125:12;8087:52;-1:-1:-1;;8158:16:7;;8214:2;8199:18;;;8193:25;8158:16;;8193:25;;-1:-1:-1;7979:245:7:o;8229:128::-;8296:9;;;8317:11;;;8314:37;;;8331:18;;:::i;8362:125::-;8427:9;;;8448:10;;;8445:36;;;8461:18;;:::i;9607:641::-;9832:42;9824:6;9820:55;9809:9;9802:74;9912:6;9907:2;9896:9;9892:18;9885:34;9955:2;9950;9939:9;9935:18;9928:30;9994:6;9989:2;9978:9;9974:18;9967:34;10052:6;10044;10038:3;10027:9;10023:19;10010:49;10109:1;10079:22;;;10103:3;10075:32;;;10068:43;;;;10163:2;10151:15;;;10168:66;10147:88;10132:104;10128:114;;9607:641;-1:-1:-1;;;9607:641:7:o
Swarm Source
ipfs://3e1f37b2731744c985fa1ca3341617dbd1cd95d44b6f7ec7b69270b8150871fc
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.