My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
CrowRouter
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-01-31 */ pragma solidity =0.6.6; interface ICrowFactory { 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; } library TransferHelper { function safeApprove(address token, address to, uint value) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED'); } function safeTransfer(address token, address to, uint value) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED'); } function safeTransferFrom(address token, address from, address to, uint value) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED'); } function safeTransferETH(address to, uint value) internal { (bool success,) = to.call{value:value}(new bytes(0)); require(success, 'TransferHelper: ETH_TRANSFER_FAILED'); } } interface ICrowRouter01 { 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); } interface ICrowRouter02 is ICrowRouter01 { 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; } interface ICrowPair { 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; } library SafeMath { function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x, 'ds-math-add-overflow'); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x, 'ds-math-sub-underflow'); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow'); } } library CrowLibrary { using SafeMath for uint; function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { require(tokenA != tokenB, 'CrowLibrary: IDENTICAL_ADDRESSES'); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), 'CrowLibrary: ZERO_ADDRESS'); } function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) { (address token0, address token1) = sortTokens(tokenA, tokenB); pair = address(uint(keccak256(abi.encodePacked( hex'ff', factory, keccak256(abi.encodePacked(token0, token1)), hex'4b79ce49ed81fea5264e35c2533dee5fcdd6a2261e78da994c40facc823dc396' )))); } function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) { (address token0,) = sortTokens(tokenA, tokenB); pairFor(factory, tokenA, tokenB); (uint reserve0, uint reserve1,) = ICrowPair(pairFor(factory, tokenA, tokenB)).getReserves(); (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0); } function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) { require(amountA > 0, 'CrowLibrary: INSUFFICIENT_AMOUNT'); require(reserveA > 0 && reserveB > 0, 'CrowLibrary: INSUFFICIENT_LIQUIDITY'); amountB = amountA.mul(reserveB) / reserveA; } function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) { require(amountIn > 0, 'CrowLibrary: INSUFFICIENT_INPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'CrowLibrary: INSUFFICIENT_LIQUIDITY'); uint amountInWithFee = amountIn.mul(998); uint numerator = amountInWithFee.mul(reserveOut); uint denominator = reserveIn.mul(1000).add(amountInWithFee); amountOut = numerator / denominator; } function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) { require(amountOut > 0, 'CrowLibrary: INSUFFICIENT_OUTPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'CrowLibrary: INSUFFICIENT_LIQUIDITY'); uint numerator = reserveIn.mul(amountOut).mul(1000); uint denominator = reserveOut.sub(amountOut).mul(998); amountIn = (numerator / denominator).add(1); } function getAmountsOut(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) { require(path.length >= 2, 'CrowLibrary: INVALID_PATH'); amounts = new uint[](path.length); amounts[0] = amountIn; for (uint i; i < path.length - 1; i++) { (uint reserveIn, uint reserveOut) = getReserves(factory, path[i], path[i + 1]); amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut); } } function getAmountsIn(address factory, uint amountOut, address[] memory path) internal view returns (uint[] memory amounts) { require(path.length >= 2, 'CrowLibrary: INVALID_PATH'); amounts = new uint[](path.length); amounts[amounts.length - 1] = amountOut; for (uint i = path.length - 1; i > 0; i--) { (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]); amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut); } } } interface IERC20 { 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); } interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } contract CrowRouter is ICrowRouter02 { using SafeMath for uint; address public immutable override factory; address public immutable override WETH; modifier ensure(uint deadline) { require(deadline >= block.timestamp, 'CrowRouter: EXPIRED'); _; } constructor(address _factory, address _WETH) public { factory = _factory; WETH = _WETH; } receive() external payable { assert(msg.sender == WETH); } function _addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin ) internal virtual returns (uint amountA, uint amountB) { if (ICrowFactory(factory).getPair(tokenA, tokenB) == address(0)) { ICrowFactory(factory).createPair(tokenA, tokenB); } (uint reserveA, uint reserveB) = CrowLibrary.getReserves(factory, tokenA, tokenB); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); } else { uint amountBOptimal = CrowLibrary.quote(amountADesired, reserveA, reserveB); if (amountBOptimal <= amountBDesired) { require(amountBOptimal >= amountBMin, 'CrowRouter: INSUFFICIENT_B_AMOUNT'); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint amountAOptimal = CrowLibrary.quote(amountBDesired, reserveB, reserveA); assert(amountAOptimal <= amountADesired); require(amountAOptimal >= amountAMin, 'CrowRouter: INSUFFICIENT_A_AMOUNT'); (amountA, amountB) = (amountAOptimal, amountBDesired); } } } function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external virtual override ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) { (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin); address pair = CrowLibrary.pairFor(factory, tokenA, tokenB); TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA); TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB); liquidity = ICrowPair(pair).mint(to); } function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) { (amountToken, amountETH) = _addLiquidity( token, WETH, amountTokenDesired, msg.value, amountTokenMin, amountETHMin ); address pair = CrowLibrary.pairFor(factory, token, WETH); TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken); IWETH(WETH).deposit{value: amountETH}(); assert(IWETH(WETH).transfer(pair, amountETH)); liquidity = ICrowPair(pair).mint(to); if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH); } function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) { address pair = CrowLibrary.pairFor(factory, tokenA, tokenB); ICrowPair(pair).transferFrom(msg.sender, pair, liquidity); (uint amount0, uint amount1) = ICrowPair(pair).burn(to); (address token0,) = CrowLibrary.sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require(amountA >= amountAMin, 'CrowRouter: INSUFFICIENT_A_AMOUNT'); require(amountB >= amountBMin, 'CrowRouter: INSUFFICIENT_B_AMOUNT'); } function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountToken, uint 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, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountA, uint amountB) { address pair = CrowLibrary.pairFor(factory, tokenA, tokenB); uint value = approveMax ? uint(-1) : liquidity; ICrowPair(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, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountToken, uint amountETH) { address pair = CrowLibrary.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; ICrowPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline); } function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountETH) { (, amountETH) = removeLiquidity( token, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this))); IWETH(WETH).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountETH) { address pair = CrowLibrary.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; ICrowPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); amountETH = removeLiquidityETHSupportingFeeOnTransferTokens( token, liquidity, amountTokenMin, amountETHMin, to, deadline ); } function _swap(uint[] memory amounts, address[] memory path, address _to) internal virtual { for (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0,) = CrowLibrary.sortTokens(input, output); uint amountOut = amounts[i + 1]; (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0)); address to = i < path.length - 2 ? CrowLibrary.pairFor(factory, output, path[i + 2]) : _to; ICrowPair(CrowLibrary.pairFor(factory, input, output)).swap( amount0Out, amount1Out, to, new bytes(0) ); } } function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { amounts = CrowLibrary.getAmountsOut(factory, amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, 'CrowRouter: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, CrowLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { amounts = CrowLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'CrowRouter: EXCESSIVE_INPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, CrowLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external virtual override payable ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WETH, 'CrowRouter: INVALID_PATH'); amounts = CrowLibrary.getAmountsOut(factory, msg.value, path); require(amounts[amounts.length - 1] >= amountOutMin, 'CrowRouter: INSUFFICIENT_OUTPUT_AMOUNT'); IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(CrowLibrary.pairFor(factory, path[0], path[1]), amounts[0])); _swap(amounts, path, to); } function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[path.length - 1] == WETH, 'CrowRouter: INVALID_PATH'); amounts = CrowLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'CrowRouter: EXCESSIVE_INPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, CrowLibrary.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(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[path.length - 1] == WETH, 'CrowRouter: INVALID_PATH'); amounts = CrowLibrary.getAmountsOut(factory, amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, 'CrowRouter: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, CrowLibrary.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(uint amountOut, address[] calldata path, address to, uint deadline) external virtual override payable ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WETH, 'CrowRouter: INVALID_PATH'); amounts = CrowLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= msg.value, 'CrowRouter: EXCESSIVE_INPUT_AMOUNT'); IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(CrowLibrary.pairFor(factory, path[0], path[1]), amounts[0])); _swap(amounts, path, to); if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]); } function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual { for (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0,) = CrowLibrary.sortTokens(input, output); ICrowPair pair = ICrowPair(CrowLibrary.pairFor(factory, input, output)); uint amountInput; uint amountOutput; { (uint reserve0, uint reserve1,) = pair.getReserves(); (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0); amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput); amountOutput = CrowLibrary.getAmountOut(amountInput, reserveInput, reserveOutput); } (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0)); address to = i < path.length - 2 ? CrowLibrary.pairFor(factory, output, path[i + 2]) : _to; pair.swap(amount0Out, amount1Out, to, new bytes(0)); } } function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) { TransferHelper.safeTransferFrom( path[0], msg.sender, CrowLibrary.pairFor(factory, path[0], path[1]), amountIn ); uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, 'CrowRouter: INSUFFICIENT_OUTPUT_AMOUNT' ); } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override payable ensure(deadline) { require(path[0] == WETH, 'CrowRouter: INVALID_PATH'); uint amountIn = msg.value; IWETH(WETH).deposit{value: amountIn}(); assert(IWETH(WETH).transfer(CrowLibrary.pairFor(factory, path[0], path[1]), amountIn)); uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, 'CrowRouter: INSUFFICIENT_OUTPUT_AMOUNT' ); } function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) { require(path[path.length - 1] == WETH, 'CrowRouter: INVALID_PATH'); TransferHelper.safeTransferFrom( path[0], msg.sender, CrowLibrary.pairFor(factory, path[0], path[1]), amountIn ); _swapSupportingFeeOnTransferTokens(path, address(this)); uint amountOut = IERC20(WETH).balanceOf(address(this)); require(amountOut >= amountOutMin, 'CrowRouter: INSUFFICIENT_OUTPUT_AMOUNT'); IWETH(WETH).withdraw(amountOut); TransferHelper.safeTransferETH(to, amountOut); } function quote(uint amountA, uint reserveA, uint reserveB) public pure virtual override returns (uint amountB) { return CrowLibrary.quote(amountA, reserveA, reserveB); } function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) public pure virtual override returns (uint amountOut) { return CrowLibrary.getAmountOut(amountIn, reserveIn, reserveOut); } function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) public pure virtual override returns (uint amountIn) { return CrowLibrary.getAmountIn(amountOut, reserveIn, reserveOut); } function getAmountsOut(uint amountIn, address[] memory path) public view virtual override returns (uint[] memory amounts) { return CrowLibrary.getAmountsOut(factory, amountIn, path); } function getAmountsIn(uint amountOut, address[] memory path) public view virtual override returns (uint[] memory amounts) { return CrowLibrary.getAmountsIn(factory, amountOut, path); } }
[{"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
60c060405234801561001057600080fd5b506040516200472b3803806200472b8339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6145a6620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118eb52806119e55280611a9b5280611b695280611caf5280611d375280611f7c5280611ff752806120a652806121725280612207528061227b528061277952806129ec5280612a425280612a765280612aea5280612c8a5280612dcd5280612e55525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611bfc5280611d695280611ecc52806122ad528061250652806126fe5280612727528061275752806128c45280612a205280612d1d5280612e87528061372a528061376d5280613a4c5280613bcb528061402752806140d5528061415552506145a66000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a6126fc565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612720945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561274d565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612861565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561299d565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c42565b6000808242811015610cde576040805162461bcd60e51b81526020600482015260136024820152600080516020614434833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124b8565b9093509150610d1d898685612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361312e565b50965096945050505050565b6000610dbe848484613226565b949350505050565b60608142811015610e0c576040805162461bcd60e51b81526020600482015260136024820152600080516020614434833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b8152602060048201526018602482015260008051602061450b833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b81526004018080602001828103825260268152602001806144546026913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b031661345e565b85600081518110610fe657fe5b602002602001015161351e565b6110328287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061367b915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b602002602001015161312e565b509695505050505050565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846138c1565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f61345e565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b81526020600482015260136024820152600080516020614434833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b81526004018080602001828103825260268152602001806144546026913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e88287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367b915050565b606081428110156113b4576040805162461bcd60e51b81526020600482015260136024820152600080516020614434833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b8152602060048201526018602482015260008051602061450b833981519152604482015290519081900360640190fd5b6114a57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c192505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b815260040180806020018281038252602281526020018061454f6022913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f000000000000000000000000000000000000000000000000000000000000000061345e565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b81526020600482015260136024820152600080516020614434833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a61351e565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a49290918991899182918501908490808284376000920191909152508892506139f5915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d0016565b10156118935760405162461bcd60e51b81526004018080602001828103825260268152602001806144546026913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b81526020600482015260136024820152600080516020614434833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b8152602060048201526018602482015260008051602061450b833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c28585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506139f5915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b81526004018080602001828103825260268152602001806144546026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b50505050611893848261312e565b60608142811015611b67576040805162461bcd60e51b81526020600482015260136024820152600080516020614434833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b8152602060048201526018602482015260008051602061450b833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b81526004018080602001828103825260268152602001806144546026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d957f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367b915050565b5095945050505050565b6000610dbe848484613d50565b60608142811015611ec7576040805162461bcd60e51b81526020600482015260136024820152600080516020614434833981519152604482015290519081900360640190fd5b611f257f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c192505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b815260040180806020018281038252602281526020018061454f6022913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613e40565b60008142811015611ff1576040805162461bcd60e51b81526020600482015260136024820152600080516020614434833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000000000000000000000000000000000000000000089898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e8848361312e565b8042811015612170576040805162461bcd60e51b81526020600482015260136024820152600080516020614434833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b8152602060048201526018602482015260008051602061450b833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122d97f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a9182918501908490808284376000920191909152508992506139f5915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b81526020600482015260136024820152600080516020614434833981519152604482015290519081900360640190fd5b600061252c7f00000000000000000000000000000000000000000000000000000000000000008c8c61345e565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613f02565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126ac5760405162461bcd60e51b815260040180806020018281038252602181526020018061447a6021913960400191505060405180910390fd5b898610156126eb5760405162461bcd60e51b81526004018080602001828103825260218152602001806144136021913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f00000000000000000000000000000000000000000000000000000000000000008484613316565b600080600061279d7f00000000000000000000000000000000000000000000000000000000000000008e7f000000000000000000000000000000000000000000000000000000000000000061345e565b90506000876127ac578c6127b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b5050505061284c8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128aa576040805162461bcd60e51b81526020600482015260136024820152600080516020614434833981519152604482015290519081900360640190fd5b6128b88c8c8c8c8c8c613ff6565b909450925060006128ea7f00000000000000000000000000000000000000000000000000000000000000008e8e61345e565b90506128f88d33838861351e565b6129048c33838761351e565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561295c57600080fd5b505af1158015612970573d6000803e3d6000fd5b505050506040513d602081101561298657600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129e6576040805162461bcd60e51b81526020600482015260136024820152600080516020614434833981519152604482015290519081900360640190fd5b612a148a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613ff6565b90945092506000612a667f00000000000000000000000000000000000000000000000000000000000000008c7f000000000000000000000000000000000000000000000000000000000000000061345e565b9050612a748b33838861351e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612acf57600080fd5b505af1158015612ae3573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b505050506040513d6020811015612b9257600080fd5b5051612b9a57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b505050506040513d6020811015612c1c57600080fd5b5051925034841015612c3457612c343385340361312e565b505096509650969350505050565b60608142811015612c88576040805162461bcd60e51b81526020600482015260136024820152600080516020614434833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612cbf57fe5b905060200201356001600160a01b03166001600160a01b031614612d18576040805162461bcd60e51b8152602060048201526018602482015260008051602061450b833981519152604482015290519081900360640190fd5b612d767f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c192505050565b91503482600081518110612d8657fe5b60200260200101511115612dcb5760405162461bcd60e51b815260040180806020018281038252602281526020018061454f6022913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e0757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3a57600080fd5b505af1158015612e4e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612eb37f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612ec057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b505050506040513d6020811015612f4157600080fd5b5051612f4957fe5b612f888287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367b915050565b81600081518110612f9557fe5b6020026020010151341115611e6a57611e6a3383600081518110612fb557fe5b6020026020010151340361312e565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130415780518252601f199092019160209182019101613022565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130a3576040519150601f19603f3d011682016040523d82523d6000602084013e6130a8565b606091505b50915091508180156130d65750805115806130d657508080602001905160208110156130d357600080fd5b50515b613127576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061317a5780518252601f19909201916020918201910161315b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131dc576040519150601f19603f3d011682016040523d82523d6000602084013e6131e1565b606091505b50509050806132215760405162461bcd60e51b81526004018080602001828103825260238152602001806144e86023913960400191505060405180910390fd5b505050565b60008084116132665760405162461bcd60e51b815260040180806020018281038252602681526020018061449b6026913960400191505060405180910390fd5b6000831180156132765750600082115b6132b15760405162461bcd60e51b81526004018080602001828103825260238152602001806143f06023913960400191505060405180910390fd5b60006132c5856103e663ffffffff61426a16565b905060006132d9828563ffffffff61426a16565b905060006132ff836132f3886103e863ffffffff61426a16565b9063ffffffff6142cd16565b905080828161330a57fe5b04979650505050505050565b606060028251101561336b576040805162461bcd60e51b8152602060048201526019602482015278086e4deee98d2c4e4c2e4f27440929cac82989288bea082a89603b1b604482015290519081900360640190fd5b815167ffffffffffffffff8111801561338357600080fd5b506040519080825280602002602001820160405280156133ad578160200160208202803683370190505b50905082816000815181106133be57fe5b60200260200101818152505060005b600183510381101561345657600080613410878685815181106133ec57fe5b602002602001015187866001018151811061340357fe5b602002602001015161431c565b9150915061343284848151811061342357fe5b60200260200101518383613226565b84846001018151811061344157fe5b602090810291909101015250506001016133cd565b509392505050565b600080600061346d8585613f02565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f4b79ce49ed81fea5264e35c2533dee5fcdd6a2261e78da994c40facc823dc396609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135a35780518252601f199092019160209182019101613584565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613605576040519150601f19603f3d011682016040523d82523d6000602084013e61360a565b606091505b5091509150818015613638575080511580613638575080806020019051602081101561363557600080fd5b50515b6136735760405162461bcd60e51b815260040180806020018281038252602481526020018061452b6024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138bb5760008084838151811061369957fe5b60200260200101518584600101815181106136b057fe5b60200260200101519150915060006136c88383613f02565b50905060008785600101815181106136dc57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461370a5782600061370e565b6000835b91509150600060028a510388106137255788613766565b6137667f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061375957fe5b602002602001015161345e565b90506137937f0000000000000000000000000000000000000000000000000000000000000000888861345e565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137d0576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613841578181015183820152602001613829565b50505050905090810190601f16801561386e5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561389057600080fd5b505af11580156138a4573d6000803e3d6000fd5b50506001909901985061367e975050505050505050565b50505050565b6060600282511015613916576040805162461bcd60e51b8152602060048201526019602482015278086e4deee98d2c4e4c2e4f27440929cac82989288bea082a89603b1b604482015290519081900360640190fd5b815167ffffffffffffffff8111801561392e57600080fd5b50604051908082528060200260200182016040528015613958578160200160208202803683370190505b509050828160018351038151811061396c57fe5b60209081029190910101528151600019015b8015613456576000806139ae8786600186038151811061399a57fe5b602002602001015187868151811061340357fe5b915091506139d08484815181106139c157fe5b60200260200101518383613d50565b8460018503815181106139df57fe5b602090810291909101015250506000190161397e565b60005b600183510381101561322157600080848381518110613a1357fe5b6020026020010151858460010181518110613a2a57fe5b6020026020010151915091506000613a428383613f02565b5090506000613a727f0000000000000000000000000000000000000000000000000000000000000000858561345e565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613ab357600080fd5b505afa158015613ac7573d6000803e3d6000fd5b505050506040513d6060811015613add57600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b13578284613b16565b83835b91509150613b74828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613b81868383613226565b945050505050600080856001600160a01b0316886001600160a01b031614613bab57826000613baf565b6000835b91509150600060028c51038a10613bc6578a613bfa565b613bfa7f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061375957fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c84578181015183820152602001613c6c565b50505050905090810190601f168015613cb15780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cd357600080fd5b505af1158015613ce7573d6000803e3d6000fd5b50506001909b019a506139f89950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d905760405162461bcd60e51b81526004018080602001828103825260278152602001806144c16027913960400191505060405180910390fd5b600083118015613da05750600082115b613ddb5760405162461bcd60e51b81526004018080602001828103825260238152602001806143f06023913960400191505060405180910390fd5b6000613dff6103e8613df3868863ffffffff61426a16565b9063ffffffff61426a16565b90506000613e196103e6613df3868963ffffffff613d0016565b9050613e366001828481613e2957fe5b049063ffffffff6142cd16565b9695505050505050565b6000808411613e96576040805162461bcd60e51b815260206004820181905260248201527f43726f774c6962726172793a20494e53554646494349454e545f414d4f554e54604482015290519081900360640190fd5b600083118015613ea65750600082115b613ee15760405162461bcd60e51b81526004018080602001828103825260238152602001806143f06023913960400191505060405180910390fd5b82613ef2858463ffffffff61426a16565b81613ef957fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f6c576040805162461bcd60e51b815260206004820181905260248201527f43726f774c6962726172793a204944454e544943414c5f414444524553534553604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b031610613f8c578284613f8f565b83835b90925090506001600160a01b038216613fef576040805162461bcd60e51b815260206004820152601960248201527f43726f774c6962726172793a205a45524f5f4144445245535300000000000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561407057600080fd5b505afa158015614084573d6000803e3d6000fd5b505050506040513d602081101561409a57600080fd5b50516001600160a01b0316141561414d57604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561412057600080fd5b505af1158015614134573d6000803e3d6000fd5b505050506040513d602081101561414a57600080fd5b50505b60008061417b7f00000000000000000000000000000000000000000000000000000000000000008b8b61431c565b9150915081600014801561418d575080155b1561419d5787935086925061425d565b60006141aa898484613e40565b90508781116141fd57858110156141f25760405162461bcd60e51b81526004018080602001828103825260218152602001806144136021913960400191505060405180910390fd5b88945092508261425b565b600061420a898486613e40565b90508981111561421657fe5b878110156142555760405162461bcd60e51b815260040180806020018281038252602181526020018061447a6021913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806142855750508082028282828161428257fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b600080600061432b8585613f02565b50905061433986868661345e565b5060008061434888888861345e565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561438057600080fd5b505afa158015614394573d6000803e3d6000fd5b505050506040513d60608110156143aa57600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143dd5780826143e0565b81815b9099909850965050505050505056fe43726f774c6962726172793a20494e53554646494349454e545f4c495155494449545943726f77526f757465723a20494e53554646494349454e545f425f414d4f554e5443726f77526f757465723a20455850495245440000000000000000000000000043726f77526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5443726f77526f757465723a20494e53554646494349454e545f415f414d4f554e5443726f774c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5443726f774c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c454443726f77526f757465723a20494e56414c49445f5041544800000000000000005472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c454443726f77526f757465723a204558434553534956455f494e5055545f414d4f554e54a26469706673582212207dadaf429efe5475acee106178323b9a8128908c14a279002909fd34fc540f9664736f6c63430006060033000000000000000000000000ddcf30c1a85e5a60d85310d6b0d3952a75a00db40000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ddcf30c1a85e5a60d85310d6b0d3952a75a00db40000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23
-----Decoded View---------------
Arg [0] : _factory (address): 0xddcf30c1a85e5a60d85310d6b0d3952a75a00db4
Arg [1] : _WETH (address): 0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000ddcf30c1a85e5a60d85310d6b0d3952a75a00db4
Arg [1] : 0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23
Deployed ByteCode Sourcemap
14311:17612:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14776:10;-1:-1:-1;;;;;14790:4:0;14776:18;;14769:26;;;;14311:17612;;12:1:-1;9;2:12;18639:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18639:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18639:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;30887:257;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30887:257:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30887:257:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;25532:830;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25532:830:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25532:830:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25532:830:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25532:830:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25532:830:0;;-1:-1:-1;25532:830:0;-1:-1:-1;;;;;;25532:830:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;25532:830:0;;;;;;;;;;;;;;;;;31672:248;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31672:248:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;31672:248:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31672:248:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31672:248:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31672:248:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;31672:248:0;;-1:-1:-1;31672:248:0;;-1:-1:-1;;;;;31672:248:0:i;19318:667::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19318:667:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19318:667:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22819:613::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22819:613:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;22819:613:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;22819:613:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;22819:613:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;22819:613:0;;-1:-1:-1;22819:613:0;-1:-1:-1;;;;;;22819:613:0;;;;;;;;:::i;24718:808::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24718:808:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24718:808:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24718:808:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24718:808:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;24718:808:0;;-1:-1:-1;24718:808:0;-1:-1:-1;;;;;;24718:808:0;;;;;;;;:::i;21370:708::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21370:708:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21370:708:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28303:704::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28303:704:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28303:704:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28303:704:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28303:704:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28303:704:0;;-1:-1:-1;28303:704:0;-1:-1:-1;;;;;;28303:704:0;;;;;;;;:::i;29854:828::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29854:828:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29854:828:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;29854:828:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29854:828:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29854:828:0;;-1:-1:-1;29854:828:0;-1:-1:-1;;;;;;29854:828:0;;;;;;;;:::i;24035:677::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24035:677:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24035:677:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24035:677:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;24035:677:0;;-1:-1:-1;24035:677:0;-1:-1:-1;;;;;;24035:677:0;;;;;;;;:::i;31152:256::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31152:256:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31152:256:0;;;;;;;;;;;;:::i;23438:591::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23438:591:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;23438:591:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;23438:591:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;23438:591:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;23438:591:0;;-1:-1:-1;23438:591:0;-1:-1:-1;;;;;;23438:591:0;;;;;;;;:::i;14435:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14435:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;14435:38:0;;;;;;;;;;;;;;30696:183;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30696:183:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30696:183:0;;;;;;;;;;;;:::i;20664:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20664:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20664:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29013:835::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29013:835:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;29013:835:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29013:835:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29013:835:0;;-1:-1:-1;29013:835:0;-1:-1:-1;;;;;;29013:835:0;;;;;;;;:::i;17823:810::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17823:810:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17823:810:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14387:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14387:41:0;;;:::i;31416:248::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31416:248:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;31416:248:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31416:248:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31416:248:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31416:248:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;31416:248:0;;-1:-1:-1;31416:248:0;;-1:-1:-1;;;;;31416:248:0:i;19991:659::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19991:659:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19991:659:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16137:728::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16137:728:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;16137:728:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;16871:938;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;16871:938:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26368:764::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26368:764:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26368:764:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26368:764:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26368:764:0;;-1:-1:-1;26368:764:0;-1:-1:-1;;;;;;26368:764:0;;;;;;;;:::i;18639:673::-;18876:16;18894:14;18857:8;14544:15;14532:8;:27;;14524:59;;;;;-1:-1:-1;;;14524:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14524:59:0;;;;;;;;;;;;;;;18948:196:::1;18978:5;18998:4;19017:9;19041:14;19070:12;19105:4;19125:8;18948:15;:196::i;:::-;18921:223:::0;;-1:-1:-1;18921:223:0;-1:-1:-1;19155:51:0::1;19183:5:::0;19190:2;18921:223;19155:27:::1;:51::i;:::-;19223:4;-1:-1:-1::0;;;;;19217:20:0::1;;19238:9;19217:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19217:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19217:31:0;;;;19259:45;19290:2;19294:9;19259:30;:45::i;:::-;18639:673:::0;;;;;;;;;;:::o;30887:257::-;31040:14;31079:57;31104:8;31114:9;31125:10;31079:24;:57::i;:::-;31072:64;30887:257;-1:-1:-1;;;;30887:257:0:o;25532:830::-;25746:21;25718:8;14544:15;14532:8;:27;;14524:59;;;;;-1:-1:-1;;;14524:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14524:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25818:4:0::1;25793:29;:4:::0;;-1:-1:-1;;25798:15:0;;25793:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;25793:21:0::1;-1:-1:-1::0;;;;;25793:29:0::1;;25785:66;;;::::0;;-1:-1:-1;;;25785:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;25785:66:0;;;;;;;;;;;;;::::1;;25872:50;25898:7;25907:8;25917:4;;25872:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25872:25:0::1;::::0;-1:-1:-1;;;25872:50:0:i:1;:::-;25862:60;;25972:12;25941:7;25966:1;25949:7;:14;:18;25941:27;;;;;;;;;;;;;;:43;;25933:94;;;;-1:-1:-1::0;;;25933:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26038:136;26084:4;;26089:1;26084:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26084:7:0::1;26093:10;26105:46;26125:7;26134:4;;26139:1;26134:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26134:7:0::1;26143:4;;26148:1;26143:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26143:7:0::1;26105:19;:46::i;:::-;26153:7;26161:1;26153:10;;;;;;;;;;;;;;26038:31;:136::i;:::-;26185:35;26191:7;26200:4;;26185:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26214:4:0::1;::::0;-1:-1:-1;26185:5:0::1;::::0;-1:-1:-1;;26185:35:0:i:1;:::-;26237:4;-1:-1:-1::0;;;;;26231:20:0::1;;26252:7;26277:1;26260:7;:14;:18;26252:27;;;;;;;;;;;;;;26231:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26231:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26231:49:0;;;;26291:63;26322:2;26326:7;26351:1;26334:7;:14;:18;26326:27;;;;;;;;;;;;;;26291:30;:63::i;:::-;25532:830:::0;;;;;;;;;:::o;31672:248::-;31816:21;31862:50;31887:7;31896:9;31907:4;31862:24;:50::i;:::-;31855:57;;31672:248;;;;;:::o;19318:667::-;19624:12;19638;19663;19678:44;19698:7;19707:6;19715;19678:19;:44::i;:::-;19663:59;;19733:10;19746;:33;;19770:9;19746:33;;;-1:-1:-1;;19746:33:0;19790:75;;;-1:-1:-1;;;19790:75:0;;19813:10;19790:75;;;;19833:4;19790:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19733:46;;-1:-1:-1;;;;;;19790:22:0;;;;;:75;;;;;-1:-1:-1;;19790:75:0;;;;;;;;-1:-1:-1;19790:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;19790:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19790:75:0;;;;19897:80;19913:6;19921;19929:9;19940:10;19952;19964:2;19968:8;19897:15;:80::i;:::-;19876:101;;;;;;;;19318:667;;;;;;;;;;;;;;;;:::o;22819:613::-;23043:21;23024:8;14544:15;14532:8;:27;;14524:59;;;;;-1:-1:-1;;;14524:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14524:59:0;;;;;;;;;;;;;;;23087:50:::1;23113:7;23122:8;23132:4;;23087:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;23087:25:0::1;::::0;-1:-1:-1;;;23087:50:0:i:1;:::-;23077:60;;23187:12;23156:7;23181:1;23164:7;:14;:18;23156:27;;;;;;;;;;;;;;:43;;23148:94;;;;-1:-1:-1::0;;;23148:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23253:136;23299:4;;23304:1;23299:7;;;;;;23253:136;23400:24;23406:7;23415:4;;23400:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;23421:2:0;;-1:-1:-1;23400:5:0::1;::::0;-1:-1:-1;;23400:24:0:i:1;24718:808::-:0;24932:21;24904:8;14544:15;14532:8;:27;;14524:59;;;;;-1:-1:-1;;;14524:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14524:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25004:4:0::1;24979:29;:4:::0;;-1:-1:-1;;24984:15:0;;24979:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;24979:21:0::1;-1:-1:-1::0;;;;;24979:29:0::1;;24971:66;;;::::0;;-1:-1:-1;;;24971:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;24971:66:0;;;;;;;;;;;;;::::1;;25058:50;25083:7;25092:9;25103:4;;25058:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25058:24:0::1;::::0;-1:-1:-1;;;25058:50:0:i:1;:::-;25048:60;;25141:11;25127:7;25135:1;25127:10;;;;;;;;;;;;;;:25;;25119:72;;;;-1:-1:-1::0;;;25119:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21370:708:::0;21688:14;21715:12;21730:41;21750:7;21759:5;21766:4;21730:19;:41::i;:::-;21715:56;;21782:10;21795;:33;;21819:9;21795:33;;;-1:-1:-1;;21795:33:0;21839:75;;;-1:-1:-1;;;21839:75:0;;21862:10;21839:75;;;;21882:4;21839:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21782:46;;-1:-1:-1;;;;;;21839:22:0;;;;;:75;;;;;-1:-1:-1;;21839:75:0;;;;;;;;-1:-1:-1;21839:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;21839:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21839:75:0;;;;21937:133;21999:5;22006:9;22017:14;22033:12;22047:2;22051:8;21937:47;:133::i;:::-;21925:145;21370:708;-1:-1:-1;;;;;;;;;;;;;21370:708:0:o;28303:704::-;28537:8;14544:15;14532:8;:27;;14524:59;;;;;-1:-1:-1;;;14524:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14524:59:0;;;;;;;;;;;;;;;28558:134:::1;28604:4;;28609:1;28604:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28604:7:0::1;28613:10;28625:46;28645:7;28654:4;;28659:1;28654:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28654:7:0::1;28663:4;;28668:1;28663:7;;;;;;28625:46;28673:8;28558:31;:134::i;:::-;28703:18;28731:4:::0;;-1:-1:-1;;28736:15:0;;28731:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28731:21:0::1;-1:-1:-1::0;;;;;28724:39:0::1;;28764:2;28724:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;28724:43:0::1;-1:-1:-1::0;;;;;28724:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28724:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28724:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28724:43:0;28778:44:::1;::::0;;28724:43:::1;28778:44:::0;;::::1;::::0;;;;;;;;;;;28724:43;;-1:-1:-1;28778:44:0::1;::::0;;;28813:4;;;;;;28778:44;::::1;::::0;28813:4;;28778:44;28813:4;28778:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28819:2:0;;-1:-1:-1;28778:34:0::1;::::0;-1:-1:-1;;28778:44:0:i:1;:::-;28921:12:::0;28855:62:::1;28903:13:::0;28862:4;;-1:-1:-1;;28867:15:0;;28862:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28862:21:0::1;-1:-1:-1::0;;;;;28855:39:0::1;;28895:2;28855:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;28855:43:0::1;-1:-1:-1::0;;;;;28855:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28855:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28855:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28855:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;28833:166;;;;-1:-1:-1::0;;;28833:166:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14594:1;28303:704:::0;;;;;;;:::o;29854:828::-;30121:8;14544:15;14532:8;:27;;14524:59;;;;;-1:-1:-1;;;14524:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14524:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;30180:4:0::1;30155:29;:4:::0;;-1:-1:-1;;30160:15:0;;30155:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30155:21:0::1;-1:-1:-1::0;;;;;30155:29:0::1;;30147:66;;;::::0;;-1:-1:-1;;;30147:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;30147:66:0;;;;;;;;;;;;;::::1;;30224:134;30270:4;;30275:1;30270:7;;;;;;30224:134;30369:55;30404:4;;30369:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30418:4:0::1;::::0;-1:-1:-1;30369:34:0::1;::::0;-1:-1:-1;;30369:55:0:i:1;:::-;30452:37;::::0;;-1:-1:-1;;;30452:37:0;;30483:4:::1;30452:37;::::0;::::1;::::0;;;30435:14:::1;::::0;-1:-1:-1;;;;;30459:4:0::1;30452:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;30452:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30452:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30452:37:0;;-1:-1:-1;30508:25:0;;::::1;;30500:76;;;;-1:-1:-1::0;;;30500:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30593:4;-1:-1:-1::0;;;;;30587:20:0::1;;30608:9;30587:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30587:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30587:31:0;;;;30629:45;30660:2;30664:9;30629:30;:45::i;24035:677::-:0;24251:21;24223:8;14544:15;14532:8;:27;;14524:59;;;;;-1:-1:-1;;;14524:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14524:59:0;;;;;;;;;;;;;;;24309:4:::1;-1:-1:-1::0;;;;;24298:15:0::1;:4;;24303:1;24298:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;24298:7:0::1;-1:-1:-1::0;;;;;24298:15:0::1;;24290:52;;;::::0;;-1:-1:-1;;;24290:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;24290:52:0;;;;;;;;;;;;;::::1;;24363:51;24389:7;24398:9;24409:4;;24363:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24363:25:0::1;::::0;-1:-1:-1;;;24363:51:0:i:1;:::-;24353:61;;24464:12;24433:7;24458:1;24441:7;:14;:18;24433:27;;;;;;;;;;;;;;:43;;24425:94;;;;-1:-1:-1::0;;;24425:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24536:4;-1:-1:-1::0;;;;;24530:19:0::1;;24557:7;24565:1;24557:10;;;;;;;;;;;;;;24530:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24530:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24530:40:0;;;;;24594:4;-1:-1:-1::0;;;;;24588:20:0::1;;24609:46;24629:7;24638:4;;24643:1;24638:7;;;;;;24609:46;24657:7;24665:1;24657:10;;;;;;;;;;;;;;24588:80;;;;;;;;;;;;;-1:-1:-1::0;;;;;24588:80:0::1;-1:-1:-1::0;;;;;24588:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24588:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24588:80:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24588:80:0;24581:88:::1;;;;24680:24;24686:7;24695:4;;24680:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24701:2:0;;-1:-1:-1;24680:5:0::1;::::0;-1:-1:-1;;24680:24:0:i:1;:::-;24035:677:::0;;;;;;;;:::o;31152:256::-;31305:13;31343:57;31367:9;31378;31389:10;31343:23;:57::i;23438:591::-;23662:21;23643:8;14544:15;14532:8;:27;;14524:59;;;;;-1:-1:-1;;;14524:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14524:59:0;;;;;;;;;;;;;;;23706:50:::1;23731:7;23740:9;23751:4;;23706:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;23706:24:0::1;::::0;-1:-1:-1;;;23706:50:0:i:1;:::-;23696:60;;23789:11;23775:7;23783:1;23775:10;;;;;;;;;;;;;;:25;;23767:72;;;;-1:-1:-1::0;;;23767:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14435:38:::0;;;:::o;30696:183::-;30793:12;30825:46;30843:7;30852:8;30862;30825:17;:46::i;20664:700::-;20930:14;20911:8;14544:15;14532:8;:27;;14524:59;;;;;-1:-1:-1;;;14524:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14524:59:0;;;;;;;;;;;;;;;20973:196:::1;21003:5;21023:4;21042:9;21066:14;21095:12;21130:4;21150:8;20973:15;:196::i;:::-;21219:38;::::0;;-1:-1:-1;;;21219:38:0;;21251:4:::1;21219:38;::::0;::::1;::::0;;;20957:212;;-1:-1:-1;21180:78:0::1;::::0;-1:-1:-1;21208:5:0;;21215:2;;-1:-1:-1;;;;;21219:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;21219:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21219:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21219:38:0;21180:27:::1;:78::i;:::-;21275:4;-1:-1:-1::0;;;;;21269:20:0::1;;21290:9;21269:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21269:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21269:31:0;;;;21311:45;21342:2;21346:9;21311:30;:45::i;29013:835::-:0;29273:8;14544:15;14532:8;:27;;14524:59;;;;;-1:-1:-1;;;14524:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14524:59:0;;;;;;;;;;;;;;;29318:4:::1;-1:-1:-1::0;;;;;29307:15:0::1;:4;;29312:1;29307:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29307:7:0::1;-1:-1:-1::0;;;;;29307:15:0::1;;29299:52;;;::::0;;-1:-1:-1;;;29299:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;29299:52:0;;;;;;;;;;;;;::::1;;29362:13;29378:9;29362:25;;29404:4;-1:-1:-1::0;;;;;29398:19:0::1;;29425:8;29398:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29398:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29398:38:0;;;;;29460:4;-1:-1:-1::0;;;;;29454:20:0::1;;29475:46;29495:7;29504:4;;29509:1;29504:7;;;;;;29475:46;29523:8;29454:78;;;;;;;;;;;;;-1:-1:-1::0;;;;;29454:78:0::1;-1:-1:-1::0;;;;;29454:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29454:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29454:78:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29454:78:0;29447:86:::1;;;;29544:18;29572:4:::0;;-1:-1:-1;;29577:15:0;;29572:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;29572:21:0::1;-1:-1:-1::0;;;;;29565:39:0::1;;29605:2;29565:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;29565:43:0::1;-1:-1:-1::0;;;;;29565:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29565:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29565:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29565:43:0;29619:44:::1;::::0;;29565:43:::1;29619:44:::0;;::::1;::::0;;;;;;;;;;;29565:43;;-1:-1:-1;29619:44:0::1;::::0;;;29654:4;;;;;;29619:44;::::1;::::0;29654:4;;29619:44;29654:4;29619:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29660:2:0;;-1:-1:-1;29619:34:0::1;::::0;-1:-1:-1;;29619:44:0:i:1;:::-;29762:12:::0;29696:62:::1;29744:13:::0;29703:4;;-1:-1:-1;;29708:15:0;;29703:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;29703:21:0::1;-1:-1:-1::0;;;;;29696:39:0::1;;29736:2;29696:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;29696:43:0::1;-1:-1:-1::0;;;;;29696:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;17823:810:0::0;18077:12;18091;18058:8;14544:15;14532:8;:27;;14524:59;;;;;-1:-1:-1;;;14524:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14524:59:0;;;;;;;;;;;;;;;18116:12:::1;18131:44;18151:7;18160:6;18168;18131:19;:44::i;:::-;18186:57;::::0;;-1:-1:-1;;;18186:57:0;;18215:10:::1;18186:57;::::0;::::1;::::0;-1:-1:-1;;;;;18186:28:0;::::1;:57:::0;;;;;;;;;;;;;;18116:59;;-1:-1:-1;18186:28:0;;::::1;::::0;:57;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;18186:28:0;:57;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;18186:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18186:57:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;18286:24:0::1;::::0;;-1:-1:-1;;;18286:24:0;;-1:-1:-1;;;;;18286:24:0;;::::1;;::::0;::::1;::::0;;;18256:12:::1;::::0;;;18286:20;;::::1;::::0;::::1;::::0;:24;;;;;;;;;;;18256:12;18286:20;:24;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;18286:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18286:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18286:24:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;18286:24:0;-1:-1:-1;18322:14:0::1;18341:38;18364:6:::0;18372;18341:22:::1;:38::i;:::-;18321:58;;;18421:6;-1:-1:-1::0;;;;;18411:16:0::1;:6;-1:-1:-1::0;;;;;18411:16:0::1;;:58;;18452:7;18461;18411:58;;;18431:7;18440;18411:58;18390:79:::0;;-1:-1:-1;18390:79:0;-1:-1:-1;18488:21:0;;::::1;;18480:67;;;;-1:-1:-1::0;;;18480:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18577:10;18566:7;:21;;18558:67;;;;-1:-1:-1::0;;;18558:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14594:1;;;;17823:810:::0;;;;;;;;;;;:::o;14387:41::-;;;:::o;31416:248::-;31560:21;31606:50;31632:7;31641:8;31651:4;31606:25;:50::i;19991:659::-;20280:16;20298:14;20325:12;20340:41;20360:7;20369:5;20376:4;20340:19;:41::i;:::-;20325:56;;20392:10;20405;:33;;20429:9;20405:33;;;-1:-1:-1;;20405:33:0;20449:75;;;-1:-1:-1;;;20449:75:0;;20472:10;20449:75;;;;20492:4;20449:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20392:46;;-1:-1:-1;;;;;;20449:22:0;;;;;:75;;;;;-1:-1:-1;;20449:75:0;;;;;;;;-1:-1:-1;20449:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;20449:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20449:75:0;;;;20562:80;20581:5;20588:9;20599:14;20615:12;20629:2;20633:8;20562:18;:80::i;:::-;20535:107;;;;-1:-1:-1;19991:659:0;-1:-1:-1;;;;;;;;;;;;;19991:659:0:o;16137:728::-;16425:12;16439;16453:14;16406:8;14544:15;14532:8;:27;;14524:59;;;;;-1:-1:-1;;;14524:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14524:59:0;;;;;;;;;;;;;;;16501:85:::1;16515:6;16523;16531:14;16547;16563:10;16575;16501:13;:85::i;:::-;16480:106:::0;;-1:-1:-1;16480:106:0;-1:-1:-1;16597:12:0::1;16612:44;16632:7;16641:6:::0;16649;16612:19:::1;:44::i;:::-;16597:59;;16667:66;16699:6;16707:10;16719:4;16725:7;16667:31;:66::i;:::-;16744;16776:6;16784:10;16796:4;16802:7;16744:31;:66::i;:::-;16843:4;-1:-1:-1::0;;;;;16833:20:0::1;;16854:2;16833:24;;;;;;;;;;;;;-1:-1:-1::0;;;;;16833:24:0::1;-1:-1:-1::0;;;;;16833:24:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;16833:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;16833:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;16833:24:0;16137:728;;;;-1:-1:-1;16833:24:0;;-1:-1:-1;16137:728:0;;-1:-1:-1;;;;;;;;;16137:728:0:o;16871:938::-;17124:16;17142:14;17158;17105:8;14544:15;14532:8;:27;;14524:59;;;;;-1:-1:-1;;;14524:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14524:59:0;;;;;;;;;;;;;;;17212:176:::1;17240:5;17260:4;17279:18;17312:9;17336:14;17365:12;17212:13;:176::i;:::-;17185:203:::0;;-1:-1:-1;17185:203:0;-1:-1:-1;17399:12:0::1;17414:41;17434:7;17443:5:::0;17450:4:::1;17414:19;:41::i;:::-;17399:56;;17466:69;17498:5;17505:10;17517:4;17523:11;17466:31;:69::i;:::-;17552:4;-1:-1:-1::0;;;;;17546:19:0::1;;17573:9;17546:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;17546:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;17546:39:0;;;;;17609:4;-1:-1:-1::0;;;;;17603:20:0::1;;17624:4;17630:9;17603:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;17603:37:0::1;-1:-1:-1::0;;;;;17603:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;17603:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;17603:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;17603:37:0;17596:45:::1;;;;17674:4;-1:-1:-1::0;;;;;17664:20:0::1;;17685:2;17664:24;;;;;;;;;;;;;-1:-1:-1::0;;;;;17664:24:0::1;-1:-1:-1::0;;;;;17664:24:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;17664:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;17664:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;17664:24:0;;-1:-1:-1;17713:9:0::1;:21:::0;-1:-1:-1;17709:92:0::1;;;17736:65;17767:10;17791:9;17779;:21;17736:30;:65::i;:::-;14594:1;16871:938:::0;;;;;;;;;;;:::o;26368:764::-;26581:21;26553:8;14544:15;14532:8;:27;;14524:59;;;;;-1:-1:-1;;;14524:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14524:59:0;;;;;;;;;;;;;;;26639:4:::1;-1:-1:-1::0;;;;;26628:15:0::1;:4;;26633:1;26628:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26628:7:0::1;-1:-1:-1::0;;;;;26628:15:0::1;;26620:52;;;::::0;;-1:-1:-1;;;26620:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26620:52:0;;;;;;;;;;;;;::::1;;26693:50;26718:7;26727:9;26738:4;;26693:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26693:24:0::1;::::0;-1:-1:-1;;;26693:50:0:i:1;:::-;26683:60;;26776:9;26762:7;26770:1;26762:10;;;;;;;;;;;;;;:23;;26754:70;;;;-1:-1:-1::0;;;26754:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26841:4;-1:-1:-1::0;;;;;26835:19:0::1;;26862:7;26870:1;26862:10;;;;;;;;;;;;;;26835:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26835:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26835:40:0;;;;;26899:4;-1:-1:-1::0;;;;;26893:20:0::1;;26914:46;26934:7;26943:4;;26948:1;26943:7;;;;;;26914:46;26962:7;26970:1;26962:10;;;;;;;;;;;;;;26893:80;;;;;;;;;;;;;-1:-1:-1::0;;;;;26893:80:0::1;-1:-1:-1::0;;;;;26893:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26893:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26893:80:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26893:80:0;26886:88:::1;;;;26985:24;26991:7;27000:4;;26985:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27006:2:0;;-1:-1:-1;26985:5:0::1;::::0;-1:-1:-1;;26985:24:0:i:1;:::-;27046:7;27054:1;27046:10;;;;;;;;;;;;;;27034:9;:22;27030:94;;;27058:66;27089:10;27113:7;27121:1;27113:10;;;;;;;;;;;;;;27101:9;:22;27058:30;:66::i;1016:304::-:0;1154:45;;;-1:-1:-1;;;;;1154:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1154:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1143:57:0;;;;1108:12;;1122:17;;1143:10;;;;1154:45;1143:57;;;25:18:-1;1143:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1143:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1107:93:0;;;;1219:7;:57;;;;-1:-1:-1;1231:11:0;;:16;;:44;;;1262:4;1251:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1251:24:0;1231:44;1211:101;;;;;-1:-1:-1;;;1211:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1016:304;;;;;:::o;1669:195::-;1777:12;;;1739;1777;;;;;;;;;-1:-1:-1;;;;;1756:7:0;;;1770:5;;1756:34;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1756:34:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1738:52:0;;;1809:7;1801:55;;;;-1:-1:-1;;;1801:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1669:195;;;:::o;11269:507::-;11362:14;11408:1;11397:8;:12;11389:63;;;;-1:-1:-1;;;11389:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11483:1;11471:9;:13;:31;;;;;11501:1;11488:10;:14;11471:31;11463:79;;;;-1:-1:-1;;;11463:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11553:20;11576:17;:8;11589:3;11576:17;:12;:17;:::i;:::-;11553:40;-1:-1:-1;11604:14:0;11621:31;11553:40;11641:10;11621:31;:19;:31;:::i;:::-;11604:48;-1:-1:-1;11663:16:0;11682:40;11706:15;11682:19;:9;11696:4;11682:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;11663:59;;11757:11;11745:9;:23;;;;;;;11269:507;-1:-1:-1;;;;;;;11269:507:0:o;12266:506::-;12367:21;12424:1;12409:4;:11;:16;;12401:54;;;;;-1:-1:-1;;;12401:54:0;;;;;;;;;;;;-1:-1:-1;;;12401:54:0;;;;;;;;;;;;;;;12487:4;:11;12476:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12476:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;12476:23:0;;12466:33;;12523:8;12510:7;12518:1;12510:10;;;;;;;;;;;;;:21;;;;;12547:6;12542:223;12573:1;12559:4;:11;:15;12555:1;:19;12542:223;;;12597:14;12613:15;12632:42;12644:7;12653:4;12658:1;12653:7;;;;;;;;;;;;;;12662:4;12667:1;12671;12667:5;12662:11;;;;;;;;;;;;;;12632;:42::i;:::-;12596:78;;;;12706:47;12719:7;12727:1;12719:10;;;;;;;;;;;;;;12731:9;12742:10;12706:12;:47::i;:::-;12689:7;12697:1;12701;12697:5;12689:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;12576:3:0;;12542:223;;;;12266:506;;;;;:::o;10026:461::-;10115:12;10141:14;10157;10175:26;10186:6;10194;10175:10;:26::i;:::-;10339:32;;;-1:-1:-1;;10339:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;10339:32:0;;;;;10329:43;;;;;;-1:-1:-1;;;;;;10242:234:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10242:234:0;;;;;;;10232:245;;;;;;;;;10026:461;-1:-1:-1;;;;;10026:461:0:o;1328:333::-;1484:51;;;-1:-1:-1;;;;;1484:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1484:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1473:63:0;;;;1438:12;;1452:17;;1473:10;;;;1484:51;1473:63;;;25:18:-1;1473:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1473:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1437:99:0;;;;1555:7;:57;;;;-1:-1:-1;1567:11:0;;:16;;:44;;;1598:4;1587:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1587:24:0;1567:44;1547:106;;;;-1:-1:-1;;;1547:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1328:333;;;;;;:::o;22098:715::-;22205:6;22200:606;22231:1;22217:4;:11;:15;22213:1;:19;22200:606;;;22255:13;22270:14;22289:4;22294:1;22289:7;;;;;;;;;;;;;;22298:4;22303:1;22307;22303:5;22298:11;;;;;;;;;;;;;;22254:56;;;;22326:14;22345:37;22368:5;22375:6;22345:22;:37::i;:::-;22325:57;;;22397:14;22414:7;22422:1;22426;22422:5;22414:14;;;;;;;;;;;;;;22397:31;;22444:15;22461;22489:6;-1:-1:-1;;;;;22480:15:0;:5;-1:-1:-1;;;;;22480:15:0;;:61;;22522:9;22538:1;22480:61;;;22504:1;22508:9;22480:61;22443:98;;;;22556:10;22587:1;22573:4;:11;:15;22569:1;:19;:77;;22643:3;22569:77;;;22591:49;22611:7;22620:6;22628:4;22633:1;22637;22633:5;22628:11;;;;;;;;;;;;;;22591:19;:49::i;:::-;22556:90;;22671:43;22691:7;22700:5;22707:6;22671:19;:43::i;:::-;-1:-1:-1;;;;;22661:59:0;;22739:10;22751;22763:2;22777:1;22767:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;22767:12:0;87:42:-1;143:17;;-1:-1;22767:12:0;;22661:133;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22661:133:0;-1:-1:-1;;;;;22661:133:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;22661:133:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22661:133:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;22234:3:0;;;;;-1:-1:-1;22200:606:0;;-1:-1:-1;;;;;;;;22200:606:0;;;22098:715;;;:::o;12786:527::-;12887:21;12944:1;12929:4;:11;:16;;12921:54;;;;;-1:-1:-1;;;12921:54:0;;;;;;;;;;;;-1:-1:-1;;;12921:54:0;;;;;;;;;;;;;;;13007:4;:11;12996:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12996:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;12996:23:0;;12986:33;;13060:9;13030:7;13055:1;13038:7;:14;:18;13030:27;;;;;;;;;;;;;;;;;:39;13094:11;;-1:-1:-1;;13094:15:0;13080:226;13111:5;;13080:226;;13139:14;13155:15;13174:42;13186:7;13195:4;13204:1;13200;:5;13195:11;;;;;;;;;;;;;;13208:4;13213:1;13208:7;;;;;;;13174:42;13138:78;;;;13248:46;13260:7;13268:1;13260:10;;;;;;;;;;;;;;13272:9;13283:10;13248:11;:46::i;:::-;13231:7;13243:1;13239;:5;13231:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;13118:3:0;13080:226;;27152:1145;27265:6;27260:1030;27291:1;27277:4;:11;:15;27273:1;:19;27260:1030;;;27315:13;27330:14;27349:4;27354:1;27349:7;;;;;;;;;;;;;;27358:4;27363:1;27367;27363:5;27358:11;;;;;;;;;;;;;;27314:56;;;;27386:14;27405:37;27428:5;27435:6;27405:22;:37::i;:::-;27385:57;;;27457:14;27484:43;27504:7;27513:5;27520:6;27484:19;:43::i;:::-;27457:71;;27543:16;27574:17;27623:13;27638;27656:4;-1:-1:-1;;;;;27656:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27656:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27656:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;27656:18:0;;;;;;;-1:-1:-1;;;;;27622:52:0;;;;-1:-1:-1;27622:52:0;;-1:-1:-1;27690:17:0;;-1:-1:-1;;;;;27731:15:0;;;;;;;:61;;27773:8;27783;27731:61;;;27750:8;27760;27731:61;27689:103;;;;27821:56;27864:12;27828:5;-1:-1:-1;;;;;27821:23:0;;27853:4;27821:38;;;;;;;;;;;;;-1:-1:-1;;;;;27821:38:0;-1:-1:-1;;;;;27821:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;27821:56:0;27807:70;;27907:66;27932:11;27945:12;27959:13;27907:24;:66::i;:::-;27892:81;;27260:1030;;;;28004:15;28021;28049:6;-1:-1:-1;;;;;28040:15:0;:5;-1:-1:-1;;;;;28040:15:0;;:67;;28085:12;28104:1;28040:67;;;28064:1;28068:12;28040:67;28003:104;;;;28122:10;28153:1;28139:4;:11;:15;28135:1;:19;:77;;28209:3;28135:77;;;28157:49;28177:7;28186:6;28194:4;28199:1;28203;28199:5;28194:11;;;;;;;28157:49;28265:12;;;28275:1;28265:12;;;;;;;;;;-1:-1:-1;;;28227:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;28227:51:0;;;;;;;;;;;;;;;;;;;;;;28122:90;;-1:-1:-1;28227:9:0;;;;;;28237:10;;28249;;28122:90;;28265:12;;28227:51;;;;;;;;28265:12;;28227:51;;;;28265:12;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;28227:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28227:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;27294:3:0;;;;;-1:-1:-1;27260:1030:0;;-1:-1:-1;;;;;;;;;;27260:1030:0;9322:129;9406:5;;;9401:16;;;;9393:50;;;;;-1:-1:-1;;;9393:50:0;;;;;;;;;;;;-1:-1:-1;;;9393:50:0;;;;;;;;;;;;;;11790:462;11883:13;11929:1;11917:9;:13;11909:65;;;;-1:-1:-1;;;11909:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12005:1;11993:9;:13;:31;;;;;12023:1;12010:10;:14;11993:31;11985:79;;;;-1:-1:-1;;;11985:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12075:14;12092:34;12121:4;12092:24;:9;12106;12092:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;12075:51;-1:-1:-1;12137:16:0;12156:34;12186:3;12156:25;:10;12171:9;12156:25;:14;:25;:::i;:34::-;12137:53;;12212:32;12242:1;12225:11;12213:9;:23;;;;;;;12212:32;:29;:32;:::i;:::-;12201:43;11790:462;-1:-1:-1;;;;;;11790:462:0:o;10944:311::-;11026:12;11069:1;11059:7;:11;11051:56;;;;;-1:-1:-1;;;11051:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11137:1;11126:8;:12;:28;;;;;11153:1;11142:8;:12;11126:28;11118:76;;;;-1:-1:-1;;;11118:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11239:8;11215:21;:7;11227:8;11215:21;:11;:21;:::i;:::-;:32;;;;;;;10944:311;-1:-1:-1;;;;10944:311:0:o;9673:339::-;9748:14;9764;9809:6;-1:-1:-1;;;;;9799:16:0;:6;-1:-1:-1;;;;;9799:16:0;;;9791:61;;;;;-1:-1:-1;;;9791:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9891:6;-1:-1:-1;;;;;9882:15:0;:6;-1:-1:-1;;;;;9882:15:0;;:53;;9920:6;9928;9882:53;;;9901:6;9909;9882:53;9863:72;;-1:-1:-1;9863:72:0;-1:-1:-1;;;;;;9954:20:0;;9946:58;;;;;-1:-1:-1;;;9946:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9673:339;;;;;:::o;14818:1313::-;15089:45;;;-1:-1:-1;;;15089:45:0;;-1:-1:-1;;;;;15089:45:0;;;;;;;;;;;;;;;;15036:12;;;;;;15102:7;15089:29;;;;;;:45;;;;;;;;;;;;;;;:29;:45;;;2:2:-1;;;;27:1;24;17:12;2:2;15089:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15089:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15089:45:0;-1:-1:-1;;;;;15089:59:0;;15085:140;;;15165:48;;;-1:-1:-1;;;15165:48:0;;-1:-1:-1;;;;;15165:48:0;;;;;;;;;;;;;;;;15178:7;15165:32;;;;;;:48;;;;;;;;;;;;;;;-1:-1:-1;15165:32:0;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;15165:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15165:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;15085:140:0;15236:13;15251;15268:48;15292:7;15301:6;15309;15268:23;:48::i;:::-;15235:81;;;;15331:8;15343:1;15331:13;:30;;;;-1:-1:-1;15348:13:0;;15331:30;15327:797;;;15400:14;;-1:-1:-1;15416:14:0;;-1:-1:-1;15327:797:0;;;15464:19;15486:53;15504:14;15520:8;15530;15486:17;:53::i;:::-;15464:75;;15576:14;15558;:32;15554:559;;15637:10;15619:14;:28;;15611:74;;;;-1:-1:-1;;;15611:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15726:14;;-1:-1:-1;15742:14:0;-1:-1:-1;15742:14:0;15554:559;;;15798:19;15820:53;15838:14;15854:8;15864;15820:17;:53::i;:::-;15798:75;;15917:14;15899;:32;;15892:40;;;;15977:10;15959:14;:28;;15951:74;;;;-1:-1:-1;;;15951:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16066:14;-1:-1:-1;16082:14:0;;-1:-1:-1;15554:559:0;15327:797;;14818:1313;;;;;;;;;;;:::o;9459:142::-;9511:6;9538;;;:30;;-1:-1:-1;;9553:5:0;;;9567:1;9562;9553:5;9562:1;9548:15;;;;;:20;9538:30;9530:63;;;;;-1:-1:-1;;;9530:63:0;;;;;;;;;;;;-1:-1:-1;;;9530:63:0;;;;;;;;;;;;;;9186:128;9270:5;;;9265:16;;;;9257:49;;;;;-1:-1:-1;;;9257:49:0;;;;;;;;;;;;-1:-1:-1;;;9257:49:0;;;;;;;;;;;;;;10501:429;10594:13;10609;10636:14;10655:26;10666:6;10674;10655:10;:26::i;:::-;10635:46;;;10692:32;10700:7;10709:6;10717;10692:7;:32::i;:::-;;10736:13;10751;10779:32;10787:7;10796:6;10804;10779:7;:32::i;:::-;-1:-1:-1;;;;;10769:55:0;;:57;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10769:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10769:57:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10769:57:0;;;;;;;-1:-1:-1;;;;;10735:91:0;;;;-1:-1:-1;10735:91:0;;-1:-1:-1;;;;;;10860:16:0;;;;;;;:62;;10903:8;10913;10860:62;;;10880:8;10890;10860:62;10837:85;;;;-1:-1:-1;10501:429:0;-1:-1:-1;;;;;;;10501:429:0:o
Swarm Source
ipfs://7dadaf429efe5475acee106178323b9a8128908c14a279002909fd34fc540f96
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.