Overview
S Balance
0 S
S Value
-More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 79 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Swap Exact ETH F... | 622829 | 6 hrs ago | IN | 0.1 S | 0.01043104 | ||||
Swap Exact ETH F... | 622567 | 6 hrs ago | IN | 0.1 S | 0.01043104 | ||||
Swap Exact Token... | 597784 | 10 hrs ago | IN | 0 S | 0.00161374 | ||||
Swap Exact ETH F... | 596743 | 10 hrs ago | IN | 0.0001 S | 0.00060776 | ||||
Swap Exact Token... | 594453 | 10 hrs ago | IN | 0 S | 0.00161363 | ||||
Swap Exact Token... | 594254 | 10 hrs ago | IN | 0 S | 0.00121677 | ||||
Swap Exact Token... | 594143 | 10 hrs ago | IN | 0 S | 0.00127897 | ||||
Swap Exact Token... | 593994 | 10 hrs ago | IN | 0 S | 0.00127903 | ||||
Add Liquidity | 576917 | 12 hrs ago | IN | 0 S | 0.00560662 | ||||
Add Liquidity | 558514 | 14 hrs ago | IN | 0 S | 0.00561519 | ||||
Swap Exact Token... | 558370 | 14 hrs ago | IN | 0 S | 0.00021274 | ||||
Swap Exact Token... | 558103 | 14 hrs ago | IN | 0 S | 0.00028911 | ||||
Swap Exact ETH F... | 557212 | 14 hrs ago | IN | 0.001 S | 0.00087325 | ||||
Swap Exact Token... | 545462 | 18 hrs ago | IN | 0 S | 0.00022388 | ||||
Swap Exact Token... | 545442 | 19 hrs ago | IN | 0 S | 0.00030528 | ||||
Swap Exact Token... | 545409 | 19 hrs ago | IN | 0 S | 0.00030521 | ||||
Swap Exact Token... | 545369 | 19 hrs ago | IN | 0 S | 0.00031769 | ||||
Remove Liquidity | 396918 | 4 days ago | IN | 0 S | 0.00029907 | ||||
Swap Exact Token... | 375168 | 5 days ago | IN | 0 S | 0.00024449 | ||||
Remove Liquidity | 375106 | 5 days ago | IN | 0 S | 0.00029584 | ||||
Remove Liquidity | 371554 | 5 days ago | IN | 0 S | 0.00049271 | ||||
Remove Liquidity | 371538 | 5 days ago | IN | 0 S | 0.00023715 | ||||
Add Liquidity | 371033 | 5 days ago | IN | 0 S | 0.00031774 | ||||
Remove Liquidity | 370960 | 5 days ago | IN | 0 S | 0.00029584 | ||||
Remove Liquidity | 370918 | 5 days ago | IN | 0 S | 0.00032637 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
557212 | 14 hrs ago | 0.001 S | ||||
532090 | 27 hrs ago | 0.001 S | ||||
532090 | 27 hrs ago | 0.001 S | ||||
531808 | 27 hrs ago | 0.005 S | ||||
531808 | 27 hrs ago | 0.005 S | ||||
375168 | 5 days ago | 0.00170578 S | ||||
375168 | 5 days ago | 0.00170578 S | ||||
324389 | 6 days ago | 0 S | ||||
324389 | 6 days ago | 0 S | ||||
324379 | 6 days ago | 0 S | ||||
324379 | 6 days ago | 0 S | ||||
324266 | 6 days ago | 0 S | ||||
324266 | 6 days ago | 0 S | ||||
323922 | 6 days ago | 998 wei | ||||
323922 | 6 days ago | 998 wei | ||||
314822 | 7 days ago | 0.00000019 S | ||||
314822 | 7 days ago | 0.00000019 S | ||||
295414 | 7 days ago | 0.00000001 S | ||||
295280 | 7 days ago | 0.0000004 S | ||||
295252 | 7 days ago | 0.0000001 S | ||||
293532 | 7 days ago | 0.00000005 S | ||||
288754 | 7 days ago | 0.0001 S | ||||
288750 | 7 days ago | 0.0001 S | ||||
288695 | 7 days ago | 0.0001 S | ||||
284257 | 8 days ago | 0.0000005 S |
Loading...
Loading
Contract Name:
Router03
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2024-12-17 */ /**0x5e9d25014d01323d6f8c0c6640572e4444d11c94 *v3.0.1 *Submitted for verification at basescan.org on 2023-09-23 */ // SPDX-License-Identifier: Unlicensed // Solidly Extended - Router Staker // ftm.guru's extension of Solidly Extended to Stake Liquidity into Gauge, directly. // Solidly Extended // ftm.guru's extension of Solidly's periphery (Router) // https://github.com/andrecronje/solidly/blob/master/contracts/BaseV1-periphery.sol // // BaseV1Router02.sol : Supporting Fee-on-transfer Tokens // https://github.com/ftm1337/solidly-with-FoT/blob/master/contracts/BaseV1-periphery.sol /**v1.3.17 *0x2aa07920E4ecb4ea8C801D9DFEce63875623B285 *Submitted for verification at FtmScan.com on 2023-04-03 */ /**v1.1.0 *0x1A05EB736873485655F29a37DEf8a0AA87F5a447 *Submitted for verification at FtmScan.com on 2022-11-18 */ /** * EQUALIZER EXCHANGE * The New Liquidity Hub of Fantom chain! * https://equalizer.exchange (Dapp) * https://discord.gg/MaMhbgHMby (Community) * * * * Version: 2.0.5 * - RouterStaker is a drop-in replacement for Router2 * - Stakes all added liquidity directly into the related EqualizerV2 gauge. * * Version: 1.3.17 * - Add Support for Fee-on-Transfer tokens (Original work Based on "Solidly Extended" by ftm.guru) * - Remove "calculation" of Pair Address and instead use Factory.pairFor * * * Contributors: * - Andre Cronje, Solidly.Exchange * - 543#3017 (Sam), ftm.guru & Equalizer.exchange * * */ /** *Submitted for verification at FtmScan.com on 2022-02-20 */ // ftm.guru's extension of Solidly's periphery (Router) // https://github.com/andrecronje/solidly/blob/master/contracts/BaseV1-periphery.sol // BaseV1Router02.sol : Supporting Fee-on-transfer Tokens // https://github.com/ftm1337/solidly-with-FoT/blob/master/contracts/BaseV1-periphery.sol pragma solidity 0.8.9; // OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol) /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) * with further edits by Uniswap Labs also under MIT license. */ function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { // Solidity will revert if denominator == 0, unlike the div opcode on its own. // The surrounding unchecked block does not change this fact. // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic. return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1, "Math: mulDiv overflow"); /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2, rounded down, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10, rounded down, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10 ** 64) { value /= 10 ** 64; result += 64; } if (value >= 10 ** 32) { value /= 10 ** 32; result += 32; } if (value >= 10 ** 16) { value /= 10 ** 16; result += 16; } if (value >= 10 ** 8) { value /= 10 ** 8; result += 8; } if (value >= 10 ** 4) { value /= 10 ** 4; result += 4; } if (value >= 10 ** 2) { value /= 10 ** 2; result += 2; } if (value >= 10 ** 1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0); } } /** * @dev Return the log in base 256, rounded down, of a positive value. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 256, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0); } } } // File: contracts/interfaces/IERC20.sol interface IERC20 { function totalSupply() external view returns (uint256); function transfer(address recipient, uint amount) external returns (bool); function balanceOf(address) external view returns (uint); function transferFrom(address sender, address recipient, uint amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); } // File: contracts/interfaces/IPair.sol interface IPair { function transferFrom(address src, address dst, uint amount) external returns (bool); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function burn(address to) external returns (uint amount0, uint amount1); function mint(address to) external returns (uint liquidity); function getReserves() external view returns (uint _reserve0, uint _reserve1, uint _blockTimestampLast); function getAmountOut(uint, address) external view returns (uint); function stable() external view returns (bool); } // File: contracts/interfaces/IPairFactory.sol interface IPairFactory { function allPairsLength() external view returns (uint); function isPair(address pair) external view returns (bool); function isPaused() external view returns (bool); function pairCodeHash() external pure returns (bytes32); function getPair(address tokenA, address token, bool stable) external view returns (address); function getInitializable() external view returns (address, address, bool); function createPair(address tokenA, address tokenB, bool stable) external returns (address pair); } // File: contracts/interfaces/IRouter.sol interface IRouter { function pairFor(address tokenA, address tokenB, bool stable) external view returns (address pair); function swapExactTokensForTokensSimple(uint amountIn, uint amountOutMin, address tokenFrom, address tokenTo, bool stable, address to, uint deadline) external returns (uint[] memory amounts); function getAmountOut(uint amountIn, address tokenIn, address tokenOut, bool stable) external view returns (uint amount); function getReserves(address tokenA, address tokenB, bool stable) external view returns (uint, uint); function addLiquidity( address tokenA, address tokenB, bool stable, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline) external returns (uint, uint, uint); } // File: contracts/interfaces/IWETH.sol interface IWETH { function deposit() external payable; function transfer(address to, uint256 value) external returns (bool); function withdraw(uint256) external; } // File: contracts/interfaces/IGaugeEquivalent.sol pragma solidity 0.8.9; interface IGaugeEquivalent { function depositAllFor(address _user) external; } // File: contracts/interfaces/IVoter.sol pragma solidity 0.8.9; interface IVoter { function gauges(address _pool) external view returns (address _gauge); } // Solidly Extended - Router Staker // ftm.guru's extension of Solidly Extended to Stake Liquidity into Gauge, directly. /// Equalizer Scale : Router contract Router03 is IRouter { struct Route { address from; address to; bool stable; } address public immutable factory; IWETH public immutable weth; uint internal constant MINIMUM_LIQUIDITY = 10**3; bytes32 public immutable pairCodeHash; IVoter public immutable voter; modifier ensure(uint deadline) { require(deadline >= block.timestamp, 'Equalizer Router: EXPIRED'); _; } constructor(address _factory, address _weth, address _voter) { factory = _factory; pairCodeHash = IPairFactory(_factory).pairCodeHash(); weth = IWETH(_weth); voter = IVoter(_voter); } // @dev only accept ETH via fallback from the WETH contract receive() external payable { assert(msg.sender == address(weth)); } function sortTokens(address tokenA, address tokenB) public pure returns (address token0, address token1) { require(tokenA != tokenB, 'Equalizer Router: IDENTICAL_ADDRESSES'); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), 'Equalizer Router: ZERO_ADDRESS'); } // @dev calculates the CREATE2 address for a pair without making any external calls function pairFor(address tokenA, address tokenB, bool stable) public view returns (address pair) { /* (address token0, address token1) = sortTokens(tokenA, tokenB); pair = address(uint160(uint256(keccak256(abi.encodePacked( hex'ff', factory, keccak256(abi.encodePacked(token0, token1, stable)), pairCodeHash // init code hash ))))); */ return IPairFactory(factory).getPair(tokenA,tokenB,stable); } // @dev given some amount of an asset and pair reserves, returns an equivalent amount of the other asset function quoteLiquidity(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) { require(amountA > 0, 'Equalizer Router: INSUFFICIENT_AMOUNT'); require(reserveA > 0 && reserveB > 0, 'Equalizer Router: INSUFFICIENT_LIQUIDITY'); amountB = amountA * reserveB / reserveA; } // @dev fetches and sorts the reserves for a pair function getReserves(address tokenA, address tokenB, bool stable) public view returns (uint reserveA, uint reserveB) { (address token0,) = sortTokens(tokenA, tokenB); (uint reserve0, uint reserve1,) = IPair(pairFor(tokenA, tokenB, stable)).getReserves(); (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0); } // @dev performs comparision of getAmountOut calculations on a pair (not pool) of tokens & returns best pool (stable or not) and amountOut function getAmountOut(uint amountIn, address tokenIn, address tokenOut) public view returns (uint amount, bool stable) { address pair = pairFor(tokenIn, tokenOut, true); uint amountStable; uint amountVolatile; if (IPairFactory(factory).isPair(pair)) { amountStable = IPair(pair).getAmountOut(amountIn, tokenIn); } pair = pairFor(tokenIn, tokenOut, false); if (IPairFactory(factory).isPair(pair)) { amountVolatile = IPair(pair).getAmountOut(amountIn, tokenIn); } return amountStable > amountVolatile ? (amountStable, true) : (amountVolatile, false); } // @dev performs getAmountOut calculation for a specific pair function getAmountOut(uint amountIn, address tokenIn, address tokenOut, bool stable) public view returns (uint amount) { address pair = pairFor(tokenIn, tokenOut, stable); if (IPairFactory(factory).isPair(pair)) { amount = IPair(pair).getAmountOut(amountIn, tokenIn); } } // @dev performs chained getAmountOut calculations on any number of pairs function getAmountsOut(uint amountIn, Route[] memory routes) public view returns (uint[] memory amounts) { require(routes.length >= 1, 'Equalizer Router: INVALID_PATH'); amounts = new uint[](routes.length+1); amounts[0] = amountIn; for (uint i = 0; i < routes.length; i++) { address pair = pairFor(routes[i].from, routes[i].to, routes[i].stable); if (IPairFactory(factory).isPair(pair)) { amounts[i+1] = IPair(pair).getAmountOut(amounts[i], routes[i].from); } } } function isPair(address pair) external view returns (bool) { return IPairFactory(factory).isPair(pair); } function quoteAddLiquidity( address tokenA, address tokenB, bool stable, uint amountADesired, uint amountBDesired ) external view returns (uint amountA, uint amountB, uint liquidity) { // create the pair if it doesn't exist yet address _pair = IPairFactory(factory).getPair(tokenA, tokenB, stable); (uint reserveA, uint reserveB) = (0,0); uint _totalSupply = 0; if (_pair != address(0)) { _totalSupply = IERC20(_pair).totalSupply(); (reserveA, reserveB) = getReserves(tokenA, tokenB, stable); } if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); liquidity = Math.sqrt(amountA * amountB) - MINIMUM_LIQUIDITY; } else { uint amountBOptimal = quoteLiquidity(amountADesired, reserveA, reserveB); if (amountBOptimal <= amountBDesired) { (amountA, amountB) = (amountADesired, amountBOptimal); liquidity = Math.min(amountA * _totalSupply / reserveA, amountB * _totalSupply / reserveB); } else { uint amountAOptimal = quoteLiquidity(amountBDesired, reserveB, reserveA); (amountA, amountB) = (amountAOptimal, amountBDesired); liquidity = Math.min(amountA * _totalSupply / reserveA, amountB * _totalSupply / reserveB); } } } function quoteRemoveLiquidity( address tokenA, address tokenB, bool stable, uint liquidity ) external view returns (uint amountA, uint amountB) { // create the pair if it doesn't exist yet address _pair = IPairFactory(factory).getPair(tokenA, tokenB, stable); if (_pair == address(0)) { return (0,0); } (uint reserveA, uint reserveB) = getReserves(tokenA, tokenB, stable); uint _totalSupply = IERC20(_pair).totalSupply(); amountA = liquidity * reserveA / _totalSupply; // using balances ensures pro-rata distribution amountB = liquidity * reserveB / _totalSupply; // using balances ensures pro-rata distribution } function _addLiquidity( address tokenA, address tokenB, bool stable, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin ) internal returns (uint amountA, uint amountB) { require(amountADesired >= amountAMin, "Equalizer Router: invalid desired amountA"); require(amountBDesired >= amountBMin, "Equalizer Router: invalid desired amountB"); // create the pair if it doesn't exist yet address _pair = IPairFactory(factory).getPair(tokenA, tokenB, stable); if (_pair == address(0)) { _pair = IPairFactory(factory).createPair(tokenA, tokenB, stable); } (uint reserveA, uint reserveB) = getReserves(tokenA, tokenB, stable); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); } else { uint amountBOptimal = quoteLiquidity(amountADesired, reserveA, reserveB); if (amountBOptimal <= amountBDesired) { require(amountBOptimal >= amountBMin, 'Equalizer Router: INSUFFICIENT_B_AMOUNT'); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint amountAOptimal = quoteLiquidity(amountBDesired, reserveB, reserveA); assert(amountAOptimal <= amountADesired); require(amountAOptimal >= amountAMin, 'Equalizer Router: INSUFFICIENT_A_AMOUNT'); (amountA, amountB) = (amountAOptimal, amountBDesired); } } } function addLiquidity( address tokenA, address tokenB, bool stable, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) { (amountA, amountB) = _addLiquidity(tokenA, tokenB, stable, amountADesired, amountBDesired, amountAMin, amountBMin); address pair = pairFor(tokenA, tokenB, stable); _safeTransferFrom(tokenA, msg.sender, pair, amountA); _safeTransferFrom(tokenB, msg.sender, pair, amountB); { // sub-scope interactions address _gauge = voter.gauges(pair); if(_gauge == address(0)) { liquidity = IPair(pair).mint(to); } else { liquidity = IPair(pair).mint(address(this)); if(IERC20(pair).allowance(address(this),_gauge) < liquidity) { IERC20(pair).approve(_gauge,type(uint256).max); } IGaugeEquivalent(_gauge).depositAllFor(to); } } } function addLiquidityETH( address token, bool stable, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) { (amountToken, amountETH) = _addLiquidity( token, address(weth), stable, amountTokenDesired, msg.value, amountTokenMin, amountETHMin ); address pair = pairFor(token, address(weth), stable); _safeTransferFrom(token, msg.sender, pair, amountToken); weth.deposit{value: amountETH}(); assert(weth.transfer(pair, amountETH)); { // sub-scope interactions address _gauge = voter.gauges(pair); if(_gauge == address(0)) { liquidity = IPair(pair).mint(to); } else { liquidity = IPair(pair).mint(address(this)); if(IERC20(pair).allowance(address(this),_gauge) < liquidity) { IERC20(pair).approve(_gauge,type(uint256).max); } IGaugeEquivalent(_gauge).depositAllFor(to); } } // refund dust eth, if any if (msg.value > amountETH) _safeTransferETH(msg.sender, msg.value - amountETH); } // @dev **** REMOVE LIQUIDITY **** function removeLiquidity( address tokenA, address tokenB, bool stable, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) public ensure(deadline) returns (uint amountA, uint amountB) { address pair = pairFor(tokenA, tokenB, stable); require(IPair(pair).transferFrom(msg.sender, pair, liquidity), "Equalizer Router: liquidity transfer failed"); // send liquidity to pair (uint amount0, uint amount1) = IPair(pair).burn(to); (address token0,) = sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require(amountA >= amountAMin, 'Equalizer Router: INSUFFICIENT_A_AMOUNT'); require(amountB >= amountBMin, 'Equalizer Router: INSUFFICIENT_B_AMOUNT'); } function removeLiquidityETH( address token, bool stable, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) public ensure(deadline) returns (uint amountToken, uint amountETH) { (amountToken, amountETH) = removeLiquidity( token, address(weth), stable, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); _safeTransfer(token, to, amountToken); weth.withdraw(amountETH); _safeTransferETH(to, amountETH); } function removeLiquidityWithPermit( address tokenA, address tokenB, bool stable, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB) { address pair = pairFor(tokenA, tokenB, stable); { uint value = approveMax ? type(uint).max : liquidity; IPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); } (amountA, amountB) = removeLiquidity(tokenA, tokenB, stable, liquidity, amountAMin, amountBMin, to, deadline); } function removeLiquidityETHWithPermit( address token, bool stable, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH) { address pair = pairFor(token, address(weth), stable); uint value = approveMax ? type(uint).max : liquidity; IPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); (amountToken, amountETH) = removeLiquidityETH(token, stable, liquidity, amountTokenMin, amountETHMin, to, deadline); } // @dev **** SWAP **** // requires the initial amount to have already been sent to the first pair function _swap(uint[] memory amounts, Route[] memory routes, address _to) internal virtual { for (uint i = 0; i < routes.length; i++) { (address token0,) = sortTokens(routes[i].from, routes[i].to); uint amountOut = amounts[i + 1]; (uint amount0Out, uint amount1Out) = routes[i].from == token0 ? (uint(0), amountOut) : (amountOut, uint(0)); address to = i < routes.length - 1 ? pairFor(routes[i+1].from, routes[i+1].to, routes[i+1].stable) : _to; IPair(pairFor(routes[i].from, routes[i].to, routes[i].stable)).swap( amount0Out, amount1Out, to, new bytes(0) ); } } function swapExactTokensForTokensSimple( uint amountIn, uint amountOutMin, address tokenFrom, address tokenTo, bool stable, address to, uint deadline ) external ensure(deadline) returns (uint[] memory amounts) { Route[] memory routes = new Route[](1); routes[0].from = tokenFrom; routes[0].to = tokenTo; routes[0].stable = stable; amounts = getAmountsOut(amountIn, routes); require(amounts[amounts.length - 1] >= amountOutMin, 'Equalizer Router: INSUFFICIENT_OUTPUT_AMOUNT'); _safeTransferFrom( routes[0].from, msg.sender, pairFor(routes[0].from, routes[0].to, routes[0].stable), amounts[0] ); _swap(amounts, routes, to); } function swapExactTokensForTokens( uint amountIn, uint amountOutMin, Route[] calldata routes, address to, uint deadline ) external ensure(deadline) returns (uint[] memory amounts) { amounts = getAmountsOut(amountIn, routes); require(amounts[amounts.length - 1] >= amountOutMin, 'Equalizer Router: INSUFFICIENT_OUTPUT_AMOUNT'); _safeTransferFrom( routes[0].from, msg.sender, pairFor(routes[0].from, routes[0].to, routes[0].stable), amounts[0] ); _swap(amounts, routes, to); } function swapExactETHForTokens(uint amountOutMin, Route[] calldata routes, address to, uint deadline) external payable ensure(deadline) returns (uint[] memory amounts) { require(routes[0].from == address(weth), 'Equalizer Router: INVALID_PATH'); amounts = getAmountsOut(msg.value, routes); require(amounts[amounts.length - 1] >= amountOutMin, 'Equalizer Router: INSUFFICIENT_OUTPUT_AMOUNT'); weth.deposit{value: amounts[0]}(); assert(weth.transfer(pairFor(routes[0].from, routes[0].to, routes[0].stable), amounts[0])); _swap(amounts, routes, to); } function swapExactTokensForETH(uint amountIn, uint amountOutMin, Route[] calldata routes, address to, uint deadline) external ensure(deadline) returns (uint[] memory amounts) { require(routes[routes.length - 1].to == address(weth), 'Equalizer Router: INVALID_PATH'); amounts = getAmountsOut(amountIn, routes); require(amounts[amounts.length - 1] >= amountOutMin, 'Equalizer Router: INSUFFICIENT_OUTPUT_AMOUNT'); _safeTransferFrom( routes[0].from, msg.sender, pairFor(routes[0].from, routes[0].to, routes[0].stable), amounts[0] ); _swap(amounts, routes, address(this)); weth.withdraw(amounts[amounts.length - 1]); _safeTransferETH(to, amounts[amounts.length - 1]); } function UNSAFE_swapExactTokensForTokens( uint[] memory amounts, Route[] calldata routes, address to, uint deadline ) external ensure(deadline) returns (uint[] memory) { _safeTransferFrom(routes[0].from, msg.sender, pairFor(routes[0].from, routes[0].to, routes[0].stable), amounts[0]); _swap(amounts, routes, to); return amounts; } /*************************************************************************************************************************** *************************************************************************************************************************** ** Experimental Extension [ftm.guru/solidly/BaseV1Router02] *************************************************************************************************************************** */ // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens)**** function removeLiquidityETHSupportingFeeOnTransferTokens( address token, bool stable, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) public ensure(deadline) returns (uint amountToken, uint amountETH) { (amountToken, amountETH) = removeLiquidity( token, address(weth), stable, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); _safeTransfer(token, to, IERC20(token).balanceOf(address(this))); weth.withdraw(amountETH); _safeTransferETH(to, amountETH); } function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, bool stable, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH) { address pair = pairFor(token, address(weth), stable); uint value = approveMax ? type(uint).max : liquidity; IPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); (amountToken, amountETH) = removeLiquidityETHSupportingFeeOnTransferTokens( token, stable, liquidity, amountTokenMin, amountETHMin, to, deadline ); } // **** SWAP (supporting fee-on-transfer tokens) **** // requires the initial amount to have already been sent to the first pair function _swapSupportingFeeOnTransferTokens(Route[] calldata routes, address _to) internal virtual { for (uint i; i < routes.length; i++) { //(address input, address output) = (routes[i].from, routes[i].to); (address token0,) = sortTokens(routes[i].from, routes[i].to); IPair pair = IPair(pairFor(routes[i].from, routes[i].to, routes[i].stable)); uint amountInput; uint amountOutput; { // scope to avoid stack too deep errors (uint reserve0, uint reserve1,) = pair.getReserves(); (uint reserveInput,) = routes[i].from == token0 ? (reserve0, reserve1) : (reserve1, reserve0); amountInput = IERC20(routes[i].from).balanceOf(address(pair)) - (reserveInput); amountOutput = getAmountOut(amountInput, routes[i].from, routes[i].to, routes[i].stable); } (uint amount0Out, uint amount1Out) = routes[i].from == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0)); address to = i < routes.length - 1 ? pairFor(routes[i+1].from, routes[i+1].to, routes[i+1].stable) : _to; pair.swap(amount0Out, amount1Out, to, new bytes(0)); } } function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, Route[] calldata routes, address to, uint deadline ) external ensure(deadline) { _safeTransferFrom( routes[0].from, msg.sender, pairFor(routes[0].from, routes[0].to, routes[0].stable), amountIn ); uint balanceBefore = IERC20(routes[routes.length - 1].to).balanceOf(to); _swapSupportingFeeOnTransferTokens(routes, to); require( IERC20(routes[routes.length - 1].to).balanceOf(to) - (balanceBefore) >= amountOutMin, 'Equalizer Router: INSUFFICIENT_OUTPUT_AMOUNT' ); } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, Route[] calldata routes, address to, uint deadline ) external payable ensure(deadline) { require(routes[0].from == address(weth), 'Equalizer Router: INVALID_PATH'); uint amountIn = msg.value; weth.deposit{value: amountIn}(); assert(weth.transfer(pairFor(routes[0].from, routes[0].to, routes[0].stable), amountIn)); uint balanceBefore = IERC20(routes[routes.length - 1].to).balanceOf(to); _swapSupportingFeeOnTransferTokens(routes, to); require( IERC20(routes[routes.length - 1].to).balanceOf(to) - (balanceBefore) >= amountOutMin, 'Equalizer Router: INSUFFICIENT_OUTPUT_AMOUNT' ); } function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, Route[] calldata routes, address to, uint deadline ) external ensure(deadline) { require(routes[routes.length - 1].to == address(weth), 'Equalizer Router: INVALID_PATH'); _safeTransferFrom( routes[0].from, msg.sender, pairFor(routes[0].from, routes[0].to, routes[0].stable), amountIn ); _swapSupportingFeeOnTransferTokens(routes, address(this)); uint amountOut = IERC20(address(weth)).balanceOf(address(this)); require(amountOut >= amountOutMin, 'Equalizer Router: INSUFFICIENT_OUTPUT_AMOUNT'); weth.withdraw(amountOut); _safeTransferETH(to, amountOut); } // Internal helper Functions function _safeTransferETH(address to, uint value) internal { (bool success,) = to.call{value:value}(new bytes(0)); require(success, 'TransferHelper: ETH_TRANSFER_FAILED'); } function _safeTransfer(address token, address to, uint256 value) internal { require(token.code.length > 0, "Equalizer Router: invalid token contract"); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.transfer.selector, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), "Equalizer Router: safeTransfer failed"); } function _safeTransferFrom(address token, address from, address to, uint256 value) internal { require(token.code.length > 0, "Equalizer Router: invalid token contract"); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), "Equalizer Router: safeTransferFrom failed"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_weth","type":"address"},{"internalType":"address","name":"_voter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"internalType":"struct Router03.Route[]","name":"routes","type":"tuple[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"UNSAFE_swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"stable","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"internalType":"struct Router03.Route[]","name":"routes","type":"tuple[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"name":"getReserves","outputs":[{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairCodeHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"name":"pairFor","outputs":[{"internalType":"address","name":"pair","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"}],"name":"quoteAddLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"quoteRemoveLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"sortTokens","outputs":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"internalType":"struct Router03.Route[]","name":"routes","type":"tuple[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"internalType":"struct Router03.Route[]","name":"routes","type":"tuple[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"internalType":"struct Router03.Route[]","name":"routes","type":"tuple[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"internalType":"struct Router03.Route[]","name":"routes","type":"tuple[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"internalType":"struct Router03.Route[]","name":"routes","type":"tuple[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address","name":"tokenFrom","type":"address"},{"internalType":"address","name":"tokenTo","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSimple","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"internalType":"struct Router03.Route[]","name":"routes","type":"tuple[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"voter","outputs":[{"internalType":"contract IVoter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6101006040523480156200001257600080fd5b50604051620053f0380380620053f08339810160408190526200003591620000ef565b6001600160a01b038316608081905260408051631355724960e31b81529051639aab924891600480820192602092909190829003018186803b1580156200007b57600080fd5b505afa15801562000090573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b6919062000139565b60c0526001600160a01b0391821660a0521660e0525062000153565b80516001600160a01b0381168114620000ea57600080fd5b919050565b6000806000606084860312156200010557600080fd5b6200011084620000d2565b92506200012060208501620000d2565b91506200013060408501620000d2565b90509250925092565b6000602082840312156200014c57600080fd5b5051919050565b60805160a05160c05160e05161517c620002746000396000818161032f015281816112910152612b9d015260006105190152600081816101d6015281816102a301528181610aef01528181610d2e01528181610f9d0152818161191101528181611a2401528181611ab201528181611f5f01528181611fdd015281816120510152818161226f01528181612322015281816123dc015281816129ef01528181612a2501528181612a5a01528181612aef01528181612ee401528181612f34015281816130f7015261339e01526000818161058e01528181610e1401528181611085015281816115cd015281816116ff01528181612560015281816126f201528181612fdf015281816131cd015281816139b50152613a65015261517c6000f3fe6080604052600436106101c65760003560e01c80637301e3c8116100f7578063b7e0d4c011610095578063e2d9d4dc11610064578063e2d9d4dc146105f0578063e5e31b1314610610578063f41766d814610640578063fe411f141461066057600080fd5b8063b7e0d4c014610569578063c45a01551461057c578063d7b0e0a5146105b0578063da214231146105d057600080fd5b80639881fcb4116100d15780639881fcb4146104c757806398a0fb3c146104e75780639aab924814610507578063a32b1fcd1461054957600080fd5b80637301e3c81461047457806376c72751146104945780637af728c8146104a757600080fd5b80634c1ee03e116101645780635e1e63251161013e5780635e1e6325146103ec5780635e60dab51461042157806367ffb66a146104415780636cc1ae131461045457600080fd5b80634c1ee03e14610351578063544caa56146103715780635a47ddc3146103b157600080fd5b80633fc8cef3116101a05780633fc8cef3146102915780634386e63c146102dd578063448725b4146102fd57806346c96aac1461031d57600080fd5b80630dede6c41461020a57806313dcfc591461024457806318a130861461027157600080fd5b3661020557336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610203576102036143d4565b005b600080fd5b34801561021657600080fd5b5061022a610225366004614420565b610680565b604080519283526020830191909152015b60405180910390f35b34801561025057600080fd5b5061026461025f3660046144a5565b6108af565b60405161023b9190614520565b34801561027d57600080fd5b5061026461028c3660046145a9565b610ac2565b34801561029d57600080fd5b506102c57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161023b565b3480156102e957600080fd5b5061022a6102f836600461461c565b610e0d565b34801561030957600080fd5b5061022a61031836600461467e565b610f92565b34801561032957600080fd5b506102c57f000000000000000000000000000000000000000000000000000000000000000081565b34801561035d57600080fd5b506102c561036c366004614728565b61106b565b34801561037d57600080fd5b5061039161038c366004614773565b611116565b604080516001600160a01b0393841681529290911660208301520161023b565b3480156103bd57600080fd5b506103d16103cc3660046147ac565b61120e565b6040805193845260208401929092529082015260600161023b565b3480156103f857600080fd5b5061040c61040736600461483b565b611595565b6040805192835290151560208301520161023b565b34801561042d57600080fd5b5061022a61043c366004614728565b611825565b61026461044f366004614872565b6118ec565b34801561046057600080fd5b5061020361046f3660046145a9565b611c5a565b34801561048057600080fd5b5061026461048f366004614944565b611e66565b6102036104a2366004614872565b611f3c565b3480156104b357600080fd5b506102036104c23660046145a9565b612244565b3480156104d357600080fd5b506102646104e2366004614a86565b61244a565b3480156104f357600080fd5b506103d1610502366004614b2c565b6126ea565b34801561051357600080fd5b5061053b7f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161023b565b34801561055557600080fd5b5061022a610564366004614b87565b612908565b6103d1610577366004614c43565b6129c3565b34801561058857600080fd5b506102c57f000000000000000000000000000000000000000000000000000000000000000081565b3480156105bc57600080fd5b5061022a6105cb366004614c43565b612eba565b3480156105dc57600080fd5b5061053b6105eb366004614c9e565b612faf565b3480156105fc57600080fd5b5061022a61060b36600461467e565b6130ec565b34801561061c57600080fd5b5061063061062b366004614cf1565b6131ab565b604051901515815260200161023b565b34801561064c57600080fd5b5061026461065b3660046145a9565b61324f565b34801561066c57600080fd5b5061022a61067b366004614c43565b613374565b60008082428110156106ad5760405162461bcd60e51b81526004016106a490614d0e565b60405180910390fd5b60006106ba8c8c8c61106b565b6040516323b872dd60e01b81523360048201526001600160a01b03821660248201819052604482018c90529192506323b872dd90606401602060405180830381600087803b15801561070b57600080fd5b505af115801561071f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107439190614d45565b6107a35760405162461bcd60e51b815260206004820152602b60248201527f457175616c697a657220526f757465723a206c6971756964697479207472616e60448201526a1cd9995c8819985a5b195960aa1b60648201526084016106a4565b60405163226bf2d160e21b81526001600160a01b03878116600483015260009182918416906389afcb44906024016040805180830381600087803b1580156107ea57600080fd5b505af11580156107fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108229190614d62565b9150915060006108328f8f611116565b509050806001600160a01b03168f6001600160a01b031614610855578183610858565b82825b90975095508a87101561087d5760405162461bcd60e51b81526004016106a490614d86565b8986101561089d5760405162461bcd60e51b81526004016106a490614dcd565b50505050509850989650505050505050565b606081428110156108d25760405162461bcd60e51b81526004016106a490614d0e565b604080516001808252818301909252600091816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816108e9579050509050878160008151811061092c5761092c614e14565b6020026020010151600001906001600160a01b031690816001600160a01b031681525050868160008151811061096457610964614e14565b6020026020010151602001906001600160a01b031690816001600160a01b031681525050858160008151811061099c5761099c614e14565b60209081029190910101519015156040909101526109ba8a8261244a565b92508883600185516109cc9190614e40565b815181106109dc576109dc614e14565b60200260200101511015610a025760405162461bcd60e51b81526004016106a490614e57565b610aaa81600081518110610a1857610a18614e14565b60200260200101516000015133610a8a84600081518110610a3b57610a3b614e14565b60200260200101516000015185600081518110610a5a57610a5a614e14565b60200260200101516020015186600081518110610a7957610a79614e14565b60200260200101516040015161106b565b86600081518110610a9d57610a9d614e14565b6020026020010151613451565b610ab58382876135b1565b5050979650505050505050565b60608142811015610ae55760405162461bcd60e51b81526004016106a490614d0e565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686610b1c600182614e40565b818110610b2b57610b2b614e14565b9050606002016020016020810190610b439190614cf1565b6001600160a01b031614610b695760405162461bcd60e51b81526004016106a490614ea3565b610bc5888787808060200260200160405190810160405280939291908181526020016000905b82821015610bbb57610bac60608302860136819003810190614eda565b81526020019060010190610b8f565b505050505061244a565b9150868260018451610bd79190614e40565b81518110610be757610be7614e14565b60200260200101511015610c0d5760405162461bcd60e51b81526004016106a490614e57565b610ccf86866000818110610c2357610c23614e14565b610c399260206060909202019081019150614cf1565b33610cbc89896000818110610c5057610c50614e14565b610c669260206060909202019081019150614cf1565b8a8a6000818110610c7957610c79614e14565b9050606002016020016020810190610c919190614cf1565b8b8b6000818110610ca457610ca4614e14565b905060600201604001602081019061036c9190614ef6565b85600081518110610a9d57610a9d614e14565b610d2c828787808060200260200160405190810160405280939291908181526020016000905b82821015610d2157610d1260608302860136819003810190614eda565b81526020019060010190610cf5565b5050505050306135b1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551610d6a9190614e40565b81518110610d7a57610d7a614e14565b60200260200101516040518263ffffffff1660e01b8152600401610da091815260200190565b600060405180830381600087803b158015610dba57600080fd5b505af1158015610dce573d6000803e3d6000fd5b50505050610e02848360018551610de59190614e40565b81518110610df557610df5614e14565b6020026020010151613806565b509695505050505050565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636801cc308888886040518463ffffffff1660e01b8152600401610e6293929190614f13565b60206040518083038186803b158015610e7a57600080fd5b505afa158015610e8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb29190614f37565b90506001600160a01b038116610ecf576000809250925050610f89565b600080610edd898989611825565b915091506000836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f1c57600080fd5b505afa158015610f30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f549190614f54565b905080610f618489614f6d565b610f6b9190614fa2565b955080610f788389614f6d565b610f829190614fa2565b9450505050505b94509492505050565b6000806000610fc28e7f00000000000000000000000000000000000000000000000000000000000000008f61106b565b9050600087610fd1578c610fd5565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90611010903390309086908f908e908e908e90600401614fc4565b600060405180830381600087803b15801561102a57600080fd5b505af115801561103e573d6000803e3d6000fd5b505050506110518f8f8f8f8f8f8f612eba565b809450819550505050509b509b9950505050505050505050565b6040516306801cc360e41b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636801cc30906110be90879087908790600401614f13565b60206040518083038186803b1580156110d657600080fd5b505afa1580156110ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110e9190614f37565b949350505050565b600080826001600160a01b0316846001600160a01b031614156111895760405162461bcd60e51b815260206004820152602560248201527f457175616c697a657220526f757465723a204944454e544943414c5f41444452604482015264455353455360d81b60648201526084016106a4565b826001600160a01b0316846001600160a01b0316106111a95782846111ac565b83835b90925090506001600160a01b0382166112075760405162461bcd60e51b815260206004820152601e60248201527f457175616c697a657220526f757465723a205a45524f5f41444452455353000060448201526064016106a4565b9250929050565b600080600083428110156112345760405162461bcd60e51b81526004016106a490614d0e565b6112438d8d8d8d8d8d8d6138d4565b909450925060006112558e8e8e61106b565b90506112638e338388613451565b61126f8d338387613451565b60405163b9a09fd560e01b81526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063b9a09fd59060240160206040518083038186803b1580156112d557600080fd5b505afa1580156112e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130d9190614f37565b90506001600160a01b03811661139f576040516335313c2160e11b81526001600160a01b038981166004830152831690636a62784290602401602060405180830381600087803b15801561136057600080fd5b505af1158015611374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113989190614f54565b9350611583565b6040516335313c2160e11b81523060048201526001600160a01b03831690636a62784290602401602060405180830381600087803b1580156113e057600080fd5b505af11580156113f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114189190614f54565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152919550859184169063dd62ed3e9060440160206040518083038186803b15801561146457600080fd5b505afa158015611478573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149c9190614f54565b10156115275760405163095ea7b360e01b81526001600160a01b038281166004830152600019602483015283169063095ea7b390604401602060405180830381600087803b1580156114ed57600080fd5b505af1158015611501573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115259190614d45565b505b604051633010d8ef60e01b81526001600160a01b038981166004830152821690633010d8ef90602401600060405180830381600087803b15801561156a57600080fd5b505af115801561157e573d6000803e3d6000fd5b505050505b50505099509950999650505050505050565b60008060006115a68585600161106b565b60405163e5e31b1360e01b81526001600160a01b03828116600483015291925060009182917f00000000000000000000000000000000000000000000000000000000000000009091169063e5e31b139060240160206040518083038186803b15801561161157600080fd5b505afa158015611625573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116499190614d45565b156116d1576040516378a051ad60e11b8152600481018990526001600160a01b03888116602483015284169063f140a35a9060440160206040518083038186803b15801561169657600080fd5b505afa1580156116aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ce9190614f54565b91505b6116dd8787600061106b565b60405163e5e31b1360e01b81526001600160a01b0380831660048301529194507f00000000000000000000000000000000000000000000000000000000000000009091169063e5e31b139060240160206040518083038186803b15801561174357600080fd5b505afa158015611757573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177b9190614d45565b15611803576040516378a051ad60e11b8152600481018990526001600160a01b03888116602483015284169063f140a35a9060440160206040518083038186803b1580156117c857600080fd5b505afa1580156117dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118009190614f54565b90505b80821161181257806000611816565b8160015b94509450505050935093915050565b60008060006118348686611116565b50905060008061184588888861106b565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561187d57600080fd5b505afa158015611891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b59190615005565b5091509150826001600160a01b0316886001600160a01b0316146118da5780826118dd565b81815b90999098509650505050505050565b6060814281101561190f5760405162461bcd60e51b81526004016106a490614d0e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168686600081811061194c5761194c614e14565b6119629260206060909202019081019150614cf1565b6001600160a01b0316146119885760405162461bcd60e51b81526004016106a490614ea3565b6119da348787808060200260200160405190810160405280939291908181526020016000905b82821015610bbb576119cb60608302860136819003810190614eda565b815260200190600101906119ae565b91508682600184516119ec9190614e40565b815181106119fc576119fc614e14565b60200260200101511015611a225760405162461bcd60e51b81526004016106a490614e57565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611a6457611a64614e14565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611a9757600080fd5b505af1158015611aab573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611b4988886000818110611af557611af5614e14565b611b0b9260206060909202019081019150614cf1565b89896000818110611b1e57611b1e614e14565b9050606002016020016020810190611b369190614cf1565b8a8a6000818110610ca457610ca4614e14565b84600081518110611b5c57611b5c614e14565b60200260200101516040518363ffffffff1660e01b8152600401611b959291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b158015611baf57600080fd5b505af1158015611bc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be79190614d45565b611bf357611bf36143d4565b611c50828787808060200260200160405190810160405280939291908181526020016000905b82821015611c4557611c3660608302860136819003810190614eda565b81526020019060010190611c19565b5050505050866135b1565b5095945050505050565b8042811015611c7b5760405162461bcd60e51b81526004016106a490614d0e565b611cc485856000818110611c9157611c91614e14565b611ca79260206060909202019081019150614cf1565b33611cbe88886000818110611af557611af5614e14565b8a613451565b60008585611cd3600182614e40565b818110611ce257611ce2614e14565b9050606002016020016020810190611cfa9190614cf1565b6040516370a0823160e01b81526001600160a01b03868116600483015291909116906370a082319060240160206040518083038186803b158015611d3d57600080fd5b505afa158015611d51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d759190614f54565b9050611d82868686613bba565b86818787611d91600182614e40565b818110611da057611da0614e14565b9050606002016020016020810190611db89190614cf1565b6040516370a0823160e01b81526001600160a01b03888116600483015291909116906370a08231906024015b60206040518083038186803b158015611dfc57600080fd5b505afa158015611e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e349190614f54565b611e3e9190614e40565b1015611e5c5760405162461bcd60e51b81526004016106a490614e57565b5050505050505050565b60608142811015611e895760405162461bcd60e51b81526004016106a490614d0e565b611edf86866000818110611e9f57611e9f614e14565b611eb59260206060909202019081019150614cf1565b33611ecc89896000818110610c5057610c50614e14565b8a600081518110610a9d57610a9d614e14565b611f31878787808060200260200160405190810160405280939291908181526020016000905b82821015611c4557611f2260608302860136819003810190614eda565b81526020019060010190611f05565b509495945050505050565b8042811015611f5d5760405162461bcd60e51b81526004016106a490614d0e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031685856000818110611f9a57611f9a614e14565b611fb09260206060909202019081019150614cf1565b6001600160a01b031614611fd65760405162461bcd60e51b81526004016106a490614ea3565b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561203657600080fd5b505af115801561204a573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61209488886000818110611af557611af5614e14565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b1580156120dc57600080fd5b505af11580156120f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121149190614d45565b612120576121206143d4565b6000868661212f600182614e40565b81811061213e5761213e614e14565b90506060020160200160208101906121569190614cf1565b6040516370a0823160e01b81526001600160a01b03878116600483015291909116906370a082319060240160206040518083038186803b15801561219957600080fd5b505afa1580156121ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d19190614f54565b90506121de878787613bba565b878188886121ed600182614e40565b8181106121fc576121fc614e14565b90506060020160200160208101906122149190614cf1565b6040516370a0823160e01b81526001600160a01b03898116600483015291909116906370a0823190602401611de4565b80428110156122655760405162461bcd60e51b81526004016106a490614d0e565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016858561229c600182614e40565b8181106122ab576122ab614e14565b90506060020160200160208101906122c39190614cf1565b6001600160a01b0316146122e95760405162461bcd60e51b81526004016106a490614ea3565b6122ff85856000818110611c9157611c91614e14565b61230a858530613bba565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561236c57600080fd5b505afa158015612380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a49190614f54565b9050868110156123c65760405162461bcd60e51b81526004016106a490614e57565b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561242857600080fd5b505af115801561243c573d6000803e3d6000fd5b50505050611e5c8482613806565b606060018251101561246e5760405162461bcd60e51b81526004016106a490614ea3565b815161247b906001615033565b67ffffffffffffffff811115612493576124936148d9565b6040519080825280602002602001820160405280156124bc578160200160208202803683370190505b50905082816000815181106124d3576124d3614e14565b60200260200101818152505060005b82518110156126e357600061253e84838151811061250257612502614e14565b60200260200101516000015185848151811061252057612520614e14565b602002602001015160200151868581518110610a7957610a79614e14565b60405163e5e31b1360e01b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063e5e31b139060240160206040518083038186803b1580156125a457600080fd5b505afa1580156125b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125dc9190614d45565b156126d057806001600160a01b031663f140a35a84848151811061260257612602614e14565b602002602001015186858151811061261c5761261c614e14565b6020026020010151600001516040518363ffffffff1660e01b81526004016126579291909182526001600160a01b0316602082015260400190565b60206040518083038186803b15801561266f57600080fd5b505afa158015612683573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a79190614f54565b836126b3846001615033565b815181106126c3576126c3614e14565b6020026020010181815250505b50806126db8161504b565b9150506124e2565b5092915050565b6000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636801cc308a8a8a6040518463ffffffff1660e01b815260040161274093929190614f13565b60206040518083038186803b15801561275857600080fd5b505afa15801561276c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127909190614f37565b9050600080806001600160a01b0384161561282957836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156127de57600080fd5b505afa1580156127f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128169190614f54565b90506128238c8c8c611825565b90935091505b82158015612835575081155b15612866578896508795506103e8612855612850888a614f6d565b61400a565b61285f9190614e40565b94506128f9565b60006128738a85856140f6565b90508881116128bb578997509550856128b484612890848b614f6d565b61289a9190614fa2565b846128a5858b614f6d565b6128af9190614fa2565b6141d7565b95506128f7565b60006128c88a85876140f6565b98508997508890506128f3856128de8584614f6d565b6128e89190614fa2565b856128a5868c614f6d565b9650505b505b50505050955095509592505050565b60008060006129188f8f8f61106b565b9050600087612927578c61292b565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90612966903390309086908f908e908e908e90600401614fc4565b600060405180830381600087803b15801561298057600080fd5b505af1158015612994573d6000803e3d6000fd5b50505050506129a98f8f8f8f8f8f8f8f610680565b8093508194505050509c509c9a5050505050505050505050565b600080600083428110156129e95760405162461bcd60e51b81526004016106a490614d0e565b612a188b7f00000000000000000000000000000000000000000000000000000000000000008c8c348d8d6138d4565b90945092506000612a4a8c7f00000000000000000000000000000000000000000000000000000000000000008d61106b565b9050612a588c338388613451565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612ab357600080fd5b505af1158015612ac7573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038581166004830152602482018990527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b158015612b3757600080fd5b505af1158015612b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b6f9190614d45565b612b7b57612b7b6143d4565b60405163b9a09fd560e01b81526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063b9a09fd59060240160206040518083038186803b158015612be157600080fd5b505afa158015612bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c199190614f37565b90506001600160a01b038116612cab576040516335313c2160e11b81526001600160a01b038981166004830152831690636a62784290602401602060405180830381600087803b158015612c6c57600080fd5b505af1158015612c80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca49190614f54565b9350612e8f565b6040516335313c2160e11b81523060048201526001600160a01b03831690636a62784290602401602060405180830381600087803b158015612cec57600080fd5b505af1158015612d00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d249190614f54565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152919550859184169063dd62ed3e9060440160206040518083038186803b158015612d7057600080fd5b505afa158015612d84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612da89190614f54565b1015612e335760405163095ea7b360e01b81526001600160a01b038281166004830152600019602483015283169063095ea7b390604401602060405180830381600087803b158015612df957600080fd5b505af1158015612e0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e319190614d45565b505b604051633010d8ef60e01b81526001600160a01b038981166004830152821690633010d8ef90602401600060405180830381600087803b158015612e7657600080fd5b505af1158015612e8a573d6000803e3d6000fd5b505050505b5083341115612eab57612eab33612ea68634614e40565b613806565b50509750975097945050505050565b6000808242811015612ede5760405162461bcd60e51b81526004016106a490614d0e565b612f0e8a7f00000000000000000000000000000000000000000000000000000000000000008b8b8b8b308b610680565b9093509150612f1e8a86856141ed565b604051632e1a7d4d60e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b158015612f8057600080fd5b505af1158015612f94573d6000803e3d6000fd5b50505050612fa28583613806565b5097509795505050505050565b600080612fbd85858561106b565b60405163e5e31b1360e01b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063e5e31b139060240160206040518083038186803b15801561302357600080fd5b505afa158015613037573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305b9190614d45565b156130e3576040516378a051ad60e11b8152600481018790526001600160a01b03868116602483015282169063f140a35a9060440160206040518083038186803b1580156130a857600080fd5b505afa1580156130bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e09190614f54565b91505b50949350505050565b600080600061311c8e7f00000000000000000000000000000000000000000000000000000000000000008f61106b565b905060008761312b578c61312f565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf9061316a903390309086908f908e908e908e90600401614fc4565b600060405180830381600087803b15801561318457600080fd5b505af1158015613198573d6000803e3d6000fd5b505050506110518f8f8f8f8f8f8f613374565b60405163e5e31b1360e01b81526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e5e31b139060240160206040518083038186803b15801561321157600080fd5b505afa158015613225573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132499190614d45565b92915050565b606081428110156132725760405162461bcd60e51b81526004016106a490614d0e565b6132c4888787808060200260200160405190810160405280939291908181526020016000905b82821015610bbb576132b560608302860136819003810190614eda565b81526020019060010190613298565b91508682600184516132d69190614e40565b815181106132e6576132e6614e14565b6020026020010151101561330c5760405162461bcd60e51b81526004016106a490614e57565b61332286866000818110610c2357610c23614e14565b610e02828787808060200260200160405190810160405280939291908181526020016000905b82821015611c455761336560608302860136819003810190614eda565b81526020019060010190613348565b60008082428110156133985760405162461bcd60e51b81526004016106a490614d0e565b6133c88a7f00000000000000000000000000000000000000000000000000000000000000008b8b8b8b308b610680565b6040516370a0823160e01b81523060048201529194509250612f1e908b9087906001600160a01b038316906370a082319060240160206040518083038186803b15801561341457600080fd5b505afa158015613428573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061344c9190614f54565b6141ed565b6000846001600160a01b03163b1161347b5760405162461bcd60e51b81526004016106a490615066565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916134df91906150da565b6000604051808303816000865af19150503d806000811461351c576040519150601f19603f3d011682016040523d82523d6000602084013e613521565b606091505b509150915081801561354b57508051158061354b57508080602001905181019061354b9190614d45565b6135a95760405162461bcd60e51b815260206004820152602960248201527f457175616c697a657220526f757465723a20736166655472616e7366657246726044820152681bdb4819985a5b195960ba1b60648201526084016106a4565b505050505050565b60005b82518110156138005760006136038483815181106135d4576135d4614e14565b6020026020010151600001518584815181106135f2576135f2614e14565b602002602001015160200151611116565b509050600085613614846001615033565b8151811061362457613624614e14565b60200260200101519050600080836001600160a01b031687868151811061364d5761364d614e14565b6020026020010151600001516001600160a01b03161461366f57826000613673565b6000835b915091506000600188516136879190614e40565b86106136935786613706565b613706886136a2886001615033565b815181106136b2576136b2614e14565b602002602001015160000151898860016136cc9190615033565b815181106136dc576136dc614e14565b6020026020010151602001518a8960016136f69190615033565b81518110610a7957610a79614e14565b905061375988878151811061371d5761371d614e14565b60200260200101516000015189888151811061373b5761373b614e14565b6020026020010151602001518a8981518110610a7957610a79614e14565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613796576020820181803683370190505b506040518563ffffffff1660e01b81526004016137b694939291906150f6565b600060405180830381600087803b1580156137d057600080fd5b505af11580156137e4573d6000803e3d6000fd5b50505050505050505080806137f89061504b565b9150506135b4565b50505050565b604080516000808252602082019092526001600160a01b03841690839060405161383091906150da565b60006040518083038185875af1925050503d806000811461386d576040519150601f19603f3d011682016040523d82523d6000602084013e613872565b606091505b50509050806138cf5760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b60648201526084016106a4565b505050565b600080838610156139395760405162461bcd60e51b815260206004820152602960248201527f457175616c697a657220526f757465723a20696e76616c6964206465736972656044820152686420616d6f756e744160b81b60648201526084016106a4565b8285101561399b5760405162461bcd60e51b815260206004820152602960248201527f457175616c697a657220526f757465723a20696e76616c696420646573697265604482015268321030b6b7bab73a2160b91b60648201526084016106a4565b6040516306801cc360e41b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636801cc30906139ee908d908d908d90600401614f13565b60206040518083038186803b158015613a0657600080fd5b505afa158015613a1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a3e9190614f37565b90506001600160a01b038116613af3576040516320b7f73960e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906382dfdce490613a9e908d908d908d90600401614f13565b602060405180830381600087803b158015613ab857600080fd5b505af1158015613acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613af09190614f37565b90505b600080613b018c8c8c611825565b91509150816000148015613b13575080155b15613b2357889450879350613bab565b6000613b308a84846140f6565b9050888111613b645786811015613b595760405162461bcd60e51b81526004016106a490614dcd565b899550935083613ba9565b6000613b718a84866140f6565b90508a811115613b8357613b836143d4565b88811015613ba35760405162461bcd60e51b81526004016106a490614d86565b95508894505b505b50505097509795505050505050565b60005b82811015613800576000613c1c858584818110613bdc57613bdc614e14565b613bf29260206060909202019081019150614cf1565b868685818110613c0457613c04614e14565b905060600201602001602081019061038c9190614cf1565b5090506000613c88868685818110613c3657613c36614e14565b613c4c9260206060909202019081019150614cf1565b878786818110613c5e57613c5e614e14565b9050606002016020016020810190613c769190614cf1565b888887818110610ca457610ca4614e14565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613cc957600080fd5b505afa158015613cdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d019190615005565b50915091506000866001600160a01b03168b8b8a818110613d2457613d24614e14565b613d3a9260206060909202019081019150614cf1565b6001600160a01b031614613d4f578183613d52565b82825b509050808b8b8a818110613d6857613d68614e14565b613d7e9260206060909202019081019150614cf1565b6040516370a0823160e01b81526001600160a01b03898116600483015291909116906370a082319060240160206040518083038186803b158015613dc157600080fd5b505afa158015613dd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613df99190614f54565b613e039190614e40565b9450613e85858c8c8b818110613e1b57613e1b614e14565b613e319260206060909202019081019150614cf1565b8d8d8c818110613e4357613e43614e14565b9050606002016020016020810190613e5b9190614cf1565b8e8e8d818110613e6d57613e6d614e14565b90506060020160400160208101906105eb9190614ef6565b9350505050600080856001600160a01b03168a8a89818110613ea957613ea9614e14565b613ebf9260206060909202019081019150614cf1565b6001600160a01b031614613ed557826000613ed9565b6000835b90925090506000613eeb60018b614e40565b8810613ef75788613f7c565b613f7c8b8b613f078b6001615033565b818110613f1657613f16614e14565b613f2c9260206060909202019081019150614cf1565b8c8c613f398c6001615033565b818110613f4857613f48614e14565b9050606002016020016020810190613f609190614cf1565b8d8d613f6d8d6001615033565b818110610ca457610ca4614e14565b6040805160008152602081019182905263022c0d9f60e01b9091529091506001600160a01b0387169063022c0d9f90613fbe90869086908690602481016150f6565b600060405180830381600087803b158015613fd857600080fd5b505af1158015613fec573d6000803e3d6000fd5b505050505050505050505080806140029061504b565b915050613bbd565b60008161401957506000919050565b6000600161402684614340565b901c6001901b9050600181848161403f5761403f614f8c565b048201901c9050600181848161405757614057614f8c565b048201901c9050600181848161406f5761406f614f8c565b048201901c9050600181848161408757614087614f8c565b048201901c9050600181848161409f5761409f614f8c565b048201901c905060018184816140b7576140b7614f8c565b048201901c905060018184816140cf576140cf614f8c565b048201901c90506140ef818285816140e9576140e9614f8c565b046141d7565b9392505050565b60008084116141555760405162461bcd60e51b815260206004820152602560248201527f457175616c697a657220526f757465723a20494e53554646494349454e545f416044820152641353d5539560da1b60648201526084016106a4565b6000831180156141655750600082115b6141c25760405162461bcd60e51b815260206004820152602860248201527f457175616c697a657220526f757465723a20494e53554646494349454e545f4c604482015267495155494449545960c01b60648201526084016106a4565b826141cd8386614f6d565b61110e9190614fa2565b60008183106141e657816140ef565b5090919050565b6000836001600160a01b03163b116142175760405162461bcd60e51b81526004016106a490615066565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161427391906150da565b6000604051808303816000865af19150503d80600081146142b0576040519150601f19603f3d011682016040523d82523d6000602084013e6142b5565b606091505b50915091508180156142df5750805115806142df5750808060200190518101906142df9190614d45565b6143395760405162461bcd60e51b815260206004820152602560248201527f457175616c697a657220526f757465723a20736166655472616e736665722066604482015264185a5b195960da1b60648201526084016106a4565b5050505050565b600080608083901c1561435557608092831c92015b604083901c1561436757604092831c92015b602083901c1561437957602092831c92015b601083901c1561438b57601092831c92015b600883901c1561439d57600892831c92015b600483901c156143af57600492831c92015b600283901c156143c157600292831c92015b600183901c156132495760010192915050565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b03811681146143ff57600080fd5b50565b803561440d816143ea565b919050565b80151581146143ff57600080fd5b600080600080600080600080610100898b03121561443d57600080fd5b8835614448816143ea565b97506020890135614458816143ea565b9650604089013561446881614412565b9550606089013594506080890135935060a0890135925060c089013561448d816143ea565b8092505060e089013590509295985092959890939650565b600080600080600080600060e0888a0312156144c057600080fd5b873596506020880135955060408801356144d9816143ea565b945060608801356144e9816143ea565b935060808801356144f981614412565b925060a0880135614509816143ea565b8092505060c0880135905092959891949750929550565b6020808252825182820181905260009190848201906040850190845b818110156145585783518352928401929184019160010161453c565b50909695505050505050565b60008083601f84011261457657600080fd5b50813567ffffffffffffffff81111561458e57600080fd5b60208301915083602060608302850101111561120757600080fd5b60008060008060008060a087890312156145c257600080fd5b8635955060208701359450604087013567ffffffffffffffff8111156145e757600080fd5b6145f389828a01614564565b9095509350506060870135614607816143ea565b80925050608087013590509295509295509295565b6000806000806080858703121561463257600080fd5b843561463d816143ea565b9350602085013561464d816143ea565b9250604085013561465d81614412565b9396929550929360600135925050565b803560ff8116811461440d57600080fd5b60008060008060008060008060008060006101608c8e0312156146a057600080fd5b8b356146ab816143ea565b9a5060208c01356146bb81614412565b995060408c0135985060608c0135975060808c0135965060a08c01356146e0816143ea565b955060c08c0135945060e08c01356146f781614412565b93506147066101008d0161466d565b92506101208c013591506101408c013590509295989b509295989b9093969950565b60008060006060848603121561473d57600080fd5b8335614748816143ea565b92506020840135614758816143ea565b9150604084013561476881614412565b809150509250925092565b6000806040838503121561478657600080fd5b8235614791816143ea565b915060208301356147a1816143ea565b809150509250929050565b60008060008060008060008060006101208a8c0312156147cb57600080fd5b89356147d6816143ea565b985060208a01356147e6816143ea565b975060408a01356147f681614412565b965060608a0135955060808a0135945060a08a0135935060c08a0135925060e08a0135614822816143ea565b809250506101008a013590509295985092959850929598565b60008060006060848603121561485057600080fd5b833592506020840135614862816143ea565b91506040840135614768816143ea565b60008060008060006080868803121561488a57600080fd5b85359450602086013567ffffffffffffffff8111156148a857600080fd5b6148b488828901614564565b90955093505060408601356148c8816143ea565b949793965091946060013592915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614918576149186148d9565b604052919050565b600067ffffffffffffffff82111561493a5761493a6148d9565b5060051b60200190565b60008060008060006080868803121561495c57600080fd5b853567ffffffffffffffff8082111561497457600080fd5b818801915088601f83011261498857600080fd5b8135602061499d61499883614920565b6148ef565b82815260059290921b8401810191818101908c8411156149bc57600080fd5b948201945b838610156149da578535825294820194908201906149c1565b995050890135925050808211156149f057600080fd5b506149fd88828901614564565b90955093506148c8905060408701614402565b600060608284031215614a2257600080fd5b6040516060810181811067ffffffffffffffff82111715614a4557614a456148d9565b6040529050808235614a56816143ea565b81526020830135614a66816143ea565b60208201526040830135614a7981614412565b6040919091015292915050565b60008060408385031215614a9957600080fd5b8235915060208084013567ffffffffffffffff811115614ab857600080fd5b8401601f81018613614ac957600080fd5b8035614ad761499882614920565b81815260609182028301840191848201919089841115614af657600080fd5b938501935b83851015614b1c57614b0d8a86614a10565b83529384019391850191614afb565b5080955050505050509250929050565b600080600080600060a08688031215614b4457600080fd5b8535614b4f816143ea565b94506020860135614b5f816143ea565b93506040860135614b6f81614412565b94979396509394606081013594506080013592915050565b6000806000806000806000806000806000806101808d8f031215614baa57600080fd5b8c35614bb5816143ea565b9b5060208d0135614bc5816143ea565b9a5060408d0135614bd581614412565b995060608d0135985060808d0135975060a08d0135965060c08d0135614bfa816143ea565b955060e08d013594506101008d0135614c1281614412565b9350614c216101208e0161466d565b92506101408d013591506101608d013590509295989b509295989b509295989b565b600080600080600080600060e0888a031215614c5e57600080fd5b8735614c69816143ea565b96506020880135614c7981614412565b955060408801359450606088013593506080880135925060a0880135614509816143ea565b60008060008060808587031215614cb457600080fd5b843593506020850135614cc6816143ea565b92506040850135614cd6816143ea565b91506060850135614ce681614412565b939692955090935050565b600060208284031215614d0357600080fd5b81356140ef816143ea565b60208082526019908201527f457175616c697a657220526f757465723a204558504952454400000000000000604082015260600190565b600060208284031215614d5757600080fd5b81516140ef81614412565b60008060408385031215614d7557600080fd5b505080516020909101519092909150565b60208082526027908201527f457175616c697a657220526f757465723a20494e53554646494349454e545f4160408201526617d05353d5539560ca1b606082015260800190565b60208082526027908201527f457175616c697a657220526f757465723a20494e53554646494349454e545f4260408201526617d05353d5539560ca1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015614e5257614e52614e2a565b500390565b6020808252602c908201527f457175616c697a657220526f757465723a20494e53554646494349454e545f4f60408201526b155514155517d05353d5539560a21b606082015260800190565b6020808252601e908201527f457175616c697a657220526f757465723a20494e56414c49445f504154480000604082015260600190565b600060608284031215614eec57600080fd5b6140ef8383614a10565b600060208284031215614f0857600080fd5b81356140ef81614412565b6001600160a01b039384168152919092166020820152901515604082015260600190565b600060208284031215614f4957600080fd5b81516140ef816143ea565b600060208284031215614f6657600080fd5b5051919050565b6000816000190483118215151615614f8757614f87614e2a565b500290565b634e487b7160e01b600052601260045260246000fd5b600082614fbf57634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b60008060006060848603121561501a57600080fd5b8351925060208401519150604084015190509250925092565b6000821982111561504657615046614e2a565b500190565b600060001982141561505f5761505f614e2a565b5060010190565b60208082526028908201527f457175616c697a657220526f757465723a20696e76616c696420746f6b656e2060408201526718dbdb9d1c9858dd60c21b606082015260800190565b60005b838110156150c95781810151838201526020016150b1565b838111156138005750506000910152565b600082516150ec8184602087016150ae565b9190910192915050565b84815283602082015260018060a01b0383166040820152608060608201526000825180608084015261512f8160a08501602087016150ae565b601f01601f19169190910160a0019594505050505056fea2646970667358221220cd444ca4a823e7bf6d97abf4d9483f3138d5099df682cdb93d1901ea4ee1d88264736f6c63430008090033000000000000000000000000ddd9845ba0d8f38d3045f804f67a1a8b9a528fcc000000000000000000000000832497895f05100e53f42dfa8fc758b4866b183a00000000000000000000000017fa9da6e01ad59513707f92033a6eb03ccb10b4
Deployed Bytecode
0x6080604052600436106101c65760003560e01c80637301e3c8116100f7578063b7e0d4c011610095578063e2d9d4dc11610064578063e2d9d4dc146105f0578063e5e31b1314610610578063f41766d814610640578063fe411f141461066057600080fd5b8063b7e0d4c014610569578063c45a01551461057c578063d7b0e0a5146105b0578063da214231146105d057600080fd5b80639881fcb4116100d15780639881fcb4146104c757806398a0fb3c146104e75780639aab924814610507578063a32b1fcd1461054957600080fd5b80637301e3c81461047457806376c72751146104945780637af728c8146104a757600080fd5b80634c1ee03e116101645780635e1e63251161013e5780635e1e6325146103ec5780635e60dab51461042157806367ffb66a146104415780636cc1ae131461045457600080fd5b80634c1ee03e14610351578063544caa56146103715780635a47ddc3146103b157600080fd5b80633fc8cef3116101a05780633fc8cef3146102915780634386e63c146102dd578063448725b4146102fd57806346c96aac1461031d57600080fd5b80630dede6c41461020a57806313dcfc591461024457806318a130861461027157600080fd5b3661020557336001600160a01b037f000000000000000000000000832497895f05100e53f42dfa8fc758b4866b183a1614610203576102036143d4565b005b600080fd5b34801561021657600080fd5b5061022a610225366004614420565b610680565b604080519283526020830191909152015b60405180910390f35b34801561025057600080fd5b5061026461025f3660046144a5565b6108af565b60405161023b9190614520565b34801561027d57600080fd5b5061026461028c3660046145a9565b610ac2565b34801561029d57600080fd5b506102c57f000000000000000000000000832497895f05100e53f42dfa8fc758b4866b183a81565b6040516001600160a01b03909116815260200161023b565b3480156102e957600080fd5b5061022a6102f836600461461c565b610e0d565b34801561030957600080fd5b5061022a61031836600461467e565b610f92565b34801561032957600080fd5b506102c57f00000000000000000000000017fa9da6e01ad59513707f92033a6eb03ccb10b481565b34801561035d57600080fd5b506102c561036c366004614728565b61106b565b34801561037d57600080fd5b5061039161038c366004614773565b611116565b604080516001600160a01b0393841681529290911660208301520161023b565b3480156103bd57600080fd5b506103d16103cc3660046147ac565b61120e565b6040805193845260208401929092529082015260600161023b565b3480156103f857600080fd5b5061040c61040736600461483b565b611595565b6040805192835290151560208301520161023b565b34801561042d57600080fd5b5061022a61043c366004614728565b611825565b61026461044f366004614872565b6118ec565b34801561046057600080fd5b5061020361046f3660046145a9565b611c5a565b34801561048057600080fd5b5061026461048f366004614944565b611e66565b6102036104a2366004614872565b611f3c565b3480156104b357600080fd5b506102036104c23660046145a9565b612244565b3480156104d357600080fd5b506102646104e2366004614a86565b61244a565b3480156104f357600080fd5b506103d1610502366004614b2c565b6126ea565b34801561051357600080fd5b5061053b7f051c604b41e4f5c09d8eda985fa5e49ab9b1574a1aed994119102593d18fc95481565b60405190815260200161023b565b34801561055557600080fd5b5061022a610564366004614b87565b612908565b6103d1610577366004614c43565b6129c3565b34801561058857600080fd5b506102c57f000000000000000000000000ddd9845ba0d8f38d3045f804f67a1a8b9a528fcc81565b3480156105bc57600080fd5b5061022a6105cb366004614c43565b612eba565b3480156105dc57600080fd5b5061053b6105eb366004614c9e565b612faf565b3480156105fc57600080fd5b5061022a61060b36600461467e565b6130ec565b34801561061c57600080fd5b5061063061062b366004614cf1565b6131ab565b604051901515815260200161023b565b34801561064c57600080fd5b5061026461065b3660046145a9565b61324f565b34801561066c57600080fd5b5061022a61067b366004614c43565b613374565b60008082428110156106ad5760405162461bcd60e51b81526004016106a490614d0e565b60405180910390fd5b60006106ba8c8c8c61106b565b6040516323b872dd60e01b81523360048201526001600160a01b03821660248201819052604482018c90529192506323b872dd90606401602060405180830381600087803b15801561070b57600080fd5b505af115801561071f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107439190614d45565b6107a35760405162461bcd60e51b815260206004820152602b60248201527f457175616c697a657220526f757465723a206c6971756964697479207472616e60448201526a1cd9995c8819985a5b195960aa1b60648201526084016106a4565b60405163226bf2d160e21b81526001600160a01b03878116600483015260009182918416906389afcb44906024016040805180830381600087803b1580156107ea57600080fd5b505af11580156107fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108229190614d62565b9150915060006108328f8f611116565b509050806001600160a01b03168f6001600160a01b031614610855578183610858565b82825b90975095508a87101561087d5760405162461bcd60e51b81526004016106a490614d86565b8986101561089d5760405162461bcd60e51b81526004016106a490614dcd565b50505050509850989650505050505050565b606081428110156108d25760405162461bcd60e51b81526004016106a490614d0e565b604080516001808252818301909252600091816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816108e9579050509050878160008151811061092c5761092c614e14565b6020026020010151600001906001600160a01b031690816001600160a01b031681525050868160008151811061096457610964614e14565b6020026020010151602001906001600160a01b031690816001600160a01b031681525050858160008151811061099c5761099c614e14565b60209081029190910101519015156040909101526109ba8a8261244a565b92508883600185516109cc9190614e40565b815181106109dc576109dc614e14565b60200260200101511015610a025760405162461bcd60e51b81526004016106a490614e57565b610aaa81600081518110610a1857610a18614e14565b60200260200101516000015133610a8a84600081518110610a3b57610a3b614e14565b60200260200101516000015185600081518110610a5a57610a5a614e14565b60200260200101516020015186600081518110610a7957610a79614e14565b60200260200101516040015161106b565b86600081518110610a9d57610a9d614e14565b6020026020010151613451565b610ab58382876135b1565b5050979650505050505050565b60608142811015610ae55760405162461bcd60e51b81526004016106a490614d0e565b6001600160a01b037f000000000000000000000000832497895f05100e53f42dfa8fc758b4866b183a168686610b1c600182614e40565b818110610b2b57610b2b614e14565b9050606002016020016020810190610b439190614cf1565b6001600160a01b031614610b695760405162461bcd60e51b81526004016106a490614ea3565b610bc5888787808060200260200160405190810160405280939291908181526020016000905b82821015610bbb57610bac60608302860136819003810190614eda565b81526020019060010190610b8f565b505050505061244a565b9150868260018451610bd79190614e40565b81518110610be757610be7614e14565b60200260200101511015610c0d5760405162461bcd60e51b81526004016106a490614e57565b610ccf86866000818110610c2357610c23614e14565b610c399260206060909202019081019150614cf1565b33610cbc89896000818110610c5057610c50614e14565b610c669260206060909202019081019150614cf1565b8a8a6000818110610c7957610c79614e14565b9050606002016020016020810190610c919190614cf1565b8b8b6000818110610ca457610ca4614e14565b905060600201604001602081019061036c9190614ef6565b85600081518110610a9d57610a9d614e14565b610d2c828787808060200260200160405190810160405280939291908181526020016000905b82821015610d2157610d1260608302860136819003810190614eda565b81526020019060010190610cf5565b5050505050306135b1565b7f000000000000000000000000832497895f05100e53f42dfa8fc758b4866b183a6001600160a01b0316632e1a7d4d8360018551610d6a9190614e40565b81518110610d7a57610d7a614e14565b60200260200101516040518263ffffffff1660e01b8152600401610da091815260200190565b600060405180830381600087803b158015610dba57600080fd5b505af1158015610dce573d6000803e3d6000fd5b50505050610e02848360018551610de59190614e40565b81518110610df557610df5614e14565b6020026020010151613806565b509695505050505050565b60008060007f000000000000000000000000ddd9845ba0d8f38d3045f804f67a1a8b9a528fcc6001600160a01b0316636801cc308888886040518463ffffffff1660e01b8152600401610e6293929190614f13565b60206040518083038186803b158015610e7a57600080fd5b505afa158015610e8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb29190614f37565b90506001600160a01b038116610ecf576000809250925050610f89565b600080610edd898989611825565b915091506000836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f1c57600080fd5b505afa158015610f30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f549190614f54565b905080610f618489614f6d565b610f6b9190614fa2565b955080610f788389614f6d565b610f829190614fa2565b9450505050505b94509492505050565b6000806000610fc28e7f000000000000000000000000832497895f05100e53f42dfa8fc758b4866b183a8f61106b565b9050600087610fd1578c610fd5565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90611010903390309086908f908e908e908e90600401614fc4565b600060405180830381600087803b15801561102a57600080fd5b505af115801561103e573d6000803e3d6000fd5b505050506110518f8f8f8f8f8f8f612eba565b809450819550505050509b509b9950505050505050505050565b6040516306801cc360e41b81526000906001600160a01b037f000000000000000000000000ddd9845ba0d8f38d3045f804f67a1a8b9a528fcc1690636801cc30906110be90879087908790600401614f13565b60206040518083038186803b1580156110d657600080fd5b505afa1580156110ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110e9190614f37565b949350505050565b600080826001600160a01b0316846001600160a01b031614156111895760405162461bcd60e51b815260206004820152602560248201527f457175616c697a657220526f757465723a204944454e544943414c5f41444452604482015264455353455360d81b60648201526084016106a4565b826001600160a01b0316846001600160a01b0316106111a95782846111ac565b83835b90925090506001600160a01b0382166112075760405162461bcd60e51b815260206004820152601e60248201527f457175616c697a657220526f757465723a205a45524f5f41444452455353000060448201526064016106a4565b9250929050565b600080600083428110156112345760405162461bcd60e51b81526004016106a490614d0e565b6112438d8d8d8d8d8d8d6138d4565b909450925060006112558e8e8e61106b565b90506112638e338388613451565b61126f8d338387613451565b60405163b9a09fd560e01b81526001600160a01b0382811660048301526000917f00000000000000000000000017fa9da6e01ad59513707f92033a6eb03ccb10b49091169063b9a09fd59060240160206040518083038186803b1580156112d557600080fd5b505afa1580156112e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130d9190614f37565b90506001600160a01b03811661139f576040516335313c2160e11b81526001600160a01b038981166004830152831690636a62784290602401602060405180830381600087803b15801561136057600080fd5b505af1158015611374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113989190614f54565b9350611583565b6040516335313c2160e11b81523060048201526001600160a01b03831690636a62784290602401602060405180830381600087803b1580156113e057600080fd5b505af11580156113f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114189190614f54565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152919550859184169063dd62ed3e9060440160206040518083038186803b15801561146457600080fd5b505afa158015611478573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149c9190614f54565b10156115275760405163095ea7b360e01b81526001600160a01b038281166004830152600019602483015283169063095ea7b390604401602060405180830381600087803b1580156114ed57600080fd5b505af1158015611501573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115259190614d45565b505b604051633010d8ef60e01b81526001600160a01b038981166004830152821690633010d8ef90602401600060405180830381600087803b15801561156a57600080fd5b505af115801561157e573d6000803e3d6000fd5b505050505b50505099509950999650505050505050565b60008060006115a68585600161106b565b60405163e5e31b1360e01b81526001600160a01b03828116600483015291925060009182917f000000000000000000000000ddd9845ba0d8f38d3045f804f67a1a8b9a528fcc9091169063e5e31b139060240160206040518083038186803b15801561161157600080fd5b505afa158015611625573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116499190614d45565b156116d1576040516378a051ad60e11b8152600481018990526001600160a01b03888116602483015284169063f140a35a9060440160206040518083038186803b15801561169657600080fd5b505afa1580156116aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ce9190614f54565b91505b6116dd8787600061106b565b60405163e5e31b1360e01b81526001600160a01b0380831660048301529194507f000000000000000000000000ddd9845ba0d8f38d3045f804f67a1a8b9a528fcc9091169063e5e31b139060240160206040518083038186803b15801561174357600080fd5b505afa158015611757573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177b9190614d45565b15611803576040516378a051ad60e11b8152600481018990526001600160a01b03888116602483015284169063f140a35a9060440160206040518083038186803b1580156117c857600080fd5b505afa1580156117dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118009190614f54565b90505b80821161181257806000611816565b8160015b94509450505050935093915050565b60008060006118348686611116565b50905060008061184588888861106b565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561187d57600080fd5b505afa158015611891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b59190615005565b5091509150826001600160a01b0316886001600160a01b0316146118da5780826118dd565b81815b90999098509650505050505050565b6060814281101561190f5760405162461bcd60e51b81526004016106a490614d0e565b7f000000000000000000000000832497895f05100e53f42dfa8fc758b4866b183a6001600160a01b03168686600081811061194c5761194c614e14565b6119629260206060909202019081019150614cf1565b6001600160a01b0316146119885760405162461bcd60e51b81526004016106a490614ea3565b6119da348787808060200260200160405190810160405280939291908181526020016000905b82821015610bbb576119cb60608302860136819003810190614eda565b815260200190600101906119ae565b91508682600184516119ec9190614e40565b815181106119fc576119fc614e14565b60200260200101511015611a225760405162461bcd60e51b81526004016106a490614e57565b7f000000000000000000000000832497895f05100e53f42dfa8fc758b4866b183a6001600160a01b031663d0e30db083600081518110611a6457611a64614e14565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611a9757600080fd5b505af1158015611aab573d6000803e3d6000fd5b50505050507f000000000000000000000000832497895f05100e53f42dfa8fc758b4866b183a6001600160a01b031663a9059cbb611b4988886000818110611af557611af5614e14565b611b0b9260206060909202019081019150614cf1565b89896000818110611b1e57611b1e614e14565b9050606002016020016020810190611b369190614cf1565b8a8a6000818110610ca457610ca4614e14565b84600081518110611b5c57611b5c614e14565b60200260200101516040518363ffffffff1660e01b8152600401611b959291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b158015611baf57600080fd5b505af1158015611bc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be79190614d45565b611bf357611bf36143d4565b611c50828787808060200260200160405190810160405280939291908181526020016000905b82821015611c4557611c3660608302860136819003810190614eda565b81526020019060010190611c19565b5050505050866135b1565b5095945050505050565b8042811015611c7b5760405162461bcd60e51b81526004016106a490614d0e565b611cc485856000818110611c9157611c91614e14565b611ca79260206060909202019081019150614cf1565b33611cbe88886000818110611af557611af5614e14565b8a613451565b60008585611cd3600182614e40565b818110611ce257611ce2614e14565b9050606002016020016020810190611cfa9190614cf1565b6040516370a0823160e01b81526001600160a01b03868116600483015291909116906370a082319060240160206040518083038186803b158015611d3d57600080fd5b505afa158015611d51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d759190614f54565b9050611d82868686613bba565b86818787611d91600182614e40565b818110611da057611da0614e14565b9050606002016020016020810190611db89190614cf1565b6040516370a0823160e01b81526001600160a01b03888116600483015291909116906370a08231906024015b60206040518083038186803b158015611dfc57600080fd5b505afa158015611e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e349190614f54565b611e3e9190614e40565b1015611e5c5760405162461bcd60e51b81526004016106a490614e57565b5050505050505050565b60608142811015611e895760405162461bcd60e51b81526004016106a490614d0e565b611edf86866000818110611e9f57611e9f614e14565b611eb59260206060909202019081019150614cf1565b33611ecc89896000818110610c5057610c50614e14565b8a600081518110610a9d57610a9d614e14565b611f31878787808060200260200160405190810160405280939291908181526020016000905b82821015611c4557611f2260608302860136819003810190614eda565b81526020019060010190611f05565b509495945050505050565b8042811015611f5d5760405162461bcd60e51b81526004016106a490614d0e565b7f000000000000000000000000832497895f05100e53f42dfa8fc758b4866b183a6001600160a01b031685856000818110611f9a57611f9a614e14565b611fb09260206060909202019081019150614cf1565b6001600160a01b031614611fd65760405162461bcd60e51b81526004016106a490614ea3565b60003490507f000000000000000000000000832497895f05100e53f42dfa8fc758b4866b183a6001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561203657600080fd5b505af115801561204a573d6000803e3d6000fd5b50505050507f000000000000000000000000832497895f05100e53f42dfa8fc758b4866b183a6001600160a01b031663a9059cbb61209488886000818110611af557611af5614e14565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b1580156120dc57600080fd5b505af11580156120f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121149190614d45565b612120576121206143d4565b6000868661212f600182614e40565b81811061213e5761213e614e14565b90506060020160200160208101906121569190614cf1565b6040516370a0823160e01b81526001600160a01b03878116600483015291909116906370a082319060240160206040518083038186803b15801561219957600080fd5b505afa1580156121ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d19190614f54565b90506121de878787613bba565b878188886121ed600182614e40565b8181106121fc576121fc614e14565b90506060020160200160208101906122149190614cf1565b6040516370a0823160e01b81526001600160a01b03898116600483015291909116906370a0823190602401611de4565b80428110156122655760405162461bcd60e51b81526004016106a490614d0e565b6001600160a01b037f000000000000000000000000832497895f05100e53f42dfa8fc758b4866b183a16858561229c600182614e40565b8181106122ab576122ab614e14565b90506060020160200160208101906122c39190614cf1565b6001600160a01b0316146122e95760405162461bcd60e51b81526004016106a490614ea3565b6122ff85856000818110611c9157611c91614e14565b61230a858530613bba565b6040516370a0823160e01b81523060048201526000907f000000000000000000000000832497895f05100e53f42dfa8fc758b4866b183a6001600160a01b0316906370a082319060240160206040518083038186803b15801561236c57600080fd5b505afa158015612380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a49190614f54565b9050868110156123c65760405162461bcd60e51b81526004016106a490614e57565b604051632e1a7d4d60e01b8152600481018290527f000000000000000000000000832497895f05100e53f42dfa8fc758b4866b183a6001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561242857600080fd5b505af115801561243c573d6000803e3d6000fd5b50505050611e5c8482613806565b606060018251101561246e5760405162461bcd60e51b81526004016106a490614ea3565b815161247b906001615033565b67ffffffffffffffff811115612493576124936148d9565b6040519080825280602002602001820160405280156124bc578160200160208202803683370190505b50905082816000815181106124d3576124d3614e14565b60200260200101818152505060005b82518110156126e357600061253e84838151811061250257612502614e14565b60200260200101516000015185848151811061252057612520614e14565b602002602001015160200151868581518110610a7957610a79614e14565b60405163e5e31b1360e01b81526001600160a01b0380831660048301529192507f000000000000000000000000ddd9845ba0d8f38d3045f804f67a1a8b9a528fcc9091169063e5e31b139060240160206040518083038186803b1580156125a457600080fd5b505afa1580156125b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125dc9190614d45565b156126d057806001600160a01b031663f140a35a84848151811061260257612602614e14565b602002602001015186858151811061261c5761261c614e14565b6020026020010151600001516040518363ffffffff1660e01b81526004016126579291909182526001600160a01b0316602082015260400190565b60206040518083038186803b15801561266f57600080fd5b505afa158015612683573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a79190614f54565b836126b3846001615033565b815181106126c3576126c3614e14565b6020026020010181815250505b50806126db8161504b565b9150506124e2565b5092915050565b6000806000807f000000000000000000000000ddd9845ba0d8f38d3045f804f67a1a8b9a528fcc6001600160a01b0316636801cc308a8a8a6040518463ffffffff1660e01b815260040161274093929190614f13565b60206040518083038186803b15801561275857600080fd5b505afa15801561276c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127909190614f37565b9050600080806001600160a01b0384161561282957836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156127de57600080fd5b505afa1580156127f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128169190614f54565b90506128238c8c8c611825565b90935091505b82158015612835575081155b15612866578896508795506103e8612855612850888a614f6d565b61400a565b61285f9190614e40565b94506128f9565b60006128738a85856140f6565b90508881116128bb578997509550856128b484612890848b614f6d565b61289a9190614fa2565b846128a5858b614f6d565b6128af9190614fa2565b6141d7565b95506128f7565b60006128c88a85876140f6565b98508997508890506128f3856128de8584614f6d565b6128e89190614fa2565b856128a5868c614f6d565b9650505b505b50505050955095509592505050565b60008060006129188f8f8f61106b565b9050600087612927578c61292b565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90612966903390309086908f908e908e908e90600401614fc4565b600060405180830381600087803b15801561298057600080fd5b505af1158015612994573d6000803e3d6000fd5b50505050506129a98f8f8f8f8f8f8f8f610680565b8093508194505050509c509c9a5050505050505050505050565b600080600083428110156129e95760405162461bcd60e51b81526004016106a490614d0e565b612a188b7f000000000000000000000000832497895f05100e53f42dfa8fc758b4866b183a8c8c348d8d6138d4565b90945092506000612a4a8c7f000000000000000000000000832497895f05100e53f42dfa8fc758b4866b183a8d61106b565b9050612a588c338388613451565b7f000000000000000000000000832497895f05100e53f42dfa8fc758b4866b183a6001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612ab357600080fd5b505af1158015612ac7573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038581166004830152602482018990527f000000000000000000000000832497895f05100e53f42dfa8fc758b4866b183a16935063a9059cbb92506044019050602060405180830381600087803b158015612b3757600080fd5b505af1158015612b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b6f9190614d45565b612b7b57612b7b6143d4565b60405163b9a09fd560e01b81526001600160a01b0382811660048301526000917f00000000000000000000000017fa9da6e01ad59513707f92033a6eb03ccb10b49091169063b9a09fd59060240160206040518083038186803b158015612be157600080fd5b505afa158015612bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c199190614f37565b90506001600160a01b038116612cab576040516335313c2160e11b81526001600160a01b038981166004830152831690636a62784290602401602060405180830381600087803b158015612c6c57600080fd5b505af1158015612c80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca49190614f54565b9350612e8f565b6040516335313c2160e11b81523060048201526001600160a01b03831690636a62784290602401602060405180830381600087803b158015612cec57600080fd5b505af1158015612d00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d249190614f54565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152919550859184169063dd62ed3e9060440160206040518083038186803b158015612d7057600080fd5b505afa158015612d84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612da89190614f54565b1015612e335760405163095ea7b360e01b81526001600160a01b038281166004830152600019602483015283169063095ea7b390604401602060405180830381600087803b158015612df957600080fd5b505af1158015612e0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e319190614d45565b505b604051633010d8ef60e01b81526001600160a01b038981166004830152821690633010d8ef90602401600060405180830381600087803b158015612e7657600080fd5b505af1158015612e8a573d6000803e3d6000fd5b505050505b5083341115612eab57612eab33612ea68634614e40565b613806565b50509750975097945050505050565b6000808242811015612ede5760405162461bcd60e51b81526004016106a490614d0e565b612f0e8a7f000000000000000000000000832497895f05100e53f42dfa8fc758b4866b183a8b8b8b8b308b610680565b9093509150612f1e8a86856141ed565b604051632e1a7d4d60e01b8152600481018390527f000000000000000000000000832497895f05100e53f42dfa8fc758b4866b183a6001600160a01b031690632e1a7d4d90602401600060405180830381600087803b158015612f8057600080fd5b505af1158015612f94573d6000803e3d6000fd5b50505050612fa28583613806565b5097509795505050505050565b600080612fbd85858561106b565b60405163e5e31b1360e01b81526001600160a01b0380831660048301529192507f000000000000000000000000ddd9845ba0d8f38d3045f804f67a1a8b9a528fcc9091169063e5e31b139060240160206040518083038186803b15801561302357600080fd5b505afa158015613037573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305b9190614d45565b156130e3576040516378a051ad60e11b8152600481018790526001600160a01b03868116602483015282169063f140a35a9060440160206040518083038186803b1580156130a857600080fd5b505afa1580156130bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e09190614f54565b91505b50949350505050565b600080600061311c8e7f000000000000000000000000832497895f05100e53f42dfa8fc758b4866b183a8f61106b565b905060008761312b578c61312f565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf9061316a903390309086908f908e908e908e90600401614fc4565b600060405180830381600087803b15801561318457600080fd5b505af1158015613198573d6000803e3d6000fd5b505050506110518f8f8f8f8f8f8f613374565b60405163e5e31b1360e01b81526001600160a01b0382811660048301526000917f000000000000000000000000ddd9845ba0d8f38d3045f804f67a1a8b9a528fcc9091169063e5e31b139060240160206040518083038186803b15801561321157600080fd5b505afa158015613225573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132499190614d45565b92915050565b606081428110156132725760405162461bcd60e51b81526004016106a490614d0e565b6132c4888787808060200260200160405190810160405280939291908181526020016000905b82821015610bbb576132b560608302860136819003810190614eda565b81526020019060010190613298565b91508682600184516132d69190614e40565b815181106132e6576132e6614e14565b6020026020010151101561330c5760405162461bcd60e51b81526004016106a490614e57565b61332286866000818110610c2357610c23614e14565b610e02828787808060200260200160405190810160405280939291908181526020016000905b82821015611c455761336560608302860136819003810190614eda565b81526020019060010190613348565b60008082428110156133985760405162461bcd60e51b81526004016106a490614d0e565b6133c88a7f000000000000000000000000832497895f05100e53f42dfa8fc758b4866b183a8b8b8b8b308b610680565b6040516370a0823160e01b81523060048201529194509250612f1e908b9087906001600160a01b038316906370a082319060240160206040518083038186803b15801561341457600080fd5b505afa158015613428573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061344c9190614f54565b6141ed565b6000846001600160a01b03163b1161347b5760405162461bcd60e51b81526004016106a490615066565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916134df91906150da565b6000604051808303816000865af19150503d806000811461351c576040519150601f19603f3d011682016040523d82523d6000602084013e613521565b606091505b509150915081801561354b57508051158061354b57508080602001905181019061354b9190614d45565b6135a95760405162461bcd60e51b815260206004820152602960248201527f457175616c697a657220526f757465723a20736166655472616e7366657246726044820152681bdb4819985a5b195960ba1b60648201526084016106a4565b505050505050565b60005b82518110156138005760006136038483815181106135d4576135d4614e14565b6020026020010151600001518584815181106135f2576135f2614e14565b602002602001015160200151611116565b509050600085613614846001615033565b8151811061362457613624614e14565b60200260200101519050600080836001600160a01b031687868151811061364d5761364d614e14565b6020026020010151600001516001600160a01b03161461366f57826000613673565b6000835b915091506000600188516136879190614e40565b86106136935786613706565b613706886136a2886001615033565b815181106136b2576136b2614e14565b602002602001015160000151898860016136cc9190615033565b815181106136dc576136dc614e14565b6020026020010151602001518a8960016136f69190615033565b81518110610a7957610a79614e14565b905061375988878151811061371d5761371d614e14565b60200260200101516000015189888151811061373b5761373b614e14565b6020026020010151602001518a8981518110610a7957610a79614e14565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613796576020820181803683370190505b506040518563ffffffff1660e01b81526004016137b694939291906150f6565b600060405180830381600087803b1580156137d057600080fd5b505af11580156137e4573d6000803e3d6000fd5b50505050505050505080806137f89061504b565b9150506135b4565b50505050565b604080516000808252602082019092526001600160a01b03841690839060405161383091906150da565b60006040518083038185875af1925050503d806000811461386d576040519150601f19603f3d011682016040523d82523d6000602084013e613872565b606091505b50509050806138cf5760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b60648201526084016106a4565b505050565b600080838610156139395760405162461bcd60e51b815260206004820152602960248201527f457175616c697a657220526f757465723a20696e76616c6964206465736972656044820152686420616d6f756e744160b81b60648201526084016106a4565b8285101561399b5760405162461bcd60e51b815260206004820152602960248201527f457175616c697a657220526f757465723a20696e76616c696420646573697265604482015268321030b6b7bab73a2160b91b60648201526084016106a4565b6040516306801cc360e41b81526000906001600160a01b037f000000000000000000000000ddd9845ba0d8f38d3045f804f67a1a8b9a528fcc1690636801cc30906139ee908d908d908d90600401614f13565b60206040518083038186803b158015613a0657600080fd5b505afa158015613a1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a3e9190614f37565b90506001600160a01b038116613af3576040516320b7f73960e21b81526001600160a01b037f000000000000000000000000ddd9845ba0d8f38d3045f804f67a1a8b9a528fcc16906382dfdce490613a9e908d908d908d90600401614f13565b602060405180830381600087803b158015613ab857600080fd5b505af1158015613acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613af09190614f37565b90505b600080613b018c8c8c611825565b91509150816000148015613b13575080155b15613b2357889450879350613bab565b6000613b308a84846140f6565b9050888111613b645786811015613b595760405162461bcd60e51b81526004016106a490614dcd565b899550935083613ba9565b6000613b718a84866140f6565b90508a811115613b8357613b836143d4565b88811015613ba35760405162461bcd60e51b81526004016106a490614d86565b95508894505b505b50505097509795505050505050565b60005b82811015613800576000613c1c858584818110613bdc57613bdc614e14565b613bf29260206060909202019081019150614cf1565b868685818110613c0457613c04614e14565b905060600201602001602081019061038c9190614cf1565b5090506000613c88868685818110613c3657613c36614e14565b613c4c9260206060909202019081019150614cf1565b878786818110613c5e57613c5e614e14565b9050606002016020016020810190613c769190614cf1565b888887818110610ca457610ca4614e14565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613cc957600080fd5b505afa158015613cdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d019190615005565b50915091506000866001600160a01b03168b8b8a818110613d2457613d24614e14565b613d3a9260206060909202019081019150614cf1565b6001600160a01b031614613d4f578183613d52565b82825b509050808b8b8a818110613d6857613d68614e14565b613d7e9260206060909202019081019150614cf1565b6040516370a0823160e01b81526001600160a01b03898116600483015291909116906370a082319060240160206040518083038186803b158015613dc157600080fd5b505afa158015613dd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613df99190614f54565b613e039190614e40565b9450613e85858c8c8b818110613e1b57613e1b614e14565b613e319260206060909202019081019150614cf1565b8d8d8c818110613e4357613e43614e14565b9050606002016020016020810190613e5b9190614cf1565b8e8e8d818110613e6d57613e6d614e14565b90506060020160400160208101906105eb9190614ef6565b9350505050600080856001600160a01b03168a8a89818110613ea957613ea9614e14565b613ebf9260206060909202019081019150614cf1565b6001600160a01b031614613ed557826000613ed9565b6000835b90925090506000613eeb60018b614e40565b8810613ef75788613f7c565b613f7c8b8b613f078b6001615033565b818110613f1657613f16614e14565b613f2c9260206060909202019081019150614cf1565b8c8c613f398c6001615033565b818110613f4857613f48614e14565b9050606002016020016020810190613f609190614cf1565b8d8d613f6d8d6001615033565b818110610ca457610ca4614e14565b6040805160008152602081019182905263022c0d9f60e01b9091529091506001600160a01b0387169063022c0d9f90613fbe90869086908690602481016150f6565b600060405180830381600087803b158015613fd857600080fd5b505af1158015613fec573d6000803e3d6000fd5b505050505050505050505080806140029061504b565b915050613bbd565b60008161401957506000919050565b6000600161402684614340565b901c6001901b9050600181848161403f5761403f614f8c565b048201901c9050600181848161405757614057614f8c565b048201901c9050600181848161406f5761406f614f8c565b048201901c9050600181848161408757614087614f8c565b048201901c9050600181848161409f5761409f614f8c565b048201901c905060018184816140b7576140b7614f8c565b048201901c905060018184816140cf576140cf614f8c565b048201901c90506140ef818285816140e9576140e9614f8c565b046141d7565b9392505050565b60008084116141555760405162461bcd60e51b815260206004820152602560248201527f457175616c697a657220526f757465723a20494e53554646494349454e545f416044820152641353d5539560da1b60648201526084016106a4565b6000831180156141655750600082115b6141c25760405162461bcd60e51b815260206004820152602860248201527f457175616c697a657220526f757465723a20494e53554646494349454e545f4c604482015267495155494449545960c01b60648201526084016106a4565b826141cd8386614f6d565b61110e9190614fa2565b60008183106141e657816140ef565b5090919050565b6000836001600160a01b03163b116142175760405162461bcd60e51b81526004016106a490615066565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161427391906150da565b6000604051808303816000865af19150503d80600081146142b0576040519150601f19603f3d011682016040523d82523d6000602084013e6142b5565b606091505b50915091508180156142df5750805115806142df5750808060200190518101906142df9190614d45565b6143395760405162461bcd60e51b815260206004820152602560248201527f457175616c697a657220526f757465723a20736166655472616e736665722066604482015264185a5b195960da1b60648201526084016106a4565b5050505050565b600080608083901c1561435557608092831c92015b604083901c1561436757604092831c92015b602083901c1561437957602092831c92015b601083901c1561438b57601092831c92015b600883901c1561439d57600892831c92015b600483901c156143af57600492831c92015b600283901c156143c157600292831c92015b600183901c156132495760010192915050565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b03811681146143ff57600080fd5b50565b803561440d816143ea565b919050565b80151581146143ff57600080fd5b600080600080600080600080610100898b03121561443d57600080fd5b8835614448816143ea565b97506020890135614458816143ea565b9650604089013561446881614412565b9550606089013594506080890135935060a0890135925060c089013561448d816143ea565b8092505060e089013590509295985092959890939650565b600080600080600080600060e0888a0312156144c057600080fd5b873596506020880135955060408801356144d9816143ea565b945060608801356144e9816143ea565b935060808801356144f981614412565b925060a0880135614509816143ea565b8092505060c0880135905092959891949750929550565b6020808252825182820181905260009190848201906040850190845b818110156145585783518352928401929184019160010161453c565b50909695505050505050565b60008083601f84011261457657600080fd5b50813567ffffffffffffffff81111561458e57600080fd5b60208301915083602060608302850101111561120757600080fd5b60008060008060008060a087890312156145c257600080fd5b8635955060208701359450604087013567ffffffffffffffff8111156145e757600080fd5b6145f389828a01614564565b9095509350506060870135614607816143ea565b80925050608087013590509295509295509295565b6000806000806080858703121561463257600080fd5b843561463d816143ea565b9350602085013561464d816143ea565b9250604085013561465d81614412565b9396929550929360600135925050565b803560ff8116811461440d57600080fd5b60008060008060008060008060008060006101608c8e0312156146a057600080fd5b8b356146ab816143ea565b9a5060208c01356146bb81614412565b995060408c0135985060608c0135975060808c0135965060a08c01356146e0816143ea565b955060c08c0135945060e08c01356146f781614412565b93506147066101008d0161466d565b92506101208c013591506101408c013590509295989b509295989b9093969950565b60008060006060848603121561473d57600080fd5b8335614748816143ea565b92506020840135614758816143ea565b9150604084013561476881614412565b809150509250925092565b6000806040838503121561478657600080fd5b8235614791816143ea565b915060208301356147a1816143ea565b809150509250929050565b60008060008060008060008060006101208a8c0312156147cb57600080fd5b89356147d6816143ea565b985060208a01356147e6816143ea565b975060408a01356147f681614412565b965060608a0135955060808a0135945060a08a0135935060c08a0135925060e08a0135614822816143ea565b809250506101008a013590509295985092959850929598565b60008060006060848603121561485057600080fd5b833592506020840135614862816143ea565b91506040840135614768816143ea565b60008060008060006080868803121561488a57600080fd5b85359450602086013567ffffffffffffffff8111156148a857600080fd5b6148b488828901614564565b90955093505060408601356148c8816143ea565b949793965091946060013592915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614918576149186148d9565b604052919050565b600067ffffffffffffffff82111561493a5761493a6148d9565b5060051b60200190565b60008060008060006080868803121561495c57600080fd5b853567ffffffffffffffff8082111561497457600080fd5b818801915088601f83011261498857600080fd5b8135602061499d61499883614920565b6148ef565b82815260059290921b8401810191818101908c8411156149bc57600080fd5b948201945b838610156149da578535825294820194908201906149c1565b995050890135925050808211156149f057600080fd5b506149fd88828901614564565b90955093506148c8905060408701614402565b600060608284031215614a2257600080fd5b6040516060810181811067ffffffffffffffff82111715614a4557614a456148d9565b6040529050808235614a56816143ea565b81526020830135614a66816143ea565b60208201526040830135614a7981614412565b6040919091015292915050565b60008060408385031215614a9957600080fd5b8235915060208084013567ffffffffffffffff811115614ab857600080fd5b8401601f81018613614ac957600080fd5b8035614ad761499882614920565b81815260609182028301840191848201919089841115614af657600080fd5b938501935b83851015614b1c57614b0d8a86614a10565b83529384019391850191614afb565b5080955050505050509250929050565b600080600080600060a08688031215614b4457600080fd5b8535614b4f816143ea565b94506020860135614b5f816143ea565b93506040860135614b6f81614412565b94979396509394606081013594506080013592915050565b6000806000806000806000806000806000806101808d8f031215614baa57600080fd5b8c35614bb5816143ea565b9b5060208d0135614bc5816143ea565b9a5060408d0135614bd581614412565b995060608d0135985060808d0135975060a08d0135965060c08d0135614bfa816143ea565b955060e08d013594506101008d0135614c1281614412565b9350614c216101208e0161466d565b92506101408d013591506101608d013590509295989b509295989b509295989b565b600080600080600080600060e0888a031215614c5e57600080fd5b8735614c69816143ea565b96506020880135614c7981614412565b955060408801359450606088013593506080880135925060a0880135614509816143ea565b60008060008060808587031215614cb457600080fd5b843593506020850135614cc6816143ea565b92506040850135614cd6816143ea565b91506060850135614ce681614412565b939692955090935050565b600060208284031215614d0357600080fd5b81356140ef816143ea565b60208082526019908201527f457175616c697a657220526f757465723a204558504952454400000000000000604082015260600190565b600060208284031215614d5757600080fd5b81516140ef81614412565b60008060408385031215614d7557600080fd5b505080516020909101519092909150565b60208082526027908201527f457175616c697a657220526f757465723a20494e53554646494349454e545f4160408201526617d05353d5539560ca1b606082015260800190565b60208082526027908201527f457175616c697a657220526f757465723a20494e53554646494349454e545f4260408201526617d05353d5539560ca1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015614e5257614e52614e2a565b500390565b6020808252602c908201527f457175616c697a657220526f757465723a20494e53554646494349454e545f4f60408201526b155514155517d05353d5539560a21b606082015260800190565b6020808252601e908201527f457175616c697a657220526f757465723a20494e56414c49445f504154480000604082015260600190565b600060608284031215614eec57600080fd5b6140ef8383614a10565b600060208284031215614f0857600080fd5b81356140ef81614412565b6001600160a01b039384168152919092166020820152901515604082015260600190565b600060208284031215614f4957600080fd5b81516140ef816143ea565b600060208284031215614f6657600080fd5b5051919050565b6000816000190483118215151615614f8757614f87614e2a565b500290565b634e487b7160e01b600052601260045260246000fd5b600082614fbf57634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b60008060006060848603121561501a57600080fd5b8351925060208401519150604084015190509250925092565b6000821982111561504657615046614e2a565b500190565b600060001982141561505f5761505f614e2a565b5060010190565b60208082526028908201527f457175616c697a657220526f757465723a20696e76616c696420746f6b656e2060408201526718dbdb9d1c9858dd60c21b606082015260800190565b60005b838110156150c95781810151838201526020016150b1565b838111156138005750506000910152565b600082516150ec8184602087016150ae565b9190910192915050565b84815283602082015260018060a01b0383166040820152608060608201526000825180608084015261512f8160a08501602087016150ae565b601f01601f19169190910160a0019594505050505056fea2646970667358221220cd444ca4a823e7bf6d97abf4d9483f3138d5099df682cdb93d1901ea4ee1d88264736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ddd9845ba0d8f38d3045f804f67a1a8b9a528fcc000000000000000000000000832497895f05100e53f42dfa8fc758b4866b183a00000000000000000000000017fa9da6e01ad59513707f92033a6eb03ccb10b4
-----Decoded View---------------
Arg [0] : _factory (address): 0xDDD9845Ba0D8f38d3045f804f67A1a8B9A528FcC
Arg [1] : _weth (address): 0x832497895f05100E53f42DFA8fC758B4866B183a
Arg [2] : _voter (address): 0x17fa9dA6e01aD59513707F92033a6eb03CcB10B4
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000ddd9845ba0d8f38d3045f804f67a1a8b9a528fcc
Arg [1] : 000000000000000000000000832497895f05100e53f42dfa8fc758b4866b183a
Arg [2] : 00000000000000000000000017fa9da6e01ad59513707f92033a6eb03ccb10b4
Deployed Bytecode Sourcemap
18422:25143:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19242:10;-1:-1:-1;;;;;19264:4:0;19242:27;;19235:35;;;;:::i;:::-;18422:25143;;;;;29654:875;;;;;;;;;;-1:-1:-1;29654:875:0;;;;;:::i;:::-;;:::i;:::-;;;;1664:25:1;;;1720:2;1705:18;;1698:34;;;;1637:18;29654:875:0;;;;;;;;33401:790;;;;;;;;;;-1:-1:-1;33401:790:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;35434:775::-;;;;;;;;;;-1:-1:-1;35434:775:0;;;;;:::i;:::-;;:::i;18594:27::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4646:32:1;;;4628:51;;4616:2;4601:18;18594:27:0;4468:217:1;24607:752:0;;;;;;;;;;-1:-1:-1;24607:752:0;;;;;:::i;:::-;;:::i;31927:670::-;;;;;;;;;;-1:-1:-1;31927:670:0;;;;;:::i;:::-;;:::i;18727:29::-;;;;;;;;;;;;;;;19730:508;;;;;;;;;;-1:-1:-1;19730:508:0;;;;;:::i;:::-;;:::i;19286:347::-;;;;;;;;;;-1:-1:-1;19286:347:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;8181:15:1;;;8163:34;;8233:15;;;;8228:2;8213:18;;8206:43;8098:18;19286:347:0;7951:304:1;26979:1183:0;;;;;;;;;;-1:-1:-1;26979:1183:0;;;;;:::i;:::-;;:::i;:::-;;;;9477:25:1;;;9533:2;9518:18;;9511:34;;;;9561:18;;;9554:34;9465:2;9450:18;26979:1183:0;9275:319:1;21273:662:0;;;;;;;;;;-1:-1:-1;21273:662:0;;;;;:::i;:::-;;:::i;:::-;;;;10228:25:1;;;10296:14;;10289:22;10284:2;10269:18;;10262:50;10201:18;21273:662:0;10060:258:1;20746:375:0;;;;;;;;;;-1:-1:-1;20746:375:0;;;;;:::i;:::-;;:::i;34794:632::-;;;;;;:::i;:::-;;:::i;40044:737::-;;;;;;;;;;-1:-1:-1;40044:737:0;;;;;:::i;:::-;;:::i;36217:404::-;;;;;;;;;;-1:-1:-1;36217:404:0;;;;;:::i;:::-;;:::i;40787:838::-;;;;;;:::i;:::-;;:::i;41631:813::-;;;;;;;;;;-1:-1:-1;41631:813:0;;;;;:::i;:::-;;:::i;22413:569::-;;;;;;;;;;-1:-1:-1;22413:569:0;;;;;:::i;:::-;;:::i;23117:1482::-;;;;;;;;;;-1:-1:-1;23117:1482:0;;;;;:::i;:::-;;:::i;18683:37::-;;;;;;;;;;;;;;;;;;15692:25:1;;;15680:2;15665:18;18683:37:0;15546:177:1;31218:701:0;;;;;;;;;;-1:-1:-1;31218:701:0;;;;;:::i;:::-;;:::i;28170:1436::-;;;;;;:::i;:::-;;:::i;18555:32::-;;;;;;;;;;;;;;;30537:673;;;;;;;;;;-1:-1:-1;30537:673:0;;;;;:::i;:::-;;:::i;22010:316::-;;;;;;;;;;-1:-1:-1;22010:316:0;;;;;:::i;:::-;;:::i;37911:752::-;;;;;;;;;;-1:-1:-1;37911:752:0;;;;;:::i;:::-;;:::i;22990:119::-;;;;;;;;;;-1:-1:-1;22990:119:0;;;;;:::i;:::-;;:::i;:::-;;;19023:14:1;;19016:22;18998:41;;18986:2;18971:18;22990:119:0;18858:187:1;34199:587:0;;;;;;;;;;-1:-1:-1;34199:587:0;;;;;:::i;:::-;;:::i;37176:729::-;;;;;;;;;;-1:-1:-1;37176:729:0;;;;;:::i;:::-;;:::i;29654:875::-;29913:12;29927;29894:8;18827:15;18815:8;:27;;18807:65;;;;-1:-1:-1;;;18807:65:0;;;;;;;:::i;:::-;;;;;;;;;29952:12:::1;29967:31;29975:6;29983;29991;29967:7;:31::i;:::-;30017:53;::::0;-1:-1:-1;;;30017:53:0;;30042:10:::1;30017:53;::::0;::::1;19644:34:1::0;-1:-1:-1;;;;;30017:24:0;::::1;19694:18:1::0;;;19687:43;;;19746:18;;;19739:34;;;29952:46:0;;-1:-1:-1;30017:24:0::1;::::0;19579:18:1;;30017:53:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30009:109;;;::::0;-1:-1:-1;;;30009:109:0;;20236:2:1;30009:109:0::1;::::0;::::1;20218:21:1::0;20275:2;20255:18;;;20248:30;20314:34;20294:18;;;20287:62;-1:-1:-1;;;20365:18:1;;;20358:41;20416:19;;30009:109:0::1;20034:407:1::0;30009:109:0::1;30186:20;::::0;-1:-1:-1;;;30186:20:0;;-1:-1:-1;;;;;4646:32:1;;;30186:20:0::1;::::0;::::1;4628:51:1::0;30156:12:0::1;::::0;;;30186:16;::::1;::::0;::::1;::::0;4601:18:1;;30186:20:0::1;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30155:51;;;;30218:14;30237:26;30248:6;30256;30237:10;:26::i;:::-;30217:46;;;30305:6;-1:-1:-1::0;;;;;30295:16:0::1;:6;-1:-1:-1::0;;;;;30295:16:0::1;;:58;;30336:7;30345;30295:58;;;30315:7;30324;30295:58;30274:79:::0;;-1:-1:-1;30274:79:0;-1:-1:-1;30372:21:0;;::::1;;30364:73;;;;-1:-1:-1::0;;;30364:73:0::1;;;;;;;:::i;:::-;30467:10;30456:7;:21;;30448:73;;;;-1:-1:-1::0;;;30448:73:0::1;;;;;;;:::i;:::-;29941:588;;;;29654:875:::0;;;;;;;;;;;;:::o;33401:790::-;33656:21;33637:8;18827:15;18815:8;:27;;18807:65;;;;-1:-1:-1;;;18807:65:0;;;;;;;:::i;:::-;33714:14:::1;::::0;;33726:1:::1;33714:14:::0;;;;;::::1;::::0;;;33690:21:::1;::::0;33714:14:::1;;;;-1:-1:-1::0;;;;;;;;;;;;;;;;;;;;;;;33714:14:0;;-1:-1:-1;;33714:14:0;;;;::::1;::::0;::::1;;;;;33690:38;;33756:9;33739:6;33746:1;33739:9;;;;;;;;:::i;:::-;;;;;;;:14;;:26;-1:-1:-1::0;;;;;33739:26:0::1;;;-1:-1:-1::0;;;;;33739:26:0::1;;;::::0;::::1;33791:7;33776:6;33783:1;33776:9;;;;;;;;:::i;:::-;;;;;;;:12;;:22;-1:-1:-1::0;;;;;33776:22:0::1;;;-1:-1:-1::0;;;;;33776:22:0::1;;;::::0;::::1;33828:6;33809;33816:1;33809:9;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;:25;::::1;;:16;::::0;;::::1;:25:::0;33855:31:::1;33869:8:::0;33879:6;33855:13:::1;:31::i;:::-;33845:41;;33936:12;33905:7;33930:1;33913:7;:14;:18;;;;:::i;:::-;33905:27;;;;;;;;:::i;:::-;;;;;;;:43;;33897:100;;;;-1:-1:-1::0;;;33897:100:0::1;;;;;;;:::i;:::-;34008:138;34040:6;34047:1;34040:9;;;;;;;;:::i;:::-;;;;;;;:14;;;34056:10;34068:55;34076:6;34083:1;34076:9;;;;;;;;:::i;:::-;;;;;;;:14;;;34092:6;34099:1;34092:9;;;;;;;;:::i;:::-;;;;;;;:12;;;34106:6;34113:1;34106:9;;;;;;;;:::i;:::-;;;;;;;:16;;;34068:7;:55::i;:::-;34125:7;34133:1;34125:10;;;;;;;;:::i;:::-;;;;;;;34008:17;:138::i;:::-;34157:26;34163:7;34172:6;34180:2;34157:5;:26::i;:::-;33679:512;33401:790:::0;;;;;;;;;;:::o;35434:775::-;35601:21;35577:8;18827:15;18815:8;:27;;18807:65;;;;-1:-1:-1;;;18807:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35688:4:0::1;35648:45;:6:::0;;35655:17:::1;35671:1;35648:6:::0;35655:17:::1;:::i;:::-;35648:25;;;;;;;:::i;:::-;;;;;;:28;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35648:45:0::1;;35640:88;;;;-1:-1:-1::0;;;35640:88:0::1;;;;;;;:::i;:::-;35749:31;35763:8;35773:6;;35749:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;:13;:31::i;:::-;35739:41;;35830:12;35799:7;35824:1;35807:7;:14;:18;;;;:::i;:::-;35799:27;;;;;;;;:::i;:::-;;;;;;;:43;;35791:100;;;;-1:-1:-1::0;;;35791:100:0::1;;;;;;;:::i;:::-;35902:138;35934:6;;35941:1;35934:9;;;;;;;:::i;:::-;:14;::::0;::::1;:9;::::0;;::::1;;:14:::0;;::::1;::::0;-1:-1:-1;35934:14:0::1;:::i;:::-;35950:10;35962:55;35970:6;;35977:1;35970:9;;;;;;;:::i;:::-;:14;::::0;::::1;:9;::::0;;::::1;;:14:::0;;::::1;::::0;-1:-1:-1;35970:14:0::1;:::i;:::-;35986:6;;35993:1;35986:9;;;;;;;:::i;:::-;;;;;;:12;;;;;;;;;;:::i;:::-;36000:6;;36007:1;36000:9;;;;;;;:::i;:::-;;;;;;:16;;;;;;;;;;:::i;35962:55::-;36019:7;36027:1;36019:10;;;;;;;;:::i;35902:138::-;36051:37;36057:7;36066:6;;36051:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;36082:4;36051:5;:37::i;:::-;36099:4;-1:-1:-1::0;;;;;36099:13:0::1;;36113:7;36138:1;36121:7;:14;:18;;;;:::i;:::-;36113:27;;;;;;;;:::i;:::-;;;;;;;36099:42;;;;;;;;;;;;;15692:25:1::0;;15680:2;15665:18;;15546:177;36099:42:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;36152:49;36169:2;36173:7;36198:1;36181:7;:14;:18;;;;:::i;:::-;36173:27;;;;;;;;:::i;:::-;;;;;;;36152:16;:49::i;:::-;35434:775:::0;;;;;;;;;:::o;24607:752::-;24764:12;24778;24855:13;24884:7;-1:-1:-1;;;;;24871:29:0;;24901:6;24909;24917;24871:53;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24855:69;-1:-1:-1;;;;;;24941:19:0;;24937:64;;24985:1;24987;24977:12;;;;;;;24937:64;25014:13;25029;25046:35;25058:6;25066;25074;25046:11;:35::i;:::-;25013:68;;;;25092:17;25119:5;-1:-1:-1;;;;;25112:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25092:47;-1:-1:-1;25092:47:0;25162:20;25174:8;25162:9;:20;:::i;:::-;:35;;;;:::i;:::-;25152:45;-1:-1:-1;25289:12:0;25266:20;25278:8;25266:9;:20;:::i;:::-;:35;;;;:::i;:::-;25256:45;;24792:567;;;;24607:752;;;;;;;;:::o;31927:670::-;32221:16;32239:14;32266:12;32281:37;32289:5;32304:4;32311:6;32281:7;:37::i;:::-;32266:52;;32329:10;32342;:39;;32372:9;32342:39;;;-1:-1:-1;;32342:39:0;32392:71;;-1:-1:-1;;;32392:71:0;;32329:52;;-1:-1:-1;;;;;;32392:18:0;;;;;:71;;32411:10;;32431:4;;32329:52;;32445:8;;32455:1;;32458;;32461;;32392:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32501:88;32520:5;32527:6;32535:9;32546:14;32562:12;32576:2;32580:8;32501:18;:88::i;:::-;32474:115;;;;;;;;32255:342;;31927:670;;;;;;;;;;;;;;:::o;19730:508::-;20179:51;;-1:-1:-1;;;20179:51:0;;19813:12;;-1:-1:-1;;;;;20192:7:0;20179:29;;;;:51;;20209:6;;20216;;20223;;20179:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20172:58;19730:508;-1:-1:-1;;;;19730:508:0:o;19286:347::-;19359:14;19375;19420:6;-1:-1:-1;;;;;19410:16:0;:6;-1:-1:-1;;;;;19410:16:0;;;19402:66;;;;-1:-1:-1;;;19402:66:0;;25391:2:1;19402:66:0;;;25373:21:1;25430:2;25410:18;;;25403:30;25469:34;25449:18;;;25442:62;-1:-1:-1;;;25520:18:1;;;25513:35;25565:19;;19402:66:0;25189:401:1;19402:66:0;19507:6;-1:-1:-1;;;;;19498:15:0;:6;-1:-1:-1;;;;;19498:15:0;;:53;;19536:6;19544;19498:53;;;19517:6;19525;19498:53;19479:72;;-1:-1:-1;19479:72:0;-1:-1:-1;;;;;;19570:20:0;;19562:63;;;;-1:-1:-1;;;19562:63:0;;25797:2:1;19562:63:0;;;25779:21:1;25836:2;25816:18;;;25809:30;25875:32;25855:18;;;25848:60;25925:18;;19562:63:0;25595:354:1;19562:63:0;19286:347;;;;;:::o;26979:1183::-;27272:12;27286;27300:14;27253:8;18827:15;18815:8;:27;;18807:65;;;;-1:-1:-1;;;18807:65:0;;;;;;;:::i;:::-;27348:93:::1;27362:6;27370;27378;27386:14;27402;27418:10;27430;27348:13;:93::i;:::-;27327:114:::0;;-1:-1:-1;27327:114:0;-1:-1:-1;27452:12:0::1;27467:31;27475:6:::0;27483;27491;27467:7:::1;:31::i;:::-;27452:46;;27509:52;27527:6;27535:10;27547:4;27553:7;27509:17;:52::i;:::-;27572;27590:6;27598:10;27610:4;27616:7;27572:17;:52::i;:::-;27693:18;::::0;-1:-1:-1;;;27693:18:0;;-1:-1:-1;;;;;4646:32:1;;;27693:18:0::1;::::0;::::1;4628:51:1::0;27676:14:0::1;::::0;27693:5:::1;:12:::0;;::::1;::::0;::::1;::::0;4601:18:1;;27693::0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27676:35:::0;-1:-1:-1;;;;;;27729:20:0;::::1;27726:418;;27782:20;::::0;-1:-1:-1;;;27782:20:0;;-1:-1:-1;;;;;4646:32:1;;;27782:20:0::1;::::0;::::1;4628:51:1::0;27782:16:0;::::1;::::0;::::1;::::0;4601:18:1;;27782:20:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27770:32;;27726:418;;;27868:31;::::0;-1:-1:-1;;;27868:31:0;;27893:4:::1;27868:31;::::0;::::1;4628:51:1::0;-1:-1:-1;;;;;27868:16:0;::::1;::::0;::::1;::::0;4601:18:1;;27868:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27921:44;::::0;-1:-1:-1;;;27921:44:0;;27952:4:::1;27921:44;::::0;::::1;8163:34:1::0;-1:-1:-1;;;;;8233:15:1;;;8213:18;;;8206:43;27856::0;;-1:-1:-1;27856:43:0;;27921:22;::::1;::::0;::::1;::::0;8098:18:1;;27921:44:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;27918:150;;;28002:46;::::0;-1:-1:-1;;;28002:46:0;;-1:-1:-1;;;;;26146:32:1;;;28002:46:0::1;::::0;::::1;26128:51:1::0;-1:-1:-1;;26195:18:1;;;26188:34;28002:20:0;::::1;::::0;::::1;::::0;26101:18:1;;28002:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27918:150;28086:42;::::0;-1:-1:-1;;;28086:42:0;;-1:-1:-1;;;;;4646:32:1;;;28086:42:0::1;::::0;::::1;4628:51:1::0;28086:38:0;::::1;::::0;::::1;::::0;4601:18:1;;28086:42:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27726:418;27635:520;27316:846;26979:1183:::0;;;;;;;;;;;;;;:::o;21273:662::-;21366:11;21379;21403:12;21418:32;21426:7;21435:8;21445:4;21418:7;:32::i;:::-;21523:34;;-1:-1:-1;;;21523:34:0;;-1:-1:-1;;;;;4646:32:1;;;21523:34:0;;;4628:51:1;4646:32;;-1:-1:-1;;;;;21536:7:0;21523:28;;;;;;4601:18:1;;21523:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21519:125;;;21589:43;;-1:-1:-1;;;21589:43:0;;;;;26407:25:1;;;-1:-1:-1;;;;;26468:32:1;;;26448:18;;;26441:60;21589:24:0;;;;;26380:18:1;;21589:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21574:58;;21519:125;21661:33;21669:7;21678:8;21688:5;21661:7;:33::i;:::-;21709:34;;-1:-1:-1;;;21709:34:0;;-1:-1:-1;;;;;4646:32:1;;;21709:34:0;;;4628:51:1;21654:40:0;;-1:-1:-1;21722:7:0;21709:28;;;;;;4601:18:1;;21709:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21705:127;;;21777:43;;-1:-1:-1;;;21777:43:0;;;;;26407:25:1;;;-1:-1:-1;;;;;26468:32:1;;;26448:18;;;26441:60;21777:24:0;;;;;26380:18:1;;21777:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21760:60;;21705:127;21864:14;21849:12;:29;:78;;21905:14;21921:5;21849:78;;;21882:12;21896:4;21849:78;21842:85;;;;;;;21273:662;;;;;;:::o;20746:375::-;20833:13;20848;20875:14;20894:26;20905:6;20913;20894:10;:26::i;:::-;20874:46;;;20932:13;20947;20971:31;20979:6;20987;20995;20971:7;:31::i;:::-;-1:-1:-1;;;;;20965:50:0;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20931:86;;;;;21061:6;-1:-1:-1;;;;;21051:16:0;:6;-1:-1:-1;;;;;21051:16:0;;:62;;21094:8;21104;21051:62;;;21071:8;21081;21051:62;21028:85;;;;-1:-1:-1;20746:375:0;-1:-1:-1;;;;;;;20746:375:0:o;34794:632::-;34959:21;34935:8;18827:15;18815:8;:27;;18807:65;;;;-1:-1:-1;;;18807:65:0;;;;;;;:::i;:::-;35032:4:::1;-1:-1:-1::0;;;;;35006:31:0::1;:6;;35013:1;35006:9;;;;;;;:::i;:::-;:14;::::0;::::1;:9;::::0;;::::1;;:14:::0;;::::1;::::0;-1:-1:-1;35006:14:0::1;:::i;:::-;-1:-1:-1::0;;;;;35006:31:0::1;;34998:74;;;;-1:-1:-1::0;;;34998:74:0::1;;;;;;;:::i;:::-;35093:32;35107:9;35118:6;;35093:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;35083:42;;35175:12;35144:7;35169:1;35152:7;:14;:18;;;;:::i;:::-;35144:27;;;;;;;;:::i;:::-;;;;;;;:43;;35136:100;;;;-1:-1:-1::0;;;35136:100:0::1;;;;;;;:::i;:::-;35247:4;-1:-1:-1::0;;;;;35247:12:0::1;;35267:7;35275:1;35267:10;;;;;;;;:::i;:::-;;;;;;;35247:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;35298:4;-1:-1:-1::0;;;;;35298:13:0::1;;35312:55;35320:6;;35327:1;35320:9;;;;;;;:::i;:::-;:14;::::0;::::1;:9;::::0;;::::1;;:14:::0;;::::1;::::0;-1:-1:-1;35320:14:0::1;:::i;:::-;35336:6;;35343:1;35336:9;;;;;;;:::i;:::-;;;;;;:12;;;;;;;;;;:::i;:::-;35350:6;;35357:1;35350:9;;;;;;;:::i;35312:55::-;35369:7;35377:1;35369:10;;;;;;;;:::i;:::-;;;;;;;35298:82;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;26146:32:1;;;;26128:51;;26210:2;26195:18;;26188:34;26116:2;26101:18;;25954:274;35298:82:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35291:90;;;;:::i;:::-;35392:26;35398:7;35407:6;;35392:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;35415:2;35392:5;:26::i;:::-;34794:632:::0;;;;;;;;:::o;40044:737::-;40261:8;18827:15;18815:8;:27;;18807:65;;;;-1:-1:-1;;;18807:65:0;;;;;;;:::i;:::-;40282:163:::1;40311:6;;40318:1;40311:9;;;;;;;:::i;:::-;:14;::::0;::::1;:9;::::0;;::::1;;:14:::0;;::::1;::::0;-1:-1:-1;40311:14:0::1;:::i;:::-;40337:10;40359:55;40367:6;;40374:1;40367:9;;;;;;;:::i;40359:55::-;40426:8;40282:17;:163::i;:::-;40456:18;40484:6:::0;;40491:17:::1;40507:1;40484:6:::0;40491:17:::1;:::i;:::-;40484:25;;;;;;;:::i;:::-;;;;;;:28;;;;;;;;;;:::i;:::-;40477:50;::::0;-1:-1:-1;;;40477:50:0;;-1:-1:-1;;;;;4646:32:1;;;40477:50:0::1;::::0;::::1;4628:51:1::0;40477:46:0;;;::::1;::::0;::::1;::::0;4601:18:1;;40477:50:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40456:71;;40538:46;40573:6;;40581:2;40538:34;:46::i;:::-;40689:12:::0;40671:13;40624:6;;40631:17:::1;40647:1;40624:6:::0;40631:17:::1;:::i;:::-;40624:25;;;;;;;:::i;:::-;;;;;;:28;;;;;;;;;;:::i;:::-;40617:50;::::0;-1:-1:-1;;;40617:50:0;;-1:-1:-1;;;;;4646:32:1;;;40617:50:0::1;::::0;::::1;4628:51:1::0;40617:46:0;;;::::1;::::0;::::1;::::0;4601:18:1;;40617:50:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:68;;;;:::i;:::-;:84;;40595:178;;;;-1:-1:-1::0;;;40595:178:0::1;;;;;;;:::i;:::-;40271:510;40044:737:::0;;;;;;;:::o;36217:404::-;36411:13;36392:8;18827:15;18815:8;:27;;18807:65;;;;-1:-1:-1;;;18807:65:0;;;;;;;:::i;:::-;36437:114:::1;36455:6;;36462:1;36455:9;;;;;;;:::i;:::-;:14;::::0;::::1;:9;::::0;;::::1;;:14:::0;;::::1;::::0;-1:-1:-1;36455:14:0::1;:::i;:::-;36471:10;36483:55;36491:6;;36498:1;36491:9;;;;;;;:::i;36483:55::-;36540:7;36548:1;36540:10;;;;;;;;:::i;36437:114::-;36562:26;36568:7;36577:6;;36562:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;-1:-1:-1::0;36606:7:0;;36217:404;-1:-1:-1;;;;;36217:404:0:o;40787:838::-;41012:8;18827:15;18815:8;:27;;18807:65;;;;-1:-1:-1;;;18807:65:0;;;;;;;:::i;:::-;41072:4:::1;-1:-1:-1::0;;;;;41046:31:0::1;:6;;41053:1;41046:9;;;;;;;:::i;:::-;:14;::::0;::::1;:9;::::0;;::::1;;:14:::0;;::::1;::::0;-1:-1:-1;41046:14:0::1;:::i;:::-;-1:-1:-1::0;;;;;41046:31:0::1;;41038:74;;;;-1:-1:-1::0;;;41038:74:0::1;;;;;;;:::i;:::-;41123:13;41139:9;41123:25;;41159:4;-1:-1:-1::0;;;;;41159:12:0::1;;41179:8;41159:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;41208:4;-1:-1:-1::0;;;;;41208:13:0::1;;41222:55;41230:6;;41237:1;41230:9;;;;;;;:::i;41222:55::-;41208:80;::::0;-1:-1:-1;;;;;;41208:80:0::1;::::0;;;;;;-1:-1:-1;;;;;26146:32:1;;;41208:80:0::1;::::0;::::1;26128:51:1::0;26195:18;;;26188:34;;;26101:18;;41208:80:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41201:88;;;;:::i;:::-;41300:18;41328:6:::0;;41335:17:::1;41351:1;41328:6:::0;41335:17:::1;:::i;:::-;41328:25;;;;;;;:::i;:::-;;;;;;:28;;;;;;;;;;:::i;:::-;41321:50;::::0;-1:-1:-1;;;41321:50:0;;-1:-1:-1;;;;;4646:32:1;;;41321:50:0::1;::::0;::::1;4628:51:1::0;41321:46:0;;;::::1;::::0;::::1;::::0;4601:18:1;;41321:50:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41300:71;;41382:46;41417:6;;41425:2;41382:34;:46::i;:::-;41533:12:::0;41515:13;41468:6;;41475:17:::1;41491:1;41468:6:::0;41475:17:::1;:::i;:::-;41468:25;;;;;;;:::i;:::-;;;;;;:28;;;;;;;;;;:::i;:::-;41461:50;::::0;-1:-1:-1;;;41461:50:0;;-1:-1:-1;;;;;4646:32:1;;;41461:50:0::1;::::0;::::1;4628:51:1::0;41461:46:0;;;::::1;::::0;::::1;::::0;4601:18:1;;41461:50:0::1;4468:217:1::0;41631:813:0;41863:8;18827:15;18815:8;:27;;18807:65;;;;-1:-1:-1;;;18807:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41937:4:0::1;41897:45;:6:::0;;41904:17:::1;41920:1;41897:6:::0;41904:17:::1;:::i;:::-;41897:25;;;;;;;:::i;:::-;;;;;;:28;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;41897:45:0::1;;41889:88;;;;-1:-1:-1::0;;;41889:88:0::1;;;;;;;:::i;:::-;41988:136;42020:6;;42027:1;42020:9;;;;;;;:::i;41988:136::-;42135:57;42170:6;;42186:4;42135:34;:57::i;:::-;42220:46;::::0;-1:-1:-1;;;42220:46:0;;42260:4:::1;42220:46;::::0;::::1;4628:51:1::0;42203:14:0::1;::::0;42235:4:::1;-1:-1:-1::0;;;;;42220:31:0::1;::::0;::::1;::::0;4601:18:1;;42220:46:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42203:63;;42298:12;42285:9;:25;;42277:82;;;;-1:-1:-1::0;;;42277:82:0::1;;;;;;;:::i;:::-;42370:24;::::0;-1:-1:-1;;;42370:24:0;;::::1;::::0;::::1;15692:25:1::0;;;42370:4:0::1;-1:-1:-1::0;;;;;42370:13:0::1;::::0;::::1;::::0;15665:18:1;;42370:24:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;42405:31;42422:2;42426:9;42405:16;:31::i;22413:569::-:0;22495:21;22554:1;22537:6;:13;:18;;22529:61;;;;-1:-1:-1;;;22529:61:0;;;;;;;:::i;:::-;22622:13;;:15;;22636:1;22622:15;:::i;:::-;22611:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22611:27:0;;22601:37;;22662:8;22649:7;22657:1;22649:10;;;;;;;;:::i;:::-;;;;;;:21;;;;;22686:6;22681:294;22702:6;:13;22698:1;:17;22681:294;;;22737:12;22752:55;22760:6;22767:1;22760:9;;;;;;;;:::i;:::-;;;;;;;:14;;;22776:6;22783:1;22776:9;;;;;;;;:::i;:::-;;;;;;;:12;;;22790:6;22797:1;22790:9;;;;;;;;:::i;22752:55::-;22826:34;;-1:-1:-1;;;22826:34:0;;-1:-1:-1;;;;;4646:32:1;;;22826:34:0;;;4628:51:1;22737:70:0;;-1:-1:-1;22839:7:0;22826:28;;;;;;4601:18:1;;22826:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22822:142;;;22902:4;-1:-1:-1;;;;;22896:24:0;;22921:7;22929:1;22921:10;;;;;;;;:::i;:::-;;;;;;;22933:6;22940:1;22933:9;;;;;;;;:::i;:::-;;;;;;;:14;;;22896:52;;;;;;;;;;;;;;;26407:25:1;;;-1:-1:-1;;;;;26468:32:1;26463:2;26448:18;;26441:60;26395:2;26380:18;;26233:274;22896:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22881:7;22889:3;:1;22891;22889:3;:::i;:::-;22881:12;;;;;;;;:::i;:::-;;;;;;:67;;;;;22822:142;-1:-1:-1;22717:3:0;;;;:::i;:::-;;;;22681:294;;;;22413:569;;;;:::o;23117:1482::-;23306:12;23320;23334:14;23413:13;23442:7;-1:-1:-1;;;;;23429:29:0;;23459:6;23467;23475;23429:53;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23413:69;-1:-1:-1;23494:13:0;;;-1:-1:-1;;;;;23578:19:0;;;23574:167;;23636:5;-1:-1:-1;;;;;23629:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23614:42;;23694:35;23706:6;23714;23722;23694:11;:35::i;:::-;23671:58;;-1:-1:-1;23671:58:0;-1:-1:-1;23574:167:0;23755:13;;:30;;;;-1:-1:-1;23772:13:0;;23755:30;23751:841;;;23824:14;;-1:-1:-1;23840:14:0;;-1:-1:-1;18671:5:0;23882:28;23892:17;23840:14;23824;23892:17;:::i;:::-;23882:9;:28::i;:::-;:48;;;;:::i;:::-;23870:60;;23751:841;;;23965:19;23987:50;24002:14;24018:8;24028;23987:14;:50::i;:::-;23965:72;;24074:14;24056;:32;24052:529;;24131:14;;-1:-1:-1;24147:14:0;-1:-1:-1;24147:14:0;24193:78;24227:8;24202:22;24212:12;24131:14;24202:22;:::i;:::-;:33;;;;:::i;:::-;24262:8;24237:22;24247:12;24237:7;:22;:::i;:::-;:33;;;;:::i;:::-;24193:8;:78::i;:::-;24181:90;;24052:529;;;24312:19;24334:50;24349:14;24365:8;24375;24334:14;:50::i;:::-;24312:72;-1:-1:-1;24441:14:0;;-1:-1:-1;24312:72:0;;-1:-1:-1;24487:78:0;24521:8;24496:22;24506:12;24312:72;24496:22;:::i;:::-;:33;;;;:::i;:::-;24556:8;24531:22;24541:12;24531:7;:22;:::i;24487:78::-;24475:90;;24293:288;24052:529;23948:644;23751:841;23350:1249;;;;23117:1482;;;;;;;;;:::o;31218:701::-;31529:12;31543;31568;31583:31;31591:6;31599;31607;31583:7;:31::i;:::-;31568:46;;31640:10;31653;:39;;31683:9;31653:39;;;-1:-1:-1;;31653:39:0;31707:71;;-1:-1:-1;;;31707:71:0;;31640:52;;-1:-1:-1;;;;;;31707:18:0;;;;;:71;;31726:10;;31746:4;;31640:52;;31760:8;;31770:1;;31773;;31776;;31707:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31625:165;31823:88;31839:6;31847;31855;31863:9;31874:10;31886;31898:2;31902:8;31823:15;:88::i;:::-;31802:109;;;;;;;;31557:362;31218:701;;;;;;;;;;;;;;;:::o;28170:1436::-;28428:16;28446:14;28462;28409:8;18827:15;18815:8;:27;;18807:65;;;;-1:-1:-1;;;18807:65:0;;;;;;;:::i;:::-;28516:206:::1;28544:5;28572:4;28592:6;28613:18;28646:9;28670:14;28699:12;28516:13;:206::i;:::-;28489:233:::0;;-1:-1:-1;28489:233:0;-1:-1:-1;28733:12:0::1;28748:37;28756:5:::0;28771:4:::1;28778:6:::0;28748:7:::1;:37::i;:::-;28733:52;;28796:55;28814:5;28821:10;28833:4;28839:11;28796:17;:55::i;:::-;28862:4;-1:-1:-1::0;;;;;28862:12:0::1;;28882:9;28862:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;28912:30:0::1;::::0;-1:-1:-1;;;28912:30:0;;-1:-1:-1;;;;;26146:32:1;;;28912:30:0::1;::::0;::::1;26128:51:1::0;26195:18;;;26188:34;;;28912:4:0::1;:13;::::0;-1:-1:-1;28912:13:0::1;::::0;-1:-1:-1;26101:18:1;;;-1:-1:-1;28912:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28905:38;;;;:::i;:::-;29012:18;::::0;-1:-1:-1;;;29012:18:0;;-1:-1:-1;;;;;4646:32:1;;;29012:18:0::1;::::0;::::1;4628:51:1::0;28995:14:0::1;::::0;29012:5:::1;:12:::0;;::::1;::::0;::::1;::::0;4601:18:1;;29012::0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28995:35:::0;-1:-1:-1;;;;;;29048:20:0;::::1;29045:418;;29101:20;::::0;-1:-1:-1;;;29101:20:0;;-1:-1:-1;;;;;4646:32:1;;;29101:20:0::1;::::0;::::1;4628:51:1::0;29101:16:0;::::1;::::0;::::1;::::0;4601:18:1;;29101:20:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29089:32;;29045:418;;;29187:31;::::0;-1:-1:-1;;;29187:31:0;;29212:4:::1;29187:31;::::0;::::1;4628:51:1::0;-1:-1:-1;;;;;29187:16:0;::::1;::::0;::::1;::::0;4601:18:1;;29187:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29240:44;::::0;-1:-1:-1;;;29240:44:0;;29271:4:::1;29240:44;::::0;::::1;8163:34:1::0;-1:-1:-1;;;;;8233:15:1;;;8213:18;;;8206:43;29175::0;;-1:-1:-1;29175:43:0;;29240:22;::::1;::::0;::::1;::::0;8098:18:1;;29240:44:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;29237:150;;;29321:46;::::0;-1:-1:-1;;;29321:46:0;;-1:-1:-1;;;;;26146:32:1;;;29321:46:0::1;::::0;::::1;26128:51:1::0;-1:-1:-1;;26195:18:1;;;26188:34;29321:20:0;::::1;::::0;::::1;::::0;26101:18:1;;29321:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29237:150;29405:42;::::0;-1:-1:-1;;;29405:42:0;;-1:-1:-1;;;;;4646:32:1;;;29405:42:0::1;::::0;::::1;4628:51:1::0;29405:38:0;::::1;::::0;::::1;::::0;4601:18:1;;29405:42:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29045:418;28954:520;29536:9;29524;:21;29520:78;;;29547:51;29564:10;29576:21;29588:9:::0;29576::::1;:21;:::i;:::-;29547:16;:51::i;:::-;28478:1128;28170:1436:::0;;;;;;;;;;;;:::o;30537:673::-;30779:16;30797:14;30760:8;18827:15;18815:8;:27;;18807:65;;;;-1:-1:-1;;;18807:65:0;;;;;;;:::i;:::-;30851:226:::1;30881:5;30909:4;30929:6;30950:9;30974:14;31003:12;31038:4;31058:8;30851:15;:226::i;:::-;30824:253:::0;;-1:-1:-1;30824:253:0;-1:-1:-1;31088:37:0::1;31102:5:::0;31109:2;30824:253;31088:13:::1;:37::i;:::-;31136:24;::::0;-1:-1:-1;;;31136:24:0;;::::1;::::0;::::1;15692:25:1::0;;;31136:4:0::1;-1:-1:-1::0;;;;;31136:13:0::1;::::0;::::1;::::0;15665:18:1;;31136:24:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31171:31;31188:2;31192:9;31171:16;:31::i;:::-;30537:673:::0;;;;;;;;;;;:::o;22010:316::-;22116:11;22140:12;22155:34;22163:7;22172:8;22182:6;22155:7;:34::i;:::-;22204;;-1:-1:-1;;;22204:34:0;;-1:-1:-1;;;;;4646:32:1;;;22204:34:0;;;4628:51:1;22140:49:0;;-1:-1:-1;22217:7:0;22204:28;;;;;;4601:18:1;;22204:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22200:119;;;22264:43;;-1:-1:-1;;;22264:43:0;;;;;26407:25:1;;;-1:-1:-1;;;;;26468:32:1;;;26448:18;;;26441:60;22264:24:0;;;;;26380:18:1;;22264:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22255:52;;22200:119;22129:197;22010:316;;;;;;:::o;37911:752::-;38234:16;38252:14;38279:12;38294:37;38302:5;38317:4;38324:6;38294:7;:37::i;:::-;38279:52;;38342:10;38355;:39;;38385:9;38355:39;;;-1:-1:-1;;38355:39:0;38405:71;;-1:-1:-1;;;38405:71:0;;38342:52;;-1:-1:-1;;;;;;38405:18:0;;;;;:71;;38424:10;;38444:4;;38342:52;;38458:8;;38468:1;;38471;;38474;;38405:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38514:141;38576:5;38583:6;38591:9;38602:14;38618:12;38632:2;38636:8;38514:47;:141::i;22990:119::-;23067:34;;-1:-1:-1;;;23067:34:0;;-1:-1:-1;;;;;4646:32:1;;;23067:34:0;;;4628:51:1;23043:4:0;;23080:7;23067:28;;;;;;4601:18:1;;23067:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23060:41;22990:119;-1:-1:-1;;22990:119:0:o;34199:587::-;34406:21;34387:8;18827:15;18815:8;:27;;18807:65;;;;-1:-1:-1;;;18807:65:0;;;;;;;:::i;:::-;34450:31:::1;34464:8;34474:6;;34450:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;34440:41;;34531:12;34500:7;34525:1;34508:7;:14;:18;;;;:::i;:::-;34500:27;;;;;;;;:::i;:::-;;;;;;;:43;;34492:100;;;;-1:-1:-1::0;;;34492:100:0::1;;;;;;;:::i;:::-;34603:138;34635:6;;34642:1;34635:9;;;;;;;:::i;34603:138::-;34752:26;34758:7;34767:6;;34752:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;37176:729:::0;37447:16;37465:14;37428:8;18827:15;18815:8;:27;;18807:65;;;;-1:-1:-1;;;18807:65:0;;;;;;;:::i;:::-;37519:226:::1;37549:5;37577:4;37597:6;37618:9;37642:14;37671:12;37706:4;37726:8;37519:15;:226::i;:::-;37781:38;::::0;-1:-1:-1;;;37781:38:0;;37813:4:::1;37781:38;::::0;::::1;4628:51:1::0;37492:253:0;;-1:-1:-1;37492:253:0;-1:-1:-1;37756:64:0::1;::::0;37770:5;;37777:2;;-1:-1:-1;;;;;37781:23:0;::::1;::::0;::::1;::::0;4601:18:1;;37781:38:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37756:13;:64::i;43118:444::-:0;43249:1;43229:5;-1:-1:-1;;;;;43229:17:0;;:21;43221:74;;;;-1:-1:-1;;;43221:74:0;;;;;;;:::i;:::-;43362:69;;;-1:-1:-1;;;;;19662:15:1;;;43362:69:0;;;19644:34:1;19714:15;;;19694:18;;;19687:43;19746:18;;;;19739:34;;;43362:69:0;;;;;;;;;;19579:18:1;;;;43362:69:0;;;;;;;-1:-1:-1;;;;;43362:69:0;-1:-1:-1;;;43362:69:0;;;43351:81;;-1:-1:-1;;;;43351:10:0;;;;:81;;43362:69;43351:81;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43306:126;;;;43451:7;:57;;;;-1:-1:-1;43463:11:0;;:16;;:44;;;43494:4;43483:24;;;;;;;;;;;;:::i;:::-;43443:111;;;;-1:-1:-1;;;43443:111:0;;28249:2:1;43443:111:0;;;28231:21:1;28288:2;28268:18;;;28261:30;28327:34;28307:18;;;28300:62;-1:-1:-1;;;28378:18:1;;;28371:39;28427:19;;43443:111:0;28047:405:1;43443:111:0;43210:352;;43118:444;;;;:::o;32713:680::-;32820:6;32815:571;32836:6;:13;32832:1;:17;32815:571;;;32872:14;32891:40;32902:6;32909:1;32902:9;;;;;;;;:::i;:::-;;;;;;;:14;;;32918:6;32925:1;32918:9;;;;;;;;:::i;:::-;;;;;;;:12;;;32891:10;:40::i;:::-;-1:-1:-1;32871:60:0;-1:-1:-1;32946:14:0;32963:7;32971:5;:1;32975;32971:5;:::i;:::-;32963:14;;;;;;;;:::i;:::-;;;;;;;32946:31;;32993:15;33010;33047:6;-1:-1:-1;;;;;33029:24:0;:6;33036:1;33029:9;;;;;;;;:::i;:::-;;;;;;;:14;;;-1:-1:-1;;;;;33029:24:0;;:70;;33080:9;33096:1;33029:70;;;33062:1;33066:9;33029:70;32992:107;;;;33114:10;33147:1;33131:6;:13;:17;;;;:::i;:::-;33127:1;:21;:91;;33215:3;33127:91;;;33151:61;33159:6;33166:3;:1;33168;33166:3;:::i;:::-;33159:11;;;;;;;;:::i;:::-;;;;;;;:16;;;33177:6;33184:1;33186;33184:3;;;;:::i;:::-;33177:11;;;;;;;;:::i;:::-;;;;;;;:14;;;33193:6;33200:1;33202;33200:3;;;;:::i;:::-;33193:11;;;;;;;;:::i;33151:61::-;33114:104;;33239:55;33247:6;33254:1;33247:9;;;;;;;;:::i;:::-;;;;;;;:14;;;33263:6;33270:1;33263:9;;;;;;;;:::i;:::-;;;;;;;:12;;;33277:6;33284:1;33277:9;;;;;;;;:::i;33239:55::-;-1:-1:-1;;;;;33233:67:0;;33319:10;33331;33343:2;33357:1;33347:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33347:12:0;;33233:141;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32856:530;;;;;32851:3;;;;;:::i;:::-;;;;32815:571;;;;32713:680;;;:::o;42494:196::-;42603:12;;;42565;42603;;;;;;;;;-1:-1:-1;;;;;42582:7:0;;;42596:5;;42582:34;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42564:52;;;42635:7;42627:55;;;;-1:-1:-1;;;42627:55:0;;29288:2:1;42627:55:0;;;29270:21:1;29327:2;29307:18;;;29300:30;29366:34;29346:18;;;29339:62;-1:-1:-1;;;29417:18:1;;;29410:33;29460:19;;42627:55:0;29086:399:1;42627:55:0;42553:137;42494:196;;:::o;25367:1604::-;25599:12;25613;25664:10;25646:14;:28;;25638:82;;;;-1:-1:-1;;;25638:82:0;;29692:2:1;25638:82:0;;;29674:21:1;29731:2;29711:18;;;29704:30;29770:34;29750:18;;;29743:62;-1:-1:-1;;;29821:18:1;;;29814:39;29870:19;;25638:82:0;29490:405:1;25638:82:0;25757:10;25739:14;:28;;25731:82;;;;-1:-1:-1;;;25731:82:0;;30102:2:1;25731:82:0;;;30084:21:1;30141:2;30121:18;;;30114:30;30180:34;30160:18;;;30153:62;-1:-1:-1;;;30231:18:1;;;30224:39;30280:19;;25731:82:0;29900:405:1;25731:82:0;25892:53;;-1:-1:-1;;;25892:53:0;;25876:13;;-1:-1:-1;;;;;25905:7:0;25892:29;;;;:53;;25922:6;;25930;;25938;;25892:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25876:69;-1:-1:-1;;;;;;25960:19:0;;25956:116;;26004:56;;-1:-1:-1;;;26004:56:0;;-1:-1:-1;;;;;26017:7:0;26004:32;;;;:56;;26037:6;;26045;;26053;;26004:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25996:64;;25956:116;26083:13;26098;26115:35;26127:6;26135;26143;26115:11;:35::i;:::-;26082:68;;;;26165:8;26177:1;26165:13;:30;;;;-1:-1:-1;26182:13:0;;26165:30;26161:803;;;26234:14;;-1:-1:-1;26250:14:0;;-1:-1:-1;26161:803:0;;;26298:19;26320:50;26335:14;26351:8;26361;26320:14;:50::i;:::-;26298:72;;26407:14;26389;:32;26385:568;;26468:10;26450:14;:28;;26442:80;;;;-1:-1:-1;;;26442:80:0;;;;;;;:::i;:::-;26563:14;;-1:-1:-1;26579:14:0;-1:-1:-1;26579:14:0;26385:568;;;26635:19;26657:50;26672:14;26688:8;26698;26657:14;:50::i;:::-;26635:72;;26751:14;26733;:32;;26726:40;;;;:::i;:::-;26811:10;26793:14;:28;;26785:80;;;;-1:-1:-1;;;26785:80:0;;;;;;;:::i;:::-;26906:14;-1:-1:-1;26922:14:0;;-1:-1:-1;26385:568:0;26283:681;26161:803;25627:1344;;;25367:1604;;;;;;;;;;:::o;38808:1230::-;38923:6;38918:1113;38931:17;;;38918:1113;;;39049:14;39068:40;39079:6;;39086:1;39079:9;;;;;;;:::i;:::-;:14;;;:9;;;;;:14;;;;-1:-1:-1;39079:14:0;:::i;:::-;39095:6;;39102:1;39095:9;;;;;;;:::i;:::-;;;;;;:12;;;;;;;;;;:::i;39068:40::-;39048:60;;;39123:10;39142:55;39150:6;;39157:1;39150:9;;;;;;;:::i;:::-;:14;;;:9;;;;;:14;;;;-1:-1:-1;39150:14:0;:::i;:::-;39166:6;;39173:1;39166:9;;;;;;;:::i;:::-;;;;;;:12;;;;;;;;;;:::i;:::-;39180:6;;39187:1;39180:9;;;;;;;:::i;39142:55::-;39123:75;;39213:16;39244:17;39333:13;39348;39366:4;-1:-1:-1;;;;;39366:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39332:52;;;;;39401:17;39441:6;-1:-1:-1;;;;;39423:24:0;:6;;39430:1;39423:9;;;;;;;:::i;:::-;:14;;;:9;;;;;:14;;;;-1:-1:-1;39423:14:0;:::i;:::-;-1:-1:-1;;;;;39423:24:0;;:70;;39474:8;39484;39423:70;;;39451:8;39461;39423:70;39400:93;;;39574:12;39530:6;;39537:1;39530:9;;;;;;;:::i;:::-;:14;;;:9;;;;;:14;;;;-1:-1:-1;39530:14:0;:::i;:::-;39523:47;;-1:-1:-1;;;39523:47:0;;-1:-1:-1;;;;;4646:32:1;;;39523:47:0;;;4628:51:1;39523:32:0;;;;;;;4601:18:1;;39523:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:64;;;;:::i;:::-;39509:78;;39618:73;39631:11;39644:6;;39651:1;39644:9;;;;;;;:::i;:::-;:14;;;:9;;;;;:14;;;;-1:-1:-1;39644:14:0;:::i;:::-;39660:6;;39667:1;39660:9;;;;;;;:::i;:::-;;;;;;:12;;;;;;;;;;:::i;:::-;39674:6;;39681:1;39674:9;;;;;;;:::i;:::-;;;;;;:16;;;;;;;;;;:::i;39618:73::-;39603:88;;39276:431;;;39722:15;39739;39776:6;-1:-1:-1;;;;;39758:24:0;:6;;39765:1;39758:9;;;;;;;:::i;:::-;:14;;;:9;;;;;:14;;;;-1:-1:-1;39758:14:0;:::i;:::-;-1:-1:-1;;;;;39758:24:0;;:76;;39812:12;39831:1;39758:76;;;39791:1;39795:12;39758:76;39721:113;;-1:-1:-1;39721:113:0;-1:-1:-1;39849:10:0;39866:17;39882:1;39866:6;:17;:::i;:::-;39862:1;:21;:91;;39950:3;39862:91;;;39886:61;39894:6;;39901:3;:1;39903;39901:3;:::i;:::-;39894:11;;;;;;;:::i;:::-;:16;;;:11;;;;;:16;;;;-1:-1:-1;39894:16:0;:::i;:::-;39912:6;;39919:3;:1;39921;39919:3;:::i;:::-;39912:11;;;;;;;:::i;:::-;;;;;;:14;;;;;;;;;;:::i;:::-;39928:6;;39935:3;:1;39937;39935:3;:::i;:::-;39928:11;;;;;;;:::i;39886:61::-;40006:12;;;40016:1;40006:12;;;;;;;;;-1:-1:-1;;;39968:51:0;;;39849:104;;-1:-1:-1;;;;;;39968:9:0;;;;;:51;;39978:10;;39990;;39849:104;;39968:51;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38955:1076;;;;;;;38950:3;;;;;:::i;:::-;;;;38918:1113;;8530:1673;8578:7;8602:6;8598:47;;-1:-1:-1;8632:1:0;;8530:1673;-1:-1:-1;8530:1673:0:o;8598:47::-;9336:14;9370:1;9359:7;9364:1;9359:4;:7::i;:::-;:12;;9353:1;:19;;9336:36;;9838:1;9827:6;9823:1;:10;;;;;:::i;:::-;;9814:6;:19;9813:26;;9804:35;;9888:1;9877:6;9873:1;:10;;;;;:::i;:::-;;9864:6;:19;9863:26;;9854:35;;9938:1;9927:6;9923:1;:10;;;;;:::i;:::-;;9914:6;:19;9913:26;;9904:35;;9988:1;9977:6;9973:1;:10;;;;;:::i;:::-;;9964:6;:19;9963:26;;9954:35;;10038:1;10027:6;10023:1;:10;;;;;:::i;:::-;;10014:6;:19;10013:26;;10004:35;;10088:1;10077:6;10073:1;:10;;;;;:::i;:::-;;10064:6;:19;10063:26;;10054:35;;10138:1;10127:6;10123:1;:10;;;;;:::i;:::-;;10114:6;:19;10113:26;;10104:35;;10161:23;10165:6;10177;10173:1;:10;;;;;:::i;:::-;;10161:3;:23::i;:::-;10154:30;8530:1673;-1:-1:-1;;;8530:1673:0:o;20356:327::-;20447:12;20490:1;20480:7;:11;20472:61;;;;-1:-1:-1;;;20472:61:0;;30512:2:1;20472:61:0;;;30494:21:1;30551:2;30531:18;;;30524:30;30590:34;30570:18;;;30563:62;-1:-1:-1;;;30641:18:1;;;30634:35;30686:19;;20472:61:0;30310:401:1;20472:61:0;20563:1;20552:8;:12;:28;;;;;20579:1;20568:8;:12;20552:28;20544:81;;;;-1:-1:-1;;;20544:81:0;;30918:2:1;20544:81:0;;;30900:21:1;30957:2;30937:18;;;30930:30;30996:34;30976:18;;;30969:62;-1:-1:-1;;;31047:18:1;;;31040:38;31095:19;;20544:81:0;30716:404:1;20544:81:0;20667:8;20646:18;20656:8;20646:7;:18;:::i;:::-;:29;;;;:::i;2462:106::-;2520:7;2551:1;2547;:5;:13;;2559:1;2547:13;;;-1:-1:-1;2555:1:0;;2540:20;-1:-1:-1;2462:106:0:o;42698:412::-;42811:1;42791:5;-1:-1:-1;;;;;42791:17:0;;:21;42783:74;;;;-1:-1:-1;;;42783:74:0;;;;;;;:::i;:::-;42924:59;;;-1:-1:-1;;;;;26146:32:1;;;42924:59:0;;;26128:51:1;26195:18;;;;26188:34;;;42924:59:0;;;;;;;;;;26101:18:1;;;;42924:59:0;;;;;;;-1:-1:-1;;;;;42924:59:0;-1:-1:-1;;;42924:59:0;;;42913:71;;-1:-1:-1;;;;42913:10:0;;;;:71;;42924:59;42913:71;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42868:116;;;;43003:7;:57;;;;-1:-1:-1;43015:11:0;;:16;;:44;;;43046:4;43035:24;;;;;;;;;;;;:::i;:::-;42995:107;;;;-1:-1:-1;;;42995:107:0;;31327:2:1;42995:107:0;;;31309:21:1;31366:2;31346:18;;;31339:30;31405:34;31385:18;;;31378:62;-1:-1:-1;;;31456:18:1;;;31449:35;31501:19;;42995:107:0;31125:401:1;42995:107:0;42772:338;;42698:412;;;:::o;10680:1019::-;10732:7;;10819:3;10810:12;;;:16;10806:102;;10857:3;10847:13;;;;10879;10806:102;10935:2;10926:11;;;:15;10922:99;;10972:2;10962:12;;;;10993;10922:99;11048:2;11039:11;;;:15;11035:99;;11085:2;11075:12;;;;11106;11035:99;11161:2;11152:11;;;:15;11148:99;;11198:2;11188:12;;;;11219;11148:99;11274:1;11265:10;;;:14;11261:96;;11310:1;11300:11;;;;11330;11261:96;11384:1;11375:10;;;:14;11371:96;;11420:1;11410:11;;;;11440;11371:96;11494:1;11485:10;;;:14;11481:96;;11530:1;11520:11;;;;11550;11481:96;11604:1;11595:10;;;:14;11591:66;;11640:1;11630:11;11685:6;10680:1019;-1:-1:-1;;10680:1019:0:o;14:127:1:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:131;-1:-1:-1;;;;;221:31:1;;211:42;;201:70;;267:1;264;257:12;201:70;146:131;:::o;282:134::-;350:20;;379:31;350:20;379:31;:::i;:::-;282:134;;;:::o;421:118::-;507:5;500:13;493:21;486:5;483:32;473:60;;529:1;526;519:12;544:941;663:6;671;679;687;695;703;711;719;772:3;760:9;751:7;747:23;743:33;740:53;;;789:1;786;779:12;740:53;828:9;815:23;847:31;872:5;847:31;:::i;:::-;897:5;-1:-1:-1;954:2:1;939:18;;926:32;967:33;926:32;967:33;:::i;:::-;1019:7;-1:-1:-1;1078:2:1;1063:18;;1050:32;1091:30;1050:32;1091:30;:::i;:::-;1140:7;-1:-1:-1;1194:2:1;1179:18;;1166:32;;-1:-1:-1;1245:3:1;1230:19;;1217:33;;-1:-1:-1;1297:3:1;1282:19;;1269:33;;-1:-1:-1;1354:3:1;1339:19;;1326:33;1368;1326;1368;:::i;:::-;1420:7;1410:17;;;1474:3;1463:9;1459:19;1446:33;1436:43;;544:941;;;;;;;;;;;:::o;1743:872::-;1853:6;1861;1869;1877;1885;1893;1901;1954:3;1942:9;1933:7;1929:23;1925:33;1922:53;;;1971:1;1968;1961:12;1922:53;2007:9;1994:23;1984:33;;2064:2;2053:9;2049:18;2036:32;2026:42;;2118:2;2107:9;2103:18;2090:32;2131:31;2156:5;2131:31;:::i;:::-;2181:5;-1:-1:-1;2238:2:1;2223:18;;2210:32;2251:33;2210:32;2251:33;:::i;:::-;2303:7;-1:-1:-1;2362:3:1;2347:19;;2334:33;2376:30;2334:33;2376:30;:::i;:::-;2425:7;-1:-1:-1;2484:3:1;2469:19;;2456:33;2498;2456;2498;:::i;:::-;2550:7;2540:17;;;2604:3;2593:9;2589:19;2576:33;2566:43;;1743:872;;;;;;;;;;:::o;2620:632::-;2791:2;2843:21;;;2913:13;;2816:18;;;2935:22;;;2762:4;;2791:2;3014:15;;;;2988:2;2973:18;;;2762:4;3057:169;3071:6;3068:1;3065:13;3057:169;;;3132:13;;3120:26;;3201:15;;;;3166:12;;;;3093:1;3086:9;3057:169;;;-1:-1:-1;3243:3:1;;2620:632;-1:-1:-1;;;;;;2620:632:1:o;3257:384::-;3334:8;3344:6;3398:3;3391:4;3383:6;3379:17;3375:27;3365:55;;3416:1;3413;3406:12;3365:55;-1:-1:-1;3439:20:1;;3482:18;3471:30;;3468:50;;;3514:1;3511;3504:12;3468:50;3551:4;3543:6;3539:17;3527:29;;3614:3;3607:4;3599;3591:6;3587:17;3579:6;3575:30;3571:41;3568:50;3565:70;;;3631:1;3628;3621:12;3646:817;3793:6;3801;3809;3817;3825;3833;3886:3;3874:9;3865:7;3861:23;3857:33;3854:53;;;3903:1;3900;3893:12;3854:53;3939:9;3926:23;3916:33;;3996:2;3985:9;3981:18;3968:32;3958:42;;4051:2;4040:9;4036:18;4023:32;4078:18;4070:6;4067:30;4064:50;;;4110:1;4107;4100:12;4064:50;4149:84;4225:7;4216:6;4205:9;4201:22;4149:84;:::i;:::-;4252:8;;-1:-1:-1;4123:110:1;-1:-1:-1;;4337:2:1;4322:18;;4309:32;4350:31;4309:32;4350:31;:::i;:::-;4400:5;4390:15;;;4452:3;4441:9;4437:19;4424:33;4414:43;;3646:817;;;;;;;;:::o;4690:592::-;4773:6;4781;4789;4797;4850:3;4838:9;4829:7;4825:23;4821:33;4818:53;;;4867:1;4864;4857:12;4818:53;4906:9;4893:23;4925:31;4950:5;4925:31;:::i;:::-;4975:5;-1:-1:-1;5032:2:1;5017:18;;5004:32;5045:33;5004:32;5045:33;:::i;:::-;5097:7;-1:-1:-1;5156:2:1;5141:18;;5128:32;5169:30;5128:32;5169:30;:::i;:::-;4690:592;;;;-1:-1:-1;5218:7:1;;5272:2;5257:18;5244:32;;-1:-1:-1;;4690:592:1:o;5287:156::-;5353:20;;5413:4;5402:16;;5392:27;;5382:55;;5433:1;5430;5423:12;5448:1146;5589:6;5597;5605;5613;5621;5629;5637;5645;5653;5661;5669:7;5723:3;5711:9;5702:7;5698:23;5694:33;5691:53;;;5740:1;5737;5730:12;5691:53;5779:9;5766:23;5798:31;5823:5;5798:31;:::i;:::-;5848:5;-1:-1:-1;5905:2:1;5890:18;;5877:32;5918:30;5877:32;5918:30;:::i;:::-;5967:7;-1:-1:-1;6021:2:1;6006:18;;5993:32;;-1:-1:-1;6072:2:1;6057:18;;6044:32;;-1:-1:-1;6123:3:1;6108:19;;6095:33;;-1:-1:-1;6180:3:1;6165:19;;6152:33;6194;6152;6194;:::i;:::-;6246:7;-1:-1:-1;6300:3:1;6285:19;;6272:33;;-1:-1:-1;6357:3:1;6342:19;;6329:33;6371:30;6329:33;6371:30;:::i;:::-;6420:7;-1:-1:-1;6446:37:1;6478:3;6463:19;;6446:37;:::i;:::-;6436:47;;6530:3;6519:9;6515:19;6502:33;6492:43;;6583:3;6572:9;6568:19;6555:33;6544:44;;5448:1146;;;;;;;;;;;;;;:::o;6822:523::-;6896:6;6904;6912;6965:2;6953:9;6944:7;6940:23;6936:32;6933:52;;;6981:1;6978;6971:12;6933:52;7020:9;7007:23;7039:31;7064:5;7039:31;:::i;:::-;7089:5;-1:-1:-1;7146:2:1;7131:18;;7118:32;7159:33;7118:32;7159:33;:::i;:::-;7211:7;-1:-1:-1;7270:2:1;7255:18;;7242:32;7283:30;7242:32;7283:30;:::i;:::-;7332:7;7322:17;;;6822:523;;;;;:::o;7558:388::-;7626:6;7634;7687:2;7675:9;7666:7;7662:23;7658:32;7655:52;;;7703:1;7700;7693:12;7655:52;7742:9;7729:23;7761:31;7786:5;7761:31;:::i;:::-;7811:5;-1:-1:-1;7868:2:1;7853:18;;7840:32;7881:33;7840:32;7881:33;:::i;:::-;7933:7;7923:17;;;7558:388;;;;;:::o;8260:1010::-;8388:6;8396;8404;8412;8420;8428;8436;8444;8452;8505:3;8493:9;8484:7;8480:23;8476:33;8473:53;;;8522:1;8519;8512:12;8473:53;8561:9;8548:23;8580:31;8605:5;8580:31;:::i;:::-;8630:5;-1:-1:-1;8687:2:1;8672:18;;8659:32;8700:33;8659:32;8700:33;:::i;:::-;8752:7;-1:-1:-1;8811:2:1;8796:18;;8783:32;8824:30;8783:32;8824:30;:::i;:::-;8873:7;-1:-1:-1;8927:2:1;8912:18;;8899:32;;-1:-1:-1;8978:3:1;8963:19;;8950:33;;-1:-1:-1;9030:3:1;9015:19;;9002:33;;-1:-1:-1;9082:3:1;9067:19;;9054:33;;-1:-1:-1;9139:3:1;9124:19;;9111:33;9153;9111;9153;:::i;:::-;9205:7;9195:17;;;9259:3;9248:9;9244:19;9231:33;9221:43;;8260:1010;;;;;;;;;;;:::o;9599:456::-;9676:6;9684;9692;9745:2;9733:9;9724:7;9720:23;9716:32;9713:52;;;9761:1;9758;9751:12;9713:52;9797:9;9784:23;9774:33;;9857:2;9846:9;9842:18;9829:32;9870:31;9895:5;9870:31;:::i;:::-;9920:5;-1:-1:-1;9977:2:1;9962:18;;9949:32;9990:33;9949:32;9990:33;:::i;10323:748::-;10461:6;10469;10477;10485;10493;10546:3;10534:9;10525:7;10521:23;10517:33;10514:53;;;10563:1;10560;10553:12;10514:53;10599:9;10586:23;10576:33;;10660:2;10649:9;10645:18;10632:32;10687:18;10679:6;10676:30;10673:50;;;10719:1;10716;10709:12;10673:50;10758:84;10834:7;10825:6;10814:9;10810:22;10758:84;:::i;:::-;10861:8;;-1:-1:-1;10732:110:1;-1:-1:-1;;10946:2:1;10931:18;;10918:32;10959:31;10918:32;10959:31;:::i;:::-;10323:748;;;;-1:-1:-1;10323:748:1;;11061:2;11046:18;11033:32;;10323:748;-1:-1:-1;;10323:748:1:o;11076:127::-;11137:10;11132:3;11128:20;11125:1;11118:31;11168:4;11165:1;11158:15;11192:4;11189:1;11182:15;11208:275;11279:2;11273:9;11344:2;11325:13;;-1:-1:-1;;11321:27:1;11309:40;;11379:18;11364:34;;11400:22;;;11361:62;11358:88;;;11426:18;;:::i;:::-;11462:2;11455:22;11208:275;;-1:-1:-1;11208:275:1:o;11488:183::-;11548:4;11581:18;11573:6;11570:30;11567:56;;;11603:18;;:::i;:::-;-1:-1:-1;11648:1:1;11644:14;11660:4;11640:25;;11488:183::o;11676:1411::-;11839:6;11847;11855;11863;11871;11924:3;11912:9;11903:7;11899:23;11895:33;11892:53;;;11941:1;11938;11931:12;11892:53;11981:9;11968:23;12010:18;12051:2;12043:6;12040:14;12037:34;;;12067:1;12064;12057:12;12037:34;12105:6;12094:9;12090:22;12080:32;;12150:7;12143:4;12139:2;12135:13;12131:27;12121:55;;12172:1;12169;12162:12;12121:55;12208:2;12195:16;12230:4;12254:60;12270:43;12310:2;12270:43;:::i;:::-;12254:60;:::i;:::-;12348:15;;;12430:1;12426:10;;;;12418:19;;12414:28;;;12379:12;;;;12454:19;;;12451:39;;;12486:1;12483;12476:12;12451:39;12510:11;;;;12530:142;12546:6;12541:3;12538:15;12530:142;;;12612:17;;12600:30;;12563:12;;;;12650;;;;12530:142;;;12691:5;-1:-1:-1;;12734:18:1;;12721:32;;-1:-1:-1;;12765:16:1;;;12762:36;;;12794:1;12791;12784:12;12762:36;;12833:86;12911:7;12900:8;12889:9;12885:24;12833:86;:::i;:::-;12938:8;;-1:-1:-1;12807:112:1;-1:-1:-1;12992:38:1;;-1:-1:-1;13026:2:1;13011:18;;12992:38;:::i;13092:752::-;13144:5;13192:4;13180:9;13175:3;13171:19;13167:30;13164:50;;;13210:1;13207;13200:12;13164:50;13243:2;13237:9;13285:4;13277:6;13273:17;13356:6;13344:10;13341:22;13320:18;13308:10;13305:34;13302:62;13299:88;;;13367:18;;:::i;:::-;13403:2;13396:22;13436:6;-1:-1:-1;13436:6:1;13466:23;;13498:33;13466:23;13498:33;:::i;:::-;13540:23;;13615:2;13600:18;;13587:32;13628:33;13587:32;13628:33;:::i;:::-;13689:2;13677:15;;13670:32;13754:2;13739:18;;13726:32;13767:30;13726:32;13767:30;:::i;:::-;13825:2;13813:15;;;;13806:32;13092:752;;-1:-1:-1;;13092:752:1:o;13849:1026::-;13965:6;13973;14026:2;14014:9;14005:7;14001:23;13997:32;13994:52;;;14042:1;14039;14032:12;13994:52;14078:9;14065:23;14055:33;;14107:2;14160;14149:9;14145:18;14132:32;14187:18;14179:6;14176:30;14173:50;;;14219:1;14216;14209:12;14173:50;14242:22;;14295:4;14287:13;;14283:27;-1:-1:-1;14273:55:1;;14324:1;14321;14314:12;14273:55;14360:2;14347:16;14383:60;14399:43;14439:2;14399:43;:::i;14383:60::-;14477:15;;;14539:4;14578:11;;;14570:20;;14566:29;;;14508:12;;;;14465:3;14607:19;;;14604:39;;;14639:1;14636;14629:12;14604:39;14663:11;;;;14683:162;14699:6;14694:3;14691:15;14683:162;;;14765:37;14794:7;14789:3;14765:37;:::i;:::-;14753:50;;14716:12;;;;14823;;;;14683:162;;;14687:3;14864:5;14854:15;;;;;;;13849:1026;;;;;:::o;14880:661::-;14972:6;14980;14988;14996;15004;15057:3;15045:9;15036:7;15032:23;15028:33;15025:53;;;15074:1;15071;15064:12;15025:53;15113:9;15100:23;15132:31;15157:5;15132:31;:::i;:::-;15182:5;-1:-1:-1;15239:2:1;15224:18;;15211:32;15252:33;15211:32;15252:33;:::i;:::-;15304:7;-1:-1:-1;15363:2:1;15348:18;;15335:32;15376:30;15335:32;15376:30;:::i;:::-;14880:661;;;;-1:-1:-1;15425:7:1;;15479:2;15464:18;;15451:32;;-1:-1:-1;15530:3:1;15515:19;15502:33;;14880:661;-1:-1:-1;;14880:661:1:o;15728:1290::-;15878:6;15886;15894;15902;15910;15918;15926;15934;15942;15950;15958:7;15967;16021:3;16009:9;16000:7;15996:23;15992:33;15989:53;;;16038:1;16035;16028:12;15989:53;16077:9;16064:23;16096:31;16121:5;16096:31;:::i;:::-;16146:5;-1:-1:-1;16203:2:1;16188:18;;16175:32;16216:33;16175:32;16216:33;:::i;:::-;16268:7;-1:-1:-1;16327:2:1;16312:18;;16299:32;16340:30;16299:32;16340:30;:::i;:::-;16389:7;-1:-1:-1;16443:2:1;16428:18;;16415:32;;-1:-1:-1;16494:3:1;16479:19;;16466:33;;-1:-1:-1;16546:3:1;16531:19;;16518:33;;-1:-1:-1;16603:3:1;16588:19;;16575:33;16617;16575;16617;:::i;:::-;16669:7;-1:-1:-1;16723:3:1;16708:19;;16695:33;;-1:-1:-1;16780:3:1;16765:19;;16752:33;16794:30;16752:33;16794:30;:::i;:::-;16843:7;-1:-1:-1;16869:37:1;16901:3;16886:19;;16869:37;:::i;:::-;16859:47;;16954:3;16943:9;16939:19;16926:33;16915:44;;17007:3;16996:9;16992:19;16979:33;16968:44;;15728:1290;;;;;;;;;;;;;;:::o;17023:799::-;17133:6;17141;17149;17157;17165;17173;17181;17234:3;17222:9;17213:7;17209:23;17205:33;17202:53;;;17251:1;17248;17241:12;17202:53;17290:9;17277:23;17309:31;17334:5;17309:31;:::i;:::-;17359:5;-1:-1:-1;17416:2:1;17401:18;;17388:32;17429:30;17388:32;17429:30;:::i;:::-;17478:7;-1:-1:-1;17532:2:1;17517:18;;17504:32;;-1:-1:-1;17583:2:1;17568:18;;17555:32;;-1:-1:-1;17634:3:1;17619:19;;17606:33;;-1:-1:-1;17691:3:1;17676:19;;17663:33;17705;17663;17705;:::i;17827:592::-;17910:6;17918;17926;17934;17987:3;17975:9;17966:7;17962:23;17958:33;17955:53;;;18004:1;18001;17994:12;17955:53;18040:9;18027:23;18017:33;;18100:2;18089:9;18085:18;18072:32;18113:31;18138:5;18113:31;:::i;:::-;18163:5;-1:-1:-1;18220:2:1;18205:18;;18192:32;18233:33;18192:32;18233:33;:::i;:::-;18285:7;-1:-1:-1;18344:2:1;18329:18;;18316:32;18357:30;18316:32;18357:30;:::i;:::-;17827:592;;;;-1:-1:-1;17827:592:1;;-1:-1:-1;;17827:592:1:o;18606:247::-;18665:6;18718:2;18706:9;18697:7;18693:23;18689:32;18686:52;;;18734:1;18731;18724:12;18686:52;18773:9;18760:23;18792:31;18817:5;18792:31;:::i;19050:349::-;19252:2;19234:21;;;19291:2;19271:18;;;19264:30;19330:27;19325:2;19310:18;;19303:55;19390:2;19375:18;;19050:349::o;19784:245::-;19851:6;19904:2;19892:9;19883:7;19879:23;19875:32;19872:52;;;19920:1;19917;19910:12;19872:52;19952:9;19946:16;19971:28;19993:5;19971:28;:::i;20446:245::-;20525:6;20533;20586:2;20574:9;20565:7;20561:23;20557:32;20554:52;;;20602:1;20599;20592:12;20554:52;-1:-1:-1;;20625:16:1;;20681:2;20666:18;;;20660:25;20625:16;;20660:25;;-1:-1:-1;20446:245:1:o;20696:403::-;20898:2;20880:21;;;20937:2;20917:18;;;20910:30;20976:34;20971:2;20956:18;;20949:62;-1:-1:-1;;;21042:2:1;21027:18;;21020:37;21089:3;21074:19;;20696:403::o;21104:::-;21306:2;21288:21;;;21345:2;21325:18;;;21318:30;21384:34;21379:2;21364:18;;21357:62;-1:-1:-1;;;21450:2:1;21435:18;;21428:37;21497:3;21482:19;;21104:403::o;21512:127::-;21573:10;21568:3;21564:20;21561:1;21554:31;21604:4;21601:1;21594:15;21628:4;21625:1;21618:15;21644:127;21705:10;21700:3;21696:20;21693:1;21686:31;21736:4;21733:1;21726:15;21760:4;21757:1;21750:15;21776:125;21816:4;21844:1;21841;21838:8;21835:34;;;21849:18;;:::i;:::-;-1:-1:-1;21886:9:1;;21776:125::o;21906:408::-;22108:2;22090:21;;;22147:2;22127:18;;;22120:30;22186:34;22181:2;22166:18;;22159:62;-1:-1:-1;;;22252:2:1;22237:18;;22230:42;22304:3;22289:19;;21906:408::o;22319:354::-;22521:2;22503:21;;;22560:2;22540:18;;;22533:30;22599:32;22594:2;22579:18;;22572:60;22664:2;22649:18;;22319:354::o;22678:223::-;22760:6;22813:2;22801:9;22792:7;22788:23;22784:32;22781:52;;;22829:1;22826;22819:12;22781:52;22852:43;22887:7;22876:9;22852:43;:::i;22906:241::-;22962:6;23015:2;23003:9;22994:7;22990:23;22986:32;22983:52;;;23031:1;23028;23021:12;22983:52;23070:9;23057:23;23089:28;23111:5;23089:28;:::i;23152:385::-;-1:-1:-1;;;;;23404:15:1;;;23386:34;;23456:15;;;;23451:2;23436:18;;23429:43;23515:14;;23508:22;23503:2;23488:18;;23481:50;23336:2;23321:18;;23152:385::o;23542:251::-;23612:6;23665:2;23653:9;23644:7;23640:23;23636:32;23633:52;;;23681:1;23678;23671:12;23633:52;23713:9;23707:16;23732:31;23757:5;23732:31;:::i;23798:184::-;23868:6;23921:2;23909:9;23900:7;23896:23;23892:32;23889:52;;;23937:1;23934;23927:12;23889:52;-1:-1:-1;23960:16:1;;23798:184;-1:-1:-1;23798:184:1:o;23987:168::-;24027:7;24093:1;24089;24085:6;24081:14;24078:1;24075:21;24070:1;24063:9;24056:17;24052:45;24049:71;;;24100:18;;:::i;:::-;-1:-1:-1;24140:9:1;;23987:168::o;24160:127::-;24221:10;24216:3;24212:20;24209:1;24202:31;24252:4;24249:1;24242:15;24276:4;24273:1;24266:15;24292:217;24332:1;24358;24348:132;;24402:10;24397:3;24393:20;24390:1;24383:31;24437:4;24434:1;24427:15;24465:4;24462:1;24455:15;24348:132;-1:-1:-1;24494:9:1;;24292:217::o;24514:670::-;-1:-1:-1;;;;;24881:15:1;;;24863:34;;24933:15;;;;24928:2;24913:18;;24906:43;24980:2;24965:18;;24958:34;;;;25023:2;25008:18;;25001:34;;;;25084:4;25072:17;25066:3;25051:19;;25044:46;24843:3;25106:19;;25099:35;25165:3;25150:19;;25143:35;;;;24812:3;24797:19;;24514:670::o;26512:306::-;26600:6;26608;26616;26669:2;26657:9;26648:7;26644:23;26640:32;26637:52;;;26685:1;26682;26675:12;26637:52;26714:9;26708:16;26698:26;;26764:2;26753:9;26749:18;26743:25;26733:35;;26808:2;26797:9;26793:18;26787:25;26777:35;;26512:306;;;;;:::o;26823:128::-;26863:3;26894:1;26890:6;26887:1;26884:13;26881:39;;;26900:18;;:::i;:::-;-1:-1:-1;26936:9:1;;26823:128::o;26956:135::-;26995:3;-1:-1:-1;;27016:17:1;;27013:43;;;27036:18;;:::i;:::-;-1:-1:-1;27083:1:1;27072:13;;26956:135::o;27096:404::-;27298:2;27280:21;;;27337:2;27317:18;;;27310:30;27376:34;27371:2;27356:18;;27349:62;-1:-1:-1;;;27442:2:1;27427:18;;27420:38;27490:3;27475:19;;27096:404::o;27505:258::-;27577:1;27587:113;27601:6;27598:1;27595:13;27587:113;;;27677:11;;;27671:18;27658:11;;;27651:39;27623:2;27616:10;27587:113;;;27718:6;27715:1;27712:13;27709:48;;;-1:-1:-1;;27753:1:1;27735:16;;27728:27;27505:258::o;27768:274::-;27897:3;27935:6;27929:13;27951:53;27997:6;27992:3;27985:4;27977:6;27973:17;27951:53;:::i;:::-;28020:16;;;;;27768:274;-1:-1:-1;;27768:274:1:o;28457:624::-;28688:6;28677:9;28670:25;28731:6;28726:2;28715:9;28711:18;28704:34;28803:1;28799;28794:3;28790:11;28786:19;28778:6;28774:32;28769:2;28758:9;28754:18;28747:60;28843:3;28838:2;28827:9;28823:18;28816:31;28651:4;28876:6;28870:13;28920:6;28914:3;28903:9;28899:19;28892:35;28936:67;28996:6;28990:3;28979:9;28975:19;28970:2;28962:6;28958:15;28936:67;:::i;:::-;29064:2;29043:15;-1:-1:-1;;29039:29:1;29024:45;;;;29071:3;29020:55;;28457:624;-1:-1:-1;;;;;28457:624:1:o
Swarm Source
ipfs://cd444ca4a823e7bf6d97abf4d9483f3138d5099df682cdb93d1901ea4ee1d882
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.