Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x61010060 | 17146895 | 548 days ago | IN | 0 ETH | 0.20727612 |
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 'Math.sol'; import 'XfaiLibrary.sol'; import 'IXfaiV0Core.sol'; import 'IXfaiFactory.sol'; import 'IXfaiPool.sol'; import 'IXfaiV0FlashLoan.sol'; import 'IERC20.sol'; /** * @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: BUSL-1.1 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: BUSL-1.1 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: BUSL-1.1 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: BUSL-1.1 pragma solidity ^0.8.19; interface IXfaiV0FlashLoan { function flashLoan(address sender, uint amount, bytes calldata data) external; }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.19; 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; } } }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.19; import 'IXfaiPool.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); } }
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
6101006040523480156200001257600080fd5b5060405162004945380380620049458339810160408190526200003591620000e9565b6001600160a01b03808616608081905285821660a05290841660c052600083905560018290556040805163554dcae760e01b8152905163554dcae7916004808201926020929091908290030181865afa15801562000097573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000bd919062000146565b60e05250620001609350505050565b80516001600160a01b0381168114620000e457600080fd5b919050565b600080600080600060a086880312156200010257600080fd5b6200010d86620000cc565b94506200011d60208701620000cc565b93506200012d60408701620000cc565b6060870151608090970151959894975095949392505050565b6000602082840312156200015957600080fd5b5051919050565b60805160a05160c05160e0516146bd6200028860003960008181610777015281816107c6015281816113a1015281816120920152818161254801528181612eac01528181613c5101528181613c8001528181613d080152613d500152600081816105bf01528181610687015281816111ce0152818161135a01528181611d0401528181611ee1015281816121970152818161232c01528181612b2d01528181612cfb015281816130270152818161351f0152818161373601528181613a840152613e4b0152600081816129890152818161375701526140590152600081816101ca01528181610756015281816107a501528181611380015281816116fd015281816118cd015281816120710152818161252701528181612e8b0152613aa501526146bd6000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c8063917c060e11610081578063a58411941161005b578063a58411941461018f578063adf51de1146101a2578063ee1fe2ad146101b557600080fd5b8063917c060e146101605780639246f76a14610169578063933162121461017c57600080fd5b8063712b772f116100b2578063712b772f146101325780637ae316d014610145578063890305d31461014d57600080fd5b806302329a29146100d957806345a11cec146100ee578063704ce43e1461011b575b600080fd5b6100ec6100e736600461436e565b6101c8565b005b6101016100fc3660046143bc565b610356565b604080519283526020830191909152015b60405180910390f35b61012460005481565b604051908152602001610112565b6100ec610140366004614407565b61115e565b6101246116e5565b6100ec61015b366004614440565b6116fb565b61012460015481565b6100ec610177366004614440565b6118cb565b61010161018a3660046143bc565b611a9b565b6100ec61019d366004614459565b611e71565b6100ec6101b0366004614476565b6122bc565b6101246101c3366004614407565b612c88565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610233573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102579190614515565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f586661695630436f72653a204e4f545f4f574e4552000000000000000000000060448201526064015b60405180910390fd5b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215159081179091556040519081527f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd2906020015b60405180910390a150565b600254600090819060ff16156103c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f586661695630436f72653a20504155534544000000000000000000000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040902054859085907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0161047a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01610528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036105bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f586661695630436f72653a204944454e544943414c5f504f4f4c53000000000060448201526064016102e7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff838116908216146106285773ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260409020600290555b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146106855773ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020600290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff808216908a160361074e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f586661695630436f72653a20494e56414c49445f5052494d4152595f544f4b4560448201527f4e0000000000000000000000000000000000000000000000000000000000000060648201526084016102e7565b600061079b8a7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061341c565b905060006107ea8a7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061341c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290915060009073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa15801561085a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087e9190614532565b905060008373ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f19190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015291925082918f16906370a0823190602401602060405180830381865afa158015610962573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109869190614532565b610990908461457a565b61099a9190614591565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919b5082918716906370a0823190602401602060405180830381865afa158015610a0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2f9190614532565b610a39908461457a565b610a439190614591565b985060008a118015610a555750600089115b610ae1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f586661695630436f72653a20494e53554646494349454e545f4c49515549444960448201527f54595f4255524e4544000000000000000000000000000000000000000000000060648201526084016102e7565b6040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301528c81166024830152604482018c905285169063341ce0cc90606401600060405180830381600087803b158015610b5957600080fd5b505af1158015610b6d573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1603610de9576040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301528c81166024830152604482018b905285169063341ce0cc90606401600060405180830381600087803b158015610c1c57600080fd5b505af1158015610c30573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff16632fb565e88e73ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b8152600401610ca5919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015610cc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce69190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528916906370a0823190602401602060405180830381865afa158015610d52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d769190614532565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526024820152604401600060405180830381600087803b158015610dcc57600080fd5b505af1158015610de0573d6000803e3d6000fd5b5050505061103a565b6040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301528481166024830152604482018b905285169063341ce0cc90606401600060405180830381600087803b158015610e6157600080fd5b505af1158015610e75573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff16632fb565e88e73ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b8152600401610eea919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015610f07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2b9190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528916906370a0823190602401602060405180830381865afa158015610f97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbb9190614532565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526024820152604401600060405180830381600087803b15801561101157600080fd5b505af1158015611025573d6000803e3d6000fd5b50505050611036838d8d6001613518565b9950505b6040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff851690639dc29fac90604401600060405180830381600087803b1580156110a857600080fd5b505af11580156110bc573d6000803e3d6000fd5b5050604080518d8152602081018d905273ffffffffffffffffffffffffffffffffffffffff8f1693503392507fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a35050505073ffffffffffffffffffffffffffffffffffffffff938416600090815260036020526040808220600190819055949095168152939093209190915550919590945092505050565b60025460ff16156111cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f586661695630436f72653a20504155534544000000000000000000000000000060448201526064016102e7565b817f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611281576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f586661695630436f72653a20494e56414c49445f544f4b454e0000000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0161132f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260408120600290557f0000000000000000000000000000000000000000000000000000000000000000906113c5857f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061341c565b90506000808273ffffffffffffffffffffffffffffffffffffffff1663d8ab82746040518163ffffffff1660e01b81526004016040805180830381865afa158015611414573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143891906145cc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529294509092506000918491908a16906370a0823190602401602060405180830381865afa1580156114b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d49190614532565b6114de91906145f0565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529192506000918491908816906370a0823190602401602060405180830381865afa158015611553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115779190614532565b61158191906145f0565b9050811561161a576040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116600483015289811660248301526044820184905286169063341ce0cc90606401600060405180830381600087803b15801561160157600080fd5b505af1158015611615573d6000803e3d6000fd5b505050505b80156116b1576040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015289811660248301526044820183905286169063341ce0cc90606401600060405180830381600087803b15801561169857600080fd5b505af11580156116ac573d6000803e3d6000fd5b505050505b50505073ffffffffffffffffffffffffffffffffffffffff9093166000908152600360205260409020600190555050505050565b600080546001546116f69190614603565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611766573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178a9190614515565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f586661695630436f72653a204e4f545f4f574e4552000000000000000000000060448201526064016102e7565b60646001548261182e9190614603565b1115611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f586661695630436f72653a204645455f455843454544535f4c494d495400000060448201526064016102e7565b60008190556040518181527f6dd92a0ab9d55ea4d1c74eccd145752cd4a8b993732f2b1ba98a9c2a674cc17a9060200161034b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611936573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195a9190614515565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f586661695630436f72653a204e4f545f4f574e4552000000000000000000000060448201526064016102e7565b6064816000546119fe9190614603565b1115611a66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f586661695630436f72653a204645455f455843454544535f4c494d495400000060448201526064016102e7565b60018190556040518181527f16614206cdcb6d0d0b4c49641090b66d8bb3a213d268188947929d52c18990489060200161034b565b600254600090819060ff1615611b0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f586661695630436f72653a20504155534544000000000000000000000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040902054859085907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611bbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611c6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f586661695630436f72653a204944454e544943414c5f504f4f4c53000000000060448201526064016102e7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff83811690821614611d6d5773ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260409020600290555b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611dca5773ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020600290555b611dd5888888613a7f565b604080518381526020810183905292975090955073ffffffffffffffffffffffffffffffffffffffff88169133917f2a9237ff5aa599ef4c5ee4b1142b53429d5755e2685fe6288b2e3320202115f5910160405180910390a35073ffffffffffffffffffffffffffffffffffffffff91821660009081526003602052604080822060019081905592909316815291909120559094909350915050565b60025460ff1615611ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f586661695630436f72653a20504155534544000000000000000000000000000060448201526064016102e7565b807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f586661695630436f72653a20494e56414c49445f544f4b454e0000000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01612042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260408120600290556120b6837f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061341c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918516906370a0823190602401602060405180830381865afa158015612128573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061214c9190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156121de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122029190614532565b6040517f2fb565e8000000000000000000000000000000000000000000000000000000008152600481018490526024810182905290915073ffffffffffffffffffffffffffffffffffffffff841690632fb565e890604401600060405180830381600087803b15801561227457600080fd5b505af1158015612288573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff9094166000908152600360205260409020600190555050505050565b60025460ff1615612329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f586661695630436f72653a20504155534544000000000000000000000000000060448201526064016102e7565b847f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f586661695630436f72653a20494e56414c49445f544f4b454e0000000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0161248d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff808216600090815260036020526040902060029055841661251f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f586661695630436f726520494e56414c49445f544f000000000000000000000060448201526064016102e7565b600061256c877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061341c565b905060008173ffffffffffffffffffffffffffffffffffffffff1663d8ab82746040518163ffffffff1660e01b81526004016040805180830381865afa1580156125ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125de91906145cc565b50905080871115612671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f586661695630436f72653a20494e53554646494349454e545f4f55545055545f60448201527f414d4f554e54000000000000000000000000000000000000000000000000000060648201526084016102e7565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600091908a16906370a0823190602401602060405180830381865afa1580156126e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127059190614532565b6040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b811660048301528981166024830152604482018b90529192509084169063341ce0cc90606401600060405180830381600087803b15801561278157600080fd5b505af1158015612795573d6000803e3d6000fd5b50506040517fe0232b4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16925063e0232b4291506127f19086908c908b908b90600401614616565b600060405180830381600087803b15801561280b57600080fd5b505af115801561281f573d6000803e3d6000fd5b5050505061271061282e6116e5565b612838908a61457a565b6128429190614591565b61284c9082614603565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528b16906370a0823190602401602060405180830381865afa1580156128b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128dc9190614532565b101561296a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f586661695630436f72653a20494e53554646494349454e545f414d4f554e545f60448201527f52455455524e454400000000000000000000000000000000000000000000000060648201526084016102e7565b8273ffffffffffffffffffffffffffffffffffffffff1663341ce0cc8a7f00000000000000000000000000000000000000000000000000000000000000006127106001548d6129b9919061457a565b6129c39190614591565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612a3757600080fd5b505af1158015612a4b573d6000803e3d6000fd5b50506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808716600483018190529350632fb565e892508c16906370a0823190602401602060405180830381865afa158015612ac4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae89190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301527f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612b74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b989190614532565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526024820152604401600060405180830381600087803b158015612bee57600080fd5b505af1158015612c02573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167f134bde118562a60dcf2d8c52965f586e25cf88a371592e44b78c4aa03bcbac8489604051612c4e91815260200190565b60405180910390a250505073ffffffffffffffffffffffffffffffffffffffff166000908152600360205260409020600190555050505050565b60025460009060ff1615612cf8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f586661695630436f72653a20504155534544000000000000000000000000000060448201526064016102e7565b827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612dae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f586661695630436f72653a20494e56414c49445f544f4b454e0000000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01612e5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040812060029055612ed0857f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061341c565b90506000808273ffffffffffffffffffffffffffffffffffffffff1663d8ab82746040518163ffffffff1660e01b81526004016040805180830381865afa158015612f1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4391906145cc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529294509092506000918916906370a0823190602401602060405180830381865afa158015612fb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fdc9190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561306e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130929190614532565b905060006130a085846145f0565b905060006130ae85846145f0565b905060008773ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131219190614532565b9050806000036131da576103e861314061313b848661457a565b613d92565b61314a91906145f0565b6040517f40c10f19000000000000000000000000000000000000000000000000000000008152600060048201526103e86024820152909a5073ffffffffffffffffffffffffffffffffffffffff8916906340c10f1990604401600060405180830381600087803b1580156131bd57600080fd5b505af11580156131d1573d6000803e3d6000fd5b5050505061320f565b61320c876131e8838661457a565b6131f29190614591565b876131fd848661457a565b6132079190614591565b613e02565b99505b60008a1161329f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f586661695630436f72653a20494e53554646494349454e545f4c49515549444960448201527f54595f4d494e544544000000000000000000000000000000000000000000000060648201526084016102e7565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c81166004830152602482018c90528916906340c10f1990604401600060405180830381600087803b15801561330f57600080fd5b505af1158015613323573d6000803e3d6000fd5b50506040517f2fb565e8000000000000000000000000000000000000000000000000000000008152600481018890526024810187905273ffffffffffffffffffffffffffffffffffffffff8b169250632fb565e89150604401600060405180830381600087803b15801561339657600080fd5b505af11580156133aa573d6000803e3d6000fd5b50506040518c81523392507f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885915060200160405180910390a250505073ffffffffffffffffffffffffffffffffffffffff90951660009081526003602052604090206001905550939695505050505050565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606085901b166020820152600090839060340160405160208183030381529060405280519060200120836040516020016134da939291907fff00000000000000000000000000000000000000000000000000000000000000815260609390931b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830191909152603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120949350505050565b60008060007f0000000000000000000000000000000000000000000000000000000000000000905060008790506000808273ffffffffffffffffffffffffffffffffffffffff1663d8ab82746040518163ffffffff1660e01b81526004016040805180830381865afa158015613592573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b691906145cc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8d811660048301529294509092506000918616906370a0823190602401602060405180830381865afa15801561362b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061364f9190614532565b905061365b82826145f0565b965087151560010361382257739b300a588daa518ab7738bf5b035e4bcb93d094f6352707d8c83858a61368c6116e5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526004810194909452602484019290925260448301526064820152608401602060405180830381865af41580156136f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137169190614532565b95508373ffffffffffffffffffffffffffffffffffffffff1663341ce0cc7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006127106001548c613787919061457a565b6137919190614591565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801561380557600080fd5b505af1158015613819573d6000803e3d6000fd5b50505050613830565b61382d878385613e1c565b95505b6040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b811660048301528a811660248301526044820188905285169063341ce0cc90606401600060405180830381600087803b1580156138a857600080fd5b505af11580156138bc573d6000803e3d6000fd5b50506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e81166004830152881692506370a082319150602401602060405180830381865afa15801561392c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139509190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8d811660048301529192506000918c16906370a0823190602401602060405180830381865afa1580156139c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139e69190614532565b6040517f2fb565e8000000000000000000000000000000000000000000000000000000008152600481018290526024810184905290915073ffffffffffffffffffffffffffffffffffffffff861690632fb565e890604401600060405180830381600087803b158015613a5857600080fd5b505af1158015613a6c573d6000803e3d6000fd5b5050505050505050505094509492505050565b6000807f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff80881690861603613b46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f586661695630436f72653a20494e56414c49445f544f0000000000000000000060448201526064016102e7565b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603613bdb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f586661695630436f72653a20494e56414c49445f544f0000000000000000000060448201526064016102e7565b8173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614158015613c4357508173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b15613ccc576000613c7588837f000000000000000000000000000000000000000000000000000000000000000061341c565b90506000613ca488847f000000000000000000000000000000000000000000000000000000000000000061341c565b9050613cb1828a83613e44565b509550613cc18189896000613518565b9550613d8892505050565b8173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603613d47576000613d2c87837f000000000000000000000000000000000000000000000000000000000000000061341c565b9050613d3b8188886001613518565b9095509350613d889050565b6000613d7488837f000000000000000000000000000000000000000000000000000000000000000061341c565b9050613d81818988613e44565b9095509350505b5050935093915050565b60006003821115613df35750806000613dac600283614591565b613db7906001614603565b90505b81811015613ded57905080600281613dd28186614591565b613ddc9190614603565b613de69190614591565b9050613dba565b50919050565b8115613dfd575060015b919050565b6000818310613e115781613e13565b825b90505b92915050565b6000613e288484614603565b613e32838661457a565b613e3c9190614591565b949350505050565b60008060007f0000000000000000000000000000000000000000000000000000000000000000905060008690506000808273ffffffffffffffffffffffffffffffffffffffff1663d8ab82746040518163ffffffff1660e01b81526004016040805180830381865afa158015613ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ee291906145cc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c811660048301529294509092506000918a16906370a0823190602401602060405180830381865afa158015613f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f7b9190614532565b9050613f8783826145f0565b9650739b300a588daa518ab7738bf5b035e4bcb93d094f6352707d8c84848a613fae6116e5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526004810194909452602484019290925260448301526064820152608401602060405180830381865af4158015614014573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140389190614532565b95508373ffffffffffffffffffffffffffffffffffffffff1663341ce0cc8a7f00000000000000000000000000000000000000000000000000000000000000006127106001548c614089919061457a565b6140939190614591565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801561410757600080fd5b505af115801561411b573d6000803e3d6000fd5b50506040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528b81166024830152604482018a90528716925063341ce0cc9150606401600060405180830381600087803b15801561419757600080fd5b505af11580156141ab573d6000803e3d6000fd5b50506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8d8116600483015260009350881691506370a0823190602401602060405180830381865afa15801561421e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142429190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8d81166004830152919250908b16906370a0823190602401602060405180830381865afa1580156142b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142d69190614532565b6040517f2fb565e8000000000000000000000000000000000000000000000000000000008152600481018290526024810183905290925073ffffffffffffffffffffffffffffffffffffffff861690632fb565e890604401600060405180830381600087803b15801561434857600080fd5b505af115801561435c573d6000803e3d6000fd5b50505050505050505050935093915050565b60006020828403121561438057600080fd5b8135801515811461439057600080fd5b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146143b957600080fd5b50565b6000806000606084860312156143d157600080fd5b83356143dc81614397565b925060208401356143ec81614397565b915060408401356143fc81614397565b809150509250925092565b6000806040838503121561441a57600080fd5b823561442581614397565b9150602083013561443581614397565b809150509250929050565b60006020828403121561445257600080fd5b5035919050565b60006020828403121561446b57600080fd5b813561439081614397565b60008060008060006080868803121561448e57600080fd5b853561449981614397565b94506020860135935060408601356144b081614397565b9250606086013567ffffffffffffffff808211156144cd57600080fd5b818801915088601f8301126144e157600080fd5b8135818111156144f057600080fd5b89602082850101111561450257600080fd5b9699959850939650602001949392505050565b60006020828403121561452757600080fd5b815161439081614397565b60006020828403121561454457600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082028115828204841417613e1657613e1661454b565b6000826145c7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600080604083850312156145df57600080fd5b505080516020909101519092909150565b81810381811115613e1657613e1661454b565b80820180821115613e1657613e1661454b565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101939250505056fea2646970667358221220a343c5365a1df5ea8c7852c4ff70e78c79f05192fc77bf35e978cb277010c45664736f6c634300081300330000000000000000000000000b51d00ef3df0b66766938220542185f6fdbc0b7000000000000000000000000d58bcb63b33d5f6984da687de2e5b8c61bb0c421000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae021000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100d45760003560e01c8063917c060e11610081578063a58411941161005b578063a58411941461018f578063adf51de1146101a2578063ee1fe2ad146101b557600080fd5b8063917c060e146101605780639246f76a14610169578063933162121461017c57600080fd5b8063712b772f116100b2578063712b772f146101325780637ae316d014610145578063890305d31461014d57600080fd5b806302329a29146100d957806345a11cec146100ee578063704ce43e1461011b575b600080fd5b6100ec6100e736600461436e565b6101c8565b005b6101016100fc3660046143bc565b610356565b604080519283526020830191909152015b60405180910390f35b61012460005481565b604051908152602001610112565b6100ec610140366004614407565b61115e565b6101246116e5565b6100ec61015b366004614440565b6116fb565b61012460015481565b6100ec610177366004614440565b6118cb565b61010161018a3660046143bc565b611a9b565b6100ec61019d366004614459565b611e71565b6100ec6101b0366004614476565b6122bc565b6101246101c3366004614407565b612c88565b7f0000000000000000000000000b51d00ef3df0b66766938220542185f6fdbc0b773ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610233573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102579190614515565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f586661695630436f72653a204e4f545f4f574e4552000000000000000000000060448201526064015b60405180910390fd5b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215159081179091556040519081527f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd2906020015b60405180910390a150565b600254600090819060ff16156103c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f586661695630436f72653a20504155534544000000000000000000000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040902054859085907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0161047a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01610528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036105bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f586661695630436f72653a204944454e544943414c5f504f4f4c53000000000060448201526064016102e7565b7f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae02173ffffffffffffffffffffffffffffffffffffffff838116908216146106285773ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260409020600290555b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146106855773ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020600290555b7f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae02173ffffffffffffffffffffffffffffffffffffffff808216908a160361074e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f586661695630436f72653a20494e56414c49445f5052494d4152595f544f4b4560448201527f4e0000000000000000000000000000000000000000000000000000000000000060648201526084016102e7565b600061079b8a7f0000000000000000000000000b51d00ef3df0b66766938220542185f6fdbc0b77f8f92f7e5e633cf0e16777f0f3dd2fc7041871898f9f7cbb26929a0be81e7923c61341c565b905060006107ea8a7f0000000000000000000000000b51d00ef3df0b66766938220542185f6fdbc0b77f8f92f7e5e633cf0e16777f0f3dd2fc7041871898f9f7cbb26929a0be81e7923c61341c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290915060009073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa15801561085a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087e9190614532565b905060008373ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f19190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015291925082918f16906370a0823190602401602060405180830381865afa158015610962573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109869190614532565b610990908461457a565b61099a9190614591565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919b5082918716906370a0823190602401602060405180830381865afa158015610a0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2f9190614532565b610a39908461457a565b610a439190614591565b985060008a118015610a555750600089115b610ae1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f586661695630436f72653a20494e53554646494349454e545f4c49515549444960448201527f54595f4255524e4544000000000000000000000000000000000000000000000060648201526084016102e7565b6040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301528c81166024830152604482018c905285169063341ce0cc90606401600060405180830381600087803b158015610b5957600080fd5b505af1158015610b6d573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1603610de9576040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301528c81166024830152604482018b905285169063341ce0cc90606401600060405180830381600087803b158015610c1c57600080fd5b505af1158015610c30573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff16632fb565e88e73ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b8152600401610ca5919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015610cc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce69190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528916906370a0823190602401602060405180830381865afa158015610d52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d769190614532565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526024820152604401600060405180830381600087803b158015610dcc57600080fd5b505af1158015610de0573d6000803e3d6000fd5b5050505061103a565b6040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301528481166024830152604482018b905285169063341ce0cc90606401600060405180830381600087803b158015610e6157600080fd5b505af1158015610e75573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff16632fb565e88e73ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b8152600401610eea919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015610f07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2b9190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528916906370a0823190602401602060405180830381865afa158015610f97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbb9190614532565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526024820152604401600060405180830381600087803b15801561101157600080fd5b505af1158015611025573d6000803e3d6000fd5b50505050611036838d8d6001613518565b9950505b6040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff851690639dc29fac90604401600060405180830381600087803b1580156110a857600080fd5b505af11580156110bc573d6000803e3d6000fd5b5050604080518d8152602081018d905273ffffffffffffffffffffffffffffffffffffffff8f1693503392507fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a35050505073ffffffffffffffffffffffffffffffffffffffff938416600090815260036020526040808220600190819055949095168152939093209190915550919590945092505050565b60025460ff16156111cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f586661695630436f72653a20504155534544000000000000000000000000000060448201526064016102e7565b817f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae02173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611281576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f586661695630436f72653a20494e56414c49445f544f4b454e0000000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0161132f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260408120600290557f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae021906113c5857f0000000000000000000000000b51d00ef3df0b66766938220542185f6fdbc0b77f8f92f7e5e633cf0e16777f0f3dd2fc7041871898f9f7cbb26929a0be81e7923c61341c565b90506000808273ffffffffffffffffffffffffffffffffffffffff1663d8ab82746040518163ffffffff1660e01b81526004016040805180830381865afa158015611414573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143891906145cc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529294509092506000918491908a16906370a0823190602401602060405180830381865afa1580156114b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d49190614532565b6114de91906145f0565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529192506000918491908816906370a0823190602401602060405180830381865afa158015611553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115779190614532565b61158191906145f0565b9050811561161a576040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116600483015289811660248301526044820184905286169063341ce0cc90606401600060405180830381600087803b15801561160157600080fd5b505af1158015611615573d6000803e3d6000fd5b505050505b80156116b1576040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015289811660248301526044820183905286169063341ce0cc90606401600060405180830381600087803b15801561169857600080fd5b505af11580156116ac573d6000803e3d6000fd5b505050505b50505073ffffffffffffffffffffffffffffffffffffffff9093166000908152600360205260409020600190555050505050565b600080546001546116f69190614603565b905090565b7f0000000000000000000000000b51d00ef3df0b66766938220542185f6fdbc0b773ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611766573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178a9190614515565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f586661695630436f72653a204e4f545f4f574e4552000000000000000000000060448201526064016102e7565b60646001548261182e9190614603565b1115611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f586661695630436f72653a204645455f455843454544535f4c494d495400000060448201526064016102e7565b60008190556040518181527f6dd92a0ab9d55ea4d1c74eccd145752cd4a8b993732f2b1ba98a9c2a674cc17a9060200161034b565b7f0000000000000000000000000b51d00ef3df0b66766938220542185f6fdbc0b773ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611936573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195a9190614515565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f586661695630436f72653a204e4f545f4f574e4552000000000000000000000060448201526064016102e7565b6064816000546119fe9190614603565b1115611a66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f586661695630436f72653a204645455f455843454544535f4c494d495400000060448201526064016102e7565b60018190556040518181527f16614206cdcb6d0d0b4c49641090b66d8bb3a213d268188947929d52c18990489060200161034b565b600254600090819060ff1615611b0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f586661695630436f72653a20504155534544000000000000000000000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040902054859085907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611bbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611c6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f586661695630436f72653a204944454e544943414c5f504f4f4c53000000000060448201526064016102e7565b7f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae02173ffffffffffffffffffffffffffffffffffffffff83811690821614611d6d5773ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260409020600290555b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611dca5773ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020600290555b611dd5888888613a7f565b604080518381526020810183905292975090955073ffffffffffffffffffffffffffffffffffffffff88169133917f2a9237ff5aa599ef4c5ee4b1142b53429d5755e2685fe6288b2e3320202115f5910160405180910390a35073ffffffffffffffffffffffffffffffffffffffff91821660009081526003602052604080822060019081905592909316815291909120559094909350915050565b60025460ff1615611ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f586661695630436f72653a20504155534544000000000000000000000000000060448201526064016102e7565b807f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae02173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f586661695630436f72653a20494e56414c49445f544f4b454e0000000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01612042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260408120600290556120b6837f0000000000000000000000000b51d00ef3df0b66766938220542185f6fdbc0b77f8f92f7e5e633cf0e16777f0f3dd2fc7041871898f9f7cbb26929a0be81e7923c61341c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000918516906370a0823190602401602060405180830381865afa158015612128573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061214c9190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529192506000917f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae02116906370a0823190602401602060405180830381865afa1580156121de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122029190614532565b6040517f2fb565e8000000000000000000000000000000000000000000000000000000008152600481018490526024810182905290915073ffffffffffffffffffffffffffffffffffffffff841690632fb565e890604401600060405180830381600087803b15801561227457600080fd5b505af1158015612288573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff9094166000908152600360205260409020600190555050505050565b60025460ff1615612329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f586661695630436f72653a20504155534544000000000000000000000000000060448201526064016102e7565b847f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae02173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f586661695630436f72653a20494e56414c49445f544f4b454e0000000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0161248d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff808216600090815260036020526040902060029055841661251f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f586661695630436f726520494e56414c49445f544f000000000000000000000060448201526064016102e7565b600061256c877f0000000000000000000000000b51d00ef3df0b66766938220542185f6fdbc0b77f8f92f7e5e633cf0e16777f0f3dd2fc7041871898f9f7cbb26929a0be81e7923c61341c565b905060008173ffffffffffffffffffffffffffffffffffffffff1663d8ab82746040518163ffffffff1660e01b81526004016040805180830381865afa1580156125ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125de91906145cc565b50905080871115612671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f586661695630436f72653a20494e53554646494349454e545f4f55545055545f60448201527f414d4f554e54000000000000000000000000000000000000000000000000000060648201526084016102e7565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600091908a16906370a0823190602401602060405180830381865afa1580156126e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127059190614532565b6040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b811660048301528981166024830152604482018b90529192509084169063341ce0cc90606401600060405180830381600087803b15801561278157600080fd5b505af1158015612795573d6000803e3d6000fd5b50506040517fe0232b4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16925063e0232b4291506127f19086908c908b908b90600401614616565b600060405180830381600087803b15801561280b57600080fd5b505af115801561281f573d6000803e3d6000fd5b5050505061271061282e6116e5565b612838908a61457a565b6128429190614591565b61284c9082614603565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528b16906370a0823190602401602060405180830381865afa1580156128b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128dc9190614532565b101561296a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f586661695630436f72653a20494e53554646494349454e545f414d4f554e545f60448201527f52455455524e454400000000000000000000000000000000000000000000000060648201526084016102e7565b8273ffffffffffffffffffffffffffffffffffffffff1663341ce0cc8a7f000000000000000000000000d58bcb63b33d5f6984da687de2e5b8c61bb0c4216127106001548d6129b9919061457a565b6129c39190614591565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612a3757600080fd5b505af1158015612a4b573d6000803e3d6000fd5b50506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808716600483018190529350632fb565e892508c16906370a0823190602401602060405180830381865afa158015612ac4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae89190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301527f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae02116906370a0823190602401602060405180830381865afa158015612b74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b989190614532565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526024820152604401600060405180830381600087803b158015612bee57600080fd5b505af1158015612c02573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167f134bde118562a60dcf2d8c52965f586e25cf88a371592e44b78c4aa03bcbac8489604051612c4e91815260200190565b60405180910390a250505073ffffffffffffffffffffffffffffffffffffffff166000908152600360205260409020600190555050505050565b60025460009060ff1615612cf8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f586661695630436f72653a20504155534544000000000000000000000000000060448201526064016102e7565b827f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae02173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612dae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f586661695630436f72653a20494e56414c49445f544f4b454e0000000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01612e5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f586661695630436f72653a205245454e5452414e545f43414c4c00000000000060448201526064016102e7565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040812060029055612ed0857f0000000000000000000000000b51d00ef3df0b66766938220542185f6fdbc0b77f8f92f7e5e633cf0e16777f0f3dd2fc7041871898f9f7cbb26929a0be81e7923c61341c565b90506000808273ffffffffffffffffffffffffffffffffffffffff1663d8ab82746040518163ffffffff1660e01b81526004016040805180830381865afa158015612f1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4391906145cc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529294509092506000918916906370a0823190602401602060405180830381865afa158015612fb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fdc9190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529192506000917f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae02116906370a0823190602401602060405180830381865afa15801561306e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130929190614532565b905060006130a085846145f0565b905060006130ae85846145f0565b905060008773ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131219190614532565b9050806000036131da576103e861314061313b848661457a565b613d92565b61314a91906145f0565b6040517f40c10f19000000000000000000000000000000000000000000000000000000008152600060048201526103e86024820152909a5073ffffffffffffffffffffffffffffffffffffffff8916906340c10f1990604401600060405180830381600087803b1580156131bd57600080fd5b505af11580156131d1573d6000803e3d6000fd5b5050505061320f565b61320c876131e8838661457a565b6131f29190614591565b876131fd848661457a565b6132079190614591565b613e02565b99505b60008a1161329f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f586661695630436f72653a20494e53554646494349454e545f4c49515549444960448201527f54595f4d494e544544000000000000000000000000000000000000000000000060648201526084016102e7565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c81166004830152602482018c90528916906340c10f1990604401600060405180830381600087803b15801561330f57600080fd5b505af1158015613323573d6000803e3d6000fd5b50506040517f2fb565e8000000000000000000000000000000000000000000000000000000008152600481018890526024810187905273ffffffffffffffffffffffffffffffffffffffff8b169250632fb565e89150604401600060405180830381600087803b15801561339657600080fd5b505af11580156133aa573d6000803e3d6000fd5b50506040518c81523392507f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885915060200160405180910390a250505073ffffffffffffffffffffffffffffffffffffffff90951660009081526003602052604090206001905550939695505050505050565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606085901b166020820152600090839060340160405160208183030381529060405280519060200120836040516020016134da939291907fff00000000000000000000000000000000000000000000000000000000000000815260609390931b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830191909152603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120949350505050565b60008060007f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae021905060008790506000808273ffffffffffffffffffffffffffffffffffffffff1663d8ab82746040518163ffffffff1660e01b81526004016040805180830381865afa158015613592573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b691906145cc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8d811660048301529294509092506000918616906370a0823190602401602060405180830381865afa15801561362b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061364f9190614532565b905061365b82826145f0565b965087151560010361382257739b300a588daa518ab7738bf5b035e4bcb93d094f6352707d8c83858a61368c6116e5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526004810194909452602484019290925260448301526064820152608401602060405180830381865af41580156136f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137169190614532565b95508373ffffffffffffffffffffffffffffffffffffffff1663341ce0cc7f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae0217f000000000000000000000000d58bcb63b33d5f6984da687de2e5b8c61bb0c4216127106001548c613787919061457a565b6137919190614591565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801561380557600080fd5b505af1158015613819573d6000803e3d6000fd5b50505050613830565b61382d878385613e1c565b95505b6040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b811660048301528a811660248301526044820188905285169063341ce0cc90606401600060405180830381600087803b1580156138a857600080fd5b505af11580156138bc573d6000803e3d6000fd5b50506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e81166004830152881692506370a082319150602401602060405180830381865afa15801561392c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139509190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8d811660048301529192506000918c16906370a0823190602401602060405180830381865afa1580156139c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139e69190614532565b6040517f2fb565e8000000000000000000000000000000000000000000000000000000008152600481018290526024810184905290915073ffffffffffffffffffffffffffffffffffffffff861690632fb565e890604401600060405180830381600087803b158015613a5857600080fd5b505af1158015613a6c573d6000803e3d6000fd5b5050505050505050505094509492505050565b6000807f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae0217f0000000000000000000000000b51d00ef3df0b66766938220542185f6fdbc0b773ffffffffffffffffffffffffffffffffffffffff80881690861603613b46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f586661695630436f72653a20494e56414c49445f544f0000000000000000000060448201526064016102e7565b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603613bdb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f586661695630436f72653a20494e56414c49445f544f0000000000000000000060448201526064016102e7565b8173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614158015613c4357508173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b15613ccc576000613c7588837f8f92f7e5e633cf0e16777f0f3dd2fc7041871898f9f7cbb26929a0be81e7923c61341c565b90506000613ca488847f8f92f7e5e633cf0e16777f0f3dd2fc7041871898f9f7cbb26929a0be81e7923c61341c565b9050613cb1828a83613e44565b509550613cc18189896000613518565b9550613d8892505050565b8173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603613d47576000613d2c87837f8f92f7e5e633cf0e16777f0f3dd2fc7041871898f9f7cbb26929a0be81e7923c61341c565b9050613d3b8188886001613518565b9095509350613d889050565b6000613d7488837f8f92f7e5e633cf0e16777f0f3dd2fc7041871898f9f7cbb26929a0be81e7923c61341c565b9050613d81818988613e44565b9095509350505b5050935093915050565b60006003821115613df35750806000613dac600283614591565b613db7906001614603565b90505b81811015613ded57905080600281613dd28186614591565b613ddc9190614603565b613de69190614591565b9050613dba565b50919050565b8115613dfd575060015b919050565b6000818310613e115781613e13565b825b90505b92915050565b6000613e288484614603565b613e32838661457a565b613e3c9190614591565b949350505050565b60008060007f000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae021905060008690506000808273ffffffffffffffffffffffffffffffffffffffff1663d8ab82746040518163ffffffff1660e01b81526004016040805180830381865afa158015613ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ee291906145cc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c811660048301529294509092506000918a16906370a0823190602401602060405180830381865afa158015613f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f7b9190614532565b9050613f8783826145f0565b9650739b300a588daa518ab7738bf5b035e4bcb93d094f6352707d8c84848a613fae6116e5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526004810194909452602484019290925260448301526064820152608401602060405180830381865af4158015614014573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140389190614532565b95508373ffffffffffffffffffffffffffffffffffffffff1663341ce0cc8a7f000000000000000000000000d58bcb63b33d5f6984da687de2e5b8c61bb0c4216127106001548c614089919061457a565b6140939190614591565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801561410757600080fd5b505af115801561411b573d6000803e3d6000fd5b50506040517f341ce0cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528b81166024830152604482018a90528716925063341ce0cc9150606401600060405180830381600087803b15801561419757600080fd5b505af11580156141ab573d6000803e3d6000fd5b50506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8d8116600483015260009350881691506370a0823190602401602060405180830381865afa15801561421e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142429190614532565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8d81166004830152919250908b16906370a0823190602401602060405180830381865afa1580156142b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142d69190614532565b6040517f2fb565e8000000000000000000000000000000000000000000000000000000008152600481018290526024810183905290925073ffffffffffffffffffffffffffffffffffffffff861690632fb565e890604401600060405180830381600087803b15801561434857600080fd5b505af115801561435c573d6000803e3d6000fd5b50505050505050505050935093915050565b60006020828403121561438057600080fd5b8135801515811461439057600080fd5b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146143b957600080fd5b50565b6000806000606084860312156143d157600080fd5b83356143dc81614397565b925060208401356143ec81614397565b915060408401356143fc81614397565b809150509250925092565b6000806040838503121561441a57600080fd5b823561442581614397565b9150602083013561443581614397565b809150509250929050565b60006020828403121561445257600080fd5b5035919050565b60006020828403121561446b57600080fd5b813561439081614397565b60008060008060006080868803121561448e57600080fd5b853561449981614397565b94506020860135935060408601356144b081614397565b9250606086013567ffffffffffffffff808211156144cd57600080fd5b818801915088601f8301126144e157600080fd5b8135818111156144f057600080fd5b89602082850101111561450257600080fd5b9699959850939650602001949392505050565b60006020828403121561452757600080fd5b815161439081614397565b60006020828403121561454457600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082028115828204841417613e1657613e1661454b565b6000826145c7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600080604083850312156145df57600080fd5b505080516020909101519092909150565b81810381811115613e1657613e1661454b565b80820180821115613e1657613e1661454b565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101939250505056fea2646970667358221220a343c5365a1df5ea8c7852c4ff70e78c79f05192fc77bf35e978cb277010c45664736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000b51d00ef3df0b66766938220542185f6fdbc0b7000000000000000000000000d58bcb63b33d5f6984da687de2e5b8c61bb0c421000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae021000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a
-----Decoded View---------------
Arg [0] : _factory (address): 0x0b51D00eF3Df0B66766938220542185F6fDbC0B7
Arg [1] : _infinityNFT (address): 0xd58BCB63b33D5F6984DA687DE2e5B8c61bB0c421
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] : 000000000000000000000000d58bcb63b33d5f6984da687de2e5b8c61bb0c421
Arg [2] : 000000000000000000000000a449845c3309ac5269dfa6b2f80eb6e73d0ae021
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000a
Deployed Bytecode Sourcemap
386:14830:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15119:95;;;;;;:::i;:::-;;:::i;:::-;;10329:1522;;;;;;:::i;:::-;;:::i;:::-;;;;1159:25:9;;;1215:2;1200:18;;1193:34;;;;1132:18;10329:1522:8;;;;;;;;772:26;;;;;;;;;1384:25:9;;;1372:2;1357:18;772:26:8;1238:177:9;13702:617:8;;;;;;:::i;:::-;;:::i;4198:99::-;;;:::i;3354:211::-;;;;;;:::i;:::-;;:::i;869:35::-;;;;;;3770:237;;;;;;:::i;:::-;;:::i;7561:317::-;;;;;;:::i;:::-;;:::i;14558:319::-;;;;;;:::i;:::-;;:::i;12391:1030::-;;;;;;:::i;:::-;;:::i;8496:1054::-;;;;;;:::i;:::-;;:::i;15119:95::-;2414:7;2401:30;;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2387:46;;:10;:46;;;2379:80;;;;;;;3649:2:9;2379:80:8;;;3631:21:9;3688:2;3668:18;;;3661:30;3727:23;3707:18;;;3700:51;3768:18;;2379:80:8;;;;;;;;;15177:6:::1;:11:::0;;;::::1;::::0;::::1;;::::0;;::::1;::::0;;;15199:10:::1;::::0;3937:41:9;;;15199:10:8::1;::::0;3925:2:9;3910:18;15199:10:8::1;;;;;;;;15119:95:::0;:::o;10329:1522::-;2298:6;;10491:15;;;;2298:6;;:15;2290:46;;;;;;;4191:2:9;2290:46:8;;;4173:21:9;4230:2;4210:18;;;4203:30;4269:20;4249:18;;;4242:48;4307:18;;2290:46:8;3989:342:9;2290:46:8;1810:17:::1;::::0;::::1;;::::0;;;:8:::1;:17;::::0;;;;;10460:7;;10469;;1810:28;;1802:67:::1;;;::::0;::::1;::::0;;4538:2:9;1802:67:8::1;::::0;::::1;4520:21:9::0;4577:2;4557:18;;;4550:30;4616:28;4596:18;;;4589:56;4662:18;;1802:67:8::1;4336:350:9::0;1802:67:8::1;1883:17;::::0;::::1;;::::0;;;:8:::1;:17;::::0;;;;;:28;;1875:67:::1;;;::::0;::::1;::::0;;4538:2:9;1875:67:8::1;::::0;::::1;4520:21:9::0;4577:2;4557:18;;;4550:30;4616:28;4596:18;;;4589:56;4662:18;;1875:67:8::1;4336:350:9::0;1875:67:8::1;1967:7;1956:18;;:7;:18;;::::0;1948:58:::1;;;::::0;::::1;::::0;;4893:2:9;1948:58:8::1;::::0;::::1;4875:21:9::0;4932:2;4912:18;;;4905:30;4971:29;4951:18;;;4944:57;5018:18;;1948:58:8::1;4691:351:9::0;1948:58:8::1;2029:5;2044:17;::::0;;::::1;::::0;;::::1;;2040:65;;2071:17;::::0;::::1;;::::0;;;:8:::1;:17;::::0;;;;1021:1:::1;2071:27:::0;;2040:65:::1;2125:6;2114:17;;:7;:17;;;2110:65;;2141:17;::::0;::::1;;::::0;;;:8:::1;:17;::::0;;;;1021:1:::1;2141:27:::0;;2110:65:::1;10550:5:::2;10583:17;::::0;;::::2;::::0;;::::2;::::0;10575:63:::2;;;::::0;::::2;::::0;;5249:2:9;10575:63:8::2;::::0;::::2;5231:21:9::0;5288:2;5268:18;;;5261:30;5327:34;5307:18;;;5300:62;5398:3;5378:18;;;5371:31;5419:19;;10575:63:8::2;5047:397:9::0;10575:63:8::2;10644:13;10660:51;10680:7;10689;10698:12;10660:19;:51::i;:::-;10644:67;;10717:13;10733:51;10753:7;10762;10771:12;10733:19;:51::i;:::-;10807:38;::::0;;;;10839:4:::2;10807:38;::::0;::::2;5595:74:9::0;10717:67:8;;-1:-1:-1;10790:14:8::2;::::0;10807:23:::2;::::0;::::2;::::0;::::2;::::0;5568:18:9;;10807:38:8::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10790:55;;10851:16;10877:5;10870:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10929:32;::::0;;;;:25:::2;5613:55:9::0;;;10929:32:8::2;::::0;::::2;5595:74:9::0;10851:46:8;;-1:-1:-1;10851:46:8;;10929:25;::::2;::::0;::::2;::::0;5568:18:9;;10929:32:8::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10917:44;::::0;:9;:44:::2;:::i;:::-;10916:60;;;;:::i;:::-;11056:31;::::0;;;;:24:::2;5613:55:9::0;;;11056:31:8::2;::::0;::::2;5595:74:9::0;10903:73:8;;-1:-1:-1;11091:11:8;;11056:24;::::2;::::0;::::2;::::0;5568:18:9;;11056:31:8::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11044:43;::::0;:9;:43:::2;:::i;:::-;11043:59;;;;:::i;:::-;11030:72;;11177:1;11164:10;:14;:32;;;;;11195:1;11182:10;:14;11164:32;11156:86;;;::::0;::::2;::::0;;6712:2:9;11156:86:8::2;::::0;::::2;6694:21:9::0;6751:2;6731:18;;;6724:30;6790:34;6770:18;;;6763:62;6861:11;6841:18;;;6834:39;6890:19;;11156:86:8::2;6510:405:9::0;11156:86:8::2;11248:57;::::0;;;;:31:::2;7201:15:9::0;;;11248:57:8::2;::::0;::::2;7183:34:9::0;7253:15;;;7233:18;;;7226:43;7285:18;;;7278:34;;;11248:31:8;::::2;::::0;::::2;::::0;7095:18:9;;11248:57:8::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;11326:6;11315:17;;:7;:17;;::::0;11311:427:::2;;11342:56;::::0;;;;:31:::2;7201:15:9::0;;;11342:56:8::2;::::0;::::2;7183:34:9::0;7253:15;;;7233:18;;;7226:43;7285:18;;;7278:34;;;11342:31:8;::::2;::::0;::::2;::::0;7095:18:9;;11342:56:8::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;11416:5;11406:23;;;11437:7;11430:25;;;11456:5;11430:32;;;;;;;;;;;;;;5625:42:9::0;5613:55;;;;5595:74;;5583:2;5568:18;;5449:226;11430:32:8::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11464:31;::::0;;;;:24:::2;5613:55:9::0;;;11464:31:8::2;::::0;::::2;5595:74:9::0;11464:24:8;::::2;::::0;::::2;::::0;5568:18:9;;11464:31:8::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11406:90;::::0;;::::2;::::0;;;;;;::::2;::::0;::::2;1159:25:9::0;;;;1200:18;;;1193:34;1132:18;;11406:90:8::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;11311:427;;;11517:58;::::0;;;;:31:::2;7201:15:9::0;;;11517:58:8::2;::::0;::::2;7183:34:9::0;7253:15;;;7233:18;;;7226:43;7285:18;;;7278:34;;;11517:31:8;::::2;::::0;::::2;::::0;7095:18:9;;11517:58:8::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;11593:5;11583:23;;;11614:7;11607:25;;;11633:5;11607:32;;;;;;;;;;;;;;5625:42:9::0;5613:55;;;;5595:74;;5583:2;5568:18;;5449:226;11607:32:8::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11641:31;::::0;;;;:24:::2;5613:55:9::0;;;11641:31:8::2;::::0;::::2;5595:74:9::0;11641:24:8;::::2;::::0;::::2;::::0;5568:18:9;;11641:31:8::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11583:90;::::0;;::::2;::::0;;;;;;::::2;::::0;::::2;1159:25:9::0;;;;1200:18;;;1193:34;1132:18;;11583:90:8::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;11698:33;11705:5;11712:7;11721:3;11726:4;11698:6;:33::i;:::-;11681:50:::0;-1:-1:-1;;11311:427:8::2;11743:47;::::0;;;;11773:4:::2;11743:47;::::0;::::2;7497:74:9::0;7587:18;;;7580:34;;;11743:21:8::2;::::0;::::2;::::0;::::2;::::0;7470:18:9;;11743:47:8::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;11801:45:8::2;::::0;;1159:25:9;;;1215:2;1200:18;;1193:34;;;11801:45:8::2;::::0;::::2;::::0;-1:-1:-1;11806:10:8::2;::::0;-1:-1:-1;11801:45:8::2;::::0;1132:18:9;11801:45:8::2;;;;;;;-1:-1:-1::0;;;;2187:17:8::1;::::0;;::::1;;::::0;;;:8:::1;:17;::::0;;;;;984:1:::1;2187:31:::0;;;;2224:17;;;::::1;::::0;;;;;;:31;;;;-1:-1:-1;10329:1522:8;;;;-1:-1:-1;10329:1522:8;-1:-1:-1;;;10329:1522:8:o;13702:617::-;2298:6;;;;:15;2290:46;;;;;;;4191:2:9;2290:46:8;;;4173:21:9;4230:2;4210:18;;;4203:30;4269:20;4249:18;;;4242:48;4307:18;;2290:46:8;3989:342:9;2290:46:8;13783:6:::1;1551:5;1541:15;;:6;:15;;::::0;1533:53:::1;;;::::0;::::1;::::0;;7827:2:9;1533:53:8::1;::::0;::::1;7809:21:9::0;7866:2;7846:18;;;7839:30;7905:27;7885:18;;;7878:55;7950:18;;1533:53:8::1;7625:349:9::0;1533:53:8::1;1600:16;::::0;::::1;;::::0;;;:8:::1;:16;::::0;;;;;:27;;1592:66:::1;;;::::0;::::1;::::0;;4538:2:9;1592:66:8::1;::::0;::::1;4520:21:9::0;4577:2;4557:18;;;4550:30;4616:28;4596:18;;;4589:56;4662:18;;1592:66:8::1;4336:350:9::0;1592:66:8::1;1664:16;::::0;::::1;;::::0;;;:8:::1;:16;::::0;;;;1021:1:::1;1664:26:::0;;13814:5:::2;::::0;13854:50:::2;13874:6:::0;13882:7:::2;13891:12;13854:19;:50::i;:::-;13839:65;;13911:12;13925:11:::0;13950:4:::2;13940:25;;;:27;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13996:30;::::0;;;;:24:::2;5613:55:9::0;;;13996:30:8::2;::::0;::::2;5595:74:9::0;13910:57:8;;-1:-1:-1;13910:57:8;;-1:-1:-1;13973:20:8::2;::::0;13910:57;;13996:24;;::::2;::::0;::::2;::::0;5568:18:9;;13996:30:8::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;;;:::i;:::-;14065:30;::::0;;;;:24:::2;5613:55:9::0;;;14065:30:8::2;::::0;::::2;5595:74:9::0;13973:63:8;;-1:-1:-1;14042:20:8::2;::::0;14098:6;;14065:24;;::::2;::::0;::::2;::::0;5568:18:9;;14065:30:8::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;;;:::i;:::-;14042:62:::0;-1:-1:-1;14114:19:8;;14110:100:::2;;14143:60;::::0;;;;:30:::2;7201:15:9::0;;;14143:60:8::2;::::0;::::2;7183:34:9::0;7253:15;;;7233:18;;;7226:43;7285:18;;;7278:34;;;14143:30:8;::::2;::::0;::::2;::::0;7095:18:9;;14143:60:8::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;14110:100;14219:19:::0;;14215:100:::2;;14248:60;::::0;;;;:30:::2;7201:15:9::0;;;14248:60:8::2;::::0;::::2;7183:34:9::0;7253:15;;;7233:18;;;7226:43;7285:18;;;7278:34;;;14248:30:8;::::2;::::0;::::2;::::0;7095:18:9;;14248:60:8::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;14215:100;-1:-1:-1::0;;;1703:16:8::1;::::0;;::::1;;::::0;;;:8:::1;:16;::::0;;;;984:1:::1;1703:30:::0;;-1:-1:-1;;;;;13702:617:8:o;4198:99::-;4251:4;4287:5;;4270:14;;:22;;;;:::i;:::-;4263:29;;4198:99;:::o;3354:211::-;2414:7;2401:30;;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2387:46;;:10;:46;;;2379:80;;;;;;;3649:2:9;2379:80:8;;;3631:21:9;3688:2;3668:18;;;3661:30;3727:23;3707:18;;;3700:51;3768:18;;2379:80:8;3447:345:9;2379:80:8;941:3:::1;3445:14;;3433:9;:26;;;;:::i;:::-;:37;;3425:79;;;::::0;::::1;::::0;;8694:2:9;3425:79:8::1;::::0;::::1;8676:21:9::0;8733:2;8713:18;;;8706:30;8772:31;8752:18;;;8745:59;8821:18;;3425:79:8::1;8492:353:9::0;3425:79:8::1;3510:5;:17:::0;;;3538:22:::1;::::0;1384:25:9;;;3538:22:8::1;::::0;1372:2:9;1357:18;3538:22:8::1;1238:177:9::0;3770:237:8;2414:7;2401:30;;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2387:46;;:10;:46;;;2379:80;;;;;;;3649:2:9;2379:80:8;;;3631:21:9;3688:2;3668:18;;;3661:30;3727:23;3707:18;;;3700:51;3768:18;;2379:80:8;3447:345:9;2379:80:8;941:3:::1;3868:11;3860:5;;:19;;;;:::i;:::-;:30;;3852:72;;;::::0;::::1;::::0;;8694:2:9;3852:72:8::1;::::0;::::1;8676:21:9::0;8733:2;8713:18;;;8706:30;8772:31;8752:18;;;8745:59;8821:18;;3852:72:8::1;8492:353:9::0;3852:72:8::1;3930:14;:28:::0;;;3969:33:::1;::::0;1384:25:9;;;3969:33:8::1;::::0;1372:2:9;1357:18;3969:33:8::1;1238:177:9::0;7561:317:8;2298:6;;7723:14;;;;2298:6;;:15;2290:46;;;;;;;4191:2:9;2290:46:8;;;4173:21:9;4230:2;4210:18;;;4203:30;4269:20;4249:18;;;4242:48;4307:18;;2290:46:8;3989:342:9;2290:46:8;1810:17:::1;::::0;::::1;;::::0;;;:8:::1;:17;::::0;;;;;7692:7;;7701;;1810:28;;1802:67:::1;;;::::0;::::1;::::0;;4538:2:9;1802:67:8::1;::::0;::::1;4520:21:9::0;4577:2;4557:18;;;4550:30;4616:28;4596:18;;;4589:56;4662:18;;1802:67:8::1;4336:350:9::0;1802:67:8::1;1883:17;::::0;::::1;;::::0;;;:8:::1;:17;::::0;;;;;:28;;1875:67:::1;;;::::0;::::1;::::0;;4538:2:9;1875:67:8::1;::::0;::::1;4520:21:9::0;4577:2;4557:18;;;4550:30;4616:28;4596:18;;;4589:56;4662:18;;1875:67:8::1;4336:350:9::0;1875:67:8::1;1967:7;1956:18;;:7;:18;;::::0;1948:58:::1;;;::::0;::::1;::::0;;4893:2:9;1948:58:8::1;::::0;::::1;4875:21:9::0;4932:2;4912:18;;;4905:30;4971:29;4951:18;;;4944:57;5018:18;;1948:58:8::1;4691:351:9::0;1948:58:8::1;2029:5;2044:17;::::0;;::::1;::::0;;::::1;;2040:65;;2071:17;::::0;::::1;;::::0;;;:8:::1;:17;::::0;;;;1021:1:::1;2071:27:::0;;2040:65:::1;2125:6;2114:17;;:7;:17;;;2110:65;;2141:17;::::0;::::1;;::::0;;;:8:::1;:17;::::0;;;;1021:1:::1;2141:27:::0;;2110:65:::1;7790:28:::2;7796:7;7805;7814:3;7790:5;:28::i;:::-;7829:44;::::0;;1159:25:9;;;1215:2;1200:18;;1193:34;;;7764:54:8;;-1:-1:-1;7764:54:8;;-1:-1:-1;7829:44:8::2;::::0;::::2;::::0;7834:10:::2;::::0;7829:44:::2;::::0;1132:18:9;7829:44:8::2;;;;;;;-1:-1:-1::0;2187:17:8::1;::::0;;::::1;;::::0;;;:8:::1;:17;::::0;;;;;984:1:::1;2187:31:::0;;;;2224:17;;;::::1;::::0;;;;;;:31;7561:317;;;;-1:-1:-1;7561:317:8;-1:-1:-1;;7561:317:8:o;14558:319::-;2298:6;;;;:15;2290:46;;;;;;;4191:2:9;2290:46:8;;;4173:21:9;4230:2;4210:18;;;4203:30;4269:20;4249:18;;;4242:48;4307:18;;2290:46:8;3989:342:9;2290:46:8;14626:6:::1;1551:5;1541:15;;:6;:15;;::::0;1533:53:::1;;;::::0;::::1;::::0;;7827:2:9;1533:53:8::1;::::0;::::1;7809:21:9::0;7866:2;7846:18;;;7839:30;7905:27;7885:18;;;7878:55;7950:18;;1533:53:8::1;7625:349:9::0;1533:53:8::1;1600:16;::::0;::::1;;::::0;;;:8:::1;:16;::::0;;;;;:27;;1592:66:::1;;;::::0;::::1;::::0;;4538:2:9;1592:66:8::1;::::0;::::1;4520:21:9::0;4577:2;4557:18;;;4550:30;4616:28;4596:18;;;4589:56;4662:18;;1592:66:8::1;4336:350:9::0;1592:66:8::1;1664:16;::::0;::::1;;::::0;;;:8:::1;:16;::::0;;;;1021:1:::1;1664:26:::0;;14655:50:::2;14675:6:::0;14683:7:::2;14692:12;14655:19;:50::i;:::-;14731:30;::::0;;;;:24:::2;5613:55:9::0;;;14731:30:8::2;::::0;::::2;5595:74:9::0;14640:65:8;;-1:-1:-1;14711:17:8::2;::::0;14731:24;::::2;::::0;::::2;::::0;5568:18:9;;14731:30:8::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14787:29;::::0;;;;:23:::2;5613:55:9::0;;;14787:29:8::2;::::0;::::2;5595:74:9::0;14711:50:8;;-1:-1:-1;14767:17:8::2;::::0;14794:5:::2;14787:23;::::0;::::2;::::0;5568:18:9;;14787:29:8::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14822:50;::::0;;;;::::2;::::0;::::2;1159:25:9::0;;;1200:18;;;1193:34;;;14767:49:8;;-1:-1:-1;14822:22:8::2;::::0;::::2;::::0;::::2;::::0;1132:18:9;;14822:50:8::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;;1703:16:8::1;::::0;;::::1;;::::0;;;:8:::1;:16;::::0;;;;984:1:::1;1703:30:::0;;-1:-1:-1;;;;;14558:319:8:o;12391:1030::-;2298:6;;;;:15;2290:46;;;;;;;4191:2:9;2290:46:8;;;4173:21:9;4230:2;4210:18;;;4203:30;4269:20;4249:18;;;4242:48;4307:18;;2290:46:8;3989:342:9;2290:46:8;12533:6:::1;1551:5;1541:15;;:6;:15;;::::0;1533:53:::1;;;::::0;::::1;::::0;;7827:2:9;1533:53:8::1;::::0;::::1;7809:21:9::0;7866:2;7846:18;;;7839:30;7905:27;7885:18;;;7878:55;7950:18;;1533:53:8::1;7625:349:9::0;1533:53:8::1;1600:16;::::0;::::1;;::::0;;;:8:::1;:16;::::0;;;;;:27;;1592:66:::1;;;::::0;::::1;::::0;;4538:2:9;1592:66:8::1;::::0;::::1;4520:21:9::0;4577:2;4557:18;;;4550:30;4616:28;4596:18;;;4589:56;4662:18;;1592:66:8::1;4336:350:9::0;1592:66:8::1;1664:16;::::0;;::::1;;::::0;;;:8:::1;:16;::::0;;;;1021:1:::1;1664:26:::0;;12555:17;::::2;12547:51;;;::::0;::::2;::::0;;9052:2:9;12547:51:8::2;::::0;::::2;9034:21:9::0;9091:2;9071:18;;;9064:30;9130:23;9110:18;;;9103:51;9171:18;;12547:51:8::2;8850:345:9::0;12547:51:8::2;12604:12;12619:50;12639:6;12647:7;12656:12;12619:19;:50::i;:::-;12604:65;;12676:12;12704:4;12694:25;;;:27;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12675:46;;;12746:7;12735;:18;;12727:69;;;::::0;::::2;::::0;;9402:2:9;12727:69:8::2;::::0;::::2;9384:21:9::0;9441:2;9421:18;;;9414:30;9480:34;9460:18;;;9453:62;9551:8;9531:18;;;9524:36;9577:19;;12727:69:8::2;9200:402:9::0;12727:69:8::2;12817:30;::::0;;;;:24:::2;5613:55:9::0;;;12817:30:8::2;::::0;::::2;5595:74:9::0;12802:12:8::2;::::0;12817:24;;::::2;::::0;::::2;::::0;5568:18:9;;12817:30:8::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12853:52;::::0;;;;:30:::2;7201:15:9::0;;;12853:52:8::2;::::0;::::2;7183:34:9::0;7253:15;;;7233:18;;;7226:43;7285:18;;;7278:34;;;12802:45:8;;-1:-1:-1;12853:30:8;;::::2;::::0;::::2;::::0;7095:18:9;;12853:52:8::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;12945:53:8::2;::::0;;;;:31:::2;::::0;::::2;::::0;-1:-1:-1;12945:31:8::2;::::0;-1:-1:-1;12945:53:8::2;::::0;12977:4;;12983:7;;12992:5;;;;12945:53:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;13092:5;13075:13;:11;:13::i;:::-;13065:23;::::0;:7;:23:::2;:::i;:::-;13064:33;;;;:::i;:::-;13053:45;::::0;:7;:45:::2;:::i;:::-;13019:30;::::0;;;;:24:::2;5613:55:9::0;;;13019:30:8::2;::::0;::::2;5595:74:9::0;13019:24:8;::::2;::::0;::::2;::::0;5568:18:9;;13019:30:8::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:79;;13004:150;;;::::0;::::2;::::0;;10455:2:9;13004:150:8::2;::::0;::::2;10437:21:9::0;10494:2;10474:18;;;10467:30;10533:34;10513:18;;;10506:62;10604:10;10584:18;;;10577:38;10632:19;;13004:150:8::2;10253:404:9::0;13004:150:8::2;13170:4;13160:30;;;13191:6;13199:11;13241:5;13223:14;;13213:7;:24;;;;:::i;:::-;13212:34;;;;:::i;:::-;13160:87;::::0;;::::2;::::0;;;;;;7132:42:9;7201:15;;;13160:87:8::2;::::0;::::2;7183:34:9::0;7253:15;;;;7233:18;;;7226:43;7285:18;;;7278:34;7095:18;;13160:87:8::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;13320:30:8::2;::::0;;;;13297:22:::2;::::0;;::::2;13320:30;::::0;::::2;5595:74:9::0;;;13297:22:8;-1:-1:-1;13297:22:8::2;::::0;-1:-1:-1;13320:24:8;::::2;::::0;::::2;::::0;5568:18:9;;13320:30:8::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13352:29;::::0;;;;:23:::2;5613:55:9::0;;;13352:29:8::2;::::0;::::2;5595:74:9::0;13359:5:8::2;13352:23;::::0;::::2;::::0;5568:18:9;;13352:29:8::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13297:85;::::0;;::::2;::::0;;;;;;::::2;::::0;::::2;1159:25:9::0;;;;1200:18;;;1193:34;1132:18;;13297:85:8::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;13403:3;13393:23;;;13408:7;13393:23;;;;1384:25:9::0;;1372:2;1357:18;;1238:177;13393:23:8::2;;;;;;;;-1:-1:-1::0;;;1703:16:8::1;;;::::0;;;:8:::1;:16;::::0;;;;984:1:::1;1703:30:::0;;-1:-1:-1;;;;;12391:1030:8:o;8496:1054::-;2298:6;;8606:14;;2298:6;;:15;2290:46;;;;;;;4191:2:9;2290:46:8;;;4173:21:9;4230:2;4210:18;;;4203:30;4269:20;4249:18;;;4242:48;4307:18;;2290:46:8;3989:342:9;2290:46:8;8589:6:::1;1551:5;1541:15;;:6;:15;;::::0;1533:53:::1;;;::::0;::::1;::::0;;7827:2:9;1533:53:8::1;::::0;::::1;7809:21:9::0;7866:2;7846:18;;;7839:30;7905:27;7885:18;;;7878:55;7950:18;;1533:53:8::1;7625:349:9::0;1533:53:8::1;1600:16;::::0;::::1;;::::0;;;:8:::1;:16;::::0;;;;;:27;;1592:66:::1;;;::::0;::::1;::::0;;4538:2:9;1592:66:8::1;::::0;::::1;4520:21:9::0;4577:2;4557:18;;;4550:30;4616:28;4596:18;;;4589:56;4662:18;;1592:66:8::1;4336:350:9::0;1592:66:8::1;1664:16;::::0;::::1;;::::0;;;:8:::1;:16;::::0;;;;1021:1:::1;1664:26:::0;;8643:50:::2;8663:6:::0;8671:7:::2;8680:12;8643:19;:50::i;:::-;8628:65;;8700:12;8714:11:::0;8739:4:::2;8729:25;;;:27;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8782:30;::::0;;;;:24:::2;5613:55:9::0;;;8782:30:8::2;::::0;::::2;5595:74:9::0;8699:57:8;;-1:-1:-1;8699:57:8;;-1:-1:-1;8762:17:8::2;::::0;8782:24;::::2;::::0;::::2;::::0;5568:18:9;;8782:30:8::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8838:29;::::0;;;;:23:::2;5613:55:9::0;;;8838:29:8::2;::::0;::::2;5595:74:9::0;8762:50:8;;-1:-1:-1;8818:17:8::2;::::0;8845:5:::2;8838:23;::::0;::::2;::::0;5568:18:9;;8838:29:8::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8818:49:::0;-1:-1:-1;8873:12:8::2;8888:22;8903:7:::0;8888:12;:22:::2;:::i;:::-;8873:37:::0;-1:-1:-1;8916:13:8::2;8932:21;8947:6:::0;8932:12;:21:::2;:::i;:::-;8916:37;;8959:17;8986:4;8979:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8959:46;;9015:12;9031:1;9015:17:::0;9011:326:::2;;1068:7;9054:29;9064:18;9074:8:::0;9064:7;:18:::2;:::i;:::-;9054:9;:29::i;:::-;:49;;;;:::i;:::-;9111:51;::::0;;;;9140:1:::2;9111:51;::::0;::::2;7497:74:9::0;1068:7:8::2;7587:18:9::0;;;7580:34;9042:61:8;;-1:-1:-1;9111:20:8::2;::::0;::::2;::::0;::::2;::::0;7470:18:9;;9111:51:8::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;9011:326;;;9250:80;9286:7:::0;9260:22:::2;9270:12:::0;9260:7;:22:::2;:::i;:::-;9259:34;;;;:::i;:::-;9323:6:::0;9296:23:::2;9307:12:::0;9296:8;:23:::2;:::i;:::-;9295:34;;;;:::i;:::-;9250:8;:80::i;:::-;9238:92;;9011:326;9362:1;9350:9;:13;9342:67;;;::::0;::::2;::::0;;10864:2:9;9342:67:8::2;::::0;::::2;10846:21:9::0;10903:2;10883:18;;;10876:30;10942:34;10922:18;;;10915:62;11013:11;10993:18;;;10986:39;11042:19;;9342:67:8::2;10662:405:9::0;9342:67:8::2;9415:36;::::0;;;;:20:::2;7515:55:9::0;;;9415:36:8::2;::::0;::::2;7497:74:9::0;7587:18;;;7580:34;;;9415:20:8;::::2;::::0;::::2;::::0;7470:18:9;;9415:36:8::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;9457:50:8::2;::::0;;;;::::2;::::0;::::2;1159:25:9::0;;;1200:18;;;1193:34;;;9457:22:8::2;::::0;::::2;::::0;-1:-1:-1;9457:22:8::2;::::0;-1:-1:-1;1132:18:9;;9457:50:8::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;9518:27:8::2;::::0;1384:25:9;;;9523:10:8::2;::::0;-1:-1:-1;9518:27:8::2;::::0;-1:-1:-1;1372:2:9;1357:18;9518:27:8::2;;;;;;;-1:-1:-1::0;;;1703:16:8::1;::::0;;::::1;;::::0;;;:8:::1;:16;::::0;;;;984:1:::1;1703:30:::0;;-1:-1:-1;8496:1054:8;;;-1:-1:-1;;;;;;8496:1054:8:o;438:430:7:-;741:24;;11234:66:9;11221:2;11217:15;;;11213:88;741:24:7;;;11201:101:9;551:12:7;;707:8;;11318:12:9;;741:24:7;;;;;;;;;;;;731:35;;;;;;782:13;652:175;;;;;;;;;11639:66:9;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;652:175:7;;;;;;;;;;;;;;629:210;;652:175;629:210;;;;;438:430;-1:-1:-1;;;;438:430:7:o;5111:950:8:-;5223:13;5238:14;5260;5277:5;5260:22;;5302:14;5329:5;5302:33;;5342:12;5356:11;5371:4;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5413:31;;;;;:24;5613:55:9;;;5413:31:8;;;5595:74:9;5341:46:8;;-1:-1:-1;5341:46:8;;-1:-1:-1;5393:17:8;;5413:24;;;;;5568:18:9;;5413:31:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5393:51;-1:-1:-1;5461:21:8;5476:6;5393:51;5461:21;:::i;:::-;5450:32;-1:-1:-1;5492:16:8;;;5504:4;5492:16;5488:332;;5530:11;:24;5555:6;5563:7;5572:8;5582:13;:11;:13::i;:::-;5530:66;;;;;;;;;;;;;12176:25:9;;;;12217:18;;;12210:34;;;;12260:18;;;12253:34;12303:18;;;12296:34;12148:19;;5530:66:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5518:78;;5604:4;:19;;;5624:5;5631:11;5674:5;5656:14;;5645:8;:25;;;;:::i;:::-;5644:35;;;;:::i;:::-;5604:76;;;;;;;;;;7132:42:9;7201:15;;;5604:76:8;;;7183:34:9;7253:15;;;;7233:18;;;7226:43;7285:18;;;7278:34;7095:18;;5604:76:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5488:332;;;5757:56;5787:8;5797:6;5805:7;5757:29;:56::i;:::-;5745:68;;5488:332;5825:43;;;;;:19;7201:15:9;;;5825:43:8;;;7183:34:9;7253:15;;;7233:18;;;7226:43;7285:18;;;7278:34;;;5825:19:8;;;;;7095:18:9;;5825:43:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5923:31:8;;;;;:24;5613:55:9;;;5923:31:8;;;5595:74:9;5923:24:8;;;-1:-1:-1;5923:24:8;;-1:-1:-1;5568:18:9;;5923:31:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5980;;;;;:24;5613:55:9;;;5980:31:8;;;5595:74:9;5908:46:8;;-1:-1:-1;5960:17:8;;5980:24;;;;;5568:18:9;;5980:31:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6017:39;;;;;;;;1159:25:9;;;1200:18;;;1193:34;;;5960:51:8;;-1:-1:-1;6017:11:8;;;;;;1132:18:9;;6017:39:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5254:807;;;;;;5111:950;;;;;;;:::o;6065:980::-;6160:14;;6216:5;6260:7;6295:14;;;;;;;;6287:49;;;;;;;12543:2:9;6287:49:8;;;12525:21:9;12582:2;12562:18;;;12555:30;12621:24;12601:18;;;12594:52;12663:18;;6287:49:8;12341:346:9;6287:49:8;6357:7;6350:14;;:3;:14;;;6342:49;;;;;;;12543:2:9;6342:49:8;;;12525:21:9;12582:2;12562:18;;;12555:30;12621:24;12601:18;;;12594:52;12663:18;;6342:49:8;12341:346:9;6342:49:8;6412:6;6401:17;;:7;:17;;;;:38;;;;;6433:6;6422:17;;:7;:17;;;;6401:38;6397:644;;;6449:13;6465:52;6485:7;6494:8;6504:12;6465:19;:52::i;:::-;6449:68;;6525:13;6541:52;6561:7;6570:8;6580:12;6541:19;:52::i;:::-;6525:68;;6617:29;6624:5;6631:7;6640:5;6617:6;:29::i;:::-;-1:-1:-1;6601:45:8;-1:-1:-1;6671:34:8;6678:5;6685:7;6694:3;6699:5;6671:6;:34::i;:::-;6654:51;-1:-1:-1;6397:644:8;;-1:-1:-1;;;6397:644:8;;6733:6;6722:17;;:7;:17;;;6718:323;;6749:13;6765:52;6785:7;6794:8;6804:12;6765:19;:52::i;:::-;6749:68;;6851:33;6858:5;6865:7;6874:3;6879:4;6851:6;:33::i;:::-;6825:59;;-1:-1:-1;6825:59:8;-1:-1:-1;6718:323:8;;-1:-1:-1;6718:323:8;;6905:13;6921:52;6941:7;6950:8;6960:12;6921:19;:52::i;:::-;6905:68;;7007:27;7014:5;7021:7;7030:3;7007:6;:27::i;:::-;6981:53;;-1:-1:-1;6981:53:8;-1:-1:-1;;6718:323:8;6193:852;;6065:980;;;;;;:::o;187:238:6:-;233:6;256:1;251:2;:6;247:174;;;-1:-1:-1;271:2:6;281:6;290;295:1;271:2;290:6;:::i;:::-;:10;;299:1;290:10;:::i;:::-;281:19;;308:68;319:1;315;:5;308:68;;;336:1;-1:-1:-1;336:1:6;366;336;352:6;336:1;352:2;:6;:::i;:::-;:10;;;;:::i;:::-;351:16;;;;:::i;:::-;347:20;;308:68;;;259:123;187:238;;;:::o;247:174::-;392:7;;388:33;;-1:-1:-1;413:1:6;388:33;187:238;;;:::o;88:95::-;142:4;166:2;161;:7;:17;;176:2;161:17;;;171:2;161:17;154:24;;88:95;;;;;:::o;872:146:7:-;956:8;998:14;1003:9;998:2;:14;:::i;:::-;979;991:2;979:9;:14;:::i;:::-;978:35;;;;:::i;:::-;972:41;872:146;-1:-1:-1;;;;872:146:7:o;4301:806:8:-;4394:13;4409:14;4431;4448:5;4431:22;;4473:14;4500:5;4473:33;;4513:12;4527:11;4542:4;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4584:31;;;;;:24;5613:55:9;;;4584:31:8;;;5595:74:9;4512:46:8;;-1:-1:-1;4512:46:8;;-1:-1:-1;4564:17:8;;4584:24;;;;;5568:18:9;;4584:31:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4564:51;-1:-1:-1;4632:22:8;4647:7;4564:51;4632:22;:::i;:::-;4621:33;;4672:11;:24;4697:7;4706:6;4714:8;4724:13;:11;:13::i;:::-;4672:66;;;;;;;;;;;;;12176:25:9;;;;12217:18;;;12210:34;;;;12260:18;;;12253:34;12303:18;;;12296:34;12148:19;;4672:66:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4660:78;;4744:4;:19;;;4764:6;4772:11;4815:5;4797:14;;4786:8;:25;;;;:::i;:::-;4785:35;;;;:::i;:::-;4744:77;;;;;;;;;;7132:42:9;7201:15;;;4744:77:8;;;7183:34:9;7253:15;;;;7233:18;;;7226:43;7285:18;;;7278:34;7095:18;;4744:77:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4871:43:8;;;;;:19;7201:15:9;;;4871:43:8;;;7183:34:9;7253:15;;;7233:18;;;7226:43;7285:18;;;7278:34;;;4871:19:8;;;-1:-1:-1;4871:19:8;;-1:-1:-1;7095:18:9;;4871:43:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4974:31:8;;;;;:24;5613:55:9;;;4974:31:8;;;5595:74:9;4954:17:8;;-1:-1:-1;4974:24:8;;;-1:-1:-1;4974:24:8;;5568:18:9;;4974:31:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5026;;;;;:24;5613:55:9;;;5026:31:8;;;5595:74:9;4954:51:8;;-1:-1:-1;5026:24:8;;;;;;5568:18:9;;5026:31:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5063:39;;;;;;;;1159:25:9;;;1200:18;;;1193:34;;;5011:46:8;;-1:-1:-1;5063:11:8;;;;;;1132:18:9;;5063:39:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4425:682;;;;;;4301:806;;;;;;:::o;14:273:9:-;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:9: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:9;763:18;;750:32;791:33;750:32;791:33;:::i;:::-;843:7;-1:-1:-1;902:2:9;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:9;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:9;;1813:180;-1:-1:-1;1813:180:9: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:9;2594:18;;2581:32;;-1:-1:-1;2665:2:9;2650:18;;2637:32;2678:33;2637:32;2678:33;:::i;:::-;2730:7;-1:-1:-1;2788:2:9;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:9;;-1:-1:-1;3152:2:9;3144:11;;3174:6;2250:936;-1:-1:-1;;;2250:936:9: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:9;;5680:184;-1:-1:-1;5680:184:9: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:9;;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:9;;8214:2;8199:18;;;8193:25;8158:16;;8193:25;;-1:-1:-1;7979:245:9: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:9:o
Swarm Source
ipfs://a343c5365a1df5ea8c7852c4ff70e78c79f05192fc77bf35e978cb277010c456
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.