Source Code
Overview
MOVR Balance
MOVR Value
$0.00Latest 25 from a total of 2,097 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Add Liquidity Na... | 14081797 | 59 days ago | IN | 0.693755 MOVR | 0.00013562 | ||||
| Remove Liquidity... | 13074482 | 137 days ago | IN | 0 MOVR | 0.00040874 | ||||
| Remove Liquidity... | 12957298 | 146 days ago | IN | 0 MOVR | 0.00134885 | ||||
| Remove Liquidity... | 12574019 | 177 days ago | IN | 0 MOVR | 0.00148754 | ||||
| Remove Liquidity | 12573944 | 177 days ago | IN | 0 MOVR | 0.00155419 | ||||
| Remove Liquidity... | 12573936 | 177 days ago | IN | 0 MOVR | 0.00147281 | ||||
| Remove Liquidity... | 12573928 | 177 days ago | IN | 0 MOVR | 0.00134885 | ||||
| Remove Liquidity | 12569120 | 177 days ago | IN | 0 MOVR | 0.0001458 | ||||
| Remove Liquidity... | 12526707 | 181 days ago | IN | 0 MOVR | 0.00040874 | ||||
| Remove Liquidity... | 12195506 | 206 days ago | IN | 0 MOVR | 0.00014297 | ||||
| Remove Liquidity... | 12143021 | 211 days ago | IN | 0 MOVR | 0.00013817 | ||||
| Remove Liquidity | 12143016 | 211 days ago | IN | 0 MOVR | 0.0001458 | ||||
| Remove Liquidity... | 12143013 | 211 days ago | IN | 0 MOVR | 0.00013817 | ||||
| Remove Liquidity... | 11931757 | 227 days ago | IN | 0 MOVR | 0.00012636 | ||||
| Remove Liquidity... | 11776905 | 239 days ago | IN | 0 MOVR | 0.00012636 | ||||
| Remove Liquidity... | 11632607 | 250 days ago | IN | 0 MOVR | 0.00012636 | ||||
| Remove Liquidity... | 9899651 | 374 days ago | IN | 0 MOVR | 0.00029268 | ||||
| Remove Liquidity... | 9564872 | 397 days ago | IN | 0 MOVR | 0.00100852 | ||||
| Remove Liquidity | 9336748 | 414 days ago | IN | 0 MOVR | 0.0012926 | ||||
| Remove Liquidity... | 9336738 | 414 days ago | IN | 0 MOVR | 0.00113762 | ||||
| Add Liquidity | 9322870 | 415 days ago | IN | 0 MOVR | 0.00129504 | ||||
| Add Liquidity Na... | 9322860 | 415 days ago | IN | 0.01401518 MOVR | 0.0011182 | ||||
| Remove Liquidity... | 9322799 | 415 days ago | IN | 0 MOVR | 0.00113762 | ||||
| Add Liquidity Na... | 9322789 | 415 days ago | IN | 0.01401518 MOVR | 0.0011182 | ||||
| Remove Liquidity... | 9322490 | 415 days ago | IN | 0 MOVR | 0.00113762 |
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 14081797 | 59 days ago | 0.693755 MOVR | ||||
| 13074482 | 137 days ago | 31.51358502 MOVR | ||||
| 13074482 | 137 days ago | 31.51358502 MOVR | ||||
| 12957298 | 146 days ago | 47.11255834 MOVR | ||||
| 12957298 | 146 days ago | 47.11255834 MOVR | ||||
| 12573936 | 177 days ago | 0.79452957 MOVR | ||||
| 12573936 | 177 days ago | 0.79452957 MOVR | ||||
| 12195506 | 206 days ago | 0.1651394 MOVR | ||||
| 12195506 | 206 days ago | 0.1651394 MOVR | ||||
| 12143021 | 211 days ago | 0.04075155 MOVR | ||||
| 12143021 | 211 days ago | 0.04075155 MOVR | ||||
| 12143013 | 211 days ago | 0.23987037 MOVR | ||||
| 12143013 | 211 days ago | 0.23987037 MOVR | ||||
| 11776905 | 239 days ago | 40.63048482 MOVR | ||||
| 11776905 | 239 days ago | 40.63048482 MOVR | ||||
| 9899651 | 374 days ago | 0.01486538 MOVR | ||||
| 9899651 | 374 days ago | 0.01486538 MOVR | ||||
| 9564872 | 397 days ago | 3.31778147 MOVR | ||||
| 9564872 | 397 days ago | 3.31778147 MOVR | ||||
| 9336738 | 414 days ago | 0.01401518 MOVR | ||||
| 9336738 | 414 days ago | 0.01401518 MOVR | ||||
| 9322860 | 415 days ago | 0.01401518 MOVR | ||||
| 9322799 | 415 days ago | 0.01401518 MOVR | ||||
| 9322799 | 415 days ago | 0.01401518 MOVR | ||||
| 9322789 | 415 days ago | 0.01401518 MOVR |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Router
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at moonriver.moonscan.io on 2022-08-01
*/
// File: contracts/core/interfaces/IFactory.sol
pragma solidity >=0.8.0;
interface IFactory {
event PairCreated(
address indexed token0,
address indexed token1,
address pair,
uint256
);
event PairCreateLocked(
address indexed caller
);
event PairCreateUnlocked(
address indexed caller
);
event BootstrapSetted(
address indexed tokenA,
address indexed tokenB,
address indexed bootstrap
);
event FeetoUpdated(
address indexed feeto
);
event FeeBasePointUpdated(
uint8 basePoint
);
function feeto() external view returns (address);
function feeBasePoint() external view returns (uint8);
function lockForPairCreate() external view returns (bool);
function getPair(address tokenA, address tokenB)
external
view
returns (address pair);
function getBootstrap(address tokenA, address tokenB)
external
view
returns (address bootstrap);
function allPairs(uint256) external view returns (address pair);
function allPairsLength() external view returns (uint256);
function createPair(address tokenA, address tokenB)
external
returns (address pair);
}
// File: contracts/core/interfaces/IPair.sol
pragma solidity >=0.8.0;
interface IPair {
event Mint(address indexed sender, uint256 amount0, uint256 amount1);
event Burn(
address indexed sender,
uint256 amount0,
uint256 amount1,
address indexed to
);
event Swap(
address indexed sender,
uint256 amount0In,
uint256 amount1In,
uint256 amount0Out,
uint256 amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint256);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function price0CumulativeLast() external view returns (uint256);
function price1CumulativeLast() external view returns (uint256);
function kLast() external view returns (uint256);
function mint(address to) external returns (uint256 liquidity);
function burn(address to)
external
returns (uint256 amount0, uint256 amount1);
function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
// File: contracts/libraries/Math.sol
pragma solidity >=0.8.0;
// a library for performing various math operations
library Math {
function min(uint256 x, uint256 y) internal pure returns (uint256 z) {
z = x < y ? x : y;
}
// babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method)
function sqrt(uint256 y) internal pure returns (uint256 z) {
if (y > 3) {
z = y;
uint256 x = y / 2 + 1;
while (x < z) {
z = x;
x = (y / x + x) / 2;
}
} else if (y != 0) {
z = 1;
}
}
function add(uint256 x, uint256 y) internal pure returns (uint256 z) {
require((z = x + y) >= x, "ds-math-add-overflow");
}
function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {
require((z = x - y) <= x, "ds-math-sub-underflow");
}
function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {
require(y == 0 || (z = x * y) / y == x, "ds-math-mul-overflow");
}
}
// File: contracts/libraries/Helper.sol
pragma solidity >=0.8.0;
library Helper {
using Math for uint256;
function sortTokens(address tokenA, address tokenB)
internal
pure
returns (address token0, address token1)
{
require(tokenA != tokenB, "Helper: IDENTICAL_ADDRESSES");
(token0, token1) = tokenA < tokenB
? (tokenA, tokenB)
: (tokenB, tokenA);
require(token0 != address(0), "Helper: ZERO_ADDRESS");
}
function pairFor(
address factory,
address tokenA,
address tokenB
) internal view returns (address pair) {
return IFactory(factory).getPair(tokenA, tokenB);
}
function quote(
uint256 amountA,
uint256 reserveA,
uint256 reserveB
) internal pure returns (uint256 amountB) {
require(amountA > 0, "INSUFFICIENT_AMOUNT");
require(reserveA > 0 && reserveB > 0, "INSUFFICIENT_LIQUIDITY");
amountB = amountA.mul(reserveB) / reserveA;
}
function getReserves(
address factory,
address tokenA,
address tokenB
) internal view returns (uint256 reserveA, uint256 reserveB) {
(address token0, ) = sortTokens(tokenA, tokenB);
(uint256 reserve0, uint256 reserve1, ) = IPair(
pairFor(factory, tokenA, tokenB)
).getReserves();
(reserveA, reserveB) = tokenA == token0
? (reserve0, reserve1)
: (reserve1, reserve0);
}
function safeTransferFrom(
address token,
address from,
address to,
uint256 value
) internal {
// bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
(bool success, bytes memory data) = token.call(
abi.encodeWithSelector(0x23b872dd, from, to, value)
);
require(
success && (data.length == 0 || abi.decode(data, (bool))),
"TransferHelper::transferFrom: transferFrom failed"
);
}
function safeTransfer(
address token,
address to,
uint256 value
) internal {
// bytes4(keccak256(bytes('transfer(address,uint256)')));
(bool success, bytes memory data) = token.call(
abi.encodeWithSelector(0xa9059cbb, to, value)
);
require(
success && (data.length == 0 || abi.decode(data, (bool))),
"TransferHelper::safeTransfer: transfer failed"
);
}
function safeTransferNativeCurrency(address to, uint256 value) internal {
(bool success, ) = to.call{value: value}(new bytes(0));
require(
success,
"TransferHelper::safeTransferNativeCurrency: NativeCurrency transfer failed"
);
}
// given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset
function getAmountOut(
uint256 amountIn,
uint256 reserveIn,
uint256 reserveOut
) internal pure returns (uint256 amountOut) {
require(amountIn > 0, "Helper: INSUFFICIENT_INPUT_AMOUNT");
require(
reserveIn > 0 && reserveOut > 0,
"Helper: INSUFFICIENT_LIQUIDITY"
);
uint256 amountInWithFee = amountIn.mul(997);
uint256 numerator = amountInWithFee.mul(reserveOut);
uint256 denominator = reserveIn.mul(1000).add(amountInWithFee);
amountOut = numerator / denominator;
}
// given an output amount of an asset and pair reserves, returns a required input amount of the other asset
function getAmountIn(
uint256 amountOut,
uint256 reserveIn,
uint256 reserveOut
) internal pure returns (uint256 amountIn) {
require(amountOut > 0, "Helper: INSUFFICIENT_OUTPUT_AMOUNT");
require(
reserveIn > 0 && reserveOut > 0,
"Helper: INSUFFICIENT_LIQUIDITY"
);
uint256 numerator = reserveIn.mul(amountOut).mul(1000);
uint256 denominator = reserveOut.sub(amountOut).mul(997);
amountIn = (numerator / denominator).add(1);
}
// performs chained getAmountOut calculations on any number of pairs
function getAmountsOut(
address factory,
uint256 amountIn,
address[] memory path
) internal view returns (uint256[] memory amounts) {
require(path.length >= 2, "Helper: INVALID_PATH");
amounts = new uint256[](path.length);
amounts[0] = amountIn;
for (uint256 i; i < path.length - 1; i++) {
(uint256 reserveIn, uint256 reserveOut) = getReserves(
factory,
path[i],
path[i + 1]
);
amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut);
}
}
function getAmountsIn(
address factory,
uint256 amountOut,
address[] memory path
) internal view returns (uint256[] memory amounts) {
require(path.length >= 2, "Helper: INVALID_PATH");
amounts = new uint256[](path.length);
amounts[amounts.length - 1] = amountOut;
for (uint256 i = path.length - 1; i > 0; i--) {
(uint256 reserveIn, uint256 reserveOut) = getReserves(
factory,
path[i - 1],
path[i]
);
amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);
}
}
}
// File: contracts/periphery/interfaces/IWNativeCurrency.sol
pragma solidity >=0.8.0;
interface IWNativeCurrency {
function deposit() external payable;
function withdraw(uint256) external;
}
// File: contracts/periphery/interfaces/IRouter.sol
pragma solidity >=0.8.0;
interface IRouter {
function factory() external view returns (address);
function WNativeCurrency() external view returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint256 amountADesired,
uint256 amountBDesired,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
)
external
returns (
uint256 amountA,
uint256 amountB,
uint256 liquidity
);
function addLiquiditySingleToken(
address[] calldata path,
uint256 amountIn,
uint256 amountSwapIn,
uint256 amountSwapOutMin,
uint256 amountInReserveMin,
address to,
uint256 deadline
)
external
returns (
uint256 liquidity
);
function addLiquidityNativeCurrency(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountNativeCurrencyMin,
address to,
uint256 deadline
)
external
payable
returns (
uint256 amountToken,
uint256 amountNativeCurrency,
uint256 liquidity
);
function addLiquiditySingleNativeCurrency(
address[] calldata path,
uint256 amountSwapOut,
uint256 nativeCurrencySwapInMax,
uint256 nativeCurrencyReserveMin,
address to,
uint256 deadline
)
external
payable
returns (
uint256 amountToken,
uint256 amountNativeCurrency,
uint256 liquidity
);
function removeLiquidity(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
) external returns (uint256 amountA, uint256 amountB);
function removeLiquidityNativeCurrency(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountNativeCurrencyMin,
address to,
uint256 deadline
) external returns (uint256 amountToken, uint256 amountNativeCurrency);
function swapExactTokensForTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapTokensForExactTokens(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapExactNativeCurrencyForTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
function swapTokensForExactNativeCurrency(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapExactTokensForNativeCurrency(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapNativeCurrencyForExactTokens(
uint256 amountOut,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
function getAmountOut(
uint256 amountIn,
uint256 reserveIn,
uint256 reserveOut
) external pure returns (uint256 amountOut);
function getAmountIn(
uint256 amountOut,
uint256 reserveIn,
uint256 reserveOut
) external pure returns (uint256 amountIn);
function getAmountsOut(uint256 amountIn, address[] calldata path)
external
view
returns (uint256[] memory amounts);
function getAmountsIn(uint256 amountOut, address[] calldata path)
external
view
returns (uint256[] memory amounts);
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
}
// File: contracts/periphery/Router.sol
pragma solidity >=0.8.0;
contract Router is IRouter {
using Math for uint256;
address public override factory;
address public override WNativeCurrency;
constructor(address _factory, address _WNativeCurrency) {
factory = _factory;
WNativeCurrency = _WNativeCurrency;
}
modifier ensure(uint256 deadline) {
require(deadline >= block.timestamp, "Router: EXPIRED");
_;
}
receive() external payable {
require(msg.sender == WNativeCurrency); // only accept Native Currency via fallback from the WNativeCurrency contract
}
function addLiquidity(
address token0,
address token1,
uint256 amount0Desired,
uint256 amount1Desired,
uint256 amount0Min,
uint256 amount1Min,
address to,
uint256 deadline
)
public
override
ensure(deadline)
returns (
uint256 amount0,
uint256 amount1,
uint256 liquidity
)
{
(amount0, amount1) = _addLiquidity(
token0,
token1,
amount0Desired,
amount1Desired,
amount0Min,
amount1Min
);
address pair = Helper.pairFor(factory, token0, token1);
Helper.safeTransferFrom(token0, msg.sender, pair, amount0);
Helper.safeTransferFrom(token1, msg.sender, pair, amount1);
liquidity = IPair(pair).mint(to);
}
function addLiquiditySingleToken(
address[] calldata path,
uint256 amountIn,
uint256 amountSwapOut,
uint256 amountSwapInMax,
uint256 amountInReserveMin,
address to,
uint256 deadline
) external override ensure(deadline) returns (uint256 liquidity) {
address token0 = path[0];
address token1 = path[path.length - 1];
uint256[] memory amounts = swapTokensForExactTokens(
amountSwapOut,
amountSwapInMax,
path,
to,
deadline
);
uint256 amountInReserve = amountIn - amounts[0];
(, , liquidity) = addLiquidity(
token1,
token0,
amounts[amounts.length - 1],
amountInReserve,
amounts[amounts.length - 1],
amountInReserveMin,
to,
deadline
);
}
function addLiquidityNativeCurrency(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountNativeCurrencyMin,
address to,
uint256 deadline
)
external
payable
override
ensure(deadline)
returns (
uint256 amountToken,
uint256 amountNativeCurrency,
uint256 liquidity
)
{
(amountToken, amountNativeCurrency) = _addLiquidity(
token,
WNativeCurrency,
amountTokenDesired,
msg.value,
amountTokenMin,
amountNativeCurrencyMin
);
address pair = Helper.pairFor(factory, token, WNativeCurrency);
Helper.safeTransferFrom(token, msg.sender, pair, amountToken);
IWNativeCurrency(WNativeCurrency).deposit{
value: amountNativeCurrency
}();
require(IERC20(WNativeCurrency).transfer(pair, amountNativeCurrency));
liquidity = IPair(pair).mint(to);
if (msg.value > amountNativeCurrency)
Helper.safeTransferNativeCurrency(
msg.sender,
msg.value - amountNativeCurrency
); // refund dust native currency, if any
}
function addLiquiditySingleNativeCurrency(
address[] memory path,
uint256 amountSwapOut,
uint256 nativeCurrencySwapInMax,
uint256 nativeCurrencyReserveMin,
address to,
uint256 deadline
)
external
payable
override
ensure(deadline)
returns (
uint256 amountToken,
uint256 amountNativeCurrency,
uint256 liquidity
)
{
// Swap
require(path[0] == WNativeCurrency, "Router: INVALID_PATH");
uint256[] memory amounts = Helper.getAmountsIn(
factory,
amountSwapOut,
path
);
require(amounts[0] <= msg.value, "Router: EXCESSIVE_INPUT_AMOUNT");
IWNativeCurrency(WNativeCurrency).deposit{value: amounts[0]}();
require(
IERC20(WNativeCurrency).transfer(
Helper.pairFor(factory, path[0], path[1]),
amounts[0]
)
);
_swap(amounts, path, to);
require(
amounts[0] <= nativeCurrencySwapInMax,
"not allow bigger than nativeCurrencySwapInMax"
);
// Addliquidity
address token = path[path.length - 1];
uint256 nativeCurrencyReserve = msg.value - amounts[0];
(amountToken, amountNativeCurrency) = _addLiquidity(
token,
WNativeCurrency,
amounts[amounts.length - 1],
nativeCurrencyReserve,
amounts[amounts.length - 1],
nativeCurrencyReserveMin
);
address pair = Helper.pairFor(factory, token, WNativeCurrency);
Helper.safeTransferFrom(token, msg.sender, pair, amountToken);
IWNativeCurrency(WNativeCurrency).deposit{
value: amountNativeCurrency
}();
require(IERC20(WNativeCurrency).transfer(pair, amountNativeCurrency));
liquidity = IPair(pair).mint(to);
if (msg.value > (amountNativeCurrency + amounts[0]))
Helper.safeTransferNativeCurrency(
msg.sender,
msg.value - (amountNativeCurrency + amounts[0])
); // refund dust native currency, if any
}
function _addLiquidity(
address token0,
address token1,
uint256 amount0Desired,
uint256 amount1Desired,
uint256 amount0Min,
uint256 amount1Min
) private returns (uint256 amount0, uint256 amount1) {
if (IFactory(factory).getPair(token0, token1) == address(0)) {
IFactory(factory).createPair(token0, token1);
}
(uint256 reserve0, uint256 reserve1) = Helper.getReserves(
factory,
token0,
token1
);
if (reserve0 == 0 && reserve1 == 0) {
(amount0, amount1) = (amount0Desired, amount1Desired);
} else {
uint256 amount1Optimal = Helper.quote(
amount0Desired,
reserve0,
reserve1
);
if (amount1Optimal <= amount1Desired) {
require(
amount1Optimal >= amount1Min,
"Router: INSUFFICIENT_1_AMOUNT"
);
(amount0, amount1) = (amount0Desired, amount1Optimal);
} else {
uint256 amount0Optimal = Helper.quote(
amount1Desired,
reserve1,
reserve0
);
require(amount0Optimal <= amount0Desired);
require(
amount0Optimal >= amount0Min,
"Router: INSUFFICIENT_0_AMOUNT"
);
(amount0, amount1) = (amount0Optimal, amount1Desired);
}
}
}
function removeLiquidity(
address token0,
address token1,
uint256 liquidity,
uint256 amount0Min,
uint256 amount1Min,
address to,
uint256 deadline
)
public
override
ensure(deadline)
returns (uint256 amount0, uint256 amount1)
{
address pair = Helper.pairFor(factory, token0, token1);
IERC20(pair).transferFrom(msg.sender, pair, liquidity);
(uint256 amountA, uint256 amountB) = IPair(pair).burn(to);
(address tokenA, ) = Helper.sortTokens(token0, token1);
(amount0, amount1) = tokenA == token0
? (amountA, amountB)
: (amountB, amountA);
require(amount0 >= amount0Min, "Router: INSUFFICIENT_0_AMOUNT");
require(amount1 >= amount1Min, "Router: INSUFFICIENT_1_AMOUNT");
}
function removeLiquidityNativeCurrency(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountNativeCurrencyMin,
address to,
uint256 deadline
)
public
override
ensure(deadline)
returns (uint256 amountToken, uint256 amountNativeCurrency)
{
(amountToken, amountNativeCurrency) = removeLiquidity(
token,
WNativeCurrency,
liquidity,
amountTokenMin,
amountNativeCurrencyMin,
address(this),
deadline
);
Helper.safeTransfer(token, to, amountToken);
IWNativeCurrency(WNativeCurrency).withdraw(amountNativeCurrency);
Helper.safeTransferNativeCurrency(to, amountNativeCurrency);
}
function _swap(
uint256[] memory amounts,
address[] memory path,
address _to
) private {
for (uint256 i; i < path.length - 1; i++) {
(address input, address output) = (path[i], path[i + 1]);
(address token0, ) = Helper.sortTokens(input, output);
uint256 amountOut = amounts[i + 1];
(uint256 amount0Out, uint256 amount1Out) = input == token0
? (uint256(0), amountOut)
: (amountOut, uint256(0));
address to = i < path.length - 2
? Helper.pairFor(factory, output, path[i + 2])
: _to;
IPair(Helper.pairFor(factory, input, output)).swap(
amount0Out,
amount1Out,
to,
new bytes(0)
);
}
}
function swapExactTokensForTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) public override ensure(deadline) returns (uint256[] memory amounts) {
amounts = Helper.getAmountsOut(factory, amountIn, path);
require(
amounts[amounts.length - 1] >= amountOutMin,
"Router: INSUFFICIENT_OUTPUT_AMOUNT"
);
Helper.safeTransferFrom(
path[0],
msg.sender,
Helper.pairFor(factory, path[0], path[1]),
amounts[0]
);
_swap(amounts, path, to);
}
function swapTokensForExactTokens(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) public override ensure(deadline) returns (uint256[] memory amounts) {
amounts = Helper.getAmountsIn(factory, amountOut, path);
require(amounts[0] <= amountInMax, "Router: EXCESSIVE_INPUT_AMOUNT");
Helper.safeTransferFrom(
path[0],
msg.sender,
Helper.pairFor(factory, path[0], path[1]),
amounts[0]
);
_swap(amounts, path, to);
}
function swapExactNativeCurrencyForTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
)
external
payable
override
ensure(deadline)
returns (uint256[] memory amounts)
{
require(path[0] == WNativeCurrency, "Router: INVALID_PATH");
amounts = Helper.getAmountsOut(factory, msg.value, path);
require(
amounts[amounts.length - 1] >= amountOutMin,
"Router: INSUFFICIENT_OUTPUT_AMOUNT"
);
IWNativeCurrency(WNativeCurrency).deposit{value: amounts[0]}();
require(
IERC20(WNativeCurrency).transfer(
Helper.pairFor(factory, path[0], path[1]),
amounts[0]
)
);
_swap(amounts, path, to);
}
function swapTokensForExactNativeCurrency(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external override ensure(deadline) returns (uint256[] memory amounts) {
require(
path[path.length - 1] == WNativeCurrency,
"Router: INVALID_PATH"
);
amounts = Helper.getAmountsIn(factory, amountOut, path);
require(amounts[0] <= amountInMax, "Router: EXCESSIVE_INPUT_AMOUNT");
Helper.safeTransferFrom(
path[0],
msg.sender,
Helper.pairFor(factory, path[0], path[1]),
amounts[0]
);
_swap(amounts, path, address(this));
IWNativeCurrency(WNativeCurrency).withdraw(amounts[amounts.length - 1]);
Helper.safeTransferNativeCurrency(to, amounts[amounts.length - 1]);
}
function swapExactTokensForNativeCurrency(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external override ensure(deadline) returns (uint256[] memory amounts) {
require(
path[path.length - 1] == WNativeCurrency,
"Router: INVALID_PATH"
);
amounts = Helper.getAmountsOut(factory, amountIn, path);
require(
amounts[amounts.length - 1] >= amountOutMin,
"Router: INSUFFICIENT_OUTPUT_AMOUNT"
);
Helper.safeTransferFrom(
path[0],
msg.sender,
Helper.pairFor(factory, path[0], path[1]),
amounts[0]
);
_swap(amounts, path, address(this));
IWNativeCurrency(WNativeCurrency).withdraw(amounts[amounts.length - 1]);
Helper.safeTransferNativeCurrency(to, amounts[amounts.length - 1]);
}
function swapNativeCurrencyForExactTokens(
uint256 amountOut,
address[] calldata path,
address to,
uint256 deadline
)
external
payable
override
ensure(deadline)
returns (uint256[] memory amounts)
{
require(path[0] == WNativeCurrency, "Router: INVALID_PATH");
amounts = Helper.getAmountsIn(factory, amountOut, path);
require(amounts[0] <= msg.value, "Router: EXCESSIVE_INPUT_AMOUNT");
IWNativeCurrency(WNativeCurrency).deposit{value: amounts[0]}();
require(
IERC20(WNativeCurrency).transfer(
Helper.pairFor(factory, path[0], path[1]),
amounts[0]
)
);
_swap(amounts, path, to);
if (msg.value > amounts[0])
Helper.safeTransferNativeCurrency(
msg.sender,
msg.value - amounts[0]
); // refund dust eth, if any
}
function getAmountOut(
uint256 amountIn,
uint256 reserveIn,
uint256 reserveOut
) public pure override returns (uint256 amountOut) {
return Helper.getAmountOut(amountIn, reserveIn, reserveOut);
}
function getAmountIn(
uint256 amountOut,
uint256 reserveIn,
uint256 reserveOut
) public pure override returns (uint256 amountIn) {
return Helper.getAmountOut(amountOut, reserveIn, reserveOut);
}
function getAmountsOut(uint256 amountIn, address[] memory path)
public
view
override
returns (uint256[] memory amounts)
{
return Helper.getAmountsOut(factory, amountIn, path);
}
function getAmountsIn(uint256 amountOut, address[] memory path)
public
view
override
returns (uint256[] memory amounts)
{
return Helper.getAmountsIn(factory, amountOut, path);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WNativeCurrency","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WNativeCurrency","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint256","name":"amount0Desired","type":"uint256"},{"internalType":"uint256","name":"amount1Desired","type":"uint256"},{"internalType":"uint256","name":"amount0Min","type":"uint256"},{"internalType":"uint256","name":"amount1Min","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","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":"amountNativeCurrencyMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityNativeCurrency","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountNativeCurrency","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"uint256","name":"amountSwapOut","type":"uint256"},{"internalType":"uint256","name":"nativeCurrencySwapInMax","type":"uint256"},{"internalType":"uint256","name":"nativeCurrencyReserveMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquiditySingleNativeCurrency","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountNativeCurrency","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountSwapOut","type":"uint256"},{"internalType":"uint256","name":"amountSwapInMax","type":"uint256"},{"internalType":"uint256","name":"amountInReserveMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquiditySingleToken","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","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":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amount0Min","type":"uint256"},{"internalType":"uint256","name":"amount1Min","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","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":"amountNativeCurrencyMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityNativeCurrency","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountNativeCurrency","type":"uint256"}],"stateMutability":"nonpayable","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":"swapExactNativeCurrencyForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"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":"swapExactTokensForNativeCurrency","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":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","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":"swapNativeCurrencyForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","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":"swapTokensForExactNativeCurrency","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
60806040523480156200001157600080fd5b50604051620035d1380380620035d1833981016040819052620000349162000083565b600080546001600160a01b039384166001600160a01b03199182161790915560018054929093169116179055620000bb565b80516001600160a01b03811681146200007e57600080fd5b919050565b600080604083850312156200009757600080fd5b620000a28362000066565b9150620000b26020840162000066565b90509250929050565b61350680620000cb6000396000f3fe60806040526004361061010d5760003560e01c80639be7614d11610095578063cd1bd0d911610064578063cd1bd0d9146102f1578063d06ca61f14610304578063dcff1b9414610324578063e8e3370014610344578063f85b7c8b1461036457600080fd5b80639be7614d1461027e578063b1ea829214610291578063baa2abde146102b1578063c45a0155146102d157600080fd5b8063419591ed116100dc578063419591ed146101e5578063686589671461021d57806385f8c259146101305780638803dbee1461024b578063937ca0da1461026b57600080fd5b8063054d50d4146101305780631f00ca741461016357806338ed173914610190578063403bf1f2146101b057600080fd5b3661012b576001546001600160a01b0316331461012957600080fd5b005b600080fd5b34801561013c57600080fd5b5061015061014b3660046131fc565b610384565b6040519081526020015b60405180910390f35b34801561016f57600080fd5b5061018361017e36600461311e565b610399565b60405161015a9190613244565b34801561019c57600080fd5b506101836101ab366004613189565b6103bc565b3480156101bc57600080fd5b506101d06101cb366004612ee5565b610576565b6040805192835260208301919091520161015a565b3480156101f157600080fd5b50600154610205906001600160a01b031681565b6040516001600160a01b03909116815260200161015a565b61023061022b366004612fca565b61063a565b6040805193845260208401929092529082015260600161015a565b34801561025757600080fd5b50610183610266366004613189565b610c05565b610230610279366004612ee5565b610cae565b61018361028c3660046130b7565b610ebd565b34801561029d57600080fd5b506101506102ac366004612f43565b6111c8565b3480156102bd57600080fd5b506101d06102cc366004612df7565b6112fe565b3480156102dd57600080fd5b50600054610205906001600160a01b031681565b6101836102ff3660046130b7565b61152f565b34801561031057600080fd5b5061018361031f36600461311e565b6117c8565b34801561033057600080fd5b5061018361033f366004613189565b6117e2565b34801561035057600080fd5b5061023061035f366004612e69565b611a0d565b34801561037057600080fd5b5061018361037f366004613189565b611b07565b6000610391848484611c16565b949350505050565b6000546060906103b3906001600160a01b03168484611d1a565b90505b92915050565b606081428110156103e85760405162461bcd60e51b81526004016103df906132ed565b60405180910390fd5b6000546040805160208089028281018201909352888252610432936001600160a01b0316928c92918b918b91829190850190849080828437600092019190915250611ea792505050565b91508682600184516104449190613401565b815181106104545761045461348c565b6020026020010151101561047a5760405162461bcd60e51b81526004016103df90613316565b61052c868660008181106104905761049061348c565b90506020020160208101906104a59190612db6565b60008054339161050c916001600160a01b0316908b908b90816104ca576104ca61348c565b90506020020160208101906104df9190612db6565b8b8b60018181106104f2576104f261348c565b90506020020160208101906105079190612db6565b612014565b8560008151811061051f5761051f61348c565b6020026020010151612099565b61056b828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506121d7915050565b509695505050505050565b600080824281101561059a5760405162461bcd60e51b81526004016103df906132ed565b6001546105b6908a906001600160a01b03168a8a8a308a6112fe565b90935091506105c68986856123ab565b600154604051632e1a7d4d60e01b8152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561060c57600080fd5b505af1158015610620573d6000803e3d6000fd5b5050505061062e85836124dc565b50965096945050505050565b600080600083428110156106605760405162461bcd60e51b81526004016103df906132ed565b6001548a516001600160a01b03909116908b906000906106825761068261348c565b60200260200101516001600160a01b0316146106b05760405162461bcd60e51b81526004016103df90613288565b600080546106c8906001600160a01b03168b8d611d1a565b905034816000815181106106de576106de61348c565b602002602001015111156107045760405162461bcd60e51b81526004016103df906132b6565b60015481516001600160a01b039091169063d0e30db090839060009061072c5761072c61348c565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561075f57600080fd5b505af1158015610773573d6000803e3d6000fd5b5050505050600160009054906101000a90046001600160a01b03166001600160a01b031663a9059cbb6107ee60008054906101000a90046001600160a01b03168e6000815181106107c6576107c661348c565b60200260200101518f6001815181106107e1576107e161348c565b6020026020010151612014565b836000815181106108015761080161348c565b60200260200101516040518363ffffffff1660e01b815260040161083a9291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b15801561085457600080fd5b505af1158015610868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088c919061302c565b61089557600080fd5b6108a0818c896121d7565b88816000815181106108b4576108b461348c565b602002602001015111156109205760405162461bcd60e51b815260206004820152602d60248201527f6e6f7420616c6c6f7720626967676572207468616e206e61746976654375727260448201526c0cadcc6f2a6eec2e092dc9ac2f609b1b60648201526084016103df565b60008b60018d516109319190613401565b815181106109415761094161348c565b602002602001015190506000826000815181106109605761096061348c565b6020026020010151346109739190613401565b90506109e482600160009054906101000a90046001600160a01b0316856001875161099e9190613401565b815181106109ae576109ae61348c565b60200260200101518487600189516109c69190613401565b815181106109d6576109d661348c565b60200260200101518f6125d7565b60008054600154939a5091985091610a0a916001600160a01b0390811691869116612014565b9050610a188333838b612099565b600160009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0886040518263ffffffff1660e01b81526004016000604051808303818588803b158015610a6857600080fd5b505af1158015610a7c573d6000803e3d6000fd5b505060015460405163a9059cbb60e01b81526001600160a01b038681166004830152602482018d9052909116935063a9059cbb92506044019050602060405180830381600087803b158015610ad057600080fd5b505af1158015610ae4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b08919061302c565b610b1157600080fd5b6040516335313c2160e11b81526001600160a01b038b81166004830152821690636a62784290602401602060405180830381600087803b158015610b5457600080fd5b505af1158015610b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8c919061309e565b955083600081518110610ba157610ba161348c565b602002602001015187610bb491906133a8565b341115610bf457610bf43385600081518110610bd257610bd261348c565b602002602001015189610be591906133a8565b610bef9034613401565b6124dc565b505050505096509650969350505050565b60608142811015610c285760405162461bcd60e51b81526004016103df906132ed565b6000546040805160208089028281018201909352888252610c72936001600160a01b0316928c92918b918b91829190850190849080828437600092019190915250611d1a92505050565b91508682600081518110610c8857610c8861348c565b6020026020010151111561047a5760405162461bcd60e51b81526004016103df906132b6565b60008060008342811015610cd45760405162461bcd60e51b81526004016103df906132ed565b600154610cef908b906001600160a01b03168b348c8c6125d7565b6000805460015493975091955091610d15916001600160a01b03908116918e9116612014565b9050610d238b338388612099565b600160009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015610d7357600080fd5b505af1158015610d87573d6000803e3d6000fd5b505060015460405163a9059cbb60e01b81526001600160a01b038681166004830152602482018a9052909116935063a9059cbb92506044019050602060405180830381600087803b158015610ddb57600080fd5b505af1158015610def573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e13919061302c565b610e1c57600080fd5b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a62784290602401602060405180830381600087803b158015610e5f57600080fd5b505af1158015610e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e97919061309e565b925083341115610eaf57610eaf33610bef8634613401565b505096509650969350505050565b60608142811015610ee05760405162461bcd60e51b81526004016103df906132ed565b6001546001600160a01b03168686600081610efd57610efd61348c565b9050602002016020810190610f129190612db6565b6001600160a01b031614610f385760405162461bcd60e51b81526004016103df90613288565b6000546040805160208089028281018201909352888252610f82936001600160a01b0316928b92918b918b91829190850190849080828437600092019190915250611d1a92505050565b91503482600081518110610f9857610f9861348c565b60200260200101511115610fbe5760405162461bcd60e51b81526004016103df906132b6565b60015482516001600160a01b039091169063d0e30db0908490600090610fe657610fe661348c565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561101957600080fd5b505af115801561102d573d6000803e3d6000fd5b5050600154600080546001600160a01b03928316955063a9059cbb945061108c9350909116908a908a90816110645761106461348c565b90506020020160208101906110799190612db6565b8a8a60018181106104f2576104f261348c565b8460008151811061109f5761109f61348c565b60200260200101516040518363ffffffff1660e01b81526004016110d89291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b1580156110f257600080fd5b505af1158015611106573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112a919061302c565b61113357600080fd5b611172828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506121d7915050565b816000815181106111855761118561348c565b60200260200101513411156111be576111be33836000815181106111ab576111ab61348c565b602002602001015134610bef9190613401565b5095945050505050565b600081428110156111eb5760405162461bcd60e51b81526004016103df906132ed565b60008a8a60008181106112005761120061348c565b90506020020160208101906112159190612db6565b905060008b8b611226600182613401565b8181106112355761123561348c565b905060200201602081019061124a9190612db6565b9050600061125c8a8a8f8f8b8b610c05565b90506000816000815181106112735761127361348c565b60200260200101518c6112869190613401565b90506112e48385846001865161129c9190613401565b815181106112ac576112ac61348c565b60200260200101518486600188516112c49190613401565b815181106112d4576112d461348c565b60200260200101518e8e8e611a0d565b909150905080965050505050505098975050505050505050565b60008082428110156113225760405162461bcd60e51b81526004016103df906132ed565b6000805461133a906001600160a01b03168c8c612014565b6040516323b872dd60e01b81523360048201526001600160a01b03821660248201819052604482018c90529192506323b872dd90606401602060405180830381600087803b15801561138b57600080fd5b505af115801561139f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c3919061302c565b5060405163226bf2d160e21b81526001600160a01b03878116600483015260009182918416906389afcb44906024016040805180830381600087803b15801561140b57600080fd5b505af115801561141f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114439190613165565b9150915060006114538e8e612826565b5090508d6001600160a01b0316816001600160a01b031614611476578183611479565b82825b90975095508a8710156114ce5760405162461bcd60e51b815260206004820152601d60248201527f526f757465723a20494e53554646494349454e545f305f414d4f554e5400000060448201526064016103df565b8986101561151e5760405162461bcd60e51b815260206004820152601d60248201527f526f757465723a20494e53554646494349454e545f315f414d4f554e5400000060448201526064016103df565b505050505097509795505050505050565b606081428110156115525760405162461bcd60e51b81526004016103df906132ed565b6001546001600160a01b0316868660008161156f5761156f61348c565b90506020020160208101906115849190612db6565b6001600160a01b0316146115aa5760405162461bcd60e51b81526004016103df90613288565b60005460408051602080890282810182019093528882526115f4936001600160a01b0316923492918b918b91829190850190849080828437600092019190915250611ea792505050565b91508682600184516116069190613401565b815181106116165761161661348c565b6020026020010151101561163c5760405162461bcd60e51b81526004016103df90613316565b60015482516001600160a01b039091169063d0e30db09084906000906116645761166461348c565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561169757600080fd5b505af11580156116ab573d6000803e3d6000fd5b5050600154600080546001600160a01b03928316955063a9059cbb94506116e29350909116908a908a90816110645761106461348c565b846000815181106116f5576116f561348c565b60200260200101516040518363ffffffff1660e01b815260040161172e9291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b15801561174857600080fd5b505af115801561175c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611780919061302c565b61178957600080fd5b6111be828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506121d7915050565b6000546060906103b3906001600160a01b03168484611ea7565b606081428110156118055760405162461bcd60e51b81526004016103df906132ed565b600180546001600160a01b031690879087906118219082613401565b8181106118305761183061348c565b90506020020160208101906118459190612db6565b6001600160a01b03161461186b5760405162461bcd60e51b81526004016103df90613288565b60005460408051602080890282810182019093528882526118b5936001600160a01b0316928c92918b918b91829190850190849080828437600092019190915250611ea792505050565b91508682600184516118c79190613401565b815181106118d7576118d761348c565b602002602001015110156118fd5760405162461bcd60e51b81526004016103df90613316565b611913868660008181106104905761049061348c565b611952828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506121d7915050565b6001805483516001600160a01b0390911691632e1a7d4d91859161197591613401565b815181106119855761198561348c565b60200260200101516040518263ffffffff1660e01b81526004016119ab91815260200190565b600060405180830381600087803b1580156119c557600080fd5b505af11580156119d9573d6000803e3d6000fd5b5050505061056b8483600185516119f09190613401565b81518110611a0057611a0061348c565b60200260200101516124dc565b60008060008342811015611a335760405162461bcd60e51b81526004016103df906132ed565b611a418c8c8c8c8c8c6125d7565b6000805492965090945090611a60906001600160a01b03168e8e612014565b9050611a6e8d338388612099565b611a7a8c338387612099565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a62784290602401602060405180830381600087803b158015611abd57600080fd5b505af1158015611ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af5919061309e565b92505050985098509895505050505050565b60608142811015611b2a5760405162461bcd60e51b81526004016103df906132ed565b600180546001600160a01b03169087908790611b469082613401565b818110611b5557611b5561348c565b9050602002016020810190611b6a9190612db6565b6001600160a01b031614611b905760405162461bcd60e51b81526004016103df90613288565b6000546040805160208089028281018201909352888252611bda936001600160a01b0316928c92918b918b91829190850190849080828437600092019190915250611d1a92505050565b91508682600081518110611bf057611bf061348c565b602002602001015111156118fd5760405162461bcd60e51b81526004016103df906132b6565b6000808411611c715760405162461bcd60e51b815260206004820152602160248201527f48656c7065723a20494e53554646494349454e545f494e5055545f414d4f554e6044820152601560fa1b60648201526084016103df565b600083118015611c815750600082115b611ccd5760405162461bcd60e51b815260206004820152601e60248201527f48656c7065723a20494e53554646494349454e545f4c4951554944495459000060448201526064016103df565b6000611cdb856103e5612907565b90506000611ce98285612907565b90506000611d0383611cfd886103e8612907565b9061296e565b9050611d0f81836133c0565b979650505050505050565b6060600282511015611d655760405162461bcd60e51b8152602060048201526014602482015273090cad8e0cae47440929cac82989288bea082a8960631b60448201526064016103df565b815167ffffffffffffffff811115611d7f57611d7f6134a2565b604051908082528060200260200182016040528015611da8578160200160208202803683370190505b509050828160018351611dbb9190613401565b81518110611dcb57611dcb61348c565b602002602001018181525050600060018351611de79190613401565b90505b8015611e9f57600080611e3a8786611e03600187613401565b81518110611e1357611e1361348c565b6020026020010151878681518110611e2d57611e2d61348c565b60200260200101516129c3565b91509150611e62848481518110611e5357611e5361348c565b60200260200101518383612a9c565b84611e6e600186613401565b81518110611e7e57611e7e61348c565b60200260200101818152505050508080611e9790613444565b915050611dea565b509392505050565b6060600282511015611ef25760405162461bcd60e51b8152602060048201526014602482015273090cad8e0cae47440929cac82989288bea082a8960631b60448201526064016103df565b815167ffffffffffffffff811115611f0c57611f0c6134a2565b604051908082528060200260200182016040528015611f35578160200160208202803683370190505b5090508281600081518110611f4c57611f4c61348c565b60200260200101818152505060005b60018351611f699190613401565b811015611e9f57600080611faf87868581518110611f8957611f8961348c565b602002602001015187866001611f9f91906133a8565b81518110611e2d57611e2d61348c565b91509150611fd7848481518110611fc857611fc861348c565b60200260200101518383611c16565b84611fe38560016133a8565b81518110611ff357611ff361348c565b6020026020010181815250505050808061200c9061345b565b915050611f5b565b60405163e6a4390560e01b81526001600160a01b03838116600483015282811660248301526000919085169063e6a439059060440160206040518083038186803b15801561206157600080fd5b505afa158015612075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103919190612dda565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916120fd9190613228565b6000604051808303816000865af19150503d806000811461213a576040519150601f19603f3d011682016040523d82523d6000602084013e61213f565b606091505b5091509150818015612169575080511580612169575080806020019051810190612169919061302c565b6121cf5760405162461bcd60e51b815260206004820152603160248201527f5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472604482015270185b9cd9995c919c9bdb4819985a5b1959607a1b60648201526084016103df565b505050505050565b60005b600183516121e89190613401565b8110156123a5576000808483815181106122045761220461348c565b60200260200101518584600161221a91906133a8565b8151811061222a5761222a61348c565b60200260200101519150915060006122428383612826565b5090506000876122538660016133a8565b815181106122635761226361348c565b60200260200101519050600080836001600160a01b0316866001600160a01b03161461229157826000612295565b6000835b91509150600060028a516122a99190613401565b88106122b557886122e2565b6000546122e2906001600160a01b0316878c6122d28c60026133a8565b815181106107e1576107e161348c565b6000549091506122fc906001600160a01b03168888612014565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015612339576020820181803683370190505b506040518563ffffffff1660e01b81526004016123599493929190613358565b600060405180830381600087803b15801561237357600080fd5b505af1158015612387573d6000803e3d6000fd5b5050505050505050505050808061239d9061345b565b9150506121da565b50505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916124079190613228565b6000604051808303816000865af19150503d8060008114612444576040519150601f19603f3d011682016040523d82523d6000602084013e612449565b606091505b5091509150818015612473575080511580612473575080806020019051810190612473919061302c565b6124d55760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b60648201526084016103df565b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040516125069190613228565b60006040518083038185875af1925050503d8060008114612543576040519150601f19603f3d011682016040523d82523d6000602084013e612548565b606091505b50509050806125d25760405162461bcd60e51b815260206004820152604a60248201527f5472616e7366657248656c7065723a3a736166655472616e736665724e61746960448201527f766543757272656e63793a204e617469766543757272656e6379207472616e7360648201526919995c8819985a5b195960b21b608482015260a4016103df565b505050565b6000805460405163e6a4390560e01b81526001600160a01b03898116600483015288811660248301528392839291169063e6a439059060440160206040518083038186803b15801561262857600080fd5b505afa15801561263c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126609190612dda565b6001600160a01b031614156126f8576000546040516364e329cb60e11b81526001600160a01b038a8116600483015289811660248301529091169063c9c6539690604401602060405180830381600087803b1580156126be57600080fd5b505af11580156126d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f69190612dda565b505b600080548190612712906001600160a01b03168b8b6129c3565b91509150816000148015612724575080155b1561273457879350869250612819565b6000612741898484612b9b565b90508781116127a5578581101561279a5760405162461bcd60e51b815260206004820152601d60248201527f526f757465723a20494e53554646494349454e545f315f414d4f554e5400000060448201526064016103df565b889450925082612817565b60006127b2898486612b9b565b9050898111156127c157600080fd5b878110156128115760405162461bcd60e51b815260206004820152601d60248201527f526f757465723a20494e53554646494349454e545f305f414d4f554e5400000060448201526064016103df565b94508793505b505b5050965096945050505050565b600080826001600160a01b0316846001600160a01b0316141561288b5760405162461bcd60e51b815260206004820152601b60248201527f48656c7065723a204944454e544943414c5f414444524553534553000000000060448201526064016103df565b826001600160a01b0316846001600160a01b0316106128ab5782846128ae565b83835b90925090506001600160a01b0382166129005760405162461bcd60e51b815260206004820152601460248201527348656c7065723a205a45524f5f4144445245535360601b60448201526064016103df565b9250929050565b600081158061292b5750828261291d81836133e2565b925061292990836133c0565b145b6103b65760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b60448201526064016103df565b60008261297b83826133a8565b91508110156103b65760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b60448201526064016103df565b60008060006129d28585612826565b5090506000806129e3888888612014565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612a1b57600080fd5b505afa158015612a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a53919061304e565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b031614612a8a578082612a8d565b81815b90999098509650505050505050565b6000808411612af85760405162461bcd60e51b815260206004820152602260248201527f48656c7065723a20494e53554646494349454e545f4f55545055545f414d4f55604482015261139560f21b60648201526084016103df565b600083118015612b085750600082115b612b545760405162461bcd60e51b815260206004820152601e60248201527f48656c7065723a20494e53554646494349454e545f4c4951554944495459000060448201526064016103df565b6000612b6c6103e8612b668688612907565b90612907565b90506000612b806103e5612b668689612c4c565b9050612b916001611cfd83856133c0565b9695505050505050565b6000808411612be25760405162461bcd60e51b8152602060048201526013602482015272125394d551919250d251539517d05353d55395606a1b60448201526064016103df565b600083118015612bf25750600082115b612c375760405162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b60448201526064016103df565b82612c428584612907565b61039191906133c0565b600082612c598382613401565b91508111156103b65760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b60448201526064016103df565b8035612cad816134b8565b919050565b60008083601f840112612cc457600080fd5b50813567ffffffffffffffff811115612cdc57600080fd5b6020830191508360208260051b850101111561290057600080fd5b600082601f830112612d0857600080fd5b8135602067ffffffffffffffff80831115612d2557612d256134a2565b8260051b604051601f19603f83011681018181108482111715612d4a57612d4a6134a2565b60405284815283810192508684018288018501891015612d6957600080fd5b600092505b85831015612d9357612d7f81612ca2565b845292840192600192909201918401612d6e565b50979650505050505050565b80516001600160701b0381168114612cad57600080fd5b600060208284031215612dc857600080fd5b8135612dd3816134b8565b9392505050565b600060208284031215612dec57600080fd5b8151612dd3816134b8565b600080600080600080600060e0888a031215612e1257600080fd5b8735612e1d816134b8565b96506020880135612e2d816134b8565b955060408801359450606088013593506080880135925060a0880135612e52816134b8565b8092505060c0880135905092959891949750929550565b600080600080600080600080610100898b031215612e8657600080fd5b8835612e91816134b8565b97506020890135612ea1816134b8565b965060408901359550606089013594506080890135935060a0890135925060c0890135612ecd816134b8565b8092505060e089013590509295985092959890939650565b60008060008060008060c08789031215612efe57600080fd5b8635612f09816134b8565b95506020870135945060408701359350606087013592506080870135612f2e816134b8565b8092505060a087013590509295509295509295565b60008060008060008060008060e0898b031215612f5f57600080fd5b883567ffffffffffffffff811115612f7657600080fd5b612f828b828c01612cb2565b9099509750506020890135955060408901359450606089013593506080890135925060a0890135612fb2816134b8565b8092505060c089013590509295985092959890939650565b60008060008060008060c08789031215612fe357600080fd5b863567ffffffffffffffff811115612ffa57600080fd5b61300689828a01612cf7565b9650506020870135945060408701359350606087013592506080870135612f2e816134b8565b60006020828403121561303e57600080fd5b81518015158114612dd357600080fd5b60008060006060848603121561306357600080fd5b61306c84612d9f565b925061307a60208501612d9f565b9150604084015163ffffffff8116811461309357600080fd5b809150509250925092565b6000602082840312156130b057600080fd5b5051919050565b6000806000806000608086880312156130cf57600080fd5b85359450602086013567ffffffffffffffff8111156130ed57600080fd5b6130f988828901612cb2565b909550935050604086013561310d816134b8565b949793965091946060013592915050565b6000806040838503121561313157600080fd5b82359150602083013567ffffffffffffffff81111561314f57600080fd5b61315b85828601612cf7565b9150509250929050565b6000806040838503121561317857600080fd5b505080516020909101519092909150565b60008060008060008060a087890312156131a257600080fd5b8635955060208701359450604087013567ffffffffffffffff8111156131c757600080fd5b6131d389828a01612cb2565b90955093505060608701356131e7816134b8565b80925050608087013590509295509295509295565b60008060006060848603121561321157600080fd5b505081359360208301359350604090920135919050565b6000825161323a818460208701613418565b9190910192915050565b6020808252825182820181905260009190848201906040850190845b8181101561327c57835183529284019291840191600101613260565b50909695505050505050565b6020808252601490820152730a4deeae8cae47440929cac82989288bea082a8960631b604082015260600190565b6020808252601e908201527f526f757465723a204558434553534956455f494e5055545f414d4f554e540000604082015260600190565b6020808252600f908201526e149bdd5d195c8e8811561412549151608a1b604082015260600190565b60208082526022908201527f526f757465723a20494e53554646494349454e545f4f55545055545f414d4f55604082015261139560f21b606082015260800190565b84815283602082015260018060a01b038316604082015260806060820152600082518060808401526133918160a0850160208701613418565b601f01601f19169190910160a00195945050505050565b600082198211156133bb576133bb613476565b500190565b6000826133dd57634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156133fc576133fc613476565b500290565b60008282101561341357613413613476565b500390565b60005b8381101561343357818101518382015260200161341b565b838111156123a55750506000910152565b60008161345357613453613476565b506000190190565b600060001982141561346f5761346f613476565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146134cd57600080fd5b5056fea264697066735822122000012f7971a5340f6d82c9285eb47412bf94bb74467dd7335c4080e866e0edac64736f6c6343000807003300000000000000000000000028eaa01dc747c4e9d37c5ca473e7d167e90f8d3800000000000000000000000098878b06940ae243284ca214f92bb71a2b032b8a
Deployed Bytecode
0x60806040526004361061010d5760003560e01c80639be7614d11610095578063cd1bd0d911610064578063cd1bd0d9146102f1578063d06ca61f14610304578063dcff1b9414610324578063e8e3370014610344578063f85b7c8b1461036457600080fd5b80639be7614d1461027e578063b1ea829214610291578063baa2abde146102b1578063c45a0155146102d157600080fd5b8063419591ed116100dc578063419591ed146101e5578063686589671461021d57806385f8c259146101305780638803dbee1461024b578063937ca0da1461026b57600080fd5b8063054d50d4146101305780631f00ca741461016357806338ed173914610190578063403bf1f2146101b057600080fd5b3661012b576001546001600160a01b0316331461012957600080fd5b005b600080fd5b34801561013c57600080fd5b5061015061014b3660046131fc565b610384565b6040519081526020015b60405180910390f35b34801561016f57600080fd5b5061018361017e36600461311e565b610399565b60405161015a9190613244565b34801561019c57600080fd5b506101836101ab366004613189565b6103bc565b3480156101bc57600080fd5b506101d06101cb366004612ee5565b610576565b6040805192835260208301919091520161015a565b3480156101f157600080fd5b50600154610205906001600160a01b031681565b6040516001600160a01b03909116815260200161015a565b61023061022b366004612fca565b61063a565b6040805193845260208401929092529082015260600161015a565b34801561025757600080fd5b50610183610266366004613189565b610c05565b610230610279366004612ee5565b610cae565b61018361028c3660046130b7565b610ebd565b34801561029d57600080fd5b506101506102ac366004612f43565b6111c8565b3480156102bd57600080fd5b506101d06102cc366004612df7565b6112fe565b3480156102dd57600080fd5b50600054610205906001600160a01b031681565b6101836102ff3660046130b7565b61152f565b34801561031057600080fd5b5061018361031f36600461311e565b6117c8565b34801561033057600080fd5b5061018361033f366004613189565b6117e2565b34801561035057600080fd5b5061023061035f366004612e69565b611a0d565b34801561037057600080fd5b5061018361037f366004613189565b611b07565b6000610391848484611c16565b949350505050565b6000546060906103b3906001600160a01b03168484611d1a565b90505b92915050565b606081428110156103e85760405162461bcd60e51b81526004016103df906132ed565b60405180910390fd5b6000546040805160208089028281018201909352888252610432936001600160a01b0316928c92918b918b91829190850190849080828437600092019190915250611ea792505050565b91508682600184516104449190613401565b815181106104545761045461348c565b6020026020010151101561047a5760405162461bcd60e51b81526004016103df90613316565b61052c868660008181106104905761049061348c565b90506020020160208101906104a59190612db6565b60008054339161050c916001600160a01b0316908b908b90816104ca576104ca61348c565b90506020020160208101906104df9190612db6565b8b8b60018181106104f2576104f261348c565b90506020020160208101906105079190612db6565b612014565b8560008151811061051f5761051f61348c565b6020026020010151612099565b61056b828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506121d7915050565b509695505050505050565b600080824281101561059a5760405162461bcd60e51b81526004016103df906132ed565b6001546105b6908a906001600160a01b03168a8a8a308a6112fe565b90935091506105c68986856123ab565b600154604051632e1a7d4d60e01b8152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561060c57600080fd5b505af1158015610620573d6000803e3d6000fd5b5050505061062e85836124dc565b50965096945050505050565b600080600083428110156106605760405162461bcd60e51b81526004016103df906132ed565b6001548a516001600160a01b03909116908b906000906106825761068261348c565b60200260200101516001600160a01b0316146106b05760405162461bcd60e51b81526004016103df90613288565b600080546106c8906001600160a01b03168b8d611d1a565b905034816000815181106106de576106de61348c565b602002602001015111156107045760405162461bcd60e51b81526004016103df906132b6565b60015481516001600160a01b039091169063d0e30db090839060009061072c5761072c61348c565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561075f57600080fd5b505af1158015610773573d6000803e3d6000fd5b5050505050600160009054906101000a90046001600160a01b03166001600160a01b031663a9059cbb6107ee60008054906101000a90046001600160a01b03168e6000815181106107c6576107c661348c565b60200260200101518f6001815181106107e1576107e161348c565b6020026020010151612014565b836000815181106108015761080161348c565b60200260200101516040518363ffffffff1660e01b815260040161083a9291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b15801561085457600080fd5b505af1158015610868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088c919061302c565b61089557600080fd5b6108a0818c896121d7565b88816000815181106108b4576108b461348c565b602002602001015111156109205760405162461bcd60e51b815260206004820152602d60248201527f6e6f7420616c6c6f7720626967676572207468616e206e61746976654375727260448201526c0cadcc6f2a6eec2e092dc9ac2f609b1b60648201526084016103df565b60008b60018d516109319190613401565b815181106109415761094161348c565b602002602001015190506000826000815181106109605761096061348c565b6020026020010151346109739190613401565b90506109e482600160009054906101000a90046001600160a01b0316856001875161099e9190613401565b815181106109ae576109ae61348c565b60200260200101518487600189516109c69190613401565b815181106109d6576109d661348c565b60200260200101518f6125d7565b60008054600154939a5091985091610a0a916001600160a01b0390811691869116612014565b9050610a188333838b612099565b600160009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0886040518263ffffffff1660e01b81526004016000604051808303818588803b158015610a6857600080fd5b505af1158015610a7c573d6000803e3d6000fd5b505060015460405163a9059cbb60e01b81526001600160a01b038681166004830152602482018d9052909116935063a9059cbb92506044019050602060405180830381600087803b158015610ad057600080fd5b505af1158015610ae4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b08919061302c565b610b1157600080fd5b6040516335313c2160e11b81526001600160a01b038b81166004830152821690636a62784290602401602060405180830381600087803b158015610b5457600080fd5b505af1158015610b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8c919061309e565b955083600081518110610ba157610ba161348c565b602002602001015187610bb491906133a8565b341115610bf457610bf43385600081518110610bd257610bd261348c565b602002602001015189610be591906133a8565b610bef9034613401565b6124dc565b505050505096509650969350505050565b60608142811015610c285760405162461bcd60e51b81526004016103df906132ed565b6000546040805160208089028281018201909352888252610c72936001600160a01b0316928c92918b918b91829190850190849080828437600092019190915250611d1a92505050565b91508682600081518110610c8857610c8861348c565b6020026020010151111561047a5760405162461bcd60e51b81526004016103df906132b6565b60008060008342811015610cd45760405162461bcd60e51b81526004016103df906132ed565b600154610cef908b906001600160a01b03168b348c8c6125d7565b6000805460015493975091955091610d15916001600160a01b03908116918e9116612014565b9050610d238b338388612099565b600160009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015610d7357600080fd5b505af1158015610d87573d6000803e3d6000fd5b505060015460405163a9059cbb60e01b81526001600160a01b038681166004830152602482018a9052909116935063a9059cbb92506044019050602060405180830381600087803b158015610ddb57600080fd5b505af1158015610def573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e13919061302c565b610e1c57600080fd5b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a62784290602401602060405180830381600087803b158015610e5f57600080fd5b505af1158015610e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e97919061309e565b925083341115610eaf57610eaf33610bef8634613401565b505096509650969350505050565b60608142811015610ee05760405162461bcd60e51b81526004016103df906132ed565b6001546001600160a01b03168686600081610efd57610efd61348c565b9050602002016020810190610f129190612db6565b6001600160a01b031614610f385760405162461bcd60e51b81526004016103df90613288565b6000546040805160208089028281018201909352888252610f82936001600160a01b0316928b92918b918b91829190850190849080828437600092019190915250611d1a92505050565b91503482600081518110610f9857610f9861348c565b60200260200101511115610fbe5760405162461bcd60e51b81526004016103df906132b6565b60015482516001600160a01b039091169063d0e30db0908490600090610fe657610fe661348c565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561101957600080fd5b505af115801561102d573d6000803e3d6000fd5b5050600154600080546001600160a01b03928316955063a9059cbb945061108c9350909116908a908a90816110645761106461348c565b90506020020160208101906110799190612db6565b8a8a60018181106104f2576104f261348c565b8460008151811061109f5761109f61348c565b60200260200101516040518363ffffffff1660e01b81526004016110d89291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b1580156110f257600080fd5b505af1158015611106573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112a919061302c565b61113357600080fd5b611172828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506121d7915050565b816000815181106111855761118561348c565b60200260200101513411156111be576111be33836000815181106111ab576111ab61348c565b602002602001015134610bef9190613401565b5095945050505050565b600081428110156111eb5760405162461bcd60e51b81526004016103df906132ed565b60008a8a60008181106112005761120061348c565b90506020020160208101906112159190612db6565b905060008b8b611226600182613401565b8181106112355761123561348c565b905060200201602081019061124a9190612db6565b9050600061125c8a8a8f8f8b8b610c05565b90506000816000815181106112735761127361348c565b60200260200101518c6112869190613401565b90506112e48385846001865161129c9190613401565b815181106112ac576112ac61348c565b60200260200101518486600188516112c49190613401565b815181106112d4576112d461348c565b60200260200101518e8e8e611a0d565b909150905080965050505050505098975050505050505050565b60008082428110156113225760405162461bcd60e51b81526004016103df906132ed565b6000805461133a906001600160a01b03168c8c612014565b6040516323b872dd60e01b81523360048201526001600160a01b03821660248201819052604482018c90529192506323b872dd90606401602060405180830381600087803b15801561138b57600080fd5b505af115801561139f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c3919061302c565b5060405163226bf2d160e21b81526001600160a01b03878116600483015260009182918416906389afcb44906024016040805180830381600087803b15801561140b57600080fd5b505af115801561141f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114439190613165565b9150915060006114538e8e612826565b5090508d6001600160a01b0316816001600160a01b031614611476578183611479565b82825b90975095508a8710156114ce5760405162461bcd60e51b815260206004820152601d60248201527f526f757465723a20494e53554646494349454e545f305f414d4f554e5400000060448201526064016103df565b8986101561151e5760405162461bcd60e51b815260206004820152601d60248201527f526f757465723a20494e53554646494349454e545f315f414d4f554e5400000060448201526064016103df565b505050505097509795505050505050565b606081428110156115525760405162461bcd60e51b81526004016103df906132ed565b6001546001600160a01b0316868660008161156f5761156f61348c565b90506020020160208101906115849190612db6565b6001600160a01b0316146115aa5760405162461bcd60e51b81526004016103df90613288565b60005460408051602080890282810182019093528882526115f4936001600160a01b0316923492918b918b91829190850190849080828437600092019190915250611ea792505050565b91508682600184516116069190613401565b815181106116165761161661348c565b6020026020010151101561163c5760405162461bcd60e51b81526004016103df90613316565b60015482516001600160a01b039091169063d0e30db09084906000906116645761166461348c565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561169757600080fd5b505af11580156116ab573d6000803e3d6000fd5b5050600154600080546001600160a01b03928316955063a9059cbb94506116e29350909116908a908a90816110645761106461348c565b846000815181106116f5576116f561348c565b60200260200101516040518363ffffffff1660e01b815260040161172e9291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b15801561174857600080fd5b505af115801561175c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611780919061302c565b61178957600080fd5b6111be828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506121d7915050565b6000546060906103b3906001600160a01b03168484611ea7565b606081428110156118055760405162461bcd60e51b81526004016103df906132ed565b600180546001600160a01b031690879087906118219082613401565b8181106118305761183061348c565b90506020020160208101906118459190612db6565b6001600160a01b03161461186b5760405162461bcd60e51b81526004016103df90613288565b60005460408051602080890282810182019093528882526118b5936001600160a01b0316928c92918b918b91829190850190849080828437600092019190915250611ea792505050565b91508682600184516118c79190613401565b815181106118d7576118d761348c565b602002602001015110156118fd5760405162461bcd60e51b81526004016103df90613316565b611913868660008181106104905761049061348c565b611952828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506121d7915050565b6001805483516001600160a01b0390911691632e1a7d4d91859161197591613401565b815181106119855761198561348c565b60200260200101516040518263ffffffff1660e01b81526004016119ab91815260200190565b600060405180830381600087803b1580156119c557600080fd5b505af11580156119d9573d6000803e3d6000fd5b5050505061056b8483600185516119f09190613401565b81518110611a0057611a0061348c565b60200260200101516124dc565b60008060008342811015611a335760405162461bcd60e51b81526004016103df906132ed565b611a418c8c8c8c8c8c6125d7565b6000805492965090945090611a60906001600160a01b03168e8e612014565b9050611a6e8d338388612099565b611a7a8c338387612099565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a62784290602401602060405180830381600087803b158015611abd57600080fd5b505af1158015611ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af5919061309e565b92505050985098509895505050505050565b60608142811015611b2a5760405162461bcd60e51b81526004016103df906132ed565b600180546001600160a01b03169087908790611b469082613401565b818110611b5557611b5561348c565b9050602002016020810190611b6a9190612db6565b6001600160a01b031614611b905760405162461bcd60e51b81526004016103df90613288565b6000546040805160208089028281018201909352888252611bda936001600160a01b0316928c92918b918b91829190850190849080828437600092019190915250611d1a92505050565b91508682600081518110611bf057611bf061348c565b602002602001015111156118fd5760405162461bcd60e51b81526004016103df906132b6565b6000808411611c715760405162461bcd60e51b815260206004820152602160248201527f48656c7065723a20494e53554646494349454e545f494e5055545f414d4f554e6044820152601560fa1b60648201526084016103df565b600083118015611c815750600082115b611ccd5760405162461bcd60e51b815260206004820152601e60248201527f48656c7065723a20494e53554646494349454e545f4c4951554944495459000060448201526064016103df565b6000611cdb856103e5612907565b90506000611ce98285612907565b90506000611d0383611cfd886103e8612907565b9061296e565b9050611d0f81836133c0565b979650505050505050565b6060600282511015611d655760405162461bcd60e51b8152602060048201526014602482015273090cad8e0cae47440929cac82989288bea082a8960631b60448201526064016103df565b815167ffffffffffffffff811115611d7f57611d7f6134a2565b604051908082528060200260200182016040528015611da8578160200160208202803683370190505b509050828160018351611dbb9190613401565b81518110611dcb57611dcb61348c565b602002602001018181525050600060018351611de79190613401565b90505b8015611e9f57600080611e3a8786611e03600187613401565b81518110611e1357611e1361348c565b6020026020010151878681518110611e2d57611e2d61348c565b60200260200101516129c3565b91509150611e62848481518110611e5357611e5361348c565b60200260200101518383612a9c565b84611e6e600186613401565b81518110611e7e57611e7e61348c565b60200260200101818152505050508080611e9790613444565b915050611dea565b509392505050565b6060600282511015611ef25760405162461bcd60e51b8152602060048201526014602482015273090cad8e0cae47440929cac82989288bea082a8960631b60448201526064016103df565b815167ffffffffffffffff811115611f0c57611f0c6134a2565b604051908082528060200260200182016040528015611f35578160200160208202803683370190505b5090508281600081518110611f4c57611f4c61348c565b60200260200101818152505060005b60018351611f699190613401565b811015611e9f57600080611faf87868581518110611f8957611f8961348c565b602002602001015187866001611f9f91906133a8565b81518110611e2d57611e2d61348c565b91509150611fd7848481518110611fc857611fc861348c565b60200260200101518383611c16565b84611fe38560016133a8565b81518110611ff357611ff361348c565b6020026020010181815250505050808061200c9061345b565b915050611f5b565b60405163e6a4390560e01b81526001600160a01b03838116600483015282811660248301526000919085169063e6a439059060440160206040518083038186803b15801561206157600080fd5b505afa158015612075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103919190612dda565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916120fd9190613228565b6000604051808303816000865af19150503d806000811461213a576040519150601f19603f3d011682016040523d82523d6000602084013e61213f565b606091505b5091509150818015612169575080511580612169575080806020019051810190612169919061302c565b6121cf5760405162461bcd60e51b815260206004820152603160248201527f5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472604482015270185b9cd9995c919c9bdb4819985a5b1959607a1b60648201526084016103df565b505050505050565b60005b600183516121e89190613401565b8110156123a5576000808483815181106122045761220461348c565b60200260200101518584600161221a91906133a8565b8151811061222a5761222a61348c565b60200260200101519150915060006122428383612826565b5090506000876122538660016133a8565b815181106122635761226361348c565b60200260200101519050600080836001600160a01b0316866001600160a01b03161461229157826000612295565b6000835b91509150600060028a516122a99190613401565b88106122b557886122e2565b6000546122e2906001600160a01b0316878c6122d28c60026133a8565b815181106107e1576107e161348c565b6000549091506122fc906001600160a01b03168888612014565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015612339576020820181803683370190505b506040518563ffffffff1660e01b81526004016123599493929190613358565b600060405180830381600087803b15801561237357600080fd5b505af1158015612387573d6000803e3d6000fd5b5050505050505050505050808061239d9061345b565b9150506121da565b50505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916124079190613228565b6000604051808303816000865af19150503d8060008114612444576040519150601f19603f3d011682016040523d82523d6000602084013e612449565b606091505b5091509150818015612473575080511580612473575080806020019051810190612473919061302c565b6124d55760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b60648201526084016103df565b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040516125069190613228565b60006040518083038185875af1925050503d8060008114612543576040519150601f19603f3d011682016040523d82523d6000602084013e612548565b606091505b50509050806125d25760405162461bcd60e51b815260206004820152604a60248201527f5472616e7366657248656c7065723a3a736166655472616e736665724e61746960448201527f766543757272656e63793a204e617469766543757272656e6379207472616e7360648201526919995c8819985a5b195960b21b608482015260a4016103df565b505050565b6000805460405163e6a4390560e01b81526001600160a01b03898116600483015288811660248301528392839291169063e6a439059060440160206040518083038186803b15801561262857600080fd5b505afa15801561263c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126609190612dda565b6001600160a01b031614156126f8576000546040516364e329cb60e11b81526001600160a01b038a8116600483015289811660248301529091169063c9c6539690604401602060405180830381600087803b1580156126be57600080fd5b505af11580156126d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f69190612dda565b505b600080548190612712906001600160a01b03168b8b6129c3565b91509150816000148015612724575080155b1561273457879350869250612819565b6000612741898484612b9b565b90508781116127a5578581101561279a5760405162461bcd60e51b815260206004820152601d60248201527f526f757465723a20494e53554646494349454e545f315f414d4f554e5400000060448201526064016103df565b889450925082612817565b60006127b2898486612b9b565b9050898111156127c157600080fd5b878110156128115760405162461bcd60e51b815260206004820152601d60248201527f526f757465723a20494e53554646494349454e545f305f414d4f554e5400000060448201526064016103df565b94508793505b505b5050965096945050505050565b600080826001600160a01b0316846001600160a01b0316141561288b5760405162461bcd60e51b815260206004820152601b60248201527f48656c7065723a204944454e544943414c5f414444524553534553000000000060448201526064016103df565b826001600160a01b0316846001600160a01b0316106128ab5782846128ae565b83835b90925090506001600160a01b0382166129005760405162461bcd60e51b815260206004820152601460248201527348656c7065723a205a45524f5f4144445245535360601b60448201526064016103df565b9250929050565b600081158061292b5750828261291d81836133e2565b925061292990836133c0565b145b6103b65760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b60448201526064016103df565b60008261297b83826133a8565b91508110156103b65760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b60448201526064016103df565b60008060006129d28585612826565b5090506000806129e3888888612014565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612a1b57600080fd5b505afa158015612a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a53919061304e565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b031614612a8a578082612a8d565b81815b90999098509650505050505050565b6000808411612af85760405162461bcd60e51b815260206004820152602260248201527f48656c7065723a20494e53554646494349454e545f4f55545055545f414d4f55604482015261139560f21b60648201526084016103df565b600083118015612b085750600082115b612b545760405162461bcd60e51b815260206004820152601e60248201527f48656c7065723a20494e53554646494349454e545f4c4951554944495459000060448201526064016103df565b6000612b6c6103e8612b668688612907565b90612907565b90506000612b806103e5612b668689612c4c565b9050612b916001611cfd83856133c0565b9695505050505050565b6000808411612be25760405162461bcd60e51b8152602060048201526013602482015272125394d551919250d251539517d05353d55395606a1b60448201526064016103df565b600083118015612bf25750600082115b612c375760405162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b60448201526064016103df565b82612c428584612907565b61039191906133c0565b600082612c598382613401565b91508111156103b65760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b60448201526064016103df565b8035612cad816134b8565b919050565b60008083601f840112612cc457600080fd5b50813567ffffffffffffffff811115612cdc57600080fd5b6020830191508360208260051b850101111561290057600080fd5b600082601f830112612d0857600080fd5b8135602067ffffffffffffffff80831115612d2557612d256134a2565b8260051b604051601f19603f83011681018181108482111715612d4a57612d4a6134a2565b60405284815283810192508684018288018501891015612d6957600080fd5b600092505b85831015612d9357612d7f81612ca2565b845292840192600192909201918401612d6e565b50979650505050505050565b80516001600160701b0381168114612cad57600080fd5b600060208284031215612dc857600080fd5b8135612dd3816134b8565b9392505050565b600060208284031215612dec57600080fd5b8151612dd3816134b8565b600080600080600080600060e0888a031215612e1257600080fd5b8735612e1d816134b8565b96506020880135612e2d816134b8565b955060408801359450606088013593506080880135925060a0880135612e52816134b8565b8092505060c0880135905092959891949750929550565b600080600080600080600080610100898b031215612e8657600080fd5b8835612e91816134b8565b97506020890135612ea1816134b8565b965060408901359550606089013594506080890135935060a0890135925060c0890135612ecd816134b8565b8092505060e089013590509295985092959890939650565b60008060008060008060c08789031215612efe57600080fd5b8635612f09816134b8565b95506020870135945060408701359350606087013592506080870135612f2e816134b8565b8092505060a087013590509295509295509295565b60008060008060008060008060e0898b031215612f5f57600080fd5b883567ffffffffffffffff811115612f7657600080fd5b612f828b828c01612cb2565b9099509750506020890135955060408901359450606089013593506080890135925060a0890135612fb2816134b8565b8092505060c089013590509295985092959890939650565b60008060008060008060c08789031215612fe357600080fd5b863567ffffffffffffffff811115612ffa57600080fd5b61300689828a01612cf7565b9650506020870135945060408701359350606087013592506080870135612f2e816134b8565b60006020828403121561303e57600080fd5b81518015158114612dd357600080fd5b60008060006060848603121561306357600080fd5b61306c84612d9f565b925061307a60208501612d9f565b9150604084015163ffffffff8116811461309357600080fd5b809150509250925092565b6000602082840312156130b057600080fd5b5051919050565b6000806000806000608086880312156130cf57600080fd5b85359450602086013567ffffffffffffffff8111156130ed57600080fd5b6130f988828901612cb2565b909550935050604086013561310d816134b8565b949793965091946060013592915050565b6000806040838503121561313157600080fd5b82359150602083013567ffffffffffffffff81111561314f57600080fd5b61315b85828601612cf7565b9150509250929050565b6000806040838503121561317857600080fd5b505080516020909101519092909150565b60008060008060008060a087890312156131a257600080fd5b8635955060208701359450604087013567ffffffffffffffff8111156131c757600080fd5b6131d389828a01612cb2565b90955093505060608701356131e7816134b8565b80925050608087013590509295509295509295565b60008060006060848603121561321157600080fd5b505081359360208301359350604090920135919050565b6000825161323a818460208701613418565b9190910192915050565b6020808252825182820181905260009190848201906040850190845b8181101561327c57835183529284019291840191600101613260565b50909695505050505050565b6020808252601490820152730a4deeae8cae47440929cac82989288bea082a8960631b604082015260600190565b6020808252601e908201527f526f757465723a204558434553534956455f494e5055545f414d4f554e540000604082015260600190565b6020808252600f908201526e149bdd5d195c8e8811561412549151608a1b604082015260600190565b60208082526022908201527f526f757465723a20494e53554646494349454e545f4f55545055545f414d4f55604082015261139560f21b606082015260800190565b84815283602082015260018060a01b038316604082015260806060820152600082518060808401526133918160a0850160208701613418565b601f01601f19169190910160a00195945050505050565b600082198211156133bb576133bb613476565b500190565b6000826133dd57634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156133fc576133fc613476565b500290565b60008282101561341357613413613476565b500390565b60005b8381101561343357818101518382015260200161341b565b838111156123a55750506000910152565b60008161345357613453613476565b506000190190565b600060001982141561346f5761346f613476565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146134cd57600080fd5b5056fea264697066735822122000012f7971a5340f6d82c9285eb47412bf94bb74467dd7335c4080e866e0edac64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000028eaa01dc747c4e9d37c5ca473e7d167e90f8d3800000000000000000000000098878b06940ae243284ca214f92bb71a2b032b8a
-----Decoded View---------------
Arg [0] : _factory (address): 0x28Eaa01DC747C4e9D37c5ca473E7d167E90F8d38
Arg [1] : _WNativeCurrency (address): 0x98878B06940aE243284CA214f92Bb71a2b032B8A
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000028eaa01dc747c4e9d37c5ca473e7d167e90f8d38
Arg [1] : 00000000000000000000000098878b06940ae243284ca214f92bb71a2b032b8a
Deployed Bytecode Sourcemap
17194:16294:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17679:15;;-1:-1:-1;;;;;17679:15:0;17665:10;:29;17657:38;;;;;;17194:16294;;;;;32517:240;;;;;;;;;;-1:-1:-1;32517:240:0;;;;;:::i;:::-;;:::i;:::-;;;19709:25:1;;;19697:2;19682:18;32517:240:0;;;;;;;;33253:232;;;;;;;;;;-1:-1:-1;33253:232:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;27455:669::-;;;;;;;;;;-1:-1:-1;27455:669:0;;;;;:::i;:::-;;:::i;25748:829::-;;;;;;;;;;-1:-1:-1;25748:829:0;;;;;:::i;:::-;;:::i;:::-;;;;19919:25:1;;;19975:2;19960:18;;19953:34;;;;19892:18;25748:829:0;19745:248:1;17297:39:0;;;;;;;;;;-1:-1:-1;17297:39:0;;;;-1:-1:-1;;;;;17297:39:0;;;;;;-1:-1:-1;;;;;10049:32:1;;;10031:51;;10019:2;10004:18;17297:39:0;9885:203:1;20958:2284:0;;;;;;:::i;:::-;;:::i;:::-;;;;20829:25:1;;;20885:2;20870:18;;20863:34;;;;20913:18;;;20906:34;20817:2;20802:18;20958:2284:0;20627:319:1;28132:610:0;;;;;;;;;;-1:-1:-1;28132:610:0;;;;;:::i;:::-;;:::i;19642:1308::-;;;;;;:::i;:::-;;:::i;31516:993::-;;;;;;:::i;:::-;;:::i;18694:940::-;;;;;;;;;;-1:-1:-1;18694:940:0;;;;;:::i;:::-;;:::i;24872:868::-;;;;;;;;;;-1:-1:-1;24872:868:0;;;;;:::i;:::-;;:::i;17259:31::-;;;;;;;;;;-1:-1:-1;17259:31:0;;;;-1:-1:-1;;;;;17259:31:0;;;28750:861;;;;;;:::i;:::-;;:::i;33013:232::-;;;;;;;;;;-1:-1:-1;33013:232:0;;;;;:::i;:::-;;:::i;30538:970::-;;;;;;;;;;-1:-1:-1;30538:970:0;;;;;:::i;:::-;;:::i;17789:897::-;;;;;;;;;;-1:-1:-1;17789:897:0;;;;;:::i;:::-;;:::i;29619:911::-;;;;;;;;;;-1:-1:-1;29619:911:0;;;;;:::i;:::-;;:::i;32517:240::-;32660:17;32697:52;32717:8;32727:9;32738:10;32697:19;:52::i;:::-;32690:59;32517:240;-1:-1:-1;;;;32517:240:0:o;33253:232::-;33452:7;;33383:24;;33432:45;;-1:-1:-1;;;;;33452:7:0;33461:9;33472:4;33432:19;:45::i;:::-;33425:52;;33253:232;;;;;:::o;27455:669::-;27678:24;27659:8;17556:15;17544:8;:27;;17536:55;;;;-1:-1:-1;;;17536:55:0;;;;;;;:::i;:::-;;;;;;;;;27746:7:::1;::::0;27725:45:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;27746:7:0::1;::::0;27755:8;;27725:45;27765:4;;;;;;27725:45;;::::1;::::0;27765:4;;27725:45;27765:4;27725:45;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;27725:20:0::1;::::0;-1:-1:-1;;;27725:45:0:i:1;:::-;27715:55;;27834:12;27803:7;27828:1;27811:7;:14;:18;;;;:::i;:::-;27803:27;;;;;;;;:::i;:::-;;;;;;;:43;;27781:127;;;;-1:-1:-1::0;;;27781:127:0::1;;;;;;;:::i;:::-;27919:162;27957:4;;27962:1;27957:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;28019;::::0;;27979:10:::1;::::0;28004:41:::1;::::0;-1:-1:-1;;;;;28019:7:0::1;::::0;28028:4;;;;:7;::::1;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;28037:4;;28042:1;28037:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;28004:14;:41::i;:::-;28060:7;28068:1;28060:10;;;;;;;;:::i;:::-;;;;;;;27919:23;:162::i;:::-;28092:24;28098:7;28107:4;;28092:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;28113:2:0;;-1:-1:-1;28092:5:0::1;::::0;-1:-1:-1;;28092:24:0:i:1;:::-;27455:669:::0;;;;;;;;;:::o;25748:829::-;26047:19;26068:28;26019:8;17556:15;17544:8;:27;;17536:55;;;;-1:-1:-1;;;17536:55:0;;;;;;;:::i;:::-;26202:15:::1;::::0;26152:218:::1;::::0;26182:5;;-1:-1:-1;;;;;26202:15:0::1;26232:9:::0;26256:14;26285:23;26331:4:::1;26351:8:::0;26152:15:::1;:218::i;:::-;26114:256:::0;;-1:-1:-1;26114:256:0;-1:-1:-1;26381:43:0::1;26401:5:::0;26408:2;26114:256;26381:19:::1;:43::i;:::-;26452:15;::::0;26435:64:::1;::::0;-1:-1:-1;;;26435:64:0;;::::1;::::0;::::1;19709:25:1::0;;;-1:-1:-1;;;;;26452:15:0;;::::1;::::0;26435:42:::1;::::0;19682:18:1;;26435:64:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26510:59;26544:2;26548:20;26510:33;:59::i;:::-;25748:829:::0;;;;;;;;;;:::o;20958:2284::-;21315:19;21349:28;21392:17;21273:8;17556:15;17544:8;:27;;17536:55;;;;-1:-1:-1;;;17536:55:0;;;;;;;:::i;:::-;21473:15:::1;::::0;21462:7;;-1:-1:-1;;;;;21473:15:0;;::::1;::::0;21462:4;;21473:15:::1;::::0;21462:7:::1;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;21462:26:0::1;;21454:59;;;;-1:-1:-1::0;;;21454:59:0::1;;;;;;;:::i;:::-;21524:24;21585:7:::0;;21551:99:::1;::::0;-1:-1:-1;;;;;21585:7:0::1;21607:13:::0;21635:4;21551:19:::1;:99::i;:::-;21524:126;;21685:9;21671:7;21679:1;21671:10;;;;;;;;:::i;:::-;;;;;;;:23;;21663:66;;;;-1:-1:-1::0;;;21663:66:0::1;;;;;;;:::i;:::-;21757:15;::::0;21789:10;;-1:-1:-1;;;;;21757:15:0;;::::1;::::0;21740:41:::1;::::0;21789:7;;21757:15:::1;::::0;21789:10:::1;;;;:::i;:::-;;;;;;;21740:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;21844:15;;;;;;;;;-1:-1:-1::0;;;;;21844:15:0::1;-1:-1:-1::0;;;;;21837:32:0::1;;21888:41;21903:7;::::0;::::1;;;;;;-1:-1:-1::0;;;;;21903:7:0::1;21912:4;21917:1;21912:7;;;;;;;;:::i;:::-;;;;;;;21921:4;21926:1;21921:7;;;;;;;;:::i;:::-;;;;;;;21888:14;:41::i;:::-;21948:7;21956:1;21948:10;;;;;;;;:::i;:::-;;;;;;;21837:136;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;10974:32:1;;;;10956:51;;11038:2;11023:18;;11016:34;10944:2;10929:18;;10782:274;21837:136:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21815:169;;;::::0;::::1;;21997:24;22003:7;22012:4;22018:2;21997:5;:24::i;:::-;22070:23;22056:7;22064:1;22056:10;;;;;;;;:::i;:::-;;;;;;;:37;;22034:132;;;::::0;-1:-1:-1;;;22034:132:0;;16367:2:1;22034:132:0::1;::::0;::::1;16349:21:1::0;16406:2;16386:18;;;16379:30;16445:34;16425:18;;;16418:62;-1:-1:-1;;;16496:18:1;;;16489:43;16549:19;;22034:132:0::1;16165:409:1::0;22034:132:0::1;22204:13;22220:4;22239:1;22225:4;:11;:15;;;;:::i;:::-;22220:21;;;;;;;;:::i;:::-;;;;;;;22204:37;;22252:29;22296:7;22304:1;22296:10;;;;;;;;:::i;:::-;;;;;;;22284:9;:22;;;;:::i;:::-;22252:54;;22355:233;22383:5;22403:15;;;;;;;;;-1:-1:-1::0;;;;;22403:15:0::1;22433:7;22458:1;22441:7;:14;:18;;;;:::i;:::-;22433:27;;;;;;;;:::i;:::-;;;;;;;22475:21;22511:7;22536:1;22519:7;:14;:18;;;;:::i;:::-;22511:27;;;;;;;;:::i;:::-;;;;;;;22553:24;22355:13;:233::i;:::-;22601:12;22631:7:::0;;;22647:15;22317:271;;-1:-1:-1;22317:271:0;;-1:-1:-1;22601:12:0;22616:47:::1;::::0;-1:-1:-1;;;;;22631:7:0;;::::1;::::0;22640:5;;22647:15:::1;22616:14;:47::i;:::-;22601:62;;22676:61;22700:5;22707:10;22719:4;22725:11;22676:23;:61::i;:::-;22767:15;;;;;;;;;-1:-1:-1::0;;;;;22767:15:0::1;-1:-1:-1::0;;;;;22750:41:0::1;;22813:20;22750:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;22874:15:0::1;::::0;22867:60:::1;::::0;-1:-1:-1;;;22867:60:0;;-1:-1:-1;;;;;10974:32:1;;;22867:60:0::1;::::0;::::1;10956:51:1::0;11023:18;;;11016:34;;;22874:15:0;;::::1;::::0;-1:-1:-1;22867:32:0::1;::::0;-1:-1:-1;10929:18:1;;;-1:-1:-1;22867:60:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22859:69;;;::::0;::::1;;22953:20;::::0;-1:-1:-1;;;22953:20:0;;-1:-1:-1;;;;;10049:32:1;;;22953:20:0::1;::::0;::::1;10031:51:1::0;22953:16:0;::::1;::::0;::::1;::::0;10004:18:1;;22953:20:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22941:32;;23026:7;23034:1;23026:10;;;;;;;;:::i;:::-;;;;;;;23003:20;:33;;;;:::i;:::-;22990:9;:47;22986:209;;;23052:143;23104:10;23169:7;23177:1;23169:10;;;;;;;;:::i;:::-;;;;;;;23146:20;:33;;;;:::i;:::-;23133:47;::::0;:9:::1;:47;:::i;:::-;23052:33;:143::i;:::-;21426:1816;;;;20958:2284:::0;;;;;;;;;;;:::o;28132:610::-;28355:24;28336:8;17556:15;17544:8;:27;;17536:55;;;;-1:-1:-1;;;17536:55:0;;;;;;;:::i;:::-;28422:7:::1;::::0;28402:45:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;28422:7:0::1;::::0;28431:9;;28402:45;28442:4;;;;;;28402:45;;::::1;::::0;28442:4;;28402:45;28442:4;28402:45;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;28402:19:0::1;::::0;-1:-1:-1;;;28402:45:0:i:1;:::-;28392:55;;28480:11;28466:7;28474:1;28466:10;;;;;;;;:::i;:::-;;;;;;;:25;;28458:68;;;;-1:-1:-1::0;;;28458:68:0::1;;;;;;;:::i;19642:1308::-:0;19980:19;20014:28;20057:17;19938:8;17556:15;17544:8;:27;;17536:55;;;;-1:-1:-1;;;17536:55:0;;;;;;;:::i;:::-;20188:15:::1;::::0;20140:198:::1;::::0;20168:5;;-1:-1:-1;;;;;20188:15:0::1;20218:18:::0;20251:9:::1;20275:14:::0;20304:23;20140:13:::1;:198::i;:::-;20349:12;20379:7:::0;;;20395:15;20102:236;;-1:-1:-1;20102:236:0;;-1:-1:-1;20349:12:0;20364:47:::1;::::0;-1:-1:-1;;;;;20379:7:0;;::::1;::::0;20388:5;;20395:15:::1;20364:14;:47::i;:::-;20349:62;;20422:61;20446:5;20453:10;20465:4;20471:11;20422:23;:61::i;:::-;20511:15;;;;;;;;;-1:-1:-1::0;;;;;20511:15:0::1;-1:-1:-1::0;;;;;20494:41:0::1;;20557:20;20494:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;20616:15:0::1;::::0;20609:60:::1;::::0;-1:-1:-1;;;20609:60:0;;-1:-1:-1;;;;;10974:32:1;;;20609:60:0::1;::::0;::::1;10956:51:1::0;11023:18;;;11016:34;;;20616:15:0;;::::1;::::0;-1:-1:-1;20609:32:0::1;::::0;-1:-1:-1;10929:18:1;;;-1:-1:-1;20609:60:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20601:69;;;::::0;::::1;;20693:20;::::0;-1:-1:-1;;;20693:20:0;;-1:-1:-1;;;;;10049:32:1;;;20693:20:0::1;::::0;::::1;10031:51:1::0;20693:16:0;::::1;::::0;::::1;::::0;10004:18:1;;20693:20:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20681:32;;20740:20;20728:9;:32;20724:179;;;20775:128;20827:10;20856:32;20868:20:::0;20856:9:::1;:32;:::i;20775:128::-;20091:859;19642:1308:::0;;;;;;;;;;;:::o;31516:993::-;31772:24;31744:8;17556:15;17544:8;:27;;17536:55;;;;-1:-1:-1;;;17536:55:0;;;;;;;:::i;:::-;31833:15:::1;::::0;-1:-1:-1;;;;;31833:15:0::1;31822:4:::0;;31833:15:::1;31822:7:::0;::::1;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;31822:26:0::1;;31814:59;;;;-1:-1:-1::0;;;31814:59:0::1;;;;;;;:::i;:::-;31914:7;::::0;31894:45:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;31914:7:0::1;::::0;31923:9;;31894:45;31934:4;;;;;;31894:45;;::::1;::::0;31934:4;;31894:45;31934:4;31894:45;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;31894:19:0::1;::::0;-1:-1:-1;;;31894:45:0:i:1;:::-;31884:55;;31972:9;31958:7;31966:1;31958:10;;;;;;;;:::i;:::-;;;;;;;:23;;31950:66;;;;-1:-1:-1::0;;;31950:66:0::1;;;;;;;:::i;:::-;32044:15;::::0;32076:10;;-1:-1:-1;;;;;32044:15:0;;::::1;::::0;32027:41:::1;::::0;32076:7;;32044:15:::1;::::0;32076:10:::1;;;;:::i;:::-;;;;;;;32027:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;32129:15:0::1;::::0;::::1;32188:7:::0;;-1:-1:-1;;;;;32129:15:0;;::::1;::::0;-1:-1:-1;32122:32:0::1;::::0;-1:-1:-1;32173:41:0::1;::::0;-1:-1:-1;32188:7:0;;::::1;::::0;32197:4;;;;:7;::::1;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;32206:4;;32211:1;32206:7;;;;;;;:::i;32173:41::-;32233:7;32241:1;32233:10;;;;;;;;:::i;:::-;;;;;;;32122:136;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;10974:32:1;;;;10956:51;;11038:2;11023:18;;11016:34;10944:2;10929:18;;10782:274;32122:136:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32100:169;;;::::0;::::1;;32280:24;32286:7;32295:4;;32280:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;32301:2:0;;-1:-1:-1;32280:5:0::1;::::0;-1:-1:-1;;32280:24:0:i:1;:::-;32331:7;32339:1;32331:10;;;;;;;;:::i;:::-;;;;;;;32319:9;:22;32315:159;;;32356:118;32408:10;32449:7;32457:1;32449:10;;;;;;;;:::i;:::-;;;;;;;32437:9;:22;;;;:::i;32356:118::-;31516:993:::0;;;;;;;;:::o;18694:940::-;18990:17;18971:8;17556:15;17544:8;:27;;17536:55;;;;-1:-1:-1;;;17536:55:0;;;;;;;:::i;:::-;19020:14:::1;19037:4;;19042:1;19037:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;19020:24:::0;-1:-1:-1;19055:14:0::1;19072:4:::0;;19077:15:::1;19091:1;19072:4:::0;19077:15:::1;:::i;:::-;19072:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;19055:38;;19106:24;19133:152;19172:13;19200:15;19230:4;;19249:2;19266:8;19133:24;:152::i;:::-;19106:179;;19298:23;19335:7;19343:1;19335:10;;;;;;;;:::i;:::-;;;;;;;19324:8;:21;;;;:::i;:::-;19298:47;;19374:252;19401:6;19422;19443:7;19468:1;19451:7;:14;:18;;;;:::i;:::-;19443:27;;;;;;;;:::i;:::-;;;;;;;19485:15;19515:7;19540:1;19523:7;:14;:18;;;;:::i;:::-;19515:27;;;;;;;;:::i;:::-;;;;;;;19557:18;19590:2;19607:8;19374:12;:252::i;:::-;19356:270;;;;;;;;;19009:625;;;;18694:940:::0;;;;;;;;;;;:::o;24872:868::-;25166:15;25183;25138:8;17556:15;17544:8;:27;;17536:55;;;;-1:-1:-1;;;17536:55:0;;;;;;;:::i;:::-;25216:12:::1;25246:7:::0;;25231:39:::1;::::0;-1:-1:-1;;;;;25246:7:0::1;25255:6:::0;25263;25231:14:::1;:39::i;:::-;25281:54;::::0;-1:-1:-1;;;25281:54:0;;25307:10:::1;25281:54;::::0;::::1;10642:34:1::0;-1:-1:-1;;;;;25281:25:0;::::1;10692:18:1::0;;;10685:43;;;10744:18;;;10737:34;;;25216:54:0;;-1:-1:-1;25281:25:0::1;::::0;10577:18:1;;25281:54:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;25383:20:0::1;::::0;-1:-1:-1;;;25383:20:0;;-1:-1:-1;;;;;10049:32:1;;;25383:20:0::1;::::0;::::1;10031:51:1::0;25347:15:0::1;::::0;;;25383:16;::::1;::::0;::::1;::::0;10004:18:1;;25383:20:0::1;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25346:57;;;;25415:14;25435:33;25453:6;25461;25435:17;:33::i;:::-;25414:54;;;25510:6;-1:-1:-1::0;;;;;25500:16:0::1;:6;-1:-1:-1::0;;;;;25500:16:0::1;;:84;;25567:7;25576;25500:84;;;25533:7;25542;25500:84;25479:105:::0;;-1:-1:-1;25479:105:0;-1:-1:-1;25603:21:0;;::::1;;25595:63;;;::::0;-1:-1:-1;;;25595:63:0;;16781:2:1;25595:63:0::1;::::0;::::1;16763:21:1::0;16820:2;16800:18;;;16793:30;16859:31;16839:18;;;16832:59;16908:18;;25595:63:0::1;16579:353:1::0;25595:63:0::1;25688:10;25677:7;:21;;25669:63;;;::::0;-1:-1:-1;;;25669:63:0;;14074:2:1;25669:63:0::1;::::0;::::1;14056:21:1::0;14113:2;14093:18;;;14086:30;14152:31;14132:18;;;14125:59;14201:18;;25669:63:0::1;13872:353:1::0;25669:63:0::1;25205:535;;;;24872:868:::0;;;;;;;;;;;:::o;28750:861::-;29009:24;28981:8;17556:15;17544:8;:27;;17536:55;;;;-1:-1:-1;;;17536:55:0;;;;;;;:::i;:::-;29070:15:::1;::::0;-1:-1:-1;;;;;29070:15:0::1;29059:4:::0;;29070:15:::1;29059:7:::0;::::1;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29059:26:0::1;;29051:59;;;;-1:-1:-1::0;;;29051:59:0::1;;;;;;;:::i;:::-;29152:7;::::0;29131:46:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;29152:7:0::1;::::0;29161:9:::1;::::0;29131:46;29172:4;;;;;;29131:46;;::::1;::::0;29172:4;;29131:46;29172:4;29131:46;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;29131:20:0::1;::::0;-1:-1:-1;;;29131:46:0:i:1;:::-;29121:56;;29241:12;29210:7;29235:1;29218:7;:14;:18;;;;:::i;:::-;29210:27;;;;;;;;:::i;:::-;;;;;;;:43;;29188:127;;;;-1:-1:-1::0;;;29188:127:0::1;;;;;;;:::i;:::-;29343:15;::::0;29375:10;;-1:-1:-1;;;;;29343:15:0;;::::1;::::0;29326:41:::1;::::0;29375:7;;29343:15:::1;::::0;29375:10:::1;;;;:::i;:::-;;;;;;;29326:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;29428:15:0::1;::::0;::::1;29487:7:::0;;-1:-1:-1;;;;;29428:15:0;;::::1;::::0;-1:-1:-1;29421:32:0::1;::::0;-1:-1:-1;29472:41:0::1;::::0;-1:-1:-1;29487:7:0;;::::1;::::0;29496:4;;;;:7;::::1;;;;:::i;29472:41::-;29532:7;29540:1;29532:10;;;;;;;;:::i;:::-;;;;;;;29421:136;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;10974:32:1;;;;10956:51;;11038:2;11023:18;;11016:34;10944:2;10929:18;;10782:274;29421:136:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29399:169;;;::::0;::::1;;29579:24;29585:7;29594:4;;29579:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29600:2:0;;-1:-1:-1;29579:5:0::1;::::0;-1:-1:-1;;29579:24:0:i:1;33013:232::-:0;33213:7;;33143:24;;33192:45;;-1:-1:-1;;;;;33213:7:0;33222:8;33232:4;33192:20;:45::i;30538:970::-;30771:24;30752:8;17556:15;17544:8;:27;;17536:55;;;;-1:-1:-1;;;17536:55:0;;;;;;;:::i;:::-;30855:15:::1;::::0;;-1:-1:-1;;;;;30855:15:0::1;::::0;30830:4;;;;30835:15:::1;::::0;30830:4;30835:15:::1;:::i;:::-;30830:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30830:40:0::1;;30808:110;;;;-1:-1:-1::0;;;30808:110:0::1;;;;;;;:::i;:::-;30960:7;::::0;30939:45:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;30960:7:0::1;::::0;30969:8;;30939:45;30979:4;;;;;;30939:45;;::::1;::::0;30979:4;;30939:45;30979:4;30939:45;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;30939:20:0::1;::::0;-1:-1:-1;;;30939:45:0:i:1;:::-;30929:55;;31048:12;31017:7;31042:1;31025:7;:14;:18;;;;:::i;:::-;31017:27;;;;;;;;:::i;:::-;;;;;;;:43;;30995:127;;;;-1:-1:-1::0;;;30995:127:0::1;;;;;;;:::i;:::-;31133:162;31171:4;;31176:1;31171:7;;;;;;;:::i;31133:162::-;31306:35;31312:7;31321:4;;31306:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;31335:4:0::1;::::0;-1:-1:-1;31306:5:0::1;::::0;-1:-1:-1;;31306:35:0:i:1;:::-;31369:15;::::0;;31403:14;;-1:-1:-1;;;;;31369:15:0;;::::1;::::0;31352:42:::1;::::0;31395:7;;31403:18:::1;::::0;::::1;:::i;:::-;31395:27;;;;;;;;:::i;:::-;;;;;;;31352:71;;;;;;;;;;;;;19709:25:1::0;;19697:2;19682:18;;19563:177;31352:71:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31434:66;31468:2;31472:7;31497:1;31480:7;:14;:18;;;;:::i;:::-;31472:27;;;;;;;;:::i;:::-;;;;;;;31434:33;:66::i;17789:897::-:0;18132:15;18162;18192:17;18090:8;17556:15;17544:8;:27;;17536:55;;;;-1:-1:-1;;;17536:55:0;;;;;;;:::i;:::-;18258:174:::1;18286:6;18307;18328:14;18357;18386:10;18411;18258:13;:174::i;:::-;18443:12;18473:7:::0;;18237:195;;-1:-1:-1;18237:195:0;;-1:-1:-1;18443:12:0;18458:39:::1;::::0;-1:-1:-1;;;;;18473:7:0::1;18482:6:::0;18490;18458:14:::1;:39::i;:::-;18443:54;;18508:58;18532:6;18540:10;18552:4;18558:7;18508:23;:58::i;:::-;18577;18601:6;18609:10;18621:4;18627:7;18577:23;:58::i;:::-;18658:20;::::0;-1:-1:-1;;;18658:20:0;;-1:-1:-1;;;;;10049:32:1;;;18658:20:0::1;::::0;::::1;10031:51:1::0;18658:16:0;::::1;::::0;::::1;::::0;10004:18:1;;18658:20:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18646:32;;18226:460;17789:897:::0;;;;;;;;;;;;;:::o;29619:911::-;29852:24;29833:8;17556:15;17544:8;:27;;17536:55;;;;-1:-1:-1;;;17536:55:0;;;;;;;:::i;:::-;29936:15:::1;::::0;;-1:-1:-1;;;;;29936:15:0::1;::::0;29911:4;;;;29916:15:::1;::::0;29911:4;29916:15:::1;:::i;:::-;29911:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29911:40:0::1;;29889:110;;;;-1:-1:-1::0;;;29889:110:0::1;;;;;;;:::i;:::-;30040:7;::::0;30020:45:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;30040:7:0::1;::::0;30049:9;;30020:45;30060:4;;;;;;30020:45;;::::1;::::0;30060:4;;30020:45;30060:4;30020:45;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;30020:19:0::1;::::0;-1:-1:-1;;;30020:45:0:i:1;:::-;30010:55;;30098:11;30084:7;30092:1;30084:10;;;;;;;;:::i;:::-;;;;;;;:25;;30076:68;;;;-1:-1:-1::0;;;30076:68:0::1;;;;;;;:::i;7009:589::-:0;7145:17;7194:1;7183:8;:12;7175:58;;;;-1:-1:-1;;;7175:58:0;;19363:2:1;7175:58:0;;;19345:21:1;19402:2;19382:18;;;19375:30;19441:34;19421:18;;;19414:62;-1:-1:-1;;;19492:18:1;;;19485:31;19533:19;;7175:58:0;19161:397:1;7175:58:0;7278:1;7266:9;:13;:31;;;;;7296:1;7283:10;:14;7266:31;7244:111;;;;-1:-1:-1;;;7244:111:0;;17956:2:1;7244:111:0;;;17938:21:1;17995:2;17975:18;;;17968:30;18034:32;18014:18;;;18007:60;18084:18;;7244:111:0;17754:354:1;7244:111:0;7366:23;7392:17;:8;7405:3;7392:12;:17::i;:::-;7366:43;-1:-1:-1;7420:17:0;7440:31;7366:43;7460:10;7440:19;:31::i;:::-;7420:51;-1:-1:-1;7482:19:0;7504:40;7528:15;7504:19;:9;7518:4;7504:13;:19::i;:::-;:23;;:40::i;:::-;7482:62;-1:-1:-1;7567:23:0;7482:62;7567:9;:23;:::i;:::-;7555:35;7009:589;-1:-1:-1;;;;;;;7009:589:0:o;8969:640::-;9107:24;9167:1;9152:4;:11;:16;;9144:49;;;;-1:-1:-1;;;9144:49:0;;18315:2:1;9144:49:0;;;18297:21:1;18354:2;18334:18;;;18327:30;-1:-1:-1;;;18373:18:1;;;18366:50;18433:18;;9144:49:0;18113:344:1;9144:49:0;9228:4;:11;9214:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9214:26:0;;9204:36;;9281:9;9251:7;9276:1;9259:7;:14;:18;;;;:::i;:::-;9251:27;;;;;;;;:::i;:::-;;;;;;:39;;;;;9306:9;9332:1;9318:4;:11;:15;;;;:::i;:::-;9306:27;;9301:301;9335:5;;9301:301;;9363:17;;9404:108;9434:7;9460:4;9465:5;9469:1;9465;:5;:::i;:::-;9460:11;;;;;;;;:::i;:::-;;;;;;;9490:4;9495:1;9490:7;;;;;;;;:::i;:::-;;;;;;;9404:11;:108::i;:::-;9362:150;;;;9544:46;9556:7;9564:1;9556:10;;;;;;;;:::i;:::-;;;;;;;9568:9;9579:10;9544:11;:46::i;:::-;9527:7;9535:5;9539:1;9535;:5;:::i;:::-;9527:14;;;;;;;;:::i;:::-;;;;;;:63;;;;;9347:255;;9342:3;;;;;:::i;:::-;;;;9301:301;;;;8969:640;;;;;:::o;8342:619::-;8480:24;8540:1;8525:4;:11;:16;;8517:49;;;;-1:-1:-1;;;8517:49:0;;18315:2:1;8517:49:0;;;18297:21:1;18354:2;18334:18;;;18327:30;-1:-1:-1;;;18373:18:1;;;18366:50;18433:18;;8517:49:0;18113:344:1;8517:49:0;8601:4;:11;8587:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8587:26:0;;8577:36;;8637:8;8624:7;8632:1;8624:10;;;;;;;;:::i;:::-;;;;;;:21;;;;;8661:9;8656:298;8690:1;8676:4;:11;:15;;;;:::i;:::-;8672:1;:19;8656:298;;;8714:17;8733:18;8755:108;8785:7;8811:4;8816:1;8811:7;;;;;;;;:::i;:::-;;;;;;;8837:4;8842:1;8846;8842:5;;;;:::i;:::-;8837:11;;;;;;;;:::i;8755:108::-;8713:150;;;;8895:47;8908:7;8916:1;8908:10;;;;;;;;:::i;:::-;;;;;;;8920:9;8931:10;8895:12;:47::i;:::-;8878:7;8886:5;:1;8890;8886:5;:::i;:::-;8878:14;;;;;;;;:::i;:::-;;;;;;:64;;;;;8698:256;;8693:3;;;;;:::i;:::-;;;;8656:298;;4550:204;4705:41;;-1:-1:-1;;;4705:41:0;;-1:-1:-1;;;;;10323:15:1;;;4705:41:0;;;10305:34:1;10375:15;;;10355:18;;;10348:43;4673:12:0;;4705:25;;;;;;10240:18:1;;4705:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;5589:522::-;5874:51;;;-1:-1:-1;;;;;10660:15:1;;;5874:51:0;;;10642:34:1;10712:15;;;10692:18;;;10685:43;10744:18;;;;10737:34;;;5874:51:0;;;;;;;;;;10577:18:1;;;;5874:51:0;;;;;;;-1:-1:-1;;;;;5874:51:0;-1:-1:-1;;;5874:51:0;;;5849:87;;-1:-1:-1;;;;5849:10:0;;;;:87;;5874:51;5849:87;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5813:123;;;;5969:7;:57;;;;-1:-1:-1;5981:11:0;;:16;;:44;;;6012:4;6001:24;;;;;;;;;;;;:::i;:::-;5947:156;;;;-1:-1:-1;;;5947:156:0;;13656:2:1;5947:156:0;;;13638:21:1;13695:2;13675:18;;;13668:30;13734:34;13714:18;;;13707:62;-1:-1:-1;;;13785:18:1;;;13778:47;13842:19;;5947:156:0;13454:413:1;5947:156:0;5723:388;;5589:522;;;;:::o;26585:862::-;26720:9;26715:725;26749:1;26735:4;:11;:15;;;;:::i;:::-;26731:1;:19;26715:725;;;26773:13;26788:14;26807:4;26812:1;26807:7;;;;;;;;:::i;:::-;;;;;;;26816:4;26821:1;26825;26821:5;;;;:::i;:::-;26816:11;;;;;;;;:::i;:::-;;;;;;;26772:56;;;;26844:14;26864:32;26882:5;26889:6;26864:17;:32::i;:::-;-1:-1:-1;26843:53:0;-1:-1:-1;26911:17:0;26931:7;26939:5;:1;26943;26939:5;:::i;:::-;26931:14;;;;;;;;:::i;:::-;;;;;;;26911:34;;26961:18;26981;27012:6;-1:-1:-1;;;;;27003:15:0;:5;-1:-1:-1;;;;;27003:15:0;;:101;;27082:9;27101:1;27003:101;;;27047:1;27051:9;27003:101;26960:144;;;;27119:10;27150:1;27136:4;:11;:15;;;;:::i;:::-;27132:1;:19;:106;;27235:3;27132:106;;;27186:7;;27171:44;;-1:-1:-1;;;;;27186:7:0;27195:6;27203:4;27208:5;:1;27212;27208:5;:::i;:::-;27203:11;;;;;;;;:::i;27171:44::-;27274:7;;27119:119;;-1:-1:-1;27259:38:0;;-1:-1:-1;;;;;27274:7:0;27283:5;27290:6;27259:14;:38::i;:::-;-1:-1:-1;;;;;27253:50:0;;27322:10;27351;27380:2;27411:1;27401:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27401:12:0;;27253:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26757:683;;;;;;;26752:3;;;;;:::i;:::-;;;;26715:725;;;;26585:862;;;:::o;6119:473::-;6365:45;;;-1:-1:-1;;;;;10974:32:1;;;6365:45:0;;;10956:51:1;11023:18;;;;11016:34;;;6365:45:0;;;;;;;;;;10929:18:1;;;;6365:45:0;;;;;;;-1:-1:-1;;;;;6365:45:0;-1:-1:-1;;;6365:45:0;;;6340:81;;-1:-1:-1;;;;6340:10:0;;;;:81;;6365:45;6340:81;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6304:117;;;;6454:7;:57;;;;-1:-1:-1;6466:11:0;;:16;;:44;;;6497:4;6486:24;;;;;;;;;;;;:::i;:::-;6432:152;;;;-1:-1:-1;;;6432:152:0;;17542:2:1;6432:152:0;;;17524:21:1;17581:2;17561:18;;;17554:30;17620:34;17600:18;;;17593:62;-1:-1:-1;;;17671:18:1;;;17664:43;17724:19;;6432:152:0;17340:409:1;6432:152:0;6226:366;;6119:473;;;:::o;6600:287::-;6724:12;;;6684;6724;;;;;;;;;-1:-1:-1;;;;;6702:7:0;;;6717:5;;6702:35;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6683:54;;;6770:7;6748:131;;;;-1:-1:-1;;;6748:131:0;;14432:2:1;6748:131:0;;;14414:21:1;14471:2;14451:18;;;14444:30;14510:34;14490:18;;;14483:62;14581:34;14561:18;;;14554:62;-1:-1:-1;;;14632:19:1;;;14625:41;14683:19;;6748:131:0;14230:478:1;6748:131:0;6672:215;6600:287;;:::o;23250:1614::-;23471:15;23529:7;;23520:41;;-1:-1:-1;;;23520:41:0;;-1:-1:-1;;;;;10323:15:1;;;23520:41:0;;;10305:34:1;10375:15;;;10355:18;;;10348:43;23471:15:0;;;;23529:7;;;23520:25;;10240:18:1;;23520:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23520:55:0;;23516:132;;;23601:7;;23592:44;;-1:-1:-1;;;23592:44:0;;-1:-1:-1;;;;;10323:15:1;;;23592:44:0;;;10305:34:1;10375:15;;;10355:18;;;10348:43;23601:7:0;;;;23592:28;;10240:18:1;;23592:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23516:132;23659:16;23730:7;;23659:16;;23697:93;;-1:-1:-1;;;;;23730:7:0;23752:6;23773;23697:18;:93::i;:::-;23658:132;;;;23805:8;23817:1;23805:13;:30;;;;-1:-1:-1;23822:13:0;;23805:30;23801:1056;;;23874:14;;-1:-1:-1;23890:14:0;;-1:-1:-1;23801:1056:0;;;23938:22;23963:114;23994:14;24027:8;24054;23963:12;:114::i;:::-;23938:139;;24114:14;24096;:32;24092:754;;24197:10;24179:14;:28;;24149:131;;;;-1:-1:-1;;;24149:131:0;;14074:2:1;24149:131:0;;;14056:21:1;14113:2;14093:18;;;14086:30;14152:31;14132:18;;;14125:59;14201:18;;24149:131:0;13872:353:1;24149:131:0;24321:14;;-1:-1:-1;24337:14:0;-1:-1:-1;24337:14:0;24092:754;;;24393:22;24418:130;24453:14;24490:8;24521;24418:12;:130::i;:::-;24393:155;;24593:14;24575;:32;;24567:41;;;;;;24675:10;24657:14;:28;;24627:131;;;;-1:-1:-1;;;24627:131:0;;16781:2:1;24627:131:0;;;16763:21:1;16820:2;16800:18;;;16793:30;16859:31;16839:18;;;16832:59;16908:18;;24627:131:0;16579:353:1;24627:131:0;24799:14;-1:-1:-1;24815:14:0;;-1:-1:-1;24092:754:0;23923:934;23801:1056;23505:1359;;23250:1614;;;;;;;;;:::o;4155:387::-;4257:14;4273;4323:6;-1:-1:-1;;;;;4313:16:0;:6;-1:-1:-1;;;;;4313:16:0;;;4305:56;;;;-1:-1:-1;;;4305:56:0;;16011:2:1;4305:56:0;;;15993:21:1;16050:2;16030:18;;;16023:30;16089:29;16069:18;;;16062:57;16136:18;;4305:56:0;15809:351:1;4305:56:0;4400:6;-1:-1:-1;;;;;4391:15:0;:6;-1:-1:-1;;;;;4391:15:0;;:79;;4455:6;4463;4391:79;;;4423:6;4431;4391:79;4372:98;;-1:-1:-1;4372:98:0;-1:-1:-1;;;;;;4489:20:0;;4481:53;;;;-1:-1:-1;;;4481:53:0;;14915:2:1;4481:53:0;;;14897:21:1;14954:2;14934:18;;;14927:30;-1:-1:-1;;;14973:18:1;;;14966:50;15033:18;;4481:53:0;14713:344:1;4481:53:0;4155:387;;;;;:::o;3863:151::-;3921:9;3951:6;;;:30;;-1:-1:-1;3980:1:0;3975;3966:5;3975:1;3980;3966:5;:::i;:::-;3962:9;-1:-1:-1;3961:15:0;;3962:9;3961:15;:::i;:::-;:20;3951:30;3943:63;;;;-1:-1:-1;;;3943:63:0;;12599:2:1;3943:63:0;;;12581:21:1;12638:2;12618:18;;;12611:30;-1:-1:-1;;;12657:18:1;;;12650:50;12717:18;;3943:63:0;12397:344:1;3572:137:0;3630:9;3675:1;3665:5;3669:1;3675;3665:5;:::i;:::-;3661:9;;;3660:16;;3652:49;;;;-1:-1:-1;;;3652:49:0;;13307:2:1;3652:49:0;;;13289:21:1;13346:2;13326:18;;;13319:30;-1:-1:-1;;;13365:18:1;;;13358:50;13425:18;;3652:49:0;13105:344:1;5101:480:0;5228:16;5246;5276:14;5296:26;5307:6;5315;5296:10;:26::i;:::-;5275:47;;;5334:16;5352;5394:32;5402:7;5411:6;5419;5394:7;:32::i;:::-;-1:-1:-1;;;;;5374:75:0;;:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5333:118;-1:-1:-1;;;;;5333:118:0;;;-1:-1:-1;;;;;5333:118:0;;;5495:6;-1:-1:-1;;;;;5485:16:0;:6;-1:-1:-1;;;;;5485:16:0;;:88;;5554:8;5564;5485:88;;;5518:8;5528;5485:88;5462:111;;;;-1:-1:-1;5101:480:0;-1:-1:-1;;;;;;;5101:480:0:o;7719:541::-;7855:16;7904:1;7892:9;:13;7884:60;;;;-1:-1:-1;;;7884:60:0;;15608:2:1;7884:60:0;;;15590:21:1;15647:2;15627:18;;;15620:30;15686:34;15666:18;;;15659:62;-1:-1:-1;;;15737:18:1;;;15730:32;15779:19;;7884:60:0;15406:398:1;7884:60:0;7989:1;7977:9;:13;:31;;;;;8007:1;7994:10;:14;7977:31;7955:111;;;;-1:-1:-1;;;7955:111:0;;17956:2:1;7955:111:0;;;17938:21:1;17995:2;17975:18;;;17968:30;18034:32;18014:18;;;18007:60;18084:18;;7955:111:0;17754:354:1;7955:111:0;8077:17;8097:34;8126:4;8097:24;:9;8111;8097:13;:24::i;:::-;:28;;:34::i;:::-;8077:54;-1:-1:-1;8142:19:0;8164:34;8194:3;8164:25;:10;8179:9;8164:14;:25::i;:34::-;8142:56;-1:-1:-1;8220:32:0;8250:1;8221:23;8142:56;8221:9;:23;:::i;8220:32::-;8209:43;7719:541;-1:-1:-1;;;;;;7719:541:0:o;4762:331::-;4887:15;4933:1;4923:7;:11;4915:43;;;;-1:-1:-1;;;4915:43:0;;18664:2:1;4915:43:0;;;18646:21:1;18703:2;18683:18;;;18676:30;-1:-1:-1;;;18722:18:1;;;18715:49;18781:18;;4915:43:0;18462:343:1;4915:43:0;4988:1;4977:8;:12;:28;;;;;5004:1;4993:8;:12;4977:28;4969:63;;;;-1:-1:-1;;;4969:63:0;;19012:2:1;4969:63:0;;;18994:21:1;19051:2;19031:18;;;19024:30;-1:-1:-1;;;19070:18:1;;;19063:52;19132:18;;4969:63:0;18810:346:1;4969:63:0;5077:8;5053:21;:7;5065:8;5053:11;:21::i;:::-;:32;;;;:::i;3717:138::-;3775:9;3820:1;3810:5;3814:1;3820;3810:5;:::i;:::-;3806:9;;;3805:16;;3797:50;;;;-1:-1:-1;;;3797:50:0;;11900:2:1;3797:50:0;;;11882:21:1;11939:2;11919:18;;;11912:30;-1:-1:-1;;;11958:18:1;;;11951:51;12019:18;;3797:50:0;11698:345:1;14:134;82:20;;111:31;82:20;111:31;:::i;:::-;14:134;;;:::o;153:367::-;216:8;226:6;280:3;273:4;265:6;261:17;257:27;247:55;;298:1;295;288:12;247:55;-1:-1:-1;321:20:1;;364:18;353:30;;350:50;;;396:1;393;386:12;350:50;433:4;425:6;421:17;409:29;;493:3;486:4;476:6;473:1;469:14;461:6;457:27;453:38;450:47;447:67;;;510:1;507;500:12;525:919;579:5;632:3;625:4;617:6;613:17;609:27;599:55;;650:1;647;640:12;599:55;686:6;673:20;712:4;735:18;772:2;768;765:10;762:36;;;778:18;;:::i;:::-;824:2;821:1;817:10;856:2;850:9;919:2;915:7;910:2;906;902:11;898:25;890:6;886:38;974:6;962:10;959:22;954:2;942:10;939:18;936:46;933:72;;;985:18;;:::i;:::-;1021:2;1014:22;1071:18;;;1105:15;;;;-1:-1:-1;1140:15:1;;;1174;;;1170:24;;1167:33;-1:-1:-1;1164:53:1;;;1213:1;1210;1203:12;1164:53;1235:1;1226:10;;1245:169;1259:2;1256:1;1253:9;1245:169;;;1316:23;1335:3;1316:23;:::i;:::-;1304:36;;1360:12;;;;1277:1;1270:9;;;;;1392:12;;1245:169;;;-1:-1:-1;1432:6:1;525:919;-1:-1:-1;;;;;;;525:919:1:o;1449:188::-;1528:13;;-1:-1:-1;;;;;1570:42:1;;1560:53;;1550:81;;1627:1;1624;1617:12;1642:247;1701:6;1754:2;1742:9;1733:7;1729:23;1725:32;1722:52;;;1770:1;1767;1760:12;1722:52;1809:9;1796:23;1828:31;1853:5;1828:31;:::i;:::-;1878:5;1642:247;-1:-1:-1;;;1642:247:1:o;1894:251::-;1964:6;2017:2;2005:9;1996:7;1992:23;1988:32;1985:52;;;2033:1;2030;2023:12;1985:52;2065:9;2059:16;2084:31;2109:5;2084:31;:::i;2150:805::-;2263:6;2271;2279;2287;2295;2303;2311;2364:3;2352:9;2343:7;2339:23;2335:33;2332:53;;;2381:1;2378;2371:12;2332:53;2420:9;2407:23;2439:31;2464:5;2439:31;:::i;:::-;2489:5;-1:-1:-1;2546:2:1;2531:18;;2518:32;2559:33;2518:32;2559:33;:::i;:::-;2611:7;-1:-1:-1;2665:2:1;2650:18;;2637:32;;-1:-1:-1;2716:2:1;2701:18;;2688:32;;-1:-1:-1;2767:3:1;2752:19;;2739:33;;-1:-1:-1;2824:3:1;2809:19;;2796:33;2838;2796;2838;:::i;:::-;2890:7;2880:17;;;2944:3;2933:9;2929:19;2916:33;2906:43;;2150:805;;;;;;;;;;:::o;2960:874::-;3082:6;3090;3098;3106;3114;3122;3130;3138;3191:3;3179:9;3170:7;3166:23;3162:33;3159:53;;;3208:1;3205;3198:12;3159:53;3247:9;3234:23;3266:31;3291:5;3266:31;:::i;:::-;3316:5;-1:-1:-1;3373:2:1;3358:18;;3345:32;3386:33;3345:32;3386:33;:::i;:::-;3438:7;-1:-1:-1;3492:2:1;3477:18;;3464:32;;-1:-1:-1;3543:2:1;3528:18;;3515:32;;-1:-1:-1;3594:3:1;3579:19;;3566:33;;-1:-1:-1;3646:3:1;3631:19;;3618:33;;-1:-1:-1;3703:3:1;3688:19;;3675:33;3717;3675;3717;:::i;:::-;3769:7;3759:17;;;3823:3;3812:9;3808:19;3795:33;3785:43;;2960:874;;;;;;;;;;;:::o;3839:663::-;3943:6;3951;3959;3967;3975;3983;4036:3;4024:9;4015:7;4011:23;4007:33;4004:53;;;4053:1;4050;4043:12;4004:53;4092:9;4079:23;4111:31;4136:5;4111:31;:::i;:::-;4161:5;-1:-1:-1;4213:2:1;4198:18;;4185:32;;-1:-1:-1;4264:2:1;4249:18;;4236:32;;-1:-1:-1;4315:2:1;4300:18;;4287:32;;-1:-1:-1;4371:3:1;4356:19;;4343:33;4385;4343;4385;:::i;:::-;4437:7;4427:17;;;4491:3;4480:9;4476:19;4463:33;4453:43;;3839:663;;;;;;;;:::o;4507:916::-;4647:6;4655;4663;4671;4679;4687;4695;4703;4756:3;4744:9;4735:7;4731:23;4727:33;4724:53;;;4773:1;4770;4763:12;4724:53;4813:9;4800:23;4846:18;4838:6;4835:30;4832:50;;;4878:1;4875;4868:12;4832:50;4917:70;4979:7;4970:6;4959:9;4955:22;4917:70;:::i;:::-;5006:8;;-1:-1:-1;4891:96:1;-1:-1:-1;;5088:2:1;5073:18;;5060:32;;-1:-1:-1;5139:2:1;5124:18;;5111:32;;-1:-1:-1;5190:2:1;5175:18;;5162:32;;-1:-1:-1;5241:3:1;5226:19;;5213:33;;-1:-1:-1;5296:3:1;5281:19;;5268:33;5310:31;5268:33;5310:31;:::i;:::-;5360:5;5350:15;;;5412:3;5401:9;5397:19;5384:33;5374:43;;4507:916;;;;;;;;;;;:::o;5428:758::-;5557:6;5565;5573;5581;5589;5597;5650:3;5638:9;5629:7;5625:23;5621:33;5618:53;;;5667:1;5664;5657:12;5618:53;5707:9;5694:23;5740:18;5732:6;5729:30;5726:50;;;5772:1;5769;5762:12;5726:50;5795:61;5848:7;5839:6;5828:9;5824:22;5795:61;:::i;:::-;5785:71;;;5903:2;5892:9;5888:18;5875:32;5865:42;;5954:2;5943:9;5939:18;5926:32;5916:42;;6005:2;5994:9;5990:18;5977:32;5967:42;;6059:3;6048:9;6044:19;6031:33;6073:31;6098:5;6073:31;:::i;6191:277::-;6258:6;6311:2;6299:9;6290:7;6286:23;6282:32;6279:52;;;6327:1;6324;6317:12;6279:52;6359:9;6353:16;6412:5;6405:13;6398:21;6391:5;6388:32;6378:60;;6434:1;6431;6424:12;6473:450;6560:6;6568;6576;6629:2;6617:9;6608:7;6604:23;6600:32;6597:52;;;6645:1;6642;6635:12;6597:52;6668:40;6698:9;6668:40;:::i;:::-;6658:50;;6727:49;6772:2;6761:9;6757:18;6727:49;:::i;:::-;6717:59;;6819:2;6808:9;6804:18;6798:25;6863:10;6856:5;6852:22;6845:5;6842:33;6832:61;;6889:1;6886;6879:12;6832:61;6912:5;6902:15;;;6473:450;;;;;:::o;6928:184::-;6998:6;7051:2;7039:9;7030:7;7026:23;7022:32;7019:52;;;7067:1;7064;7057:12;7019:52;-1:-1:-1;7090:16:1;;6928:184;-1:-1:-1;6928:184:1:o;7117:709::-;7230:6;7238;7246;7254;7262;7315:3;7303:9;7294:7;7290:23;7286:33;7283:53;;;7332:1;7329;7322:12;7283:53;7368:9;7355:23;7345:33;;7429:2;7418:9;7414:18;7401:32;7456:18;7448:6;7445:30;7442:50;;;7488:1;7485;7478:12;7442:50;7527:70;7589:7;7580:6;7569:9;7565:22;7527:70;:::i;:::-;7616:8;;-1:-1:-1;7501:96:1;-1:-1:-1;;7701:2:1;7686:18;;7673:32;7714:31;7673:32;7714:31;:::i;:::-;7117:709;;;;-1:-1:-1;7117:709:1;;7816:2;7801:18;7788:32;;7117:709;-1:-1:-1;;7117:709:1:o;7831:416::-;7924:6;7932;7985:2;7973:9;7964:7;7960:23;7956:32;7953:52;;;8001:1;7998;7991:12;7953:52;8037:9;8024:23;8014:33;;8098:2;8087:9;8083:18;8070:32;8125:18;8117:6;8114:30;8111:50;;;8157:1;8154;8147:12;8111:50;8180:61;8233:7;8224:6;8213:9;8209:22;8180:61;:::i;:::-;8170:71;;;7831:416;;;;;:::o;8252:245::-;8331:6;8339;8392:2;8380:9;8371:7;8367:23;8363:32;8360:52;;;8408:1;8405;8398:12;8360:52;-1:-1:-1;;8431:16:1;;8487:2;8472:18;;;8466:25;8431:16;;8466:25;;-1:-1:-1;8252:245:1:o;8502:778::-;8624:6;8632;8640;8648;8656;8664;8717:3;8705:9;8696:7;8692:23;8688:33;8685:53;;;8734:1;8731;8724:12;8685:53;8770:9;8757:23;8747:33;;8827:2;8816:9;8812:18;8799:32;8789:42;;8882:2;8871:9;8867:18;8854:32;8909:18;8901:6;8898:30;8895:50;;;8941:1;8938;8931:12;8895:50;8980:70;9042:7;9033:6;9022:9;9018:22;8980:70;:::i;:::-;9069:8;;-1:-1:-1;8954:96:1;-1:-1:-1;;9154:2:1;9139:18;;9126:32;9167:31;9126:32;9167:31;:::i;:::-;9217:5;9207:15;;;9269:3;9258:9;9254:19;9241:33;9231:43;;8502:778;;;;;;;;:::o;9285:316::-;9362:6;9370;9378;9431:2;9419:9;9410:7;9406:23;9402:32;9399:52;;;9447:1;9444;9437:12;9399:52;-1:-1:-1;;9470:23:1;;;9540:2;9525:18;;9512:32;;-1:-1:-1;9591:2:1;9576:18;;;9563:32;;9285:316;-1:-1:-1;9285:316:1:o;9606:274::-;9735:3;9773:6;9767:13;9789:53;9835:6;9830:3;9823:4;9815:6;9811:17;9789:53;:::i;:::-;9858:16;;;;;9606:274;-1:-1:-1;;9606:274:1:o;11061:632::-;11232:2;11284:21;;;11354:13;;11257:18;;;11376:22;;;11203:4;;11232:2;11455:15;;;;11429:2;11414:18;;;11203:4;11498:169;11512:6;11509:1;11506:13;11498:169;;;11573:13;;11561:26;;11642:15;;;;11607:12;;;;11534:1;11527:9;11498:169;;;-1:-1:-1;11684:3:1;;11061:632;-1:-1:-1;;;;;;11061:632:1:o;12048:344::-;12250:2;12232:21;;;12289:2;12269:18;;;12262:30;-1:-1:-1;;;12323:2:1;12308:18;;12301:50;12383:2;12368:18;;12048:344::o;12746:354::-;12948:2;12930:21;;;12987:2;12967:18;;;12960:30;13026:32;13021:2;13006:18;;12999:60;13091:2;13076:18;;12746:354::o;15062:339::-;15264:2;15246:21;;;15303:2;15283:18;;;15276:30;-1:-1:-1;;;15337:2:1;15322:18;;15315:45;15392:2;15377:18;;15062:339::o;16937:398::-;17139:2;17121:21;;;17178:2;17158:18;;;17151:30;17217:34;17212:2;17197:18;;17190:62;-1:-1:-1;;;17283:2:1;17268:18;;17261:32;17325:3;17310:19;;16937:398::o;19998:624::-;20229:6;20218:9;20211:25;20272:6;20267:2;20256:9;20252:18;20245:34;20344:1;20340;20335:3;20331:11;20327:19;20319:6;20315:32;20310:2;20299:9;20295:18;20288:60;20384:3;20379:2;20368:9;20364:18;20357:31;20192:4;20417:6;20411:13;20461:6;20455:3;20444:9;20440:19;20433:35;20477:67;20537:6;20531:3;20520:9;20516:19;20511:2;20503:6;20499:15;20477:67;:::i;:::-;20605:2;20584:15;-1:-1:-1;;20580:29:1;20565:45;;;;20612:3;20561:55;;19998:624;-1:-1:-1;;;;;19998:624:1:o;20951:128::-;20991:3;21022:1;21018:6;21015:1;21012:13;21009:39;;;21028:18;;:::i;:::-;-1:-1:-1;21064:9:1;;20951:128::o;21084:217::-;21124:1;21150;21140:132;;21194:10;21189:3;21185:20;21182:1;21175:31;21229:4;21226:1;21219:15;21257:4;21254:1;21247:15;21140:132;-1:-1:-1;21286:9:1;;21084:217::o;21306:168::-;21346:7;21412:1;21408;21404:6;21400:14;21397:1;21394:21;21389:1;21382:9;21375:17;21371:45;21368:71;;;21419:18;;:::i;:::-;-1:-1:-1;21459:9:1;;21306:168::o;21479:125::-;21519:4;21547:1;21544;21541:8;21538:34;;;21552:18;;:::i;:::-;-1:-1:-1;21589:9:1;;21479:125::o;21609:258::-;21681:1;21691:113;21705:6;21702:1;21699:13;21691:113;;;21781:11;;;21775:18;21762:11;;;21755:39;21727:2;21720:10;21691:113;;;21822:6;21819:1;21816:13;21813:48;;;-1:-1:-1;;21857:1:1;21839:16;;21832:27;21609:258::o;21872:136::-;21911:3;21939:5;21929:39;;21948:18;;:::i;:::-;-1:-1:-1;;;21984:18:1;;21872:136::o;22013:135::-;22052:3;-1:-1:-1;;22073:17:1;;22070:43;;;22093:18;;:::i;:::-;-1:-1:-1;22140:1:1;22129:13;;22013:135::o;22153:127::-;22214:10;22209:3;22205:20;22202:1;22195:31;22245:4;22242:1;22235:15;22269:4;22266:1;22259:15;22285:127;22346:10;22341:3;22337:20;22334:1;22327:31;22377:4;22374:1;22367:15;22401:4;22398:1;22391:15;22417:127;22478:10;22473:3;22469:20;22466:1;22459:31;22509:4;22506:1;22499:15;22533:4;22530:1;22523:15;22549:131;-1:-1:-1;;;;;22624:31:1;;22614:42;;22604:70;;22670:1;22667;22660:12;22604:70;22549:131;:::o
Swarm Source
ipfs://00012f7971a5340f6d82c9285eb47412bf94bb74467dd7335c4080e866e0edac
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in MOVR
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.