Overview
ETH Balance
0.000000500252474501 ETH
Eth Value
Less Than $0.01 (@ $2,627.93/ETH)More Info
Private Name Tags
ContractCreator
Latest 13 from a total of 13 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Add Liquidity ET... | 16579416 | 726 days ago | IN | 0.00000001 ETH | 0.00778384 | ||||
Remove Liquidity... | 16535735 | 732 days ago | IN | 0 ETH | 0.00348772 | ||||
Swap Exact ETH F... | 16535718 | 732 days ago | IN | 0.0001 ETH | 0.00230339 | ||||
Add Liquidity ET... | 16535707 | 732 days ago | IN | 0.00001 ETH | 0.00301305 | ||||
Swap Exact ETH F... | 16535551 | 732 days ago | IN | 0.0001 ETH | 0.00271005 | ||||
Add Liquidity ET... | 16535546 | 732 days ago | IN | 0.0001 ETH | 0.00374458 | ||||
Swap Exact Token... | 16485878 | 739 days ago | IN | 0 ETH | 0.00365115 | ||||
Add Liquidity ET... | 16485858 | 739 days ago | IN | 0.00001 ETH | 0.00427388 | ||||
Remove Liquidity... | 16482295 | 740 days ago | IN | 0 ETH | 0.002831 | ||||
Swap Exact Token... | 16481963 | 740 days ago | IN | 0 ETH | 0.00226546 | ||||
Add Liquidity ET... | 16481954 | 740 days ago | IN | 0.0001 ETH | 0.00297054 | ||||
Add Liquidity ET... | 16478763 | 740 days ago | IN | 0.001 ETH | 0.07462557 | ||||
Add Liquidity ET... | 16471788 | 741 days ago | IN | 0.0001 ETH | 0.0213033 |
Latest 21 internal transactions
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
16579416 | 726 days ago | 0 ETH | ||||
16579416 | 726 days ago | 0 ETH | ||||
16535735 | 732 days ago | 0.00000002 ETH | ||||
16535735 | 732 days ago | 0.00000002 ETH | ||||
16535718 | 732 days ago | 0.00009975 ETH | ||||
16535707 | 732 days ago | 0.00000998 ETH | ||||
16535707 | 732 days ago | 0.00000001 ETH | ||||
16535551 | 732 days ago | 0.00009975 ETH | ||||
16535546 | 732 days ago | 0.00009999 ETH | ||||
16535546 | 732 days ago | 0 ETH | ||||
16485878 | 739 days ago | 0 ETH | ||||
16485878 | 739 days ago | 0 ETH | ||||
16485858 | 739 days ago | 0.0000099 ETH | ||||
16485858 | 739 days ago | 0.00000009 ETH | ||||
16482295 | 740 days ago | 0 ETH | ||||
16482295 | 740 days ago | 0 ETH | ||||
16481963 | 740 days ago | 0.00000009 ETH | ||||
16481963 | 740 days ago | 0.00000009 ETH | ||||
16481954 | 740 days ago | 0.00009999 ETH | ||||
16481954 | 740 days ago | 0.00000001 ETH | ||||
16478763 | 740 days ago | 0.001 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
ShibnobiRouter
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-23 */ // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.5.0 <0.7.0; // a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math) library SafeMath { function add(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x + y) >= x, "ds-math-add-overflow"); } function sub(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x - y) <= x, "ds-math-sub-underflow"); } function mul(uint256 x, uint256 y) internal pure returns (uint256 z) { require(y == 0 || (z = x * y) / y == x, "ds-math-mul-overflow"); } } // File contracts/interfaces/IShibnobiRouter01.sol // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.6.2; interface IShibnobiRouter01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline, address referral ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline, address referral ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline, address referral ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline, address referral ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut, uint16 fees ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut, uint16 fees ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path, uint16 fees) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path, uint16 fees) external view returns (uint256[] memory amounts); } // File contracts/interfaces/IShibnobiRouter02.sol // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.6.2; interface IShibnobiRouter02 is IShibnobiRouter01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline, address referral ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline, address referral ) external; function getClaims(address user) external view returns (uint256); function claim() external; } // File contracts/interfaces/IWETH.sol // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.5.0; interface IWETH { function deposit() external payable; function transfer(address to, uint256 value) external returns (bool); function withdraw(uint256) external; } // File contracts/interfaces/IShibnobiFactory.sol // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.5.0; interface IShibnobiFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint256); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; function INIT_CODE_PAIR_HASH() external view returns (bytes32); } // File contracts/interfaces/IShibnobiPair.sol // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.5.0; interface IShibnobiPair { event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function swapNoInternalFees( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File contracts/libraries/ShibnobiLibrary.sol // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.5.0; library ShibnobiLibrary { using SafeMath for uint256; // returns sorted token addresses, used to handle return values from pairs sorted in this order function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { require(tokenA != tokenB, "ShibnobiLibrary: IDENTICAL_ADDRESSES"); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), "ShibnobiLibrary: ZERO_ADDRESS"); } // calculates the CREATE2 address for a pair without making any external calls function pairFor( address factory, address tokenA, address tokenB ) internal pure returns (address pair) { (address token0, address token1) = sortTokens(tokenA, tokenB); pair = address( uint256( keccak256( abi.encodePacked( hex"ff", factory, keccak256(abi.encodePacked(token0, token1)), hex"b6916cae0863909d91d47f1ec6beafccf2d2f4487a1c0d0d092c27f31b4b26ab" // init code hash ) ) ) ); } // fetches and sorts the reserves for a pair function getReserves( address factory, address tokenA, address tokenB ) internal view returns (uint256 reserveA, uint256 reserveB) { (address token0, ) = sortTokens(tokenA, tokenB); pairFor(factory, tokenA, tokenB); (uint256 reserve0, uint256 reserve1, ) = IShibnobiPair(pairFor(factory, tokenA, tokenB)).getReserves(); (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0); } // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) internal pure returns (uint256 amountB) { require(amountA > 0, "ShibnobiLibrary: INSUFFICIENT_AMOUNT"); require(reserveA > 0 && reserveB > 0, "ShibnobiLibrary: INSUFFICIENT_LIQUIDITY"); amountB = amountA.mul(reserveB) / reserveA; } // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut, uint16 fees ) internal pure returns (uint256 amountOut) { require(amountIn > 0, "ShibnobiLibrary: INSUFFICIENT_INPUT_AMOUNT"); require(reserveIn > 0 && reserveOut > 0, "ShibnobiLibrary: INSUFFICIENT_LIQUIDITY"); uint256 amountInWithFee = amountIn.mul(fees); uint256 numerator = amountInWithFee.mul(reserveOut); uint256 denominator = reserveIn.mul(10000).add(amountInWithFee); amountOut = numerator / denominator; } // given an output amount of an asset and pair reserves, returns a required input amount of the other asset function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut, uint16 fees ) internal pure returns (uint256 amountIn) { require(amountOut > 0, "ShibnobiLibrary: INSUFFICIENT_OUTPUT_AMOUNT"); require(reserveIn > 0 && reserveOut > 0, "ShibnobiLibrary: INSUFFICIENT_LIQUIDITY"); uint256 numerator = reserveIn.mul(amountOut).mul(10000); uint256 denominator = reserveOut.sub(amountOut).mul(fees); amountIn = (numerator / denominator).add(1); } // performs chained getAmountOut calculations on any number of pairs function getAmountsOut( address factory, uint256 amountIn, address[] memory path, uint16 fees ) internal view returns (uint256[] memory amounts) { require(path.length >= 2, "ShibnobiLibrary: INVALID_PATH"); amounts = new uint256[](path.length); amounts[0] = amountIn; for (uint256 i; i < path.length - 1; i++) { (uint256 reserveIn, uint256 reserveOut) = getReserves(factory, path[i], path[i + 1]); amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut, fees); } } // performs chained getAmountIn calculations on any number of pairs function getAmountsIn( address factory, uint256 amountOut, address[] memory path, uint16 fees ) internal view returns (uint256[] memory amounts) { require(path.length >= 2, "ShibnobiLibrary: INVALID_PATH"); amounts = new uint256[](path.length); amounts[amounts.length - 1] = amountOut; for (uint256 i = path.length - 1; i > 0; i--) { (uint256 reserveIn, uint256 reserveOut) = getReserves(factory, path[i - 1], path[i]); amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut, fees); } } } // File contracts/interfaces/IERC20.sol // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.5.0; interface IERC20 { event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); } // File @uniswap/lib/contracts/libraries/[email protected] // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.6.0; // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library TransferHelper { function safeApprove( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::safeApprove: approve failed' ); } function safeTransfer( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::safeTransfer: transfer failed' ); } function safeTransferFrom( address token, address from, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::transferFrom: transferFrom failed' ); } function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require(success, 'TransferHelper::safeTransferETH: ETH transfer failed'); } } // File contracts/ShibnobiRouter.sol // SPDX-License-Identifier: GPL-3.0 pragma solidity =0.6.6; contract ShibnobiRouter is IShibnobiRouter02 { using SafeMath for uint256; address public immutable override factory; address public immutable override WETH; mapping (address => uint256) _claims; address public feeSetter; uint16 public fees = 9975; uint16 public feeDenominator = 10000; modifier onlyFeeSetter() { require(msg.sender == feeSetter, "ShibnobiRouter: FORBIDDEN"); _; } modifier ensure(uint256 deadline) { require(deadline >= block.timestamp, "ShibnobiRouter: EXPIRED"); _; } constructor(address _factory, address _WETH) public { factory = _factory; WETH = _WETH; feeSetter = msg.sender; } receive() external payable { assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract } function setFeeSetter(address _feeSetter) external onlyFeeSetter { feeSetter = _feeSetter; } function setFees(uint16 _fees) external onlyFeeSetter { require(fees <= feeDenominator, "ShibnobiRouter: INVALID_FEES"); fees = _fees; } function handleReferral(uint256 amount, address referral) internal returns(uint256 amountWithFees) { amountWithFees = amount.mul(fees) / feeDenominator; uint256 feeAmount = amount.sub(amountWithFees); if (referral == address(0) || referral == tx.origin) { _claims[feeSetter] = _claims[feeSetter].add(feeAmount); } else { _claims[referral] = _claims[referral].add(feeAmount); } } // **** ADD LIQUIDITY **** function _addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin ) internal virtual returns (uint256 amountA, uint256 amountB) { // create the pair if it doesn't exist yet if (IShibnobiFactory(factory).getPair(tokenA, tokenB) == address(0)) { IShibnobiFactory(factory).createPair(tokenA, tokenB); } (uint256 reserveA, uint256 reserveB) = ShibnobiLibrary.getReserves(factory, tokenA, tokenB); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); } else { uint256 amountBOptimal = ShibnobiLibrary.quote(amountADesired, reserveA, reserveB); if (amountBOptimal <= amountBDesired) { require(amountBOptimal >= amountBMin, "ShibnobiRouter: INSUFFICIENT_B_AMOUNT"); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint256 amountAOptimal = ShibnobiLibrary.quote(amountBDesired, reserveB, reserveA); assert(amountAOptimal <= amountADesired); require(amountAOptimal >= amountAMin, "ShibnobiRouter: INSUFFICIENT_A_AMOUNT"); (amountA, amountB) = (amountAOptimal, amountBDesired); } } } function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external virtual override ensure(deadline) returns ( uint256 amountA, uint256 amountB, uint256 liquidity ) { (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin); address pair = ShibnobiLibrary.pairFor(factory, tokenA, tokenB); TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA); TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB); liquidity = IShibnobiPair(pair).mint(to); } function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable virtual override ensure(deadline) returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ) { (amountToken, amountETH) = _addLiquidity( token, WETH, amountTokenDesired, msg.value, amountTokenMin, amountETHMin ); address pair = ShibnobiLibrary.pairFor(factory, token, WETH); TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken); IWETH(WETH).deposit{value: amountETH}(); assert(IWETH(WETH).transfer(pair, amountETH)); liquidity = IShibnobiPair(pair).mint(to); // refund dust eth, if any if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH); } // **** REMOVE LIQUIDITY **** function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) public virtual override ensure(deadline) returns (uint256 amountA, uint256 amountB) { address pair = ShibnobiLibrary.pairFor(factory, tokenA, tokenB); IShibnobiPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair (uint256 amount0, uint256 amount1) = IShibnobiPair(pair).burn(to); (address token0, ) = ShibnobiLibrary.sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require(amountA >= amountAMin, "ShibnobiRouter: INSUFFICIENT_A_AMOUNT"); require(amountB >= amountBMin, "ShibnobiRouter: INSUFFICIENT_B_AMOUNT"); } function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) public virtual override ensure(deadline) returns (uint256 amountToken, uint256 amountETH) { (amountToken, amountETH) = removeLiquidity( token, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer(token, to, amountToken); IWETH(WETH).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint256 amountA, uint256 amountB) { address pair = ShibnobiLibrary.pairFor(factory, tokenA, tokenB); uint256 value = approveMax ? uint256(-1) : liquidity; IShibnobiPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline); } function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint256 amountToken, uint256 amountETH) { address pair = ShibnobiLibrary.pairFor(factory, token, WETH); uint256 value = approveMax ? uint256(-1) : liquidity; IShibnobiPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline); } // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) **** function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) public virtual override ensure(deadline) returns (uint256 amountETH) { (, amountETH) = removeLiquidity(token, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline); TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this))); IWETH(WETH).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint256 amountETH) { address pair = ShibnobiLibrary.pairFor(factory, token, WETH); uint256 value = approveMax ? uint256(-1) : liquidity; IShibnobiPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); amountETH = removeLiquidityETHSupportingFeeOnTransferTokens( token, liquidity, amountTokenMin, amountETHMin, to, deadline ); } // **** SWAP **** // requires the initial amount to have already been sent to the first pair function _swap( uint256[] memory amounts, address[] memory path, address _to, bool feesOn ) internal virtual { for (uint256 i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0, ) = ShibnobiLibrary.sortTokens(input, output); uint256 amountOut = amounts[i + 1]; (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOut) : (amountOut, uint256(0)); address to = i < path.length - 2 ? ShibnobiLibrary.pairFor(factory, output, path[i + 2]) : _to; if (feesOn) IShibnobiPair(ShibnobiLibrary.pairFor(factory, input, output)).swap(amount0Out, amount1Out, to, new bytes(0)); else IShibnobiPair(ShibnobiLibrary.pairFor(factory, input, output)).swapNoInternalFees(amount0Out, amount1Out, to, new bytes(0)); } } function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { amounts = ShibnobiLibrary.getAmountsOut(factory, amountIn, path, fees); require(amounts[amounts.length - 1] >= amountOutMin, "ShibnobiRouter: INSUFFICIENT_OUTPUT_AMOUNT"); TransferHelper.safeTransferFrom( path[0], msg.sender, ShibnobiLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to, true); } function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { amounts = ShibnobiLibrary.getAmountsIn(factory, amountOut, path, fees); require(amounts[0] <= amountInMax, "ShibnobiRouter: EXCESSIVE_INPUT_AMOUNT"); TransferHelper.safeTransferFrom( path[0], msg.sender, ShibnobiLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to, true); } function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline, address referral ) external payable virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[0] == WETH, "ShibnobiRouter: INVALID_PATH"); uint256 amountInWithFee = handleReferral(msg.value, referral); amounts = ShibnobiLibrary.getAmountsOut(factory, amountInWithFee, path, 10000); require(amounts[amounts.length - 1] >= amountOutMin, "ShibnobiRouter: INSUFFICIENT_OUTPUT_AMOUNT"); IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(ShibnobiLibrary.pairFor(factory, path[0], path[1]), amounts[0])); _swap(amounts, path, to, false); } function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline, address referral ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[path.length - 1] == WETH, "ShibnobiRouter: INVALID_PATH"); amounts = ShibnobiLibrary.getAmountsIn(factory, amountOut, path, 10000); require(amounts[0] <= amountInMax, "ShibnobiRouter: EXCESSIVE_INPUT_AMOUNT"); TransferHelper.safeTransferFrom( path[0], msg.sender, ShibnobiLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this), false); IWETH(WETH).withdraw(amounts[amounts.length - 1]); uint256 amountsOutWithFees = handleReferral(amounts[amounts.length - 1], referral); TransferHelper.safeTransferETH(to, amountsOutWithFees); } function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline, address referral ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[path.length - 1] == WETH, "ShibnobiRouter: INVALID_PATH"); amounts = ShibnobiLibrary.getAmountsOut(factory, amountIn, path, 10000); require(amounts[amounts.length - 1] >= amountOutMin, "ShibnobiRouter: INSUFFICIENT_OUTPUT_AMOUNT"); TransferHelper.safeTransferFrom( path[0], msg.sender, ShibnobiLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this), false); IWETH(WETH).withdraw(amounts[amounts.length - 1]); uint256 amountsOutWithFees = handleReferral(amounts[amounts.length - 1], referral); TransferHelper.safeTransferETH(to, amountsOutWithFees); } function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline, address referral ) external payable virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[0] == WETH, "ShibnobiRouter: INVALID_PATH"); amounts = ShibnobiLibrary.getAmountsIn(factory, amountOut, path, 10000); uint256 amountInWithFee = handleReferral(amounts[0], referral); require(amountInWithFee <= msg.value, "ShibnobiRouter: EXCESSIVE_INPUT_AMOUNT"); IWETH(WETH).deposit{value: amountInWithFee}(); assert(IWETH(WETH).transfer(ShibnobiLibrary.pairFor(factory, path[0], path[1]), amountInWithFee)); _swap(amounts, path, to, false); // refund dust eth, if any if (msg.value > amountInWithFee) TransferHelper.safeTransferETH(msg.sender, msg.value - amountInWithFee); } // **** SWAP (supporting fee-on-transfer tokens) **** // requires the initial amount to have already been sent to the first pair function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to, uint16 fees_) internal virtual { for (uint256 i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0, ) = ShibnobiLibrary.sortTokens(input, output); IShibnobiPair pair = IShibnobiPair(ShibnobiLibrary.pairFor(factory, input, output)); uint256 amountInput; uint256 amountOutput; { // scope to avoid stack too deep errors (uint256 reserve0, uint256 reserve1, ) = pair.getReserves(); (uint256 reserveInput, uint256 reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0); amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput); amountOutput = ShibnobiLibrary.getAmountOut(amountInput, reserveInput, reserveOutput, fees_); } (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOutput) : (amountOutput, uint256(0)); address to = i < path.length - 2 ? ShibnobiLibrary.pairFor(factory, output, path[i + 2]) : _to; if (fees_ == feeDenominator) pair.swapNoInternalFees(amount0Out, amount1Out, to, new bytes(0)); else pair.swap(amount0Out, amount1Out, to, new bytes(0)); } } function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) { TransferHelper.safeTransferFrom( path[0], msg.sender, ShibnobiLibrary.pairFor(factory, path[0], path[1]), amountIn ); uint256 balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to, fees); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, "ShibnobiRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline, address referral ) external payable virtual override ensure(deadline) { require(path[0] == WETH, "ShibnobiRouter: INVALID_PATH"); uint256 amountIn = msg.value; uint256 amountInWithFee = handleReferral(amountIn, referral); IWETH(WETH).deposit{value: amountInWithFee}(); assert(IWETH(WETH).transfer(ShibnobiLibrary.pairFor(factory, path[0], path[1]), amountInWithFee)); uint256 balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to, 10000); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, "ShibnobiRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); } function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline, address referral ) external virtual override ensure(deadline) { require(path[path.length - 1] == WETH, "ShibnobiRouter: INVALID_PATH"); TransferHelper.safeTransferFrom( path[0], msg.sender, ShibnobiLibrary.pairFor(factory, path[0], path[1]), amountIn ); _swapSupportingFeeOnTransferTokens(path, address(this), 10000); uint256 amountOut = IERC20(WETH).balanceOf(address(this)); require(amountOut >= amountOutMin, "ShibnobiRouter: INSUFFICIENT_OUTPUT_AMOUNT"); IWETH(WETH).withdraw(amountOut); uint256 amountOutWithFee = handleReferral(amountOut, referral); TransferHelper.safeTransferETH(to, amountOutWithFee); } // **** LIBRARY FUNCTIONS **** function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) public pure virtual override returns (uint256 amountB) { return ShibnobiLibrary.quote(amountA, reserveA, reserveB); } function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut, uint16 fees_ ) public pure virtual override returns (uint256 amountOut) { return ShibnobiLibrary.getAmountOut(amountIn, reserveIn, reserveOut, fees_); } function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut, uint16 fees_ ) public pure virtual override returns (uint256 amountIn) { return ShibnobiLibrary.getAmountIn(amountOut, reserveIn, reserveOut, fees_); } function getAmountsOut(uint256 amountIn, address[] memory path, uint16 fees_) public view virtual override returns (uint256[] memory amounts) { return ShibnobiLibrary.getAmountsOut(factory, amountIn, path, fees_); } function getAmountsIn(uint256 amountOut, address[] memory path, uint16 fees_) public view virtual override returns (uint256[] memory amounts) { return ShibnobiLibrary.getAmountsIn(factory, amountOut, path, fees_); } function getClaims(address user) external override view returns (uint256) { return _claims[user]; } function claim() override external { uint256 amount = _claims[msg.sender]; require(amount > 0, "Nothing to claim"); _claims[msg.sender] = 0; TransferHelper.safeTransferETH(msg.sender, amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeSetter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fees","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"},{"internalType":"uint16","name":"fees_","type":"uint16"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"},{"internalType":"uint16","name":"fees_","type":"uint16"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"uint16","name":"fees_","type":"uint16"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"uint16","name":"fees_","type":"uint16"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getClaims","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeSetter","type":"address"}],"name":"setFeeSetter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_fees","type":"uint16"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"address","name":"referral","type":"address"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"address","name":"referral","type":"address"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"address","name":"referral","type":"address"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"address","name":"referral","type":"address"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"address","name":"referral","type":"address"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"address","name":"referral","type":"address"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526001805461ffff60a01b19166126f760a01b1761ffff60b01b191661027160b41b17905534801561003457600080fd5b5060405162005084380380620050848339818101604052604081101561005957600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a052600180546001600160a01b0319163317905560805160601c60a05160601c614eba620001ca600039806101ec5280610ecc5280610f075280610fdf528061107e52806110f2528061154152806117315280611848528061198f5280611a035280611b8a5280611ce25280611d6a52806120b252806121f852806122ae52806123de528061290f5280612a625280612add5280612b8c5280613026528061329952806132ef52806133235280613397525080611124528061140152806115cf52806116aa52806118db5280611a355280611c2b5280611d9c5280611ee85280611fce528061216152806123bc528061252c528061274b52806127d45280612898528061299d5280612cdd5280612ed55280613004528061317152806132cd52806139625280613ae252806140e2528061411e52806142635280614799528061484752806148c75250614eba6000f3fe6080604052600436106101dc5760003560e01c80638803dbee11610102578063baa2abde11610095578063ded9382a11610064578063ded9382a14610d06578063e8e3370014610d79578063f305d71914610df9578063f6eab62114610e3f57610215565b8063baa2abde14610c33578063c45a015514610c90578063ca1123c214610ca5578063d0d46a0b14610cd357610215565b8063ad5c4648116100d1578063ad5c464814610b62578063ad615dec14610b77578063af2979eb14610bad578063b19805af14610c0057610215565b80638803dbee1461095c57806395009df6146109f2578063962efddb14610aad5780639af1d35a14610b4d57610215565b806338ed17391161017a5780635c11d795116101495780635c11d7951461079a57806361d7b100146108305780637c20d1591461087057806387cf3ef41461092b57610215565b806338ed1739146105ca5780633d0e3ec5146106605780634e71d92d146107005780635b0d59841461071557610215565b80632195995c116101b65780632195995c146103405780632232ea43146103be5780632f100e4a146104ae578063344933be1461053c57610215565b806302751cec1461021a578063088890dc14610286578063180b0d7e1461031457610215565b3661021557336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461021357fe5b005b600080fd5b34801561022657600080fd5b5061026d600480360360c081101561023d57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610e7f565b6040805192835260208301919091528051918290030190f35b610213600480360360a081101561029c57600080fd5b81359190810190604081016020820135600160201b8111156102bd57600080fd5b8201836020820111156102cf57600080fd5b803590602001918460208302840111600160201b831117156102f057600080fd5b91935091506001600160a01b03813581169160208101359160409091013516610f99565b34801561032057600080fd5b506103296113e6565b6040805161ffff9092168252519081900360200190f35b34801561034c57600080fd5b5061026d600480360361016081101561036457600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff61010082013516906101208101359061014001356113f7565b3480156103ca57600080fd5b5061045e600480360360c08110156103e157600080fd5b813591602081013591810190606081016040820135600160201b81111561040757600080fd5b82018360208201111561041957600080fd5b803590602001918460208302840111600160201b8311171561043a57600080fd5b91935091506001600160a01b038135811691602081013591604090910135166114f1565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561049a578181015183820152602001610482565b505050509050019250505060405180910390f35b61045e600480360360a08110156104c457600080fd5b81359190810190604081016020820135600160201b8111156104e557600080fd5b8201836020820111156104f757600080fd5b803590602001918460208302840111600160201b8311171561051857600080fd5b91935091506001600160a01b03813581169160208101359160409091013516611800565b61045e600480360360a081101561055257600080fd5b81359190810190604081016020820135600160201b81111561057357600080fd5b82018360208201111561058557600080fd5b803590602001918460208302840111600160201b831117156105a657600080fd5b91935091506001600160a01b03813581169160208101359160409091013516611b42565b3480156105d657600080fd5b5061045e600480360360a08110156105ed57600080fd5b813591602081013591810190606081016040820135600160201b81111561061357600080fd5b82018360208201111561062557600080fd5b803590602001918460208302840111600160201b8311171561064657600080fd5b91935091506001600160a01b038135169060200135611e9d565b34801561066c57600080fd5b50610213600480360360c081101561068357600080fd5b813591602081013591810190606081016040820135600160201b8111156106a957600080fd5b8201836020820111156106bb57600080fd5b803590602001918460208302840111600160201b831117156106dc57600080fd5b91935091506001600160a01b03813581169160208101359160409091013516612064565b34801561070c57600080fd5b50610213612342565b34801561072157600080fd5b50610788600480360361014081101561073957600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356123b4565b60408051918252519081900360200190f35b3480156107a657600080fd5b50610213600480360360a08110156107bd57600080fd5b813591602081013591810190606081016040820135600160201b8111156107e357600080fd5b8201836020820111156107f557600080fd5b803590602001918460208302840111600160201b8311171561081657600080fd5b91935091506001600160a01b0381351690602001356124c2565b34801561083c57600080fd5b506107886004803603608081101561085357600080fd5b508035906020810135906040810135906060013561ffff1661272d565b34801561087c57600080fd5b5061045e6004803603606081101561089357600080fd5b81359190810190604081016020820135600160201b8111156108b457600080fd5b8201836020820111156108c657600080fd5b803590602001918460208302840111600160201b831117156108e757600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505050903561ffff1691506127449050565b34801561093757600080fd5b5061094061277a565b604080516001600160a01b039092168252519081900360200190f35b34801561096857600080fd5b5061045e600480360360a081101561097f57600080fd5b813591602081013591810190606081016040820135600160201b8111156109a557600080fd5b8201836020820111156109b757600080fd5b803590602001918460208302840111600160201b831117156109d857600080fd5b91935091506001600160a01b038135169060200135612789565b3480156109fe57600080fd5b5061045e60048036036060811015610a1557600080fd5b81359190810190604081016020820135600160201b811115610a3657600080fd5b820183602082011115610a4857600080fd5b803590602001918460208302840111600160201b83111715610a6957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505050903561ffff1691506128919050565b348015610ab957600080fd5b5061045e600480360360c0811015610ad057600080fd5b813591602081013591810190606081016040820135600160201b811115610af657600080fd5b820183602082011115610b0857600080fd5b803590602001918460208302840111600160201b83111715610b2957600080fd5b91935091506001600160a01b038135811691602081013591604090910135166128bf565b348015610b5957600080fd5b50610329612a4f565b348015610b6e57600080fd5b50610940612a60565b348015610b8357600080fd5b5061078860048036036060811015610b9a57600080fd5b5080359060208101359060400135612a84565b348015610bb957600080fd5b50610788600480360360c0811015610bd057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612a91565b348015610c0c57600080fd5b5061021360048036036020811015610c2357600080fd5b50356001600160a01b0316612c12565b348015610c3f57600080fd5b5061026d600480360360e0811015610c5657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612c8f565b348015610c9c57600080fd5b50610940612ed3565b348015610cb157600080fd5b5061021360048036036020811015610cc857600080fd5b503561ffff16612ef7565b348015610cdf57600080fd5b5061078860048036036020811015610cf657600080fd5b50356001600160a01b0316612fdf565b348015610d1257600080fd5b5061026d6004803603610140811015610d2a57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612ffa565b348015610d8557600080fd5b50610ddb6004803603610100811015610d9d57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e0013561310e565b60408051938452602084019290925282820152519081900360600190f35b610ddb600480360360c0811015610e0f57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561324a565b348015610e4b57600080fd5b5061078860048036036080811015610e6257600080fd5b508035906020810135906040810135906060013561ffff166134ef565b6000808242811015610ec6576040805162461bcd60e51b81526020600482015260176024820152600080516020614df6833981519152604482015290519081900360640190fd5b610ef5897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612c8f565b9093509150610f058986856134fd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f6b57600080fd5b505af1158015610f7f573d6000803e3d6000fd5b50505050610f8d8583613651565b50965096945050505050565b8142811015610fdd576040805162461bcd60e51b81526020600482015260176024820152600080516020614df6833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168686600081811061101457fe5b905060200201356001600160a01b03166001600160a01b03161461106d576040805162461bcd60e51b815260206004820152601c6024820152600080516020614c55833981519152604482015290519081900360640190fd5b34600061107a8285613749565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156110d757600080fd5b505af11580156110eb573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6111827f00000000000000000000000000000000000000000000000000000000000000008b8b600081811061115057fe5b905060200201356001600160a01b03168c8c600181811061116d57fe5b905060200201356001600160a01b031661384b565b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156111d257600080fd5b505af11580156111e6573d6000803e3d6000fd5b505050506040513d60208110156111fc57600080fd5b505161120457fe5b60008888600019810181811061121657fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561127b57600080fd5b505afa15801561128f573d6000803e3d6000fd5b505050506040513d60208110156112a557600080fd5b50516040805160208b810282810182019093528b82529293506112eb9290918c918c9182918501908490808284376000920191909152508b9250612710915061390b9050565b8961139d828b8b600019810181811061130057fe5b905060200201356001600160a01b03166001600160a01b03166370a082318b6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561136557600080fd5b505afa158015611379573d6000803e3d6000fd5b505050506040513d602081101561138f57600080fd5b50519063ffffffff613d3216565b10156113da5760405162461bcd60e51b815260040180806020018281038252602a815260200180614d53602a913960400191505060405180910390fd5b50505050505050505050565b600154600160b01b900461ffff1681565b60008060006114277f00000000000000000000000000000000000000000000000000000000000000008f8f61384b565b9050600087611436578c61143a565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156114b057600080fd5b505af11580156114c4573d6000803e3d6000fd5b505050506114d78f8f8f8f8f8f8f612c8f565b809450819550505050509b509b9950505050505050505050565b60608242811015611537576040805162461bcd60e51b81526020600482015260176024820152600080516020614df6833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168787600019810181811061157157fe5b905060200201356001600160a01b03166001600160a01b0316146115ca576040805162461bcd60e51b815260206004820152601c6024820152600080516020614c55833981519152604482015290519081900360640190fd5b61162c7f00000000000000000000000000000000000000000000000000000000000000008a8989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506127109250613d88915050565b9150878260018451038151811061163f57fe5b602002602001015110156116845760405162461bcd60e51b815260040180806020018281038252602a815260200180614d53602a913960400191505060405180910390fd5b6116f08787600081811061169457fe5b905060200201356001600160a01b0316336116d67f00000000000000000000000000000000000000000000000000000000000000008b8b600081811061115057fe5b856000815181106116e357fe5b6020026020010151613ed6565b61172f82888880806020026020016040519081016040528093929190818152602001838360200280828437600092018290525030935091506140339050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061176e57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156117ac57600080fd5b505af11580156117c0573d6000803e3d6000fd5b5050505060006117e7836001855103815181106117d957fe5b602002602001015185613749565b90506117f38682613651565b5050979650505050505050565b60608242811015611846576040805162461bcd60e51b81526020600482015260176024820152600080516020614df6833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168787600081811061187d57fe5b905060200201356001600160a01b03166001600160a01b0316146118d6576040805162461bcd60e51b815260206004820152601c6024820152600080516020614c55833981519152604482015290519081900360640190fd5b6119387f00000000000000000000000000000000000000000000000000000000000000008989898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061271092506143b2915050565b9150600061194c836000815181106117d957fe5b90503481111561198d5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e5f6026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156119e857600080fd5b505af11580156119fc573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611a617f00000000000000000000000000000000000000000000000000000000000000008b8b600081811061115057fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611ab157600080fd5b505af1158015611ac5573d6000803e3d6000fd5b505050506040513d6020811015611adb57600080fd5b5051611ae357fe5b611b228389898080602002602001604051908101604052809392919081815260200183836020028082843760009201829052508c935091506140339050565b80341115611b3657611b3633823403613651565b50509695505050505050565b60608242811015611b88576040805162461bcd60e51b81526020600482015260176024820152600080516020614df6833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031687876000818110611bbf57fe5b905060200201356001600160a01b03166001600160a01b031614611c18576040805162461bcd60e51b815260206004820152601c6024820152600080516020614c55833981519152604482015290519081900360640190fd5b6000611c243485613749565b9050611c887f0000000000000000000000000000000000000000000000000000000000000000828a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506127109250613d88915050565b92508883600185510381518110611c9b57fe5b60200260200101511015611ce05760405162461bcd60e51b815260040180806020018281038252602a815260200180614d53602a913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db084600081518110611d1c57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d4f57600080fd5b505af1158015611d63573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611dc87f00000000000000000000000000000000000000000000000000000000000000008b8b600081811061115057fe5b85600081518110611dd557fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611e2c57600080fd5b505af1158015611e40573d6000803e3d6000fd5b505050506040513d6020811015611e5657600080fd5b5051611e5e57fe5b611b368389898080602002602001604051908101604052809392919081815260200183836020028082843760009201829052508c935091506140339050565b60608142811015611ee3576040805162461bcd60e51b81526020600482015260176024820152600080516020614df6833981519152604482015290519081900360640190fd5b611f507f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600154600160a01b900461ffff169150613d889050565b91508682600184510381518110611f6357fe5b60200260200101511015611fa85760405162461bcd60e51b815260040180806020018281038252602a815260200180614d53602a913960400191505060405180910390fd5b61201786866000818110611fb857fe5b905060200201356001600160a01b0316336116d67f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110611ffa57fe5b905060200201356001600160a01b03168b8b600181811061116d57fe5b61205982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250600191506140339050565b509695505050505050565b81428110156120a8576040805162461bcd60e51b81526020600482015260176024820152600080516020614df6833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106120e257fe5b905060200201356001600160a01b03166001600160a01b03161461213b576040805162461bcd60e51b815260206004820152601c6024820152600080516020614c55833981519152604482015290519081900360640190fd5b6121938686600081811061214b57fe5b905060200201356001600160a01b03163361218d7f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110611ffa57fe5b8b613ed6565b6121d5868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250612710915061390b9050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b15801561223f57600080fd5b505afa158015612253573d6000803e3d6000fd5b505050506040513d602081101561226957600080fd5b50519050878110156122ac5760405162461bcd60e51b815260040180806020018281038252602a815260200180614d53602a913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561231257600080fd5b505af1158015612326573d6000803e3d6000fd5b5050505060006123368285613749565b90506113da8682613651565b3360009081526020819052604090205480612397576040805162461bcd60e51b815260206004820152601060248201526f4e6f7468696e6720746f20636c61696d60801b604482015290519081900360640190fd5b336000818152602081905260408120556123b19082613651565b50565b6000806124027f00000000000000000000000000000000000000000000000000000000000000008d7f000000000000000000000000000000000000000000000000000000000000000061384b565b9050600086612411578b612415565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561248b57600080fd5b505af115801561249f573d6000803e3d6000fd5b505050506124b18d8d8d8d8d8d612a91565b9d9c50505050505050505050505050565b8042811015612506576040805162461bcd60e51b81526020600482015260176024820152600080516020614df6833981519152604482015290519081900360640190fd5b61257b8585600081811061251657fe5b905060200201356001600160a01b0316336125757f00000000000000000000000000000000000000000000000000000000000000008989600081811061255857fe5b905060200201356001600160a01b03168a8a600181811061116d57fe5b8a613ed6565b60008585600019810181811061258d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156125f257600080fd5b505afa158015612606573d6000803e3d6000fd5b505050506040513d602081101561261c57600080fd5b5051604080516020888102828101820190935288825292935061266c92909189918991829185019084908082843760009201919091525050600154889250600160a01b900461ffff16905061390b565b866126e6828888600019810181811061268157fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561136557600080fd5b10156127235760405162461bcd60e51b815260040180806020018281038252602a815260200180614d53602a913960400191505060405180910390fd5b5050505050505050565b600061273b858585856144eb565b95945050505050565b60606127727f00000000000000000000000000000000000000000000000000000000000000008585856143b2565b949350505050565b6001546001600160a01b031681565b606081428110156127cf576040805162461bcd60e51b81526020600482015260176024820152600080516020614df6833981519152604482015290519081900360640190fd5b61283c7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600154600160a01b900461ffff1691506143b29050565b9150868260008151811061284c57fe5b60200260200101511115611fa85760405162461bcd60e51b8152600401808060200182810382526026815260200180614e5f6026913960400191505060405180910390fd5b60606127727f0000000000000000000000000000000000000000000000000000000000000000858585613d88565b60608242811015612905576040805162461bcd60e51b81526020600482015260176024820152600080516020614df6833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168787600019810181811061293f57fe5b905060200201356001600160a01b03166001600160a01b031614612998576040805162461bcd60e51b815260206004820152601c6024820152600080516020614c55833981519152604482015290519081900360640190fd5b6129fa7f00000000000000000000000000000000000000000000000000000000000000008a89898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061271092506143b2915050565b91508782600081518110612a0a57fe5b602002602001015111156116845760405162461bcd60e51b8152600401808060200182810382526026815260200180614e5f6026913960400191505060405180910390fd5b600154600160a01b900461ffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006127728484846145de565b60008142811015612ad7576040805162461bcd60e51b81526020600482015260176024820152600080516020614df6833981519152604482015290519081900360640190fd5b612b06887f00000000000000000000000000000000000000000000000000000000000000008989893089612c8f565b604080516370a0823160e01b81523060048201529051919450612b8a92508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015612b5957600080fd5b505afa158015612b6d573d6000803e3d6000fd5b505050506040513d6020811015612b8357600080fd5b50516134fd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612bf057600080fd5b505af1158015612c04573d6000803e3d6000fd5b505050506120598483613651565b6001546001600160a01b03163314612c6d576040805162461bcd60e51b815260206004820152601960248201527829b434b13737b134a937baba32b91d102327a92124a22222a760391b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000808242811015612cd6576040805162461bcd60e51b81526020600482015260176024820152600080516020614df6833981519152604482015290519081900360640190fd5b6000612d037f00000000000000000000000000000000000000000000000000000000000000008c8c61384b565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612d5e57600080fd5b505af1158015612d72573d6000803e3d6000fd5b505050506040513d6020811015612d8857600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612dd557600080fd5b505af1158015612de9573d6000803e3d6000fd5b505050506040513d6040811015612dff57600080fd5b50805160209091015190925090506000612e198e8e61468a565b509050806001600160a01b03168e6001600160a01b031614612e3c578183612e3f565b82825b90975095508a871015612e835760405162461bcd60e51b8152600401808060200182810382526025815260200180614e166025913960400191505060405180910390fd5b89861015612ec25760405162461bcd60e51b8152600401808060200182810382526025815260200180614d7d6025913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001546001600160a01b03163314612f52576040805162461bcd60e51b815260206004820152601960248201527829b434b13737b134a937baba32b91d102327a92124a22222a760391b604482015290519081900360640190fd5b60015461ffff600160b01b82048116600160a01b909204161115612fbd576040805162461bcd60e51b815260206004820152601c60248201527f536869626e6f6269526f757465723a20494e56414c49445f4645455300000000604482015290519081900360640190fd5b6001805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b6001600160a01b031660009081526020819052604090205490565b600080600061304a7f00000000000000000000000000000000000000000000000000000000000000008e7f000000000000000000000000000000000000000000000000000000000000000061384b565b9050600087613059578c61305d565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156130d357600080fd5b505af11580156130e7573d6000803e3d6000fd5b505050506130f98e8e8e8e8e8e610e7f565b909f909e509c50505050505050505050505050565b60008060008342811015613157576040805162461bcd60e51b81526020600482015260176024820152600080516020614df6833981519152604482015290519081900360640190fd5b6131658c8c8c8c8c8c614768565b909450925060006131977f00000000000000000000000000000000000000000000000000000000000000008e8e61384b565b90506131a58d338388613ed6565b6131b18c338387613ed6565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561320957600080fd5b505af115801561321d573d6000803e3d6000fd5b505050506040513d602081101561323357600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015613293576040805162461bcd60e51b81526020600482015260176024820152600080516020614df6833981519152604482015290519081900360640190fd5b6132c18a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614768565b909450925060006133137f00000000000000000000000000000000000000000000000000000000000000008c7f000000000000000000000000000000000000000000000000000000000000000061384b565b90506133218b338388613ed6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561337c57600080fd5b505af1158015613390573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561341557600080fd5b505af1158015613429573d6000803e3d6000fd5b505050506040513d602081101561343f57600080fd5b505161344757fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561349f57600080fd5b505af11580156134b3573d6000803e3d6000fd5b505050506040513d60208110156134c957600080fd5b50519250348410156134e1576134e133853403613651565b505096509650969350505050565b600061273b858585856149dc565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b6020831061357a5780518252601f19909201916020918201910161355b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146135dc576040519150601f19603f3d011682016040523d82523d6000602084013e6135e1565b606091505b509150915081801561360f57508051158061360f575080806020019051602081101561360c57600080fd5b50515b61364a5760405162461bcd60e51b815260040180806020018281038252602d815260200180614dc9602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061369d5780518252601f19909201916020918201910161367e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146136ff576040519150601f19603f3d011682016040523d82523d6000602084013e613704565b606091505b50509050806137445760405162461bcd60e51b8152600401808060200182810382526034815260200180614ca66034913960400191505060405180910390fd5b505050565b60015460009061ffff600160b01b8204811691613775918691600160a01b90041663ffffffff614acf16565b8161377c57fe5b0490506000613791848363ffffffff613d3216565b90506001600160a01b03831615806137b157506001600160a01b03831632145b15613801576001546001600160a01b03166000908152602081905260409020546137e1908263ffffffff614b3216565b6001546001600160a01b0316600090815260208190526040902055613844565b6001600160a01b03831660009081526020819052604090205461382a908263ffffffff614b3216565b6001600160a01b0384166000908152602081905260409020555b5092915050565b600080600061385a858561468a565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527fb6916cae0863909d91d47f1ec6beafccf2d2f4487a1c0d0d092c27f31b4b26ab609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b60005b6001845103811015613d2c5760008085838151811061392957fe5b602002602001015186846001018151811061394057fe5b6020026020010151915091506000613958838361468a565b50905060006139887f0000000000000000000000000000000000000000000000000000000000000000858561384b565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156139c957600080fd5b505afa1580156139dd573d6000803e3d6000fd5b505050506040513d60608110156139f357600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613a29578284613a2c565b83835b91509150613a8a828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561136557600080fd5b9550613a988683838f6149dc565b945050505050600080856001600160a01b0316886001600160a01b031614613ac257826000613ac6565b6000835b91509150600060028d51038a10613add578b613b1e565b613b1e7f0000000000000000000000000000000000000000000000000000000000000000898f8d60020181518110613b1157fe5b602002602001015161384b565b60015490915061ffff8c8116600160b01b909204161415613c2a576040805160008082526020820192839052632c86e5a560e11b835260248201868152604483018690526001600160a01b038581166064850152608060848501908152845160a48601819052918c169563590dcb4a958a958a958a9592949093909260c48601928190849084905b83811015613bbe578181015183820152602001613ba6565b50505050905090810190601f168015613beb5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613c0d57600080fd5b505af1158015613c21573d6000803e3d6000fd5b50505050613d17565b604080516000808252602082019283905263022c0d9f60e01b835260248201868152604483018690526001600160a01b038581166064850152608060848501908152845160a48601819052918c169563022c0d9f958a958a958a9592949093909260c48601928190849084905b83811015613caf578181015183820152602001613c97565b50505050905090810190601f168015613cdc5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cfe57600080fd5b505af1158015613d12573d6000803e3d6000fd5b505050505b50506001909701965061390e95505050505050565b50505050565b80820382811115613d82576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b92915050565b6060600283511015613de1576040805162461bcd60e51b815260206004820152601d60248201527f536869626e6f62694c6962726172793a20494e56414c49445f50415448000000604482015290519081900360640190fd5b825167ffffffffffffffff81118015613df957600080fd5b50604051908082528060200260200182016040528015613e23578160200160208202803683370190505b5090508381600081518110613e3457fe5b60200260200101818152505060005b6001845103811015613ecd57600080613e8688878581518110613e6257fe5b6020026020010151888660010181518110613e7957fe5b6020026020010151614b81565b91509150613ea9848481518110613e9957fe5b60200260200101518383886149dc565b848460010181518110613eb857fe5b60209081029190910101525050600101613e43565b50949350505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310613f5b5780518252601f199092019160209182019101613f3c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613fbd576040519150601f19603f3d011682016040523d82523d6000602084013e613fc2565b606091505b5091509150818015613ff0575080511580613ff05750808060200190516020811015613fed57600080fd5b50515b61402b5760405162461bcd60e51b8152600401808060200182810382526031815260200180614c756031913960400191505060405180910390fd5b505050505050565b60005b600184510381101561364a5760008085838151811061405157fe5b602002602001015186846001018151811061406857fe5b6020026020010151915091506000614080838361468a565b509050600088856001018151811061409457fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146140c2578260006140c6565b6000835b91509150600060028b510388106140dd5789614111565b6141117f0000000000000000000000000000000000000000000000000000000000000000878d8b60020181518110613b1157fe5b9050881561425e576141447f0000000000000000000000000000000000000000000000000000000000000000888861384b565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015614181576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156141f25781810151838201526020016141da565b50505050905090810190601f16801561421f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561424157600080fd5b505af1158015614255573d6000803e3d6000fd5b5050505061439f565b6142897f0000000000000000000000000000000000000000000000000000000000000000888861384b565b6001600160a01b031663590dcb4a84848460006040519080825280601f01601f1916602001820160405280156142c6576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561433757818101518382015260200161431f565b50505050905090810190601f1680156143645780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561438657600080fd5b505af115801561439a573d6000803e3d6000fd5b505050505b5050600190950194506140369350505050565b606060028351101561440b576040805162461bcd60e51b815260206004820152601d60248201527f536869626e6f62694c6962726172793a20494e56414c49445f50415448000000604482015290519081900360640190fd5b825167ffffffffffffffff8111801561442357600080fd5b5060405190808252806020026020018201604052801561444d578160200160208202803683370190505b509050838160018351038151811061446157fe5b60209081029190910101528251600019015b8015613ecd576000806144a38887600186038151811061448f57fe5b6020026020010151888681518110613e7957fe5b915091506144c68484815181106144b657fe5b60200260200101518383886144eb565b8460018503815181106144d557fe5b6020908102919091010152505060001901614473565b600080851161452b5760405162461bcd60e51b815260040180806020018281038252602b815260200180614d28602b913960400191505060405180910390fd5b60008411801561453b5750600083115b6145765760405162461bcd60e51b8152600401808060200182810382526027815260200180614da26027913960400191505060405180910390fd5b600061459a61271061458e878963ffffffff614acf16565b9063ffffffff614acf16565b905060006145b661ffff851661458e878a63ffffffff613d3216565b90506145d360018284816145c657fe5b049063ffffffff614b3216565b979650505050505050565b600080841161461e5760405162461bcd60e51b8152600401808060200182810382526024815260200180614e3b6024913960400191505060405180910390fd5b60008311801561462e5750600082115b6146695760405162461bcd60e51b8152600401808060200182810382526027815260200180614da26027913960400191505060405180910390fd5b8261467a858463ffffffff614acf16565b8161468157fe5b04949350505050565b600080826001600160a01b0316846001600160a01b031614156146de5760405162461bcd60e51b8152600401808060200182810382526024815260200180614cda6024913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b0316106146fe578284614701565b83835b90925090506001600160a01b038216614761576040805162461bcd60e51b815260206004820152601d60248201527f536869626e6f62694c6962726172793a205a45524f5f41444452455353000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b1580156147e257600080fd5b505afa1580156147f6573d6000803e3d6000fd5b505050506040513d602081101561480c57600080fd5b50516001600160a01b031614156148bf57604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561489257600080fd5b505af11580156148a6573d6000803e3d6000fd5b505050506040513d60208110156148bc57600080fd5b50505b6000806148ed7f00000000000000000000000000000000000000000000000000000000000000008b8b614b81565b915091508160001480156148ff575080155b1561490f578793508692506149cf565b600061491c8984846145de565b905087811161496f57858110156149645760405162461bcd60e51b8152600401808060200182810382526025815260200180614d7d6025913960400191505060405180910390fd5b8894509250826149cd565b600061497c8984866145de565b90508981111561498857fe5b878110156149c75760405162461bcd60e51b8152600401808060200182810382526025815260200180614e166025913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6000808511614a1c5760405162461bcd60e51b815260040180806020018281038252602a815260200180614cfe602a913960400191505060405180910390fd5b600084118015614a2c5750600083115b614a675760405162461bcd60e51b8152600401808060200182810382526027815260200180614da26027913960400191505060405180910390fd5b6000614a7d8661ffff851663ffffffff614acf16565b90506000614a91828663ffffffff614acf16565b90506000614ab783614aab8961271063ffffffff614acf16565b9063ffffffff614b3216565b9050808281614ac257fe5b0498975050505050505050565b6000811580614aea57505080820282828281614ae757fe5b04145b613d82576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015613d82576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b6000806000614b90858561468a565b509050614b9e86868661384b565b50600080614bad88888861384b565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015614be557600080fd5b505afa158015614bf9573d6000803e3d6000fd5b505050506040513d6060811015614c0f57600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b0387811690841614614c42578082614c45565b81815b9099909850965050505050505056fe536869626e6f6269526f757465723a20494e56414c49445f50415448000000005472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c6564536869626e6f62694c6962726172793a204944454e544943414c5f414444524553534553536869626e6f62694c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54536869626e6f62694c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54536869626e6f6269526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54536869626e6f6269526f757465723a20494e53554646494349454e545f425f414d4f554e54536869626e6f62694c6962726172793a20494e53554646494349454e545f4c49515549444954595472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c6564536869626e6f6269526f757465723a2045585049524544000000000000000000536869626e6f6269526f757465723a20494e53554646494349454e545f415f414d4f554e54536869626e6f62694c6962726172793a20494e53554646494349454e545f414d4f554e54536869626e6f6269526f757465723a204558434553534956455f494e5055545f414d4f554e54a264697066735822122000f651b3c90198e75bf57dc2abe5ee03d86a4760b2afc1ba5d3dbeb3abddd77c64736f6c63430006060033000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b7000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Deployed Bytecode
0x6080604052600436106101dc5760003560e01c80638803dbee11610102578063baa2abde11610095578063ded9382a11610064578063ded9382a14610d06578063e8e3370014610d79578063f305d71914610df9578063f6eab62114610e3f57610215565b8063baa2abde14610c33578063c45a015514610c90578063ca1123c214610ca5578063d0d46a0b14610cd357610215565b8063ad5c4648116100d1578063ad5c464814610b62578063ad615dec14610b77578063af2979eb14610bad578063b19805af14610c0057610215565b80638803dbee1461095c57806395009df6146109f2578063962efddb14610aad5780639af1d35a14610b4d57610215565b806338ed17391161017a5780635c11d795116101495780635c11d7951461079a57806361d7b100146108305780637c20d1591461087057806387cf3ef41461092b57610215565b806338ed1739146105ca5780633d0e3ec5146106605780634e71d92d146107005780635b0d59841461071557610215565b80632195995c116101b65780632195995c146103405780632232ea43146103be5780632f100e4a146104ae578063344933be1461053c57610215565b806302751cec1461021a578063088890dc14610286578063180b0d7e1461031457610215565b3661021557336001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2161461021357fe5b005b600080fd5b34801561022657600080fd5b5061026d600480360360c081101561023d57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610e7f565b6040805192835260208301919091528051918290030190f35b610213600480360360a081101561029c57600080fd5b81359190810190604081016020820135600160201b8111156102bd57600080fd5b8201836020820111156102cf57600080fd5b803590602001918460208302840111600160201b831117156102f057600080fd5b91935091506001600160a01b03813581169160208101359160409091013516610f99565b34801561032057600080fd5b506103296113e6565b6040805161ffff9092168252519081900360200190f35b34801561034c57600080fd5b5061026d600480360361016081101561036457600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff61010082013516906101208101359061014001356113f7565b3480156103ca57600080fd5b5061045e600480360360c08110156103e157600080fd5b813591602081013591810190606081016040820135600160201b81111561040757600080fd5b82018360208201111561041957600080fd5b803590602001918460208302840111600160201b8311171561043a57600080fd5b91935091506001600160a01b038135811691602081013591604090910135166114f1565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561049a578181015183820152602001610482565b505050509050019250505060405180910390f35b61045e600480360360a08110156104c457600080fd5b81359190810190604081016020820135600160201b8111156104e557600080fd5b8201836020820111156104f757600080fd5b803590602001918460208302840111600160201b8311171561051857600080fd5b91935091506001600160a01b03813581169160208101359160409091013516611800565b61045e600480360360a081101561055257600080fd5b81359190810190604081016020820135600160201b81111561057357600080fd5b82018360208201111561058557600080fd5b803590602001918460208302840111600160201b831117156105a657600080fd5b91935091506001600160a01b03813581169160208101359160409091013516611b42565b3480156105d657600080fd5b5061045e600480360360a08110156105ed57600080fd5b813591602081013591810190606081016040820135600160201b81111561061357600080fd5b82018360208201111561062557600080fd5b803590602001918460208302840111600160201b8311171561064657600080fd5b91935091506001600160a01b038135169060200135611e9d565b34801561066c57600080fd5b50610213600480360360c081101561068357600080fd5b813591602081013591810190606081016040820135600160201b8111156106a957600080fd5b8201836020820111156106bb57600080fd5b803590602001918460208302840111600160201b831117156106dc57600080fd5b91935091506001600160a01b03813581169160208101359160409091013516612064565b34801561070c57600080fd5b50610213612342565b34801561072157600080fd5b50610788600480360361014081101561073957600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356123b4565b60408051918252519081900360200190f35b3480156107a657600080fd5b50610213600480360360a08110156107bd57600080fd5b813591602081013591810190606081016040820135600160201b8111156107e357600080fd5b8201836020820111156107f557600080fd5b803590602001918460208302840111600160201b8311171561081657600080fd5b91935091506001600160a01b0381351690602001356124c2565b34801561083c57600080fd5b506107886004803603608081101561085357600080fd5b508035906020810135906040810135906060013561ffff1661272d565b34801561087c57600080fd5b5061045e6004803603606081101561089357600080fd5b81359190810190604081016020820135600160201b8111156108b457600080fd5b8201836020820111156108c657600080fd5b803590602001918460208302840111600160201b831117156108e757600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505050903561ffff1691506127449050565b34801561093757600080fd5b5061094061277a565b604080516001600160a01b039092168252519081900360200190f35b34801561096857600080fd5b5061045e600480360360a081101561097f57600080fd5b813591602081013591810190606081016040820135600160201b8111156109a557600080fd5b8201836020820111156109b757600080fd5b803590602001918460208302840111600160201b831117156109d857600080fd5b91935091506001600160a01b038135169060200135612789565b3480156109fe57600080fd5b5061045e60048036036060811015610a1557600080fd5b81359190810190604081016020820135600160201b811115610a3657600080fd5b820183602082011115610a4857600080fd5b803590602001918460208302840111600160201b83111715610a6957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505050903561ffff1691506128919050565b348015610ab957600080fd5b5061045e600480360360c0811015610ad057600080fd5b813591602081013591810190606081016040820135600160201b811115610af657600080fd5b820183602082011115610b0857600080fd5b803590602001918460208302840111600160201b83111715610b2957600080fd5b91935091506001600160a01b038135811691602081013591604090910135166128bf565b348015610b5957600080fd5b50610329612a4f565b348015610b6e57600080fd5b50610940612a60565b348015610b8357600080fd5b5061078860048036036060811015610b9a57600080fd5b5080359060208101359060400135612a84565b348015610bb957600080fd5b50610788600480360360c0811015610bd057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612a91565b348015610c0c57600080fd5b5061021360048036036020811015610c2357600080fd5b50356001600160a01b0316612c12565b348015610c3f57600080fd5b5061026d600480360360e0811015610c5657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612c8f565b348015610c9c57600080fd5b50610940612ed3565b348015610cb157600080fd5b5061021360048036036020811015610cc857600080fd5b503561ffff16612ef7565b348015610cdf57600080fd5b5061078860048036036020811015610cf657600080fd5b50356001600160a01b0316612fdf565b348015610d1257600080fd5b5061026d6004803603610140811015610d2a57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612ffa565b348015610d8557600080fd5b50610ddb6004803603610100811015610d9d57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e0013561310e565b60408051938452602084019290925282820152519081900360600190f35b610ddb600480360360c0811015610e0f57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561324a565b348015610e4b57600080fd5b5061078860048036036080811015610e6257600080fd5b508035906020810135906040810135906060013561ffff166134ef565b6000808242811015610ec6576040805162461bcd60e51b81526020600482015260176024820152600080516020614df6833981519152604482015290519081900360640190fd5b610ef5897f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28a8a8a308a612c8f565b9093509150610f058986856134fd565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f6b57600080fd5b505af1158015610f7f573d6000803e3d6000fd5b50505050610f8d8583613651565b50965096945050505050565b8142811015610fdd576040805162461bcd60e51b81526020600482015260176024820152600080516020614df6833981519152604482015290519081900360640190fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03168686600081811061101457fe5b905060200201356001600160a01b03166001600160a01b03161461106d576040805162461bcd60e51b815260206004820152601c6024820152600080516020614c55833981519152604482015290519081900360640190fd5b34600061107a8285613749565b90507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156110d757600080fd5b505af11580156110eb573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663a9059cbb6111827f000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b78b8b600081811061115057fe5b905060200201356001600160a01b03168c8c600181811061116d57fe5b905060200201356001600160a01b031661384b565b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156111d257600080fd5b505af11580156111e6573d6000803e3d6000fd5b505050506040513d60208110156111fc57600080fd5b505161120457fe5b60008888600019810181811061121657fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561127b57600080fd5b505afa15801561128f573d6000803e3d6000fd5b505050506040513d60208110156112a557600080fd5b50516040805160208b810282810182019093528b82529293506112eb9290918c918c9182918501908490808284376000920191909152508b9250612710915061390b9050565b8961139d828b8b600019810181811061130057fe5b905060200201356001600160a01b03166001600160a01b03166370a082318b6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561136557600080fd5b505afa158015611379573d6000803e3d6000fd5b505050506040513d602081101561138f57600080fd5b50519063ffffffff613d3216565b10156113da5760405162461bcd60e51b815260040180806020018281038252602a815260200180614d53602a913960400191505060405180910390fd5b50505050505050505050565b600154600160b01b900461ffff1681565b60008060006114277f000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b78f8f61384b565b9050600087611436578c61143a565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156114b057600080fd5b505af11580156114c4573d6000803e3d6000fd5b505050506114d78f8f8f8f8f8f8f612c8f565b809450819550505050509b509b9950505050505050505050565b60608242811015611537576040805162461bcd60e51b81526020600482015260176024820152600080516020614df6833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2168787600019810181811061157157fe5b905060200201356001600160a01b03166001600160a01b0316146115ca576040805162461bcd60e51b815260206004820152601c6024820152600080516020614c55833981519152604482015290519081900360640190fd5b61162c7f000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b78a8989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506127109250613d88915050565b9150878260018451038151811061163f57fe5b602002602001015110156116845760405162461bcd60e51b815260040180806020018281038252602a815260200180614d53602a913960400191505060405180910390fd5b6116f08787600081811061169457fe5b905060200201356001600160a01b0316336116d67f000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b78b8b600081811061115057fe5b856000815181106116e357fe5b6020026020010151613ed6565b61172f82888880806020026020016040519081016040528093929190818152602001838360200280828437600092018290525030935091506140339050565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d8360018551038151811061176e57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156117ac57600080fd5b505af11580156117c0573d6000803e3d6000fd5b5050505060006117e7836001855103815181106117d957fe5b602002602001015185613749565b90506117f38682613651565b5050979650505050505050565b60608242811015611846576040805162461bcd60e51b81526020600482015260176024820152600080516020614df6833981519152604482015290519081900360640190fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03168787600081811061187d57fe5b905060200201356001600160a01b03166001600160a01b0316146118d6576040805162461bcd60e51b815260206004820152601c6024820152600080516020614c55833981519152604482015290519081900360640190fd5b6119387f000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b78989898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061271092506143b2915050565b9150600061194c836000815181106117d957fe5b90503481111561198d5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e5f6026913960400191505060405180910390fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156119e857600080fd5b505af11580156119fc573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663a9059cbb611a617f000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b78b8b600081811061115057fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611ab157600080fd5b505af1158015611ac5573d6000803e3d6000fd5b505050506040513d6020811015611adb57600080fd5b5051611ae357fe5b611b228389898080602002602001604051908101604052809392919081815260200183836020028082843760009201829052508c935091506140339050565b80341115611b3657611b3633823403613651565b50509695505050505050565b60608242811015611b88576040805162461bcd60e51b81526020600482015260176024820152600080516020614df6833981519152604482015290519081900360640190fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031687876000818110611bbf57fe5b905060200201356001600160a01b03166001600160a01b031614611c18576040805162461bcd60e51b815260206004820152601c6024820152600080516020614c55833981519152604482015290519081900360640190fd5b6000611c243485613749565b9050611c887f000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b7828a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506127109250613d88915050565b92508883600185510381518110611c9b57fe5b60200260200101511015611ce05760405162461bcd60e51b815260040180806020018281038252602a815260200180614d53602a913960400191505060405180910390fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db084600081518110611d1c57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d4f57600080fd5b505af1158015611d63573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663a9059cbb611dc87f000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b78b8b600081811061115057fe5b85600081518110611dd557fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611e2c57600080fd5b505af1158015611e40573d6000803e3d6000fd5b505050506040513d6020811015611e5657600080fd5b5051611e5e57fe5b611b368389898080602002602001604051908101604052809392919081815260200183836020028082843760009201829052508c935091506140339050565b60608142811015611ee3576040805162461bcd60e51b81526020600482015260176024820152600080516020614df6833981519152604482015290519081900360640190fd5b611f507f000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b78988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600154600160a01b900461ffff169150613d889050565b91508682600184510381518110611f6357fe5b60200260200101511015611fa85760405162461bcd60e51b815260040180806020018281038252602a815260200180614d53602a913960400191505060405180910390fd5b61201786866000818110611fb857fe5b905060200201356001600160a01b0316336116d67f000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b78a8a6000818110611ffa57fe5b905060200201356001600160a01b03168b8b600181811061116d57fe5b61205982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250600191506140339050565b509695505050505050565b81428110156120a8576040805162461bcd60e51b81526020600482015260176024820152600080516020614df6833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216868660001981018181106120e257fe5b905060200201356001600160a01b03166001600160a01b03161461213b576040805162461bcd60e51b815260206004820152601c6024820152600080516020614c55833981519152604482015290519081900360640190fd5b6121938686600081811061214b57fe5b905060200201356001600160a01b03163361218d7f000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b78a8a6000818110611ffa57fe5b8b613ed6565b6121d5868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250612710915061390b9050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216916370a0823191602480820192602092909190829003018186803b15801561223f57600080fd5b505afa158015612253573d6000803e3d6000fd5b505050506040513d602081101561226957600080fd5b50519050878110156122ac5760405162461bcd60e51b815260040180806020018281038252602a815260200180614d53602a913960400191505060405180910390fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561231257600080fd5b505af1158015612326573d6000803e3d6000fd5b5050505060006123368285613749565b90506113da8682613651565b3360009081526020819052604090205480612397576040805162461bcd60e51b815260206004820152601060248201526f4e6f7468696e6720746f20636c61696d60801b604482015290519081900360640190fd5b336000818152602081905260408120556123b19082613651565b50565b6000806124027f000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b78d7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc261384b565b9050600086612411578b612415565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561248b57600080fd5b505af115801561249f573d6000803e3d6000fd5b505050506124b18d8d8d8d8d8d612a91565b9d9c50505050505050505050505050565b8042811015612506576040805162461bcd60e51b81526020600482015260176024820152600080516020614df6833981519152604482015290519081900360640190fd5b61257b8585600081811061251657fe5b905060200201356001600160a01b0316336125757f000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b78989600081811061255857fe5b905060200201356001600160a01b03168a8a600181811061116d57fe5b8a613ed6565b60008585600019810181811061258d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156125f257600080fd5b505afa158015612606573d6000803e3d6000fd5b505050506040513d602081101561261c57600080fd5b5051604080516020888102828101820190935288825292935061266c92909189918991829185019084908082843760009201919091525050600154889250600160a01b900461ffff16905061390b565b866126e6828888600019810181811061268157fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561136557600080fd5b10156127235760405162461bcd60e51b815260040180806020018281038252602a815260200180614d53602a913960400191505060405180910390fd5b5050505050505050565b600061273b858585856144eb565b95945050505050565b60606127727f000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b78585856143b2565b949350505050565b6001546001600160a01b031681565b606081428110156127cf576040805162461bcd60e51b81526020600482015260176024820152600080516020614df6833981519152604482015290519081900360640190fd5b61283c7f000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b78988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600154600160a01b900461ffff1691506143b29050565b9150868260008151811061284c57fe5b60200260200101511115611fa85760405162461bcd60e51b8152600401808060200182810382526026815260200180614e5f6026913960400191505060405180910390fd5b60606127727f000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b7858585613d88565b60608242811015612905576040805162461bcd60e51b81526020600482015260176024820152600080516020614df6833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2168787600019810181811061293f57fe5b905060200201356001600160a01b03166001600160a01b031614612998576040805162461bcd60e51b815260206004820152601c6024820152600080516020614c55833981519152604482015290519081900360640190fd5b6129fa7f000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b78a89898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061271092506143b2915050565b91508782600081518110612a0a57fe5b602002602001015111156116845760405162461bcd60e51b8152600401808060200182810382526026815260200180614e5f6026913960400191505060405180910390fd5b600154600160a01b900461ffff1681565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b60006127728484846145de565b60008142811015612ad7576040805162461bcd60e51b81526020600482015260176024820152600080516020614df6833981519152604482015290519081900360640190fd5b612b06887f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28989893089612c8f565b604080516370a0823160e01b81523060048201529051919450612b8a92508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015612b5957600080fd5b505afa158015612b6d573d6000803e3d6000fd5b505050506040513d6020811015612b8357600080fd5b50516134fd565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612bf057600080fd5b505af1158015612c04573d6000803e3d6000fd5b505050506120598483613651565b6001546001600160a01b03163314612c6d576040805162461bcd60e51b815260206004820152601960248201527829b434b13737b134a937baba32b91d102327a92124a22222a760391b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000808242811015612cd6576040805162461bcd60e51b81526020600482015260176024820152600080516020614df6833981519152604482015290519081900360640190fd5b6000612d037f000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b78c8c61384b565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612d5e57600080fd5b505af1158015612d72573d6000803e3d6000fd5b505050506040513d6020811015612d8857600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612dd557600080fd5b505af1158015612de9573d6000803e3d6000fd5b505050506040513d6040811015612dff57600080fd5b50805160209091015190925090506000612e198e8e61468a565b509050806001600160a01b03168e6001600160a01b031614612e3c578183612e3f565b82825b90975095508a871015612e835760405162461bcd60e51b8152600401808060200182810382526025815260200180614e166025913960400191505060405180910390fd5b89861015612ec25760405162461bcd60e51b8152600401808060200182810382526025815260200180614d7d6025913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b781565b6001546001600160a01b03163314612f52576040805162461bcd60e51b815260206004820152601960248201527829b434b13737b134a937baba32b91d102327a92124a22222a760391b604482015290519081900360640190fd5b60015461ffff600160b01b82048116600160a01b909204161115612fbd576040805162461bcd60e51b815260206004820152601c60248201527f536869626e6f6269526f757465723a20494e56414c49445f4645455300000000604482015290519081900360640190fd5b6001805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b6001600160a01b031660009081526020819052604090205490565b600080600061304a7f000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b78e7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc261384b565b9050600087613059578c61305d565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156130d357600080fd5b505af11580156130e7573d6000803e3d6000fd5b505050506130f98e8e8e8e8e8e610e7f565b909f909e509c50505050505050505050505050565b60008060008342811015613157576040805162461bcd60e51b81526020600482015260176024820152600080516020614df6833981519152604482015290519081900360640190fd5b6131658c8c8c8c8c8c614768565b909450925060006131977f000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b78e8e61384b565b90506131a58d338388613ed6565b6131b18c338387613ed6565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561320957600080fd5b505af115801561321d573d6000803e3d6000fd5b505050506040513d602081101561323357600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015613293576040805162461bcd60e51b81526020600482015260176024820152600080516020614df6833981519152604482015290519081900360640190fd5b6132c18a7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28b348c8c614768565b909450925060006133137f000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b78c7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc261384b565b90506133218b338388613ed6565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561337c57600080fd5b505af1158015613390573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561341557600080fd5b505af1158015613429573d6000803e3d6000fd5b505050506040513d602081101561343f57600080fd5b505161344757fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561349f57600080fd5b505af11580156134b3573d6000803e3d6000fd5b505050506040513d60208110156134c957600080fd5b50519250348410156134e1576134e133853403613651565b505096509650969350505050565b600061273b858585856149dc565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b6020831061357a5780518252601f19909201916020918201910161355b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146135dc576040519150601f19603f3d011682016040523d82523d6000602084013e6135e1565b606091505b509150915081801561360f57508051158061360f575080806020019051602081101561360c57600080fd5b50515b61364a5760405162461bcd60e51b815260040180806020018281038252602d815260200180614dc9602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061369d5780518252601f19909201916020918201910161367e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146136ff576040519150601f19603f3d011682016040523d82523d6000602084013e613704565b606091505b50509050806137445760405162461bcd60e51b8152600401808060200182810382526034815260200180614ca66034913960400191505060405180910390fd5b505050565b60015460009061ffff600160b01b8204811691613775918691600160a01b90041663ffffffff614acf16565b8161377c57fe5b0490506000613791848363ffffffff613d3216565b90506001600160a01b03831615806137b157506001600160a01b03831632145b15613801576001546001600160a01b03166000908152602081905260409020546137e1908263ffffffff614b3216565b6001546001600160a01b0316600090815260208190526040902055613844565b6001600160a01b03831660009081526020819052604090205461382a908263ffffffff614b3216565b6001600160a01b0384166000908152602081905260409020555b5092915050565b600080600061385a858561468a565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527fb6916cae0863909d91d47f1ec6beafccf2d2f4487a1c0d0d092c27f31b4b26ab609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b60005b6001845103811015613d2c5760008085838151811061392957fe5b602002602001015186846001018151811061394057fe5b6020026020010151915091506000613958838361468a565b50905060006139887f000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b7858561384b565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156139c957600080fd5b505afa1580156139dd573d6000803e3d6000fd5b505050506040513d60608110156139f357600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613a29578284613a2c565b83835b91509150613a8a828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561136557600080fd5b9550613a988683838f6149dc565b945050505050600080856001600160a01b0316886001600160a01b031614613ac257826000613ac6565b6000835b91509150600060028d51038a10613add578b613b1e565b613b1e7f000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b7898f8d60020181518110613b1157fe5b602002602001015161384b565b60015490915061ffff8c8116600160b01b909204161415613c2a576040805160008082526020820192839052632c86e5a560e11b835260248201868152604483018690526001600160a01b038581166064850152608060848501908152845160a48601819052918c169563590dcb4a958a958a958a9592949093909260c48601928190849084905b83811015613bbe578181015183820152602001613ba6565b50505050905090810190601f168015613beb5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613c0d57600080fd5b505af1158015613c21573d6000803e3d6000fd5b50505050613d17565b604080516000808252602082019283905263022c0d9f60e01b835260248201868152604483018690526001600160a01b038581166064850152608060848501908152845160a48601819052918c169563022c0d9f958a958a958a9592949093909260c48601928190849084905b83811015613caf578181015183820152602001613c97565b50505050905090810190601f168015613cdc5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cfe57600080fd5b505af1158015613d12573d6000803e3d6000fd5b505050505b50506001909701965061390e95505050505050565b50505050565b80820382811115613d82576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b92915050565b6060600283511015613de1576040805162461bcd60e51b815260206004820152601d60248201527f536869626e6f62694c6962726172793a20494e56414c49445f50415448000000604482015290519081900360640190fd5b825167ffffffffffffffff81118015613df957600080fd5b50604051908082528060200260200182016040528015613e23578160200160208202803683370190505b5090508381600081518110613e3457fe5b60200260200101818152505060005b6001845103811015613ecd57600080613e8688878581518110613e6257fe5b6020026020010151888660010181518110613e7957fe5b6020026020010151614b81565b91509150613ea9848481518110613e9957fe5b60200260200101518383886149dc565b848460010181518110613eb857fe5b60209081029190910101525050600101613e43565b50949350505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310613f5b5780518252601f199092019160209182019101613f3c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613fbd576040519150601f19603f3d011682016040523d82523d6000602084013e613fc2565b606091505b5091509150818015613ff0575080511580613ff05750808060200190516020811015613fed57600080fd5b50515b61402b5760405162461bcd60e51b8152600401808060200182810382526031815260200180614c756031913960400191505060405180910390fd5b505050505050565b60005b600184510381101561364a5760008085838151811061405157fe5b602002602001015186846001018151811061406857fe5b6020026020010151915091506000614080838361468a565b509050600088856001018151811061409457fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146140c2578260006140c6565b6000835b91509150600060028b510388106140dd5789614111565b6141117f000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b7878d8b60020181518110613b1157fe5b9050881561425e576141447f000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b7888861384b565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015614181576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156141f25781810151838201526020016141da565b50505050905090810190601f16801561421f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561424157600080fd5b505af1158015614255573d6000803e3d6000fd5b5050505061439f565b6142897f000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b7888861384b565b6001600160a01b031663590dcb4a84848460006040519080825280601f01601f1916602001820160405280156142c6576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561433757818101518382015260200161431f565b50505050905090810190601f1680156143645780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561438657600080fd5b505af115801561439a573d6000803e3d6000fd5b505050505b5050600190950194506140369350505050565b606060028351101561440b576040805162461bcd60e51b815260206004820152601d60248201527f536869626e6f62694c6962726172793a20494e56414c49445f50415448000000604482015290519081900360640190fd5b825167ffffffffffffffff8111801561442357600080fd5b5060405190808252806020026020018201604052801561444d578160200160208202803683370190505b509050838160018351038151811061446157fe5b60209081029190910101528251600019015b8015613ecd576000806144a38887600186038151811061448f57fe5b6020026020010151888681518110613e7957fe5b915091506144c68484815181106144b657fe5b60200260200101518383886144eb565b8460018503815181106144d557fe5b6020908102919091010152505060001901614473565b600080851161452b5760405162461bcd60e51b815260040180806020018281038252602b815260200180614d28602b913960400191505060405180910390fd5b60008411801561453b5750600083115b6145765760405162461bcd60e51b8152600401808060200182810382526027815260200180614da26027913960400191505060405180910390fd5b600061459a61271061458e878963ffffffff614acf16565b9063ffffffff614acf16565b905060006145b661ffff851661458e878a63ffffffff613d3216565b90506145d360018284816145c657fe5b049063ffffffff614b3216565b979650505050505050565b600080841161461e5760405162461bcd60e51b8152600401808060200182810382526024815260200180614e3b6024913960400191505060405180910390fd5b60008311801561462e5750600082115b6146695760405162461bcd60e51b8152600401808060200182810382526027815260200180614da26027913960400191505060405180910390fd5b8261467a858463ffffffff614acf16565b8161468157fe5b04949350505050565b600080826001600160a01b0316846001600160a01b031614156146de5760405162461bcd60e51b8152600401808060200182810382526024815260200180614cda6024913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b0316106146fe578284614701565b83835b90925090506001600160a01b038216614761576040805162461bcd60e51b815260206004820152601d60248201527f536869626e6f62694c6962726172793a205a45524f5f41444452455353000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b79092169163e6a4390591604480820192602092909190829003018186803b1580156147e257600080fd5b505afa1580156147f6573d6000803e3d6000fd5b505050506040513d602081101561480c57600080fd5b50516001600160a01b031614156148bf57604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b79092169163c9c65396916044808201926020929091908290030181600087803b15801561489257600080fd5b505af11580156148a6573d6000803e3d6000fd5b505050506040513d60208110156148bc57600080fd5b50505b6000806148ed7f000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b78b8b614b81565b915091508160001480156148ff575080155b1561490f578793508692506149cf565b600061491c8984846145de565b905087811161496f57858110156149645760405162461bcd60e51b8152600401808060200182810382526025815260200180614d7d6025913960400191505060405180910390fd5b8894509250826149cd565b600061497c8984866145de565b90508981111561498857fe5b878110156149c75760405162461bcd60e51b8152600401808060200182810382526025815260200180614e166025913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6000808511614a1c5760405162461bcd60e51b815260040180806020018281038252602a815260200180614cfe602a913960400191505060405180910390fd5b600084118015614a2c5750600083115b614a675760405162461bcd60e51b8152600401808060200182810382526027815260200180614da26027913960400191505060405180910390fd5b6000614a7d8661ffff851663ffffffff614acf16565b90506000614a91828663ffffffff614acf16565b90506000614ab783614aab8961271063ffffffff614acf16565b9063ffffffff614b3216565b9050808281614ac257fe5b0498975050505050505050565b6000811580614aea57505080820282828281614ae757fe5b04145b613d82576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015613d82576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b6000806000614b90858561468a565b509050614b9e86868661384b565b50600080614bad88888861384b565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015614be557600080fd5b505afa158015614bf9573d6000803e3d6000fd5b505050506040513d6060811015614c0f57600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b0387811690841614614c42578082614c45565b81815b9099909850965050505050505056fe536869626e6f6269526f757465723a20494e56414c49445f50415448000000005472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c6564536869626e6f62694c6962726172793a204944454e544943414c5f414444524553534553536869626e6f62694c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54536869626e6f62694c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54536869626e6f6269526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54536869626e6f6269526f757465723a20494e53554646494349454e545f425f414d4f554e54536869626e6f62694c6962726172793a20494e53554646494349454e545f4c49515549444954595472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c6564536869626e6f6269526f757465723a2045585049524544000000000000000000536869626e6f6269526f757465723a20494e53554646494349454e545f415f414d4f554e54536869626e6f62694c6962726172793a20494e53554646494349454e545f414d4f554e54536869626e6f6269526f757465723a204558434553534956455f494e5055545f414d4f554e54a264697066735822122000f651b3c90198e75bf57dc2abe5ee03d86a4760b2afc1ba5d3dbeb3abddd77c64736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b7000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
-----Decoded View---------------
Arg [0] : _factory (address): 0x931a2CD8003B6AAc060A02df31f451BA64e850B7
Arg [1] : _WETH (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000931a2cd8003b6aac060a02df31f451ba64e850b7
Arg [1] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Deployed Bytecode Sourcemap
19273:22000:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20065:10;-1:-1:-1;;;;;20079:4:0;20065:18;;20058:26;;;;19273:22000;;12:1:-1;9;2:12;25256:691:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25256:691:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;25256:691:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;37566:928;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;37566:928:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;37566:928:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;37566:928:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;37566:928:0;;-1:-1:-1;37566:928:0;-1:-1:-1;;;;;;37566:928:0;;;;;;;;;;;;;;;;;:::i;19561:36::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19561:36:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25955:726;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25955:726:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;25955:726:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33203:1034::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33203:1034:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;33203:1034:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33203:1034:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33203:1034:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33203:1034:0;;-1:-1:-1;33203:1034:0;-1:-1:-1;;;;;;33203:1034:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;33203:1034:0;;;;;;;;;;;;;;;;;34245:940;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;34245:940:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34245:940:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34245:940:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34245:940:0;;-1:-1:-1;34245:940:0;-1:-1:-1;;;;;;34245:940:0;;;;;;;;;;;;;;;;;:::i;31378:807::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31378:807:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31378:807:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31378:807:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31378:807:0;;-1:-1:-1;31378:807:0;-1:-1:-1;;;;;;31378:807:0;;;;;;;;;;;;;;;;;:::i;30004:692::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30004:692:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30004:692:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30004:692:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30004:692:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30004:692:0;;-1:-1:-1;30004:692:0;-1:-1:-1;;;;;;30004:692:0;;;;;;;;:::i;38502:964::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38502:964:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;38502:964:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;38502:964:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;38502:964:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;38502:964:0;;-1:-1:-1;38502:964:0;-1:-1:-1;;;;;;38502:964:0;;;;;;;;;;;;;;;;;:::i;41035:235::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41035:235:0;;;:::i;28107:829::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28107:829:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;28107:829:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;36789:769;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36789:769:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;36789:769:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;36789:769:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;36789:769:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;36789:769:0;;-1:-1:-1;36789:769:0;-1:-1:-1;;;;;;36789:769:0;;;;;;;;:::i;40046:286::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40046:286:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;40046:286:0;;;;;;;;;;;;;;;;;;;:::i;40627:279::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40627:279:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;40627:279:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;40627:279:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;40627:279:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;40627:279:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;40627:279:0;;-1:-1:-1;;;40627:279:0;;;;;-1:-1:-1;40627:279:0;;-1:-1:-1;40627:279:0:i;19498:24::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19498:24:0;;;:::i;:::-;;;;-1:-1:-1;;;;;19498:24:0;;;;;;;;;;;;;;30704:666;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30704:666:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30704:666:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30704:666:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30704:666:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30704:666:0;;-1:-1:-1;30704:666:0;-1:-1:-1;;;;;;30704:666:0;;;;;;;;:::i;40340:279::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40340:279:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;40340:279:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;40340:279:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;40340:279:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;40340:279:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;40340:279:0;;-1:-1:-1;;;40340:279:0;;;;;-1:-1:-1;40340:279:0;;-1:-1:-1;40340:279:0:i;32193:1002::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32193:1002:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32193:1002:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;32193:1002:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32193:1002:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32193:1002:0;;-1:-1:-1;32193:1002:0;-1:-1:-1;;;;;;32193:1002:0;;;;;;;;;;;;;;;;;:::i;19529:25::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19529:25:0;;;:::i;19408:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19408:38:0;;;:::i;39510:233::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39510:233:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;39510:233:0;;;;;;;;;;;;:::i;27486:613::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27486:613:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;27486:613:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20155:106::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20155:106:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20155:106:0;-1:-1:-1;;;;;20155:106:0;;:::i;24364:884::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24364:884:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;24364:884:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19360:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19360:41:0;;;:::i;20269:159::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20269:159:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20269:159:0;;;;:::i;40914:113::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40914:113:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;40914:113:0;-1:-1:-1;;;;;40914:113:0;;:::i;26689:718::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26689:718:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;26689:718:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22351:860::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22351:860:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22351:860:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;23219:1102;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23219:1102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;39751:287::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39751:287:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;39751:287:0;;;;;;;;;;;;;;;;;;;:::i;25256:691::-;25505:19;25526:17;25486:8;19796:15;19784:8;:27;;19776:63;;;;;-1:-1:-1;;;19776:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19776:63:0;;;;;;;;;;;;;;;25583:196:::1;25613:5;25633:4;25652:9;25676:14;25705:12;25740:4;25760:8;25583:15;:196::i;:::-;25556:223:::0;;-1:-1:-1;25556:223:0;-1:-1:-1;25790:51:0::1;25818:5:::0;25825:2;25556:223;25790:27:::1;:51::i;:::-;25858:4;-1:-1:-1::0;;;;;25852:20:0::1;;25873:9;25852:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;25852:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25852:31:0;;;;25894:45;25925:2;25929:9;25894:30;:45::i;:::-;25256:691:::0;;;;;;;;;;:::o;37566:928::-;37814:8;19796:15;19784:8;:27;;19776:63;;;;;-1:-1:-1;;;19776:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19776:63:0;;;;;;;;;;;;;;;37854:4:::1;-1:-1:-1::0;;;;;37843:15:0::1;:4;;37848:1;37843:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;37843:7:0::1;-1:-1:-1::0;;;;;37843:15:0::1;;37835:56;;;::::0;;-1:-1:-1;;;37835:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;37835:56:0;;;;;;;;;;;;;::::1;;37921:9;37902:16;37967:34;37921:9:::0;37992:8;37967:14:::1;:34::i;:::-;37941:60;;38018:4;-1:-1:-1::0;;;;;38012:19:0::1;;38039:15;38012:45;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;38012:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38012:45:0;;;;;38081:4;-1:-1:-1::0;;;;;38075:20:0::1;;38096:50;38120:7;38129:4;;38134:1;38129:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;38129:7:0::1;38138:4;;38143:1;38138:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;38138:7:0::1;38096:23;:50::i;:::-;38148:15;38075:89;;;;;;;;;;;;;-1:-1:-1::0;;;;;38075:89:0::1;-1:-1:-1::0;;;;;38075:89:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;38075:89:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38075:89:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;38075:89:0;38068:97:::1;;;;38176:21;38207:4:::0;;-1:-1:-1;;38212:15:0;;38207:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;38207:21:0::1;-1:-1:-1::0;;;;;38200:39:0::1;;38240:2;38200:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;38200:43:0::1;-1:-1:-1::0;;;;;38200:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;38200:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38200:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;38200:43:0;38254:51:::1;::::0;;38200:43:::1;38254:51:::0;;::::1;::::0;;;;;;;;;;;38200:43;;-1:-1:-1;38254:51:0::1;::::0;;;38289:4;;;;;;38254:51;::::1;::::0;38289:4;;38254:51;38289:4;38254:51;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;38295:2:0;;-1:-1:-1;38299:5:0::1;::::0;-1:-1:-1;38254:34:0::1;::::0;-1:-1:-1;38254:51:0:i:1;:::-;38404:12:::0;38338:62:::1;38386:13:::0;38345:4;;-1:-1:-1;;38350:15:0;;38345:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;38345:21:0::1;-1:-1:-1::0;;;;;38338:39:0::1;;38378:2;38338:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;38338:43:0::1;-1:-1:-1::0;;;;;38338:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;38338:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38338:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;38338:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;38316:170;;;;-1:-1:-1::0;;;38316:170:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19850:1;;;37566:928:::0;;;;;;;:::o;19561:36::-;;;-1:-1:-1;;;19561:36:0;;;;;:::o;25955:726::-;26300:15;26317;26345:12;26360:48;26384:7;26393:6;26401;26360:23;:48::i;:::-;26345:63;;26419:13;26435:10;:36;;26462:9;26435:36;;;-1:-1:-1;;26435:36:0;26482:79;;;-1:-1:-1;;;26482:79:0;;26509:10;26482:79;;;;26529:4;26482:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26419:52;;-1:-1:-1;;;;;;26482:26:0;;;;;:79;;;;;-1:-1:-1;;26482:79:0;;;;;;;;-1:-1:-1;26482:26:0;:79;;;2:2:-1;;;;27:1;24;17:12;2:2;26482:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26482:79:0;;;;26593:80;26609:6;26617;26625:9;26636:10;26648;26660:2;26664:8;26593:15;:80::i;:::-;26572:101;;;;;;;;25955:726;;;;;;;;;;;;;;;;:::o;33203:1034::-;33460:24;33441:8;19796:15;19784:8;:27;;19776:63;;;;;-1:-1:-1;;;19776:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19776:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33530:4:0::1;33505:29;:4:::0;;-1:-1:-1;;33510:15:0;;33505:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33505:21:0::1;-1:-1:-1::0;;;;;33505:29:0::1;;33497:70;;;::::0;;-1:-1:-1;;;33497:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33497:70:0;;;;;;;;;;;;;::::1;;33588:61;33618:7;33627:8;33637:4;;33588:61;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33643:5:0::1;::::0;-1:-1:-1;33588:29:0::1;::::0;-1:-1:-1;;33588:61:0:i:1;:::-;33578:71;;33699:12;33668:7;33693:1;33676:7;:14;:18;33668:27;;;;;;;;;;;;;;:43;;33660:98;;;;-1:-1:-1::0;;;33660:98:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33769:179;33815:4;;33820:1;33815:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;33815:7:0::1;33837:10;33862:50;33886:7;33895:4;;33900:1;33895:7;;;;;;33862:50;33927:7;33935:1;33927:10;;;;;;;;;;;;;;33769:31;:179::i;:::-;33959:42;33965:7;33974:4;;33959:42;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;-1:-1;33988:4:0::1;::::0;-1:-1:-1;99:1;-1:-1;33959:5:0::1;::::0;-1:-1:-1;33959:42:0:i:1;:::-;34028:4;-1:-1:-1::0;;;;;34022:20:0::1;;34043:7;34068:1;34051:7;:14;:18;34043:27;;;;;;;;;;;;;;34022:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34022:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34022:49:0;;;;34082:26;34111:53;34126:7;34151:1;34134:7;:14;:18;34126:27;;;;;;;;;;;;;;34155:8;34111:14;:53::i;:::-;34082:82;;34175:54;34206:2;34210:18;34175:30;:54::i;:::-;19850:1;33203:1034:::0;;;;;;;;;;:::o;34245:940::-;34480:24;34461:8;19796:15;19784:8;:27;;19776:63;;;;;-1:-1:-1;;;19776:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19776:63:0;;;;;;;;;;;;;;;34536:4:::1;-1:-1:-1::0;;;;;34525:15:0::1;:4;;34530:1;34525:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;34525:7:0::1;-1:-1:-1::0;;;;;34525:15:0::1;;34517:56;;;::::0;;-1:-1:-1;;;34517:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;34517:56:0;;;;;;;;;;;;;::::1;;34594:61;34623:7;34632:9;34643:4;;34594:61;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;34649:5:0::1;::::0;-1:-1:-1;34594:28:0::1;::::0;-1:-1:-1;;34594:61:0:i:1;:::-;34584:71;;34666:23;34692:36;34707:7;34715:1;34707:10;;;;;;;34692:36;34666:62;;34766:9;34747:15;:28;;34739:79;;;;-1:-1:-1::0;;;34739:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34835:4;-1:-1:-1::0;;;;;34829:19:0::1;;34856:15;34829:45;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34829:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34829:45:0;;;;;34900:4;-1:-1:-1::0;;;;;34894:20:0::1;;34915:50;34939:7;34948:4;;34953:1;34948:7;;;;;;34915:50;34967:15;34894:89;;;;;;;;;;;;;-1:-1:-1::0;;;;;34894:89:0::1;-1:-1:-1::0;;;;;34894:89:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34894:89:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34894:89:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;34894:89:0;34887:97:::1;;;;34995:31;35001:7;35010:4;;34995:31;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;-1:-1;35016:2:0;;-1:-1:-1;99:1;-1:-1;34995:5:0::1;::::0;-1:-1:-1;34995:31:0:i:1;:::-;35089:15;35077:9;:27;35073:104;;;35106:71;35137:10;35161:15;35149:9;:27;35106:30;:71::i;:::-;19850:1;34245:940:::0;;;;;;;;;:::o;31378:807::-;31616:24;31597:8;19796:15;19784:8;:27;;19776:63;;;;;-1:-1:-1;;;19776:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19776:63:0;;;;;;;;;;;;;;;31672:4:::1;-1:-1:-1::0;;;;;31661:15:0::1;:4;;31666:1;31661:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31661:7:0::1;-1:-1:-1::0;;;;;31661:15:0::1;;31653:56;;;::::0;;-1:-1:-1;;;31653:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31653:56:0;;;;;;;;;;;;;::::1;;31720:23;31746:35;31761:9;31772:8;31746:14;:35::i;:::-;31720:61;;31804:68;31834:7;31843:15;31860:4;;31804:68;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31866:5:0::1;::::0;-1:-1:-1;31804:29:0::1;::::0;-1:-1:-1;;31804:68:0:i:1;:::-;31794:78;;31922:12;31891:7;31916:1;31899:7;:14;:18;31891:27;;;;;;;;;;;;;;:43;;31883:98;;;;-1:-1:-1::0;;;31883:98:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31998:4;-1:-1:-1::0;;;;;31992:19:0::1;;32019:7;32027:1;32019:10;;;;;;;;;;;;;;31992:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31992:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31992:40:0;;;;;32056:4;-1:-1:-1::0;;;;;32050:20:0::1;;32071:50;32095:7;32104:4;;32109:1;32104:7;;;;;;32071:50;32123:7;32131:1;32123:10;;;;;;;;;;;;;;32050:84;;;;;;;;;;;;;-1:-1:-1::0;;;;;32050:84:0::1;-1:-1:-1::0;;;;;32050:84:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32050:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32050:84:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32050:84:0;32043:92:::1;;;;32146:31;32152:7;32161:4;;32146:31;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;-1:-1;32167:2:0;;-1:-1:-1;99:1;-1:-1;32146:5:0::1;::::0;-1:-1:-1;32146:31:0:i:1;30004:692::-:0;30241:24;30222:8;19796:15;19784:8;:27;;19776:63;;;;;-1:-1:-1;;;19776:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19776:63:0;;;;;;;;;;;;;;;30288:60:::1;30318:7;30327:8;30337:4;;30288:60;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;;30343:4:0::1;::::0;-1:-1:-1;;;30343:4:0;::::1;;;::::0;-1:-1:-1;30288:29:0::1;::::0;-1:-1:-1;30288:60:0:i:1;:::-;30278:70;;30398:12;30367:7;30392:1;30375:7;:14;:18;30367:27;;;;;;;;;;;;;;:43;;30359:98;;;;-1:-1:-1::0;;;30359:98:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30468:179;30514:4;;30519:1;30514:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30514:7:0::1;30536:10;30561:50;30585:7;30594:4;;30599:1;30594:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30594:7:0::1;30603:4;;30608:1;30603:7;;;;;;30468:179;30658:30;30664:7;30673:4;;30658:30;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30679:2:0;;-1:-1:-1;30683:4:0::1;::::0;-1:-1:-1;30658:5:0::1;::::0;-1:-1:-1;30658:30:0:i:1;:::-;30004:692:::0;;;;;;;;;:::o;38502:964::-;38769:8;19796:15;19784:8;:27;;19776:63;;;;;-1:-1:-1;;;19776:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19776:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;38823:4:0::1;38798:29;:4:::0;;-1:-1:-1;;38803:15:0;;38798:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;38798:21:0::1;-1:-1:-1::0;;;;;38798:29:0::1;;38790:70;;;::::0;;-1:-1:-1;;;38790:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;38790:70:0;;;;;;;;;;;;;::::1;;38871:177;38917:4;;38922:1;38917:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;38917:7:0::1;38939:10;38964:50;38988:7;38997:4;;39002:1;38997:7;;;;;;38964:50;39029:8;38871:31;:177::i;:::-;39059:62;39094:4;;39059:62;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;39108:4:0::1;::::0;-1:-1:-1;39115:5:0::1;::::0;-1:-1:-1;39059:34:0::1;::::0;-1:-1:-1;39059:62:0:i:1;:::-;39152:37;::::0;;-1:-1:-1;;;39152:37:0;;39183:4:::1;39152:37;::::0;::::1;::::0;;;39132:17:::1;::::0;-1:-1:-1;;;;;39159:4:0::1;39152:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;39152:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;39152:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;39152:37:0;;-1:-1:-1;39208:25:0;;::::1;;39200:80;;;;-1:-1:-1::0;;;39200:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39297:4;-1:-1:-1::0;;;;;39291:20:0::1;;39312:9;39291:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;39291:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;39291:31:0;;;;39333:24;39360:35;39375:9;39386:8;39360:14;:35::i;:::-;39333:62;;39406:52;39437:2;39441:16;39406:30;:52::i;41035:235::-:0;41106:10;41081:14;41098:19;;;;;;;;;;;41136:10;41128:39;;;;;-1:-1:-1;;;41128:39:0;;;;;;;;;;;;-1:-1:-1;;;41128:39:0;;;;;;;;;;;;;;;41186:10;41200:1;41178:19;;;;;;;;;;:23;41212:50;;41255:6;41212:30;:50::i;:::-;41035:235;:::o;28107:829::-;28464:17;28494:12;28509:45;28533:7;28542:5;28549:4;28509:23;:45::i;:::-;28494:60;;28565:13;28581:10;:36;;28608:9;28581:36;;;-1:-1:-1;;28581:36:0;28628:79;;;-1:-1:-1;;;28628:79:0;;28655:10;28628:79;;;;28675:4;28628:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28565:52;;-1:-1:-1;;;;;;28628:26:0;;;;;:79;;;;;-1:-1:-1;;28628:79:0;;;;;;;;-1:-1:-1;28628:26:0;:79;;;2:2:-1;;;;27:1;24;17:12;2:2;28628:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28628:79:0;;;;28730:198;28792:5;28812:9;28836:14;28865:12;28892:2;28909:8;28730:47;:198::i;:::-;28718:210;28107:829;-1:-1:-1;;;;;;;;;;;;;28107:829:0:o;36789:769::-;37032:8;19796:15;19784:8;:27;;19776:63;;;;;-1:-1:-1;;;19776:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19776:63:0;;;;;;;;;;;;;;;37053:177:::1;37099:4;;37104:1;37099:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;37099:7:0::1;37121:10;37146:50;37170:7;37179:4;;37184:1;37179:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;37179:7:0::1;37188:4;;37193:1;37188:7;;;;;;37146:50;37211:8;37053:31;:177::i;:::-;37241:21;37272:4:::0;;-1:-1:-1;;37277:15:0;;37272:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;37272:21:0::1;-1:-1:-1::0;;;;;37265:39:0::1;;37305:2;37265:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;37265:43:0::1;-1:-1:-1::0;;;;;37265:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;37265:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;37265:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;37265:43:0;37319:50:::1;::::0;;37265:43:::1;37319:50:::0;;::::1;::::0;;;;;;;;;;;37265:43;;-1:-1:-1;37319:50:0::1;::::0;;;37354:4;;;;;;37319:50;::::1;::::0;37354:4;;37319:50;37354:4;37319:50;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;;37364:4:0::1;::::0;37360:2;;-1:-1:-1;;;;37364:4:0;::::1;;;::::0;-1:-1:-1;37319:34:0::1;:50::i;:::-;37468:12:::0;37402:62:::1;37450:13:::0;37409:4;;-1:-1:-1;;37414:15:0;;37409:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;37409:21:0::1;-1:-1:-1::0;;;;;37402:39:0::1;;37442:2;37402:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;37402:43:0::1;-1:-1:-1::0;;;;;37402:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;37402:62:0;:78;;37380:170;;;;-1:-1:-1::0;;;37380:170:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19850:1;36789:769:::0;;;;;;;:::o;40046:286::-;40220:16;40256:68;40284:9;40295;40306:10;40318:5;40256:27;:68::i;:::-;40249:75;40046:286;-1:-1:-1;;;;;40046:286:0:o;40627:279::-;40788:24;40837:61;40866:7;40875:9;40886:4;40892:5;40837:28;:61::i;:::-;40830:68;40627:279;-1:-1:-1;;;;40627:279:0:o;19498:24::-;;;-1:-1:-1;;;;;19498:24:0;;:::o;30704:666::-;30937:24;30918:8;19796:15;19784:8;:27;;19776:63;;;;;-1:-1:-1;;;19776:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19776:63:0;;;;;;;;;;;;;;;30984:60:::1;31013:7;31022:9;31033:4;;30984:60;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;;31039:4:0::1;::::0;-1:-1:-1;;;31039:4:0;::::1;;;::::0;-1:-1:-1;30984:28:0::1;::::0;-1:-1:-1;30984:60:0:i:1;:::-;30974:70;;31077:11;31063:7;31071:1;31063:10;;;;;;;;;;;;;;:25;;31055:76;;;;-1:-1:-1::0;;;31055:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40340:279:::0;40501:24;40550:61;40580:7;40589:8;40599:4;40605:5;40550:29;:61::i;32193:1002::-;32450:24;32431:8;19796:15;19784:8;:27;;19776:63;;;;;-1:-1:-1;;;19776:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19776:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32520:4:0::1;32495:29;:4:::0;;-1:-1:-1;;32500:15:0;;32495:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32495:21:0::1;-1:-1:-1::0;;;;;32495:29:0::1;;32487:70;;;::::0;;-1:-1:-1;;;32487:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32487:70:0;;;;;;;;;;;;;::::1;;32578:61;32607:7;32616:9;32627:4;;32578:61;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32633:5:0::1;::::0;-1:-1:-1;32578:28:0::1;::::0;-1:-1:-1;;32578:61:0:i:1;:::-;32568:71;;32672:11;32658:7;32666:1;32658:10;;;;;;;;;;;;;;:25;;32650:76;;;;-1:-1:-1::0;;;32650:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19529:25:::0;;;-1:-1:-1;;;19529:25:0;;;;;:::o;19408:38::-;;;:::o;39510:233::-;39650:15;39685:50;39707:7;39716:8;39726;39685:21;:50::i;27486:613::-;27764:17;27745:8;19796:15;19784:8;:27;;19776:63;;;;;-1:-1:-1;;;19776:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19776:63:0;;;;;;;;;;;;;;;27810:94:::1;27826:5;27833:4;27839:9;27850:14;27866:12;27888:4;27895:8;27810:15;:94::i;:::-;27954:38;::::0;;-1:-1:-1;;;27954:38:0;;27986:4:::1;27954:38;::::0;::::1;::::0;;;27794:110;;-1:-1:-1;27915:78:0::1;::::0;-1:-1:-1;27943:5:0;;27950:2;;-1:-1:-1;;;;;27954:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;27954:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27954:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27954:38:0;27915:27:::1;:78::i;:::-;28010:4;-1:-1:-1::0;;;;;28004:20:0::1;;28025:9;28004:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28004:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28004:31:0;;;;28046:45;28077:2;28081:9;28046:30;:45::i;20155:106::-:0;19664:9;;-1:-1:-1;;;;;19664:9:0;19650:10;:23;19642:61;;;;;-1:-1:-1;;;19642:61:0;;;;;;;;;;;;-1:-1:-1;;;19642:61:0;;;;;;;;;;;;;;;20231:9:::1;:22:::0;;-1:-1:-1;;;;;;20231:22:0::1;-1:-1:-1::0;;;;;20231:22:0;;;::::1;::::0;;;::::1;::::0;;20155:106::o;24364:884::-;24630:15;24647;24611:8;19796:15;19784:8;:27;;19776:63;;;;;-1:-1:-1;;;19776:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19776:63:0;;;;;;;;;;;;;;;24675:12:::1;24690:48;24714:7;24723:6;24731;24690:23;:48::i;:::-;24749:61;::::0;;-1:-1:-1;;;24749:61:0;;24782:10:::1;24749:61;::::0;::::1;::::0;-1:-1:-1;;;;;24749:32:0;::::1;:61:::0;;;;;;;;;;;;;;24675:63;;-1:-1:-1;24749:32:0;;::::1;::::0;:61;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;24749:32:0;:61;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;24749:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24749:61:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;24884:28:0::1;::::0;;-1:-1:-1;;;24884:28:0;;-1:-1:-1;;;;;24884:28:0;;::::1;;::::0;::::1;::::0;;;24848:15:::1;::::0;;;24884:24;;::::1;::::0;::::1;::::0;:28;;;;;;;;;;;24848:15;24884:24;:28;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;24884:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24884:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24884:28:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;24884:28:0;-1:-1:-1;24924:14:0::1;24944:42;24971:6:::0;24979;24944:26:::1;:42::i;:::-;24923:63;;;25028:6;-1:-1:-1::0;;;;;25018:16:0::1;:6;-1:-1:-1::0;;;;;25018:16:0::1;;:58;;25059:7;25068;25018:58;;;25038:7;25047;25018:58;24997:79:::0;;-1:-1:-1;24997:79:0;-1:-1:-1;25095:21:0;;::::1;;25087:71;;;;-1:-1:-1::0;;;25087:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25188:10;25177:7;:21;;25169:71;;;;-1:-1:-1::0;;;25169:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19850:1;;;;24364:884:::0;;;;;;;;;;;:::o;19360:41::-;;;:::o;20269:159::-;19664:9;;-1:-1:-1;;;;;19664:9:0;19650:10;:23;19642:61;;;;;-1:-1:-1;;;19642:61:0;;;;;;;;;;;;-1:-1:-1;;;19642:61:0;;;;;;;;;;;;;;;20350:14:::1;::::0;::::1;-1:-1:-1::0;;;20350:14:0;::::1;::::0;::::1;-1:-1:-1::0;;;20342:4:0;;::::1;;:22;;20334:63;;;::::0;;-1:-1:-1;;;20334:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;20408:4;:12:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;20408:12:0::1;-1:-1:-1::0;;;;20408:12:0;;::::1;::::0;;;::::1;::::0;;20269:159::o;40914:113::-;-1:-1:-1;;;;;41006:13:0;40979:7;41006:13;;;;;;;;;;;;40914:113::o;26689:718::-;27017:19;27038:17;27068:12;27083:45;27107:7;27116:5;27123:4;27083:23;:45::i;:::-;27068:60;;27139:13;27155:10;:36;;27182:9;27155:36;;;-1:-1:-1;;27155:36:0;27202:79;;;-1:-1:-1;;;27202:79:0;;27229:10;27202:79;;;;27249:4;27202:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27139:52;;-1:-1:-1;;;;;;27202:26:0;;;;;:79;;;;;-1:-1:-1;;27202:79:0;;;;;;;;-1:-1:-1;27202:26:0;:79;;;2:2:-1;;;;27:1;24;17:12;2:2;27202:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27202:79:0;;;;27319:80;27338:5;27345:9;27356:14;27372:12;27386:2;27390:8;27319:18;:80::i;:::-;27292:107;;;;-1:-1:-1;26689:718:0;-1:-1:-1;;;;;;;;;;;;;26689:718:0:o;22351:860::-;22713:15;22743;22773:17;22671:8;19796:15;19784:8;:27;;19776:63;;;;;-1:-1:-1;;;19776:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19776:63:0;;;;;;;;;;;;;;;22839:85:::1;22853:6;22861;22869:14;22885;22901:10;22913;22839:13;:85::i;:::-;22818:106:::0;;-1:-1:-1;22818:106:0;-1:-1:-1;22935:12:0::1;22950:48;22974:7;22983:6:::0;22991;22950:23:::1;:48::i;:::-;22935:63;;23009:66;23041:6;23049:10;23061:4;23067:7;23009:31;:66::i;:::-;23086;23118:6;23126:10;23138:4;23144:7;23086:31;:66::i;:::-;23189:4;-1:-1:-1::0;;;;;23175:24:0::1;;23200:2;23175:28;;;;;;;;;;;;;-1:-1:-1::0;;;;;23175:28:0::1;-1:-1:-1::0;;;;;23175:28:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23175:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23175:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23175:28:0;22351:860;;;;-1:-1:-1;23175:28:0;;-1:-1:-1;22351:860:0;;-1:-1:-1;;;;;;;;;22351:860:0:o;23219:1102::-;23552:19;23586:17;23618;23510:8;19796:15;19784:8;:27;;19776:63;;;;;-1:-1:-1;;;19776:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19776:63:0;;;;;;;;;;;;;;;23690:176:::1;23718:5;23738:4;23757:18;23790:9;23814:14;23843:12;23690:13;:176::i;:::-;23663:203:::0;;-1:-1:-1;23663:203:0;-1:-1:-1;23877:12:0::1;23892:45;23916:7;23925:5:::0;23932:4:::1;23892:23;:45::i;:::-;23877:60;;23948:69;23980:5;23987:10;23999:4;24005:11;23948:31;:69::i;:::-;24034:4;-1:-1:-1::0;;;;;24028:19:0::1;;24055:9;24028:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24028:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24028:39:0;;;;;24091:4;-1:-1:-1::0;;;;;24085:20:0::1;;24106:4;24112:9;24085:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;24085:37:0::1;-1:-1:-1::0;;;;;24085:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24085:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24085:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24085:37:0;24078:45:::1;;;;24160:4;-1:-1:-1::0;;;;;24146:24:0::1;;24171:2;24146:28;;;;;;;;;;;;;-1:-1:-1::0;;;;;24146:28:0::1;-1:-1:-1::0;;;;;24146:28:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24146:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24146:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24146:28:0;;-1:-1:-1;24225:9:0::1;:21:::0;-1:-1:-1;24221:92:0::1;;;24248:65;24279:10;24303:9;24291;:21;24248:30;:65::i;:::-;19850:1;23219:1102:::0;;;;;;;;;;;:::o;39751:287::-;39925:17;39962:68;39991:8;40001:9;40012:10;40024:5;39962:28;:68::i;17970:449::-;18202:45;;;-1:-1:-1;;;;;18202:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;18202:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;18191:57:0;;;;18156:12;;18170:17;;18191:10;;;;18202:45;18191:57;;;25:18:-1;18191:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;18191:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;18155:93:0;;;;18281:7;:57;;;;-1:-1:-1;18293:11:0;;:16;;:44;;;18324:4;18313:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18313:24:0;18293:44;18259:152;;;;-1:-1:-1;;;18259:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17970:449;;;;;:::o;18933:217::-;19046:12;;;19006;19046;;;;;;;;;-1:-1:-1;;;;;19024:7:0;;;19039:5;;19024:35;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;19024:35:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;19005:54:0;;;19078:7;19070:72;;;;-1:-1:-1;;;19070:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18933:217;;;:::o;20436:454::-;20582:14;;20511:22;;20582:14;-1:-1:-1;;;20582:14:0;;;;;20563:16;;:6;;-1:-1:-1;;;20574:4:0;;;20563:16;:10;:16;:::i;:::-;:33;;;;;;;-1:-1:-1;20607:17:0;20627:26;:6;20563:33;20627:26;:10;:26;:::i;:::-;20607:46;-1:-1:-1;;;;;;20668:22:0;;;;:47;;-1:-1:-1;;;;;;20694:21:0;;20706:9;20694:21;20668:47;20664:219;;;20761:9;;-1:-1:-1;;;;;20761:9:0;20753:7;:18;;;;;;;;;;;:33;;20776:9;20753:33;:22;:33;:::i;:::-;20740:9;;-1:-1:-1;;;;;20740:9:0;20732:7;:18;;;;;;;;;;:54;20664:219;;;-1:-1:-1;;;;;20839:17:0;;:7;:17;;;;;;;;;;;:32;;20861:9;20839:32;:21;:32;:::i;:::-;-1:-1:-1;;;;;20819:17:0;;:7;:17;;;;;;;;;;:52;20664:219;20436:454;;;;;:::o;11803:651::-;11926:12;11952:14;11968;11986:26;11997:6;12005;11986:10;:26::i;:::-;12231:32;;;-1:-1:-1;;12231:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;12231:32:0;;;;;12221:43;;;;;;-1:-1:-1;;;;;;12110:291:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;12110:291:0;;;;;;;12078:342;;;;;;;;;11803:651;-1:-1:-1;;;;;11803:651:0:o;35332:1449::-;35459:9;35454:1320;35488:1;35474:4;:11;:15;35470:1;:19;35454:1320;;;35512:13;35527:14;35546:4;35551:1;35546:7;;;;;;;;;;;;;;35555:4;35560:1;35564;35560:5;35555:11;;;;;;;;;;;;;;35511:56;;;;35583:14;35603:41;35630:5;35637:6;35603:26;:41::i;:::-;35582:62;;;35659:18;35694:47;35718:7;35727:5;35734:6;35694:23;:47::i;:::-;35659:83;;35757:19;35791:20;35903:16;35921;35943:4;-1:-1:-1;;;;;35943:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35943:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35943:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35943:18:0;;;;;;;-1:-1:-1;;;;;35902:59:0;;;;-1:-1:-1;35902:59:0;;-1:-1:-1;35981:20:0;;-1:-1:-1;;;;;36049:15:0;;;;;;;:61;;36091:8;36101;36049:61;;;36068:8;36078;36049:61;35980:130;;;;36143:56;36186:12;36150:5;-1:-1:-1;;;;;36143:23:0;;36175:4;36143:38;;;;;;;;;;;;;-1:-1:-1;;;;;36143:38:0;-1:-1:-1;;;;;36143:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;36143:56:0;36129:70;;36233:77;36262:11;36275:12;36289:13;36304:5;36233:28;:77::i;:::-;36218:92;;35454:1320;;;;36341:18;36361;36409:6;-1:-1:-1;;;;;36400:15:0;:5;-1:-1:-1;;;;;36400:15:0;;:73;;36448:12;36470:1;36400:73;;;36427:1;36431:12;36400:73;36340:133;;;;36488:10;36519:1;36505:4;:11;:15;36501:1;:19;:81;;36579:3;36501:81;;;36523:53;36547:7;36556:6;36564:4;36569:1;36573;36569:5;36564:11;;;;;;;;;;;;;;36523:23;:53::i;:::-;36610:14;;36488:94;;-1:-1:-1;36610:14:0;36601:23;;;-1:-1:-1;;;36610:14:0;;;;36601:23;36597:165;;;36678:12;;;36688:1;36678:12;;;;;;;;;;-1:-1:-1;;;36626:65:0;;;;;;;;;;;;;;-1:-1:-1;;;;;36626:65:0;;;;;;;;;;;;;;;;;;;;;;:23;;;;;;36650:10;;36662;;36674:2;;36678:12;;36626:65;;;;;;;;;;;;36678:12;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;36626:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36626:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36626:65:0;;;;36597:165;;;36749:12;;;36759:1;36749:12;;;;;;;;;;-1:-1:-1;;;36711:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;36711:51:0;;;;;;;;;;;;;;;;;;;;;;:9;;;;;;36721:10;;36733;;36745:2;;36749:12;;36711:51;;;;;;;;;;;;36749:12;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;36711:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36711:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36711:51:0;;;;36597:165;-1:-1:-1;;35491:3:0;;;;;-1:-1:-1;35454:1320:0;;-1:-1:-1;;;;;;35454:1320:0;;;35332:1449;;;:::o;349:138::-;442:5;;;437:16;;;;429:50;;;;;-1:-1:-1;;;429:50:0;;;;;;;;;;;;-1:-1:-1;;;429:50:0;;;;;;;;;;;;;;;349:138;;;;:::o;14936:590::-;15096:24;15156:1;15141:4;:11;:16;;15133:58;;;;;-1:-1:-1;;;15133:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15226:4;:11;15212:26;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15212:26:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;15212:26:0;;15202:36;;15262:8;15249:7;15257:1;15249:10;;;;;;;;;;;;;:21;;;;;15286:9;15281:238;15315:1;15301:4;:11;:15;15297:1;:19;15281:238;;;15339:17;15358:18;15380:42;15392:7;15401:4;15406:1;15401:7;;;;;;;;;;;;;;15410:4;15415:1;15419;15415:5;15410:11;;;;;;;;;;;;;;15380;:42::i;:::-;15338:84;;;;15454:53;15467:7;15475:1;15467:10;;;;;;;;;;;;;;15479:9;15490:10;15502:4;15454:12;:53::i;:::-;15437:7;15445:1;15449;15445:5;15437:14;;;;;;;;;;;;;;;;;:70;-1:-1:-1;;15318:3:0;;15281:238;;;;14936:590;;;;;;:::o;18427:498::-;18698:51;;;-1:-1:-1;;;;;18698:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;18698:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;18687:63:0;;;;18652:12;;18666:17;;18687:10;;;;18698:51;18687:63;;;25:18:-1;18687:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;18687:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;18651:99:0;;;;18783:7;:57;;;;-1:-1:-1;18795:11:0;;:16;;:44;;;18826:4;18815:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18815:24:0;18795:44;18761:156;;;;-1:-1:-1;;;18761:156:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18427:498;;;;;;:::o;29047:949::-;29213:9;29208:781;29242:1;29228:4;:11;:15;29224:1;:19;29208:781;;;29266:13;29281:14;29300:4;29305:1;29300:7;;;;;;;;;;;;;;29309:4;29314:1;29318;29314:5;29309:11;;;;;;;;;;;;;;29265:56;;;;29337:14;29357:41;29384:5;29391:6;29357:26;:41::i;:::-;29336:62;;;29413:17;29433:7;29441:1;29445;29441:5;29433:14;;;;;;;;;;;;;;29413:34;;29463:18;29483;29531:6;-1:-1:-1;;;;;29522:15:0;:5;-1:-1:-1;;;;;29522:15:0;;:67;;29567:9;29586:1;29522:67;;;29549:1;29553:9;29522:67;29462:127;;;;29604:10;29635:1;29621:4;:11;:15;29617:1;:19;:81;;29695:3;29617:81;;;29639:53;29663:7;29672:6;29680:4;29685:1;29689;29685:5;29680:11;;;;;;;29639:53;29604:94;;29717:6;29713:264;;;29739:47;29763:7;29772:5;29779:6;29739:23;:47::i;:::-;-1:-1:-1;;;;;29725:67:0;;29793:10;29805;29817:2;29831:1;29821:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;29821:12:0;87:42:-1;143:17;;-1:-1;29821:12:0;;29725:109;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29725:109:0;-1:-1:-1;;;;;29725:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;29725:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29725:109:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29725:109:0;;;;29713:264;;;29868:47;29892:7;29901:5;29908:6;29868:23;:47::i;:::-;-1:-1:-1;;;;;29854:81:0;;29936:10;29948;29960:2;29974:1;29964:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;29964:12:0;87:42:-1;143:17;;-1:-1;29964:12:0;;29854:123;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29854:123:0;-1:-1:-1;;;;;29854:123:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;29854:123:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29854:123:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29854:123:0;;;;29713:264;-1:-1:-1;;29245:3:0;;;;;-1:-1:-1;29208:781:0;;-1:-1:-1;;;;29208:781:0;15607:611;15767:24;15827:1;15812:4;:11;:16;;15804:58;;;;;-1:-1:-1;;;15804:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15897:4;:11;15883:26;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15883:26:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;15883:26:0;;15873:36;;15950:9;15920:7;15945:1;15928:7;:14;:18;15920:27;;;;;;;;;;;;;;;;;:39;15987:11;;-1:-1:-1;;15987:15:0;15970:241;16004:5;;15970:241;;16032:17;16051:18;16073:42;16085:7;16094:4;16103:1;16099;:5;16094:11;;;;;;;;;;;;;;16107:4;16112:1;16107:7;;;;;;;16073:42;16031:84;;;;16147:52;16159:7;16167:1;16159:10;;;;;;;;;;;;;;16171:9;16182:10;16194:4;16147:11;:52::i;:::-;16130:7;16142:1;16138;:5;16130:14;;;;;;;;;;;;;;;;;:69;-1:-1:-1;;;;16011:3:0;15970:241;;14308:546;14466:16;14515:1;14503:9;:13;14495:69;;;;-1:-1:-1;;;14495:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14595:1;14583:9;:13;:31;;;;;14613:1;14600:10;:14;14583:31;14575:83;;;;-1:-1:-1;;;14575:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14669:17;14689:35;14718:5;14689:24;:9;14703;14689:24;:13;:24;:::i;:::-;:28;:35;:28;:35;:::i;:::-;14669:55;-1:-1:-1;14735:19:0;14757:35;;;;:25;:10;14772:9;14757:25;:14;:25;:::i;:35::-;14735:57;;14814:32;14844:1;14827:11;14815:9;:23;;;;;;;14814:32;:29;:32;:::i;:::-;14803:43;14308:546;-1:-1:-1;;;;;;;14308:546:0:o;13106:365::-;13231:15;13277:1;13267:7;:11;13259:60;;;;-1:-1:-1;;;13259:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13349:1;13338:8;:12;:28;;;;;13365:1;13354:8;:12;13338:28;13330:80;;;;-1:-1:-1;;;13330:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13455:8;13431:21;:7;13443:8;13431:21;:11;:21;:::i;:::-;:32;;;;;;;13106:365;-1:-1:-1;;;;13106:365:0:o;11364:347::-;11439:14;11455;11500:6;-1:-1:-1;;;;;11490:16:0;:6;-1:-1:-1;;;;;11490:16:0;;;11482:65;;;;-1:-1:-1;;;11482:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11586:6;-1:-1:-1;;;;;11577:15:0;:6;-1:-1:-1;;;;;11577:15:0;;:53;;11615:6;11623;11577:53;;;11596:6;11604;11577:53;11558:72;;-1:-1:-1;11558:72:0;-1:-1:-1;;;;;;11649:20:0;;11641:62;;;;;-1:-1:-1;;;11641:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11364:347;;;;;:::o;20930:1413::-;21261:49;;;-1:-1:-1;;;21261:49:0;;-1:-1:-1;;;;;21261:49:0;;;;;;;;;;;;;;;;21160:15;;;;;;21278:7;21261:33;;;;;;:49;;;;;;;;;;;;;;;:33;:49;;;2:2:-1;;;;27:1;24;17:12;2:2;21261:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21261:49:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21261:49:0;-1:-1:-1;;;;;21261:63:0;;21257:148;;;21341:52;;;-1:-1:-1;;;21341:52:0;;-1:-1:-1;;;;;21341:52:0;;;;;;;;;;;;;;;;21358:7;21341:36;;;;;;:52;;;;;;;;;;;;;;;-1:-1:-1;21341:36:0;:52;;;2:2:-1;;;;27:1;24;17:12;2:2;21341:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21341:52:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;21257:148:0;21416:16;21434;21454:52;21482:7;21491:6;21499;21454:27;:52::i;:::-;21415:91;;;;21521:8;21533:1;21521:13;:30;;;;-1:-1:-1;21538:13:0;;21521:30;21517:819;;;21590:14;;-1:-1:-1;21606:14:0;;-1:-1:-1;21517:819:0;;;21654:22;21679:57;21701:14;21717:8;21727;21679:21;:57::i;:::-;21654:82;;21773:14;21755;:32;21751:574;;21834:10;21816:14;:28;;21808:78;;;;-1:-1:-1;;;21808:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21927:14;;-1:-1:-1;21943:14:0;-1:-1:-1;21943:14:0;21751:574;;;21999:22;22024:57;22046:14;22062:8;22072;22024:21;:57::i;:::-;21999:82;;22125:14;22107;:32;;22100:40;;;;22185:10;22167:14;:28;;22159:78;;;;-1:-1:-1;;;22159:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22278:14;-1:-1:-1;22294:14:0;;-1:-1:-1;21751:574:0;21517:819;;20930:1413;;;;;;;;;;;:::o;13593:594::-;13751:17;13800:1;13789:8;:12;13781:67;;;;-1:-1:-1;;;13781:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13879:1;13867:9;:13;:31;;;;;13897:1;13884:10;:14;13867:31;13859:83;;;;-1:-1:-1;;;13859:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13953:23;13979:18;:8;:18;;;;:12;:18;:::i;:::-;13953:44;-1:-1:-1;14008:17:0;14028:31;13953:44;14048:10;14028:31;:19;:31;:::i;:::-;14008:51;-1:-1:-1;14070:19:0;14092:41;14117:15;14092:20;:9;14106:5;14092:20;:13;:20;:::i;:::-;:24;:41;:24;:41;:::i;:::-;14070:63;;14168:11;14156:9;:23;;;;;;;13593:594;-1:-1:-1;;;;;;;;13593:594:0:o;495:151::-;553:9;583:6;;;:30;;-1:-1:-1;;598:5:0;;;612:1;607;598:5;607:1;593:15;;;;;:20;583:30;575:63;;;;;-1:-1:-1;;;575:63:0;;;;;;;;;;;;-1:-1:-1;;;575:63:0;;;;;;;;;;;;;;204:137;297:5;;;292:16;;;;284:49;;;;;-1:-1:-1;;;284:49:0;;;;;;;;;;;;-1:-1:-1;;;284:49:0;;;;;;;;;;;;;;12512:481;12639:16;12657;12687:14;12707:26;12718:6;12726;12707:10;:26::i;:::-;12686:47;;;12744:32;12752:7;12761:6;12769;12744:7;:32::i;:::-;;12788:16;12806;12842:32;12850:7;12859:6;12867;12842:7;:32::i;:::-;-1:-1:-1;;;;;12828:59:0;;:61;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12828:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12828:61:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12828:61:0;;;;;;;-1:-1:-1;;;;;12787:102:0;;;;-1:-1:-1;12787:102:0;;-1:-1:-1;;;;;;12923:16:0;;;;;;;:62;;12966:8;12976;12923:62;;;12943:8;12953;12923:62;12900:85;;;;-1:-1:-1;12512:481:0;-1:-1:-1;;;;;;;12512:481:0:o
Swarm Source
ipfs://00f651b3c90198e75bf57dc2abe5ee03d86a4760b2afc1ba5d3dbeb3abddd77c
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $2,617.99 | 0.000000500252 | $0.00131 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.