More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 133,777 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Swap Exact Token... | 327482846 | 5 days ago | IN | 0 ETH | 0.00000105 | ||||
Swap Exact Token... | 325757292 | 10 days ago | IN | 0 ETH | 0.00000168 | ||||
Swap Exact Token... | 325061385 | 12 days ago | IN | 0 ETH | 0.00000197 | ||||
Swap Exact Token... | 324191052 | 14 days ago | IN | 0 ETH | 0.00000172 | ||||
Swap Exact ETH F... | 324190134 | 14 days ago | IN | 0.0019 ETH | 0.00000205 | ||||
Swap Exact Token... | 322648251 | 19 days ago | IN | 0 ETH | 0.00000107 | ||||
Swap Exact Token... | 317825124 | 33 days ago | IN | 0 ETH | 0.00000108 | ||||
Add Liquidity ET... | 316979683 | 35 days ago | IN | 0 ETH | 0.00000207 | ||||
Swap Exact Token... | 315406123 | 40 days ago | IN | 0 ETH | 0.00000102 | ||||
Swap Exact Token... | 313007024 | 47 days ago | IN | 0 ETH | 0.0000011 | ||||
Add Liquidity ET... | 311286660 | 52 days ago | IN | 0.00019142 ETH | 0.00000174 | ||||
Swap Exact Token... | 311286225 | 52 days ago | IN | 0 ETH | 0.00000205 | ||||
Swap Exact Token... | 310575805 | 54 days ago | IN | 0 ETH | 0.00000108 | ||||
Swap Exact Token... | 309421829 | 57 days ago | IN | 0 ETH | 0.00000286 | ||||
Swap Exact Token... | 309088492 | 58 days ago | IN | 0 ETH | 0.00000278 | ||||
Swap Exact Token... | 308186236 | 61 days ago | IN | 0 ETH | 0.0000011 | ||||
Swap Exact Token... | 305807464 | 68 days ago | IN | 0 ETH | 0.0000011 | ||||
Swap Exact Token... | 305282513 | 69 days ago | IN | 0 ETH | 0.00000228 | ||||
Swap Exact Token... | 303390689 | 75 days ago | IN | 0 ETH | 0.00000114 | ||||
Swap Exact Token... | 301910212 | 79 days ago | IN | 0 ETH | 0.00000259 | ||||
Swap Exact Token... | 301037798 | 82 days ago | IN | 0 ETH | 0.00000127 | ||||
Swap Exact Token... | 298581242 | 89 days ago | IN | 0 ETH | 0.00000265 | ||||
Swap Exact Token... | 298331145 | 90 days ago | IN | 0 ETH | 0.0000027 | ||||
Swap Exact Token... | 298330768 | 90 days ago | IN | 0 ETH | 0.0000027 | ||||
Swap Exact Token... | 298330558 | 90 days ago | IN | 0 ETH | 0.00000316 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
329184690 | 9 hrs ago | 0.00000978 ETH | ||||
329184690 | 9 hrs ago | 0.00000978 ETH | ||||
329184690 | 9 hrs ago | 0.00000978 ETH | ||||
329184690 | 9 hrs ago | 0.00000978 ETH | ||||
329096762 | 15 hrs ago | 0.00000979 ETH | ||||
329096762 | 15 hrs ago | 0.00000979 ETH | ||||
329096762 | 15 hrs ago | 0.00000979 ETH | ||||
329096762 | 15 hrs ago | 0.00000979 ETH | ||||
328717452 | 41 hrs ago | 0.00122543 ETH | ||||
328717452 | 41 hrs ago | 0.00122543 ETH | ||||
328584674 | 2 days ago | 0.00000979 ETH | ||||
328584674 | 2 days ago | 0.00000979 ETH | ||||
328584674 | 2 days ago | 0.00000979 ETH | ||||
328584674 | 2 days ago | 0.00000979 ETH | ||||
326637547 | 7 days ago | 0.00062751 ETH | ||||
326637547 | 7 days ago | 0.00062751 ETH | ||||
325757292 | 10 days ago | 0.00376632 ETH | ||||
325757292 | 10 days ago | 0.00376632 ETH | ||||
325627534 | 10 days ago | 0.0000098 ETH | ||||
325627534 | 10 days ago | 0.0000098 ETH | ||||
325627534 | 10 days ago | 0.0000098 ETH | ||||
325627534 | 10 days ago | 0.0000098 ETH | ||||
325029199 | 12 days ago | 0.0008798 ETH | ||||
325029199 | 12 days ago | 0.0008798 ETH | ||||
324657061 | 13 days ago | 0.0000098 ETH |
Loading...
Loading
Contract Name:
OreoSwapRouter
Compiler Version
v0.6.12+commit.27d51765
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0 pragma solidity =0.6.12; import "./libraries/OreoSwapLibrary.sol"; import "./libraries/OreoSwapSafeMath.sol"; import "./libraries/TransferHelper.sol"; import "./interfaces/IOreoSwapRouter.sol"; import "./interfaces/IOreoSwapFactory.sol"; import "./interfaces/IOreoSwapBEP20.sol"; import "./interfaces/IWETH.sol"; contract OreoSwapRouter is IOreoSwapRouter { using OreoSwapSafeMath for uint256; address public immutable override factory; address public immutable override WETH; modifier ensure(uint256 deadline) { require(deadline >= block.timestamp, "OreoSwapRouter::ensure::EXPIRED"); _; } constructor(address _factory, address _WETH) public { factory = _factory; WETH = _WETH; } receive() external payable { assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract } // **** 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 (IOreoSwapFactory(factory).getPair(tokenA, tokenB) == address(0)) { IOreoSwapFactory(factory).createPair(tokenA, tokenB); } (uint256 reserveA, uint256 reserveB) = OreoSwapLibrary.getReserves(factory, tokenA, tokenB); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); } else { uint256 amountBOptimal = OreoSwapLibrary.quote(amountADesired, reserveA, reserveB); if (amountBOptimal <= amountBDesired) { require(amountBOptimal >= amountBMin, "OreoSwapRouter::_addLiquidity::INSUFFICIENT_B_AMOUNT"); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint256 amountAOptimal = OreoSwapLibrary.quote(amountBDesired, reserveB, reserveA); assert(amountAOptimal <= amountADesired); require(amountAOptimal >= amountAMin, "OreoSwapRouter::_addLiquidity::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 = OreoSwapLibrary.pairFor(factory, tokenA, tokenB); TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA); TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB); liquidity = IOreoSwapPair(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 = OreoSwapLibrary.pairFor(factory, token, WETH); TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken); IWETH(WETH).deposit{ value: amountETH }(); assert(IWETH(WETH).transfer(pair, amountETH)); liquidity = IOreoSwapPair(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 = OreoSwapLibrary.pairFor(factory, tokenA, tokenB); IOreoSwapPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair (uint256 amount0, uint256 amount1) = IOreoSwapPair(pair).burn(to); (address token0, ) = OreoSwapLibrary.sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require(amountA >= amountAMin, "OreoSwapRouter::removeLiquidity::INSUFFICIENT_A_AMOUNT"); require(amountB >= amountBMin, "OreoSwapRouter::removeLiquidity::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 = OreoSwapLibrary.pairFor(factory, tokenA, tokenB); uint256 value = approveMax ? uint256(-1) : liquidity; IOreoSwapPair(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 = OreoSwapLibrary.pairFor(factory, token, WETH); uint256 value = approveMax ? uint256(-1) : liquidity; IOreoSwapPair(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, IOreoSwapBEP20(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 = OreoSwapLibrary.pairFor(factory, token, WETH); uint256 value = approveMax ? uint256(-1) : liquidity; IOreoSwapPair(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 ) internal virtual { for (uint256 i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0, ) = OreoSwapLibrary.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 ? OreoSwapLibrary.pairFor(factory, output, path[i + 2]) : _to; IOreoSwapPair(OreoSwapLibrary.pairFor(factory, input, output)).swap(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 = OreoSwapLibrary.getAmountsOut(factory, amountIn, path); require( amounts[amounts.length - 1] >= amountOutMin, "OreoSwapRouter::swapExactTokensForTokens::INSUFFICIENT_OUTPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, OreoSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { amounts = OreoSwapLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, "OreoSwapRouter::swapTokensForExactTokens::EXCESSIVE_INPUT_AMOUNT"); TransferHelper.safeTransferFrom( path[0], msg.sender, OreoSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[0] == WETH, "OreoSwapRouter::swapExactETHForTokens::INVALID_PATH"); amounts = OreoSwapLibrary.getAmountsOut(factory, msg.value, path); require( amounts[amounts.length - 1] >= amountOutMin, "OreoSwapRouter::swapExactETHForTokens::INSUFFICIENT_OUTPUT_AMOUNT" ); IWETH(WETH).deposit{ value: amounts[0] }(); assert(IWETH(WETH).transfer(OreoSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0])); _swap(amounts, path, to); } function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[path.length - 1] == WETH, "OreoSwapRouter::swapTokensForExactETH::INVALID_PATH"); amounts = OreoSwapLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, "OreoSwapRouter::swapTokensForExactETH::EXCESSIVE_INPUT_AMOUNT"); TransferHelper.safeTransferFrom( path[0], msg.sender, OreoSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWETH(WETH).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]); } function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[path.length - 1] == WETH, "OreoSwapRouter::swapExactTokensForETH::INVALID_PATH"); amounts = OreoSwapLibrary.getAmountsOut(factory, amountIn, path); require( amounts[amounts.length - 1] >= amountOutMin, "OreoSwapRouter:swapExactTokensForETH::INSUFFICIENT_OUTPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, OreoSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWETH(WETH).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]); } function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[0] == WETH, "OreoSwapRouter::swapETHForExactTokens::INVALID_PATH"); amounts = OreoSwapLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= msg.value, "OreoSwapRouter::swapETHForExactTokens::EXCESSIVE_INPUT_AMOUNT"); IWETH(WETH).deposit{ value: amounts[0] }(); assert(IWETH(WETH).transfer(OreoSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0])); _swap(amounts, path, to); // refund dust eth, if any if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]); } // **** 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) internal virtual { for (uint256 i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0, ) = OreoSwapLibrary.sortTokens(input, output); IOreoSwapPair pair = IOreoSwapPair(OreoSwapLibrary.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 = IOreoSwapBEP20(input).balanceOf(address(pair)).sub(reserveInput); amountOutput = OreoSwapLibrary.getAmountOut(amountInput, reserveInput, reserveOutput); } (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOutput) : (amountOutput, uint256(0)); address to = i < path.length - 2 ? OreoSwapLibrary.pairFor(factory, output, path[i + 2]) : _to; 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, OreoSwapLibrary.pairFor(factory, path[0], path[1]), amountIn); uint256 balanceBefore = IOreoSwapBEP20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IOreoSwapBEP20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, "OreoSwapRouter::swapExactTokensForTokensSupportingFeeOnTransferTokens::INSUFFICIENT_OUTPUT_AMOUNT" ); } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable virtual override ensure(deadline) { require(path[0] == WETH, "OreoSwapRouter::swapExactETHForTokensSupportingFeeOnTransferTokens::INVALID_PATH"); uint256 amountIn = msg.value; IWETH(WETH).deposit{ value: amountIn }(); assert(IWETH(WETH).transfer(OreoSwapLibrary.pairFor(factory, path[0], path[1]), amountIn)); uint256 balanceBefore = IOreoSwapBEP20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IOreoSwapBEP20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, "OreoSwapRouter::swapExactETHForTokensSupportingFeeOnTransferTokens::INSUFFICIENT_OUTPUT_AMOUNT" ); } function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) { require( path[path.length - 1] == WETH, "OreoSwapRouter::swapExactTokensForETHSupportingFeeOnTransferTokens::INVALID_PATH" ); TransferHelper.safeTransferFrom(path[0], msg.sender, OreoSwapLibrary.pairFor(factory, path[0], path[1]), amountIn); _swapSupportingFeeOnTransferTokens(path, address(this)); uint256 amountOut = IOreoSwapBEP20(WETH).balanceOf(address(this)); require( amountOut >= amountOutMin, "OreoSwapRouter::swapExactTokensForETHSupportingFeeOnTransferTokens::INSUFFICIENT_OUTPUT_AMOUNT" ); IWETH(WETH).withdraw(amountOut); TransferHelper.safeTransferETH(to, amountOut); } // **** LIBRARY FUNCTIONS **** function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure virtual override returns (uint256 amountB) { return OreoSwapLibrary.quote(amountA, reserveA, reserveB); } function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure virtual override returns (uint256 amountOut) { return OreoSwapLibrary.getAmountOut(amountIn, reserveIn, reserveOut); } function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure virtual override returns (uint256 amountIn) { return OreoSwapLibrary.getAmountIn(amountOut, reserveIn, reserveOut); } function getAmountsOut(uint256 amountIn, address[] memory path) external view virtual override returns (uint256[] memory amounts) { return OreoSwapLibrary.getAmountsOut(factory, amountIn, path); } function getAmountsIn(uint256 amountOut, address[] memory path) external view virtual override returns (uint256[] memory amounts) { return OreoSwapLibrary.getAmountsIn(factory, amountOut, path); } }
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.5.0; import "../interfaces/IOreoSwapPair.sol"; import "./OreoSwapSafeMath.sol"; library OreoSwapLibrary { using OreoSwapSafeMath 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, "OreoSwapLibrary::sortTokens::IDENTICAL_ADDRESSES"); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), "OreoSwapLibrary::sortTokens::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"1aa99c5329c2d336b20a0488df8aa2f08998d008ae2d35fe46b60f22773d14d3" // 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); (uint256 reserve0, uint256 reserve1, ) = IOreoSwapPair(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, "OreoSwapLibrary::quote::INSUFFICIENT_AMOUNT"); require(reserveA > 0 && reserveB > 0, "OreoSwapLibrary::quote::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 ) internal pure returns (uint256 amountOut) { require(amountIn > 0, "OreoSwapLibrary::getAmountOut::INSUFFICIENT_INPUT_AMOUNT"); require(reserveIn > 0 && reserveOut > 0, "OreoSwapLibrary::getAmountOut::INSUFFICIENT_LIQUIDITY"); uint256 amountInWithFee = amountIn.mul(9975); 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 ) internal pure returns (uint256 amountIn) { require(amountOut > 0, "OreoSwapLibrary::getAmountIn::INSUFFICIENT_OUTPUT_AMOUNT"); require(reserveIn > 0 && reserveOut > 0, "OreoSwapLibrary::getAmountIn::INSUFFICIENT_LIQUIDITY"); uint256 numerator = reserveIn.mul(amountOut).mul(10000); uint256 denominator = reserveOut.sub(amountOut).mul(9975); amountIn = (numerator / denominator).add(1); } // performs chained getAmountOut calculations on any number of pairs function getAmountsOut( address factory, uint256 amountIn, address[] memory path ) internal view returns (uint256[] memory amounts) { require(path.length >= 2, "OreoSwapLibrary::getAmountsOut::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); } } // performs chained getAmountIn calculations on any number of pairs function getAmountsIn( address factory, uint256 amountOut, address[] memory path ) internal view returns (uint256[] memory amounts) { require(path.length >= 2, "OreoSwapLibrary::getAmountsIn::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); } } }
// SPDX-License-Identifier: GPL-3.0 pragma solidity =0.6.12; // a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math) library OreoSwapSafeMath { function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x, 'OreoSwapSafeMath::add::ds-math-add-overflow'); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x, 'OreoSwapSafeMath::sub::ds-math-sub-underflow'); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x, 'OreoSwapSafeMath::mul::ds-math-mul-overflow'); } }
// SPDX-License-Identifier: GPL-3.0 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, uint 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, uint 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, uint 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::safeTransferFrom::TRANSFER_FROM_FAILED'); } function safeTransferETH(address to, uint value) internal { (bool success,) = to.call{value:value}(new bytes(0)); require(success, 'TransferHelper::safeTransferETH::BNB_TRANSFER_FAILED'); } }
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.6.2; interface IOreoSwapRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; }
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.5.0; interface IOreoSwapFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); 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(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; }
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.5.0; interface IOreoSwapBEP20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint 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 (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); }
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.5.0; interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; }
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.5.0; interface IOreoSwapPair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint 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 (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint 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 (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); 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 (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"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":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"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"}],"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[]"}],"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[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","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":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"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"}],"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"}],"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"}],"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"}],"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"}],"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
60c060405234801561001057600080fd5b5060405162004c9538038062004c958339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c614b10620001856000398061015f5280610ce45280610d1f5280610e16528061103052806113ba528061151c52806118cb52806119a25280611a7c5280611b4a5280611c8c5280611d145280611f505280611fcb528061207f528061214b52806121dc5280612250528061277052806129da5280612a305280612a645280612ad85280612c665280612da55280612e2d525080610ea05280610f7752806110f6528061112f528061126a528061144452806114fa528061166a5280611bd95280611d465280611ea0528061228252806124fd52806126f5528061271e528061274e52806128bb5280612a0e5280612cf55280612e5f52806136b952806136fc52806139c05280613b365280613f035280613fbc528061406f5250614b106000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110ef945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611125565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b03813516906020013561121f565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136a565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114f2565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611600565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561187d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b02565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e48565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e55565b34801561088157600080fd5b5061088a611f4e565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f72565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611f7f565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b038135169060200135612105565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124af565b348015610a1c57600080fd5b5061088a6126f3565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612717945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612744565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612858565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561298b565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c1e565b6000808242811015610cde576040805162461bcd60e51b815260206004820152601f6024820152600080516020614367833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124af565b9093509150610d1d898685612f93565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da585836130e7565b50965096945050505050565b6000610dbe8484846131df565b949350505050565b60608142811015610e0c576040805162461bcd60e51b815260206004820152601f6024820152600080516020614367833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9b5760405162461bcd60e51b81526004018080602001828103825260338152602001806142e46033913960400191505060405180910390fd5b610ef97f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506132b792505050565b91508682600184510381518110610f0c57fe5b60200260200101511015610f515760405162461bcd60e51b815260040180806020018281038252604081526020018061444c6040913960400191505060405180910390fd5b610fef86866000818110610f6157fe5b905060200201356001600160a01b031633610fd57f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa357fe5b905060200201356001600160a01b03168b8b6001818110610fc057fe5b905060200201356001600160a01b03166133ed565b85600081518110610fe257fe5b60200260200101516134ad565b61102e8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061360a915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061106d57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110ab57600080fd5b505af11580156110bf573d6000803e3d6000fd5b505050506110e484836001855103815181106110d757fe5b60200260200101516130e7565b509695505050505050565b606061111c7f00000000000000000000000000000000000000000000000000000000000000008484613847565b90505b92915050565b60008060006111557f00000000000000000000000000000000000000000000000000000000000000008f8f6133ed565b9050600087611164578c611168565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111de57600080fd5b505af11580156111f2573d6000803e3d6000fd5b505050506112058f8f8f8f8f8f8f6124af565b809450819550505050509b509b9950505050505050505050565b60608142811015611265576040805162461bcd60e51b815260206004820152601f6024820152600080516020614367833981519152604482015290519081900360640190fd5b6112c37f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506132b792505050565b915086826001845103815181106112d657fe5b6020026020010151101561131b5760405162461bcd60e51b815260040180806020018281038252604481526020018061470f6044913960600191505060405180910390fd5b61132b86866000818110610f6157fe5b6110e48287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061360a915050565b606081428110156113b0576040805162461bcd60e51b815260206004820152601f6024820152600080516020614367833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ea57fe5b905060200201356001600160a01b03166001600160a01b03161461143f5760405162461bcd60e51b81526004018080602001828103825260338152602001806144196033913960400191505060405180910390fd5b61149d7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061384792505050565b915086826000815181106114ad57fe5b60200260200101511115610f515760405162461bcd60e51b815260040180806020018281038252603d815260200180614817603d913960400191505060405180910390fd5b6000806115407f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006133ed565b905060008661154f578b611553565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115c957600080fd5b505af11580156115dd573d6000803e3d6000fd5b505050506115ef8d8d8d8d8d8d611f7f565b9d9c50505050505050505050505050565b8042811015611644576040805162461bcd60e51b815260206004820152601f6024820152600080516020614367833981519152604482015290519081900360640190fd5b6116b98585600081811061165457fe5b905060200201356001600160a01b0316336116b37f00000000000000000000000000000000000000000000000000000000000000008989600081811061169657fe5b905060200201356001600160a01b03168a8a6001818110610fc057fe5b8a6134ad565b6000858560001981018181106116cb57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561172757600080fd5b505afa15801561173b573d6000803e3d6000fd5b505050506040513d602081101561175157600080fd5b50516040805160208881028281018201909352888252929350611793929091899189918291850190849080828437600092019190915250889250613969915050565b8661183682888860001981018181106117a857fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561180457600080fd5b505afa158015611818573d6000803e3d6000fd5b505050506040513d602081101561182e57600080fd5b505190613c6b565b10156118735760405162461bcd60e51b81526004018080602001828103825260618152602001806147896061913960800191505060405180910390fd5b5050505050505050565b80428110156118c1576040805162461bcd60e51b815260206004820152601f6024820152600080516020614367833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016858560001981018181106118fb57fe5b905060200201356001600160a01b03166001600160a01b0316146119505760405162461bcd60e51b81526004018080602001828103825260508152602001806143176050913960600191505060405180910390fd5b6119608585600081811061165457fe5b61199e858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613969915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611a0d57600080fd5b505afa158015611a21573d6000803e3d6000fd5b505050506040513d6020811015611a3757600080fd5b5051905086811015611a7a5760405162461bcd60e51b815260040180806020018281038252605e81526020018061460d605e913960600191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611ae057600080fd5b505af1158015611af4573d6000803e3d6000fd5b5050505061187384826130e7565b60608142811015611b48576040805162461bcd60e51b815260206004820152601f6024820152600080516020614367833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b7f57fe5b905060200201356001600160a01b03166001600160a01b031614611bd45760405162461bcd60e51b81526004018080602001828103825260338152602001806143bb6033913960400191505060405180910390fd5b611c327f0000000000000000000000000000000000000000000000000000000000000000348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506132b792505050565b91508682600184510381518110611c4557fe5b60200260200101511015611c8a5760405162461bcd60e51b81526004018080602001828103825260418152602001806149f66041913960600191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611cc657fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611cf957600080fd5b505af1158015611d0d573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d727f00000000000000000000000000000000000000000000000000000000000000008989600081811061169657fe5b84600081518110611d7f57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611dcd57600080fd5b505af1158015611de1573d6000803e3d6000fd5b505050506040513d6020811015611df757600080fd5b5051611dff57fe5b611e3e8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061360a915050565b5095945050505050565b6000610dbe848484613cad565b60608142811015611e9b576040805162461bcd60e51b815260206004820152601f6024820152600080516020614367833981519152604482015290519081900360640190fd5b611ef97f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061384792505050565b91508682600081518110611f0957fe5b6020026020010151111561131b5760405162461bcd60e51b815260040180806020018281038252604081526020018061466b6040913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613d85565b60008142811015611fc5576040805162461bcd60e51b815260206004820152601f6024820152600080516020614367833981519152604482015290519081900360640190fd5b611ff4887f000000000000000000000000000000000000000000000000000000000000000089898930896124af565b90508092505061207d88858a6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561204c57600080fd5b505afa158015612060573d6000803e3d6000fd5b505050506040513d602081101561207657600080fd5b5051612f93565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156120e357600080fd5b505af11580156120f7573d6000803e3d6000fd5b505050506110e484836130e7565b8042811015612149576040805162461bcd60e51b815260206004820152601f6024820152600080516020614367833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585600081811061218057fe5b905060200201356001600160a01b03166001600160a01b0316146121d55760405162461bcd60e51b81526004018080602001828103825260508152602001806145546050913960600191505060405180910390fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561223557600080fd5b505af1158015612249573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122ae7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169657fe5b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156122f557600080fd5b505af1158015612309573d6000803e3d6000fd5b505050506040513d602081101561231f57600080fd5b505161232757fe5b60008686600019810181811061233957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561239557600080fd5b505afa1580156123a9573d6000803e3d6000fd5b505050506040513d60208110156123bf57600080fd5b505160408051602089810282810182019093528982529293506124019290918a918a918291850190849080828437600092019190915250899250613969915050565b87612472828989600019810181811061241657fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561180457600080fd5b10156118735760405162461bcd60e51b815260040180806020018281038252605e81526020018061487d605e913960600191505060405180910390fd5b60008082428110156124f6576040805162461bcd60e51b815260206004820152601f6024820152600080516020614367833981519152604482015290519081900360640190fd5b60006125237f00000000000000000000000000000000000000000000000000000000000000008c8c6133ed565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561257e57600080fd5b505af1158015612592573d6000803e3d6000fd5b505050506040513d60208110156125a857600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125f557600080fd5b505af1158015612609573d6000803e3d6000fd5b505050506040513d604081101561261f57600080fd5b508051602090910151909250905060006126398e8e613e2b565b509050806001600160a01b03168e6001600160a01b03161461265c57818361265f565b82825b90975095508a8710156126a35760405162461bcd60e51b81526004018080602001828103825260368152602001806147536036913960400191505060405180910390fd5b898610156126e25760405162461bcd60e51b815260040180806020018281038252603681526020018061490b6036913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b606061111c7f000000000000000000000000000000000000000000000000000000000000000084846132b7565b60008060006127947f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006133ed565b90506000876127a3578c6127a7565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561281d57600080fd5b505af1158015612831573d6000803e3d6000fd5b505050506128438e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128a1576040805162461bcd60e51b815260206004820152601f6024820152600080516020614367833981519152604482015290519081900360640190fd5b6128af8c8c8c8c8c8c613ef3565b909450925060006128e17f00000000000000000000000000000000000000000000000000000000000000008e8e6133ed565b90506128ef8d3383886134ad565b6128fb8c3383876134ad565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b15801561294a57600080fd5b505af115801561295e573d6000803e3d6000fd5b505050506040513d602081101561297457600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129d4576040805162461bcd60e51b815260206004820152601f6024820152600080516020614367833981519152604482015290519081900360640190fd5b612a028a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613ef3565b90945092506000612a547f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006133ed565b9050612a628b3383886134ad565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612abd57600080fd5b505af1158015612ad1573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b4d57600080fd5b505af1158015612b61573d6000803e3d6000fd5b505050506040513d6020811015612b7757600080fd5b5051612b7f57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b158015612bce57600080fd5b505af1158015612be2573d6000803e3d6000fd5b505050506040513d6020811015612bf857600080fd5b5051925034841015612c1057612c10338534036130e7565b505096509650969350505050565b60608142811015612c64576040805162461bcd60e51b815260206004820152601f6024820152600080516020614367833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612c9b57fe5b905060200201356001600160a01b03166001600160a01b031614612cf05760405162461bcd60e51b815260040180806020018281038252603381526020018061496c6033913960400191505060405180910390fd5b612d4e7f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061384792505050565b91503482600081518110612d5e57fe5b60200260200101511115612da35760405162461bcd60e51b815260040180806020018281038252603d8152602001806145a4603d913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612ddf57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e1257600080fd5b505af1158015612e26573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612e8b7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169657fe5b84600081518110612e9857fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612ee657600080fd5b505af1158015612efa573d6000803e3d6000fd5b505050506040513d6020811015612f1057600080fd5b5051612f1857fe5b612f578287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061360a915050565b81600081518110612f6457fe5b6020026020010151341115611e3e57611e3e3383600081518110612f8457fe5b602002602001015134036130e7565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130105780518252601f199092019160209182019101612ff1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613072576040519150601f19603f3d011682016040523d82523d6000602084013e613077565b606091505b50915091508180156130a55750805115806130a557508080602001905160208110156130a257600080fd5b50515b6130e05760405162461bcd60e51b815260040180806020018281038252602d8152602001806147ea602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106131335780518252601f199092019160209182019101613114565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613195576040519150601f19603f3d011682016040523d82523d6000602084013e61319a565b606091505b50509050806131da5760405162461bcd60e51b8152600401808060200182810382526034815260200180614a376034913960400191505060405180910390fd5b505050565b600080841161321f5760405162461bcd60e51b8152600401808060200182810382526038815260200180614a6b6038913960400191505060405180910390fd5b60008311801561322f5750600082115b61326a5760405162461bcd60e51b81526004018080602001828103825260358152602001806144eb6035913960400191505060405180910390fd5b6000613278856126f7614184565b905060006132868285614184565b905060006132a08361329a88612710614184565b906141da565b90508082816132ab57fe5b04979650505050505050565b60606002825110156132fa5760405162461bcd60e51b815260040180806020018281038252602c8152602001806149ca602c913960400191505060405180910390fd5b815167ffffffffffffffff8111801561331257600080fd5b5060405190808252806020026020018201604052801561333c578160200160208202803683370190505b509050828160008151811061334d57fe5b60200260200101818152505060005b60018351038110156133e55760008061339f8786858151811061337b57fe5b602002602001015187866001018151811061339257fe5b602002602001015161421c565b915091506133c18484815181106133b257fe5b602002602001015183836131df565b8484600101815181106133d057fe5b6020908102919091010152505060010161335c565b509392505050565b60008060006133fc8585613e2b565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f1aa99c5329c2d336b20a0488df8aa2f08998d008ae2d35fe46b60f22773d14d3609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135325780518252601f199092019160209182019101613513565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613594576040519150601f19603f3d011682016040523d82523d6000602084013e613599565b606091505b50915091508180156135c75750805115806135c757508080602001905160208110156135c457600080fd5b50515b6136025760405162461bcd60e51b81526004018080602001828103825260368152602001806146d96036913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138415760008084838151811061362857fe5b602002602001015185846001018151811061363f57fe5b60200260200101519150915060006136578383613e2b565b509050600087856001018151811061366b57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146136995782600061369d565b6000835b91509150600060028a510388106136b457886136f5565b6136f57f0000000000000000000000000000000000000000000000000000000000000000878c8b600201815181106136e857fe5b60200260200101516133ed565b90506137227f000000000000000000000000000000000000000000000000000000000000000088886133ed565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f19166020018201604052801561375f576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156137c75781810151838201526020016137af565b50505050905090810190601f1680156137f45780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561381657600080fd5b505af115801561382a573d6000803e3d6000fd5b50506001909901985061360d975050505050505050565b50505050565b606060028251101561388a5760405162461bcd60e51b815260040180806020018281038252602b815260200180614941602b913960400191505060405180910390fd5b815167ffffffffffffffff811180156138a257600080fd5b506040519080825280602002602001820160405280156138cc578160200160208202803683370190505b50905082816001835103815181106138e057fe5b60209081029190910101528151600019015b80156133e5576000806139228786600186038151811061390e57fe5b602002602001015187868151811061339257fe5b9150915061394484848151811061393557fe5b60200260200101518383613cad565b84600185038151811061395357fe5b60209081029190910101525050600019016138f2565b60005b60018351038110156131da5760008084838151811061398757fe5b602002602001015185846001018151811061399e57fe5b60200260200101519150915060006139b68383613e2b565b50905060006139e67f000000000000000000000000000000000000000000000000000000000000000085856133ed565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613a2757600080fd5b505afa158015613a3b573d6000803e3d6000fd5b505050506040513d6060811015613a5157600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613a87578284613a8a565b83835b91509150613adf828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561180457600080fd5b9550613aec8683836131df565b945050505050600080856001600160a01b0316886001600160a01b031614613b1657826000613b1a565b6000835b91509150600060028c51038a10613b31578a613b65565b613b657f0000000000000000000000000000000000000000000000000000000000000000898e8d600201815181106136e857fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613bef578181015183820152602001613bd7565b50505050905090810190601f168015613c1c5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613c3e57600080fd5b505af1158015613c52573d6000803e3d6000fd5b50506001909b019a5061396c9950505050505050505050565b8082038281111561111f5760405162461bcd60e51b815260040180806020018281038252602c8152602001806145e1602c913960400191505060405180910390fd5b6000808411613ced5760405162461bcd60e51b8152600401808060200182810382526038815260200180614aa36038913960400191505060405180910390fd5b600083118015613cfd5750600082115b613d385760405162461bcd60e51b81526004018080602001828103825260348152602001806143876034913960400191505060405180910390fd5b6000613d50612710613d4a8688614184565b90614184565b90506000613d646126f7613d4a8689613c6b565b9050613d7b6001828481613d7457fe5b04906141da565b9695505050505050565b6000808411613dc55760405162461bcd60e51b815260040180806020018281038252602b8152602001806143ee602b913960400191505060405180910390fd5b600083118015613dd55750600082115b613e105760405162461bcd60e51b815260040180806020018281038252602e8152602001806146ab602e913960400191505060405180910390fd5b82613e1b8584614184565b81613e2257fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613e7f5760405162461bcd60e51b81526004018080602001828103825260308152602001806148db6030913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613e9f578284613ea2565b83835b90925090506001600160a01b038216613eec5760405162461bcd60e51b81526004018080602001828103825260298152602001806148546029913960400191505060405180910390fd5b9250929050565b60008060006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e6a439058a8a6040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015613f7f57600080fd5b505afa158015613f93573d6000803e3d6000fd5b505050506040513d6020811015613fa957600080fd5b50516001600160a01b03161415614067577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c9c6539689896040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050602060405180830381600087803b15801561403a57600080fd5b505af115801561404e573d6000803e3d6000fd5b505050506040513d602081101561406457600080fd5b50505b6000806140957f00000000000000000000000000000000000000000000000000000000000000008b8b61421c565b915091508160001480156140a7575080155b156140b757879350869250614177565b60006140c4898484613d85565b9050878111614117578581101561410c5760405162461bcd60e51b81526004018080602001828103825260348152602001806145206034913960400191505060405180910390fd5b889450925082614175565b6000614124898486613d85565b90508981111561413057fe5b8781101561416f5760405162461bcd60e51b815260040180806020018281038252603481526020018061448c6034913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b600081158061419f5750508082028282828161419c57fe5b04145b61111f5760405162461bcd60e51b815260040180806020018281038252602b81526020018061499f602b913960400191505060405180910390fd5b8082018281101561111f5760405162461bcd60e51b815260040180806020018281038252602b8152602001806144c0602b913960400191505060405180910390fd5b600080600061422b8585613e2b565b50905060008061423c8888886133ed565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561427457600080fd5b505afa158015614288573d6000803e3d6000fd5b505050506040513d606081101561429e57600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146142d15780826142d4565b81815b9099909850965050505050505056fe4f72656f53776170526f757465723a3a737761704578616374546f6b656e73466f724554483a3a494e56414c49445f504154484f72656f53776170526f757465723a3a737761704578616374546f6b656e73466f72455448537570706f7274696e674665654f6e5472616e73666572546f6b656e733a3a494e56414c49445f504154484f72656f53776170526f757465723a3a656e737572653a3a45585049524544004f72656f537761704c6962726172793a3a676574416d6f756e74496e3a3a494e53554646494349454e545f4c49515549444954594f72656f53776170526f757465723a3a737761704578616374455448466f72546f6b656e733a3a494e56414c49445f504154484f72656f537761704c6962726172793a3a71756f74653a3a494e53554646494349454e545f414d4f554e544f72656f53776170526f757465723a3a73776170546f6b656e73466f7245786163744554483a3a494e56414c49445f504154484f72656f53776170526f757465723a737761704578616374546f6b656e73466f724554483a3a494e53554646494349454e545f4f55545055545f414d4f554e544f72656f53776170526f757465723a3a5f6164644c69717569646974793a3a494e53554646494349454e545f415f414d4f554e544f72656f53776170536166654d6174683a3a6164643a3a64732d6d6174682d6164642d6f766572666c6f774f72656f537761704c6962726172793a3a676574416d6f756e744f75743a3a494e53554646494349454e545f4c49515549444954594f72656f53776170526f757465723a3a5f6164644c69717569646974793a3a494e53554646494349454e545f425f414d4f554e544f72656f53776170526f757465723a3a737761704578616374455448466f72546f6b656e73537570706f7274696e674665654f6e5472616e73666572546f6b656e733a3a494e56414c49445f504154484f72656f53776170526f757465723a3a73776170455448466f724578616374546f6b656e733a3a4558434553534956455f494e5055545f414d4f554e544f72656f53776170536166654d6174683a3a7375623a3a64732d6d6174682d7375622d756e646572666c6f774f72656f53776170526f757465723a3a737761704578616374546f6b656e73466f72455448537570706f7274696e674665654f6e5472616e73666572546f6b656e733a3a494e53554646494349454e545f4f55545055545f414d4f554e544f72656f53776170526f757465723a3a73776170546f6b656e73466f724578616374546f6b656e733a3a4558434553534956455f494e5055545f414d4f554e544f72656f537761704c6962726172793a3a71756f74653a3a494e53554646494349454e545f4c49515549444954595472616e7366657248656c7065723a3a736166655472616e7366657246726f6d3a3a5452414e534645525f46524f4d5f4641494c45444f72656f53776170526f757465723a3a737761704578616374546f6b656e73466f72546f6b656e733a3a494e53554646494349454e545f4f55545055545f414d4f554e544f72656f53776170526f757465723a3a72656d6f76654c69717569646974793a3a494e53554646494349454e545f415f414d4f554e544f72656f53776170526f757465723a3a737761704578616374546f6b656e73466f72546f6b656e73537570706f7274696e674665654f6e5472616e73666572546f6b656e733a3a494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665723a3a5452414e534645525f4641494c45444f72656f53776170526f757465723a3a73776170546f6b656e73466f7245786163744554483a3a4558434553534956455f494e5055545f414d4f554e544f72656f537761704c6962726172793a3a736f7274546f6b656e733a3a5a45524f5f414444524553534f72656f53776170526f757465723a3a737761704578616374455448466f72546f6b656e73537570706f7274696e674665654f6e5472616e73666572546f6b656e733a3a494e53554646494349454e545f4f55545055545f414d4f554e544f72656f537761704c6962726172793a3a736f7274546f6b656e733a3a4944454e544943414c5f4144445245535345534f72656f53776170526f757465723a3a72656d6f76654c69717569646974793a3a494e53554646494349454e545f425f414d4f554e544f72656f537761704c6962726172793a3a676574416d6f756e7473496e3a3a494e56414c49445f504154484f72656f53776170526f757465723a3a73776170455448466f724578616374546f6b656e733a3a494e56414c49445f504154484f72656f53776170536166654d6174683a3a6d756c3a3a64732d6d6174682d6d756c2d6f766572666c6f774f72656f537761704c6962726172793a3a676574416d6f756e74734f75743a3a494e56414c49445f504154484f72656f53776170526f757465723a3a737761704578616374455448466f72546f6b656e733a3a494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665724554483a3a424e425f5452414e534645525f4641494c45444f72656f537761704c6962726172793a3a676574416d6f756e744f75743a3a494e53554646494349454e545f494e5055545f414d4f554e544f72656f537761704c6962726172793a3a676574416d6f756e74496e3a3a494e53554646494349454e545f4f55545055545f414d4f554e54a2646970667358221220afaa06f8580a904bf74e45eed5eaf84b2f83e73ea70ad994aaaa5168e092268d64736f6c634300060c003300000000000000000000000020fafd2b0ba599416d75eb54f48cda9812964f4600000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1
Deployed Bytecode
0x60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110ef945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611125565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b03813516906020013561121f565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136a565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114f2565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611600565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561187d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b02565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e48565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e55565b34801561088157600080fd5b5061088a611f4e565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f72565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611f7f565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b038135169060200135612105565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124af565b348015610a1c57600080fd5b5061088a6126f3565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612717945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612744565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612858565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561298b565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c1e565b6000808242811015610cde576040805162461bcd60e51b815260206004820152601f6024820152600080516020614367833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab18a8a8a308a6124af565b9093509150610d1d898685612f93565b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da585836130e7565b50965096945050505050565b6000610dbe8484846131df565b949350505050565b60608142811015610e0c576040805162461bcd60e51b815260206004820152601f6024820152600080516020614367833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab11686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9b5760405162461bcd60e51b81526004018080602001828103825260338152602001806142e46033913960400191505060405180910390fd5b610ef97f00000000000000000000000020fafd2b0ba599416d75eb54f48cda9812964f46898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506132b792505050565b91508682600184510381518110610f0c57fe5b60200260200101511015610f515760405162461bcd60e51b815260040180806020018281038252604081526020018061444c6040913960400191505060405180910390fd5b610fef86866000818110610f6157fe5b905060200201356001600160a01b031633610fd57f00000000000000000000000020fafd2b0ba599416d75eb54f48cda9812964f468a8a6000818110610fa357fe5b905060200201356001600160a01b03168b8b6001818110610fc057fe5b905060200201356001600160a01b03166133ed565b85600081518110610fe257fe5b60200260200101516134ad565b61102e8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061360a915050565b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b0316632e1a7d4d8360018551038151811061106d57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110ab57600080fd5b505af11580156110bf573d6000803e3d6000fd5b505050506110e484836001855103815181106110d757fe5b60200260200101516130e7565b509695505050505050565b606061111c7f00000000000000000000000020fafd2b0ba599416d75eb54f48cda9812964f468484613847565b90505b92915050565b60008060006111557f00000000000000000000000020fafd2b0ba599416d75eb54f48cda9812964f468f8f6133ed565b9050600087611164578c611168565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111de57600080fd5b505af11580156111f2573d6000803e3d6000fd5b505050506112058f8f8f8f8f8f8f6124af565b809450819550505050509b509b9950505050505050505050565b60608142811015611265576040805162461bcd60e51b815260206004820152601f6024820152600080516020614367833981519152604482015290519081900360640190fd5b6112c37f00000000000000000000000020fafd2b0ba599416d75eb54f48cda9812964f46898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506132b792505050565b915086826001845103815181106112d657fe5b6020026020010151101561131b5760405162461bcd60e51b815260040180806020018281038252604481526020018061470f6044913960600191505060405180910390fd5b61132b86866000818110610f6157fe5b6110e48287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061360a915050565b606081428110156113b0576040805162461bcd60e51b815260206004820152601f6024820152600080516020614367833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab116868660001981018181106113ea57fe5b905060200201356001600160a01b03166001600160a01b03161461143f5760405162461bcd60e51b81526004018080602001828103825260338152602001806144196033913960400191505060405180910390fd5b61149d7f00000000000000000000000020fafd2b0ba599416d75eb54f48cda9812964f468988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061384792505050565b915086826000815181106114ad57fe5b60200260200101511115610f515760405162461bcd60e51b815260040180806020018281038252603d815260200180614817603d913960400191505060405180910390fd5b6000806115407f00000000000000000000000020fafd2b0ba599416d75eb54f48cda9812964f468d7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16133ed565b905060008661154f578b611553565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115c957600080fd5b505af11580156115dd573d6000803e3d6000fd5b505050506115ef8d8d8d8d8d8d611f7f565b9d9c50505050505050505050505050565b8042811015611644576040805162461bcd60e51b815260206004820152601f6024820152600080516020614367833981519152604482015290519081900360640190fd5b6116b98585600081811061165457fe5b905060200201356001600160a01b0316336116b37f00000000000000000000000020fafd2b0ba599416d75eb54f48cda9812964f468989600081811061169657fe5b905060200201356001600160a01b03168a8a6001818110610fc057fe5b8a6134ad565b6000858560001981018181106116cb57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561172757600080fd5b505afa15801561173b573d6000803e3d6000fd5b505050506040513d602081101561175157600080fd5b50516040805160208881028281018201909352888252929350611793929091899189918291850190849080828437600092019190915250889250613969915050565b8661183682888860001981018181106117a857fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561180457600080fd5b505afa158015611818573d6000803e3d6000fd5b505050506040513d602081101561182e57600080fd5b505190613c6b565b10156118735760405162461bcd60e51b81526004018080602001828103825260618152602001806147896061913960800191505060405180910390fd5b5050505050505050565b80428110156118c1576040805162461bcd60e51b815260206004820152601f6024820152600080516020614367833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab116858560001981018181106118fb57fe5b905060200201356001600160a01b03166001600160a01b0316146119505760405162461bcd60e51b81526004018080602001828103825260508152602001806143176050913960600191505060405180910390fd5b6119608585600081811061165457fe5b61199e858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613969915050565b60007f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611a0d57600080fd5b505afa158015611a21573d6000803e3d6000fd5b505050506040513d6020811015611a3757600080fd5b5051905086811015611a7a5760405162461bcd60e51b815260040180806020018281038252605e81526020018061460d605e913960600191505060405180910390fd5b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611ae057600080fd5b505af1158015611af4573d6000803e3d6000fd5b5050505061187384826130e7565b60608142811015611b48576040805162461bcd60e51b815260206004820152601f6024820152600080516020614367833981519152604482015290519081900360640190fd5b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b031686866000818110611b7f57fe5b905060200201356001600160a01b03166001600160a01b031614611bd45760405162461bcd60e51b81526004018080602001828103825260338152602001806143bb6033913960400191505060405180910390fd5b611c327f00000000000000000000000020fafd2b0ba599416d75eb54f48cda9812964f46348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506132b792505050565b91508682600184510381518110611c4557fe5b60200260200101511015611c8a5760405162461bcd60e51b81526004018080602001828103825260418152602001806149f66041913960600191505060405180910390fd5b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b031663d0e30db083600081518110611cc657fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611cf957600080fd5b505af1158015611d0d573d6000803e3d6000fd5b50505050507f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b031663a9059cbb611d727f00000000000000000000000020fafd2b0ba599416d75eb54f48cda9812964f468989600081811061169657fe5b84600081518110611d7f57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611dcd57600080fd5b505af1158015611de1573d6000803e3d6000fd5b505050506040513d6020811015611df757600080fd5b5051611dff57fe5b611e3e8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061360a915050565b5095945050505050565b6000610dbe848484613cad565b60608142811015611e9b576040805162461bcd60e51b815260206004820152601f6024820152600080516020614367833981519152604482015290519081900360640190fd5b611ef97f00000000000000000000000020fafd2b0ba599416d75eb54f48cda9812964f468988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061384792505050565b91508682600081518110611f0957fe5b6020026020010151111561131b5760405162461bcd60e51b815260040180806020018281038252604081526020018061466b6040913960400191505060405180910390fd5b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab181565b6000610dbe848484613d85565b60008142811015611fc5576040805162461bcd60e51b815260206004820152601f6024820152600080516020614367833981519152604482015290519081900360640190fd5b611ff4887f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab189898930896124af565b90508092505061207d88858a6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561204c57600080fd5b505afa158015612060573d6000803e3d6000fd5b505050506040513d602081101561207657600080fd5b5051612f93565b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156120e357600080fd5b505af11580156120f7573d6000803e3d6000fd5b505050506110e484836130e7565b8042811015612149576040805162461bcd60e51b815260206004820152601f6024820152600080516020614367833981519152604482015290519081900360640190fd5b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b03168585600081811061218057fe5b905060200201356001600160a01b03166001600160a01b0316146121d55760405162461bcd60e51b81526004018080602001828103825260508152602001806145546050913960600191505060405180910390fd5b60003490507f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561223557600080fd5b505af1158015612249573d6000803e3d6000fd5b50505050507f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b031663a9059cbb6122ae7f00000000000000000000000020fafd2b0ba599416d75eb54f48cda9812964f468989600081811061169657fe5b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156122f557600080fd5b505af1158015612309573d6000803e3d6000fd5b505050506040513d602081101561231f57600080fd5b505161232757fe5b60008686600019810181811061233957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561239557600080fd5b505afa1580156123a9573d6000803e3d6000fd5b505050506040513d60208110156123bf57600080fd5b505160408051602089810282810182019093528982529293506124019290918a918a918291850190849080828437600092019190915250899250613969915050565b87612472828989600019810181811061241657fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561180457600080fd5b10156118735760405162461bcd60e51b815260040180806020018281038252605e81526020018061487d605e913960600191505060405180910390fd5b60008082428110156124f6576040805162461bcd60e51b815260206004820152601f6024820152600080516020614367833981519152604482015290519081900360640190fd5b60006125237f00000000000000000000000020fafd2b0ba599416d75eb54f48cda9812964f468c8c6133ed565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561257e57600080fd5b505af1158015612592573d6000803e3d6000fd5b505050506040513d60208110156125a857600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125f557600080fd5b505af1158015612609573d6000803e3d6000fd5b505050506040513d604081101561261f57600080fd5b508051602090910151909250905060006126398e8e613e2b565b509050806001600160a01b03168e6001600160a01b03161461265c57818361265f565b82825b90975095508a8710156126a35760405162461bcd60e51b81526004018080602001828103825260368152602001806147536036913960400191505060405180910390fd5b898610156126e25760405162461bcd60e51b815260040180806020018281038252603681526020018061490b6036913960400191505060405180910390fd5b505050505097509795505050505050565b7f00000000000000000000000020fafd2b0ba599416d75eb54f48cda9812964f4681565b606061111c7f00000000000000000000000020fafd2b0ba599416d75eb54f48cda9812964f4684846132b7565b60008060006127947f00000000000000000000000020fafd2b0ba599416d75eb54f48cda9812964f468e7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16133ed565b90506000876127a3578c6127a7565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561281d57600080fd5b505af1158015612831573d6000803e3d6000fd5b505050506128438e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128a1576040805162461bcd60e51b815260206004820152601f6024820152600080516020614367833981519152604482015290519081900360640190fd5b6128af8c8c8c8c8c8c613ef3565b909450925060006128e17f00000000000000000000000020fafd2b0ba599416d75eb54f48cda9812964f468e8e6133ed565b90506128ef8d3383886134ad565b6128fb8c3383876134ad565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b15801561294a57600080fd5b505af115801561295e573d6000803e3d6000fd5b505050506040513d602081101561297457600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129d4576040805162461bcd60e51b815260206004820152601f6024820152600080516020614367833981519152604482015290519081900360640190fd5b612a028a7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab18b348c8c613ef3565b90945092506000612a547f00000000000000000000000020fafd2b0ba599416d75eb54f48cda9812964f468c7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16133ed565b9050612a628b3383886134ad565b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612abd57600080fd5b505af1158015612ad1573d6000803e3d6000fd5b50505050507f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b4d57600080fd5b505af1158015612b61573d6000803e3d6000fd5b505050506040513d6020811015612b7757600080fd5b5051612b7f57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b158015612bce57600080fd5b505af1158015612be2573d6000803e3d6000fd5b505050506040513d6020811015612bf857600080fd5b5051925034841015612c1057612c10338534036130e7565b505096509650969350505050565b60608142811015612c64576040805162461bcd60e51b815260206004820152601f6024820152600080516020614367833981519152604482015290519081900360640190fd5b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b031686866000818110612c9b57fe5b905060200201356001600160a01b03166001600160a01b031614612cf05760405162461bcd60e51b815260040180806020018281038252603381526020018061496c6033913960400191505060405180910390fd5b612d4e7f00000000000000000000000020fafd2b0ba599416d75eb54f48cda9812964f468888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061384792505050565b91503482600081518110612d5e57fe5b60200260200101511115612da35760405162461bcd60e51b815260040180806020018281038252603d8152602001806145a4603d913960400191505060405180910390fd5b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b031663d0e30db083600081518110612ddf57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e1257600080fd5b505af1158015612e26573d6000803e3d6000fd5b50505050507f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b031663a9059cbb612e8b7f00000000000000000000000020fafd2b0ba599416d75eb54f48cda9812964f468989600081811061169657fe5b84600081518110612e9857fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612ee657600080fd5b505af1158015612efa573d6000803e3d6000fd5b505050506040513d6020811015612f1057600080fd5b5051612f1857fe5b612f578287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061360a915050565b81600081518110612f6457fe5b6020026020010151341115611e3e57611e3e3383600081518110612f8457fe5b602002602001015134036130e7565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130105780518252601f199092019160209182019101612ff1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613072576040519150601f19603f3d011682016040523d82523d6000602084013e613077565b606091505b50915091508180156130a55750805115806130a557508080602001905160208110156130a257600080fd5b50515b6130e05760405162461bcd60e51b815260040180806020018281038252602d8152602001806147ea602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106131335780518252601f199092019160209182019101613114565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613195576040519150601f19603f3d011682016040523d82523d6000602084013e61319a565b606091505b50509050806131da5760405162461bcd60e51b8152600401808060200182810382526034815260200180614a376034913960400191505060405180910390fd5b505050565b600080841161321f5760405162461bcd60e51b8152600401808060200182810382526038815260200180614a6b6038913960400191505060405180910390fd5b60008311801561322f5750600082115b61326a5760405162461bcd60e51b81526004018080602001828103825260358152602001806144eb6035913960400191505060405180910390fd5b6000613278856126f7614184565b905060006132868285614184565b905060006132a08361329a88612710614184565b906141da565b90508082816132ab57fe5b04979650505050505050565b60606002825110156132fa5760405162461bcd60e51b815260040180806020018281038252602c8152602001806149ca602c913960400191505060405180910390fd5b815167ffffffffffffffff8111801561331257600080fd5b5060405190808252806020026020018201604052801561333c578160200160208202803683370190505b509050828160008151811061334d57fe5b60200260200101818152505060005b60018351038110156133e55760008061339f8786858151811061337b57fe5b602002602001015187866001018151811061339257fe5b602002602001015161421c565b915091506133c18484815181106133b257fe5b602002602001015183836131df565b8484600101815181106133d057fe5b6020908102919091010152505060010161335c565b509392505050565b60008060006133fc8585613e2b565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f1aa99c5329c2d336b20a0488df8aa2f08998d008ae2d35fe46b60f22773d14d3609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135325780518252601f199092019160209182019101613513565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613594576040519150601f19603f3d011682016040523d82523d6000602084013e613599565b606091505b50915091508180156135c75750805115806135c757508080602001905160208110156135c457600080fd5b50515b6136025760405162461bcd60e51b81526004018080602001828103825260368152602001806146d96036913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138415760008084838151811061362857fe5b602002602001015185846001018151811061363f57fe5b60200260200101519150915060006136578383613e2b565b509050600087856001018151811061366b57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146136995782600061369d565b6000835b91509150600060028a510388106136b457886136f5565b6136f57f00000000000000000000000020fafd2b0ba599416d75eb54f48cda9812964f46878c8b600201815181106136e857fe5b60200260200101516133ed565b90506137227f00000000000000000000000020fafd2b0ba599416d75eb54f48cda9812964f4688886133ed565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f19166020018201604052801561375f576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156137c75781810151838201526020016137af565b50505050905090810190601f1680156137f45780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561381657600080fd5b505af115801561382a573d6000803e3d6000fd5b50506001909901985061360d975050505050505050565b50505050565b606060028251101561388a5760405162461bcd60e51b815260040180806020018281038252602b815260200180614941602b913960400191505060405180910390fd5b815167ffffffffffffffff811180156138a257600080fd5b506040519080825280602002602001820160405280156138cc578160200160208202803683370190505b50905082816001835103815181106138e057fe5b60209081029190910101528151600019015b80156133e5576000806139228786600186038151811061390e57fe5b602002602001015187868151811061339257fe5b9150915061394484848151811061393557fe5b60200260200101518383613cad565b84600185038151811061395357fe5b60209081029190910101525050600019016138f2565b60005b60018351038110156131da5760008084838151811061398757fe5b602002602001015185846001018151811061399e57fe5b60200260200101519150915060006139b68383613e2b565b50905060006139e67f00000000000000000000000020fafd2b0ba599416d75eb54f48cda9812964f4685856133ed565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613a2757600080fd5b505afa158015613a3b573d6000803e3d6000fd5b505050506040513d6060811015613a5157600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613a87578284613a8a565b83835b91509150613adf828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561180457600080fd5b9550613aec8683836131df565b945050505050600080856001600160a01b0316886001600160a01b031614613b1657826000613b1a565b6000835b91509150600060028c51038a10613b31578a613b65565b613b657f00000000000000000000000020fafd2b0ba599416d75eb54f48cda9812964f46898e8d600201815181106136e857fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613bef578181015183820152602001613bd7565b50505050905090810190601f168015613c1c5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613c3e57600080fd5b505af1158015613c52573d6000803e3d6000fd5b50506001909b019a5061396c9950505050505050505050565b8082038281111561111f5760405162461bcd60e51b815260040180806020018281038252602c8152602001806145e1602c913960400191505060405180910390fd5b6000808411613ced5760405162461bcd60e51b8152600401808060200182810382526038815260200180614aa36038913960400191505060405180910390fd5b600083118015613cfd5750600082115b613d385760405162461bcd60e51b81526004018080602001828103825260348152602001806143876034913960400191505060405180910390fd5b6000613d50612710613d4a8688614184565b90614184565b90506000613d646126f7613d4a8689613c6b565b9050613d7b6001828481613d7457fe5b04906141da565b9695505050505050565b6000808411613dc55760405162461bcd60e51b815260040180806020018281038252602b8152602001806143ee602b913960400191505060405180910390fd5b600083118015613dd55750600082115b613e105760405162461bcd60e51b815260040180806020018281038252602e8152602001806146ab602e913960400191505060405180910390fd5b82613e1b8584614184565b81613e2257fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613e7f5760405162461bcd60e51b81526004018080602001828103825260308152602001806148db6030913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613e9f578284613ea2565b83835b90925090506001600160a01b038216613eec5760405162461bcd60e51b81526004018080602001828103825260298152602001806148546029913960400191505060405180910390fd5b9250929050565b60008060006001600160a01b03167f00000000000000000000000020fafd2b0ba599416d75eb54f48cda9812964f466001600160a01b031663e6a439058a8a6040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015613f7f57600080fd5b505afa158015613f93573d6000803e3d6000fd5b505050506040513d6020811015613fa957600080fd5b50516001600160a01b03161415614067577f00000000000000000000000020fafd2b0ba599416d75eb54f48cda9812964f466001600160a01b031663c9c6539689896040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050602060405180830381600087803b15801561403a57600080fd5b505af115801561404e573d6000803e3d6000fd5b505050506040513d602081101561406457600080fd5b50505b6000806140957f00000000000000000000000020fafd2b0ba599416d75eb54f48cda9812964f468b8b61421c565b915091508160001480156140a7575080155b156140b757879350869250614177565b60006140c4898484613d85565b9050878111614117578581101561410c5760405162461bcd60e51b81526004018080602001828103825260348152602001806145206034913960400191505060405180910390fd5b889450925082614175565b6000614124898486613d85565b90508981111561413057fe5b8781101561416f5760405162461bcd60e51b815260040180806020018281038252603481526020018061448c6034913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b600081158061419f5750508082028282828161419c57fe5b04145b61111f5760405162461bcd60e51b815260040180806020018281038252602b81526020018061499f602b913960400191505060405180910390fd5b8082018281101561111f5760405162461bcd60e51b815260040180806020018281038252602b8152602001806144c0602b913960400191505060405180910390fd5b600080600061422b8585613e2b565b50905060008061423c8888886133ed565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561427457600080fd5b505afa158015614288573d6000803e3d6000fd5b505050506040513d606081101561429e57600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146142d15780826142d4565b81815b9099909850965050505050505056fe4f72656f53776170526f757465723a3a737761704578616374546f6b656e73466f724554483a3a494e56414c49445f504154484f72656f53776170526f757465723a3a737761704578616374546f6b656e73466f72455448537570706f7274696e674665654f6e5472616e73666572546f6b656e733a3a494e56414c49445f504154484f72656f53776170526f757465723a3a656e737572653a3a45585049524544004f72656f537761704c6962726172793a3a676574416d6f756e74496e3a3a494e53554646494349454e545f4c49515549444954594f72656f53776170526f757465723a3a737761704578616374455448466f72546f6b656e733a3a494e56414c49445f504154484f72656f537761704c6962726172793a3a71756f74653a3a494e53554646494349454e545f414d4f554e544f72656f53776170526f757465723a3a73776170546f6b656e73466f7245786163744554483a3a494e56414c49445f504154484f72656f53776170526f757465723a737761704578616374546f6b656e73466f724554483a3a494e53554646494349454e545f4f55545055545f414d4f554e544f72656f53776170526f757465723a3a5f6164644c69717569646974793a3a494e53554646494349454e545f415f414d4f554e544f72656f53776170536166654d6174683a3a6164643a3a64732d6d6174682d6164642d6f766572666c6f774f72656f537761704c6962726172793a3a676574416d6f756e744f75743a3a494e53554646494349454e545f4c49515549444954594f72656f53776170526f757465723a3a5f6164644c69717569646974793a3a494e53554646494349454e545f425f414d4f554e544f72656f53776170526f757465723a3a737761704578616374455448466f72546f6b656e73537570706f7274696e674665654f6e5472616e73666572546f6b656e733a3a494e56414c49445f504154484f72656f53776170526f757465723a3a73776170455448466f724578616374546f6b656e733a3a4558434553534956455f494e5055545f414d4f554e544f72656f53776170536166654d6174683a3a7375623a3a64732d6d6174682d7375622d756e646572666c6f774f72656f53776170526f757465723a3a737761704578616374546f6b656e73466f72455448537570706f7274696e674665654f6e5472616e73666572546f6b656e733a3a494e53554646494349454e545f4f55545055545f414d4f554e544f72656f53776170526f757465723a3a73776170546f6b656e73466f724578616374546f6b656e733a3a4558434553534956455f494e5055545f414d4f554e544f72656f537761704c6962726172793a3a71756f74653a3a494e53554646494349454e545f4c49515549444954595472616e7366657248656c7065723a3a736166655472616e7366657246726f6d3a3a5452414e534645525f46524f4d5f4641494c45444f72656f53776170526f757465723a3a737761704578616374546f6b656e73466f72546f6b656e733a3a494e53554646494349454e545f4f55545055545f414d4f554e544f72656f53776170526f757465723a3a72656d6f76654c69717569646974793a3a494e53554646494349454e545f415f414d4f554e544f72656f53776170526f757465723a3a737761704578616374546f6b656e73466f72546f6b656e73537570706f7274696e674665654f6e5472616e73666572546f6b656e733a3a494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665723a3a5452414e534645525f4641494c45444f72656f53776170526f757465723a3a73776170546f6b656e73466f7245786163744554483a3a4558434553534956455f494e5055545f414d4f554e544f72656f537761704c6962726172793a3a736f7274546f6b656e733a3a5a45524f5f414444524553534f72656f53776170526f757465723a3a737761704578616374455448466f72546f6b656e73537570706f7274696e674665654f6e5472616e73666572546f6b656e733a3a494e53554646494349454e545f4f55545055545f414d4f554e544f72656f537761704c6962726172793a3a736f7274546f6b656e733a3a4944454e544943414c5f4144445245535345534f72656f53776170526f757465723a3a72656d6f76654c69717569646974793a3a494e53554646494349454e545f425f414d4f554e544f72656f537761704c6962726172793a3a676574416d6f756e7473496e3a3a494e56414c49445f504154484f72656f53776170526f757465723a3a73776170455448466f724578616374546f6b656e733a3a494e56414c49445f504154484f72656f53776170536166654d6174683a3a6d756c3a3a64732d6d6174682d6d756c2d6f766572666c6f774f72656f537761704c6962726172793a3a676574416d6f756e74734f75743a3a494e56414c49445f504154484f72656f53776170526f757465723a3a737761704578616374455448466f72546f6b656e733a3a494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665724554483a3a424e425f5452414e534645525f4641494c45444f72656f537761704c6962726172793a3a676574416d6f756e744f75743a3a494e53554646494349454e545f494e5055545f414d4f554e544f72656f537761704c6962726172793a3a676574416d6f756e74496e3a3a494e53554646494349454e545f4f55545055545f414d4f554e54a2646970667358221220afaa06f8580a904bf74e45eed5eaf84b2f83e73ea70ad994aaaa5168e092268d64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000020fafd2b0ba599416d75eb54f48cda9812964f4600000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1
-----Decoded View---------------
Arg [0] : _factory (address): 0x20fAfD2B0Ba599416D75Eb54f48cda9812964f46
Arg [1] : _WETH (address): 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000020fafd2b0ba599416d75eb54f48cda9812964f46
Arg [1] : 00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1
Loading...
Loading
OVERVIEW
The exchange router contract address for OreoSwap.Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $1,793.8 | 0.00334513 | $6 |
Loading...
Loading
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.