ETH Price: $2,485.59 (-1.28%)

Contract

0x9aB8E17bFdE144F0Ca46D81ED1144616d6433DA3
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Swap Exact Token...174213142023-06-06 12:09:23515 days ago1686053363IN
0x9aB8E17b...6d6433DA3
0 ETH0.0066784830
Swap Exact Token...171283802023-04-26 5:40:11556 days ago1682487611IN
0x9aB8E17b...6d6433DA3
0 ETH0.0074084633.04947677
Swap Exact Token...162741472022-12-27 5:58:59676 days ago1672120739IN
0x9aB8E17b...6d6433DA3
0 ETH0.002707417
Swap Exact Token...162741372022-12-27 5:56:59676 days ago1672120619IN
0x9aB8E17b...6d6433DA3
0 ETH0.0036620616
Swap Exact Token...159594932022-11-13 7:04:47720 days ago1668323087IN
0x9aB8E17b...6d6433DA3
0 ETH0.0053796224
Swap Exact Token...158514462022-10-29 4:50:59735 days ago1667019059IN
0x9aB8E17b...6d6433DA3
0 ETH0.0026899512
Swap Exact Token...157870972022-10-20 5:03:47744 days ago1666242227IN
0x9aB8E17b...6d6433DA3
0 ETH0.0057234725
Swap Exact FTM F...157660552022-10-17 6:30:47747 days ago1665988247IN
0x9aB8E17b...6d6433DA3
0.05 ETH0.0042189418
Swap Exact Token...157588152022-10-16 6:14:11748 days ago1665900851IN
0x9aB8E17b...6d6433DA3
0 ETH0.0033444321
Swap Exact FTM F...157587932022-10-16 6:09:47748 days ago1665900587IN
0x9aB8E17b...6d6433DA3
1 ETH0.0029649218
Swap Exact FTM F...157587772022-10-16 6:06:35748 days ago1665900395IN
0x9aB8E17b...6d6433DA3
0.01 ETH0.0042189418
Swap Exact FTM F...157403462022-10-13 16:20:11751 days ago1665678011IN
0x9aB8E17b...6d6433DA3
0.025 ETH0.007380350
Swap Exact FTM F...157403412022-10-13 16:19:11751 days ago1665677951IN
0x9aB8E17b...6d6433DA3
0.06 ETH0.0157030567
Swap Exact FTM F...157402202022-10-13 15:54:35751 days ago1665676475IN
0x9aB8E17b...6d6433DA3
0.05759913 ETH0.0076755152
Swap Exact FTM F...157402152022-10-13 15:53:35751 days ago1665676415IN
0x9aB8E17b...6d6433DA3
0.09844728 ETH0.0076761352
Swap Exact FTM F...157402102022-10-13 15:52:35751 days ago1665676355IN
0x9aB8E17b...6d6433DA3
0.06942 ETH0.0084006151
Swap Exact FTM F...157401972022-10-13 15:49:59751 days ago1665676199IN
0x9aB8E17b...6d6433DA3
0.1 ETH0.0088941254
Swap Exact FTM F...157401162022-10-13 15:33:47751 days ago1665675227IN
0x9aB8E17b...6d6433DA3
0.0815733 ETH0.0081189955
Swap Exact FTM F...157401022022-10-13 15:30:59751 days ago1665675059IN
0x9aB8E17b...6d6433DA3
0.0928193 ETH0.0098830860
Swap Exact FTM F...157400982022-10-13 15:30:11751 days ago1665675011IN
0x9aB8E17b...6d6433DA3
0.10124 ETH0.0097183659
Swap Exact FTM F...157400912022-10-13 15:28:47751 days ago1665674927IN
0x9aB8E17b...6d6433DA3
0.1 ETH0.0138294859
Swap Exact FTM F...156274272022-09-27 21:41:11766 days ago1664314871IN
0x9aB8E17b...6d6433DA3
0.1 ETH0.0037503616
Swap Exact FTM F...156183442022-09-26 15:09:23768 days ago1664204963IN
0x9aB8E17b...6d6433DA3
0.02 ETH0.0113647169
Swap Exact FTM F...156183362022-09-26 15:07:47768 days ago1664204867IN
0x9aB8E17b...6d6433DA3
0.4 ETH0.0174601106
Swap Exact FTM F...156183312022-09-26 15:06:47768 days ago1664204807IN
0x9aB8E17b...6d6433DA3
0.2 ETH0.011678470.89936541
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
174213142023-06-06 12:09:23515 days ago1686053363
0x9aB8E17b...6d6433DA3
1.34519514 ETH
174213142023-06-06 12:09:23515 days ago1686053363
0x9aB8E17b...6d6433DA3
1.34519514 ETH
171283802023-04-26 5:40:11556 days ago1682487611
0x9aB8E17b...6d6433DA3
0.10167333 ETH
171283802023-04-26 5:40:11556 days ago1682487611
0x9aB8E17b...6d6433DA3
0.10167333 ETH
162741472022-12-27 5:58:59676 days ago1672120739
0x9aB8E17b...6d6433DA3
1.33122058 ETH
162741472022-12-27 5:58:59676 days ago1672120739
0x9aB8E17b...6d6433DA3
1.33122058 ETH
162741372022-12-27 5:56:59676 days ago1672120619
0x9aB8E17b...6d6433DA3
0.00000111 ETH
162741372022-12-27 5:56:59676 days ago1672120619
0x9aB8E17b...6d6433DA3
0.00000111 ETH
159594932022-11-13 7:04:47720 days ago1668323087
0x9aB8E17b...6d6433DA3
0.09321167 ETH
159594932022-11-13 7:04:47720 days ago1668323087
0x9aB8E17b...6d6433DA3
0.09321167 ETH
158514462022-10-29 4:50:59735 days ago1667019059
0x9aB8E17b...6d6433DA3
0.41788178 ETH
158514462022-10-29 4:50:59735 days ago1667019059
0x9aB8E17b...6d6433DA3
0.41788178 ETH
157870972022-10-20 5:03:47744 days ago1666242227
0x9aB8E17b...6d6433DA3
0.8296551 ETH
157870972022-10-20 5:03:47744 days ago1666242227
0x9aB8E17b...6d6433DA3
0.8296551 ETH
157660552022-10-17 6:30:47747 days ago1665988247
0x9aB8E17b...6d6433DA3
0.05 ETH
157588152022-10-16 6:14:11748 days ago1665900851
0x9aB8E17b...6d6433DA3
0.49479037 ETH
157588152022-10-16 6:14:11748 days ago1665900851
0x9aB8E17b...6d6433DA3
0.49479037 ETH
157587932022-10-16 6:09:47748 days ago1665900587
0x9aB8E17b...6d6433DA3
1 ETH
157587772022-10-16 6:06:35748 days ago1665900395
0x9aB8E17b...6d6433DA3
0.01 ETH
157499322022-10-15 0:28:35749 days ago1665793715
0x9aB8E17b...6d6433DA3
0.00000973 ETH
157499322022-10-15 0:28:35749 days ago1665793715
0x9aB8E17b...6d6433DA3
0.00836526 ETH
157499322022-10-15 0:28:35749 days ago1665793715
0x9aB8E17b...6d6433DA3
0.008375 ETH
157499322022-10-15 0:28:35749 days ago1665793715
0x9aB8E17b...6d6433DA3
0.00825 ETH
157499322022-10-15 0:28:35749 days ago1665793715
0x9aB8E17b...6d6433DA3
0.00825 ETH
157450112022-10-14 7:59:23750 days ago1665734363
0x9aB8E17b...6d6433DA3
0.00129449 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BaseV1Router01

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU LGPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-12
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.11;

interface IBaseV1Factory {
    function allPairsLength() external view returns (uint);
    function isPair(address pair) external view returns (bool);
    function pairCodeHash() external pure returns (bytes32);
    function getPair(address tokenA, address token, bool stable) external view returns (address);
    function createPair(address tokenA, address tokenB, bool stable) external returns (address pair);
}

interface IBaseV1Pair {
    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 (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast);
    function getAmountOut(uint, address) external view returns (uint);
}

interface erc20 {
    function totalSupply() external view returns (uint256);
    function transfer(address recipient, uint amount) external returns (bool);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function balanceOf(address) external view returns (uint);
    function transferFrom(address sender, address recipient, uint amount) external returns (bool);
    function approve(address spender, uint value) external returns (bool);
}

library Math {
    function min(uint a, uint b) internal pure returns (uint) {
        return a < b ? a : b;
    }
    function sqrt(uint y) internal pure returns (uint z) {
        if (y > 3) {
            z = y;
            uint x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }
}

interface IWFTM {
    function deposit() external payable;
    function transfer(address to, uint value) external returns(bool);
    function withdraw(uint) external;
}

contract BaseV1Router01 {

    struct route {
        address from;
        address to;
        bool stable;
    }

    address public immutable factory;
    IWFTM public immutable wftm;
    uint internal constant MINIMUM_LIQUIDITY = 10**3;
    bytes32 immutable pairCodeHash;

    modifier ensure(uint deadline) {
        require(deadline >= block.timestamp, 'BaseV1Router: EXPIRED');
        _;
    }

    constructor(address _factory, address _wftm) {
        factory = _factory;
        pairCodeHash = IBaseV1Factory(_factory).pairCodeHash();
        wftm = IWFTM(_wftm);
    }

    receive() external payable {
        assert(msg.sender == address(wftm)); // only accept ETH via fallback from the WETH contract
    }

    function sortTokens(address tokenA, address tokenB) public pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'BaseV1Router: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'BaseV1Router: ZERO_ADDRESS');
    }

    // 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
        )))));
    }

    // 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, 'BaseV1Router: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'BaseV1Router: INSUFFICIENT_LIQUIDITY');
        amountB = amountA * reserveB / reserveA;
    }

    // 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,) = IBaseV1Pair(pairFor(tokenA, tokenB, stable)).getReserves();
        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
    }

    // performs chained getAmountOut calculations on any number of pairs
    function getAmountOut(uint amountIn, address tokenIn, address tokenOut) external view returns (uint amount, bool stable) {
        address pair = pairFor(tokenIn, tokenOut, true);
        uint amountStable;
        uint amountVolatile;
        if (IBaseV1Factory(factory).isPair(pair)) {
            amountStable = IBaseV1Pair(pair).getAmountOut(amountIn, tokenIn);
        }
        pair = pairFor(tokenIn, tokenOut, false);
        if (IBaseV1Factory(factory).isPair(pair)) {
            amountVolatile = IBaseV1Pair(pair).getAmountOut(amountIn, tokenIn);
        }
        return amountStable > amountVolatile ? (amountStable, true) : (amountVolatile, false);
    }

    // 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, 'BaseV1Router: 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 (IBaseV1Factory(factory).isPair(pair)) {
                amounts[i+1] = IBaseV1Pair(pair).getAmountOut(amounts[i], routes[i].from);
            }
        }
    }

    function isPair(address pair) external view returns (bool) {
        return IBaseV1Factory(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 = IBaseV1Factory(factory).getPair(tokenA, tokenB, stable);
        (uint reserveA, uint reserveB) = (0,0);
        uint _totalSupply = 0;
        if (_pair != address(0)) {
            _totalSupply = erc20(_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 = IBaseV1Factory(factory).getPair(tokenA, tokenB, stable);

        if (_pair == address(0)) {
            return (0,0);
        }

        (uint reserveA, uint reserveB) = getReserves(tokenA, tokenB, stable);
        uint _totalSupply = erc20(_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);
        require(amountBDesired >= amountBMin);
        // create the pair if it doesn't exist yet
        address _pair = IBaseV1Factory(factory).getPair(tokenA, tokenB, stable);
        if (_pair == address(0)) {
            _pair = IBaseV1Factory(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, 'BaseV1Router: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = quoteLiquidity(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'BaseV1Router: 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);
        liquidity = IBaseV1Pair(pair).mint(to);
    }

    function addLiquidityFTM(
        address token,
        bool stable,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountFTMMin,
        address to,
        uint deadline
    ) external payable ensure(deadline) returns (uint amountToken, uint amountFTM, uint liquidity) {
        (amountToken, amountFTM) = _addLiquidity(
            token,
            address(wftm),
            stable,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountFTMMin
        );
        address pair = pairFor(token, address(wftm), stable);
        _safeTransferFrom(token, msg.sender, pair, amountToken);
        wftm.deposit{value: amountFTM}();
        assert(wftm.transfer(pair, amountFTM));
        liquidity = IBaseV1Pair(pair).mint(to);
        // refund dust eth, if any
        if (msg.value > amountFTM) _safeTransferFTM(msg.sender, msg.value - amountFTM);
    }

    // **** 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(IBaseV1Pair(pair).transferFrom(msg.sender, pair, liquidity)); // send liquidity to pair
        (uint amount0, uint amount1) = IBaseV1Pair(pair).burn(to);
        (address token0,) = sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'BaseV1Router: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'BaseV1Router: INSUFFICIENT_B_AMOUNT');
    }

    function removeLiquidityFTM(
        address token,
        bool stable,
        uint liquidity,
        uint amountTokenMin,
        uint amountFTMMin,
        address to,
        uint deadline
    ) public ensure(deadline) returns (uint amountToken, uint amountFTM) {
        (amountToken, amountFTM) = removeLiquidity(
            token,
            address(wftm),
            stable,
            liquidity,
            amountTokenMin,
            amountFTMMin,
            address(this),
            deadline
        );
        _safeTransfer(token, to, amountToken);
        wftm.withdraw(amountFTM);
        _safeTransferFTM(to, amountFTM);
    }

    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;
            IBaseV1Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        }

        (amountA, amountB) = removeLiquidity(tokenA, tokenB, stable, liquidity, amountAMin, amountBMin, to, deadline);
    }

    function removeLiquidityFTMWithPermit(
        address token,
        bool stable,
        uint liquidity,
        uint amountTokenMin,
        uint amountFTMMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountFTM) {
        address pair = pairFor(token, address(wftm), stable);
        uint value = approveMax ? type(uint).max : liquidity;
        IBaseV1Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountToken, amountFTM) = removeLiquidityFTM(token, stable, liquidity, amountTokenMin, amountFTMMin, to, deadline);
    }

    // **** 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;
            IBaseV1Pair(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, 'BaseV1Router: 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, 'BaseV1Router: 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 swapExactFTMForTokens(uint amountOutMin, route[] calldata routes, address to, uint deadline)
    external
    payable
    ensure(deadline)
    returns (uint[] memory amounts)
    {
        require(routes[0].from == address(wftm), 'BaseV1Router: INVALID_PATH');
        amounts = getAmountsOut(msg.value, routes);
        require(amounts[amounts.length - 1] >= amountOutMin, 'BaseV1Router: INSUFFICIENT_OUTPUT_AMOUNT');
        wftm.deposit{value: amounts[0]}();
        assert(wftm.transfer(pairFor(routes[0].from, routes[0].to, routes[0].stable), amounts[0]));
        _swap(amounts, routes, to);
    }

    function swapExactTokensForFTM(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(wftm), 'BaseV1Router: INVALID_PATH');
        amounts = getAmountsOut(amountIn, routes);
        require(amounts[amounts.length - 1] >= amountOutMin, 'BaseV1Router: 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));
        wftm.withdraw(amounts[amounts.length - 1]);
        _safeTransferFTM(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;
    }

    function _safeTransferFTM(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);
        (bool success, bytes memory data) =
        token.call(abi.encodeWithSelector(erc20.transfer.selector, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))));
    }

    function _safeTransferFrom(address token, address from, address to, uint256 value) internal {
        require(token.code.length > 0);
        (bool success, bytes memory data) =
        token.call(abi.encodeWithSelector(erc20.transferFrom.selector, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_wftm","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 BaseV1Router01.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":"amountFTMMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityFTM","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountFTM","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"},{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"internalType":"struct BaseV1Router01.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":[{"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":"amountFTMMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityFTM","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountFTM","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":"amountFTMMin","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":"removeLiquidityFTMWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountFTM","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 BaseV1Router01.route[]","name":"routes","type":"tuple[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactFTMForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"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 BaseV1Router01.route[]","name":"routes","type":"tuple[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForFTM","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 BaseV1Router01.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":[],"name":"wftm","outputs":[{"internalType":"contract IWFTM","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040523480156200001157600080fd5b50604051620039fc380380620039fc8339810160408190526200003491620000d8565b6001600160a01b038216608081905260408051631355724960e31b81529051639aab9248916004808201926020929091908290030181865afa1580156200007f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000a5919062000110565b60c0526001600160a01b031660a052506200012a565b80516001600160a01b0381168114620000d357600080fd5b919050565b60008060408385031215620000ec57600080fd5b620000f783620000bb565b91506200010760208401620000bb565b90509250929050565b6000602082840312156200012357600080fd5b5051919050565b60805160a05160c051613808620001f46000396000610a7501526000818161013e0152818161049d01528181610c1b01528181610c5101528181610c8601528181610d1b015281816118e801528181611abb01528181611bc401528181611c1401528181611c9a01528181611e2201528181611f350152611fc30152600081816103a60152818161089301528181610a3a01528181610f480152818161105c015281816114940152818161160801528181611d8a015281816125f0015261269101526138086000f3fe60806040526004361061012e5760003560e01c80639881fcb4116100ab578063cc1d17731161006f578063cc1d1773146103e8578063d28254b814610408578063e5e31b1314610428578063e8ef468114610458578063f41766d81461046b578063f4f45b461461048b57600080fd5b80639881fcb41461033457806398a0fb3c14610354578063a32b1fcd14610374578063c45a015514610394578063c6b9577e146103c857600080fd5b8063578caf32116100f2578063578caf32146102715780635a47ddc31461029f5780635e1e6325146102bf5780635e60dab5146102f45780637301e3c81461031457600080fd5b80630dede6c41461017257806313dcfc59146101ac5780634386e63c146101d95780634c1ee03e146101f9578063544caa561461023157600080fd5b3661016d57336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461016b5761016b612afc565b005b600080fd5b34801561017e57600080fd5b5061019261018d366004612b43565b6104bf565b604080519283526020830191909152015b60405180910390f35b3480156101b857600080fd5b506101cc6101c7366004612bc8565b610679565b6040516101a39190612c43565b3480156101e557600080fd5b506101926101f4366004612c87565b61088c565b34801561020557600080fd5b50610219610214366004612cd8565b6109f3565b6040516001600160a01b0390911681526020016101a3565b34801561023d57600080fd5b5061025161024c366004612d23565b610afb565b604080516001600160a01b039384168152929091166020830152016101a3565b61028461027f366004612d5c565b610bef565b604080519384526020840192909252908201526060016101a3565b3480156102ab57600080fd5b506102846102ba366004612db7565b610e30565b3480156102cb57600080fd5b506102df6102da366004612e46565b610f10565b604080519283529015156020830152016101a3565b34801561030057600080fd5b5061019261030f366004612cd8565b611164565b34801561032057600080fd5b506101cc61032f366004612f2d565b61122e565b34801561034057600080fd5b506101cc61034f366004613080565b61137e565b34801561036057600080fd5b5061028461036f366004613126565b611600565b34801561038057600080fd5b5061019261038f366004613192565b611800565b3480156103a057600080fd5b506102197f000000000000000000000000000000000000000000000000000000000000000081565b3480156103d457600080fd5b506101cc6103e336600461324e565b6118bb565b3480156103f457600080fd5b50610192610403366004612d5c565b611b9a565b34801561041457600080fd5b506101926104233660046132c1565b611c8f565b34801561043457600080fd5b5061044861044336600461336b565b611d68565b60405190151581526020016101a3565b6101cc610466366004613388565b611dfd565b34801561047757600080fd5b506101cc61048636600461324e565b612147565b34801561049757600080fd5b506102197f000000000000000000000000000000000000000000000000000000000000000081565b60008082428110156104ec5760405162461bcd60e51b81526004016104e3906133de565b60405180910390fd5b60006104f98c8c8c6109f3565b6040516323b872dd60e01b81523360048201526001600160a01b03821660248201819052604482018c90529192506323b872dd906064016020604051808303816000875af115801561054f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610573919061340d565b61057c57600080fd5b60405163226bf2d160e21b81526001600160a01b03878116600483015260009182918416906389afcb449060240160408051808303816000875af11580156105c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ec919061342a565b9150915060006105fc8f8f610afb565b509050806001600160a01b03168f6001600160a01b03161461061f578183610622565b82825b90975095508a8710156106475760405162461bcd60e51b81526004016104e39061344e565b898610156106675760405162461bcd60e51b81526004016104e390613491565b50505050509850989650505050505050565b6060814281101561069c5760405162461bcd60e51b81526004016104e3906133de565b604080516001808252818301909252600091816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816106b357905050905087816000815181106106f6576106f66134d4565b6020026020010151600001906001600160a01b031690816001600160a01b031681525050868160008151811061072e5761072e6134d4565b6020026020010151602001906001600160a01b031690816001600160a01b0316815250508581600081518110610766576107666134d4565b60209081029190910101519015156040909101526107848a8261137e565b92508883600185516107969190613500565b815181106107a6576107a66134d4565b602002602001015110156107cc5760405162461bcd60e51b81526004016104e390613517565b610874816000815181106107e2576107e26134d4565b6020026020010151600001513361085484600081518110610805576108056134d4565b60200260200101516000015185600081518110610824576108246134d4565b60200260200101516020015186600081518110610843576108436134d4565b6020026020010151604001516109f3565b86600081518110610867576108676134d4565b602002602001015161226c565b61087f838287612364565b5050979650505050505050565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636801cc308888886040518463ffffffff1660e01b81526004016108e19392919061355f565b602060405180830381865afa1580156108fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109229190613583565b90506001600160a01b03811661093f5760008092509250506109ea565b60008061094d898989611164565b915091506000836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610991573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b591906135a0565b9050806109c284896135b9565b6109cc91906135d8565b9550806109d983896135b9565b6109e391906135d8565b9450505050505b94509492505050565b6000806000610a028686610afb565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b16603482015286151560f81b604882015291935091507f000000000000000000000000000000000000000000000000000000000000000090604901604051602081830303815290604052805190602001207f0000000000000000000000000000000000000000000000000000000000000000604051602001610ad9939291906001600160f81b0319815260609390931b6bffffffffffffffffffffffff191660018401526015830191909152603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b600080826001600160a01b0316846001600160a01b03161415610b6a5760405162461bcd60e51b815260206004820152602160248201527f426173655631526f757465723a204944454e544943414c5f41444452455353456044820152605360f81b60648201526084016104e3565b826001600160a01b0316846001600160a01b031610610b8a578284610b8d565b83835b90925090506001600160a01b038216610be85760405162461bcd60e51b815260206004820152601a60248201527f426173655631526f757465723a205a45524f5f4144445245535300000000000060448201526064016104e3565b9250929050565b60008060008342811015610c155760405162461bcd60e51b81526004016104e3906133de565b610c448b7f00000000000000000000000000000000000000000000000000000000000000008c8c348d8d6125b9565b90945092506000610c768c7f00000000000000000000000000000000000000000000000000000000000000008d6109f3565b9050610c848c33838861226c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015610cdf57600080fd5b505af1158015610cf3573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038581166004830152602482018990527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb925060440190506020604051808303816000875af1158015610d68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8c919061340d565b610d9857610d98612afc565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a627842906024016020604051808303816000875af1158015610de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0491906135a0565b925083341115610e2157610e2133610e1c8634613500565b6127d7565b50509750975097945050505050565b60008060008342811015610e565760405162461bcd60e51b81526004016104e3906133de565b610e658d8d8d8d8d8d8d6125b9565b90945092506000610e778e8e8e6109f3565b9050610e858e33838861226c565b610e918d33838761226c565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a627842906024016020604051808303816000875af1158015610ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efd91906135a0565b9250505099509950999650505050505050565b6000806000610f21858560016109f3565b60405163e5e31b1360e01b81526001600160a01b03828116600483015291925060009182917f00000000000000000000000000000000000000000000000000000000000000009091169063e5e31b1390602401602060405180830381865afa158015610f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb5919061340d565b1561102e576040516378a051ad60e11b8152600481018990526001600160a01b03888116602483015284169063f140a35a90604401602060405180830381865afa158015611007573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102b91906135a0565b91505b61103a878760006109f3565b60405163e5e31b1360e01b81526001600160a01b0380831660048301529194507f00000000000000000000000000000000000000000000000000000000000000009091169063e5e31b1390602401602060405180830381865afa1580156110a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c9919061340d565b15611142576040516378a051ad60e11b8152600481018990526001600160a01b03888116602483015284169063f140a35a90604401602060405180830381865afa15801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f91906135a0565b90505b80821161115157806000611155565b8160015b94509450505050935093915050565b60008060006111738686610afb565b5090506000806111848888886109f3565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156111c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e59190613611565b506001600160701b031691506001600160701b03169150826001600160a01b0316886001600160a01b03161461121c57808261121f565b81815b90999098509650505050505050565b606081428110156112515760405162461bcd60e51b81526004016104e3906133de565b61131386866000818110611267576112676134d4565b61127d926020606090920201908101915061336b565b3361130089896000818110611294576112946134d4565b6112aa926020606090920201908101915061336b565b8a8a60008181106112bd576112bd6134d4565b90506060020160200160208101906112d5919061336b565b8b8b60008181106112e8576112e86134d4565b90506060020160400160208101906102149190613656565b8a600081518110610867576108676134d4565b611370878787808060200260200160405190810160405280939291908181526020016000905b828210156113655761135660608302860136819003810190613673565b81526020019060010190611339565b505050505086612364565b8691505b5095945050505050565b60606001825110156113a25760405162461bcd60e51b81526004016104e39061368f565b81516113af9060016136c6565b67ffffffffffffffff8111156113c7576113c7612e7d565b6040519080825280602002602001820160405280156113f0578160200160208202803683370190505b5090508281600081518110611407576114076134d4565b60200260200101818152505060005b82518110156115f9576000611472848381518110611436576114366134d4565b602002602001015160000151858481518110611454576114546134d4565b602002602001015160200151868581518110610843576108436134d4565b60405163e5e31b1360e01b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063e5e31b1390602401602060405180830381865afa1580156114dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611501919061340d565b156115e657806001600160a01b031663f140a35a848481518110611527576115276134d4565b6020026020010151868581518110611541576115416134d4565b6020026020010151600001516040518363ffffffff1660e01b815260040161157c9291909182526001600160a01b0316602082015260400190565b602060405180830381865afa158015611599573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115bd91906135a0565b836115c98460016136c6565b815181106115d9576115d96134d4565b6020026020010181815250505b50806115f1816136de565b915050611416565b5092915050565b6000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636801cc308a8a8a6040518463ffffffff1660e01b81526004016116569392919061355f565b602060405180830381865afa158015611673573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116979190613583565b9050600080806001600160a01b0384161561172157836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170e91906135a0565b905061171b8c8c8c611164565b90935091505b8215801561172d575081155b1561175e578896508795506103e861174d611748888a6135b9565b6128a5565b6117579190613500565b94506117f1565b600061176b8a8585612915565b90508881116117b3578997509550856117ac84611788848b6135b9565b61179291906135d8565b8461179d858b6135b9565b6117a791906135d8565b6129f5565b95506117ef565b60006117c08a8587612915565b98508997508890506117eb856117d685846135b9565b6117e091906135d8565b8561179d868c6135b9565b9650505b505b50505050955095509592505050565b60008060006118108f8f8f6109f3565b905060008761181f578c611823565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf9061185e903390309086908f908e908e908e906004016136f9565b600060405180830381600087803b15801561187857600080fd5b505af115801561188c573d6000803e3d6000fd5b50505050506118a18f8f8f8f8f8f8f8f6104bf565b8093508194505050509c509c9a5050505050505050505050565b606081428110156118de5760405162461bcd60e51b81526004016104e3906133de565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686611915600182613500565b818110611924576119246134d4565b905060600201602001602081019061193c919061336b565b6001600160a01b0316146119625760405162461bcd60e51b81526004016104e39061368f565b6119be888787808060200260200160405190810160405280939291908181526020016000905b828210156119b4576119a560608302860136819003810190613673565b81526020019060010190611988565b505050505061137e565b91508682600184516119d09190613500565b815181106119e0576119e06134d4565b60200260200101511015611a065760405162461bcd60e51b81526004016104e390613517565b611a5c86866000818110611a1c57611a1c6134d4565b611a32926020606090920201908101915061336b565b33611a4989896000818110611294576112946134d4565b85600081518110610867576108676134d4565b611ab9828787808060200260200160405190810160405280939291908181526020016000905b82821015611aae57611a9f60608302860136819003810190613673565b81526020019060010190611a82565b505050505030612364565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551611af79190613500565b81518110611b0757611b076134d4565b60200260200101516040518263ffffffff1660e01b8152600401611b2d91815260200190565b600060405180830381600087803b158015611b4757600080fd5b505af1158015611b5b573d6000803e3d6000fd5b50505050611b8f848360018551611b729190613500565b81518110611b8257611b826134d4565b60200260200101516127d7565b509695505050505050565b6000808242811015611bbe5760405162461bcd60e51b81526004016104e3906133de565b611bee8a7f00000000000000000000000000000000000000000000000000000000000000008b8b8b8b308b6104bf565b9093509150611bfe8a8685612a0d565b604051632e1a7d4d60e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b158015611c6057600080fd5b505af1158015611c74573d6000803e3d6000fd5b50505050611c8285836127d7565b5097509795505050505050565b6000806000611cbf8e7f00000000000000000000000000000000000000000000000000000000000000008f6109f3565b9050600087611cce578c611cd2565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90611d0d903390309086908f908e908e908e906004016136f9565b600060405180830381600087803b158015611d2757600080fd5b505af1158015611d3b573d6000803e3d6000fd5b50505050611d4e8f8f8f8f8f8f8f611b9a565b809450819550505050509b509b9950505050505050505050565b60405163e5e31b1360e01b81526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e5e31b1390602401602060405180830381865afa158015611dd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df7919061340d565b92915050565b60608142811015611e205760405162461bcd60e51b81526004016104e3906133de565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611e5d57611e5d6134d4565b611e73926020606090920201908101915061336b565b6001600160a01b031614611e995760405162461bcd60e51b81526004016104e39061368f565b611eeb348787808060200260200160405190810160405280939291908181526020016000905b828210156119b457611edc60608302860136819003810190613673565b81526020019060010190611ebf565b9150868260018451611efd9190613500565b81518110611f0d57611f0d6134d4565b60200260200101511015611f335760405162461bcd60e51b81526004016104e390613517565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611f7557611f756134d4565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611fa857600080fd5b505af1158015611fbc573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61205a88886000818110612006576120066134d4565b61201c926020606090920201908101915061336b565b8989600081811061202f5761202f6134d4565b9050606002016020016020810190612047919061336b565b8a8a60008181106112e8576112e86134d4565b8460008151811061206d5761206d6134d4565b60200260200101516040518363ffffffff1660e01b81526004016120a69291906001600160a01b03929092168252602082015260400190565b6020604051808303816000875af11580156120c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e9919061340d565b6120f5576120f5612afc565b611374828787808060200260200160405190810160405280939291908181526020016000905b828210156113655761213860608302860136819003810190613673565b8152602001906001019061211b565b6060814281101561216a5760405162461bcd60e51b81526004016104e3906133de565b6121bc888787808060200260200160405190810160405280939291908181526020016000905b828210156119b4576121ad60608302860136819003810190613673565b81526020019060010190612190565b91508682600184516121ce9190613500565b815181106121de576121de6134d4565b602002602001015110156122045760405162461bcd60e51b81526004016104e390613517565b61221a86866000818110611a1c57611a1c6134d4565b611b8f828787808060200260200160405190810160405280939291908181526020016000905b828210156113655761225d60608302860136819003810190613673565b81526020019060010190612240565b6000846001600160a01b03163b1161228357600080fd5b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916122e79190613766565b6000604051808303816000865af19150503d8060008114612324576040519150601f19603f3d011682016040523d82523d6000602084013e612329565b606091505b5091509150818015612353575080511580612353575080806020019051810190612353919061340d565b61235c57600080fd5b505050505050565b60005b82518110156125b35760006123b6848381518110612387576123876134d4565b6020026020010151600001518584815181106123a5576123a56134d4565b602002602001015160200151610afb565b5090506000856123c78460016136c6565b815181106123d7576123d76134d4565b60200260200101519050600080836001600160a01b0316878681518110612400576124006134d4565b6020026020010151600001516001600160a01b03161461242257826000612426565b6000835b9150915060006001885161243a9190613500565b861061244657866124b9565b6124b9886124558860016136c6565b81518110612465576124656134d4565b6020026020010151600001518988600161247f91906136c6565b8151811061248f5761248f6134d4565b6020026020010151602001518a8960016124a991906136c6565b81518110610843576108436134d4565b905061250c8887815181106124d0576124d06134d4565b6020026020010151600001518988815181106124ee576124ee6134d4565b6020026020010151602001518a8981518110610843576108436134d4565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015612549576020820181803683370190505b506040518563ffffffff1660e01b81526004016125699493929190613782565b600060405180830381600087803b15801561258357600080fd5b505af1158015612597573d6000803e3d6000fd5b50505050505050505080806125ab906136de565b915050612367565b50505050565b600080838610156125c957600080fd5b828510156125d657600080fd5b6040516306801cc360e41b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636801cc3090612629908d908d908d9060040161355f565b602060405180830381865afa158015612646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061266a9190613583565b90506001600160a01b038116612710576040516320b7f73960e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906382dfdce4906126ca908d908d908d9060040161355f565b6020604051808303816000875af11580156126e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061270d9190613583565b90505b60008061271e8c8c8c611164565b91509150816000148015612730575080155b15612740578894508793506127c8565b600061274d8a8484612915565b905088811161278157868110156127765760405162461bcd60e51b81526004016104e390613491565b8995509350836127c6565b600061278e8a8486612915565b90508a8111156127a0576127a0612afc565b888110156127c05760405162461bcd60e51b81526004016104e39061344e565b95508894505b505b50505097509795505050505050565b604080516000808252602082019092526001600160a01b0384169083906040516128019190613766565b60006040518083038185875af1925050503d806000811461283e576040519150601f19603f3d011682016040523d82523d6000602084013e612843565b606091505b50509050806128a05760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b60648201526084016104e3565b505050565b6000600382111561290657508060006128bf6002836135d8565b6128ca9060016136c6565b90505b81811015612900579050806002816128e581866135d8565b6128ef91906136c6565b6128f991906135d8565b90506128cd565b50919050565b8115612910575060015b919050565b60008084116129705760405162461bcd60e51b815260206004820152602160248201527f426173655631526f757465723a20494e53554646494349454e545f414d4f554e6044820152601560fa1b60648201526084016104e3565b6000831180156129805750600082115b6129d85760405162461bcd60e51b8152602060048201526024808201527f426173655631526f757465723a20494e53554646494349454e545f4c495155496044820152634449545960e01b60648201526084016104e3565b826129e383866135b9565b6129ed91906135d8565b949350505050565b6000818310612a045781612a06565b825b9392505050565b6000836001600160a01b03163b11612a2457600080fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691612a809190613766565b6000604051808303816000865af19150503d8060008114612abd576040519150601f19603f3d011682016040523d82523d6000602084013e612ac2565b606091505b5091509150818015612aec575080511580612aec575080806020019051810190612aec919061340d565b612af557600080fd5b5050505050565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b0381168114612b2757600080fd5b50565b803561291081612b12565b8015158114612b2757600080fd5b600080600080600080600080610100898b031215612b6057600080fd5b8835612b6b81612b12565b97506020890135612b7b81612b12565b96506040890135612b8b81612b35565b9550606089013594506080890135935060a0890135925060c0890135612bb081612b12565b8092505060e089013590509295985092959890939650565b600080600080600080600060e0888a031215612be357600080fd5b87359650602088013595506040880135612bfc81612b12565b94506060880135612c0c81612b12565b93506080880135612c1c81612b35565b925060a0880135612c2c81612b12565b8092505060c0880135905092959891949750929550565b6020808252825182820181905260009190848201906040850190845b81811015612c7b57835183529284019291840191600101612c5f565b50909695505050505050565b60008060008060808587031215612c9d57600080fd5b8435612ca881612b12565b93506020850135612cb881612b12565b92506040850135612cc881612b35565b9396929550929360600135925050565b600080600060608486031215612ced57600080fd5b8335612cf881612b12565b92506020840135612d0881612b12565b91506040840135612d1881612b35565b809150509250925092565b60008060408385031215612d3657600080fd5b8235612d4181612b12565b91506020830135612d5181612b12565b809150509250929050565b600080600080600080600060e0888a031215612d7757600080fd5b8735612d8281612b12565b96506020880135612d9281612b35565b955060408801359450606088013593506080880135925060a0880135612c2c81612b12565b60008060008060008060008060006101208a8c031215612dd657600080fd5b8935612de181612b12565b985060208a0135612df181612b12565b975060408a0135612e0181612b35565b965060608a0135955060808a0135945060a08a0135935060c08a0135925060e08a0135612e2d81612b12565b809250506101008a013590509295985092959850929598565b600080600060608486031215612e5b57600080fd5b833592506020840135612e6d81612b12565b91506040840135612d1881612b12565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612ebc57612ebc612e7d565b604052919050565b600067ffffffffffffffff821115612ede57612ede612e7d565b5060051b60200190565b60008083601f840112612efa57600080fd5b50813567ffffffffffffffff811115612f1257600080fd5b602083019150836020606083028501011115610be857600080fd5b600080600080600060808688031215612f4557600080fd5b853567ffffffffffffffff80821115612f5d57600080fd5b818801915088601f830112612f7157600080fd5b81356020612f86612f8183612ec4565b612e93565b82815260059290921b8401810191818101908c841115612fa557600080fd5b948201945b83861015612fc357853582529482019490820190612faa565b99505089013592505080821115612fd957600080fd5b50612fe688828901612ee8565b9095509350612ff9905060408701612b2a565b949793965091946060013592915050565b60006060828403121561301c57600080fd5b6040516060810181811067ffffffffffffffff8211171561303f5761303f612e7d565b604052905080823561305081612b12565b8152602083013561306081612b12565b6020820152604083013561307381612b35565b6040919091015292915050565b6000806040838503121561309357600080fd5b8235915060208084013567ffffffffffffffff8111156130b257600080fd5b8401601f810186136130c357600080fd5b80356130d1612f8182612ec4565b818152606091820283018401918482019190898411156130f057600080fd5b938501935b83851015613116576131078a8661300a565b835293840193918501916130f5565b5080955050505050509250929050565b600080600080600060a0868803121561313e57600080fd5b853561314981612b12565b9450602086013561315981612b12565b9350604086013561316981612b35565b94979396509394606081013594506080013592915050565b803560ff8116811461291057600080fd5b6000806000806000806000806000806000806101808d8f0312156131b557600080fd5b8c356131c081612b12565b9b5060208d01356131d081612b12565b9a5060408d01356131e081612b35565b995060608d0135985060808d0135975060a08d0135965060c08d013561320581612b12565b955060e08d013594506101008d013561321d81612b35565b935061322c6101208e01613181565b92506101408d013591506101608d013590509295989b509295989b509295989b565b60008060008060008060a0878903121561326757600080fd5b8635955060208701359450604087013567ffffffffffffffff81111561328c57600080fd5b61329889828a01612ee8565b90955093505060608701356132ac81612b12565b80925050608087013590509295509295509295565b60008060008060008060008060008060006101608c8e0312156132e357600080fd5b8b356132ee81612b12565b9a5060208c01356132fe81612b35565b995060408c0135985060608c0135975060808c0135965060a08c013561332381612b12565b955060c08c0135945060e08c013561333a81612b35565b93506133496101008d01613181565b92506101208c013591506101408c013590509295989b509295989b9093969950565b60006020828403121561337d57600080fd5b8135612a0681612b12565b6000806000806000608086880312156133a057600080fd5b85359450602086013567ffffffffffffffff8111156133be57600080fd5b6133ca88828901612ee8565b9095509350506040860135612ff981612b12565b60208082526015908201527410985cd9558c549bdd5d195c8e8811561412549151605a1b604082015260600190565b60006020828403121561341f57600080fd5b8151612a0681612b35565b6000806040838503121561343d57600080fd5b505080516020909101519092909150565b60208082526023908201527f426173655631526f757465723a20494e53554646494349454e545f415f414d4f60408201526215539560ea1b606082015260800190565b60208082526023908201527f426173655631526f757465723a20494e53554646494349454e545f425f414d4f60408201526215539560ea1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015613512576135126134ea565b500390565b60208082526028908201527f426173655631526f757465723a20494e53554646494349454e545f4f555450556040820152671517d05353d5539560c21b606082015260800190565b6001600160a01b039384168152919092166020820152901515604082015260600190565b60006020828403121561359557600080fd5b8151612a0681612b12565b6000602082840312156135b257600080fd5b5051919050565b60008160001904831182151516156135d3576135d36134ea565b500290565b6000826135f557634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160701b038116811461291057600080fd5b60008060006060848603121561362657600080fd5b61362f846135fa565b925061363d602085016135fa565b9150604084015163ffffffff81168114612d1857600080fd5b60006020828403121561366857600080fd5b8135612a0681612b35565b60006060828403121561368557600080fd5b612a06838361300a565b6020808252601a908201527f426173655631526f757465723a20494e56414c49445f50415448000000000000604082015260600190565b600082198211156136d9576136d96134ea565b500190565b60006000198214156136f2576136f26134ea565b5060010190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b60005b8381101561375557818101518382015260200161373d565b838111156125b35750506000910152565b6000825161377881846020870161373a565b9190910192915050565b84815283602082015260018060a01b038316604082015260806060820152600082518060808401526137bb8160a085016020870161373a565b601f01601f19169190910160a0019594505050505056fea26469706673582212200f3aa645c5b29b4bc05fb1f0d5494f0b22be90e7075d6cf76ff7b5037193f2e164736f6c634300080b00330000000000000000000000006435f8ebe37b5d3c5e2f6f0bca27264cba6b8ed2000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2

Deployed Bytecode

0x60806040526004361061012e5760003560e01c80639881fcb4116100ab578063cc1d17731161006f578063cc1d1773146103e8578063d28254b814610408578063e5e31b1314610428578063e8ef468114610458578063f41766d81461046b578063f4f45b461461048b57600080fd5b80639881fcb41461033457806398a0fb3c14610354578063a32b1fcd14610374578063c45a015514610394578063c6b9577e146103c857600080fd5b8063578caf32116100f2578063578caf32146102715780635a47ddc31461029f5780635e1e6325146102bf5780635e60dab5146102f45780637301e3c81461031457600080fd5b80630dede6c41461017257806313dcfc59146101ac5780634386e63c146101d95780634c1ee03e146101f9578063544caa561461023157600080fd5b3661016d57336001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2161461016b5761016b612afc565b005b600080fd5b34801561017e57600080fd5b5061019261018d366004612b43565b6104bf565b604080519283526020830191909152015b60405180910390f35b3480156101b857600080fd5b506101cc6101c7366004612bc8565b610679565b6040516101a39190612c43565b3480156101e557600080fd5b506101926101f4366004612c87565b61088c565b34801561020557600080fd5b50610219610214366004612cd8565b6109f3565b6040516001600160a01b0390911681526020016101a3565b34801561023d57600080fd5b5061025161024c366004612d23565b610afb565b604080516001600160a01b039384168152929091166020830152016101a3565b61028461027f366004612d5c565b610bef565b604080519384526020840192909252908201526060016101a3565b3480156102ab57600080fd5b506102846102ba366004612db7565b610e30565b3480156102cb57600080fd5b506102df6102da366004612e46565b610f10565b604080519283529015156020830152016101a3565b34801561030057600080fd5b5061019261030f366004612cd8565b611164565b34801561032057600080fd5b506101cc61032f366004612f2d565b61122e565b34801561034057600080fd5b506101cc61034f366004613080565b61137e565b34801561036057600080fd5b5061028461036f366004613126565b611600565b34801561038057600080fd5b5061019261038f366004613192565b611800565b3480156103a057600080fd5b506102197f0000000000000000000000006435f8ebe37b5d3c5e2f6f0bca27264cba6b8ed281565b3480156103d457600080fd5b506101cc6103e336600461324e565b6118bb565b3480156103f457600080fd5b50610192610403366004612d5c565b611b9a565b34801561041457600080fd5b506101926104233660046132c1565b611c8f565b34801561043457600080fd5b5061044861044336600461336b565b611d68565b60405190151581526020016101a3565b6101cc610466366004613388565b611dfd565b34801561047757600080fd5b506101cc61048636600461324e565b612147565b34801561049757600080fd5b506102197f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b60008082428110156104ec5760405162461bcd60e51b81526004016104e3906133de565b60405180910390fd5b60006104f98c8c8c6109f3565b6040516323b872dd60e01b81523360048201526001600160a01b03821660248201819052604482018c90529192506323b872dd906064016020604051808303816000875af115801561054f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610573919061340d565b61057c57600080fd5b60405163226bf2d160e21b81526001600160a01b03878116600483015260009182918416906389afcb449060240160408051808303816000875af11580156105c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ec919061342a565b9150915060006105fc8f8f610afb565b509050806001600160a01b03168f6001600160a01b03161461061f578183610622565b82825b90975095508a8710156106475760405162461bcd60e51b81526004016104e39061344e565b898610156106675760405162461bcd60e51b81526004016104e390613491565b50505050509850989650505050505050565b6060814281101561069c5760405162461bcd60e51b81526004016104e3906133de565b604080516001808252818301909252600091816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816106b357905050905087816000815181106106f6576106f66134d4565b6020026020010151600001906001600160a01b031690816001600160a01b031681525050868160008151811061072e5761072e6134d4565b6020026020010151602001906001600160a01b031690816001600160a01b0316815250508581600081518110610766576107666134d4565b60209081029190910101519015156040909101526107848a8261137e565b92508883600185516107969190613500565b815181106107a6576107a66134d4565b602002602001015110156107cc5760405162461bcd60e51b81526004016104e390613517565b610874816000815181106107e2576107e26134d4565b6020026020010151600001513361085484600081518110610805576108056134d4565b60200260200101516000015185600081518110610824576108246134d4565b60200260200101516020015186600081518110610843576108436134d4565b6020026020010151604001516109f3565b86600081518110610867576108676134d4565b602002602001015161226c565b61087f838287612364565b5050979650505050505050565b60008060007f0000000000000000000000006435f8ebe37b5d3c5e2f6f0bca27264cba6b8ed26001600160a01b0316636801cc308888886040518463ffffffff1660e01b81526004016108e19392919061355f565b602060405180830381865afa1580156108fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109229190613583565b90506001600160a01b03811661093f5760008092509250506109ea565b60008061094d898989611164565b915091506000836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610991573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b591906135a0565b9050806109c284896135b9565b6109cc91906135d8565b9550806109d983896135b9565b6109e391906135d8565b9450505050505b94509492505050565b6000806000610a028686610afb565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b16603482015286151560f81b604882015291935091507f0000000000000000000000006435f8ebe37b5d3c5e2f6f0bca27264cba6b8ed290604901604051602081830303815290604052805190602001207f1206c53c96c9926d750268b77c1897f0b6035ff853c3ba6088623ed7df249367604051602001610ad9939291906001600160f81b0319815260609390931b6bffffffffffffffffffffffff191660018401526015830191909152603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b600080826001600160a01b0316846001600160a01b03161415610b6a5760405162461bcd60e51b815260206004820152602160248201527f426173655631526f757465723a204944454e544943414c5f41444452455353456044820152605360f81b60648201526084016104e3565b826001600160a01b0316846001600160a01b031610610b8a578284610b8d565b83835b90925090506001600160a01b038216610be85760405162461bcd60e51b815260206004820152601a60248201527f426173655631526f757465723a205a45524f5f4144445245535300000000000060448201526064016104e3565b9250929050565b60008060008342811015610c155760405162461bcd60e51b81526004016104e3906133de565b610c448b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28c8c348d8d6125b9565b90945092506000610c768c7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28d6109f3565b9050610c848c33838861226c565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015610cdf57600080fd5b505af1158015610cf3573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038581166004830152602482018990527f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216935063a9059cbb925060440190506020604051808303816000875af1158015610d68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8c919061340d565b610d9857610d98612afc565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a627842906024016020604051808303816000875af1158015610de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0491906135a0565b925083341115610e2157610e2133610e1c8634613500565b6127d7565b50509750975097945050505050565b60008060008342811015610e565760405162461bcd60e51b81526004016104e3906133de565b610e658d8d8d8d8d8d8d6125b9565b90945092506000610e778e8e8e6109f3565b9050610e858e33838861226c565b610e918d33838761226c565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a627842906024016020604051808303816000875af1158015610ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efd91906135a0565b9250505099509950999650505050505050565b6000806000610f21858560016109f3565b60405163e5e31b1360e01b81526001600160a01b03828116600483015291925060009182917f0000000000000000000000006435f8ebe37b5d3c5e2f6f0bca27264cba6b8ed29091169063e5e31b1390602401602060405180830381865afa158015610f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb5919061340d565b1561102e576040516378a051ad60e11b8152600481018990526001600160a01b03888116602483015284169063f140a35a90604401602060405180830381865afa158015611007573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102b91906135a0565b91505b61103a878760006109f3565b60405163e5e31b1360e01b81526001600160a01b0380831660048301529194507f0000000000000000000000006435f8ebe37b5d3c5e2f6f0bca27264cba6b8ed29091169063e5e31b1390602401602060405180830381865afa1580156110a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c9919061340d565b15611142576040516378a051ad60e11b8152600481018990526001600160a01b03888116602483015284169063f140a35a90604401602060405180830381865afa15801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f91906135a0565b90505b80821161115157806000611155565b8160015b94509450505050935093915050565b60008060006111738686610afb565b5090506000806111848888886109f3565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156111c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e59190613611565b506001600160701b031691506001600160701b03169150826001600160a01b0316886001600160a01b03161461121c57808261121f565b81815b90999098509650505050505050565b606081428110156112515760405162461bcd60e51b81526004016104e3906133de565b61131386866000818110611267576112676134d4565b61127d926020606090920201908101915061336b565b3361130089896000818110611294576112946134d4565b6112aa926020606090920201908101915061336b565b8a8a60008181106112bd576112bd6134d4565b90506060020160200160208101906112d5919061336b565b8b8b60008181106112e8576112e86134d4565b90506060020160400160208101906102149190613656565b8a600081518110610867576108676134d4565b611370878787808060200260200160405190810160405280939291908181526020016000905b828210156113655761135660608302860136819003810190613673565b81526020019060010190611339565b505050505086612364565b8691505b5095945050505050565b60606001825110156113a25760405162461bcd60e51b81526004016104e39061368f565b81516113af9060016136c6565b67ffffffffffffffff8111156113c7576113c7612e7d565b6040519080825280602002602001820160405280156113f0578160200160208202803683370190505b5090508281600081518110611407576114076134d4565b60200260200101818152505060005b82518110156115f9576000611472848381518110611436576114366134d4565b602002602001015160000151858481518110611454576114546134d4565b602002602001015160200151868581518110610843576108436134d4565b60405163e5e31b1360e01b81526001600160a01b0380831660048301529192507f0000000000000000000000006435f8ebe37b5d3c5e2f6f0bca27264cba6b8ed29091169063e5e31b1390602401602060405180830381865afa1580156114dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611501919061340d565b156115e657806001600160a01b031663f140a35a848481518110611527576115276134d4565b6020026020010151868581518110611541576115416134d4565b6020026020010151600001516040518363ffffffff1660e01b815260040161157c9291909182526001600160a01b0316602082015260400190565b602060405180830381865afa158015611599573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115bd91906135a0565b836115c98460016136c6565b815181106115d9576115d96134d4565b6020026020010181815250505b50806115f1816136de565b915050611416565b5092915050565b6000806000807f0000000000000000000000006435f8ebe37b5d3c5e2f6f0bca27264cba6b8ed26001600160a01b0316636801cc308a8a8a6040518463ffffffff1660e01b81526004016116569392919061355f565b602060405180830381865afa158015611673573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116979190613583565b9050600080806001600160a01b0384161561172157836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170e91906135a0565b905061171b8c8c8c611164565b90935091505b8215801561172d575081155b1561175e578896508795506103e861174d611748888a6135b9565b6128a5565b6117579190613500565b94506117f1565b600061176b8a8585612915565b90508881116117b3578997509550856117ac84611788848b6135b9565b61179291906135d8565b8461179d858b6135b9565b6117a791906135d8565b6129f5565b95506117ef565b60006117c08a8587612915565b98508997508890506117eb856117d685846135b9565b6117e091906135d8565b8561179d868c6135b9565b9650505b505b50505050955095509592505050565b60008060006118108f8f8f6109f3565b905060008761181f578c611823565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf9061185e903390309086908f908e908e908e906004016136f9565b600060405180830381600087803b15801561187857600080fd5b505af115801561188c573d6000803e3d6000fd5b50505050506118a18f8f8f8f8f8f8f8f6104bf565b8093508194505050509c509c9a5050505050505050505050565b606081428110156118de5760405162461bcd60e51b81526004016104e3906133de565b6001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2168686611915600182613500565b818110611924576119246134d4565b905060600201602001602081019061193c919061336b565b6001600160a01b0316146119625760405162461bcd60e51b81526004016104e39061368f565b6119be888787808060200260200160405190810160405280939291908181526020016000905b828210156119b4576119a560608302860136819003810190613673565b81526020019060010190611988565b505050505061137e565b91508682600184516119d09190613500565b815181106119e0576119e06134d4565b60200260200101511015611a065760405162461bcd60e51b81526004016104e390613517565b611a5c86866000818110611a1c57611a1c6134d4565b611a32926020606090920201908101915061336b565b33611a4989896000818110611294576112946134d4565b85600081518110610867576108676134d4565b611ab9828787808060200260200160405190810160405280939291908181526020016000905b82821015611aae57611a9f60608302860136819003810190613673565b81526020019060010190611a82565b505050505030612364565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d8360018551611af79190613500565b81518110611b0757611b076134d4565b60200260200101516040518263ffffffff1660e01b8152600401611b2d91815260200190565b600060405180830381600087803b158015611b4757600080fd5b505af1158015611b5b573d6000803e3d6000fd5b50505050611b8f848360018551611b729190613500565b81518110611b8257611b826134d4565b60200260200101516127d7565b509695505050505050565b6000808242811015611bbe5760405162461bcd60e51b81526004016104e3906133de565b611bee8a7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28b8b8b8b308b6104bf565b9093509150611bfe8a8685612a0d565b604051632e1a7d4d60e01b8152600481018390527f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031690632e1a7d4d90602401600060405180830381600087803b158015611c6057600080fd5b505af1158015611c74573d6000803e3d6000fd5b50505050611c8285836127d7565b5097509795505050505050565b6000806000611cbf8e7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28f6109f3565b9050600087611cce578c611cd2565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90611d0d903390309086908f908e908e908e906004016136f9565b600060405180830381600087803b158015611d2757600080fd5b505af1158015611d3b573d6000803e3d6000fd5b50505050611d4e8f8f8f8f8f8f8f611b9a565b809450819550505050509b509b9950505050505050505050565b60405163e5e31b1360e01b81526001600160a01b0382811660048301526000917f0000000000000000000000006435f8ebe37b5d3c5e2f6f0bca27264cba6b8ed29091169063e5e31b1390602401602060405180830381865afa158015611dd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df7919061340d565b92915050565b60608142811015611e205760405162461bcd60e51b81526004016104e3906133de565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031686866000818110611e5d57611e5d6134d4565b611e73926020606090920201908101915061336b565b6001600160a01b031614611e995760405162461bcd60e51b81526004016104e39061368f565b611eeb348787808060200260200160405190810160405280939291908181526020016000905b828210156119b457611edc60608302860136819003810190613673565b81526020019060010190611ebf565b9150868260018451611efd9190613500565b81518110611f0d57611f0d6134d4565b60200260200101511015611f335760405162461bcd60e51b81526004016104e390613517565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db083600081518110611f7557611f756134d4565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611fa857600080fd5b505af1158015611fbc573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663a9059cbb61205a88886000818110612006576120066134d4565b61201c926020606090920201908101915061336b565b8989600081811061202f5761202f6134d4565b9050606002016020016020810190612047919061336b565b8a8a60008181106112e8576112e86134d4565b8460008151811061206d5761206d6134d4565b60200260200101516040518363ffffffff1660e01b81526004016120a69291906001600160a01b03929092168252602082015260400190565b6020604051808303816000875af11580156120c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e9919061340d565b6120f5576120f5612afc565b611374828787808060200260200160405190810160405280939291908181526020016000905b828210156113655761213860608302860136819003810190613673565b8152602001906001019061211b565b6060814281101561216a5760405162461bcd60e51b81526004016104e3906133de565b6121bc888787808060200260200160405190810160405280939291908181526020016000905b828210156119b4576121ad60608302860136819003810190613673565b81526020019060010190612190565b91508682600184516121ce9190613500565b815181106121de576121de6134d4565b602002602001015110156122045760405162461bcd60e51b81526004016104e390613517565b61221a86866000818110611a1c57611a1c6134d4565b611b8f828787808060200260200160405190810160405280939291908181526020016000905b828210156113655761225d60608302860136819003810190613673565b81526020019060010190612240565b6000846001600160a01b03163b1161228357600080fd5b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916122e79190613766565b6000604051808303816000865af19150503d8060008114612324576040519150601f19603f3d011682016040523d82523d6000602084013e612329565b606091505b5091509150818015612353575080511580612353575080806020019051810190612353919061340d565b61235c57600080fd5b505050505050565b60005b82518110156125b35760006123b6848381518110612387576123876134d4565b6020026020010151600001518584815181106123a5576123a56134d4565b602002602001015160200151610afb565b5090506000856123c78460016136c6565b815181106123d7576123d76134d4565b60200260200101519050600080836001600160a01b0316878681518110612400576124006134d4565b6020026020010151600001516001600160a01b03161461242257826000612426565b6000835b9150915060006001885161243a9190613500565b861061244657866124b9565b6124b9886124558860016136c6565b81518110612465576124656134d4565b6020026020010151600001518988600161247f91906136c6565b8151811061248f5761248f6134d4565b6020026020010151602001518a8960016124a991906136c6565b81518110610843576108436134d4565b905061250c8887815181106124d0576124d06134d4565b6020026020010151600001518988815181106124ee576124ee6134d4565b6020026020010151602001518a8981518110610843576108436134d4565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015612549576020820181803683370190505b506040518563ffffffff1660e01b81526004016125699493929190613782565b600060405180830381600087803b15801561258357600080fd5b505af1158015612597573d6000803e3d6000fd5b50505050505050505080806125ab906136de565b915050612367565b50505050565b600080838610156125c957600080fd5b828510156125d657600080fd5b6040516306801cc360e41b81526000906001600160a01b037f0000000000000000000000006435f8ebe37b5d3c5e2f6f0bca27264cba6b8ed21690636801cc3090612629908d908d908d9060040161355f565b602060405180830381865afa158015612646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061266a9190613583565b90506001600160a01b038116612710576040516320b7f73960e21b81526001600160a01b037f0000000000000000000000006435f8ebe37b5d3c5e2f6f0bca27264cba6b8ed216906382dfdce4906126ca908d908d908d9060040161355f565b6020604051808303816000875af11580156126e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061270d9190613583565b90505b60008061271e8c8c8c611164565b91509150816000148015612730575080155b15612740578894508793506127c8565b600061274d8a8484612915565b905088811161278157868110156127765760405162461bcd60e51b81526004016104e390613491565b8995509350836127c6565b600061278e8a8486612915565b90508a8111156127a0576127a0612afc565b888110156127c05760405162461bcd60e51b81526004016104e39061344e565b95508894505b505b50505097509795505050505050565b604080516000808252602082019092526001600160a01b0384169083906040516128019190613766565b60006040518083038185875af1925050503d806000811461283e576040519150601f19603f3d011682016040523d82523d6000602084013e612843565b606091505b50509050806128a05760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b60648201526084016104e3565b505050565b6000600382111561290657508060006128bf6002836135d8565b6128ca9060016136c6565b90505b81811015612900579050806002816128e581866135d8565b6128ef91906136c6565b6128f991906135d8565b90506128cd565b50919050565b8115612910575060015b919050565b60008084116129705760405162461bcd60e51b815260206004820152602160248201527f426173655631526f757465723a20494e53554646494349454e545f414d4f554e6044820152601560fa1b60648201526084016104e3565b6000831180156129805750600082115b6129d85760405162461bcd60e51b8152602060048201526024808201527f426173655631526f757465723a20494e53554646494349454e545f4c495155496044820152634449545960e01b60648201526084016104e3565b826129e383866135b9565b6129ed91906135d8565b949350505050565b6000818310612a045781612a06565b825b9392505050565b6000836001600160a01b03163b11612a2457600080fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691612a809190613766565b6000604051808303816000865af19150503d8060008114612abd576040519150601f19603f3d011682016040523d82523d6000602084013e612ac2565b606091505b5091509150818015612aec575080511580612aec575080806020019051810190612aec919061340d565b612af557600080fd5b5050505050565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b0381168114612b2757600080fd5b50565b803561291081612b12565b8015158114612b2757600080fd5b600080600080600080600080610100898b031215612b6057600080fd5b8835612b6b81612b12565b97506020890135612b7b81612b12565b96506040890135612b8b81612b35565b9550606089013594506080890135935060a0890135925060c0890135612bb081612b12565b8092505060e089013590509295985092959890939650565b600080600080600080600060e0888a031215612be357600080fd5b87359650602088013595506040880135612bfc81612b12565b94506060880135612c0c81612b12565b93506080880135612c1c81612b35565b925060a0880135612c2c81612b12565b8092505060c0880135905092959891949750929550565b6020808252825182820181905260009190848201906040850190845b81811015612c7b57835183529284019291840191600101612c5f565b50909695505050505050565b60008060008060808587031215612c9d57600080fd5b8435612ca881612b12565b93506020850135612cb881612b12565b92506040850135612cc881612b35565b9396929550929360600135925050565b600080600060608486031215612ced57600080fd5b8335612cf881612b12565b92506020840135612d0881612b12565b91506040840135612d1881612b35565b809150509250925092565b60008060408385031215612d3657600080fd5b8235612d4181612b12565b91506020830135612d5181612b12565b809150509250929050565b600080600080600080600060e0888a031215612d7757600080fd5b8735612d8281612b12565b96506020880135612d9281612b35565b955060408801359450606088013593506080880135925060a0880135612c2c81612b12565b60008060008060008060008060006101208a8c031215612dd657600080fd5b8935612de181612b12565b985060208a0135612df181612b12565b975060408a0135612e0181612b35565b965060608a0135955060808a0135945060a08a0135935060c08a0135925060e08a0135612e2d81612b12565b809250506101008a013590509295985092959850929598565b600080600060608486031215612e5b57600080fd5b833592506020840135612e6d81612b12565b91506040840135612d1881612b12565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612ebc57612ebc612e7d565b604052919050565b600067ffffffffffffffff821115612ede57612ede612e7d565b5060051b60200190565b60008083601f840112612efa57600080fd5b50813567ffffffffffffffff811115612f1257600080fd5b602083019150836020606083028501011115610be857600080fd5b600080600080600060808688031215612f4557600080fd5b853567ffffffffffffffff80821115612f5d57600080fd5b818801915088601f830112612f7157600080fd5b81356020612f86612f8183612ec4565b612e93565b82815260059290921b8401810191818101908c841115612fa557600080fd5b948201945b83861015612fc357853582529482019490820190612faa565b99505089013592505080821115612fd957600080fd5b50612fe688828901612ee8565b9095509350612ff9905060408701612b2a565b949793965091946060013592915050565b60006060828403121561301c57600080fd5b6040516060810181811067ffffffffffffffff8211171561303f5761303f612e7d565b604052905080823561305081612b12565b8152602083013561306081612b12565b6020820152604083013561307381612b35565b6040919091015292915050565b6000806040838503121561309357600080fd5b8235915060208084013567ffffffffffffffff8111156130b257600080fd5b8401601f810186136130c357600080fd5b80356130d1612f8182612ec4565b818152606091820283018401918482019190898411156130f057600080fd5b938501935b83851015613116576131078a8661300a565b835293840193918501916130f5565b5080955050505050509250929050565b600080600080600060a0868803121561313e57600080fd5b853561314981612b12565b9450602086013561315981612b12565b9350604086013561316981612b35565b94979396509394606081013594506080013592915050565b803560ff8116811461291057600080fd5b6000806000806000806000806000806000806101808d8f0312156131b557600080fd5b8c356131c081612b12565b9b5060208d01356131d081612b12565b9a5060408d01356131e081612b35565b995060608d0135985060808d0135975060a08d0135965060c08d013561320581612b12565b955060e08d013594506101008d013561321d81612b35565b935061322c6101208e01613181565b92506101408d013591506101608d013590509295989b509295989b509295989b565b60008060008060008060a0878903121561326757600080fd5b8635955060208701359450604087013567ffffffffffffffff81111561328c57600080fd5b61329889828a01612ee8565b90955093505060608701356132ac81612b12565b80925050608087013590509295509295509295565b60008060008060008060008060008060006101608c8e0312156132e357600080fd5b8b356132ee81612b12565b9a5060208c01356132fe81612b35565b995060408c0135985060608c0135975060808c0135965060a08c013561332381612b12565b955060c08c0135945060e08c013561333a81612b35565b93506133496101008d01613181565b92506101208c013591506101408c013590509295989b509295989b9093969950565b60006020828403121561337d57600080fd5b8135612a0681612b12565b6000806000806000608086880312156133a057600080fd5b85359450602086013567ffffffffffffffff8111156133be57600080fd5b6133ca88828901612ee8565b9095509350506040860135612ff981612b12565b60208082526015908201527410985cd9558c549bdd5d195c8e8811561412549151605a1b604082015260600190565b60006020828403121561341f57600080fd5b8151612a0681612b35565b6000806040838503121561343d57600080fd5b505080516020909101519092909150565b60208082526023908201527f426173655631526f757465723a20494e53554646494349454e545f415f414d4f60408201526215539560ea1b606082015260800190565b60208082526023908201527f426173655631526f757465723a20494e53554646494349454e545f425f414d4f60408201526215539560ea1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015613512576135126134ea565b500390565b60208082526028908201527f426173655631526f757465723a20494e53554646494349454e545f4f555450556040820152671517d05353d5539560c21b606082015260800190565b6001600160a01b039384168152919092166020820152901515604082015260600190565b60006020828403121561359557600080fd5b8151612a0681612b12565b6000602082840312156135b257600080fd5b5051919050565b60008160001904831182151516156135d3576135d36134ea565b500290565b6000826135f557634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160701b038116811461291057600080fd5b60008060006060848603121561362657600080fd5b61362f846135fa565b925061363d602085016135fa565b9150604084015163ffffffff81168114612d1857600080fd5b60006020828403121561366857600080fd5b8135612a0681612b35565b60006060828403121561368557600080fd5b612a06838361300a565b6020808252601a908201527f426173655631526f757465723a20494e56414c49445f50415448000000000000604082015260600190565b600082198211156136d9576136d96134ea565b500190565b60006000198214156136f2576136f26134ea565b5060010190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b60005b8381101561375557818101518382015260200161373d565b838111156125b35750506000910152565b6000825161377881846020870161373a565b9190910192915050565b84815283602082015260018060a01b038316604082015260806060820152600082518060808401526137bb8160a085016020870161373a565b601f01601f19169190910160a0019594505050505056fea26469706673582212200f3aa645c5b29b4bc05fb1f0d5494f0b22be90e7075d6cf76ff7b5037193f2e164736f6c634300080b0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000006435f8ebe37b5d3c5e2f6f0bca27264cba6b8ed2000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2

-----Decoded View---------------
Arg [0] : _factory (address): 0x6435F8ebe37B5d3C5E2f6f0bCA27264CBA6B8eD2
Arg [1] : _wftm (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000006435f8ebe37b5d3c5e2f6f0bca27264cba6b8ed2
Arg [1] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2


Deployed Bytecode Sourcemap

2288:17320:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2944:10;-1:-1:-1;;;;;2966:4:0;2944:27;;2937:35;;;;:::i;:::-;2288:17320;;;;;11792:832;;;;;;;;;;-1:-1:-1;11792:832:0;;;;;:::i;:::-;;:::i;:::-;;;;1664:25:1;;;1720:2;1705:18;;1698:34;;;;1637:18;11792:832:0;;;;;;;;15509:786;;;;;;;;;;-1:-1:-1;15509:786:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7805:753::-;;;;;;;;;;-1:-1:-1;7805:753:0;;;;;:::i;:::-;;:::i;3474:415::-;;;;;;;;;;-1:-1:-1;3474:415:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;4546:32:1;;;4528:51;;4516:2;4501:18;3474:415:0;4382:203:1;3043:339:0;;;;;;;;;;-1:-1:-1;3043:339:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;5213:15:1;;;5195:34;;5265:15;;;;5260:2;5245:18;;5238:43;5130:18;3043:339:0;4983:304:1;10794:955:0;;;;;;:::i;:::-;;:::i;:::-;;;;6298:25:1;;;6354:2;6339:18;;6332:34;;;;6382:18;;;6375:34;6286:2;6271:18;10794:955:0;6096:319:1;10084:702:0;;;;;;;;;;-1:-1:-1;10084:702:0;;;;;:::i;:::-;;:::i;4842:680::-;;;;;;;;;;-1:-1:-1;4842:680:0;;;;;:::i;:::-;;:::i;:::-;;;;8064:25:1;;;8132:14;;8125:22;8120:2;8105:18;;8098:50;8037:18;4842:680:0;7896:258:1;4379:381:0;;;;;;;;;;-1:-1:-1;4379:381:0;;;;;:::i;:::-;;:::i;18301:404::-;;;;;;;;;;-1:-1:-1;18301:404:0;;;;;:::i;:::-;;:::i;5604:573::-;;;;;;;;;;-1:-1:-1;5604:573:0;;;;;:::i;:::-;;:::i;6314:1483::-;;;;;;;;;;-1:-1:-1;6314:1483:0;;;;;:::i;:::-;;:::i;13313:707::-;;;;;;;;;;-1:-1:-1;13313:707:0;;;;;:::i;:::-;;:::i;2416:32::-;;;;;;;;;;;;;;;17526:767;;;;;;;;;;-1:-1:-1;17526:767:0;;;;;:::i;:::-;;:::i;12632:673::-;;;;;;;;;;-1:-1:-1;12632:673:0;;;;;:::i;:::-;;:::i;14028:676::-;;;;;;;;;;-1:-1:-1;14028:676:0;;;;;:::i;:::-;;:::i;6185:121::-;;;;;;;;;;-1:-1:-1;6185:121:0;;;;;:::i;:::-;;:::i;:::-;;;16861:14:1;;16854:22;16836:41;;16824:2;16809:18;6185:121:0;16696:187:1;16894:624:0;;;;;;:::i;:::-;;:::i;16303:583::-;;;;;;;;;;-1:-1:-1;16303:583:0;;;;;:::i;:::-;;:::i;2455:27::-;;;;;;;;;;;;;;;11792:832;12051:12;12065;12032:8;2645:15;2633:8;:27;;2625:61;;;;-1:-1:-1;;;2625:61:0;;;;;;;:::i;:::-;;;;;;;;;12090:12:::1;12105:31;12113:6;12121;12129;12105:7;:31::i;:::-;12155:59;::::0;-1:-1:-1;;;12155:59:0;;12186:10:::1;12155:59;::::0;::::1;18451:34:1::0;-1:-1:-1;;;;;12155:30:0;::::1;18501:18:1::0;;;18494:43;;;18553:18;;;18546:34;;;12090:46:0;;-1:-1:-1;12155:30:0::1;::::0;18386:18:1;;12155:59:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12147:68;;;::::0;::::1;;12283:26;::::0;-1:-1:-1;;;12283:26:0;;-1:-1:-1;;;;;4546:32:1;;;12283:26:0::1;::::0;::::1;4528:51:1::0;12253:12:0::1;::::0;;;12283:22;::::1;::::0;::::1;::::0;4501:18:1;;12283:26:0::1;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12252:57;;;;12321:14;12340:26;12351:6;12359;12340:10;:26::i;:::-;12320:46;;;12408:6;-1:-1:-1::0;;;;;12398:16:0::1;:6;-1:-1:-1::0;;;;;12398:16:0::1;;:58;;12439:7;12448;12398:58;;;12418:7;12427;12398:58;12377:79:::0;;-1:-1:-1;12377:79:0;-1:-1:-1;12475:21:0;;::::1;;12467:69;;;;-1:-1:-1::0;;;12467:69:0::1;;;;;;;:::i;:::-;12566:10;12555:7;:21;;12547:69;;;;-1:-1:-1::0;;;12547:69:0::1;;;;;;;:::i;:::-;12079:545;;;;11792:832:::0;;;;;;;;;;;;:::o;15509:786::-;15764:21;15745:8;2645:15;2633:8;:27;;2625:61;;;;-1:-1:-1;;;2625:61:0;;;;;;;:::i;:::-;15822:14:::1;::::0;;15834:1:::1;15822:14:::0;;;;;::::1;::::0;;;15798:21:::1;::::0;15822:14:::1;;;;-1:-1:-1::0;;;;;;;;;;;;;;;;;;;;;;;15822:14:0;;-1:-1:-1;;15822:14:0;;;;::::1;::::0;::::1;;;;;15798:38;;15864:9;15847:6;15854:1;15847:9;;;;;;;;:::i;:::-;;;;;;;:14;;:26;-1:-1:-1::0;;;;;15847:26:0::1;;;-1:-1:-1::0;;;;;15847:26:0::1;;;::::0;::::1;15899:7;15884:6;15891:1;15884:9;;;;;;;;:::i;:::-;;;;;;;:12;;:22;-1:-1:-1::0;;;;;15884:22:0::1;;;-1:-1:-1::0;;;;;15884:22:0::1;;;::::0;::::1;15936:6;15917;15924:1;15917:9;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;:25;::::1;;:16;::::0;;::::1;:25:::0;15963:31:::1;15977:8:::0;15987:6;15963:13:::1;:31::i;:::-;15953:41;;16044:12;16013:7;16038:1;16021:7;:14;:18;;;;:::i;:::-;16013:27;;;;;;;;:::i;:::-;;;;;;;:43;;16005:96;;;;-1:-1:-1::0;;;16005:96:0::1;;;;;;;:::i;:::-;16112:138;16144:6;16151:1;16144:9;;;;;;;;:::i;:::-;;;;;;;:14;;;16160:10;16172:55;16180:6;16187:1;16180:9;;;;;;;;:::i;:::-;;;;;;;:14;;;16196:6;16203:1;16196:9;;;;;;;;:::i;:::-;;;;;;;:12;;;16210:6;16217:1;16210:9;;;;;;;;:::i;:::-;;;;;;;:16;;;16172:7;:55::i;:::-;16229:7;16237:1;16229:10;;;;;;;;:::i;:::-;;;;;;;16112:17;:138::i;:::-;16261:26;16267:7;16276:6;16284:2;16261:5;:26::i;:::-;15787:508;15509:786:::0;;;;;;;;;;:::o;7805:753::-;7962:12;7976;8053:13;8084:7;-1:-1:-1;;;;;8069:31:0;;8101:6;8109;8117;8069:55;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8053:71;-1:-1:-1;;;;;;8141:19:0;;8137:64;;8185:1;8187;8177:12;;;;;;;8137:64;8214:13;8229;8246:35;8258:6;8266;8274;8246:11;:35::i;:::-;8213:68;;;;8292:17;8318:5;-1:-1:-1;;;;;8312:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8292:46;-1:-1:-1;8292:46:0;8361:20;8373:8;8361:9;:20;:::i;:::-;:35;;;;:::i;:::-;8351:45;-1:-1:-1;8488:12:0;8465:20;8477:8;8465:9;:20;:::i;:::-;:35;;;;:::i;:::-;8455:45;;7990:568;;;;7805:753;;;;;;;;:::o;3474:415::-;3557:12;3583:14;3599;3617:26;3628:6;3636;3617:10;:26::i;:::-;3780:40;;-1:-1:-1;;22181:2:1;22177:15;;;22173:24;;3780:40:0;;;22161:37:1;22232:15;;;22228:24;22214:12;;;22207:46;22299:14;;22292:22;22287:3;22283:32;22269:12;;;22262:54;3582:61:0;;-1:-1:-1;3582:61:0;-1:-1:-1;3748:7:0;;22332:12:1;;3780:40:0;;;;;;;;;;;;3770:51;;;;;;3836:12;3695:182;;;;;;;;;-1:-1:-1;;;;;;22641:26:1;;22704:2;22700:15;;;;-1:-1:-1;;22696:53:1;22692:1;22683:11;;22676:74;22775:2;22766:12;;22759:28;;;;22812:2;22803:12;;22796:28;22849:2;22840:12;;22355:503;3695:182:0;;;;-1:-1:-1;;3695:182:0;;;;;;;;;3685:193;;3695:182;3685:193;;;;;3474:415;-1:-1:-1;;;;;;3474:415:0:o;3043:339::-;3116:14;3132;3177:6;-1:-1:-1;;;;;3167:16:0;:6;-1:-1:-1;;;;;3167:16:0;;;3159:62;;;;-1:-1:-1;;;3159:62:0;;23065:2:1;3159:62:0;;;23047:21:1;23104:2;23084:18;;;23077:30;23143:34;23123:18;;;23116:62;-1:-1:-1;;;23194:18:1;;;23187:31;23235:19;;3159:62:0;22863:397:1;3159:62:0;3260:6;-1:-1:-1;;;;;3251:15:0;:6;-1:-1:-1;;;;;3251:15:0;;:53;;3289:6;3297;3251:53;;;3270:6;3278;3251:53;3232:72;;-1:-1:-1;3232:72:0;-1:-1:-1;;;;;;3323:20:0;;3315:59;;;;-1:-1:-1;;;3315:59:0;;23467:2:1;3315:59:0;;;23449:21:1;23506:2;23486:18;;;23479:30;23545:28;23525:18;;;23518:56;23591:18;;3315:59:0;23265:350:1;3315:59:0;3043:339;;;;;:::o;10794:955::-;11052:16;11070:14;11086;11033:8;2645:15;2633:8;:27;;2625:61;;;;-1:-1:-1;;;2625:61:0;;;;;;;:::i;:::-;11140:206:::1;11168:5;11196:4;11216:6;11237:18;11270:9;11294:14;11323:12;11140:13;:206::i;:::-;11113:233:::0;;-1:-1:-1;11113:233:0;-1:-1:-1;11357:12:0::1;11372:37;11380:5:::0;11395:4:::1;11402:6:::0;11372:7:::1;:37::i;:::-;11357:52;;11420:55;11438:5;11445:10;11457:4;11463:11;11420:17;:55::i;:::-;11486:4;-1:-1:-1::0;;;;;11486:12:0::1;;11506:9;11486:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;11536:30:0::1;::::0;-1:-1:-1;;;11536:30:0;;-1:-1:-1;;;;;23812:32:1;;;11536:30:0::1;::::0;::::1;23794:51:1::0;23861:18;;;23854:34;;;11536:4:0::1;:13;::::0;-1:-1:-1;11536:13:0::1;::::0;-1:-1:-1;23767:18:1;;;-1:-1:-1;11536:30:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11529:38;;;;:::i;:::-;11590:26;::::0;-1:-1:-1;;;11590:26:0;;-1:-1:-1;;;;;4546:32:1;;;11590:26:0::1;::::0;::::1;4528:51:1::0;11590:22:0;::::1;::::0;::::1;::::0;4501:18:1;;11590:26:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11578:38;;11679:9;11667;:21;11663:78;;;11690:51;11707:10;11719:21;11731:9:::0;11719::::1;:21;:::i;:::-;11690:16;:51::i;:::-;11102:647;10794:955:::0;;;;;;;;;;;;:::o;10084:702::-;10377:12;10391;10405:14;10358:8;2645:15;2633:8;:27;;2625:61;;;;-1:-1:-1;;;2625:61:0;;;;;;;:::i;:::-;10453:93:::1;10467:6;10475;10483;10491:14;10507;10523:10;10535;10453:13;:93::i;:::-;10432:114:::0;;-1:-1:-1;10432:114:0;-1:-1:-1;10557:12:0::1;10572:31;10580:6:::0;10588;10596;10572:7:::1;:31::i;:::-;10557:46;;10614:52;10632:6;10640:10;10652:4;10658:7;10614:17;:52::i;:::-;10677;10695:6;10703:10;10715:4;10721:7;10677:17;:52::i;:::-;10752:26;::::0;-1:-1:-1;;;10752:26:0;;-1:-1:-1;;;;;4546:32:1;;;10752:26:0::1;::::0;::::1;4528:51:1::0;10752:22:0;::::1;::::0;::::1;::::0;4501:18:1;;10752:26:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10740:38;;10421:365;10084:702:::0;;;;;;;;;;;;;;:::o;4842:680::-;4937:11;4950;4974:12;4989:32;4997:7;5006:8;5016:4;4989:7;:32::i;:::-;5094:36;;-1:-1:-1;;;5094:36:0;;-1:-1:-1;;;;;4546:32:1;;;5094:36:0;;;4528:51:1;4546:32;;-1:-1:-1;;;;;5109:7:0;5094:30;;;;;;4501:18:1;;5094:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5090:133;;;5162:49;;-1:-1:-1;;;5162:49:0;;;;;24073:25:1;;;-1:-1:-1;;;;;24134:32:1;;;24114:18;;;24107:60;5162:30:0;;;;;24046:18:1;;5162:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5147:64;;5090:133;5240:33;5248:7;5257:8;5267:5;5240:7;:33::i;:::-;5288:36;;-1:-1:-1;;;5288:36:0;;-1:-1:-1;;;;;4546:32:1;;;5288:36:0;;;4528:51:1;5233:40:0;;-1:-1:-1;5303:7:0;5288:30;;;;;;4501:18:1;;5288:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5284:135;;;5358:49;;-1:-1:-1;;;5358:49:0;;;;;24073:25:1;;;-1:-1:-1;;;;;24134:32:1;;;24114:18;;;24107:60;5358:30:0;;;;;24046:18:1;;5358:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5341:66;;5284:135;5451:14;5436:12;:29;:78;;5492:14;5508:5;5436:78;;;5469:12;5483:4;5436:78;5429:85;;;;;;;4842:680;;;;;;:::o;4379:381::-;4466:13;4481;4508:14;4527:26;4538:6;4546;4527:10;:26::i;:::-;4507:46;;;4565:13;4580;4610:31;4618:6;4626;4634;4610:7;:31::i;:::-;-1:-1:-1;;;;;4598:56:0;;:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4564:92;-1:-1:-1;;;;;4564:92:0;;;-1:-1:-1;;;;;4564:92:0;;;4700:6;-1:-1:-1;;;;;4690:16:0;:6;-1:-1:-1;;;;;4690:16:0;;:62;;4733:8;4743;4690:62;;;4710:8;4720;4690:62;4667:85;;;;-1:-1:-1;4379:381:0;-1:-1:-1;;;;;;;4379:381:0:o;18301:404::-;18495:13;18476:8;2645:15;2633:8;:27;;2625:61;;;;-1:-1:-1;;;2625:61:0;;;;;;;:::i;:::-;18521:114:::1;18539:6;;18546:1;18539:9;;;;;;;:::i;:::-;:14;::::0;::::1;:9;::::0;;::::1;;:14:::0;;::::1;::::0;-1:-1:-1;18539:14:0::1;:::i;:::-;18555:10;18567:55;18575:6;;18582:1;18575:9;;;;;;;:::i;:::-;:14;::::0;::::1;:9;::::0;;::::1;;:14:::0;;::::1;::::0;-1:-1:-1;18575:14:0::1;:::i;:::-;18591:6;;18598:1;18591:9;;;;;;;:::i;:::-;;;;;;:12;;;;;;;;;;:::i;:::-;18605:6;;18612:1;18605:9;;;;;;;:::i;:::-;;;;;;:16;;;;;;;;;;:::i;18567:55::-;18624:7;18632:1;18624:10;;;;;;;;:::i;18521:114::-;18646:26;18652:7;18661:6;;18646:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;18669:2;18646:5;:26::i;:::-;18690:7;18683:14;;2697:1;18301:404:::0;;;;;;;;:::o;5604:573::-;5686:21;5745:1;5728:6;:13;:18;;5720:57;;;;-1:-1:-1;;;5720:57:0;;;;;;;:::i;:::-;5809:13;;:15;;5823:1;5809:15;:::i;:::-;5798:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5798:27:0;;5788:37;;5849:8;5836:7;5844:1;5836:10;;;;;;;;:::i;:::-;;;;;;:21;;;;;5873:6;5868:302;5889:6;:13;5885:1;:17;5868:302;;;5924:12;5939:55;5947:6;5954:1;5947:9;;;;;;;;:::i;:::-;;;;;;;:14;;;5963:6;5970:1;5963:9;;;;;;;;:::i;:::-;;;;;;;:12;;;5977:6;5984:1;5977:9;;;;;;;;:::i;5939:55::-;6013:36;;-1:-1:-1;;;6013:36:0;;-1:-1:-1;;;;;4546:32:1;;;6013:36:0;;;4528:51:1;5924:70:0;;-1:-1:-1;6028:7:0;6013:30;;;;;;4501:18:1;;6013:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6009:150;;;6097:4;-1:-1:-1;;;;;6085:30:0;;6116:7;6124:1;6116:10;;;;;;;;:::i;:::-;;;;;;;6128:6;6135:1;6128:9;;;;;;;;:::i;:::-;;;;;;;:14;;;6085:58;;;;;;;;;;;;;;;24073:25:1;;;-1:-1:-1;;;;;24134:32:1;24129:2;24114:18;;24107:60;24061:2;24046:18;;23899:274;6085:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6070:7;6078:3;:1;6080;6078:3;:::i;:::-;6070:12;;;;;;;;:::i;:::-;;;;;;:73;;;;;6009:150;-1:-1:-1;5904:3:0;;;;:::i;:::-;;;;5868:302;;;;5604:573;;;;:::o;6314:1483::-;6503:12;6517;6531:14;6610:13;6641:7;-1:-1:-1;;;;;6626:31:0;;6658:6;6666;6674;6626:55;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6610:71;-1:-1:-1;6693:13:0;;;-1:-1:-1;;;;;6777:19:0;;;6773:166;;6834:5;-1:-1:-1;;;;;6828:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6813:41;;6892:35;6904:6;6912;6920;6892:11;:35::i;:::-;6869:58;;-1:-1:-1;6869:58:0;-1:-1:-1;6773:166:0;6953:13;;:30;;;;-1:-1:-1;6970:13:0;;6953:30;6949:841;;;7022:14;;-1:-1:-1;7038:14:0;;-1:-1:-1;2532:5:0;7080:28;7090:17;7038:14;7022;7090:17;:::i;:::-;7080:9;:28::i;:::-;:48;;;;:::i;:::-;7068:60;;6949:841;;;7163:19;7185:50;7200:14;7216:8;7226;7185:14;:50::i;:::-;7163:72;;7272:14;7254;:32;7250:529;;7329:14;;-1:-1:-1;7345:14:0;-1:-1:-1;7345:14:0;7391:78;7425:8;7400:22;7410:12;7329:14;7400:22;:::i;:::-;:33;;;;:::i;:::-;7460:8;7435:22;7445:12;7435:7;:22;:::i;:::-;:33;;;;:::i;:::-;7391:8;:78::i;:::-;7379:90;;7250:529;;;7510:19;7532:50;7547:14;7563:8;7573;7532:14;:50::i;:::-;7510:72;-1:-1:-1;7639:14:0;;-1:-1:-1;7510:72:0;;-1:-1:-1;7685:78:0;7719:8;7694:22;7704:12;7510:72;7694:22;:::i;:::-;:33;;;;:::i;:::-;7754:8;7729:22;7739:12;7729:7;:22;:::i;7685:78::-;7673:90;;7491:288;7250:529;7146:644;6949:841;6547:1250;;;;6314:1483;;;;;;;;;:::o;13313:707::-;13624:12;13638;13663;13678:31;13686:6;13694;13702;13678:7;:31::i;:::-;13663:46;;13735:10;13748;:39;;13778:9;13748:39;;;-1:-1:-1;;13748:39:0;13802:77;;-1:-1:-1;;;13802:77:0;;13735:52;;-1:-1:-1;;;;;;13802:24:0;;;;;:77;;13827:10;;13847:4;;13735:52;;13861:8;;13871:1;;13874;;13877;;13802:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13720:171;13924:88;13940:6;13948;13956;13964:9;13975:10;13987;13999:2;14003:8;13924:15;:88::i;:::-;13903:109;;;;;;;;13652:368;13313:707;;;;;;;;;;;;;;;:::o;17526:767::-;17693:21;17669:8;2645:15;2633:8;:27;;2625:61;;;;-1:-1:-1;;;2625:61:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17780:4:0::1;17740:45;:6:::0;;17747:17:::1;17763:1;17740:6:::0;17747:17:::1;:::i;:::-;17740:25;;;;;;;:::i;:::-;;;;;;:28;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17740:45:0::1;;17732:84;;;;-1:-1:-1::0;;;17732:84:0::1;;;;;;;:::i;:::-;17837:31;17851:8;17861:6;;17837:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;:13;:31::i;:::-;17827:41;;17918:12;17887:7;17912:1;17895:7;:14;:18;;;;:::i;:::-;17887:27;;;;;;;;:::i;:::-;;;;;;;:43;;17879:96;;;;-1:-1:-1::0;;;17879:96:0::1;;;;;;;:::i;:::-;17986:138;18018:6;;18025:1;18018:9;;;;;;;:::i;:::-;:14;::::0;::::1;:9;::::0;;::::1;;:14:::0;;::::1;::::0;-1:-1:-1;18018:14:0::1;:::i;:::-;18034:10;18046:55;18054:6;;18061:1;18054:9;;;;;;;:::i;18046:55::-;18103:7;18111:1;18103:10;;;;;;;;:::i;17986:138::-;18135:37;18141:7;18150:6;;18135:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;18166:4;18135:5;:37::i;:::-;18183:4;-1:-1:-1::0;;;;;18183:13:0::1;;18197:7;18222:1;18205:7;:14;:18;;;;:::i;:::-;18197:27;;;;;;;;:::i;:::-;;;;;;;18183:42;;;;;;;;;;;;;26748:25:1::0;;26736:2;26721:18;;26602:177;18183:42:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18236:49;18253:2;18257:7;18282:1;18265:7;:14;:18;;;;:::i;:::-;18257:27;;;;;;;;:::i;:::-;;;;;;;18236:16;:49::i;:::-;17526:767:::0;;;;;;;;;:::o;12632:673::-;12874:16;12892:14;12855:8;2645:15;2633:8;:27;;2625:61;;;;-1:-1:-1;;;2625:61:0;;;;;;;:::i;:::-;12946:226:::1;12976:5;13004:4;13024:6;13045:9;13069:14;13098:12;13133:4;13153:8;12946:15;:226::i;:::-;12919:253:::0;;-1:-1:-1;12919:253:0;-1:-1:-1;13183:37:0::1;13197:5:::0;13204:2;12919:253;13183:13:::1;:37::i;:::-;13231:24;::::0;-1:-1:-1;;;13231:24:0;;::::1;::::0;::::1;26748:25:1::0;;;13231:4:0::1;-1:-1:-1::0;;;;;13231:13:0::1;::::0;::::1;::::0;26721:18:1;;13231:24:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;13266:31;13283:2;13287:9;13266:16;:31::i;:::-;12632:673:::0;;;;;;;;;;;:::o;14028:676::-;14322:16;14340:14;14367:12;14382:37;14390:5;14405:4;14412:6;14382:7;:37::i;:::-;14367:52;;14430:10;14443;:39;;14473:9;14443:39;;;-1:-1:-1;;14443:39:0;14493:77;;-1:-1:-1;;;14493:77:0;;14430:52;;-1:-1:-1;;;;;;14493:24:0;;;;;:77;;14518:10;;14538:4;;14430:52;;14552:8;;14562:1;;14565;;14568;;14493:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14608:88;14627:5;14634:6;14642:9;14653:14;14669:12;14683:2;14687:8;14608:18;:88::i;:::-;14581:115;;;;;;;;14356:348;;14028:676;;;;;;;;;;;;;;:::o;6185:121::-;6262:36;;-1:-1:-1;;;6262:36:0;;-1:-1:-1;;;;;4546:32:1;;;6262:36:0;;;4528:51:1;6238:4:0;;6277:7;6262:30;;;;;;4501:18:1;;6262:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6255:43;6185:121;-1:-1:-1;;6185:121:0:o;16894:624::-;17059:21;17035:8;2645:15;2633:8;:27;;2625:61;;;;-1:-1:-1;;;2625:61:0;;;;;;;:::i;:::-;17132:4:::1;-1:-1:-1::0;;;;;17106:31:0::1;:6;;17113:1;17106:9;;;;;;;:::i;:::-;:14;::::0;::::1;:9;::::0;;::::1;;:14:::0;;::::1;::::0;-1:-1:-1;17106:14:0::1;:::i;:::-;-1:-1:-1::0;;;;;17106:31:0::1;;17098:70;;;;-1:-1:-1::0;;;17098:70:0::1;;;;;;;:::i;:::-;17189:32;17203:9;17214:6;;17189:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;17179:42;;17271:12;17240:7;17265:1;17248:7;:14;:18;;;;:::i;:::-;17240:27;;;;;;;;:::i;:::-;;;;;;;:43;;17232:96;;;;-1:-1:-1::0;;;17232:96:0::1;;;;;;;:::i;:::-;17339:4;-1:-1:-1::0;;;;;17339:12:0::1;;17359:7;17367:1;17359:10;;;;;;;;:::i;:::-;;;;;;;17339:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;17390:4;-1:-1:-1::0;;;;;17390:13:0::1;;17404:55;17412:6;;17419:1;17412:9;;;;;;;:::i;:::-;:14;::::0;::::1;:9;::::0;;::::1;;:14:::0;;::::1;::::0;-1:-1:-1;17412:14:0::1;:::i;:::-;17428:6;;17435:1;17428:9;;;;;;;:::i;:::-;;;;;;:12;;;;;;;;;;:::i;:::-;17442:6;;17449:1;17442:9;;;;;;;:::i;17404:55::-;17461:7;17469:1;17461:10;;;;;;;;:::i;:::-;;;;;;;17390:82;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;23812:32:1;;;;23794:51;;23876:2;23861:18;;23854:34;23782:2;23767:18;;23620:274;17390:82:0::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17383:90;;;;:::i;:::-;17484:26;17490:7;17499:6;;17484:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;16303:583:::0;16510:21;16491:8;2645:15;2633:8;:27;;2625:61;;;;-1:-1:-1;;;2625:61:0;;;;;;;:::i;:::-;16554:31:::1;16568:8;16578:6;;16554:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;16544:41;;16635:12;16604:7;16629:1;16612:7;:14;:18;;;;:::i;:::-;16604:27;;;;;;;;:::i;:::-;;;;;;;:43;;16596:96;;;;-1:-1:-1::0;;;16596:96:0::1;;;;;;;:::i;:::-;16703:138;16735:6;;16742:1;16735:9;;;;;;;:::i;16703:138::-;16852:26;16858:7;16867:6;;16852:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;19251:354:::0;19382:1;19362:5;-1:-1:-1;;;;;19362:17:0;;:21;19354:30;;;;;;19451:68;;;-1:-1:-1;;;;;18469:15:1;;;19451:68:0;;;18451:34:1;18521:15;;;18501:18;;;18494:43;18553:18;;;;18546:34;;;19451:68:0;;;;;;;;;;18386:18:1;;;;19451:68:0;;;;;;;-1:-1:-1;;;;;19451:68:0;-1:-1:-1;;;19451:68:0;;;19440:80;;-1:-1:-1;;;;19440:10:0;;;;:80;;19451:68;19440:80;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19395:125;;;;19539:7;:57;;;;-1:-1:-1;19551:11:0;;:16;;:44;;;19582:4;19571:24;;;;;;;;;;;;:::i;:::-;19531:66;;;;;;19343:262;;19251:354;;;;:::o;14815:686::-;14922:6;14917:577;14938:6;:13;14934:1;:17;14917:577;;;14974:14;14993:40;15004:6;15011:1;15004:9;;;;;;;;:::i;:::-;;;;;;;:14;;;15020:6;15027:1;15020:9;;;;;;;;:::i;:::-;;;;;;;:12;;;14993:10;:40::i;:::-;-1:-1:-1;14973:60:0;-1:-1:-1;15048:14:0;15065:7;15073:5;:1;15077;15073:5;:::i;:::-;15065:14;;;;;;;;:::i;:::-;;;;;;;15048:31;;15095:15;15112;15149:6;-1:-1:-1;;;;;15131:24:0;:6;15138:1;15131:9;;;;;;;;:::i;:::-;;;;;;;:14;;;-1:-1:-1;;;;;15131:24:0;;:70;;15182:9;15198:1;15131:70;;;15164:1;15168:9;15131:70;15094:107;;;;15216:10;15249:1;15233:6;:13;:17;;;;:::i;:::-;15229:1;:21;:91;;15317:3;15229:91;;;15253:61;15261:6;15268:3;:1;15270;15268:3;:::i;:::-;15261:11;;;;;;;;:::i;:::-;;;;;;;:16;;;15279:6;15286:1;15288;15286:3;;;;:::i;:::-;15279:11;;;;;;;;:::i;:::-;;;;;;;:14;;;15295:6;15302:1;15304;15302:3;;;;:::i;:::-;15295:11;;;;;;;;:::i;15253:61::-;15216:104;;15347:55;15355:6;15362:1;15355:9;;;;;;;;:::i;:::-;;;;;;;:14;;;15371:6;15378:1;15371:9;;;;;;;;:::i;:::-;;;;;;;:12;;;15385:6;15392:1;15385:9;;;;;;;;:::i;15347:55::-;-1:-1:-1;;;;;15335:73:0;;15427:10;15439;15451:2;15465:1;15455:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15455:12:0;;15335:147;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14958:536;;;;;14953:3;;;;;:::i;:::-;;;;14917:577;;;;14815:686;;;:::o;8566:1510::-;8798:12;8812;8863:10;8845:14;:28;;8837:37;;;;;;8911:10;8893:14;:28;;8885:37;;;;;;9001:55;;-1:-1:-1;;;9001:55:0;;8985:13;;-1:-1:-1;;;;;9016:7:0;9001:31;;;;:55;;9033:6;;9041;;9049;;9001:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8985:71;-1:-1:-1;;;;;;9071:19:0;;9067:118;;9115:58;;-1:-1:-1;;;9115:58:0;;-1:-1:-1;;;;;9130:7:0;9115:34;;;;:58;;9150:6;;9158;;9166;;9115:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9107:66;;9067:118;9196:13;9211;9228:35;9240:6;9248;9256;9228:11;:35::i;:::-;9195:68;;;;9278:8;9290:1;9278:13;:30;;;;-1:-1:-1;9295:13:0;;9278:30;9274:795;;;9347:14;;-1:-1:-1;9363:14:0;;-1:-1:-1;9274:795:0;;;9411:19;9433:50;9448:14;9464:8;9474;9433:14;:50::i;:::-;9411:72;;9520:14;9502;:32;9498:560;;9581:10;9563:14;:28;;9555:76;;;;-1:-1:-1;;;9555:76:0;;;;;;;:::i;:::-;9672:14;;-1:-1:-1;9688:14:0;-1:-1:-1;9688:14:0;9498:560;;;9744:19;9766:50;9781:14;9797:8;9807;9766:14;:50::i;:::-;9744:72;;9860:14;9842;:32;;9835:40;;;;:::i;:::-;9920:10;9902:14;:28;;9894:76;;;;-1:-1:-1;;;9894:76:0;;;;;;;:::i;:::-;10011:14;-1:-1:-1;10027:14:0;;-1:-1:-1;9498:560:0;9396:673;9274:795;8826:1250;;;8566:1510;;;;;;;;;;:::o;18713:196::-;18822:12;;;18784;18822;;;;;;;;;-1:-1:-1;;;;;18801:7:0;;;18815:5;;18801:34;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18783:52;;;18854:7;18846:55;;;;-1:-1:-1;;;18846:55:0;;28157:2:1;18846:55:0;;;28139:21:1;28196:2;28176:18;;;28169:30;28235:34;28215:18;;;28208:62;-1:-1:-1;;;28286:18:1;;;28279:33;28329:19;;18846:55:0;27955:399:1;18846:55:0;18772:137;18713:196;;:::o;1802:303::-;1847:6;1874:1;1870;:5;1866:232;;;-1:-1:-1;1896:1:0;1912:6;1921:5;1925:1;1896;1921:5;:::i;:::-;:9;;1929:1;1921:9;:::i;:::-;1912:18;;1945:92;1956:1;1952;:5;1945:92;;;1982:1;-1:-1:-1;1982:1:0;2020;1982;2007:5;1982:1;2007;:5;:::i;:::-;:9;;;;:::i;:::-;2006:15;;;;:::i;:::-;2002:19;;1945:92;;;1877:171;1802:303;;;:::o;1866:232::-;2058:6;;2054:44;;-1:-1:-1;2085:1:0;2054:44;1802:303;;;:::o;4002:319::-;4093:12;4136:1;4126:7;:11;4118:57;;;;-1:-1:-1;;;4118:57:0;;28561:2:1;4118:57:0;;;28543:21:1;28600:2;28580:18;;;28573:30;28639:34;28619:18;;;28612:62;-1:-1:-1;;;28690:18:1;;;28683:31;28731:19;;4118:57:0;28359:397:1;4118:57:0;4205:1;4194:8;:12;:28;;;;;4221:1;4210:8;:12;4194:28;4186:77;;;;-1:-1:-1;;;4186:77:0;;28963:2:1;4186:77:0;;;28945:21:1;29002:2;28982:18;;;28975:30;29041:34;29021:18;;;29014:62;-1:-1:-1;;;29092:18:1;;;29085:34;29136:19;;4186:77:0;28761:400:1;4186:77:0;4305:8;4284:18;4294:8;4284:7;:18;:::i;:::-;:29;;;;:::i;:::-;4274:39;4002:319;-1:-1:-1;;;;4002:319:0:o;1699:97::-;1751:4;1779:1;1775;:5;:13;;1787:1;1775:13;;;1783:1;1775:13;1768:20;1699:97;-1:-1:-1;;;1699:97:0:o;18917:326::-;19030:1;19010:5;-1:-1:-1;;;;;19010:17:0;;:21;19002:30;;;;;;19099:58;;;-1:-1:-1;;;;;23812:32:1;;;19099:58:0;;;23794:51:1;23861:18;;;;23854:34;;;19099:58:0;;;;;;;;;;23767:18:1;;;;19099:58:0;;;;;;;-1:-1:-1;;;;;19099:58:0;-1:-1:-1;;;19099:58:0;;;19088:70;;-1:-1:-1;;;;19088:10:0;;;;:70;;19099:58;19088:70;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19043:115;;;;19177:7;:57;;;;-1:-1:-1;19189:11:0;;:16;;:44;;;19220:4;19209:24;;;;;;;;;;;;:::i;:::-;19169:66;;;;;;18991:252;;18917:326;;;:::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;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:592::-;3340:6;3348;3356;3364;3417:3;3405:9;3396:7;3392:23;3388:33;3385:53;;;3434:1;3431;3424:12;3385:53;3473:9;3460:23;3492:31;3517:5;3492:31;:::i;:::-;3542:5;-1:-1:-1;3599:2:1;3584:18;;3571:32;3612:33;3571:32;3612:33;:::i;:::-;3664:7;-1:-1:-1;3723:2:1;3708:18;;3695:32;3736:30;3695:32;3736:30;:::i;:::-;3257:592;;;;-1:-1:-1;3785:7:1;;3839:2;3824:18;3811:32;;-1:-1:-1;;3257:592:1:o;3854:523::-;3928:6;3936;3944;3997:2;3985:9;3976:7;3972:23;3968:32;3965:52;;;4013:1;4010;4003:12;3965:52;4052:9;4039:23;4071:31;4096:5;4071:31;:::i;:::-;4121:5;-1:-1:-1;4178:2:1;4163:18;;4150:32;4191:33;4150:32;4191:33;:::i;:::-;4243:7;-1:-1:-1;4302:2:1;4287:18;;4274:32;4315:30;4274:32;4315:30;:::i;:::-;4364:7;4354:17;;;3854:523;;;;;:::o;4590:388::-;4658:6;4666;4719:2;4707:9;4698:7;4694:23;4690:32;4687:52;;;4735:1;4732;4725:12;4687:52;4774:9;4761:23;4793:31;4818:5;4793:31;:::i;:::-;4843:5;-1:-1:-1;4900:2:1;4885:18;;4872:32;4913:33;4872:32;4913:33;:::i;:::-;4965:7;4955:17;;;4590:388;;;;;:::o;5292:799::-;5402:6;5410;5418;5426;5434;5442;5450;5503:3;5491:9;5482:7;5478:23;5474:33;5471:53;;;5520:1;5517;5510:12;5471:53;5559:9;5546:23;5578:31;5603:5;5578:31;:::i;:::-;5628:5;-1:-1:-1;5685:2:1;5670:18;;5657:32;5698:30;5657:32;5698:30;:::i;:::-;5747:7;-1:-1:-1;5801:2:1;5786:18;;5773:32;;-1:-1:-1;5852:2:1;5837:18;;5824:32;;-1:-1:-1;5903:3:1;5888:19;;5875:33;;-1:-1:-1;5960:3:1;5945:19;;5932:33;5974;5932;5974;:::i;6420:1010::-;6548:6;6556;6564;6572;6580;6588;6596;6604;6612;6665:3;6653:9;6644:7;6640:23;6636:33;6633:53;;;6682:1;6679;6672:12;6633:53;6721:9;6708:23;6740:31;6765:5;6740:31;:::i;:::-;6790:5;-1:-1:-1;6847:2:1;6832:18;;6819:32;6860:33;6819:32;6860:33;:::i;:::-;6912:7;-1:-1:-1;6971:2:1;6956:18;;6943:32;6984:30;6943:32;6984:30;:::i;:::-;7033:7;-1:-1:-1;7087:2:1;7072:18;;7059:32;;-1:-1:-1;7138:3:1;7123:19;;7110:33;;-1:-1:-1;7190:3:1;7175:19;;7162:33;;-1:-1:-1;7242:3:1;7227:19;;7214:33;;-1:-1:-1;7299:3:1;7284:19;;7271:33;7313;7271;7313;:::i;:::-;7365:7;7355:17;;;7419:3;7408:9;7404:19;7391:33;7381:43;;6420:1010;;;;;;;;;;;:::o;7435:456::-;7512:6;7520;7528;7581:2;7569:9;7560:7;7556:23;7552:32;7549:52;;;7597:1;7594;7587:12;7549:52;7633:9;7620:23;7610:33;;7693:2;7682:9;7678:18;7665:32;7706:31;7731:5;7706:31;:::i;:::-;7756:5;-1:-1:-1;7813:2:1;7798:18;;7785:32;7826:33;7785:32;7826:33;:::i;8159:127::-;8220:10;8215:3;8211:20;8208:1;8201:31;8251:4;8248:1;8241:15;8275:4;8272:1;8265:15;8291:275;8362:2;8356:9;8427:2;8408:13;;-1:-1:-1;;8404:27:1;8392:40;;8462:18;8447:34;;8483:22;;;8444:62;8441:88;;;8509:18;;:::i;:::-;8545:2;8538:22;8291:275;;-1:-1:-1;8291:275:1:o;8571:183::-;8631:4;8664:18;8656:6;8653:30;8650:56;;;8686:18;;:::i;:::-;-1:-1:-1;8731:1:1;8727:14;8743:4;8723:25;;8571:183::o;8759:384::-;8836:8;8846:6;8900:3;8893:4;8885:6;8881:17;8877:27;8867:55;;8918:1;8915;8908:12;8867:55;-1:-1:-1;8941:20:1;;8984:18;8973:30;;8970:50;;;9016:1;9013;9006:12;8970:50;9053:4;9045:6;9041:17;9029:29;;9116:3;9109:4;9101;9093:6;9089:17;9081:6;9077:30;9073:41;9070:50;9067:70;;;9133:1;9130;9123:12;9148:1410;9310:6;9318;9326;9334;9342;9395:3;9383:9;9374:7;9370:23;9366:33;9363:53;;;9412:1;9409;9402:12;9363:53;9452:9;9439:23;9481:18;9522:2;9514:6;9511:14;9508:34;;;9538:1;9535;9528:12;9508:34;9576:6;9565:9;9561:22;9551:32;;9621:7;9614:4;9610:2;9606:13;9602:27;9592:55;;9643:1;9640;9633:12;9592:55;9679:2;9666:16;9701:4;9725:60;9741:43;9781:2;9741:43;:::i;:::-;9725:60;:::i;:::-;9819:15;;;9901:1;9897:10;;;;9889:19;;9885:28;;;9850:12;;;;9925:19;;;9922:39;;;9957:1;9954;9947:12;9922:39;9981:11;;;;10001:142;10017:6;10012:3;10009:15;10001:142;;;10083:17;;10071:30;;10034:12;;;;10121;;;;10001:142;;;10162:5;-1:-1:-1;;10205:18:1;;10192:32;;-1:-1:-1;;10236:16:1;;;10233:36;;;10265:1;10262;10255:12;10233:36;;10304:86;10382:7;10371:8;10360:9;10356:24;10304:86;:::i;:::-;10409:8;;-1:-1:-1;10278:112:1;-1:-1:-1;10463:38:1;;-1:-1:-1;10497:2:1;10482:18;;10463:38;:::i;:::-;9148:1410;;;;-1:-1:-1;9148:1410:1;;10548:2;10533:18;10520:32;;9148:1410;-1:-1:-1;;9148:1410:1:o;10563:752::-;10615:5;10663:4;10651:9;10646:3;10642:19;10638:30;10635:50;;;10681:1;10678;10671:12;10635:50;10714:2;10708:9;10756:4;10748:6;10744:17;10827:6;10815:10;10812:22;10791:18;10779:10;10776:34;10773:62;10770:88;;;10838:18;;:::i;:::-;10874:2;10867:22;10907:6;-1:-1:-1;10907:6:1;10937:23;;10969:33;10937:23;10969:33;:::i;:::-;11011:23;;11086:2;11071:18;;11058:32;11099:33;11058:32;11099:33;:::i;:::-;11160:2;11148:15;;11141:32;11225:2;11210:18;;11197:32;11238:30;11197:32;11238:30;:::i;:::-;11296:2;11284:15;;;;11277:32;10563:752;;-1:-1:-1;;10563:752:1:o;11320:1025::-;11435:6;11443;11496:2;11484:9;11475:7;11471:23;11467:32;11464:52;;;11512:1;11509;11502:12;11464:52;11548:9;11535:23;11525:33;;11577:2;11630;11619:9;11615:18;11602:32;11657:18;11649:6;11646:30;11643:50;;;11689:1;11686;11679:12;11643:50;11712:22;;11765:4;11757:13;;11753:27;-1:-1:-1;11743:55:1;;11794:1;11791;11784:12;11743:55;11830:2;11817:16;11853:60;11869:43;11909:2;11869:43;:::i;11853:60::-;11947:15;;;12009:4;12048:11;;;12040:20;;12036:29;;;11978:12;;;;11935:3;12077:19;;;12074:39;;;12109:1;12106;12099:12;12074:39;12133:11;;;;12153:162;12169:6;12164:3;12161:15;12153:162;;;12235:37;12264:7;12259:3;12235:37;:::i;:::-;12223:50;;12186:12;;;;12293;;;;12153:162;;;12157:3;12334:5;12324:15;;;;;;;11320:1025;;;;;:::o;12350:661::-;12442:6;12450;12458;12466;12474;12527:3;12515:9;12506:7;12502:23;12498:33;12495:53;;;12544:1;12541;12534:12;12495:53;12583:9;12570:23;12602:31;12627:5;12602:31;:::i;:::-;12652:5;-1:-1:-1;12709:2:1;12694:18;;12681:32;12722:33;12681:32;12722:33;:::i;:::-;12774:7;-1:-1:-1;12833:2:1;12818:18;;12805:32;12846:30;12805:32;12846:30;:::i;:::-;12350:661;;;;-1:-1:-1;12895:7:1;;12949:2;12934:18;;12921:32;;-1:-1:-1;13000:3:1;12985:19;12972:33;;12350:661;-1:-1:-1;;12350:661:1:o;13016:156::-;13082:20;;13142:4;13131:16;;13121:27;;13111:55;;13162:1;13159;13152:12;13177:1290;13327:6;13335;13343;13351;13359;13367;13375;13383;13391;13399;13407:7;13416;13470:3;13458:9;13449:7;13445:23;13441:33;13438:53;;;13487:1;13484;13477:12;13438:53;13526:9;13513:23;13545:31;13570:5;13545:31;:::i;:::-;13595:5;-1:-1:-1;13652:2:1;13637:18;;13624:32;13665:33;13624:32;13665:33;:::i;:::-;13717:7;-1:-1:-1;13776:2:1;13761:18;;13748:32;13789:30;13748:32;13789:30;:::i;:::-;13838:7;-1:-1:-1;13892:2:1;13877:18;;13864:32;;-1:-1:-1;13943:3:1;13928:19;;13915:33;;-1:-1:-1;13995:3:1;13980:19;;13967:33;;-1:-1:-1;14052:3:1;14037:19;;14024:33;14066;14024;14066;:::i;:::-;14118:7;-1:-1:-1;14172:3:1;14157:19;;14144:33;;-1:-1:-1;14229:3:1;14214:19;;14201:33;14243:30;14201:33;14243:30;:::i;:::-;14292:7;-1:-1:-1;14318:37:1;14350:3;14335:19;;14318:37;:::i;:::-;14308:47;;14403:3;14392:9;14388:19;14375:33;14364:44;;14456:3;14445:9;14441:19;14428:33;14417:44;;13177:1290;;;;;;;;;;;;;;:::o;14472:816::-;14618:6;14626;14634;14642;14650;14658;14711:3;14699:9;14690:7;14686:23;14682:33;14679:53;;;14728:1;14725;14718:12;14679:53;14764:9;14751:23;14741:33;;14821:2;14810:9;14806:18;14793:32;14783:42;;14876:2;14865:9;14861:18;14848:32;14903:18;14895:6;14892:30;14889:50;;;14935:1;14932;14925:12;14889:50;14974:84;15050:7;15041:6;15030:9;15026:22;14974:84;:::i;:::-;15077:8;;-1:-1:-1;14948:110:1;-1:-1:-1;;15162:2:1;15147:18;;15134:32;15175:31;15134:32;15175:31;:::i;:::-;15225:5;15215:15;;;15277:3;15266:9;15262:19;15249:33;15239:43;;14472:816;;;;;;;;:::o;15293:1146::-;15434:6;15442;15450;15458;15466;15474;15482;15490;15498;15506;15514:7;15568:3;15556:9;15547:7;15543:23;15539:33;15536:53;;;15585:1;15582;15575:12;15536:53;15624:9;15611:23;15643:31;15668:5;15643:31;:::i;:::-;15693:5;-1:-1:-1;15750:2:1;15735:18;;15722:32;15763:30;15722:32;15763:30;:::i;:::-;15812:7;-1:-1:-1;15866:2:1;15851:18;;15838:32;;-1:-1:-1;15917:2:1;15902:18;;15889:32;;-1:-1:-1;15968:3:1;15953:19;;15940:33;;-1:-1:-1;16025:3:1;16010:19;;15997:33;16039;15997;16039;:::i;:::-;16091:7;-1:-1:-1;16145:3:1;16130:19;;16117:33;;-1:-1:-1;16202:3:1;16187:19;;16174:33;16216:30;16174:33;16216:30;:::i;:::-;16265:7;-1:-1:-1;16291:37:1;16323:3;16308:19;;16291:37;:::i;:::-;16281:47;;16375:3;16364:9;16360:19;16347:33;16337:43;;16428:3;16417:9;16413:19;16400:33;16389:44;;15293:1146;;;;;;;;;;;;;;:::o;16444:247::-;16503:6;16556:2;16544:9;16535:7;16531:23;16527:32;16524:52;;;16572:1;16569;16562:12;16524:52;16611:9;16598:23;16630:31;16655:5;16630:31;:::i;16888:747::-;17025:6;17033;17041;17049;17057;17110:3;17098:9;17089:7;17085:23;17081:33;17078:53;;;17127:1;17124;17117:12;17078:53;17163:9;17150:23;17140:33;;17224:2;17213:9;17209:18;17196:32;17251:18;17243:6;17240:30;17237:50;;;17283:1;17280;17273:12;17237:50;17322:84;17398:7;17389:6;17378:9;17374:22;17322:84;:::i;:::-;17425:8;;-1:-1:-1;17296:110:1;-1:-1:-1;;17510:2:1;17495:18;;17482:32;17523:31;17482:32;17523:31;:::i;17861:345::-;18063:2;18045:21;;;18102:2;18082:18;;;18075:30;-1:-1:-1;;;18136:2:1;18121:18;;18114:51;18197:2;18182:18;;17861:345::o;18591:245::-;18658:6;18711:2;18699:9;18690:7;18686:23;18682:32;18679:52;;;18727:1;18724;18717:12;18679:52;18759:9;18753:16;18778:28;18800:5;18778:28;:::i;18841:245::-;18920:6;18928;18981:2;18969:9;18960:7;18956:23;18952:32;18949:52;;;18997:1;18994;18987:12;18949:52;-1:-1:-1;;19020:16:1;;19076:2;19061:18;;;19055:25;19020:16;;19055:25;;-1:-1:-1;18841:245:1:o;19091:399::-;19293:2;19275:21;;;19332:2;19312:18;;;19305:30;19371:34;19366:2;19351:18;;19344:62;-1:-1:-1;;;19437:2:1;19422:18;;19415:33;19480:3;19465:19;;19091:399::o;19495:::-;19697:2;19679:21;;;19736:2;19716:18;;;19709:30;19775:34;19770:2;19755:18;;19748:62;-1:-1:-1;;;19841:2:1;19826:18;;19819:33;19884:3;19869:19;;19495:399::o;19899:127::-;19960:10;19955:3;19951:20;19948:1;19941:31;19991:4;19988:1;19981:15;20015:4;20012:1;20005:15;20031:127;20092:10;20087:3;20083:20;20080:1;20073:31;20123:4;20120:1;20113:15;20147:4;20144:1;20137:15;20163:125;20203:4;20231:1;20228;20225:8;20222:34;;;20236:18;;:::i;:::-;-1:-1:-1;20273:9:1;;20163:125::o;20293:404::-;20495:2;20477:21;;;20534:2;20514:18;;;20507:30;20573:34;20568:2;20553:18;;20546:62;-1:-1:-1;;;20639:2:1;20624:18;;20617:38;20687:3;20672:19;;20293:404::o;20702:385::-;-1:-1:-1;;;;;20954:15:1;;;20936:34;;21006:15;;;;21001:2;20986:18;;20979:43;21065:14;;21058:22;21053:2;21038:18;;21031:50;20886:2;20871:18;;20702:385::o;21092:251::-;21162:6;21215:2;21203:9;21194:7;21190:23;21186:32;21183:52;;;21231:1;21228;21221:12;21183:52;21263:9;21257:16;21282:31;21307:5;21282:31;:::i;21348:184::-;21418:6;21471:2;21459:9;21450:7;21446:23;21442:32;21439:52;;;21487:1;21484;21477:12;21439:52;-1:-1:-1;21510:16:1;;21348:184;-1:-1:-1;21348:184:1:o;21537:168::-;21577:7;21643:1;21639;21635:6;21631:14;21628:1;21625:21;21620:1;21613:9;21606:17;21602:45;21599:71;;;21650:18;;:::i;:::-;-1:-1:-1;21690:9:1;;21537:168::o;21710:217::-;21750:1;21776;21766:132;;21820:10;21815:3;21811:20;21808:1;21801:31;21855:4;21852:1;21845:15;21883:4;21880:1;21873:15;21766:132;-1:-1:-1;21912:9:1;;21710:217::o;24178:188::-;24257:13;;-1:-1:-1;;;;;24299:42:1;;24289:53;;24279:81;;24356:1;24353;24346:12;24371:450;24458:6;24466;24474;24527:2;24515:9;24506:7;24502:23;24498:32;24495:52;;;24543:1;24540;24533:12;24495:52;24566:40;24596:9;24566:40;:::i;:::-;24556:50;;24625:49;24670:2;24659:9;24655:18;24625:49;:::i;:::-;24615:59;;24717:2;24706:9;24702:18;24696:25;24761:10;24754:5;24750:22;24743:5;24740:33;24730:61;;24787:1;24784;24777:12;24826:241;24882:6;24935:2;24923:9;24914:7;24910:23;24906:32;24903:52;;;24951:1;24948;24941:12;24903:52;24990:9;24977:23;25009:28;25031:5;25009:28;:::i;25072:222::-;25153:6;25206:2;25194:9;25185:7;25181:23;25177:32;25174:52;;;25222:1;25219;25212:12;25174:52;25245:43;25280:7;25269:9;25245:43;:::i;25299:350::-;25501:2;25483:21;;;25540:2;25520:18;;;25513:30;25579:28;25574:2;25559:18;;25552:56;25640:2;25625:18;;25299:350::o;25654:128::-;25694:3;25725:1;25721:6;25718:1;25715:13;25712:39;;;25731:18;;:::i;:::-;-1:-1:-1;25767:9:1;;25654:128::o;25787:135::-;25826:3;-1:-1:-1;;25847:17:1;;25844:43;;;25867:18;;:::i;:::-;-1:-1:-1;25914:1:1;25903:13;;25787:135::o;25927:670::-;-1:-1:-1;;;;;26294:15:1;;;26276:34;;26346:15;;;;26341:2;26326:18;;26319:43;26393:2;26378:18;;26371:34;;;;26436:2;26421:18;;26414:34;;;;26497:4;26485:17;26479:3;26464:19;;26457:46;26256:3;26519:19;;26512:35;26578:3;26563:19;;26556:35;;;;26225:3;26210:19;;25927:670::o;26784:258::-;26856:1;26866:113;26880:6;26877:1;26874:13;26866:113;;;26956:11;;;26950:18;26937:11;;;26930:39;26902:2;26895:10;26866:113;;;26997:6;26994:1;26991:13;26988:48;;;-1:-1:-1;;27032:1:1;27014:16;;27007:27;26784:258::o;27047:274::-;27176:3;27214:6;27208:13;27230:53;27276:6;27271:3;27264:4;27256:6;27252:17;27230:53;:::i;:::-;27299:16;;;;;27047:274;-1:-1:-1;;27047:274:1:o;27326:624::-;27557:6;27546:9;27539:25;27600:6;27595:2;27584:9;27580:18;27573:34;27672:1;27668;27663:3;27659:11;27655:19;27647:6;27643:32;27638:2;27627:9;27623:18;27616:60;27712:3;27707:2;27696:9;27692:18;27685:31;27520:4;27745:6;27739:13;27789:6;27783:3;27772:9;27768:19;27761:35;27805:67;27865:6;27859:3;27848:9;27844:19;27839:2;27831:6;27827:15;27805:67;:::i;:::-;27933:2;27912:15;-1:-1:-1;;27908:29:1;27893:45;;;;27940:3;27889:55;;27326:624;-1:-1:-1;;;;;27326:624:1:o

Swarm Source

ipfs://0f3aa645c5b29b4bc05fb1f0d5494f0b22be90e7075d6cf76ff7b5037193f2e1

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.